home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / emacs-19.28-diffs.gz / emacs-19.28-diffs
Text File  |  1996-10-13  |  3MB  |  80,449 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/emacs/Checksums amiga/fsf/emacs/Checksums
  12. --- baseline/fsf/emacs/Checksums    Wed Dec 31 17:00:00 1969
  13. +++ amiga/fsf/emacs/Checksums    Sat Sep 28 00:00:00 1996
  14. @@ -0,0 +1,1052 @@
  15. +-----BEGIN PGP SIGNED MESSAGE-----
  16. +
  17. +These are the md5sum values for the files as I have distributed them.
  18. +If these are not correct, then they have been changed.
  19. +
  20. +47668a0debcdad1aa9eff6406b093af3  Emacs-19.25/cpp/cccp.c!
  21. +c6f445c9d355ae6e542402e1c3a73417  Emacs-19.25/cpp/cexp.tab.c
  22. +88b8a1f708fd39d92d31900958d4c8df  Emacs-19.25/cpp/cexp.y
  23. +51f89457fa2f8f5f94da21c0c214aea2  Emacs-19.25/cpp/lmkfile!
  24. +d41d8cd98f00b204e9800998ecf8427e  Emacs-19.25/cpp/SASCOPTS
  25. +ca4202fbd5c86c59f29c6fa840f7d465  Emacs-19.25/cpp/cccp.c
  26. +e9c388a1876fd32b50230e9e9a0b9327  Emacs-19.25/cpp/lmkfile
  27. +a96ca50dbfb3878cf061ed5589c41878  Emacs-19.25/cpp/SCOPTIONS
  28. +b0e485a86fd1e99e3251ed98c697fd09  Emacs-19.25/cpp/cccp.o
  29. +d40f1980094c2e1ee00ac2d486e11fa1  Emacs-19.25/cpp/cexp.tab.o
  30. +870e119a364e23751c23a23f57365bf7  Emacs-19.25/cpp/cccp.lnk
  31. +821de52876e8f0610db5d72ce609d151  Emacs-19.25/cpp/alloca.o
  32. +49e64df2357874e2a840ac15dba49543  Emacs-19.25/cpp/cccp
  33. +4cc8d9a8cf1eece014a4f1019306f8a3  Emacs-19.25/cpp/cccp.info
  34. +49e64df2357874e2a840ac15dba49543  Emacs-19.25/cpp/cpp
  35. +d41d8cd98f00b204e9800998ecf8427e  Emacs-19.25/etc/DOC-19.25.1
  36. +18810669f13b87348459e611d31ab760  Emacs-19.25/etc/COPYING
  37. +390ba821ef5a2fd874d882663c5748b8  Emacs-19.25/etc/3B-MAXMEM
  38. +8056e89079b8420b81e04711535cd85a  Emacs-19.25/etc/AIX.DUMP
  39. +74c39cb32da1a457b3a66108c25847ba  Emacs-19.25/etc/APPLE
  40. +0c2ed0f903bca0dddfb193b23ad04b76  Emacs-19.25/etc/BABYL
  41. +9b064adb82678e6e89bbf6726f70992a  Emacs-19.25/etc/COOKIES
  42. +35be40426c17f08e93077bb689e0109d  Emacs-19.25/etc/ChangeLog
  43. +da4463a085b74bc7ea6d03a75cd0eb66  Emacs-19.25/etc/DEBUG
  44. +501b6eb78f3f211c0d7f821c04cf9f58  Emacs-19.25/etc/DISTRIB
  45. +138d72f19dc5e5e65b95e65e93839b53  Emacs-19.25/etc/FAQ
  46. +93ee7251b3ab77ef66832846af5468c3  Emacs-19.25/etc/FTP
  47. +60feadeea2f0d0c1a7d124ca681d82c6  Emacs-19.25/etc/GNU
  48. +cef68ee87fcbc261d339b3f8c0aa6ebe  Emacs-19.25/etc/INTERVIEW
  49. +4924b2510a8740650667b5cea0519a02  Emacs-19.25/etc/JOKES
  50. +4b978e06b3c3d0b230231706d23cc506  Emacs-19.25/etc/LEDIT
  51. +e13f930d18bebd794fd6c4f8ba1239b0  Emacs-19.25/etc/LNEWS
  52. +dcf50a86dec83c63e92f3ddc2d23f740  Emacs-19.25/etc/LPF
  53. +79fd007f8358f7af370cc3897ad5c624  Emacs-19.25/etc/MACHINES
  54. +3f30705391bc352121d16fba99bfb5f0  Emacs-19.25/etc/MAILINGLISTS
  55. +ab732308ac4cf1eb253ecf1597f11276  Emacs-19.25/etc/MORE.STUFF
  56. +f6254f4f9b61c5deac9fc5e6c639a87d  Emacs-19.25/etc/MOTIVATION
  57. +9be9621e76047b404fe83c7c9f5f2199  Emacs-19.25/etc/Makefile
  58. +55ac91e9276290cc5da04ddd9dc1e711  Emacs-19.25/etc/NEWS
  59. +b9de9270f0ea351614d271ce1ee01bcb  Emacs-19.25/etc/ONEWS
  60. +0030f55218f3b4bf903357e96dc00366  Emacs-19.25/etc/OONEWS
  61. +a633a48dcdc34ac8ba92af793dc2a207  Emacs-19.25/etc/OOONEWS
  62. +9a8d2689544899845d170a26ca242ff1  Emacs-19.25/etc/OOOONEWS
  63. +073bef60c2493bb43e4e4a1c8b57a202  Emacs-19.25/etc/ORDERS
  64. +1a2588b20df2b0b72772a04cbbc301c1  Emacs-19.25/etc/ORDERS.EUROPE
  65. +2d4e404f94d2fe671deadd40b497864c  Emacs-19.25/etc/ORDERS.JAPAN
  66. +f6d25c2d151da6c8a88d2c88d06b303c  Emacs-19.25/etc/OTHER.EMACSES
  67. +eb248fb14648320774ecae9b6b0ed37f  Emacs-19.25/etc/README
  68. +bcae2c1c2553498e7abe53afd1c33eea  Emacs-19.25/etc/SERVICE
  69. +6fa20aa293859659fe662307b88d0592  Emacs-19.25/etc/SUN-SUPPORT
  70. +b84294439aba36687e42e8ca187b9386  Emacs-19.25/etc/TERMS
  71. +d476970cfd11f8fc83dbfdefaab80d1f  Emacs-19.25/etc/TO-DO
  72. +5df0e6200b8909f2f7a41357be1340b2  Emacs-19.25/etc/TUTORIAL
  73. +837af0cc68ffd9a37ded0ecca5c0881e  Emacs-19.25/etc/Xkeymap.txt
  74. +e1537e769a120907fa467b2d28ced5de  Emacs-19.25/etc/celibacy.1
  75. +ec22355454943c1e6ac3f9bfe9c1b571  Emacs-19.25/etc/condom.1
  76. +a662a113a5a0c550140f0a3ad6660774  Emacs-19.25/etc/copying.paper
  77. +f0935d6e0450ef59c73260177c48f97f  Emacs-19.25/etc/ctags.1
  78. +de23959c1aec0ce3addb2330afec9f5f  Emacs-19.25/etc/echo.msg
  79. +f1842e2f7b6f98216a6978d7136e33e5  Emacs-19.25/etc/emacs.1
  80. +a9db81ed27551ee4692124d9cb9cad1e  Emacs-19.25/etc/emacs.bash
  81. +e78f299421c9413ff7de516091dbb6f8  Emacs-19.25/etc/emacs.csh
  82. +be61ee51053f9e0533ce6096195c1c66  Emacs-19.25/etc/emacs.icon
  83. +48f0d336261f791e6021bc4f1622c953  Emacs-19.25/etc/emacs.xbm
  84. +f58ebed00b22f8cfefb735d1a462bbeb  Emacs-19.25/etc/emacstool.1
  85. +7867eb467eea7f12409f99331904188b  Emacs-19.25/etc/etags.1
  86. +98a2ffe6d74e5da2f0102b34c33c48db  Emacs-19.25/etc/etags.notes
  87. +1070852698ef248ad281da51865ee17e  Emacs-19.25/etc/etags.vms
  88. +eb5cacc0c06917150421bfb811407c7b  Emacs-19.25/etc/ledit.l
  89. +cfbf5c781f45a9ab1011e7eccf5c7063  Emacs-19.25/etc/ms-kermit
  90. +b205e3b256e81e83a7790f7dd35e9a99  Emacs-19.25/etc/ms-kermit-7bit
  91. +04a91547a4cdab2d371e1cadbbead02e  Emacs-19.25/etc/news.texi
  92. +cbbdbc96efd5fbdd037febd44dac0794  Emacs-19.25/etc/refcard.ps
  93. +ca5d6e3307f7600e74b8295ce9e53e3a  Emacs-19.25/etc/refcard.tex
  94. +478b5e267df7e5640461e01e168e054e  Emacs-19.25/etc/sex.6
  95. +bc8c0d657b6825ccb3de5977c8fc8197  Emacs-19.25/etc/spook.lines
  96. +7e03a77f736d29b262667b2626b14dcf  Emacs-19.25/etc/termcap.dat
  97. +f22b3b0e9214815a9881eadaa1e1e2bf  Emacs-19.25/etc/termcap.ucb
  98. +14b4ba3c347a11d41f67d9c0e968f0d6  Emacs-19.25/etc/ulimit.hack
  99. +bd189b96dcae8efd75ef08f88d8c2954  Emacs-19.25/etc/vipcard.tex
  100. +915cff8e06e02e17f24efb8c16ef2879  Emacs-19.25/etc/yow.lines
  101. +d41d8cd98f00b204e9800998ecf8427e  Emacs-19.25/etc/DOC-19.22.0.1
  102. +d41d8cd98f00b204e9800998ecf8427e  Emacs-19.25/etc/DOC-19.25.1.1
  103. +d41d8cd98f00b204e9800998ecf8427e  Emacs-19.25/etc/DOC
  104. +61b39bbe88ebd2cec0d85a6efede6d03  Emacs-19.25/etc/EMACS-DATA
  105. +a0aceb65ccfaddc051d88be150ef3e2c  Emacs-19.25/lib-src/make-docfile.o
  106. +f3d46b05fc5a89b7e7057c23c01a2290  Emacs-19.25/lib-src/alloca.c
  107. +bdbe6b53376efbbaa8ed6e3288a6b0f3  Emacs-19.25/lib-src/b2m.c
  108. +0b1f2127852ac555b18303c4d8356bc5  Emacs-19.25/lib-src/cvtmail.c
  109. +3497531c02622fac219b1eb957c49ffc  Emacs-19.25/lib-src/digest-doc.c
  110. +97d99cac4096c1b0f9d4beb69ebd102c  Emacs-19.25/lib-src/emacsclient.c
  111. +45d07a90a536d3f930d77736659d3dc7  Emacs-19.25/lib-src/emacsserver.c
  112. +516480b44df2164937fae5994c7d03b0  Emacs-19.25/lib-src/emacstool.c
  113. +c4f87096df406cc1018173ab75409ddf  Emacs-19.25/lib-src/env.c
  114. +347f144ed609771acd07fac31639547a  Emacs-19.25/lib-src/etags-vmslib.c
  115. +fd0e38bd4e583d443ac57d3134cdff35  Emacs-19.25/lib-src/etags.c
  116. +0ed81436ad7c9f97fbc761374edf55a0  Emacs-19.25/lib-src/fakemail.c
  117. +520ddba07b6899d3d8547e48358cb4b1  Emacs-19.25/lib-src/getdate.c
  118. +18810669f13b87348459e611d31ab760  Emacs-19.25/lib-src/COPYING
  119. +37da37541919e537a696e5a06f348150  Emacs-19.25/lib-src/getdate.y
  120. +ba374026db3c6818b8e45451a1fb746f  Emacs-19.25/lib-src/getopt.c
  121. +c7498e7c879a84d4f88331501e9f4562  Emacs-19.25/lib-src/getopt.h
  122. +17c139626eb25dba8043b64b4baf7ac2  Emacs-19.25/lib-src/getopt1.c
  123. +580e1749216498834cbaec8328ee07f1  Emacs-19.25/lib-src/hexl.c
  124. +95aa0ca93d65402749196c4ec745b611  Emacs-19.25/lib-src/leditcfns.c
  125. +1e9179d94c50493fcf0e912b4364d9a6  Emacs-19.25/lib-src/make-docfile.c
  126. +2e94288174583203eec15089e1d116b2  Emacs-19.25/lib-src/make-path.c
  127. +7eaaec7bdba404c434572d29a2f528d7  Emacs-19.25/lib-src/movemail.c
  128. +61b0953ffbeb4f24feb09b52be293e4a  Emacs-19.25/lib-src/qsort.c
  129. +c457431990e042a931d21e586540d765  Emacs-19.25/lib-src/sorted-doc.c
  130. +fbeca701bc5c95a0186040466f1ea616  Emacs-19.25/lib-src/tcp.c
  131. +8c360a217f8cf076039924853437f115  Emacs-19.25/lib-src/test-distrib.c
  132. +2d89a27d55460bbaf5daa6730ddd7907  Emacs-19.25/lib-src/timer.c
  133. +43de82be2f823e6e8ddf18c80d32f14c  Emacs-19.25/lib-src/wakeup.c
  134. +f6631fb1954522353a1f2479b631864f  Emacs-19.25/lib-src/yow.c
  135. +c8ab31a11185eb2a86d57ac281f94b8e  Emacs-19.25/lib-src/aixcc.lex
  136. +30f06813bd486edb9a3efa741d9376b7  Emacs-19.25/lib-src/ChangeLog
  137. +5f822ffd30492132284d6e45c4ce8c07  Emacs-19.25/lib-src/Makefile.in
  138. +08f90a9c3fc9a6a6671201d03e993f73  Emacs-19.25/lib-src/README
  139. +bb47916f8aeac0bc4131cc6af8e358d8  Emacs-19.25/lib-src/testfile
  140. +e736e642fa01814d9dfb46dd7d808f20  Emacs-19.25/lib-src/vcdiff
  141. +b2f5a89f3211a76b7f7b6668e8a507fe  Emacs-19.25/lib-src/rcs2log
  142. +e78f299421c9413ff7de516091dbb6f8  Emacs-19.25/lib-src/emacs.csh
  143. +106320171eb08e5dc56619713920c983  Emacs-19.25/lib-src/rcs-checkin
  144. +a96ca50dbfb3878cf061ed5589c41878  Emacs-19.25/lib-src/SCOPTIONS
  145. +da6bfa9a6e75499cfe187b6c06e92727  Emacs-19.25/lib-src/make-docfile.lnk
  146. +71847fb6b4e7a5a77c44fb5b7a2ba32b  Emacs-19.25/lib-src/make-docfile
  147. +dce05bedfa64c6cb1f4ebb0108534317  Emacs-19.25/lib-src/sh.c
  148. +4c159a71247cbc877d858490a827bab6  Emacs-19.25/lisp/term/AT386.el
  149. +c3cef7761b9e8cc1ebd78d980028cfb5  Emacs-19.25/lisp/term/apollo.el
  150. +b5db2fca60f62f55d08a4851e34cd264  Emacs-19.25/lisp/term/bg-mouse.el
  151. +c5860ab4214aa9d2f9bd350b14e96738  Emacs-19.25/lisp/term/bobcat.el
  152. +27c1559a66ede1bf97c49f3fbc024ba9  Emacs-19.25/lisp/term/internal.el
  153. +d0a8d395484fa1bc0d900eb6fab0a28d  Emacs-19.25/lisp/term/keyswap.el
  154. +43186a7f7b08d3d2ea1fb814c7d91a49  Emacs-19.25/lisp/term/lk201.el
  155. +13280113c47b7ec5c6ceb52048179593  Emacs-19.25/lisp/term/news.el
  156. +6afd1a97d5b358404d5ca88f8f023d77  Emacs-19.25/lisp/term/sun-curs.el
  157. +38882cc11795130a6892d0b4ee38b642  Emacs-19.25/lisp/term/sun-fns.el
  158. +21cd14f0ff650ba073e6204ed72d8db1  Emacs-19.25/lisp/term/sun-mouse.el
  159. +6086c5fae4bcd4caf6e317632961da37  Emacs-19.25/lisp/term/sun.el
  160. +bc0e333fe9f0ff48b3b4dfe0b6dd83b9  Emacs-19.25/lisp/term/sup-mouse.el
  161. +4d6bd62718ab540dadb61507c553f198  Emacs-19.25/lisp/term/tvi970.el
  162. +a2b9537e2725a565f935f082dca16486  Emacs-19.25/lisp/term/vt100-led.el
  163. +9cd7c103de9f18a4e0ce2ce753e032e2  Emacs-19.25/lisp/term/vt100.el
  164. +c3cef7761b9e8cc1ebd78d980028cfb5  Emacs-19.25/lisp/term/vt102.el
  165. +c3cef7761b9e8cc1ebd78d980028cfb5  Emacs-19.25/lisp/term/vt125.el
  166. +3a5f7c4adff5509727f3c34f0ff1622d  Emacs-19.25/lisp/term/vt200.el
  167. +e0819f55d2fe6c4251be6e090ee80477  Emacs-19.25/lisp/term/vt201.el
  168. +e0819f55d2fe6c4251be6e090ee80477  Emacs-19.25/lisp/term/vt220.el
  169. +3a5f7c4adff5509727f3c34f0ff1622d  Emacs-19.25/lisp/term/vt240.el
  170. +32a276673af6d546805a584479b37985  Emacs-19.25/lisp/term/vt300.el
  171. +32a276673af6d546805a584479b37985  Emacs-19.25/lisp/term/vt320.el
  172. +32a276673af6d546805a584479b37985  Emacs-19.25/lisp/term/vt400.el
  173. +32a276673af6d546805a584479b37985  Emacs-19.25/lisp/term/vt420.el
  174. +39eb88284762a96d16498bcd5b4afa93  Emacs-19.25/lisp/term/wyse50.el
  175. +34be9081c36512c9c946d38fe97d3c3a  Emacs-19.25/lisp/term/x-win.el
  176. +72c88d8a6657104d8eddd1920e64292a  Emacs-19.25/lisp/term/apollo.elc
  177. +b55978fec560093a053568a51b2dccd1  Emacs-19.25/lisp/term/bg-mouse.elc
  178. +ca5ee32ae8bdaef64514acfbc2653905  Emacs-19.25/lisp/term/news.elc
  179. +e8bf400d52c9249269ac7b2b7cb8c59f  Emacs-19.25/lisp/term/sun-mouse.elc
  180. +c2c25b4a60608eef17d09df1d0dd5595  Emacs-19.25/lisp/term/sun.elc
  181. +05d65a4670205a702d5f3a94f867b23d  Emacs-19.25/lisp/term/sup-mouse.elc
  182. +1eaf525608ae3c42c13196701399d252  Emacs-19.25/lisp/term/tvi970.elc
  183. +931a455e992a2985a60817ca83c2652a  Emacs-19.25/lisp/term/vt100-led.elc
  184. +4baf9fdaa0e484c2ec2dc8b7f105e863  Emacs-19.25/lisp/term/vt100.elc
  185. +d3ad08433239f8119271cd3ee3cfddb4  Emacs-19.25/lisp/term/vt200.elc
  186. +51be5f9fe89550b0a26ddaa14c808173  Emacs-19.25/lisp/term/wyse50.elc
  187. +7c9fceb3d82949c936019faa98186597  Emacs-19.25/lisp/term/x-win.elc
  188. +20d7ca079f0d41fedeb7d5c2681b6e71  Emacs-19.25/lisp/term/README
  189. +2e0033b7a12146d28f16390fc7e4552e  Emacs-19.25/lisp/term/intuition-win.el
  190. +fd91ef19bedd2c8b11e1855a2c4a4780  Emacs-19.25/lisp/abbrev.el
  191. +4293b250b7e3f41df195904357c7eb6a  Emacs-19.25/lisp/abbrevlist.el
  192. +0ba9238136fe72da3a8ebd66b2176ce5  Emacs-19.25/lisp/ada.el
  193. +e1d48fae5009681ff2f32ceb74caddf9  Emacs-19.25/lisp/add-log.el
  194. +96cadf4d5df797f9cbc419fa7b93676a  Emacs-19.25/lisp/advice.el
  195. +f25e3fec368f6dc6d7d997326787c2e2  Emacs-19.25/lisp/allout.el
  196. +6099cd1da3ae727ce79f54a680d531c6  Emacs-19.25/lisp/ange-ftp.el
  197. +fe09570bfbbb5a8bd2d16551f74f004c  Emacs-19.25/lisp/appt.el
  198. +48edff140879c7dc92b7a8e428006700  Emacs-19.25/lisp/apropos.el
  199. +6d53ac5b59fddf17af83c6dd5f636016  Emacs-19.25/lisp/array.el
  200. +e6a760905752a5720fc1303e77529cbf  Emacs-19.25/lisp/asm-mode.el
  201. +64affa955f55284f66cd6e40d6efb59c  Emacs-19.25/lisp/assoc.el
  202. +7c3b53d20c2f62f6a22eab8ee58f1116  Emacs-19.25/lisp/autoinsert.el
  203. +68bcbafed772ee2467bcaf6f2e230438  Emacs-19.25/lisp/autoload.el
  204. +ac3e1f5b4820e0db4217f59e385d27a6  Emacs-19.25/lisp/avoid.el
  205. +e206cd358c9c8a533fec9dc9577580e8  Emacs-19.25/lisp/awk-mode.el
  206. +825bb07efc941f96b0f7362044794c94  Emacs-19.25/lisp/backquote.el
  207. +e7f0fee82adc4c1a65e247e7e6ba5710  Emacs-19.25/lisp/bib-mode.el
  208. +f1195a94d1b7f0750887341bd3749d11  Emacs-19.25/lisp/bibtex.el
  209. +cfed1bd10623d04fccf6d41913d04aa6  Emacs-19.25/lisp/blackbox.el
  210. +717a6c7cc21ff78f44600f9d812eb879  Emacs-19.25/lisp/blessmail.el
  211. +83f1b4d74617420eb73d7845fea279c9  Emacs-19.25/lisp/bookmark.el
  212. +023e5c969f0435fa5f4a10b725ca8517  Emacs-19.25/lisp/buff-menu.el
  213. +a84d4e11f19dc388472dffa6c2cffabe  Emacs-19.25/lisp/byte-opt.el
  214. +4475ae464f196d38a2ba26b398ea6e25  Emacs-19.25/lisp/byte-run.el
  215. +babf3b2d928171e10b4e56fdfc8daf13  Emacs-19.25/lisp/bytecomp.el
  216. +692aea2f36deef1cab46e8aca257b5ff  Emacs-19.25/lisp/c-mode.el
  217. +c4aa75e2811cf3f5403a032885d88b77  Emacs-19.25/lisp/cal-dst.el
  218. +db54103f992d445dd784d1788ecb9a0a  Emacs-19.25/lisp/cal-french.el
  219. +a46a84e77abc00240b3605813a307950  Emacs-19.25/lisp/cal-mayan.el
  220. +5726339cf58b74603a9fbda387d8c812  Emacs-19.25/lisp/cal-menu.el
  221. +b55cea52d239dd1bcf927204d19da1ec  Emacs-19.25/lisp/calendar.el
  222. +7a3f255a36eecca40d8186cb13790e88  Emacs-19.25/lisp/case-table.el
  223. +35690aa959a44333853a59d2604f49f9  Emacs-19.25/lisp/cc-mode.el
  224. +b74e338633bac378d992c3c3d48ced59  Emacs-19.25/lisp/cdl.el
  225. +af5c1949f56ea026bc2b171ca7e7b20f  Emacs-19.25/lisp/chistory.el
  226. +8d6eb65d2e1b885859b434cac7718c3d  Emacs-19.25/lisp/cl-compat.el
  227. +bb02cbf8815d76de88cc9ff4d06f0fb3  Emacs-19.25/lisp/cl-extra.el
  228. +dbb21c6b63e9d8be09a8ca0563c3e100  Emacs-19.25/lisp/cl-indent.el
  229. +abee169f0c1fb7f8640404d6415f74d2  Emacs-19.25/lisp/cl-macs.el
  230. +bd5f910af28dc7e1036faf956393a2cf  Emacs-19.25/lisp/cl-seq.el
  231. +329ffd83315ad605e88995f90090ec95  Emacs-19.25/lisp/cl-specs.el
  232. +0cc7fb3c3e685b7ff3ad76cdd7980930  Emacs-19.25/lisp/cl.el
  233. +b4f10e6419530348561bcc3124492ca8  Emacs-19.25/lisp/cmacexp.el
  234. +02fe83f25012d3815834de012f2bcc36  Emacs-19.25/lisp/cmuscheme.el
  235. +f77084c10b756f815735a23d6ff3bdd7  Emacs-19.25/lisp/comint.el
  236. +1e96298f0a95a193f03fb7f9c413627f  Emacs-19.25/lisp/compare-w.el
  237. +8f9826f06a31e4135e6a064c2f8a3e39  Emacs-19.25/lisp/compile.el
  238. +1524c20eb56f8ddc4fff65321b33374d  Emacs-19.25/lisp/complete.el
  239. +865dc56441221913c5725f6fdcc6fc7b  Emacs-19.25/lisp/completion.el
  240. +26dfe8c47efc0166ca961253866a4d69  Emacs-19.25/lisp/cookie1.el
  241. +dd4b570dd919d769ce14a1dab495fc78  Emacs-19.25/lisp/cplus-md.el
  242. +a2ed3db607227615206d03bf4ccc2d6f  Emacs-19.25/lisp/cust-print.el
  243. +bedfe5646899d465242ea85052476384  Emacs-19.25/lisp/dabbrev.el
  244. +80f72be4c66970b1909017cee0ed84e7  Emacs-19.25/lisp/debug.el
  245. +18810669f13b87348459e611d31ab760  Emacs-19.25/lisp/COPYING
  246. +40d2b9df4be5a9d3ff81194975ca17c7  Emacs-19.25/lisp/delsel.el
  247. +43f91bc111645ad845351ac0bb986c8a  Emacs-19.25/lisp/derived.el
  248. +874df27db2fbc47beefd66f1402e3a5b  Emacs-19.25/lisp/desktop.el
  249. +ed74d2449c014b4e0abe71d062fded2c  Emacs-19.25/lisp/diary-ins.el
  250. +c3fe3d78031aa9ee5aa72cbba1a987fa  Emacs-19.25/lisp/diary.el
  251. +c92288289c360653016683fd9b9cd48a  Emacs-19.25/lisp/diff.el
  252. +c9e59ffb71a5a2437cbe7d38684144f4  Emacs-19.25/lisp/dired-aux.el
  253. +69f815a7b6b5fe2b24eb69381b3f45ac  Emacs-19.25/lisp/dired-x.el
  254. +42852694b1505f29fcf3854b9ab9d8d2  Emacs-19.25/lisp/dired.el
  255. +71e6f84c1be24da57d0f78dc29a08cc0  Emacs-19.25/lisp/disass.el
  256. +56b8507c5f9673b8eba8c86362f7835c  Emacs-19.25/lisp/disp-table.el
  257. +a2c437855a20298a1477a5afa525cbe7  Emacs-19.25/lisp/dissociate.el
  258. +ac864de8b5f0b085f356c3ebcd12863b  Emacs-19.25/lisp/doctor.el
  259. +dc1397c859ff4626d3767fe86913d124  Emacs-19.25/lisp/dos-fns.el
  260. +a61617f0524312e7418ef4449eb55f7f  Emacs-19.25/lisp/double.el
  261. +5bd2da7c8419d285d73e1ab1108919d7  Emacs-19.25/lisp/dunnet.el
  262. +dd8f149e2084e860cef98990c243fcb1  Emacs-19.25/lisp/easymenu.el
  263. +eefef662c954e62f58303d92303a8196  Emacs-19.25/lisp/ebuff-menu.el
  264. +cbb59df5547b8e2c5d8563080458f3ad  Emacs-19.25/lisp/echistory.el
  265. +9b4c7ae6e1b784767977433d2fb1c197  Emacs-19.25/lisp/edebug.el
  266. +35e53176aec0750d6ab436cd4a09da6a  Emacs-19.25/lisp/ediff.el
  267. +3fb56b6e61a848e82f70faa6e71470aa  Emacs-19.25/lisp/edmacro.el
  268. +702da1d521661dc58464f8a41d92a1bd  Emacs-19.25/lisp/edt.el
  269. +c52afdc0d28a3428aa7071eece4c6bfb  Emacs-19.25/lisp/ehelp.el
  270. +db6bfd587268ac73aa2c272a088fea23  Emacs-19.25/lisp/electric.el
  271. +0cca5d45bb9a7c4ac46c82d969ea708f  Emacs-19.25/lisp/emacsbug.el
  272. +76bbbaa5ae76aa073ffb46744f238110  Emacs-19.25/lisp/emerge.el
  273. +341eeebc36a76a063ef0d9a43ce43e8b  Emacs-19.25/lisp/env.el
  274. +2caf144526d59b5c05082181ecd2ffa1  Emacs-19.25/lisp/etags.el
  275. +64a4f4b9821fd0f7500914b6e92cbe2f  Emacs-19.25/lisp/eval-reg.el
  276. +656af6e6d138a04481e2d2a688d0513e  Emacs-19.25/lisp/faces.el
  277. +907accde4cc1bd004c63dc7a516bcfac  Emacs-19.25/lisp/files.el
  278. +4b38dfed0134c1a39290a5b7747cb6d7  Emacs-19.25/lisp/fill.el
  279. +9d18bd40a4926e5a2dd18b9b01fa5279  Emacs-19.25/lisp/find-dired.el
  280. +4afb83e1bd0924b5201577b7d53e32f4  Emacs-19.25/lisp/find-gc.el
  281. +d09023932f3ded42e13849b7f6fde7de  Emacs-19.25/lisp/finder-inf.el
  282. +0302dc5699180b0cf57f960157d56e41  Emacs-19.25/lisp/finder.el
  283. +c40c7b451fabea97d8156ab4b21ae111  Emacs-19.25/lisp/float-sup.el
  284. +c0426ba2ab7349c330d74822c97b0327  Emacs-19.25/lisp/float.el
  285. +607251790fad5a6a1fdc685ee5745bf6  Emacs-19.25/lisp/flow-ctrl.el
  286. +e9f54afc8dd67706cd043b0543f5b4f9  Emacs-19.25/lisp/gnus.el
  287. +d13cbf098e2a9f0479e8bbc7411d45d5  Emacs-19.25/lisp/foldout.el
  288. +49653e69380727d547898b08025340eb  Emacs-19.25/lisp/font-lock.el
  289. +8171cea2009868b0c4e2dede216287e8  Emacs-19.25/lisp/forms-d2.el
  290. +a20ccc446851d26ddcd662a9bf008af6  Emacs-19.25/lisp/forms-pass.el
  291. +7e0a68e7d63e7b73f1c488990303de50  Emacs-19.25/lisp/forms.el
  292. +cd5e693cdae01e6a7160b7825c38806d  Emacs-19.25/lisp/fortran.el
  293. +15e1a0f87e7ceb215b41b89c3605f451  Emacs-19.25/lisp/frame.el
  294. +984e8b9901ebed7db62899badfd90a73  Emacs-19.25/lisp/gnus-uu.el
  295. +7da245ac503cba23ef3d1298eb4720f3  Emacs-19.25/lisp/gnusmail.el
  296. +dfce18cfa8335828dfe2d1c39f30cee3  Emacs-19.25/lisp/gnusmisc.el
  297. +e7a3b403536831576cdd06cfb7a654d9  Emacs-19.25/lisp/gnuspost.el
  298. +cfe424f4b468585b4581ce0dc93fd1a2  Emacs-19.25/lisp/gomoku.el
  299. +2795241cd0c27ceab0587f92d02b2b2b  Emacs-19.25/lisp/gosmacs.el
  300. +35565e3e63adeef449c385253ca53a31  Emacs-19.25/lisp/gud.el
  301. +80ef01bf1be00841648fd70f0caf0a0b  Emacs-19.25/lisp/hanoi.el
  302. +af0cd31abedeeb49ad4aabd8d94c6954  Emacs-19.25/lisp/help-macro.el
  303. +1bf3d2e4bdaf2459f29e16003360303f  Emacs-19.25/lisp/help.el
  304. +6a780a4797b6678801a33f84292cff89  Emacs-19.25/lisp/helper.el
  305. +859464fb8ffb8220bd3b81417b6fe6a7  Emacs-19.25/lisp/hexl.el
  306. +480d67f20dcca37a21f577a1afc2968a  Emacs-19.25/lisp/hideif.el
  307. +ac55fe8827dd360a88f79fe4a46c6e08  Emacs-19.25/lisp/hilit19.el
  308. +522917ea8a15999878ab3466d6232bcb  Emacs-19.25/lisp/hippie-exp.el
  309. +6349776cfeca06f2a3203e0f5e82d0db  Emacs-19.25/lisp/holidays.el
  310. +4179cfebf94ed7cd088616b487bc3be9  Emacs-19.25/lisp/icomplete.el
  311. +73cd07b7201557159bc495e4ff37fcaa  Emacs-19.25/lisp/icon.el
  312. +28d8f5464d1649a2d2d3b8d2cb300127  Emacs-19.25/lisp/ielm.el
  313. +9436bb210cbd41fe17c9d5922e587bec  Emacs-19.25/lisp/imenu.el
  314. +4b287de5bfb7de11e6aa917350c79699  Emacs-19.25/lisp/indent.el
  315. +f5fb48db7b77c674607108f4d256ca69  Emacs-19.25/lisp/inf-lisp.el
  316. +2dd9b41dacc78a3ba0c3ce95840b3795  Emacs-19.25/lisp/info.el
  317. +d55246b06df7cd706419ce73db42db48  Emacs-19.25/lisp/informat.el
  318. +8037cd833312a03af2b9317ac7f676fc  Emacs-19.25/lisp/isearch.el
  319. +ba9105f191c880cce07110eecaf2da9c  Emacs-19.25/lisp/iso-acc.el
  320. +87965e5fcd6f207563c39e0ad11aaf94  Emacs-19.25/lisp/iso-ascii.el
  321. +a6b2a7e26d96e2439b0369b28ea22f1d  Emacs-19.25/lisp/iso-cvt.el
  322. +3f2f33020fe25ad7e56a45357fba5f14  Emacs-19.25/lisp/iso-insert.el
  323. +546c1ed5bdd197c556badd521d89896e  Emacs-19.25/lisp/iso-swed.el
  324. +88b5266658f2c954205a5b05ff5d505d  Emacs-19.25/lisp/iso-syntax.el
  325. +874b4d0bd63b3c41d156e8c3d01c5f2c  Emacs-19.25/lisp/iso-transl.el
  326. +0273e6f6007065c18da213ff6376e3c7  Emacs-19.25/lisp/ispell.el
  327. +4d693d0d5d30a6a32e19a62c299e661b  Emacs-19.25/lisp/ispell4.el
  328. +9d45703fdd75bb03f7ad1892d25999f7  Emacs-19.25/lisp/jka-compr.el
  329. +d46c68c7484e71bc9c76dcc78c1afea6  Emacs-19.25/lisp/kermit.el
  330. +cdd4b50f8071df40c0c38213706a25fb  Emacs-19.25/lisp/ledit.el
  331. +e15ca10e33954cef8411d1181da140f0  Emacs-19.25/lisp/levents.el
  332. +b0340f650356e4724f12741bd29bad5d  Emacs-19.25/lisp/life.el
  333. +0903df916b705db7abcbd91fc84ff82e  Emacs-19.25/lisp/lisp-mnt.el
  334. +5f22d51517ed650e673d6d10be932fd4  Emacs-19.25/lisp/lisp-mode.el
  335. +c03c368d98069824e6877c4513451918  Emacs-19.25/lisp/lisp.el
  336. +043e15d2f13f496c794b33ad9831dbe2  Emacs-19.25/lisp/lmenu.el
  337. +39543415e8052ea9b72714c4e9018945  Emacs-19.25/lisp/loaddefs.el
  338. +121fec89f54860b5beb4133d8f9d256d  Emacs-19.25/lisp/loadhist.el
  339. +523b9940e08fe067b17d79e79792cd01  Emacs-19.25/lisp/loadup.el
  340. +e37e1e647d4f577f9063f01a7e35f78d  Emacs-19.25/lisp/lpr.el
  341. +741c474a2d583805c3ad0e5dda3656eb  Emacs-19.25/lisp/ls-lisp.el
  342. +35be770fe0d1cda830d39a069bb8776d  Emacs-19.25/lisp/lselect.el
  343. +d8c276eae6d85cfa63d2687ca93f877c  Emacs-19.25/lisp/lucid.el
  344. +e4dc353948875e9926b4378eb84ab308  Emacs-19.25/lisp/lunar.el
  345. +306cfa6dfdeeb6cfbb5bd13ed6cb9a57  Emacs-19.25/lisp/macros.el
  346. +5a7bee866250b697793f4045a5daaacc  Emacs-19.25/lisp/mail-extr.el
  347. +28c961e81aafb264fccfbea5de0f6267  Emacs-19.25/lisp/mail-hist.el
  348. +4f62333abf1ba1b3c08ba758c87ae1a5  Emacs-19.25/lisp/mail-utils.el
  349. +fc84407f359efa38213dd3ed42586f40  Emacs-19.25/lisp/mailabbrev.el
  350. +a900ed2811142599bf052462a0b62ec7  Emacs-19.25/lisp/mailalias.el
  351. +972827b147a817b5fd6d51fef08699ba  Emacs-19.25/lisp/mailpost.el
  352. +f949e93a14112d5d19426cd8d23a3ea0  Emacs-19.25/lisp/makefile.el
  353. +cd495234807136504c81fb2f4a8383f2  Emacs-19.25/lisp/makeinfo.el
  354. +8b2d0ed663b70a154bbb10679d0c451f  Emacs-19.25/lisp/makesum.el
  355. +14853e71f53f6602cd65d624c5e2c4cb  Emacs-19.25/lisp/man.el
  356. +c1d5b843c36e0693d9f1e4646bd67311  Emacs-19.25/lisp/map-ynp.el
  357. +29c716057fb538575f7edf2a62043aff  Emacs-19.25/lisp/medit.el
  358. +6c34c9cec465335fcf5a33c119beca2b  Emacs-19.25/lisp/meese.el
  359. +75bf04b45e564d869788a58dd6ef1d18  Emacs-19.25/lisp/menu-bar.el
  360. +370b740d859ded8d1585629807ef7e9f  Emacs-19.25/lisp/metamail.el
  361. +d9f12c265d0afca6f3719b7e12b67af6  Emacs-19.25/lisp/mh-comp.el
  362. +4514c29493565188f454d337a71fd245  Emacs-19.25/lisp/mh-e.el
  363. +7b0c5ecda31ba7bc9143359e950c3c5f  Emacs-19.25/lisp/mh-funcs.el
  364. +ba9df54c5a6dbb65d97eb72a913bb518  Emacs-19.25/lisp/mh-mime.el
  365. +8def78c070881feb02e6b04e23de9513  Emacs-19.25/lisp/mh-pick.el
  366. +194329e5fefc8cf3ee00975735ed0d09  Emacs-19.25/lisp/mh-seq.el
  367. +635dfc55ae9ba26f65819e2168e6d922  Emacs-19.25/lisp/mh-utils.el
  368. +b986464e3b61c6702c7c743a13438d23  Emacs-19.25/lisp/mhspool.el
  369. +f50641e25696fbeba44062a551f5e661  Emacs-19.25/lisp/mim-mode.el
  370. +012e7a905eed70359b21fd30cfb5afa9  Emacs-19.25/lisp/mim-syntax.el
  371. +e9991fde218906787aea41a0142f4042  Emacs-19.25/lisp/misc.el
  372. +eba930dfccef1c9f9b58f4ddfd3c98a3  Emacs-19.25/lisp/mlconvert.el
  373. +d5a9104930fd59a5df5dbc8e2789b669  Emacs-19.25/lisp/mldrag.el
  374. +d7047482c7c1badc5d1e76fe19fc6bff  Emacs-19.25/lisp/mlsupport.el
  375. +178dcd397b76e546d36aa8d1af190016  Emacs-19.25/lisp/modula2.el
  376. +a340498b13759932cfb410033c7732ef  Emacs-19.25/lisp/mouse-sel.el
  377. +95165f39a8a7536e615580d48b266097  Emacs-19.25/lisp/mouse.el
  378. +42f3d0ecfa87aadb2c968cc2b7ffc23e  Emacs-19.25/lisp/mpuz.el
  379. +78c1125b8438f2e35ab34d335094154a  Emacs-19.25/lisp/netunam.el
  380. +63da0f25588daab208d650c1c0608fd8  Emacs-19.25/lisp/nnspool.el
  381. +9015d3f8ffbab2a2e3b54d9f30cbde5a  Emacs-19.25/lisp/nntp.el
  382. +72209721458dc21cdf1dba460da467c8  Emacs-19.25/lisp/novice.el
  383. +4e3d3f00e6e42c1d0f2675aa103b42a6  Emacs-19.25/lisp/nroff-mode.el
  384. +85eda2aa20835c25995655255f36bbbb  Emacs-19.25/lisp/options.el
  385. +b95af9554f8c18f43deab44aa8c6cfa4  Emacs-19.25/lisp/outline.el
  386. +fcb70c436618bd0a8046feb42873bd67  Emacs-19.25/lisp/page-ext.el
  387. +5c6ae4a31d0678916c91cefff736b8bd  Emacs-19.25/lisp/page.el
  388. +b92c3957db7e5cea3075b0c789915788  Emacs-19.25/lisp/paragraphs.el
  389. +95327c46e255332c712c0755d0cf1548  Emacs-19.25/lisp/paren.el
  390. +13adfb055a675062b4964c646ed7d9cc  Emacs-19.25/lisp/pascal.el
  391. +39d957968f4e5d6bc962857a3b1300ba  Emacs-19.25/lisp/paths.el
  392. +79e0b0750339ac4887a44cd47b66348e  Emacs-19.25/lisp/perl-mode.el
  393. +bc4afe1459a6a54654f35b6bd0b34a62  Emacs-19.25/lisp/picture.el
  394. +5fcf83083f69c35278c571cc7712e8d2  Emacs-19.25/lisp/pp.el
  395. +9be17a5500e968ac29f482c0c4646ef3  Emacs-19.25/lisp/profile.el
  396. +e4b99d8da2eb7159623328d800bdad4b  Emacs-19.25/lisp/prolog.el
  397. +b18a8a4ddbe8354074d1e20bddde990d  Emacs-19.25/lisp/rcompile.el
  398. +2ba841611a6aa45f10db62d4674fcfc9  Emacs-19.25/lisp/rect.el
  399. +833abfad79c501ba04e06541aab04bd1  Emacs-19.25/lisp/refbib.el
  400. +b249317fa17db413f11e2753306af067  Emacs-19.25/lisp/refer.el
  401. +77f4babe4f64ea9c5ac179bbe2dd4fca  Emacs-19.25/lisp/regi.el
  402. +d7ec6bd4e535dcb9f9f41983a8460641  Emacs-19.25/lisp/register.el
  403. +7b10a477dffb4686eaa851f46d47598b  Emacs-19.25/lisp/replace.el
  404. +fdb76f7c74e36985b63236e94ee2e56f  Emacs-19.25/lisp/reporter.el
  405. +fe3c318683f2c1cddd741f2b3b2a15ac  Emacs-19.25/lisp/reposition.el
  406. +0f0bc7323a8c580e8910c0c0294253c7  Emacs-19.25/lisp/resume.el
  407. +e65baa77d9c799117a1bed1f0c93cc06  Emacs-19.25/lisp/rfc822.el
  408. +b6db03df138b605fe2949b8421c1e545  Emacs-19.25/lisp/ring.el
  409. +809d2c3e7e99cad41169041f4d80e5e3  Emacs-19.25/lisp/rlogin.el
  410. +cbe464264eb60ab353e966ddbf6ff26d  Emacs-19.25/lisp/rmail.el
  411. +b1fa34d69f6791fade986d48bf3d1d38  Emacs-19.25/lisp/rmailkwd.el
  412. +4152f6c3dedb2b131e1a40da129b2b6c  Emacs-19.25/lisp/rmailedit.el
  413. +16145c21e2e77f067d69108af7c5277a  Emacs-19.25/lisp/rmailmsc.el
  414. +b21d04f257e1981674fd272bc5f6887e  Emacs-19.25/lisp/rmailout.el
  415. +e5bcaf62213a8ff44f82e415a45c6872  Emacs-19.25/lisp/rmailsort.el
  416. +5808b52071f668561dd06e8ba4207947  Emacs-19.25/lisp/rmailsum.el
  417. +790683d7212efcd3117b45806156a3f4  Emacs-19.25/lisp/rnews.el
  418. +aaa11b287671092d47f190e2c5460076  Emacs-19.25/lisp/rnewspost.el
  419. +5be69aaea0e06f28915b872f14b952a5  Emacs-19.25/lisp/rot13.el
  420. +8b4e5b6eea5d2c3eb4a812742a133eb3  Emacs-19.25/lisp/rsz-mini.el
  421. +2dd90942103b0764d1f7f677168a3470  Emacs-19.25/lisp/s-region.el
  422. +d5b491d26ac5557fa1081f26dbdc7841  Emacs-19.25/lisp/saveplace.el
  423. +02ca68fbbafb1fe003182cb9144b3432  Emacs-19.25/lisp/sc.el
  424. +1605fe4e4af5237290b5485aaa9c1fd2  Emacs-19.25/lisp/scheme.el
  425. +4dd158479892b81573d0f09d7f3386d1  Emacs-19.25/lisp/scribe.el
  426. +9ad4d0b15042f698bbb76b05b4a51965  Emacs-19.25/lisp/scroll-bar.el
  427. +5287c2f2d70e1da593ab5d6476c0039c  Emacs-19.25/lisp/select.el
  428. +832bee7e5cba1c670e969e08477d6131  Emacs-19.25/lisp/sendmail.el!
  429. +23027a05cc7e2a4cd06b6fe185a94a0d  Emacs-19.25/lisp/server.el
  430. +1c0a3628ba0f11d873c2aea70705d912  Emacs-19.25/lisp/sgml-mode.el
  431. +ffe5f694032e2038b169ca1a98c17066  Emacs-19.25/lisp/sh-script.el
  432. +a528133c3e1fe47fe60744caef7337b6  Emacs-19.25/lisp/shadowfile.el
  433. +ac70f7932cb727700e5c96145e9eb04c  Emacs-19.25/lisp/shell.el
  434. +83937695a10f85ca083a72bf874ff8d1  Emacs-19.25/lisp/simple.el!
  435. +0df81d5c15e26a06be5c90b43d32699c  Emacs-19.25/lisp/simula.el
  436. +5af5e9fcddc165673852bd7e56c7217f  Emacs-19.25/lisp/soundex.el
  437. +a13df48efcdf8ab9acc7181746ec8380  Emacs-19.25/lisp/skeleton.el
  438. +f5521853e2a7cd77b1384e66fa5a785a  Emacs-19.25/lisp/solar.el
  439. +5cf3b8c45c58432c9dccafec67d20bc9  Emacs-19.25/lisp/sort.el
  440. +5915bdb051e73cedee978ff71fc9ef1c  Emacs-19.25/lisp/startup.el
  441. +be54309f2f830697890f98609097c65d  Emacs-19.25/lisp/spell.el
  442. +8a68089fbb122752f2cba5ddb27bd2aa  Emacs-19.25/lisp/spook.el
  443. +0346b57d21f790d0167fa192bff5e80a  Emacs-19.25/lisp/tex-mode.el
  444. +59b8a1ecf5a83b003795c8e62d736b4c  Emacs-19.25/lisp/studly.el
  445. +97a3a156d14617fa3fc44746b6a8b854  Emacs-19.25/lisp/subr.el
  446. +6afd1a97d5b358404d5ca88f8f023d77  Emacs-19.25/lisp/sun-curs.el
  447. +38882cc11795130a6892d0b4ee38b642  Emacs-19.25/lisp/sun-fns.el
  448. +9c1266e62fed824174d805c7272f7ac9  Emacs-19.25/lisp/supercite.el
  449. +ab860e12a56846fc0f64ea7fef282ff1  Emacs-19.25/lisp/swedish.el
  450. +ff8c18a98cb1c40d226d9d5a54e5d616  Emacs-19.25/lisp/tabify.el
  451. +35db5c9215b9d2a7b11f05b9a6e1e630  Emacs-19.25/lisp/tar-mode.el
  452. +eed73dde31bf9e15b0098bb40d296f71  Emacs-19.25/lisp/tcl-mode.el
  453. +44dce30c57635eaa046690a80298503a  Emacs-19.25/lisp/tcp.el
  454. +e7c3c5489ee43eed6c1e152a09135203  Emacs-19.25/lisp/telnet.el
  455. +773fe696206737d36d4193f6f084e068  Emacs-19.25/lisp/tempo.el
  456. +abdd4c8134c23f73f07255d99e890a00  Emacs-19.25/lisp/term-nasty.el
  457. +743c570f2e7e732285b4717eb6ba3dcb  Emacs-19.25/lisp/terminal.el
  458. +14bb8ec3f85d31bfd1d0b8e9b8a2a1fa  Emacs-19.25/lisp/vc-hooks.el
  459. +4e8e4f53001b97eee1623b58e709f587  Emacs-19.25/lisp/texinfmt.el
  460. +650082c788c8c4dad2847c112def681d  Emacs-19.25/lisp/texinfo.el
  461. +d1da55aaacdfd884d5c6111bcdc6a06b  Emacs-19.25/lisp/texnfo-upd.el
  462. +efea5eddb46cf3b9d7c5402e2cf5a84e  Emacs-19.25/lisp/text-mode.el
  463. +827a8d7a318a4923dedf39e9938bbb58  Emacs-19.25/lisp/thingatpt.el
  464. +81f46abec3fd2ecdcd587ea5f679b97d  Emacs-19.25/lisp/time-stamp.el
  465. +dbb4bf417276f61baaaae71163d09d4b  Emacs-19.25/lisp/time.el
  466. +196055a3b746a3553ed37ee424ee81b7  Emacs-19.25/lisp/timer.el
  467. +909f4cc72449ba9ece91e2c3b4f2ac5d  Emacs-19.25/lisp/timezone.el
  468. +8cf099502b6fafa8504fcacb358462cf  Emacs-19.25/lisp/tpu-doc.el
  469. +e9c01c5cd349a12c22835b3e8d7202fa  Emacs-19.25/lisp/tpu-edt.el
  470. +bf6f0170a9fa60ebe9a78d34a8ba882a  Emacs-19.25/lisp/tpu-extras.el
  471. +02252897ef9339a5f8221f4f40d205cf  Emacs-19.25/lisp/tpu-mapper.el
  472. +a3d3e4d755cff4e833f23a3ef91cf212  Emacs-19.25/lisp/tq.el
  473. +d831ce0fbe18742157a298d5451ba23d  Emacs-19.25/lisp/trace.el
  474. +45592268004aa2e2bb74ff3bd95e64b6  Emacs-19.25/lisp/two-column.el
  475. +b78c7e43e09b5473847b513a3db955bf  Emacs-19.25/lisp/uncompress.el
  476. +f7d9233627dba45d613ec77b9f410ff2  Emacs-19.25/lisp/underline.el
  477. +21bdcfc24b6e385d51de656f5065ae83  Emacs-19.25/lisp/undigest.el
  478. +8568db13eddbf688db6272dd3e1661b0  Emacs-19.25/lisp/unrmail.el
  479. +8b7e041ebe192006c10b628ef5406fde  Emacs-19.25/lisp/unused.el
  480. +4a5606b8b446ea75b8aeeb940a8f1544  Emacs-19.25/lisp/upd-copyr.el
  481. +3c48a53a00fe69529e21c216af000cd6  Emacs-19.25/lisp/userlock.el
  482. +7e675f3ae639e9f66898d0e6b7688eb6  Emacs-19.25/lisp/vip.el
  483. +cedba72714ca14f79398d9d046d6d123  Emacs-19.25/lisp/vc.el
  484. +4df10e4c8ec13820948d97b0e6737e2c  Emacs-19.25/lisp/version.el
  485. +803484825769311c8033b27a0e1af39d  Emacs-19.25/lisp/vi.el
  486. +9e2edf8df8fd7d155e5ddb1c1a72823b  Emacs-19.25/lisp/view.el
  487. +4cf74ff1d5f78d8a94dee0506cdafda3  Emacs-19.25/lisp/vms-patch.el
  488. +07ea37a53dd027cd2f95462b31f49f55  Emacs-19.25/lisp/vms-pmail.el
  489. +4945c8682698551c38c3076a61ed3fe5  Emacs-19.25/lisp/vmsproc.el
  490. +fecbb9b30fa96933616c45a27e8ed9a3  Emacs-19.25/lisp/vmsx.el
  491. +10333bb65da1e0b3bf6b12411d30ed83  Emacs-19.25/lisp/vt-control.el
  492. +a2b9537e2725a565f935f082dca16486  Emacs-19.25/lisp/vt100-led.el
  493. +1047e8066029f5190ac8e34b9bd950de  Emacs-19.25/lisp/window.el
  494. +5523aa20692a6dfa0350e5b654a35dd1  Emacs-19.25/lisp/ws-mode.el
  495. +e1070c0dde3bdeb7f1916bab8ae3371b  Emacs-19.25/lisp/x-menu.el
  496. +790c852728d5ea43f366121e967e3781  Emacs-19.25/lisp/xscheme.el
  497. +885cdfabb1eef8a78f3c2270d62bdb48  Emacs-19.25/lisp/yow.el
  498. +d215b28a1d6594eeb2c9b2b5e4c3b515  Emacs-19.25/lisp/abbrev.elc
  499. +94379c6314810fa68dd4397080ea6305  Emacs-19.25/lisp/ada.elc
  500. +22c44ef18848b1dc350370c5827a7cfd  Emacs-19.25/lisp/add-log.elc
  501. +4d7ca9f68c2675945203c5eb0b64dd65  Emacs-19.25/lisp/advice.elc
  502. +480c510eb40635f80fd10ff6c4b32c46  Emacs-19.25/lisp/allout.elc
  503. +c9b847c802b7f1ef47a50ee46a8e29f9  Emacs-19.25/lisp/ange-ftp.elc
  504. +544376e7697e0ab75bffb3cd69b118bd  Emacs-19.25/lisp/appt.elc
  505. +2cdb11261e0a63cef71aff2f667e3cae  Emacs-19.25/lisp/apropos.elc
  506. +fe03c3b1136bf73c96e109fa117221f5  Emacs-19.25/lisp/array.elc
  507. +a887aa319fea3da70fd924ab5fea5b9a  Emacs-19.25/lisp/asm-mode.elc
  508. +946fcd3151254ec65a9b1528d4ea3be6  Emacs-19.25/lisp/assoc.elc
  509. +30269433d9a30d428a5612f765a2be87  Emacs-19.25/lisp/autoinsert.elc
  510. +013a576de022fb890c8eed71ce038ec3  Emacs-19.25/lisp/autoload.elc
  511. +0d44251b19d8b265ec81205af5de4857  Emacs-19.25/lisp/avoid.elc
  512. +5bb92d51232bb3306625b9bef3e2e22e  Emacs-19.25/lisp/awk-mode.elc
  513. +5a9391ca237bd5726b93208b7280d987  Emacs-19.25/lisp/backquote.elc
  514. +dfb0d45cceff4eefe8499702511f0451  Emacs-19.25/lisp/bib-mode.elc
  515. +b920568c3794eb1d8c7bae3be4a1e5ca  Emacs-19.25/lisp/bibtex.elc
  516. +cb7626fb2ac1e409e3b4de2451b382e2  Emacs-19.25/lisp/blackbox.elc
  517. +5b6a333eb34f418c4f95912d0baa7c6f  Emacs-19.25/lisp/bookmark.elc
  518. +0d967713ae6a3437656fd435306612f5  Emacs-19.25/lisp/buff-menu.elc
  519. +9d180c1af30d8e6aa62c086d5f11e5f3  Emacs-19.25/lisp/byte-opt.elc
  520. +5fbef93185b51a4e2cba85ed9ae9a87b  Emacs-19.25/lisp/byte-run.elc
  521. +2bd66df8abf21551050cd0522d9ba28a  Emacs-19.25/lisp/bytecomp.elc
  522. +4b11ca22b97f03e2aa24245b2044d2e5  Emacs-19.25/lisp/c-mode.elc
  523. +da14c96d4959974b011c7bda2e0ac723  Emacs-19.25/lisp/cal-dst.elc
  524. +43bdc7618830e556d9d27954ff5305c0  Emacs-19.25/lisp/cal-french.elc
  525. +2abe6bd5fe3f7132632fa7f314311e39  Emacs-19.25/lisp/cal-mayan.elc
  526. +2b9d6f401ca0b110643fec259cefbf2b  Emacs-19.25/lisp/calendar.elc
  527. +4b2c3e208f82f4fd6978053c88589c8d  Emacs-19.25/lisp/case-table.elc
  528. +52987411793e039112c062adb18f675b  Emacs-19.25/lisp/cc-mode.elc
  529. +5b84f762669f9413233acf4a606eb1c9  Emacs-19.25/lisp/chistory.elc
  530. +0b80c58da1eacebd86446e350f3466d8  Emacs-19.25/lisp/cl-compat.elc
  531. +8ee2b92504ca78dee5b66ca8121460f8  Emacs-19.25/lisp/cl-extra.elc
  532. +4a0cf9bf5f9335112d1b3a79b064c6e6  Emacs-19.25/lisp/cl-indent.elc
  533. +0410f123c0018c09cf55564cf047842f  Emacs-19.25/lisp/cl.elc
  534. +eb88a208dc3ba2d0972f20366ecba995  Emacs-19.25/lisp/cl-macs.elc
  535. +eb25dab7648251733ac7380e443a20ee  Emacs-19.25/lisp/cl-seq.elc
  536. +72a5184f2f3fbd3f1cfb06e00fb17ddf  Emacs-19.25/lisp/cmacexp.elc
  537. +9876b4363e93e4a8e88bbd352d9ce9c9  Emacs-19.25/lisp/cmuscheme.elc
  538. +b527aeaa8b4b2427177d27d803de40bf  Emacs-19.25/lisp/comint.elc
  539. +ea135487a521ab9ffb95350b9eea2ab1  Emacs-19.25/lisp/compare-w.elc
  540. +e975082fc0f169d22343c0ef85f111cb  Emacs-19.25/lisp/compile.elc
  541. +05c6879f16eb181017d535b1d6286482  Emacs-19.25/lisp/complete.elc
  542. +9f53bab83cd50d072fd24e0ed860bf96  Emacs-19.25/lisp/completion.elc
  543. +0c232ad74543f3381400d68b1bbd0ce7  Emacs-19.25/lisp/cookie1.elc
  544. +c0400b213ac141312af4b917ea82a574  Emacs-19.25/lisp/cplus-md.elc
  545. +607a9638d9d5c78ff2578e3d7b24d024  Emacs-19.25/lisp/cust-print.elc
  546. +280d5d621e1b2af30a344946f6e6c8f5  Emacs-19.25/lisp/dabbrev.elc
  547. +f7649935bd0fdf965a04009161bfe275  Emacs-19.25/lisp/debug.elc
  548. +3f5284bd0933b1e00b527c6649a6b968  Emacs-19.25/lisp/delsel.elc
  549. +d48fa4e38376cf655cb531ec0402eb8d  Emacs-19.25/lisp/derived.elc
  550. +23789601c155b0b60c57ed62a4230aa9  Emacs-19.25/lisp/desktop.elc
  551. +f7d5655f2ee4fff188c60307b6239815  Emacs-19.25/lisp/diary-ins.elc
  552. +5ca8545f4d35d35270458c98f0d67781  Emacs-19.25/lisp/diary.elc
  553. +01c2004c3876e2c2a1a5079d01b28540  Emacs-19.25/lisp/diff.elc
  554. +ab68f5de7b545baed5fa3784c47fe790  Emacs-19.25/lisp/dired-x.elc
  555. +348d07df183cd76fadba879e11ba9303  Emacs-19.25/lisp/dired-aux.elc
  556. +b3d2defa03137543f096299e989840fb  Emacs-19.25/lisp/dired.elc
  557. +082e74efa72f79d885f01832b82b3392  Emacs-19.25/lisp/disass.elc
  558. +98634ea7d6ba03a2076c5fbcc4932615  Emacs-19.25/lisp/disp-table.elc
  559. +ca7add87c19a156018d26770603ebbc0  Emacs-19.25/lisp/dissociate.elc
  560. +a637da3bc76f5b7894c4a984bdf0ff3b  Emacs-19.25/lisp/doctor.elc
  561. +0eaa4256b19b1f5a48e2e012d655930a  Emacs-19.25/lisp/dos-fns.elc
  562. +13d55ca6168da3040952baf4d8f7c488  Emacs-19.25/lisp/double.elc
  563. +a7c0f8cda55d711ef70d18c511a95623  Emacs-19.25/lisp/dunnet.elc
  564. +6cfa63dfa4488ad1e1baf33c1a6ee1ed  Emacs-19.25/lisp/easymenu.elc
  565. +05a3fe33373715eea3b862da3d964b56  Emacs-19.25/lisp/ebuff-menu.elc
  566. +1c9e1c8276465d1e02acad2e7a60a4c0  Emacs-19.25/lisp/echistory.elc
  567. +59418375135be73d458fb7157cb2595e  Emacs-19.25/lisp/edebug.elc
  568. +2d32219ffd8f1194571a1697b810ce62  Emacs-19.25/lisp/ediff.elc
  569. +9de0062aaa2436f91a30d7da0a56b102  Emacs-19.25/lisp/edmacro.elc
  570. +53fb8ba264c7880faec28e86baae1993  Emacs-19.25/lisp/edt.elc
  571. +1e5bac299ddede32b83b0da5690ef7d5  Emacs-19.25/lisp/ehelp.elc
  572. +840039d66af78c98aa54960102d1b2f2  Emacs-19.25/lisp/electric.elc
  573. +ec275dbae2e6e83fd734ba45d4485ae2  Emacs-19.25/lisp/emacsbug.elc
  574. +c53ccb538cc0b3de06cee170b1776e87  Emacs-19.25/lisp/emerge.elc
  575. +598ee93164494f7cc513043dfaf5aa21  Emacs-19.25/lisp/env.elc
  576. +bf67d078f714a8bbb94e67fe9d56baf8  Emacs-19.25/lisp/etags.elc
  577. +655ac85234852acdc53fc98c874d6516  Emacs-19.25/lisp/eval-reg.elc
  578. +97fe79bc8010828bf0ecdd9f25c179b3  Emacs-19.25/lisp/faces.elc
  579. +f0e3dfb2c21a8cc4088ebecdcadf8e1a  Emacs-19.25/lisp/files.elc
  580. +a8f3b03a31c226c794273c45927e8315  Emacs-19.25/lisp/fill.elc
  581. +85c5fdb9da640dab6c000c3dc2694b15  Emacs-19.25/lisp/find-dired.elc
  582. +b3e17eaf8439ac8d175bb668841b71ca  Emacs-19.25/lisp/find-gc.elc
  583. +39eab2fa809e84843e530d20d2b7f906  Emacs-19.25/lisp/finder-inf.elc
  584. +edcdad91a899ceec267c48c6f9c226b0  Emacs-19.25/lisp/finder.elc
  585. +d4f9d1b2832dea5cfb172d54dc05d5c8  Emacs-19.25/lisp/float-sup.elc
  586. +e9f004b9703199fef15fc1e578b61b7c  Emacs-19.25/lisp/float.elc
  587. +abbb80d50d7d993b9d1d1b7b9ff6dbd0  Emacs-19.25/lisp/flow-ctrl.elc
  588. +3d5b03dfac26422ecf76dfb804acac73  Emacs-19.25/lisp/font-lock.elc
  589. +9848e74def36d6562d8d32aeca742749  Emacs-19.25/lisp/forms-d2.elc
  590. +c81bcb20190be330bb925ada6d2b946a  Emacs-19.25/lisp/forms-pass.elc
  591. +7059eefd130929fb8c030339f1b4601e  Emacs-19.25/lisp/forms.elc
  592. +1bbb4e2246dffe114ea70e7d9388e7ab  Emacs-19.25/lisp/fortran.elc
  593. +99b19173dba65ae71290a80aca0a4714  Emacs-19.25/lisp/frame.elc
  594. +624ee329c14e3a91d5d1348a2a4d72b3  Emacs-19.25/lisp/gnus-uu.elc
  595. +697af50630bc432fa8a8aa48856e6f33  Emacs-19.25/lisp/gnus.elc
  596. +4eb228e56d4305d7cfda6791755f760a  Emacs-19.25/lisp/gnusmail.elc
  597. +db0e435600a22f997f1e852195285cd2  Emacs-19.25/lisp/gnusmisc.elc
  598. +4699cf113b700a8e6f0d145a7f00cf32  Emacs-19.25/lisp/gnuspost.elc
  599. +ab02afd14bad48448ef0fc940d57ee56  Emacs-19.25/lisp/gomoku.elc
  600. +eba9acb29e6b527821181798532b6c81  Emacs-19.25/lisp/gosmacs.elc
  601. +ca1ea9ca9b7ac556293e5cbe3b5e0e96  Emacs-19.25/lisp/gud.elc
  602. +b6db7c91ee5288ef9c680d6d80a3a927  Emacs-19.25/lisp/lpr.elc
  603. +0b2ecc4cfe4a99c5ecd19afc7fb1800d  Emacs-19.25/lisp/hanoi.elc
  604. +9ad4a14038e5e149f2c5b56e4983147e  Emacs-19.25/lisp/help-macro.elc
  605. +ff1668f9f879a69cfb0512f49c62b349  Emacs-19.25/lisp/help.elc
  606. +f733f5bece43b5876319e5b9c73dd5dd  Emacs-19.25/lisp/helper.elc
  607. +d08e703a69bd5b0a861e887c24498434  Emacs-19.25/lisp/hexl.elc
  608. +1c660a2efb646f7247c3c6f0c112e6f2  Emacs-19.25/lisp/hideif.elc
  609. +02d41741509df5f829af5a9bdd1b9c35  Emacs-19.25/lisp/hilit19.elc
  610. +fbf9c6a0809e3119247e4068222353f6  Emacs-19.25/lisp/hippie-exp.elc
  611. +b55931fff9faa6981ac560db7f7d9004  Emacs-19.25/lisp/holidays.elc
  612. +b052fa982bd3d600cac96fb365a1e38b  Emacs-19.25/lisp/icomplete.elc
  613. +181828fff99a5ea1afb3e14d1b6ad5fb  Emacs-19.25/lisp/icon.elc
  614. +f32110bc662737400c0b2f28acb38099  Emacs-19.25/lisp/ielm.elc
  615. +025388ecb16d47cb61014f12c049b23e  Emacs-19.25/lisp/imenu.elc
  616. +18928f58dad51dd7b4e06dd73fc6dd23  Emacs-19.25/lisp/indent.elc
  617. +5c5d36d339d8c25e9c885202d679b304  Emacs-19.25/lisp/inf-lisp.elc
  618. +ceff4fb6203e3a1a1710feae6cd2709c  Emacs-19.25/lisp/info.elc
  619. +e886c3211853a2f39e3bf3b563406edb  Emacs-19.25/lisp/informat.elc
  620. +3c0dfac0acb45a979c74f13bc2d95615  Emacs-19.25/lisp/isearch.elc
  621. +9410620035922578eff622f8e6de3c3a  Emacs-19.25/lisp/iso-acc.elc
  622. +d2a75cbbb229ffd149ce53cd32addc06  Emacs-19.25/lisp/iso-ascii.elc
  623. +fa7d221f156beb39086819ee290864e5  Emacs-19.25/lisp/iso-cvt.elc
  624. +d3e87600636f8ca23b832edac5750502  Emacs-19.25/lisp/iso-insert.elc
  625. +2600717f7080f6557b307d76acd3d3ab  Emacs-19.25/lisp/iso-swed.elc
  626. +f2da5ef9effa352f7b045e6994751225  Emacs-19.25/lisp/man.elc
  627. +180f599d578fb21ecce54ca2552e735e  Emacs-19.25/lisp/iso-syntax.elc
  628. +cb52bf7120bf0964e0c8947a59b96842  Emacs-19.25/lisp/ispell.elc
  629. +2ed9575ae8b207334e89462ddd444248  Emacs-19.25/lisp/kermit.elc
  630. +fea4e0926b69e1eb602b1b275df21cd7  Emacs-19.25/lisp/jka-compr.elc
  631. +4a4435e4d113476ae6261f2a2bd550d3  Emacs-19.25/lisp/ledit.elc
  632. +7203f2ce14b6eba46c530040771139a1  Emacs-19.25/lisp/levents.elc
  633. +49ccf179f20bbb6cded00291f0daa41c  Emacs-19.25/lisp/life.elc
  634. +1959ba01b6a365c5f2202d0132223a91  Emacs-19.25/lisp/lisp-mnt.elc
  635. +87d93cfaf1681e769e4c635598ba8676  Emacs-19.25/lisp/lisp-mode.elc
  636. +cec051110d3bf2a118e2159999742ffa  Emacs-19.25/lisp/lisp.elc
  637. +0c0ebd22a838651ef890c31f6497ec14  Emacs-19.25/lisp/lmenu.elc
  638. +6210aca65806df13e87600a14960aa21  Emacs-19.25/lisp/loadhist.elc
  639. +8664b394dfe11c95dda240947fb59d6e  Emacs-19.25/lisp/ls-lisp.elc
  640. +edfa96375da3aa4543594946a12547e7  Emacs-19.25/lisp/lselect.elc
  641. +1cfe7000550f7e710b5a94a017f5ecf9  Emacs-19.25/lisp/lucid.elc
  642. +6b855b0a8a711b237f19392cdb1b5f77  Emacs-19.25/lisp/lunar.elc
  643. +b207defacb19fb57d28d044ea32e1dfa  Emacs-19.25/lisp/macros.elc
  644. +c6b3e5c0b3fc4712180898b49f595b15  Emacs-19.25/lisp/mail-extr.elc
  645. +a3638c37409523077462f4133472ab94  Emacs-19.25/lisp/mail-hist.elc
  646. +338fa1da26749d6ca0a965a0535005bd  Emacs-19.25/lisp/mail-utils.elc
  647. +f88651939f27fb8fc2656e162b11730a  Emacs-19.25/lisp/mailabbrev.elc
  648. +843db405b19fbb3e87f3441523947826  Emacs-19.25/lisp/mailalias.elc
  649. +88389f3a67c61c843e8b877e33633438  Emacs-19.25/lisp/mailpost.elc
  650. +3fd5540d963895e3b40b027ab3c24670  Emacs-19.25/lisp/makefile.elc
  651. +c865624df5cfd1b459087e0df0f6c6f1  Emacs-19.25/lisp/makeinfo.elc
  652. +7722d8aac662719a5100cb57ea17571b  Emacs-19.25/lisp/makesum.elc
  653. +fb20e1b5319bd74bdc3c6076d8470e74  Emacs-19.25/lisp/map-ynp.elc
  654. +5ad747ba4d6908d4666a5b1b05351602  Emacs-19.25/lisp/medit.elc
  655. +e13d3fe88a31f80f26e6a8699f140a22  Emacs-19.25/lisp/meese.elc
  656. +06c7c78a4dd398f94214e754e926d575  Emacs-19.25/lisp/menu-bar.elc
  657. +64a5f8e6cdf147d4c343d07eb8177132  Emacs-19.25/lisp/metamail.elc
  658. +31d3f3dd7f7794252c31503e210ea6e9  Emacs-19.25/lisp/mh-comp.elc
  659. +c2e5de04da3e459e7f04d697d810f559  Emacs-19.25/lisp/mh-e.elc
  660. +abb441d9be81a8a9bbcd9ddfd5d3f8e5  Emacs-19.25/lisp/mh-funcs.elc
  661. +da43f0becdc518e3a20f5917e2cbd6b3  Emacs-19.25/lisp/mh-mime.elc
  662. +e5ce698e4129009bb7edcb22f4fd0f24  Emacs-19.25/lisp/mh-pick.elc
  663. +d3ed8d58f39f906f3152a07536063700  Emacs-19.25/lisp/mh-seq.elc
  664. +f04df03983830e69fd1a151c8a5c03b4  Emacs-19.25/lisp/mh-utils.elc
  665. +e942cda74f723c84816c26c400f4c354  Emacs-19.25/lisp/mhspool.elc
  666. +8a8ab7bc852deaa9574f250bfc0a04a6  Emacs-19.25/lisp/mim-mode.elc
  667. +288b9e31b5a74b547d2bd9968a158b9f  Emacs-19.25/lisp/mim-syntax.elc
  668. +6333838a1eee7b9595d674233b430c49  Emacs-19.25/lisp/misc.elc
  669. +c0263418873bb25c3f183d9696bbe535  Emacs-19.25/lisp/mlconvert.elc
  670. +e1b20bb2e7232b5359e650e4bbdca02c  Emacs-19.25/lisp/mldrag.elc
  671. +9caa412724771e9afe775a896c416325  Emacs-19.25/lisp/mlsupport.elc
  672. +08114980d0f432fb1749d0ef224e7dd8  Emacs-19.25/lisp/modula2.elc
  673. +35d0de54270d3330e093dd2abade1197  Emacs-19.25/lisp/mouse-sel.elc
  674. +3eb3c2fbbe72b15f27cb144a157bf7ee  Emacs-19.25/lisp/mouse.elc
  675. +39fa20822814e0093a3c55c934200185  Emacs-19.25/lisp/mpuz.elc
  676. +8a272aab9f17915dcb36dd01b866cc9a  Emacs-19.25/lisp/netunam.elc
  677. +b1da72d8fd1102a8aef3fa91d0915e66  Emacs-19.25/lisp/nnspool.elc
  678. +e64caf373001fbbb7d372e1e07bd3ca1  Emacs-19.25/lisp/nntp.elc
  679. +ea29702c53b448d58d1707a995a0d141  Emacs-19.25/lisp/novice.elc
  680. +307ab1956038c729ee830544f46374d5  Emacs-19.25/lisp/nroff-mode.elc
  681. +95999667824127d02a492330552c4673  Emacs-19.25/lisp/options.elc
  682. +8777af7ea84e69690e7db544768d4ced  Emacs-19.25/lisp/outline.elc
  683. +d53be012524aa960551a11fd07bf390b  Emacs-19.25/lisp/page-ext.elc
  684. +57f4880cf832920a46bd9d39e8a7d7e8  Emacs-19.25/lisp/page.elc
  685. +cff44c4eea427cefe4e3cf65d6bbf7ae  Emacs-19.25/lisp/paragraphs.elc
  686. +3250d6391648058f791c2dd5daf379ad  Emacs-19.25/lisp/paren.elc
  687. +1f50f5c57c0f9228437994d35386bcd3  Emacs-19.25/lisp/pascal.elc
  688. +3288f6e4e92a19a641c5d460ce67b17b  Emacs-19.25/lisp/perl-mode.elc
  689. +85c320a5e9452f2abca63bb4329b96b8  Emacs-19.25/lisp/picture.elc
  690. +8a3988e24fd4254c57320fd3826b8fd6  Emacs-19.25/lisp/pp.elc
  691. +8fbfd056cecab7029f42ec6cc1d13eb0  Emacs-19.25/lisp/profile.elc
  692. +02c7fd713d327c6af40bf2ff45f62f12  Emacs-19.25/lisp/prolog.elc
  693. +b268dce6c475da7e015f570cdd798033  Emacs-19.25/lisp/rcompile.elc
  694. +72918ec599af0bbcf7d10a653725e612  Emacs-19.25/lisp/rect.elc
  695. +9817483c5ebf984faacbb434afe3dd06  Emacs-19.25/lisp/refbib.elc
  696. +1161a424164a3492421de803d8dc971f  Emacs-19.25/lisp/refer.elc
  697. +dcc590fd8f13eebb85ecba13a7d90088  Emacs-19.25/lisp/regi.elc
  698. +71d852f9142b3dcde92184539bff468c  Emacs-19.25/lisp/register.elc
  699. +cc6881938b51a6de870fb4865109feb0  Emacs-19.25/lisp/replace.elc
  700. +ada4458da52d630bf69f5219d9c3f0cd  Emacs-19.25/lisp/reporter.elc
  701. +0bc748f0f740c55a359212dfa48303d7  Emacs-19.25/lisp/reposition.elc
  702. +7db7da081fa3699a6907169cea0b6eb8  Emacs-19.25/lisp/resume.elc
  703. +f113d0120e466ca9e2b3ed48da0b197c  Emacs-19.25/lisp/rfc822.elc
  704. +953162d42c842089d2fe7b11838a6209  Emacs-19.25/lisp/ring.elc
  705. +816a44319eb109ac56c690a2b16ee362  Emacs-19.25/lisp/rlogin.elc
  706. +5271f797beecef8359a9977aca3f25ff  Emacs-19.25/lisp/rmail.elc
  707. +082c1b035dabf17c2497e6c974689fcb  Emacs-19.25/lisp/rmailedit.elc
  708. +c1c18b6e5559c1e4794617bea7df3d52  Emacs-19.25/lisp/rmailkwd.elc
  709. +3a4556e3a54d063da85e09daca01bc38  Emacs-19.25/lisp/rmailmsc.elc
  710. +2060112d2ec8d963f2f57935073e0e7c  Emacs-19.25/lisp/rmailout.elc
  711. +83d033c47514ebaaf6924eeffabdbc91  Emacs-19.25/lisp/rmailsort.elc
  712. +4894afb6d154ad2d7d5c72719c04dd3b  Emacs-19.25/lisp/rmailsum.elc
  713. +443e978a178077102b2b8c31374a0b4b  Emacs-19.25/lisp/rnews.elc
  714. +200974723c6b3a11e16d04cb1832c1c3  Emacs-19.25/lisp/rnewspost.elc
  715. +a878992ecb65d117b20cf9d4fb34f1e7  Emacs-19.25/lisp/rot13.elc
  716. +ff46b8ff8ee6899e91672f85c124509d  Emacs-19.25/lisp/rsz-mini.elc
  717. +f1536a246da91458866a5e63cfde851a  Emacs-19.25/lisp/s-region.elc
  718. +c2fe156ae4c57100eacb06938a5ff338  Emacs-19.25/lisp/saveplace.elc
  719. +4eed06f294d0492a5c68102206477cc3  Emacs-19.25/lisp/scheme.elc
  720. +e545d2fd55f881404272990d025e6e6e  Emacs-19.25/lisp/scribe.elc
  721. +75eafdac4cf93f25767320b81e3adbcf  Emacs-19.25/lisp/scroll-bar.elc
  722. +a334b7745198ce28ada84d4881b307c5  Emacs-19.25/lisp/select.elc
  723. +ab9879de582ba3bfff3021416ad3483c  Emacs-19.25/lisp/sendmail.elc
  724. +fb14e820e437edc3399342bc93f4fcda  Emacs-19.25/lisp/server.elc
  725. +d1e3ae4901f51de0d8dfd8995452d790  Emacs-19.25/lisp/sgml-mode.elc
  726. +35e3ced8f8903299500df673ed477a43  Emacs-19.25/lisp/sh-script.elc
  727. +393342950a493eca8222f1a109c35459  Emacs-19.25/lisp/shadowfile.elc
  728. +07001f04cfd80bfbddfdc32fbd679e49  Emacs-19.25/lisp/shell.elc
  729. +6b962d422eba316cc4f6b4831e6844ec  Emacs-19.25/lisp/simple.elc
  730. +952ef8c1d1f906c7682c5a62be1fbb7b  Emacs-19.25/lisp/simula.elc
  731. +b55d8f98855c010b595605fac6bec558  Emacs-19.25/lisp/skeleton.elc
  732. +603bc271506d9c013bd33f9b56dbe2e7  Emacs-19.25/lisp/solar.elc
  733. +086042c178be10a16853e8304fa4d0a6  Emacs-19.25/lisp/sort.elc
  734. +d491e7f0cf01ea2ee0280fcde47b2e65  Emacs-19.25/lisp/soundex.elc
  735. +0a9f3e7285bd76a86c870aaff08bad9d  Emacs-19.25/lisp/spell.elc
  736. +e74c4d27cc10ab148b32cad7539bc46b  Emacs-19.25/lisp/spook.elc
  737. +de23d798febf1d1e1e47830fa2990303  Emacs-19.25/lisp/startup.elc
  738. +dea6b74f10b680e8001d1ea46e13a55f  Emacs-19.25/lisp/studly.elc
  739. +e67649c597a41ae2e282e024c81070e7  Emacs-19.25/lisp/subr.elc
  740. +879a8168949b3529721052f30d4c97cc  Emacs-19.25/lisp/supercite.elc
  741. +38477d7f9733d45d4ad2768bd345ad57  Emacs-19.25/lisp/swedish.elc
  742. +1bf6cde0c0dff27a0a406166bd716c23  Emacs-19.25/lisp/tabify.elc
  743. +752cab4ce763781a69e8890a9624acf3  Emacs-19.25/lisp/tar-mode.elc
  744. +4fc39e524f0f4cfec66b1555f33899b3  Emacs-19.25/lisp/tcl-mode.elc
  745. +f6acd2b89f9fc9c83bc346d89f4691f7  Emacs-19.25/lisp/tcp.elc
  746. +26be021cd8898a52d2d694575e2a8c40  Emacs-19.25/lisp/telnet.elc
  747. +48a8896e098103c2c704d37f566dee57  Emacs-19.25/lisp/tempo.elc
  748. +620476e214daf450ead5bb41b09883d7  Emacs-19.25/lisp/term-nasty.elc
  749. +241dbc669a0a4a81171791b710d6eb8c  Emacs-19.25/lisp/terminal.elc
  750. +9e2a12136828fed94f9b6668662b029b  Emacs-19.25/lisp/tex-mode.elc
  751. +d5743a3ba3ad697a48650303ddfc892e  Emacs-19.25/lisp/texinfmt.elc
  752. +c3c351393414fe5a21410671d26f2eb3  Emacs-19.25/lisp/texinfo.elc
  753. +0a25277c52cc9d097f3a56617608e3b3  Emacs-19.25/lisp/texnfo-upd.elc
  754. +4a9aa3013ed62de4b4c75d1f9eeda969  Emacs-19.25/lisp/text-mode.elc
  755. +3b7612c19ec57622cd81c9d1510abb3f  Emacs-19.25/lisp/thingatpt.elc
  756. +c561a129855dced5eaff047aaf1e16bb  Emacs-19.25/lisp/time-stamp.elc
  757. +330af30f38815acd09c358b5ca1f1e05  Emacs-19.25/lisp/time.elc
  758. +c677424220f16f700fb5a1b95f422ac2  Emacs-19.25/lisp/timer.elc
  759. +99cf702f89d140f6c2138d43ad79cc39  Emacs-19.25/lisp/timezone.elc
  760. +eda55aa16480ba0355a3d776a829211a  Emacs-19.25/lisp/tpu-edt.elc
  761. +a4ef625051f8c0c5d9abb8de55500243  Emacs-19.25/lisp/tpu-extras.elc
  762. +49acedc1df1b33818c5b7550fa047200  Emacs-19.25/lisp/tpu-mapper.elc
  763. +2213ef81532b199c5933164ec5984ed8  Emacs-19.25/lisp/tq.elc
  764. +d7060396e1fa1dc5a413ca02deb112e3  Emacs-19.25/lisp/trace.elc
  765. +0815c03072ebc002e7c2ce854aa23aca  Emacs-19.25/lisp/two-column.elc
  766. +1f0dda3cf9945a546a84e45474af6728  Emacs-19.25/lisp/uncompress.elc
  767. +10609f43df6a7cfcf179567029239e93  Emacs-19.25/lisp/underline.elc
  768. +b80d6d6bb0fa9ec85aaa4cb95c75de3d  Emacs-19.25/lisp/undigest.elc
  769. +19276de08fddf887ebcca7c24f927bea  Emacs-19.25/lisp/unrmail.elc
  770. +c2fef238383460b80b151918902be503  Emacs-19.25/lisp/unused.elc
  771. +417836f0bc9552b913210bea91fb9aa1  Emacs-19.25/lisp/upd-copyr.elc
  772. +b75d741649966259cc7cd476b2b22864  Emacs-19.25/lisp/userlock.elc
  773. +3a87f7bc9ed15998a4ee178bacabc673  Emacs-19.25/lisp/vc-hooks.elc
  774. +575e1b9c2dd8748ffc9a1fb13cbd8e80  Emacs-19.25/lisp/vc.elc
  775. +4162466897099c0f7ad0094256e72888  Emacs-19.25/lisp/vi.elc
  776. +ab726c83e40592ee1c669d5e42e27f0d  Emacs-19.25/lisp/view.elc
  777. +5f1b6e22bb0d868129ab6d0092a0126c  Emacs-19.25/lisp/vip.elc
  778. +22cb739139679b04f47de1cde7069564  Emacs-19.25/lisp/vms-patch.elc
  779. +36cf378b54e7efa060704d37aafefd36  Emacs-19.25/lisp/vms-pmail.elc
  780. +0377b4ac5b91418b65e5bab1001b67b1  Emacs-19.25/lisp/vmsproc.elc
  781. +6269a87400e13bef9f5121fc1988682f  Emacs-19.25/lisp/vmsx.elc
  782. +3fa580d759d1e55f4c931b4d2c267efc  Emacs-19.25/lisp/vt100-led.elc
  783. +d636f9f12691a1c0e11ea222b0412ee5  Emacs-19.25/lisp/window.elc
  784. +6db721091071c495dd5c2b7d21b2441b  Emacs-19.25/lisp/ws-mode.elc
  785. +ffa6b77d6af4913b19457cabe8685197  Emacs-19.25/lisp/x-menu.elc
  786. +7ba23f4bd1ed74142dff7a8b8a9c2506  Emacs-19.25/lisp/xscheme.elc
  787. +c34f4e0c1c6bb6eed0b30d9a0cee0d5a  Emacs-19.25/lisp/yow.elc
  788. +eddbcb510e13316bc76352f718f3e72f  Emacs-19.25/lisp/forms-d2.dat
  789. +c66094d60ea79a6a8e2461b7a05d1d8b  Emacs-19.25/lisp/ChangeLog
  790. +5bf55e39b9f1aedbfc6593e693fb716c  Emacs-19.25/lisp/Makefile
  791. +2472f6169dccb9e47a0d5b133bd12b5d  Emacs-19.25/lisp/ChangeLog.1
  792. +abdcae34bcfa5ab45a4904994cff193c  Emacs-19.25/lisp/ChangeLog.2
  793. +845d1546b90dd964d3397499aeadb4ee  Emacs-19.25/lisp/ChangeLog.3
  794. +39c13a674da4f4613610572e31aeb8b9  Emacs-19.25/lisp/README
  795. +497fd4e9a70eb3575468038e8fc918b4  Emacs-19.25/lisp/dired.todo
  796. +fbf3f31476d573df877ded4b59bcc234  Emacs-19.25/lisp/amiga-init.el
  797. +ed3d12d6283a95cc8bf7f5d985312897  Emacs-19.25/lisp/amiga-menu-bar.el
  798. +e85614ec048c560288812e40dd53cb6b  Emacs-19.25/lisp/amiga-menu.el
  799. +9734b8710fcb1194ae8b6eb5964eb0fe  Emacs-19.25/lisp/amiga-mouse-old.el
  800. +c0e7bfce1b15af7e3a7aef0f9f93bacb  Emacs-19.25/lisp/amiga-mouse.el
  801. +26c66033820ab5ee16793f005c56c2a5  Emacs-19.25/lisp/amiga-init.el!
  802. +83937695a10f85ca083a72bf874ff8d1  Emacs-19.25/lisp/simple.el
  803. +7a1caaedd9468533d7565fc6ca408c32  Emacs-19.25/lisp/amiga-init.elc
  804. +0c11001640a790a88103c4d19f7bedfd  Emacs-19.25/lisp/sendmail.el
  805. +7c4d0f31f6d0ed27a97130d697c693e9  Emacs-19.25/lisp/abbrevlist.elc
  806. +387f14cd6c088d6d602533ac0dc7859f  Emacs-19.25/site-lisp/reporter.elc
  807. +ddee0cee2149fe9ab4bb8842d052684b  Emacs-19.25/site-lisp/vm-auto-archive.el
  808. +53b28c8f9189356bd2321f44faf2bf44  Emacs-19.25/site-lisp/tapestry.elc
  809. +317b702552639fbcb65dd2482bd1ae44  Emacs-19.25/site-lisp/timezone.elc
  810. +936a37c5425f5a1e408a1a5d9a9fb979  Emacs-19.25/site-lisp/cc-compat.el
  811. +2f3cadfbe6b2f05283ff5127a48e26a1  Emacs-19.25/site-lisp/cc-mode.el
  812. +80cc70fbba8d1bcfa71f84a4410689f4  Emacs-19.25/site-lisp/cc-mode-18.el
  813. +632a53fb252dd693de942ffdeb41c6f5  Emacs-19.25/site-lisp/ChangeLog
  814. +fcc2ec446b4c5e3007d9d199d531cacc  Emacs-19.25/site-lisp/DUMPING
  815. +a06b60dab22bca60bd1676cbac373191  Emacs-19.25/site-lisp/MANIFEST
  816. +e493f47f6cf20222c7d9f3f8549350f8  Emacs-19.25/site-lisp/README
  817. +e7d5a24f590997bd258b79ab9032f6e5  Emacs-19.25/site-lisp/vm.el
  818. +11da86bad77b18e71d737d3d1c58f2e2  Emacs-19.25/site-lisp/vm.elc
  819. +65e29216fe7b277824b42b016af62812  Emacs-19.25/site-lisp/vm.elc.old
  820. +0e47cb93d812d25b8d84ea6220dff21f  Emacs-19.25/site-lisp/vm-delete.elc
  821. +b64b0f5722ad94d6c93434e1fbbf85c9  Emacs-19.25/site-lisp/vm-digest.elc
  822. +8a5d9a059fb283e87cbce7a411dfa6b9  Emacs-19.25/site-lisp/vm-edit.elc
  823. +7e465e339d8bcf1bb94f45b18299f2f2  Emacs-19.25/site-lisp/vm-folder.elc
  824. +d183e5fbd82038172535086c0e5524d4  Emacs-19.25/site-lisp/vm-license.elc
  825. +510ee02c330db85209030ad838fd7fbc  Emacs-19.25/site-lisp/vm-mark.elc
  826. +5c6d1b318f9cdb4ed466b73600d44063  Emacs-19.25/site-lisp/vm-message.elc
  827. +7846bf76ae30687e3e073060a6ca7826  Emacs-19.25/site-lisp/vm-minibuf.elc
  828. +62466bd403752c623e2a0e21e94fd746  Emacs-19.25/site-lisp/vm-misc.elc
  829. +0a1c7ab498938e7d767f7aa609f48e59  Emacs-19.25/site-lisp/vm-motion.elc
  830. +c87f2eecb4a0498fe86f5852a68c5d32  Emacs-19.25/site-lisp/vm-page.elc
  831. +6ef658ce7bf8ebdad639c23d2a134dc6  Emacs-19.25/site-lisp/vm-pop.elc
  832. +f69ca0a3df720da32863ff9e96fc378b  Emacs-19.25/site-lisp/vm-reply.elc
  833. +d84f8490dbd6285354b46e2f3c8c33ad  Emacs-19.25/site-lisp/vm-save.elc
  834. +3bd5b86f710cfd458e2c2509d556b7a2  Emacs-19.25/site-lisp/vm-search.elc
  835. +038f2c4ae7234320af61feac5192cd24  Emacs-19.25/site-lisp/vm-sort.elc
  836. +d73af36a831c21ed5f6e264f71784158  Emacs-19.25/site-lisp/vm-startup.elc
  837. +f7ec5f1e85ff7b2e8ffe0be935abeda8  Emacs-19.25/site-lisp/vm-summary.elc
  838. +f667157f937ea36e8006f81ff4f5717c  Emacs-19.25/site-lisp/vm-thread.elc
  839. +cf2da2cff497bf3c6c9be5d663401f62  Emacs-19.25/site-lisp/vm-undo.elc
  840. +de51a4f93e77669e6bef7e2661ccbb72  Emacs-19.25/site-lisp/vm-vars.elc
  841. +704646c7273ded1496e8fb7b01b67c09  Emacs-19.25/site-lisp/vm-version.elc
  842. +984dcb991dfb6fe42cd4e9531ae8211a  Emacs-19.25/site-lisp/vm-virtual.elc
  843. +dac2ee9ae18fc43b937555c9f1cb84e8  Emacs-19.25/site-lisp/vm-window.elc
  844. +2fc01d2c5dde98b28ee1794c7a295057  Emacs-19.25/src/amiga_malloc.c
  845. +299d077e92cffc796fbf5b60fa0a90e6  Emacs-19.25/src/undo_protos.h
  846. +bc9faec43b6bed0021953fa5b159c91a  Emacs-19.25/src/data_protos.h
  847. +d63edf81e419b7de687ed0d8b4bc7acd  Emacs-19.25/src/doc_protos.h
  848. +6e34a639e655a4a43bcd8a4040e4813f  Emacs-19.25/src/callint_protos.h
  849. +df18148f1885696fe97e0b9357abdfc5  Emacs-19.25/src/floatfns_protos.h
  850. +77abd6e84d28d8ebf33f75ad78012d37  Emacs-19.25/src/fns_protos.h
  851. +52a28907dd81b88c7ddc1adbe4aec919  Emacs-19.25/src/print_protos.h
  852. +a7952e430d601849b30535a9a79619c3  Emacs-19.25/src/lread_protos.h
  853. +2367b13e2d66192f90c3c53e69fb2c60  Emacs-19.25/src/abbrev_protos.h
  854. +a8f388f918998612283e5dc2f2ef73b3  Emacs-19.25/src/syntax_protos.h
  855. +fc030155229a5a65531b7f5dd3bb3df6  Emacs-19.25/src/amiga_dump_protos.h
  856. +6864d5cb86b7058b068ed84ceb35a523  Emacs-19.25/src/mocklisp_protos.h
  857. +3293d2f826d9bc418c5eb932b9389122  Emacs-19.25/src/bytecode_protos.h
  858. +d1aa9c6112e605d8de3341dc18933356  Emacs-19.25/src/process_protos.h
  859. +a6daa1c8a7208eef976f98e70c26afa2  Emacs-19.25/src/callproc_protos.h
  860. +780f28632227e34790408b710c9936ec  Emacs-19.25/src/doprnt_protos.h
  861. +eb80f6fca88e9a2ae7306dc94f680a51  Emacs-19.25/src/getloadavg_protos.h
  862. +d0ccec9a4a5c3a559f7e54e1eb7b5264  Emacs-19.25/src/amiga_clipboard_protos.h
  863. +f7add8f36ac5e0320380cb7892a1f800  Emacs-19.25/src/amiga_serial_protos.h
  864. +9132788a428029d6a84172735d3929e4  Emacs-19.25/src/amiga_menu_protos.h
  865. +c3a7463abe6861ee156821e5cd0987dc  Emacs-19.25/src/amiga_rexx_protos.h
  866. +58c7f798d1725494ab880bfb7dc6bd0b  Emacs-19.25/src/amiga_term_protos.h
  867. +b3c3eb37cf9d2ee740b51a5f08a0d577  Emacs-19.25/src/protos.c
  868. +ad49f23a16b6bab308c8adb79fd5a8d1  Emacs-19.25/src/amiga_sysdep_protos.h
  869. +2d353983b16a540a852d71fc63704cce  Emacs-19.25/src/regex_protos.h
  870. +9e4dc3b9033cfa9d73bb7f02a46f0a29  Emacs-19.25/src/dired.c
  871. +b762e8382bb2814b2d4977366d16253c  Emacs-19.25/src/blockinput.h
  872. +e73485240742036a763d8417dc16b2b5  Emacs-19.25/src/buffer.h
  873. +8b85475ab3e774e566d27ec57a92883c  Emacs-19.25/src/chpdef.h
  874. +40da32f5c68726203609debbe65e88fb  Emacs-19.25/src/cm.h
  875. +ebfaa0e0946ebdab8a1930a3238d82b2  Emacs-19.25/src/commands.h
  876. +3947d97190ec45041d97fbfec3b223b7  Emacs-19.25/src/dispextern.h
  877. +6b318448a12cc97f5c5ebae92aa550be  Emacs-19.25/src/disptab.h
  878. +13ce8e3f0148ef395b9f14783b1848b3  Emacs-19.25/src/getpagesize.h
  879. +2b26000a79a6d1c6eeb0d6f5a1cb110a  Emacs-19.25/src/gnu.h
  880. +04736fa69d82a4def8cbc0194f8ad1ae  Emacs-19.25/src/indent.h
  881. +27e62496508ffaa93d19a8b33329515b  Emacs-19.25/src/ioctl.h
  882. +e3dbdc058ae674ce41041167c99fa2db  Emacs-19.25/src/keyboard.h
  883. +da05855bc2c9b8e192de926d5b1090c5  Emacs-19.25/src/line.h
  884. +e6f9285d2a7d3d2b935bfacfa0eb3b4f  Emacs-19.25/src/macros.h
  885. +06b1517f9f5cf93b8c526348d3d37ccb  Emacs-19.25/src/mem-limits.h
  886. +f6b2ec5b8121e327ff4d241efd6945cb  Emacs-19.25/src/mocklisp.h
  887. +9d43defd851bc009992ab4fa8bb7170b  Emacs-19.25/src/ndir.h
  888. +9f31cf0aa4defd7674664917e58f4b07  Emacs-19.25/src/param.h
  889. +13fc71e904cfb5a038d9ac9a9de28189  Emacs-19.25/src/point.h
  890. +bdc21c071ac33ac0b42984edc816c44c  Emacs-19.25/src/process.h
  891. +4edc08200fd0e325d756c610a965e48a  Emacs-19.25/src/regex.h
  892. +d424c5defa7126cec9337109c67dd8f8  Emacs-19.25/src/sink.h
  893. +b24feb433466e7d3e91b5e2f3d4c123a  Emacs-19.25/src/sink11.h
  894. +bcb3da6c7fb1a4f6d479d006129e4fef  Emacs-19.25/src/sink11mask.h
  895. +6b9749c1d191e70362ac4aa5361dc678  Emacs-19.25/src/sinkmask.h
  896. +fff8c06f76914a5becb644c0bc2e7244  Emacs-19.25/src/syssignal.h
  897. +8eceb08ab9012a8f38e7cbc612002474  Emacs-19.25/src/systime.h
  898. +2e74e62eea71ebf48e710d486f0887dd  Emacs-19.25/src/termchar.h
  899. +c555e494661c04e7036d4be8fc2b5de1  Emacs-19.25/src/termhooks.h
  900. +8a1fe4b329423c3ec43bd938f8e7eaf8  Emacs-19.25/src/termopts.h
  901. +8a816de1277baaefc8ac2b0f211067ca  Emacs-19.25/src/uaf.h
  902. +dedbfbc0ba618509efc1eca604356916  Emacs-19.25/src/vlimit.h
  903. +bed79ebbac7b9e30e3af631b2c6a80e5  Emacs-19.25/src/window.h
  904. +6dd7ebb2cc52c34a71be38dd3a451ec0  Emacs-19.25/src/config.h.in
  905. +003fb4e5c25bc47526cfefa9d994dc52  Emacs-19.25/src/paths.h.in
  906. +23073165bc3bde3ab41d1e3d9e9afec0  Emacs-19.25/src/intervals.h
  907. +2da48d323b67c934ce58fb73e868e845  Emacs-19.25/src/doc.c
  908. +80706f4c019beabd484a868299fa2a83  Emacs-19.25/src/syntax.c
  909. +1bbeb1ef361581851a1d8e28cc08982f  Emacs-19.25/src/syntax.h
  910. +3c309b1e1691d6df92d1ca677222760d  Emacs-19.25/src/search.c
  911. +603677c9096fc27a087da96c730c6f78  Emacs-19.25/src/keyboard.c
  912. +1a43caa175998f7c138b9a67cea4f51f  Emacs-19.25/src/dostrip.lnk
  913. +25f9ccf6ea18a4736176813cebbf2526  Emacs-19.25/src/lisp.h
  914. +0881e5f720489470b4267674c8ba5b14  Emacs-19.25/src/oldalloca.c
  915. +091ecd5265293a04dca8675ddf31dc43  Emacs-19.25/src/fileio.c!
  916. +91b365ded8bb606e65d232752a076aa4  Emacs-19.25/src/syswait.h
  917. +db49a8f29b565998592fa9c39536a2f0  Emacs-19.25/src/firstfile.c
  918. +9919b93071c785a47c3b7fc0b39430f9  Emacs-19.25/src/xdisp.c
  919. +1c1f3353a16bc2c85cc839b01b6f88e7  Emacs-19.25/src/amiga_term.c
  920. +417f6f4102836c647c118bfcd66f2b6d  Emacs-19.25/src/dispnew.c
  921. +4eb38b2413cc94e5dc17b4119f9a01c1  Emacs-19.25/src/cprinit
  922. +406a2e595107d49d83b2132fa2a437ed  Emacs-19.25/src/amiga_screen.c!
  923. +56f522627f1c14dc5d76621d66d37ef4  Emacs-19.25/src/data.c
  924. +7f1236eb19c3d5769537277bdf66acbf  Emacs-19.25/src/alloc.c
  925. +5de6ff2fb3e0ac5f8f643b3846312940  Emacs-19.25/src/termcap.c
  926. +06a6a7b79dbd36a9d97f8843732a6243  Emacs-19.25/src/amiga_dump.c
  927. +b618f1eba1f0517477c258ec38700d87  Emacs-19.25/src/frame.c
  928. +599e43b5ff8b44f2f432a18e5b8fbe7c  Emacs-19.25/src/smakefile
  929. +c77bc4e24cde539718d4786da9980e6f  Emacs-19.25/src/amiga_processes.c
  930. +9c86eda2f24abf21076e422dbc0fd113  Emacs-19.25/src/amiga_fns.c
  931. +6052fe062d3943369306485e57450e18  Emacs-19.25/src/xdisp_protos.h
  932. +78b2f06fff9cb2c20699ee4fc4ee5413  Emacs-19.25/src/amiga_menu.c
  933. +a858548b2d5602a7d8962f7497cb1369  Emacs-19.25/src/amiga_clipboard.c
  934. +2fc01d2c5dde98b28ee1794c7a295057  Emacs-19.25/src/amiga_malloc.c!
  935. +ea2ab097cdb03811a5fff2a432ed39e7  Emacs-19.25/src/editfns.c
  936. +d81a66c3e5a69dc5f7da7aa6b74351b7  Emacs-19.25/src/term.c
  937. +325f5a161422d9b5eb18f60a8f3b72b4  Emacs-19.25/src/amiga_xmenu_protos.h
  938. +1cd410c85d17630d0b16fbf0c8509530  Emacs-19.25/src/frame.h
  939. +cf554c651122bf4782548743a8f53e9e  Emacs-19.25/src/amiga.h
  940. +aeeaaf4cc8f0df59992af1f30d74846d  Emacs-19.25/src/cdodump.sh
  941. +19a9f88e6ed5f9d0d32c53877b3bd774  Emacs-19.25/src/scroll.c
  942. +47bf9c63b27927a793f4dd14618fea8d  Emacs-19.25/src/puresize.h
  943. +33682239a7d173c482a63b12fdc10458  Emacs-19.25/src/amiga_rexx.c
  944. +36d5a57f5efa756696567efc31a3b63d  Emacs-19.25/src/amiga_serial.c
  945. +71167a90d0dc2eb7d1cfaa0ba2a24e36  Emacs-19.25/src/amiga_sysdep.c!
  946. +057af973c0d769a5924e0c6d4f99919e  Emacs-19.25/src/amiga_tty.c
  947. +31bcd0dd48d21309a0cf6f782cdeb69a  Emacs-19.25/src/scoptions
  948. +6c78c24c05a1a38339f21b2bcdbf224d  Emacs-19.25/src/buffer.c
  949. +5da0c71c8e541663f8ee31aca327f87d  Emacs-19.25/src/callproc.c!
  950. +6344f439011dacb34eacd98545d0f55a  Emacs-19.25/src/regex.c
  951. +cf1e1025b388ffff75b34f8e5905dc09  Emacs-19.25/src/process.c
  952. +53cc74d1ce49a429605486b8a6643a1f  Emacs-19.25/src/s/amigaos.h~
  953. +350fdc45e5193262854625bf67f8e203  Emacs-19.25/src/s/amigaos.h!
  954. +4452100402215700367e998130903e2b  Emacs-19.25/src/s/amigaos.h
  955. +a8715cb8f0ac24a48bb85160bae3cb86  Emacs-19.25/src/m/amiga.h
  956. +20bad93bb730aac2ace9cd71434c7d19  Emacs-19.25/src/semacs.sh
  957. +df3f97370983ba2c4233569032b4cf48  Emacs-19.25/src/frame_protos.h
  958. +9aeaf61898adad6fcc56a5f645fed118  Emacs-19.25/src/protos.h
  959. +bc65da50418efb46779ee4863c9a9fb4  Emacs-19.25/src/emacs.c
  960. +8ca4e1270366ab6247b82228d00084f0  Emacs-19.25/src/st.sh
  961. +101fa96febf286dd45525f09ed0239ed  Emacs-19.25/src/ct.sh
  962. +5196dcf3d5acfd5d4edcb6e8d5f34998  Emacs-19.25/src/amiga_malloc_protos.h
  963. +362453f008fe11b65022ae6d4fd00d1f  Emacs-19.25/src/setlisp.cpr
  964. +2acf44e184ee8416f56a62abda5ea2e5  Emacs-19.25/src/Makefile
  965. +3f53e99df505f0884274a3bfcb755bed  Emacs-19.25/src/terminfo.c
  966. +f2b8456cb7bcf372ce831f6d227c6625  Emacs-19.25/src/textprop.c
  967. +3fe5186ee8aa614bde4b1bb61b189582  Emacs-19.25/src/term_protos.h
  968. +7a197ca6832463f43723c88f798cf65d  Emacs-19.25/src/insdel.c
  969. +e8eb964fed1700bc1521927123b9b5bb  Emacs-19.25/src/keymap_protos.h
  970. +08c9e479c6db0e25b6750534bcbecb1c  Emacs-19.25/src/abbrev.c
  971. +658098c7c2db0b5f142bd26b10081d59  Emacs-19.25/src/dodump.sh
  972. +0a583e588fb1b4c499a6c92d31e5645f  Emacs-19.25/src/tparam.c
  973. +fec166a037477c7ed8fb98ef8539dea3  Emacs-19.25/src/undo.c
  974. +6d9eba80fbcab97466ad8e02c285d344  Emacs-19.25/src/amiga_screen_protos.h
  975. +95705a69157e1dd14404e57952718f99  Emacs-19.25/src/config.h
  976. +2acf44e184ee8416f56a62abda5ea2e5  Emacs-19.25/src/ymakefile
  977. +9e66d9c063f142d27fdd5b7ef85d0ecd  Emacs-19.25/src/dostrip.c
  978. +a979d2e37dd4167954b4328f9be909bf  Emacs-19.25/src/editfns_protos.h
  979. +e8c30556a54f14398ea70a2b825e65b5  Emacs-19.25/src/systty.h
  980. +a9f1a66edb7418279d32816883031348  Emacs-19.25/src/emacssignal.h
  981. +b702756bced852493d90526d94941dd9  Emacs-19.25/src/dispnew_protos.h
  982. +7d59eeb5571802e2e902f1818fe87a28  Emacs-19.25/src/lastfile.c
  983. +941da3e014eaadc70d4d88e92a3b4427  Emacs-19.25/src/amiga_data.c
  984. +95b62aa54438d3df8d6d13775b6790a2  Emacs-19.25/src/keyboard_protos.h
  985. +df9d42d71668a353ac30be9fa6bc6021  Emacs-19.25/src/alloc_protos.h
  986. +0ba1ecbd9f1e21d71777c751ae7e3300  Emacs-19.25/src/vm-limit.c
  987. +31adf91541f82eb8195fa7b9fd78e1b6  Emacs-19.25/src/casefiddle.c
  988. +a0eb6cb025fbe417ea8ae78fc52d9d37  Emacs-19.25/src/casetab.c
  989. +2e4db9e0557bcfa5d55a8eb30bb12a7a  Emacs-19.25/src/doprnt.c
  990. +0b3b88aaacb66775528ccfe26eb6bd39  Emacs-19.25/src/amiga_fns_protos.h
  991. +234f328672af2e5362d648c9a9ee6320  Emacs-19.25/src/paths.h
  992. +0a8e3e7edcefc65ef4a8a47b5fefb4bd  Emacs-19.25/src/eval.c
  993. +d41d8cd98f00b204e9800998ecf8427e  Emacs-19.25/src/xterm.h
  994. +50188e1ff191453ca2cc8cebeb067f8b  Emacs-19.25/src/amiga_tty_protos.h
  995. +7752c404509369f47c066a95dba3ab58  Emacs-19.25/src/window.c
  996. +e97976d2620898fb4d2874f1aa6e4b67  Emacs-19.25/src/amiga_xmenu.c
  997. +94acb80162b3dec63dc10e0597ba6cbd  Emacs-19.25/src/floatfns.c
  998. +b07986a9d0761815a846aec0b4ef663d  Emacs-19.25/src/lread.c
  999. +971c25d45041516c619ec51d4a15e14c  Emacs-19.25/src/simplerexx.c
  1000. +a24eebab56496a2ab8aaa42557e80847  Emacs-19.25/src/simplerexx.h
  1001. +f899c6c4ee0fff3c556ae86920666956  Emacs-19.25/src/filelock.c
  1002. +426cf6e358493835253aa65830f4c44d  Emacs-19.25/src/bytecode.c
  1003. +d577b3f32d9c881470600d71e6860c8d  Emacs-19.25/src/callint.c
  1004. +9fb0e2e593c24eb719c81345fd54a31d  Emacs-19.25/src/cm.c
  1005. +a0e089eac6654e7b595f95930a02daac  Emacs-19.25/src/cmds.c
  1006. +f10cfe85d83749b1a91c8546bbb010ef  Emacs-19.25/src/filemode.c
  1007. +aefcb9b61a9c87b959168a784a633551  Emacs-19.25/src/fns.c
  1008. +8a374459bd5ce56bc81c9dba89682855  Emacs-19.25/src/getloadavg.c
  1009. +e586ead4a17a683405f774db36d69817  Emacs-19.25/src/indent.c
  1010. +6c994c5cce9b9fec291d12f5a181159b  Emacs-19.25/src/intervals.c
  1011. +9aaa8f5ed6381d9424ef5c10ba6d93ff  Emacs-19.25/src/eval_protos.h
  1012. +9b782d8e9e3ddae549afadd09e1d219d  Emacs-19.25/src/scroll_protos.h
  1013. +b3effcf1e3104037c8594bc52c967189  Emacs-19.25/src/window_protos.h
  1014. +05ae36199edf626fd24720e7cec4113d  Emacs-19.25/src/cm_protos.h
  1015. +fc262ceaef04bd6b4cd3f9ce9f74f9b4  Emacs-19.25/src/emacs_protos.h
  1016. +41b495c52243d9c62bccb0ec2e30d9a4  Emacs-19.25/src/macros_protos.h
  1017. +145b551397138a99a5ddd6babe901de3  Emacs-19.25/src/buffer_protos.h
  1018. +859ecd1fc957903708ac4e72288a4b68  Emacs-19.25/src/filelock_protos.h
  1019. +97f2a3cf998d7d6ac8d42c173b66ed8a  Emacs-19.25/src/insdel_protos.h
  1020. +02c68e4b97e0d588ef016702d5ff1c8f  Emacs-19.25/src/marker_protos.h
  1021. +119a34c5fd9209842a09d1ef681b4bb2  Emacs-19.25/src/minibuf_protos.h
  1022. +2be786c162524ad85752265e82177fe6  Emacs-19.25/src/fileio_protos.h
  1023. +6edb2df5eb62f4b436a691ebcb9dd768  Emacs-19.25/src/dired_protos.h
  1024. +7de22d5c1817b0ba42e3123fd07b21c8  Emacs-19.25/src/filemode_protos.h
  1025. +ce85a871a40bfbd08c5dfb00dab1c7a9  Emacs-19.25/src/cmds_protos.h
  1026. +0c83716607dad03a68f3490577aae8c1  Emacs-19.25/src/casetab_protos.h
  1027. +6bce47f5820f1c8af4b50de515317bc8  Emacs-19.25/src/casefiddle_protos.h
  1028. +585d78e444445a8a477ea01647822363  Emacs-19.25/src/indent_protos.h
  1029. +8cfdd4c2874be199936c1246ee90887c  Emacs-19.25/src/search_protos.h
  1030. +e98a97f22e9322519b9cdf2d13f0631e  Emacs-19.25/src/prefix-args
  1031. +f7181e197598b7fe51b3ec1624d9eca0  Emacs-19.25/src/keymap.c
  1032. +f92870c205e40f9b2b133b9cbd8e20f4  Emacs-19.25/src/macros.c
  1033. +1a0d10ffb961ac3789e54120383c1c78  Emacs-19.25/src/marker.c
  1034. +bb390ebf6d5c4d50dbe8ea386dc601f4  Emacs-19.25/src/minibuf.c
  1035. +37f9455d8b6ef27d17e2c614b8e261a0  Emacs-19.25/src/mocklisp.c
  1036. +4712a297d031346e1e3c6230839984bf  Emacs-19.25/src/prefix-args.c
  1037. +59ef8b17b5f19bca5c2441aa7966c067  Emacs-19.25/src/print.c
  1038. +ed43ad8ccaf22f5f15bb197a1424d44a  Emacs-19.25/src/dostrip
  1039. +0aef84be0e51176bb61975a77390419e  Emacs-19.25/src/dostrip.info
  1040. +e8094f5561616678cf9ff1de085d4176  Emacs-19.25/src/cover.dat
  1041. +ef4a56f5907320b32540dfc6c5de18eb  Emacs-19.25/src/xmakefile.test
  1042. +70485cb176faee57308d781472e004f4  Emacs-19.25/src/amiga_screen.c
  1043. +33aae8e7ca0abefb00c6f85c5497c6cc  Emacs-19.25/src/temp
  1044. +fac22272acae60a64584b6be2b8c5690  Emacs-19.25/src/xmakefile
  1045. +12b7fefeeaad5551918e392cd3c472bb  Emacs-19.25/src/lisp.h!
  1046. +842b7ca968600b2a34968955eaa0c73a  Emacs-19.25/src/amiga_sysdep.c
  1047. +3bb8979dfedaf8d5781a3c5f70e7013a  Emacs-19.25/src/callproc.c
  1048. +9b05ca51bd33e2cccd6ea745fce51683  Emacs-19.25/src/fileio.c
  1049. +d41d8cd98f00b204e9800998ecf8427e  Emacs-19.25/src/DOC
  1050. +4c23c2b2075f056fcefe7c3165127e15  Emacs-19.25/amiga.doc
  1051. +f67ca72fdf96bd603f89f27e7d410e0d  Emacs-19.25/announce2.0
  1052. +bc57c268aaa625248fe681656fdea54d  Emacs-19.25/compile.doc
  1053. +2def86dddff339cd9936ec0479c2b717  Emacs-19.25/emacs
  1054. +ba8eb642b3b56a81bc48129cd9546283  Emacs-19.25/INSTALLATION
  1055. +d93a01b0b9df5e7228ce99255baec5bd  Emacs-19.25/README.1st
  1056. +29f2595e53e67c7e5559ae7771c6461d  Emacs-19.25/temacs
  1057. +
  1058. +-----BEGIN PGP SIGNATURE-----
  1059. +Version: 2.6
  1060. +
  1061. +iQCVAgUBLxMHVOlPL8A93KIlAQG0tgP/a9xXQWlPSXSMwYjagbwNUBzHAmIKywl0
  1062. +G4a2Yx6/TUKi65orXksS+UyYK4xKWsFoPre/K4hKJCvD/EGzFhcUJEJt7gLGizvg
  1063. +tNA8nMY6eV3SLewx494d1CbjFNuAJOzsO94RlBXW72+La80SsSyePMocMqYdqkUR
  1064. +e8/yonSJ9oI=
  1065. +=12MP
  1066. +-----END PGP SIGNATURE-----
  1067. diff -rup --new-file baseline/fsf/emacs/INSTALLATION amiga/fsf/emacs/INSTALLATION
  1068. --- baseline/fsf/emacs/INSTALLATION    Wed Dec 31 17:00:00 1969
  1069. +++ amiga/fsf/emacs/INSTALLATION    Sat Sep 28 00:00:00 1996
  1070. @@ -0,0 +1,58 @@
  1071. +DON'T FORGET: This version of Emacs REQUIRES AmigaOS V2.04 or later !!
  1072. +
  1073. +Before being able to use Emacs, you must take the following steps 
  1074. +(they assume you are in the emacs-19.25 directory):
  1075. +
  1076. +1. Copy .emacs to s:
  1077. +3. Add an assign GNUEMACS-19.25: and GNUEMCS: <wherever you've put the
  1078. +   emacs directory> to  your User-Startup.
  1079. +4. Install Matt Dillon's fifo.library and fifo: handler if you want to use
  1080. +   external processes (This can be found on Fish disks).
  1081. +5. Define various environment variables (these all have defaults, so this
  1082. +   isn't absolutely necessary, except for ESHELL) :
  1083. +
  1084. +     USER     - a username (a la Unix) (default "user")
  1085. +     USERNAME - your full name (default same as $USER)
  1086. +     HOME     - your "home" directory (This is the directory refered to
  1087. +        by ~/<file>, and where the .emacs file is looked for)
  1088. +        (default "s:").
  1089. +     HOSTNAME - a name for your system (default "amiga")
  1090. +     ESHELL   - where to find an unix-like shell (no default). By unix-like
  1091. +        I mean that it should not open a window to get its input.
  1092. +        The only tested value for this is GNUEMACS:etc/sh.
  1093. +
  1094. +   For instance, I have the following values:
  1095. +     USER: dgay, USERNAME: David E. Gay, HOSTNAME: owl,
  1096. +     ESHELL: gnuemacs:etc/sh
  1097. +
  1098. +6. If you want to check that emacs is working, type 
  1099. +  assign gnuemacs-19.25: ""
  1100. +  emacs
  1101. +
  1102. +   If all goes well, emacs should open a window. If you get
  1103. +     memacs: Unknown command
  1104. +   you have an alias for emacs. Try editing s:Shell-Startup and removing it.
  1105. +
  1106. +   If you get
  1107. +     emacs: file is not executable
  1108. +   try typing
  1109. +     protect s:emacs +s
  1110. +
  1111. +   If you get
  1112. +     emacs: Unknown command
  1113. +   try
  1114. +     path s: add
  1115. +
  1116. +   And finally, if you get
  1117. +     wrong number of arguments
  1118. +     if failed returncode 10
  1119. +   try
  1120. +     path sys:rexxc add
  1121. +
  1122. +
  1123. +7. If you are going to use emacs over a serial line, you must install 
  1124. +   the termcap file, which comes with the source version. To do so, type:
  1125. +
  1126. +     join gnuemacs-19.25:etc/termcap.ucb gnuemacs-19.25:etc/termcap.amiga 
  1127. +        as s:termcap
  1128. diff -rup --new-file baseline/fsf/emacs/Product-Info amiga/fsf/emacs/Product-Info
  1129. --- baseline/fsf/emacs/Product-Info    Wed Dec 31 17:00:00 1969
  1130. +++ amiga/fsf/emacs/Product-Info    Sat Sep 28 00:00:00 1996
  1131. @@ -0,0 +1,62 @@
  1132. +.name
  1133. +emacs
  1134. +.fullname
  1135. +GNU Emacs editor
  1136. +.type
  1137. +Text Editing
  1138. +.short
  1139. +GNU Emacs editor
  1140. +.description
  1141. +GNU Emacs is the GNU incarnation of the advanced, self-documenting,
  1142. +customizable, extensible real-time display editor Emacs. (The `G' in
  1143. +`GNU' is not silent.)
  1144. +
  1145. +We say that Emacs is a "display" editor because normally the text
  1146. +being edited is visible on the screen and is updated automatically as
  1147. +you type your commands.
  1148. +
  1149. +We call it a "real-time" editor because the display is updated very
  1150. +frequently, usually after each character or pair of characters you
  1151. +type.  This minimizes the amount of information you must keep in your
  1152. +head as you edit.
  1153. +
  1154. +We call Emacs advanced because it provides facilities that go beyond
  1155. +simple insertion and deletion: filling of text; automatic indentation
  1156. +of programs; viewing two or more files at once; and dealing in terms
  1157. +of characters, words, lines, sentences, paragraphs, and pages, as well
  1158. +as expressions and comments in several different programming
  1159. +languages.  It is much easier to type one command meaning "go to the
  1160. +end of the paragraph" than to find that spot with simple cursor keys.
  1161. +
  1162. +"Self-documenting" means that at any time you can type a special
  1163. +character, `Control-h', to find out what your options are.  You can
  1164. +also use it to find out what any command does, or to find all the
  1165. +commands that pertain to a topic.
  1166. +
  1167. +"Customizable" means that you can change the definitions of Emacs
  1168. +commands in little ways.  For example, if you use a programming
  1169. +language in which comments start with `<**' and end with `**>', you
  1170. +can tell the Emacs comment manipulation commands to use those strings.
  1171. +Another sort of customization is rearrangement of the command set.
  1172. +For example, if you prefer the four basic cursor motion commands (up,
  1173. +down, left and right) on keys in a diamond pattern on the keyboard,
  1174. +you can have it.
  1175. +
  1176. +"Extensible" means that you can go beyond simple customization and
  1177. +write entirely new commands, programs in the Lisp language to be run
  1178. +by Emacs's own Lisp interpreter.  Emacs is an "on-line extensible"
  1179. +system, which means that it is divided into many functions that call
  1180. +each other, any of which can be redefined in the middle of an editing
  1181. +session.  Any part of Emacs can be replaced without making a separate
  1182. +copy of all of Emacs.  Most of the editing commands of Emacs are
  1183. +written in Lisp already; the few exceptions could have been written in
  1184. +Lisp but are written in C for efficiency.  Although only a programmer
  1185. +can write an extension, anybody can use it afterward.
  1186. +.version
  1187. +19.28
  1188. +.author
  1189. +Richard Stallman
  1190. +.distribution
  1191. +GNU Public License
  1192. +.described-by
  1193. +Fred Fish (fnf@amigalib.com)
  1194. diff -rup --new-file baseline/fsf/emacs/README.1st amiga/fsf/emacs/README.1st
  1195. --- baseline/fsf/emacs/README.1st    Wed Dec 31 17:00:00 1969
  1196. +++ amiga/fsf/emacs/README.1st    Sat Sep 28 00:00:00 1996
  1197. @@ -0,0 +1,5 @@
  1198. +OK... this is a BETA release... most things work, but there are some
  1199. +serious *known* bugs.
  1200. +
  1201. +Read announce2.0 and INSTALLATION first !!!
  1202. +This version of emacs requires AmigaOS V2.04.
  1203. diff -rup --new-file baseline/fsf/emacs/amiga.doc amiga/fsf/emacs/amiga.doc
  1204. --- baseline/fsf/emacs/amiga.doc    Wed Dec 31 17:00:00 1969
  1205. +++ amiga/fsf/emacs/amiga.doc    Sat Sep 28 00:00:00 1996
  1206. @@ -0,0 +1,565 @@
  1207. +1. Introduction
  1208. +---------------
  1209. +
  1210. +Emacs is a powerful, but sometimes cryptic, editor. In this Amiga
  1211. +version, I have tried to make it easier to use with menus, mouse
  1212. +support and arrow key support, but it still requires some getting used
  1213. +to. I would recommend starting with the tutorial, which can be started
  1214. +from the Help menu (if it is missing, you didn't install emacs
  1215. +correctly. Check that the file s:.emacs-menu.el exists) or from the
  1216. +keyboard by typing Control-H and then t.
  1217. +
  1218. +This file only describes the Amiga specific features of emacs, and it
  1219. +assumes a working knowledge of emacs. For more documentation you can
  1220. +consult the emacs help (Information in the Help menu, or C-h i) or
  1221. +read the emacs manual (which is the same document in a printed form).
  1222. +This manual can be bought from the
  1223. +
  1224. +     Free Software Foundation
  1225. +     675 Mass Ave
  1226. +     Cambridge, MA 02139
  1227. +     USA
  1228. +
  1229. +See the file gnuemacs:etc/DISTRIB for more information (you can type
  1230. +C-h C-d to view it).
  1231. +
  1232. +To install emacs, read the file INSTALLATION.
  1233. +
  1234. +
  1235. +2. Changes since the last version
  1236. +---------------------------------
  1237. +
  1238. +Several features have been added since v1.25:
  1239. +
  1240. +- workbench support.
  1241. +- asynchronous processes can be run in emacs, so the shell & compile
  1242. +  commands now work.
  1243. +- startup problems (missing libraries, no memory, etc) should now
  1244. +  be reported (there is one exception: if run under any version
  1245. +  before 2.04, emacs will fail silently).
  1246. +- the emacs window can be configured in s:.emacs without causing
  1247. +  nasty visual effects (the window opens directly where you wanted,
  1248. +  with the correct size, fonts, etc).
  1249. +- the numeric keypad keys can now be defined separately from the
  1250. +  equivalent keys on the main keyboard.
  1251. +- the 'ctrl-g' interrupt key now works far better (it can
  1252. +  interrupt run-away lisp code).
  1253. +- the -t startup option has been renamed as -dev.
  1254. +- the keyboard sequences generated for amiga specific features
  1255. +  (eg function & arrow keys) have changed (these used to start
  1256. +  with C-\. This has been replaced by the C-x C-^ sequence, for
  1257. +  very good reasons).
  1258. +- last redisplay bug squashed !
  1259. +
  1260. +Numerous other bugs have also been destroyed ...
  1261. +
  1262. +
  1263. +3. Using emacs in a window
  1264. +--------------------------
  1265. +
  1266. +Emacs runs in a window on the Workbench (this can be changed). It
  1267. +basically works like just any other version of GNU Emacs, using the
  1268. +same keys, etc. It uses the standard amiga keymap, but with some strange
  1269. +modifications:
  1270. +
  1271. +o The left alt key is stolen as a meta key for emacs. This means you can't use
  1272. +it to enter accents. However, the right alt key remains untouched. Hence
  1273. +'left alt-f e' moves forward one word and inserts an e, while
  1274. +'right alt-f e' inserts an e acute. In the rest of the text, the meta key
  1275. +always means the 'left alt' key.
  1276. +
  1277. +o C-space is always mapped to C-@, the set-mark command, for convenience.
  1278. +
  1279. +o The backspace key always sends DEL (delete previous character in emacs),
  1280. +and DEL sends C-d (delete character under cursor). If you don't like this, 
  1281. +add the line
  1282. +    (setq amiga-remap-bsdel nil)
  1283. +to your .emacs file (in s:).
  1284. +
  1285. +o Keypad keys are prefixed with C-x C-^ K (so 0 generates C-x C-^ K 0).
  1286. +Normally, C-x C-^ K is a do-nothing operation, so the keypad keys just
  1287. +insert the usual character. If you want to redefine the keypad keys, you
  1288. +must do the following:
  1289. +
  1290. +  (global-set-key "\C-x\C-^K" (make-sparse-keymap))
  1291. +  (global-set-key "\C-x\C-^K0" '<function for key 0>)
  1292. +  (global-set-key "\C-x\C-^K1" '<function for key 0>)
  1293. +  ...
  1294. +
  1295. +Once you have redefined one key, you must define all of them (as C-x C-^ K
  1296. +is no longer a do-nothing command). If you still want a keypad to insert
  1297. +its usual character, you can use (for +)
  1298. +
  1299. +  (global-set-key "\C-x\C-^K+" 'self-insert-command)
  1300. +
  1301. +o The sequences for function & arrow keys are the standard Amiga ones, 
  1302. +except that the initial character (CSI, code 155) is replaced by
  1303. +C-x C-^. For example, F1 is C-x C-^ 0 ~. You can always find the 
  1304. +characters generated by a key by pressing it, and then executing
  1305. +M-x view-lossage. This displays the last 100 characters seen by emacs. So
  1306. +to define F1 to be view-lossage you would add
  1307. +
  1308. +  (global-set-key "\C-x\C-^0~" 'view-lossage)
  1309. +
  1310. +to s:.emacs (trying to define F1 interactively with M-x global-set-key
  1311. +will fail ...).
  1312. +
  1313. +
  1314. +There are several extra features:
  1315. +
  1316. +a) Mouse support, similar to the X-Windows version.
  1317. +
  1318. +You can position the cursor with the left mouse button. Other possibilites are:
  1319. +
  1320. +action            result
  1321. +------------------------------
  1322. +shift-left button    set mark at mouse position
  1323. +control-left button    cut between point and mouse position
  1324. +meta-left button    copy between point and mouse position
  1325. +middle button        paste
  1326. +shift-middle button    iconify emacs window (double click to deiconify)
  1327. +
  1328. +Some of the control, meta, etc combinations may be stolen by Intuition or
  1329. +commodities programs, so don't be surprised if they don't all work.
  1330. +
  1331. +All of these actions may be redefined (this is emacs after all!), see the
  1332. +file lisp/amiga-mouse.el for details (you will need to learn lisp if you don't
  1333. +already know it ...) [Note: this file is not included in the binary only
  1334. +distribution, you will need the source code version].
  1335. +
  1336. +b) Clipboard
  1337. +
  1338. +At first glance, emacs uses the Amiga clipboard, ie it cuts to the
  1339. +clipboard and pastes from it (via the menu operations or the C-w
  1340. +(kill-region), M-w (copy-region-as-kill) & C-y (yank) commands).
  1341. +
  1342. +Things are actually complicated by emacs use of a "kill ring" (ie it
  1343. +remembers the last 30 things cut. The M-y (yank-pop, menu command
  1344. +Paste Previous) allows you to recover old cuts):
  1345. +
  1346. +- When you cut (or copy) something in emacs it is placed in the
  1347. +clipboard.
  1348. +
  1349. +- When you paste (yank) something in emacs, it checks the clipboard to
  1350. +see if it contains anything new. If so, it pastes that.
  1351. +
  1352. +[Note: It also checks the clipboard when you cut something, and saves
  1353. +that in the kill-ring if necessary]
  1354. +
  1355. +All this effort is used to make the clipboard appear to operate
  1356. +transparently in emacs.
  1357. +
  1358. +c) Window
  1359. +
  1360. +By default, emacs runs in a window on the workbench screen using the
  1361. +system default font and the standard colours. All this can be changed:
  1362. +
  1363. +o The font can be specified with the -fn <font> <size> option when you
  1364. +run emacs. You can also use the amiga-set-font command interactively,
  1365. +or add a line like
  1366. +   (amiga-set-font "topaz" 11)
  1367. +to your s:.emacs file. The font must be non-proportional.
  1368. +
  1369. +o The window size and screen can be changed with the
  1370. +amiga-set-geometry function. It takes 4 or 5 parameters, the (x,y)
  1371. +position of the window and its (width,height). The last optional
  1372. +parameter specifies the screen: a string gives the name of a public
  1373. +screen, t stands for the default public screen (normally the
  1374. +workbench) and nil means keep the same screen. For example, the lisp code
  1375. +  (amiga-set-geometry 0 0 640 400)
  1376. +resizes the emacs window to 640x400. If the screen would be too small
  1377. +given the current font (there must be room for 11x4 characters), the
  1378. +change is refused.
  1379. +
  1380. +To use a public screen requires an utility to create them ...
  1381. +
  1382. +o The foreground & background colours can be changed with the 
  1383. +amiga-set-foreground-color & amiga-set-background-color commands. You
  1384. +specify the pen and not the actual colour (from 0 to 7 only,
  1385. +because of restrictions in console.device).
  1386. +
  1387. +o The emacs window can be iconified (onto the workbench) with the
  1388. +amiga-iconify command. This is bound to shift-middle button on a 3
  1389. +button mouse, and to C-z (which is normally bound to suspend-emacs,
  1390. +which doesn't work on the Amiga).
  1391. +
  1392. +To deiconify emacs, double click on the icon.
  1393. +
  1394. +[Note: in this version, emacs will continue to answer to ARexx
  1395. +commands while iconified. The variable amiga-emacs-iconfied is
  1396. +set to 't' while emacs is iconified, 'nil' the rest of the time.
  1397. +You can test this, eg to make sure that emacs is not iconified 
  1398. +before reading some user input]
  1399. +
  1400. +If you use the functions described above in s:.emacs, they will take 
  1401. +effect before emacs's window is opened. This will avoid the nasty
  1402. +visual effects of the previous version.
  1403. +
  1404. +d) Menus
  1405. +
  1406. +If you have installed emacs correctly (see the INSTALLATION file), it
  1407. +will startup with some menus containing some useful basic
  1408. +functions (the layout was inspired from that of TurboText, another
  1409. +good editor which has the disadvantage of being more expensive than
  1410. +emacs ...). Alongside each item is the emacs key sequence which
  1411. +invokes that function, if any.
  1412. +
  1413. +Using the Menu Help functionality of AmigaOS 2.04, you can get help
  1414. +on any menu item by highlighting it with the mouse and pressing the
  1415. +Help key [This is easier if you're left handed :-)].
  1416. +
  1417. +The menus are not fixed, they are defined by the s:.emacs-menu.el file
  1418. +(which isn't human-readable). To modify them, edit s:.emacs-menu.menu.
  1419. +This contains a lisp-like (but quite legible even for lisp-haters)
  1420. +representation of the menus, which you can modify by adding items or
  1421. +menus. The format should be obvious (just make sure that closing
  1422. +brackets correspond to the correct opening ones, emacs always shows
  1423. +the corresponding '(' when you type a ')'. Also the last bracket
  1424. +should correspond with the first).
  1425. +
  1426. +When you have finished your changes, type C-c C-c. This will save your
  1427. +menus, and then generate a .el file from them (this takes several
  1428. +seconds even on an A3000. Be patient). Then save the resulting file.
  1429. +To have the new menus take effect immediately, type M-C-x while in the
  1430. +.el file.
  1431. +
  1432. +Enterprising lisp programmers can customise the menus even more by
  1433. +modifying the functions amiga-menus-dispatch and/or amiga-menus-help
  1434. +in lisp/amiga-mouse.el. This code basically receives a (menu-number
  1435. +menu-item-number) list and must take the appropriate action
  1436. +(currently, execute the command associated with that particular menu
  1437. +item). The lack of comments will surely not deter these audacious
  1438. +pionneers ...
  1439. +
  1440. +e) Command line options
  1441. +
  1442. +Beyond the standard emacs command line options (for which
  1443. +documentation tends to be rather sketchy, not to say missing), you can
  1444. +also use:
  1445. +
  1446. +-prealloc <n>: Reserve n bytes of memory for emacs exclusively. This
  1447. +option *must* be the first on the command line. On the A3000, chip
  1448. +memory can't be used for emacs (the details are complicated ...), so
  1449. +you will run out of memory sooner than expected. This option allows
  1450. +you to reserve some for emacs before it gets eaten by other programs.
  1451. +
  1452. +-fn <font> <size>: Set the font that emacs uses, like the
  1453. +amiga-set-font command (see section c, on windows). Note that there
  1454. +must be enough room for 11x4 characters in the standard 640x200
  1455. +window. So avoid fonts bigger than 40 points ...
  1456. +
  1457. +-nw: Don't use a window, use a serial port. See part 3, Using Emacs
  1458. +over a serial line.
  1459. +
  1460. +f) ARexx
  1461. +
  1462. +Emacs has a full ARexx interface. It can execute scripts and commands
  1463. +synchronously (waiting for the result) or asynchronously, and has an
  1464. +ARexx port from which it accepts commands. 
  1465. +
  1466. +To execute a script, you use the amiga-arexx-do-command (synchronous)
  1467. +or amiga-arexx-send-command (asynchronous) commands. These ask for the
  1468. +script file name (the default extension is .elx). If you just want to
  1469. +execute a simple ARexx command, you can prefix those commands with C-u
  1470. +and specify the string to execute.
  1471. +
  1472. +From lisp, you must use
  1473. +  (amiga-send-command "<file>" nil) for a script, and
  1474. +  (amiga-send-command "<commands>" t) for direct execution.
  1475. +(and the same for amiga-do-command). The result of amiga-send-command
  1476. +is an integer that can be passed to amiga-arexx-wait-command to wait
  1477. +for the completion of the script or command. It can also be used with 
  1478. +amiga-arexx-check-command to check if the script has finished. For
  1479. +example:
  1480. +
  1481. +  (let ((arexx-id (amiga-send-command "start-fun" nil)))
  1482. +    ... do something here ...
  1483. +    ; and wait for arexx script to end
  1484. +    (amiga-arexx-wait-command arexx-id))
  1485. +
  1486. +Emacs's ARexx port accepts commands in lisp, and is usually called
  1487. +EMACS1 (if you run emacs twice simulatenously, the second one will
  1488. +have EMACS2, and so on). For example (from a shell),
  1489. +
  1490. +  rx "address EMACS1 '(beginning-of-buffer)'"
  1491. +
  1492. +will set point to the beginning of the buffer.
  1493. +
  1494. +ARexx commands are only processed at certain times, so be careful how
  1495. +you design your applications. These are:
  1496. +
  1497. +o While waiting for commands from the keyboard (ie when emacs is
  1498. +idle or iconified).
  1499. +o While processing a synchronous (amiga-arexx-do-command) script or
  1500. +waiting for a script to terminate with amiga-arexx-wait-command.
  1501. +o When the amiga-arexx-process function is called.
  1502. +
  1503. +They also affect the user visible state by default (ie calling
  1504. +beginning-of-buffer as above modifies the user's position). Avoid
  1505. +sending random commands at random times, or use save-excursion.
  1506. +
  1507. +As usual, all this behaviour can be modified to some extent. Look in
  1508. +amiga-init.el for details [The source code is the documentation...].
  1509. +
  1510. +I still haven't written any significant examples, so ...
  1511. +
  1512. +g) Workbench support
  1513. +
  1514. +Beyond iconification (see the section on the emacs window), emacs 
  1515. +supports a number of features for Workbench users:
  1516. +
  1517. +- emacs can be run from the Workbench, by all the usual methods
  1518. +  (double clicking on the tool, double clicking on a project which
  1519. +  has temacs as its default tool, etc). All the projects that are
  1520. +  passed to temacs will be loaded (if they are files), or listed 
  1521. +  with dired (if they are directories).
  1522. +
  1523. +- icons can be dropped in emacs's window, the corresponding file
  1524. +  or directory will be loaded or listed.
  1525. +
  1526. +- icons can be created for files that are saved. This is the default
  1527. +  when emacs is run from the workbench. This is controlled by the
  1528. +  amiga-create-icons variable: if you always want icons to be
  1529. +  created, add
  1530. +
  1531. +    (setq amiga-create-icons t)
  1532. +
  1533. +  to s:.emacs, or
  1534. +
  1535. +    (setq amiga-create-icons nil)
  1536. +
  1537. +  if you never want them.
  1538. +
  1539. +h) external processes
  1540. +
  1541. +This version of emacs fully supports synchronous (used to get the
  1542. +result of ls for dired, for instance) and asynchronous (as in the
  1543. +'shell' command) processes. However, it requires Matt Dillon's
  1544. +'fifo.device' and 'fifo:' devices to function. See the INSTALLATION
  1545. +file for details.
  1546. +
  1547. +This allows full support for all emacs functions which call external
  1548. +programs, providing that said programs exist on the Amiga. The
  1549. +following work:
  1550. +  compile (for SAS C 5.10b, with a few occasional problems)
  1551. +  grep
  1552. +  shell (but see the discussions below)
  1553. +  display-time
  1554. +  dired
  1555. +  list-directory
  1556. +  sort-...
  1557. +
  1558. +The compile command sometimes has problems finding file names in the
  1559. +error messages, and tries to read the current directory instead. If
  1560. +you are patient, it moves on to the next file.
  1561. +
  1562. +Because of differences between AmigaOS & Unix, sending signals (eg
  1563. +interrupt, kill) to processes is not very reliable. The following
  1564. +points must be kept in mind:
  1565. +
  1566. +- In some unlikely cases, the appropriate process to signal won't be 
  1567. +  found. 
  1568. +- The stop-process & continue-process functions don't work.
  1569. +- interrupt-process & quit-process send a ctrl-c & ctrl-d to the
  1570. +  process and all its children (probably).
  1571. +- kill-process also sends a ctrl-c & ctrl-d. It then pretends that
  1572. +  the process has died.
  1573. +
  1574. +All input sent to a process after an end-of-file is ignored. The process
  1575. +just sees an endless sequence of end-of-files. This is most visible with
  1576. +the shell command, where if you send an end-of-file to a program (eg type)
  1577. +with C-c C-d, the shell will exit. The bug is in fifo.device, not in emacs.
  1578. +
  1579. +The input & output of processes run inside emacs look like interactive
  1580. +files (which allows, for instance, shells to run correctly). However, this
  1581. +confuses some programs which expect all interactive files to be Amiga
  1582. +consoles and causes them to crash. Several versions of ls suffer from this
  1583. +problem (they run into problems while trying to get the window size).
  1584. +
  1585. +amiga-process-stack-size is the size of the stack for new processes. If it
  1586. +is 0 (the default), emacs's stack size is used.
  1587. +
  1588. +
  1589. +4. Using emacs over a serial line
  1590. +---------------------------------
  1591. +
  1592. +To use emacs over a serial port, you must do:
  1593. +
  1594. +  setenv TERM <terminal type> (eg vt100)
  1595. +  emacs -nw
  1596. +
  1597. +The setenv line can be put in your User-Startup, so as to avoid typing
  1598. +it every time.
  1599. +
  1600. +Emacs cannot simply guess how your terminal works from its name, it
  1601. +needs a description of it. This is found in a termcap file, which
  1602. +emacs looks for in s:termcap. If you didn't install this file with emacs,
  1603. +you can do so by typing (in a CLI):
  1604. +
  1605. +  join gnuemacs:etc/termcap.ucb gnuemacs:etc/termcap.amiga as s:termcap
  1606. +
  1607. +[Note: These files only come with the source version]
  1608. +
  1609. +The -nw prevents the use of a window.
  1610. +
  1611. +If you have several serial ports, you can type
  1612. +
  1613. +  emacs -dev ser2.device 2
  1614. +
  1615. +to use port 2 of device ser2.device. Use of the -dev option implies -nw.
  1616. +
  1617. +These options (-dev & -nw) *must* be specified at the start of the
  1618. +command line.
  1619. +
  1620. +The descriptions of the Clipboard, the command line options and the
  1621. +ARexx port in part 2 above also apply to use over a serial port.
  1622. +
  1623. +
  1624. +5. Redumping emacs [This section for expert users only]
  1625. +-------------------------------------------------------
  1626. +
  1627. +Enterprising users may want to change the lisp files which are loaded
  1628. +into the Emacs dump file. The procedure for doing this is very similar
  1629. +to that with the Unix version, except that the amount of pure storage
  1630. +can be changed without recompiling emacs. This will allow users
  1631. +without SAS C v5.10b to still make such changes.
  1632. +
  1633. +The necessary lisp files are only included in the source distribution,
  1634. +so you will have to get that first. Once that is available, that you
  1635. +have made all your changes (eg adding some extra files to be dumped),
  1636. +use the following sequence to redump emacs:
  1637. +
  1638. +  cd gnuemacs:etc
  1639. +  stack 20000
  1640. +  /temacs -pure <n> -malloc <m> -nl -batch -l loadup dump
  1641. +
  1642. +The -pure <n> and -malloc <m> options should only be necessary if you
  1643. +add extra files to be dumped, see below how to choose values for n &
  1644. +m. The above order for the parameters must be preserved. Specifying
  1645. +dump without -nl & -batch will have unpredicatable consequences.
  1646. +
  1647. +Once all the files are loaded, a new copy of gnuemacs:etc/EMACS-DATA
  1648. +will be saved, and all should work correctly. If you get one of the
  1649. +following messages:
  1650. +
  1651. +  Pure Lisp storage exhausted
  1652. +
  1653. +  Emacs dump: ran out of memory for malloc.
  1654. +
  1655. +read the following description of the -pure & -malloc options:
  1656. +
  1657. +When emacs is dumped, it saves (amongst other things) the copies of
  1658. +two zones of memory, called the pure storage area and the malloc hunk.
  1659. +These contain an internal representation of the lisp code, so the more
  1660. +code you include in a dumped emacs, the bigger these need to be. The
  1661. +default sizes of these are reasonable sizes for the standard lisp code
  1662. +which is dumped, but you will probably need to increase them if you
  1663. +add some more lisp modules. The best way to find the new values for n
  1664. +(size of pure area) and m (size of the malloc hunk), is to run the
  1665. +command
  1666. +
  1667. +  cd gnuemacs:etc
  1668. +  stack 20000
  1669. +  /temacs -pure 200000 -malloc 200000 -nl -batch -l loadup dump
  1670. +
  1671. +(these sizes should be largely sufficient, but if you still get one of
  1672. +the two error messages above, increase them). Then run emacs as usual,
  1673. +and look at the values of the 2 lisp variables
  1674. +
  1675. +     pure-bytes-used
  1676. +and  amiga-malloc-bytes-used
  1677. +
  1678. +pure-bytes used contains the minimum value for n, and
  1679. +amiga-malloc-bytes-used the minimum value for m. Add 1000 to these for
  1680. +luck to get values for n and m, and redump emacs using these.
  1681. +
  1682. +For those who are into modifying the C source, the default values are
  1683. +130000 for n (see DEF_PURESIZE in s-amiga.h) and 92000 for m (see
  1684. +MALLOC_HUNK_SIZE in amiga.h).
  1685. +
  1686. +6. Source
  1687. +---------
  1688. +
  1689. +Source for emacs and all the programs included with it should be
  1690. +obtainable from the same place as this file. If not, please send me
  1691. +mail (if you are on the Internet) and I will provide the missing
  1692. +pieces. Specifically, there should be:
  1693. +
  1694. +- The emacs sources
  1695. +- Sources for the 'unix library' needed to compile emacs
  1696. +- Source for the programs in the c directory (ls, sort, rmdir, grep).
  1697. +This consists of the GNU fileutils, textutils and grep packages.
  1698. +
  1699. +Distributing the binary without these packages is a violation of
  1700. +the GNU General Public License (see the file COPYRIGHT in the etc
  1701. +directory) under which emacs is distributed.
  1702. +
  1703. +7. Thanks & Problems
  1704. +--------------------
  1705. +
  1706. +I would like to thank the following people for their help while debugging
  1707. +emacs:
  1708. +
  1709. +- Philippe Morel & Jean-Marc Vandel for early and late testing respectively.
  1710. +- Jukka Partanen, Alan Bair, Michael Witbrock, Hugh D. Gamble and several
  1711. +others for beta-testing.
  1712. +
  1713. +Please send any bug reports, enhancement requests, etc to:
  1714. +
  1715. +Post:                E-mail:
  1716. +David Gay            dgay@di.epfl.ch
  1717. +19 Chemin de la Source
  1718. +CH-1296 Coppet
  1719. +Vaud
  1720. +Switzerland
  1721. +
  1722. +8. Ordering Information
  1723. +-----------------------
  1724. +
  1725. +I can provide a complete copy of my development directory, which
  1726. +includes:
  1727. +
  1728. +o the standard emacs-18.58 files
  1729. +o modified and new lisp files
  1730. +o Amiga-specific source, as text and in RCS format (highlighting the
  1731. +changes from a standard unix distribution, and the different versions).
  1732. +o assorted lisp packages hacked for the Amiga (I will be posting some
  1733. +of these in due course):
  1734. +  - a tags-like access to the 2.0 autodocs (you must already have a
  1735. +    copy of these ...)
  1736. +  - gnus (a news reader) for use with Matt Dillon's uucp package. 
  1737. +  - getris, a tetris clone for emacs
  1738. +
  1739. +All these as a tar file on a QIC-150 tape, for $200 (the same price as
  1740. +the FSF, so as not to undercut them), or 300SF. This price is valid
  1741. +until the 31st December 1993, and includes shipping by surface mail.
  1742. +
  1743. +Please send all orders, by postal mail, to
  1744. +
  1745. +  David Gay
  1746. +  19 Chemin de la Source
  1747. +  CH-1296 Coppet
  1748. +  Vaud
  1749. +  Switzerland
  1750. +
  1751. +  Tel: +(41)-22 776 35 81 [Evenings, Central European Time]
  1752. +  Fax: +(41)-22 776 70 58
  1753. +
  1754. +Include with your order:
  1755. +- A cheque, in dollars or Swiss francs.
  1756. +- Your *complete* address (don't forget the country, etc).
  1757. +- A phone or fax number so I can contact you if I have any problems.
  1758. +
  1759. +I will be glad to include, on request, and with full source, some
  1760. +other pieces of software I have written:
  1761. +- An HP11 calculator (this is an update to the version available on
  1762. +fish disks, with some bug fixes and 2.0 specific features).
  1763. +- A scheme compiler for the Amiga, still in an alpha state.
  1764. +- A fortune cookie program, including 1 megabyte of cookies (merged
  1765. +from various sources).
  1766. +
  1767. +
  1768. +Dvaid Gay
  1769. +dgay@di.epfl.ch
  1770. +Ecole Polytechnique Federale de Lausanne - Switzerland
  1771. +Laboratoire d'Informatique Technique
  1772. diff -rup --new-file baseline/fsf/emacs/announce2.0 amiga/fsf/emacs/announce2.0
  1773. --- baseline/fsf/emacs/announce2.0    Wed Dec 31 17:00:00 1969
  1774. +++ amiga/fsf/emacs/announce2.0    Sat Sep 28 00:00:00 1996
  1775. @@ -0,0 +1,157 @@
  1776. +TITLE
  1777. +
  1778. +     GNU Emacs 19.25, Amiga BETA RELEASE 2.0, available for download
  1779. +
  1780. +VERSION
  1781. +
  1782. +     This updates the previous version of emacs (18.58 a1.26) to a
  1783. +     resonably current FSF version.
  1784. +
  1785. +COMPANY
  1786. +
  1787. +     The Free Software Foundation
  1788. +     'n me.
  1789. +
  1790. +AUTHOR
  1791. +
  1792. +     A whole host of people including quite a few Amiga people.  I
  1793. +     don't know who all to thank, but Richard Stallman and David Gay
  1794. +     come to mind.
  1795. +
  1796. +WARNING
  1797. +
  1798. +     Even though, as GNU software, this comes with NO warrenty, this
  1799. +     comes with even less warenty.  This is a BETA version.  It works
  1800. +     on my machine.
  1801. +
  1802. +DESCRIPTION
  1803. +
  1804. +     Emacs is a very powerful, but sometimes cryptic, text editor. Its
  1805. +     basic features are similar to those of the MEmacs editor which
  1806. +     comes with AmigaOS (in the Tools directory), but has numerous
  1807. +     other facilities:
  1808. +
  1809. +     - unlimited undo.
  1810. +     - language specific editing, with automatic (re)indentation.
  1811. +     - a dialect of lisp as extension language, leading to extreme 
  1812. +       reconfigurability.
  1813. +     - abbreviations for commonly typed words.
  1814. +     - complete on-line manual.
  1815. +     - powerful search & replace facilities (including wildcards).
  1816. +     - direct mail and news reading ability
  1817. +     - everything you could every desire in an editor and some of what
  1818. +       you'd like in a good OS
  1819. +
  1820. +NEW FEATURES
  1821. +
  1822. +     Since the previous release (1.26), the major change has been to
  1823. +     move to emacs-19.25.  Emacs-19 has many new features and
  1824. +     optimizations.  Many of the new lisp packages require Emacs-19.
  1825. +
  1826. +OLD FEATURES
  1827. +
  1828. +     - menus, mouse, clipboard, rexx and workbench support.
  1829. +     - public screen support
  1830. +     - For the most part, it's working "good enough" --- I'm using for most
  1831. +       everything.  I havn't, however, deleted 18 from my disk yet ;).
  1832. +
  1833. +MISSING EMACS-19 FEATURES
  1834. +
  1835. +     - multiple "frames" (what emacs calls windows) support.
  1836. +     - fonts/faces (emacs does support choice of *one* font)
  1837. +     - mouse support isn't completely Emacs-19 compliant.
  1838. +
  1839. +SPECIAL REQUIREMENTS
  1840. +
  1841. +     - AmigaOS 2.04
  1842. +     - At least 2MB of memory (emacs uses about 750k + memory for the
  1843. +       files being edited).
  1844. +     - 3.5MB of free disk space for the binary version, 11.3MB for the 
  1845. +       source version (but you can remove some of the files once it
  1846. +       has been installed).  If you want to build it, don't even
  1847. +       ask...
  1848. +     - Emacs works with a 68000 (A500,A2000), but is a bit slow. It is
  1849. +       very pleasant to use with a 68030/25MHz ...
  1850. +
  1851. +KNOWN BUGS
  1852. +
  1853. +     - exec-path just doesn't seem to work right.  Some things that
  1854. +       call external programs won't find them.  Sometimes there is a
  1855. +       way around as in vc-path for vc.  However, anything you put in
  1856. +       gnuemacs:etc (an extra assign to gnuemacs-19.25) will be found
  1857. +       as will anything in s: I honestly havn't figured this one out
  1858. +       yet.
  1859. +     - "vm" creates buffers with *huge* filenames.  The format is uses
  1860. +       to generate a buffer name from a "forwarded" buffer puts in a
  1861. +       colon.  This causes a lockup.  This may be true for other
  1862. +       buffer names with a colon.
  1863. +     - I havn't tested menus yet.  I am told someone has munged the
  1864. +       menus to work just like other v19 menus.  Someone should verify
  1865. +       this.
  1866. +     - clipboard interaction doesn't work exactly as expected.  If you
  1867. +       cut from some other app, then use kill-region, then use yank
  1868. +       followed by yank-pop, you don't get what you cut.
  1869. +     - Some issues with env-vars remain.  Emacs keeps internal copy
  1870. +       which may not be appropriate on the Amiga.  I havn't decided
  1871. +       how to hack this up yet.
  1872. +     - It seem inexplicably slightly slower in screen movement from
  1873. +       the 18 port.  May be due to creaping featureism.
  1874. +
  1875. +WHERE TO GET IT
  1876. +
  1877. +The following distributions are available:
  1878. +
  1879. +I will be uploading these to aminet first.  I assume that they will
  1880. +end up in some incoming director first.
  1881. +
  1882. +o binary only:
  1883. +  All the files necessary to use emacs. Has only a subset of the lisp
  1884. +  files, the rest may be got from a standard emacs distribution.
  1885. +  Distribution: ftp:
  1886. +    site: ftp.wustl.edu (aminet)
  1887. +    size: 3M
  1888. +    file: pub/aminet/utils/gnu/a2.0b-emacs-19.25-bin.LHA
  1889. +
  1890. +o full amiga version:
  1891. +  All the files necessary to compile emacs, all the lisp files, etc.
  1892. +  Should be noted that this file is *big* ;)
  1893. +  Distribution: ftp:
  1894. +    site: ftp.wustl.edu (aminet)
  1895. +    size: 14M
  1896. +    file: pub/aminet/utils/gnu/a2.0b-emacs-19.25-src.LHA
  1897. +
  1898. +o Complete distribution, latest version
  1899. +  Distribution: DAT, 8mm, cartridge tape
  1900. +  mail dgilbert@gamiga.guelphnet.dweomer.org for pricing.
  1901. +
  1902. +This port was based extensively on the work of David Gay (a1.26) which
  1903. +was based on that of Mark Henning (gnuemacs v1.10).
  1904. +
  1905. +DISTRIBUTABILITY
  1906. +
  1907. +      This is all GNU software, and is available under the standard
  1908. +      GNU Public licence, V2.x or later.  See file COPYING in the
  1909. +      distribution for more information.
  1910. +
  1911. +============================================================================
  1912. +|David Gilbert, University Of Guelph, Ontario | Two things can only be     |
  1913. +|Main:  dgilbert@gamiga.guelphnet.dweomer.org |  equal if and only if they |
  1914. +|Backup:    dgilbert@snowhite.cis.uoguelph.ca |   are precisely opposite.  |
  1915. +=========================================================GLO================
  1916. +-----BEGIN PGP PUBLIC KEY BLOCK-----
  1917. +Version: 2.6
  1918. +
  1919. +mQCNAi5r8M0AAAEEAM2rST67nC5DNuwa0ejycmbFzFSeCHuqY3jCvuFSaxKD8Qt6
  1920. +mHk87/nAVzbf8g8euGsloqTE6wH6PIyxIgooYTLofqU0iob6EXHLJI8FS40Ra0mZ
  1921. +uGKHs2JjDbQrHWbuwh9T64hmyEnBOKneA/gwZ6B8bSc1y6i+b+lPL8A93KIlAAUR
  1922. +tDVEYXZpZCBHaWxiZXJ0IDxkZ2lsYmVydEBnYW1pZ2EuZ3VlbHBobmV0LmR3ZW9t
  1923. +ZXIub3JnPokAlQIFEC6ucsDpTy/APdyiJQEBZ+gD/Aq4CDLlo+pD0wi4kz3WrwWC
  1924. +63Ru1zTmp6JC1p6WXnLuoJUfAbQmJvlwcXfSDohdHQctiWyZBw/9raHM8uE44JU8
  1925. +c+QQTyvN3ID4kBJO8zedszzHvdqznpCIVGLidyK0YR0Said0UfdX3pdvXvJkCskn
  1926. +ER46OGLhbYMeI0CmhgqviQBFAgUQLmveSEJtX8Qjp9cJAQGbsQGAj4TsXAl3kvFs
  1927. +4r3Dj8GhXztYfbbSZH6DYG9oc0Rzmg0VtEVAVCGTFwT+VHektajn
  1928. +=SoNL
  1929. +-----END PGP PUBLIC KEY BLOCK-----
  1930. +
  1931. +
  1932. +
  1933. diff -rup --new-file baseline/fsf/emacs/compile.doc amiga/fsf/emacs/compile.doc
  1934. --- baseline/fsf/emacs/compile.doc    Wed Dec 31 17:00:00 1969
  1935. +++ amiga/fsf/emacs/compile.doc    Sat Sep 28 00:00:00 1996
  1936. @@ -0,0 +1,48 @@
  1937. +To compile emacs, you will need SAS C 6.x. I use 6.51. If you try to
  1938. +make it work with Aztec C or gcc, you might run into difficulties with
  1939. +the dumping code:
  1940. +- The "small" data model (A4-relative) is used, to get all the variables
  1941. +  in one hunk.
  1942. +- Some variables are declared with the "far" attribute to get them out
  1943. +  of this hunk (and the dumping code depends on this). Move these to
  1944. +  the amiga_data.c module (which is for variables that shouldn't be
  1945. +  dumped).
  1946. +You will also need dgay's 'unix compatibility' library which should have been
  1947. +distributed alongside emacs.
  1948. +
  1949. +To compile:
  1950. +
  1951. +a) Install the 'unix compatibility' library.
  1952. +    As I recall, this is available on aminet under the name
  1953. +    "unix*.lha" or somesuch.
  1954. +
  1955. +b) Install as usual (see INSTALLATION).
  1956. +
  1957. +c) Compile the C preprocessor (SAS's one has problems ...):
  1958. +
  1959. +     cd gnuemacs:cpp
  1960. +     smake
  1961. +
  1962. +   When the preprocessor is running, it needs to find uncompacted versions
  1963. +   of the include files. If you only installed the compacted include files,
  1964. +   you will have to install the uncompacted ones somewhere.
  1965. +
  1966. +   You can check your type of include files by looking to see if (eg)
  1967. +   include:stdio.h is a readable text file (all is ok) or contains binary 
  1968. +   characters (you have the compacted files).
  1969. +
  1970. +   I've personally had trouble compiling this.  I'll include my copy.
  1971. +
  1972. +e) Compile & dump emacs
  1973. +
  1974. +     stack 100000
  1975. +     cd gnuemacs-19.25:src
  1976. +     smake
  1977. +     copy temacs /
  1978. +
  1979. +   (This takes around 20 minutes from scratch on an A2500/30).
  1980. +
  1981. +If all goes well, you should have a new version of emacs ...
  1982. +
  1983. +[Note: The DOC strings are not remade for some reason. To change this,
  1984. +edit ymakefile and remove the comment from the rule for xemacs]
  1985. diff -rup --new-file baseline/fsf/emacs/config.sub amiga/fsf/emacs/config.sub
  1986. --- baseline/fsf/emacs/config.sub    Sun Sep 11 18:15:33 1994
  1987. +++ amiga/fsf/emacs/config.sub    Sat Sep 28 00:00:00 1996
  1988. @@ -155,11 +155,11 @@ case $basic_machine in
  1989.          os=-sysv
  1990.          ;;
  1991.      amiga | amiga-*)
  1992. -        basic_machine=m68k-cbm
  1993. +        basic_machine=m68k-unknown
  1994.          ;;
  1995. -    amigados)
  1996. -        basic_machine=m68k-cbm
  1997. -        os=-amigados
  1998. +    amigaos)
  1999. +        basic_machine=m68k-unknown
  2000. +        os=-amigaos
  2001.          ;;
  2002.      amigaunix | amix)
  2003.          basic_machine=m68k-cbm
  2004. @@ -561,7 +561,7 @@ case $os in
  2005.      -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
  2006.            | -vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[345]* \
  2007.            | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
  2008. -          | -amigados* | -msdos* | -newsos* | -unicos* | -aos* \
  2009. +          | -amigaos* | -msdos* | -newsos* | -unicos* | -aos* \
  2010.            | -nindy* | -vxworks* | -ebmon* | -hms* | -mvs* | -clix* \
  2011.            | -riscos* | -linux* | -uniplus* | -iris* | -rtu* | -xenix* \
  2012.            | -hiux* | -386bsd* | -netbsd* | -freebsd* | -riscix* \
  2013. @@ -669,7 +669,7 @@ case $basic_machine in
  2014.          os=-sysv
  2015.          ;;
  2016.      *-cbm)
  2017. -        os=-amigados
  2018. +        os=-amigaos
  2019.          ;;
  2020.      *-dg)
  2021.          os=-dgux
  2022. diff -rup --new-file baseline/fsf/emacs/configure amiga/fsf/emacs/configure
  2023. --- baseline/fsf/emacs/configure    Sun Oct 16 01:17:37 1994
  2024. +++ amiga/fsf/emacs/configure    Sat Sep 28 00:00:00 1996
  2025. @@ -58,7 +58,7 @@ progname="`echo $0 | sed 's:^\./\./:\./:
  2026.  ### Establish some default values.
  2027.  run_in_place=
  2028.  single_tree=
  2029. -prefix='/usr/local'
  2030. +prefix='/ade'
  2031.  exec_prefix='${prefix}'
  2032.  bindir='${exec_prefix}/bin'
  2033.  datadir='${prefix}/lib'
  2034. @@ -256,7 +256,7 @@ Set it to either \`yes' or \`no'."
  2035.          ## Get the next argument from the argument list, if there is one.
  2036.              if [ $# = 0 ]; then
  2037.            (echo "${progname}: You must give a value for the \`--${optname}' option, as in
  2038. -    \`--${optname}=/usr/local/X11/include'."
  2039. +    \`--${optname}=/ade/X11/include'."
  2040.             echo "${short_usage}") >&2
  2041.            exit 1
  2042.          fi
  2043. @@ -270,7 +270,7 @@ Set it to either \`yes' or \`no'."
  2044.          ## Get the next argument from the argument list, if there is one.
  2045.              if [ $# = 0 ]; then
  2046.            (echo "${progname}: You must give a value for the \`--${optname}' option, as in
  2047. -    \`--${optname}=/usr/local/X11/lib'."
  2048. +    \`--${optname}=/ade/X11/lib'."
  2049.             echo "${short_usage}") >&2
  2050.            exit 1
  2051.          fi
  2052. @@ -503,6 +503,18 @@ case "${canonical}" in
  2053.      machine=alliant-2800 opsys=bsd4-3
  2054.    ;;
  2055.  
  2056. +  ## Commodore Amiga
  2057. +  m68*-*-amigaos)
  2058. +    machine=amiga opsys=amigaos
  2059. +    ## Convert absolute srcdir to canonical amigaos form, which
  2060. +    ## native compilers can understand and gcc can deal with.
  2061. +    case "${srcdir}" in
  2062. +      /* )
  2063. +    srcdir=`echo ${srcdir} | sed -e 's%^/%%' -e 's%/%:%'`
  2064. +      ;;
  2065. +    esac
  2066. +  ;;
  2067. +
  2068.    ## Altos 3068
  2069.    m68*-altos-sysv* )
  2070.      machine=altos opsys=usg5-2
  2071. @@ -1208,7 +1220,7 @@ ${CC-cc} -E conftest.c > conftest.out 2>
  2072.  if egrep yes conftest.out >/dev/null 2>&1; then
  2073.    GCC=1 # For later tests.
  2074.  fi
  2075. -rm -f conftest*
  2076. +rm -rf conftest*
  2077.   
  2078.  esac
  2079.  
  2080. @@ -1315,7 +1327,7 @@ if test -z "${INSTALL}"; then
  2081.    IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
  2082.    for ac_dir in $PATH; do
  2083.      case "$ac_dir" in
  2084. -    ''|.|/etc|/sbin|/usr/sbin|/usr/etc|/usr/afsws/bin|/usr/ucb) ;;
  2085. +    ''|.|/ade/etc) ;;
  2086.      *)
  2087.        # OSF1 and SCO ODT 3.0 have their own names for install.
  2088.        for ac_prog in installbsd scoinst install; do
  2089. @@ -1765,7 +1777,7 @@ ac_some_dir_failed=false
  2090.  #      $prefix/lib    where we will be installing things
  2091.  #      $exec_prefix/lib    likewise
  2092.  # eval it to expand exec_prefix.
  2093. -for ac_dir in `eval echo . /tmp /var/tmp /usr/tmp $prefix/lib $exec_prefix/lib` ; do
  2094. +for ac_dir in `eval echo . /tmp $prefix/lib $exec_prefix/lib` ; do
  2095.    test -d $ac_dir || continue
  2096.    test -w $ac_dir || continue # It's less confusing to not echo anything here.
  2097.    (echo 1 > $ac_dir/conftest9012345) 2>/dev/null
  2098. @@ -1834,10 +1846,10 @@ case "${window_system}" in
  2099.      else
  2100.        echo "  No window system specified.  Looking for X11."
  2101.        # If the user didn't specify a window system and we found X11, use it.
  2102. -      if [ -r /usr/lib/libX11.a \
  2103. -     -o -d /usr/include/X11 \
  2104. -         -o -d /usr/X386/include \
  2105. -     -o -d ${x_includes}/X11 ]; then
  2106. +      if [ -r /ade/lib/libX11.a \
  2107. +     -o -d /ade/include/X11 \
  2108. +         -o -d /ade/X386/include \
  2109. +     -o -d /ade/X11 ]; then
  2110.          window_system=x11
  2111.        fi
  2112.      fi
  2113. @@ -1876,7 +1888,7 @@ EOF
  2114.        ac_im_usrlibdir=$ac_im_libdir
  2115.      fi
  2116.      case "$ac_im_incroot" in
  2117. -    /usr/include) ;;
  2118. +    /ade/include) ;;
  2119.      *) test -z "$x_includes" && x_includes="$ac_im_incroot" ;;
  2120.      esac
  2121.      case "$ac_im_usrlibdir" in
  2122. @@ -1910,40 +1922,40 @@ if test -z "$ac_err"; then
  2123.  else
  2124.    rm -rf conftest*
  2125.    for ac_dir in               \
  2126. -    /usr/X11R6/include        \
  2127. -    /usr/X11R5/include        \
  2128. -    /usr/X11R4/include        \
  2129. +    /ade/X11R6/include        \
  2130. +    /ade/X11R5/include        \
  2131. +    /ade/X11R4/include        \
  2132.                                \
  2133. -    /usr/include/X11R6        \
  2134. -    /usr/include/X11R5        \
  2135. -    /usr/include/X11R4        \
  2136. +    /ade/include/X11R6        \
  2137. +    /ade/include/X11R5        \
  2138. +    /ade/include/X11R4        \
  2139.                                \
  2140. -    /usr/local/X11R6/include  \
  2141. -    /usr/local/X11R5/include  \
  2142. -    /usr/local/X11R4/include  \
  2143. +    /ade/local/X11R6/include  \
  2144. +    /ade/local/X11R5/include  \
  2145. +    /ade/local/X11R4/include  \
  2146.                                \
  2147. -    /usr/local/include/X11R6  \
  2148. -    /usr/local/include/X11R5  \
  2149. -    /usr/local/include/X11R4  \
  2150. +    /ade/local/include/X11R6  \
  2151. +    /ade/local/include/X11R5  \
  2152. +    /ade/local/include/X11R4  \
  2153.                                \
  2154. -    /usr/X11/include          \
  2155. -    /usr/include/X11          \
  2156. -    /usr/local/X11/include    \
  2157. -    /usr/local/include/X11    \
  2158. +    /ade/X11/include          \
  2159. +    /ade/include/X11          \
  2160. +    /ade/local/X11/include    \
  2161. +    /ade/local/include/X11    \
  2162.                                \
  2163. -    /usr/X386/include         \
  2164. -    /usr/x386/include         \
  2165. -    /usr/XFree86/include/X11  \
  2166. +    /ade/X386/include         \
  2167. +    /ade/x386/include         \
  2168. +    /ade/XFree86/include/X11  \
  2169.                                \
  2170. -    /usr/include              \
  2171. -    /usr/local/include        \
  2172. -    /usr/unsupported/include  \
  2173. -    /usr/athena/include       \
  2174. -    /usr/local/x11r5/include  \
  2175. -    /usr/lpp/Xamples/include  \
  2176. +    /ade/include              \
  2177. +    /ade/local/include        \
  2178. +    /ade/unsupported/include  \
  2179. +    /ade/athena/include       \
  2180. +    /ade/local/x11r5/include  \
  2181. +    /ade/lpp/Xamples/include  \
  2182.                                \
  2183. -    /usr/openwin/include      \
  2184. -    /usr/openwin/share/include \
  2185. +    /ade/openwin/include      \
  2186. +    /ade/openwin/share/include \
  2187.      ; \
  2188.    do
  2189.      if test -r "$ac_dir/$x_direct_test_include"; then
  2190. @@ -1978,40 +1990,40 @@ if test -n "${ac_have_lib}"; then
  2191.     :; no_x=
  2192.  else
  2193.     :; for ac_dir in `echo "$x_includes" | sed s/include/lib/` \
  2194. -    /usr/X11R6/lib        \
  2195. -    /usr/X11R5/lib        \
  2196. -    /usr/X11R4/lib        \
  2197. +    /ade/X11R6/lib        \
  2198. +    /ade/X11R5/lib        \
  2199. +    /ade/X11R4/lib        \
  2200.                            \
  2201. -    /usr/lib/X11R6        \
  2202. -    /usr/lib/X11R5        \
  2203. -    /usr/lib/X11R4        \
  2204. +    /ade/lib/X11R6        \
  2205. +    /ade/lib/X11R5        \
  2206. +    /ade/lib/X11R4        \
  2207.                            \
  2208. -    /usr/local/X11R6/lib  \
  2209. -    /usr/local/X11R5/lib  \
  2210. -    /usr/local/X11R4/lib  \
  2211. +    /ade/local/X11R6/lib  \
  2212. +    /ade/local/X11R5/lib  \
  2213. +    /ade/local/X11R4/lib  \
  2214.                            \
  2215. -    /usr/local/lib/X11R6  \
  2216. -    /usr/local/lib/X11R5  \
  2217. -    /usr/local/lib/X11R4  \
  2218. +    /ade/local/lib/X11R6  \
  2219. +    /ade/local/lib/X11R5  \
  2220. +    /ade/local/lib/X11R4  \
  2221.                            \
  2222. -    /usr/X11/lib          \
  2223. -    /usr/lib/X11          \
  2224. -    /usr/local/X11/lib    \
  2225. -    /usr/local/lib/X11    \
  2226. +    /ade/X11/lib          \
  2227. +    /ade/lib/X11          \
  2228. +    /ade/local/X11/lib    \
  2229. +    /ade/local/lib/X11    \
  2230.                            \
  2231. -    /usr/X386/lib         \
  2232. -    /usr/x386/lib         \
  2233. -    /usr/XFree86/lib/X11  \
  2234. +    /ade/X386/lib         \
  2235. +    /ade/x386/lib         \
  2236. +    /ade/XFree86/lib/X11  \
  2237.                            \
  2238. -    /usr/lib              \
  2239. -    /usr/local/lib        \
  2240. -    /usr/unsupported/lib  \
  2241. -    /usr/athena/lib       \
  2242. -    /usr/local/x11r5/lib  \
  2243. -    /usr/lpp/Xamples/lib  \
  2244. +    /ade/lib              \
  2245. +    /ade/local/lib        \
  2246. +    /ade/unsupported/lib  \
  2247. +    /ade/athena/lib       \
  2248. +    /ade/local/x11r5/lib  \
  2249. +    /ade/lpp/Xamples/lib  \
  2250.                            \
  2251. -    /usr/openwin/lib      \
  2252. -    /usr/openwin/share/lib \
  2253. +    /ade/openwin/lib      \
  2254. +    /ade/openwin/share/lib \
  2255.      ; \
  2256.  do
  2257.    for ac_extension in a so sl; do
  2258. @@ -2043,8 +2055,8 @@ esac
  2259.  [ -n "${x_libraries}" ] && LD_SWITCH_X_SITE_AUX="-R${x_libraries}"
  2260.  [ -n "${x_includes}" ] && C_SWITCH_X_SITE="-I${x_includes}"
  2261.  
  2262. -# Avoid forcing the search of /usr/include before fixed include files.
  2263. -if [ "$C_SWITCH_X_SITE" = "-I/usr/include" ]; then
  2264. +# Avoid forcing the search of /ade/include before fixed include files.
  2265. +if [ "$C_SWITCH_X_SITE" = "-I/ade/include" ]; then
  2266.     C_SWITCH_X_SITE=" "
  2267.  fi
  2268.  
  2269. @@ -2287,9 +2299,9 @@ fi
  2270.  
  2271.  
  2272.  echo checking for XFree86
  2273. -if test -d /usr/X386/include; then
  2274. +if test -d /ade/X386/include; then
  2275.    HAVE_XFREE386=yes
  2276. -  test -z "${C_SWITCH_X_SITE}" && C_SWITCH_X_SITE="-I/usr/X386/include"
  2277. +  test -z "${C_SWITCH_X_SITE}" && C_SWITCH_X_SITE="-I/ade/X386/include"
  2278.  fi
  2279.  
  2280.  # We change CFLAGS temporarily so that C_SWITCH_X_SITE gets used
  2281. @@ -2897,7 +2909,7 @@ if [ x"${version}" = x ]; then
  2282.    exit 1
  2283.  fi
  2284.  
  2285. -if [ -f /usr/lpp/X11/bin/smt.exp ]; then
  2286. +if [ -f /ade/lpp/X11/bin/smt.exp ]; then
  2287.    
  2288.    
  2289.  {
  2290. @@ -3254,7 +3266,9 @@ rm -f conftest.def
  2291.  
  2292.  trap 'rm -f config.status; exit 1' 1 2 15
  2293.  echo creating config.status
  2294. -rm -f config.status
  2295. +# Some systems, like AmigaOS, won't allow you to remove a script that is
  2296. +# being executed, so just move it out of the way instead.
  2297. +if test -f config.status; then mv config.status config.status.old; else true; fi
  2298.  cat > config.status <<EOF
  2299.  #!/bin/sh
  2300.  # Generated automatically by configure.
  2301. @@ -3340,12 +3354,13 @@ for ac_file in .. ${CONFIG_FILES}; do if
  2302.    fi
  2303.  
  2304.    # A "../" for each directory in $ac_dir_suffix.
  2305. +  # Treat paths with ':' in them as absolute under AmigaOS.
  2306.    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
  2307.    case "$ac_given_srcdir" in
  2308.    .)  srcdir=.
  2309.        if test -z "$ac_dir_suffix"; then top_srcdir=.
  2310.        else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
  2311. -  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
  2312. +  /* | *:* ) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
  2313.    *) # Relative path.
  2314.      srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
  2315.      top_srcdir="$ac_dots$ac_given_srcdir" ;;
  2316. @@ -3505,6 +3520,13 @@ rm -f conftest.sed
  2317.  
  2318.  
  2319.  
  2320. +
  2321. +# This is an AmigaOS specific hack that lets us continue to configure with gcc
  2322. +# but then compile with SAS/C ("sc").  It can be removed or suitable modified to
  2323. +# be a NOP when a gcc compiled port is working.
  2324. +echo "Saving generated src/config.h as src/config.h-gcc and replacing with hand modified version."
  2325. +mv src/config.h src/config.h-gcc
  2326. +cp -p ${top_srcdir}/src/config.h.in-sasc src/config.h
  2327.  
  2328.  # Build src/Makefile from ${srcdir}/src/Makefile.in.  This must be done
  2329.  # after src/config.h is built, since we rely on that file.
  2330. diff -rup --new-file baseline/fsf/emacs/configure.in amiga/fsf/emacs/configure.in
  2331. --- baseline/fsf/emacs/configure.in    Wed Oct  5 22:09:24 1994
  2332. +++ amiga/fsf/emacs/configure.in    Sat Sep 28 00:00:00 1996
  2333. @@ -62,7 +62,7 @@ progname="`echo $0 | sed 's:^\./\./:\./:
  2334.  ### Establish some default values.
  2335.  run_in_place=
  2336.  single_tree=
  2337. -prefix='/usr/local'
  2338. +prefix='/ade'
  2339.  exec_prefix='${prefix}'
  2340.  bindir='${exec_prefix}/bin'
  2341.  datadir='${prefix}/lib'
  2342. @@ -260,7 +260,7 @@ Set it to either \`yes' or \`no'."
  2343.          ## Get the next argument from the argument list, if there is one.
  2344.              if [ $# = 0 ]; then
  2345.            (echo "${progname}: You must give a value for the \`--${optname}' option, as in
  2346. -    \`--${optname}=/usr/local/X11/include'."
  2347. +    \`--${optname}=/ade/X11/include'."
  2348.             echo "${short_usage}") >&2
  2349.            exit 1
  2350.          fi
  2351. @@ -274,7 +274,7 @@ Set it to either \`yes' or \`no'."
  2352.          ## Get the next argument from the argument list, if there is one.
  2353.              if [ $# = 0 ]; then
  2354.            (echo "${progname}: You must give a value for the \`--${optname}' option, as in
  2355. -    \`--${optname}=/usr/local/X11/lib'."
  2356. +    \`--${optname}=/ade/X11/lib'."
  2357.             echo "${short_usage}") >&2
  2358.            exit 1
  2359.          fi
  2360. @@ -507,6 +507,18 @@ case "${canonical}" in
  2361.      machine=alliant-2800 opsys=bsd4-3
  2362.    ;;
  2363.  
  2364. +  ## Commodore Amiga
  2365. +  m68*-*-amigaos)
  2366. +    machine=amiga opsys=amigaos
  2367. +    ## Convert absolute srcdir to canonical amigaos form, which
  2368. +    ## native compilers can understand and gcc can deal with.
  2369. +    case "${srcdir}" in
  2370. +      /* )
  2371. +    srcdir=`/bin/echo ${srcdir} | sed -e 's%^/%%' -e 's%/%:%'`
  2372. +      ;;
  2373. +    esac
  2374. +  ;;
  2375. +
  2376.    ## Altos 3068
  2377.    m68*-altos-sysv* )
  2378.      machine=altos opsys=usg5-2
  2379. @@ -1248,10 +1260,10 @@ case "${window_system}" in
  2380.      else
  2381.        echo "  No window system specified.  Looking for X11."
  2382.        # If the user didn't specify a window system and we found X11, use it.
  2383. -      if [ -r /usr/lib/libX11.a \
  2384. -     -o -d /usr/include/X11 \
  2385. -         -o -d /usr/X386/include \
  2386. -     -o -d ${x_includes}/X11 ]; then
  2387. +      if [ -r /ade/lib/libX11.a \
  2388. +     -o -d /ade/include/X11 \
  2389. +         -o -d /ade/X386/include \
  2390. +     -o -d /ade/X11 ]; then
  2391.          window_system=x11
  2392.        fi
  2393.      fi
  2394. @@ -1283,8 +1295,8 @@ esac
  2395.  [ -n "${x_libraries}" ] && LD_SWITCH_X_SITE_AUX="-R${x_libraries}"
  2396.  [ -n "${x_includes}" ] && C_SWITCH_X_SITE="-I${x_includes}"
  2397.  
  2398. -# Avoid forcing the search of /usr/include before fixed include files.
  2399. -if [ "$C_SWITCH_X_SITE" = "-I/usr/include" ]; then
  2400. +# Avoid forcing the search of /ade/include before fixed include files.
  2401. +if [ "$C_SWITCH_X_SITE" = "-I/ade/include" ]; then
  2402.     C_SWITCH_X_SITE=" "
  2403.  fi
  2404.  
  2405. @@ -1478,9 +1490,9 @@ dnl AC_HAVE_LIBRARY(-lresolv)
  2406.  AC_HAVE_LIBRARY(-lXbsd, LD_SWITCH_X_SITE="$LD_SWITCH_X_SITE -lXbsd")
  2407.  
  2408.  echo checking for XFree86
  2409. -if test -d /usr/X386/include; then
  2410. +if test -d /ade/X386/include; then
  2411.    HAVE_XFREE386=yes
  2412. -  test -z "${C_SWITCH_X_SITE}" && C_SWITCH_X_SITE="-I/usr/X386/include"
  2413. +  test -z "${C_SWITCH_X_SITE}" && C_SWITCH_X_SITE="-I/ade/X386/include"
  2414.  fi
  2415.  
  2416.  # We change CFLAGS temporarily so that C_SWITCH_X_SITE gets used
  2417. @@ -1561,7 +1573,7 @@ if [ x"${version}" = x ]; then
  2418.    exit 1
  2419.  fi
  2420.  
  2421. -if [ -f /usr/lpp/X11/bin/smt.exp ]; then
  2422. +if [ -f /ade/lpp/X11/bin/smt.exp ]; then
  2423.    ]
  2424.    AC_DEFINE(HAVE_AIX_SMT_EXP)
  2425.    [
  2426. @@ -1711,6 +1723,13 @@ test -n "${exec_prefix}" &&
  2427.    exec_prefix=`echo "${exec_prefix}" | sed 's,\([^/]\)/*$,\1,'`
  2428.  ]
  2429.  AC_OUTPUT(Makefile lib-src/Makefile.in oldXMenu/Makefile lwlib/Makefile src/Makefile.in, [
  2430. +
  2431. +# This is an AmigaOS specific hack that lets us continue to configure with gcc
  2432. +# but then compile with SAS/C ("sc").  It can be removed or suitable modified to
  2433. +# be a NOP when a gcc compiled port is working.
  2434. +echo "Saving generated src/config.h as src/config.h-gcc and replacing with hand modified version."
  2435. +mv src/config.h src/config.h-gcc
  2436. +cp -p ${top_srcdir}/src/config.h.in-sasc src/config.h
  2437.  
  2438.  # Build src/Makefile from ${srcdir}/src/Makefile.in.  This must be done
  2439.  # after src/config.h is built, since we rely on that file.
  2440. diff -rup --new-file baseline/fsf/emacs/cpp/SCOPTIONS amiga/fsf/emacs/cpp/SCOPTIONS
  2441. --- baseline/fsf/emacs/cpp/SCOPTIONS    Wed Dec 31 17:00:00 1969
  2442. +++ amiga/fsf/emacs/cpp/SCOPTIONS    Sat Sep 28 00:00:00 1996
  2443. @@ -0,0 +1,23 @@
  2444. +MATH=68881
  2445. +CPU=68030
  2446. +ANSI
  2447. +STRINGMERGE
  2448. +UNSIGNEDCHARS
  2449. +NOMULTIPLEINCLUDES
  2450. +SMALLCODE
  2451. +SMALLDATA
  2452. +VERBOSE
  2453. +ADDSYMBOLS
  2454. +NOVERSION
  2455. +STRICT
  2456. +STACKEXTEND
  2457. +NOCONSTLIBBASE
  2458. +COVERAGE
  2459. +NOERRORHIGHLIGHT
  2460. +GENPROTOSTATICS
  2461. +NOGENPROTOTYPEDEFS
  2462. +NOGENPROTODATAITEMS
  2463. +LINKEROPTIONS="bufsize 4096"
  2464. +OPTIMIZERCOMPLEXITY=10
  2465. +OPTIMIZERDEPTH=6
  2466. +OPTIMIZERRECURDEPTH=6
  2467. diff -rup --new-file baseline/fsf/emacs/cpp/cccp.c amiga/fsf/emacs/cpp/cccp.c
  2468. --- baseline/fsf/emacs/cpp/cccp.c    Sun Oct  9 21:54:29 1988
  2469. +++ amiga/fsf/emacs/cpp/cccp.c    Sat Sep 28 00:00:00 1996
  2470. @@ -97,12 +97,24 @@ typedef unsigned char U_CHAR;
  2471.  
  2472.  #ifdef EMACS
  2473.  #define NO_SHORTNAMES
  2474. +#ifdef AMIGA
  2475. +#include "/src/config.h"
  2476. +#undef fflush
  2477. +#undef fwrite
  2478. +#undef putchar
  2479. +/* #define fflush(fp) _flsbf(-1,fp) */
  2480. +#undef main
  2481. +#undef AMIGA_DUMP
  2482. +#include <string.h>
  2483. +#else
  2484.  #include "../src/config.h"
  2485. +#endif
  2486.  #ifdef static
  2487.  #undef static
  2488.  #endif
  2489.  #ifdef open
  2490.  #undef open
  2491. +#undef close
  2492.  #undef read
  2493.  #undef write
  2494.  #endif /* open */
  2495. @@ -114,7 +126,11 @@ typedef unsigned char U_CHAR;
  2496.  #include <ctype.h>
  2497.  #include <stdio.h>
  2498.  #ifndef USG
  2499. +#ifdef AMIGA
  2500. +#include <time.h>
  2501. +#else
  2502.  #include <sys/time.h>        /* for __DATE__ and __TIME__ */
  2503. +#endif
  2504.  #else
  2505.  #define index strchr
  2506.  #define rindex strrchr
  2507. @@ -122,8 +138,10 @@ typedef unsigned char U_CHAR;
  2508.  #include <fcntl.h>
  2509.  #endif /* USG */
  2510.  
  2511. +#ifndef AMIGA
  2512.  void bcopy (), bzero ();
  2513.  int bcmp ();
  2514. +#endif
  2515.  
  2516.  char *xmalloc (), *xrealloc (), *xcalloc ();
  2517.  void fatal (), pfatal_with_name (), perror_with_name ();
  2518. @@ -141,15 +159,29 @@ struct directory_stack
  2519.  /* #include "file" starts with the first entry in the stack */
  2520.  /* #include <file> starts with the second. */
  2521.  /* -I directories are added after the first */
  2522. +#ifdef AMIGA
  2523. +struct directory_stack default_includes[2] =
  2524. +  {
  2525. +    { &default_includes[1], "" },
  2526. +    { 0, "cpp-include:" }
  2527. +  };
  2528. +#else
  2529.  struct directory_stack default_includes[2] =
  2530.    {
  2531.      { &default_includes[1], "." },
  2532.      { 0, "/usr/include" }
  2533.    };
  2534. +#endif
  2535. +
  2536.  struct directory_stack *include = &default_includes[0];
  2537.  
  2538. +#ifdef AMIGA
  2539.  int max_include_len = 14;    /* strlen (default_include) + 2
  2540.                              (for / and null) */
  2541. +#else
  2542. +int max_include_len = 9;    /* strlen (default_include) + 1
  2543. +                            (for null) */
  2544. +#endif
  2545.  
  2546.  char STDIN_FILE[] = "";        /* Empty, like real cpp */
  2547.  int put_out_comments = 0;    /* JF non-zero means leave comments in the
  2548. @@ -378,7 +410,6 @@ main (argc, argv)
  2549.      dirtmp->next = include->next;
  2550.      include->next = dirtmp;
  2551.      dirtmp->fname = argv[i]+2;
  2552. -    include = dirtmp;
  2553.      if (strlen (argv[i]) > max_include_len)
  2554.        max_include_len = strlen (argv[i]);
  2555.      break;
  2556. @@ -404,7 +435,11 @@ main (argc, argv)
  2557.    else if ((f = open (in_fname, O_RDONLY)) < 0)
  2558.      goto perror;
  2559.  
  2560. +#ifdef AMIGA
  2561. +  stat (in_fname, &sbuf);
  2562. +#else
  2563.    fstat (f, &sbuf);
  2564. +#endif
  2565.    fp->fname = in_fname;
  2566.    fp->lineno = 1;
  2567.    /* JF all this is mine about reading pipes and ttys */
  2568. @@ -651,7 +686,7 @@ randomchar:
  2569.          register U_CHAR *p = hp->name;
  2570.          register U_CHAR *q = op->bufp - i;
  2571.  
  2572. -        if (c != (U_CHAR) -1)
  2573. +        if (c != -1)
  2574.            q--;
  2575.  
  2576.          do {        /* all this to avoid a strncmp() */
  2577. @@ -662,14 +697,14 @@ randomchar:
  2578.          save_ibufp = ip->bufp;
  2579.          /* back up over identifier, then expand token */
  2580.          op->bufp -= ident_length;
  2581. -        if (c != (U_CHAR) -1) op->bufp--;
  2582. +        if (c != -1) op->bufp--;
  2583.          macroexpand (hp, ip, op, &excess_newlines);
  2584.  
  2585.          check_expand(op, ip->length - (ip->bufp - ip->buf));
  2586.          
  2587.          /* If we just processed an identifier at end of input,
  2588.             return right away.  */
  2589. -        if (c == (U_CHAR) -1)
  2590. +        if (c == -1)
  2591.            return;
  2592.  
  2593.          /* if the expansion routine has not moved the input
  2594. @@ -689,7 +724,7 @@ hashcollision:
  2595.          
  2596.        /* If we just processed an identifier at end of input,
  2597.       return right away.  */
  2598. -      if (c == (U_CHAR) -1)
  2599. +      if (c == -1)
  2600.      return;
  2601.  
  2602.        /* count the newline, if it was one.  The reason this is
  2603. @@ -977,7 +1012,7 @@ do_include (buf, limit, op, keyword)
  2604.    struct stat sbuf;        /* to stat the include file */
  2605.    FILE_BUF *fp;    /* for input stack frame */
  2606.    struct directory_stack *stackp;
  2607. -  int flen;
  2608. +  int flen, maxlen;
  2609.  
  2610.    int save_indepth = indepth;
  2611.                  /* in case of errors */
  2612. @@ -1018,7 +1053,11 @@ do_include (buf, limit, op, keyword)
  2613.    if (err)
  2614.      goto nope;
  2615.  
  2616. +  /* DG: This doesn't handle includes of aa:... on the Amiga */
  2617. +  /* It doesn't seem worth it. */
  2618.    other_dir = NULL;
  2619. +  maxlen = max_include_len;
  2620. +#if 0
  2621.    if (stackp == include)
  2622.      {
  2623.        fp = &instack[indepth];
  2624. @@ -1036,13 +1075,15 @@ do_include (buf, limit, op, keyword)
  2625.            other_dir = (char *) alloca (n + 1);
  2626.            strncpy (other_dir, nam, n);
  2627.            other_dir[n] = '\0';
  2628. +                  if (n + 4 > maxlen) maxlen = n + 4;
  2629.          }
  2630.            break;
  2631.          }
  2632.      }
  2633.      }
  2634. +#endif
  2635.                /* JF search directory path */
  2636. -  fname = (char *) alloca (max_include_len + flen);
  2637. +  fname = (char *) alloca (maxlen + flen);
  2638.    for (; stackp; stackp = stackp->next)
  2639.      {
  2640.        if (other_dir)
  2641. @@ -1052,6 +1093,10 @@ do_include (buf, limit, op, keyword)
  2642.      }
  2643.        else
  2644.      strcpy (fname, stackp->fname);
  2645. +#ifdef AMIGA
  2646. +      if (fname[0] != 0 && fname[strlen(fname) - 1] != ':')
  2647. +      /* Don't add / after : or empty strings */
  2648. +#endif
  2649.        strcat (fname, "/");
  2650.        strncat (fname, fbeg, flen);
  2651.        if ((f = open (fname, O_RDONLY)) >= 0)
  2652. @@ -1063,7 +1108,11 @@ do_include (buf, limit, op, keyword)
  2653.        goto nope;
  2654.      }
  2655.  
  2656. +#ifdef AMIGA
  2657. +  if (stat(fname, &sbuf) < 0)
  2658. +#else
  2659.    if (fstat(f, &sbuf) < 0)
  2660. +#endif
  2661.      {
  2662.        perror_with_name (fname);
  2663.        goto nope;        /* impossible? */
  2664. @@ -1307,7 +1356,7 @@ collect_expansion(buf, size, arglist)
  2665.  
  2666.      if (is_idstart[*p] && (p==buf || !is_idchar[*(p-1)])) {
  2667.  
  2668. -      for (id_len = 0; is_idchar[p[id_len]]; id_len++)
  2669. +      for (id_len = 0; p+id_len < buf+size && is_idchar[p[id_len]]; id_len++)
  2670.      ;
  2671.        for (arg = arglist; arg != NULL; arg = arg->next) {
  2672.      struct reflist *tpat;
  2673. @@ -1464,6 +1513,21 @@ do_error()
  2674.   * the behavior of the #pragma directive is implementation defined.
  2675.   * this implementation defines it as follows.
  2676.   */
  2677. +#ifdef AMIGA
  2678. +do_pragma(buf, limit, op, keyword)
  2679. +     U_CHAR *buf, *limit;
  2680. +     FILE_BUF *op;
  2681. +     struct keyword_table *keyword;
  2682. +{
  2683. +    /* Just copy the pragma directibe back out */
  2684. +    int len2 = limit - buf, len1 = sizeof("#pragma") - 1;
  2685. +
  2686. +    check_expand(op, len1 + len2);
  2687. +    bcopy("#pragma", op->bufp, len1);
  2688. +    bcopy(buf, op->bufp + len1, len2);
  2689. +    op->bufp += len1 + len2;
  2690. +}
  2691. +#else
  2692.  do_pragma()
  2693.  {
  2694.    close (0);
  2695. @@ -1478,6 +1542,7 @@ do_pragma()
  2696.  nope:
  2697.    fatal ("You are in a maze of twisty compiler features, all different");
  2698.  }
  2699. +#endif
  2700.  
  2701.  typedef struct if_stack {
  2702.    struct if_stack *next;    /* for chaining to the next stack frame */
  2703. @@ -2083,9 +2148,9 @@ error (msg)
  2704.      }
  2705.  
  2706.    if (ip != NULL)
  2707. -    fprintf(stdout, "file %s, offset %d (line %d): ",
  2708. +    fprintf(stderr, "file %s, offset %d (line %d): ",
  2709.          ip->fname, ip->bufp - ip->buf, ip->lineno);
  2710. -  fprintf(stdout, "%s\n", msg);
  2711. +  fprintf(stderr, "%s\n", msg);
  2712.    return 0;
  2713.  }
  2714.  
  2715. diff -rup --new-file baseline/fsf/emacs/cpp/cccp.lnk amiga/fsf/emacs/cpp/cccp.lnk
  2716. --- baseline/fsf/emacs/cpp/cccp.lnk    Wed Dec 31 17:00:00 1969
  2717. +++ amiga/fsf/emacs/cpp/cccp.lnk    Sat Sep 28 00:00:00 1996
  2718. @@ -0,0 +1,10 @@
  2719. +FROM LIB:c.o "cccp.o"+"alloca.o"+"cexp.tab.o"
  2720. +TO "cccp"
  2721. +LIB src:unix/src/unix.lib LIB:scm881.lib
  2722. +    LIB:sc.lib LIB:amiga.lib
  2723. +ADDSYM
  2724. +SMALLCODE
  2725. +SMALLDATA
  2726. +VERBOSE
  2727. +
  2728. +bufsize 4096
  2729. diff -rup --new-file baseline/fsf/emacs/cpp/lmkfile amiga/fsf/emacs/cpp/lmkfile
  2730. --- baseline/fsf/emacs/cpp/lmkfile    Wed Dec 31 17:00:00 1969
  2731. +++ amiga/fsf/emacs/cpp/lmkfile    Sat Sep 28 00:00:00 1996
  2732. @@ -0,0 +1,26 @@
  2733. +# Makefile for cccp in the Emacs distribution only.
  2734. +# Here we assume that you are using SASC
  2735. +# (since cccp is used by Emacs only to deal with long strings in macros.
  2736. +
  2737. +CFLAGS=DEFINE EMACS DEFINE AMIGA INDIRECTORY=src:unix/include/ \
  2738. +     DEFINE STACK_DIRECTION=-1 DEFINE OUTPUT_LINE_COMMANDS\
  2739. +       NOWARNVOIDRETURN
  2740. +
  2741. +cpp: cccp
  2742. +        -delete cpp
  2743. +        makelink cpp cccp
  2744. +cccp: cccp.o cexp.tab.o alloca.o
  2745. +        SC cccp.o alloca.o cexp.tab.o PROGRAMNAME cccp\
  2746. +        LIBRARY=src:unix/src/unix.lib LINK
  2747. +
  2748. +testexp: y.tab.c
  2749. +        cc -g -DTEST_EXP_READER y.tab.c -o testexp
  2750. +
  2751. +cexp.tab.c: cexp.y
  2752. +        echo "expect 40 shift/reduce conflicts"
  2753. +        bin:bison cexp.y >bison.debug
  2754. +
  2755. +cccp.o: cccp.c
  2756. +cexp.tab.o: cexp.tab.c
  2757. +alloca.o: /src/alloca.c
  2758. +        $(CC) $(CFLAGS) OBJECTNAME=alloca.o /src/alloca.c
  2759. diff -rup --new-file baseline/fsf/emacs/etc/DOC amiga/fsf/emacs/etc/DOC
  2760. --- baseline/fsf/emacs/etc/DOC    Wed Dec 31 17:00:00 1969
  2761. +++ amiga/fsf/emacs/etc/DOC    Sat Sep 28 00:00:00 1996
  2762. @@ -0,0 +1,11272 @@
  2763. +Fredraw-frame
  2764. +Clear frame FRAME and output again what is supposed to appear on it.
  2765. +
  2766. +(redraw-frame FRAME)Fredraw-frame
  2767. +Clear frame FRAME and output again what is supposed to appear on it.
  2768. +
  2769. +(redraw-frame FRAME)Fredraw-display
  2770. +Clear and redisplay all visible frames.
  2771. +
  2772. +(redraw-display)Fframe-or-buffer-changed-p
  2773. +Return non-nil if the frame and buffer state appears to have changed.
  2774. +The state variable is an internal vector containing all frames and buffers,
  2775. +along with the buffers' read-only and modified flags, which allows a fast
  2776. +check to see whether the menu bars might need to be recomputed.
  2777. +If this function returns non-nil, it updates the internal vector to reflect
  2778. +the current state.
  2779. +
  2780. +
  2781. +(frame-or-buffer-changed-p)Fopen-termscript
  2782. +Start writing all terminal output to FILE as well as the terminal.
  2783. +FILE = nil means just close any termscript file currently open.
  2784. +
  2785. +(open-termscript FILE)Fsend-string-to-terminal
  2786. +Send STRING to the terminal without alteration.
  2787. +Control characters in STRING will have terminal-dependent effects.
  2788. +
  2789. +(send-string-to-terminal STR)Fding
  2790. +Beep, or flash the screen.
  2791. +Also, unless an argument is given,
  2792. +terminate any keyboard macro currently executing.
  2793. +
  2794. +(ding &optional ARG)Fsleep-for
  2795. +Pause, without updating display, for SECONDS seconds.
  2796. +SECONDS may be a floating-point value, meaning that you can wait for a
  2797. +fraction of a second.  Optional second arg MILLISECONDS specifies an
  2798. +additional wait period, in milliseconds; this may be useful if your
  2799. +Emacs was built without floating point support.
  2800. +(Not all operating systems support waiting for a fraction of a second.)
  2801. +
  2802. +(sleep-for SECONDS &optional MILLISECONDS)Fsit-for
  2803. +Perform redisplay, then wait for SECONDS seconds or until input is available.
  2804. +SECONDS may be a floating-point value, meaning that you can wait for a
  2805. +fraction of a second.  Optional second arg MILLISECONDS specifies an
  2806. +additional wait period, in milliseconds; this may be useful if your
  2807. +Emacs was built without floating point support.
  2808. +(Not all operating systems support waiting for a fraction of a second.)
  2809. +Optional third arg non-nil means don't redisplay, just wait for input.
  2810. +Redisplay is preempted as always if input arrives, and does not happen
  2811. +if input is available before it starts.
  2812. +Value is t if waited the full time with no input arriving.
  2813. +
  2814. +(sit-for SECONDS &optional MILLISECONDS NODISP)Vbaud-rate
  2815. +*The output baud rate of the terminal.
  2816. +On most systems, changing this value will affect the amount of padding
  2817. +and the other strategic decisions made during redisplay.Vinverse-video
  2818. +*Non-nil means invert the entire frame display.
  2819. +This means everything is in inverse video which otherwise would not be.Vvisible-bell
  2820. +*Non-nil means try to flash the frame to represent a bell.Vno-redraw-on-reenter
  2821. +*Non-nil means no need to redraw entire frame after suspending.
  2822. +A non-nil value is useful if the terminal can automatically preserve
  2823. +Emacs's frame display when you reenter Emacs.
  2824. +It is up to you to set this variable if your terminal can do that.Vwindow-system
  2825. +A symbol naming the window-system under which Emacs is running
  2826. +(such as `x'), or nil if emacs is running on an ordinary terminal.Vwindow-system-version
  2827. +The version number of the window system in use.
  2828. +For X windows, this is 10 or 11.Vcursor-in-echo-area
  2829. +Non-nil means put cursor in minibuffer, at end of any message there.Vglyph-table
  2830. +Table defining how to output a glyph code to the frame.
  2831. +If not nil, this is a vector indexed by glyph code to define the glyph.
  2832. +Each element can be:
  2833. + integer: a glyph code which this glyph is an alias for.
  2834. + string: output this glyph using that string (not impl. in X windows).
  2835. + nil: this glyph mod 256 is char code to output,
  2836. +    and this glyph / 256 is face code for X windows (see `face-id').Vstandard-display-table
  2837. +Display table to use for buffers that specify none.
  2838. +See `buffer-display-table' for more information.Fframep
  2839. +Return non-nil if OBJECT is a frame.
  2840. +Value is t for a termcap frame (a character-only terminal),
  2841. +`x' for an Emacs frame that is really an X window.
  2842. +Also see `live-frame-p'.
  2843. +
  2844. +(framep OBJECT)Fframe-live-p
  2845. +Return non-nil if OBJECT is a frame which has not been deleted.
  2846. +Value is nil if OBJECT is not a live frame.  If object is a live
  2847. +frame, the return value indicates what sort of output device it is
  2848. +displayed on.  Value is t for a termcap frame (a character-only
  2849. +terminal), `x' for an Emacs frame being displayed in an X window.
  2850. +
  2851. +(frame-live-p OBJECT)Fselect-frame
  2852. +Select the frame FRAME.
  2853. +Subsequent editing commands apply to its selected window.
  2854. +The selection of FRAME lasts until the next time the user does
  2855. +something to select a different frame, or until the next time this
  2856. +function is called.
  2857. +
  2858. +(select-frame FRAME &optional NO-ENTER)Fhandle-switch-frame
  2859. +Handle a switch-frame event EVENT.
  2860. +Switch-frame events are usually bound to this function.
  2861. +A switch-frame event tells Emacs that the window manager has requested
  2862. +that the user's events be directed to the frame mentioned in the event.
  2863. +This function selects the selected window of the frame of EVENT.
  2864. +
  2865. +If EVENT is frame object, handle it as if it were a switch-frame event
  2866. +to that frame.
  2867. +
  2868. +(handle-switch-frame FRAME &optional NO-ENTER)Fselected-frame
  2869. +Return the frame that is now selected.
  2870. +
  2871. +(selected-frame)Fwindow-frame
  2872. +Return the frame object that window WINDOW is on.
  2873. +
  2874. +(window-frame WINDOW)Fframe-first-window
  2875. +Returns the topmost, leftmost window of FRAME.
  2876. +If omitted, FRAME defaults to the currently selected frame.
  2877. +
  2878. +(frame-first-window &optional FRAME)Fframe-root-window
  2879. +Returns the root-window of FRAME.
  2880. +If omitted, FRAME defaults to the currently selected frame.
  2881. +
  2882. +(frame-root-window &optional FRAME)Fframe-selected-window
  2883. +Return the selected window of frame object FRAME.
  2884. +If omitted, FRAME defaults to the currently selected frame.
  2885. +
  2886. +(frame-selected-window &optional FRAME)Fset-frame-selected-window
  2887. +Set the selected window of frame object FRAME to WINDOW.
  2888. +If FRAME is nil, the selected frame is used.
  2889. +If FRAME is the selected frame, this makes WINDOW the selected window.
  2890. +
  2891. +(set-frame-selected-window FRAME WINDOW)Fframe-list
  2892. +Return a list of all frames.
  2893. +
  2894. +(frame-list)Fnext-frame
  2895. +Return the next frame in the frame list after FRAME.
  2896. +By default, skip minibuffer-only frames.
  2897. +If omitted, FRAME defaults to the selected frame.
  2898. +If optional argument MINIFRAME is nil, exclude minibuffer-only frames.
  2899. +If MINIBUF is a window, include only its own frame
  2900. +and any frame now using that window as the minibuffer.
  2901. +If MINIFRAME is `visible', include all visible frames.
  2902. +If MINIBUF is 0, include all visible and iconified frames.
  2903. +Otherwise, include all frames.
  2904. +
  2905. +(next-frame &optional FRAME MINIFRAME)Fprevious-frame
  2906. +Return the previous frame in the frame list before FRAME.
  2907. +By default, skip minibuffer-only frames.
  2908. +If omitted, FRAME defaults to the selected frame.
  2909. +If optional argument MINIFRAME is nil, exclude minibuffer-only frames.
  2910. +If MINIBUF is a window, include only its own frame
  2911. +and any frame now using that window as the minibuffer.
  2912. +If MINIFRAME is `visible', include all visible frames.
  2913. +If MINIBUF is 0, include all visible and iconified frames.
  2914. +Otherwise, include all frames.
  2915. +
  2916. +(previous-frame &optional FRAME MINIFRAME)Fdelete-frame
  2917. +Delete FRAME, permanently eliminating it from use.
  2918. +If omitted, FRAME defaults to the selected frame.
  2919. +A frame may not be deleted if its minibuffer is used by other frames.
  2920. +Normally, you may not delete a frame if all other frames are invisible,
  2921. +but if the second optional argument FORCE is non-nil, you may do so.
  2922. +
  2923. +(delete-frame &optional FRAME FORCE)Fmouse-position
  2924. +Return a list (FRAME X . Y) giving the current mouse frame and position.
  2925. +The position is given in character cells, where (0, 0) is the
  2926. +upper-left corner.
  2927. +If Emacs is running on a mouseless terminal or hasn't been programmed
  2928. +to read the mouse position, it returns the selected frame for FRAME
  2929. +and nil for X and Y.
  2930. +
  2931. +(mouse-position)Fmouse-pixel-position
  2932. +Return a list (FRAME X . Y) giving the current mouse frame and position.
  2933. +The position is given in pixel units, where (0, 0) is the
  2934. +upper-left corner.
  2935. +If Emacs is running on a mouseless terminal or hasn't been programmed
  2936. +to read the mouse position, it returns the selected frame for FRAME
  2937. +and nil for X and Y.
  2938. +
  2939. +(mouse-pixel-position)Fset-mouse-position
  2940. +Move the mouse pointer to the center of character cell (X,Y) in FRAME.
  2941. +WARNING:  If you use this under X windows,
  2942. +you should call `unfocus-frame' afterwards.
  2943. +
  2944. +(set-mouse-position FRAME X Y)Fset-mouse-pixel-position
  2945. +Move the mouse pointer to pixel position (X,Y) in FRAME.
  2946. +WARNING:  If you use this under X windows,
  2947. +you should call `unfocus-frame' afterwards.
  2948. +
  2949. +(set-mouse-pixel-position FRAME X Y)Fmake-frame-visible
  2950. +Make the frame FRAME visible (assuming it is an X-window).
  2951. +If omitted, FRAME defaults to the currently selected frame.
  2952. +
  2953. +(make-frame-visible &optional FRAME)Fmake-frame-invisible
  2954. +Make the frame FRAME invisible (assuming it is an X-window).
  2955. +If omitted, FRAME defaults to the currently selected frame.
  2956. +Normally you may not make FRAME invisible if all other frames are invisible,
  2957. +but if the second optional argument FORCE is non-nil, you may do so.
  2958. +
  2959. +(make-frame-invisible &optional FRAME FORCE)Ficonify-frame
  2960. +Make the frame FRAME into an icon.
  2961. +If omitted, FRAME defaults to the currently selected frame.
  2962. +
  2963. +(iconify-frame &optional FRAME)Fframe-visible-p
  2964. +Return t if FRAME is now "visible" (actually in use for display).
  2965. +A frame that is not "visible" is not updated and, if it works through
  2966. +a window system, it may not show at all.
  2967. +Return the symbol `icon' if frame is visible only as an icon.
  2968. +
  2969. +(frame-visible-p FRAME)Fvisible-frame-list
  2970. +Return a list of all frames now "visible" (being updated).
  2971. +
  2972. +(visible-frame-list)Fraise-frame
  2973. +Bring FRAME to the front, so it occludes any frames it overlaps.
  2974. +If FRAME is invisible, make it visible.
  2975. +If Emacs is displaying on an ordinary terminal or some other device which
  2976. +doesn't support multiple overlapping frames, this function does nothing.
  2977. +
  2978. +(raise-frame FRAME)Flower-frame
  2979. +Send FRAME to the back, so it is occluded by any frames that overlap it.
  2980. +If Emacs is displaying on an ordinary terminal or some other device which
  2981. +doesn't support multiple overlapping frames, this function does nothing.
  2982. +
  2983. +(lower-frame FRAME)Fredirect-frame-focus
  2984. +Arrange for keystrokes typed at FRAME to be sent to FOCUS-FRAME.
  2985. +In other words, switch-frame events caused by events in FRAME will
  2986. +request a switch to FOCUS-FRAME, and `last-event-frame' will be
  2987. +FOCUS-FRAME after reading an event typed at FRAME.
  2988. +
  2989. +If FOCUS-FRAME is omitted or nil, any existing redirection is
  2990. +cancelled, and the frame again receives its own keystrokes.
  2991. +
  2992. +Focus redirection is useful for temporarily redirecting keystrokes to
  2993. +a surrogate minibuffer frame when a frame doesn't have its own
  2994. +minibuffer window.
  2995. +
  2996. +A frame's focus redirection can be changed by select-frame.  If frame
  2997. +FOO is selected, and then a different frame BAR is selected, any
  2998. +frames redirecting their focus to FOO are shifted to redirect their
  2999. +focus to BAR.  This allows focus redirection to work properly when the
  3000. +user switches from one frame to another using `select-window'.
  3001. +
  3002. +This means that a frame whose focus is redirected to itself is treated
  3003. +differently from a frame whose focus is redirected to nil; the former
  3004. +is affected by select-frame, while the latter is not.
  3005. +
  3006. +The redirection lasts until `redirect-frame-focus' is called to change it.
  3007. +
  3008. +(redirect-frame-focus FRAME &optional FOCUS-FRAME)Fframe-focus
  3009. +Return the frame to which FRAME's keystrokes are currently being sent.
  3010. +This returns nil if FRAME's focus is not redirected.
  3011. +See `redirect-frame-focus'.
  3012. +
  3013. +(frame-focus FRAME)Fframe-parameters
  3014. +Return the parameters-alist of frame FRAME.
  3015. +It is a list of elements of the form (PARM . VALUE), where PARM is a symbol.
  3016. +The meaningful PARMs depend on the kind of frame.
  3017. +If FRAME is omitted, return information on the currently selected frame.
  3018. +
  3019. +(frame-parameters &optional FRAME)Fmodify-frame-parameters
  3020. +Modify the parameters of frame FRAME according to ALIST.
  3021. +ALIST is an alist of parameters to change and their new values.
  3022. +Each element of ALIST has the form (PARM . VALUE), where PARM is a symbol.
  3023. +The meaningful PARMs depend on the kind of frame; undefined PARMs are ignored.
  3024. +
  3025. +(modify-frame-parameters FRAME ALIST)Fframe-char-height
  3026. +Height in pixels of a line in the font in frame FRAME.
  3027. +If FRAME is omitted, the selected frame is used.
  3028. +For a terminal frame, the value is always 1.
  3029. +
  3030. +(frame-char-height &optional FRAME)Fframe-char-width
  3031. +Width in pixels of characters in the font in frame FRAME.
  3032. +If FRAME is omitted, the selected frame is used.
  3033. +The width is the same for all characters, because
  3034. +currently Emacs supports only fixed-width fonts.
  3035. +For a terminal screen, the value is always 1.
  3036. +
  3037. +(frame-char-width &optional FRAME)Fframe-pixel-height
  3038. +Return a FRAME's height in pixels.
  3039. +For a terminal frame, the result really gives the height in characters.
  3040. +If FRAME is omitted, the selected frame is used.
  3041. +
  3042. +(frame-pixel-height &optional FRAME)Fframe-pixel-width
  3043. +Return FRAME's width in pixels.
  3044. +For a terminal frame, the result really gives the width in characters.
  3045. +If FRAME is omitted, the selected frame is used.
  3046. +
  3047. +(frame-pixel-width &optional FRAME)Fset-frame-height
  3048. +Specify that the frame FRAME has LINES lines.
  3049. +Optional third arg non-nil means that redisplay should use LINES lines
  3050. +but that the idea of the actual height of the frame should not be changed.
  3051. +
  3052. +(set-frame-height FRAME ROWS &optional PRETEND)Fset-frame-width
  3053. +Specify that the frame FRAME has COLS columns.
  3054. +Optional third arg non-nil means that redisplay should use COLS columns
  3055. +but that the idea of the actual width of the frame should not be changed.
  3056. +
  3057. +(set-frame-width FRAME COLS &optional PRETEND)Fset-frame-size
  3058. +Sets size of FRAME to COLS by ROWS, measured in characters.
  3059. +
  3060. +(set-frame-size FRAME COLS ROWS)Fset-frame-position
  3061. +Sets position of FRAME in pixels to XOFFSET by YOFFSET.
  3062. +This is actually the position of the upper left corner of the frame.
  3063. +Negative values for XOFFSET or YOFFSET are interpreted relative to
  3064. +the rightmost or bottommost possible position (that stays within the screen).
  3065. +
  3066. +(set-frame-position FRAME XOFFSET YOFFSET)Vterminal-frame
  3067. +The initial frame-object, which represents Emacs's stdout.Vemacs-iconified
  3068. +Non-nil if all of emacs is iconified and frame updates are not needed.Vdefault-minibuffer-frame
  3069. +Minibufferless frames use this frame's minibuffer.
  3070. +
  3071. +Emacs cannot create minibufferless frames unless this is set to an
  3072. +appropriate surrogate.
  3073. +
  3074. +Emacs consults this variable only when creating minibufferless
  3075. +frames; once the frame is created, it sticks with its assigned
  3076. +minibuffer, no matter what this variable is set to.  This means that
  3077. +this variable doesn't necessarily say anything meaningful about the
  3078. +current set of frames, or where the minibuffer is currently being
  3079. +displayed.Vdefault-frame-alist
  3080. +Alist of default values for frame creation.
  3081. +These may be set in your init file, like this:
  3082. +  (setq default-frame-alist '((width . 80) (height . 55)))
  3083. +These override values given in window system configuration data, like
  3084. +X Windows' defaults database.
  3085. +For values specific to the first Emacs frame, see `initial-frame-alist'.
  3086. +For values specific to the separate minibuffer frame, see
  3087. +`minibuffer-frame-alist'.Fframe-height
  3088. +Return number of lines available for display on FRAME.
  3089. +If FRAME is omitted, describe the currently selected frame.
  3090. +
  3091. +(frame-height &optional FRAME)Fframe-width
  3092. +Return number of columns available for display on FRAME.
  3093. +If FRAME is omitted, describe the currently selected frame.
  3094. +
  3095. +(frame-width &optional FRAME)Fset-screen-height
  3096. +Tell redisplay that the screen has LINES lines.
  3097. +Optional second arg non-nil means that redisplay should use LINES lines
  3098. +but that the idea of the actual height of the screen should not be changed.
  3099. +
  3100. +(set-screen-height LINES &optional PRETEND)Fset-screen-width
  3101. +Tell redisplay that the screen has COLS columns.
  3102. +Optional second arg non-nil means that redisplay should use COLS columns
  3103. +but that the idea of the actual width of the screen should not be changed.
  3104. +
  3105. +(set-screen-width COLS &optional PRETEND)Fmouse-pixel-position
  3106. +Return a list (FRAME X . Y) giving the current mouse frame and position.
  3107. +The position is given in pixel units, where (0, 0) is the
  3108. +upper-left corner.
  3109. +If Emacs is running on a mouseless terminal or hasn't been programmed
  3110. +to read the mouse position, it returns the selected frame for FRAME
  3111. +and nil for X and Y.
  3112. +
  3113. +(mouse-pixel-position)Vterminal-frame
  3114. +The initial frame-object, which represents Emacs's stdout.Vdefault-frame-alist
  3115. +Alist of default values for frame creation.
  3116. +These may be set in your init file, like this:
  3117. +  (setq default-frame-alist '((width . 80) (height . 55)))
  3118. +These override values given in window system configuration data, like
  3119. +X Windows' defaults database.
  3120. +For values specific to the first Emacs frame, see `initial-frame-alist'.
  3121. +For values specific to the separate minibuffer frame, see
  3122. +`minibuffer-frame-alist'.Vglobal-mode-string
  3123. +String (or mode line construct) included (normally) in `mode-line-format'.Voverlay-arrow-position
  3124. +Marker for where to display an arrow on top of the buffer text.
  3125. +This must be the beginning of a line in order to work.
  3126. +See also `overlay-arrow-string'.Voverlay-arrow-string
  3127. +String to display as an arrow.  See also `overlay-arrow-position'.Vscroll-step
  3128. +*The number of lines to try scrolling a window by when point moves out.
  3129. +If that fails to bring point back on frame, point is centered instead.
  3130. +If this is zero, point is always centered after it moves off frame.Vdebug-end-pos
  3131. +Don't askVtruncate-partial-width-windows
  3132. +*Non-nil means truncate lines in all windows less than full frame wide.Vmode-line-inverse-video
  3133. +*Non-nil means use inverse video for the mode line.Vline-number-display-limit
  3134. +*Maximum buffer size for which line number should be displayed.Vhighlight-nonselected-windows
  3135. +*Non-nil means highlight region even in nonselected windows.Fwindowp
  3136. +Returns t if OBJ is a window.
  3137. +
  3138. +(windowp OBJ)Fwindow-live-p
  3139. +Returns t if OBJ is a window which is currently visible.
  3140. +
  3141. +(window-live-p OBJ)Fselected-window
  3142. +Return the window that the cursor now appears in and commands apply to.
  3143. +
  3144. +(selected-window)Fminibuffer-window
  3145. +Return the window used now for minibuffers.
  3146. +If the optional argument FRAME is specified, return the minibuffer window
  3147. +used by that frame.
  3148. +
  3149. +(minibuffer-window &optional FRAME)Fwindow-minibuffer-p
  3150. +Returns non-nil if WINDOW is a minibuffer window.
  3151. +
  3152. +(window-minibuffer-p &optional WINDOW)Fpos-visible-in-window-p
  3153. +Return t if position POS is currently on the frame in WINDOW.
  3154. +Returns nil if that position is scrolled vertically out of view.
  3155. +POS defaults to point; WINDOW, to the selected window.
  3156. +
  3157. +(pos-visible-in-window-p &optional POS WINDOW)Fwindow-buffer
  3158. +Return the buffer that WINDOW is displaying.
  3159. +
  3160. +(window-buffer &optional WINDOW)Fwindow-height
  3161. +Return the number of lines in WINDOW (including its mode line).
  3162. +
  3163. +(window-height &optional WINDOW)Fwindow-width
  3164. +Return the number of display columns in WINDOW.
  3165. +This is the width that is usable columns available for text in WINDOW.
  3166. +If you want to find out how many columns WINDOW takes up,
  3167. +use  (let ((edges (window-edges))) (- (nth 2 edges) (nth 0 edges))).
  3168. +
  3169. +(window-width &optional WINDOW)Fwindow-hscroll
  3170. +Return the number of columns by which WINDOW is scrolled from left margin.
  3171. +
  3172. +(window-hscroll &optional WINDOW)Fset-window-hscroll
  3173. +Set number of columns WINDOW is scrolled from left margin to NCOL.
  3174. +NCOL should be zero or positive.
  3175. +
  3176. +(set-window-hscroll WINDOW NCOL)Fwindow-edges
  3177. +Return a list of the edge coordinates of WINDOW.
  3178. +(LEFT TOP RIGHT BOTTOM), all relative to 0, 0 at top left corner of frame.
  3179. +RIGHT is one more than the rightmost column used by WINDOW,
  3180. +and BOTTOM is one more than the bottommost row used by WINDOW
  3181. + and its mode-line.
  3182. +
  3183. +(window-edges &optional WINDOW)Fcoordinates-in-window-p
  3184. +Return non-nil if COORDINATES are in WINDOW.
  3185. +COORDINATES is a cons of the form (X . Y), X and Y being distances
  3186. +measured in characters from the upper-left corner of the frame.
  3187. +(0 .  0) denotes the character in the upper left corner of the
  3188. +frame.
  3189. +If COORDINATES are in the text portion of WINDOW,
  3190. +   the coordinates relative to the window are returned.
  3191. +If they are in the mode line of WINDOW, `mode-line' is returned.
  3192. +If they are on the border between WINDOW and its right sibling,
  3193. +   `vertical-line' is returned.
  3194. +
  3195. +(coordinates-in-window-p COORDINATES WINDOW)Fwindow-at
  3196. +Return window containing coordinates X and Y on FRAME.
  3197. +If omitted, FRAME defaults to the currently selected frame.
  3198. +The top left corner of the frame is considered to be row 0,
  3199. +column 0.
  3200. +
  3201. +(window-at X Y &optional FRAME)Fwindow-point
  3202. +Return current value of point in WINDOW.
  3203. +For a nonselected window, this is the value point would have
  3204. +if that window were selected.
  3205. +
  3206. +Note that, when WINDOW is the selected window and its buffer
  3207. +is also currently selected, the value returned is the same as (point).
  3208. +It would be more strictly correct to return the `top-level' value
  3209. +of point, outside of any save-excursion forms.
  3210. +But that is hard to define.
  3211. +
  3212. +(window-point &optional WINDOW)Fwindow-start
  3213. +Return position at which display currently starts in WINDOW.
  3214. +
  3215. +(window-start &optional WINDOW)Fwindow-end
  3216. +Return position at which display currently ends in WINDOW.
  3217. +This is updated by redisplay, when it runs to completion.
  3218. +Simply changing the buffer text or setting `window-start'
  3219. +does not update this value.
  3220. +
  3221. +(window-end &optional WINDOW)Fset-window-point
  3222. +Make point value in WINDOW be at position POS in WINDOW's buffer.
  3223. +
  3224. +(set-window-point WINDOW POS)Fset-window-start
  3225. +Make display in WINDOW start at position POS in WINDOW's buffer.
  3226. +Optional third arg NOFORCE non-nil inhibits next redisplay
  3227. +from overriding motion of point in order to display at this exact start.
  3228. +
  3229. +(set-window-start WINDOW POS &optional NOFORCE)Fwindow-dedicated-p
  3230. +Return WINDOW's dedicated object, usually t or nil.
  3231. +See also `set-window-dedicated-p'.
  3232. +
  3233. +(window-dedicated-p WINDOW)Fset-window-dedicated-p
  3234. +Control whether WINDOW is dedicated to the buffer it displays.
  3235. +If it is dedicated, Emacs will not automatically change
  3236. +which buffer appears in it.
  3237. +The second argument is the new value for the dedication flag;
  3238. +non-nil means yes.
  3239. +
  3240. +(set-window-dedicated-p WINDOW ARG)Fwindow-display-table
  3241. +Return the display-table that WINDOW is using.
  3242. +
  3243. +(window-display-table &optional WINDOW)Fset-window-display-table
  3244. +Set WINDOW's display-table to TABLE.
  3245. +
  3246. +(set-window-display-table WINDOW TABLE)Fdelete-window
  3247. +Remove WINDOW from the display.  Default is selected window.
  3248. +
  3249. +(delete-window &optional WINDOW)Fnext-window
  3250. +Return next window after WINDOW in canonical ordering of windows.
  3251. +If omitted, WINDOW defaults to the selected window.
  3252. +
  3253. +Optional second arg MINIBUF t means count the minibuffer window even
  3254. +if not active.  MINIBUF nil or omitted means count the minibuffer iff
  3255. +it is active.  MINIBUF neither t nor nil means not to count the
  3256. +minibuffer even if it is active.
  3257. +
  3258. +Several frames may share a single minibuffer; if the minibuffer
  3259. +counts, all windows on all frames that share that minibuffer count
  3260. +too.  Therefore, `next-window' can be used to iterate through the
  3261. +set of windows even when the minibuffer is on another frame.  If the
  3262. +minibuffer does not count, only windows from WINDOW's frame count.
  3263. +
  3264. +Optional third arg ALL-FRAMES t means include windows on all frames.
  3265. +ALL-FRAMES nil or omitted means cycle within the frames as specified
  3266. +above.  ALL-FRAMES = `visible' means include windows on all visible frames.
  3267. +ALL-FRAMES = 0 means include windows on all visible and iconified frames.
  3268. +Anything else means restrict to WINDOW's frame.
  3269. +
  3270. +If you use consistent values for MINIBUF and ALL-FRAMES, you can use
  3271. +`next-window' to iterate through the entire cycle of acceptable
  3272. +windows, eventually ending up back at the window you started with.
  3273. +`previous-window' traverses the same cycle, in the reverse order.
  3274. +
  3275. +(next-window &optional WINDOW MINIBUF ALL-FRAMES)Fprevious-window
  3276. +Return the window preceeding WINDOW in canonical ordering of windows.
  3277. +If omitted, WINDOW defaults to the selected window.
  3278. +
  3279. +Optional second arg MINIBUF t means count the minibuffer window even
  3280. +if not active.  MINIBUF nil or omitted means count the minibuffer iff
  3281. +it is active.  MINIBUF neither t nor nil means not to count the
  3282. +minibuffer even if it is active.
  3283. +
  3284. +Several frames may share a single minibuffer; if the minibuffer
  3285. +counts, all windows on all frames that share that minibuffer count
  3286. +too.  Therefore, `previous-window' can be used to iterate through
  3287. +the set of windows even when the minibuffer is on another frame.  If
  3288. +the minibuffer does not count, only windows from WINDOW's frame count
  3289. +
  3290. +Optional third arg ALL-FRAMES t means include windows on all frames.
  3291. +ALL-FRAMES nil or omitted means cycle within the frames as specified
  3292. +above.  ALL-FRAMES = `visible' means include windows on all visible frames.
  3293. +ALL-FRAMES = 0 means include windows on all visible and iconified frames.
  3294. +Anything else means restrict to WINDOW's frame.
  3295. +
  3296. +If you use consistent values for MINIBUF and ALL-FRAMES, you can use
  3297. +`previous-window' to iterate through the entire cycle of acceptable
  3298. +windows, eventually ending up back at the window you started with.
  3299. +`next-window' traverses the same cycle, in the reverse order.
  3300. +
  3301. +(previous-window &optional WINDOW MINIBUF ALL-FRAMES)Fother-window
  3302. +Select the ARG'th different window on this frame.
  3303. +All windows on current frame are arranged in a cyclic order.
  3304. +This command selects the window ARG steps away in that order.
  3305. +A negative ARG moves in the opposite order.  If the optional second
  3306. +argument ALL_FRAMES is non-nil, cycle through all frames.
  3307. +
  3308. +(other-window N &optional ALL-FRAMES)Fget-lru-window
  3309. +Return the window least recently selected or used for display.
  3310. +If optional argument FRAME is `visible', search all visible frames.
  3311. +If FRAME is 0, search all visible and iconified frames.
  3312. +If FRAME is t, search all frames.
  3313. +If FRAME is nil, search only the selected frame.
  3314. +If FRAME is a frame, search only that frame.
  3315. +
  3316. +(get-lru-window &optional FRAME)Fget-largest-window
  3317. +Return the largest window in area.
  3318. +If optional argument FRAME is `visible', search all visible frames.
  3319. +If FRAME is 0, search all visible and iconified frames.
  3320. +If FRAME is t, search all frames.
  3321. +If FRAME is nil, search only the selected frame.
  3322. +If FRAME is a frame, search only that frame.
  3323. +
  3324. +(get-largest-window &optional FRAME)Fget-buffer-window
  3325. +Return a window currently displaying BUFFER, or nil if none.
  3326. +If optional argument FRAME is `visible', search all visible frames.
  3327. +If optional argument FRAME is 0, search all visible and iconified frames.
  3328. +If FRAME is t, search all frames.
  3329. +If FRAME is nil, search only the selected frame.
  3330. +If FRAME is a frame, search only that frame.
  3331. +
  3332. +(get-buffer-window BUFFER &optional FRAME)Fdelete-other-windows
  3333. +Make WINDOW (or the selected window) fill its frame.
  3334. +Only the frame WINDOW is on is affected.
  3335. +This function tries to reduce display jumps
  3336. +by keeping the text previously visible in WINDOW
  3337. +in the same place on the frame.  Doing this depends on
  3338. +the value of (window-start WINDOW), so if calling this function
  3339. +in a program gives strange scrolling, make sure the window-start
  3340. +value is reasonable when this function is called.
  3341. +
  3342. +(delete-other-windows &optional WINDOW)Fdelete-windows-on
  3343. +Delete all windows showing BUFFER.
  3344. +Optional second argument FRAME controls which frames are affected.
  3345. +If nil or omitted, delete all windows showing BUFFER in any frame.
  3346. +If t, delete only windows showing BUFFER in the selected frame.
  3347. +If `visible', delete all windows showing BUFFER in any visible frame.
  3348. +If a frame, delete only windows showing BUFFER in that frame.
  3349. +
  3350. +(delete-windows-on BUFFER &optional FRAME)Freplace-buffer-in-windows
  3351. +Replace BUFFER with some other buffer in all windows showing it.
  3352. +
  3353. +(replace-buffer-in-windows BUFFER)Fset-window-buffer
  3354. +Make WINDOW display BUFFER as its contents.
  3355. +BUFFER can be a buffer or buffer name.
  3356. +
  3357. +(set-window-buffer WINDOW BUFFER)Fselect-window
  3358. +Select WINDOW.  Most editing will apply to WINDOW's buffer.
  3359. +The main editor command loop selects the buffer of the selected window
  3360. +before each command.
  3361. +
  3362. +(select-window WINDOW)Fdisplay-buffer
  3363. +Make BUFFER appear in some window but don't select it.
  3364. +BUFFER can be a buffer or a buffer name.
  3365. +If BUFFER is shown already in some window, just use that one,
  3366. +unless the window is the selected window and the optional second
  3367. +argument NOT-THIS-WINDOW is non-nil (interactively, with prefix arg).
  3368. +If `pop-up-frames' is non-nil, make a new frame if no window shows BUFFER.
  3369. +Returns the window displaying BUFFER.
  3370. +
  3371. +(display-buffer BUFFER &optional NOT-THIS-WINDOW)Fsplit-window
  3372. +Split WINDOW, putting SIZE lines in the first of the pair.
  3373. +WINDOW defaults to selected one and SIZE to half its size.
  3374. +If optional third arg HOR-FLAG is non-nil, split side by side
  3375. +and put SIZE columns in the first of the pair.
  3376. +
  3377. +(split-window &optional WINDOW CHSIZE HORFLAG)Fenlarge-window
  3378. +Make current window ARG lines bigger.
  3379. +From program, optional second arg non-nil means grow sideways ARG columns.
  3380. +
  3381. +(enlarge-window N &optional SIDE)Fshrink-window
  3382. +Make current window ARG lines smaller.
  3383. +From program, optional second arg non-nil means shrink sideways ARG columns.
  3384. +
  3385. +(shrink-window N &optional SIDE)Fscroll-up
  3386. +Scroll text of current window upward ARG lines; or near full screen if no ARG.
  3387. +A near full screen is `next-screen-context-lines' less than a full screen.
  3388. +Negative ARG means scroll downward.
  3389. +When calling from a program, supply a number as argument or nil.
  3390. +
  3391. +(scroll-up &optional N)Fscroll-down
  3392. +Scroll text of current window downward ARG lines; or near full screen if no ARG.
  3393. +A near full screen is `next-screen-context-lines' less than a full screen.
  3394. +Negative ARG means scroll upward.
  3395. +When calling from a program, supply a number as argument or nil.
  3396. +
  3397. +(scroll-down &optional N)Fother-window-for-scrolling
  3398. +Return the other window for "other window scroll" commands.
  3399. +If in the minibuffer, `minibuffer-scroll-window' if non-nil
  3400. +specifies the window.
  3401. +If `other-window-scroll-buffer' is non-nil, a window
  3402. +showing that buffer is used.
  3403. +
  3404. +(other-window-for-scrolling)Fscroll-other-window
  3405. +Scroll next window upward ARG lines; or near full screen if no ARG.
  3406. +The next window is the one below the current one; or the one at the top
  3407. +if the current one is at the bottom.  Negative ARG means scroll downward.
  3408. +When calling from a program, supply a number as argument or nil.
  3409. +
  3410. +If in the minibuffer, `minibuffer-scroll-window' if non-nil
  3411. +specifies the window to scroll.
  3412. +If `other-window-scroll-buffer' is non-nil, scroll the window
  3413. +showing that buffer, popping the buffer up if necessary.
  3414. +
  3415. +(scroll-other-window &optional N)Fscroll-left
  3416. +Scroll selected window display ARG columns left.
  3417. +Default for ARG is window width minus 2.
  3418. +
  3419. +(scroll-left &optional ARG)Fscroll-right
  3420. +Scroll selected window display ARG columns right.
  3421. +Default for ARG is window width minus 2.
  3422. +
  3423. +(scroll-right &optional ARG)Frecenter
  3424. +Center point in window and redisplay frame.  With ARG, put point on line ARG.
  3425. +The desired position of point is always relative to the current window.
  3426. +Just C-u as prefix means put point in the center of the window.
  3427. +No arg (i.e., it is nil) erases the entire frame and then
  3428. +redraws with point in the center of the current window.
  3429. +
  3430. +(recenter &optional N)Fmove-to-window-line
  3431. +Position point relative to window.
  3432. +With no argument, position point at center of window.
  3433. +An argument specifies frame line; zero means top of window,
  3434. +negative means relative to bottom of window.
  3435. +
  3436. +(move-to-window-line ARG)Fwindow-configuration-p
  3437. +T if OBJECT is a window-configration object.
  3438. +
  3439. +(window-configuration-p OBJ)Fset-window-configuration
  3440. +Set the configuration of windows and buffers as specified by CONFIGURATION.
  3441. +CONFIGURATION must be a value previously returned
  3442. +by `current-window-configuration' (which see).
  3443. +
  3444. +(set-window-configuration CONFIGURATION)Fcurrent-window-configuration
  3445. +Return an object representing the current window configuration of FRAME.
  3446. +If FRAME is nil or omitted, use the selected frame.
  3447. +This describes the number of windows, their sizes and current buffers,
  3448. +and for each displayed buffer, where display starts, and the positions of
  3449. +point and mark.  An exception is made for point in the current buffer:
  3450. +its value is -not- saved.
  3451. +This also records the currently selected frame, and FRAME's focus
  3452. +redirection (see `redirect-frame-focus').
  3453. +
  3454. +(current-window-configuration &optional FRAME)Fsave-window-excursion
  3455. +Execute body, preserving window sizes and contents.
  3456. +Restore which buffer appears in which window, where display starts,
  3457. +and the value of point and mark for each window.
  3458. +Also restore which buffer is current.
  3459. +But do not preserve point in the current buffer.
  3460. +Does not restore the value of point in current buffer.Vtemp-buffer-show-function
  3461. +Non-nil means call as function to display a help buffer.
  3462. +Used by `with-output-to-temp-buffer'.Vdisplay-buffer-function
  3463. +If non-nil, function to call to handle `display-buffer'.
  3464. +It will receive two args, the buffer and a flag which if non-nil means
  3465. + that the currently selected window is not acceptable.
  3466. +Commands such as `switch-to-buffer-other-window' and `find-file-other-window'
  3467. +work using this function.Vminibuffer-scroll-window
  3468. +Non-nil means it is the window that C-M-v in minibuffer should scroll.Vother-window-scroll-buffer
  3469. +If non-nil, this is a buffer and \[scroll-other-window] should scroll its window.Vpop-up-frames
  3470. +*Non-nil means `display-buffer' should make a separate frame.Vpop-up-frame-function
  3471. +Function to call to handle automatic new frame creation.
  3472. +It is called with no arguments and should return a newly created frame.
  3473. +
  3474. +A typical value might be `(lambda () (new-frame pop-up-frame-alist))'
  3475. +where `pop-up-frame-alist' would hold the default frame parameters.Vspecial-display-buffer-names
  3476. +*List of buffer names that should have their own special frames.
  3477. +Displaying a buffer whose name is in this list makes a special frame for it
  3478. +using `special-display-function'.  See also `special-display-regexps'.Vspecial-display-regexps
  3479. +*List of regexps saying which buffers should have their own special frames.
  3480. +If a buffer name matches one of these regexps, it gets its own frame.
  3481. +Displaying a buffer whose name is in this list makes a special frame for it
  3482. +using `special-display-function'.  See also `special-display-buffer-names'.Vspecial-display-function
  3483. +Function to call to make a new frame for a special buffer.
  3484. +It is called with one argument, the buffer,
  3485. +and should return a window displaying that buffer.
  3486. +The default value makes a separate frame for the buffer,
  3487. +using `special-display-alist' to specify the frame parameters.
  3488. +
  3489. +A buffer is special if its is listed in `special-display-buffer-names'
  3490. +or matches a regexp in `special-display-regexps'.Vpop-up-windows
  3491. +*Non-nil means display-buffer should make new windows.Vnext-screen-context-lines
  3492. +*Number of lines of continuity when scrolling by screenfuls.Vsplit-height-threshold
  3493. +*display-buffer would prefer to split the largest window if this large.
  3494. +If there is only one window, it is split regardless of this value.Vwindow-min-height
  3495. +*Delete any window less than this tall (including its mode line).Vwindow-min-width
  3496. +*Delete any window less than this wide.Vsystem-uses-terminfo
  3497. +Non-nil means the system uses terminfo rather than termcap.
  3498. +This variable can be used by terminal emulator packages.Finvocation-name
  3499. +Return the program name that was used to run Emacs.
  3500. +Any directory names are omitted.
  3501. +
  3502. +(invocation-name)Finvocation-directory
  3503. +Return the directory name in which the Emacs executable was located
  3504. +
  3505. +(invocation-directory)Fkill-emacs
  3506. +Exit the Emacs job and kill it.
  3507. +If ARG is an integer, return ARG as the exit program code.
  3508. +If ARG is a  string, stuff it as keyboard input.
  3509. +
  3510. +The value of `kill-emacs-hook', if not void,
  3511. +is a list of functions (of no args),
  3512. +all of which are called before Emacs is actually killed.
  3513. +
  3514. +(kill-emacs &optional ARG)Fdump-emacs-data
  3515. +Dump current state of Emacs into data file FILENAME.
  3516. +This function exists on systems that use HAVE_SHM.
  3517. +
  3518. +(dump-emacs-data INTONAME)Fdump-emacs
  3519. +Dump current state of Emacs into executable file FILENAME.
  3520. +Take symbols from SYMFILE (presumably the file you executed to run Emacs).
  3521. +This is used in the file `loadup.el' when building Emacs.
  3522. +
  3523. +Bind `command-line-processed' to nil before dumping,
  3524. +if you want the dumped Emacs to process its command line
  3525. +and announce itself normally when it is run.
  3526. +
  3527. +(dump-emacs INTONAME SYMNAME)Vcommand-line-args
  3528. +Args passed by shell to Emacs, as a list of strings.Vsystem-type
  3529. +Value is symbol indicating type of operating system you are using.Vsystem-configuration
  3530. +Value is string indicating configuration Emacs was built for.Vnoninteractive
  3531. +Non-nil means Emacs is running without interactive terminal.Vkill-emacs-hook
  3532. +Hook to be run whenever kill-emacs is called.
  3533. +Since kill-emacs may be invoked when the terminal is disconnected (or
  3534. +in other similar situations), functions placed on this hook should not
  3535. +expect to be able to interact with the user.Vemacs-priority
  3536. +Priority for Emacs to run at.
  3537. +This value is effective only if set before Emacs is dumped,
  3538. +and only if the Emacs executable is installed with setuid to permit
  3539. +it to change priority.  (Emacs sets its uid back to the real uid.)
  3540. +Currently, you need to define SET_EMACS_PRIORITY in `config.h'
  3541. +before you compile Emacs, to enable the code for this feature.Vinvocation-name
  3542. +The program name that was used to run Emacs.
  3543. +Any directory names are omitted.Vinvocation-directory
  3544. +The directory in which the Emacs executable was found, to run it.
  3545. +The value is nil if that directory's name is not known.Vinstallation-directory
  3546. +A directory within which to look for the `lib-src' and `etc' directories.
  3547. +This is non-nil when we can't find those directories in their standard
  3548. +installed locations, but we can find them
  3549. +near where the Emacs executable was found.Frecursive-edit
  3550. +Invoke the editor command loop recursively.
  3551. +To get out of the recursive edit, a command can do `(throw 'exit nil)';
  3552. +that tells this function to return.
  3553. +Alternately, `(throw 'exit t)' makes this function signal an error.
  3554. +This function is called by the editor initialization to begin editing.
  3555. +
  3556. +(recursive-edit)Ftop-level
  3557. +Exit all recursive editing levels.
  3558. +
  3559. +(top-level)Fexit-recursive-edit
  3560. +Exit from the innermost recursive edit or minibuffer.
  3561. +
  3562. +(exit-recursive-edit)Fabort-recursive-edit
  3563. +Abort the command that requested this recursive edit or minibuffer input.
  3564. +
  3565. +(abort-recursive-edit)Ftrack-mouse
  3566. +Evaluate BODY with mouse movement events enabled.
  3567. +Within a `track-mouse' form, mouse motion generates input events that
  3568. +you can read with `read-event'.
  3569. +Normally, mouse motion is ignored.Fread-key-sequence
  3570. +Read a sequence of keystrokes and return as a string or vector.
  3571. +The sequence is sufficient to specify a non-prefix command in the
  3572. +current local and global maps.
  3573. +
  3574. +First arg PROMPT is a prompt string.  If nil, do not prompt specially.
  3575. +Second (optional) arg CONTINUE-ECHO, if non-nil, means this key echos
  3576. +as a continuation of the previous key.
  3577. +
  3578. +A C-g typed while in this function is treated like any other character,
  3579. +and `quit-flag' is not set.
  3580. +
  3581. +If the key sequence starts with a mouse click, then the sequence is read
  3582. +using the keymaps of the buffer of the window clicked in, not the buffer
  3583. +of the selected window as normal.
  3584. +
  3585. +`read-key-sequence' drops unbound button-down events, since you normally
  3586. +only care about the click or drag events which follow them.  If a drag
  3587. +or multi-click event is unbound, but the corresponding click event would
  3588. +be bound, `read-key-sequence' turns the event into a click event at the
  3589. +drag's starting position.  This means that you don't have to distinguish
  3590. +between click and drag, double, or triple events unless you want to.
  3591. +
  3592. +`read-key-sequence' prefixes mouse events on mode lines, the vertical
  3593. +lines separating windows, and scroll bars with imaginary keys
  3594. +`mode-line', `vertical-line', and `vertical-scroll-bar'.
  3595. +
  3596. +If the user switches frames in the middle of a key sequence, the
  3597. +frame-switch event is put off until after the current key sequence.
  3598. +
  3599. +`read-key-sequence' checks `function-key-map' for function key
  3600. +sequences, where they wouldn't conflict with ordinary bindings.  See
  3601. +`function-key-map' for more details.
  3602. +
  3603. +(read-key-sequence PROMPT &optional CONTINUE-ECHO)Fcommand-execute
  3604. +Execute CMD as an editor command.
  3605. +CMD must be a symbol that satisfies the `commandp' predicate.
  3606. +Optional second arg RECORD-FLAG non-nil
  3607. +means unconditionally put this command in `command-history'.
  3608. +Otherwise, that is done only if an arg is read using the minibuffer.
  3609. +
  3610. +(command-execute CMD &optional RECORD)Fexecute-extended-command
  3611. +Read function name, then read its arguments and call it.
  3612. +
  3613. +(execute-extended-command PREFIXARG)Finput-pending-p
  3614. +T if command input is currently available with no waiting.
  3615. +Actually, the value is nil only if we can be sure that no input is available.
  3616. +
  3617. +(input-pending-p)Frecent-keys
  3618. +Return vector of last 100 events, not counting those from keyboard macros.
  3619. +
  3620. +(recent-keys)Fthis-command-keys
  3621. +Return the key sequence that invoked this command.
  3622. +The value is a string or a vector.
  3623. +
  3624. +(this-command-keys)Frecursion-depth
  3625. +Return the current depth in recursive edits.
  3626. +
  3627. +(recursion-depth)Fopen-dribble-file
  3628. +Start writing all keyboard characters to a dribble file called FILE.
  3629. +If FILE is nil, close any open dribble file.
  3630. +
  3631. +(open-dribble-file FILE)Fdiscard-input
  3632. +Discard the contents of the terminal input buffer.
  3633. +Also cancel any kbd macro being defined.
  3634. +
  3635. +(discard-input)Fsuspend-emacs
  3636. +Stop Emacs and return to superior process.  You can resume later.
  3637. +If `cannot-suspend' is non-nil, or if the system doesn't support job
  3638. +control, run a subshell instead.
  3639. +
  3640. +If optional arg STUFFSTRING is non-nil, its characters are stuffed
  3641. +to be read as terminal input by Emacs's parent, after suspension.
  3642. +
  3643. +Before suspending, call the functions in `suspend-hook' with no args.
  3644. +If any of them returns nil, don't call the rest and don't suspend.
  3645. +Otherwise, suspend normally and after resumption run the normal hook
  3646. +`suspend-resume-hook' if that is bound and non-nil.
  3647. +
  3648. +Some operating systems cannot stop the Emacs process and resume it later.
  3649. +On such systems, Emacs starts a subshell instead of suspending.
  3650. +
  3651. +(suspend-emacs &optional STUFFSTRING)Fset-input-mode
  3652. +Set mode of reading keyboard input.
  3653. +First arg INTERRUPT non-nil means use input interrupts;
  3654. + nil means use CBREAK mode.
  3655. +Second arg FLOW non-nil means use ^S/^Q flow control for output to terminal
  3656. + (no effect except in CBREAK mode).
  3657. +Third arg META t means accept 8-bit input (for a Meta key).
  3658. + META nil means ignore the top bit, on the assumption it is parity.
  3659. + Otherwise, accept 8-bit input and don't use the top bit for Meta.
  3660. +Optional fourth arg QUIT if non-nil specifies character to use for quitting.
  3661. +See also `current-input-mode'.
  3662. +
  3663. +(set-input-mode INTERRUPT FLOW META &optional QUIT)Fcurrent-input-mode
  3664. +Return information about the way Emacs currently reads keyboard input.
  3665. +The value is a list of the form (INTERRUPT FLOW META QUIT), where
  3666. +  INTERRUPT is non-nil if Emacs is using interrupt-driven input; if
  3667. +    nil, Emacs is using CBREAK mode.
  3668. +  FLOW is non-nil if Emacs uses ^S/^Q flow control for output to the
  3669. +    terminal; this does not apply if Emacs uses interrupt-driven input.
  3670. +  META is t if accepting 8-bit input with 8th bit as Meta flag.
  3671. +    META nil means ignoring the top bit, on the assumption it is parity.
  3672. +    META is neither t nor nil if accepting 8-bit input and using
  3673. +    all 8 bits as the character code.
  3674. +  QUIT is the character Emacs currently uses to quit.
  3675. +The elements of this list correspond to the arguments of
  3676. +`set-input-mode'.
  3677. +
  3678. +(current-input-mode)Vlast-command-char
  3679. +Last input event that was part of a command.Vlast-command-event
  3680. +Last input event that was part of a command.Vlast-nonmenu-event
  3681. +Last input event in a command, except for mouse menu events.
  3682. +Mouse menus give back keys that don't look like mouse events;
  3683. +this variable holds the actual mouse event that led to the menu,
  3684. +so that you can determine whether the command was run by mouse or not.Vlast-input-char
  3685. +Last input event.Vlast-input-event
  3686. +Last input event.Vunread-command-events
  3687. +List of objects to be read as next command input events.Vunread-command-char
  3688. +If not -1, an object to be read as next command input event.Vmeta-prefix-char
  3689. +Meta-prefix character code.  Meta-foo as command input
  3690. +turns into this character followed by foo.Vlast-command
  3691. +The last command executed.  Normally a symbol with a function definition,
  3692. +but can be whatever was found in the keymap, or whatever the variable
  3693. +`this-command' was set to by that command.Vthis-command
  3694. +The command now being executed.
  3695. +The command can set this variable; whatever is put here
  3696. +will be in `last-command' during the following command.Vauto-save-interval
  3697. +*Number of keyboard input characters between auto-saves.
  3698. +Zero means disable autosaving due to number of characters typed.Vauto-save-timeout
  3699. +*Number of seconds idle time before auto-save.
  3700. +Zero or nil means disable auto-saving due to idleness.
  3701. +After auto-saving due to this many seconds of idle time,
  3702. +Emacs also does a garbage collection if that seems to be warranted.Vecho-keystrokes
  3703. +*Nonzero means echo unfinished commands after this many seconds of pause.Vpolling-period
  3704. +*Interval between polling for input during Lisp execution.
  3705. +The reason for polling is to make C-g work to stop a running program.
  3706. +Polling is needed only when using X windows and SIGIO does not work.
  3707. +Polling is automatically disabled in all other cases.Vdouble-click-time
  3708. +*Maximum time between mouse clicks to make a double-click.
  3709. +Measured in milliseconds.  nil means disable double-click recognition;
  3710. +t means double-clicks have no time limit and are detected
  3711. +by position only.Vnum-input-keys
  3712. +*Number of complete keys read from the keyboard so far.Vlast-event-frame
  3713. +*The frame in which the most recently read event occurred.
  3714. +If the last event came from a keyboard macro, this is set to `macro'.Vhelp-char
  3715. +Character to recognize as meaning Help.
  3716. +When it is read, do `(eval help-form)', and display result if it's a string.
  3717. +If the value of `help-form' is nil, this char can be read normally.Vhelp-form
  3718. +Form to execute when character `help-char' is read.
  3719. +If the form returns a string, that string is displayed.
  3720. +If `help-form' is nil, the help char is not recognized.Vprefix-help-command
  3721. +Command to run when `help-char' character follows a prefix key.
  3722. +This command is used only when there is no actual binding
  3723. +for that character after that prefix key.Vtop-level
  3724. +Form to evaluate when Emacs starts up.
  3725. +Useful to set before you dump a modified Emacs.Vkeyboard-translate-table
  3726. +String used as translate table for keyboard input, or nil.
  3727. +Each character is looked up in this string and the contents used instead.
  3728. +If string is of length N, character codes N and up are untranslated.Vkey-translation-map
  3729. +Keymap of key translations that can override keymaps.
  3730. +This keymap works like `function-key-map', but comes after that,
  3731. +and applies even for keys that have ordinary bindings.Vcannot-suspend
  3732. +Non-nil means to always spawn a subshell instead of suspending,
  3733. +even if the operating system has support for stopping a process.Vmenu-prompting
  3734. +Non-nil means prompt with menus when appropriate.
  3735. +This is done when reading from a keymap that has a prompt string,
  3736. +for elements that have prompt strings.
  3737. +The menu is displayed on the screen
  3738. +if X menus were enabled at configuration
  3739. +time and the previous event was a mouse click prefix key.
  3740. +Otherwise, menu prompting uses the echo area.Vmenu-prompt-more-char
  3741. +Character to see next line of menu prompt.
  3742. +Type this character while in a menu prompt to rotate around the lines of it.Vextra-keyboard-modifiers
  3743. +A mask of additional modifier keys to use with every keyboard character.
  3744. +Emacs applies the modifiers of the character stored here to each keyboard
  3745. +character it reads.  For example, after evaluating the expression
  3746. +    (setq extra-keyboard-modifiers ?C-x)
  3747. +all input characters will have the control modifier applied to them.
  3748. +
  3749. +Note that the character ?C-@, equivalent to the integer zero, does
  3750. +not count as a control character; rather, it counts as a character
  3751. +with no modifiers; thus, setting `extra-keyboard-modifiers' to zero
  3752. +cancels any modification.Vdeactivate-mark
  3753. +If an editing command sets this to t, deactivate the mark afterward.
  3754. +The command loop sets this to nil before each command,
  3755. +and tests the value when the command returns.
  3756. +Buffer modification stores t in this variable.Vcommand-hook-internal
  3757. +Temporary storage of pre-command-hook or post-command-hook.Vpre-command-hook
  3758. +Normal hook run before each command is executed.
  3759. +While the hook is run, its value is temporarily set to nil
  3760. +to avoid an unbreakable infinite loop if a hook function gets an error.
  3761. +As a result, a hook function cannot straightforwardly alter the value of
  3762. +`pre-command-hook'.  See the Emacs Lisp manual for a way of
  3763. +implementing hook functions that alter the set of hook functions.Vpost-command-hook
  3764. +Normal hook run after each command is executed.
  3765. +While the hook is run, its value is temporarily set to nil
  3766. +to avoid an unbreakable infinite loop if a hook function gets an error.
  3767. +As a result, a hook function cannot straightforwardly alter the value of
  3768. +`post-command-hook'.  See the Emacs Lisp manual for a way of
  3769. +implementing hook functions that alter the set of hook functions.Vlucid-menu-bar-dirty-flag
  3770. +t means menu bar, specified Lucid style, needs to be recomputed.Vmenu-bar-final-items
  3771. +List of menu bar items to move to the end of the menu bar.
  3772. +The elements of the list are event types that may have menu bar bindings.Voverriding-local-map
  3773. +Keymap that overrides all other local keymaps.
  3774. +If this variable is non-nil, it is used as a keymap instead of the
  3775. +buffer's local map, and the minor mode keymaps and text property keymaps.Vtrack-mouse
  3776. +*Non-nil means generate motion events for mouse motion.Vsystem-key-alist
  3777. +Alist of system-specific X windows key symbols.
  3778. +Each element should have the form (N . SYMBOL) where N is the
  3779. +numeric keysym code (sans the "system-specific" bit 1<<28)
  3780. +and SYMBOL is its name.Vdeferred-action-list
  3781. +List of deferred actions to be performed at a later time.
  3782. +The precise format isn't relevant here; we just check whether it is nil.Vdeferred-action-function
  3783. +Function to call to handle deferred actions, after each command.
  3784. +This function is called with no arguments after each command
  3785. +whenever `deferred-action-list' is non-nil.Fstart-kbd-macro
  3786. +Record subsequent keyboard input, defining a keyboard macro.
  3787. +The commands are recorded even as they are executed.
  3788. +Use \[end-kbd-macro] to finish recording and make the macro available.
  3789. +Use \[name-last-kbd-macro] to give it a permanent name.
  3790. +Non-nil arg (prefix arg) means append to last macro defined;
  3791. + This begins by re-executing that macro as if you typed it again.
  3792. +
  3793. +(start-kbd-macro APPEND)Fend-kbd-macro
  3794. +Finish defining a keyboard macro.
  3795. +The definition was started by \[start-kbd-macro].
  3796. +The macro is now available for use via \[call-last-kbd-macro],
  3797. +or it can be given a name with \[name-last-kbd-macro] and then invoked
  3798. +under that name.
  3799. +
  3800. +With numeric arg, repeat macro now that many times,
  3801. +counting the definition just completed as the first repetition.
  3802. +An argument of zero means repeat until error.
  3803. +
  3804. +(end-kbd-macro &optional ARG)Fcall-last-kbd-macro
  3805. +Call the last keyboard macro that you defined with \[start-kbd-macro].
  3806. +
  3807. +A prefix argument serves as a repeat count.  Zero means repeat until error.
  3808. +
  3809. +To make a macro permanent so you can call it even after
  3810. +defining others, use \[name-last-kbd-macro].
  3811. +
  3812. +(call-last-kbd-macro &optional PREFIX)Fexecute-kbd-macro
  3813. +Execute MACRO as string of editor command characters.
  3814. +If MACRO is a symbol, its function definition is used.
  3815. +COUNT is a repeat count, or nil for once, or 0 for infinite loop.
  3816. +
  3817. +(execute-kbd-macro MACRO &optional PREFIXARG)Vdefining-kbd-macro
  3818. +Non-nil while a keyboard macro is being defined.  Don't set this!Vexecuting-macro
  3819. +Currently executing keyboard macro (a string); nil if none executing.Vexecuting-kbd-macro
  3820. +Currently executing keyboard macro (a string); nil if none executing.Vlast-kbd-macro
  3821. +Last kbd macro defined, as a string; nil if none defined.Fmake-keymap
  3822. +Construct and return a new keymap, of the form (keymap VECTOR . ALIST).
  3823. +VECTOR is a vector which holds the bindings for the ASCII
  3824. +characters.  ALIST is an assoc-list which holds bindings for function keys,
  3825. +mouse events, and any other things that appear in the input stream.
  3826. +All entries in it are initially nil, meaning "command undefined".
  3827. +
  3828. +The optional arg STRING supplies a menu name for the keymap
  3829. +in case you use it as a menu with `x-popup-menu'.
  3830. +
  3831. +(make-keymap &optional STRING)Fmake-sparse-keymap
  3832. +Construct and return a new sparse-keymap list.
  3833. +Its car is `keymap' and its cdr is an alist of (CHAR . DEFINITION),
  3834. +which binds the character CHAR to DEFINITION, or (SYMBOL . DEFINITION),
  3835. +which binds the function key or mouse event SYMBOL to DEFINITION.
  3836. +Initially the alist is nil.
  3837. +
  3838. +The optional arg STRING supplies a menu name for the keymap
  3839. +in case you use it as a menu with `x-popup-menu'.
  3840. +
  3841. +(make-sparse-keymap &optional STRING)Fkeymapp
  3842. +Return t if ARG is a keymap.
  3843. +
  3844. +A keymap is a list (keymap . ALIST),
  3845. +or a symbol whose function definition is itself a keymap.
  3846. +ALIST elements look like (CHAR . DEFN) or (SYMBOL . DEFN);
  3847. +a vector of densely packed bindings for small character codes
  3848. +is also allowed as an element.
  3849. +
  3850. +(keymapp OBJECT)Fcopy-keymap
  3851. +Return a copy of the keymap KEYMAP.
  3852. +The copy starts out with the same definitions of KEYMAP,
  3853. +but changing either the copy or KEYMAP does not affect the other.
  3854. +Any key definitions that are subkeymaps are recursively copied.
  3855. +However, a key definition which is a symbol whose definition is a keymap
  3856. +is not copied.
  3857. +
  3858. +(copy-keymap KEYMAP)Fdefine-key
  3859. +Args KEYMAP, KEY, DEF.  Define key sequence KEY, in KEYMAP, as DEF.
  3860. +KEYMAP is a keymap.  KEY is a string or a vector of symbols and characters
  3861. +meaning a sequence of keystrokes and events.
  3862. +Non-ASCII characters with codes above 127 (such as ISO Latin-1)
  3863. +can be included if you use a vector.
  3864. +DEF is anything that can be a key's definition:
  3865. + nil (means key is undefined in this keymap),
  3866. + a command (a Lisp function suitable for interactive calling)
  3867. + a string (treated as a keyboard macro),
  3868. + a keymap (to define a prefix key),
  3869. + a symbol.  When the key is looked up, the symbol will stand for its
  3870. +    function definition, which should at that time be one of the above,
  3871. +    or another symbol whose function definition is used, etc.
  3872. + a cons (STRING . DEFN), meaning that DEFN is the definition
  3873. +    (DEFN should be a valid definition in its own right),
  3874. + or a cons (KEYMAP . CHAR), meaning use definition of CHAR in map KEYMAP.
  3875. +
  3876. +If KEYMAP is a sparse keymap, the pair binding KEY to DEF is added at
  3877. +the front of KEYMAP.
  3878. +
  3879. +(define-key KEYMAP KEY DEF)Flookup-key
  3880. +In keymap KEYMAP, look up key sequence KEY.  Return the definition.
  3881. +nil means undefined.  See doc of `define-key' for kinds of definitions.
  3882. +
  3883. +A number as value means KEY is "too long";
  3884. +that is, characters or symbols in it except for the last one
  3885. +fail to be a valid sequence of prefix characters in KEYMAP.
  3886. +The number is how many characters at the front of KEY
  3887. +it takes to reach a non-prefix command.
  3888. +
  3889. +Normally, `lookup-key' ignores bindings for t, which act as default
  3890. +bindings, used when nothing else in the keymap applies; this makes it
  3891. +useable as a general function for probing keymaps.  However, if the
  3892. +third optional argument ACCEPT-DEFAULT is non-nil, `lookup-key' will
  3893. +recognize the default bindings, just as `read-key-sequence' does.
  3894. +
  3895. +(lookup-key KEYMAP KEY &optional ACCEPT-DEFAULT)Fkey-binding
  3896. +Return the binding for command KEY in current keymaps.
  3897. +KEY is a string or vector, a sequence of keystrokes.
  3898. +The binding is probably a symbol with a function definition.
  3899. +
  3900. +Normally, `key-binding' ignores bindings for t, which act as default
  3901. +bindings, used when nothing else in the keymap applies; this makes it
  3902. +usable as a general function for probing keymaps.  However, if the
  3903. +optional second argument ACCEPT-DEFAULT is non-nil, `key-binding' does
  3904. +recognize the default bindings, just as `read-key-sequence' does.
  3905. +
  3906. +(key-binding KEY &optional ACCEPT-DEFAULT)Flocal-key-binding
  3907. +Return the binding for command KEYS in current local keymap only.
  3908. +KEYS is a string, a sequence of keystrokes.
  3909. +The binding is probably a symbol with a function definition.
  3910. +
  3911. +If optional argument ACCEPT-DEFAULT is non-nil, recognize default
  3912. +bindings; see the description of `lookup-key' for more details about this.
  3913. +
  3914. +(local-key-binding KEYS &optional ACCEPT-DEFAULT)Fglobal-key-binding
  3915. +Return the binding for command KEYS in current global keymap only.
  3916. +KEYS is a string, a sequence of keystrokes.
  3917. +The binding is probably a symbol with a function definition.
  3918. +This function's return values are the same as those of lookup-key
  3919. +(which see).
  3920. +
  3921. +If optional argument ACCEPT-DEFAULT is non-nil, recognize default
  3922. +bindings; see the description of `lookup-key' for more details about this.
  3923. +
  3924. +(global-key-binding KEYS &optional ACCEPT-DEFAULT)Fminor-mode-key-binding
  3925. +Find the visible minor mode bindings of KEY.
  3926. +Return an alist of pairs (MODENAME . BINDING), where MODENAME is the
  3927. +the symbol which names the minor mode binding KEY, and BINDING is
  3928. +KEY's definition in that mode.  In particular, if KEY has no
  3929. +minor-mode bindings, return nil.  If the first binding is a
  3930. +non-prefix, all subsequent bindings will be omitted, since they would
  3931. +be ignored.  Similarly, the list doesn't include non-prefix bindings
  3932. +that come after prefix bindings.
  3933. +
  3934. +If optional argument ACCEPT-DEFAULT is non-nil, recognize default
  3935. +bindings; see the description of `lookup-key' for more details about this.
  3936. +
  3937. +(minor-mode-key-binding KEY &optional ACCEPT-DEFAULT)Fglobal-set-key
  3938. +Give KEY a global binding as COMMAND.
  3939. +COMMAND is a symbol naming an interactively-callable function.
  3940. +KEY is a key sequence (a string or vector of characters or event types).
  3941. +Non-ASCII characters with codes above 127 (such as ISO Latin-1)
  3942. +can be included if you use a vector.
  3943. +Note that if KEY has a local binding in the current buffer
  3944. +that local binding will continue to shadow any global binding.
  3945. +
  3946. +(global-set-key KEYS FUNCTION)Flocal-set-key
  3947. +Give KEY a local binding as COMMAND.
  3948. +COMMAND is a symbol naming an interactively-callable function.
  3949. +KEY is a key sequence (a string or vector of characters or event types).
  3950. +Non-ASCII characters with codes above 127 (such as ISO Latin-1)
  3951. +can be included if you use a vector.
  3952. +The binding goes in the current buffer's local map,
  3953. +which in most cases is shared with all other buffers in the same major mode.
  3954. +
  3955. +(local-set-key KEYS FUNCTION)Fglobal-unset-key
  3956. +Remove global binding of KEY.
  3957. +KEY is a string representing a sequence of keystrokes.
  3958. +
  3959. +(global-unset-key KEYS)Flocal-unset-key
  3960. +Remove local binding of KEY.
  3961. +KEY is a string representing a sequence of keystrokes.
  3962. +
  3963. +(local-unset-key KEYS)Fdefine-prefix-command
  3964. +Define COMMAND as a prefix command.  COMMAND should be a symbol.
  3965. +A new sparse keymap is stored as COMMAND's function definition and its value.
  3966. +If a second optional argument MAPVAR is given, the map is stored as
  3967. +its value instead of as COMMAND's value; but COMMAND is still defined
  3968. +as a function.
  3969. +
  3970. +(define-prefix-command NAME &optional MAPVAR)Fuse-global-map
  3971. +Select KEYMAP as the global keymap.
  3972. +
  3973. +(use-global-map KEYMAP)Fuse-local-map
  3974. +Select KEYMAP as the local keymap.
  3975. +If KEYMAP is nil, that means no local keymap.
  3976. +
  3977. +(use-local-map KEYMAP)Fcurrent-local-map
  3978. +Return current buffer's local keymap, or nil if it has none.
  3979. +
  3980. +(current-local-map)Fcurrent-global-map
  3981. +Return the current global keymap.
  3982. +
  3983. +(current-global-map)Fcurrent-minor-mode-maps
  3984. +Return a list of keymaps for the minor modes of the current buffer.
  3985. +
  3986. +(current-minor-mode-maps)Faccessible-keymaps
  3987. +Find all keymaps accessible via prefix characters from KEYMAP.
  3988. +Returns a list of elements of the form (KEYS . MAP), where the sequence
  3989. +KEYS starting from KEYMAP gets you to MAP.  These elements are ordered
  3990. +so that the KEYS increase in length.  The first element is ("" . KEYMAP).
  3991. +An optional argument PREFIX, if non-nil, should be a key sequence;
  3992. +then the value includes only maps for prefixes that start with PREFIX.
  3993. +
  3994. +(accessible-keymaps STARTMAP &optional PREFIX)Fkey-description
  3995. +Return a pretty description of key-sequence KEYS.
  3996. +Control characters turn into "C-foo" sequences, meta into "M-foo"
  3997. +spaces are put between sequence elements, etc.
  3998. +
  3999. +(key-description KEYS)Fsingle-key-description
  4000. +Return a pretty description of command character KEY.
  4001. +Control characters turn into C-whatever, etc.
  4002. +
  4003. +(single-key-description KEY)Ftext-char-description
  4004. +Return a pretty description of file-character CHAR.
  4005. +Control characters turn into "^char", etc.
  4006. +
  4007. +(text-char-description CHR)Fwhere-is-internal
  4008. +Return list of keys that invoke DEFINITION.
  4009. +If KEYMAP is non-nil, search only KEYMAP and the global keymap.
  4010. +If KEYMAP is nil, search all the currently active keymaps.
  4011. +
  4012. +If optional 3rd arg FIRSTONLY is non-nil, return the first key sequence found,
  4013. +rather than a list of all possible key sequences.
  4014. +If FIRSTONLY is t, avoid key sequences which use non-ASCII
  4015. +keys and therefore may not be usable on ASCII terminals.  If FIRSTONLY
  4016. +is the symbol `non-ascii', return the first binding found, no matter
  4017. +what its components.
  4018. +
  4019. +If optional 4th arg NOINDIRECT is non-nil, don't follow indirections
  4020. +to other keymaps or slots.  This makes it possible to search for an
  4021. +indirect definition itself.
  4022. +
  4023. +(where-is-internal DEFINITION &optional KEYMAP FIRSTONLY NOINDIRECT)Fdescribe-bindings
  4024. +Show a list of all defined keys, and their definitions.
  4025. +The list is put in a buffer, which is displayed.
  4026. +An optional argument PREFIX, if non-nil, should be a key sequence;
  4027. +then we display only bindings that start with that prefix.
  4028. +
  4029. +(describe-bindings &optional PREFIX)Fdescribe-vector
  4030. +Insert a description of contents of VECTOR.
  4031. +This is text showing the elements of vector matched against indices.
  4032. +
  4033. +(describe-vector VECTOR)Fapropos-internal
  4034. +Show all symbols whose names contain match for REGEXP.
  4035. +If optional 2nd arg PRED is non-nil, (funcall PRED SYM) is done
  4036. +for each symbol and a symbol is mentioned only if that returns non-nil.
  4037. +Return list of symbols found.
  4038. +
  4039. +(apropos-internal STRING &optional PRED)Vminibuffer-local-map
  4040. +Default keymap to use when reading from the minibuffer.Vminibuffer-local-ns-map
  4041. +Local keymap for the minibuffer when spaces are not allowed.Vminibuffer-local-completion-map
  4042. +Local keymap for minibuffer input with completion.Vminibuffer-local-must-match-map
  4043. +Local keymap for minibuffer input with completion, for exact match.Vminor-mode-map-alist
  4044. +Alist of keymaps to use for minor modes.
  4045. +Each element looks like (VARIABLE . KEYMAP); KEYMAP is used to read
  4046. +key sequences and look up bindings iff VARIABLE's value is non-nil.
  4047. +If two active keymaps bind the same key, the keymap appearing earlier
  4048. +in the list takes precedence.Vfunction-key-map
  4049. +Keymap mapping ASCII function key sequences onto their preferred forms.
  4050. +This allows Emacs to recognize function keys sent from ASCII
  4051. +terminals at any point in a key sequence.
  4052. +
  4053. +The `read-key-sequence' function replaces any subsequence bound by
  4054. +`function-key-map' with its binding.  More precisely, when the active
  4055. +keymaps have no binding for the current key sequence but
  4056. +`function-key-map' binds a suffix of the sequence to a vector or string,
  4057. +`read-key-sequence' replaces the matching suffix with its binding, and
  4058. +continues with the new sequence.
  4059. +
  4060. +The events that come from bindings in `function-key-map' are not
  4061. +themselves looked up in `function-key-map'.
  4062. +
  4063. +For example, suppose `function-key-map' binds `ESC O P' to [f1].
  4064. +Typing `ESC O P' to `read-key-sequence' would return [f1].  Typing
  4065. +`C-x ESC O P' would return [?\C-x f1].  If [f1] were a prefix
  4066. +key, typing `ESC O P x' would return [f1 x].Fbuffer-list
  4067. +Return a list of all existing live buffers.
  4068. +
  4069. +(buffer-list)Fget-buffer
  4070. +Return the buffer named NAME (a string).
  4071. +If there is no live buffer named NAME, return nil.
  4072. +NAME may also be a buffer; if so, the value is that buffer.
  4073. +
  4074. +(get-buffer NAME)Fget-file-buffer
  4075. +Return the buffer visiting file FILENAME (a string).
  4076. +The buffer's `buffer-file-name' must match exactly the expansion of FILENAME.
  4077. +If there is no such live buffer, return nil.
  4078. +
  4079. +(get-file-buffer FILENAME)Fget-buffer-create
  4080. +Return the buffer named NAME, or create such a buffer and return it.
  4081. +A new buffer is created if there is no live buffer named NAME.
  4082. +If NAME starts with a space, the new buffer does not keep undo information.
  4083. +If NAME is a buffer instead of a string, then it is the value returned.
  4084. +The value is never nil.
  4085. +
  4086. +(get-buffer-create NAME)Fgenerate-new-buffer-name
  4087. +Return a string that is the name of no existing buffer based on NAME.
  4088. +If there is no live buffer named NAME, then return NAME.
  4089. +Otherwise modify name by appending `<NUMBER>', incrementing NUMBER
  4090. +until an unused name is found, and then return that name.
  4091. +Optional second argument IGNORE specifies a name that is okay to use
  4092. +(if it is in the sequence to be tried)
  4093. +even if a buffer with that name exists.
  4094. +
  4095. +(generate-new-buffer-name NAME &optional IGNORE)Fbuffer-name
  4096. +Return the name of BUFFER, as a string.
  4097. +With no argument or nil as argument, return the name of the current buffer.
  4098. +
  4099. +(buffer-name &optional BUFFER)Fbuffer-file-name
  4100. +Return name of file BUFFER is visiting, or nil if none.
  4101. +No argument or nil as argument means use the current buffer.
  4102. +
  4103. +(buffer-file-name &optional BUFFER)Fbuffer-local-variables
  4104. +Return an alist of variables that are buffer-local in BUFFER.
  4105. +Most elements look like (SYMBOL . VALUE), describing one variable.
  4106. +For a symbol that is locally unbound, just the symbol appears in the value.
  4107. +Note that storing new VALUEs in these elements doesn't change the variables.
  4108. +No argument or nil as argument means use current buffer as BUFFER.
  4109. +
  4110. +(buffer-local-variables &optional BUFFER)Fbuffer-modified-p
  4111. +Return t if BUFFER was modified since its file was last read or saved.
  4112. +No argument or nil as argument means use current buffer as BUFFER.
  4113. +
  4114. +(buffer-modified-p &optional BUFFER)Fset-buffer-modified-p
  4115. +Mark current buffer as modified or unmodified according to FLAG.
  4116. +A non-nil FLAG means mark the buffer modified.
  4117. +
  4118. +(set-buffer-modified-p FLAG)Fbuffer-modified-tick
  4119. +Return BUFFER's tick counter, incremented for each change in text.
  4120. +Each buffer has a tick counter which is incremented each time the text in
  4121. +that buffer is changed.  It wraps around occasionally.
  4122. +No argument or nil as argument means use current buffer as BUFFER.
  4123. +
  4124. +(buffer-modified-tick &optional BUFFER)Frename-buffer
  4125. +Change current buffer's name to NEWNAME (a string).
  4126. +If second arg UNIQUE is nil or omitted, it is an error if a
  4127. +buffer named NEWNAME already exists.
  4128. +If UNIQUE is non-nil, come up with a new name using
  4129. +`generate-new-buffer-name'.
  4130. +Interactively, you can set UNIQUE with a prefix argument.
  4131. +We return the name we actually gave the buffer.
  4132. +This does not change the name of the visited file (if any).
  4133. +
  4134. +(rename-buffer NAME &optional UNIQUE)Fother-buffer
  4135. +Return most recently selected buffer other than BUFFER.
  4136. +Buffers not visible in windows are preferred to visible buffers,
  4137. +unless optional second argument VISIBLE-OK is non-nil.
  4138. +If no other buffer exists, the buffer `*scratch*' is returned.
  4139. +If BUFFER is omitted or nil, some interesting buffer is returned.
  4140. +
  4141. +(other-buffer &optional BUFFER VISIBLE-OK)Fbuffer-disable-undo
  4142. +Make BUFFER stop keeping undo information.
  4143. +No argument or nil as argument means do this for the current buffer.
  4144. +
  4145. +(buffer-disable-undo &optional BUFFER)Fbuffer-enable-undo
  4146. +Start keeping undo information for buffer BUFFER.
  4147. +No argument or nil as argument means do this for the current buffer.
  4148. +
  4149. +(buffer-enable-undo &optional BUFFER)Vkill-buffer-hook
  4150. +Hook to be run (by `run-hooks', which see) when a buffer is killed.
  4151. +The buffer being killed will be current while the hook is running.
  4152. +See `kill-buffer'.Fkill-buffer
  4153. +Kill the buffer BUFFER.
  4154. +The argument may be a buffer or may be the name of a buffer.
  4155. +An argument of nil means kill the current buffer.
  4156. +
  4157. +Value is t if the buffer is actually killed, nil if user says no.
  4158. +
  4159. +The value of `kill-buffer-hook' (which may be local to that buffer),
  4160. +if not void, is a list of functions to be called, with no arguments,
  4161. +before the buffer is actually killed.  The buffer to be killed is current
  4162. +when the hook functions are called.
  4163. +
  4164. +Any processes that have this buffer as the `process-buffer' are killed
  4165. +with `delete-process'.
  4166. +
  4167. +(kill-buffer BUFNAME)Fswitch-to-buffer
  4168. +Select buffer BUFFER in the current window.
  4169. +BUFFER may be a buffer or a buffer name.
  4170. +Optional second arg NORECORD non-nil means
  4171. +do not put this buffer at the front of the list of recently selected ones.
  4172. +
  4173. +WARNING: This is NOT the way to work on another buffer temporarily
  4174. +within a Lisp program!  Use `set-buffer' instead.  That avoids messing with
  4175. +the window-buffer correspondences.
  4176. +
  4177. +(switch-to-buffer BUFNAME &optional NORECORD)Fpop-to-buffer
  4178. +Select buffer BUFFER in some window, preferably a different one.
  4179. +If BUFFER is nil, then some other buffer is chosen.
  4180. +If `pop-up-windows' is non-nil, windows can be split to do this.
  4181. +If optional second arg OTHER-WINDOW is non-nil, insist on finding another
  4182. +window even if BUFFER is already visible in the selected window.
  4183. +
  4184. +(pop-to-buffer BUFNAME &optional OTHER)Fcurrent-buffer
  4185. +Return the current buffer as a Lisp object.
  4186. +
  4187. +(current-buffer)Fset-buffer
  4188. +Make the buffer BUFFER current for editing operations.
  4189. +BUFFER may be a buffer or the name of an existing buffer.
  4190. +See also `save-excursion' when you want to make a buffer current temporarily.
  4191. +This function does not display the buffer, so its effect ends
  4192. +when the current command terminates.
  4193. +Use `switch-to-buffer' or `pop-to-buffer' to switch buffers permanently.
  4194. +
  4195. +(set-buffer BUFNAME)Fbarf-if-buffer-read-only
  4196. +Signal a `buffer-read-only' error if the current buffer is read-only.
  4197. +
  4198. +(barf-if-buffer-read-only)Fbury-buffer
  4199. +Put BUFFER at the end of the list of all buffers.
  4200. +There it is the least likely candidate for `other-buffer' to return;
  4201. +thus, the least likely buffer for \[switch-to-buffer] to select by default.
  4202. +If BUFFER is nil or omitted, bury the current buffer.
  4203. +Also, if BUFFER is nil or omitted, remove the current buffer from the
  4204. +selected window if it is displayed there.
  4205. +
  4206. +(bury-buffer &optional BUF)Ferase-buffer
  4207. +Delete the entire contents of the current buffer.
  4208. +Any narrowing restriction in effect (see `narrow-to-region') is removed,
  4209. +so the buffer is truly empty after this.
  4210. +
  4211. +(erase-buffer)Flist-buffers
  4212. +Display a list of names of existing buffers.
  4213. +The list is displayed in a buffer named `*Buffer List*'.
  4214. +Note that buffers with names starting with spaces are omitted.
  4215. +Non-null optional arg FILES-ONLY means mention only file buffers.
  4216. +
  4217. +The M column contains a * for buffers that are modified.
  4218. +The R column contains a % for buffers that are read-only.
  4219. +
  4220. +(list-buffers &optional FILES)Fkill-all-local-variables
  4221. +Switch to Fundamental mode by killing current buffer's local variables.
  4222. +Most local variable bindings are eliminated so that the default values
  4223. +become effective once more.  Also, the syntax table is set from
  4224. +`standard-syntax-table', the local keymap is set to nil,
  4225. +and the abbrev table from `fundamental-mode-abbrev-table'.
  4226. +This function also forces redisplay of the mode line.
  4227. +
  4228. +Every function to select a new major mode starts by
  4229. +calling this function.
  4230. +
  4231. +As a special exception, local variables whose names have
  4232. +a non-nil `permanent-local' property are not eliminated by this function.
  4233. +
  4234. +The first thing this function does is run
  4235. +the normal hook `change-major-mode-hook'.
  4236. +
  4237. +(kill-all-local-variables)Foverlayp
  4238. +Return t if OBJECT is an overlay.
  4239. +
  4240. +(overlayp OBJECT)Fmake-overlay
  4241. +Create a new overlay with range BEG to END in BUFFER.
  4242. +If omitted, BUFFER defaults to the current buffer.
  4243. +BEG and END may be integers or markers.
  4244. +
  4245. +(make-overlay BEG END &optional BUFFER)Fmove-overlay
  4246. +Set the endpoints of OVERLAY to BEG and END in BUFFER.
  4247. +If BUFFER is omitted, leave OVERLAY in the same buffer it inhabits now.
  4248. +If BUFFER is omitted, and OVERLAY is in no buffer, put it in the current
  4249. +buffer.
  4250. +
  4251. +(move-overlay OVERLAY BEG END &optional BUFFER)Fdelete-overlay
  4252. +Delete the overlay OVERLAY from its buffer.
  4253. +
  4254. +(delete-overlay OVERLAY)Foverlay-start
  4255. +Return the position at which OVERLAY starts.
  4256. +
  4257. +(overlay-start OVERLAY)Foverlay-end
  4258. +Return the position at which OVERLAY ends.
  4259. +
  4260. +(overlay-end OVERLAY)Foverlay-buffer
  4261. +Return the buffer OVERLAY belongs to.
  4262. +
  4263. +(overlay-buffer OVERLAY)Foverlay-properties
  4264. +Return a list of the properties on OVERLAY.
  4265. +This is a copy of OVERLAY's plist; modifying its conses has no effect on
  4266. +OVERLAY.
  4267. +
  4268. +(overlay-properties OVERLAY)Foverlays-at
  4269. +Return a list of the overlays that contain position POS.
  4270. +
  4271. +(overlays-at POS)Fnext-overlay-change
  4272. +Return the next position after POS where an overlay starts or ends.
  4273. +If there are no more overlay boundaries after POS, return (point-max).
  4274. +
  4275. +(next-overlay-change POS)Foverlay-lists
  4276. +Return a pair of lists giving all the overlays of the current buffer.
  4277. +The car has all the overlays before the overlay center;
  4278. +the cdr has all the overlays after the overlay center.
  4279. +Recentering overlays moves overlays between these lists.
  4280. +The lists you get are copies, so that changing them has no effect.
  4281. +However, the overlays you get are the real objects that the buffer uses.
  4282. +
  4283. +(overlay-lists)Foverlay-recenter
  4284. +Recenter the overlays of the current buffer around position POS.
  4285. +
  4286. +(overlay-recenter POS)Foverlay-get
  4287. +Get the property of overlay OVERLAY with property name NAME.
  4288. +
  4289. +(overlay-get OVERLAY PROP)Foverlay-put
  4290. +Set one property of overlay OVERLAY: give property PROP value VALUE.
  4291. +
  4292. +(overlay-put OVERLAY PROP VALUE)Vdefault-mode-line-format
  4293. +Default value of `mode-line-format' for buffers that don't override it.
  4294. +This is the same as (default-value 'mode-line-format).Vdefault-abbrev-mode
  4295. +Default value of `abbrev-mode' for buffers that do not override it.
  4296. +This is the same as (default-value 'abbrev-mode).Vdefault-ctl-arrow
  4297. +Default value of `ctl-arrow' for buffers that do not override it.
  4298. +This is the same as (default-value 'ctl-arrow).Vdefault-truncate-lines
  4299. +Default value of `truncate-lines' for buffers that do not override it.
  4300. +This is the same as (default-value 'truncate-lines).Vdefault-fill-column
  4301. +Default value of `fill-column' for buffers that do not override it.
  4302. +This is the same as (default-value 'fill-column).Vdefault-left-margin
  4303. +Default value of `left-margin' for buffers that do not override it.
  4304. +This is the same as (default-value 'left-margin).Vdefault-tab-width
  4305. +Default value of `tab-width' for buffers that do not override it.
  4306. +This is the same as (default-value 'tab-width).Vdefault-case-fold-search
  4307. +Default value of `case-fold-search' for buffers that don't override it.
  4308. +This is the same as (default-value 'case-fold-search).Vdefault-buffer-file-type
  4309. +Default file type for buffers that do not override it.
  4310. +This is the same as (default-value 'buffer-file-type).
  4311. +The file type is nil for text, t for binary.Vmode-line-format
  4312. +Template for displaying mode line for current buffer.
  4313. +Each buffer has its own value of this variable.
  4314. +Value may be a string, a symbol or a list or cons cell.
  4315. +For a symbol, its value is used (but it is ignored if t or nil).
  4316. + A string appearing directly as the value of a symbol is processed verbatim
  4317. + in that the %-constructs below are not recognized.
  4318. +For a list whose car is a symbol, the symbol's value is taken,
  4319. + and if that is non-nil, the cadr of the list is processed recursively.
  4320. + Otherwise, the caddr of the list (if there is one) is processed.
  4321. +For a list whose car is a string or list, each element is processed
  4322. + recursively and the results are effectively concatenated.
  4323. +For a list whose car is an integer, the cdr of the list is processed
  4324. +  and padded (if the number is positive) or truncated (if negative)
  4325. +  to the width specified by that number.
  4326. +A string is printed verbatim in the mode line except for %-constructs:
  4327. +  (%-constructs are allowed when the string is the entire mode-line-format
  4328. +   or when it is found in a cons-cell or a list)
  4329. +  %b -- print buffer name.      %f -- print visited file name.
  4330. +  %* -- print %, * or hyphen.   %+ -- print *, % or hyphen.
  4331. +    % means buffer is read-only and * means it is modified.
  4332. +    For a modified read-only buffer, %* gives % and %+ gives *.
  4333. +  %s -- print process status.   %l -- print the current line number.
  4334. +  %p -- print percent of buffer above top of window, or Top, Bot or All.
  4335. +  %P -- print percent of buffer above bottom of window, perhaps plus Top,
  4336. +        or print Bottom or All.
  4337. +  %n -- print Narrow if appropriate.
  4338. +  %t -- print T if files is text, B if binary.
  4339. +  %[ -- print one [ for each recursive editing level.  %] similar.
  4340. +  %% -- print %.   %- -- print infinitely many dashes.
  4341. +Decimal digits after the % specify field width to which to pad.Vdefault-major-mode
  4342. +*Major mode for new buffers.  Defaults to `fundamental-mode'.
  4343. +nil here means use current buffer's major mode.Vmajor-mode
  4344. +Symbol for current buffer's major mode.Vmode-name
  4345. +Pretty name of current buffer's major mode (a string).Vabbrev-mode
  4346. +Non-nil turns on automatic expansion of abbrevs as they are inserted.
  4347. +Automatically becomes buffer-local when set in any fashion.Vcase-fold-search
  4348. +*Non-nil if searches should ignore case.
  4349. +Automatically becomes buffer-local when set in any fashion.Vfill-column
  4350. +*Column beyond which automatic line-wrapping should happen.
  4351. +Automatically becomes buffer-local when set in any fashion.Vleft-margin
  4352. +*Column for the default indent-line-function to indent to.
  4353. +Linefeed indents to this column in Fundamental mode.
  4354. +Automatically becomes buffer-local when set in any fashion.Vtab-width
  4355. +*Distance between tab stops (for display of tab characters), in columns.
  4356. +Automatically becomes buffer-local when set in any fashion.Vctl-arrow
  4357. +*Non-nil means display control chars with uparrow.
  4358. +Nil means use backslash and octal digits.
  4359. +Automatically becomes buffer-local when set in any fashion.
  4360. +This variable does not apply to characters whose display is specified
  4361. +in the current display table (if there is one).Vtruncate-lines
  4362. +*Non-nil means do not display continuation lines;
  4363. +give each line of text one screen line.
  4364. +Automatically becomes buffer-local when set in any fashion.
  4365. +
  4366. +Note that this is overridden by the variable
  4367. +`truncate-partial-width-windows' if that variable is non-nil
  4368. +and this buffer is not full-frame width.Vbuffer-file-type
  4369. +*If visited file is text, nil; otherwise, t.Vdefault-directory
  4370. +Name of default directory of current buffer.  Should end with slash.
  4371. +Each buffer has its own value of this variable.Vauto-fill-function
  4372. +Function called (if non-nil) to perform auto-fill.
  4373. +It is called after self-inserting a space at a column beyond `fill-column'.
  4374. +Each buffer has its own value of this variable.
  4375. +NOTE: This variable is not an ordinary hook;
  4376. +It may not be a list of functions.Vbuffer-file-name
  4377. +Name of file visited in current buffer, or nil if not visiting a file.
  4378. +Each buffer has its own value of this variable.Vbuffer-auto-save-file-name
  4379. +Name of file for auto-saving current buffer,
  4380. +or nil if buffer should not be auto-saved.
  4381. +Each buffer has its own value of this variable.Vbuffer-read-only
  4382. +Non-nil if this buffer is read-only.
  4383. +Each buffer has its own value of this variable.Vbuffer-backed-up
  4384. +Non-nil if this buffer's file has been backed up.
  4385. +Backing up is done before the first time the file is saved.
  4386. +Each buffer has its own value of this variable.Vbuffer-saved-size
  4387. +Length of current buffer when last read in, saved or auto-saved.
  4388. +0 initially.
  4389. +Each buffer has its own value of this variable.Vselective-display
  4390. +Non-nil enables selective display:
  4391. +Integer N as value means display only lines
  4392. + that start with less than n columns of space.
  4393. +A value of t means, after a ^M, all the rest of the line is invisible.
  4394. + Then ^M's in the file are written into files as newlines.
  4395. +
  4396. +Automatically becomes buffer-local when set in any fashion.Vselective-display-ellipses
  4397. +t means display ... on previous line when a line is invisible.
  4398. +Automatically becomes buffer-local when set in any fashion.Voverwrite-mode
  4399. +Non-nil if self-insertion should replace existing text.
  4400. +If non-nil and not `overwrite-mode-binary', self-insertion still
  4401. +inserts at the end of a line, and inserts when point is before a tab,
  4402. +until the tab is filled in.
  4403. +If `overwrite-mode-binary', self-insertion replaces newlines and tabs too.
  4404. +Automatically becomes buffer-local when set in any fashion.Vbuffer-display-table
  4405. +Display table that controls display of the contents of current buffer.
  4406. +Automatically becomes buffer-local when set in any fashion.
  4407. +The display table is a vector created with `make-display-table'.
  4408. +The first 256 elements control how to display each possible text character.
  4409. +Each value should be a vector of characters or nil;
  4410. +nil means display the character in the default fashion.
  4411. +The remaining five elements control the display of
  4412. +  the end of a truncated screen line (element 256, a single character);
  4413. +  the end of a continued line (element 257, a single character);
  4414. +  the escape character used to display character codes in octal
  4415. +    (element 258, a single character);
  4416. +  the character used as an arrow for control characters (element 259,
  4417. +    a single character);
  4418. +  the decoration indicating the presence of invisible lines (element 260,
  4419. +    a vector of characters).
  4420. +If this variable is nil, the value of `standard-display-table' is used.
  4421. +Each window can have its own, overriding display table.Vbefore-change-function
  4422. +Function to call before each text change.
  4423. +Two arguments are passed to the function: the positions of
  4424. +the beginning and end of the range of old text to be changed.
  4425. +(For an insertion, the beginning and end are at the same place.)
  4426. +No information is given about the length of the text after the change.
  4427. +
  4428. +Buffer changes made while executing the `before-change-function'
  4429. +don't call any before-change or after-change functions.
  4430. +That's because these variables are temporarily set to nil.
  4431. +As a result, a hook function cannot straightforwardly alter the value of
  4432. +these variables.  See the Emacs Lisp manual for a way of
  4433. +accomplishing an equivalent result by using other variables.Vafter-change-function
  4434. +Function to call after each text change.
  4435. +Three arguments are passed to the function: the positions of
  4436. +the beginning and end of the range of changed text,
  4437. +and the length of the pre-change text replaced by that range.
  4438. +(For an insertion, the pre-change length is zero;
  4439. +for a deletion, that length is the number of characters deleted,
  4440. +and the post-change beginning and end are at the same place.)
  4441. +
  4442. +Buffer changes made while executing the `after-change-function'
  4443. +don't call any before-change or after-change functions.
  4444. +That's because these variables are temporarily set to nil.
  4445. +As a result, a hook function cannot straightforwardly alter the value of
  4446. +these variables.  See the Emacs Lisp manual for a way of
  4447. +accomplishing an equivalent result by using other variables.Vbefore-change-functions
  4448. +List of functions to call before each text change.
  4449. +Two arguments are passed to each function: the positions of
  4450. +the beginning and end of the range of old text to be changed.
  4451. +(For an insertion, the beginning and end are at the same place.)
  4452. +No information is given about the length of the text after the change.
  4453. +
  4454. +Buffer changes made while executing the `before-change-functions'
  4455. +don't call any before-change or after-change functions.
  4456. +That's because these variables are temporarily set to nil.
  4457. +As a result, a hook function cannot straightforwardly alter the value of
  4458. +these variables.  See the Emacs Lisp manual for a way of
  4459. +accomplishing an equivalent result by using other variables.Vafter-change-functions
  4460. +List of function to call after each text change.
  4461. +Three arguments are passed to each function: the positions of
  4462. +the beginning and end of the range of changed text,
  4463. +and the length of the pre-change text replaced by that range.
  4464. +(For an insertion, the pre-change length is zero;
  4465. +for a deletion, that length is the number of characters deleted,
  4466. +and the post-change beginning and end are at the same place.)
  4467. +
  4468. +Buffer changes made while executing the `after-change-functions'
  4469. +don't call any before-change or after-change functions.
  4470. +That's because these variables are temporarily set to nil.
  4471. +As a result, a hook function cannot straightforwardly alter the value of
  4472. +these variables.  See the Emacs Lisp manual for a way of
  4473. +accomplishing an equivalent result by using other variables.Vfirst-change-hook
  4474. +A list of functions to call before changing a buffer which is unmodified.
  4475. +The functions are run using the `run-hooks' function.Vbuffer-undo-list
  4476. +List of undo entries in current buffer.
  4477. +Recent changes come first; older changes follow newer.
  4478. +
  4479. +An entry (START . END) represents an insertion which begins at
  4480. +position START and ends at position END.
  4481. +
  4482. +An entry (TEXT . POSITION) represents the deletion of the string TEXT
  4483. +from (abs POSITION).  If POSITION is positive, point was at the front
  4484. +of the text being deleted; if negative, point was at the end.
  4485. +
  4486. +An entry (t HIGHWORD LOWWORD) indicates that the buffer had been
  4487. +previously unmodified.  HIGHWORD and LOWWORD are the high and low
  4488. +16-bit words of the buffer's modification count at the time.  If the
  4489. +modification count of the most recent save is different, this entry is
  4490. +obsolete.
  4491. +
  4492. +An entry (nil PROP VAL BEG . END) indicates that a text property
  4493. +was modified between BEG and END.  PROP is the property name,
  4494. +and VAL is the old value.
  4495. +
  4496. +An entry of the form POSITION indicates that point was at the buffer
  4497. +location given by the integer.  Undoing an entry of this form places
  4498. +point at POSITION.
  4499. +
  4500. +nil marks undo boundaries.  The undo command treats the changes
  4501. +between two undo boundaries as a single step to be undone.
  4502. +
  4503. +If the value of the variable is t, undo information is not recorded.Vmark-active
  4504. +Non-nil means the mark and region are currently active in this buffer.
  4505. +Automatically local in all buffers.Vtransient-mark-mode
  4506. +*Non-nil means deactivate the mark when the buffer contents change.Vinhibit-read-only
  4507. +*Non-nil means disregard read-only status of buffers or characters.
  4508. +If the value is t, disregard `buffer-read-only' and all `read-only'
  4509. +text properties.  If the value is a list, disregard `buffer-read-only'
  4510. +and disregard a `read-only' text property if the property value
  4511. +is a member of the list.Vkill-buffer-query-functions
  4512. +List of functions called with no args to query before killing a buffer.Flock-buffer
  4513. +Lock FILE, if current buffer is modified.
  4514. +FILE defaults to current buffer's visited file,
  4515. +or else nothing is done if current buffer isn't visiting a file.
  4516. +
  4517. +(lock-buffer &optional FN)Funlock-buffer
  4518. +Unlock the file visited in the current buffer,
  4519. +if it should normally be locked.
  4520. +
  4521. +(unlock-buffer)Ffile-locked-p
  4522. +Return nil if the FILENAME is not locked,
  4523. +t if it is locked by you, else a string of the name of the locker.
  4524. +
  4525. +(file-locked-p &optional FN)Fmarker-buffer
  4526. +Return the buffer that MARKER points into, or nil if none.
  4527. +Returns nil if MARKER points into a dead buffer.
  4528. +
  4529. +(marker-buffer MARKER)Fmarker-position
  4530. +Return the position MARKER points at, as a character number.
  4531. +
  4532. +(marker-position MARKER)Fset-marker
  4533. +Position MARKER before character number NUMBER in BUFFER.
  4534. +BUFFER defaults to the current buffer.
  4535. +If NUMBER is nil, makes marker point nowhere.
  4536. +Then it no longer slows down editing in any buffer.
  4537. +Returns MARKER.
  4538. +
  4539. +(set-marker MARKER POS &optional BUFFER)Fcopy-marker
  4540. +Return a new marker pointing at the same place as MARKER.
  4541. +If argument is a number, makes a new marker pointing
  4542. +at that position in the current buffer.
  4543. +
  4544. +(copy-marker MARKER)Ftext-properties-at
  4545. +Return the list of properties held by the character at POSITION
  4546. +in optional argument OBJECT, a string or buffer.  If nil, OBJECT
  4547. +defaults to the current buffer.
  4548. +If POSITION is at the end of OBJECT, the value is nil.
  4549. +
  4550. +(text-properties-at POS &optional OBJECT)Fget-text-property
  4551. +Return the value of position POS's property PROP, in OBJECT.
  4552. +OBJECT is optional and defaults to the current buffer.
  4553. +If POSITION is at the end of OBJECT, the value is nil.
  4554. +
  4555. +(get-text-property POS PROP &optional OBJECT)Fget-char-property
  4556. +Return the value of position POS's property PROP, in OBJECT.
  4557. +OBJECT is optional and defaults to the current buffer.
  4558. +If POS is at the end of OBJECT, the value is nil.
  4559. +If OBJECT is a buffer, then overlay properties are considered as well as
  4560. +text properties.
  4561. +If OBJECT is a window, then that window's buffer is used, but window-specific
  4562. +overlays are considered only if they are associated with OBJECT.
  4563. +
  4564. +(get-char-property POS PROP &optional OBJECT)Fnext-property-change
  4565. +Return the position of next property change.
  4566. +Scans characters forward from POS in OBJECT till it finds
  4567. +a change in some text property, then returns the position of the change.
  4568. +The optional second argument OBJECT is the string or buffer to scan.
  4569. +Return nil if the property is constant all the way to the end of OBJECT.
  4570. +If the value is non-nil, it is a position greater than POS, never equal.
  4571. +
  4572. +If the optional third argument LIMIT is non-nil, don't search
  4573. +past position LIMIT; return LIMIT if nothing is found before LIMIT.
  4574. +
  4575. +(next-property-change POS &optional OBJECT LIMIT)Fnext-single-property-change
  4576. +Return the position of next property change for a specific property.
  4577. +Scans characters forward from POS till it finds
  4578. +a change in the PROP property, then returns the position of the change.
  4579. +The optional third argument OBJECT is the string or buffer to scan.
  4580. +The property values are compared with `eq'.
  4581. +Return nil if the property is constant all the way to the end of OBJECT.
  4582. +If the value is non-nil, it is a position greater than POS, never equal.
  4583. +
  4584. +If the optional fourth argument LIMIT is non-nil, don't search
  4585. +past position LIMIT; return LIMIT if nothing is found before LIMIT.
  4586. +
  4587. +(next-single-property-change POS PROP &optional OBJECT LIMIT)Fprevious-property-change
  4588. +Return the position of previous property change.
  4589. +Scans characters backwards from POS in OBJECT till it finds
  4590. +a change in some text property, then returns the position of the change.
  4591. +The optional second argument OBJECT is the string or buffer to scan.
  4592. +Return nil if the property is constant all the way to the start of OBJECT.
  4593. +If the value is non-nil, it is a position less than POS, never equal.
  4594. +
  4595. +If the optional third argument LIMIT is non-nil, don't search
  4596. +back past position LIMIT; return LIMIT if nothing is found until LIMIT.
  4597. +
  4598. +(previous-property-change POS &optional OBJECT LIMIT)Fprevious-single-property-change
  4599. +Return the position of previous property change for a specific property.
  4600. +Scans characters backward from POS till it finds
  4601. +a change in the PROP property, then returns the position of the change.
  4602. +The optional third argument OBJECT is the string or buffer to scan.
  4603. +The property values are compared with `eq'.
  4604. +Return nil if the property is constant all the way to the start of OBJECT.
  4605. +If the value is non-nil, it is a position less than POS, never equal.
  4606. +
  4607. +If the optional fourth argument LIMIT is non-nil, don't search
  4608. +back past position LIMIT; return LIMIT if nothing is found until LIMIT.
  4609. +
  4610. +(previous-single-property-change POS PROP &optional OBJECT LIMIT)Fadd-text-properties
  4611. +Add properties to the text from START to END.
  4612. +The third argument PROPS is a property list
  4613. +specifying the property values to add.
  4614. +The optional fourth argument, OBJECT,
  4615. +is the string or buffer containing the text.
  4616. +Return t if any property value actually changed, nil otherwise.
  4617. +
  4618. +(add-text-properties START END PROPERTIES &optional OBJECT)Fput-text-property
  4619. +Set one property of the text from START to END.
  4620. +The third and fourth arguments PROP and VALUE
  4621. +specify the property to add.
  4622. +The optional fifth argument, OBJECT,
  4623. +is the string or buffer containing the text.
  4624. +
  4625. +(put-text-property START END PROP VALUE &optional OBJECT)Fset-text-properties
  4626. +Completely replace properties of text from START to END.
  4627. +The third argument PROPS is the new property list.
  4628. +The optional fourth argument, OBJECT,
  4629. +is the string or buffer containing the text.
  4630. +
  4631. +(set-text-properties START END PROPS &optional OBJECT)Fremove-text-properties
  4632. +Remove some properties from text from START to END.
  4633. +The third argument PROPS is a property list
  4634. +whose property names specify the properties to remove.
  4635. +(The values stored in PROPS are ignored.)
  4636. +The optional fourth argument, OBJECT,
  4637. +is the string or buffer containing the text.
  4638. +Return t if any property was actually removed, nil otherwise.
  4639. +
  4640. +(remove-text-properties START END PROPS &optional OBJECT)Ftext-property-any
  4641. +Check text from START to END to see if PROP is ever `eq' to VALUE.
  4642. +If so, return the position of the first character whose PROP is `eq'
  4643. +to VALUE.  Otherwise return nil.
  4644. +The optional fifth argument, OBJECT, is the string or buffer
  4645. +containing the text.
  4646. +
  4647. +(text-property-any START END PROP VALUE &optional OBJECT)Ftext-property-not-all
  4648. +Check text from START to END to see if PROP is ever not `eq' to VALUE.
  4649. +If so, return the position of the first character whose PROP is not
  4650. +`eq' to VALUE.  Otherwise, return nil.
  4651. +The optional fifth argument, OBJECT, is the string or buffer
  4652. +containing the text.
  4653. +
  4654. +(text-property-not-all START END PROP VALUE &optional OBJECT)Ferase-text-properties
  4655. +Remove all properties from the text from START to END.
  4656. +The optional third argument, OBJECT,
  4657. +is the string or buffer containing the text.
  4658. +
  4659. +(erase-text-properties START END &optional OBJECT)Vinterval-balance-threshold
  4660. +Threshold for rebalancing interval trees, expressed as the
  4661. +percentage by which the left interval tree should not differ from the right.Vinhibit-point-motion-hooks
  4662. +If non-nil, don't call the text property values of
  4663. +`point-left' and `point-entered'.Fread-from-minibuffer
  4664. +Read a string from the minibuffer, prompting with string PROMPT.
  4665. +If optional second arg INITIAL-CONTENTS is non-nil, it is a string
  4666. +  to be inserted into the minibuffer before reading input.
  4667. +  If INITIAL-CONTENTS is (STRING . POSITION), the initial input
  4668. +  is STRING, but point is placed POSITION characters into the string.
  4669. +Third arg KEYMAP is a keymap to use whilst reading;
  4670. +  if omitted or nil, the default is `minibuffer-local-map'.
  4671. +If fourth arg READ is non-nil, then interpret the result as a lisp object
  4672. +  and return that object:
  4673. +  in other words, do `(car (read-from-string INPUT-STRING))'
  4674. +Fifth arg HIST, if non-nil, specifies a history list
  4675. +  and optionally the initial position in the list.
  4676. +  It can be a symbol, which is the history list variable to use,
  4677. +  or it can be a cons cell (HISTVAR . HISTPOS).
  4678. +  In that case, HISTVAR is the history list variable to use,
  4679. +  and HISTPOS is the initial position (the position in the list
  4680. +  which INITIAL-CONTENTS corresponds to).
  4681. +  Positions are counted starting from 1 at the beginning of the list.
  4682. +
  4683. +(read-from-minibuffer PROMPT &optional INITIAL-CONTENTS KEYMAP READ HIST)Fread-minibuffer
  4684. +Return a Lisp object read using the minibuffer.
  4685. +Prompt with PROMPT.  If non-nil, optional second arg INITIAL-CONTENTS
  4686. +is a string to insert in the minibuffer before reading.
  4687. +
  4688. +(read-minibuffer PROMPT &optional INITIAL-CONTENTS)Feval-minibuffer
  4689. +Return value of Lisp expression read using the minibuffer.
  4690. +Prompt with PROMPT.  If non-nil, optional second arg INITIAL-CONTENTS
  4691. +is a string to insert in the minibuffer before reading.
  4692. +
  4693. +(eval-minibuffer PROMPT &optional INITIAL-CONTENTS)Fread-string
  4694. +Read a string from the minibuffer, prompting with string PROMPT.
  4695. +If non-nil second arg INITIAL-INPUT is a string to insert before reading.
  4696. +
  4697. +(read-string PROMPT &optional INITIAL-INPUT)Fread-no-blanks-input
  4698. +Args PROMPT and INIT, strings.  Read a string from the terminal, not allowing blanks.
  4699. +Prompt with PROMPT, and provide INIT as an initial value of the input string.
  4700. +
  4701. +(read-no-blanks-input PROMPT &optional INIT)Fread-command
  4702. +One arg PROMPT, a string.  Read the name of a command and return as a symbol.
  4703. +Prompts with PROMPT.
  4704. +
  4705. +(read-command PROMPT)Fread-function
  4706. +One arg PROMPT, a string.  Read the name of a function and return as a symbol.
  4707. +Prompts with PROMPT.
  4708. +
  4709. +(read-function PROMPT)Fread-variable
  4710. +One arg PROMPT, a string.  Read the name of a user variable and return
  4711. +it as a symbol.  Prompts with PROMPT.
  4712. +A user variable is one whose documentation starts with a `*' character.
  4713. +
  4714. +(read-variable PROMPT)Fread-buffer
  4715. +One arg PROMPT, a string.  Read the name of a buffer and return as a string.
  4716. +Prompts with PROMPT.
  4717. +Optional second arg is value to return if user enters an empty line.
  4718. +If optional third arg REQUIRE-MATCH is non-nil, only existing buffer names are allowed.
  4719. +
  4720. +(read-buffer PROMPT &optional DEF REQUIRE-MATCH)Ftry-completion
  4721. +Return common substring of all completions of STRING in ALIST.
  4722. +Each car of each element of ALIST is tested to see if it begins with STRING.
  4723. +All that match are compared together; the longest initial sequence
  4724. +common to all matches is returned as a string.
  4725. +If there is no match at all, nil is returned.
  4726. +For an exact match, t is returned.
  4727. +
  4728. +ALIST can be an obarray instead of an alist.
  4729. +Then the print names of all symbols in the obarray are the possible matches.
  4730. +
  4731. +ALIST can also be a function to do the completion itself.
  4732. +It receives three arguments: the values STRING, PREDICATE and nil.
  4733. +Whatever it returns becomes the value of `try-completion'.
  4734. +
  4735. +If optional third argument PREDICATE is non-nil,
  4736. +it is used to test each possible match.
  4737. +The match is a candidate only if PREDICATE returns non-nil.
  4738. +The argument given to PREDICATE is the alist element or the symbol from the obarray.
  4739. +
  4740. +(try-completion STRING ALIST &optional PRED)Fall-completions
  4741. +Search for partial matches to STRING in ALIST.
  4742. +Each car of each element of ALIST is tested to see if it begins with STRING.
  4743. +The value is a list of all the strings from ALIST that match.
  4744. +ALIST can be an obarray instead of an alist.
  4745. +Then the print names of all symbols in the obarray are the possible matches.
  4746. +
  4747. +ALIST can also be a function to do the completion itself.
  4748. +It receives three arguments: the values STRING, PREDICATE and t.
  4749. +Whatever it returns becomes the value of `all-completion'.
  4750. +
  4751. +If optional third argument PREDICATE is non-nil,
  4752. +it is used to test each possible match.
  4753. +The match is a candidate only if PREDICATE returns non-nil.
  4754. +The argument given to PREDICATE is the alist element or the symbol from the obarray.
  4755. +
  4756. +(all-completions STRING ALIST &optional PRED)Fcompleting-read
  4757. +Read a string in the minibuffer, with completion.
  4758. +Args: PROMPT, TABLE, PREDICATE, REQUIRE-MATCH, INITIAL-INPUT, HIST.
  4759. +PROMPT is a string to prompt with; normally it ends in a colon and a space.
  4760. +TABLE is an alist whose elements' cars are strings, or an obarray.
  4761. +PREDICATE limits completion to a subset of TABLE.
  4762. +See `try-completion' for more details on completion, TABLE, and PREDICATE.
  4763. +If REQUIRE-MATCH is non-nil, the user is not allowed to exit unless
  4764. + the input is (or completes to) an element of TABLE or is null.
  4765. + If it is also not t, Return does not exit if it does non-null completion.
  4766. +If INITIAL-INPUT is non-nil, insert it in the minibuffer initially.
  4767. +  If it is (STRING . POSITION), the initial input
  4768. +  is STRING, but point is placed POSITION characters into the string.
  4769. +HIST, if non-nil, specifies a history list
  4770. +  and optionally the initial position in the list.
  4771. +  It can be a symbol, which is the history list variable to use,
  4772. +  or it can be a cons cell (HISTVAR . HISTPOS).
  4773. +  In that case, HISTVAR is the history list variable to use,
  4774. +  and HISTPOS is the initial position (the position in the list
  4775. +  which INITIAL-CONTENTS corresponds to).
  4776. +  Positions are counted starting from 1 at the beginning of the list.
  4777. +Completion ignores case if the ambient value of
  4778. +  `completion-ignore-case' is non-nil.
  4779. +
  4780. +(completing-read PROMPT TABLE &optional PRED REQUIRE-MATCH INIT HIST)Fminibuffer-complete
  4781. +Complete the minibuffer contents as far as possible.
  4782. +Return nil if there is no valid completion, else t.
  4783. +If no characters can be completed, display a list of possible completions.
  4784. +If you repeat this command after it displayed such a list,
  4785. +scroll the window of possible completions.
  4786. +
  4787. +(minibuffer-complete)Fminibuffer-complete-and-exit
  4788. +Complete the minibuffer contents, and maybe exit.
  4789. +Exit if the name is valid with no completion needed.
  4790. +If name was completed to a valid match,
  4791. +a repetition of this command will exit.
  4792. +
  4793. +(minibuffer-complete-and-exit)Fminibuffer-complete-word
  4794. +Complete the minibuffer contents at most a single word.
  4795. +After one word is completed as much as possible, a space or hyphen
  4796. +is added, provided that matches some possible completion.
  4797. +Return nil if there is no valid completion, else t.
  4798. +
  4799. +(minibuffer-complete-word)Fdisplay-completion-list
  4800. +Display the list of completions, COMPLETIONS, using `standard-output'.
  4801. +Each element may be just a symbol or string
  4802. +or may be a list of two strings to be printed as if concatenated.
  4803. +`standard-output' must be a buffer.
  4804. +At the end, run the normal hook `completion-setup-hook'.
  4805. +It can find the completion buffer in `standard-output'.
  4806. +
  4807. +(display-completion-list COMPLETIONS)Fminibuffer-completion-help
  4808. +Display a list of possible completions of the current minibuffer contents.
  4809. +
  4810. +(minibuffer-completion-help)Fself-insert-and-exit
  4811. +Terminate minibuffer input.
  4812. +
  4813. +(self-insert-and-exit)Fexit-minibuffer
  4814. +Terminate this minibuffer argument.
  4815. +
  4816. +(exit-minibuffer)Fminibuffer-depth
  4817. +Return current depth of activations of minibuffer, a nonnegative integer.
  4818. +
  4819. +(minibuffer-depth)Fminibuffer-prompt
  4820. +Return the prompt string of the currently-active minibuffer.
  4821. +If no minibuffer is active, return nil.
  4822. +
  4823. +(minibuffer-prompt)Fminibuffer-prompt-width
  4824. +Return the display width of the minibuffer prompt.
  4825. +
  4826. +(minibuffer-prompt-width)Vminibuffer-setup-hook
  4827. +Normal hook run just after entry to minibuffer.Vminibuffer-exit-hook
  4828. +Normal hook run just after exit from minibuffer.Vcompletion-auto-help
  4829. +*Non-nil means automatically provide help for invalid completion input.Vcompletion-ignore-case
  4830. +Non-nil means don't consider case significant in completion.Venable-recursive-minibuffers
  4831. +*Non-nil means to allow minibuffer commands while in the minibuffer.
  4832. +More precisely, this variable makes a difference when the minibuffer window
  4833. +is the selected window.  If you are in some other window, minibuffer commands
  4834. +are allowed even if a minibuffer is active.Vminibuffer-completion-table
  4835. +Alist or obarray used for completion in the minibuffer.
  4836. +This becomes the ALIST argument to `try-completion' and `all-completion'.
  4837. +
  4838. +The value may alternatively be a function, which is given three arguments:
  4839. +  STRING, the current buffer contents;
  4840. +  PREDICATE, the predicate for filtering possible matches;
  4841. +  CODE, which says what kind of things to do.
  4842. +CODE can be nil, t or `lambda'.
  4843. +nil means to return the best completion of STRING, or nil if there is none.
  4844. +t means to return a list of all possible completions of STRING.
  4845. +`lambda' means to return t if STRING is a valid completion as it stands.Vminibuffer-completion-predicate
  4846. +Within call to `completing-read', this holds the PREDICATE argument.Vminibuffer-completion-confirm
  4847. +Non-nil => demand confirmation of completion before exiting minibuffer.Vminibuffer-help-form
  4848. +Value that `help-form' takes on inside the minibuffer.Vminibuffer-history-variable
  4849. +History list symbol to add minibuffer values to.
  4850. +Each minibuffer output is added with
  4851. +  (set minibuffer-history-variable
  4852. +       (cons STRING (symbol-value minibuffer-history-variable)))Vminibuffer-history-position
  4853. +Current position of redoing in the history list.Vminibuffer-auto-raise
  4854. +*Non-nil means entering the minibuffer raises the minibuffer's frame.Vcompletion-regexp-list
  4855. +List of regexps that should restrict possible completions.Ffind-file-name-handler
  4856. +Return FILENAME's handler function for OPERATION, if it has one.
  4857. +Otherwise, return nil.
  4858. +A file name is handled if one of the regular expressions in
  4859. +`file-name-handler-alist' matches it.
  4860. +
  4861. +If OPERATION equals `inhibit-file-name-operation', then we ignore
  4862. +any handlers that are members of `inhibit-file-name-handlers',
  4863. +but we still do run any other handlers.  This lets handlers
  4864. +use the standard functions without calling themselves recursively.
  4865. +
  4866. +(find-file-name-handler FILENAME OPERATION)Ffile-name-directory
  4867. +Return the directory component in file name NAME.
  4868. +Return nil if NAME does not include a directory.
  4869. +Otherwise return a directory spec.
  4870. +Given a Unix syntax file name, returns a string ending in slash;
  4871. +on VMS, perhaps instead a string ending in `:', `]' or `>'.
  4872. +
  4873. +(file-name-directory FILE)Ffile-name-nondirectory
  4874. +Return file name NAME sans its directory.
  4875. +For example, in a Unix-syntax file name,
  4876. +this is everything after the last slash,
  4877. +or the entire name if it contains no slash.
  4878. +
  4879. +(file-name-nondirectory FILE)Funhandled-file-name-directory
  4880. +Return a directly usable directory name somehow associated with FILENAME.
  4881. +A `directly usable' directory name is one that may be used without the
  4882. +intervention of any file handler.
  4883. +If FILENAME is a directly usable file itself, return
  4884. +(file-name-directory FILENAME).
  4885. +The `call-process' and `start-process' functions use this function to
  4886. +get a current directory to run processes in.
  4887. +
  4888. +(unhandled-file-name-directory FILENAME)Ffile-name-as-directory
  4889. +Return a string representing file FILENAME interpreted as a directory.
  4890. +This operation exists because a directory is also a file, but its name as
  4891. +a directory is different from its name as a file.
  4892. +The result can be used as the value of `default-directory'
  4893. +or passed as second argument to `expand-file-name'.
  4894. +For a Unix-syntax file name, just appends a slash.
  4895. +On VMS, converts "[X]FOO.DIR" to "[X.FOO]", etc.
  4896. +
  4897. +(file-name-as-directory FILE)Fdirectory-file-name
  4898. +Returns the file name of the directory named DIR.
  4899. +This is the name of the file that holds the data for the directory DIR.
  4900. +This operation exists because a directory is also a file, but its name as
  4901. +a directory is different from its name as a file.
  4902. +In Unix-syntax, this function just removes the final slash.
  4903. +On VMS, given a VMS-syntax directory name such as "[X.Y]",
  4904. +it returns a file name such as "[X]Y.DIR.1".
  4905. +
  4906. +(directory-file-name DIRECTORY)Fmake-temp-name
  4907. +Generate temporary file name (string) starting with PREFIX (a string).
  4908. +The Emacs process number forms part of the result,
  4909. +so there is no danger of generating a name being used by another process.
  4910. +
  4911. +(make-temp-name PREFIX)Fexpand-file-name
  4912. +Convert FILENAME to absolute, and canonicalize it.
  4913. +Second arg DEFAULT is directory to start with if FILENAME is relative
  4914. + (does not start with slash); if DEFAULT is nil or missing,
  4915. +the current buffer's value of default-directory is used.
  4916. +Path components that are `.' are removed, and 
  4917. +path components followed by `..' are removed, along with the `..' itself;
  4918. +note that these simplifications are done without checking the resulting
  4919. +paths in the file system.
  4920. +An initial `~/' expands to your home directory.
  4921. +An initial `~USER/' expands to USER's home directory.
  4922. +See also the function `substitute-in-file-name'.
  4923. +
  4924. +(expand-file-name NAME &optional DEFAULT)Fsubstitute-in-file-name
  4925. +Substitute environment variables referred to in FILENAME.
  4926. +`$FOO' where FOO is an environment variable name means to substitute
  4927. +the value of that variable.  The variable name should be terminated
  4928. +with a character not a letter, digit or underscore; otherwise, enclose
  4929. +the entire variable name in braces.
  4930. +If `/~' appears, all of FILENAME through that `/' is discarded.
  4931. +
  4932. +On VMS, `$' substitution is not done; this function does little and only
  4933. +duplicates what `expand-file-name' does.
  4934. +
  4935. +(substitute-in-file-name STRING)Fcopy-file
  4936. +Copy FILE to NEWNAME.  Both args must be strings.
  4937. +Signals a `file-already-exists' error if file NEWNAME already exists,
  4938. +unless a third argument OK-IF-ALREADY-EXISTS is supplied and non-nil.
  4939. +A number as third arg means request confirmation if NEWNAME already exists.
  4940. +This is what happens in interactive use with M-x.
  4941. +Fourth arg KEEP-TIME non-nil means give the new file the same
  4942. +last-modified time as the old one.  (This works on only some systems.)
  4943. +A prefix arg makes KEEP-TIME non-nil.
  4944. +
  4945. +(copy-file FILENAME NEWNAME &optional OK-IF-ALREADY-EXISTS KEEP-DATE)Fmake-directory-internal
  4946. +Create a directory.  One argument, a file name string.
  4947. +
  4948. +(make-directory-internal DIRNAME)Fdelete-directory
  4949. +Delete a directory.  One argument, a file name or directory name string.
  4950. +
  4951. +(delete-directory DIRNAME)Fdelete-file
  4952. +Delete specified file.  One argument, a file name string.
  4953. +If file has multiple names, it continues to exist with the other names.
  4954. +
  4955. +(delete-file FILENAME)Frename-file
  4956. +Rename FILE as NEWNAME.  Both args strings.
  4957. +If file has names other than FILE, it continues to have those names.
  4958. +Signals a `file-already-exists' error if a file NEWNAME already exists
  4959. +unless optional third argument OK-IF-ALREADY-EXISTS is non-nil.
  4960. +A number as third arg means request confirmation if NEWNAME already exists.
  4961. +This is what happens in interactive use with M-x.
  4962. +
  4963. +(rename-file FILENAME NEWNAME &optional OK-IF-ALREADY-EXISTS)Fadd-name-to-file
  4964. +Give FILE additional name NEWNAME.  Both args strings.
  4965. +Signals a `file-already-exists' error if a file NEWNAME already exists
  4966. +unless optional third argument OK-IF-ALREADY-EXISTS is non-nil.
  4967. +A number as third arg means request confirmation if NEWNAME already exists.
  4968. +This is what happens in interactive use with M-x.
  4969. +
  4970. +(add-name-to-file FILENAME NEWNAME &optional OK-IF-ALREADY-EXISTS)Fmake-symbolic-link
  4971. +Make a symbolic link to FILENAME, named LINKNAME.  Both args strings.
  4972. +Signals a `file-already-exists' error if a file NEWNAME already exists
  4973. +unless optional third argument OK-IF-ALREADY-EXISTS is non-nil.
  4974. +A number as third arg means request confirmation if NEWNAME already exists.
  4975. +This happens for interactive use with M-x.
  4976. +
  4977. +(make-symbolic-link FILENAME LINKNAME &optional OK-IF-ALREADY-EXISTS)Fdefine-logical-name
  4978. +Define the job-wide logical name NAME to have the value STRING.
  4979. +If STRING is nil or a null string, the logical name NAME is deleted.
  4980. +
  4981. +(define-logical-name VARNAME STRING)Fsysnetunam
  4982. +Open a network connection to PATH using LOGIN as the login string.
  4983. +
  4984. +(sysnetunam PATH LOGIN)Ffile-name-absolute-p
  4985. +Return t if file FILENAME specifies an absolute path name.
  4986. +On Unix, this is a name starting with a `/' or a `~'.
  4987. +
  4988. +(file-name-absolute-p FILENAME)Ffile-exists-p
  4989. +Return t if file FILENAME exists.  (This does not mean you can read it.)
  4990. +See also `file-readable-p' and `file-attributes'.
  4991. +
  4992. +(file-exists-p FILENAME)Ffile-executable-p
  4993. +Return t if FILENAME can be executed by you.
  4994. +For a directory, this means you can access files in that directory.
  4995. +
  4996. +(file-executable-p FILENAME)Ffile-readable-p
  4997. +Return t if file FILENAME exists and you can read it.
  4998. +See also `file-exists-p' and `file-attributes'.
  4999. +
  5000. +(file-readable-p FILENAME)Ffile-symlink-p
  5001. +Return non-nil if file FILENAME is the name of a symbolic link.
  5002. +The value is the name of the file to which it is linked.
  5003. +Otherwise returns nil.
  5004. +
  5005. +(file-symlink-p FILENAME)Ffile-writable-p
  5006. +Return t if file FILENAME can be written or created by you.
  5007. +
  5008. +(file-writable-p FILENAME)Ffile-directory-p
  5009. +Return t if file FILENAME is the name of a directory as a file.
  5010. +A directory name spec may be given instead; then the value is t
  5011. +if the directory so specified exists and really is a directory.
  5012. +
  5013. +(file-directory-p FILENAME)Ffile-accessible-directory-p
  5014. +Return t if file FILENAME is the name of a directory as a file,
  5015. +and files in that directory can be opened by you.  In order to use a
  5016. +directory as a buffer's current directory, this predicate must return true.
  5017. +A directory name spec may be given instead; then the value is t
  5018. +if the directory so specified exists and really is a readable and
  5019. +searchable directory.
  5020. +
  5021. +(file-accessible-directory-p FILENAME)Ffile-modes
  5022. +Return mode bits of FILE, as an integer.
  5023. +
  5024. +(file-modes FILENAME)Fset-file-modes
  5025. +Set mode bits of FILE to MODE (an integer).
  5026. +Only the 12 low bits of MODE are used.
  5027. +
  5028. +(set-file-modes FILENAME MODE)Fset-default-file-modes
  5029. +Set the file permission bits for newly created files.
  5030. +The argument MODE should be an integer; only the low 9 bits are used.
  5031. +This setting is inherited by subprocesses.
  5032. +
  5033. +(set-default-file-modes MODE)Fdefault-file-modes
  5034. +Return the default file protection for created files.
  5035. +The value is an integer.
  5036. +
  5037. +(default-file-modes)Funix-sync
  5038. +Tell Unix to finish all pending disk updates.
  5039. +
  5040. +(unix-sync)Ffile-newer-than-file-p
  5041. +Return t if file FILE1 is newer than file FILE2.
  5042. +If FILE1 does not exist, the answer is nil;
  5043. +otherwise, if FILE2 does not exist, the answer is t.
  5044. +
  5045. +(file-newer-than-file-p FILE1 FILE2)Finsert-file-contents
  5046. +Insert contents of file FILENAME after point.
  5047. +Returns list of absolute file name and length of data inserted.
  5048. +If second argument VISIT is non-nil, the buffer's visited filename
  5049. +and last save file modtime are set, and it is marked unmodified.
  5050. +If visiting and the file does not exist, visiting is completed
  5051. +before the error is signaled.
  5052. +
  5053. +The optional third and fourth arguments BEG and END
  5054. +specify what portion of the file to insert.
  5055. +If VISIT is non-nil, BEG and END must be nil.
  5056. +If optional fifth argument REPLACE is non-nil,
  5057. +it means replace the current buffer contents (in the accessible portion)
  5058. +with the file contents.  This is better than simply deleting and inserting
  5059. +the whole thing because (1) it preserves some marker positions
  5060. +and (2) it puts less data in the undo list.
  5061. +
  5062. +(insert-file-contents FILENAME &optional VISIT BEG END REPLACE)Fwrite-region
  5063. +Write current region into specified file.
  5064. +When called from a program, takes three arguments:
  5065. +START, END and FILENAME.  START and END are buffer positions.
  5066. +Optional fourth argument APPEND if non-nil means
  5067. +  append to existing file contents (if any).
  5068. +Optional fifth argument VISIT if t means
  5069. +  set the last-save-file-modtime of buffer to this file's modtime
  5070. +  and mark buffer not modified.
  5071. +If VISIT is a string, it is a second file name;
  5072. +  the output goes to FILENAME, but the buffer is marked as visiting VISIT.
  5073. +  VISIT is also the file name to lock and unlock for clash detection.
  5074. +If VISIT is neither t nor nil nor a string,
  5075. +  that means do not print the "Wrote file" message.
  5076. +Kludgy feature: if START is a string, then that string is written
  5077. +to the file, instead of any buffer contents, and END is ignored.
  5078. +
  5079. +(write-region START END FILENAME &optional APPEND VISIT)Fcar-less-than-car
  5080. +Return t if (car A) is numerically less than (car B).
  5081. +
  5082. +(car-less-than-car A B)Fverify-visited-file-modtime
  5083. +Return t if last mod time of BUF's visited file matches what BUF records.
  5084. +This means that the file has not been changed since it was visited or saved.
  5085. +
  5086. +(verify-visited-file-modtime BUF)Fclear-visited-file-modtime
  5087. +Clear out records of last mod time of visited file.
  5088. +Next attempt to save will certainly not complain of a discrepancy.
  5089. +
  5090. +(clear-visited-file-modtime)Fvisited-file-modtime
  5091. +Return the current buffer's recorded visited file modification time.
  5092. +The value is a list of the form (HIGH . LOW), like the time values
  5093. +that `file-attributes' returns.
  5094. +
  5095. +(visited-file-modtime)Fset-visited-file-modtime
  5096. +Update buffer's recorded modification time from the visited file's time.
  5097. +Useful if the buffer was not read from the file normally
  5098. +or if the file itself has been changed for some known benign reason.
  5099. +An argument specifies the modification time value to use
  5100. +(instead of that of the visited file), in the form of a list
  5101. +(HIGH . LOW) or (HIGH LOW).
  5102. +
  5103. +(set-visited-file-modtime &optional TIME-LIST)Fdo-auto-save
  5104. +Auto-save all buffers that need it.
  5105. +This is all buffers that have auto-saving enabled
  5106. +and are changed since last auto-saved.
  5107. +Auto-saving writes the buffer into a file
  5108. +so that your editing is not lost if the system crashes.
  5109. +This file is not the file you visited; that changes only when you save.
  5110. +Normally we run the normal hook `auto-save-hook' before saving.
  5111. +
  5112. +Non-nil first argument means do not print any message if successful.
  5113. +Non-nil second argument means save only current buffer.
  5114. +
  5115. +(do-auto-save &optional NO-MESSAGE CURRENT-ONLY)Fset-buffer-auto-saved
  5116. +Mark current buffer as auto-saved with its current text.
  5117. +No auto-save file will be written until the buffer changes again.
  5118. +
  5119. +(set-buffer-auto-saved)Fclear-buffer-auto-save-failure
  5120. +Clear any record of a recent auto-save failure in the current buffer.
  5121. +
  5122. +(clear-buffer-auto-save-failure)Frecent-auto-save-p
  5123. +Return t if buffer has been auto-saved since last read in or saved.
  5124. +
  5125. +(recent-auto-save-p)Fread-file-name-internal
  5126. +Internal subroutine for read-file-name.  Do not call this.
  5127. +
  5128. +(read-file-name-internal STRING DIR ACTION)Fread-file-name
  5129. +Read file name, prompting with PROMPT and completing in directory DIR.
  5130. +Value is not expanded---you must call `expand-file-name' yourself.
  5131. +Default name to DEFAULT if user enters a null string.
  5132. + (If DEFAULT is omitted, the visited file name is used.)
  5133. +Fourth arg MUSTMATCH non-nil means require existing file's name.
  5134. + Non-nil and non-t means also require confirmation after completion.
  5135. +Fifth arg INITIAL specifies text to start with.
  5136. +DIR defaults to current buffer's directory default.
  5137. +
  5138. +(read-file-name PROMPT &optional DIR DEFAULT MUSTMATCH INITIAL)Vinsert-default-directory
  5139. +*Non-nil means when reading a filename start with default dir in minibuffer.Vvms-stmlf-recfm
  5140. +*Non-nil means write new files with record format `stmlf'.
  5141. +nil means use format `var'.  This variable is meaningful only on VMS.Vfile-name-handler-alist
  5142. +*Alist of elements (REGEXP . HANDLER) for file names handled specially.
  5143. +If a file name matches REGEXP, then all I/O on that file is done by calling
  5144. +HANDLER.
  5145. +
  5146. +The first argument given to HANDLER is the name of the I/O primitive
  5147. +to be handled; the remaining arguments are the arguments that were
  5148. +passed to that primitive.  For example, if you do
  5149. +    (file-exists-p FILENAME)
  5150. +and FILENAME is handled by HANDLER, then HANDLER is called like this:
  5151. +    (funcall HANDLER 'file-exists-p FILENAME)
  5152. +The function `find-file-name-handler' checks this list for a handler
  5153. +for its argument.Vafter-insert-file-functions
  5154. +A list of functions to be called at the end of `insert-file-contents'.
  5155. +Each is passed one argument, the number of bytes inserted.  It should return
  5156. +the new byte count, and leave point the same.  If `insert-file-contents' is
  5157. +intercepted by a handler from `file-name-handler-alist', that handler is
  5158. +responsible for calling the after-insert-file-functions if appropriate.Vwrite-region-annotate-functions
  5159. +A list of functions to be called at the start of `write-region'.
  5160. +Each is passed two arguments, START and END as for `write-region'.  It should
  5161. +return a list of pairs (POSITION . STRING) of strings to be effectively
  5162. +inserted at the specified positions of the file being written (1 means to
  5163. +insert before the first byte written).  The POSITIONs must be sorted into
  5164. +increasing order.  If there are several functions in the list, the several
  5165. +lists are merged destructively.Vwrite-region-annotations-so-far
  5166. +When an annotation function is called, this holds the previous annotations.
  5167. +These are the annotations made by other annotation functions
  5168. +that were already called.  See also `write-region-annotate-functions'.Vinhibit-file-name-handlers
  5169. +A list of file name handlers that temporarily should not be used.
  5170. +This applies only to the operation `inhibit-file-name-operation'.Vinhibit-file-name-operation
  5171. +The operation for which `inhibit-file-name-handlers' is applicable.Vauto-save-list-file-name
  5172. +File name in which we write a list of all auto save file names.Fdirectory-files
  5173. +Return a list of names of files in DIRECTORY.
  5174. +There are three optional arguments:
  5175. +If FULL is non-nil, absolute pathnames of the files are returned.
  5176. +If MATCH is non-nil, only pathnames containing that regexp are returned.
  5177. +If NOSORT is non-nil, the list is not sorted--its order is unpredictable.
  5178. + NOSORT is useful if you plan to sort the result yourself.
  5179. +
  5180. +(directory-files DIRNAME &optional FULL MATCH NOSORT)Ffile-name-completion
  5181. +Complete file name FILE in directory DIR.
  5182. +Returns the longest string
  5183. +common to all filenames in DIR that start with FILE.
  5184. +If there is only one and FILE matches it exactly, returns t.
  5185. +Returns nil if DIR contains no name starting with FILE.
  5186. +
  5187. +(file-name-completion FILE DIRNAME)Ffile-name-all-completions
  5188. +Return a list of all completions of file name FILE in directory DIR.
  5189. +These are all file names in directory DIR which begin with FILE.
  5190. +
  5191. +(file-name-all-completions FILE DIRNAME)Ffile-name-all-versions
  5192. +Return a list of all versions of file name FILE in directory DIR.
  5193. +
  5194. +(file-name-all-versions FILE DIRNAME)Ffile-version-limit
  5195. +Return the maximum number of versions allowed for FILE.
  5196. +Returns nil if the file cannot be opened or if there is no version limit.
  5197. +
  5198. +(file-version-limit FILENAME)Ffile-attributes
  5199. +Return a list of attributes of file FILENAME.
  5200. +Value is nil if specified file cannot be opened.
  5201. +Otherwise, list elements are:
  5202. + 0. t for directory, string (name linked to) for symbolic link, or nil.
  5203. + 1. Number of links to file.
  5204. + 2. File uid.
  5205. + 3. File gid.
  5206. + 4. Last access time, as a list of two integers.
  5207. +  First integer has high-order 16 bits of time, second has low 16 bits.
  5208. + 5. Last modification time, likewise.
  5209. + 6. Last status change time, likewise.
  5210. + 7. Size in bytes (-1, if number is out of range).
  5211. + 8. File modes, as a string of ten letters or dashes as in ls -l.
  5212. + 9. t iff file's gid would change if file were deleted and recreated.
  5213. +10. inode number.
  5214. +11. Device number.
  5215. +
  5216. +If file does not exist, returns nil.
  5217. +
  5218. +(file-attributes FILENAME)Vcompletion-ignored-extensions
  5219. +*Completion ignores filenames ending in any string in this list.
  5220. +This variable does not affect lists of possible completions,
  5221. +but does affect the commands that actually do completions.Fforward-char
  5222. +Move point right ARG characters (left if ARG negative).
  5223. +On reaching end of buffer, stop and signal error.
  5224. +
  5225. +(forward-char &optional N)Fbackward-char
  5226. +Move point left ARG characters (right if ARG negative).
  5227. +On attempt to pass beginning or end of buffer, stop and signal error.
  5228. +
  5229. +(backward-char &optional N)Fforward-line
  5230. +Move ARG lines forward (backward if ARG is negative).
  5231. +Precisely, if point is on line I, move to the start of line I + ARG.
  5232. +If there isn't room, go as far as possible (no error).
  5233. +Returns the count of lines left to move.  If moving forward,
  5234. +that is ARG - number of lines moved; if backward, ARG + number moved.
  5235. +With positive ARG, a non-empty line at the end counts as one line
  5236. +  successfully moved (for the return value).
  5237. +
  5238. +(forward-line &optional N)Fbeginning-of-line
  5239. +Move point to beginning of current line.
  5240. +With argument ARG not nil or 1, move forward ARG - 1 lines first.
  5241. +If scan reaches end of buffer, stop there without error.
  5242. +
  5243. +(beginning-of-line &optional N)Fend-of-line
  5244. +Move point to end of current line.
  5245. +With argument ARG not nil or 1, move forward ARG - 1 lines first.
  5246. +If scan reaches end of buffer, stop there without error.
  5247. +
  5248. +(end-of-line &optional N)Fdelete-char
  5249. +Delete the following ARG characters (previous, with negative arg).
  5250. +Optional second arg KILLFLAG non-nil means kill instead (save in kill ring).
  5251. +Interactively, ARG is the prefix arg, and KILLFLAG is set if
  5252. +ARG was explicitly specified.
  5253. +
  5254. +(delete-char N &optional KILLFLAG)Fdelete-backward-char
  5255. +Delete the previous ARG characters (following, with negative ARG).
  5256. +Optional second arg KILLFLAG non-nil means kill instead (save in kill ring).
  5257. +Interactively, ARG is the prefix arg, and KILLFLAG is set if
  5258. +ARG was explicitly specified.
  5259. +
  5260. +(delete-backward-char N &optional KILLFLAG)Fself-insert-command
  5261. +Insert the character you type.
  5262. +Whichever character you type to run this command is inserted.
  5263. +
  5264. +(self-insert-command ARG)Fnewline
  5265. +Insert a newline.  With arg, insert that many newlines.
  5266. +In Auto Fill mode, if no numeric arg, break the preceding line if it's long.
  5267. +
  5268. +(newline &optional ARG1)Vblink-paren-function
  5269. +Function called, if non-nil, whenever a close parenthesis is inserted.
  5270. +More precisely, a char with closeparen syntax is self-inserted.Fcase-table-p
  5271. +Return t iff ARG is a case table.
  5272. +See `set-case-table' for more information on these data structures.
  5273. +
  5274. +(case-table-p TABLE)Fcurrent-case-table
  5275. +Return the case table of the current buffer.
  5276. +
  5277. +(current-case-table)Fstandard-case-table
  5278. +Return the standard case table.
  5279. +This is the one used for new buffers.
  5280. +
  5281. +(standard-case-table)Fset-case-table
  5282. +Select a new case table for the current buffer.
  5283. +A case table is a list (DOWNCASE UPCASE CANONICALIZE EQUIVALENCES)
  5284. + where each element is either nil or a string of length 256.
  5285. +DOWNCASE maps each character to its lower-case equivalent.
  5286. +UPCASE maps each character to its upper-case equivalent;
  5287. + if lower and upper case characters are in 1-1 correspondence,
  5288. + you may use nil and the upcase table will be deduced from DOWNCASE.
  5289. +CANONICALIZE maps each character to a canonical equivalent;
  5290. + any two characters that are related by case-conversion have the same
  5291. + canonical equivalent character; it may be nil, in which case it is
  5292. + deduced from DOWNCASE and UPCASE.
  5293. +EQUIVALENCES is a map that cyclicly permutes each equivalence class
  5294. + (of characters with the same canonical equivalent); it may be nil,
  5295. + in which case it is deduced from CANONICALIZE.
  5296. +
  5297. +(set-case-table TABLE)Fset-standard-case-table
  5298. +Select a new standard case table for new buffers.
  5299. +See `set-case-table' for more info on case tables.
  5300. +
  5301. +(set-standard-case-table TABLE)Vascii-downcase-table
  5302. +String mapping ASCII characters to lowercase equivalents.Vascii-upcase-table
  5303. +String mapping ASCII characters to uppercase equivalents.Fupcase
  5304. +Convert argument to upper case and return that.
  5305. +The argument may be a character or string.  The result has the same type.
  5306. +The argument object is not altered.  See also `capitalize'.
  5307. +
  5308. +(upcase OBJ)Fdowncase
  5309. +Convert argument to lower case and return that.
  5310. +The argument may be a character or string.  The result has the same type.
  5311. +The argument object is not altered.
  5312. +
  5313. +(downcase OBJ)Fcapitalize
  5314. +Convert argument to capitalized form and return that.
  5315. +This means that each word's first character is upper case
  5316. +and the rest is lower case.
  5317. +The argument may be a character or string.  The result has the same type.
  5318. +The argument object is not altered.
  5319. +
  5320. +(capitalize OBJ)Fupcase-region
  5321. +Convert the region to upper case.  In programs, wants two arguments.
  5322. +These arguments specify the starting and ending character numbers of
  5323. +the region to operate on.  When used as a command, the text between
  5324. +point and the mark is operated on.
  5325. +See also `capitalize-region'.
  5326. +
  5327. +(upcase-region B E)Fdowncase-region
  5328. +Convert the region to lower case.  In programs, wants two arguments.
  5329. +These arguments specify the starting and ending character numbers of
  5330. +the region to operate on.  When used as a command, the text between
  5331. +point and the mark is operated on.
  5332. +
  5333. +(downcase-region B E)Fcapitalize-region
  5334. +Convert the region to capitalized form.
  5335. +Capitalized form means each word's first character is upper case
  5336. +and the rest of it is lower case.
  5337. +In programs, give two arguments, the starting and ending
  5338. +character positions to operate on.
  5339. +
  5340. +(capitalize-region B E)Fupcase-word
  5341. +Convert following word (or ARG words) to upper case, moving over.
  5342. +With negative argument, convert previous words but do not move.
  5343. +See also `capitalize-word'.
  5344. +
  5345. +(upcase-word ARG)Fdowncase-word
  5346. +Convert following word (or ARG words) to lower case, moving over.
  5347. +With negative argument, convert previous words but do not move.
  5348. +
  5349. +(downcase-word ARG)Fcapitalize-word
  5350. +Capitalize the following word (or ARG words), moving over.
  5351. +This gives the word(s) a first character in upper case
  5352. +and the rest lower case.
  5353. +With negative argument, capitalize previous words but do not move.
  5354. +
  5355. +(capitalize-word ARG)Fcurrent-column
  5356. +Return the horizontal position of point.  Beginning of line is column 0.
  5357. +This is calculated by adding together the widths of all the displayed
  5358. +representations of the character between the start of the previous line
  5359. +and point.  (eg control characters will have a width of 2 or 4, tabs
  5360. +will have a variable width)
  5361. +Ignores finite width of frame, which means that this function may return
  5362. +values greater than (frame-width).
  5363. +Whether the line is visible (if `selective-display' is t) has no effect;
  5364. +however, ^M is treated as end of line when `selective-display' is t.
  5365. +
  5366. +(current-column)Findent-to
  5367. +Indent from point with tabs and spaces until COLUMN is reached.
  5368. +Optional second argument MIN says always do at least MIN spaces
  5369. +even if that goes past COLUMN; by default, MIN is zero.
  5370. +
  5371. +(indent-to COL &optional MINIMUM)Fcurrent-indentation
  5372. +Return the indentation of the current line.
  5373. +This is the horizontal position of the character
  5374. +following any initial whitespace.
  5375. +
  5376. +(current-indentation)Fmove-to-column
  5377. +Move point to column COLUMN in the current line.
  5378. +The column of a character is calculated by adding together the widths
  5379. +as displayed of the previous characters in the line.
  5380. +This function ignores line-continuation;
  5381. +there is no upper limit on the column number a character can have
  5382. +and horizontal scrolling has no effect.
  5383. +
  5384. +If specified column is within a character, point goes after that character.
  5385. +If it's past end of line, point goes to end of line.
  5386. +
  5387. +A non-nil second (optional) argument FORCE means, if the line
  5388. +is too short to reach column COLUMN then add spaces/tabs to get there,
  5389. +and if COLUMN is in the middle of a tab character, change it to spaces.
  5390. +
  5391. +(move-to-column COLUMN &optional FORCE)Fcompute-motion
  5392. +Scan through the current buffer, calculating screen position.
  5393. +Scan the current buffer forward from offset FROM,
  5394. +assuming it is at position FROMPOS--a cons of the form (HPOS . VPOS)--
  5395. +to position TO or position TOPOS--another cons of the form (HPOS . VPOS)--
  5396. +and return the ending buffer position and screen location.
  5397. +
  5398. +There are three additional arguments:
  5399. +
  5400. +WIDTH is the number of columns available to display text;
  5401. +this affects handling of continuation lines.
  5402. +This is usually the value returned by `window-width', less one (to allow
  5403. +for the continuation glyph).
  5404. +
  5405. +OFFSETS is either nil or a cons cell (HSCROLL . TAB-OFFSET).
  5406. +HSCROLL is the number of columns not being displayed at the left
  5407. +margin; this is usually taken from a window's hscroll member.
  5408. +TAB-OFFSET is the number of columns of the first tab that aren't
  5409. +being displayed, perhaps because the line was continued within it.
  5410. +If OFFSETS is nil, HSCROLL and TAB-OFFSET are assumed to be zero.
  5411. +
  5412. +WINDOW is the window to operate on.  Currently this is used only to
  5413. +find the display table.  It does not matter what buffer WINDOW displays;
  5414. +`compute-motion' always operates on the current buffer.
  5415. +
  5416. +The value is a list of five elements:
  5417. +  (POS HPOS VPOS PREVHPOS CONTIN)
  5418. +POS is the buffer position where the scan stopped.
  5419. +VPOS is the vertical position where the scan stopped.
  5420. +HPOS is the horizontal position where the scan stopped.
  5421. +
  5422. +PREVHPOS is the horizontal position one character back from POS.
  5423. +CONTIN is t if a line was continued after (or within) the previous character.
  5424. +
  5425. +For example, to find the buffer position of column COL of line LINE
  5426. +of a certain window, pass the window's starting location as FROM
  5427. +and the window's upper-left coordinates as FROMPOS.
  5428. +Pass the buffer's (point-max) as TO, to limit the scan to the end of the
  5429. +visible section of the buffer, and pass LINE and COL as TOPOS.
  5430. +
  5431. +(compute-motion FROM FROMPOS TO TOPOS WIDTH OFFSETS WINDOW)Fvertical-motion
  5432. +Move to start of screen line LINES lines down.
  5433. +If LINES is negative, this is moving up.
  5434. +
  5435. +The optional second argument WINDOW specifies the window to use for
  5436. +parameters such as width, horizontal scrolling, and so on.
  5437. +the default is the selected window.
  5438. +It does not matter what buffer is displayed in WINDOW.
  5439. +`vertical-motion' always uses the current buffer.
  5440. +
  5441. +Sets point to position found; this may be start of line
  5442. +or just the start of a continuation line.
  5443. +Returns number of lines moved; may be closer to zero than LINES
  5444. +if beginning or end of buffer was reached.
  5445. +
  5446. +(vertical-motion LINES &optional WINDOW)Vindent-tabs-mode
  5447. +*Indentation can insert tabs if this is non-nil.
  5448. +Setting this variable automatically makes it local to the current buffer.Flooking-at
  5449. +Return t if text after point matches regular expression PAT.
  5450. +This function modifies the match data that `match-beginning',
  5451. +`match-end' and `match-data' access; save and restore the match
  5452. +data if you want to preserve them.
  5453. +
  5454. +(looking-at STRING)Fstring-match
  5455. +Return index of start of first match for REGEXP in STRING, or nil.
  5456. +If third arg START is non-nil, start search at that index in STRING.
  5457. +For index of first char beyond the match, do (match-end 0).
  5458. +`match-end' and `match-beginning' also give indices of substrings
  5459. +matched by parenthesis constructs in the pattern.
  5460. +
  5461. +(string-match REGEXP STRING &optional START)Fskip-chars-forward
  5462. +Move point forward, stopping before a char not in STRING, or at pos LIM.
  5463. +STRING is like the inside of a `[...]' in a regular expression
  5464. +except that `]' is never special and `\' quotes `^', `-' or `\'.
  5465. +Thus, with arg "a-zA-Z", this skips letters stopping before first nonletter.
  5466. +With arg "^a-zA-Z", skips nonletters stopping before first letter.
  5467. +Returns the distance traveled, either zero or positive.
  5468. +
  5469. +(skip-chars-forward STRING &optional LIM)Fskip-chars-backward
  5470. +Move point backward, stopping after a char not in STRING, or at pos LIM.
  5471. +See `skip-chars-forward' for details.
  5472. +Returns the distance traveled, either zero or negative.
  5473. +
  5474. +(skip-chars-backward STRING &optional LIM)Fskip-syntax-forward
  5475. +Move point forward across chars in specified syntax classes.
  5476. +SYNTAX is a string of syntax code characters.
  5477. +Stop before a char whose syntax is not in SYNTAX, or at position LIM.
  5478. +If SYNTAX starts with ^, skip characters whose syntax is NOT in SYNTAX.
  5479. +This function returns the distance traveled, either zero or positive.
  5480. +
  5481. +(skip-syntax-forward SYNTAX &optional LIM)Fskip-syntax-backward
  5482. +Move point backward across chars in specified syntax classes.
  5483. +SYNTAX is a string of syntax code characters.
  5484. +Stop on reaching a char whose syntax is not in SYNTAX, or at position LIM.
  5485. +If SYNTAX starts with ^, skip characters whose syntax is NOT in SYNTAX.
  5486. +This function returns the distance traveled, either zero or negative.
  5487. +
  5488. +(skip-syntax-backward SYNTAX &optional LIM)Fsearch-backward
  5489. +Search backward from point for STRING.
  5490. +Set point to the beginning of the occurrence found, and return point.
  5491. +An optional second argument bounds the search; it is a buffer position.
  5492. +The match found must not extend before that position.
  5493. +Optional third argument, if t, means if fail just return nil (no error).
  5494. + If not nil and not t, position at limit of search and return nil.
  5495. +Optional fourth argument is repeat count--search for successive occurrences.
  5496. +See also the functions `match-beginning', `match-end' and `replace-match'.
  5497. +
  5498. +(search-backward STRING &optional BOUND NOERROR COUNT)Fsearch-forward
  5499. +Search forward from point for STRING.
  5500. +Set point to the end of the occurrence found, and return point.
  5501. +An optional second argument bounds the search; it is a buffer position.
  5502. +The match found must not extend after that position.  nil is equivalent
  5503. +  to (point-max).
  5504. +Optional third argument, if t, means if fail just return nil (no error).
  5505. +  If not nil and not t, move to limit of search and return nil.
  5506. +Optional fourth argument is repeat count--search for successive occurrences.
  5507. +See also the functions `match-beginning', `match-end' and `replace-match'.
  5508. +
  5509. +(search-forward STRING &optional BOUND NOERROR COUNT)Fword-search-backward
  5510. +Search backward from point for STRING, ignoring differences in punctuation.
  5511. +Set point to the beginning of the occurrence found, and return point.
  5512. +An optional second argument bounds the search; it is a buffer position.
  5513. +The match found must not extend before that position.
  5514. +Optional third argument, if t, means if fail just return nil (no error).
  5515. +  If not nil and not t, move to limit of search and return nil.
  5516. +Optional fourth argument is repeat count--search for successive occurrences.
  5517. +
  5518. +(word-search-backward STRING &optional BOUND NOERROR COUNT)Fword-search-forward
  5519. +Search forward from point for STRING, ignoring differences in punctuation.
  5520. +Set point to the end of the occurrence found, and return point.
  5521. +An optional second argument bounds the search; it is a buffer position.
  5522. +The match found must not extend after that position.
  5523. +Optional third argument, if t, means if fail just return nil (no error).
  5524. +  If not nil and not t, move to limit of search and return nil.
  5525. +Optional fourth argument is repeat count--search for successive occurrences.
  5526. +
  5527. +(word-search-forward STRING &optional BOUND NOERROR COUNT)Fre-search-backward
  5528. +Search backward from point for match for regular expression REGEXP.
  5529. +Set point to the beginning of the match, and return point.
  5530. +The match found is the one starting last in the buffer
  5531. +and yet ending before the origin of the search.
  5532. +An optional second argument bounds the search; it is a buffer position.
  5533. +The match found must start at or after that position.
  5534. +Optional third argument, if t, means if fail just return nil (no error).
  5535. +  If not nil and not t, move to limit of search and return nil.
  5536. +Optional fourth argument is repeat count--search for successive occurrences.
  5537. +See also the functions `match-beginning', `match-end' and `replace-match'.
  5538. +
  5539. +(re-search-backward REGEXP &optional BOUND NOERROR COUNT)Fre-search-forward
  5540. +Search forward from point for regular expression REGEXP.
  5541. +Set point to the end of the occurrence found, and return point.
  5542. +An optional second argument bounds the search; it is a buffer position.
  5543. +The match found must not extend after that position.
  5544. +Optional third argument, if t, means if fail just return nil (no error).
  5545. +  If not nil and not t, move to limit of search and return nil.
  5546. +Optional fourth argument is repeat count--search for successive occurrences.
  5547. +See also the functions `match-beginning', `match-end' and `replace-match'.
  5548. +
  5549. +(re-search-forward REGEXP &optional BOUND NOERROR COUNT)Freplace-match
  5550. +Replace text matched by last search with NEWTEXT.
  5551. +If second arg FIXEDCASE is non-nil, do not alter case of replacement text.
  5552. +Otherwise maybe capitalize the whole text, or maybe just word initials,
  5553. +based on the replaced text.
  5554. +If the replaced text has only capital letters
  5555. +and has at least one multiletter word, convert NEWTEXT to all caps.
  5556. +If the replaced text has at least one word starting with a capital letter,
  5557. +then capitalize each word in NEWTEXT.
  5558. +
  5559. +If third arg LITERAL is non-nil, insert NEWTEXT literally.
  5560. +Otherwise treat `\' as special:
  5561. +  `\&' in NEWTEXT means substitute original matched text.
  5562. +  `\N' means substitute what matched the Nth `\(...\)'.
  5563. +       If Nth parens didn't match, substitute nothing.
  5564. +  `\\' means insert one `\'.
  5565. +FIXEDCASE and LITERAL are optional arguments.
  5566. +Leaves point at end of replacement text.
  5567. +
  5568. +(replace-match NEWTEXT &optional FIXEDCASE LITERAL)Fmatch-beginning
  5569. +Return position of start of text matched by last search.
  5570. +NUM specifies which parenthesized expression in the last regexp.
  5571. + Value is nil if NUMth pair didn't match, or there were less than NUM pairs.
  5572. +Zero means the entire text matched by the whole regexp or whole string.
  5573. +
  5574. +(match-beginning NUM)Fmatch-end
  5575. +Return position of end of text matched by last search.
  5576. +ARG, a number, specifies which parenthesized expression in the last regexp.
  5577. + Value is nil if ARGth pair didn't match, or there were less than ARG pairs.
  5578. +Zero means the entire text matched by the whole regexp or whole string.
  5579. +
  5580. +(match-end NUM)Fmatch-data
  5581. +Return a list containing all info on what the last search matched.
  5582. +Element 2N is `(match-beginning N)'; element 2N + 1 is `(match-end N)'.
  5583. +All the elements are markers or nil (nil if the Nth pair didn't match)
  5584. +if the last match was on a buffer; integers or nil if a string was matched.
  5585. +Use `store-match-data' to reinstate the data in this list.
  5586. +
  5587. +(match-data)Fstore-match-data
  5588. +Set internal data on last search match from elements of LIST.
  5589. +LIST should have been created by calling `match-data' previously.
  5590. +
  5591. +(store-match-data LIST)Fregexp-quote
  5592. +Return a regexp string which matches exactly STRING and nothing else.
  5593. +
  5594. +(regexp-quote STR)Fundo-boundary
  5595. +Mark a boundary between units of undo.
  5596. +An undo command will stop at this point,
  5597. +but another undo command will undo to the previous boundary.
  5598. +
  5599. +(undo-boundary)Fprimitive-undo
  5600. +Undo N records from the front of the list LIST.
  5601. +Return what remains of the list.
  5602. +
  5603. +(primitive-undo N LIST)Fcons
  5604. +Create a new cons, give it CAR and CDR as components, and return it.
  5605. +
  5606. +(cons CAR CDR)Flist
  5607. +Return a newly created list with specified arguments as elements.
  5608. +Any number of arguments, even zero arguments, are allowed.Fmake-list
  5609. +Return a newly created list of length LENGTH, with each element being INIT.
  5610. +
  5611. +(make-list LENGTH INIT)Fmake-vector
  5612. +Return a newly created vector of length LENGTH, with each element being INIT.
  5613. +See also the function `vector'.
  5614. +
  5615. +(make-vector LENGTH INIT)Fvector
  5616. +Return a newly created vector with specified arguments as elements.
  5617. +Any number of arguments, even zero arguments, are allowed.Fmake-byte-code
  5618. +Create a byte-code object with specified arguments as elements.
  5619. +The arguments should be the arglist, bytecode-string, constant vector,
  5620. +stack size, (optional) doc string, and (optional) interactive spec.
  5621. +The first four arguments are required; at most six have any
  5622. +significance.Fmake-symbol
  5623. +Return a newly allocated uninterned symbol whose name is NAME.
  5624. +Its value and function definition are void, and its property list is nil.
  5625. +
  5626. +(make-symbol STR)Fmake-marker
  5627. +Return a newly allocated marker which does not point at any place.
  5628. +
  5629. +(make-marker)Fmake-string
  5630. +Return a newly created string of length LENGTH, with each element being INIT.
  5631. +Both LENGTH and INIT must be numbers.
  5632. +
  5633. +(make-string LENGTH INIT)Fpurecopy
  5634. +Make a copy of OBJECT in pure storage.
  5635. +Recursively copies contents of vectors and cons cells.
  5636. +Does not copy symbols.
  5637. +
  5638. +(purecopy OBJ)Fgarbage-collect
  5639. +Reclaim storage for Lisp objects no longer needed.
  5640. +Returns info on amount of space in use:
  5641. + ((USED-CONSES . FREE-CONSES) (USED-SYMS . FREE-SYMS)
  5642. +  (USED-MARKERS . FREE-MARKERS) USED-STRING-CHARS USED-VECTOR-SLOTS
  5643. +  (USED-FLOATS . FREE-FLOATS))
  5644. +Garbage collection happens automatically if you cons more than
  5645. +`gc-cons-threshold' bytes of Lisp data since previous garbage collection.
  5646. +
  5647. +(garbage-collect)Fmemory-limit
  5648. +Return the address of the last byte Emacs has allocated, divided by 1024.
  5649. +This may be helpful in debugging Emacs's memory usage.
  5650. +We divide the value by 1024 to make sure it fits in a Lisp integer.
  5651. +
  5652. +(memory-limit)Vgc-cons-threshold
  5653. +*Number of bytes of consing between garbage collections.
  5654. +Garbage collection can happen automatically once this many bytes have been
  5655. +allocated since the last garbage collection.  All data types count.
  5656. +
  5657. +Garbage collection happens automatically only when `eval' is called.
  5658. +
  5659. +By binding this temporarily to a large number, you can effectively
  5660. +prevent garbage collection during a part of the program.Vpure-bytes-used
  5661. +Number of bytes of sharable Lisp data allocated so far.Vdata-bytes-used
  5662. +Number of bytes of unshared memory allocated in this session.Vdata-bytes-free
  5663. +Number of bytes of unshared memory remaining available in this session.Vpurify-flag
  5664. +Non-nil means loading Lisp code in order to dump an executable.
  5665. +This means that certain objects should be allocated in shared (pure) space.Vundo-limit
  5666. +Keep no more undo information once it exceeds this size.
  5667. +This limit is applied when garbage collection happens.
  5668. +The size is counted as the number of bytes occupied,
  5669. +which includes both saved text and other data.Vundo-strong-limit
  5670. +Don't keep more than this much size of undo information.
  5671. +A command which pushes past this size is itself forgotten.
  5672. +This limit is applied when garbage collection happens.
  5673. +The size is counted as the number of bytes occupied,
  5674. +which includes both saved text and other data.Feq
  5675. +T if the two args are the same Lisp object.
  5676. +
  5677. +(eq OBJ1 OBJ2)Fnull
  5678. +T if OBJECT is nil.
  5679. +
  5680. +(null OBJ)Fconsp
  5681. +T if OBJECT is a cons cell.
  5682. +
  5683. +(consp OBJ)Fatom
  5684. +T if OBJECT is not a cons cell.  This includes nil.
  5685. +
  5686. +(atom OBJ)Flistp
  5687. +T if OBJECT is a list.  This includes nil.
  5688. +
  5689. +(listp OBJ)Fnlistp
  5690. +T if OBJECT is not a list.  Lists include nil.
  5691. +
  5692. +(nlistp OBJ)Fsymbolp
  5693. +T if OBJECT is a symbol.
  5694. +
  5695. +(symbolp OBJ)Fvectorp
  5696. +T if OBJECT is a vector.
  5697. +
  5698. +(vectorp OBJ)Fstringp
  5699. +T if OBJECT is a string.
  5700. +
  5701. +(stringp OBJ)Farrayp
  5702. +T if OBJECT is an array (string or vector).
  5703. +
  5704. +(arrayp OBJ)Fsequencep
  5705. +T if OBJECT is a sequence (list or array).
  5706. +
  5707. +(sequencep OBJ)Fbufferp
  5708. +T if OBJECT is an editor buffer.
  5709. +
  5710. +(bufferp OBJ)Fmarkerp
  5711. +T if OBJECT is a marker (editor pointer).
  5712. +
  5713. +(markerp OBJ)Fsubrp
  5714. +T if OBJECT is a built-in function.
  5715. +
  5716. +(subrp OBJ)Fbyte-code-function-p
  5717. +T if OBJECT is a byte-compiled function object.
  5718. +
  5719. +(byte-code-function-p OBJ)Fchar-or-string-p
  5720. +T if OBJECT is a character (an integer) or a string.
  5721. +
  5722. +(char-or-string-p OBJ)Fintegerp
  5723. +T if OBJECT is an integer.
  5724. +
  5725. +(integerp OBJ)Finteger-or-marker-p
  5726. +T if OBJECT is an integer or a marker (editor pointer).
  5727. +
  5728. +(integer-or-marker-p OBJ)Fnatnump
  5729. +T if OBJECT is a nonnegative integer.
  5730. +
  5731. +(natnump OBJ)Fnumberp
  5732. +T if OBJECT is a number (floating point or integer).
  5733. +
  5734. +(numberp OBJ)Fnumber-or-marker-p
  5735. +T if OBJECT is a number or a marker.
  5736. +
  5737. +(number-or-marker-p OBJ)Ffloatp
  5738. +T if OBJECT is a floating point number.
  5739. +
  5740. +(floatp OBJ)Fcar
  5741. +Return the car of CONSCELL.  If arg is nil, return nil.
  5742. +Error if arg is not nil and not a cons cell.  See also `car-safe'.
  5743. +
  5744. +(car LIST)Fcar-safe
  5745. +Return the car of OBJECT if it is a cons cell, or else nil.
  5746. +
  5747. +(car-safe OBJECT)Fcdr
  5748. +Return the cdr of CONSCELL.  If arg is nil, return nil.
  5749. +Error if arg is not nil and not a cons cell.  See also `cdr-safe'.
  5750. +
  5751. +(cdr LIST)Fcdr-safe
  5752. +Return the cdr of OBJECT if it is a cons cell, or else  nil.
  5753. +
  5754. +(cdr-safe OBJECT)Fsetcar
  5755. +Set the car of CONSCELL to be NEWCAR.  Returns NEWCAR.
  5756. +
  5757. +(setcar CELL NEWCAR)Fsetcdr
  5758. +Set the cdr of CONSCELL to be NEWCDR.  Returns NEWCDR.
  5759. +
  5760. +(setcdr CELL NEWCDR)Fboundp
  5761. +T if SYMBOL's value is not void.
  5762. +
  5763. +(boundp SYM)Ffboundp
  5764. +T if SYMBOL's function definition is not void.
  5765. +
  5766. +(fboundp SYM)Fmakunbound
  5767. +Make SYMBOL's value be void.
  5768. +
  5769. +(makunbound SYM)Ffmakunbound
  5770. +Make SYMBOL's function definition be void.
  5771. +
  5772. +(fmakunbound SYM)Fsymbol-function
  5773. +Return SYMBOL's function definition.  Error if that is void.
  5774. +
  5775. +(symbol-function SYMBOL)Fsymbol-plist
  5776. +Return SYMBOL's property list.
  5777. +
  5778. +(symbol-plist SYM)Fsymbol-name
  5779. +Return SYMBOL's name, a string.
  5780. +
  5781. +(symbol-name SYM)Ffset
  5782. +Set SYMBOL's function definition to NEWVAL, and return NEWVAL.
  5783. +
  5784. +(fset SYM NEWDEF)Fdefalias
  5785. +Set SYMBOL's function definition to NEWVAL, and return NEWVAL.
  5786. +Associates the function with the current load file, if any.
  5787. +
  5788. +(defalias SYM NEWDEF)Fdefine-function
  5789. +Set SYMBOL's function definition to NEWVAL, and return NEWVAL.
  5790. +Associates the function with the current load file, if any.
  5791. +
  5792. +(define-function SYM NEWDEF)Fsetplist
  5793. +Set SYMBOL's property list to NEWVAL, and return NEWVAL.
  5794. +
  5795. +(setplist SYM NEWPLIST)Fsymbol-value
  5796. +Return SYMBOL's value.  Error if that is void.
  5797. +
  5798. +(symbol-value SYM)Fset
  5799. +Set SYMBOL's value to NEWVAL, and return NEWVAL.
  5800. +
  5801. +(set SYM NEWVAL)Fdefault-boundp
  5802. +Return T if SYMBOL has a non-void default value.
  5803. +This is the value that is seen in buffers that do not have their own values
  5804. +for this variable.
  5805. +
  5806. +(default-boundp SYM)Fdefault-value
  5807. +Return SYMBOL's default value.
  5808. +This is the value that is seen in buffers that do not have their own values
  5809. +for this variable.  The default value is meaningful for variables with
  5810. +local bindings in certain buffers.
  5811. +
  5812. +(default-value SYM)Fset-default
  5813. +Set SYMBOL's default value to VAL.  SYMBOL and VAL are evaluated.
  5814. +The default value is seen in buffers that do not have their own values
  5815. +for this variable.
  5816. +
  5817. +(set-default SYM VALUE)Fsetq-default
  5818. +Set the default value of variable VAR to VALUE.
  5819. +VAR, the variable name, is literal (not evaluated);
  5820. +VALUE is an expression and it is evaluated.
  5821. +The default value of a variable is seen in buffers
  5822. +that do not have their own values for the variable.
  5823. +
  5824. +More generally, you can use multiple variables and values, as in
  5825. +  (setq-default SYM VALUE SYM VALUE...)
  5826. +This sets each SYM's default value to the corresponding VALUE.
  5827. +The VALUE for the Nth SYM can refer to the new default values
  5828. +of previous SYMs.Fmake-variable-buffer-local
  5829. +Make VARIABLE have a separate value for each buffer.
  5830. +At any time, the value for the current buffer is in effect.
  5831. +There is also a default value which is seen in any buffer which has not yet
  5832. +set its own value.
  5833. +Using `set' or `setq' to set the variable causes it to have a separate value
  5834. +for the current buffer if it was previously using the default value.
  5835. +The function `default-value' gets the default value and `set-default' sets it.
  5836. +
  5837. +(make-variable-buffer-local SYM)Fmake-local-variable
  5838. +Make VARIABLE have a separate value in the current buffer.
  5839. +Other buffers will continue to share a common default value.
  5840. +(The buffer-local value of VARIABLE starts out as the same value
  5841. +VARIABLE previously had.  If VARIABLE was void, it remains void.)
  5842. +See also `make-variable-buffer-local'.
  5843. +
  5844. +If the variable is already arranged to become local when set,
  5845. +this function causes a local value to exist for this buffer,
  5846. +just as if the variable were set.
  5847. +
  5848. +(make-local-variable SYM)Fkill-local-variable
  5849. +Make VARIABLE no longer have a separate value in the current buffer.
  5850. +From now on the default value will apply in this buffer.
  5851. +
  5852. +(kill-local-variable SYM)Findirect-function
  5853. +Return the function at the end of OBJECT's function chain.
  5854. +If OBJECT is a symbol, follow all function indirections and return the final
  5855. +function binding.
  5856. +If OBJECT is not a symbol, just return it.
  5857. +Signal a void-function error if the final symbol is unbound.
  5858. +Signal a cyclic-function-indirection error if there is a loop in the
  5859. +function chain of symbols.
  5860. +
  5861. +(indirect-function OBJECT)Faref
  5862. +Return the element of ARRAY at index INDEX.
  5863. +ARRAY may be a vector or a string, or a byte-code object.  INDEX starts at 0.
  5864. +
  5865. +(aref ARRAY IDX)Faset
  5866. +Store into the element of ARRAY at index IDX the value NEWELT.
  5867. +ARRAY may be a vector or a string.  IDX starts at 0.
  5868. +
  5869. +(aset ARRAY IDX NEWELT)F=
  5870. +T if two args, both numbers or markers, are equal.
  5871. +
  5872. +(= NUM1 NUM2)F<
  5873. +T if first arg is less than second arg.  Both must be numbers or markers.
  5874. +
  5875. +(< NUM1 NUM2)F>
  5876. +T if first arg is greater than second arg.  Both must be numbers or markers.
  5877. +
  5878. +(> NUM1 NUM2)F<=
  5879. +T if first arg is less than or equal to second arg.
  5880. +Both must be numbers or markers.
  5881. +
  5882. +(<= NUM1 NUM2)F>=
  5883. +T if first arg is greater than or equal to second arg.
  5884. +Both must be numbers or markers.
  5885. +
  5886. +(>= NUM1 NUM2)F/=
  5887. +T if first arg is not equal to second arg.  Both must be numbers or markers.
  5888. +
  5889. +(/= NUM1 NUM2)Fzerop
  5890. +T if NUMBER is zero.
  5891. +
  5892. +(zerop NUM)Fnumber-to-string
  5893. +Convert NUM to a string by printing it in decimal.
  5894. +Uses a minus sign if negative.
  5895. +NUM may be an integer or a floating point number.
  5896. +
  5897. +(number-to-string NUM)Fstring-to-number
  5898. +Convert STRING to a number by parsing it as a decimal number.
  5899. +This parses both integers and floating point numbers.
  5900. +It ignores leading spaces and tabs.
  5901. +
  5902. +(string-to-number STR)F+
  5903. +Return sum of any number of arguments, which are numbers or markers.F-
  5904. +Negate number or subtract numbers or markers.
  5905. +With one arg, negates it.  With more than one arg,
  5906. +subtracts all but the first from the first.F*
  5907. +Returns product of any number of arguments, which are numbers or markers.F/
  5908. +Returns first argument divided by all the remaining arguments.
  5909. +The arguments must be numbers or markers.F%
  5910. +Returns remainder of first arg divided by second.
  5911. +Both must be integers or markers.
  5912. +
  5913. +(% NUM1 NUM2)Fmod
  5914. +Returns X modulo Y.
  5915. +The result falls between zero (inclusive) and Y (exclusive).
  5916. +Both X and Y must be numbers or markers.
  5917. +
  5918. +(mod NUM1 NUM2)Fmax
  5919. +Return largest of all the arguments (which must be numbers or markers).
  5920. +The value is always a number; markers are converted to numbers.Fmin
  5921. +Return smallest of all the arguments (which must be numbers or markers).
  5922. +The value is always a number; markers are converted to numbers.Flogand
  5923. +Return bitwise-and of all the arguments.
  5924. +Arguments may be integers, or markers converted to integers.Flogior
  5925. +Return bitwise-or of all the arguments.
  5926. +Arguments may be integers, or markers converted to integers.Flogxor
  5927. +Return bitwise-exclusive-or of all the arguments.
  5928. +Arguments may be integers, or markers converted to integers.Fash
  5929. +Return VALUE with its bits shifted left by COUNT.
  5930. +If COUNT is negative, shifting is actually to the right.
  5931. +In this case, the sign bit is duplicated.
  5932. +
  5933. +(ash NUM1 NUM2)Flsh
  5934. +Return VALUE with its bits shifted left by COUNT.
  5935. +If COUNT is negative, shifting is actually to the right.
  5936. +In this case,  zeros are shifted in on the left.
  5937. +
  5938. +(lsh NUM1 NUM2)F1+
  5939. +Return NUMBER plus one.  NUMBER may be a number or a marker.
  5940. +Markers are converted to integers.
  5941. +
  5942. +(1+ NUM)F1-
  5943. +Return NUMBER minus one.  NUMBER may be a number or a marker.
  5944. +Markers are converted to integers.
  5945. +
  5946. +(1- NUM)Flognot
  5947. +Return the bitwise complement of ARG.  ARG must be an integer.
  5948. +
  5949. +(lognot NUM)Fdocumentation
  5950. +Return the documentation string of FUNCTION.
  5951. +Unless a non-nil second argument is given, the
  5952. +string is passed through `substitute-command-keys'.
  5953. +
  5954. +(documentation FUNCTION &optional RAW)Fdocumentation-property
  5955. +Return the documentation string that is SYMBOL's PROP property.
  5956. +This is like `get', but it can refer to strings stored in the
  5957. +`etc/DOC' file; and if the value is a string, it is passed through
  5958. +`substitute-command-keys'.  A non-nil third argument avoids this
  5959. +translation.
  5960. +
  5961. +(documentation-property SYM PROP &optional RAW)FSnarf-documentation
  5962. +Used during Emacs initialization, before dumping runnable Emacs,
  5963. +to find pointers to doc strings stored in `etc/DOC...' and
  5964. +record them in function definitions.
  5965. +One arg, FILENAME, a string which does not include a directory.
  5966. +The file is found in `../etc' now; found in the `data-directory'
  5967. +when doc strings are referred to later in the dumped Emacs.
  5968. +
  5969. +(Snarf-documentation FILENAME)Fsubstitute-command-keys
  5970. +Substitute key descriptions for command names in STRING.
  5971. +Return a new string which is STRING with substrings of the form \=\[COMMAND]
  5972. +replaced by either:  a keystroke sequence that will invoke COMMAND,
  5973. +or "M-x COMMAND" if COMMAND is not on any keys.
  5974. +Substrings of the form \=\{MAPVAR} are replaced by summaries
  5975. +(made by describe-bindings) of the value of MAPVAR, taken as a keymap.
  5976. +Substrings of the form \=\<MAPVAR> specify to use the value of MAPVAR
  5977. +as the keymap for future \=\[COMMAND] substrings.
  5978. +\=\= quotes the following character and is discarded;
  5979. +thus, \=\=\=\= puts \=\= into the output, and \=\=\=\[ puts \=\[ into the output.
  5980. +
  5981. +(substitute-command-keys STR)Vinternal-doc-file-name
  5982. +Name of file containing documentation strings of built-in symbols.Fchar-to-string
  5983. +Convert arg CHAR to a one-character string containing that character.
  5984. +
  5985. +(char-to-string N)Fstring-to-char
  5986. +Convert arg STRING to a character, the first character of that string.
  5987. +
  5988. +(string-to-char STR)Fpoint
  5989. +Return value of point, as an integer.
  5990. +Beginning of buffer is position (point-min)
  5991. +
  5992. +(point)Fpoint-marker
  5993. +Return value of point, as a marker object.
  5994. +
  5995. +(point-marker)Fgoto-char
  5996. +Set point to POSITION, a number or marker.
  5997. +Beginning of buffer is position (point-min), end is (point-max).
  5998. +
  5999. +(goto-char N)Fregion-beginning
  6000. +Return position of beginning of region, as an integer.
  6001. +
  6002. +(region-beginning)Fregion-end
  6003. +Return position of end of region, as an integer.
  6004. +
  6005. +(region-end)Fmark
  6006. +Return this buffer's mark value as integer, or nil if no mark.
  6007. +If you are using this in an editing command, you are most likely making
  6008. +a mistake; see the documentation of `set-mark'.
  6009. +
  6010. +(mark)Fmark-marker
  6011. +Return this buffer's mark, as a marker object.
  6012. +Watch out!  Moving this marker changes the mark position.
  6013. +If you set the marker not to point anywhere, the buffer will have no mark.
  6014. +
  6015. +(mark-marker)Fset-mark
  6016. +Set this buffer's mark to POS.  Don't use this function!
  6017. +That is to say, don't use this function unless you want
  6018. +the user to see that the mark has moved, and you want the previous
  6019. +mark position to be lost.
  6020. +
  6021. +Normally, when a new mark is set, the old one should go on the stack.
  6022. +This is why most applications should use push-mark, not set-mark.
  6023. +
  6024. +Novice programmers often try to use the mark for the wrong purposes.
  6025. +The mark saves a location for the user's convenience.
  6026. +Most editing commands should not alter the mark.
  6027. +To remember a location for internal use in the Lisp program,
  6028. +store it in a Lisp variable.  Example:
  6029. +
  6030. +   (let ((beg (point))) (forward-line 1) (delete-region beg (point))).
  6031. +
  6032. +(set-mark POS)Fsave-excursion
  6033. +Save point, mark, and current buffer; execute BODY; restore those things.
  6034. +Executes BODY just like `progn'.
  6035. +The values of point, mark and the current buffer are restored
  6036. +even in case of abnormal exit (throw or error).
  6037. +The state of activation of the mark is also restored.Fbuffer-size
  6038. +Return the number of characters in the current buffer.
  6039. +
  6040. +(buffer-size)Fpoint-min
  6041. +Return the minimum permissible value of point in the current buffer.
  6042. +This is 1, unless narrowing (a buffer restriction) is in effect.
  6043. +
  6044. +(point-min)Fpoint-min-marker
  6045. +Return a marker to the minimum permissible value of point in this buffer.
  6046. +This is the beginning, unless narrowing (a buffer restriction) is in effect.
  6047. +
  6048. +(point-min-marker)Fpoint-max
  6049. +Return the maximum permissible value of point in the current buffer.
  6050. +This is (1+ (buffer-size)), unless narrowing (a buffer restriction)
  6051. +is in effect, in which case it is less.
  6052. +
  6053. +(point-max)Fpoint-max-marker
  6054. +Return a marker to the maximum permissible value of point in this buffer.
  6055. +This is (1+ (buffer-size)), unless narrowing (a buffer restriction)
  6056. +is in effect, in which case it is less.
  6057. +
  6058. +(point-max-marker)Ffollowing-char
  6059. +Return the character following point, as a number.
  6060. +At the end of the buffer or accessible region, return 0.
  6061. +
  6062. +(following-char)Fpreceding-char
  6063. +Return the character preceding point, as a number.
  6064. +At the beginning of the buffer or accessible region, return 0.
  6065. +
  6066. +(preceding-char)Fbobp
  6067. +Return T if point is at the beginning of the buffer.
  6068. +If the buffer is narrowed, this means the beginning of the narrowed part.
  6069. +
  6070. +(bobp)Feobp
  6071. +Return T if point is at the end of the buffer.
  6072. +If the buffer is narrowed, this means the end of the narrowed part.
  6073. +
  6074. +(eobp)Fbolp
  6075. +Return T if point is at the beginning of a line.
  6076. +
  6077. +(bolp)Feolp
  6078. +Return T if point is at the end of a line.
  6079. +`End of a line' includes point being at the end of the buffer.
  6080. +
  6081. +(eolp)Fchar-after
  6082. +Return character in current buffer at position POS.
  6083. +POS is an integer or a buffer pointer.
  6084. +If POS is out of range, the value is nil.
  6085. +
  6086. +(char-after POS)Fuser-login-name
  6087. +Return the name under which the user logged in, as a string.
  6088. +This is based on the effective uid, not the real uid.
  6089. +Also, if the environment variable LOGNAME or USER is set,
  6090. +that determines the value of this function.
  6091. +
  6092. +(user-login-name)Fuser-real-login-name
  6093. +Return the name of the user's real uid, as a string.
  6094. +This ignores the environment variables LOGNAME and USER, so it differs from
  6095. +`user-login-name' when running under `su'.
  6096. +
  6097. +(user-real-login-name)Fuser-uid
  6098. +Return the effective uid of Emacs, as an integer.
  6099. +
  6100. +(user-uid)Fuser-real-uid
  6101. +Return the real uid of Emacs, as an integer.
  6102. +
  6103. +(user-real-uid)Fuser-full-name
  6104. +Return the full name of the user logged in, as a string.
  6105. +
  6106. +(user-full-name)Fsystem-name
  6107. +Return the name of the machine you are running on, as a string.
  6108. +
  6109. +(system-name)Femacs-pid
  6110. +Return the process ID of Emacs, as an integer.
  6111. +
  6112. +(emacs-pid)Fcurrent-time
  6113. +Return the current time, as the number of seconds since 12:00 AM January 1970.
  6114. +The time is returned as a list of three integers.  The first has the
  6115. +most significant 16 bits of the seconds, while the second has the
  6116. +least significant 16 bits.  The third integer gives the microsecond
  6117. +count.
  6118. +
  6119. +The microsecond count is zero on systems that do not provide
  6120. +resolution finer than a second.
  6121. +
  6122. +(current-time)Fcurrent-time-string
  6123. +Return the current time, as a human-readable string.
  6124. +Programs can use this function to decode a time,
  6125. +since the number of columns in each field is fixed.
  6126. +The format is `Sun Sep 16 01:03:52 1973'.
  6127. +If an argument is given, it specifies a time to format
  6128. +instead of the current time.  The argument should have the form:
  6129. +  (HIGH . LOW)
  6130. +or the form:
  6131. +  (HIGH LOW . IGNORED).
  6132. +Thus, you can use times obtained from `current-time'
  6133. +and from `file-attributes'.
  6134. +
  6135. +(current-time-string &optional SPECIFIED-TIME)Fcurrent-time-zone
  6136. +Return the offset and name for the local time zone.
  6137. +This returns a list of the form (OFFSET NAME).
  6138. +OFFSET is an integer number of seconds ahead of UTC (east of Greenwich).
  6139. +    A negative value means west of Greenwich.
  6140. +NAME is a string giving the name of the time zone.
  6141. +If an argument is given, it specifies when the time zone offset is determined
  6142. +instead of using the current time.  The argument should have the form:
  6143. +  (HIGH . LOW)
  6144. +or the form:
  6145. +  (HIGH LOW . IGNORED).
  6146. +Thus, you can use times obtained from `current-time'
  6147. +and from `file-attributes'.
  6148. +
  6149. +Some operating systems cannot provide all this information to Emacs;
  6150. +in this case, `current-time-zone' returns a list containing nil for
  6151. +the data it can't find.
  6152. +
  6153. +(current-time-zone &optional SPECIFIED-TIME)Finsert
  6154. +Insert the arguments, either strings or characters, at point.
  6155. +Point moves forward so that it ends up after the inserted text.
  6156. +Any other markers at the point of insertion remain before the text.Finsert-and-inherit
  6157. +Insert the arguments at point, inheriting properties from adjoining text.
  6158. +Point moves forward so that it ends up after the inserted text.
  6159. +Any other markers at the point of insertion remain before the text.Finsert-before-markers
  6160. +Insert strings or characters at point, relocating markers after the text.
  6161. +Point moves forward so that it ends up after the inserted text.
  6162. +Any other markers at the point of insertion also end up after the text.Finsert-before-markers-and-inherit
  6163. +Insert text at point, relocating markers and inheriting properties.
  6164. +Point moves forward so that it ends up after the inserted text.
  6165. +Any other markers at the point of insertion also end up after the text.Finsert-char
  6166. +Insert COUNT (second arg) copies of CHAR (first arg).
  6167. +Point and all markers are affected as in the function `insert'.
  6168. +Both arguments are required.
  6169. +The optional third arg INHERIT, if non-nil, says to inherit text properties
  6170. +from adjoining text, if those properties are sticky.
  6171. +
  6172. +(insert-char CHR COUNT &optional INHERIT)Fbuffer-substring
  6173. +Return the contents of part of the current buffer as a string.
  6174. +The two arguments START and END are character positions;
  6175. +they can be in either order.
  6176. +
  6177. +(buffer-substring B E)Fbuffer-string
  6178. +Return the contents of the current buffer as a string.
  6179. +
  6180. +(buffer-string)Finsert-buffer-substring
  6181. +Insert before point a substring of the contents of buffer BUFFER.
  6182. +BUFFER may be a buffer or a buffer name.
  6183. +Arguments START and END are character numbers specifying the substring.
  6184. +They default to the beginning and the end of BUFFER.
  6185. +
  6186. +(insert-buffer-substring BUF &optional B E)Fcompare-buffer-substrings
  6187. +Compare two substrings of two buffers; return result as number.
  6188. +the value is -N if first string is less after N-1 chars,
  6189. ++N if first string is greater after N-1 chars, or 0 if strings match.
  6190. +Each substring is represented as three arguments: BUFFER, START and END.
  6191. +That makes six args in all, three for each substring.
  6192. +
  6193. +The value of `case-fold-search' in the current buffer
  6194. +determines whether case is significant or ignored.
  6195. +
  6196. +(compare-buffer-substrings BUFFER1 START1 END1 BUFFER2 START2 END2)Fsubst-char-in-region
  6197. +From START to END, replace FROMCHAR with TOCHAR each time it occurs.
  6198. +If optional arg NOUNDO is non-nil, don't record this change for undo
  6199. +and don't mark the buffer as really changed.
  6200. +
  6201. +(subst-char-in-region START END FROMCHAR TOCHAR &optional NOUNDO)Ftranslate-region
  6202. +From START to END, translate characters according to TABLE.
  6203. +TABLE is a string; the Nth character in it is the mapping
  6204. +for the character with code N.  Returns the number of characters changed.
  6205. +
  6206. +(translate-region START END TABLE)Fdelete-region
  6207. +Delete the text between point and mark.
  6208. +When called from a program, expects two arguments,
  6209. +positions (integers or markers) specifying the stretch to be deleted.
  6210. +
  6211. +(delete-region B E)Fwiden
  6212. +Remove restrictions (narrowing) from current buffer.
  6213. +This allows the buffer's full text to be seen and edited.
  6214. +
  6215. +(widen)Fnarrow-to-region
  6216. +Restrict editing in this buffer to the current region.
  6217. +The rest of the text becomes temporarily invisible and untouchable
  6218. +but is not deleted; if you save the buffer in a file, the invisible
  6219. +text is included in the file.  \[widen] makes all visible again.
  6220. +See also `save-restriction'.
  6221. +
  6222. +When calling from a program, pass two arguments; positions (integers
  6223. +or markers) bounding the text that should remain visible.
  6224. +
  6225. +(narrow-to-region B E)Fsave-restriction
  6226. +Execute BODY, saving and restoring current buffer's restrictions.
  6227. +The buffer's restrictions make parts of the beginning and end invisible.
  6228. +(They are set up with `narrow-to-region' and eliminated with `widen'.)
  6229. +This special form, `save-restriction', saves the current buffer's restrictions
  6230. +when it is entered, and restores them when it is exited.
  6231. +So any `narrow-to-region' within BODY lasts only until the end of the form.
  6232. +The old restrictions settings are restored
  6233. +even in case of abnormal exit (throw or error).
  6234. +
  6235. +The value returned is the value of the last form in BODY.
  6236. +
  6237. +`save-restriction' can get confused if, within the BODY, you widen
  6238. +and then make changes outside the area within the saved restrictions.
  6239. +
  6240. +Note: if you are using both `save-excursion' and `save-restriction',
  6241. +use `save-excursion' outermost:
  6242. +    (save-excursion (save-restriction ...))Fmessage
  6243. +Print a one-line message at the bottom of the screen.
  6244. +The first argument is a control string.
  6245. +It may contain %s or %d or %c to print successive following arguments.
  6246. +%s means print an argument as a string, %d means print as number in decimal,
  6247. +%c means print a number as a single character.
  6248. +The argument used by %s must be a string or a symbol;
  6249. +the argument used by %d or %c must be a number.
  6250. +If the first argument is nil, clear any existing message; let the
  6251. +minibuffer contents show.Fformat
  6252. +Format a string out of a control-string and arguments.
  6253. +The first argument is a control string.
  6254. +The other arguments are substituted into it to make the result, a string.
  6255. +It may contain %-sequences meaning to substitute the next argument.
  6256. +%s means print a string argument.  Actually, prints any object, with `princ'.
  6257. +%d means print as number in decimal (%o octal, %x hex).
  6258. +%c means print a number as a single character.
  6259. +%S means print any object as an s-expression (using prin1).
  6260. +  The argument used for %d, %o, %x or %c must be a number.
  6261. +Use %% to put a single % into the output.Fchar-equal
  6262. +Return t if two characters match, optionally ignoring case.
  6263. +Both arguments must be characters (i.e. integers).
  6264. +Case is ignored if `case-fold-search' is non-nil in the current buffer.
  6265. +
  6266. +(char-equal C1 C2)Ftranspose-regions
  6267. +Transpose region START1 to END1 with START2 to END2.
  6268. +The regions may not be overlapping, because the size of the buffer is
  6269. +never changed in a transposition.
  6270. +
  6271. +Optional fifth arg LEAVE_MARKERS, if non-nil, means don't transpose
  6272. +any markers that happen to be located in the regions.
  6273. +
  6274. +Transposing beyond buffer boundaries is an error.
  6275. +
  6276. +(transpose-regions STARTR1 ENDR1 STARTR2 ENDR2 &optional LEAVE-MARKERS)Finteractive
  6277. +Specify a way of parsing arguments for interactive use of a function.
  6278. +For example, write
  6279. +  (defun foo (arg) "Doc string" (interactive "p") ...use arg...)
  6280. +to make ARG be the prefix argument when `foo' is called as a command.
  6281. +The "call" to `interactive' is actually a declaration rather than a function;
  6282. + it tells `call-interactively' how to read arguments
  6283. + to pass to the function.
  6284. +When actually called, `interactive' just returns nil.
  6285. +
  6286. +The argument of `interactive' is usually a string containing a code letter
  6287. + followed by a prompt.  (Some code letters do not use I/O to get
  6288. + the argument and do not need prompts.)  To prompt for multiple arguments,
  6289. + give a code letter, its prompt, a newline, and another code letter, etc.
  6290. + Prompts are passed to format, and may use % escapes to print the
  6291. + arguments that have already been read.
  6292. +If the argument is not a string, it is evaluated to get a list of
  6293. + arguments to pass to the function.
  6294. +Just `(interactive)' means pass no args when calling interactively.
  6295. +
  6296. +Code letters available are:
  6297. +a -- Function name: symbol with a function definition.
  6298. +b -- Name of existing buffer.
  6299. +B -- Name of buffer, possibly nonexistent.
  6300. +c -- Character.
  6301. +C -- Command name: symbol with interactive function definition.
  6302. +d -- Value of point as number.  Does not do I/O.
  6303. +D -- Directory name.
  6304. +e -- Parametrized event (i.e., one that's a list) that invoked this command.
  6305. +     If used more than once, the Nth `e' returns the Nth parameterized event.
  6306. +     This skips events that are integers or symbols.
  6307. +f -- Existing file name.
  6308. +F -- Possibly nonexistent file name.
  6309. +k -- Key sequence (string).
  6310. +m -- Value of mark as number.  Does not do I/O.
  6311. +n -- Number read using minibuffer.
  6312. +N -- Prefix arg converted to number, or if none, do like code `n'.
  6313. +p -- Prefix arg converted to number.  Does not do I/O.
  6314. +P -- Prefix arg in raw form.  Does not do I/O.
  6315. +r -- Region: point and mark as 2 numeric args, smallest first.  Does no I/O.
  6316. +s -- Any string.
  6317. +S -- Any symbol.
  6318. +v -- Variable name: symbol that is user-variable-p.
  6319. +x -- Lisp expression read but not evaluated.
  6320. +X -- Lisp expression read and evaluated.
  6321. +In addition, if the string begins with `*'
  6322. + then an error is signaled if the buffer is read-only.
  6323. + This happens before reading any arguments.
  6324. +If the string begins with `@', then Emacs searches the key sequence
  6325. + which invoked the command for its first mouse click (or any other
  6326. + event which specifies a window), and selects that window before
  6327. + reading any arguments.  You may use both `@' and `*'; they are
  6328. + processed in the order that they appear.
  6329. +
  6330. +(interactive ARGS)Fcall-interactively
  6331. +Call FUNCTION, reading args according to its interactive calling specs.
  6332. +The function contains a specification of how to do the argument reading.
  6333. +In the case of user-defined functions, this is specified by placing a call
  6334. +to the function `interactive' at the top level of the function body.
  6335. +See `interactive'.
  6336. +
  6337. +Optional second arg RECORD-FLAG non-nil
  6338. +means unconditionally put this command in the command-history.
  6339. +Otherwise, this is done only if an arg is read using the minibuffer.
  6340. +
  6341. +(call-interactively FUNCTION &optional RECORD)Fprefix-numeric-value
  6342. +Return numeric meaning of raw prefix argument ARG.
  6343. +A raw prefix argument is what you get from `(interactive "P")'.
  6344. +Its numeric meaning is what you would get from `(interactive "p")'.
  6345. +
  6346. +(prefix-numeric-value RAW)Vprefix-arg
  6347. +The value of the prefix argument for the next editing command.
  6348. +It may be a number, or the symbol `-' for just a minus sign as arg,
  6349. +or a list whose car is a number for just one or more C-U's
  6350. +or nil if no argument has been specified.
  6351. +
  6352. +You cannot examine this variable to find the argument for this command
  6353. +since it has been set to nil by the time you can look.
  6354. +Instead, you should use the variable `current-prefix-arg', although
  6355. +normally commands can get this prefix argument with (interactive "P").Vcurrent-prefix-arg
  6356. +The value of the prefix argument for this editing command.
  6357. +It may be a number, or the symbol `-' for just a minus sign as arg,
  6358. +or a list whose car is a number for just one or more C-U's
  6359. +or nil if no argument has been specified.
  6360. +This is what `(interactive "P")' returns.Vcommand-history
  6361. +List of recent commands that read arguments from terminal.
  6362. +Each command is represented as a form to evaluate.Vcommand-debug-status
  6363. +Debugging status of current interactive command.
  6364. +Bound each time `call-interactively' is called;
  6365. +may be set by the debugger as a reminder for itself.Vmark-even-if-inactive
  6366. +*Non-nil means you can use the mark even when inactive.
  6367. +This option makes a difference in Transient Mark mode.
  6368. +When the option is non-nil, deactivation of the mark
  6369. +turns off region highlighting, but commands that use the mark
  6370. +behave as if the mark were still active.For
  6371. +Eval args until one of them yields non-nil, then return that value.
  6372. +The remaining args are not evalled at all.
  6373. +If all args return nil, return nil.Fand
  6374. +Eval args until one of them yields nil, then return nil.
  6375. +The remaining args are not evalled at all.
  6376. +If no arg yields nil, return the last arg's value.Fif
  6377. +(if COND THEN ELSE...): if COND yields non-nil, do THEN, else do ELSE...
  6378. +Returns the value of THEN or the value of the last of the ELSE's.
  6379. +THEN must be one expression, but ELSE... can be zero or more expressions.
  6380. +If COND yields nil, and there are no ELSE's, the value is nil.Fcond
  6381. +(cond CLAUSES...): try each clause until one succeeds.
  6382. +Each clause looks like (CONDITION BODY...).  CONDITION is evaluated
  6383. +and, if the value is non-nil, this clause succeeds:
  6384. +then the expressions in BODY are evaluated and the last one's
  6385. +value is the value of the cond-form.
  6386. +If no clause succeeds, cond returns nil.
  6387. +If a clause has one element, as in (CONDITION),
  6388. +CONDITION's value if non-nil is returned from the cond-form.Fprogn
  6389. +(progn BODY...): eval BODY forms sequentially and return value of last one.Fprog1
  6390. +(prog1 FIRST BODY...): eval FIRST and BODY sequentially; value from FIRST.
  6391. +The value of FIRST is saved during the evaluation of the remaining args,
  6392. +whose values are discarded.Fprog2
  6393. +(prog2 X Y BODY...): eval X, Y and BODY sequentially; value from Y.
  6394. +The value of Y is saved during the evaluation of the remaining args,
  6395. +whose values are discarded.Fsetq
  6396. +(setq SYM VAL SYM VAL ...): set each SYM to the value of its VAL.
  6397. +The symbols SYM are variables; they are literal (not evaluated).
  6398. +The values VAL are expressions; they are evaluated.
  6399. +Thus, (setq x (1+ y)) sets `x' to the value of `(1+ y)'.
  6400. +The second VAL is not computed until after the first SYM is set, and so on;
  6401. +each VAL can use the new value of variables set earlier in the `setq'.
  6402. +The return value of the `setq' form is the value of the last VAL.Fquote
  6403. +Return the argument, without evaluating it.  `(quote x)' yields `x'.Ffunction
  6404. +Like `quote', but preferred for objects which are functions.
  6405. +In byte compilation, `function' causes its argument to be compiled.
  6406. +`quote' cannot do that.Finteractive-p
  6407. +Return t if function in which this appears was called interactively.
  6408. +This means that the function was called with call-interactively (which
  6409. +includes being called as the binding of a key)
  6410. +and input is currently coming from the keyboard (not in keyboard macro).
  6411. +
  6412. +(interactive-p)Fdefun
  6413. +(defun NAME ARGLIST [DOCSTRING] BODY...): define NAME as a function.
  6414. +The definition is (lambda ARGLIST [DOCSTRING] BODY...).
  6415. +See also the function `interactive'.Fdefmacro
  6416. +(defmacro NAME ARGLIST [DOCSTRING] BODY...): define NAME as a macro.
  6417. +The definition is (macro lambda ARGLIST [DOCSTRING] BODY...).
  6418. +When the macro is called, as in (NAME ARGS...),
  6419. +the function (lambda ARGLIST BODY...) is applied to
  6420. +the list ARGS... as it appears in the expression,
  6421. +and the result should be a form to be evaluated instead of the original.Fdefvar
  6422. +(defvar SYMBOL INITVALUE DOCSTRING): define SYMBOL as a variable.
  6423. +You are not required to define a variable in order to use it,
  6424. +but the definition can supply documentation and an initial value
  6425. +in a way that tags can recognize.
  6426. +
  6427. +INITVALUE is evaluated, and used to set SYMBOL, only if SYMBOL's value is void.
  6428. +If SYMBOL is buffer-local, its default value is what is set;
  6429. + buffer-local values are not affected.
  6430. +INITVALUE and DOCSTRING are optional.
  6431. +If DOCSTRING starts with *, this variable is identified as a user option.
  6432. + This means that M-x set-variable and M-x edit-options recognize it.
  6433. +If INITVALUE is missing, SYMBOL's value is not set.Fdefconst
  6434. +(defconst SYMBOL INITVALUE DOCSTRING): define SYMBOL as a constant variable.
  6435. +The intent is that programs do not change this value, but users may.
  6436. +Always sets the value of SYMBOL to the result of evalling INITVALUE.
  6437. +If SYMBOL is buffer-local, its default value is what is set;
  6438. + buffer-local values are not affected.
  6439. +DOCSTRING is optional.
  6440. +If DOCSTRING starts with *, this variable is identified as a user option.
  6441. + This means that M-x set-variable and M-x edit-options recognize it.
  6442. +
  6443. +Note: do not use `defconst' for user options in libraries that are not
  6444. +normally loaded, since it is useful for users to be able to specify
  6445. +their own values for such variables before loading the library.
  6446. +Since `defconst' unconditionally assigns the variable,
  6447. +it would override the user's choice.Fuser-variable-p
  6448. +Returns t if VARIABLE is intended to be set and modified by users.
  6449. +(The alternative is a variable used internally in a Lisp program.)
  6450. +Determined by whether the first character of the documentation
  6451. +for the variable is "*"
  6452. +
  6453. +(user-variable-p VARIABLE)Flet*
  6454. +(let* VARLIST BODY...): bind variables according to VARLIST then eval BODY.
  6455. +The value of the last form in BODY is returned.
  6456. +Each element of VARLIST is a symbol (which is bound to nil)
  6457. +or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the value of VALUEFORM).
  6458. +Each VALUEFORM can refer to the symbols already bound by this VARLIST.Flet
  6459. +(let VARLIST BODY...): bind variables according to VARLIST then eval BODY.
  6460. +The value of the last form in BODY is returned.
  6461. +Each element of VARLIST is a symbol (which is bound to nil)
  6462. +or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the value of VALUEFORM).
  6463. +All the VALUEFORMs are evalled before any symbols are bound.Fwhile
  6464. +(while TEST BODY...): if TEST yields non-nil, eval BODY... and repeat.
  6465. +The order of execution is thus TEST, BODY, TEST, BODY and so on
  6466. +until TEST returns nil.Fmacroexpand
  6467. +Return result of expanding macros at top level of FORM.
  6468. +If FORM is not a macro call, it is returned unchanged.
  6469. +Otherwise, the macro is expanded and the expansion is considered
  6470. +in place of FORM.  When a non-macro-call results, it is returned.
  6471. +
  6472. +The second optional arg ENVIRONMENT species an environment of macro
  6473. +definitions to shadow the loaded ones for use in file byte-compilation.
  6474. +
  6475. +(macroexpand FORM &optional ENV)Fcatch
  6476. +(catch TAG BODY...): eval BODY allowing nonlocal exits using `throw'.
  6477. +TAG is evalled to get the tag to use.  Then the BODY is executed.
  6478. +Within BODY, (throw TAG) with same tag exits BODY and exits this `catch'.
  6479. +If no throw happens, `catch' returns the value of the last BODY form.
  6480. +If a throw happens, it specifies the value to return from `catch'.Fthrow
  6481. +(throw TAG VALUE): throw to the catch for TAG and return VALUE from it.
  6482. +Both TAG and VALUE are evalled.
  6483. +
  6484. +(throw TAG VAL)Funwind-protect
  6485. +Do BODYFORM, protecting with UNWINDFORMS.
  6486. +Usage looks like (unwind-protect BODYFORM UNWINDFORMS...).
  6487. +If BODYFORM completes normally, its value is returned
  6488. +after executing the UNWINDFORMS.
  6489. +If BODYFORM exits nonlocally, the UNWINDFORMS are executed anyway.Fcondition-case
  6490. +Regain control when an error is signaled.
  6491. +Usage looks like (condition-case VAR BODYFORM HANDLERS...).
  6492. +executes BODYFORM and returns its value if no error happens.
  6493. +Each element of HANDLERS looks like (CONDITION-NAME BODY...)
  6494. +where the BODY is made of Lisp expressions.
  6495. +
  6496. +A handler is applicable to an error
  6497. +if CONDITION-NAME is one of the error's condition names.
  6498. +If an error happens, the first applicable handler is run.
  6499. +
  6500. +The car of a handler may be a list of condition names
  6501. +instead of a single condition name.
  6502. +
  6503. +When a handler handles an error,
  6504. +control returns to the condition-case and the handler BODY... is executed
  6505. +with VAR bound to (SIGNALED-CONDITIONS . SIGNAL-DATA).
  6506. +VAR may be nil; then you do not get access to the signal information.
  6507. +
  6508. +The value of the last BODY form is returned from the condition-case.
  6509. +See also the function `signal' for more info.Fsignal
  6510. +Signal an error.  Args are ERROR-SYMBOL and associated DATA.
  6511. +This function does not return.
  6512. +
  6513. +An error symbol is a symbol with an `error-conditions' property
  6514. +that is a list of condition names.
  6515. +A handler for any of those names will get to handle this signal.
  6516. +The symbol `error' should normally be one of them.
  6517. +
  6518. +DATA should be a list.  Its elements are printed as part of the error message.
  6519. +If the signal is handled, DATA is made available to the handler.
  6520. +See also the function `condition-case'.
  6521. +
  6522. +(signal ERROR-SYMBOL DATA)Fcommandp
  6523. +T if FUNCTION makes provisions for interactive calling.
  6524. +This means it contains a description for how to read arguments to give it.
  6525. +The value is nil for an invalid function or a symbol with no function
  6526. +definition.
  6527. +
  6528. +Interactively callable functions include strings and vectors (treated
  6529. +as keyboard macros), lambda-expressions that contain a top-level call
  6530. +to `interactive', autoload definitions made by `autoload' with non-nil
  6531. +fourth argument, and some of the built-in functions of Lisp.
  6532. +
  6533. +Also, a symbol satisfies `commandp' if its function definition does so.
  6534. +
  6535. +(commandp FUNCTION)Fautoload
  6536. +Define FUNCTION to autoload from FILE.
  6537. +FUNCTION is a symbol; FILE is a file name string to pass to `load'.
  6538. +Third arg DOCSTRING is documentation for the function.
  6539. +Fourth arg INTERACTIVE if non-nil says function can be called interactively.
  6540. +Fifth arg TYPE indicates the type of the object:
  6541. +   nil or omitted says FUNCTION is a function,
  6542. +   `keymap' says FUNCTION is really a keymap, and
  6543. +   `macro' or t says FUNCTION is really a macro.
  6544. +Third through fifth args give info about the real definition.
  6545. +They default to nil.
  6546. +If FUNCTION is already defined other than as an autoload,
  6547. +this does nothing and returns nil.
  6548. +
  6549. +(autoload FUNCTION FILE &optional DOCSTRING INTERACTIVE TYPE)Feval
  6550. +Evaluate FORM and return its value.
  6551. +
  6552. +(eval FORM)Fapply
  6553. +Call FUNCTION with our remaining args, using our last arg as list of args.
  6554. +Thus, (apply '+ 1 2 '(3 4)) returns 10.Ffuncall
  6555. +Call first argument as a function, passing remaining arguments to it.
  6556. +Thus, (funcall 'cons 'x 'y) returns (x . y).Fbacktrace-debug
  6557. +Set the debug-on-exit flag of eval frame LEVEL levels down to FLAG.
  6558. +The debugger is entered when that frame exits, if the flag is non-nil.
  6559. +
  6560. +(backtrace-debug LEVEL FLAG)Fbacktrace
  6561. +Print a trace of Lisp function calls currently active.
  6562. +Output stream used is value of `standard-output'.
  6563. +
  6564. +(backtrace)Fbacktrace-frame
  6565. +Return the function and arguments N frames up from current execution point.
  6566. +If that frame has not evaluated the arguments yet (or is a special form),
  6567. +the value is (nil FUNCTION ARG-FORMS...).
  6568. +If that frame has evaluated its arguments and called its function already,
  6569. +the value is (t FUNCTION ARG-VALUES...).
  6570. +A &rest arg is represented as the tail of the list ARG-VALUES.
  6571. +FUNCTION is whatever was supplied as car of evaluated list,
  6572. +or a lambda expression for macro calls.
  6573. +If N is more than the number of frames, the value is nil.
  6574. +
  6575. +(backtrace-frame NFRAMES)Vmax-specpdl-size
  6576. +Limit on number of Lisp variable bindings & unwind-protects before error.Vmax-lisp-eval-depth
  6577. +Limit on depth in `eval', `apply' and `funcall' before error.
  6578. +This limit is to catch infinite recursions for you before they cause
  6579. +actual stack overflow in C, which would be fatal for Emacs.
  6580. +You can safely make it considerably larger than its default value,
  6581. +if that proves inconveniently small.Vquit-flag
  6582. +Non-nil causes `eval' to abort, unless `inhibit-quit' is non-nil.
  6583. +Typing C-g sets `quit-flag' non-nil, regardless of `inhibit-quit'.Vinhibit-quit
  6584. +Non-nil inhibits C-g quitting from happening immediately.
  6585. +Note that `quit-flag' will still be set by typing C-g,
  6586. +so a quit will be signalled as soon as `inhibit-quit' is nil.
  6587. +To prevent this happening, set `quit-flag' to nil
  6588. +before making `inhibit-quit' nil.Vstack-trace-on-error
  6589. +*Non-nil means automatically display a backtrace buffer
  6590. +after any error that is handled by the editor command loop.
  6591. +If the value is a list, an error only means to display a backtrace
  6592. +if one of its condition symbols appears in the list.Vdebug-on-error
  6593. +*Non-nil means enter debugger if an error is signaled.
  6594. +Does not apply to errors handled by `condition-case'.
  6595. +If the value is a list, an error only means to enter the debugger
  6596. +if one of its condition symbols appears in the list.
  6597. +See also variable `debug-on-quit'.Vdebug-on-quit
  6598. +*Non-nil means enter debugger if quit is signaled (C-g, for example).
  6599. +Does not apply if quit is handled by a `condition-case'.Vdebug-on-next-call
  6600. +Non-nil means enter debugger before next `eval', `apply' or `funcall'.Vdebugger
  6601. +Function to call to invoke debugger.
  6602. +If due to frame exit, args are `exit' and the value being returned;
  6603. + this function's value will be returned instead of that.
  6604. +If due to error, args are `error' and a list of the args to `signal'.
  6605. +If due to `apply' or `funcall' entry, one arg, `lambda'.
  6606. +If due to `eval' entry, one arg, t.Vmocklisp-arguments
  6607. +While in a mocklisp function, the list of its unevaluated args.Vrun-hooks
  6608. +Set to the function `run-hooks', if that function has been defined.
  6609. +Otherwise, nil (in a bare Emacs without preloaded Lisp code).Facos
  6610. +Return the inverse cosine of ARG.
  6611. +
  6612. +(acos ARG)Fasin
  6613. +Return the inverse sine of ARG.
  6614. +
  6615. +(asin ARG)Fatan
  6616. +Return the inverse tangent of ARG.
  6617. +
  6618. +(atan ARG)Fcos
  6619. +Return the cosine of ARG.
  6620. +
  6621. +(cos ARG)Fsin
  6622. +Return the sine of ARG.
  6623. +
  6624. +(sin ARG)Ftan
  6625. +Return the tangent of ARG.
  6626. +
  6627. +(tan ARG)Fbessel-j0
  6628. +Return the bessel function j0 of ARG.
  6629. +
  6630. +(bessel-j0 ARG)Fbessel-j1
  6631. +Return the bessel function j1 of ARG.
  6632. +
  6633. +(bessel-j1 ARG)Fbessel-jn
  6634. +Return the order N bessel function output jn of ARG.
  6635. +The first arg (the order) is truncated to an integer.
  6636. +
  6637. +(bessel-jn ARG1 ARG2)Fbessel-y0
  6638. +Return the bessel function y0 of ARG.
  6639. +
  6640. +(bessel-y0 ARG)Fbessel-y1
  6641. +Return the bessel function y1 of ARG.
  6642. +
  6643. +(bessel-y1 ARG)Fbessel-yn
  6644. +Return the order N bessel function output yn of ARG.
  6645. +The first arg (the order) is truncated to an integer.
  6646. +
  6647. +(bessel-yn ARG1 ARG2)Ferf
  6648. +Return the mathematical error function of ARG.
  6649. +
  6650. +(erf ARG)Ferfc
  6651. +Return the complementary error function of ARG.
  6652. +
  6653. +(erfc ARG)Flog-gamma
  6654. +Return the log gamma of ARG.
  6655. +
  6656. +(log-gamma ARG)Fcube-root
  6657. +Return the cube root of ARG.
  6658. +
  6659. +(cube-root ARG)Fexp
  6660. +Return the exponential base e of ARG.
  6661. +
  6662. +(exp ARG)Fexpt
  6663. +Return the exponential X ** Y.
  6664. +
  6665. +(expt ARG1 ARG2)Flog
  6666. +Return the natural logarithm of ARG.
  6667. +If second optional argument BASE is given, return log ARG using that base.
  6668. +
  6669. +(log ARG &optional BASE)Flog10
  6670. +Return the logarithm base 10 of ARG.
  6671. +
  6672. +(log10 ARG)Fsqrt
  6673. +Return the square root of ARG.
  6674. +
  6675. +(sqrt ARG)Facosh
  6676. +Return the inverse hyperbolic cosine of ARG.
  6677. +
  6678. +(acosh ARG)Fasinh
  6679. +Return the inverse hyperbolic sine of ARG.
  6680. +
  6681. +(asinh ARG)Fatanh
  6682. +Return the inverse hyperbolic tangent of ARG.
  6683. +
  6684. +(atanh ARG)Fcosh
  6685. +Return the hyperbolic cosine of ARG.
  6686. +
  6687. +(cosh ARG)Fsinh
  6688. +Return the hyperbolic sine of ARG.
  6689. +
  6690. +(sinh ARG)Ftanh
  6691. +Return the hyperbolic tangent of ARG.
  6692. +
  6693. +(tanh ARG)Fabs
  6694. +Return the absolute value of ARG.
  6695. +
  6696. +(abs ARG)Ffloat
  6697. +Return the floating point number equal to ARG.
  6698. +
  6699. +(float ARG)Flogb
  6700. +Returns largest integer <= the base 2 log of the magnitude of ARG.
  6701. +This is the same as the exponent of a float.
  6702. +
  6703. +(logb ARG)Fceiling
  6704. +Return the smallest integer no less than ARG.  (Round toward +inf.)
  6705. +
  6706. +(ceiling ARG)Ffloor
  6707. +Return the largest integer no greater than ARG.  (Round towards -inf.)
  6708. +With optional DIVISOR, return the largest integer no greater than ARG/DIVISOR.
  6709. +
  6710. +(floor ARG &optional DIVISOR)Fround
  6711. +Return the nearest integer to ARG.
  6712. +
  6713. +(round ARG)Ftruncate
  6714. +Truncate a floating point number to an int.
  6715. +Rounds the value toward zero.
  6716. +
  6717. +(truncate ARG)Ffceiling
  6718. +Return the smallest integer no less than ARG, as a float.
  6719. +(Round toward +inf.)
  6720. +
  6721. +(fceiling ARG)Fffloor
  6722. +Return the largest integer no greater than ARG, as a float.
  6723. +(Round towards -inf.)
  6724. +
  6725. +(ffloor ARG)Ffround
  6726. +Return the nearest integer to ARG, as a float.
  6727. +
  6728. +(fround ARG)Fftruncate
  6729. +Truncate a floating point number to an integral float value.
  6730. +Rounds the value toward zero.
  6731. +
  6732. +(ftruncate ARG)Fidentity
  6733. +Return the argument unchanged.
  6734. +
  6735. +(identity ARG)Frandom
  6736. +Return a pseudo-random number.
  6737. +On most systems all integers representable in Lisp are equally likely.
  6738. +  This is 24 bits' worth.
  6739. +With argument N, return random number in interval [0,N).
  6740. +With argument t, set the random number seed from the current time and pid.
  6741. +
  6742. +(random &optional LIMIT)Flength
  6743. +Return the length of vector, list or string SEQUENCE.
  6744. +A byte-code function object is also allowed.
  6745. +
  6746. +(length OBJ)Fstring-equal
  6747. +T if two strings have identical contents.
  6748. +Case is significant.
  6749. +Symbols are also allowed; their print names are used instead.
  6750. +
  6751. +(string-equal S1 S2)Fstring-lessp
  6752. +T if first arg string is less than second in lexicographic order.
  6753. +Case is significant.
  6754. +Symbols are also allowed; their print names are used instead.
  6755. +
  6756. +(string-lessp S1 S2)Fappend
  6757. +Concatenate all the arguments and make the result a list.
  6758. +The result is a list whose elements are the elements of all the arguments.
  6759. +Each argument may be a list, vector or string.
  6760. +The last argument is not copied, just used as the tail of the new list.Fconcat
  6761. +Concatenate all the arguments and make the result a string.
  6762. +The result is a string whose elements are the elements of all the arguments.
  6763. +Each argument may be a string, a list of characters (integers),
  6764. +or a vector of characters (integers).Fvconcat
  6765. +Concatenate all the arguments and make the result a vector.
  6766. +The result is a vector whose elements are the elements of all the arguments.
  6767. +Each argument may be a list, vector or string.Fcopy-sequence
  6768. +Return a copy of a list, vector or string.
  6769. +The elements of a list or vector are not copied; they are shared
  6770. +with the original.
  6771. +
  6772. +(copy-sequence ARG)Fcopy-alist
  6773. +Return a copy of ALIST.
  6774. +This is an alist which represents the same mapping from objects to objects,
  6775. +but does not share the alist structure with ALIST.
  6776. +The objects mapped (cars and cdrs of elements of the alist)
  6777. +are shared, however.
  6778. +Elements of ALIST that are not conses are also shared.
  6779. +
  6780. +(copy-alist ALIST)Fsubstring
  6781. +Return a substring of STRING, starting at index FROM and ending before TO.
  6782. +TO may be nil or omitted; then the substring runs to the end of STRING.
  6783. +If FROM or TO is negative, it counts from the end.
  6784. +
  6785. +(substring STRING FROM &optional TO)Fnthcdr
  6786. +Take cdr N times on LIST, returns the result.
  6787. +
  6788. +(nthcdr N LIST)Fnth
  6789. +Return the Nth element of LIST.
  6790. +N counts from zero.  If LIST is not that long, nil is returned.
  6791. +
  6792. +(nth N LIST)Felt
  6793. +Return element of SEQUENCE at index N.
  6794. +
  6795. +(elt SEQ N)Fmember
  6796. +Return non-nil if ELT is an element of LIST.  Comparison done with `equal'.
  6797. +The value is actually the tail of LIST whose car is ELT.
  6798. +
  6799. +(member ELT LIST)Fmemq
  6800. +Return non-nil if ELT is an element of LIST.  Comparison done with EQ.
  6801. +The value is actually the tail of LIST whose car is ELT.
  6802. +
  6803. +(memq ELT LIST)Fassq
  6804. +Return non-nil if KEY is `eq' to the car of an element of LIST.
  6805. +The value is actually the element of LIST whose car is KEY.
  6806. +Elements of LIST that are not conses are ignored.
  6807. +
  6808. +(assq KEY LIST)Fassoc
  6809. +Return non-nil if KEY is `equal' to the car of an element of LIST.
  6810. +The value is actually the element of LIST whose car is KEY.
  6811. +
  6812. +(assoc KEY LIST)Frassq
  6813. +Return non-nil if ELT is `eq' to the cdr of an element of LIST.
  6814. +The value is actually the element of LIST whose cdr is ELT.
  6815. +
  6816. +(rassq KEY LIST)Fdelq
  6817. +Delete by side effect any occurrences of ELT as a member of LIST.
  6818. +The modified LIST is returned.  Comparison is done with `eq'.
  6819. +If the first member of LIST is ELT, there is no way to remove it by side effect;
  6820. +therefore, write `(setq foo (delq element foo))'
  6821. +to be sure of changing the value of `foo'.
  6822. +
  6823. +(delq ELT LIST)Fdelete
  6824. +Delete by side effect any occurrences of ELT as a member of LIST.
  6825. +The modified LIST is returned.  Comparison is done with `equal'.
  6826. +If the first member of LIST is ELT, deleting it is not a side effect;
  6827. +it is simply using a different list.
  6828. +Therefore, write `(setq foo (delete element foo))'
  6829. +to be sure of changing the value of `foo'.
  6830. +
  6831. +(delete ELT LIST)Fnreverse
  6832. +Reverse LIST by modifying cdr pointers.
  6833. +Returns the beginning of the reversed list.
  6834. +
  6835. +(nreverse LIST)Freverse
  6836. +Reverse LIST, copying.  Returns the beginning of the reversed list.
  6837. +See also the function `nreverse', which is used more often.
  6838. +
  6839. +(reverse LIST)Fsort
  6840. +Sort LIST, stably, comparing elements using PREDICATE.
  6841. +Returns the sorted list.  LIST is modified by side effects.
  6842. +PREDICATE is called with two elements of LIST, and should return T
  6843. +if the first element is "less" than the second.
  6844. +
  6845. +(sort LIST PRED)Fget
  6846. +Return the value of SYMBOL's PROPNAME property.
  6847. +This is the last VALUE stored with `(put SYMBOL PROPNAME VALUE)'.
  6848. +
  6849. +(get SYM PROP)Fput
  6850. +Store SYMBOL's PROPNAME property with value VALUE.
  6851. +It can be retrieved with `(get SYMBOL PROPNAME)'.
  6852. +
  6853. +(put SYM PROP VAL)Fequal
  6854. +T if two Lisp objects have similar structure and contents.
  6855. +They must have the same data type.
  6856. +Conses are compared by comparing the cars and the cdrs.
  6857. +Vectors and strings are compared element by element.
  6858. +Numbers are compared by value, but integers cannot equal floats.
  6859. + (Use `=' if you want integers and floats to be able to be equal.)
  6860. +Symbols must match exactly.
  6861. +
  6862. +(equal O1 O2)Ffillarray
  6863. +Store each element of ARRAY with ITEM.  ARRAY is a vector or string.
  6864. +
  6865. +(fillarray ARRAY ITEM)Fnconc
  6866. +Concatenate any number of lists by altering them.
  6867. +Only the last argument is not altered, and need not be a list.Fmapconcat
  6868. +Apply FN to each element of SEQ, and concat the results as strings.
  6869. +In between each pair of results, stick in SEP.
  6870. +Thus, " " as SEP results in spaces between the values returned by FN.
  6871. +
  6872. +(mapconcat FN SEQ SEP)Fmapcar
  6873. +Apply FUNCTION to each element of SEQUENCE, and make a list of the results.
  6874. +The result is a list just as long as SEQUENCE.
  6875. +SEQUENCE may be a list, a vector or a string.
  6876. +
  6877. +(mapcar FN SEQ)Fy-or-n-p
  6878. +Ask user a "y or n" question.  Return t if answer is "y".
  6879. +Takes one argument, which is the string to display to ask the question.
  6880. +It should end in a space; `y-or-n-p' adds `(y or n) ' to it.
  6881. +No confirmation of the answer is requested; a single character is enough.
  6882. +Also accepts Space to mean yes, or Delete to mean no.
  6883. +
  6884. +(y-or-n-p PROMPT)Fyes-or-no-p
  6885. +Ask user a yes-or-no question.  Return t if answer is yes.
  6886. +Takes one argument, which is the string to display to ask the question.
  6887. +It should end in a space; `yes-or-no-p' adds `(yes or no) ' to it.
  6888. +The user must confirm the answer with RET,
  6889. +and can edit it until it as been confirmed.
  6890. +
  6891. +(yes-or-no-p PROMPT)Fload-average
  6892. +Return list of 1 minute, 5 minute and 15 minute load averages.
  6893. +Each of the three load averages is multiplied by 100,
  6894. +then converted to integer.
  6895. +If the 5-minute or 15-minute load averages are not available, return a
  6896. +shortened list, containing only those averages which are available.
  6897. +
  6898. +(load-average)Ffeaturep
  6899. +Returns t if FEATURE is present in this Emacs.
  6900. +Use this to conditionalize execution of lisp code based on the presence or
  6901. +absence of emacs or environment extensions.
  6902. +Use `provide' to declare that a feature is available.
  6903. +This function looks at the value of the variable `features'.
  6904. +
  6905. +(featurep FEATURE)Fprovide
  6906. +Announce that FEATURE is a feature of the current Emacs.
  6907. +
  6908. +(provide FEATURE)Frequire
  6909. +If feature FEATURE is not loaded, load it from FILENAME.
  6910. +If FEATURE is not a member of the list `features', then the feature
  6911. +is not loaded; so load the file FILENAME.
  6912. +If FILENAME is omitted, the printname of FEATURE is used as the file name.
  6913. +
  6914. +(require FEATURE &optional FILE-NAME)Vfeatures
  6915. +A list of symbols which are the features of the executing emacs.
  6916. +Used by `featurep' and `require', and altered by `provide'.Fwrite-char
  6917. +Output character CHAR to stream PRINTCHARFUN.
  6918. +PRINTCHARFUN defaults to the value of `standard-output' (which see).
  6919. +
  6920. +(write-char CH &optional PRINTCHARFUN)Fwith-output-to-temp-buffer
  6921. +Bind `standard-output' to buffer BUFNAME, eval BODY, then show that buffer.
  6922. +The buffer is cleared out initially, and marked as unmodified when done.
  6923. +All output done by BODY is inserted in that buffer by default.
  6924. +The buffer is displayed in another window, but not selected.
  6925. +The value of the last form in BODY is returned.
  6926. +If BODY does not finish normally, the buffer BUFNAME is not displayed.
  6927. +
  6928. +If variable `temp-buffer-show-function' is non-nil, call it at the end
  6929. +to get the buffer displayed.  It gets one argument, the buffer to display.Fterpri
  6930. +Output a newline to stream PRINTCHARFUN.
  6931. +If PRINTCHARFUN is omitted or nil, the value of `standard-output' is used.
  6932. +
  6933. +(terpri &optional PRINTCHARFUN)Fprin1
  6934. +Output the printed representation of OBJECT, any Lisp object.
  6935. +Quoting characters are printed when needed to make output that `read'
  6936. +can handle, whenever this is possible.
  6937. +Output stream is PRINTCHARFUN, or value of `standard-output' (which see).
  6938. +
  6939. +(prin1 OBJ &optional PRINTCHARFUN)Fprin1-to-string
  6940. +Return a string containing the printed representation of OBJECT,
  6941. +any Lisp object.  Quoting characters are used when needed to make output
  6942. +that `read' can handle, whenever this is possible, unless the optional
  6943. +second argument NOESCAPE is non-nil.
  6944. +
  6945. +(prin1-to-string OBJ &optional NOESCAPE)Fprinc
  6946. +Output the printed representation of OBJECT, any Lisp object.
  6947. +No quoting characters are used; no delimiters are printed around
  6948. +the contents of strings.
  6949. +Output stream is PRINTCHARFUN, or value of standard-output (which see).
  6950. +
  6951. +(princ OBJ &optional PRINTCHARFUN)Fprint
  6952. +Output the printed representation of OBJECT, with newlines around it.
  6953. +Quoting characters are printed when needed to make output that `read'
  6954. +can handle, whenever this is possible.
  6955. +Output stream is PRINTCHARFUN, or value of `standard-output' (which see).
  6956. +
  6957. +(print OBJ &optional PRINTCHARFUN)Fexternal-debugging-output
  6958. +Write CHARACTER to stderr.
  6959. +You can call print while debugging emacs, and pass it this function
  6960. +to make it write to the debugging output.
  6961. +
  6962. +
  6963. +(external-debugging-output CHARACTER)Vstandard-output
  6964. +Output stream `print' uses by default for outputting a character.
  6965. +This may be any function of one argument.
  6966. +It may also be a buffer (output is inserted before point)
  6967. +or a marker (output is inserted and the marker is advanced)
  6968. +or the symbol t (output appears in the minibuffer line).Vfloat-output-format
  6969. +The format descriptor string used to print floats.
  6970. +This is a %-spec like those accepted by `printf' in C,
  6971. +but with some restrictions.  It must start with the two characters `%.'.
  6972. +After that comes an integer precision specification,
  6973. +and then a letter which controls the format.
  6974. +The letters allowed are `e', `f' and `g'.
  6975. +Use `e' for exponential notation "DIG.DIGITSeEXPT"
  6976. +Use `f' for decimal point notation "DIGITS.DIGITS".
  6977. +Use `g' to choose the shorter of those two formats for the number at hand.
  6978. +The precision in any of these cases is the number of digits following
  6979. +the decimal point.  With `f', a precision of 0 means to omit the
  6980. +decimal point.  0 is not allowed with `e' or `g'.
  6981. +
  6982. +A value of nil means to use `%.17g'.Vprint-length
  6983. +Maximum length of list to print before abbreviating.
  6984. +A value of nil means no limit.Vprint-level
  6985. +Maximum depth of list nesting to print before abbreviating.
  6986. +A value of nil means no limit.Vprint-escape-newlines
  6987. +Non-nil means print newlines in strings as backslash-n.
  6988. +Also print formfeeds as backslash-f.Fread-char
  6989. +Read a character from the command input (keyboard or macro).
  6990. +It is returned as a number.
  6991. +If the user generates an event which is not a character (i.e. a mouse
  6992. +click or function key event), `read-char' signals an error.  As an
  6993. +exception, switch-frame events are put off until non-ASCII events can
  6994. +be read.
  6995. +If you want to read non-character events, or ignore them, call
  6996. +`read-event' or `read-char-exclusive' instead.
  6997. +
  6998. +(read-char)Fread-event
  6999. +Read an event object from the input stream.
  7000. +
  7001. +(read-event)Fread-char-exclusive
  7002. +Read a character from the command input (keyboard or macro).
  7003. +It is returned as a number.  Non character events are ignored.
  7004. +
  7005. +(read-char-exclusive)Fget-file-char
  7006. +Don't use this yourself.
  7007. +
  7008. +(get-file-char)Fload
  7009. +Execute a file of Lisp code named FILE.
  7010. +First try FILE with `.elc' appended, then try with `.el',
  7011. + then try FILE unmodified.
  7012. +This function searches the directories in `load-path'.
  7013. +If optional second arg NOERROR is non-nil,
  7014. + report no error if FILE doesn't exist.
  7015. +Print messages at start and end of loading unless
  7016. + optional third arg NOMESSAGE is non-nil.
  7017. +If optional fourth arg NOSUFFIX is non-nil, don't try adding
  7018. + suffixes `.elc' or `.el' to the specified name FILE.
  7019. +Return t if file exists.
  7020. +
  7021. +(load STR &optional NOERROR NOMESSAGE NOSUFFIX)Feval-buffer
  7022. +Execute the current buffer as Lisp code.
  7023. +Programs can pass two arguments, BUFFER and PRINTFLAG.
  7024. +BUFFER is the buffer to evaluate (nil means use current buffer).
  7025. +PRINTFLAG controls printing of output:
  7026. +nil means discard it; anything else is stream for print.
  7027. +
  7028. +If there is no error, point does not move.  If there is an error,
  7029. +point remains at the end of the last character read from the buffer.
  7030. +
  7031. +(eval-buffer &optional BUFNAME PRINTFLAG)Feval-current-buffer
  7032. +Execute the current buffer as Lisp code.
  7033. +Programs can pass argument PRINTFLAG which controls printing of output:
  7034. +nil means discard it; anything else is stream for print.
  7035. +
  7036. +If there is no error, point does not move.  If there is an error,
  7037. +point remains at the end of the last character read from the buffer.
  7038. +
  7039. +(eval-current-buffer &optional PRINTFLAG)Feval-region
  7040. +Execute the region as Lisp code.
  7041. +When called from programs, expects two arguments,
  7042. +giving starting and ending indices in the current buffer
  7043. +of the text to be executed.
  7044. +Programs can pass third argument PRINTFLAG which controls output:
  7045. +nil means discard it; anything else is stream for printing it.
  7046. +
  7047. +If there is no error, point does not move.  If there is an error,
  7048. +point remains at the end of the last character read from the buffer.
  7049. +
  7050. +(eval-region B E &optional PRINTFLAG)Fread
  7051. +Read one Lisp expression as text from STREAM, return as Lisp object.
  7052. +If STREAM is nil, use the value of `standard-input' (which see).
  7053. +STREAM or the value of `standard-input' may be:
  7054. + a buffer (read from point and advance it)
  7055. + a marker (read from where it points and advance it)
  7056. + a function (call it with no arguments for each character,
  7057. +     call it with a char as argument to push a char back)
  7058. + a string (takes text from string, starting at the beginning)
  7059. + t (read text line using minibuffer and use it).
  7060. +
  7061. +(read &optional READCHARFUN)Fread-from-string
  7062. +Read one Lisp expression which is represented as text by STRING.
  7063. +Returns a cons: (OBJECT-READ . FINAL-STRING-INDEX).
  7064. +START and END optionally delimit a substring of STRING from which to read;
  7065. + they default to 0 and (length STRING) respectively.
  7066. +
  7067. +(read-from-string STRING &optional START END)Fintern
  7068. +Return the canonical symbol whose name is STRING.
  7069. +If there is none, one is created by this function and returned.
  7070. +A second optional argument specifies the obarray to use;
  7071. +it defaults to the value of `obarray'.
  7072. +
  7073. +(intern STR &optional OBARRAY)Fintern-soft
  7074. +Return the canonical symbol whose name is STRING, or nil if none exists.
  7075. +A second optional argument specifies the obarray to use;
  7076. +it defaults to the value of `obarray'.
  7077. +
  7078. +(intern-soft STR &optional OBARRAY)Fmapatoms
  7079. +Call FUNCTION on every symbol in OBARRAY.
  7080. +OBARRAY defaults to the value of `obarray'.
  7081. +
  7082. +(mapatoms FUNCTION &optional OBARRAY)Vobarray
  7083. +Symbol table for use by `intern' and `read'.
  7084. +It is a vector whose length ought to be prime for best results.
  7085. +The vector's contents don't make sense if examined from Lisp programs;
  7086. +to find all the symbols in an obarray, use `mapatoms'.Vvalues
  7087. +List of values of all expressions which were read, evaluated and printed.
  7088. +Order is reverse chronological.Vstandard-input
  7089. +Stream for read to get input from.
  7090. +See documentation of `read' for possible values.Vload-path
  7091. +*List of directories to search for files to load.
  7092. +Each element is a string (directory name) or nil (try default directory).
  7093. +Initialized based on EMACSLOADPATH environment variable, if any,
  7094. +otherwise to default specified by file `paths.h' when Emacs was built.Vload-in-progress
  7095. +Non-nil iff inside of `load'.Vafter-load-alist
  7096. +An alist of expressions to be evalled when particular files are loaded.
  7097. +Each element looks like (FILENAME FORMS...).
  7098. +When `load' is run and the file-name argument is FILENAME,
  7099. +the FORMS in the corresponding element are executed at the end of loading.
  7100. +
  7101. +FILENAME must match exactly!  Normally FILENAME is the name of a library,
  7102. +with no directory specified, since that is how `load' is normally called.
  7103. +An error in FORMS does not undo the load,
  7104. +but does prevent execution of the rest of the FORMS.Vload-history
  7105. +Alist mapping source file names to symbols and features.
  7106. +Each alist element is a list that starts with a file name,
  7107. +except for one element (optional) that starts with nil and describes
  7108. +definitions evaluated from buffers not visiting files.
  7109. +The remaining elements of each list are symbols defined as functions
  7110. +or variables, and cons cells `(provide . FEATURE)' and `(require . FEATURE)'.Vcurrent-load-list
  7111. +Used for internal purposes by `load'.Fmake-abbrev-table
  7112. +Create a new, empty abbrev table object.
  7113. +
  7114. +(make-abbrev-table)Fclear-abbrev-table
  7115. +Undefine all abbrevs in abbrev table TABLE, leaving it empty.
  7116. +
  7117. +(clear-abbrev-table TABLE)Fdefine-abbrev
  7118. +Define an abbrev in TABLE named NAME, to expand to EXPANSION and call HOOK.
  7119. +NAME and EXPANSION are strings.
  7120. +To undefine an abbrev, define it with EXPANSION = nil.
  7121. +If HOOK is non-nil, it should be a function of no arguments;
  7122. +it is called after EXPANSION is inserted.
  7123. +
  7124. +(define-abbrev TABLE NAME EXPANSION &optional HOOK COUNT)Fdefine-global-abbrev
  7125. +Define ABBREV as a global abbreviation for EXPANSION.
  7126. +
  7127. +(define-global-abbrev NAME EXPANSION)Fdefine-mode-abbrev
  7128. +Define ABBREV as a mode-specific abbreviation for EXPANSION.
  7129. +
  7130. +(define-mode-abbrev NAME EXPANSION)Fabbrev-symbol
  7131. +Return the symbol representing abbrev named ABBREV.
  7132. +This symbol's name is ABBREV, but it is not the canonical symbol of that name;
  7133. +it is interned in an abbrev-table rather than the normal obarray.
  7134. +The value is nil if that abbrev is not defined.
  7135. +Optional second arg TABLE is abbrev table to look it up in.
  7136. +The default is to try buffer's mode-specific abbrev table, then global table.
  7137. +
  7138. +(abbrev-symbol ABBREV &optional TABLE)Fabbrev-expansion
  7139. +Return the string that ABBREV expands into in the current buffer.
  7140. +Optionally specify an abbrev table as second arg;
  7141. +then ABBREV is looked up in that table only.
  7142. +
  7143. +(abbrev-expansion ABBREV &optional TABLE)Fexpand-abbrev
  7144. +Expand the abbrev before point, if there is an abbrev there.
  7145. +Effective when explicitly called even when `abbrev-mode' is nil.
  7146. +Returns t if expansion took place.
  7147. +
  7148. +(expand-abbrev)Funexpand-abbrev
  7149. +Undo the expansion of the last abbrev that expanded.
  7150. +This differs from ordinary undo in that other editing done since then
  7151. +is not undone.
  7152. +
  7153. +(unexpand-abbrev)Finsert-abbrev-table-description
  7154. +Insert before point a full description of abbrev table named NAME.
  7155. +NAME is a symbol whose value is an abbrev table.
  7156. +If optional 2nd arg HUMAN is non-nil, a human-readable description is inserted.
  7157. +Otherwise the description is an expression,
  7158. +a call to `define-abbrev-table', which would
  7159. +define the abbrev table NAME exactly as it is currently defined.
  7160. +
  7161. +(insert-abbrev-table-description NAME &optional READABLE)Fdefine-abbrev-table
  7162. +Define TABNAME (a symbol) as an abbrev table name.
  7163. +Define abbrevs in it according to DEFINITIONS, which is a list of elements
  7164. +of the form (ABBREVNAME EXPANSION HOOK USECOUNT).
  7165. +
  7166. +(define-abbrev-table TABNAME DEFNS)Vabbrev-table-name-list
  7167. +List of symbols whose values are abbrev tables.Vglobal-abbrev-table
  7168. +The abbrev table whose abbrevs affect all buffers.
  7169. +Each buffer may also have a local abbrev table.
  7170. +If it does, the local table overrides the global one
  7171. +for any particular abbrev defined in both.Vfundamental-mode-abbrev-table
  7172. +The abbrev table of mode-specific abbrevs for Fundamental Mode.Vlast-abbrev
  7173. +The abbrev-symbol of the last abbrev expanded.  See `abbrev-symbol'.Vlast-abbrev-text
  7174. +The exact text of the last abbrev expanded.
  7175. +nil if the abbrev has already been unexpanded.Vlast-abbrev-location
  7176. +The location of the start of the last abbrev expanded.Vabbrev-start-location
  7177. +Buffer position for `expand-abbrev' to use as the start of the abbrev.
  7178. +nil means use the word before point as the abbrev.
  7179. +Calling `expand-abbrev' sets this to nil.Vabbrev-start-location-buffer
  7180. +Buffer that `abbrev-start-location' has been set for.
  7181. +Trying to expand an abbrev in any other buffer clears `abbrev-start-location'.Vlocal-abbrev-table
  7182. +Local (mode-specific) abbrev table of current buffer.Vabbrevs-changed
  7183. +Set non-nil by defining or altering any word abbrevs.
  7184. +This causes `save-some-buffers' to offer to save the abbrevs.Vabbrev-all-caps
  7185. +*Set non-nil means expand multi-word abbrevs all caps if abbrev was so.Vpre-abbrev-expand-hook
  7186. +Function or functions to be called before abbrev expansion is done.
  7187. +This is the first thing that `expand-abbrev' does, and so this may change
  7188. +the current abbrev table before abbrev lookup happens.Fsyntax-table-p
  7189. +Return t if ARG is a syntax table.
  7190. +Any vector of 256 elements will do.
  7191. +
  7192. +(syntax-table-p OBJ)Fsyntax-table
  7193. +Return the current syntax table.
  7194. +This is the one specified by the current buffer.
  7195. +
  7196. +(syntax-table)Fstandard-syntax-table
  7197. +Return the standard syntax table.
  7198. +This is the one used for new buffers.
  7199. +
  7200. +(standard-syntax-table)Fcopy-syntax-table
  7201. +Construct a new syntax table and return it.
  7202. +It is a copy of the TABLE, which defaults to the standard syntax table.
  7203. +
  7204. +(copy-syntax-table &optional TABLE)Fset-syntax-table
  7205. +Select a new syntax table for the current buffer.
  7206. +One argument, a syntax table.
  7207. +
  7208. +(set-syntax-table TABLE)Fchar-syntax
  7209. +Return the syntax code of CHAR, described by a character.
  7210. +For example, if CHAR is a word constituent, the character `?w' is returned.
  7211. +The characters that correspond to various syntax codes
  7212. +are listed in the documentation of `modify-syntax-entry'.
  7213. +
  7214. +(char-syntax CH)Fmatching-paren
  7215. +Return the matching parenthesis of CHAR, or nil if none.
  7216. +
  7217. +(matching-paren CH)Fmodify-syntax-entry
  7218. +Set syntax for character CHAR according to string S.
  7219. +The syntax is changed only for table TABLE, which defaults to
  7220. + the current buffer's syntax table.
  7221. +The first character of S should be one of the following:
  7222. +  Space or -  whitespace syntax.    w   word constituent.
  7223. +  _           symbol constituent.   .   punctuation.
  7224. +  (           open-parenthesis.     )   close-parenthesis.
  7225. +  "           string quote.         \   escape.
  7226. +  $           paired delimiter.     '   expression quote or prefix operator.
  7227. +  <           comment starter.      >   comment ender.
  7228. +  /           character-quote.      @   inherit from `standard-syntax-table'.
  7229. +
  7230. +Only single-character comment start and end sequences are represented thus.
  7231. +Two-character sequences are represented as described below.
  7232. +The second character of S is the matching parenthesis,
  7233. + used only if the first character is `(' or `)'.
  7234. +Any additional characters are flags.
  7235. +Defined flags are the characters 1, 2, 3, 4, b, and p.
  7236. + 1 means C is the start of a two-char comment start sequence.
  7237. + 2 means C is the second character of such a sequence.
  7238. + 3 means C is the start of a two-char comment end sequence.
  7239. + 4 means C is the second character of such a sequence.
  7240. +
  7241. +There can be up to two orthogonal comment sequences. This is to support
  7242. +language modes such as C++.  By default, all comment sequences are of style
  7243. +a, but you can set the comment sequence style to b (on the second character
  7244. +of a comment-start, or the first character of a comment-end sequence) using
  7245. +this flag:
  7246. + b means C is part of comment sequence b.
  7247. +
  7248. + p means C is a prefix character for `backward-prefix-chars';
  7249. +   such characters are treated as whitespace when they occur
  7250. +   between expressions.
  7251. +
  7252. +(modify-syntax-entry CHAR S &optional TABLE)Fdescribe-syntax
  7253. +Describe the syntax specifications in the syntax table.
  7254. +The descriptions are inserted in a buffer, which is then displayed.
  7255. +
  7256. +(describe-syntax)Fforward-word
  7257. +Move point forward ARG words (backward if ARG is negative).
  7258. +Normally returns t.
  7259. +If an edge of the buffer is reached, point is left there
  7260. +and nil is returned.
  7261. +
  7262. +(forward-word COUNT)Fforward-comment
  7263. +Move forward across up to N comments.  If N is negative, move backward.
  7264. +Stop scanning if we find something other than a comment or whitespace.
  7265. +Set point to where scanning stops.
  7266. +If N comments are found as expected, with nothing except whitespace
  7267. +between them, return t; otherwise return nil.
  7268. +
  7269. +(forward-comment COUNT)Fscan-lists
  7270. +Scan from character number FROM by COUNT lists.
  7271. +Returns the character number of the position thus found.
  7272. +
  7273. +If DEPTH is nonzero, paren depth begins counting from that value,
  7274. +only places where the depth in parentheses becomes zero
  7275. +are candidates for stopping; COUNT such places are counted.
  7276. +Thus, a positive value for DEPTH means go out levels.
  7277. +
  7278. +Comments are ignored if `parse-sexp-ignore-comments' is non-nil.
  7279. +
  7280. +If the beginning or end of (the accessible part of) the buffer is reached
  7281. +and the depth is wrong, an error is signaled.
  7282. +If the depth is right but the count is not used up, nil is returned.
  7283. +
  7284. +(scan-lists FROM COUNT DEPTH)Fscan-sexps
  7285. +Scan from character number FROM by COUNT balanced expressions.
  7286. +If COUNT is negative, scan backwards.
  7287. +Returns the character number of the position thus found.
  7288. +
  7289. +Comments are ignored if `parse-sexp-ignore-comments' is non-nil.
  7290. +
  7291. +If the beginning or end of (the accessible part of) the buffer is reached
  7292. +in the middle of a parenthetical grouping, an error is signaled.
  7293. +If the beginning or end is reached between groupings
  7294. +but before count is used up, nil is returned.
  7295. +
  7296. +(scan-sexps FROM COUNT)Fbackward-prefix-chars
  7297. +Move point backward over any number of chars with prefix syntax.
  7298. +This includes chars with "quote" or "prefix" syntax (' or p).
  7299. +
  7300. +(backward-prefix-chars)Fparse-partial-sexp
  7301. +Parse Lisp syntax starting at FROM until TO; return status of parse at TO.
  7302. +Parsing stops at TO or when certain criteria are met;
  7303. + point is set to where parsing stops.
  7304. +If fifth arg STATE is omitted or nil,
  7305. + parsing assumes that FROM is the beginning of a function.
  7306. +Value is a list of eight elements describing final state of parsing:
  7307. + 0. depth in parens.
  7308. + 1. character address of start of innermost containing list; nil if none.
  7309. + 2. character address of start of last complete sexp terminated.
  7310. + 3. non-nil if inside a string.
  7311. +    (it is the character that will terminate the string.)
  7312. + 4. t if inside a comment.
  7313. + 5. t if following a quote character.
  7314. + 6. the minimum paren-depth encountered during this scan.
  7315. + 7. t if in a comment of style `b'.
  7316. +If third arg TARGETDEPTH is non-nil, parsing stops if the depth
  7317. +in parentheses becomes equal to TARGETDEPTH.
  7318. +Fourth arg STOPBEFORE non-nil means stop when come to
  7319. + any character that starts a sexp.
  7320. +Fifth arg STATE is an eight-list like what this function returns.
  7321. +It is used to initialize the state of the parse.  Its second and third
  7322. +elements are ignored.
  7323. +Sixth args COMMENTSTOP non-nil means stop at the start of a comment.
  7324. +
  7325. +(parse-partial-sexp FROM TO &optional TARGETDEPTH STOPBEFORE STATE COMMENTSTOP)Vparse-sexp-ignore-comments
  7326. +Non-nil means `forward-sexp', etc., should treat comments as whitespace.Vwords-include-escapes
  7327. +Non-nil means `forward-word', etc., should treat escape chars part of words.Fml-if
  7328. +Mocklisp version of `if'.Fml-nargs
  7329. +Number of arguments to currently executing mocklisp function.
  7330. +
  7331. +(ml-nargs)Fml-arg
  7332. +Argument number N to currently executing mocklisp function.
  7333. +
  7334. +(ml-arg N &optional PROMPT)Fml-interactive
  7335. +True if currently executing mocklisp function was called interactively.
  7336. +
  7337. +(ml-interactive)Fml-provide-prefix-argument
  7338. +Evaluate second argument, using first argument as prefix arg value.Fml-prefix-argument-loop
  7339. +Fml-substr
  7340. +Return a substring of STRING, starting at index FROM and of length LENGTH.
  7341. +If either FROM or LENGTH is negative, the length of STRING is added to it.
  7342. +
  7343. +(ml-substr STRING FROM TO)Finsert-string
  7344. +Mocklisp-compatibility insert function.
  7345. +Like the function `insert' except that any argument that is a number
  7346. +is converted into a string by expressing it in decimal.Fbyte-code
  7347. +Function used internally in byte-compiled code.
  7348. +The first argument is a string of byte code; the second, a vector of constants;
  7349. +the third, the maximum stack depth used in this function.
  7350. +If the third argument is incorrect, Emacs may crash.
  7351. +
  7352. +(byte-code BYTESTR VECTOR MAXDEPTH)Vbyte-code-meter
  7353. +A vector of vectors which holds a histogram of byte-code usage.
  7354. +(aref (aref byte-code-meter 0) CODE) indicates how many times the byte
  7355. +opcode CODE has been executed.
  7356. +(aref (aref byte-code-meter CODE1) CODE2), where CODE1 is not 0,
  7357. +indicates how many times the byte opcodes CODE1 and CODE2 have been
  7358. +executed in succession.Vbyte-metering-on
  7359. +If non-nil, keep profiling information on byte code usage.
  7360. +The variable byte-code-meter indicates how often each byte opcode is used.
  7361. +If a symbol has a property named `byte-code-meter' whose value is an
  7362. +integer, it is incremented each time that symbol's function is called.Fprocessp
  7363. +Return t if OBJECT is a process.
  7364. +
  7365. +(processp OBJ)Fget-process
  7366. +Return the process named NAME, or nil if there is none.
  7367. +
  7368. +(get-process NAME)Fget-buffer-process
  7369. +Return the (or, a) process associated with BUFFER.
  7370. +BUFFER may be a buffer or the name of one.
  7371. +
  7372. +(get-buffer-process NAME)Fdelete-process
  7373. +Delete PROCESS: kill it and forget about it immediately.
  7374. +PROCESS may be a process, a buffer, the name of a process or buffer, or
  7375. +nil, indicating the current buffer's process.
  7376. +
  7377. +(delete-process PROC)Fprocess-status
  7378. +Return the status of PROCESS: a symbol, one of these:
  7379. +run  -- for a process that is running.
  7380. +stop -- for a process stopped but continuable.
  7381. +exit -- for a process that has exited.
  7382. +signal -- for a process that has got a fatal signal.
  7383. +open -- for a network stream connection that is open.
  7384. +closed -- for a network stream connection that is closed.
  7385. +nil -- if arg is a process name and no such process exists.
  7386. +PROCESS may be a process, a buffer, the name of a process or buffer, or
  7387. +nil, indicating the current buffer's process.
  7388. +
  7389. +(process-status PROC)Fprocess-exit-status
  7390. +Return the exit status of PROCESS or the signal number that killed it.
  7391. +If PROCESS has not yet exited or died, return 0.
  7392. +
  7393. +(process-exit-status PROC)Fprocess-id
  7394. +Return the process id of PROCESS.
  7395. +This is the pid of the Unix process which PROCESS uses or talks to.
  7396. +For a network connection, this value is nil.
  7397. +
  7398. +(process-id PROC)Fprocess-name
  7399. +Return the name of PROCESS, as a string.
  7400. +This is the name of the program invoked in PROCESS,
  7401. +possibly modified to make it unique among process names.
  7402. +
  7403. +(process-name PROC)Fprocess-command
  7404. +Return the command that was executed to start PROCESS.
  7405. +This is a list of strings, the first string being the program executed
  7406. +and the rest of the strings being the arguments given to it.
  7407. +For a non-child channel, this is nil.
  7408. +
  7409. +(process-command PROC)Fset-process-buffer
  7410. +Set buffer associated with PROCESS to BUFFER (a buffer, or nil).
  7411. +
  7412. +(set-process-buffer PROC BUFFER)Fprocess-buffer
  7413. +Return the buffer PROCESS is associated with.
  7414. +Output from PROCESS is inserted in this buffer
  7415. +unless PROCESS has a filter.
  7416. +
  7417. +(process-buffer PROC)Fprocess-mark
  7418. +Return the marker for the end of the last output from PROCESS.
  7419. +
  7420. +(process-mark PROC)Fset-process-filter
  7421. +Give PROCESS the filter function FILTER; nil means no filter.
  7422. +t means stop accepting output from the process.
  7423. +When a process has a filter, each time it does output
  7424. +the entire string of output is passed to the filter.
  7425. +The filter gets two arguments: the process and the string of output.
  7426. +If the process has a filter, its buffer is not used for output.
  7427. +
  7428. +(set-process-filter PROC FILTER)Fprocess-filter
  7429. +Returns the filter function of PROCESS; nil if none.
  7430. +See `set-process-filter' for more info on filter functions.
  7431. +
  7432. +(process-filter PROC)Fset-process-sentinel
  7433. +Give PROCESS the sentinel SENTINEL; nil for none.
  7434. +The sentinel is called as a function when the process changes state.
  7435. +It gets two arguments: the process, and a string describing the change.
  7436. +
  7437. +(set-process-sentinel PROC SENTINEL)Fprocess-sentinel
  7438. +Return the sentinel of PROCESS; nil if none.
  7439. +See `set-process-sentinel' for more info on sentinels.
  7440. +
  7441. +(process-sentinel PROC)Fset-process-window-size
  7442. +Tell PROCESS that it has logical window size HEIGHT and WIDTH.
  7443. +
  7444. +(set-process-window-size PROC HEIGHT WIDTH)Fprocess-kill-without-query
  7445. +Say no query needed if PROCESS is running when Emacs is exited.
  7446. +Optional second argument if non-nil says to require a query.
  7447. +Value is t if a query was formerly required.
  7448. +
  7449. +(process-kill-without-query PROC &optional VALUE)Fprocess-connection
  7450. +Return the connection type of `PROCESS'.
  7451. +The value is `nil' for a pipe,
  7452. +`t' or `pty' for a pty, or `stream' for a socket connection.
  7453. +
  7454. +(process-connection PROCESS)Flist-processes
  7455. +Display a list of all processes.
  7456. +(Any processes listed as Exited or Signaled are actually eliminated
  7457. +after the listing is made.)
  7458. +
  7459. +(list-processes)Fprocess-list
  7460. +Return a list of all processes.
  7461. +
  7462. +(process-list)Fstart-process
  7463. +Start a program in a subprocess.  Return the process object for it.
  7464. +Args are NAME BUFFER PROGRAM &rest PROGRAM-ARGS
  7465. +NAME is name for process.  It is modified if necessary to make it unique.
  7466. +BUFFER is the buffer or (buffer-name) to associate with the process.
  7467. + Process output goes at end of that buffer, unless you specify
  7468. + an output stream or filter function to handle the output.
  7469. + BUFFER may be also nil, meaning that this process is not associated
  7470. + with any buffer
  7471. +Third arg is program file name.  It is searched for as in the shell.
  7472. +Remaining arguments are strings to give program as arguments.Fopen-network-stream
  7473. +Open a TCP connection for a service to a host.
  7474. +Returns a subprocess-object to represent the connection.
  7475. +Input and output work as for subprocesses; `delete-process' closes it.
  7476. +Args are NAME BUFFER HOST SERVICE.
  7477. +NAME is name for process.  It is modified if necessary to make it unique.
  7478. +BUFFER is the buffer (or buffer-name) to associate with the process.
  7479. + Process output goes at end of that buffer, unless you specify
  7480. + an output stream or filter function to handle the output.
  7481. + BUFFER may be also nil, meaning that this process is not associated
  7482. + with any buffer
  7483. +Third arg is name of the host to connect to, or its IP address.
  7484. +Fourth arg SERVICE is name of the service desired, or an integer
  7485. + specifying a port number to connect to.
  7486. +
  7487. +(open-network-stream NAME BUFFER HOST SERVICE)Faccept-process-output
  7488. +Allow any pending output from subprocesses to be read by Emacs.
  7489. +It is read into the process' buffers or given to their filter functions.
  7490. +Non-nil arg PROCESS means do not return until some output has been received
  7491. +from PROCESS.
  7492. +Non-nil second arg TIMEOUT and third arg TIMEOUT-MSECS are number of
  7493. +seconds and microseconds to wait; return after that much time whether
  7494. +or not there is input.
  7495. +Return non-nil iff we received any output before the timeout expired.
  7496. +
  7497. +(accept-process-output &optional PROC TIMEOUT TIMEOUT-MSECS)Fwaiting-for-user-input-p
  7498. +Returns non-nil if emacs is waiting for input from the user.
  7499. +This is intended for use by asynchronous process output filters and sentinels.
  7500. +
  7501. +(waiting-for-user-input-p)Fprocess-send-region
  7502. +Send current contents of region as input to PROCESS.
  7503. +PROCESS may be a process, a buffer, the name of a process or buffer, or
  7504. +nil, indicating the current buffer's process.
  7505. +Called from program, takes three arguments, PROCESS, START and END.
  7506. +If the region is more than 500 characters long,
  7507. +it is sent in several bunches.  This may happen even for shorter regions.
  7508. +Output from processes can arrive in between bunches.
  7509. +
  7510. +(process-send-region PROCESS START END)Fprocess-send-string
  7511. +Send PROCESS the contents of STRING as input.
  7512. +PROCESS may be a process, a buffer, the name of a process or buffer, or
  7513. +nil, indicating the current buffer's process.
  7514. +If STRING is more than 500 characters long,
  7515. +it is sent in several bunches.  This may happen even for shorter strings.
  7516. +Output from processes can arrive in between bunches.
  7517. +
  7518. +(process-send-string PROCESS STRING)Finterrupt-process
  7519. +Interrupt process PROCESS.  May be process or name of one.
  7520. +PROCESS may be a process, a buffer, or the name of a process or buffer.
  7521. +nil or no arg means current buffer's process.
  7522. +Second arg CURRENT-GROUP non-nil means send signal to
  7523. +the current process-group of the process's controlling terminal
  7524. +rather than to the process's own process group.
  7525. +If the process is a shell, this means interrupt current subjob
  7526. +rather than the shell.
  7527. +
  7528. +(interrupt-process &optional PROCESS CURRENT-GROUP)Fkill-process
  7529. +Kill process PROCESS.  May be process or name of one.
  7530. +See function `interrupt-process' for more details on usage.
  7531. +
  7532. +(kill-process &optional PROCESS CURRENT-GROUP)Fquit-process
  7533. +Send QUIT signal to process PROCESS.  May be process or name of one.
  7534. +See function `interrupt-process' for more details on usage.
  7535. +
  7536. +(quit-process &optional PROCESS CURRENT-GROUP)Fstop-process
  7537. +Stop process PROCESS.  May be process or name of one.
  7538. +See function `interrupt-process' for more details on usage.
  7539. +
  7540. +(stop-process &optional PROCESS CURRENT-GROUP)Fcontinue-process
  7541. +Continue process PROCESS.  May be process or name of one.
  7542. +See function `interrupt-process' for more details on usage.
  7543. +
  7544. +(continue-process &optional PROCESS CURRENT-GROUP)Fsignal-process
  7545. +Send the process with number PID the signal with code CODE.
  7546. +Both PID and CODE are integers.
  7547. +
  7548. +(signal-process PID SIG)Fprocess-send-eof
  7549. +Make PROCESS see end-of-file in its input.
  7550. +Eof comes after any text already sent to it.
  7551. +PROCESS may be a process, a buffer, the name of a process or buffer, or
  7552. +nil, indicating the current buffer's process.
  7553. +If PROCESS is a network connection, or is a process communicating
  7554. +through a pipe (as opposed to a pty), then you cannot send any more
  7555. +text to PROCESS after you call this function.
  7556. +
  7557. +(process-send-eof &optional PROCESS)Vdelete-exited-processes
  7558. +*Non-nil means delete processes immediately when they exit.
  7559. +nil means don't delete them until `list-processes' is run.Vprocess-connection-type
  7560. +Control type of device used to communicate with subprocesses.
  7561. +Values are nil to use a pipe, or t or `pty' to use a pty.
  7562. +The value has no effect if the system has no ptys or if all ptys are busy:
  7563. +then a pipe is used in any case.
  7564. +The value takes effect when `start-process' is called.Fcall-process
  7565. +Call PROGRAM synchronously in separate process.
  7566. +The program's input comes from file INFILE (nil means `/dev/null').
  7567. +Insert output in BUFFER before point; t means current buffer;
  7568. + nil for BUFFER means discard it; 0 means discard and don't wait.
  7569. +Fourth arg DISPLAY non-nil means redisplay buffer as output is inserted.
  7570. +Remaining arguments are strings passed as command arguments to PROGRAM.
  7571. +If BUFFER is 0, returns immediately with value nil.
  7572. +Otherwise waits for PROGRAM to terminate
  7573. +and returns a numeric exit status or a signal description string.
  7574. +If you quit, the process is killed with SIGINT, or SIGKILL if you quit again.Fcall-process-region
  7575. +Send text from START to END to a synchronous process running PROGRAM.
  7576. +Delete the text if fourth arg DELETE is non-nil.
  7577. +Insert output in BUFFER before point; t means current buffer;
  7578. + nil for BUFFER means discard it; 0 means discard and don't wait.
  7579. +Sixth arg DISPLAY non-nil means redisplay buffer as output is inserted.
  7580. +Remaining args are passed to PROGRAM at startup as command args.
  7581. +If BUFFER is nil, returns immediately with value nil.
  7582. +Otherwise waits for PROGRAM to terminate
  7583. +and returns a numeric exit status or a signal description string.
  7584. +If you quit, the process is killed with SIGINT, or SIGKILL if you quit again.Fgetenv
  7585. +Return the value of environment variable VAR, as a string.
  7586. +VAR should be a string.  Value is nil if VAR is undefined in the environment.
  7587. +This function consults the variable ``process-environment'' for its value.
  7588. +
  7589. +(getenv VAR)Vbinary-process-input
  7590. +*If non-nil then new subprocesses are assumed to take binary input.Vbinary-process-output
  7591. +*If non-nil then new subprocesses are assumed to produce binary output.Vshell-file-name
  7592. +*File name to load inferior shells from.
  7593. +Initialized from the SHELL environment variable.Vexec-path
  7594. +*List of directories to search programs to run in subprocesses.
  7595. +Each element is a string (directory name) or nil (try default directory).Vexec-directory
  7596. +Directory of architecture-dependent files that come with GNU Emacs,
  7597. +especially executable programs intended for Emacs to invoke.Vdata-directory
  7598. +Directory of architecture-independent files that come with GNU Emacs,
  7599. +intended for Emacs to use.Vdoc-directory
  7600. +Directory containing the DOC file that comes with GNU Emacs.
  7601. +This is usually the same as data-directory.Vconfigure-info-directory
  7602. +For internal use by the build procedure only.
  7603. +This is the name of the directory in which the build procedure installed
  7604. +Emacs's info files; the default value for Info-default-directory-list
  7605. +includes this.Vprocess-environment
  7606. +List of environment variables for subprocesses to inherit.
  7607. +Each element should be a string of the form ENVVARNAME=VALUE.
  7608. +The environment which Emacs inherits is placed in this variable
  7609. +when Emacs starts.Famiga-cut
  7610. +Copy string into Amiga clipboard.
  7611. +
  7612. +(amiga-cut ARG)Famiga-paste
  7613. +Returns text currently in the Amiga clipboard, or NIL if there is none.
  7614. +
  7615. +(amiga-paste)Vamiga-new-clip
  7616. +Set to t every time a new clip is put in the Amiga clipboardFamiga-put-icon
  7617. +Create an icon for FILE.
  7618. +If FORCE is non-nil create it unconditionally, otherwise only if one doesn't exist.
  7619. +Returns t if an icon was created, nil otherwise.
  7620. +
  7621. +(amiga-put-icon FILE FORCE)Vamiga-initialized
  7622. +Vamiga-malloc-bytes-used
  7623. +Number of malloc bytes used when emacs was dumpedVamiga-create-icons
  7624. +If non-nil, create icons when saving files.Vamiga-process-stack-size
  7625. +Size of stack for called processes. 0 means same size as emacs stack.Famiga-mouse-events
  7626. +Return number of pending mouse events from Intuition.
  7627. +
  7628. +(amiga-mouse-events)Famiga-proc-mouse-event
  7629. +Pulls a mouse event out of the mouse event buffer and dispatches
  7630. +the appropriate function to act upon this event.
  7631. +
  7632. +(amiga-proc-mouse-event)Famiga-get-mouse-event
  7633. +Get next mouse event out of mouse event buffer (com-letter (x y)).
  7634. +ARG non-nil means return nil immediately if no pending event;
  7635. +otherwise, wait for an event.
  7636. +
  7637. +(amiga-get-mouse-event ARG)Famiga-get-wb-event
  7638. +Get next Workbench event out of workbench event buffer (a file name).
  7639. +ARG non-nil means return nil immediately if no pending event;
  7640. +otherwise, wait for an event.
  7641. +
  7642. +(amiga-get-wb-event ARG)Famiga-set-foreground-color
  7643. +Use PEN as foreground color
  7644. +
  7645. +(amiga-set-foreground-color PEN)Famiga-set-background-color
  7646. +Use PEN as background color
  7647. +
  7648. +(amiga-set-background-color PEN)Famiga-set-inverse-fill-pen
  7649. +Use PEN's color for inverse fills (0-7 or 8 for reverse)
  7650. +
  7651. +(amiga-set-inverse-fill-pen PEN)Famiga-set-inverse-text-pen
  7652. +Use PEN's color for inverse fills (0-7 or 8 for reverse)
  7653. +
  7654. +(amiga-set-inverse-text-pen PEN)Famiga-set-font
  7655. +Set font used for window to FONT with given HEIGHT.
  7656. +The font used must be non-proportional.
  7657. +
  7658. +(amiga-set-font WFONT HEIGHT)Famiga-set-geometry
  7659. +Set Emacs window geometry and screen.
  7660. +First 4 parameters are the (X,Y) position of the top-left corner of the window
  7661. +and its WIDTH and HEIGHT. These must be big enough for an 11x4 characters window.
  7662. +If nil is given for any of these, that means to keep the same value as before.
  7663. +The optional argument SCREEN specifies which screen to use, nil stands for the
  7664. +same screen as the window is on, t stands for the default public screen (normally
  7665. +the Workbench), a string specifies a given public screen.
  7666. +If optional argument BACKDROP is t, a backdrop window is used.Famiga-get-window-geometry
  7667. +Get Emacs window geometry.
  7668. +a list returned is of the form:  (iconified x y width height backdrop)
  7669. +where x, y, width, height are integers, backdrop is t or nil and iconified
  7670. +is t if the window is iconified and nil otherwise
  7671. +
  7672. +(amiga-get-window-geometry)Famiga-get-screen-geometry
  7673. +Get geometry of the screen emacs window resides on.
  7674. +a list returned is of the form:  (name x y width height)
  7675. +where name is a string, x, y, width, height are integers.
  7676. +Only the public screen name is returned if the window is not currently open.
  7677. +In this last case, the name may be nil if the window will be opened on the
  7678. +default public screen.
  7679. +
  7680. +(amiga-get-screen-geometry)Famiga-iconify
  7681. +Toggle the emacs iconification state.
  7682. +
  7683. +(amiga-iconify)Famiga-set-icon-pos
  7684. +Set the X Y position of the icon for emacs when iconified.
  7685. +
  7686. +(amiga-set-icon-pos LISP-OBJECT X LISP-OBJECT Y)Famiga-activate-window
  7687. +Makes emacs window the currently active one.
  7688. +
  7689. +(amiga-activate-window)Famiga-window-to-front
  7690. +Pulls the emacs window to the front (including screen)
  7691. +
  7692. +(amiga-window-to-front)Famiga-window-to-back
  7693. +Pushes the emacs window to the back (including screen)
  7694. +
  7695. +(amiga-window-to-back)Famiga-popup-font-request
  7696. +Open an ASL Font Requester and return the value as cons of font name and font size.
  7697. +
  7698. +(amiga-popup-font-request)Vamiga-mouse-item
  7699. +Encoded representation of last mouse click, corresponding to
  7700. +numerical entries in amiga-mouse-map.Vamiga-mouse-pos
  7701. +Current x-y position of mouse by row, column as specified by font.Vamiga-remap-bsdel
  7702. +*If true, map DEL to Ctrl-D and Backspace to DEL. 
  7703. +This is the most convenient (and default) setting. If nil, don't remap.Vamiga-remap-numeric-keypad
  7704. +*If true, numeric keypad keys are prefixed with C-x C-^ K.
  7705. +This enables you to remap them, but causes problems with functions like
  7706. +isearch-forward-regexp on some keyboards. Default to true.Vamiga-mouse-initialized
  7707. +Set to true once lisp has been setup to process mouse commands.
  7708. +No mouse processing request (C-X C-^ M) will be queued while this is nil.Vamiga-wb-initialized
  7709. +Set to true once lisp has been setup to process workbench commands.
  7710. +No workbench processing request (C-X C-^ W) will be queued while this is nil.Famiga-arexx-wait
  7711. +Wait for an ARexx event (command or reply) before proceeding.
  7712. +
  7713. +(amiga-arexx-wait)Famiga-arexx-check-command
  7714. +Return t if command ID has finished, nil otherwise.
  7715. +
  7716. +(amiga-arexx-check-command ID)Famiga-arexx-get-next-msg
  7717. +Returns the oldest arexx msg sent to emacs rexx port.
  7718. +When you are through with this message call (amiga-arexx-reply).
  7719. +if the msg is not replied this function will continue to
  7720. +return that msg until it has been replied to.
  7721. +
  7722. +(amiga-arexx-get-next-msg)Famiga-arexx-get-msg-results
  7723. +Returns the results from MSGID. will be a list of the form:
  7724. +  (msgid resultcode secondary)
  7725. +
  7726. +If resultcode is 0 then secondary will be a string or nil.
  7727. +else resulcode will be greater than 0 and secondary will be
  7728. +an error-code (int).
  7729. +
  7730. +If MSGID has not yet completed nil is returned.
  7731. +if MSGID has been dealt with or is invalid and error will occur.
  7732. +
  7733. +(amiga-arexx-get-msg-results MSGID)Famiga-arexx-reply
  7734. +Replies to the first arexx message (the one got via amiga-arexx-get-event)
  7735. +with RC as return code.
  7736. +If RC=0, TEXT is the result, otherwise it is the error text. It can be nil.
  7737. +
  7738. +(amiga-arexx-reply RC TEXT)Famiga-arexx-send-command
  7739. +Sends a command to ARexx for execution.
  7740. +If the second arg is non-nil, the command is directly interpreted.
  7741. +Returns an integer that uniquely identifies this message.  This must
  7742. +then be used to get the results from the command.
  7743. +NOTE: this is very different from old way things worked.
  7744. +      earlier versions of emacs discarded successful results
  7745. +      and errors always got replied to becuase they caused failures
  7746. +      Neither of these are true now.This function is also no longer interactive.
  7747. +Use (amiga-arexx-do-command)
  7748. +
  7749. +
  7750. +(amiga-arexx-send-command STR &optional AS-FILE)Vamiga-arexx-initialized
  7751. +Set this to t when Emacs is ready to respond to ARexx messages.
  7752. +Fsun-window-init
  7753. +One time setup for using Sun Windows with mouse.
  7754. +Unless optional argument FORCE is non-nil, is a noop after its first call.
  7755. +Returns a number representing the file descriptor of the open Sun Window,
  7756. +or -1 if can not open it.
  7757. +
  7758. +(sun-window-init &optional FORCE)Fsit-for-millisecs
  7759. +Like sit-for, but ARG is milliseconds. 
  7760. +Perform redisplay, then wait for ARG milliseconds or until
  7761. +input is available.  Returns t if wait completed with no input.
  7762. +Redisplay does not happen if input is available before it starts.
  7763. +
  7764. +(sit-for-millisecs N)Fsleep-for-millisecs
  7765. +Pause, without updating display, for ARG milliseconds.
  7766. +
  7767. +(sleep-for-millisecs N)Fupdate-display
  7768. +Perform redisplay.
  7769. +
  7770. +(update-display)Fsun-change-cursor-icon
  7771. +Change the Sun mouse cursor icon.  ICON is a lisp vector whose 1st element
  7772. +is the X offset of the cursor hot-point, whose 2nd element is the Y offset
  7773. +of the cursor hot-point and whose 3rd element is the cursor pixel data
  7774. +expressed as a string.  If ICON is nil then the original arrow cursor is used
  7775. +
  7776. +(sun-change-cursor-icon ICON)Fsun-set-selection
  7777. +Set the current sunwindow selection to STRING.
  7778. +
  7779. +(sun-set-selection STR)Fsun-get-selection
  7780. +Return the current sunwindows selection as a string.
  7781. +
  7782. +(sun-get-selection)Fsun-menu-internal
  7783. +Set up a SunView pop-up menu and return the user's choice.
  7784. +Arguments WINDOW, X, Y, BUTTON, and MENU.
  7785. +*** User code should generally use sun-menu-evaluate ***
  7786. +
  7787. +Arguments WINDOW, X, Y, BUTTON, and MENU.
  7788. +Put MENU up in WINDOW at position X, Y.
  7789. +The BUTTON argument specifies the button to be released that selects an item:
  7790. +   1 = LEFT BUTTON
  7791. +   2 = MIDDLE BUTTON
  7792. +   4 = RIGHT BUTTON
  7793. +The MENU argument is a vector containing (STRING . VALUE) pairs.
  7794. +The VALUE of the selected item is returned.
  7795. +If the VALUE of the first pair is nil, then the first STRING will be used
  7796. +as a menu label.
  7797. +
  7798. +(sun-menu-internal WINDOW X-POSITION Y-POSITION BUTTON MENU)Vonly-global-abbrevs
  7799. +*t means user plans to use global abbrevs only.
  7800. +Makes the commands to define mode-specific abbrevs define global ones instead.Fabbrev-mode
  7801. +Toggle abbrev mode.
  7802. +With argument ARG, turn abbrev mode on iff ARG is positive.
  7803. +In abbrev mode, inserting an abbreviation causes it to expand
  7804. +and be replaced by its expansion.Vedit-abbrevs-map
  7805. +Keymap used in edit-abbrevs.Fkill-all-abbrevs
  7806. +Undefine all defined abbrevs.Finsert-abbrevs
  7807. +Insert after point a description of all defined abbrevs.
  7808. +Mark is set after the inserted text.Flist-abbrevs
  7809. +Display a list of all defined abbrevs.Fedit-abbrevs-mode
  7810. +Major mode for editing the list of abbrev definitions.
  7811. +\{edit-abbrevs-map}Fedit-abbrevs
  7812. +Alter abbrev definitions by editing a list of them.
  7813. +Selects a buffer containing a list of abbrev definitions.
  7814. +You can edit them and type \<edit-abbrevs-map>\[edit-abbrevs-redefine] to redefine abbrevs
  7815. +according to your editing.
  7816. +Buffer contains a header line for each abbrev table,
  7817. + which is the abbrev table name in parentheses.
  7818. +This is followed by one line per abbrev in that table:
  7819. +NAME   USECOUNT   EXPANSION   HOOK
  7820. +where NAME and EXPANSION are strings with quotes,
  7821. +USECOUNT is an integer, and HOOK is any valid function
  7822. +or may be omitted (it is usually omitted).Fedit-abbrevs-redefine
  7823. +Redefine abbrevs according to current buffer contents.Fdefine-abbrevs
  7824. +Define abbrevs according to current visible buffer contents.
  7825. +See documentation of `edit-abbrevs' for info on the format of the
  7826. +text you must have in the buffer.
  7827. +With argument, eliminate all abbrev definitions except
  7828. +the ones defined from the buffer now.Fread-abbrev-file
  7829. +Read abbrev definitions from file written with `write-abbrev-file'.
  7830. +Optional argument FILE is the name of the file to read;
  7831. +it defaults to the value of `abbrev-file-name'.
  7832. +Optional second argument QUIETLY non-nil means don't print anything.Fquietly-read-abbrev-file
  7833. +Read abbrev definitions from file written with write-abbrev-file.
  7834. +Optional argument FILE is the name of the file to read;
  7835. +it defaults to the value of `abbrev-file-name'.
  7836. +Does not print anything.Fwrite-abbrev-file
  7837. +Write all abbrev definitions to a file of Lisp code.
  7838. +The file written can be loaded in another session to define the same abbrevs.
  7839. +The argument FILE is the file name to write.Fadd-mode-abbrev
  7840. +Define mode-specific abbrev for last word(s) before point.
  7841. +Argument is how many words before point form the expansion;
  7842. +or zero means the region is the expansion.
  7843. +A negative argument means to undefine the specified abbrev.
  7844. +Reads the abbreviation in the minibuffer.
  7845. +
  7846. +Don't use this function in a Lisp program; use `define-abbrev' instead.Fadd-global-abbrev
  7847. +Define global (all modes) abbrev for last word(s) before point.
  7848. +The prefix argument specifies the number of words before point that form the
  7849. +expansion; or zero means the region is the expansion.
  7850. +A negative argument means to undefine the specified abbrev.
  7851. +This command uses the minibuffer to read the abbreviation.
  7852. +
  7853. +Don't use this function in a Lisp program; use `define-abbrev' instead.Finverse-add-mode-abbrev
  7854. +Define last word before point as a mode-specific abbrev.
  7855. +With prefix argument N, defines the Nth word before point.
  7856. +This command uses the minibuffer to read the expansion.
  7857. +Expands the abbreviation after defining it.Finverse-add-global-abbrev
  7858. +Define last word before point as a global (mode-independent) abbrev.
  7859. +With prefix argument N, defines the Nth word before point.
  7860. +This command uses the minibuffer to read the expansion.
  7861. +Expands the abbreviation after defining it.Fabbrev-prefix-mark
  7862. +Mark current point as the beginning of an abbrev.
  7863. +Abbrev to be expanded starts here rather than at beginning of word.
  7864. +This way, you can expand an abbrev with a prefix: insert the prefix,
  7865. +use this command, then insert the abbrev.Fexpand-region-abbrevs
  7866. +For abbrev occurrence in the region, offer to expand it.
  7867. +The user is asked to type y or n for each occurrence.
  7868. +A prefix argument means don't query; expand all abbrevs.
  7869. +If called from a Lisp program, arguments are START END &optional NOQUERY.VBuffer-menu-mode-map
  7870. +FBuffer-menu-mode
  7871. +Major mode for editing a list of buffers.
  7872. +Each line describes one of the buffers in Emacs.
  7873. +Letters do not insert themselves; instead, they are commands.
  7874. +\<Buffer-menu-mode-map>
  7875. +\[Buffer-menu-mouse-select] -- select buffer you click on, in place of the buffer menu.
  7876. +\[Buffer-menu-this-window] -- select current line's buffer in place of the buffer menu.
  7877. +\[Buffer-menu-other-window] -- select that buffer in another window,
  7878. +  so the buffer menu buffer remains visible in its window.
  7879. +\[Buffer-menu-switch-other-window] -- make another window display that buffer.
  7880. +\[Buffer-menu-mark] -- mark current line's buffer to be displayed.
  7881. +\[Buffer-menu-select] -- select current line's buffer.
  7882. +  Also show buffers marked with m, in other windows.
  7883. +\[Buffer-menu-1-window] -- select that buffer in full-frame window.
  7884. +\[Buffer-menu-2-window] -- select that buffer in one window,
  7885. +  together with buffer selected before this one in another window.
  7886. +\[Buffer-menu-visit-tags-table] -- visit-tags-table this buffer.
  7887. +\[Buffer-menu-not-modified] -- clear modified-flag on that buffer.
  7888. +\[Buffer-menu-save] -- mark that buffer to be saved, and move down.
  7889. +\[Buffer-menu-delete] -- mark that buffer to be deleted, and move down.
  7890. +\[Buffer-menu-delete-backwards] -- mark that buffer to be deleted, and move up.
  7891. +\[Buffer-menu-execute] -- delete or save marked buffers.
  7892. +\[Buffer-menu-unmark] -- remove all kinds of marks from current line.
  7893. +  With prefix argument, also move up one line.
  7894. +\[Buffer-menu-backup-unmark] -- back up a line and remove marks.
  7895. +\[Buffer-menu-toggle-read-only] -- toggle read-only status of buffer on this line.FBuffer-menu-buffer
  7896. +Return buffer described by this line of buffer menu.Fbuffer-menu
  7897. +Make a menu of buffers so you can save, delete or select them.
  7898. +With argument, show only buffers that are visiting files.
  7899. +Type ? after invocation to get help on commands available.
  7900. +Type q immediately to make the buffer menu go away and to restore
  7901. +previous window configuration.FBuffer-menu-quit
  7902. +Quit the buffer menu.FBuffer-menu-mark
  7903. +Mark buffer on this line for being displayed by \<Buffer-menu-mode-map>\[Buffer-menu-select] command.FBuffer-menu-unmark
  7904. +Cancel all requested operations on buffer on this line and move down.
  7905. +Optional ARG means move up.FBuffer-menu-backup-unmark
  7906. +Move up and cancel all requested operations on buffer on line above.FBuffer-menu-delete
  7907. +Mark buffer on this line to be deleted by \<Buffer-menu-mode-map>\[Buffer-menu-execute] command.FBuffer-menu-delete-backwards
  7908. +Mark buffer on this line to be deleted by \<Buffer-menu-mode-map>\[Buffer-menu-execute] command
  7909. +and then move up one lineFBuffer-menu-save
  7910. +Mark buffer on this line to be saved by \<Buffer-menu-mode-map>\[Buffer-menu-execute] command.FBuffer-menu-not-modified
  7911. +Mark buffer on this line as unmodified (no changes to save).FBuffer-menu-execute
  7912. +Save and/or delete buffers marked with \<Buffer-menu-mode-map>\[Buffer-menu-save] or \<Buffer-menu-mode-map>\[Buffer-menu-delete] commands.FBuffer-menu-select
  7913. +Select this line's buffer; also display buffers marked with `>'.
  7914. +You can mark buffers with the \<Buffer-menu-mode-map>\[Buffer-menu-mark] command.FBuffer-menu-visit-tags-table
  7915. +Visit the tags table in the buffer on this line.  See `visit-tags-table'.FBuffer-menu-1-window
  7916. +Select this line's buffer, alone, in full frame.FBuffer-menu-mouse-select
  7917. +Select the buffer whose line you click on.FBuffer-menu-this-window
  7918. +Select this line's buffer in this window.FBuffer-menu-other-window
  7919. +Select this line's buffer in other window, leaving buffer menu visible.FBuffer-menu-switch-other-window
  7920. +Make the other window select this line's buffer.
  7921. +The current window remains selected.FBuffer-menu-2-window
  7922. +Select this line's buffer, with previous buffer in second window.FBuffer-menu-toggle-read-only
  7923. +Toggle read-only status of buffer on this line, perhaps via version control.Fdefsubst
  7924. +Define an inline function.  The syntax is just like that of `defun'.Fmake-obsolete
  7925. +Make the byte-compiler warn that FUNCTION is obsolete.
  7926. +The warning will say that NEW should be used instead.
  7927. +If NEW is a string, that is the `use instead' message.Fmake-obsolete-variable
  7928. +Make the byte-compiler warn that VARIABLE is obsolete,
  7929. +and NEW should be used instead.  If NEW is a string, then that is the
  7930. +`use instead' message.Fdont-compile
  7931. +Like `progn', but the body always runs interpreted (not compiled).
  7932. +If you think you need this, you're probably making a mistake somewhere.Feval-when-compile
  7933. +Like `progn', but evaluates the body at compile time.
  7934. +The result of the body appears to the compiler as a quoted constant.Feval-and-compile
  7935. +Like `progn', but evaluates the body at compile time and at load time.Vc-mode-abbrev-table
  7936. +Abbrev table in use in C mode.Vc-mode-map
  7937. +Keymap used in C mode.Fc-macro-expand
  7938. +Display the result of expanding all C macros occurring in the region.
  7939. +The expansion is entirely correct because it uses the C preprocessor.Vc-mode-syntax-table
  7940. +Syntax table in use in C-mode buffers.Vc-indent-level
  7941. +*Indentation of C statements with respect to containing block.Vc-brace-imaginary-offset
  7942. +*Imagined indentation of a C open brace that actually follows a statement.Vc-brace-offset
  7943. +*Extra indentation for braces, compared with other text in same context.Vc-argdecl-indent
  7944. +*Indentation level of declarations of C function arguments.Vc-label-offset
  7945. +*Offset of C label lines and case statements relative to usual indentation.Vc-continued-statement-offset
  7946. +*Extra indent for lines not starting new statements.Vc-continued-brace-offset
  7947. +*Extra indent for substatements that start with open-braces.
  7948. +This is in addition to c-continued-statement-offset.Vc-auto-newline
  7949. +*Non-nil means automatically newline before and after braces,
  7950. +and after colons and semicolons, inserted in C code.
  7951. +If you do not want a leading newline before braces then use:
  7952. +  (define-key c-mode-map "{" 'electric-c-semi)Vc-tab-always-indent
  7953. +*Non-nil means TAB in C mode should always reindent the current line,
  7954. +regardless of where in the line point is when the TAB command is used.Fc-mode
  7955. +Major mode for editing C code.
  7956. +Expression and list commands understand all C brackets.
  7957. +Tab indents for C code.
  7958. +Comments are delimited with /* ... */.
  7959. +Paragraphs are separated by blank lines only.
  7960. +Delete converts tabs to spaces as it moves back.
  7961. +\{c-mode-map}
  7962. +Variables controlling indentation style:
  7963. + c-tab-always-indent
  7964. +    Non-nil means TAB in C mode should always reindent the current line,
  7965. +    regardless of where in the line point is when the TAB command is used.
  7966. + c-auto-newline
  7967. +    Non-nil means automatically newline before and after braces,
  7968. +    and after colons and semicolons, inserted in C code.
  7969. + c-indent-level
  7970. +    Indentation of C statements within surrounding block.
  7971. +    The surrounding block's indentation is the indentation
  7972. +    of the line on which the open-brace appears.
  7973. + c-continued-statement-offset
  7974. +    Extra indentation given to a substatement, such as the
  7975. +    then-clause of an if or body of a while.
  7976. + c-continued-brace-offset
  7977. +    Extra indentation given to a brace that starts a substatement.
  7978. +    This is in addition to c-continued-statement-offset.
  7979. + c-brace-offset
  7980. +    Extra indentation for line if it starts with an open brace.
  7981. + c-brace-imaginary-offset
  7982. +    An open brace following other text is treated as if it were
  7983. +    this far to the right of the start of its line.
  7984. + c-argdecl-indent
  7985. +    Indentation level of declarations of C function arguments.
  7986. + c-label-offset
  7987. +    Extra indentation for line that is a label, or case or default.
  7988. +
  7989. +Settings for K&R and BSD indentation styles are
  7990. +  c-indent-level                5    8
  7991. +  c-continued-statement-offset  5    8
  7992. +  c-brace-offset               -5   -8
  7993. +  c-argdecl-indent              0    8
  7994. +  c-label-offset               -5   -8
  7995. +
  7996. +Turning on C mode calls the value of the variable c-mode-hook with no args,
  7997. +if that value is non-nil.Fc-fill-paragraph
  7998. +Like \[fill-paragraph] but handle C comments.
  7999. +If any of the current line is a comment or within a comment,
  8000. +fill the comment or the paragraph of it that point is in,
  8001. +preserving the comment indentation or line-starting decorations.Felectric-c-brace
  8002. +Insert character and correct line's indentation.Felectric-c-sharp-sign
  8003. +Insert character and correct line's indentation.Felectric-c-semi
  8004. +Insert character and correct line's indentation.Felectric-c-terminator
  8005. +Insert character and correct line's indentation.Fc-indent-command
  8006. +Indent current line as C code, or in some cases insert a tab character.
  8007. +If `c-tab-always-indent' is non-nil (the default), always indent current line.
  8008. +Otherwise, indent the current line only if point is at the left margin or
  8009. +in the line's indentation; otherwise insert a tab.
  8010. +
  8011. +A numeric argument, regardless of its value, means indent rigidly all the
  8012. +lines of the expression starting after point so that this line becomes
  8013. +properly indented.  The relative indentation among the lines of the
  8014. +expression are preserved.Fc-indent-line
  8015. +Indent current line as C code.
  8016. +Return the amount the indentation changed by.Fcalculate-c-indent
  8017. +Return appropriate indentation for current line as C code.
  8018. +In usual case returns an integer: the column to indent to.
  8019. +Returns nil if line starts inside a string, t if in a comment.Fcalculate-c-indent-within-comment
  8020. +Return the indentation amount for line inside a block comment.
  8021. +Optional arg AFTER-STAR means, if lines in the comment have a leading star,
  8022. +return the indentation of the text that would follow this star.Fc-backward-to-start-of-if
  8023. +Move to the start of the last "unbalanced" `if'.Fc-backward-to-start-of-do
  8024. +If point follows a `do' statement, move to beginning of it and return t.
  8025. +Otherwise return nil and don't move point.Fc-beginning-of-statement
  8026. +Go to the beginning of the innermost C statement.
  8027. +With prefix arg, go back N - 1 statements.  If already at the beginning of a
  8028. +statement then go to the beginning of the preceding one.
  8029. +If within a string or comment, or next to a comment (only whitespace between),
  8030. +move by sentences instead of statements.Fc-end-of-statement
  8031. +Go to the end of the innermost C statement.
  8032. +With prefix arg, go forward N - 1 statements.
  8033. +Move forward to end of the next statement if already at end.
  8034. +If within a string or comment, move by sentences instead of statements.Fmark-c-function
  8035. +Put mark at end of C function, point at beginning.Findent-c-exp
  8036. +Indent each line of the C grouping following point.Fset-c-style
  8037. +Set C-mode variables to use one of several different indentation styles.
  8038. +The arguments are a string representing the desired style
  8039. +and a flag which, if non-nil, means to set the style globally.
  8040. +(Interactively, the flag comes from the prefix argument.)
  8041. +Available styles are GNU, K&R, BSD and Whitesmith.Vc-backslash-column
  8042. +*Minimum column for end-of-line backslashes of macro definitions.Fc-backslash-region
  8043. +Insert, align, or delete end-of-line backslashes on the lines in the region.
  8044. +With no argument, inserts backslashes and aligns existing backslashes.
  8045. +With an argument, deletes the backslashes.
  8046. +
  8047. +This function does not modify the last line of the region if the region ends 
  8048. +right at the start of the following line; it does not modify blank lines
  8049. +at the start of the region.  So you can put the region around an entire macro
  8050. +definition and conveniently use this command.Fc-up-conditional
  8051. +Move back to the containing preprocessor conditional, leaving mark behind.
  8052. +A prefix argument acts as a repeat count.  With a negative argument,
  8053. +move forward to the end of the containing preprocessor conditional.
  8054. +When going backwards, `#elif' is treated like `#else' followed by `#if'.
  8055. +When going forwards, `#elif' is ignored.Fc-backward-conditional
  8056. +Move back across a preprocessor conditional, leaving mark behind.
  8057. +A prefix argument acts as a repeat count.  With a negative argument,
  8058. +move forward across a preprocessor conditional.Fc-forward-conditional
  8059. +Move forward across a preprocessor conditional, leaving mark behind.
  8060. +A prefix argument acts as a repeat count.  With a negative argument,
  8061. +move backward across a preprocessor conditional.Vdelete-auto-save-files
  8062. +*Non-nil means delete auto-save file when a buffer is saved or killed.Vdirectory-abbrev-alist
  8063. +*Alist of abbreviations for file directories.
  8064. +A list of elements of the form (FROM . TO), each meaning to replace
  8065. +FROM with TO when it appears in a directory name.  This replacement is
  8066. +done when setting up the default directory of a newly visited file.
  8067. +*Every* FROM string should start with `^'.
  8068. +
  8069. +Do not use `~' in the TO strings.
  8070. +They should be ordinary absolute directory names.
  8071. +
  8072. +Use this feature when you have directories which you normally refer to
  8073. +via absolute symbolic links.  Make TO the name of the link, and FROM
  8074. +the name it is linked to.Vmake-backup-files
  8075. +*Non-nil means make a backup of a file the first time it is saved.
  8076. +This can be done by renaming the file or by copying.
  8077. +
  8078. +Renaming means that Emacs renames the existing file so that it is a
  8079. +backup file, then writes the buffer into a new file.  Any other names
  8080. +that the old file had will now refer to the backup file.  The new file
  8081. +is owned by you and its group is defaulted.
  8082. +
  8083. +Copying means that Emacs copies the existing file into the backup
  8084. +file, then writes the buffer on top of the existing file.  Any other
  8085. +names that the old file had will now refer to the new (edited) file.
  8086. +The file's owner and group are unchanged.
  8087. +
  8088. +The choice of renaming or copying is controlled by the variables
  8089. +`backup-by-copying', `backup-by-copying-when-linked' and
  8090. +`backup-by-copying-when-mismatch'.  See also `backup-inhibited'.Vbackup-inhibited
  8091. +Non-nil means don't make a backup, regardless of the other parameters.
  8092. +This variable is intended for use by making it local to a buffer.
  8093. +But it is local only if you make it local.Vbackup-by-copying
  8094. +*Non-nil means always use copying to create backup files.
  8095. +See documentation of variable `make-backup-files'.Vbackup-by-copying-when-linked
  8096. +*Non-nil means use copying to create backups for files with multiple names.
  8097. +This causes the alternate names to refer to the latest version as edited.
  8098. +This variable is relevant only if `backup-by-copying' is nil.Vbackup-by-copying-when-mismatch
  8099. +*Non-nil means create backups by copying if this preserves owner or group.
  8100. +Renaming may still be used (subject to control of other variables)
  8101. +when it would not result in changing the owner or group of the file;
  8102. +that is, for files which are owned by you and whose group matches
  8103. +the default for a new file created there by you.
  8104. +This variable is relevant only if `backup-by-copying' is nil.Vbackup-enable-predicate
  8105. +Predicate that looks at a file name and decides whether to make backups.
  8106. +Called with an absolute file name as argument, it returns t to enable backup.Vbuffer-offer-save
  8107. +*Non-nil in a buffer means offer to save the buffer on exit
  8108. +even if the buffer is not visiting a file.
  8109. +Automatically local in all buffers.Vfind-file-existing-other-name
  8110. +*Non-nil means find a file under alternative names, in existing buffers.
  8111. +This means if any existing buffer is visiting the file you want
  8112. +under another name, you get the existing buffer instead of a new buffer.Vfind-file-visit-truename
  8113. +*Non-nil means visit a file under its truename.
  8114. +The truename of a file is found by chasing all links
  8115. +both at the file level and at the levels of the containing directories.Vbuffer-file-truename
  8116. +The abbreviated truename of the file visited in the current buffer.
  8117. +That is, (abbreviated-file-name (file-truename buffer-file-name)).
  8118. +This variable is automatically local in all buffers, when non-nil.Vbuffer-file-number
  8119. +The device number and file number of the file visited in the current buffer.
  8120. +The value is a list of the form (FILENUM DEVNUM).
  8121. +This pair of numbers uniquely identifies the file.
  8122. +If the buffer is visiting a new file, the value is nil.Vfile-precious-flag
  8123. +*Non-nil means protect against I/O errors while saving files.
  8124. +Some modes set this non-nil in particular buffers.Vversion-control
  8125. +*Control use of version numbers for backup files.
  8126. +t means make numeric backup versions unconditionally.
  8127. +nil means make them for files that have some already.
  8128. +`never' means do not make them.Vdired-kept-versions
  8129. +*When cleaning directory, number of versions to keep.Vdelete-old-versions
  8130. +*If t, delete excess backup versions silently.
  8131. +If nil, ask confirmation.  Any other value prevents any trimming.Vkept-old-versions
  8132. +*Number of oldest versions to keep when a new numbered backup is made.Vkept-new-versions
  8133. +*Number of newest versions to keep when a new numbered backup is made.
  8134. +Includes the new backup.  Must be > 0Vrequire-final-newline
  8135. +*Value of t says silently ensure a file ends in a newline when it is saved.
  8136. +Non-nil but not t says ask user whether to add a newline when there isn't one.
  8137. +nil means don't add newlines.Vauto-save-default
  8138. +*Non-nil says by default do auto-saving of every file-visiting buffer.Vauto-save-visited-file-name
  8139. +*Non-nil says auto-save a buffer in the file it is visiting, when practical.
  8140. +Normally auto-save files are written under other names.Vsave-abbrevs
  8141. +*Non-nil means save word abbrevs too when files are saved.
  8142. +Loading an abbrev file sets this to t.Vfind-file-run-dired
  8143. +*Non-nil says run dired if `find-file' is given the name of a directory.Vfind-file-not-found-hooks
  8144. +List of functions to be called for `find-file' on nonexistent file.
  8145. +These functions are called as soon as the error is detected.
  8146. +`buffer-file-name' is already set up.
  8147. +The functions are called in the order given until one of them returns non-nil.Vfind-file-hooks
  8148. +List of functions to be called after a buffer is loaded from a file.
  8149. +The buffer's local variables (if any) will have been processed before the
  8150. +functions are called.Vwrite-file-hooks
  8151. +List of functions to be called before writing out a buffer to a file.
  8152. +If one of them returns non-nil, the file is considered already written
  8153. +and the rest are not called.
  8154. +These hooks are considered to pertain to the visited file.
  8155. +So this list is cleared if you change the visited file name.
  8156. +See also `write-contents-hooks'.
  8157. +Don't make this variable buffer-local; instead, use `local-write-file-hooks'.Vlocal-write-file-hooks
  8158. +Just like `write-file-hooks', except intended for per-buffer use.
  8159. +The functions in this list are called before the ones in
  8160. +`write-file-hooks'.Vwrite-contents-hooks
  8161. +List of functions to be called before writing out a buffer to a file.
  8162. +If one of them returns non-nil, the file is considered already written
  8163. +and the rest are not called.
  8164. +These hooks are considered to pertain to the buffer's contents,
  8165. +not to the particular visited file; thus, `set-visited-file-name' does
  8166. +not clear this variable, but changing the major mode does clear it.
  8167. +See also `write-file-hooks'.Venable-local-variables
  8168. +*Control use of local-variables lists in files you visit.
  8169. +The value can be t, nil or something else.
  8170. +A value of t means local-variables lists are obeyed;
  8171. +nil means they are ignored; anything else means query.
  8172. +
  8173. +The command \[normal-mode] always obeys local-variables lists
  8174. +and ignores this variable.Venable-local-eval
  8175. +*Control processing of the "variable" `eval' in a file's local variables.
  8176. +The value can be t, nil or something else.
  8177. +A value of t means obey `eval' variables;
  8178. +nil means ignore them; anything else means query.
  8179. +
  8180. +The command \[normal-mode] always obeys local-variables lists
  8181. +and ignores this variable.Vbackup-char
  8182. +Character to add to file names to make backup names.Vautosave-char
  8183. +Character to add to file names to make autosave names.Vbufferfile-char
  8184. +Character to add to buffer names to make file names.Fpwd
  8185. +Show the current default directory.Vcd-path
  8186. +Value of the CDPATH environment variable, as a list.
  8187. +Not actually set up until the first time you you use it.Fparse-colon-path
  8188. +Explode a colon-separated list of paths into a string list.Fcd-absolute
  8189. +Change current directory to given absolute file name DIR.Fcd
  8190. +Make DIR become the current buffer's default directory.
  8191. +If your environment includes a `CDPATH' variable, try each one of that
  8192. +colon-separated list of directories when resolving a relative directory name.Fload-file
  8193. +Load the Lisp file named FILE.Fload-library
  8194. +Load the library named LIBRARY.
  8195. +This is an interface to the function `load'.Ffile-local-copy
  8196. +Copy the file FILE into a temporary file on this machine.
  8197. +Returns the name of the local copy, or nil, if FILE is directly
  8198. +accessible.Ffile-truename
  8199. +Return the truename of FILENAME, which should be absolute.
  8200. +The truename of a file name is found by chasing symbolic links
  8201. +both at the level of the file and at the level of the directories
  8202. +containing it, until no links are left at any level.
  8203. +
  8204. +The arguments COUNTER and PREV-DIRS are used only in recursive calls.
  8205. +Do not specify them in other calls.Ffile-chase-links
  8206. +Chase links in FILENAME until a name that is not a link.
  8207. +Does not examine containing directories for links,
  8208. +unlike `file-truename'.Fswitch-to-buffer-other-window
  8209. +Select buffer BUFFER in another window.Fswitch-to-buffer-other-frame
  8210. +Switch to buffer BUFFER in another frame.Ffind-file
  8211. +Edit file FILENAME.
  8212. +Switch to a buffer visiting file FILENAME,
  8213. +creating one if none already exists.Ffind-file-other-window
  8214. +Edit file FILENAME, in another window.
  8215. +May create a new window, or reuse an existing one.
  8216. +See the function `display-buffer'.Ffind-file-other-frame
  8217. +Edit file FILENAME, in another frame.
  8218. +May create a new frame, or reuse an existing one.
  8219. +See the function `display-buffer'.Ffind-file-read-only
  8220. +Edit file FILENAME but don't allow changes.
  8221. +Like \[find-file] but marks buffer as read-only.
  8222. +Use \[toggle-read-only] to permit editing.Ffind-file-read-only-other-window
  8223. +Edit file FILENAME in another window but don't allow changes.
  8224. +Like \[find-file-other-window] but marks buffer as read-only.
  8225. +Use \[toggle-read-only] to permit editing.Ffind-file-read-only-other-frame
  8226. +Edit file FILENAME in another frame but don't allow changes.
  8227. +Like \[find-file-other-frame] but marks buffer as read-only.
  8228. +Use \[toggle-read-only] to permit editing.Ffind-alternate-file
  8229. +Find file FILENAME, select its buffer, kill previous buffer.
  8230. +If the current buffer now contains an empty file that you just visited
  8231. +(presumably by mistake), use this command to visit the file you really want.Fcreate-file-buffer
  8232. +Create a suitably named buffer for visiting FILENAME, and return it.
  8233. +FILENAME (sans directory) is used unchanged if that name is free;
  8234. +otherwise a string <2> or <3> or ... is appended to get an unused name.Fgenerate-new-buffer
  8235. +Create and return a buffer with a name based on NAME.
  8236. +Choose the buffer's name using `generate-new-buffer-name'.Vautomount-dir-prefix
  8237. +Regexp to match the automounter prefix in a directory name.Vabbreviated-home-dir
  8238. +The user's homedir abbreviated according to `directory-abbrev-list'.Fabbreviate-file-name
  8239. +Return a version of FILENAME shortened using `directory-abbrev-alist'.
  8240. +This also substitutes "~" for the user's home directory.
  8241. +Type \[describe-variable] directory-abbrev-alist RET for more information.Vfind-file-not-true-dirname-list
  8242. +*List of logical names for which visiting shouldn't save the true dirname.
  8243. +On VMS, when you visit a file using a logical name that searches a path,
  8244. +you may or may not want the visited file name to record the specific
  8245. +directory where the file was found.  If you *do not* want that, add the logical
  8246. +name to this list as a string.Ffind-buffer-visiting
  8247. +Return the buffer visiting file FILENAME (a string).
  8248. +This is like `get-file-buffer', except that it checks for any buffer
  8249. +visiting the same file, possibly under a different name.
  8250. +If there is no such live buffer, return nil.Ffind-file-noselect
  8251. +Read file FILENAME into a buffer and return the buffer.
  8252. +If a buffer exists visiting FILENAME, return that one, but
  8253. +verify that the file has not changed since visited or saved.
  8254. +The buffer is not selected, just returned to the caller.Fafter-find-file
  8255. +Called after finding a file and by the default revert function.
  8256. +Sets buffer mode, parses local variables.
  8257. +Optional args ERROR, WARN, and NOAUTO: ERROR non-nil means there was an
  8258. +error in reading the file.  WARN non-nil means warn if there
  8259. +exists an auto-save file more recent than the visited file.
  8260. +NOAUTO means don't mess with auto-save mode.
  8261. +Fourth arg AFTER-FIND-FILE-FROM-REVERT-BUFFER non-nil
  8262. + means this call was from `revert-buffer'.
  8263. +Finishes by calling the functions in `find-file-hooks'.Fnormal-mode
  8264. +Choose the major mode for this buffer automatically.
  8265. +Also sets up any specified local variables of the file.
  8266. +Uses the visited file name, the -*- line, and the local variables spec.
  8267. +
  8268. +This function is called automatically from `find-file'.  In that case,
  8269. +we may set up specified local variables depending on the value of
  8270. +`enable-local-variables': if it is t, we do; if it is nil, we don't;
  8271. +otherwise, we query.  `enable-local-variables' is ignored if you
  8272. +run `normal-mode' explicitly.Vauto-mode-alist
  8273. +Alist of filename patterns vs corresponding major mode functions.
  8274. +Each element looks like (REGEXP . FUNCTION) or (REGEXP FUNCTION).
  8275. +Visiting a file whose name matches REGEXP causes FUNCTION to be called.
  8276. +If the element has the form (REGEXP FUNCTION), then after calling
  8277. +FUNCTION, we delete the suffix that matched REGEXP and search the list
  8278. +again for another match.Vinterpreter-mode-alist
  8279. +Alist mapping interpreter names to major modes.
  8280. +This alist applies to files whose first line starts with `#!'.
  8281. +Each element looks like (INTERPRETER . MODE).
  8282. +The car of each element is compared with
  8283. +the name of the interpreter specified in the first line.
  8284. +If it matches, mode MODE is selected.Vinhibit-first-line-modes-regexps
  8285. +List of regexps; if one matches a file name, don't look for `-*-'.Vuser-init-file
  8286. +File name including directory of user's initialization file.Fset-auto-mode
  8287. +Select major mode appropriate for current buffer.
  8288. +This checks for a -*- mode tag in the buffer's text,
  8289. +compares the filename against the entries in `auto-mode-alist',
  8290. +or checks the interpreter that runs this file against
  8291. +`interpreter-mode-alist'.
  8292. +
  8293. +It does not check for the `mode:' local variable in the
  8294. +Local Variables section of the file; for that, use `hack-local-variables'.
  8295. +
  8296. +If `enable-local-variables' is nil, this function does not check for a
  8297. +-*- mode tag.Fhack-local-variables
  8298. +Parse and put into effect this buffer's local variables spec.Vignored-local-variables
  8299. +Variables to be ignored in a file's local variable spec.Fset-visited-file-name
  8300. +Change name of file visited in current buffer to FILENAME.
  8301. +The next time the buffer is saved it will go in the newly specified file.
  8302. +nil or empty string as argument means make buffer not be visiting any file.
  8303. +Remember to delete the initial contents of the minibuffer
  8304. +if you wish to pass an empty string as the argument.Fwrite-file
  8305. +Write current buffer into file FILENAME.
  8306. +Makes buffer visit that file, and marks it not modified.
  8307. +If the buffer is already visiting a file, you can specify
  8308. +a directory name as FILENAME, to write a file of the same
  8309. +old name in that directory.Fbackup-buffer
  8310. +Make a backup of the disk file visited by the current buffer, if appropriate.
  8311. +This is normally done before saving the buffer the first time.
  8312. +If the value is non-nil, it is the result of `file-modes' on the original
  8313. +file; this means that the caller, after saving the buffer, should change
  8314. +the modes of the new file to agree with the old modes.Ffile-name-sans-versions
  8315. +Return FILENAME sans backup versions or strings.
  8316. +This is a separate procedure so your site-init or startup file can
  8317. +redefine it.
  8318. +If the optional argument KEEP-BACKUP-VERSION is non-nil,
  8319. +we do not remove backup version numbers, only true file version numbers.Fmake-backup-file-name
  8320. +Create the non-numeric backup file name for FILE.
  8321. +This is a separate function so you can redefine it for customization.Fbackup-file-name-p
  8322. +Return non-nil if FILE is a backup file name (numeric or not).
  8323. +This is a separate function so you can redefine it for customization.
  8324. +You may need to redefine `file-name-sans-versions' as well.Fbackup-extract-version
  8325. +Given the name of a numeric backup file, return the backup number.
  8326. +Uses the free variable `bv-length', whose value should be
  8327. +the index in the name where the version number begins.Ffind-backup-file-name
  8328. +Find a file name for a backup file, and suggestions for deletions.
  8329. +Value is a list whose car is the name for the backup file
  8330. + and whose cdr is a list of old versions to consider deleting now.Ffile-nlinks
  8331. +Return number of names file FILENAME has.Ffile-relative-name
  8332. +Convert FILENAME to be relative to DIRECTORY (default: default-directory).Fsave-buffer
  8333. +Save current buffer in visited file if modified.  Versions described below.
  8334. +By default, makes the previous version into a backup file
  8335. + if previously requested or if this is the first save.
  8336. +With 1 or 3 \[universal-argument]'s, marks this version
  8337. + to become a backup when the next save is done.
  8338. +With 2 or 3 \[universal-argument]'s,
  8339. + unconditionally makes the previous version into a backup file.
  8340. +With argument of 0, never makes the previous version into a backup file.
  8341. +
  8342. +If a file's name is FOO, the names of its numbered backup versions are
  8343. + FOO.~i~ for various integers i.  A non-numbered backup file is called FOO~.
  8344. +Numeric backups (rather than FOO~) will be made if value of
  8345. + `version-control' is not the atom `never' and either there are already
  8346. + numeric versions of the file being backed up, or `version-control' is
  8347. + non-nil.
  8348. +We don't want excessive versions piling up, so there are variables
  8349. + `kept-old-versions', which tells Emacs how many oldest versions to keep,
  8350. + and `kept-new-versions', which tells how many newest versions to keep.
  8351. + Defaults are 2 old versions and 2 new.
  8352. +`dired-kept-versions' controls dired's clean-directory (.) command.
  8353. +If `delete-old-versions' is nil, system will query user
  8354. + before trimming versions.  Otherwise it does it silently.Fdelete-auto-save-file-if-necessary
  8355. +Delete auto-save file for current buffer if `delete-auto-save-files' is t.
  8356. +Normally delete only if the file was written by this Emacs since
  8357. +the last real save, but optional arg FORCE non-nil means delete anyway.Fbasic-save-buffer
  8358. +Save the current buffer in its visited file, if it has been modified.Fsave-some-buffers
  8359. +Save some modified file-visiting buffers.  Asks user about each one.
  8360. +Optional argument (the prefix) non-nil means save all with no questions.
  8361. +Optional second argument EXITING means ask about certain non-file buffers
  8362. + as well as about file buffers.Fnot-modified
  8363. +Mark current buffer as unmodified, not needing to be saved.
  8364. +With prefix arg, mark buffer as modified, so \[save-buffer] will save.Ftoggle-read-only
  8365. +Change whether this buffer is visiting its file read-only.
  8366. +With arg, set read-only iff arg is positive.Finsert-file
  8367. +Insert contents of file FILENAME into buffer after point.
  8368. +Set mark after the inserted text.
  8369. +
  8370. +This function is meant for the user to run interactively.
  8371. +Don't call it from programs!  Use `insert-file-contents' instead.
  8372. +(Its calling sequence is different; see its documentation).Fappend-to-file
  8373. +Append the contents of the region to the end of file FILENAME.
  8374. +When called from a function, expects three arguments,
  8375. +START, END and FILENAME.  START and END are buffer positions
  8376. +saying what text to write.Ffile-newest-backup
  8377. +Return most recent backup file for FILENAME or nil if no backups exist.Frename-uniquely
  8378. +Rename current buffer to a similar name not already taken.
  8379. +This function is useful for creating multiple shell process buffers
  8380. +or multiple mail buffers, etc.Fmake-directory
  8381. +Create the directory DIR and any nonexistent parent dirs.
  8382. +Interactively, the default choice of directory to create
  8383. +is the current default directory for file names.
  8384. +That is useful when you have visited a file in a nonexistint directory.
  8385. +
  8386. +Noninteractively, the second (optional) argument PARENTS says whether
  8387. +to create parent directories if they don't exist.Vrevert-buffer-function
  8388. +Function to use to revert this buffer, or nil to do the default.
  8389. +The function receives two arguments IGNORE-AUTO and NOCONFIRM,
  8390. +which are the arguments that `revert-buffer' received.Vrevert-buffer-insert-file-contents-function
  8391. +Function to use to insert contents when reverting this buffer.
  8392. +Gets two args, first the nominal file name to use,
  8393. +and second, t if reading the auto-save file.Frevert-buffer
  8394. +Replace the buffer text with the text of the visited file on disk.
  8395. +This undoes all changes since the file was visited or saved.
  8396. +With a prefix argument, offer to revert from latest auto-save file, if
  8397. +that is more recent than the visited file.
  8398. +
  8399. +When called from lisp, The first argument is IGNORE-AUTO; only offer
  8400. +to revert from the auto-save file when this is nil.  Note that the
  8401. +sense of this argument is the reverse of the prefix argument, for the
  8402. +sake of backward compatibility.  IGNORE-AUTO is optional, defaulting
  8403. +to nil.
  8404. +
  8405. +Optional second argument NOCONFIRM means don't ask for confirmation at
  8406. +all.
  8407. +
  8408. +If the value of `revert-buffer-function' is non-nil, it is called to
  8409. +do the work.
  8410. +
  8411. +The default revert function runs the hook `before-revert-hook' at the
  8412. +beginning and `after-revert-hook' at the end.Frecover-file
  8413. +Visit file FILE, but get contents from its last auto-save file.Fkill-some-buffers
  8414. +For each buffer, ask whether to kill it.Fauto-save-mode
  8415. +Toggle auto-saving of contents of current buffer.
  8416. +With prefix argument ARG, turn auto-saving on if positive, else off.Frename-auto-save-file
  8417. +Adjust current buffer's auto save file name for current conditions.
  8418. +Also rename any existing auto save file, if it was made in this session.Fmake-auto-save-file-name
  8419. +Return file name to use for auto-saves of current buffer.
  8420. +Does not consider `auto-save-visited-file-name' as that variable is checked
  8421. +before calling this function.  You can redefine this for customization.
  8422. +See also `auto-save-file-name-p'.Fauto-save-file-name-p
  8423. +Return non-nil if FILENAME can be yielded by `make-auto-save-file-name'.
  8424. +FILENAME should lack slashes.  You can redefine this for customization.Vlist-directory-brief-switches
  8425. +*Switches for list-directory to pass to `ls' for brief listing,Vlist-directory-verbose-switches
  8426. +*Switches for list-directory to pass to `ls' for verbose listing,Flist-directory
  8427. +Display a list of files in or matching DIRNAME, a la `ls'.
  8428. +DIRNAME is globbed by the shell if necessary.
  8429. +Prefix arg (second arg if noninteractive) means supply -l switch to `ls'.
  8430. +Actions controlled by variables `list-directory-brief-switches'
  8431. +and `list-directory-verbose-switches'.Vinsert-directory-program
  8432. +Absolute or relative name of the `ls' program used by `insert-directory'.Finsert-directory
  8433. +Insert directory listing for FILE, formatted according to SWITCHES.
  8434. +Leaves point after the inserted text.
  8435. +SWITCHES may be a string of options, or a list of strings.
  8436. +Optional third arg WILDCARD means treat FILE as shell wildcard.
  8437. +Optional fourth arg FULL-DIRECTORY-P means file is a directory and
  8438. +switches do not contain `d', so that a full listing is expected.
  8439. +
  8440. +This works by running a directory listing program
  8441. +whose name is in the variable `insert-directory-program'.
  8442. +If WILDCARD, it also runs the shell specified by `shell-file-name'.Vkill-emacs-query-functions
  8443. +Functions to call with no arguments to query about killing Emacs.
  8444. +If any of these functions returns nil, killing Emacs is cancelled.Fsave-buffers-kill-emacs
  8445. +Offer to save each buffer, then kill this Emacs process.
  8446. +With prefix arg, silently save all file-visiting buffers, then kill.Vfill-individual-varying-indent
  8447. +*Controls criterion for a new paragraph in `fill-individual-paragraphs'.
  8448. +Non-nil means changing indent doesn't end a paragraph.
  8449. +That mode can handle paragraphs with extra indentation on the first line,
  8450. +but it requires separator lines between paragraphs.
  8451. +A value of nil means that any change in indentation starts a new paragraph.Vsentence-end-double-space
  8452. +*Non-nil means a single space does not end a sentence.Fset-fill-prefix
  8453. +Set the fill prefix to the current line up to point.
  8454. +Filling expects lines to start with the fill prefix and
  8455. +reinserts the fill prefix in each resulting line.Vadaptive-fill-mode
  8456. +*Non-nil means determine a paragraph's fill prefix from its text.Vadaptive-fill-regexp
  8457. +*Regexp to match text at start of line that constitutes indentation.
  8458. +If Adaptive Fill mode is enabled, whatever text matches this pattern
  8459. +on the second line of a paragraph is used as the standard indentation
  8460. +for the paragraph.Ffill-region-as-paragraph
  8461. +Fill region as one paragraph: break lines to fit `fill-column'.
  8462. +Prefix arg means justify too.
  8463. +If `sentence-end-double-space' is non-nil, then period followed by one
  8464. +space does not end a sentence, so don't break a line there.
  8465. +From program, pass args FROM, TO and JUSTIFY-FLAG.Ffill-paragraph
  8466. +Fill paragraph at or after point.  Prefix arg means justify as well.
  8467. +If `sentence-end-double-space' is non-nil, then period followed by one
  8468. +space does not end a sentence, so don't break a line there.Ffill-region
  8469. +Fill each of the paragraphs in the region.
  8470. +Prefix arg (non-nil third arg, if called from program) means justify as well.
  8471. +If `sentence-end-double-space' is non-nil, then period followed by one
  8472. +space does not end a sentence, so don't break a line there.Fjustify-current-line
  8473. +Add spaces to line point is in, so it ends at `fill-column'.Ffill-nonuniform-paragraphs
  8474. +Fill paragraphs within the region, allowing varying indentation within each.
  8475. +This command divides the region into "paragraphs",
  8476. +only at paragraph-separator lines, then fills each paragraph
  8477. +using as the fill prefix the smallest indentation of any line
  8478. +in the paragraph.
  8479. +
  8480. +When calling from a program, pass range to fill as first two arguments.
  8481. +
  8482. +Optional third and fourth arguments JUSTIFY-FLAG and MAIL-FLAG:
  8483. +JUSTIFY-FLAG to justify paragraphs (prefix arg),
  8484. +MAIL-FLAG for a mail message, i. e. don't fill header lines.Ffill-individual-paragraphs
  8485. +Fill paragraphs of uniform indentation within the region.
  8486. +This command divides the region into "paragraphs", 
  8487. +treating every change in indentation level as a paragraph boundary,
  8488. +then fills each paragraph using its indentation level as the fill prefix.
  8489. +
  8490. +When calling from a program, pass range to fill as first two arguments.
  8491. +
  8492. +Optional third and fourth arguments JUSTIFY-FLAG and MAIL-FLAG:
  8493. +JUSTIFY-FLAG to justify paragraphs (prefix arg),
  8494. +MAIL-FLAG for a mail message, i. e. don't fill header lines.Vpi
  8495. +The value of Pi (3.1415926...)Ve
  8496. +The value of e (2.7182818...)Vdegrees-to-radians
  8497. +Degrees to radian conversion constantVradians-to-degrees
  8498. +Radian to degree conversion constantFdegrees-to-radians
  8499. +Convert ARG from degrees to radians.Fradians-to-degrees
  8500. +Convert ARG from radians to degrees.Vhelp-map
  8501. +Keymap for characters following the Help key.Ffinder-by-keyword
  8502. +Find packages matching a given keyword.Fhelp-with-tutorial
  8503. +Select the Emacs learn-by-doing tutorial.Fdescribe-key-briefly
  8504. +Print the name of the function KEY invokes.  KEY is a string.Fprint-help-return-message
  8505. +Display or return message saying how to restore windows after help command.
  8506. +Computes a message and applies the optional argument FUNCTION to it.
  8507. +If FUNCTION is nil, applies `message' to it, thus printing it.Fdescribe-key
  8508. +Display documentation of the function invoked by KEY.  KEY is a string.Fdescribe-mode
  8509. +Display documentation of current major mode and minor modes.
  8510. +For this to work correctly for a minor mode, the mode's indicator variable
  8511. +(listed in `minor-mode-alist') must also be a function whose documentation
  8512. +describes the minor mode.Fdescribe-distribution
  8513. +Display info on how to obtain the latest version of GNU Emacs.Fdescribe-copying
  8514. +Display info on how you may redistribute copies of GNU Emacs.Fdescribe-project
  8515. +Display info on the GNU project.Fdescribe-no-warranty
  8516. +Display info on all the kinds of warranty Emacs does NOT have.Fdescribe-prefix-bindings
  8517. +Describe the bindings of the prefix used to reach this command.
  8518. +The prefix described consists of all but the last event
  8519. +of the key sequence that ran this command.Fview-emacs-news
  8520. +Display info on recent changes to Emacs.Fview-lossage
  8521. +Display last 100 input keystrokes.Fhelp-for-help
  8522. +You have typed \[help-command], the help character.  Type a Help option:
  8523. +(Use \<help-map>\[scroll-up] or \[scroll-down] to scroll through this text.
  8524. +Type \<help-map>\[help-quit] to exit the Help command.)
  8525. +
  8526. +a  command-apropos.  Give a substring, and see a list of commands
  8527. +    (functions interactively callable) that contain
  8528. +    that substring.  See also the  apropos  command.
  8529. +b  describe-bindings.  Display table of all key bindings.
  8530. +c  describe-key-briefly.  Type a command key sequence;
  8531. +    it prints the function name that sequence runs.
  8532. +f  describe-function.  Type a function name and get documentation of it.
  8533. +C-f Info-goto-emacs-command-node.  Type a function name;
  8534. +    it takes you to the Info node for that command.
  8535. +i  info. The  info  documentation reader.
  8536. +k  describe-key.  Type a command key sequence;
  8537. +    it displays the full documentation.
  8538. +C-k Info-goto-emacs-key-command-node.  Type a command key sequence;
  8539. +    it takes you to the Info node for the command bound to that key.
  8540. +l  view-lossage.  Shows last 100 characters you typed.
  8541. +m  describe-mode.  Print documentation of current major mode,
  8542. +    which describes the commands peculiar to it.
  8543. +n  view-emacs-news.  Shows emacs news file.
  8544. +p  finder-by-keyword. Find packages matching a given topic keyword.
  8545. +s  describe-syntax.  Display contents of syntax table, plus explanations
  8546. +t  help-with-tutorial.  Select the Emacs learn-by-doing tutorial.
  8547. +v  describe-variable.  Type name of a variable;
  8548. +    it displays the variable's documentation and value.
  8549. +w  where-is.  Type command name; it prints which keystrokes
  8550. +    invoke that command.
  8551. +C-c print Emacs copying permission (General Public License).
  8552. +C-d print Emacs ordering information.
  8553. +C-n print news of recent Emacs changes.
  8554. +C-p print information about the GNU project.
  8555. +C-w print information on absence of warranty for GNU Emacs.Fdescribe-function
  8556. +Display the full documentation of FUNCTION (a symbol).Fdescribe-variable
  8557. +Display the full documentation of VARIABLE (a symbol).
  8558. +Returns the documentation as a string, also.Fwhere-is
  8559. +Print message listing key sequences that invoke specified command.
  8560. +Argument is a command definition, usually a symbol with a function definition.Fcommand-apropos
  8561. +Like apropos but lists only symbols that are names of commands
  8562. +(interactively callable functions).  Argument REGEXP is a regular expression
  8563. +that is matched against command symbol names.  Returns list of symbols and
  8564. +documentation found.Flocate-library
  8565. +Show the full path name of Emacs library LIBRARY.
  8566. +This command searches the directories in `load-path' like `M-x load-library'
  8567. +to find the file that `M-x load-library RET LIBRARY RET' would load.
  8568. +Optional second arg NOSUFFIX non-nil means don't add suffixes `.elc' or `.el'
  8569. +to the specified name LIBRARY (a la calling `load' instead of `load-library').Vindent-line-function
  8570. +Function to indent current line.Findent-according-to-mode
  8571. +Indent line in proper way for current major mode.Findent-for-tab-command
  8572. +Indent line in proper way for current major mode.Findent-rigidly
  8573. +Indent all lines starting in the region sideways by ARG columns.
  8574. +Called from a program, takes three arguments, START, END and ARG.Vindent-region-function
  8575. +Function which is short cut to indent region using indent-according-to-mode.
  8576. +A value of nil means really run indent-according-to-mode on each line.Findent-region
  8577. +Indent each nonblank line in the region.
  8578. +With no argument, indent each line using `indent-according-to-mode',
  8579. +or use `indent-region-function' to do the whole region if that's non-nil.
  8580. +If there is a fill prefix, make each line start with the fill prefix.
  8581. +With argument COLUMN, indent each line to that column.
  8582. +Called from a program, takes three args: START, END and COLUMN.Findent-relative-maybe
  8583. +Indent a new line like previous nonblank line.Findent-relative
  8584. +Space out to under next indent point in previous nonblank line.
  8585. +An indent point is a non-whitespace character following whitespace.
  8586. +If the previous nonblank line has no indent points beyond the
  8587. +column point starts at, `tab-to-tab-stop' is done instead.Vtab-stop-list
  8588. +*List of tab stop positions used by `tab-to-tab-stops'.
  8589. +This should be a list of integers, ordered from smallest to largest.Vedit-tab-stops-map
  8590. +Keymap used in `edit-tab-stops'.Vedit-tab-stops-buffer
  8591. +Buffer whose tab stops are being edited--in case
  8592. +the variable `tab-stop-list' is local in that buffer.Fedit-tab-stops
  8593. +Edit the tab stops used by `tab-to-tab-stop'.
  8594. +Creates a buffer *Tab Stops* containing text describing the tab stops.
  8595. +A colon indicates a column where there is a tab stop.
  8596. +You can add or remove colons and then do \<edit-tab-stops-map>\[edit-tab-stops-note-changes] to make changes take effect.Fedit-tab-stops-note-changes
  8597. +Put edited tab stops into effect.Ftab-to-tab-stop
  8598. +Insert spaces or tabs to next defined tab-stop column.
  8599. +The variable `tab-stop-list' is a list of columns at which there are tab stops.
  8600. +Use \[edit-tab-stops] to edit them interactively.Fmove-to-tab-stop
  8601. +Move point to next defined tab-stop column.
  8602. +The variable `tab-stop-list' is a list of columns at which there are tab stops.
  8603. +Use \[edit-tab-stops] to edit them interactively.Vsearch-exit-option
  8604. +*Non-nil means random control characters terminate incremental search.Vsearch-slow-window-lines
  8605. +*Number of lines in slow search display windows.
  8606. +These are the short windows used during incremental search on slow terminals.
  8607. +Negative means put the slow search window at the top (normally it's at bottom)
  8608. +and the value is minus the number of lines.Vsearch-slow-speed
  8609. +*Highest terminal speed at which to use "slow" style incremental search.
  8610. +This is the style where a one-line window is created to show the line
  8611. +that the search has reached.Vsearch-upper-case
  8612. +*If non-nil, upper case chars disable case fold searching.
  8613. +That is, upper and lower case chars must match exactly.
  8614. +This applies no matter where the chars come from, but does not
  8615. +apply to chars in regexps that are prefixed with `\'.
  8616. +If this value is `not-yanks', yanked text is always downcased.Vsearch-nonincremental-instead
  8617. +*If non-nil, do a nonincremental search instead if exiting immediately.
  8618. +Actually, `isearch-edit-string' is called to let you enter the search
  8619. +string, and RET terminates editing and does a nonincremental search.Vsearch-whitespace-regexp
  8620. +*If non-nil, regular expression to match a sequence of whitespace chars.
  8621. +You might want to use something like "[ \t\r\n]+" instead.Vsearch-highlight
  8622. +*Non-nil means incremental search highlights the current match.Visearch-mode-hook
  8623. +Function(s) to call after starting up an incremental search.Visearch-mode-end-hook
  8624. +Function(s) to call after terminating an incremental search.Vsearch-ring
  8625. +List of search string sequences.Vregexp-search-ring
  8626. +List of regular expression search string sequences.Vsearch-ring-max
  8627. +*Maximum length of search ring before oldest elements are thrown away.Vregexp-search-ring-max
  8628. +*Maximum length of regexp search ring before oldest elements are thrown away.Vsearch-ring-yank-pointer
  8629. +Index in `search-ring' of last string reused.
  8630. +nil if none yet.Vregexp-search-ring-yank-pointer
  8631. +Index in `regexp-search-ring' of last string reused.
  8632. +nil if none yet.Vsearch-ring-update
  8633. +*Non-nil if advancing or retreating in the search ring should cause search.
  8634. +Default value, nil, means edit the string instead.Visearch-mode-map
  8635. +Keymap for isearch-mode.Vminibuffer-local-isearch-map
  8636. +Keymap for editing isearch strings in the minibuffer.Fisearch-forward
  8637. +Do incremental search forward.
  8638. +With a prefix argument, do an incremental regular expression search instead.
  8639. +\<isearch-mode-map>
  8640. +As you type characters, they add to the search string and are found.
  8641. +The following non-printing keys are bound in `isearch-mode-map'.  
  8642. +
  8643. +Type \[isearch-delete-char] to cancel characters from end of search string.
  8644. +Type \[isearch-exit] to exit, leaving point at location found.
  8645. +Type LFD (C-j) to match end of line.
  8646. +Type \[isearch-repeat-forward] to search again forward, \[isearch-repeat-backward] to search again backward.
  8647. +Type \[isearch-yank-word] to yank word from buffer onto end of search string and search for it.
  8648. +Type \[isearch-yank-line] to yank rest of line onto end of search string and search for it.
  8649. +Type \[isearch-quote-char] to quote control character to search for it.
  8650. +\[isearch-abort] while searching or when search has failed cancels input back to what has
  8651. + been found successfully.
  8652. +\[isearch-abort] when search is successful aborts and moves point to starting point.
  8653. +
  8654. +Also supported is a search ring of the previous 16 search strings.
  8655. +Type \[isearch-ring-advance] to search for the next item in the search ring.
  8656. +Type \[isearch-ring-retreat] to search for the previous item in the search ring.
  8657. +Type \[isearch-complete] to complete the search string using the search ring.
  8658. +
  8659. +The above keys, bound in `isearch-mode-map', are often controlled by 
  8660. + options; do M-x apropos on search-.* to find them.
  8661. +Other control and meta characters terminate the search
  8662. + and are then executed normally (depending on `search-exit-option').
  8663. +
  8664. +If this function is called non-interactively, it does not return to
  8665. +the calling function until the search is done.Fisearch-forward-regexp
  8666. +Do incremental search forward for regular expression.
  8667. +With a prefix argument, do a regular string search instead.
  8668. +Like ordinary incremental search except that your input
  8669. +is treated as a regexp.  See \[isearch-forward] for more info.Fisearch-backward
  8670. +Do incremental search backward.
  8671. +With a prefix argument, do a regular expression search instead.
  8672. +See \[isearch-forward] for more information.Fisearch-backward-regexp
  8673. +Do incremental search backward for regular expression.
  8674. +With a prefix argument, do a regular string search instead.
  8675. +Like ordinary incremental search except that your input
  8676. +is treated as a regexp.  See \[isearch-forward] for more info.Fisearch-mode
  8677. +Start isearch minor mode.  Called by isearch-forward, etc.Fisearch-exit
  8678. +Exit search normally.
  8679. +However, if this is the first command after starting incremental
  8680. +search and `search-nonincremental-instead' is non-nil, do a
  8681. +nonincremental search instead via `isearch-edit-string'.Fisearch-edit-string
  8682. +Edit the search string in the minibuffer.
  8683. +The following additional command keys are active while editing.
  8684. +\<minibuffer-local-isearch-map>
  8685. +\[exit-minibuffer] to resume incremental searching with the edited string.
  8686. +\[isearch-nonincremental-exit-minibuffer] to do one nonincremental search.
  8687. +\[isearch-forward-exit-minibuffer] to resume isearching forward.
  8688. +\[isearch-reverse-exit-minibuffer] to resume isearching backward.
  8689. +\[isearch-ring-advance-edit] to replace the search string with the next item in the search ring.
  8690. +\[isearch-ring-retreat-edit] to replace the search string with the previous item in the search ring.
  8691. +\[isearch-complete-edit] to complete the search string using the search ring.
  8692. +\<isearch-mode-map>
  8693. +If first char entered is \[isearch-yank-word], then do word search instead.Fisearch-abort
  8694. +Abort incremental search mode if searching is successful, signalling quit.
  8695. +Otherwise, revert to previous successful search and continue searching.
  8696. +Use `isearch-exit' to quit without signalling.Fisearch-repeat-forward
  8697. +Repeat incremental search forwards.Fisearch-repeat-backward
  8698. +Repeat incremental search backwards.Fisearch-toggle-regexp
  8699. +Toggle regexp searching on or off.Fisearch-toggle-case-fold
  8700. +Toggle case folding in searching on or off.Fisearch-delete-char
  8701. +Discard last input item and move point back.  
  8702. +If no previous match was done, just beep.Fisearch-yank-kill
  8703. +Pull string from kill ring into search string.Fisearch-yank-word
  8704. +Pull next word from buffer into search string.Fisearch-yank-line
  8705. +Pull rest of line from buffer into search string.Fisearch-*-char
  8706. +Handle * and ? specially in regexps.Fisearch-|-char
  8707. +If in regexp search, jump to the barrier.Fisearch-other-meta-char
  8708. +Exit the search normally and reread this key sequence.
  8709. +But only if `search-exit-option' is non-nil, the default.
  8710. +If it is the symbol `edit', the search string is edited in the minibuffer
  8711. +and the meta character is unread so that it applies to editing the string.Fisearch-quote-char
  8712. +Quote special characters for incremental search.Fisearch-return-char
  8713. +Convert return into newline for incremental search.
  8714. +Obsolete.Fisearch-printing-char
  8715. +Add this ordinary printing character to the search string and search.Fisearch-whitespace-chars
  8716. +Match all whitespace chars, if in regexp mode.
  8717. +If you want to search for just a space, type C-q SPC.Fisearch-ring-advance
  8718. +Advance to the next search string in the ring.Fisearch-ring-retreat
  8719. +Retreat to the previous search string in the ring.Fisearch-ring-advance-edit
  8720. +Insert the next element of the search history into the minibuffer.Fisearch-ring-retreat-edit
  8721. +Inserts the previous element of the search history into the minibuffer.Fisearch-complete
  8722. +Complete the search string from the strings on the search ring.
  8723. +The completed string is then editable in the minibuffer.
  8724. +If there is no completion possible, say so and continue searching.Fisearch-complete-edit
  8725. +Same as `isearch-complete' except in the minibuffer.Fisearch-no-upper-case-p
  8726. +Return t if there are no upper case chars in STRING.
  8727. +If REGEXP-FLAG is non-nil, disregard letters preceeded by `\' (but not `\\')
  8728. +since they have special meaning in a regexp.Vlisp-mode-syntax-table
  8729. +Vemacs-lisp-mode-syntax-table
  8730. +Vlisp-mode-abbrev-table
  8731. +Vshared-lisp-mode-map
  8732. +Keymap for commands shared by all sorts of Lisp modes.Vemacs-lisp-mode-map
  8733. +Keymap for Emacs Lisp mode.
  8734. +All commands in shared-lisp-mode-map are inherited by this map.Femacs-lisp-mode
  8735. +Major mode for editing Lisp code to run in Emacs.
  8736. +Commands:
  8737. +Delete converts tabs to spaces as it moves back.
  8738. +Blank lines separate paragraphs.  Semicolons start comments.
  8739. +\{emacs-lisp-mode-map}
  8740. +Entry to this mode calls the value of `emacs-lisp-mode-hook'
  8741. +if that value is non-nil.Vlisp-mode-map
  8742. +Keymap for ordinary Lisp mode.
  8743. +All commands in `shared-lisp-mode-map' are inherited by this map.Flisp-mode
  8744. +Major mode for editing Lisp code for Lisps other than GNU Emacs Lisp.
  8745. +Commands:
  8746. +Delete converts tabs to spaces as it moves back.
  8747. +Blank lines separate paragraphs.  Semicolons start comments.
  8748. +\{lisp-mode-map}
  8749. +Note that `run-lisp' may be used either to start an inferior Lisp job
  8750. +or to switch back to an existing one.
  8751. +
  8752. +Entry to this mode calls the value of `lisp-mode-hook'
  8753. +if that value is non-nil.Flisp-eval-defun
  8754. +Send the current defun to the Lisp process made by \[run-lisp].Vlisp-interaction-mode-map
  8755. +Keymap for Lisp Interaction moe.
  8756. +All commands in `shared-lisp-mode-map' are inherited by this map.Flisp-interaction-mode
  8757. +Major mode for typing and evaluating Lisp forms.
  8758. +Like Lisp mode except that \[eval-print-last-sexp] evals the Lisp expression
  8759. +before point, and prints its value into the buffer, advancing point.
  8760. +
  8761. +Commands:
  8762. +Delete converts tabs to spaces as it moves back.
  8763. +Paragraphs are separated only by blank lines.
  8764. +Semicolons start comments.
  8765. +\{lisp-interaction-mode-map}
  8766. +Entry to this mode calls the value of `lisp-interaction-mode-hook'
  8767. +if that value is non-nil.Feval-print-last-sexp
  8768. +Evaluate sexp before point; print value into current buffer.Feval-last-sexp
  8769. +Evaluate sexp before point; print value in minibuffer.
  8770. +With argument, print output into current buffer.Feval-defun
  8771. +Evaluate defun that point is in or before.
  8772. +Print value in minibuffer.
  8773. +With argument, insert value in current buffer after the defun.Vlisp-indent-offset
  8774. +Vlisp-indent-function
  8775. +Flisp-indent-line
  8776. +Indent current line as Lisp code.
  8777. +With argument, indent any additional lines of the same expression
  8778. +rigidly along with this one.Fcalculate-lisp-indent
  8779. +Return appropriate indentation for current line as Lisp code.
  8780. +In usual case returns an integer: the column to indent to.
  8781. +Can instead return a list, whose car is the column to indent to.
  8782. +This means that following lines at the same level of indentation
  8783. +should not necessarily be indented the same way.
  8784. +The second element of the list is the buffer position
  8785. +of the start of the containing expression.Vlisp-body-indent
  8786. +Number of columns to indent the second line of a `(def...)' form.Findent-sexp
  8787. +Indent each line of the list starting just after point.
  8788. +If optional arg ENDPOS is given, indent each line, stopping when
  8789. +ENDPOS is encountered.Flisp-fill-paragraph
  8790. +Like \[fill-paragraph], but handle Emacs Lisp comments.
  8791. +If any of the current line is a comment, fill the comment or the
  8792. +paragraph of it that point is in, preserving the comment's indentation
  8793. +and initial semicolons.Findent-code-rigidly
  8794. +Indent all lines of code, starting in the region, sideways by ARG columns.
  8795. +Does not affect lines starting inside comments or strings, assuming that
  8796. +the start of the region is not inside them.
  8797. +
  8798. +Called from a program, takes args START, END, COLUMNS and NOCHANGE-REGEXP.
  8799. +The last is a regexp which, if matched at the beginning of a line,
  8800. +means don't indent that line.Vdefun-prompt-regexp
  8801. +*Non-nil => regexp to ignore, before the character that starts a defun.
  8802. +This is only necessary if the opening paren or brace is not in column 0.
  8803. +See `beginning-of-defun'.Vparens-require-spaces
  8804. +Non-nil => `insert-parentheses' should insert whitespace as needed.Fforward-sexp
  8805. +Move forward across one balanced expression (sexp).
  8806. +With argument, do it that many times.  Negative arg -N means
  8807. +move backward across N balanced expressions.Fbackward-sexp
  8808. +Move backward across one balanced expression (sexp).
  8809. +With argument, do it that many times.  Negative arg -N means
  8810. +move forward across N balanced expressions.Fmark-sexp
  8811. +Set mark ARG sexps from point.
  8812. +The place mark goes is the same place \[forward-sexp] would
  8813. +move to with the same argument.Fforward-list
  8814. +Move forward across one balanced group of parentheses.
  8815. +With argument, do it that many times.
  8816. +Negative arg -N means move backward across N groups of parentheses.Fbackward-list
  8817. +Move backward across one balanced group of parentheses.
  8818. +With argument, do it that many times.
  8819. +Negative arg -N means move forward across N groups of parentheses.Fdown-list
  8820. +Move forward down one level of parentheses.
  8821. +With argument, do this that many times.
  8822. +A negative argument means move backward but still go down a level.
  8823. +In Lisp programs, an argument is required.Fbackward-up-list
  8824. +Move backward out of one level of parentheses.
  8825. +With argument, do this that many times.
  8826. +A negative argument means move forward but still to a less deep spot.
  8827. +In Lisp programs, an argument is required.Fup-list
  8828. +Move forward out of one level of parentheses.
  8829. +With argument, do this that many times.
  8830. +A negative argument means move backward but still to a less deep spot.
  8831. +In Lisp programs, an argument is required.Fkill-sexp
  8832. +Kill the sexp (balanced expression) following the cursor.
  8833. +With argument, kill that many sexps after the cursor.
  8834. +Negative arg -N means kill N sexps before the cursor.Fbackward-kill-sexp
  8835. +Kill the sexp (balanced expression) preceding the cursor.
  8836. +With argument, kill that many sexps before the cursor.
  8837. +Negative arg -N means kill N sexps after the cursor.Fbeginning-of-defun
  8838. +Move backward to the beginning of a defun.
  8839. +With argument, do it that many times.  Negative arg -N
  8840. +means move forward to Nth following beginning of defun.
  8841. +Returns t unless search stops due to beginning or end of buffer.
  8842. +
  8843. +Normally a defun starts when there is an char with open-parenthesis
  8844. +syntax at the beginning of a line.  If `defun-prompt-regexp' is
  8845. +non-nil, then a string which matches that regexp may precede the
  8846. +open-parenthesis, and point ends up at the beginning of the line.Fbeginning-of-defun-raw
  8847. +Move point to the character that starts a defun.
  8848. +This is identical to beginning-of-defun, except that point does not move
  8849. +to the beginning of the line when `defun-prompt-regexp' is non-nil.Fend-of-defun
  8850. +Move forward to next end of defun.  With argument, do it that many times.
  8851. +Negative argument -N means move back to Nth preceding end of defun.
  8852. +
  8853. +An end of a defun occurs right after the close-parenthesis that matches
  8854. +the open-parenthesis that starts a defun; see `beginning-of-defun'.Fmark-defun
  8855. +Put mark at end of this defun, point at beginning.
  8856. +The defun marked is the one that contains point or follows point.Finsert-parentheses
  8857. +Put parentheses around next ARG sexps.  Leave point after open-paren.
  8858. +No argument is equivalent to zero: just insert `()' and leave point between.
  8859. +If `parens-require-spaces' is non-nil, this command also inserts a space
  8860. +before and after, depending on the surrounding characters.Fmove-past-close-and-reindent
  8861. +Move past next `)', delete indentation before it, then indent after it.Flisp-complete-symbol
  8862. +Perform completion on Lisp symbol preceding point.
  8863. +Compare that symbol against the known Lisp symbols.
  8864. +
  8865. +The context determines which symbols are considered.
  8866. +If the symbol starts just after an open-parenthesis, only symbols
  8867. +with function definitions are considered.  Otherwise, all symbols with
  8868. +function definitions, values or properties are considered.Vminor-mode-alist
  8869. +Alist saying how to show minor modes in the mode line.
  8870. +Each element looks like (VARIABLE STRING);
  8871. +STRING is included in the mode line iff VARIABLE's value is non-nil.
  8872. +
  8873. +Actually, STRING need not be a string; any possible mode-line element
  8874. +is okay.  See `mode-line-format'.Fprompt-for-change-log-name
  8875. +Prompt for a change log name.Ffind-change-log
  8876. +Find a change log file for \[add-change-log-entry] and return the name.
  8877. +Optional arg FILE-NAME is a name to try first.
  8878. +If FILE-NAME is nil, use the value of `change-log-default-name' if non-nil.
  8879. +Failing that, use "ChangeLog" in the current directory.
  8880. +If the file does not exist in the named directory, successive parent
  8881. +directories are tried.
  8882. +
  8883. +Once a file is found, `change-log-default-name' is set locally in the
  8884. +current buffer to the complete file name.Fadd-change-log-entry
  8885. +Find change log file and add an entry for today.
  8886. +Optional arg (interactive prefix) non-nil means prompt for user name and site.
  8887. +Second arg is file name of change log.  If nil, uses `change-log-default-name'.
  8888. +Third arg OTHER-WINDOW non-nil means visit in other window.
  8889. +Fourth arg NEW-ENTRY non-nil means always create a new entry at the front;
  8890. +never append to an existing entry.Fadd-change-log-entry-other-window
  8891. +Find change log file in other window and add an entry for today.
  8892. +Optional arg (interactive prefix) non-nil means prompt for user name and site.
  8893. +Second arg is file name of change log.  If nil, uses `change-log-default-name'.Fchange-log-mode
  8894. +Major mode for editing change logs; like Indented Text Mode.
  8895. +Prevents numeric backups and sets `left-margin' to 8 and `fill-column' to 74.
  8896. +New log entries are usually made with \[add-change-log-entry] or \[add-change-log-entry-other-window].
  8897. +Each entry behaves as a paragraph, and the entries for one day as a page.
  8898. +Runs `change-log-mode-hook'.Fadd-log-current-defun
  8899. +Return name of function definition point is in, or nil.
  8900. +
  8901. +Understands C, Lisp, LaTeX ("functions" are chapters, sections, ...),
  8902. +Texinfo (@node titles), and Fortran.
  8903. +
  8904. +Other modes are handled by a heuristic that looks in the 10K before
  8905. +point for uppercase headings starting in the first column or
  8906. +identifiers followed by `:' or `=', see variable
  8907. +`add-log-current-defun-header-regexp'.
  8908. +
  8909. +Has a preference of looking backwards.Vad-start-advice-on-load
  8910. +*Non-nil will start Advice magic when this file gets loaded.
  8911. +Also see function `ad-start-advice'.Vad-activate-on-definition
  8912. +*Non-nil means automatic advice activation at function definition.
  8913. +Set this variable to t if you want to enable forward advice (which is
  8914. +automatic advice activation of a previously undefined function at the
  8915. +point the function gets defined/loaded/autoloaded).  The value of this
  8916. +variable takes effect only during the execution of `ad-start-advice'. 
  8917. +If non-nil it will enable definition hooks regardless of the value
  8918. +of `ad-enable-definition-hooks'.Vad-redefinition-action
  8919. +*Defines what to do with redefinitions during de/activation.
  8920. +Redefinition occurs if a previously activated function that already has an
  8921. +original definition associated with it gets redefined and then de/activated.
  8922. +In such a case we can either accept the current definition as the new
  8923. +original definition, discard the current definition and replace it with the
  8924. +old original, or keep it and raise an error.  The values `accept', `discard',
  8925. +`error' or `warn' govern what will be done.  `warn' is just like `accept' but
  8926. +it additionally prints a warning message.  All other values will be
  8927. +interpreted as `error'.Vad-definition-hooks
  8928. +*List of hooks to be run after a function definition.
  8929. +The variable `ad-defined-function' will be bound to the name of
  8930. +the currently defined function when the hook function is run.Vad-enable-definition-hooks
  8931. +*Non-nil will enable hooks to be run on function definition.
  8932. +Setting this variable is a noop unless the value of
  8933. +`ad-activate-on-definition' (which see) is nil.Fad-add-advice
  8934. +Adds a piece of ADVICE to FUNCTION's list of advices in CLASS.
  8935. +If FUNCTION already has one or more pieces of advice of the specified
  8936. +CLASS then POSITION determines where the new piece will go.  The value
  8937. +of POSITION can either be `first', `last' or a number where 0 corresponds
  8938. +to `first'.  Numbers outside the range will be mapped to the closest
  8939. +extreme position.  If there was already a piece of ADVICE with the same
  8940. +name, then the position argument will be ignored and the old advice
  8941. +will be overwritten with the new one.
  8942. +    If the FUNCTION was not advised already, then its advice info will be 
  8943. +initialized.  Redefining a piece of advice whose name is part of the cache-id
  8944. +will clear the cache.Fdefadvice
  8945. +Defines a piece of advice for FUNCTION (a symbol).
  8946. +The syntax of `defadvice' is as follows:
  8947. +
  8948. +  (defadvice FUNCTION (CLASS NAME [POSITION] [ARGLIST] FLAG...)
  8949. +    [DOCSTRING] [INTERACTIVE-FORM]
  8950. +    BODY... )
  8951. +
  8952. +FUNCTION ::= Name of the function to be advised.
  8953. +CLASS ::= `before' | `around' | `after' | `activation' | `deactivation'.
  8954. +NAME ::= Non-nil symbol that names this piece of advice.
  8955. +POSITION ::= `first' | `last' | NUMBER. Optional, defaults to `first',
  8956. +    see also `ad-add-advice'.
  8957. +ARGLIST ::= An optional argument list to be used for the advised function
  8958. +    instead of the argument list of the original.  The first one found in
  8959. +    before/around/after-advices will be used.
  8960. +FLAG ::= `protect'|`disable'|`activate'|`compile'|`preactivate'|`freeze'.
  8961. +    All flags can be specified with unambiguous initial substrings.
  8962. +DOCSTRING ::= Optional documentation for this piece of advice.
  8963. +INTERACTIVE-FORM ::= Optional interactive form to be used for the advised
  8964. +    function.  The first one found in before/around/after-advices will be used.
  8965. +BODY ::= Any s-expression.
  8966. +
  8967. +Semantics of the various flags:
  8968. +`protect': The piece of advice will be protected against non-local exits in
  8969. +any code that precedes it.  If any around-advice of a function is protected
  8970. +then automatically all around-advices will be protected (the complete onion).
  8971. +
  8972. +`activate': All advice of FUNCTION will be activated immediately if
  8973. +FUNCTION has been properly defined prior to this application of `defadvice'.
  8974. +
  8975. +`compile': In conjunction with `activate' specifies that the resulting
  8976. +advised function should be compiled.
  8977. +
  8978. +`disable': The defined advice will be disabled, hence, it will not be used 
  8979. +during activation until somebody enables it.
  8980. +
  8981. +`preactivate': Preactivates the advised FUNCTION at macro-expansion/compile
  8982. +time.  This generates a compiled advised definition according to the current
  8983. +advice state that will be used during activation if appropriate.  Only use
  8984. +this if the `defadvice' gets actually compiled.
  8985. +
  8986. +`freeze': Expands the `defadvice' into a redefining `defun/defmacro' according
  8987. +to the current advice state.  No other advice information will be saved.
  8988. +Frozen advices cannot be undone, they behave like a hard redefinition of
  8989. +the advised function.  `freeze' implies `activate' and `preactivate'.  The
  8990. +documentation of the advised function can be dumped onto the `DOC' file
  8991. +during preloading.
  8992. +
  8993. +Look at the file `advice.el' for comprehensive documentation.Fad-start-advice
  8994. +Redefines some primitives to start the advice magic.
  8995. +If `ad-activate-on-definition' is t then advice information will
  8996. +automatically get activated whenever an advised function gets defined or
  8997. +redefined.  This will enable goodies such as forward advice and
  8998. +automatically enable function definition hooks.  If its value is nil but
  8999. +the value of `ad-enable-definition-hooks' is t then definition hooks
  9000. +will be enabled without having automatic advice activation, otherwise
  9001. +function definition hooks will be disabled too.  If definition hooks are
  9002. +enabled then functions stored in `ad-definition-hooks' are run whenever
  9003. +a function gets defined or redefined.Vappt-issue-message
  9004. +*Non-nil means check for appointments in the diary buffer.
  9005. +To be detected, the diary entry must have the time
  9006. +as the first thing on a line.Vappt-message-warning-time
  9007. +*Time in minutes before an appointment that the warning begins.Vappt-audible
  9008. +*Non-nil means beep to indicate appointment.Vappt-visible
  9009. +*Non-nil means display appointment message in echo area.Vappt-display-mode-line
  9010. +*Non-nil means display minutes to appointment and time on the mode line.Vappt-msg-window
  9011. +*Non-nil means display appointment message in another window.Vappt-display-duration
  9012. +*The number of seconds an appointment message is displayed.Vappt-display-diary
  9013. +*Non-nil means to display the next days diary on the screen. 
  9014. +This will occur at midnight when the appointment list is updated.Fapropos
  9015. +Show all symbols whose names contain matches for REGEXP.
  9016. +If optional argument DO-ALL is non-nil (prefix argument if interactive),
  9017. +or if `apropos-do-all' is non-nil, does more (time-consuming) work such as
  9018. +showing key bindings.  Optional argument PRED is called with each symbol, and
  9019. +if it returns nil, the symbol is not shown.
  9020. +
  9021. +Returns list of symbols and documentation found.Fsuper-apropos
  9022. +Show symbols whose names/documentation contain matches for REGEXP.
  9023. +If optional argument DO-ALL is non-nil (prefix argument if interactive),
  9024. +or if `apropos-do-all' is non-nil, does more (time-consuming) work such as
  9025. +showing key bindings and documentation that is not stored in the documentation
  9026. +file.
  9027. +
  9028. +Returns list of symbols and documentation found.Fasm-mode
  9029. +Major mode for editing typical assembler code.
  9030. +Features a private abbrev table and the following bindings:
  9031. +
  9032. +\[asm-colon]    outdent a preceding label, tab to next tab stop.
  9033. +\[tab-to-tab-stop]    tab to next tab stop.
  9034. +\[asm-newline]    newline, then tab to next tab stop.
  9035. +\[asm-comment]    smart placement of assembler comments.
  9036. +
  9037. +The character used for making comments is set by the variable
  9038. +`asm-comment-char' (which defaults to `?;').
  9039. +
  9040. +Alternatively, you may set this variable in `asm-set-comment-hook', which is
  9041. +called near the beginning of mode initialization.
  9042. +
  9043. +Turning on Asm mode runs the hook `asm-mode-hook' at the end of initialization.
  9044. +
  9045. +Special commands:
  9046. +\{asm-mode-map}
  9047. +Fupdate-file-autoloads
  9048. +Update the autoloads for FILE in `generated-autoload-file'
  9049. +(which FILE might bind in its local variables).Fupdate-autoloads-here
  9050. +Update sections of the current buffer generated by \[update-file-autoloads].Fupdate-directory-autoloads
  9051. +Run \[update-file-autoloads] on each .el file in DIR.Fbatch-update-autoloads
  9052. +Update the autoloads for the files or directories on the command line.
  9053. +Runs \[update-file-autoloads] on files and \[update-directory-autoloads]
  9054. +on directories.  Must be used only with -batch, and kills Emacs on completion.
  9055. +Each file will be processed even if an error occurred previously.
  9056. +For example, invoke `emacs -batch -f batch-update-autoloads *.el'.Fawk-mode
  9057. +Major mode for editing AWK code.
  9058. +This is much like C mode except for the syntax of comments.  It uses
  9059. +the same keymap as C mode and has the same variables for customizing
  9060. +indentation.  It has its own abbrev table and its own syntax table.
  9061. +
  9062. +Turning on AWK mode calls the value of the variable `awk-mode-hook'
  9063. +with no args, if that value is non-nil.Fbackquote
  9064. +Argument STRUCTURE describes a template to build.
  9065. +
  9066. +The whole structure acts as if it were quoted except for certain
  9067. +places where expressions are evaluated and inserted or spliced in.
  9068. +
  9069. +For example:
  9070. +
  9071. +b                 => (ba bb bc)        ; assume b has this value
  9072. +(` (a b c))       => (a b c)        ; backquote acts like quote
  9073. +(` (a (, b) c))   => (a (ba bb bc) c)    ; insert the value of b
  9074. +(` (a (,@ b) c))  => (a ba bb bc c)    ; splice in the value of b
  9075. +
  9076. +Vectors work just like lists.  Nested backquotes are permitted.Fbibtex-mode
  9077. +Major mode for editing bibtex files.
  9078. +
  9079. +\{bibtex-mode-map}
  9080. +
  9081. +A command such as \[bibtex-Book] will outline the fields for a BibTeX book entry.
  9082. +
  9083. +The optional fields start with the string OPT, and thus ignored by BibTeX.
  9084. +The OPT string may be removed from a field with \[bibtex-remove-OPT].
  9085. +\[bibtex-kill-optional-field] kills the current optional field entirely.
  9086. +\[bibtex-remove-double-quotes] removes the double-quotes around the text of
  9087. +the current field.  \[bibtex-empty-field] replaces the text of the current
  9088. +field with the default "".
  9089. +
  9090. +The command \[bibtex-clean-entry] cleans the current entry, i.e. (i) removes
  9091. +double-quotes from entirely numerical fields, (ii) removes OPT from all
  9092. +non-empty optional fields, (iii) removes all empty optional fields, and (iv)
  9093. +checks that no non-optional fields are empty.
  9094. +
  9095. +Use \[bibtex-find-text] to position the dot at the end of the current field.
  9096. +Use \[bibtex-next-field] to move to end of the next field.
  9097. +
  9098. +The following may be of interest as well:
  9099. +
  9100. +  Functions:
  9101. +    find-bibtex-duplicates
  9102. +    find-bibtex-entry-location
  9103. +    hide-bibtex-entry-bodies
  9104. +    sort-bibtex-entries
  9105. +    validate-bibtex-buffer
  9106. +
  9107. +  Variables:
  9108. +    bibtex-clean-entry-zap-empty-opts
  9109. +    bibtex-entry-field-alist
  9110. +    bibtex-include-OPTannote
  9111. +    bibtex-include-OPTcrossref
  9112. +    bibtex-include-OPTkey
  9113. +    bibtex-maintain-sorted-entries
  9114. +    bibtex-mode-user-optional-fields
  9115. +
  9116. +Fields:
  9117. +    address
  9118. +           Publisher's address
  9119. +    annote
  9120. +           Long annotation used for annotated bibliographies (begins sentence)
  9121. +    author
  9122. +           Name(s) of author(s), in BibTeX name format
  9123. +    booktitle
  9124. +           Book title when the thing being referenced isn't the whole book.
  9125. +           For book entries, the title field should be used instead.
  9126. +    chapter
  9127. +           Chapter number
  9128. +    crossref
  9129. +       The database key of the entry being cross referenced.
  9130. +    edition
  9131. +           Edition of a book (e.g., "second")
  9132. +    editor
  9133. +           Name(s) of editor(s), in BibTeX name format.
  9134. +           If there is also an author field, then the editor field should be
  9135. +           for the book or collection that the work appears in
  9136. +    howpublished
  9137. +            How something strange has been published (begins sentence)
  9138. +    institution
  9139. +           Sponsoring institution
  9140. +    journal
  9141. +           Journal name (macros are provided for many)
  9142. +    key
  9143. +           Alphabetizing and labeling key (needed when no author or editor)
  9144. +    month
  9145. +           Month (macros are provided)
  9146. +    note
  9147. +           To help the reader find a reference (begins sentence)
  9148. +    number
  9149. +           Number of a journal or technical report
  9150. +    organization
  9151. +           Organization (sponsoring a conference)
  9152. +    pages
  9153. +           Page number or numbers (use `--' to separate a range)
  9154. +    publisher
  9155. +           Publisher name
  9156. +    school
  9157. +           School name (for theses)
  9158. +    series
  9159. +           The name of a series or set of books.
  9160. +           An individual book will will also have it's own title
  9161. +    title
  9162. +           The title of the thing being referenced
  9163. +    type
  9164. +           Type of a technical report (e.g., "Research Note") to be used
  9165. +           instead of the default "Technical Report"
  9166. +    volume
  9167. +           Volume of a journal or multivolume work
  9168. +    year
  9169. +           Year---should contain only numerals
  9170. +---------------------------------------------------------
  9171. +Entry to this mode calls the value of bibtex-mode-hook if that value is
  9172. +non-nil.Fblackbox
  9173. +Play blackbox.  Optional prefix argument is the number of balls;
  9174. +the default is 4.
  9175. +
  9176. +What is blackbox?
  9177. +
  9178. +Blackbox is a game of hide and seek played on an 8 by 8 grid (the
  9179. +Blackbox).  Your opponent (Emacs, in this case) has hidden several
  9180. +balls (usually 4) within this box.  By shooting rays into the box and
  9181. +observing where they emerge it is possible to deduce the positions of
  9182. +the hidden balls.  The fewer rays you use to find the balls, the lower
  9183. +your score.
  9184. +
  9185. +Overview of play:
  9186. +
  9187. +\<blackbox-mode-map>To play blackbox, type \[blackbox].  An optional prefix argument
  9188. +specifies the number of balls to be hidden in the box; the default is
  9189. +four.
  9190. +
  9191. +The cursor can be moved around the box with the standard cursor
  9192. +movement keys.
  9193. +
  9194. +To shoot a ray, move the cursor to the edge of the box and press SPC.
  9195. +The result will be determined and the playfield updated.
  9196. +
  9197. +You may place or remove balls in the box by moving the cursor into the
  9198. +box and pressing \[bb-romp].
  9199. +
  9200. +When you think the configuration of balls you have placed is correct,
  9201. +press \[bb-done].  You will be informed whether you are correct or
  9202. +not, and be given your score.  Your score is the number of letters and
  9203. +numbers around the outside of the box plus five for each incorrectly
  9204. +placed ball.  If you placed any balls incorrectly, they will be
  9205. +indicated with `x', and their actual positions indicated with `o'.
  9206. +
  9207. +Details:
  9208. +
  9209. +There are three possible outcomes for each ray you send into the box:
  9210. +
  9211. +    Detour: the ray is deflected and emerges somewhere other than
  9212. +        where you sent it in.  On the playfield, detours are
  9213. +        denoted by matching pairs of numbers -- one where the
  9214. +        ray went in, and the other where it came out.
  9215. +
  9216. +    Reflection: the ray is reflected and emerges in the same place
  9217. +        it was sent in.  On the playfield, reflections are
  9218. +        denoted by the letter `R'.
  9219. +
  9220. +    Hit:    the ray strikes a ball directly and is absorbed.  It does
  9221. +        not emerge from the box.  On the playfield, hits are
  9222. +        denoted by the letter `H'.
  9223. +
  9224. +The rules for how balls deflect rays are simple and are best shown by
  9225. +example.
  9226. +
  9227. +As a ray approaches a ball it is deflected ninety degrees.  Rays can
  9228. +be deflected multiple times.  In the diagrams below, the dashes
  9229. +represent empty box locations and the letter `O' represents a ball.
  9230. +The entrance and exit points of each ray are marked with numbers as
  9231. +described under "Detour" above.  Note that the entrance and exit
  9232. +points are always interchangeable.  `*' denotes the path taken by the
  9233. +ray.
  9234. +
  9235. +Note carefully the relative positions of the ball and the ninety
  9236. +degree deflection it causes.
  9237. +
  9238. +    1                                            
  9239. +  - * - - - - - -         - - - - - - - -         - - - - - - - -       
  9240. +  - * - - - - - -         - - - - - - - -         - - - - - - - -       
  9241. +1 * * - - - - - -         - - - - - - - -         - O - - - - O -       
  9242. +  - - O - - - - -         - - O - - - - -         - - * * * * - -
  9243. +  - - - - - - - -         - - - * * * * * 2     3 * * * - - * - -
  9244. +  - - - - - - - -         - - - * - - - -         - - - O - * - -      
  9245. +  - - - - - - - -         - - - * - - - -         - - - - * * - -       
  9246. +  - - - - - - - -         - - - * - - - -         - - - - * - O -       
  9247. +                                2                         3
  9248. +
  9249. +As mentioned above, a reflection occurs when a ray emerges from the same point
  9250. +it was sent in.  This can happen in several ways:
  9251. +
  9252. +                                                                           
  9253. +  - - - - - - - -         - - - - - - - -          - - - - - - - -
  9254. +  - - - - O - - -         - - O - O - - -          - - - - - - - -
  9255. +R * * * * - - - -         - - - * - - - -          O - - - - - - -
  9256. +  - - - - O - - -         - - - * - - - -        R - - - - - - - -
  9257. +  - - - - - - - -         - - - * - - - -          - - - - - - - -
  9258. +  - - - - - - - -         - - - * - - - -          - - - - - - - -
  9259. +  - - - - - - - -       R * * * * - - - -          - - - - - - - -
  9260. +  - - - - - - - -         - - - - O - - -          - - - - - - - -
  9261. +
  9262. +In the first example, the ray is deflected downwards by the upper
  9263. +ball, then left by the lower ball, and finally retraces its path to
  9264. +its point of origin.  The second example is similar.  The third
  9265. +example is a bit anomalous but can be rationalized by realizing the
  9266. +ray never gets a chance to get into the box.  Alternatively, the ray
  9267. +can be thought of as being deflected downwards and immediately
  9268. +emerging from the box.
  9269. +
  9270. +A hit occurs when a ray runs straight into a ball:
  9271. +
  9272. +  - - - - - - - -         - - - - - - - -          - - - - - - - -
  9273. +  - - - - - - - -         - - - - - - - -          - - - - O - - -
  9274. +  - - - - - - - -         - - - - O - - -        H * * * * - - - -
  9275. +  - - - - - - - -       H * * * * O - - -          - - - * - - - -
  9276. +  - - - - - - - -         - - - - O - - -          - - - O - - - -
  9277. +H * * * O - - - -         - - - - - - - -          - - - - - - - -
  9278. +  - - - - - - - -         - - - - - - - -          - - - - - - - -
  9279. +  - - - - - - - -         - - - - - - - -          - - - - - - - -
  9280. +
  9281. +Be sure to compare the second example of a hit with the first example of
  9282. +a reflection.Vbookmark-map
  9283. +Keymap containing bindings to bookmark functions.
  9284. +It is not bound to any key by default: to bind it
  9285. +so that you have a bookmark prefix, just use `global-set-key' and bind a
  9286. +key of your choice to `bookmark-map'.  All interactive bookmark
  9287. +functions have a binding in this keymap.Fbookmark-set
  9288. +Set a bookmark named NAME inside a file.  
  9289. +With prefix arg, will not overwrite a bookmark that has the same name
  9290. +as NAME if such a bookmark already exists, but instead will "push"
  9291. +the new bookmark onto the bookmark alist.  Thus the most recently set
  9292. +bookmark with name NAME would be the one in effect at any given time,
  9293. +but the others are still there, should you decide to delete the most
  9294. +recent one.
  9295. +
  9296. +To yank words from the text of the buffer and use them as part of the
  9297. +bookmark name, type C-w while setting a bookmark.  Successive C-w's
  9298. +yank successive words.
  9299. +
  9300. +Typing C-v inserts the name of the current file being visited. Typing
  9301. +C-u inserts the name of the last bookmark used in the buffer (as an
  9302. +aid in using a single bookmark name to track your progress through a
  9303. +large file).  If no bookmark was used, then C-u behaves like C-v and
  9304. +inserts the name of the file being visited.
  9305. +
  9306. +Use \[bookmark-delete] to remove bookmarks (you give it a name,
  9307. +and it removes only the first instance of a bookmark with that name from
  9308. +the list of bookmarks.)Fbookmark-jump
  9309. +Jump to bookmark BOOKMARK (a point in some file).  
  9310. +You may have a problem using this function if the value of variable
  9311. +`bookmark-alist' is nil.  If that happens, you need to load in some
  9312. +bookmarks.  See help on function `bookmark-load' for more about
  9313. +this.
  9314. +
  9315. +If the file pointed to by BOOKMARK no longer exists, you will be asked
  9316. +if you wish to give the bookmark a new location, and bookmark-jump
  9317. +will then jump to the new location, as well as recording it in place
  9318. +of the old one in the permanent bookmark record.Fbookmark-relocate
  9319. +Relocate BOOKMARK -- prompts for a filename, and makes an already
  9320. +existing bookmark point to that file, instead of the one it used to
  9321. +point at.  Useful when a file has been renamed after a bookmark was
  9322. +set in it.Fbookmark-locate
  9323. +Insert the name of the file associated with BOOKMARK.
  9324. +Optional second arg NO-INSERTION means merely return the filename as a
  9325. +string.Fbookmark-rename
  9326. +Change the name of OLD-BOOKMARK to NEWNAME.  
  9327. +If called from keyboard, prompts for OLD-BOOKMARK and NEWNAME.
  9328. +If called from menubar, OLD-BOOKMARK is selected from a menu, and
  9329. +prompts for NEWNAME. 
  9330. +If called from Lisp, prompts for NEWNAME if only OLD-BOOKMARK was
  9331. +passed as an argument.  If called with two strings, then no prompting
  9332. +is done.  You must pass at least OLD-BOOKMARK when calling from Lisp.
  9333. +
  9334. +While you are entering the new name, consecutive C-w's insert
  9335. +consectutive words from the text of the buffer into the new bookmark
  9336. +name, and C-v inserts the name of the file.Fbookmark-insert
  9337. +Insert the text of the file pointed to by bookmark BOOKMARK.  
  9338. +You may have a problem using this function if the value of variable
  9339. +`bookmark-alist' is nil.  If that happens, you need to load in some
  9340. +bookmarks.  See help on function `bookmark-load' for more about
  9341. +this.Fbookmark-delete
  9342. +Delete the bookmark named NAME from the bookmark list.  
  9343. +Removes only the first instance of a bookmark with that name.  If
  9344. +there are one or more other bookmarks with the same name, they will
  9345. +not be deleted.  Defaults to the "current" bookmark (that is, the
  9346. +one most recently used in this file, if any).Fbookmark-write
  9347. +Write bookmarks to a file (for which the user will be prompted
  9348. +interactively).  Don't use this in Lisp programs; use bookmark-save
  9349. +instead.Fbookmark-save
  9350. +Save currently defined bookmarks.
  9351. +Saves by default in the file defined by the variable
  9352. +`bookmark-file'.  With a prefix arg, save it in file FILE.
  9353. +
  9354. +If you are calling this from Lisp, the two arguments are PREFIX-ARG
  9355. +and FILE, and if you just want it to write to the default file, then
  9356. +pass no arguments.  Or pass in nil and FILE, and it will save in FILE
  9357. +instead.  If you pass in one argument, and it is non-nil, then the
  9358. +user will be interactively queried for a file to save in.
  9359. +
  9360. +When you want to load in the bookmarks from a file, use
  9361. +`bookmark-load', \[bookmark-load].  That function will prompt you
  9362. +for a file, defaulting to the file defined by variable
  9363. +`bookmark-file'.Fbookmark-load
  9364. +Load bookmarks from FILE (which must be in bookmark format).
  9365. +Appends loaded bookmarks to the front of the list of bookmarks.  If
  9366. +optional second argument REVERT is non-nil, existing bookmarks are
  9367. +destroyed.  Optional third arg NO-MSG means don't display any messages
  9368. +while loading.
  9369. +
  9370. +If you load a file that doesn't contain a proper bookmark alist, you
  9371. +will corrupt Emacs's bookmark list.  Generally, you should only load
  9372. +in files that were created with the bookmark functions in the first
  9373. +place.  Your own personal bookmark file, `~/.emacs-bkmrks', is
  9374. +maintained automatically by Emacs; you shouldn't need to load it
  9375. +explicitly.Flist-bookmarks
  9376. +Display a list of existing bookmarks.
  9377. +The list is displayed in a buffer named `*Bookmark List*'.
  9378. +The leftmost column displays a D if the bookmark is flagged for
  9379. +deletion, or > if it is flagged for displaying.Fbookmark-menu-bar-insert
  9380. +Insert the text of the file pointed to by bookmark BOOKMARK.  
  9381. +You may have a problem using this function if the value of variable
  9382. +`bookmark-alist' is nil.  If that happens, you need to load in some
  9383. +bookmarks.  See help on function `bookmark-load' for more about
  9384. +this.Fbookmark-menu-bar-jump
  9385. +Jump to bookmark BOOKMARK (a point in some file).  
  9386. +You may have a problem using this function if the value of variable
  9387. +`bookmark-alist' is nil.  If that happens, you need to load in some
  9388. +bookmarks.  See help on function `bookmark-load' for more about
  9389. +this.Fbookmark-menu-bar-locate
  9390. +Insert the name of the  file associated with BOOKMARK. 
  9391. +(This is not the same as the contents of that file).Fbookmark-menu-bar-rename
  9392. +Change the name of OLD-BOOKMARK to NEWNAME.  
  9393. +If called from keyboard, prompts for OLD-BOOKMARK and NEWNAME.
  9394. +If called from menubar, OLD-BOOKMARK is selected from a menu, and
  9395. +prompts for NEWNAME. 
  9396. +If called from Lisp, prompts for NEWNAME if only OLD-BOOKMARK was
  9397. +passed as an argument.  If called with two strings, then no prompting
  9398. +is done.  You must pass at least OLD-BOOKMARK when calling from Lisp.
  9399. +
  9400. +While you are entering the new name, consecutive C-w's insert
  9401. +consectutive words from the text of the buffer into the new bookmark
  9402. +name, and C-v inserts the name of the file.Fbookmark-menu-bar-delete
  9403. +Delete the bookmark named NAME from the bookmark list.  
  9404. +Removes only the first instance of a bookmark with that name.  If
  9405. +there are one or more other bookmarks with the same name, they will
  9406. +not be deleted.  Defaults to the "current" bookmark (that is, the
  9407. +one most recently used in this file, if any).Fbyte-recompile-directory
  9408. +Recompile every `.el' file in DIRECTORY that needs recompilation.
  9409. +This is if a `.elc' file exists but is older than the `.el' file.
  9410. +Files in subdirectories of DIRECTORY are processed also.
  9411. +
  9412. +If the `.elc' file does not exist, normally the `.el' file is *not* compiled.
  9413. +But a prefix argument (optional second arg) means ask user,
  9414. +for each such `.el' file, whether to compile it.  Prefix argument 0 means
  9415. +don't ask and compile the file anyway.
  9416. +
  9417. +A nonzero prefix argument also means ask about each subdirectory.Fbyte-compile-file
  9418. +Compile a file of Lisp code named FILENAME into a file of byte code.
  9419. +The output file's name is made by appending `c' to the end of FILENAME.
  9420. +With prefix arg (noninteractively: 2nd arg), load the file after compiling.Fcompile-defun
  9421. +Compile and evaluate the current top-level form.
  9422. +Print the result in the minibuffer.
  9423. +With argument, insert value in current buffer after the form.Fbyte-compile
  9424. +If FORM is a symbol, byte-compile its function definition.
  9425. +If FORM is a lambda or a macro, byte-compile it as a function.Fdisplay-call-tree
  9426. +Display a call graph of a specified file.
  9427. +This lists which functions have been called, what functions called
  9428. +them, and what functions they call.  The list includes all functions
  9429. +whose definitions have been compiled in this Emacs session, as well as
  9430. +all functions called by those functions.
  9431. +
  9432. +The call graph does not include macros, inline functions, or
  9433. +primitives that the byte-code interpreter knows about directly (eq,
  9434. +cons, etc.).
  9435. +
  9436. +The call tree also lists those functions which are not known to be called
  9437. +(that is, to which no calls have been compiled), and which cannot be
  9438. +invoked interactively.Fbatch-byte-compile
  9439. +Run `byte-compile-file' on the files remaining on the command line.
  9440. +Use this from the command line, with `-batch';
  9441. +it won't work in an interactive Emacs.
  9442. +Each file is processed even if an error occurred previously.
  9443. +For example, invoke "emacs -batch -f batch-byte-compile $emacs/ ~/*.el"Fbatch-byte-recompile-directory
  9444. +Runs `byte-recompile-directory' on the dirs remaining on the command line.
  9445. +Must be used only with `-batch', and kills Emacs on completion.
  9446. +For example, invoke `emacs -batch -f batch-byte-recompile-directory .'.Vcalendar-week-start-day
  9447. +*The day of the week on which a week in the calendar begins.
  9448. +0 means Sunday (default), 1 means Monday, and so on.Vview-diary-entries-initially
  9449. +*Non-nil means display current date's diary entries on entry.
  9450. +The diary is displayed in another window when the calendar is first displayed,
  9451. +if the current date is visible.  The number of days of diary entries displayed
  9452. +is governed by the variable `number-of-diary-entries'.Vnumber-of-diary-entries
  9453. +*Specifies how many days of diary entries are to be displayed initially.
  9454. +This variable affects the diary display when the command M-x diary is used,
  9455. +or if the value of the variable `view-diary-entries-initially' is t.  For
  9456. +example, if the default value 1 is used, then only the current day's diary
  9457. +entries will be displayed.  If the value 2 is used, then both the current
  9458. +day's and the next day's entries will be displayed.
  9459. +
  9460. +The value can also be a vector such as [0 2 2 2 2 4 1]; this value
  9461. +says to display no diary entries on Sunday, the display the entries
  9462. +for the current date and the day after on Monday through Thursday,
  9463. +display Friday through Monday's entries on Friday, and display only
  9464. +Saturday's entries on Saturday.
  9465. +
  9466. +This variable does not affect the diary display with the `d' command
  9467. +from the calendar; in that case, the prefix argument controls the
  9468. +number of days of diary entries displayed.Vmark-diary-entries-in-calendar
  9469. +*Non-nil means mark dates with diary entries, in the calendar window.
  9470. +The marking symbol is specified by the variable `diary-entry-marker'.Vview-calendar-holidays-initially
  9471. +*Non-nil means display holidays for current three month period on entry.
  9472. +The holidays are displayed in another window when the calendar is first
  9473. +displayed.Vmark-holidays-in-calendar
  9474. +*Non-nil means mark dates of holidays in the calendar window.
  9475. +The marking symbol is specified by the variable `calendar-holiday-marker'.Vall-hebrew-calendar-holidays
  9476. +*If nil, show only major holidays from the Hebrew calendar.
  9477. +This means only those Jewish holidays that appear on secular calendars.
  9478. +
  9479. +If t, show all the holidays that would appear in a complete Hebrew calendar.Vall-christian-calendar-holidays
  9480. +*If nil, show only major holidays from the Christian calendar.
  9481. +This means only those Christian holidays that appear on secular calendars.
  9482. +
  9483. +If t, show all the holidays that would appear in a complete Christian
  9484. +calendar.Vall-islamic-calendar-holidays
  9485. +*If nil, show only major holidays from the Islamic calendar.
  9486. +This means only those Islamic holidays that appear on secular calendars.
  9487. +
  9488. +If t, show all the holidays that would appear in a complete Islamic
  9489. +calendar.Vcalendar-load-hook
  9490. +*List of functions to be called after the calendar is first loaded.
  9491. +This is the place to add key bindings to `calendar-mode-map'.Vinitial-calendar-window-hook
  9492. +*List of functions to be called when the calendar window is first opened.
  9493. +The functions invoked are called after the calendar window is opened, but
  9494. +once opened is never called again.  Leaving the calendar with the `q' command
  9495. +and reentering it will cause these functions to be called again.Vtoday-visible-calendar-hook
  9496. +*List of functions called whenever the current date is visible.
  9497. +This can be used, for example, to replace today's date with asterisks; a
  9498. +function `calendar-star-date' is included for this purpose:
  9499. +    (setq today-visible-calendar-hook 'calendar-star-date)
  9500. +It can also be used to mark the current date with `calendar-today-marker';
  9501. +a function is also provided for this:
  9502. +    (setq today-visible-calendar-hook 'calendar-mark-today)
  9503. +
  9504. +The corresponding variable `today-invisible-calendar-hook' is the list of
  9505. +functions called when the calendar function was called when the current
  9506. +date is not visible in the window.
  9507. +
  9508. +Other than the use of the provided functions, the changing of any
  9509. +characters in the calendar buffer by the hooks may cause the failure of the
  9510. +functions that move by days and weeks.Vtoday-invisible-calendar-hook
  9511. +*List of functions called whenever the current date is not visible.
  9512. +
  9513. +The corresponding variable `today-visible-calendar-hook' is the list of
  9514. +functions called when the calendar function was called when the current
  9515. +date is visible in the window.
  9516. +
  9517. +Other than the use of the provided functions, the changing of any
  9518. +characters in the calendar buffer by the hooks may cause the failure of the
  9519. +functions that move by days and weeks.Vdiary-file
  9520. +*Name of the file in which one's personal diary of dates is kept.
  9521. +
  9522. +The file's entries are lines in any of the forms
  9523. +
  9524. +            MONTH/DAY
  9525. +            MONTH/DAY/YEAR
  9526. +            MONTHNAME DAY
  9527. +            MONTHNAME DAY, YEAR
  9528. +            DAYNAME
  9529. +
  9530. +at the beginning of the line; the remainder of the line is the diary entry
  9531. +string for that date.  MONTH and DAY are one or two digit numbers, YEAR is
  9532. +a number and may be written in full or abbreviated to the final two digits.
  9533. +If the date does not contain a year, it is generic and applies to any year.
  9534. +DAYNAME entries apply to any date on which is on that day of the week.
  9535. +MONTHNAME and DAYNAME can be spelled in full, abbreviated to three
  9536. +characters (with or without a period), capitalized or not.  Any of DAY,
  9537. +MONTH, or MONTHNAME, YEAR can be `*' which matches any day, month, or year,
  9538. +respectively.
  9539. +
  9540. +The European style (in which the day precedes the month) can be used
  9541. +instead, if you execute `european-calendar' when in the calendar, or set
  9542. +`european-calendar-style' to t in your .emacs file.  The European forms are
  9543. +
  9544. +            DAY/MONTH
  9545. +            DAY/MONTH/YEAR
  9546. +            DAY MONTHNAME
  9547. +            DAY MONTHNAME YEAR
  9548. +            DAYNAME
  9549. +
  9550. +To revert to the default American style from the European style, execute
  9551. +`american-calendar' in the calendar.
  9552. +
  9553. +A diary entry can be preceded by the character
  9554. +`diary-nonmarking-symbol' (ordinarily `&') to make that entry
  9555. +nonmarking--that is, it will not be marked on dates in the calendar
  9556. +window but will appear in a diary window.
  9557. +
  9558. +Multiline diary entries are made by indenting lines after the first with
  9559. +either a TAB or one or more spaces.
  9560. +
  9561. +Lines not in one the above formats are ignored.  Here are some sample diary
  9562. +entries (in the default American style):
  9563. +
  9564. +     12/22/1988 Twentieth wedding anniversary!!
  9565. +     &1/1. Happy New Year!
  9566. +     10/22 Ruth's birthday.
  9567. +     21: Payday
  9568. +     Tuesday--weekly meeting with grad students at 10am
  9569. +              Supowit, Shen, Bitner, and Kapoor to attend.
  9570. +     1/13/89 Friday the thirteenth!!
  9571. +     &thu 4pm squash game with Lloyd.
  9572. +     mar 16 Dad's birthday
  9573. +     April 15, 1989 Income tax due.
  9574. +     &* 15 time cards due.
  9575. +
  9576. +If the first line of a diary entry consists only of the date or day name with
  9577. +no trailing blanks or punctuation, then that line is not displayed in the
  9578. +diary window; only the continuation lines is shown.  For example, the
  9579. +single diary entry
  9580. +
  9581. +     02/11/1989
  9582. +      Bill Blattner visits Princeton today
  9583. +      2pm Cognitive Studies Committee meeting
  9584. +      2:30-5:30 Lizzie at Lawrenceville for `Group Initiative'
  9585. +      4:00pm Jamie Tappenden
  9586. +      7:30pm Dinner at George and Ed's for Alan Ryan
  9587. +      7:30-10:00pm dance at Stewart Country Day School
  9588. +
  9589. +will appear in the diary window without the date line at the beginning.  This
  9590. +facility allows the diary window to look neater, but can cause confusion if
  9591. +used with more than one day's entries displayed.
  9592. +
  9593. +Diary entries can be based on Lisp sexps.  For example, the diary entry
  9594. +
  9595. +      %%(diary-block 11 1 1990 11 10 1990) Vacation
  9596. +
  9597. +causes the diary entry "Vacation" to appear from November 1 through November
  9598. +10, 1990.  Other functions available are `diary-float', `diary-anniversary',
  9599. +`diary-cyclic', `diary-day-of-year', `diary-iso-date', `diary-french-date',
  9600. +`diary-hebrew-date', `diary-islamic-date', `diary-mayan-date',
  9601. +`diary-yahrzeit', `diary-sunrise-sunset', `diary-phases-of-moon',
  9602. +`diary-parasha', `diary-omer', `diary-rosh-hodesh', and
  9603. +`diary-sabbath-candles'.  See the documentation for the function
  9604. +`list-sexp-diary-entries' for more details.
  9605. +
  9606. +Diary entries based on the Hebrew and/or the Islamic calendar are also
  9607. +possible, but because these are somewhat slow, they are ignored
  9608. +unless you set the `nongregorian-diary-listing-hook' and the
  9609. +`nongregorian-diary-marking-hook' appropriately.  See the documentation
  9610. +for these functions for details.
  9611. +
  9612. +Diary files can contain directives to include the contents of other files; for
  9613. +details, see the documentation for the variable `list-diary-entries-hook'.Vdiary-nonmarking-symbol
  9614. +*Symbol indicating that a diary entry is not to be marked in the calendar.Vhebrew-diary-entry-symbol
  9615. +*Symbol indicating a diary entry according to the Hebrew calendar.Vislamic-diary-entry-symbol
  9616. +*Symbol indicating a diary entry according to the Islamic calendar.Vdiary-include-string
  9617. +*The string indicating inclusion of another file of diary entries.
  9618. +See the documentation for the function `include-other-diary-files'.Vsexp-diary-entry-symbol
  9619. +*The string used to indicate a sexp diary entry in diary-file.
  9620. +See the documentation for the function `list-sexp-diary-entries'.Vabbreviated-calendar-year
  9621. +*Interpret a two-digit year DD in a diary entry as either 19DD or 20DD.
  9622. +For the Gregorian calendar; similarly for the Hebrew and Islamic calendars.
  9623. +If this variable is nil, years must be written in full.Veuropean-calendar-style
  9624. +*Use the European style of dates in the diary and in any displays.
  9625. +If this variable is t, a date 1/2/1990 would be interpreted as February 1,
  9626. +1990.  The accepted European date styles are
  9627. +
  9628. +            DAY/MONTH
  9629. +            DAY/MONTH/YEAR
  9630. +            DAY MONTHNAME
  9631. +            DAY MONTHNAME YEAR
  9632. +            DAYNAME
  9633. +
  9634. +Names can be capitalized or not, written in full, or abbreviated to three
  9635. +characters with or without a period.Vamerican-date-diary-pattern
  9636. +*List of pseudo-patterns describing the American patterns of date used.
  9637. +See the documentation of `diary-date-forms' for an explanation.Veuropean-date-diary-pattern
  9638. +*List of pseudo-patterns describing the European patterns of date used.
  9639. +See the documentation of `diary-date-forms' for an explanation.Veuropean-calendar-display-form
  9640. +*Pseudo-pattern governing the way a date appears in the European style.
  9641. +See the documentation of calendar-date-display-form for an explanation.Vamerican-calendar-display-form
  9642. +*Pseudo-pattern governing the way a date appears in the American style.
  9643. +See the documentation of `calendar-date-display-form' for an explanation.Vprint-diary-entries-hook
  9644. +*List of functions called after a temporary diary buffer is prepared.
  9645. +The buffer shows only the diary entries currently visible in the diary
  9646. +buffer.  The default just does the printing.  Other uses might include, for
  9647. +example, rearranging the lines into order by day and time, saving the buffer
  9648. +instead of deleting it, or changing the function used to do the printing.Vlist-diary-entries-hook
  9649. +*List of functions called after diary file is culled for relevant entries.
  9650. +It is to be used for diary entries that are not found in the diary file.
  9651. +
  9652. +A function `include-other-diary-files' is provided for use as the value of
  9653. +this hook.  This function enables you to use shared diary files together
  9654. +with your own.  The files included are specified in the diary file by lines
  9655. +of the form
  9656. +
  9657. +        #include "filename"
  9658. +
  9659. +This is recursive; that is, #include directives in files thus included are
  9660. +obeyed.  You can change the "#include" to some other string by changing
  9661. +the variable `diary-include-string'.  When you use `include-other-diary-files'
  9662. +as part of the list-diary-entries-hook, you will probably also want to use the
  9663. +function `mark-included-diary-files' as part of `mark-diary-entries-hook'.
  9664. +
  9665. +For example, you could use
  9666. +
  9667. +     (setq list-diary-entries-hook
  9668. +       '(include-other-diary-files sort-diary-entries))
  9669. +     (setq diary-display-hook 'fancy-diary-display)
  9670. +
  9671. +in your `.emacs' file to cause the fancy diary buffer to be displayed with
  9672. +diary entries from various included files, each day's entries sorted into
  9673. +lexicographic order.Vdiary-hook
  9674. +*List of functions called after the display of the diary.
  9675. +Can be used for appointment notification.Vdiary-display-hook
  9676. +*List of functions that handle the display of the diary.
  9677. +If nil (the default), `simple-diary-display' is used.  Use `ignore' for no
  9678. +diary display.
  9679. +
  9680. +Ordinarily, this just displays the diary buffer (with holidays indicated in
  9681. +the mode line), if there are any relevant entries.  At the time these
  9682. +functions are called, the variable `diary-entries-list' is a list, in order
  9683. +by date, of all relevant diary entries in the form of ((MONTH DAY YEAR)
  9684. +STRING), where string is the diary entry for the given date.  This can be
  9685. +used, for example, a different buffer for display (perhaps combined with
  9686. +holidays), or produce hard copy output.
  9687. +
  9688. +A function `fancy-diary-display' is provided as an alternative
  9689. +choice for this hook; this function prepares a special noneditable diary
  9690. +buffer with the relevant diary entries that has neat day-by-day arrangement
  9691. +with headings.  The fancy diary buffer will show the holidays unless the
  9692. +variable `holidays-in-diary-buffer' is set to nil.  Ordinarily, the fancy
  9693. +diary buffer will not show days for which there are no diary entries, even
  9694. +if that day is a holiday; if you want such days to be shown in the fancy
  9695. +diary buffer, set the variable `diary-list-include-blanks' to t.Vnongregorian-diary-listing-hook
  9696. +*List of functions called for listing diary file and included files.
  9697. +As the files are processed for diary entries, these functions are used to cull
  9698. +relevant entries.  You can use either or both of `list-hebrew-diary-entries'
  9699. +and `list-islamic-diary-entries'.  The documentation for these functions
  9700. +describes the style of such diary entries.Vmark-diary-entries-hook
  9701. +*List of functions called after marking diary entries in the calendar.
  9702. +
  9703. +A function `mark-included-diary-files' is also provided for use as the
  9704. +mark-diary-entries-hook; it enables you to use shared diary files together
  9705. +with your own.  The files included are specified in the diary file by lines
  9706. +of the form
  9707. +        #include "filename"
  9708. +This is recursive; that is, #include directives in files thus included are
  9709. +obeyed.  You can change the "#include" to some other string by changing the
  9710. +variable `diary-include-string'.  When you use `mark-included-diary-files' as
  9711. +part of the mark-diary-entries-hook, you will probably also want to use the
  9712. +function `include-other-diary-files' as part of `list-diary-entries-hook'.Vnongregorian-diary-marking-hook
  9713. +*List of functions called for marking diary file and included files.
  9714. +As the files are processed for diary entries, these functions are used to cull
  9715. +relevant entries.  You can use either or both of `mark-hebrew-diary-entries'
  9716. +and `mark-islamic-diary-entries'.  The documentation for these functions
  9717. +describes the style of such diary entries.Vdiary-list-include-blanks
  9718. +*If nil, do not include days with no diary entry in the list of diary entries.
  9719. +Such days will then not be shown in the the fancy diary buffer, even if they
  9720. +are holidays.Vholidays-in-diary-buffer
  9721. +*Non-nil means include holidays in the diary display.
  9722. +The holidays appear in the mode line of the diary buffer, or in the
  9723. +fancy diary buffer next to the date.  This slows down the diary functions
  9724. +somewhat; setting it to nil makes the diary display faster.Vgeneral-holidays
  9725. +*General holidays.  Default value is for the United States.
  9726. +See the documentation for `calendar-holidays' for details.Vlocal-holidays
  9727. +*Local holidays.
  9728. +See the documentation for `calendar-holidays' for details.Vother-holidays
  9729. +*User defined holidays.
  9730. +See the documentation for `calendar-holidays' for details.Vhebrew-holidays
  9731. +*Jewish holidays.
  9732. +See the documentation for `calendar-holidays' for details.Vchristian-holidays
  9733. +*Christian holidays.
  9734. +See the documentation for `calendar-holidays' for details.Vislamic-holidays
  9735. +*Islamic holidays.
  9736. +See the documentation for `calendar-holidays' for details.Vsolar-holidays
  9737. +*Sun-related holidays.
  9738. +See the documentation for `calendar-holidays' for details.Fcalendar
  9739. +Display a three-month calendar in another window.
  9740. +The three months appear side by side, with the current month in the middle
  9741. +surrounded by the previous and next months.  The cursor is put on today's date.
  9742. +
  9743. +If called with an optional prefix argument, prompts for month and year.
  9744. +
  9745. +This function is suitable for execution in a .emacs file; appropriate setting
  9746. +of the variable `view-diary-entries-initially' will cause the diary entries for
  9747. +the current date to be displayed in another window.  The value of the variable
  9748. +`number-of-diary-entries' controls the number of days of diary entries
  9749. +displayed upon initial display of the calendar.
  9750. +
  9751. +An optional prefix argument ARG causes the calendar displayed to be ARG
  9752. +months in the future if ARG is positive or in the past if ARG is negative;
  9753. +in this case the cursor goes on the first day of the month.
  9754. +
  9755. +Once in the calendar window, future or past months can be moved into view.
  9756. +Arbitrary months can be displayed, or the calendar can be scrolled forward
  9757. +or backward.
  9758. +
  9759. +The cursor can be moved forward or backward by one day, one week, one month,
  9760. +or one year.  All of these commands take prefix arguments which, when negative,
  9761. +cause movement in the opposite direction.  For convenience, the digit keys
  9762. +and the minus sign are automatically prefixes.  The window is replotted as
  9763. +necessary to display the desired date.
  9764. +
  9765. +Diary entries can be marked on the calendar or displayed in another window.
  9766. +
  9767. +Use M-x describe-mode for details of the key bindings in the calendar window.
  9768. +
  9769. +The Gregorian calendar is assumed.
  9770. +
  9771. +After loading the calendar, the hooks given by the variable
  9772. +`calendar-load-hook' are run.  This the place to add key bindings to the
  9773. +calendar-mode-map.
  9774. +
  9775. +After preparing the calendar window initially, the hooks given by the variable
  9776. +`initial-calendar-window-hook' are run.
  9777. +
  9778. +The hooks given by the variable `today-visible-calendar-hook' are run
  9779. +everytime the calendar window gets scrolled, if the current date is visible
  9780. +in the window.  If it is not visible, the hooks given by the variable
  9781. +`today-invisible-calendar-hook' are run.  Thus, for example, setting
  9782. +`today-visible-calendar-hook' to 'calendar-star-date will cause today's date
  9783. +to be replaced by asterisks to highlight it whenever it is in the window.Flist-yahrzeit-dates
  9784. +List Yahrzeit dates for *Gregorian* DEATH-DATE from START-YEAR to END-YEAR.
  9785. +When called interactively from the calendar window, the date of death is taken
  9786. +from the cursor position.Fdescribe-buffer-case-table
  9787. +Describe the case table of the current buffer.Fset-case-syntax-delims
  9788. +Make characters L and R a matching pair of non-case-converting delimiters.
  9789. +This sets the entries for L and R in TABLE, which is a string
  9790. +that will be used as the downcase part of a case table.
  9791. +It also modifies `standard-syntax-table' to
  9792. +indicate left and right delimiters.Fset-case-syntax-pair
  9793. +Make characters UC and LC a pair of inter-case-converting letters.
  9794. +This sets the entries for characters UC and LC in TABLE, which is a string
  9795. +that will be used as the downcase part of a case table.
  9796. +It also modifies `standard-syntax-table' to give them the syntax of
  9797. +word constituents.Fset-case-syntax
  9798. +Make characters C case-invariant with syntax SYNTAX.
  9799. +This sets the entries for character C in TABLE, which is a string
  9800. +that will be used as the downcase part of a case table.
  9801. +It also modifies `standard-syntax-table'.
  9802. +SYNTAX should be " ", "w", "." or "_".Frepeat-matching-complex-command
  9803. +Edit and re-evaluate complex command with name matching PATTERN.
  9804. +Matching occurrences are displayed, most recent first, until you select
  9805. +a form for evaluation.  If PATTERN is empty (or nil), every form in the
  9806. +command history is offered.  The form is placed in the minibuffer for
  9807. +editing and the result is evaluated.Flist-command-history
  9808. +List history of commands typed to minibuffer.
  9809. +The number of commands listed is controlled by `list-command-history-max'.
  9810. +Calls value of `list-command-history-filter' (if non-nil) on each history
  9811. +element to judge if that element should be excluded from the list.
  9812. +
  9813. +The buffer is left in Command History mode.Fcommand-history-mode
  9814. +Major mode for examining commands from `command-history'.
  9815. +The number of commands listed is controlled by `list-command-history-max'.
  9816. +The command history is filtered by `list-command-history-filter' if non-nil.
  9817. +Use \<command-history-map>\[command-history-repeat] to repeat the command on the current line.
  9818. +
  9819. +Otherwise much like Emacs-Lisp Mode except that there is no self-insertion
  9820. +and digits provide prefix arguments.  Tab does not indent.
  9821. +\{command-history-map}
  9822. +Calls the value of `command-history-hook' if that is non-nil.
  9823. +The Command History listing is recomputed each time this mode is invoked.Fmake-comint
  9824. +Make a comint process NAME in a buffer, running PROGRAM.
  9825. +The name of the buffer is made by surrounding NAME with `*'s.
  9826. +If there is already a running process in that buffer, it is not restarted.
  9827. +Optional third arg STARTFILE is the name of a file to send the contents of to 
  9828. +the process.  Any more args are arguments to PROGRAM.Fcomint-run
  9829. +Run PROGRAM in a comint buffer and switch to it.
  9830. +The buffer name is made by surrounding the file name of PROGRAM with `*'s.
  9831. +The file name is used to make a symbol name, such as `comint-sh-hook', and any
  9832. +hooks on this symbol are run in the buffer.
  9833. +See `make-comint' and `comint-exec'.Fcompare-windows
  9834. +Compare text in current window with text in next window.
  9835. +Compares the text starting at point in each window,
  9836. +moving over text in each one as far as they match.
  9837. +
  9838. +A prefix arg means ignore changes in whitespace.
  9839. +The variable `compare-windows-whitespace' controls how whitespace is skipped.
  9840. +If `compare-ignore-case' is non-nil, changes in case are also ignored.Vcompilation-mode-hook
  9841. +*List of hook functions run by `compilation-mode' (see `run-hooks').Vcompilation-window-height
  9842. +*Number of lines in a compilation window.  If nil, use Emacs default.Vcompilation-buffer-name-function
  9843. +Function to compute the name of a compilation buffer.
  9844. +The function receives one argument, the name of the major mode of the
  9845. +compilation buffer.  It should return a string.
  9846. +nil means compute the name with `(concat "*" (downcase major-mode) "*")'.Vcompilation-finish-function
  9847. +*Function to call when a compilation process finishes.
  9848. +It is called with two arguments: the compilation buffer, and a string
  9849. +describing how the process finished.Vcompilation-search-path
  9850. +*List of directories to search for source files named in error messages.
  9851. +Elements should be directory names, not file names of directories.
  9852. +nil as an element means to try the default directory.Fcompile
  9853. +Compile the program including the current buffer.  Default: run `make'.
  9854. +Runs COMMAND, a shell command, in a separate process asynchronously
  9855. +with output going to the buffer `*compilation*'.
  9856. +
  9857. +You can then use the command \[next-error] to find the next error message
  9858. +and move to the source code that caused it.
  9859. +
  9860. +To run more than one compilation at once, start one and rename the
  9861. +`*compilation*' buffer to some other name with \[rename-buffer].
  9862. +Then start the next one.
  9863. +
  9864. +The name used for the buffer is actually whatever is returned by
  9865. +the function in `compilation-buffer-name-function', so you can set that
  9866. +to a function that generates a unique name.Fgrep
  9867. +Run grep, with user-specified args, and collect output in a buffer.
  9868. +While grep runs asynchronously, you can use the \[next-error] command
  9869. +to find the text that grep hits refer to.
  9870. +
  9871. +This command uses a special history list for its arguments, so you can
  9872. +easily repeat a grep command.Fcompilation-minor-mode
  9873. +Toggle compilation minor mode.
  9874. +With arg, turn compilation mode on if and only if arg is positive.
  9875. +See `compilation-mode'.Fnext-error
  9876. +Visit next compilation error message and corresponding source code.
  9877. +This operates on the output from the \[compile] command.
  9878. +If all preparsed error messages have been processed,
  9879. +the error message buffer is checked for new ones.
  9880. +
  9881. +A prefix arg specifies how many error messages to move;
  9882. +negative means move back to previous error messages.
  9883. +Just C-u as a prefix means reparse the error message buffer
  9884. +and start at the first error.
  9885. +
  9886. +\[next-error] normally applies to the most recent compilation started,
  9887. +but as long as you are in the middle of parsing errors from one compilation
  9888. +output buffer, you stay with that compilation output buffer.
  9889. +
  9890. +Use \[next-error] in a compilation output buffer to switch to
  9891. +processing errors from that compilation.
  9892. +
  9893. +See variables `compilation-parse-errors-function' and
  9894. +`compilation-error-regexp-alist' for customization ideas.Fcookie
  9895. +Return a random phrase from PHRASE-FILE.  When the phrase file
  9896. +is read in, display STARTMSG at beginning of load, ENDMSG at end.Fcookie-insert
  9897. +Insert random phrases from PHRASE-FILE; COUNT of them.  When the phrase file
  9898. +is read in, display STARTMSG at beginning of load, ENDMSG at end.Fcookie-snarf
  9899. +Reads in the PHRASE-FILE, returns it as a vector of strings.
  9900. +Emit STARTMSG and ENDMSG before and after.  Caches the result; second
  9901. +and subsequent calls on the same file won't go to disk.Fshuffle-vector
  9902. +Randomly permute the elements of VECTOR (all permutations equally likely)Fc++-mode
  9903. +Major mode for editing C++ code.  Very much like editing C code.
  9904. +Expression and list commands understand all C++ brackets.
  9905. +Tab at left margin indents for C++ code
  9906. +Comments are delimited with /* ... */ {or with // ... <newline>}
  9907. +Paragraphs are separated by blank lines only.
  9908. +Delete converts tabs to spaces as it moves back.
  9909. +\{c++-mode-map}
  9910. +Variables controlling indentation style:
  9911. + c-tab-always-indent
  9912. +    Non-nil means TAB in C mode should always reindent the current line,
  9913. +    regardless of where in the line point is when the TAB command is used.
  9914. +    Default is t.
  9915. + c-auto-newline
  9916. +    Non-nil means automatically newline before and after braces,
  9917. +    and after colons and semicolons, inserted in C code.
  9918. + c-indent-level
  9919. +    Indentation of C statements within surrounding block.
  9920. +    The surrounding block's indentation is the indentation
  9921. +    of the line on which the open-brace appears.
  9922. + c-continued-statement-offset
  9923. +    Extra indentation given to a substatement, such as the
  9924. +    then-clause of an if or body of a while.
  9925. + c-continued-brace-offset
  9926. +    Extra indentation given to a brace that starts a substatement.
  9927. +    This is in addition to c-continued-statement-offset.
  9928. + c-brace-offset
  9929. +    Extra indentation for line if it starts with an open brace.
  9930. + c-brace-imaginary-offset
  9931. +    An open brace following other text is treated as if it were
  9932. +    this far to the right of the start of its line.
  9933. + c-argdecl-indent
  9934. +    Indentation level of declarations of C function arguments.
  9935. + c-label-offset
  9936. +    Extra indentation for line that is a label, or case or ``default:'', or
  9937. +    ``public:'' or ``private:'', or ``protected:''.
  9938. + c++-electric-colon
  9939. +    If non-nil at invocation of c++-mode (t is the default) colon electricly
  9940. +    indents.
  9941. + c++-empty-arglist-indent
  9942. +    If non-nil, a function declaration or invocation which ends a line with a
  9943. +    left paren is indented this many extra spaces, instead of flush with the
  9944. +    left paren.
  9945. + c++-friend-offset
  9946. +    Offset of C++ friend declarations relative to member declarations.
  9947. + c++-member-init-indent
  9948. +    Indentation level of member initializations in function declarations,
  9949. +    if they are on a separate line beginning with a colon.
  9950. + c++-continued-member-init-offset
  9951. +    Extra indentation for continuation lines of member initializations; NIL
  9952. +    means to align with previous initializations rather than with the colon.
  9953. +
  9954. +Settings for K&R, BSD, and Stroustrup indentation styles are
  9955. +  c-indent-level                5    8    4
  9956. +  c-continued-statement-offset  5    8    4
  9957. +  c-continued-brace-offset                0
  9958. +  c-brace-offset               -5   -8    0
  9959. +  c-brace-imaginary-offset                0
  9960. +  c-argdecl-indent              0    8    4
  9961. +  c-label-offset               -5   -8   -4
  9962. +  c++-empty-arglist-indent                4
  9963. +  c++-friend-offset                       0
  9964. +
  9965. +Turning on C++ mode calls the value of the variable `c++-mode-hook' with
  9966. +no args if that value is non-nil.Fdabbrev-expand
  9967. +Expand previous word "dynamically".
  9968. +Expands to the most recent, preceding word for which this is a prefix.
  9969. +If no suitable preceding word is found, words following point are considered.
  9970. +
  9971. +If `case-fold-search' and `case-replace' are non-nil (usually true)
  9972. +then the substituted word may be case-adjusted to match the abbreviation
  9973. +that you had typed.  This takes place if the substituted word, as found,
  9974. +is all lower case, or if it is at the beginning of a sentence and only
  9975. +its first letter was upper case.
  9976. +
  9977. +A positive prefix arg N says to take the Nth backward DISTINCT
  9978. +possibility.  A negative argument says search forward.  The variable
  9979. +`dabbrev-backward-only' may be used to limit the direction of search to
  9980. +backward if set non-nil.
  9981. +
  9982. +If the cursor has not moved from the end of the previous expansion and
  9983. +no argument is given, replace the previously-made expansion
  9984. +with the next possible expansion not yet tried.Fdebug
  9985. +Enter debugger.  To return, type \<debugger-mode-map>`\[debugger-continue]'.
  9986. +Arguments are mainly for use when this is called from the internals
  9987. +of the evaluator.
  9988. +
  9989. +You may call with no args, or you may pass nil as the first arg and
  9990. +any other args you like.  In that case, the list of args after the
  9991. +first will be printed into the backtrace buffer.Fdebug-on-entry
  9992. +Request FUNCTION to invoke debugger each time it is called.
  9993. +If you tell the debugger to continue, FUNCTION's execution proceeds.
  9994. +This works by modifying the definition of FUNCTION,
  9995. +which must be written in Lisp, not predefined.
  9996. +Use \[cancel-debug-on-entry] to cancel the effect of this command.
  9997. +Redefining FUNCTION also cancels it.Fcancel-debug-on-entry
  9998. +Undo effect of \[debug-on-entry] on FUNCTION.
  9999. +If argument is nil or an empty string, cancel for all functions.Fdelete-selection-mode
  10000. +Toggle Delete Selection mode.
  10001. +When ON, typed text replaces the selection if the selection is active.
  10002. +When OFF, typed text is just inserted at point.Fdefine-derived-mode
  10003. +Create a new mode as a variant of an existing mode.
  10004. +
  10005. +The arguments to this command are as follow:
  10006. +
  10007. +PARENT:    the name of the command for the parent mode (ie. text-mode).
  10008. +CHILD:     the name of the command for the derived mode.
  10009. +NAME:      a string which will appear in the status line (ie. "Hypertext")
  10010. +DOCSTRING: an optional documentation string--if you do not supply one,
  10011. +           the function will attempt to invent something useful.
  10012. +BODY:      forms to execute just before running the
  10013. +           hooks for the new mode.
  10014. +
  10015. +Here is how you could define LaTeX-Thesis mode as a variant of LaTeX mode:
  10016. +
  10017. +  (define-derived-mode LaTeX-thesis-mode LaTeX-mode "LaTeX-Thesis")
  10018. +
  10019. +You could then make new key bindings for `LaTeX-thesis-mode-map'
  10020. +without changing regular LaTeX mode.  In this example, BODY is empty,
  10021. +and DOCSTRING is generated by default.
  10022. +
  10023. +On a more complicated level, the following command uses sgml-mode as
  10024. +the parent, and then sets the variable `case-fold-search' to nil:
  10025. +
  10026. +  (define-derived-mode article-mode sgml-mode "Article"
  10027. +    "Major mode for editing technical articles."
  10028. +    (setq case-fold-search nil))
  10029. +
  10030. +Note that if the documentation string had been left out, it would have
  10031. +been generated automatically, with a reference to the keymap.Fderived-mode-init-mode-variables
  10032. +Initialise variables for a new mode. 
  10033. +Right now, if they don't already exist, set up a blank keymap, an
  10034. +empty syntax table, and an empty abbrev table -- these will be merged
  10035. +the first time the mode is used.Fdiary
  10036. +Generate the diary window for ARG days starting with the current date.
  10037. +If no argument is provided, the number of days of diary entries is governed
  10038. +by the variable `number-of-diary-entries'.  This function is suitable for
  10039. +execution in a `.emacs' file.Fdiff
  10040. +Find and display the differences between OLD and NEW files.
  10041. +Interactively the current buffer's file name is the default for NEW
  10042. +and a backup file for NEW is the default for OLD.
  10043. +With prefix arg, prompt for diff switches.Fdiff-backup
  10044. +Diff this file with its backup file or vice versa.
  10045. +Uses the latest backup, if there are several numerical backups.
  10046. +If this file is a backup, diff it with its original.
  10047. +The backup file is the first file given to `diff'.Vdired-listing-switches
  10048. +*Switches passed to `ls' for dired.  MUST contain the `l' option.
  10049. +May contain all other options that don't contradict `-l';
  10050. +may contain even `F', `b', `i' and `s'.  See also the variable
  10051. +`dired-ls-F-marks-symlinks' concerning the `F' switch.Vdired-chown-program
  10052. +Name of chown command (usually `chown' or `/etc/chown').Vdired-ls-F-marks-symlinks
  10053. +*Informs dired about how `ls -lF' marks symbolic links.
  10054. +Set this to t if `insert-directory-program' with `-lF' marks the symbolic link
  10055. +itself with a trailing @ (usually the case under Ultrix).
  10056. +
  10057. +Example: if `ln -s foo bar; ls -F bar' gives `bar -> foo', set it to
  10058. +nil (the default), if it gives `bar@ -> foo', set it to t.
  10059. +
  10060. +Dired checks if there is really a @ appended.  Thus, if you have a
  10061. +marking `ls' program on one host and a non-marking on another host, and
  10062. +don't care about symbolic links which really end in a @, you can
  10063. +always set this variable to t.Vdired-trivial-filenames
  10064. +*Regexp of files to skip when finding first file of a directory.
  10065. +A value of nil means move to the subdir line.
  10066. +A value of t means move to first file.Vdired-keep-marker-rename
  10067. +*Controls marking of renamed files.
  10068. +If t, files keep their previous marks when they are renamed.
  10069. +If a character, renamed files (whether previously marked or not)
  10070. +are afterward marked with that character.Vdired-keep-marker-copy
  10071. +*Controls marking of copied files.
  10072. +If t, copied files are marked if and as the corresponding original files were.
  10073. +If a character, copied files are unconditionally marked with that character.Vdired-keep-marker-hardlink
  10074. +*Controls marking of newly made hard links.
  10075. +If t, they are marked if and as the files linked to were marked.
  10076. +If a character, new links are unconditionally marked with that character.Vdired-keep-marker-symlink
  10077. +*Controls marking of newly made symbolic links.
  10078. +If t, they are marked if and as the files linked to were marked.
  10079. +If a character, new links are unconditionally marked with that character.Vdired-dwim-target
  10080. +*If non-nil, dired tries to guess a default target directory.
  10081. +This means: if there is a dired buffer displayed in the next window,
  10082. +use its current subdir, instead of the current subdir of this dired buffer.
  10083. +
  10084. +The target is used in the prompt for file copy, rename etc.Vdired-copy-preserve-time
  10085. +*If non-nil, Dired preserves the last-modified time in a file copy.
  10086. +(This works on only some systems.)Fdired
  10087. +"Edit" directory DIRNAME--delete, rename, print, etc. some files in it.
  10088. +Optional second argument SWITCHES specifies the `ls' options used.
  10089. +(Interactively, use a prefix argument to be able to specify SWITCHES.)
  10090. +Dired displays a list of files in DIRNAME (which may also have
  10091. +shell wildcards appended to select certain files).  If DIRNAME is a cons,
  10092. +its first element is taken as the directory name and the resr as an explicit
  10093. +list of files to make directory entries for.
  10094. +\<dired-mode-map>You can move around in it with the usual commands.
  10095. +You can flag files for deletion with \[dired-flag-file-deletion] and then
  10096. +delete them by typing \[dired-do-flagged-delete].
  10097. +Type \[describe-mode] after entering dired for more info.
  10098. +
  10099. +If DIRNAME is already in a dired buffer, that buffer is used without refresh.Fdired-other-window
  10100. +"Edit" directory DIRNAME.  Like `dired' but selects in another window.Fdired-other-frame
  10101. +"Edit" directory DIRNAME.  Like `dired' but makes a new frame.Fdired-noselect
  10102. +Like `dired' but returns the dired buffer as value, does not select it.Fdired-diff
  10103. +Compare file at point with file FILE using `diff'.
  10104. +FILE defaults to the file at the mark.
  10105. +The prompted-for file is the first file given to `diff'.
  10106. +With prefix arg, prompt for second argument SWITCHES,
  10107. + which is options for `diff'.Fdired-backup-diff
  10108. +Diff this file with its backup file or vice versa.
  10109. +Uses the latest backup, if there are several numerical backups.
  10110. +If this file is a backup, diff it with its original.
  10111. +The backup file is the first file given to `diff'.
  10112. +With prefix arg, prompt for argument SWITCHES which is options for `diff'.Fdired-do-chmod
  10113. +Change the mode of the marked (or next ARG) files.
  10114. +This calls chmod, thus symbolic modes like `g+w' are allowed.Fdired-do-chgrp
  10115. +Change the group of the marked (or next ARG) files.Fdired-do-chown
  10116. +Change the owner of the marked (or next ARG) files.Fdired-do-print
  10117. +Print the marked (or next ARG) files.
  10118. +Uses the shell command coming from variables `lpr-command' and
  10119. +`lpr-switches' as default.Fdired-do-shell-command
  10120. +Run a shell command COMMAND on the marked files.
  10121. +If no files are marked or a specific numeric prefix arg is given,
  10122. +the next ARG files are used.  Just \[universal-argument] means the current file.
  10123. +The prompt mentions the file(s) or the marker, as appropriate.
  10124. +
  10125. +If there is output, it goes to a separate buffer.
  10126. +
  10127. +Normally the command is run on each file individually.
  10128. +However, if there is a `*' in the command then it is run
  10129. +just once with the entire file list substituted there.
  10130. +
  10131. +No automatic redisplay of dired buffers is attempted, as there's no
  10132. +telling what files the command may have changed.  Type
  10133. +\[dired-do-redisplay] to redisplay the marked files.
  10134. +
  10135. +The shell command has the top level directory as working directory, so
  10136. +output files usually are created there instead of in a subdir.Fdired-do-kill-lines
  10137. +Kill all marked lines (not the files).
  10138. +With a prefix argument, kill that many lines starting with the current line.
  10139. +(A negative argument kills lines before the current line.)
  10140. +To kill an entire subdirectory, go to its directory header line
  10141. +and use this command with a prefix argument (the value does not matter).Fdired-do-compress
  10142. +Compress or uncompress marked (or next ARG) files.Fdired-do-byte-compile
  10143. +Byte compile marked (or next ARG) Emacs Lisp files.Fdired-do-load
  10144. +Load the marked (or next ARG) Emacs Lisp files.Fdired-do-redisplay
  10145. +Redisplay all marked (or next ARG) files.
  10146. +If on a subdir line, redisplay that subdirectory.  In that case,
  10147. +a prefix arg lets you edit the `ls' switches used for the new listing.Fdired-string-replace-match
  10148. +Replace first match of REGEXP in STRING with NEWTEXT.
  10149. +If it does not match, nil is returned instead of the new string.
  10150. +Optional arg LITERAL means to take NEWTEXT literally.
  10151. +Optional arg GLOBAL means to replace all matches.Fdired-create-directory
  10152. +Create a directory called DIRECTORY.Fdired-do-copy
  10153. +Copy all marked (or next ARG) files, or copy the current file.
  10154. +This normally preserves the last-modified date when copying.
  10155. +When operating on just the current file, you specify the new name.
  10156. +When operating on multiple or marked files, you specify a directory
  10157. +and new symbolic links are made in that directory
  10158. +with the same names that the files currently have.Fdired-do-symlink
  10159. +Make symbolic links to current file or all marked (or next ARG) files.
  10160. +When operating on just the current file, you specify the new name.
  10161. +When operating on multiple or marked files, you specify a directory
  10162. +and new symbolic links are made in that directory
  10163. +with the same names that the files currently have.Fdired-do-hardlink
  10164. +Add names (hard links) current file or all marked (or next ARG) files.
  10165. +When operating on just the current file, you specify the new name.
  10166. +When operating on multiple or marked files, you specify a directory
  10167. +and new hard links are made in that directory
  10168. +with the same names that the files currently have.Fdired-do-rename
  10169. +Rename current file or all marked (or next ARG) files.
  10170. +When renaming just the current file, you specify the new name.
  10171. +When renaming multiple or marked files, you specify a directory.Fdired-do-rename-regexp
  10172. +Rename marked files containing REGEXP to NEWNAME.
  10173. +As each match is found, the user must type a character saying
  10174. +  what to do with it.  For directions, type \[help-command] at that time.
  10175. +NEWNAME may contain \=\<n> or \& as in `query-replace-regexp'.
  10176. +REGEXP defaults to the last regexp used.
  10177. +With a zero prefix arg, renaming by regexp affects the complete
  10178. +  pathname - usually only the non-directory part of file names is used
  10179. +  and changed.Fdired-do-copy-regexp
  10180. +Copy all marked files containing REGEXP to NEWNAME.
  10181. +See function `dired-rename-regexp' for more info.Fdired-do-hardlink-regexp
  10182. +Hardlink all marked files containing REGEXP to NEWNAME.
  10183. +See function `dired-rename-regexp' for more info.Fdired-do-symlink-regexp
  10184. +Symlink all marked files containing REGEXP to NEWNAME.
  10185. +See function `dired-rename-regexp' for more info.Fdired-upcase
  10186. +Rename all marked (or next ARG) files to upper case.Fdired-downcase
  10187. +Rename all marked (or next ARG) files to lower case.Fdired-maybe-insert-subdir
  10188. +Insert this subdirectory into the same dired buffer.
  10189. +If it is already present, just move to it (type \[dired-do-redisplay] to refresh),
  10190. +  else inserts it at its natural place (as `ls -lR' would have done).
  10191. +With a prefix arg, you may edit the ls switches used for this listing.
  10192. +  You can add `R' to the switches to expand the whole tree starting at
  10193. +  this subdirectory.
  10194. +This function takes some pains to conform to `ls -lR' output.Fdired-prev-subdir
  10195. +Go to previous subdirectory, regardless of level.
  10196. +When called interactively and not on a subdir line, go to this subdir's line.Fdired-goto-subdir
  10197. +Go to end of header line of DIR in this dired buffer.
  10198. +Return value of point on success, otherwise return nil.
  10199. +The next char is either \n, or \r if DIR is hidden.Fdired-mark-subdir-files
  10200. +Mark all files except `.' and `..'.Fdired-kill-subdir
  10201. +Remove all lines of current subdirectory.
  10202. +Lower levels are unaffected.Fdired-tree-up
  10203. +Go up ARG levels in the dired tree.Fdired-tree-down
  10204. +Go down in the dired tree.Fdired-hide-subdir
  10205. +Hide or unhide the current subdirectory and move to next directory.
  10206. +Optional prefix arg is a repeat factor.
  10207. +Use \[dired-hide-all] to (un)hide all directories.Fdired-hide-all
  10208. +Hide all subdirectories, leaving only their header lines.
  10209. +If there is already something hidden, make everything visible again.
  10210. +Use \[dired-hide-subdir] to (un)hide a particular subdirectory.Fdired-jump
  10211. +Jump to dired buffer corresponding to current buffer.
  10212. +If in a file, dired the current directory and move to file's line.
  10213. +If in dired already, pop up a level and goto old directory's line.
  10214. +In case the proper dired file line cannot be found, refresh the dired
  10215. +buffer and try again.Fdisassemble
  10216. +Print disassembled code for OBJECT in (optional) BUFFER.
  10217. +OBJECT can be a symbol defined as a function, or a function itself
  10218. +(a lambda expression or a compiled-function object).
  10219. +If OBJECT is not already compiled, we compile it, but do not
  10220. +redefine OBJECT if it is a symbol.Fdescribe-current-display-table
  10221. +Describe the display table in use in the selected window and buffer.Fmake-display-table
  10222. +Return a new, empty display table.Fstandard-display-8bit
  10223. +Display characters in the range L to H literally.Fstandard-display-default
  10224. +Display characters in the range L to H using the default notation.Fstandard-display-ascii
  10225. +Display character C using string S.
  10226. +S is usually a terminal-dependent escape sequence.
  10227. +This function is meaningless for an X frame.Fstandard-display-g1
  10228. +Display character C as character SC in the g1 character set.
  10229. +This function assumes that your terminal uses the SO/SI characters;
  10230. +it is meaningless for an X frame.Fstandard-display-graphic
  10231. +Display character C as character GC in graphics character set.
  10232. +This function assumes VT100-compatible escapes; it is meaningless for an
  10233. +X frame.Fstandard-display-underline
  10234. +Display character C as character UC plus underlining.Fstandard-display-european
  10235. +Toggle display of European characters encoded with ISO 8859.
  10236. +When enabled, characters in the range of 160 to 255 display not
  10237. +as octal escapes, but as accented characters.
  10238. +With prefix argument, enable European character display iff arg is positive.Fdissociated-press
  10239. +Dissociate the text of the current buffer.
  10240. +Output goes in buffer named *Dissociation*,
  10241. +which is redisplayed each time text is added to it.
  10242. +Every so often the user must say whether to continue.
  10243. +If ARG is positive, require ARG chars of continuity.
  10244. +If ARG is negative, require -ARG words of continuity.
  10245. +Default is 2.Fdoctor
  10246. +Switch to *doctor* buffer and start giving psychotherapy.Fdouble-mode
  10247. +Toggle double mode.
  10248. +With prefix arg, turn double mode on iff arg is positive.
  10249. +
  10250. +When double mode is on, some keys will insert will insert different
  10251. +strings when pressed twice.  See variable `double-map' for details.Fdunnet
  10252. +Switch to *dungeon* buffer and start game.Feasy-menu-define
  10253. +Define a menu bar submenu in maps MAPS, according to MENU.
  10254. +The arguments SYMBOL and DOC are ignored; they are present for
  10255. +compatibility only.  SYMBOL is not evaluated.  In other Emacs versions
  10256. +these arguments may be used as a variable to hold the menu data, and a
  10257. +doc string for that variable.
  10258. +
  10259. +The first element of MENU must be a string.  It is the menu bar item name.
  10260. +The rest of the elements are menu items.
  10261. +
  10262. +A menu item is usually a vector of three elements:  [NAME CALLBACK ENABLE]
  10263. +
  10264. +NAME is a string--the menu item name.
  10265. +
  10266. +CALLBACK is a command to run when the item is chosen,
  10267. +or a list to evaluate when the item is chosen.
  10268. +
  10269. +ENABLE is a symbol; if its value is non-nil, the item is enabled
  10270. +for selection.
  10271. +
  10272. +A menu item can be a string.  Then that string appears in the menu as
  10273. +unselectable text.  A string consisting solely of hyphens is displayed
  10274. +as a solid horizontal line.
  10275. +
  10276. +A menu item can be a list.  It is treated as a submenu.
  10277. +The first element should be the submenu name.  That's used as the
  10278. +menu item in the top-level menu.  The cdr of the submenu list
  10279. +is a list of menu items, as above.Felectric-buffer-list
  10280. +Pops up a buffer describing the set of Emacs buffers.
  10281. +Vaguely like ITS lunar select buffer; combining typeoutoid buffer
  10282. +listing with menuoid buffer selection.
  10283. +
  10284. +If the very next character typed is a space then the buffer list
  10285. +window disappears.  Otherwise, one may move around in the buffer list
  10286. +window, marking buffers to be selected, saved or deleted.
  10287. +
  10288. +To exit and select a new buffer, type a space when the cursor is on
  10289. +the appropriate line of the buffer-list window.  Other commands are
  10290. +much like those of buffer-menu-mode.
  10291. +
  10292. +Calls value of `electric-buffer-menu-mode-hook' on entry if non-nil.
  10293. +
  10294. +\{electric-buffer-menu-mode-map}FElectric-command-history-redo-expression
  10295. +Edit current history line in minibuffer and execute result.
  10296. +With prefix arg NOCONFIRM, execute current line as-is without editing.Fdef-edebug-spec
  10297. +Set the edebug-form-spec property of SYMBOL according to SPEC.
  10298. +Both SYMBOL and SPEC are unevaluated. The SPEC can be 0, t, a symbol
  10299. +(naming a function), or a list.Fedebug-eval-top-level-form
  10300. +Evaluate a top level form, such as a defun or defmacro.
  10301. +This is like `eval-defun', but the code is always instrumented for Edebug.
  10302. +Print its name in the minibuffer and leave point where it is,
  10303. +or if an error occurs, leave point after it with mark at the original
  10304. +point.Fediff-patch-file
  10305. +Run Ediff by patching FILE-TP-PATCH.Fediff-files
  10306. +Run Ediff on a pair files, FILE-A and FILE-B.Fediff-buffers
  10307. +Run Ediff on a pair of buffers, BUFFER-A and BUFFER-B.Fediff-patch-buffer
  10308. +Run Ediff by patching BUFFER-NAME.Fvc-ediff
  10309. +Run ediff on version REV of the current buffer in another window.
  10310. +If the current buffer is named `F', the version is named `F.~REV~'.
  10311. +If `F.~REV~' already exists, it is used instead of being re-created.Frcs-ediff
  10312. +Run Ediff on the current buffer, comparing it with previous RCS revision.  
  10313. +With prefix argument, prompts for revision name.Vedmacro-eight-bits
  10314. +*Non-nil if edit-kbd-macro should leave 8-bit characters intact.
  10315. +Default nil means to write characters above \177 in octal notation.Fedit-kbd-macro
  10316. +Edit a keyboard macro.
  10317. +At the prompt, type any key sequence which is bound to a keyboard macro.
  10318. +Or, type `C-x e' or RET to edit the last keyboard macro, `C-h l' to edit
  10319. +the last 100 keystrokes as a keyboard macro, or `M-x' to edit a macro by
  10320. +its command name.
  10321. +With a prefix argument, format the macro in a more concise way.Fedit-last-kbd-macro
  10322. +Edit the most recently defined keyboard macro.Fedit-named-kbd-macro
  10323. +Edit a keyboard macro which has been given a name by `name-last-kbd-macro'.Fread-kbd-macro
  10324. +Read the region as a keyboard macro definition.
  10325. +The region is interpreted as spelled-out keystrokes, e.g., "M-x abc RET".
  10326. +See documentation for `edmacro-mode' for details.
  10327. +Leading/trailing "C-x (" and "C-x )" in the text are allowed and ignored.
  10328. +The resulting macro is installed as the "current" keyboard macro.
  10329. +
  10330. +In Lisp, may also be called with a single STRING argument in which case
  10331. +the result is returned rather than being installed as the current macro.
  10332. +The result will be a string if possible, otherwise an event vector.
  10333. +Second argument NEED-VECTOR means to return an event vector always.Fformat-kbd-macro
  10334. +Return the keyboard macro MACRO as a human-readable string.
  10335. +This string is suitable for passing to `read-kbd-macro'.
  10336. +Second argument VERBOSE means to put one command per line with comments.
  10337. +If VERBOSE is `1', put everything on one line.  If VERBOSE is omitted
  10338. +or nil, use a compact 80-column format.Finsert-kbd-macro
  10339. +Insert in buffer the definition of kbd macro NAME, as Lisp code.
  10340. +Optional second arg KEYS means also record the keys it is on
  10341. +(this is the prefix argument, when calling interactively).
  10342. +
  10343. +This Lisp code will, when executed, define the kbd macro with the same
  10344. +definition it has now.  If you say to record the keys, the Lisp code
  10345. +will also rebind those keys to the macro.  Only global key bindings
  10346. +are recorded since executing this Lisp code always makes global
  10347. +bindings.
  10348. +
  10349. +To save a kbd macro, visit a file of Lisp code such as your `~/.emacs',
  10350. +use this command, and then save the file.Fedt-emulation-on
  10351. +Emulate DEC's EDT editor.
  10352. +Note that many keys are rebound; including nearly all keypad keys.
  10353. +Use \[edt-emulation-off] to undo all rebindings except the keypad keys.Freport-emacs-bug
  10354. +Report a bug in GNU Emacs.
  10355. +Prompts for bug subject.  Leaves you in a mail buffer.Femerge-files
  10356. +Run Emerge on two files.Femerge-files-with-ancestor
  10357. +Run Emerge on two files, giving another file as the ancestor.Femerge-buffers
  10358. +Run Emerge on two buffers.Femerge-buffers-with-ancestor
  10359. +Run Emerge on two buffers, giving another buffer as the ancestor.Femerge-revisions
  10360. +Emerge two RCS revisions of a file.Femerge-revisions-with-ancestor
  10361. +Emerge two RCS revisions of a file, with another revision as ancestor.Fsetenv
  10362. +Set the value of the environment variable named VARIABLE to VALUE.
  10363. +VARIABLE should be a string.  VALUE is optional; if not provided or is
  10364. +`nil', the environment variable VARIABLE will be removed.  
  10365. +This function works by modifying `process-environment'.Vtags-file-name
  10366. +*File name of tags table.
  10367. +To switch to a new tags table, setting this variable is sufficient.
  10368. +If you set this variable, do not also set `tags-table-list'.
  10369. +Use the `etags' program to make a tags table file.Vtags-table-list
  10370. +*List of file names of tags tables to search.
  10371. +An element that is a directory means the file "TAGS" in that directory.
  10372. +To switch to a new list of tags tables, setting this variable is sufficient.
  10373. +If you set this variable, do not also set `tags-file-name'.
  10374. +Use the `etags' program to make a tags table file.Vtags-add-tables
  10375. +*Control whether to add a new tags table to the current list.
  10376. +t means do; nil means don't (always start a new list).
  10377. +Any other value means ask the user whether to add a new tags table
  10378. +to the current list (as opposed to starting a new list).Vfind-tag-hook
  10379. +*Hook to be run by \[find-tag] after finding a tag.  See `run-hooks'.
  10380. +The value in the buffer in which \[find-tag] is done is used,
  10381. +not the value in the buffer \[find-tag] goes to.Vfind-tag-default-function
  10382. +*A function of no arguments used by \[find-tag] to pick a default tag.
  10383. +If nil, and the symbol that is the value of `major-mode'
  10384. +has a `find-tag-default-function' property (see `put'), that is used.
  10385. +Otherwise, `find-tag-default' is used.Fvisit-tags-table
  10386. +Tell tags commands to use tags table file FILE.
  10387. +FILE should be the name of a file created with the `etags' program.
  10388. +A directory name is ok too; it means file TAGS in that directory.
  10389. +
  10390. +Normally \[visit-tags-table] sets the global value of `tags-file-name'.
  10391. +With a prefix arg, set the buffer-local value instead.
  10392. +When you find a tag with \[find-tag], the buffer it finds the tag
  10393. +in is given a local value of this variable which is the name of the tags
  10394. +file the tag was in.Ftags-table-files
  10395. +Return a list of files in the current tags table.
  10396. +Assumes the tags table is the current buffer.
  10397. +File names returned are absolute.Ffind-tag-noselect
  10398. +Find tag (in current tags table) whose name contains TAGNAME.
  10399. +Returns the buffer containing the tag's definition and moves its point there,
  10400. +but does not select the buffer.
  10401. +The default for TAGNAME is the expression in the buffer near point.
  10402. +
  10403. +If second arg NEXT-P is t (interactively, with prefix arg), search for
  10404. +another tag that matches the last tagname or regexp used.  When there are
  10405. +multiple matches for a tag, more exact matches are found first.  If NEXT-P
  10406. +is the atom `-' (interactively, with prefix arg that is a negative number
  10407. +or just \[negative-argument]), pop back to the previous tag gone to.
  10408. +
  10409. +If third arg REGEXP-P is non-nil, treat TAGNAME as a regexp.
  10410. +
  10411. +See documentation of variable `tags-file-name'.Ffind-tag
  10412. +Find tag (in current tags table) whose name contains TAGNAME.
  10413. +Select the buffer containing the tag's definition, and move point there.
  10414. +The default for TAGNAME is the expression in the buffer around or before point.
  10415. +
  10416. +If second arg NEXT-P is t (interactively, with prefix arg), search for
  10417. +another tag that matches the last tagname or regexp used.  When there are
  10418. +multiple matches for a tag, more exact matches are found first.  If NEXT-P
  10419. +is the atom `-' (interactively, with prefix arg that is a negative number
  10420. +or just \[negative-argument]), pop back to the previous tag gone to.
  10421. +
  10422. +See documentation of variable `tags-file-name'.Ffind-tag-other-window
  10423. +Find tag (in current tags table) whose name contains TAGNAME.
  10424. +Select the buffer containing the tag's definition in another window, and
  10425. +move point there.  The default for TAGNAME is the expression in the buffer
  10426. +around or before point.
  10427. +
  10428. +If second arg NEXT-P is t (interactively, with prefix arg), search for
  10429. +another tag that matches the last tagname or regexp used.  When there are
  10430. +multiple matches for a tag, more exact matches are found first.  If NEXT-P
  10431. +is negative (interactively, with prefix arg that is a negative number or
  10432. +just \[negative-argument]), pop back to the previous tag gone to.
  10433. +
  10434. +See documentation of variable `tags-file-name'.Ffind-tag-other-frame
  10435. +Find tag (in current tags table) whose name contains TAGNAME.
  10436. +Select the buffer containing the tag's definition in another frame, and
  10437. +move point there.  The default for TAGNAME is the expression in the buffer
  10438. +around or before point.
  10439. +
  10440. +If second arg NEXT-P is t (interactively, with prefix arg), search for
  10441. +another tag that matches the last tagname or regexp used.  When there are
  10442. +multiple matches for a tag, more exact matches are found first.  If NEXT-P
  10443. +is negative (interactively, with prefix arg that is a negative number or
  10444. +just \[negative-argument]), pop back to the previous tag gone to.
  10445. +
  10446. +See documentation of variable `tags-file-name'.Ffind-tag-regexp
  10447. +Find tag (in current tags table) whose name matches REGEXP.
  10448. +Select the buffer containing the tag's definition and move point there.
  10449. +
  10450. +If second arg NEXT-P is t (interactively, with prefix arg), search for
  10451. +another tag that matches the last tagname or regexp used.  When there are
  10452. +multiple matches for a tag, more exact matches are found first.  If NEXT-P
  10453. +is negative (interactively, with prefix arg that is a negative number or
  10454. +just \[negative-argument]), pop back to the previous tag gone to.
  10455. +
  10456. +If third arg OTHER-WINDOW is non-nil, select the buffer in another window.
  10457. +
  10458. +See documentation of variable `tags-file-name'.Fnext-file
  10459. +Select next file among files in current tags table.
  10460. +
  10461. +A first argument of t (prefix arg, if interactive) initializes to the
  10462. +beginning of the list of files in the tags table.  If the argument is
  10463. +neither nil nor t, it is evalled to initialize the list of files.
  10464. +
  10465. +Non-nil second argument NOVISIT means use a temporary buffer
  10466. + to save time and avoid uninteresting warnings.
  10467. +
  10468. +Value is nil if the file was already visited;
  10469. +if the file was newly read in, the value is the filename.Ftags-loop-continue
  10470. +Continue last \[tags-search] or \[tags-query-replace] command.
  10471. +Used noninteractively with non-nil argument to begin such a command (the
  10472. +argument is passed to `next-file', which see).
  10473. +Two variables control the processing we do on each file:
  10474. +the value of `tags-loop-scan' is a form to be executed on each file
  10475. +to see if it is interesting (it returns non-nil if so)
  10476. +and `tags-loop-operate' is a form to execute to operate on an interesting file
  10477. +If the latter returns non-nil, we exit; otherwise we scan the next file.Ftags-search
  10478. +Search through all files listed in tags table for match for REGEXP.
  10479. +Stops when a match is found.
  10480. +To continue searching for next match, use command \[tags-loop-continue].
  10481. +
  10482. +See documentation of variable `tags-file-name'.Ftags-query-replace
  10483. +Query-replace-regexp FROM with TO through all files listed in tags table.
  10484. +Third arg DELIMITED (prefix arg) means replace only word-delimited matches.
  10485. +If you exit (\[keyboard-quit] or ESC), you can resume the query-replace
  10486. +with the command \[tags-loop-continue].
  10487. +
  10488. +See documentation of variable `tags-file-name'.Flist-tags
  10489. +Display list of tags in file FILE.
  10490. +FILE should not contain a directory specification.Ftags-apropos
  10491. +Display list of all tags in tags table REGEXP matches.Fselect-tags-table
  10492. +Select a tags table file from a menu of those you have already used.
  10493. +The list of tags tables to select from is stored in `tags-table-file-list';
  10494. +see the doc of that variable if you want to add names to the list.Fcomplete-tag
  10495. +Perform tags completion on the text around point.
  10496. +Completes to the set of names listed in the current tags table.  
  10497. +The string to complete is chosen in the same way as the default
  10498. +for \[find-tag] (which see).Vfind-ls-option
  10499. +*Option to `find' to produce an `ls -l'-type listing.Vfind-grep-options
  10500. +*Option to grep to be as silent as possible.
  10501. +On Berkeley systems, this is `-s', for others it seems impossible to
  10502. +suppress all output, so `-l' is used to print nothing more than the
  10503. +file name.Ffind-dired
  10504. +Run `find' and go into dired-mode on a buffer of the output.
  10505. +The command run (after changing into DIR) is
  10506. +
  10507. +    find . \( ARGS \) -lsFfind-name-dired
  10508. +Search DIR recursively for files matching the globbing pattern PATTERN,
  10509. +and run dired on those files.
  10510. +PATTERN is a shell wildcard (not an Emacs regexp) and need not be quoted.
  10511. +The command run (after changing into DIR) is
  10512. +
  10513. +    find . -name 'PATTERN' -lsFfind-grep-dired
  10514. +Find files in DIR containing a regexp ARG and start Dired on output.
  10515. +The command run (after changing into DIR) is
  10516. +
  10517. +    find . -exec grep -s ARG {} \; -ls
  10518. +
  10519. +Thus ARG can also contain additional grep options.Fenable-flow-control
  10520. +Toggle flow control handling.
  10521. +When handling is enabled, user can type C-s as C-\, and C-q as C-^.
  10522. +With arg, enable flow control mode if arg is positive, otherwise disable.Fenable-flow-control-on
  10523. +Enable flow control if using one of a specified set of terminal types.
  10524. +Use `(enable-flow-control-on "vt100" "h19")' to enable flow control
  10525. +on VT-100 and H19 terminals.  When flow control is enabled,
  10526. +you must type C-\ to get the effect of a C-s, and type C-^
  10527. +to get the effect of a C-q.Vfont-lock-mode-hook
  10528. +Function or functions to run on entry to Font Lock mode.Ffont-lock-mode
  10529. +Toggle Font Lock mode.
  10530. +With arg, turn Font Lock mode on if and only if arg is positive.
  10531. +
  10532. +When Font Lock mode is enabled, text is fontified as you type it:
  10533. +
  10534. + - comments are displayed in `font-lock-comment-face';
  10535. +     (That is a variable whose value should be a face name.)
  10536. + - strings are displayed in `font-lock-string-face';
  10537. + - documentation strings are displayed in `font-lock-doc-string-face';
  10538. + - function and variable names in their defining forms are displayed
  10539. +   in `font-lock-function-name-face';
  10540. + - and certain other expressions are displayed in other faces
  10541. +   according to the value of the variable `font-lock-keywords'.
  10542. +
  10543. +When you turn Font Lock mode on/off, the buffer is fontified/defontified.
  10544. +To fontify a buffer without having newly typed text become fontified, you
  10545. +can use \[font-lock-fontify-buffer].Fforms-mode
  10546. +Major mode to visit files in a field-structured manner using a form.
  10547. +
  10548. +Commands:                        Equivalent keys in read-only mode:
  10549. + TAB            forms-next-field          TAB
  10550. + \C-c TAB       forms-next-field          
  10551. + \C-c <         forms-first-record         <
  10552. + \C-c >         forms-last-record          >
  10553. + \C-c ?         describe-mode              ?
  10554. + \C-c \C-k      forms-delete-record
  10555. + \C-c \C-q      forms-toggle-read-only     q
  10556. + \C-c \C-o      forms-insert-record
  10557. + \C-c \C-l      forms-jump-record          l
  10558. + \C-c \C-n      forms-next-record          n
  10559. + \C-c \C-p      forms-prev-record          p
  10560. + \C-c \C-s      forms-search               s
  10561. + \C-c \C-x      forms-exit                 x
  10562. +Fforms-find-file
  10563. +Visit a file in Forms mode.Fforms-find-file-other-window
  10564. +Visit a file in Forms mode in other window.Vfortran-tab-mode-default
  10565. +*Default tabbing/carriage control style for empty files in Fortran mode.
  10566. +A value of t specifies tab-digit style of continuation control.
  10567. +A value of nil specifies that continuation lines are marked
  10568. +with a character in column 6.Ffortran-mode
  10569. +Major mode for editing Fortran code.
  10570. +\[fortran-indent-line] indents the current Fortran line correctly. 
  10571. +DO statements must not share a common CONTINUE.
  10572. +
  10573. +Type ;? or ;\[help-command] to display a list of built-in abbrevs for Fortran keywords.
  10574. +
  10575. +Key definitions:
  10576. +\{fortran-mode-map}
  10577. +
  10578. +Variables controlling indentation style and extra features:
  10579. +
  10580. + comment-start
  10581. +    Normally nil in Fortran mode.  If you want to use comments
  10582. +    starting with `!', set this to the string "!".
  10583. + fortran-do-indent
  10584. +    Extra indentation within do blocks.  (default 3)
  10585. + fortran-if-indent
  10586. +    Extra indentation within if blocks.  (default 3)
  10587. + fortran-structure-indent
  10588. +    Extra indentation within structure, union, map and interface blocks.
  10589. +    (default 3)
  10590. + fortran-continuation-indent
  10591. +    Extra indentation applied to continuation statements.  (default 5)
  10592. + fortran-comment-line-extra-indent
  10593. +    Amount of extra indentation for text within full-line comments. (default 0)
  10594. + fortran-comment-indent-style
  10595. +    nil    means don't change indentation of text in full-line comments,
  10596. +    fixed  means indent that text at `fortran-comment-line-extra-indent' beyond
  10597. +           the value of `fortran-minimum-statement-indent-fixed' (for fixed
  10598. +           format continuation style) or `fortran-minimum-statement-indent-tab'
  10599. +           (for TAB format continuation style).
  10600. +    relative  means indent at `fortran-comment-line-extra-indent' beyond the
  10601. +           indentation for a line of code.
  10602. +    (default 'fixed)
  10603. + fortran-comment-indent-char
  10604. +    Single-character string to be inserted instead of space for
  10605. +    full-line comment indentation.  (default " ")
  10606. + fortran-minimum-statement-indent-fixed
  10607. +    Minimum indentation for Fortran statements in fixed format mode. (def.6)
  10608. + fortran-minimum-statement-indent-tab
  10609. +    Minimum indentation for Fortran statements in TAB format mode. (default 9)
  10610. + fortran-line-number-indent
  10611. +    Maximum indentation for line numbers.  A line number will get
  10612. +    less than this much indentation if necessary to avoid reaching
  10613. +    column 5.  (default 1)
  10614. + fortran-check-all-num-for-matching-do
  10615. +    Non-nil causes all numbered lines to be treated as possible "continue"
  10616. +    statements.  (default nil)
  10617. + fortran-blink-matching-if 
  10618. +    From a Fortran ENDIF statement, blink the matching IF statement.
  10619. +    Also, from an ENDDO statement, blink on matching DO [WHILE] statement.
  10620. +    (default nil)
  10621. + fortran-continuation-string
  10622. +    Single-character string to be inserted in column 5 of a continuation
  10623. +    line.  (default "$")
  10624. + fortran-comment-region
  10625. +    String inserted by \[fortran-comment-region] at start of each line in 
  10626. +    region.  (default "c$$$")
  10627. + fortran-electric-line-number
  10628. +    Non-nil causes line number digits to be moved to the correct column 
  10629. +    as typed.  (default t)
  10630. + fortran-break-before-delimiters
  10631. +    Non-nil causes `fortran-do-auto-fill' breaks lines before delimiters.
  10632. +    (default t)
  10633. + fortran-startup-message
  10634. +    Set to nil to inhibit message first time Fortran mode is used.
  10635. +
  10636. +Turning on Fortran mode calls the value of the variable `fortran-mode-hook'
  10637. +with no args, if that value is non-nil.Fgnus
  10638. +Read network news.
  10639. +If optional argument CONFIRM is non-nil, ask NNTP server.Fgnus-post-news
  10640. +Begin editing a new USENET news article to be posted.
  10641. +Type \[describe-mode] once editing the article to get a list of commands.Fgomoku
  10642. +Start a Gomoku game between you and Emacs.
  10643. +If a game is in progress, this command allow you to resume it.
  10644. +If optional arguments N and M are given, an N by M board is used.
  10645. +
  10646. +You and Emacs play in turn by marking a free square.  You mark it with X
  10647. +and Emacs marks it with O. The winner is the first to get five contiguous
  10648. +marks horizontally, vertically or in diagonal.
  10649. +
  10650. +You play by moving the cursor over the square you choose and hitting
  10651. +\<gomoku-mode-map>\[gomoku-human-plays].
  10652. +Use \[describe-mode] for more info.Fgdb
  10653. +Run gdb on program FILE in buffer *gud-FILE*.
  10654. +The directory containing FILE becomes the initial working directory
  10655. +and source-file directory for your debugger.Fsdb
  10656. +Run sdb on program FILE in buffer *gud-FILE*.
  10657. +The directory containing FILE becomes the initial working directory
  10658. +and source-file directory for your debugger.Fdbx
  10659. +Run dbx on program FILE in buffer *gud-FILE*.
  10660. +The directory containing FILE becomes the initial working directory
  10661. +and source-file directory for your debugger.Fxdb
  10662. +Run xdb on program FILE in buffer *gud-FILE*.
  10663. +The directory containing FILE becomes the initial working directory
  10664. +and source-file directory for your debugger.
  10665. +
  10666. +You can set the variable 'gud-xdb-directories' to a list of program source
  10667. +directories if your program contains sources from more than one directory.Fperldb
  10668. +Run perldb on program FILE in buffer *gud-FILE*.
  10669. +The directory containing FILE becomes the initial working directory
  10670. +and source-file directory for your debugger.Fhanoi
  10671. +Towers of Hanoi diversion.  Argument is number of rings.Vthree-step-help
  10672. +*Non-nil means give more info about Help command in three steps.
  10673. +The three steps are simple prompt, prompt with all options,
  10674. +and window listing and describing the options.
  10675. +A value of nil means skip the middle step, so that
  10676. +\[help-command] \[help-command] gives the window that lists the options.FHelper-describe-bindings
  10677. +Describe local key bindings of current mode.FHelper-help
  10678. +Provide help for current mode.Fhexl-mode
  10679. +\<hexl-mode-map>
  10680. +A major mode for editing binary files in hex dump format.
  10681. +
  10682. +This function automatically converts a buffer into the hexl format
  10683. +using the function `hexlify-buffer'.
  10684. +
  10685. +Each line in the buffer has an "address" (displayed in hexadecimal)
  10686. +representing the offset into the file that the characters on this line
  10687. +are at and 16 characters from the file (displayed as hexadecimal
  10688. +values grouped every 16 bits) and as their ASCII values.
  10689. +
  10690. +If any of the characters (displayed as ASCII characters) are
  10691. +unprintable (control or meta characters) they will be replaced as
  10692. +periods.
  10693. +
  10694. +If `hexl-mode' is invoked with an argument the buffer is assumed to be
  10695. +in hexl format.
  10696. +
  10697. +A sample format:
  10698. +
  10699. +  HEX ADDR: 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f     ASCII-TEXT
  10700. +  --------  ---- ---- ---- ---- ---- ---- ---- ----  ----------------
  10701. +  00000000: 5468 6973 2069 7320 6865 786c 2d6d 6f64  This is hexl-mod
  10702. +  00000010: 652e 2020 4561 6368 206c 696e 6520 7265  e.  Each line re
  10703. +  00000020: 7072 6573 656e 7473 2031 3620 6279 7465  presents 16 byte
  10704. +  00000030: 7320 6173 2068 6578 6164 6563 696d 616c  s as hexadecimal
  10705. +  00000040: 2041 5343 4949 0a61 6e64 2070 7269 6e74   ASCII.and print
  10706. +  00000050: 6162 6c65 2041 5343 4949 2063 6861 7261  able ASCII chara
  10707. +  00000060: 6374 6572 732e 2020 416e 7920 636f 6e74  cters.  Any cont
  10708. +  00000070: 726f 6c20 6f72 206e 6f6e 2d41 5343 4949  rol or non-ASCII
  10709. +  00000080: 2063 6861 7261 6374 6572 730a 6172 6520   characters.are 
  10710. +  00000090: 6469 7370 6c61 7965 6420 6173 2070 6572  displayed as per
  10711. +  000000a0: 696f 6473 2069 6e20 7468 6520 7072 696e  iods in the prin
  10712. +  000000b0: 7461 626c 6520 6368 6172 6163 7465 7220  table character 
  10713. +  000000c0: 7265 6769 6f6e 2e0a                      region..
  10714. +
  10715. +Movement is as simple as movement in a normal emacs text buffer.  Most
  10716. +cursor movement bindings are the same (ie. Use \[hexl-backward-char], \[hexl-forward-char], \[hexl-next-line], and \[hexl-previous-line]
  10717. +to move the cursor left, right, down, and up).
  10718. +
  10719. +Advanced cursor movement commands (ala \[hexl-beginning-of-line], \[hexl-end-of-line], \[hexl-beginning-of-buffer], and \[hexl-end-of-buffer]) are
  10720. +also supported.
  10721. +
  10722. +There are several ways to change text in hexl mode:
  10723. +
  10724. +ASCII characters (character between space (0x20) and tilde (0x7E)) are
  10725. +bound to self-insert so you can simply type the character and it will
  10726. +insert itself (actually overstrike) into the buffer.
  10727. +
  10728. +\[hexl-quoted-insert] followed by another keystroke allows you to insert the key even if
  10729. +it isn't bound to self-insert.  An octal number can be supplied in place
  10730. +of another key to insert the octal number's ASCII representation.
  10731. +
  10732. +\[hexl-insert-hex-char] will insert a given hexadecimal value (if it is between 0 and 0xFF)
  10733. +into the buffer at the current point.
  10734. +
  10735. +\[hexl-insert-octal-char] will insert a given octal value (if it is between 0 and 0377)
  10736. +into the buffer at the current point.
  10737. +
  10738. +\[hexl-insert-decimal-char] will insert a given decimal value (if it is between 0 and 255)
  10739. +into the buffer at the current point.
  10740. +
  10741. +\[hexl-mode-exit] will exit hexl-mode.
  10742. +
  10743. +Note: saving the file with any of the usual Emacs commands
  10744. +will actually convert it back to binary format while saving.
  10745. +
  10746. +You can use \[hexl-find-file] to visit a file in hexl-mode.
  10747. +
  10748. +\[describe-bindings] for advanced commands.Fhexl-find-file
  10749. +Edit file FILENAME in hexl-mode.
  10750. +Switch to a buffer visiting file FILENAME, creating one in none exists.Fhexlify-buffer
  10751. +Convert a binary buffer to hexl formatFhide-ifdef-mode
  10752. +Toggle Hide-Ifdef mode.  This is a minor mode, albeit a large one.
  10753. +With ARG, turn Hide-Ifdef mode on iff arg is positive.
  10754. +In Hide-Ifdef mode, code within #ifdef constructs that the C preprocessor
  10755. +would eliminate may be hidden from view.  Several variables affect
  10756. +how the hiding is done:
  10757. +
  10758. +hide-ifdef-env
  10759. +    An association list of defined and undefined symbols for the
  10760. +    current buffer.  Initially, the global value of `hide-ifdef-env'
  10761. +    is used.
  10762. +
  10763. +hide-ifdef-define-alist
  10764. +    An association list of defined symbol lists.  
  10765. +        Use `hide-ifdef-set-define-alist' to save the current `hide-ifdef-env'
  10766. +        and `hide-ifdef-use-define-alist' to set the current `hide-ifdef-env'
  10767. +        from one of the lists in `hide-ifdef-define-alist'.
  10768. +
  10769. +hide-ifdef-lines
  10770. +    Set to non-nil to not show #if, #ifdef, #ifndef, #else, and
  10771. +    #endif lines when hiding.
  10772. +
  10773. +hide-ifdef-initially
  10774. +    Indicates whether `hide-ifdefs' should be called when Hide-Ifdef mode
  10775. +    is activated.
  10776. +
  10777. +hide-ifdef-read-only
  10778. +    Set to non-nil if you want to make buffers read only while hiding.
  10779. +    After `show-ifdefs', read-only status is restored to previous value.
  10780. +
  10781. +\{hide-ifdef-mode-map}Vhide-ifdef-initially
  10782. +*Non-nil if `hide-ifdefs' should be called when Hide-Ifdef mode
  10783. +is first activated.Vhide-ifdef-read-only
  10784. +*Set to non-nil if you want buffer to be read-only while hiding text.Vhide-ifdef-lines
  10785. +*Set to t if you don't want to see the #ifX, #else, and #endif lines.Vhippie-expand-try-functions-list
  10786. +The list of expansion functions tried in order by `hippie-expand'.
  10787. +To change the behavior of `hippie-expand', remove, change the order of,
  10788. +or insert functions in this list.Vhippie-expand-verbose
  10789. +*Non-nil makes `hippie-expand' output which function it is trying.Vhippie-expand-max-buffers
  10790. +*The maximum number of buffers (apart from the current) searched.
  10791. +If nil, all buffers are searched.Vhippie-expand-ignore-buffers
  10792. +*A list specifying which buffers not to search (if not current).
  10793. +Can contain both regexps matching buffer names (as strings) and major modes
  10794. +(as atoms)Fhippie-expand
  10795. +Try to expand text before point, using multiple methods.
  10796. +The expansion functions in `hippie-expand-try-functions-list' are
  10797. +tried in order, until a possible expansion is found.  Repeated
  10798. +application of `hippie-expand' inserts successively possible
  10799. +expansions.  
  10800. +With a positive numeric argument, jumps directly to the ARG next
  10801. +function in this list.  With a negative argument or just \[universal-argument], 
  10802. +undoes the expansion.Fmake-hippie-expand-function
  10803. +Construct a function similar to `hippie-expand'.
  10804. +Make it use the expansion functions in TRY-LIST.  An optional second
  10805. +argument VERBOSE non-nil makes the function verbose.Ficomplete-prime-session
  10806. +Prep emacs v 19 for more finely-grained minibuffer completion-feedback.
  10807. +
  10808. +You can inhibit icomplete after loading by setting icomplete-inhibit
  10809. +non-nil.  Set the var back to nil to re-enable icomplete.Fielm
  10810. +Interactively evaluate Emacs Lisp expressions.
  10811. +Switches to the buffer *ielm*, or creates it if it does not exist.Fimenu
  10812. +Jump to a place in the buffer chosen using a buffer menu or mouse menu.
  10813. +See `imenu-choose-buffer-index' for more information.Vinferior-lisp-filter-regexp
  10814. +*What not to save on inferior Lisp's input history.
  10815. +Input matching this regexp is not saved on the input history in Inferior Lisp
  10816. +mode.  Default is whitespace followed by 0 or 1 single-letter colon-keyword 
  10817. +(as in :a, :c, etc.)Vinferior-lisp-program
  10818. +*Program name for invoking an inferior Lisp with for Inferior Lisp mode.Vinferior-lisp-load-command
  10819. +*Format-string for building a Lisp expression to load a file.
  10820. +This format string should use `%s' to substitute a file name
  10821. +and should result in a Lisp expression that will command the inferior Lisp
  10822. +to load that file.  The default works acceptably on most Lisps.
  10823. +The string "(progn (load \"%s\" :verbose nil :print t) (values))\
  10824. +"
  10825. +produces cosmetically superior output for this application,
  10826. +but it works only in Common Lisp.Vinferior-lisp-prompt
  10827. +Regexp to recognise prompts in the Inferior Lisp mode.
  10828. +Defaults to "^[^> \n]*>+:? *", which works pretty good for Lucid, kcl,
  10829. +and franz.  This variable is used to initialize `comint-prompt-regexp' in the 
  10830. +Inferior Lisp buffer.
  10831. +
  10832. +More precise choices:
  10833. +Lucid Common Lisp: "^\(>\|\(->\)+\) *"
  10834. +franz: "^\(->\|<[0-9]*>:\) *"
  10835. +kcl: "^>+ *"
  10836. +
  10837. +This is a fine thing to set in your .emacs file.Vinferior-lisp-mode-hook
  10838. +*Hook for customising Inferior Lisp mode.Finferior-lisp
  10839. +Run an inferior Lisp process, input and output via buffer `*inferior-lisp*'.
  10840. +If there is a process already running in `*inferior-lisp*', just switch
  10841. +to that buffer.
  10842. +With argument, allows you to edit the command line (default is value
  10843. +of `inferior-lisp-program').  Runs the hooks from
  10844. +`inferior-lisp-mode-hook' (after the `comint-mode-hook' is run).
  10845. +(Type \[describe-mode] in the process buffer for a list of commands.)Finfo
  10846. +Enter Info, the documentation browser.
  10847. +Optional argument FILE specifies the file to examine;
  10848. +the default is the top-level directory of Info.
  10849. +
  10850. +In interactive use, a prefix argument directs this command
  10851. +to read a file name from the minibuffer.Finfo-standalone
  10852. +Run Emacs as a standalone Info reader.
  10853. +Usage:  emacs -f info-standalone [filename]
  10854. +In standalone mode, \<Info-mode-map>\[Info-exit] exits Emacs itself.FInfo-goto-emacs-command-node
  10855. +Go to the Info node in the Emacs manual for command COMMAND.
  10856. +The command is found by looking up in Emacs manual's Command Index.FInfo-goto-emacs-key-command-node
  10857. +Go to the Info node in the Emacs manual the command bound to KEY, a string.
  10858. +Interactively, if the binding is execute-extended-command, a command is read.
  10859. +The command is found by looking up in Emacs manual's Command Index.FInfo-tagify
  10860. +Create or update Info-file tag table in current buffer.FInfo-split
  10861. +Split an info file into an indirect file plus bounded-size subfiles.
  10862. +Each subfile will be up to 50,000 characters plus one node.
  10863. +
  10864. +To use this command, first visit a large Info file that has a tag
  10865. +table.  The buffer is modified into a (small) indirect info file which
  10866. +should be saved in place of the original visited file.
  10867. +
  10868. +The subfiles are written in the same directory the original file is
  10869. +in, with names generated by appending `-' and a number to the original
  10870. +file name.  The indirect file still functions as an Info file, but it
  10871. +contains just the tag table and a directory of subfiles.FInfo-validate
  10872. +Check current buffer for validity as an Info file.
  10873. +Check that every node pointer points to an existing node.Fbatch-info-validate
  10874. +Runs `Info-validate' on the files remaining on the command line.
  10875. +Must be used only with -batch, and kills Emacs on completion.
  10876. +Each file will be processed even if an error occurred previously.
  10877. +For example, invoke "emacs -batch -f batch-info-validate $info/ ~/*.info"Fiso-accents-mode
  10878. +Toggle ISO Accents mode, in which accents modify the following letter.
  10879. +This permits easy insertion of accented characters according to ISO-8859-1.
  10880. +When Iso-accents mode is enabled, accent character keys
  10881. +(`, ', ", ^, / and ~) do not self-insert; instead, they modify the following
  10882. +letter key so that it inserts an ISO accented letter.
  10883. +
  10884. +The variable `iso-accents-enable' specifies the list of characters to
  10885. +enable as accents.  If you don't need all of them, remove the ones you
  10886. +don't need from that list.
  10887. +
  10888. +Special combinations: ~c gives a c with cedilla,
  10889. +~d gives a d with dash.
  10890. +"s gives German sharp s.
  10891. +/a gives a with ring.
  10892. +/e gives an a-e ligature.
  10893. +~< and ~> give guillemets.
  10894. +
  10895. +With an argument, a positive argument enables ISO Accents mode, 
  10896. +and a negative argument disables it.Vispell-dictionary-alist
  10897. +An alist of dictionaries and their associated parameters.
  10898. +
  10899. +Each element of this list is also a list:
  10900. +
  10901. +(DICTIONARY-NAME CASECHARS NOT-CASECHARS OTHERCHARS MANY-OTHERCHARS-P
  10902. +        ISPELL-ARGS EXTENDED-CHARACTER-MODE)
  10903. +
  10904. +DICTIONARY-NAME is a possible value of variable `ispell-dictionary', nil
  10905. +means the default dictionary.
  10906. +
  10907. +CASECHARS is a regular expression of valid characters that comprise a
  10908. +word.
  10909. +
  10910. +NOT-CASECHARS is the opposite regexp of CASECHARS.
  10911. +
  10912. +OTHERCHARS is a regular expression of other characters that are valid
  10913. +in word constructs.  Otherchars cannot be adjacent to each other in a
  10914. +word, nor can they begin or end a word.  This implies we can't check
  10915. +"Stevens'" as a correct possessive and other correct formations.
  10916. +
  10917. +Hint: regexp syntax requires the hyphen to be declared first here.
  10918. +
  10919. +MANY-OTHERCHARS-P is non-nil if many otherchars are to be allowed in a
  10920. +word instead of only one.
  10921. +
  10922. +ISPELL-ARGS is a list of additional arguments passed to the ispell
  10923. +subprocess.
  10924. +
  10925. +EXTENDED-CHARACTER-MODE should be used when dictionaries are used which
  10926. +have been configured in Ispell's parse.y.  (For example, umlauts
  10927. +can be encoded as \"a, a\", "a, ...)  Defaults are ~tex and ~nroff
  10928. +in English.  This has the same effect as the command-line `-T' option.
  10929. +The buffer Major Mode controls Ispell's parsing in tex or nroff mode,
  10930. +but the dictionary can control the extended character mode.
  10931. +Both defaults can be overruled in a buffer-local fashion. See
  10932. +`ispell-parsing-keyword' for details on this.
  10933. +
  10934. +Note that the CASECHARS and OTHERCHARS slots of the alist should
  10935. +contain the same character set as casechars and otherchars in the
  10936. +language.aff file (e.g., english.aff).Fispell-word
  10937. +Check spelling of word under or before the cursor.
  10938. +If the word is not found in dictionary, display possible corrections
  10939. +in a window and so you can choose one.
  10940. +
  10941. +With a prefix argument (or if CONTINUE is non-nil),
  10942. +resume interrupted spell-checking of a buffer or region.
  10943. +
  10944. +If optional argument FOLLOWING is non-nil or if `ispell-following-word'
  10945. +is non-nil when called interactively, then the following word
  10946. +(rather than preceding) is checked when the cursor is not over a word.
  10947. +When the optional argument QUIETLY is non-nil or `ispell-quietly' is non-nil
  10948. +when called interactively, non-corrective messages are suppressed.
  10949. +
  10950. +Word syntax described by `ispell-dictionary-alist' (which see).
  10951. +
  10952. +This will check or reload the dictionary.  Use \[ispell-change-dictionary]
  10953. +or \[ispell-region] to update the Ispell process.Fispell-help
  10954. +Display a list of the options available when a misspelling is encountered.
  10955. +
  10956. +Selections are:
  10957. +
  10958. +DIGIT: Replace the word with a digit offered in the *Choices* buffer.
  10959. +SPC:   Accept word this time.
  10960. +`i':   Accept word and insert into private dictionary.
  10961. +`a':   Accept word for this session.
  10962. +`A':   Accept word and place in `buffer-local dictionary'.
  10963. +`r':   Replace word with typed-in value.  Rechecked.
  10964. +`R':   Replace word with typed-in value. Query-replaced in buffer. Rechecked.
  10965. +`?':   Show these commands.
  10966. +`x':   Exit spelling buffer.  Move cursor to original point.
  10967. +`X':   Exit spelling buffer.  Leaves cursor at the current point, and permits
  10968. +        the aborted check to be completed later.
  10969. +`q':   Quit spelling session (Kills ispell process).
  10970. +`l':   Look up typed-in replacement in alternate dictionary.  Wildcards okay.
  10971. +`u':   Like `i', but the word is lower-cased first.
  10972. +`m':   Like `i', but allows one to include dictionary completion information.
  10973. +`C-l':  redraws screen
  10974. +`C-r':  recursive edit
  10975. +`C-z':  suspend emacs or iconify frameFispell-kill-ispell
  10976. +Kill current Ispell process (so that you may start a fresh one).
  10977. +With NO-ERROR, just return non-nil if there was no Ispell running.Fispell-change-dictionary
  10978. +Change `ispell-dictionary' (q.v.) and kill old Ispell process.
  10979. +A new one will be started as soon as necessary.
  10980. +
  10981. +By just answering RET you can find out what the current dictionary is.
  10982. +
  10983. +With prefix argument, set the default directory.Fispell-region
  10984. +Interactively check a region for spelling errors.Fispell-buffer
  10985. +Check the current buffer for spelling errors interactively.Fispell-complete-word
  10986. +Look up word before or under point in dictionary (see lookup-words command)
  10987. +and try to complete it.  If optional INTERIOR-FRAG is non-nil then the word
  10988. +may be a character sequence inside of a word.
  10989. +
  10990. +Standard ispell choices are then available.Fispell-complete-word-interior-frag
  10991. +Completes word matching character sequence inside a word.Fispell-message
  10992. +Check the spelling of a mail message or news post.
  10993. +Don't check spelling of message headers except the Subject field.
  10994. +Don't check included messages.
  10995. +
  10996. +To abort spell checking of a message REGION and send the message anyway,
  10997. +use the `x' or `q' command.  (Any subsequent regions will be checked.)
  10998. +The `X' command aborts the message send so that you can edit the buffer.
  10999. +
  11000. +To spell-check whenever a message is sent, include the appropriate lines
  11001. +in your .emacs file:
  11002. +   (add-hook 'news-inews-hook 'ispell-message)
  11003. +   (add-hook 'mail-send-hook  'ispell-message)
  11004. +   (add-hook 'mh-before-send-letter-hook 'ispell-message)
  11005. +
  11006. +you can bind this to the key C-c i in GNUS or mail by adding to
  11007. +`news-reply-mode-hook' or `mail-mode-hook' the following lambda expression:
  11008. +   (function (lambda () (local-set-key "\C-ci" 'ispell-message)))Vledit-save-files
  11009. +*Non-nil means Ledit should save files before transferring to Lisp.Vledit-go-to-lisp-string
  11010. +*Shell commands to execute to resume Lisp job.Vledit-go-to-liszt-string
  11011. +*Shell commands to execute to resume Lisp compiler job.Fledit-mode
  11012. +\<ledit-mode-map>Major mode for editing text and stuffing it to a Lisp job.
  11013. +Like Lisp mode, plus these special commands:
  11014. +  \[ledit-save-defun]    -- record defun at or after point
  11015. +       for later transmission to Lisp job.
  11016. +  \[ledit-save-region] -- record region for later transmission to Lisp job.
  11017. +  \[ledit-go-to-lisp] -- transfer to Lisp job and transmit saved text.
  11018. +  \[ledit-go-to-liszt] -- transfer to Liszt (Lisp compiler) job
  11019. +       and transmit saved text.
  11020. +\{ledit-mode-map}
  11021. +To make Lisp mode automatically change to Ledit mode,
  11022. +do (setq lisp-mode-hook 'ledit-from-lisp-mode)Flife
  11023. +Run Conway's Life simulation.
  11024. +The starting pattern is randomly selected.  Prefix arg (optional first
  11025. +arg non-nil from a program) is the number of seconds to sleep between
  11026. +generations (this defaults to 1).Funload-feature
  11027. +Unload the library that provided FEATURE, restoring all its autoloads.
  11028. +If the feature is required by any other loaded code, and optional FORCE
  11029. +is nil, raise an error.Vlpr-switches
  11030. +*List of strings to pass as extra switch args to `lpr' when it is invoked.Vlpr-command
  11031. +*Shell command for printing a fileFlpr-buffer
  11032. +Print buffer contents as with Unix command `lpr'.
  11033. +`lpr-switches' is a list of extra switches (strings) to pass to lpr.Fprint-buffer
  11034. +Print buffer contents as with Unix command `lpr -p'.
  11035. +`lpr-switches' is a list of extra switches (strings) to pass to lpr.Flpr-region
  11036. +Print region contents as with Unix command `lpr'.
  11037. +`lpr-switches' is a list of extra switches (strings) to pass to lpr.Fprint-region
  11038. +Print region contents as with Unix command `lpr -p'.
  11039. +`lpr-switches' is a list of extra switches (strings) to pass to lpr.Fphases-of-moon
  11040. +Display the quarters of the moon for last month, this month, and next month.
  11041. +If called with an optional prefix argument, prompts for month and year.
  11042. +
  11043. +This function is suitable for execution in a .emacs file.Fname-last-kbd-macro
  11044. +Assign a name to the last keyboard macro defined.
  11045. +Argument SYMBOL is the name to define.
  11046. +The symbol's function definition becomes the keyboard macro string.
  11047. +Such a "function" cannot be called from Lisp, but it is a valid editor command.Finsert-kbd-macro
  11048. +Insert in buffer the definition of kbd macro NAME, as Lisp code.
  11049. +Optional second arg KEYS means also record the keys it is on
  11050. +(this is the prefix argument, when calling interactively).
  11051. +
  11052. +This Lisp code will, when executed, define the kbd macro with the same
  11053. +definition it has now.  If you say to record the keys, the Lisp code
  11054. +will also rebind those keys to the macro.  Only global key bindings
  11055. +are recorded since executing this Lisp code always makes global
  11056. +bindings.
  11057. +
  11058. +To save a kbd macro, visit a file of Lisp code such as your `~/.emacs',
  11059. +use this command, and then save the file.Fkbd-macro-query
  11060. +Query user during kbd macro execution.
  11061. +  With prefix argument, enters recursive edit, reading keyboard
  11062. +commands even within a kbd macro.  You can give different commands
  11063. +each time the macro executes.
  11064. +  Without prefix argument, asks whether to continue running the macro.
  11065. +Your options are: \<query-replace-map>
  11066. +\[act]    Finish this iteration normally and continue with the next.
  11067. +\[skip]    Skip the rest of this iteration, and start the next.
  11068. +\[exit]    Stop the macro entirely right now.
  11069. +\[recenter]    Redisplay the screen, then ask again.
  11070. +\[edit]    Enter recursive edit; ask again when you exit from that.Fapply-macro-to-region-lines
  11071. +For each complete line between point and mark, move to the beginning
  11072. +of the line, and run the last keyboard macro.
  11073. +
  11074. +When called from lisp, this function takes two arguments TOP and
  11075. +BOTTOM, describing the current region.  TOP must be before BOTTOM.
  11076. +The optional third argument MACRO specifies a keyboard macro to
  11077. +execute.
  11078. +
  11079. +This is useful for quoting or unquoting included text, adding and
  11080. +removing comments, or producing tables where the entries are regular.
  11081. +
  11082. +For example, in Usenet articles, sections of text quoted from another
  11083. +author are indented, or have each line start with `>'.  To quote a
  11084. +section of text, define a keyboard macro which inserts `>', put point
  11085. +and mark at opposite ends of the quoted section, and use
  11086. +`\[apply-macro-to-region-lines]' to mark the entire section.
  11087. +
  11088. +Suppose you wanted to build a keyword table in C where each entry
  11089. +looked like this:
  11090. +
  11091. +    { "foo", foo_data, foo_function }, 
  11092. +    { "bar", bar_data, bar_function },
  11093. +    { "baz", baz_data, baz_function },
  11094. +
  11095. +You could enter the names in this format:
  11096. +
  11097. +    foo
  11098. +    bar
  11099. +    baz
  11100. +
  11101. +and write a macro to massage a word into a table entry:
  11102. +
  11103. +    \C-x (
  11104. +       \M-d { "\C-y", \C-y_data, \C-y_function },
  11105. +    \C-x )
  11106. +
  11107. +and then select the region of un-tablified names and use
  11108. +`\[apply-macro-to-region-lines]' to build the table from the names.
  11109. +Fmail-extract-address-components
  11110. +Given an RFC-822 ADDRESS, extract full name and canonical address.
  11111. +Returns a list of the form (FULL-NAME CANONICAL-ADDRESS).
  11112. +If no name can be extracted, FULL-NAME will be nil.
  11113. +ADDRESS may be a string or a buffer.  If it is a buffer, the visible 
  11114. + (narrowed) portion of the buffer will be interpreted as the address.
  11115. + (This feature exists so that the clever caller might be able to avoid
  11116. + consing a string.)
  11117. +If ADDRESS contains more than one RFC-822 address, only the first is
  11118. + returned.  Some day this function may be extended to extract multiple
  11119. + addresses, or perhaps return the position at which parsing stopped.Fwhat-domain
  11120. +Convert mail domain to country tit corresponds to.Vmail-use-rfc822
  11121. +*If non-nil, use a full, hairy RFC822 parser on mail addresses.
  11122. +Otherwise, (the default) use a smaller, somewhat faster, and
  11123. +often correct parser.Fmail-fetch-field
  11124. +Return the value of the header field FIELD-NAME.
  11125. +The buffer is expected to be narrowed to just the headers of the message.
  11126. +If second arg LAST is non-nil, use the last such field if there are several.
  11127. +If third arg ALL is non-nil, concatenate all such fields with commas between.Fbuild-mail-abbrevs
  11128. +Read mail aliases from `~/.mailrc' file and set `mail-abbrevs'.Fdefine-mail-abbrev
  11129. +Define NAME as a mail-abbrev that translates to DEFINITION.
  11130. +If DEFINITION contains multiple addresses, separate them with commas.Fdefine-mail-alias
  11131. +Define NAME as a mail alias that translates to DEFINITION.
  11132. +This means that sending a message to NAME will actually send to DEFINITION.
  11133. +DEFINITION can be one or more mail addresses separated by commas.Fmakefile-mode
  11134. +Major mode for editing Makefiles.
  11135. +Calling this function invokes the function(s) "makefile-mode-hook" before
  11136. +doing anything else.
  11137. +
  11138. +\{makefile-mode-map}
  11139. +
  11140. +In the browser, use the following keys:
  11141. +
  11142. +\{makefile-browser-map}
  11143. +
  11144. +makefile-mode can be configured by modifying the following
  11145. +variables:
  11146. +
  11147. +makefile-mode-name:
  11148. +    The "pretty name" of makefile-mode, as it
  11149. +    appears in the modeline.
  11150. +
  11151. +makefile-browser-buffer-name:
  11152. +    Name of the macro- and target browser buffer.
  11153. +
  11154. +makefile-target-colon:
  11155. +    The string that gets appended to all target names
  11156. +    inserted by makefile-insert-target.
  11157. +    ":" or "::" are quite common values.
  11158. +
  11159. +makefile-macro-assign:
  11160. +   The string that gets appended to all macro names
  11161. +   inserted by makefile-insert-macro.
  11162. +   The normal value should be " = ", since this is what
  11163. +   standard make expects. However, newer makes such as dmake
  11164. +   allow a larger variety of different macro assignments, so you
  11165. +   might prefer to use " += " or " := " .
  11166. +
  11167. +makefile-tab-after-target-colon:
  11168. +   If you want a TAB (instead of a space) to be appended after the
  11169. +   target colon, then set this to a non-nil value.
  11170. +
  11171. +makefile-browser-leftmost-column:
  11172. +   Number of blanks to the left of the browser selection mark.
  11173. +
  11174. +makefile-browser-cursor-column:
  11175. +   Column in which the cursor is positioned when it moves
  11176. +   up or down in the browser.
  11177. +
  11178. +makefile-browser-selected-mark:
  11179. +   String used to mark selected entries in the browser.
  11180. +
  11181. +makefile-browser-unselected-mark:
  11182. +   String used to mark unselected entries in the browser.
  11183. +
  11184. +makefile-browser-auto-advance-after-selection-p:
  11185. +   If this variable is set to a non-nil value the cursor
  11186. +   will automagically advance to the next line after an item
  11187. +   has been selected in the browser.
  11188. +
  11189. +makefile-pickup-everything-picks-up-filenames-p:
  11190. +   If this variable is set to a non-nil value then
  11191. +   makefile-pickup-everything also picks up filenames as targets
  11192. +   (i.e. it calls makefile-find-filenames-as-targets), otherwise
  11193. +   filenames are omitted.
  11194. +
  11195. +makefile-cleanup-continuations-p:
  11196. +   If this variable is set to a non-nil value then makefile-mode
  11197. +   will assure that no line in the file ends with a backslash
  11198. +   (the continuation character) followed by any whitespace.
  11199. +   This is done by silently removing the trailing whitespace, leaving
  11200. +   the backslash itself intact.
  11201. +   IMPORTANT: Please note that enabling this option causes makefile-mode
  11202. +   to MODIFY A FILE WITHOUT YOUR CONFIRMATION when 'it seems necessary'.
  11203. +
  11204. +makefile-browser-hook:
  11205. +   A function or list of functions to be called just before the
  11206. +   browser is entered. This is executed in the makefile buffer.
  11207. +
  11208. +makefile-special-targets-list:
  11209. +   List of special targets. You will be offered to complete
  11210. +   on one of those in the minibuffer whenever you enter a "."
  11211. +   at the beginning of a line in makefile-mode.Fmake-command-summary
  11212. +Make a summary of current key bindings in the buffer *Summary*.
  11213. +Previous contents of that buffer are killed first.Fmanual-entry
  11214. +Get a Un*x manual page and put it in a buffer.
  11215. +This command is the top-level command in the man package.  It runs a Un*x
  11216. +command to retrieve and clean a manpage in the background and places the
  11217. +results in a Man mode (manpage browsing) buffer.  See variable
  11218. +`Man-notify' for what happens when the buffer is ready.
  11219. +Normally, if a buffer already exists for this man page, it will display
  11220. +immediately; either a prefix argument or a nil value to `Man-reuse-okay-p'
  11221. +overrides this and forces the man page to be regenerated.Fmap-y-or-n-p
  11222. +Ask a series of boolean questions.
  11223. +Takes args PROMPTER ACTOR LIST, and optional args HELP and ACTION-ALIST.
  11224. +
  11225. +LIST is a list of objects, or a function of no arguments to return the next
  11226. +object or nil.
  11227. +
  11228. +If PROMPTER is a string, the prompt is (format PROMPTER OBJECT).  If not
  11229. +a string, PROMPTER is a function of one arg (an object from LIST), which
  11230. +returns a string to be used as the prompt for that object.  If the return
  11231. +value is not a string, it is eval'd to get the answer; it may be nil to
  11232. +ignore the object, t to act on the object without asking the user, or a
  11233. +form to do a more complex prompt.
  11234. +
  11235. +ACTOR is a function of one arg (an object from LIST),
  11236. +which gets called with each object that the user answers `yes' for.
  11237. +
  11238. +If HELP is given, it is a list (OBJECT OBJECTS ACTION),
  11239. +where OBJECT is a string giving the singular noun for an elt of LIST;
  11240. +OBJECTS is the plural noun for elts of LIST, and ACTION is a transitive
  11241. +verb describing ACTOR.  The default is ("object" "objects" "act on").
  11242. +
  11243. +At the prompts, the user may enter y, Y, or SPC to act on that object;
  11244. +n, N, or DEL to skip that object; ! to act on all following objects;
  11245. +ESC or q to exit (skip all following objects); . (period) to act on the
  11246. +current object and then exit; or \[help-command] to get help.
  11247. +
  11248. +If ACTION-ALIST is given, it is an alist (KEY FUNCTION HELP) of extra keys
  11249. +that will be accepted.  KEY is a character; FUNCTION is a function of one
  11250. +arg (an object from LIST); HELP is a string.  When the user hits KEY,
  11251. +FUNCTION is called.  If it returns non-nil, the object is considered
  11252. +"acted upon", and the next object from LIST is processed.  If it returns
  11253. +nil, the prompt is repeated for the same object.
  11254. +
  11255. +Final optional argument NO-CURSOR-IN-ECHO-AREA non-nil says not to set
  11256. +`cursor-in-echo-area' while prompting.
  11257. +
  11258. +This function uses `query-replace-map' to define the standard responses,
  11259. +but not all of the responses which `query-replace' understands
  11260. +are meaningful here.
  11261. +
  11262. +Returns the number of actions taken.Fmh-smail
  11263. +Compose and send mail with the MH mail system.
  11264. +This function is an entry point to mh-e, the Emacs front end
  11265. +to the MH mail system.Fmh-smail-other-window
  11266. +Compose and send mail in other window with the MH mail system.
  11267. +This function is an entry point to mh-e, the Emacs front end
  11268. +to the MH mail system.Fmh-letter-mode
  11269. +Mode for composing letters in mh-e.\<mh-letter-mode-map>
  11270. +When you have finished composing, type \[mh-send-letter] to send the letter.
  11271. +
  11272. +\{mh-letter-mode-map}
  11273. +
  11274. +Variables controlling this mode (defaults in parentheses):
  11275. +
  11276. + mh-delete-yanked-msg-window (nil)
  11277. +    If non-nil, \[mh-yank-cur-msg] will delete any windows displaying
  11278. +    the yanked message.
  11279. +
  11280. + mh-yank-from-start-of-msg (t)
  11281. +    If non-nil, \[mh-yank-cur-msg] will include the entire message.
  11282. +    If `body', just yank the body (no header).
  11283. +    If nil, only the portion of the message following the point will be yanked.
  11284. +    If there is a region, this variable is ignored.
  11285. +
  11286. + mh-signature-file-name ("~/.signature")
  11287. +    File to be inserted into message by \[mh-insert-signature].
  11288. +
  11289. +Upon invoking mh-letter-mode, text-mode-hook and mh-letter-mode-hook are
  11290. +invoked with no args, if those values are non-nil.Fmh-rmail
  11291. +Inc(orporate) new mail with MH, or, with arg, scan an MH mail folder.
  11292. +This function is an entry point to mh-e, the Emacs front end
  11293. +to the MH mail system.Fconvert-mocklisp-buffer
  11294. +Convert buffer of Mocklisp code to real Lisp that GNU Emacs can run.Fmodula-2-mode
  11295. +This is a mode intended to support program development in Modula-2.
  11296. +All control constructs of Modula-2 can be reached by typing C-c
  11297. +followed by the first character of the construct.
  11298. +\<m2-mode-map>
  11299. +  \[m2-begin] begin         \[m2-case] case
  11300. +  \[m2-definition] definition    \[m2-else] else
  11301. +  \[m2-for] for           \[m2-header] header
  11302. +  \[m2-if] if            \[m2-module] module
  11303. +  \[m2-loop] loop          \[m2-or] or
  11304. +  \[m2-procedure] procedure     Control-c Control-w with
  11305. +  \[m2-record] record        \[m2-stdio] stdio
  11306. +  \[m2-type] type          \[m2-until] until
  11307. +  \[m2-var] var           \[m2-while] while
  11308. +  \[m2-export] export        \[m2-import] import
  11309. +  \[m2-begin-comment] begin-comment \[m2-end-comment] end-comment
  11310. +  \[suspend-emacs] suspend Emacs     \[m2-toggle] toggle
  11311. +  \[m2-compile] compile           \[m2-next-error] next-error
  11312. +  \[m2-link] link
  11313. +
  11314. +   `m2-indent' controls the number of spaces for each indentation.
  11315. +   `m2-compile-command' holds the command to compile a Modula-2 program.
  11316. +   `m2-link-command' holds the command to link a Modula-2 program.Fmpuz
  11317. +Multiplication puzzle with GNU Emacs.Fenable-command
  11318. +Allow COMMAND to be executed without special confirmation from now on.
  11319. +The user's .emacs file is altered so that this will apply
  11320. +to future sessions.Fdisable-command
  11321. +Require special confirmation to execute COMMAND from now on.
  11322. +The user's .emacs file is altered so that this will apply
  11323. +to future sessions.Fnroff-mode
  11324. +Major mode for editing text intended for nroff to format.
  11325. +\{nroff-mode-map}
  11326. +Turning on Nroff mode runs `text-mode-hook', then `nroff-mode-hook'.
  11327. +Also, try `nroff-electric-mode', for automatically inserting
  11328. +closing requests for requests that are used in matched pairs.Flist-options
  11329. +Display a list of Emacs user options, with values and documentation.Fedit-options
  11330. +Edit a list of Emacs user option values.
  11331. +Selects a buffer containing such a list,
  11332. +in which there are commands to set the option values.
  11333. +Type \[describe-mode] in that buffer for a list of commands.Foutline-mode
  11334. +Set major mode for editing outlines with selective display.
  11335. +Headings are lines which start with asterisks: one for major headings,
  11336. +two for subheadings, etc.  Lines not starting with asterisks are body lines. 
  11337. +
  11338. +Body text or subheadings under a heading can be made temporarily
  11339. +invisible, or visible again.  Invisible lines are attached to the end 
  11340. +of the heading, so they move with it, if the line is killed and yanked
  11341. +back.  A heading with text hidden under it is marked with an ellipsis (...).
  11342. +
  11343. +Commands:\<outline-mode-map>
  11344. +\[outline-next-visible-heading]   outline-next-visible-heading      move by visible headings
  11345. +\[outline-previous-visible-heading]   outline-previous-visible-heading
  11346. +\[outline-forward-same-level]   outline-forward-same-level        similar but skip subheadings
  11347. +\[outline-backward-same-level]   outline-backward-same-level
  11348. +\[outline-up-heading]   outline-up-heading            move from subheading to heading
  11349. +
  11350. +\[hide-body]    make all text invisible (not headings).
  11351. +\[show-all]    make everything in buffer visible.
  11352. +
  11353. +The remaining commands are used when point is on a heading line.
  11354. +They apply to some of the body or subheadings of that heading.
  11355. +\[hide-subtree]   hide-subtree    make body and subheadings invisible.
  11356. +\[show-subtree]   show-subtree    make body and subheadings visible.
  11357. +\[show-children]   show-children    make direct subheadings visible.
  11358. +         No effect on body, or subheadings 2 or more levels down.
  11359. +         With arg N, affects subheadings N levels down.
  11360. +\[hide-entry]       make immediately following body invisible.
  11361. +\[show-entry]       make it visible.
  11362. +\[hide-leaves]       make body under heading and under its subheadings invisible.
  11363. +             The subheadings remain visible.
  11364. +\[show-branches]  make all subheadings at all levels visible.
  11365. +
  11366. +The variable `outline-regexp' can be changed to control what is a heading.
  11367. +A line is a heading if `outline-regexp' matches something at the
  11368. +beginning of the line.  The longer the match, the deeper the level.
  11369. +
  11370. +Turning on outline mode calls the value of `text-mode-hook' and then of
  11371. +`outline-mode-hook', if they are non-nil.Foutline-minor-mode
  11372. +Toggle Outline minor mode.
  11373. +With arg, turn Outline minor mode on if arg is positive, off otherwise.
  11374. +See the command `outline-mode' for more information on this mode.Fpascal-mode
  11375. +Major mode for editing Pascal code. \<pascal-mode-map>
  11376. +TAB indents for Pascal code.  Delete converts tabs to spaces as it moves back.
  11377. +
  11378. +\[pascal-complete-word] completes the word around current point with respect to position in code
  11379. +\[pascal-show-completions] shows all possible completions at this point.
  11380. +
  11381. +Other useful functions are:
  11382. +
  11383. +\[pascal-mark-defun]    - Mark function.
  11384. +\[pascal-insert-block]    - insert begin ... end;
  11385. +\[pascal-star-comment]    - insert (* ... *)
  11386. +\[pascal-comment-area]    - Put marked area in a comment, fixing nested comments.
  11387. +\[pascal-uncomment-area]    - Uncomment an area commented with \[pascal-comment-area].
  11388. +\[pascal-beg-of-defun]    - Move to beginning of current function.
  11389. +\[pascal-end-of-defun]    - Move to end of current function.
  11390. +\[pascal-goto-defun]    - Goto function prompted for in the minibuffer.
  11391. +\[pascal-outline]    - Enter pascal-outline-mode (see also pascal-outline).
  11392. +
  11393. +Variables controlling indentation/edit style:
  11394. +
  11395. + pascal-indent-level      (default 3)
  11396. +    Indentation of Pascal statements with respect to containing block.
  11397. + pascal-case-indent       (default 2)
  11398. +    Indentation for case statements.
  11399. + pascal-auto-newline      (default nil)
  11400. +    Non-nil means automatically newline after simcolons and the punctation mark
  11401. +    after an end.
  11402. + pascal-tab-always-indent (defualt t)
  11403. +    Non-nil means TAB in Pascal mode should always reindent the current line,
  11404. +    regardless of where in the line point is when the TAB command is used.
  11405. + pascal-auto-endcomments  (default t)
  11406. +    Non-nil means a comment { ... } is set after the ends which ends cases and
  11407. +    functions. The name of the function or case will be set between the braces.
  11408. +
  11409. +See also the user variables pascal-type-keywords, pascal-start-keywords and
  11410. +pascal-separator-keywords.
  11411. +
  11412. +Turning on Pascal mode calls the value of the variable pascal-mode-hook with
  11413. +no args, if that value is non-nil.Fperl-mode
  11414. +Major mode for editing Perl code.
  11415. +Expression and list commands understand all Perl brackets.
  11416. +Tab indents for Perl code.
  11417. +Comments are delimited with # ... \n.
  11418. +Paragraphs are separated by blank lines only.
  11419. +Delete converts tabs to spaces as it moves back.
  11420. +\{perl-mode-map}
  11421. +Variables controlling indentation style:
  11422. + perl-tab-always-indent
  11423. +    Non-nil means TAB in Perl mode should always indent the current line,
  11424. +    regardless of where in the line point is when the TAB command is used.
  11425. + perl-tab-to-comment
  11426. +    Non-nil means that for lines which don't need indenting, TAB will
  11427. +    either delete an empty comment, indent an existing comment, move 
  11428. +    to end-of-line, or if at end-of-line already, create a new comment.
  11429. + perl-nochange
  11430. +    Lines starting with this regular expression are not auto-indented.
  11431. + perl-indent-level
  11432. +    Indentation of Perl statements within surrounding block.
  11433. +    The surrounding block's indentation is the indentation
  11434. +    of the line on which the open-brace appears.
  11435. + perl-continued-statement-offset
  11436. +    Extra indentation given to a substatement, such as the
  11437. +    then-clause of an if or body of a while.
  11438. + perl-continued-brace-offset
  11439. +    Extra indentation given to a brace that starts a substatement.
  11440. +    This is in addition to `perl-continued-statement-offset'.
  11441. + perl-brace-offset
  11442. +    Extra indentation for line if it starts with an open brace.
  11443. + perl-brace-imaginary-offset
  11444. +    An open brace following other text is treated as if it were
  11445. +    this far to the right of the start of its line.
  11446. + perl-label-offset
  11447. +    Extra indentation for line that is a label.
  11448. +
  11449. +Various indentation styles:       K&R  BSD  BLK  GNU  LW
  11450. +  perl-indent-level                5    8    0    2    4
  11451. +  perl-continued-statement-offset  5    8    4    2    4
  11452. +  perl-continued-brace-offset      0    0    0    0   -4
  11453. +  perl-brace-offset               -5   -8    0    0    0
  11454. +  perl-brace-imaginary-offset      0    0    4    0    0
  11455. +  perl-label-offset               -5   -8   -2   -2   -2
  11456. +
  11457. +Turning on Perl mode runs the normal hook `perl-mode-hook'.Fpicture-mode
  11458. +Switch to Picture mode, in which a quarter-plane screen model is used.
  11459. +Printing characters replace instead of inserting themselves with motion
  11460. +afterwards settable by these commands:
  11461. +  C-c <      Move left after insertion.
  11462. +  C-c >      Move right after insertion.
  11463. +  C-c ^      Move up after insertion.
  11464. +  C-c .      Move down after insertion.
  11465. +  C-c `      Move northwest (nw) after insertion.
  11466. +  C-c '      Move northeast (ne) after insertion.
  11467. +  C-c /      Move southwest (sw) after insertion.
  11468. +  C-c \   Move southeast (se) after insertion.
  11469. +The current direction is displayed in the mode line.  The initial
  11470. +direction is right.  Whitespace is inserted and tabs are changed to
  11471. +spaces when required by movement.  You can move around in the buffer
  11472. +with these commands:
  11473. +  \[picture-move-down]      Move vertically to SAME column in previous line.
  11474. +  \[picture-move-up]      Move vertically to SAME column in next line.
  11475. +  \[picture-end-of-line]      Move to column following last non-whitespace character.
  11476. +  \[picture-forward-column]      Move right inserting spaces if required.
  11477. +  \[picture-backward-column]      Move left changing tabs to spaces if required.
  11478. +  C-c C-f Move in direction of current picture motion.
  11479. +  C-c C-b Move in opposite direction of current picture motion.
  11480. +  Return  Move to beginning of next line.
  11481. +You can edit tabular text with these commands:
  11482. +  M-Tab      Move to column beneath (or at) next interesting character.
  11483. +        `Indents' relative to a previous line.
  11484. +  Tab      Move to next stop in tab stop list.
  11485. +  C-c Tab Set tab stops according to context of this line.
  11486. +        With ARG resets tab stops to default (global) value.
  11487. +        See also documentation of variable    picture-tab-chars
  11488. +        which defines "interesting character".  You can manually
  11489. +        change the tab stop list with command \[edit-tab-stops].
  11490. +You can manipulate text with these commands:
  11491. +  C-d      Clear (replace) ARG columns after point without moving.
  11492. +  C-c C-d Delete char at point - the command normally assigned to C-d.
  11493. +  \[picture-backward-clear-column]  Clear (replace) ARG columns before point, moving back over them.
  11494. +  \[picture-clear-line]      Clear ARG lines, advancing over them.     The cleared
  11495. +        text is saved in the kill ring.
  11496. +  \[picture-open-line]      Open blank line(s) beneath current line.
  11497. +You can manipulate rectangles with these commands:
  11498. +  C-c C-k Clear (or kill) a rectangle and save it.
  11499. +  C-c C-w Like C-c C-k except rectangle is saved in named register.
  11500. +  C-c C-y Overlay (or insert) currently saved rectangle at point.
  11501. +  C-c C-x Like C-c C-y except rectangle is taken from named register.
  11502. +  \[copy-rectangle-to-register]   Copies a rectangle to a register.
  11503. +  \[advertised-undo]   Can undo effects of rectangle overlay commands
  11504. +        commands if invoked soon enough.
  11505. +You can return to the previous mode with:
  11506. +  C-c C-c Which also strips trailing whitespace from every line.
  11507. +        Stripping is suppressed by supplying an argument.
  11508. +
  11509. +Entry to this mode calls the value of  picture-mode-hook  if non-nil.
  11510. +
  11511. +Note that Picture mode commands will work outside of Picture mode, but
  11512. +they are not defaultly assigned to keys.Fprolog-mode
  11513. +Major mode for editing Prolog code for Prologs.
  11514. +Blank lines and `%%...' separate paragraphs.  `%'s start comments.
  11515. +Commands:
  11516. +\{prolog-mode-map}
  11517. +Entry to this mode calls the value of `prolog-mode-hook'
  11518. +if that value is non-nil.Frun-prolog
  11519. +Run an inferior Prolog process, input and output via buffer *prolog*.Fremote-compile
  11520. +Compile the the current buffer's directory on HOST.  Log in as USER.
  11521. +See \[compile].Fdelete-rectangle
  11522. +Delete (don't save) text in rectangle with point and mark as corners.
  11523. +The same range of columns is deleted in each line starting with the line
  11524. +where the region begins and ending with the line where the region ends.Fdelete-extract-rectangle
  11525. +Delete contents of rectangle and return it as a list of strings.
  11526. +Arguments START and END are the corners of the rectangle.
  11527. +The value is list of strings, one for each line of the rectangle.Fextract-rectangle
  11528. +Return contents of rectangle with corners at START and END.
  11529. +Value is list of strings, one for each line of the rectangle.Fkill-rectangle
  11530. +Delete rectangle with corners at point and mark; save as last killed one.
  11531. +Calling from program, supply two args START and END, buffer positions.
  11532. +But in programs you might prefer to use `delete-extract-rectangle'.Fyank-rectangle
  11533. +Yank the last killed rectangle with upper left corner at point.Finsert-rectangle
  11534. +Insert text of RECTANGLE with upper left corner at point.
  11535. +RECTANGLE's first line is inserted at point, its second
  11536. +line is inserted at a point vertically under point, etc.
  11537. +RECTANGLE should be a list of strings.
  11538. +After this command, the mark is at the upper left corner
  11539. +and point is at the lower right corner.Fopen-rectangle
  11540. +Blank out rectangle with corners at point and mark, shifting text right.
  11541. +The text previously in the region is not overwritten by the blanks,
  11542. +but instead winds up to the right of the rectangle.Fstring-rectangle
  11543. +Insert STRING on each line of the region-rectangle, shifting text right.
  11544. +The left edge of the rectangle specifies the column for insertion.
  11545. +This command does not delete or overwrite any existing text.
  11546. +
  11547. +Called from a program, takes three args; START, END and STRING.Fclear-rectangle
  11548. +Blank out rectangle with corners at point and mark.
  11549. +The text previously in the region is overwritten by the blanks.
  11550. +When called from a program, requires two args which specify the corners.Freposition-window
  11551. +Make the current definition and/or comment visible.
  11552. +Further invocations move it to the top of the window or toggle the
  11553. +visibility of comments that precede it.
  11554. +  Point is left unchanged unless prefix ARG is supplied.
  11555. +  If the definition is fully onscreen, it is moved to the top of the
  11556. +window.  If it is partly offscreen, the window is scrolled to get the
  11557. +definition (or as much as will fit) onscreen, unless point is in a comment
  11558. +which is also partly offscreen, in which case the scrolling attempts to get
  11559. +as much of the comment onscreen as possible.
  11560. +  Initially `reposition-window' attempts to make both the definition and
  11561. +preceding comments visible.  Further invocations toggle the visibility of
  11562. +the comment lines.
  11563. +  If ARG is non-nil, point may move in order to make the whole defun
  11564. +visible (if only part could otherwise be made so), to make the defun line
  11565. +visible (if point is in code and it could not be made so, or if only
  11566. +comments, including the first comment line, are visible), or to make the
  11567. +first comment line visible (if point is in a comment).Fresume-suspend-hook
  11568. +Clear out the file used for transmitting args when Emacs resumes.Fring-p
  11569. +Returns t if X is a ring; nil otherwise.Fmake-ring
  11570. +Make a ring that can contain SIZE elements.Vrlogin-program
  11571. +*Name of program to invoke rloginVrlogin-explicit-args
  11572. +*List of arguments to pass to rlogin on the command line.Vrlogin-mode-hook
  11573. +*Hooks to run after setting current buffer to rlogin-mode.Vrlogin-process-connection-type
  11574. +*If non-`nil', use a pty for the local rlogin process.  
  11575. +If `nil', use a pipe (if pipes are supported on the local system).  
  11576. +
  11577. +Generally it is better not to waste ptys on systems which have a static
  11578. +number of them.  On the other hand, some implementations of `rlogin' assume
  11579. +a pty is being used, and errors will result from using a pipe instead.Vrlogin-initially-track-cwd
  11580. +*If non-`nil', do remote directory tracking via ange-ftp right away.
  11581. +If `nil', you can still enable directory tracking by doing 
  11582. +`M-x dirtrack-toggle'.Vrlogin-password-paranoia
  11583. +*If non-`nil', query user for a password in the minibuffer when a Password: prompt appears.
  11584. +It's also possible to selectively enter passwords without echoing them in
  11585. +the minibuffer using the command `rlogin-password' explicitly.Frlogin
  11586. +Open a network login connection to HOST via the `rlogin' program.
  11587. +Input is sent line-at-a-time to the remote connection.
  11588. +
  11589. +Communication with the remote host is recorded in a buffer *rlogin-HOST*,
  11590. +where HOST is the first word in the string ARGS.  If a prefix argument is
  11591. +given and the buffer *rlogin-HOST* already exists, a new buffer with a
  11592. +different connection will be made.
  11593. +
  11594. +The variable `rlogin-program' contains the name of the actual program to
  11595. +run.  It can be a relative or absolute path. 
  11596. +
  11597. +The variable `rlogin-explicit-args' is a list of arguments to give to
  11598. +the rlogin when starting.  They are added after any arguments given in ARGS.Vrmail-dont-reply-to-names
  11599. +*A regexp specifying names to prune of reply to messages.
  11600. +A value of nil means exclude your own name only.Vrmail-default-dont-reply-to-names
  11601. +A regular expression specifying part of the value of the default value of
  11602. +the variable `rmail-dont-reply-to-names', for when the user does not set
  11603. +`rmail-dont-reply-to-names' explicitly.  (The other part of the default
  11604. +value is the user's name.)
  11605. +It is useful to set this variable in the site customization file.Vrmail-ignored-headers
  11606. +*Regexp to match Header fields that Rmail should normally hide.Vrmail-highlighted-headers
  11607. +*Regexp to match Header fields that Rmail should normally highlight.
  11608. +A value of nil means don't highlight.
  11609. +See also `rmail-highlight-face'.Vrmail-highlight-face
  11610. +*Face used by Rmail for highlighting headers.Vrmail-delete-after-output
  11611. +*Non-nil means automatically delete a message that is copied to a file.Vrmail-primary-inbox-list
  11612. +*List of files which are inboxes for user's primary mail file `~/RMAIL'.
  11613. +`nil' means the default, which is ("/usr/spool/mail/$USER")
  11614. +(the name varies depending on the operating system,
  11615. +and the value of the environment variable MAIL overrides it).Vrmail-mail-new-frame
  11616. +*Non-nil means Rmail makes a new frame for composing outgoing mail.Vrmail-retry-setup-hook
  11617. +Hook that `rmail-retry-failure' uses in place of `mail-setup-hook'.Vrmail-secondary-file-directory
  11618. +*Directory for additional secondary Rmail files.Vrmail-secondary-file-regexp
  11619. +*Regexp for which files are secondary Rmail files.Frmail
  11620. +Read and edit incoming mail.
  11621. +Moves messages into file named by `rmail-file-name' (a babyl format file)
  11622. + and edits that file in RMAIL Mode.
  11623. +Type \[describe-mode] once editing that file, for a list of RMAIL commands.
  11624. +
  11625. +May be called with file name as argument; then performs rmail editing on
  11626. +that file, but does not copy any new mail into the file.
  11627. +Interactively, if you supply a prefix argument, then you
  11628. +have a chance to specify a file name with the minibuffer.
  11629. +
  11630. +If `rmail-display-summary' is non-nil, make a summary for this RMAIL file.Frmail-mode
  11631. +Rmail Mode is used by \<rmail-mode-map>\[rmail] for editing Rmail files.
  11632. +All normal editing commands are turned off.
  11633. +Instead, these commands are available:
  11634. +
  11635. +\[rmail-beginning-of-message]    Move point to front of this message (same as \[beginning-of-buffer]).
  11636. +\[scroll-up]    Scroll to next screen of this message.
  11637. +\[scroll-down]    Scroll to previous screen of this message.
  11638. +\[rmail-next-undeleted-message]    Move to Next non-deleted message.
  11639. +\[rmail-previous-undeleted-message]    Move to Previous non-deleted message.
  11640. +\[rmail-next-message]    Move to Next message whether deleted or not.
  11641. +\[rmail-previous-message]    Move to Previous message whether deleted or not.
  11642. +\[rmail-first-message]    Move to the first message in Rmail file.
  11643. +\[rmail-last-message]    Move to the last message in Rmail file.
  11644. +\[rmail-show-message]    Jump to message specified by numeric position in file.
  11645. +\[rmail-search]    Search for string and show message it is found in.
  11646. +\[rmail-delete-forward]    Delete this message, move to next nondeleted.
  11647. +\[rmail-delete-backward]    Delete this message, move to previous nondeleted.
  11648. +\[rmail-undelete-previous-message]    Undelete message.  Tries current message, then earlier messages
  11649. +    till a deleted message is found.
  11650. +\[rmail-edit-current-message]    Edit the current message.  \[rmail-cease-edit] to return to Rmail.
  11651. +\[rmail-expunge]    Expunge deleted messages.
  11652. +\[rmail-expunge-and-save]    Expunge and save the file.
  11653. +\[rmail-quit]       Quit Rmail: expunge, save, then switch to another buffer.
  11654. +\[save-buffer] Save without expunging.
  11655. +\[rmail-get-new-mail]    Move new mail from system spool directory into this file.
  11656. +\[rmail-mail]    Mail a message (same as \[mail-other-window]).
  11657. +\[rmail-continue]    Continue composing outgoing message started before.
  11658. +\[rmail-reply]    Reply to this message.  Like \[rmail-mail] but initializes some fields.
  11659. +\[rmail-retry-failure]    Send this message again.  Used on a mailer failure message.
  11660. +\[rmail-forward]    Forward this message to another user.
  11661. +\[rmail-output-to-rmail-file]       Output this message to an Rmail file (append it).
  11662. +\[rmail-output]    Output this message to a Unix-format mail file (append it).
  11663. +\[rmail-input]    Input Rmail file.  Run Rmail on that file.
  11664. +\[rmail-add-label]    Add label to message.  It will be displayed in the mode line.
  11665. +\[rmail-kill-label]    Kill label.  Remove a label from current message.
  11666. +\[rmail-next-labeled-message]   Move to Next message with specified label
  11667. +          (label defaults to last one specified).
  11668. +          Standard labels: filed, unseen, answered, forwarded, deleted.
  11669. +          Any other label is present only if you add it with \[rmail-add-label].
  11670. +\[rmail-previous-labeled-message]   Move to Previous message with specified label
  11671. +\[rmail-summary]    Show headers buffer, with a one line summary of each message.
  11672. +\[rmail-summary-by-labels]    Summarize only messages with particular label(s).
  11673. +\[rmail-summary-by-recipients]   Summarize only messages with particular recipient(s).
  11674. +\[rmail-summary-by-regexp]   Summarize only messages with particular regexp(s).
  11675. +\[rmail-summary-by-topic]   Summarize only messages with subject line regexp(s).
  11676. +\[rmail-toggle-header]    Toggle display of complete header.Frmail-input
  11677. +Run Rmail on file FILENAME.Frot13-other-window
  11678. +Display current buffer in rot 13 in another window.
  11679. +To terminate the rot13 display, delete that window.Ftoggle-rot13-mode
  11680. +Toggle the use of rot 13 encoding for the current window.Vresize-minibuffer-mode
  11681. +*If non-`nil', resize the minibuffer so its entire contents are visible.Vresize-minibuffer-window-max-height
  11682. +*Maximum size the minibuffer window is allowed to become.
  11683. +If less than 1 or not a number, the limit is the height of the frame in
  11684. +which the active minibuffer window resides.Vresize-minibuffer-window-exactly
  11685. +*Allow making minibuffer exactly the size to display all its contents.
  11686. +If `nil', the minibuffer window can temporarily increase in size but
  11687. +never get smaller while it is active.  Any other value allows exact
  11688. +resizing.Vresize-minibuffer-frame
  11689. +*Allow changing the frame height of minibuffer frames.
  11690. +If non-`nil' and the active minibuffer is the sole window in its frame,
  11691. +allow changing the frame height.Vresize-minibuffer-frame-max-height
  11692. +*Maximum size the minibuffer frame is allowed to become.
  11693. +If less than 1 or not a number, there is no limit.Vresize-minibuffer-frame-exactly
  11694. +*Allow making minibuffer frame exactly the size to display all its contents.
  11695. +If `nil', the minibuffer frame can temporarily increase in size but
  11696. +never get smaller while it is active.  Any other value allows exact
  11697. +resizing.Fresize-minibuffer-mode
  11698. +Enable or disable resize-minibuffer mode.
  11699. +A negative prefix argument disables this mode.  A positive argument or
  11700. +argument of 0 enables it.
  11701. +
  11702. +When this minor mode is enabled, the minibuffer is dynamically resized to
  11703. +contain the entire region of text put in it as you type.
  11704. +
  11705. +The variable `resize-minibuffer-mode' is set to t or nil depending on
  11706. +whether this mode is active or not.
  11707. +
  11708. +The maximum height to which the minibuffer can grow is controlled by the
  11709. +variable `resize-minibuffer-window-max-height'.
  11710. +
  11711. +The variable `resize-minibuffer-window-exactly' determines whether the
  11712. +minibuffer window should ever be shrunk to make it no larger than needed to
  11713. +display its contents.
  11714. +
  11715. +When using a window system, it is possible for a minibuffer to be the sole
  11716. +window in a frame.  Since that window is already its maximum size, the only
  11717. +way to make more text visible at once is to increase the size of the frame.
  11718. +The variable `resize-minibuffer-frame' controls whether this should be
  11719. +done.  The variables `resize-minibuffer-frame-max-height' and
  11720. +`resize-minibuffer-frame-exactly' are analogous to their window
  11721. +counterparts.Fscheme-mode
  11722. +Major mode for editing Scheme code.
  11723. +Editing commands are similar to those of lisp-mode.
  11724. +
  11725. +In addition, if an inferior Scheme process is running, some additional
  11726. +commands will be defined, for evaluating expressions and controlling
  11727. +the interpreter, and the state of the process will be displayed in the
  11728. +modeline of all Scheme buffers.  The names of commands that interact
  11729. +with the Scheme process start with "xscheme-".  For more information
  11730. +see the documentation for xscheme-interaction-mode.
  11731. +
  11732. +Commands:
  11733. +Delete converts tabs to spaces as it moves back.
  11734. +Blank lines separate paragraphs.  Semicolons start comments.
  11735. +\{scheme-mode-map}
  11736. +Entry to this mode calls the value of scheme-mode-hook
  11737. +if that value is non-nil.Fscribe-mode
  11738. +Major mode for editing files of Scribe (a text formatter) source.
  11739. +Scribe-mode is similar text-mode, with a few extra commands added.
  11740. +\{scribe-mode-map}
  11741. +
  11742. +Interesting variables:
  11743. +
  11744. +scribe-fancy-paragraphs
  11745. +  Non-nil makes Scribe mode use a different style of paragraph separation.
  11746. +
  11747. +scribe-electric-quote
  11748. +  Non-nil makes insert of double quote use `` or '' depending on context.
  11749. +
  11750. +scribe-electric-parenthesis
  11751. +  Non-nil makes an open-parenthesis char (one of `([<{')
  11752. +  automatically insert its close if typed after an @Command form.Vmail-self-blind
  11753. +Non-nil means insert BCC to self in messages to be sent.
  11754. +This is done when the message is initialized,
  11755. +so you can remove or alter the BCC field to override the default.Vmail-interactive
  11756. +Non-nil means when sending a message wait for and display errors.
  11757. +nil means let mailer mail back a message to report errors.Vmail-yank-ignored-headers
  11758. +Delete these headers from old message when it's inserted in a reply.Vsend-mail-function
  11759. +Function to call to send the current buffer as mail.
  11760. +The headers are be delimited by a line which is `mail-header-separator'.Vmail-header-separator
  11761. +*Line used to separate headers from text in messages being composed.Vmail-archive-file-name
  11762. +*Name of file to write all outgoing messages in, or nil for none.
  11763. +Do not use an rmail file here!  Instead, use its inbox file.Vmail-default-reply-to
  11764. +*Address to insert as default Reply-to field of outgoing messages.Vmail-alias-file
  11765. +*If non-nil, the name of a file to use instead of `/usr/lib/aliases'.
  11766. +This file defines aliases to be expanded by the mailer; this is a different
  11767. +feature from that of defining aliases in `.mailrc' to be expanded in Emacs.
  11768. +This variable has no effect unless your system uses sendmail as its mailer.Vmail-signature
  11769. +*Text inserted at end of mail buffer when a message is initialized.
  11770. +If t, it means to insert the contents of the file `~/.signature'.Fmail-mode
  11771. +Major mode for editing mail to be sent.
  11772. +Like Text Mode but with these additional commands:
  11773. +C-c C-s  mail-send (send the message)    C-c C-c  mail-send-and-exit
  11774. +C-c C-f  move to a header field (and create it if there isn't):
  11775. +     C-c C-f C-t  move to To:    C-c C-f C-s  move to Subj:
  11776. +     C-c C-f C-b  move to BCC:    C-c C-f C-c  move to CC:
  11777. +     C-c C-f C-f  move to FCC:
  11778. +C-c C-t  move to message text.
  11779. +C-c C-y  mail-yank-original (insert current message, in Rmail).
  11780. +C-c C-q  mail-fill-yanked-message (fill what was yanked).
  11781. +C-c C-v  mail-sent-via (add a sent-via field for each To or CC).Fmail
  11782. +Edit a message to be sent.  Prefix arg means resume editing (don't erase).
  11783. +When this function returns, the buffer `*mail*' is selected.
  11784. +The value is t if the message was newly initialized; otherwise, nil.
  11785. +
  11786. +By default, the signature file `~/.signature' is inserted at the end;
  11787. +see the variable `mail-signature'.
  11788. +
  11789. +\<mail-mode-map>
  11790. +While editing message, type \[mail-send-and-exit] to send the message and exit.
  11791. +
  11792. +Various special commands starting with C-c are available in sendmail mode
  11793. +to move to message header fields:
  11794. +\{mail-mode-map}
  11795. +
  11796. +If `mail-self-blind' is non-nil, a BCC to yourself is inserted
  11797. +when the message is initialized.
  11798. +
  11799. +If `mail-default-reply-to' is non-nil, it should be an address (a string);
  11800. +a Reply-to: field with that address is inserted.
  11801. +
  11802. +If `mail-archive-file-name' is non-nil, an FCC field with that file name
  11803. +is inserted.
  11804. +
  11805. +If `mail-setup-hook' is bound, its value is called with no arguments
  11806. +after the message is initialized.  It can add more default fields.
  11807. +
  11808. +When calling from a program, the second through fifth arguments
  11809. + TO, SUBJECT, IN-REPLY-TO and CC specify if non-nil
  11810. + the initial contents of those header fields.
  11811. + These arguments should not have final newlines.
  11812. +The sixth argument REPLYBUFFER is a buffer whose contents
  11813. + should be yanked if the user types C-c C-y.
  11814. +The seventh argument ACTIONS is a list of actions to take
  11815. + if/when the message is sent.  Each action looks like (FUNCTION . ARGS);
  11816. + when the message is sent, we apply FUNCTION to ARGS.
  11817. + This is how Rmail arranges to mark messages `answered'.Fmail-other-window
  11818. +Like `mail' command, but display mail buffer in another window.Fmail-other-frame
  11819. +Like `mail' command, but display mail buffer in another frame.Fserver-start
  11820. +Allow this Emacs process to be a server for client processes.
  11821. +This starts a server communications subprocess through which
  11822. +client "editors" can send your editing commands to this Emacs job.
  11823. +To use the server, set up the program `etc/emacsclient' in the
  11824. +Emacs distribution as your standard "editor".
  11825. +
  11826. +Prefix arg means just kill any existing server communications subprocess.Fsgml-mode
  11827. +Major mode for editing SGML.
  11828. +Makes > display the matching <.  Makes / display matching /.
  11829. +Use \[sgml-validate] to validate your document with an SGML parser.Vshell-prompt-pattern
  11830. +Regexp to match prompts in the inferior shell.
  11831. +Defaults to "^[^#$%>\n]*[#$%>] *", which works pretty well.
  11832. +This variable is used to initialise `comint-prompt-regexp' in the 
  11833. +shell buffer.
  11834. +
  11835. +The pattern should probably not match more than one line.  If it does,
  11836. +shell-mode may become confused trying to distinguish prompt from input
  11837. +on lines which don't start with a prompt.
  11838. +
  11839. +This is a fine thing to set in your `.emacs' file.Fshell
  11840. +Run an inferior shell, with I/O through buffer *shell*.
  11841. +If buffer exists but shell process is not running, make new shell.
  11842. +If buffer exists and shell process is running, just switch to buffer `*shell*'.
  11843. +Program used comes from variable `explicit-shell-file-name',
  11844. + or (if that is nil) from the ESHELL environment variable,
  11845. + or else from SHELL if there is no ESHELL.
  11846. +If a file `~/.emacs_SHELLNAME' exists, it is given as initial input
  11847. + (Note that this may lose due to a timing error if the shell
  11848. +  discards input when it starts up.)
  11849. +The buffer is put in Shell mode, giving commands for sending input
  11850. +and controlling the subjobs of the shell.  See `shell-mode'.
  11851. +See also the variable `shell-prompt-pattern'.
  11852. +
  11853. +The shell file name (sans directories) is used to make a symbol name
  11854. +such as `explicit-csh-args'.  If that symbol is a variable,
  11855. +its value is used as a list of arguments when invoking the shell.
  11856. +Otherwise, one argument `-i' is passed to the shell.
  11857. +
  11858. +(Type \[describe-mode] in the shell buffer for a list of commands.)Fdefine-skeleton
  11859. +Define a user-configurable COMMAND that enters a statement skeleton.
  11860. +DOCUMENTATION is that of the command, while the variable of the same name,
  11861. +which contains the definition, has a documentation to that effect.
  11862. +PROMPT and ELEMENT ... are as defined under `skeleton-insert'.Fskeleton-insert
  11863. +Insert the complex statement skeleton DEFINITION describes very concisely.
  11864. +If optional NO-NEWLINE is nil the skeleton will end on a line of its own.
  11865. +
  11866. +DEFINITION is made up as (PROMPT ELEMENT ...).  PROMPT may be nil if not
  11867. +needed, a prompt-string or an expression for complex read functions.
  11868. +
  11869. +If ELEMENT is a string or a character it gets inserted (see also
  11870. +`skeleton-transformation').  Other possibilities are:
  11871. +
  11872. +    \n    go to next line and align cursor
  11873. +    >    indent according to major mode
  11874. +    <    undent tab-width spaces but not beyond beginning of line
  11875. +    _    cursor after termination
  11876. +    &    skip next ELEMENT if previous didn't move point
  11877. +    |    skip next ELEMENT if previous moved point
  11878. +    -num    delete num preceding characters
  11879. +    resume:    skipped, continue here if quit is signaled
  11880. +    nil    skipped
  11881. +
  11882. +ELEMENT may itself be DEFINITION with a PROMPT.  The user is prompted
  11883. +repeatedly for different inputs.  The DEFINITION is processed as often
  11884. +as the user enters a non-empty string.  \[keyboard-quit] terminates
  11885. +skeleton insertion, but continues after `resume:' and positions at `_'
  11886. +if any.  If PROMPT in such a sub-definition contains a ".. %s .." it
  11887. +is replaced by `skeleton-subprompt'.
  11888. +
  11889. +Other lisp-expressions are evaluated and the value treated as above.
  11890. +The following local variables are available:
  11891. +
  11892. +    str    first time: read a string prompting with PROMPT and insert it
  11893. +                if PROMPT is not a string it is evaluated instead
  11894. +        then: insert previously read string once more
  11895. +    quit    non-nil when resume: section is entered by keyboard quit
  11896. +    v1, v2    local variables for memorising anything you wantFpair-insert-maybe
  11897. +Insert the character you type ARG times.
  11898. +
  11899. +With no ARG, if `pair' is non-nil, and if
  11900. +`pair-on-word' is non-nil or we are not before or inside a
  11901. +word, and if `pair-filter' returns nil, pairing is performed.
  11902. +
  11903. +If a match is found in `pair-alist', that is inserted, else
  11904. +the defaults are used.  These are (), [], {}, <> and `' for the
  11905. +symmetrical ones, and the same character twice for the others.Fdefine-skeleton
  11906. +Define a user-configurable COMMAND that enters a statement skeleton.
  11907. +DOCUMENTATION is that of the command, while the variable of the same name,
  11908. +which contains the definition, has a documentation to that effect.
  11909. +PROMPT and ELEMENT ... are as defined under `skeleton-insert'.Fskeleton-insert
  11910. +Insert the complex statement skeleton DEFINITION describes very concisely.
  11911. +If optional NO-NEWLINE is nil the skeleton will end on a line of its own.
  11912. +
  11913. +DEFINITION is made up as (PROMPT ELEMENT ...).  PROMPT may be nil if not
  11914. +needed, a prompt-string or an expression for complex read functions.
  11915. +
  11916. +If ELEMENT is a string or a character it gets inserted (see also
  11917. +`skeleton-transformation').  Other possibilities are:
  11918. +
  11919. +    \n    go to next line and align cursor
  11920. +    >    indent according to major mode
  11921. +    <    undent tab-width spaces but not beyond beginning of line
  11922. +    _    cursor after termination
  11923. +    &    skip next ELEMENT if previous didn't move point
  11924. +    |    skip next ELEMENT if previous moved point
  11925. +    -num    delete num preceding characters
  11926. +    resume:    skipped, continue here if quit is signaled
  11927. +    nil    skipped
  11928. +
  11929. +ELEMENT may itself be DEFINITION with a PROMPT.  The user is prompted
  11930. +repeatedly for different inputs.  The DEFINITION is processed as often
  11931. +as the user enters a non-empty string.  \[keyboard-quit] terminates
  11932. +skeleton insertion, but continues after `resume:' and positions at `_'
  11933. +if any.  If PROMPT in such a sub-definition contains a ".. %s .." it
  11934. +is replaced by `skeleton-subprompt'.
  11935. +
  11936. +Other lisp-expressions are evaluated and the value treated as above.
  11937. +The following local variables are available:
  11938. +
  11939. +    str    first time: read a string prompting with PROMPT and insert it
  11940. +                if PROMPT is not a string it is evaluated instead
  11941. +        then: insert previously read string once more
  11942. +    quit    non-nil when resume: section is entered by keyboard quit
  11943. +    v1, v2    local variables for memorising anything you wantFpair-insert-maybe
  11944. +Insert the character you type ARG times.
  11945. +
  11946. +With no ARG, if `pair' is non-nil, and if
  11947. +`pair-on-word' is non-nil or we are not before or inside a
  11948. +word, and if `pair-filter' returns nil, pairing is performed.
  11949. +
  11950. +If a match is found in `pair-alist', that is inserted, else
  11951. +the defaults are used.  These are (), [], {}, <> and `' for the
  11952. +symmetrical ones, and the same character twice for the others.Vcalendar-time-display-form
  11953. +*The pseudo-pattern that governs the way a time of day is formatted.
  11954. +
  11955. +A pseudo-pattern is a list of expressions that can involve the keywords
  11956. +`12-hours', `24-hours', and `minutes',  all numbers in string form,
  11957. +and `am-pm' and `time-zone',  both alphabetic strings.
  11958. +
  11959. +For example, the form
  11960. +
  11961. +  '(24-hours ":" minutes
  11962. +    (if time-zone " (") time-zone (if time-zone ")"))
  11963. +
  11964. +would give military-style times like `21:07 (UTC)'.Vcalendar-latitude
  11965. +*Latitude of `calendar-location-name' in degrees, + north, - south.
  11966. +For example, 40.7 for New York City.
  11967. +It may not be a good idea to set this in advance for your site;
  11968. +if there may be users running Emacs at your site
  11969. +who are physically located elsewhere, they would get the wrong
  11970. +value and might not know how to override it.Vcalendar-longitude
  11971. +*Longitude of `calendar-location-name' in degrees, + east, - west.
  11972. +For example, -74.0 for New York City.
  11973. +It may not be a good idea to set this in advance for your site;
  11974. +if there may be users running Emacs at your site
  11975. +who are physically located elsewhere, they would get the wrong
  11976. +value and might not know how to override it.Vcalendar-location-name
  11977. +*Expression evaluating to name of `calendar-longitude', calendar-latitude'.
  11978. +Default value is just the latitude, longitude pair.Fsunrise-sunset
  11979. +Local time of sunrise and sunset for today.  Accurate to +/- 2 minutes.
  11980. +If called with an optional prefix argument, prompt for date.
  11981. +
  11982. +If called with an optional double prefix argument, prompt for longitude,
  11983. +latitude, time zone, and date, and always use standard time.
  11984. +
  11985. +This function is suitable for execution in a .emacs file.Fsolar-equinoxes-solstices
  11986. +Date and time of equinoxes and solstices, if visible in the calendar window.
  11987. +Requires floating point.Fsort-subr
  11988. +General text sorting routine to divide buffer into records and sort them.
  11989. +Arguments are REVERSE NEXTRECFUN ENDRECFUN &optional STARTKEYFUN ENDKEYFUN.
  11990. +
  11991. +We divide the accessible portion of the buffer into disjoint pieces
  11992. +called sort records.  A portion of each sort record (perhaps all of
  11993. +it) is designated as the sort key.  The records are rearranged in the
  11994. +buffer in order by their sort keys.  The records may or may not be
  11995. +contiguous.
  11996. +
  11997. +Usually the records are rearranged in order of ascending sort key.
  11998. +If REVERSE is non-nil, they are rearranged in order of descending sort key.
  11999. +
  12000. +The next four arguments are functions to be called to move point
  12001. +across a sort record.  They will be called many times from within sort-subr.
  12002. +
  12003. +NEXTRECFUN is called with point at the end of the previous record.
  12004. +It moves point to the start of the next record.
  12005. +It should move point to the end of the buffer if there are no more records.
  12006. +The first record is assumed to start at the position of point when sort-subr
  12007. +is called.
  12008. +
  12009. +ENDRECFUN is called with point within the record.
  12010. +It should move point to the end of the record.
  12011. +
  12012. +STARTKEYFUN moves from the start of the record to the start of the key.
  12013. +It may return either a non-nil value to be used as the key, or
  12014. +else the key is the substring between the values of point after
  12015. +STARTKEYFUN and ENDKEYFUN are called.  If STARTKEYFUN is nil, the key
  12016. +starts at the beginning of the record.
  12017. +
  12018. +ENDKEYFUN moves from the start of the sort key to the end of the sort key.
  12019. +ENDKEYFUN may be nil if STARTKEYFUN returns a value or if it would be the
  12020. +same as ENDRECFUN.Fsort-lines
  12021. +Sort lines in region alphabetically; argument means descending order.
  12022. +Called from a program, there are three arguments:
  12023. +REVERSE (non-nil means reverse order), BEG and END (region to sort).Fsort-paragraphs
  12024. +Sort paragraphs in region alphabetically; argument means descending order.
  12025. +Called from a program, there are three arguments:
  12026. +REVERSE (non-nil means reverse order), BEG and END (region to sort).Fsort-pages
  12027. +Sort pages in region alphabetically; argument means descending order.
  12028. +Called from a program, there are three arguments:
  12029. +REVERSE (non-nil means reverse order), BEG and END (region to sort).Fsort-numeric-fields
  12030. +Sort lines in region numerically by the ARGth field of each line.
  12031. +Fields are separated by whitespace and numbered from 1 up.
  12032. +Specified field must contain a number in each line of the region.
  12033. +With a negative arg, sorts by the ARGth field counted from the right.
  12034. +Called from a program, there are three arguments:
  12035. +FIELD, BEG and END.  BEG and END specify region to sort.Fsort-fields
  12036. +Sort lines in region lexicographically by the ARGth field of each line.
  12037. +Fields are separated by whitespace and numbered from 1 up.
  12038. +With a negative arg, sorts by the ARGth field counted from the right.
  12039. +Called from a program, there are three arguments:
  12040. +FIELD, BEG and END.  BEG and END specify region to sort.Fsort-regexp-fields
  12041. +Sort the region lexicographically as specified by RECORD-REGEXP and KEY.
  12042. +RECORD-REGEXP specifies the textual units which should be sorted.
  12043. +  For example, to sort lines RECORD-REGEXP would be "^.*$"
  12044. +KEY specifies the part of each record (ie each match for RECORD-REGEXP)
  12045. +  is to be used for sorting.
  12046. +  If it is "\digit" then the digit'th "\(...\)" match field from
  12047. +  RECORD-REGEXP is used.
  12048. +  If it is "\&" then the whole record is used.
  12049. +  Otherwise, it is a regular-expression for which to search within the record.
  12050. +If a match for KEY is not found within a record then that record is ignored.
  12051. +
  12052. +With a negative prefix arg sorts in reverse order.
  12053. +
  12054. +For example: to sort lines in the region by the first word on each line
  12055. + starting with the letter "f",
  12056. + RECORD-REGEXP would be "^.*$" and KEY would be "\=\<f\w*\>"Fsort-columns
  12057. +Sort lines in region alphabetically by a certain range of columns.
  12058. +For the purpose of this command, the region includes
  12059. +the entire line that point is in and the entire line the mark is in.
  12060. +The column positions of point and mark bound the range of columns to sort on.
  12061. +A prefix argument means sort into reverse order.
  12062. +
  12063. +Note that `sort-columns' rejects text that contains tabs,
  12064. +because tabs could be split across the specified columns
  12065. +and it doesn't know how to handle that.  Also, when possible,
  12066. +it uses the `sort' utility program, which doesn't understand tabs.
  12067. +Use \[untabify] to convert tabs to spaces before sorting.Freverse-region
  12068. +Reverse the order of lines in a region.
  12069. +From a program takes two point or marker arguments, BEG and END.Fspell-buffer
  12070. +Check spelling of every word in the buffer.
  12071. +For each incorrect word, you are asked for the correct spelling
  12072. +and then put into a query-replace to fix some or all occurrences.
  12073. +If you do not want to change a word, just give the same word
  12074. +as its "correct" spelling; then the query replace is skipped.Fspell-word
  12075. +Check spelling of word at or before point.
  12076. +If it is not correct, ask user for the correct spelling
  12077. +and `query-replace' the entire buffer to substitute it.Fspell-region
  12078. +Like `spell-buffer' but applies only to region.
  12079. +Used in a program, applies from START to END.
  12080. +DESCRIPTION is an optional string naming the unit being checked:
  12081. +for example, "word".Fspell-string
  12082. +Check spelling of string supplied as argument.Fspook
  12083. +Adds that special touch of class to your outgoing mail.Fsnarf-spooks
  12084. +Return a vector containing the lines from `spook-phrases-file'.Fsc-cite-original
  12085. +Workhorse citing function which performs the initial citation.
  12086. +This is callable from the various mail and news readers' reply
  12087. +function according to the agreed upon standard.  See `\[sc-describe]'
  12088. +for more details.  `sc-cite-original' does not do any yanking of the
  12089. +original message but it does require a few things:
  12090. +
  12091. +     1) The reply buffer is the current buffer.
  12092. +
  12093. +     2) The original message has been yanked and inserted into the
  12094. +        reply buffer.
  12095. +
  12096. +     3) Verbose mail headers from the original message have been
  12097. +        inserted into the reply buffer directly before the text of the
  12098. +        original message.
  12099. +
  12100. +     4) Point is at the beginning of the verbose headers.
  12101. +
  12102. +     5) Mark is at the end of the body of text to be cited.
  12103. +
  12104. +For Emacs 19's, the region need not be active (and typically isn't
  12105. +when this function is called.  Also, the hook `sc-pre-hook' is run
  12106. +before, and `sc-post-hook' is run after the guts of this function.Funtabify
  12107. +Convert all tabs in region to multiple spaces, preserving columns.
  12108. +Called non-interactively, the region is specified by arguments
  12109. +START and END, rather than by the position of point and mark.
  12110. +The variable `tab-width' controls the spacing of tab stops.Ftabify
  12111. +Convert multiple spaces in region to tabs when possible.
  12112. +A group of spaces is partially replaced by tabs
  12113. +when this can be done without changing the column they end at.
  12114. +Called non-interactively, the region is specified by arguments
  12115. +START and END, rather than by the position of point and mark.
  12116. +The variable `tab-width' controls the spacing of tab stops.Ftar-mode
  12117. +Major mode for viewing a tar file as a dired-like listing of its contents.
  12118. +You can move around using the usual cursor motion commands. 
  12119. +Letters no longer insert themselves.
  12120. +Type `e' to pull a file out of the tar file and into its own buffer;
  12121. +or click mouse-2 on the file's line in the Tar mode buffer.
  12122. +Type `c' to copy an entry from the tar file into another file on disk.
  12123. +
  12124. +If you edit a sub-file of this archive (as with the `e' command) and 
  12125. +save it with Control-x Control-s, the contents of that buffer will be 
  12126. +saved back into the tar-file buffer; in this way you can edit a file 
  12127. +inside of a tar archive without extracting it and re-archiving it.
  12128. +
  12129. +See also: variables `tar-update-datestamp' and `tar-anal-blocksize'.
  12130. +\{tar-mode-map}Ftcl-mode
  12131. +Major mode for editing tcl scripts.
  12132. +The following keys are bound:
  12133. +\{tcl-mode-map}
  12134. +Ftelnet
  12135. +Open a network login connection to host named HOST (a string).
  12136. +Communication with HOST is recorded in a buffer *HOST-telnet*.
  12137. +Normally input is edited in Emacs and sent a line at a time.Frsh
  12138. +Open a network login connection to host named HOST (a string).
  12139. +Communication with HOST is recorded in a buffer *HOST-rsh*.
  12140. +Normally input is edited in Emacs and sent a line at a time.Fterminal-emulator
  12141. +Under a display-terminal emulator in BUFFER, run PROGRAM on arguments ARGS.
  12142. +ARGS is a list of argument-strings.  Remaining arguments are WIDTH and HEIGHT.
  12143. +BUFFER's contents are made an image of the display generated by that program,
  12144. +and any input typed when BUFFER is the current Emacs buffer is sent to that
  12145. +program an keyboard input.
  12146. +
  12147. +Interactively, BUFFER defaults to "*terminal*" and PROGRAM and ARGS
  12148. +are parsed from an input-string using your usual shell.
  12149. +WIDTH and HEIGHT are determined from the size of the current window
  12150. +-- WIDTH will be one less than the window's width, HEIGHT will be its height.
  12151. +
  12152. +To switch buffers and leave the emulator, or to give commands
  12153. +to the emulator itself (as opposed to the program running under it),
  12154. +type Control-^.  The following character is an emulator command.
  12155. +Type Control-^ twice to send it to the subprogram.
  12156. +This escape character may be changed using the variable `terminal-escape-char'.
  12157. +
  12158. +`Meta' characters may not currently be sent through the terminal emulator.
  12159. +
  12160. +Here is a list of some of the variables which control the behaviour
  12161. +of the emulator -- see their documentation for more information:
  12162. +terminal-escape-char, terminal-scrolling, terminal-more-processing,
  12163. +terminal-redisplay-interval.
  12164. +
  12165. +This function calls the value of terminal-mode-hook if that exists
  12166. +and is non-nil after the terminal buffer has been set up and the
  12167. +subprocess started.
  12168. +
  12169. +Presently with `termcap' only; if somebody sends us code to make this
  12170. +work with `terminfo' we will try to use it.Vtex-shell-file-name
  12171. +*If non-nil, the shell file name to run in the subshell used to run TeX.Vtex-directory
  12172. +*Directory in which temporary files are left.
  12173. +You can make this `/tmp' if your TEXINPUTS has no relative directories in it
  12174. +and you don't try to apply \[tex-region] or \[tex-buffer] when there are
  12175. +`\input' commands with relative directories.Vtex-offer-save
  12176. +*If non-nil, ask about saving modified buffers before \[tex-file] is run.Vtex-run-command
  12177. +*Command used to run TeX subjob.
  12178. +If this string contains an asterisk (`*'), that is replaced by the file name;
  12179. +otherwise, the file name, preceded by blank, is added at the end.Vlatex-run-command
  12180. +*Command used to run LaTeX subjob.
  12181. +If this string contains an asterisk (`*'), that is replaced by the file name;
  12182. +otherwise, the file name, preceded by blank, is added at the end.Vlatex-block-names
  12183. +*User defined LaTeX block names.
  12184. +Combined with `standard-latex-block-names' for minibuffer completion.Vslitex-run-command
  12185. +*Command used to run SliTeX subjob.
  12186. +If this string contains an asterisk (`*'), that is replaced by the file name;
  12187. +otherwise, the file name, preceded by blank, is added at the end.Vtex-bibtex-command
  12188. +*Command used by `tex-bibtex-file' to gather bibliographic data.
  12189. +If this string contains an asterisk (`*'), that is replaced by the file name;
  12190. +otherwise, the file name, preceded by blank, is added at the end.Vtex-dvi-print-command
  12191. +*Command used by \[tex-print] to print a .dvi file.
  12192. +If this string contains an asterisk (`*'), that is replaced by the file name;
  12193. +otherwise, the file name, preceded by blank, is added at the end.Vtex-alt-dvi-print-command
  12194. +*Command used by \[tex-print] with a prefix arg to print a .dvi file.
  12195. +If this string contains an asterisk (`*'), that is replaced by the file name;
  12196. +otherwise, the file name, preceded by blank, is added at the end.
  12197. +
  12198. +If two printers are not enough of a choice, you can set the variable
  12199. +`tex-alt-dvi-print-command' to an expression that asks what you want;
  12200. +for example,
  12201. +
  12202. +    (setq tex-alt-dvi-print-command
  12203. +         '(format "lpr -P%s" (read-string "Use printer: ")))
  12204. +
  12205. +would tell \[tex-print] with a prefix argument to ask you which printer to
  12206. +use.Vtex-dvi-view-command
  12207. +*Command used by \[tex-view] to display a `.dvi' file.
  12208. +If this string contains an asterisk (`*'), that is replaced by the file name;
  12209. +otherwise, the file name, preceded by blank, is added at the end.
  12210. +
  12211. +This can be set conditionally so that the previewer used is suitable for the
  12212. +window system being used.  For example,
  12213. +
  12214. +    (setq tex-dvi-view-command
  12215. +          (if (eq window-system 'x) "xdvi" "dvi2tty * | cat -s"))
  12216. +
  12217. +would tell \[tex-view] to use xdvi under X windows and to use dvi2tty
  12218. +otherwise.Vtex-show-queue-command
  12219. +*Command used by \[tex-show-print-queue] to show the print queue.
  12220. +Should show the queue(s) that \[tex-print] puts jobs on.Vtex-default-mode
  12221. +*Mode to enter for a new file that might be either TeX or LaTeX.
  12222. +This variable is used when it can't be determined whether the file
  12223. +is plain TeX or LaTeX or what because the file contains no commands.
  12224. +Normally set to either `plain-tex-mode' or `latex-mode'.Vtex-open-quote
  12225. +*String inserted by typing \[tex-insert-quote] to open a quotation.Vtex-close-quote
  12226. +*String inserted by typing \[tex-insert-quote] to close a quotation.Ftex-mode
  12227. +Major mode for editing files of input for TeX, LaTeX, or SliTeX.
  12228. +Tries to determine (by looking at the beginning of the file) whether
  12229. +this file is for plain TeX, LaTeX, or SliTeX and calls `plain-tex-mode',
  12230. +`latex-mode', or `slitex-mode', respectively.  If it cannot be determined,
  12231. +such as if there are no commands in the file, the value of `tex-default-mode'
  12232. +says which mode to use.Fplain-tex-mode
  12233. +Major mode for editing files of input for plain TeX.
  12234. +Makes $ and } display the characters they match.
  12235. +Makes " insert `` when it seems to be the beginning of a quotation,
  12236. +and '' when it appears to be the end; it inserts " only after a \.
  12237. +
  12238. +Use \[tex-region] to run TeX on the current region, plus a "header"
  12239. +copied from the top of the file (containing macro definitions, etc.),
  12240. +running TeX under a special subshell.  \[tex-buffer] does the whole buffer.
  12241. +\[tex-file] saves the buffer and then processes the file.
  12242. +\[tex-print] prints the .dvi file made by any of these.
  12243. +\[tex-view] previews the .dvi file made by any of these.
  12244. +\[tex-bibtex-file] runs bibtex on the file of the current buffer.
  12245. +
  12246. +Use \[validate-tex-buffer] to check buffer for paragraphs containing
  12247. +mismatched $'s or braces.
  12248. +
  12249. +Special commands:
  12250. +\{tex-mode-map}
  12251. +
  12252. +Mode variables:
  12253. +tex-run-command
  12254. +    Command string used by \[tex-region] or \[tex-buffer].
  12255. +tex-directory
  12256. +    Directory in which to create temporary files for TeX jobs
  12257. +    run by \[tex-region] or \[tex-buffer].
  12258. +tex-dvi-print-command
  12259. +    Command string used by \[tex-print] to print a .dvi file.
  12260. +tex-alt-dvi-print-command
  12261. +    Alternative command string used by \[tex-print] (when given a prefix
  12262. +    argument) to print a .dvi file.
  12263. +tex-dvi-view-command
  12264. +    Command string used by \[tex-view] to preview a .dvi file.
  12265. +tex-show-queue-command
  12266. +    Command string used by \[tex-show-print-queue] to show the print
  12267. +    queue that \[tex-print] put your job on.
  12268. +
  12269. +Entering Plain-tex mode runs the hook `text-mode-hook', then the hook
  12270. +`tex-mode-hook', and finally the hook `plain-tex-mode-hook'.  When the
  12271. +special subshell is initiated, the hook `tex-shell-hook' is run.Flatex-mode
  12272. +Major mode for editing files of input for LaTeX.
  12273. +Makes $ and } display the characters they match.
  12274. +Makes " insert `` when it seems to be the beginning of a quotation,
  12275. +and '' when it appears to be the end; it inserts " only after a \.
  12276. +
  12277. +Use \[tex-region] to run LaTeX on the current region, plus the preamble
  12278. +copied from the top of the file (containing \documentstyle, etc.),
  12279. +running LaTeX under a special subshell.  \[tex-buffer] does the whole buffer.
  12280. +\[tex-file] saves the buffer and then processes the file.
  12281. +\[tex-print] prints the .dvi file made by any of these.
  12282. +\[tex-view] previews the .dvi file made by any of these.
  12283. +\[tex-bibtex-file] runs bibtex on the file of the current buffer.
  12284. +
  12285. +Use \[validate-tex-buffer] to check buffer for paragraphs containing
  12286. +mismatched $'s or braces.
  12287. +
  12288. +Special commands:
  12289. +\{tex-mode-map}
  12290. +
  12291. +Mode variables:
  12292. +latex-run-command
  12293. +    Command string used by \[tex-region] or \[tex-buffer].
  12294. +tex-directory
  12295. +    Directory in which to create temporary files for LaTeX jobs
  12296. +    run by \[tex-region] or \[tex-buffer].
  12297. +tex-dvi-print-command
  12298. +    Command string used by \[tex-print] to print a .dvi file.
  12299. +tex-alt-dvi-print-command
  12300. +    Alternative command string used by \[tex-print] (when given a prefix
  12301. +    argument) to print a .dvi file.
  12302. +tex-dvi-view-command
  12303. +    Command string used by \[tex-view] to preview a .dvi file.
  12304. +tex-show-queue-command
  12305. +    Command string used by \[tex-show-print-queue] to show the print
  12306. +    queue that \[tex-print] put your job on.
  12307. +
  12308. +Entering Latex mode runs the hook `text-mode-hook', then 
  12309. +`tex-mode-hook', and finally `latex-mode-hook'.  When the special
  12310. +subshell is initiated, `tex-shell-hook' is run.Fslitex-mode
  12311. +Major mode for editing files of input for SliTeX.
  12312. +Makes $ and } display the characters they match.
  12313. +Makes " insert `` when it seems to be the beginning of a quotation,
  12314. +and '' when it appears to be the end; it inserts " only after a \.
  12315. +
  12316. +Use \[tex-region] to run SliTeX on the current region, plus the preamble
  12317. +copied from the top of the file (containing \documentstyle, etc.),
  12318. +running SliTeX under a special subshell.  \[tex-buffer] does the whole buffer.
  12319. +\[tex-file] saves the buffer and then processes the file.
  12320. +\[tex-print] prints the .dvi file made by any of these.
  12321. +\[tex-view] previews the .dvi file made by any of these.
  12322. +\[tex-bibtex-file] runs bibtex on the file of the current buffer.
  12323. +
  12324. +Use \[validate-tex-buffer] to check buffer for paragraphs containing
  12325. +mismatched $'s or braces.
  12326. +
  12327. +Special commands:
  12328. +\{tex-mode-map}
  12329. +
  12330. +Mode variables:
  12331. +slitex-run-command
  12332. +    Command string used by \[tex-region] or \[tex-buffer].
  12333. +tex-directory
  12334. +    Directory in which to create temporary files for SliTeX jobs
  12335. +    run by \[tex-region] or \[tex-buffer].
  12336. +tex-dvi-print-command
  12337. +    Command string used by \[tex-print] to print a .dvi file.
  12338. +tex-alt-dvi-print-command
  12339. +    Alternative command string used by \[tex-print] (when given a prefix
  12340. +    argument) to print a .dvi file.
  12341. +tex-dvi-view-command
  12342. +    Command string used by \[tex-view] to preview a .dvi file.
  12343. +tex-show-queue-command
  12344. +    Command string used by \[tex-show-print-queue] to show the print
  12345. +    queue that \[tex-print] put your job on.
  12346. +
  12347. +Entering SliTeX mode runs the hook `text-mode-hook', then the hook
  12348. +`tex-mode-hook', then the hook `latex-mode-hook', and finally the hook
  12349. +`slitex-mode-hook'.  When the special subshell is initiated, the hook
  12350. +`tex-shell-hook' is run.Ftexinfo-format-buffer
  12351. +Process the current buffer as texinfo code, into an Info file.
  12352. +The Info file output is generated in a buffer visiting the Info file
  12353. +names specified in the @setfilename command.
  12354. +
  12355. +Non-nil argument (prefix, if interactive) means don't make tag table
  12356. +and don't split the file if large.  You can use Info-tagify and
  12357. +Info-split to do these manually.Ftexinfo-format-region
  12358. +Convert the current region of the Texinfo file to Info format.
  12359. +This lets you see what that part of the file will look like in Info.
  12360. +The command is bound to \[texinfo-format-region].  The text that is
  12361. +converted to Info is stored in a temporary buffer.Ftexinfo-mode
  12362. +Major mode for editing Texinfo files.
  12363. +
  12364. +  It has these extra commands:
  12365. +\{texinfo-mode-map}
  12366. +
  12367. +  These are files that are used as input for TeX to make printed manuals
  12368. +and also to be turned into Info files with \[makeinfo-buffer] or
  12369. +the `makeinfo' program.  These files must be written in a very restricted and
  12370. +modified version of TeX input format.
  12371. +
  12372. +  Editing commands are like text-mode except that the syntax table is
  12373. +set up so expression commands skip Texinfo bracket groups.  To see
  12374. +what the Info version of a region of the Texinfo file will look like,
  12375. +use \[makeinfo-region], which runs `makeinfo' on the current region.
  12376. +
  12377. +  You can show the structure of a Texinfo file with \[texinfo-show-structure].
  12378. +This command shows the structure of a Texinfo file by listing the
  12379. +lines with the @-sign commands for @chapter, @section, and the like.
  12380. +These lines are displayed in another window called the *Occur* window.
  12381. +In that window, you can position the cursor over one of the lines and
  12382. +use \[occur-mode-goto-occurrence], to jump to the corresponding spot
  12383. +in the Texinfo file.
  12384. +
  12385. +  In addition, Texinfo mode provides commands that insert various
  12386. +frequently used @-sign commands into the buffer.  You can use these
  12387. +commands to save keystrokes.  And you can insert balanced braces with
  12388. +\[texinfo-insert-braces] and later use the command \[up-list] to
  12389. +move forward past the closing brace.
  12390. +
  12391. +Also, Texinfo mode provides functions for automatically creating or
  12392. +updating menus and node pointers.  These functions
  12393. +
  12394. +  * insert the `Next', `Previous' and `Up' pointers of a node,
  12395. +  * insert or update the menu for a section, and
  12396. +  * create a master menu for a Texinfo source file.
  12397. +
  12398. +Here are the functions:
  12399. +
  12400. +    texinfo-update-node                \[texinfo-update-node]
  12401. +    texinfo-every-node-update          \[texinfo-every-node-update]
  12402. +    texinfo-sequential-node-update 
  12403. +
  12404. +    texinfo-make-menu                  \[texinfo-make-menu]
  12405. +    texinfo-all-menus-update           \[texinfo-all-menus-update]
  12406. +    texinfo-master-menu
  12407. +
  12408. +    texinfo-indent-menu-description (column &optional region-p)
  12409. +
  12410. +The `texinfo-column-for-description' variable specifies the column to
  12411. +which menu descriptions are indented. 
  12412. +
  12413. +Passed an argument (a prefix argument, if interactive), the
  12414. +`texinfo-update-node' and `texinfo-make-menu' functions do their jobs
  12415. +in the region.
  12416. +
  12417. +To use the updating commands, you must structure your Texinfo file
  12418. +hierarchically, such that each `@node' line, with the exception of the
  12419. +Top node, is accompanied by some kind of section line, such as an
  12420. +`@chapter' or `@section' line.
  12421. +
  12422. +If the file has a `top' node, it must be called `top' or `Top' and
  12423. +be the first node in the file.
  12424. +
  12425. +Entering Texinfo mode calls the value of text-mode-hook, and then the
  12426. +value of texinfo-mode-hook.Ftexinfo-update-node
  12427. +Without any prefix argument, update the node in which point is located.
  12428. +Non-nil argument (prefix, if interactive) means update the nodes in the
  12429. +marked region.
  12430. +
  12431. +The functions for creating or updating nodes and menus, and their
  12432. +keybindings, are:
  12433. +
  12434. +    texinfo-update-node (&optional region-p)    \[texinfo-update-node]
  12435. +    texinfo-every-node-update ()                \[texinfo-every-node-update]
  12436. +    texinfo-sequential-node-update (&optional region-p)
  12437. +
  12438. +    texinfo-make-menu (&optional region-p)      \[texinfo-make-menu]
  12439. +    texinfo-all-menus-update ()                 \[texinfo-all-menus-update]
  12440. +    texinfo-master-menu ()
  12441. +
  12442. +    texinfo-indent-menu-description (column &optional region-p)
  12443. +
  12444. +The `texinfo-column-for-description' variable specifies the column to
  12445. +which menu descriptions are indented. Its default value is 32.Ftexinfo-every-node-update
  12446. +Update every node in a Texinfo file.Ftexinfo-sequential-node-update
  12447. +Update one node (or many) in a Texinfo file with sequential pointers.
  12448. +
  12449. +This function causes the `Next' or `Previous' pointer to point to the
  12450. +immediately preceding or following node, even if it is at a higher or
  12451. +lower hierarchical level in the document.  Continually pressing `n' or
  12452. +`p' takes you straight through the file.
  12453. +
  12454. +Without any prefix argument, update the node in which point is located.
  12455. +Non-nil argument (prefix, if interactive) means update the nodes in the
  12456. +marked region.
  12457. +
  12458. +This command makes it awkward to navigate among sections and
  12459. +subsections; it should be used only for those documents that are meant
  12460. +to be read like a novel rather than a reference, and for which the
  12461. +Info `g*' command is inadequate.Fforward-thing
  12462. +Move forward to the end of the next THING.Fbounds-of-thing-at-point
  12463. +Determine the start and end buffer locations for the THING at point,
  12464. +where THING is an entity for which there is a either a corresponding
  12465. +forward-THING operation, or corresponding beginning-of-THING and
  12466. +end-of-THING operations, eg. 'word, 'sentence, 'defun.
  12467. +  Return a cons cell '(start . end) giving the start and end positions.Fthing-at-point
  12468. +Return the THING at point, where THING is an entity defined by
  12469. +bounds-of-thing-at-point.Vdisplay-time-day-and-date
  12470. +*Non-nil means \[display-time] should display day and date as well as time.Fdisplay-time
  12471. +Display current time, load level, and mail flag in mode line of each buffer.
  12472. +Updates automatically every minute.
  12473. +If `display-time-day-and-date' is non-nil, the current day and date
  12474. +are displayed as well.
  12475. +After each update, `display-time-hook' is run with `run-hooks'.Ftime-stamp
  12476. +Update the time stamp string in the buffer.
  12477. +If you put a time stamp template anywhere in the first 8 lines of a file,
  12478. +it can be updated every time you save the file.  See the top of
  12479. +`time-stamp.el' for a sample.  The template looks like one of the following:
  12480. +    Time-stamp: <>
  12481. +    Time-stamp: " "
  12482. +The time stamp is written between the brackets or quotes, resulting in
  12483. +    Time-stamp: <93/06/18 10:26:51 gildea>
  12484. +Only does its thing if the variable  time-stamp-active  is non-nil.
  12485. +Typically used on  write-file-hooks  for automatic time-stamping.
  12486. +The format of the time stamp is determined by the variable  time-stamp-format.
  12487. +The variables time-stamp-line-limit, time-stamp-start, and time-stamp-end
  12488. +control finding the template.Frun-at-time
  12489. +Run a function at a time, and optionally on a regular interval.
  12490. +Arguments are TIME, REPEAT, FUNCTION &rest ARGS.
  12491. +TIME, a string, can be specified absolutely or relative to now.
  12492. +TIME can also be an integer, a number of seconds.
  12493. +REPEAT, an integer number of seconds, is the interval on which to repeat
  12494. +the call to the function.  If REPEAT is nil, call it just once.
  12495. +
  12496. +Absolute times may be specified in a wide variety of formats;
  12497. +Something of the form `HOUR:MIN:SEC TIMEZONE MONTH/DAY/YEAR', where
  12498. +all fields are numbers, works; the format used by the Unix `date'
  12499. +command works too.
  12500. +
  12501. +Relative times may be specified as a series of numbers followed by units:
  12502. +  1 min             denotes one minute from now.
  12503. +  min            does too.
  12504. +  1 min 5 sec        denotes 65 seconds from now.
  12505. +  1 min 2 sec 3 hour 4 day 5 week 6 fortnight 7 month 8 year
  12506. +            denotes the sum of all the given durations from now.Ftpu-edt-on
  12507. +Turn on TPU/edt emulation.Ftpu-set-scroll-margins
  12508. +Set scroll margins.Ftpu-set-cursor-free
  12509. +Allow the cursor to move freely about the screen.Ftpu-set-cursor-bound
  12510. +Constrain the cursor to the flow of the text.Ftq-create
  12511. +Create and return a transaction queue communicating with PROCESS.
  12512. +PROCESS should be a subprocess capable of sending and receiving
  12513. +streams of bytes.  It may be a local process, or it may be connected
  12514. +to a tcp server on another machine.Vtrace-buffer
  12515. +*Trace output will by default go to that buffer.Ftrace-function
  12516. +Traces FUNCTION with trace output going to BUFFER.
  12517. +For every call of FUNCTION Lisp-style trace messages that display argument
  12518. +and return values will be inserted into BUFFER. This function generates the
  12519. +trace advice for FUNCTION and activates it together with any other advice
  12520. +there might be!! The trace BUFFER will popup whenever FUNCTION is called.
  12521. +Do not use this to trace functions that switch buffers or do any other
  12522. +display oriented stuff, use `trace-function-background' instead.Ftrace-function-background
  12523. +Traces FUNCTION with trace output going quietly to BUFFER.
  12524. +For every call of FUNCTION Lisp-style trace messages that display argument
  12525. +and return values will be inserted into BUFFER. This function generates the
  12526. +trace advice for FUNCTION and activates it together with any other advice
  12527. +there might be!! Trace output will quietly go to BUFFER without changing
  12528. +the window or buffer configuration at all.Vtc-mode-map
  12529. +Keymap for commands for two-column mode.Ftc-two-columns
  12530. +Split current window vertically for two-column editing.
  12531. +
  12532. +When called the first time, associates a buffer with the current
  12533. +buffer.  Both buffers are put in two-column minor mode and
  12534. +tc-mode-hook gets called on both.  These buffers remember
  12535. +about one another, even when renamed.
  12536. +
  12537. +When called again, restores the screen layout with the current buffer
  12538. +first and the associated buffer to it's right.
  12539. +
  12540. +If you include long lines, i.e which will span both columns (eg.
  12541. +source code), they should be in what will be the first column, with
  12542. +the associated buffer having empty lines next to them.
  12543. +
  12544. +You have the following commands at your disposal:
  12545. +
  12546. +\[tc-two-columns]   Rearrange screen
  12547. +\[tc-associate-buffer]   Reassociate buffer after changing major mode
  12548. +\[tc-scroll-up]   Scroll both buffers up by a screenfull
  12549. +\[tc-scroll-down]   Scroll both buffers down by a screenful
  12550. +\[tc-scroll-line]   Scroll both buffers up by one or more lines
  12551. +\[tc-recenter]   Recenter and realign other buffer
  12552. +\[shrink-window-horizontally], \[enlarge-window-horizontally]   Shrink, enlarge current column
  12553. +\[tc-associated-buffer]   Switch to associated buffer
  12554. +\[tc-merge]   Merge both buffers
  12555. +
  12556. +These keybindings can be customized in your ~/.emacs by `tc-prefix'
  12557. +and `tc-mode-map'.
  12558. +
  12559. +The appearance of the screen can be customized by the variables
  12560. +`tc-window-width', `tc-beyond-fill-column',
  12561. +`tc-mode-line-format' and `truncate-partial-width-windows'.Ftc-associate-buffer
  12562. +Associate another buffer with this one in two-column minor mode.
  12563. +Can also be used to associate a just previously visited file, by
  12564. +accepting the proposed default buffer.
  12565. +
  12566. +See  \[tc-two-columns]  and  `two-column.el'  for further details.Ftc-split
  12567. +Unmerge a two-column text into two buffers in two-column minor mode.
  12568. +The text is unmerged at the cursor's column which becomes the local
  12569. +value of `tc-window-width'.  Only lines that have the ARG same
  12570. +preceding characters at that column get split.  The ARG preceding
  12571. +characters without any leading whitespace become the local value for
  12572. +`tc-separator'.  This way lines that continue across both
  12573. +columns remain untouched in the first buffer.
  12574. +
  12575. +This function can be used with a prototype line, to set up things as
  12576. +you like them.  You write the first line of each column with the
  12577. +separator you like and then unmerge that line.  E.g.:
  12578. +
  12579. +First column's text    sSs  Second columns text
  12580. +               \___/\
  12581. +            /    \
  12582. +   5 character Separator      You type  M-5 \[tc-split]  with the point here
  12583. +
  12584. +See  \[tc-two-columns]  and  `two-column.el'  for further details.Ftc-dissociate
  12585. +Turn off two-column minor mode in current and associated buffer.
  12586. +If the associated buffer is unmodified and empty, it is killed.Ftc-merge
  12587. +Merges the associated buffer with the current buffer.
  12588. +They get merged at the column, which is the value of
  12589. +`tc-window-width', i.e. usually at the vertical window
  12590. +separator.  This separator gets replaced with white space.  Beyond
  12591. +that the value of gets inserted on merged lines.  The two columns are
  12592. +thus pasted side by side, in a single text.  If the other buffer is
  12593. +not displayed to the left of this one, then this one becomes the left
  12594. +column.
  12595. +
  12596. +If you want `tc-separator' on empty lines in the second column,
  12597. +you should put just one space in them.  In the final result, you can strip
  12598. +off trailing spaces with \[beginning-of-buffer] \[replace-regexp] [ SPC TAB ] + $ RET RETFtc-associated-buffer
  12599. +Switch to associated buffer.Ftc-scroll-line
  12600. +Scroll current window upward by ARG lines.
  12601. +The associated window gets scrolled to the same line.Ftc-scroll-up
  12602. +Scroll current window upward by ARG screens.
  12603. +The associated window gets scrolled to the same line.Ftc-scroll-down
  12604. +Scroll current window downward by ARG screens.
  12605. +The associated window gets scrolled to the same line.Ftc-recenter
  12606. +Center point in window.  With ARG, put point on line ARG.
  12607. +This counts from bottom if ARG is negative.  The associated window
  12608. +gets scrolled to the same line.Funderline-region
  12609. +Underline all nonblank characters in the region.
  12610. +Works by overstriking underscores.
  12611. +Called from program, takes two arguments START and END
  12612. +which specify the range to operate on.Fununderline-region
  12613. +Remove all underlining (overstruck underscores) in the region.
  12614. +Called from program, takes two arguments START and END
  12615. +which specify the range to operate on.Fbatch-unrmail
  12616. +Convert Rmail files to system inbox format.
  12617. +Specify the input Rmail file names as command line arguments.
  12618. +For each Rmail file, the corresponding output file name
  12619. +is made by adding `.mail' at the end.
  12620. +For example, invoke `emacs -batch -f batch-unrmail RMAIL'.Funrmail
  12621. +Convert Rmail file FILE to system inbox format file TO-FILE.Vreplace-copying-with
  12622. +*If non-nil, replace copying notices with this file.Fupdate-copyright
  12623. +Update the copyright notice at the beginning of the buffer
  12624. +to indicate the current year.  If optional arg REPLACE is given
  12625. +(interactively, with prefix arg) replace the years in the notice
  12626. +rather than adding the current year after them.
  12627. +If `replace-copying-with' is set, the copying permissions following the
  12628. +copyright are replaced as well.
  12629. +
  12630. +If optional third argument ASK is non-nil, the user is prompted for whether
  12631. +or not to update the copyright.  If optional fourth argument ASK-YEAR is
  12632. +non-nil, the user is prompted for whether or not to replace the year rather
  12633. +than adding to it.Fask-to-update-copyright
  12634. +If the current buffer contains a copyright notice that is out of date,
  12635. +ask the user if it should be updated with `update-copyright' (which see).
  12636. +Put this on write-file-hooks.Fask-user-about-lock
  12637. +Ask user what to do when he wants to edit FILE but it is locked by USER.
  12638. +This function has a choice of three things to do:
  12639. +  do (signal 'buffer-file-locked (list FILE USER))
  12640. +    to refrain from editing the file
  12641. +  return t (grab the lock on the file)
  12642. +  return nil (edit the file even though it is locked).
  12643. +You can rewrite it to use any criterion you like to choose which one to do.Fask-user-about-supersession-threat
  12644. +Ask a user who is about to modify an obsolete buffer what to do.
  12645. +This function has two choices: it can return, in which case the modification
  12646. +of the buffer will proceed, or it can (signal 'file-supersession (file)),
  12647. +in which case the proposed buffer modification will not be made.
  12648. +
  12649. +You can rewrite this to use any criterion you like to choose which one to do.
  12650. +The buffer in question is current when this function is called.Vvc-checkin-hook
  12651. +*List of functions called after a checkin is done.  See `run-hooks'.Fvc-next-action
  12652. +Do the next logical checkin or checkout operation on the current file.
  12653. +   If the file is not already registered, this registers it for version
  12654. +control and then retrieves a writable, locked copy for editing.
  12655. +   If the file is registered and not locked by anyone, this checks out
  12656. +a writable and locked file ready for editing.
  12657. +   If the file is checked out and locked by the calling user, this
  12658. +first checks to see if the file has changed since checkout.  If not,
  12659. +it performs a revert.
  12660. +   If the file has been changed, this pops up a buffer for entry
  12661. +of a log message; when the message has been entered, it checks in the
  12662. +resulting changes along with the log message as change commentary.  If
  12663. +the variable `vc-keep-workfiles' is non-nil (which is its default), a
  12664. +read-only copy of the changed file is left in place afterwards.
  12665. +   If the file is registered and locked by someone else, you are given
  12666. +the option to steal the lock.
  12667. +   If you call this from within a VC dired buffer with no files marked,
  12668. +it will operate on the file in the current line.
  12669. +   If you call this from within a VC dired buffer, and one or more
  12670. +files are marked, it will accept a log message and then operate on
  12671. +each one.  The log message will be used as a comment for any register
  12672. +or checkin operations, but ignored when doing checkouts.  Attempted
  12673. +lock steals will raise an error.
  12674. +
  12675. +   For checkin, a prefix argument lets you specify the version number to use.Fvc-register
  12676. +Register the current file into your version-control system.Fvc-diff
  12677. +Display diffs between file versions.
  12678. +Normally this compares the current file and buffer with the most recent 
  12679. +checked in version of that file.  This uses no arguments.
  12680. +With a prefix argument, it reads the file name to use
  12681. +and two version designators specifying which versions to compare.Fvc-version-other-window
  12682. +Visit version REV of the current buffer in another window.
  12683. +If the current buffer is named `F', the version is named `F.~REV~'.
  12684. +If `F.~REV~' already exists, it is used instead of being re-created.Fvc-insert-headers
  12685. +Insert headers in a file for use with your version-control system.
  12686. +Headers desired are inserted at the start of the buffer, and are pulled from
  12687. +the variable `vc-header-alist'.Fvc-directory
  12688. +Show version-control status of all files under the current directory.Fvc-create-snapshot
  12689. +Make a snapshot called NAME.
  12690. +The snapshot is made from all registered files at or below the current
  12691. +directory.  For each file, the version level of its latest
  12692. +version becomes part of the named configuration.Fvc-retrieve-snapshot
  12693. +Retrieve the snapshot called NAME.
  12694. +This function fails if any files are locked at or below the current directory
  12695. +Otherwise, all registered files are checked out (unlocked) at their version
  12696. +levels in the snapshot.Fvc-print-log
  12697. +List the change log of the current buffer in a window.Fvc-revert-buffer
  12698. +Revert the current buffer's file back to the latest checked-in version.
  12699. +This asks for confirmation if the buffer contents are not identical
  12700. +to that version.Fvc-cancel-version
  12701. +Get rid of most recently checked in version of this file.
  12702. +A prefix argument means do not revert the buffer afterwards.Fvc-update-change-log
  12703. +Find change log file and add entries from recent RCS logs.
  12704. +The mark is left at the end of the text prepended to the change log.
  12705. +With prefix arg of C-u, only find log entries for the current buffer's file.
  12706. +With any numeric prefix arg, find log entries for all files currently visited.
  12707. +Otherwise, find log entries for all registered files in the default directory.
  12708. +From a program, any arguments are passed to the `rcs2log' script.Fvi-mode
  12709. +Major mode that acts like the `vi' editor.
  12710. +The purpose of this mode is to provide you the combined power of vi (namely,
  12711. +the "cross product" effect of commands and repeat last changes) and Emacs.
  12712. +
  12713. +This command redefines nearly all keys to look like vi commands.
  12714. +It records the previous major mode, and any vi command for input
  12715. +(`i', `a', `s', etc.) switches back to that mode.
  12716. +Thus, ordinary Emacs (in whatever major mode you had been using)
  12717. +is "input" mode as far as vi is concerned.
  12718. +
  12719. +To get back into vi from "input" mode, you must issue this command again.
  12720. +Therefore, it is recommended that you assign it to a key.
  12721. +
  12722. +Major differences between this mode and real vi :
  12723. +
  12724. +* Limitations and unsupported features
  12725. +  - Search patterns with line offset (e.g. /pat/+3 or /pat/z.) are
  12726. +    not supported.
  12727. +  - Ex commands are not implemented; try ':' to get some hints.
  12728. +  - No line undo (i.e. the 'U' command), but multi-undo is a standard feature.
  12729. +
  12730. +* Modifications
  12731. +  - The stopping positions for some point motion commands (word boundary,
  12732. +    pattern search) are slightly different from standard 'vi'.
  12733. +    Also, no automatic wrap around at end of buffer for pattern searching.
  12734. +  - Since changes are done in two steps (deletion then insertion), you need
  12735. +    to undo twice to completely undo a change command.  But this is not needed
  12736. +    for undoing a repeated change command.
  12737. +  - No need to set/unset 'magic', to search for a string with regular expr
  12738. +    in it just put a prefix arg for the search commands.  Replace cmds too.
  12739. +  - ^R is bound to incremental backward search, so use ^L to redraw screen.
  12740. +
  12741. +* Extensions
  12742. +  - Some standard (or modified) Emacs commands were integrated, such as
  12743. +    incremental search, query replace, transpose objects, and keyboard macros.
  12744. +  - In command state, ^X links to the 'ctl-x-map', and ESC can be linked to
  12745. +    esc-map or set undefined.  These can give you the full power of Emacs.
  12746. +  - See vi-com-map for those keys that are extensions to standard vi, e.g.
  12747. +    `vi-name-last-change-or-macro', `vi-verify-spelling', `vi-locate-def',
  12748. +    `vi-mark-region', and 'vi-quote-words'.  Some of them are quite handy.
  12749. +  - Use \[vi-switch-mode] to switch among different modes quickly.
  12750. +  
  12751. +Syntax table and abbrevs while in vi mode remain as they were in Emacs.Fview-file
  12752. +View FILE in View mode, returning to previous buffer when done.
  12753. +The usual Emacs commands are not available; instead,
  12754. +a special set of commands (mostly letters and punctuation)
  12755. +are defined for moving around in the buffer.
  12756. +Space scrolls forward, Delete scrolls backward.
  12757. +For list of all View commands, type ? or h while viewing.
  12758. +
  12759. +This command runs the normal hook `view-mode-hook'.Fview-file-other-window
  12760. +View FILE in View mode in other window.
  12761. +Return to previous buffer when done.
  12762. +The usual Emacs commands are not available; instead,
  12763. +a special set of commands (mostly letters and punctuation)
  12764. +are defined for moving around in the buffer.
  12765. +Space scrolls forward, Delete scrolls backward.
  12766. +For list of all View commands, type ? or h while viewing.
  12767. +
  12768. +This command runs the normal hook `view-mode-hook'.Fview-buffer
  12769. +View BUFFER in View mode, returning to previous buffer when done.
  12770. +The usual Emacs commands are not available; instead,
  12771. +a special set of commands (mostly letters and punctuation)
  12772. +are defined for moving around in the buffer.
  12773. +Space scrolls forward, Delete scrolls backward.
  12774. +For list of all View commands, type ? or h while viewing.
  12775. +
  12776. +This command runs the normal hook `view-mode-hook'.Fview-buffer-other-window
  12777. +View BUFFER in View mode in another window,
  12778. +returning to original buffer when done *only* if 
  12779. +prefix argument NOT-RETURN is nil (which is the default).
  12780. +
  12781. +The usual Emacs commands are not available in View mode; instead,
  12782. +a special set of commands (mostly letters and punctuation)
  12783. +are defined for moving around in the buffer.
  12784. +Space scrolls forward, Delete scrolls backward.
  12785. +For list of all View commands, type ? or h while viewing.
  12786. +
  12787. +This command runs the normal hook `view-mode-hook'.Fview-mode
  12788. +Major mode for viewing text but not editing it.
  12789. +Letters do not insert themselves.  Instead these commands are provided.
  12790. +Most commands take prefix arguments.  Commands dealing with lines
  12791. +default to "scroll size" lines (initially size of window).
  12792. +Search commands default to a repeat count of one.
  12793. +M-< or <    move to beginning of buffer.
  12794. +M-> or >    move to end of buffer.
  12795. +C-v or Space    scroll forward lines.
  12796. +M-v or DEL    scroll backward lines.
  12797. +CR or LF    scroll forward one line (backward with prefix argument).
  12798. +z        like Space except set number of lines for further
  12799. +           scrolling commands to scroll by.
  12800. +C-u and Digits    provide prefix arguments.  `-' denotes negative argument.
  12801. +=        prints the current line number.
  12802. +g        goes to line given by prefix argument.
  12803. +/ or M-C-s    searches forward for regular expression
  12804. +\ or M-C-r    searches backward for regular expression.
  12805. +n        searches forward for last regular expression.
  12806. +p        searches backward for last regular expression.
  12807. +C-@ or .    set the mark.
  12808. +x        exchanges point and mark.
  12809. +C-s or s    do forward incremental search.
  12810. +C-r or r    do reverse incremental search.
  12811. +@ or '        return to mark and pops mark ring.
  12812. +          Mark ring is pushed at start of every
  12813. +          successful search and when jump to line to occurs.
  12814. +          The mark is set on jump to buffer start or end.
  12815. +? or h        provide help message (list of commands).
  12816. +\[Helper-help]        provides help (list of commands or description of a command).
  12817. +C-n        moves down lines vertically.
  12818. +C-p        moves upward lines vertically.
  12819. +C-l        recenters the screen.
  12820. +q or C-c    exit view-mode and return to previous buffer.
  12821. +
  12822. +Entry to this mode runs the normal hook `view-mode-hook'.
  12823. +
  12824. +\{view-mode-map}Fvip-mode
  12825. +Turn on VIP emulation of VI.Fwordstar-mode
  12826. +Major mode with WordStar-like key bindings.
  12827. +
  12828. +BUGS:
  12829. + - Help menus with WordStar commands (C-j just calls help-for-help)
  12830. +   are not implemented
  12831. + - Options for search and replace
  12832. + - Show markers (C-k h) is somewhat strange
  12833. + - Search and replace (C-q a) is only available in forward direction
  12834. +
  12835. +No key bindings beginning with ESC are installed, they will work
  12836. +Emacs-like.
  12837. +
  12838. +The key bindings are:
  12839. +
  12840. +  C-a        backward-word
  12841. +  C-b        fill-paragraph
  12842. +  C-c        scroll-up-line
  12843. +  C-d        forward-char
  12844. +  C-e        previous-line
  12845. +  C-f        forward-word
  12846. +  C-g        delete-char
  12847. +  C-h        backward-char
  12848. +  C-i        indent-for-tab-command
  12849. +  C-j        help-for-help
  12850. +  C-k        ordstar-C-k-map
  12851. +  C-l        ws-repeat-search
  12852. +  C-n        open-line
  12853. +  C-p        quoted-insert
  12854. +  C-r        scroll-down-line
  12855. +  C-s        backward-char
  12856. +  C-t        kill-word
  12857. +  C-u        keyboard-quit
  12858. +  C-v        overwrite-mode
  12859. +  C-w        scroll-down
  12860. +  C-x        next-line
  12861. +  C-y        kill-complete-line
  12862. +  C-z        scroll-up
  12863. +
  12864. +  C-k 0        ws-set-marker-0
  12865. +  C-k 1        ws-set-marker-1
  12866. +  C-k 2        ws-set-marker-2
  12867. +  C-k 3        ws-set-marker-3
  12868. +  C-k 4        ws-set-marker-4
  12869. +  C-k 5        ws-set-marker-5
  12870. +  C-k 6        ws-set-marker-6
  12871. +  C-k 7        ws-set-marker-7
  12872. +  C-k 8        ws-set-marker-8
  12873. +  C-k 9        ws-set-marker-9
  12874. +  C-k b        ws-begin-block
  12875. +  C-k c        ws-copy-block
  12876. +  C-k d        save-buffers-kill-emacs
  12877. +  C-k f        find-file
  12878. +  C-k h        ws-show-markers
  12879. +  C-k i        ws-indent-block
  12880. +  C-k k        ws-end-block
  12881. +  C-k p        ws-print-block
  12882. +  C-k q        kill-emacs
  12883. +  C-k r        insert-file
  12884. +  C-k s        save-some-buffers
  12885. +  C-k t        ws-mark-word
  12886. +  C-k u        ws-exdent-block
  12887. +  C-k C-u    keyboard-quit
  12888. +  C-k v        ws-move-block
  12889. +  C-k w        ws-write-block
  12890. +  C-k x        kill-emacs
  12891. +  C-k y        ws-delete-block
  12892. +
  12893. +  C-o c        center-line
  12894. +  C-o b        switch-to-buffer
  12895. +  C-o j        justify-current-line
  12896. +  C-o k        kill-buffer
  12897. +  C-o l        list-buffers
  12898. +  C-o m        auto-fill-mode
  12899. +  C-o r        set-fill-column
  12900. +  C-o C-u    keyboard-quit
  12901. +  C-o wd    delete-other-windows
  12902. +  C-o wh    split-window-horizontally
  12903. +  C-o wo    other-window
  12904. +  C-o wv    split-window-vertically
  12905. +
  12906. +  C-q 0        ws-find-marker-0
  12907. +  C-q 1        ws-find-marker-1
  12908. +  C-q 2        ws-find-marker-2
  12909. +  C-q 3        ws-find-marker-3
  12910. +  C-q 4        ws-find-marker-4
  12911. +  C-q 5        ws-find-marker-5
  12912. +  C-q 6        ws-find-marker-6
  12913. +  C-q 7        ws-find-marker-7
  12914. +  C-q 8        ws-find-marker-8
  12915. +  C-q 9        ws-find-marker-9
  12916. +  C-q a        ws-query-replace
  12917. +  C-q b        ws-to-block-begin
  12918. +  C-q c        end-of-buffer
  12919. +  C-q d        end-of-line
  12920. +  C-q f        ws-search
  12921. +  C-q k        ws-to-block-end
  12922. +  C-q l        ws-undo
  12923. +  C-q p        ws-last-cursorp
  12924. +  C-q r        beginning-of-buffer
  12925. +  C-q C-u    keyboard-quit
  12926. +  C-q w        ws-last-error
  12927. +  C-q y        ws-kill-eol
  12928. +  C-q DEL    ws-kill-bol
  12929. +Frun-scheme
  12930. +Run an inferior Scheme process.
  12931. +Output goes to the buffer `*scheme*'.
  12932. +With argument, asks for a command line.Fyow
  12933. +Return or display a random Zippy quotation.  With prefix arg, insert it.Finsert-zippyism
  12934. +Prompt with completion for a known Zippy quotation, and insert it at point.Fpsychoanalyze-pinhead
  12935. +Zippy goes to the analyst.Fmap-y-or-n-p
  12936. +Ask a series of boolean questions.
  12937. +Takes args PROMPTER ACTOR LIST, and optional args HELP and ACTION-ALIST.
  12938. +
  12939. +LIST is a list of objects, or a function of no arguments to return the next
  12940. +object or nil.
  12941. +
  12942. +If PROMPTER is a string, the prompt is (format PROMPTER OBJECT).  If not
  12943. +a string, PROMPTER is a function of one arg (an object from LIST), which
  12944. +returns a string to be used as the prompt for that object.  If the return
  12945. +value is not a string, it is eval'd to get the answer; it may be nil to
  12946. +ignore the object, t to act on the object without asking the user, or a
  12947. +form to do a more complex prompt.
  12948. +
  12949. +ACTOR is a function of one arg (an object from LIST),
  12950. +which gets called with each object that the user answers `yes' for.
  12951. +
  12952. +If HELP is given, it is a list (OBJECT OBJECTS ACTION),
  12953. +where OBJECT is a string giving the singular noun for an elt of LIST;
  12954. +OBJECTS is the plural noun for elts of LIST, and ACTION is a transitive
  12955. +verb describing ACTOR.  The default is ("object" "objects" "act on").
  12956. +
  12957. +At the prompts, the user may enter y, Y, or SPC to act on that object;
  12958. +n, N, or DEL to skip that object; ! to act on all following objects;
  12959. +ESC or q to exit (skip all following objects); . (period) to act on the
  12960. +current object and then exit; or \[help-command] to get help.
  12961. +
  12962. +If ACTION-ALIST is given, it is an alist (KEY FUNCTION HELP) of extra keys
  12963. +that will be accepted.  KEY is a character; FUNCTION is a function of one
  12964. +arg (an object from LIST); HELP is a string.  When the user hits KEY,
  12965. +FUNCTION is called.  If it returns non-nil, the object is considered
  12966. +"acted upon", and the next object from LIST is processed.  If it returns
  12967. +nil, the prompt is repeated for the same object.
  12968. +
  12969. +Final optional argument NO-CURSOR-IN-ECHO-AREA non-nil says not to set
  12970. +`cursor-in-echo-area' while prompting.
  12971. +
  12972. +This function uses `query-replace-map' to define the standard responses,
  12973. +but not all of the responses which `query-replace' understands
  12974. +are meaningful here.
  12975. +
  12976. +Returns the number of actions taken.Fforward-page
  12977. +Move forward to page boundary.  With arg, repeat, or go back if negative.
  12978. +A page boundary is any line whose beginning matches the regexp
  12979. +`page-delimiter'.Fbackward-page
  12980. +Move backward to page boundary.  With arg, repeat, or go fwd if negative.
  12981. +A page boundary is any line whose beginning matches the regexp
  12982. +`page-delimiter'.Fmark-page
  12983. +Put mark at end of page, point at beginning.
  12984. +A numeric arg specifies to move forward or backward by that many pages,
  12985. +thus marking a page other than the one point was originally in.Fnarrow-to-page
  12986. +Make text outside current page invisible.
  12987. +A numeric arg specifies to move forward or backward by that many pages,
  12988. +thus showing a page other than the one point was originally in.Fcount-lines-page
  12989. +Report number of lines on current page, and how many are before or after point.Fwhat-page
  12990. +Print page and line number of point.Vparagraph-start
  12991. +*Regexp for beginning of a line that starts OR separates paragraphs.
  12992. +This regexp should match lines that separate paragraphs
  12993. +and should also match lines that start a paragraph
  12994. +(and are part of that paragraph).
  12995. +The variable `paragraph-separate' specifies how to distinguish
  12996. +lines that start paragraphs from lines that separate them.Vparagraph-separate
  12997. +*Regexp for beginning of a line that separates paragraphs.
  12998. +If you change this, you may have to change paragraph-start also.Vsentence-end
  12999. +*Regexp describing the end of a sentence.
  13000. +All paragraph boundaries also end sentences, regardless.
  13001. +
  13002. +In order to be recognized as the end of a sentence, the ending period,
  13003. +question mark, or exclamation point must be followed by two spaces,
  13004. +unless it's inside some sort of quotes or parenthesis.Vpage-delimiter
  13005. +*Regexp describing line-beginnings that separate pages.Vparagraph-ignore-fill-prefix
  13006. +Non-nil means the paragraph commands are not affected by `fill-prefix'.
  13007. +This is desirable in modes where blank lines are the paragraph delimiters.Fforward-paragraph
  13008. +Move forward to end of paragraph.
  13009. +With arg N, do it N times; negative arg -N means move backward N paragraphs.
  13010. +
  13011. +A line which `paragraph-start' matches either separates paragraphs
  13012. +(if `paragraph-separate' matches it also) or is the first line of a paragraph.
  13013. +A paragraph end is the beginning of a line which is not part of the paragraph
  13014. +to which the end of the previous line belongs, or the end of the buffer.Fbackward-paragraph
  13015. +Move backward to start of paragraph.
  13016. +With arg N, do it N times; negative arg -N means move forward N paragraphs.
  13017. +
  13018. +A paragraph start is the beginning of a line which is a
  13019. +`first-line-of-paragraph' or which is ordinary text and follows a
  13020. +paragraph-separating line; except: if the first real line of a
  13021. +paragraph is preceded by a blank line, the paragraph starts at that
  13022. +blank line.
  13023. +
  13024. +See `forward-paragraph' for more information.Fmark-paragraph
  13025. +Put point at beginning of this paragraph, mark at end.
  13026. +The paragraph marked is the one that contains point or follows point.Fkill-paragraph
  13027. +Kill forward to end of paragraph.
  13028. +With arg N, kill forward to Nth end of paragraph;
  13029. +negative arg -N means kill backward to Nth start of paragraph.Fbackward-kill-paragraph
  13030. +Kill back to start of paragraph.
  13031. +With arg N, kill back to Nth start of paragraph;
  13032. +negative arg -N means kill forward to Nth end of paragraph.Ftranspose-paragraphs
  13033. +Interchange this (or next) paragraph with previous one.Fforward-sentence
  13034. +Move forward to next `sentence-end'.  With argument, repeat.
  13035. +With negative argument, move backward repeatedly to `sentence-beginning'.
  13036. +
  13037. +The variable `sentence-end' is a regular expression that matches ends of
  13038. +sentences.  Also, every paragraph boundary terminates sentences as well.Fbackward-sentence
  13039. +Move backward to start of sentence.  With arg, do it arg times.
  13040. +See `forward-sentence' for more information.Fkill-sentence
  13041. +Kill from point to end of sentence.
  13042. +With arg, repeat; negative arg -N means kill back to Nth start of sentence.Fbackward-kill-sentence
  13043. +Kill back from point to start of sentence.
  13044. +With arg, repeat, or kill forward to Nth end of sentence if negative arg -N.Fmark-end-of-sentence
  13045. +Put mark at end of sentence.  Arg works as in `forward-sentence'.Ftranspose-sentences
  13046. +Interchange this (next) and previous sentence.Vregister-alist
  13047. +Alist of elements (NAME . CONTENTS), one for each Emacs register.
  13048. +NAME is a character (a number).  CONTENTS is a string, number,
  13049. +frame configuration, mark or list.
  13050. +A list of strings represents a rectangle.
  13051. +A list of the form (file . NAME) represents the file named NAME.Fget-register
  13052. +Return contents of Emacs register named CHAR, or nil if none.Fset-register
  13053. +Set contents of Emacs register named CHAR to VALUE.  Returns VALUE.
  13054. +See the documentation of the variable `register-alist' for possible VALUE.Fpoint-to-register
  13055. +Store current location of point in register REGISTER.
  13056. +With prefix argument, store current frame configuration.
  13057. +Use \[jump-to-register] to go to that location or restore that configuration.
  13058. +Argument is a character, naming the register.Fwindow-configuration-to-register
  13059. +Store the window configuration of the selected frame in register REGISTER.
  13060. +Use \[jump-to-register] to restore the configuration.
  13061. +Argument is a character, naming the register.Fframe-configuration-to-register
  13062. +Store the window configuration of all frames in register REGISTER.
  13063. +Use \[jump-to-register] to restore the configuration.
  13064. +Argument is a character, naming the register.Fjump-to-register
  13065. +Move point to location stored in a register.
  13066. +If the register contains a file name, find that file.
  13067. + (To put a file name in a register, you must use `set-register'.)
  13068. +If the register contains a window configuration (one frame) or a frame
  13069. +configuration (all frames), restore that frame or all frames accordingly.
  13070. +First argument is a character, naming the register.
  13071. +Optional second arg non-nil (interactively, prefix argument) says to
  13072. +delete any existing frames that the frame configuration doesn't mention.
  13073. +(Otherwise, these frames are iconified.)Fview-register
  13074. +Display what is contained in register named REGISTER.
  13075. +REGISTER is a character.Finsert-register
  13076. +Insert contents of register REG.  REG is a character.
  13077. +Normally puts point before and mark after the inserted text.
  13078. +If optional second arg is non-nil, puts mark before and point after.
  13079. +Interactively, second arg is non-nil if prefix arg is supplied.Fcopy-to-register
  13080. +Copy region into register REG.  With prefix arg, delete as well.
  13081. +Called from program, takes four args: REG, START, END and DELETE-FLAG.
  13082. +START and END are buffer positions indicating what to copy.Fappend-to-register
  13083. +Append region to text in register REG.  With prefix arg, delete as well.
  13084. +Called from program, takes four args: REG, START, END and DELETE-FLAG.
  13085. +START and END are buffer positions indicating what to append.Fprepend-to-register
  13086. +Prepend region to text in register REG.  With prefix arg, delete as well.
  13087. +Called from program, takes four args: REG, START, END and DELETE-FLAG.
  13088. +START and END are buffer positions indicating what to prepend.Fcopy-rectangle-to-register
  13089. +Copy rectangular region into register REG.  With prefix arg, delete as well.
  13090. +Called from program, takes four args: REG, START, END and DELETE-FLAG.
  13091. +START and END are buffer positions giving two corners of rectangle.Vcase-replace
  13092. +*Non-nil means query-replace should preserve case in replacements.Fquery-replace
  13093. +Replace some occurrences of FROM-STRING with TO-STRING.
  13094. +As each match is found, the user must type a character saying
  13095. +what to do with it.  For directions, type \[help-command] at that time.
  13096. +
  13097. +Preserves case in each replacement if `case-replace' and `case-fold-search'
  13098. +are non-nil and FROM-STRING has no uppercase letters.
  13099. +Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace
  13100. +only matches surrounded by word boundaries.
  13101. +
  13102. +To customize possible responses, change the "bindings" in `query-replace-map'.Fquery-replace-regexp
  13103. +Replace some things after point matching REGEXP with TO-STRING.
  13104. +As each match is found, the user must type a character saying
  13105. +what to do with it.  For directions, type \[help-command] at that time.
  13106. +
  13107. +Preserves case in each replacement if `case-replace' and `case-fold-search'
  13108. +are non-nil and REGEXP has no uppercase letters.
  13109. +Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace
  13110. +only matches surrounded by word boundaries.
  13111. +In TO-STRING, `\&' stands for whatever matched the whole of REGEXP,
  13112. +and `\=\N' (where N is a digit) stands for
  13113. + whatever what matched the Nth `\(...\)' in REGEXP.Fmap-query-replace-regexp
  13114. +Replace some matches for REGEXP with various strings, in rotation.
  13115. +The second argument TO-STRINGS contains the replacement strings, separated
  13116. +by spaces.  This command works like `query-replace-regexp' except
  13117. +that each successive replacement uses the next successive replacement string,
  13118. +wrapping around from the last such string to the first.
  13119. +
  13120. +Non-interactively, TO-STRINGS may be a list of replacement strings.
  13121. +
  13122. +A prefix argument N says to use each replacement string N times
  13123. +before rotating to the next.Freplace-string
  13124. +Replace occurrences of FROM-STRING with TO-STRING.
  13125. +Preserve case in each match if `case-replace' and `case-fold-search'
  13126. +are non-nil and FROM-STRING has no uppercase letters.
  13127. +Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace
  13128. +only matches surrounded by word boundaries.
  13129. +
  13130. +This function is usually the wrong thing to use in a Lisp program.
  13131. +What you probably want is a loop like this:
  13132. +  (while (search-forward FROM-STRING nil t)
  13133. +    (replace-match TO-STRING nil t))
  13134. +which will run faster and will not set the mark or print anything.Freplace-regexp
  13135. +Replace things after point matching REGEXP with TO-STRING.
  13136. +Preserve case in each match if `case-replace' and `case-fold-search'
  13137. +are non-nil and REGEXP has no uppercase letters.
  13138. +Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace
  13139. +only matches surrounded by word boundaries.
  13140. +In TO-STRING, `\&' stands for whatever matched the whole of REGEXP,
  13141. +and `\=\N' (where N is a digit) stands for
  13142. + whatever what matched the Nth `\(...\)' in REGEXP.
  13143. +
  13144. +This function is usually the wrong thing to use in a Lisp program.
  13145. +What you probably want is a loop like this:
  13146. +  (while (re-search-forward REGEXP nil t)
  13147. +    (replace-match TO-STRING nil nil))
  13148. +which will run faster and will not set the mark or print anything.Vregexp-history
  13149. +History list for some commands that read regular expressions.Fkeep-lines
  13150. +Delete all lines except those containing matches for REGEXP.
  13151. +A match split across lines preserves all the lines it lies in.
  13152. +Applies to all lines after point.Fflush-lines
  13153. +Delete lines containing matches for REGEXP.
  13154. +If a match is split across lines, all the lines it lies in are deleted.
  13155. +Applies to lines after point.Fhow-many
  13156. +Print number of matches for REGEXP following point.Foccur-mode
  13157. +Major mode for output from \[occur].
  13158. +Move point to one of the occurrences in this buffer,
  13159. +then use \[occur-mode-goto-occurrence] to go to the same occurrence
  13160. +in the buffer that the occurrences were found in.
  13161. +Or click \<occur-mode-map>\[occur-mode-mouse-goto] on an occurrence line.
  13162. +\{occur-mode-map}Foccur-mode-mouse-goto
  13163. +In Occur mode, go to the occurrence whose line you click on.Foccur-mode-goto-occurrence
  13164. +Go to the occurrence the current line describes.Vlist-matching-lines-default-context-lines
  13165. +*Default number of context lines to include around a `list-matching-lines'
  13166. +match.  A negative number means to include that many lines before the match.
  13167. +A positive number means to include that many lines both before and after.Foccur
  13168. +Show all lines in the current buffer containing a match for REGEXP.
  13169. +
  13170. +If a match spreads across multiple lines, all those lines are shown.
  13171. +
  13172. +Each line is displayed with NLINES lines before and after, or -NLINES
  13173. +before if NLINES is negative.
  13174. +NLINES defaults to `list-matching-lines-default-context-lines'.
  13175. +Interactively it is the prefix arg.
  13176. +
  13177. +The lines are shown in a buffer named `*Occur*'.
  13178. +It serves as a menu to find any of the occurrences in this buffer.
  13179. +\[describe-mode] in that buffer will explain how.Vquery-replace-help
  13180. +Help message while in query-replaceVquery-replace-map
  13181. +Keymap that defines the responses to questions in `query-replace'.
  13182. +The "bindings" in this map are not commands; they are answers.
  13183. +The valid answers include `act', `skip', `act-and-show',
  13184. +`exit', `act-and-exit', `edit', `delete-and-edit', `recenter',
  13185. +`automatic', `backup', and `help'.Fperform-replace
  13186. +Subroutine of `query-replace'.  Its complexity handles interactive queries.
  13187. +Don't use this in your own program unless you want to query and set the mark
  13188. +just as `query-replace' does.  Instead, write a simple loop like this:
  13189. +  (while (re-search-forward "foo[     ]+bar" nil t)
  13190. +    (replace-match "foobar" nil nil))
  13191. +which will run faster and probably do exactly what you want.Vquery-replace-highlight
  13192. +*Non-nil means to highlight words during query replacement.Fopen-line
  13193. +Insert a newline and leave point before it.
  13194. +If there is a fill prefix, insert the fill prefix on the new line
  13195. +if the line would have been empty.
  13196. +With arg N, insert N newlines.Fsplit-line
  13197. +Split current line, moving portion beyond point vertically down.Fquoted-insert
  13198. +Read next input character and insert it.
  13199. +This is useful for inserting control characters.
  13200. +You may also type up to 3 octal digits, to insert a character with that code.
  13201. +
  13202. +In overwrite mode, this function inserts the character anyway, and
  13203. +does not handle octal digits specially.  This means that if you use
  13204. +overwrite as your normal editing mode, you can use this function to
  13205. +insert characters when necessary.
  13206. +
  13207. +In binary overwrite mode, this function does overwrite, and octal
  13208. +digits are interpreted as a character code.  This is supposed to make
  13209. +this function useful in editing binary files.Fdelete-indentation
  13210. +Join this line to previous and fix up whitespace at join.
  13211. +If there is a fill prefix, delete it from the beginning of this line.
  13212. +With argument, join this line to following line.Ffixup-whitespace
  13213. +Fixup white space between objects around point.
  13214. +Leave one space or none, according to the context.Fdelete-horizontal-space
  13215. +Delete all spaces and tabs around point.Fjust-one-space
  13216. +Delete all spaces and tabs around point, leaving one space.Fdelete-blank-lines
  13217. +On blank line, delete all surrounding blank lines, leaving just one.
  13218. +On isolated blank line, delete that one.
  13219. +On nonblank line, delete any immediately following blank lines.Fback-to-indentation
  13220. +Move point to the first non-whitespace character on this line.Fnewline-and-indent
  13221. +Insert a newline, then indent according to major mode.
  13222. +Indentation is done using the value of `indent-line-function'.
  13223. +In programming language modes, this is the same as TAB.
  13224. +In some text modes, where TAB inserts a tab, this command indents to the
  13225. +column specified by the variable `left-margin'.Freindent-then-newline-and-indent
  13226. +Reindent current line, insert newline, then indent the new line.
  13227. +Indentation of both lines is done according to the current major mode,
  13228. +which means calling the current value of `indent-line-function'.
  13229. +In programming language modes, this is the same as TAB.
  13230. +In some text modes, where TAB inserts a tab, this indents to the
  13231. +column specified by the variable `left-margin'.Fbackward-delete-char-untabify
  13232. +Delete characters backward, changing tabs into spaces.
  13233. +Delete ARG chars, and kill (save in kill ring) if KILLP is non-nil.
  13234. +Interactively, ARG is the prefix arg (default 1)
  13235. +and KILLP is t if a prefix arg was specified.Fzap-to-char
  13236. +Kill up to and including ARG'th occurrence of CHAR.
  13237. +Goes backward if ARG is negative; error if CHAR not found.Fbeginning-of-buffer
  13238. +Move point to the beginning of the buffer; leave mark at previous position.
  13239. +With arg N, put point N/10 of the way from the true beginning.
  13240. +
  13241. +Don't use this command in Lisp programs!
  13242. +(goto-char (point-min)) is faster and avoids clobbering the mark.Fend-of-buffer
  13243. +Move point to the end of the buffer; leave mark at previous position.
  13244. +With arg N, put point N/10 of the way from the true end.
  13245. +
  13246. +Don't use this command in Lisp programs!
  13247. +(goto-char (point-max)) is faster and avoids clobbering the mark.Fmark-whole-buffer
  13248. +Put point at beginning and mark at end of buffer.
  13249. +You probably should not use this function in Lisp programs;
  13250. +it is usually a mistake for a Lisp function to use any subroutine
  13251. +that uses or sets the mark.Fcount-lines-region
  13252. +Print number of lines and characters in the region.Fwhat-line
  13253. +Print the current line number (in the buffer) of point.Fcount-lines
  13254. +Return number of lines between START and END.
  13255. +This is usually the number of newlines between them,
  13256. +but can be one more if START is not equal to END
  13257. +and the greater of them is not at the start of a line.Fwhat-cursor-position
  13258. +Print info on cursor position (on screen and within buffer).Ffundamental-mode
  13259. +Major mode not specialized for anything in particular.
  13260. +Other major modes are defined by comparison with this one.Vread-expression-map
  13261. +Minibuffer keymap used for reading Lisp expressions.Feval-expression
  13262. +Evaluate EXPRESSION and print value in minibuffer.
  13263. +Value is also consed on to front of the variable `values'.Fedit-and-eval-command
  13264. +Prompting with PROMPT, let user edit COMMAND and eval result.
  13265. +COMMAND is a Lisp expression.  Let user edit that expression in
  13266. +the minibuffer, then read and evaluate the result.Frepeat-complex-command
  13267. +Edit and re-evaluate last complex command, or ARGth from last.
  13268. +A complex command is one which used the minibuffer.
  13269. +The command is placed in the minibuffer as a Lisp form for editing.
  13270. +The result is executed, repeating the command as changed.
  13271. +If the command has been changed or is not the most recent previous command
  13272. +it is added to the front of the command history.
  13273. +You can use the minibuffer history commands \<minibuffer-local-map>\[next-history-element] and \[previous-history-element]
  13274. +to get different commands to edit and resubmit.Vminibuffer-history
  13275. +Default minibuffer history list.
  13276. +This is used for all minibuffer input
  13277. +except when an alternate history list is specified.Vminibuffer-history-sexp-flag
  13278. +Non-nil when doing history operations on `command-history'.
  13279. +More generally, indicates that the history list being acted on
  13280. +contains expressions rather than strings.Fprevious-matching-history-element
  13281. +Find the previous history element that matches REGEXP.
  13282. +(Previous history elements refer to earlier actions.)
  13283. +With prefix argument N, search for Nth previous match.
  13284. +If N is negative, find the next or Nth next match.Fnext-matching-history-element
  13285. +Find the next history element that matches REGEXP.
  13286. +(The next history element refers to a more recent action.)
  13287. +With prefix argument N, search for Nth next match.
  13288. +If N is negative, find the previous or Nth previous match.Fnext-history-element
  13289. +Insert the next element of the minibuffer history into the minibuffer.Fprevious-history-element
  13290. +Inserts the previous element of the minibuffer history into the minibuffer.Fnext-complete-history-element
  13291. +Get next element of history which is a completion of minibuffer contents.Fprevious-complete-history-element
  13292. +Get previous element of history which is a completion of minibuffer contents.Fgoto-line
  13293. +Goto line ARG, counting from line 1 at beginning of buffer.Fundo
  13294. +Undo some previous changes.
  13295. +Repeat this command to undo more changes.
  13296. +A numeric argument serves as a repeat count.Vpending-undo-list
  13297. +Within a run of consecutive undo commands, list remaining to be undone.Fundo-start
  13298. +Set `pending-undo-list' to the front of the undo list.
  13299. +The next call to `undo-more' will undo the most recently made change.Fundo-more
  13300. +Undo back N undo-boundaries beyond what was already undone recently.
  13301. +Call `undo-start' to get ready to undo recent changes,
  13302. +then call `undo-more' one or more times to undo them.Vshell-command-history
  13303. +History list for some commands that read shell commands.Fshell-command
  13304. +Execute string COMMAND in inferior shell; display output, if any.
  13305. +If COMMAND ends in ampersand, execute it asynchronously.
  13306. +Optional second arg non-nil (prefix arg, if interactive)
  13307. +means insert output in current buffer after point (leave mark after it).
  13308. +This cannot be done asynchronously.Fshell-command-on-region
  13309. +Execute string COMMAND in inferior shell with region as input.
  13310. +Normally display output (if any) in temp buffer `*Shell Command Output*';
  13311. +Prefix arg means replace the region with it.
  13312. +Noninteractive args are START, END, COMMAND, FLAG.
  13313. +Noninteractively FLAG means insert output in place of text from START to END,
  13314. +and put point at the end, but don't alter the mark.
  13315. +
  13316. +If the output is one line, it is displayed in the echo area,
  13317. +but it is nonetheless available in buffer `*Shell Command Output*'
  13318. +even though that buffer is not automatically displayed.  If there is no output
  13319. +or output is inserted in the current buffer then `*Shell Command Output*' is
  13320. +deleted.Funiversal-argument
  13321. +Begin a numeric argument for the following command.
  13322. +Digits or minus sign following \[universal-argument] make up the numeric argument.
  13323. +\[universal-argument] following the digits or minus sign ends the argument.
  13324. +\[universal-argument] without digits or minus sign provides 4 as argument.
  13325. +Repeating \[universal-argument] without digits or minus sign
  13326. + multiplies the argument by 4 each time.Fdigit-argument
  13327. +Part of the numeric argument for the next command.
  13328. +\[universal-argument] following digits or minus sign ends the argument.Fnegative-argument
  13329. +Begin a negative numeric argument for the next command.
  13330. +\[universal-argument] following digits or minus sign ends the argument.Fforward-to-indentation
  13331. +Move forward ARG lines and position at first nonblank character.Fbackward-to-indentation
  13332. +Move backward ARG lines and position at first nonblank character.Vkill-whole-line
  13333. +*If non-nil, `kill-line' with no arg at beg of line kills the whole line.Fkill-line
  13334. +Kill the rest of the current line; if no nonblanks there, kill thru newline.
  13335. +With prefix argument, kill that many lines from point.
  13336. +Negative arguments kill lines backward.
  13337. +
  13338. +When calling from a program, nil means "no arg",
  13339. +a number counts as a prefix arg.
  13340. +
  13341. +If `kill-whole-line' is non-nil, then kill the whole line
  13342. +when given no argument at the beginning of a line.Vinterprogram-cut-function
  13343. +Function to call to make a killed region available to other programs.
  13344. +
  13345. +Most window systems provide some sort of facility for cutting and
  13346. +pasting text between the windows of different programs.
  13347. +This variable holds a function that Emacs calls whenever text
  13348. +is put in the kill ring, to make the new kill available to other
  13349. +programs.
  13350. +
  13351. +The function takes one or two arguments.
  13352. +The first argument, TEXT, is a string containing
  13353. +the text which should be made available.
  13354. +The second, PUSH, if non-nil means this is a "new" kill;
  13355. +nil means appending to an "old" kill.Vinterprogram-paste-function
  13356. +Function to call to get text cut from other programs.
  13357. +
  13358. +Most window systems provide some sort of facility for cutting and
  13359. +pasting text between the windows of different programs.
  13360. +This variable holds a function that Emacs calls to obtain
  13361. +text that other programs have provided for pasting.
  13362. +
  13363. +The function should be called with no arguments.  If the function
  13364. +returns nil, then no other program has provided such text, and the top
  13365. +of the Emacs kill ring should be used.  If the function returns a
  13366. +string, that string should be put in the kill ring as the latest kill.
  13367. +
  13368. +Note that the function should return a string only if a program other
  13369. +than Emacs has provided a string for pasting; if Emacs provided the
  13370. +most recent string, the function should return nil.  If it is
  13371. +difficult to tell whether Emacs or some other program provided the
  13372. +current string, it is probably good enough to return nil if the string
  13373. +is equal (according to `string=') to the last text Emacs provided.Vkill-ring
  13374. +List of killed text sequences.
  13375. +Since the kill ring is supposed to interact nicely with cut-and-paste
  13376. +facilities offered by window systems, use of this variable should
  13377. +interact nicely with `interprogram-cut-function' and
  13378. +`interprogram-paste-function'.  The functions `kill-new',
  13379. +`kill-append', and `current-kill' are supposed to implement this
  13380. +interaction; you may want to use them instead of manipulating the kill
  13381. +ring directly.Vkill-ring-max
  13382. +*Maximum length of kill ring before oldest elements are thrown away.Vkill-ring-yank-pointer
  13383. +The tail of the kill ring whose car is the last thing yanked.Fkill-new
  13384. +Make STRING the latest kill in the kill ring.
  13385. +Set the kill-ring-yank pointer to point to it.
  13386. +If `interprogram-cut-function' is non-nil, apply it to STRING.Fkill-append
  13387. +Append STRING to the end of the latest kill in the kill ring.
  13388. +If BEFORE-P is non-nil, prepend STRING to the kill.
  13389. +If `interprogram-cut-function' is set, pass the resulting kill to
  13390. +it.Fcurrent-kill
  13391. +Rotate the yanking point by N places, and then return that kill.
  13392. +If N is zero, `interprogram-paste-function' is set, and calling it
  13393. +returns a string, then that string is added to the front of the
  13394. +kill ring and returned as the latest kill.
  13395. +If optional arg DO-NOT-MOVE is non-nil, then don't actually move the 
  13396. +yanking point; just return the Nth kill forward.Vkill-read-only-ok
  13397. +*Non-nil means don't signal an error for killing read-only text.Fkill-region
  13398. +Kill between point and mark.
  13399. +The text is deleted but saved in the kill ring.
  13400. +The command \[yank] can retrieve it from there.
  13401. +(If you want to kill and then yank immediately, use \[copy-region-as-kill].)
  13402. +If the buffer is read-only, Emacs will beep and refrain from deleting
  13403. +the text, but put the text in the kill ring anyway.  This means that
  13404. +you can use the killing commands to copy text from a read-only buffer.
  13405. +
  13406. +This is the primitive for programs to kill text (as opposed to deleting it).
  13407. +Supply two arguments, character numbers indicating the stretch of text
  13408. + to be killed.
  13409. +Any command that calls this function is a "kill command".
  13410. +If the previous command was also a kill command,
  13411. +the text killed this time appends to the text killed last time
  13412. +to make one entry in the kill ring.Fcopy-region-as-kill
  13413. +Save the region as if killed, but don't kill it.
  13414. +If `interprogram-cut-function' is non-nil, also save the text for a window
  13415. +system cut and paste.Fkill-ring-save
  13416. +Save the region as if killed, but don't kill it.
  13417. +This command is similar to `copy-region-as-kill', except that it gives
  13418. +visual feedback indicating the extent of the region being copied.
  13419. +If `interprogram-cut-function' is non-nil, also save the text for a window
  13420. +system cut and paste.Fappend-next-kill
  13421. +Cause following command, if it kills, to append to previous kill.Fyank-pop
  13422. +Replace just-yanked stretch of killed text with a different stretch.
  13423. +This command is allowed only immediately after a `yank' or a `yank-pop'.
  13424. +At such a time, the region contains a stretch of reinserted
  13425. +previously-killed text.  `yank-pop' deletes that text and inserts in its
  13426. +place a different stretch of killed text.
  13427. +
  13428. +With no argument, the previous kill is inserted.
  13429. +With argument N, insert the Nth previous kill.
  13430. +If N is negative, this is a more recent kill.
  13431. +
  13432. +The sequence of kills wraps around, so that after the oldest one
  13433. +comes the newest one.Fyank
  13434. +Reinsert the last stretch of killed text.
  13435. +More precisely, reinsert the stretch of killed text most recently
  13436. +killed OR yanked.  Put point at end, and set mark at beginning.
  13437. +With just C-u as argument, same but put point at beginning (and mark at end).
  13438. +With argument N, reinsert the Nth most recently killed stretch of killed
  13439. +text.
  13440. +See also the command \[yank-pop].Frotate-yank-pointer
  13441. +Rotate the yanking point in the kill ring.
  13442. +With argument, rotate that many kills forward (or backward, if negative).Finsert-buffer
  13443. +Insert after point the contents of BUFFER.
  13444. +Puts mark after the inserted text.
  13445. +BUFFER may be a buffer or a buffer name.Fappend-to-buffer
  13446. +Append to specified buffer the text of the region.
  13447. +It is inserted into that buffer before its point.
  13448. +
  13449. +When calling from a program, give three arguments:
  13450. +BUFFER (or buffer name), START and END.
  13451. +START and END specify the portion of the current buffer to be copied.Fprepend-to-buffer
  13452. +Prepend to specified buffer the text of the region.
  13453. +It is inserted into that buffer after its point.
  13454. +
  13455. +When calling from a program, give three arguments:
  13456. +BUFFER (or buffer name), START and END.
  13457. +START and END specify the portion of the current buffer to be copied.Fcopy-to-buffer
  13458. +Copy to specified buffer the text of the region.
  13459. +It is inserted into that buffer, replacing existing text there.
  13460. +
  13461. +When calling from a program, give three arguments:
  13462. +BUFFER (or buffer name), START and END.
  13463. +START and END specify the portion of the current buffer to be copied.Vmark-even-if-inactive
  13464. +*Non-nil means you can use the mark even when inactive.
  13465. +This option makes a difference in Transient Mark mode.
  13466. +When the option is non-nil, deactivation of the mark
  13467. +turns off region highlighting, but commands that use the mark
  13468. +behave as if the mark were still active.Fmark
  13469. +Return this buffer's mark value as integer; error if mark inactive.
  13470. +If optional argument FORCE is non-nil, access the mark value
  13471. +even if the mark is not currently active, and return nil
  13472. +if there is no mark at all.
  13473. +
  13474. +If you are using this in an editing command, you are most likely making
  13475. +a mistake; see the documentation of `set-mark'.Fdeactivate-mark
  13476. +Deactivate the mark by setting `mark-active' to nil.
  13477. +(That makes a difference only in Transient Mark mode.)
  13478. +Also runs the hook `deactivate-mark-hook'.Fset-mark
  13479. +Set this buffer's mark to POS.  Don't use this function!
  13480. +That is to say, don't use this function unless you want
  13481. +the user to see that the mark has moved, and you want the previous
  13482. +mark position to be lost.
  13483. +
  13484. +Normally, when a new mark is set, the old one should go on the stack.
  13485. +This is why most applications should use push-mark, not set-mark.
  13486. +
  13487. +Novice Emacs Lisp programmers often try to use the mark for the wrong
  13488. +purposes.  The mark saves a location for the user's convenience.
  13489. +Most editing commands should not alter the mark.
  13490. +To remember a location for internal use in the Lisp program,
  13491. +store it in a Lisp variable.  Example:
  13492. +
  13493. +   (let ((beg (point))) (forward-line 1) (delete-region beg (point))).Vmark-ring
  13494. +The list of former marks of the current buffer, most recent first.Vmark-ring-max
  13495. +*Maximum size of mark ring.  Start discarding off end if gets this big.Vglobal-mark-ring
  13496. +The list of saved global marks, most recent first.Vglobal-mark-ring-max
  13497. +*Maximum size of global mark ring.  Start discarding off end if gets this big.Fset-mark-command
  13498. +Set mark at where point is, or jump to mark.
  13499. +With no prefix argument, set mark, push old mark position on local mark
  13500. +ring, and push mark on global mark ring.
  13501. +With argument, jump to mark, and pop a new position for mark off the ring
  13502. +(does not affect global mark ring).
  13503. +
  13504. +Novice Emacs Lisp programmers often try to use the mark for the wrong
  13505. +purposes.  See the documentation of `set-mark' for more information.Fpush-mark
  13506. +Set mark at LOCATION (point, by default) and push old mark on mark ring.
  13507. +If the last global mark pushed was not in the current buffer,
  13508. +also push LOCATION on the global mark ring.
  13509. +Display `Mark set' unless the optional second arg NOMSG is non-nil.
  13510. +In Transient Mark mode, activate mark if optional third arg ACTIVATE non-nil.
  13511. +
  13512. +Novice Emacs Lisp programmers often try to use the mark for the wrong
  13513. +purposes.  See the documentation of `set-mark' for more information.
  13514. +
  13515. +In Transient Mark mode, this does not activate the mark.Fpop-mark
  13516. +Pop off mark ring into the buffer's actual mark.
  13517. +Does not set point.  Does nothing if mark ring is empty.Fexchange-point-and-mark
  13518. +Put the mark where point is now, and point where the mark is now.
  13519. +This command works even when the mark is not active,
  13520. +and it reactivates the mark.Ftransient-mark-mode
  13521. +Toggle Transient Mark mode.
  13522. +With arg, turn Transient Mark mode on if arg is positive, off otherwise.
  13523. +
  13524. +In Transient Mark mode, when the mark is active, the region is highlighted.
  13525. +Changing the buffer "deactivates" the mark.
  13526. +So do certain other operations that set the mark
  13527. +but whose main purpose is something else--for example,
  13528. +incremental search, \[beginning-of-buffer], and \[end-of-buffer].Fpop-global-mark
  13529. +Pop off global mark ring and jump to the top location.Vnext-line-add-newlines
  13530. +*If non-nil, `next-line' inserts newline to avoid `end of buffer' error.Fnext-line
  13531. +Move cursor vertically down ARG lines.
  13532. +If there is no character in the target line exactly under the current column,
  13533. +the cursor is positioned after the character in that line which spans this
  13534. +column, or at the end of the line if it is not long enough.
  13535. +If there is no line in the buffer after this one, behavior depends on the
  13536. +value of next-line-add-newlines.  If non-nil, a newline character is inserted
  13537. +to create a line and the cursor moves to that line, otherwise the cursor is
  13538. +moved to the end of the buffer (if already at the end of the buffer, an error
  13539. +is signaled).
  13540. +
  13541. +The command \[set-goal-column] can be used to create
  13542. +a semipermanent goal column to which this command always moves.
  13543. +Then it does not try to move vertically.  This goal column is stored
  13544. +in `goal-column', which is nil when there is none.
  13545. +
  13546. +If you are thinking of using this in a Lisp program, consider
  13547. +using `forward-line' instead.  It is usually easier to use
  13548. +and more reliable (no dependence on goal column, etc.).Fprevious-line
  13549. +Move cursor vertically up ARG lines.
  13550. +If there is no character in the target line exactly over the current column,
  13551. +the cursor is positioned after the character in that line which spans this
  13552. +column, or at the end of the line if it is not long enough.
  13553. +
  13554. +The command \[set-goal-column] can be used to create
  13555. +a semipermanent goal column to which this command always moves.
  13556. +Then it does not try to move vertically.
  13557. +
  13558. +If you are thinking of using this in a Lisp program, consider using
  13559. +`forward-line' with a negative argument instead.  It is usually easier
  13560. +to use and more reliable (no dependence on goal column, etc.).Vtrack-eol
  13561. +*Non-nil means vertical motion starting at end of line keeps to ends of lines.
  13562. +This means moving to the end of each line moved onto.
  13563. +The beginning of a blank line does not count as the end of a line.Vgoal-column
  13564. +*Semipermanent goal column for vertical motion, as set by \[set-goal-column], or nil.Vtemporary-goal-column
  13565. +Current goal column for vertical motion.
  13566. +It is the column where point was
  13567. +at the start of current run of vertical motion commands.
  13568. +When the `track-eol' feature is doing its job, the value is 9999.Fset-goal-column
  13569. +Set the current horizontal position as a goal for \[next-line] and \[previous-line].
  13570. +Those commands will move to this position in the line moved to
  13571. +rather than trying to keep the same horizontal position.
  13572. +With a non-nil argument, clears out the goal column
  13573. +so that \[next-line] and \[previous-line] resume vertical motion.
  13574. +The goal column is stored in the variable `goal-column'.Vhscroll-step
  13575. +*The number of columns to try scrolling a window by when point moves out.
  13576. +If that fails to bring point back on frame, point is centered instead.
  13577. +If this is zero, point is always centered after it moves off frame.Fhscroll-point-visible
  13578. +Scrolls the selected window horizontally to make point visible.Fscroll-other-window-down
  13579. +Scroll the "other window" down.Fbeginning-of-buffer-other-window
  13580. +Move point to the beginning of the buffer in the other window.
  13581. +Leave mark at previous position.
  13582. +With arg N, put point N/10 of the way from the true beginning.Fend-of-buffer-other-window
  13583. +Move point to the end of the buffer in the other window.
  13584. +Leave mark at previous position.
  13585. +With arg N, put point N/10 of the way from the true end.Ftranspose-chars
  13586. +Interchange characters around point, moving forward one character.
  13587. +With prefix arg ARG, effect is to take character before point
  13588. +and drag it forward past ARG other characters (backward if ARG negative).
  13589. +If no argument and at end of line, the previous two chars are exchanged.Ftranspose-words
  13590. +Interchange words around point, leaving point at end of them.
  13591. +With prefix arg ARG, effect is to take word before or around point
  13592. +and drag it forward past ARG other words (backward if ARG negative).
  13593. +If ARG is zero, the words around or after point and around or after mark
  13594. +are interchanged.Ftranspose-sexps
  13595. +Like \[transpose-words] but applies to sexps.
  13596. +Does not work on a sexp that point is in the middle of
  13597. +if it is a list or string.Ftranspose-lines
  13598. +Exchange current line and previous line, leaving point after both.
  13599. +With argument ARG, takes previous line and moves it past ARG lines.
  13600. +With argument 0, interchanges line point is in with line mark is in.Vcomment-column
  13601. +*Column to indent right-margin comments to.
  13602. +Setting this variable automatically makes it local to the current buffer.
  13603. +Each mode establishes a different default value for this variable; you
  13604. +can set the value for a particular mode using that mode's hook.Vcomment-start
  13605. +*String to insert to start a new comment, or nil if no comment syntax defined.Vcomment-start-skip
  13606. +*Regexp to match the start of a comment plus everything up to its body.
  13607. +If there are any \(...\) pairs, the comment delimiter text is held to begin
  13608. +at the place matched by the close of the first pair.Vcomment-end
  13609. +*String to insert to end a new comment.
  13610. +Should be an empty string if comments are terminated by end-of-line.Vcomment-indent-hook
  13611. +Obsolete variable for function to compute desired indentation for a comment.
  13612. +This function is called with no args with point at the beginning of
  13613. +the comment's starting delimiter.Vcomment-indent-function
  13614. +Function to compute desired indentation for a comment.
  13615. +This function is called with no args with point at the beginning of
  13616. +the comment's starting delimiter.Findent-for-comment
  13617. +Indent this line's comment to comment column, or insert an empty comment.Fset-comment-column
  13618. +Set the comment column based on point.
  13619. +With no arg, set the comment column to the current column.
  13620. +With just minus as arg, kill any comment on this line.
  13621. +With any other arg, set comment column to indentation of the previous comment
  13622. + and then align or create a comment on this line at that column.Fkill-comment
  13623. +Kill the comment on this line, if any.
  13624. +With argument, kill comments on that many lines starting with this one.Fcomment-region
  13625. +Comment or uncomment each line in the region.
  13626. +With just C-u prefix arg, uncomment each line in region.
  13627. +Numeric prefix arg ARG means use ARG comment characters.
  13628. +If ARG is negative, delete that many comment characters instead.
  13629. +Comments are terminated on each line, even for syntax in which newline does
  13630. +not end the comment.  Blank lines do not get comments.Fbackward-word
  13631. +Move backward until encountering the end of a word.
  13632. +With argument, do this that many times.
  13633. +In programs, it is faster to call `forward-word' with negative arg.Fmark-word
  13634. +Set mark arg words away from point.Fkill-word
  13635. +Kill characters forward until encountering the end of a word.
  13636. +With argument, do this that many times.Fbackward-kill-word
  13637. +Kill characters backward until encountering the end of a word.
  13638. +With argument, do this that many times.Fcurrent-word
  13639. +Return the word point is on (or a nearby word) as a string.
  13640. +If optional arg STRICT is non-nil, return nil unless point is within
  13641. +or adjacent to a word.Vfill-prefix
  13642. +*String for filling to insert at front of new line, or nil for none.
  13643. +Setting this variable automatically makes it local to the current buffer.Vauto-fill-inhibit-regexp
  13644. +*Regexp to match lines which should not be auto-filled.Fauto-fill-mode
  13645. +Toggle auto-fill mode.
  13646. +With arg, turn Auto-Fill mode on if and only if arg is positive.
  13647. +In Auto-Fill mode, inserting a space at a column beyond `fill-column'
  13648. +automatically breaks the line at a previous space.Fauto-fill-function
  13649. +Automatically break line at a previous space, in insertion of text.Fturn-on-auto-fill
  13650. +Unconditionally turn on Auto Fill mode.Fset-fill-column
  13651. +Set `fill-column' to current column, or to argument if given.
  13652. +The variable `fill-column' has a separate value for each buffer.Vcomment-multi-line
  13653. +*Non-nil means \[indent-new-comment-line] should continue same comment
  13654. +on new line, with no new terminator or starter.
  13655. +This is obsolete because you might as well use \[newline-and-indent].Findent-new-comment-line
  13656. +Break line at point and indent, continuing comment if within one.
  13657. +This indents the body of the continued comment
  13658. +under the previous comment line.
  13659. +
  13660. +This command is intended for styles where you write a comment per line,
  13661. +starting a new comment (and terminating it if necessary) on each line.
  13662. +If you want to continue one comment across several lines, use \[newline-and-indent].Fset-selective-display
  13663. +Set `selective-display' to ARG; clear it if no arg.
  13664. +When the value of `selective-display' is a number > 0,
  13665. +lines whose indentation is >= that value are not displayed.
  13666. +The variable `selective-display' has a separate value for each buffer.Voverwrite-mode-textual
  13667. +The string displayed in the mode line when in overwrite mode.Voverwrite-mode-binary
  13668. +The string displayed in the mode line when in binary overwrite mode.Foverwrite-mode
  13669. +Toggle overwrite mode.
  13670. +With arg, turn overwrite mode on iff arg is positive.
  13671. +In overwrite mode, printing characters typed in replace existing text
  13672. +on a one-for-one basis, rather than pushing it to the right.  At the
  13673. +end of a line, such characters extend the line.  Before a tab,
  13674. +such characters insert until the tab is filled in.
  13675. +\[quoted-insert] still inserts characters in overwrite mode; this
  13676. +is supposed to make it easier to insert characters when necessary.Fbinary-overwrite-mode
  13677. +Toggle binary overwrite mode.
  13678. +With arg, turn binary overwrite mode on iff arg is positive.
  13679. +In binary overwrite mode, printing characters typed in replace
  13680. +existing text.  Newlines are not treated specially, so typing at the
  13681. +end of a line joins the line to the next, with the typed character
  13682. +between them.  Typing before a tab character simply replaces the tab
  13683. +with the character typed.
  13684. +\[quoted-insert] replaces the text at the cursor, just as ordinary
  13685. +typing characters do.
  13686. +
  13687. +Note that binary overwrite mode is not its own minor mode; it is a
  13688. +specialization of overwrite-mode, entered by setting the
  13689. +`overwrite-mode' variable to `overwrite-mode-binary'.Vline-number-mode
  13690. +*Non-nil means display line number in mode line.Fline-number-mode
  13691. +Toggle Line Number mode.
  13692. +With arg, turn Line Number mode on iff arg is positive.
  13693. +When Line Number mode is enabled, the line number appears
  13694. +in the mode line.Vblink-matching-paren
  13695. +*Non-nil means show matching open-paren when close-paren is inserted.Vblink-matching-paren-distance
  13696. +*If non-nil, is maximum distance to search for matching open-paren.Fblink-matching-open
  13697. +Move cursor momentarily to the beginning of the sexp before point.Fkeyboard-quit
  13698. +Signal a  quit  condition.
  13699. +During execution of Lisp code, this character causes a quit directly.
  13700. +At top-level, as an editor command, this simply beeps.Fset-variable
  13701. +Set VARIABLE to VALUE.  VALUE is a Lisp object.
  13702. +When using this interactively, supply a Lisp expression for VALUE.
  13703. +If you want VALUE to be a string, you must surround it with doublequotes.
  13704. +
  13705. +If VARIABLE has a `variable-interactive' property, that is used as if
  13706. +it were the arg to `interactive' (which see) to interactively read the value.Fchoose-completion
  13707. +Choose the completion that point is in or next to.Fcompletion-list-mode
  13708. +Major mode for buffers showing lists of possible completions.
  13709. +Type \<completion-list-mode-map>\[choose-completion] in the completion list to select the completion near point.
  13710. +Use \<completion-list-mode-map>\[mouse-choose-completion] to select one with the mouse.Vcommand-line-processed
  13711. +t once command line has been processedVinhibit-startup-message
  13712. +*Non-nil inhibits the initial startup message.
  13713. +This is for use in your personal init file, once you are familiar
  13714. +with the contents of the startup message.Vinhibit-startup-echo-area-message
  13715. +*Non-nil inhibits the initial startup echo area message.
  13716. +Inhibition takes effect only if your `.emacs' file contains
  13717. +a line of this form:
  13718. + (setq inhibit-startup-echo-area-message "YOUR-USER-NAME")
  13719. +If your `.emacs' file is byte-compiled, use the following form instead:
  13720. + (eval '(setq inhibit-startup-echo-area-message "YOUR-USER-NAME"))
  13721. +Thus, someone else using a copy of your `.emacs' file will see
  13722. +the startup message unless he personally acts to inhibit it.Vinhibit-default-init
  13723. +*Non-nil inhibits loading the `default' library.Vcommand-switch-alist
  13724. +Alist of command-line switches.
  13725. +Elements look like (SWITCH-STRING . HANDLER-FUNCTION).
  13726. +HANDLER-FUNCTION receives switch name as sole arg;
  13727. +remaining command-line args are in the variable `command-line-args-left'.Vcommand-line-args-left
  13728. +List of command-line args not yet processed.Vcommand-line-functions
  13729. +List of functions to process unrecognized command-line arguments.
  13730. +Each function should access the dynamically bound variables
  13731. +`argi' (the current argument) and `command-line-args-left' (the remaining
  13732. +arguments).  The function should return non-nil only if it recognizes and
  13733. +processes `argi'.  If it does so, it may consume successive arguments by
  13734. +altering `command-line-args-left' to remove them.Vcommand-line-default-directory
  13735. +Default directory to use for command line arguments.
  13736. +This is normally copied from `default-directory' when Emacs starts.Vbefore-init-hook
  13737. +Functions to call after handling urgent options but before init files.
  13738. +The frame system uses this to open frames to display messages while
  13739. +Emacs loads the user's initialization file.Vafter-init-hook
  13740. +Functions to call after loading the init file (`~/.emacs').
  13741. +The call is not protected by a condition-case, so you can set `debug-on-error'
  13742. +in `.emacs', and put all the actual code on `after-init-hook'.Vterm-setup-hook
  13743. +Functions to be called after loading terminal-specific Lisp code.
  13744. +See `run-hooks'.  This variable exists for users to set,
  13745. +so as to override the definitions made by the terminal-specific file.
  13746. +Emacs never sets this variable itself.Vkeyboard-type
  13747. +The brand of keyboard you are using.
  13748. +This variable is used to define
  13749. +the proper function and keypad keys for use under X.  It is used in a
  13750. +fashion analogous to the environment value TERM.Vwindow-setup-hook
  13751. +Normal hook run to initialize window system display.
  13752. +Emacs runs this hook after processing the command line arguments and loading
  13753. +the user's init file.Vinitial-major-mode
  13754. +Major mode command symbol to use for the initial *scratch* buffer.Vinit-file-user
  13755. +Identity of user whose `.emacs' file is or was read.
  13756. +The value is nil if no init file is being used; otherwise, it may be either
  13757. +the null string, meaning that the init file was taken from the user that
  13758. +originally logged in, or it may be a string containing a user's name.
  13759. +
  13760. +In either of the latter cases, `(concat "~" init-file-user "/")'
  13761. +evaluates to the name of the directory where the `.emacs' file was
  13762. +looked for.Vsite-run-file
  13763. +File containing site-wide run-time initializations.
  13764. +This file is loaded at run-time before `~/.emacs'.  It contains inits
  13765. +that need to be in place for the entire site, but which, due to their
  13766. +higher incidence of change, don't make sense to load into emacs'
  13767. +dumped image.  Thus, the run-time load order is: 1. file described in
  13768. +this variable, if non-nil; 2. `~/.emacs'; 3. `default.el'.Viso-8859-1-locale-regexp
  13769. +Regexp that specifies when to enable the ISO 8859-1 character set.
  13770. +We do that if this regexp matches the locale name
  13771. +specified by the LC_ALL, LC_CTYPE and LANG environment variables.Vuser-mail-address
  13772. +Full mailing address of this user.Flambda
  13773. +Return a lambda expression.
  13774. +A call of the form (lambda ARGS DOCSTRING INTERACTIVE BODY) is
  13775. +self-quoting; the result of evaluating the lambda expression is the
  13776. +expression itself.  The lambda expression may then be treated as a
  13777. +function, i. e. stored as the function value of a symbol, passed to
  13778. +funcall or mapcar, etcetera.
  13779. +ARGS should take the same form as an argument list for a `defun'.
  13780. +DOCSTRING should be a string, as described for `defun'.  It may be omitted.
  13781. +INTERACTIVE should be a call to the function `interactive', which see.
  13782. +It may also be omitted.
  13783. +BODY should be a list of lisp expressions.Fone-window-p
  13784. +Returns non-nil if the selected window is the only window (in its frame).
  13785. +Optional arg NOMINI non-nil means don't count the minibuffer
  13786. +even if it is active.
  13787. +
  13788. +The optional arg ALL-FRAMES t means count windows on all frames.
  13789. +If it is `visible', count windows on all visible frames.
  13790. +ALL-FRAMES nil or omitted means count only the selected frame, 
  13791. +plus the minibuffer it uses (which may be on another frame).
  13792. +If ALL-FRAMES is neither nil nor t, count only the selected frame.Fwalk-windows
  13793. +Cycle through all visible windows, calling PROC for each one.
  13794. +PROC is called with a window as argument.
  13795. +Optional second arg MINIBUF t means count the minibuffer window
  13796. +even if not active.  If MINIBUF is neither t nor nil it means
  13797. +not to count the minibuffer even if it is active.
  13798. +
  13799. +Optional third arg ALL-FRAMES, if t, means include all frames.
  13800. +ALL-FRAMES nil or omitted means cycle within the selected frame,
  13801. +but include the minibuffer window (if MINIBUF says so) that that
  13802. +frame uses, even if it is on another frame.
  13803. +If ALL-FRAMES is neither nil nor t, stick strictly to the selected frame.Fminibuffer-window-active-p
  13804. +Return t if WINDOW (a minibuffer window) is now active.Fsuppress-keymap
  13805. +Make MAP override all normally self-inserting keys to be undefined.
  13806. +Normally, as an exception, digits and minus-sign are set to make prefix args,
  13807. +but optional second arg NODIGITS non-nil treats them like other chars.Vkey-substitution-in-progress
  13808. +Used internally by substitute-key-definition.Fsubstitute-key-definition
  13809. +Replace OLDDEF with NEWDEF for any keys in KEYMAP now defined as OLDDEF.
  13810. +In other words, OLDDEF is replaced with NEWDEF where ever it appears.
  13811. +If optional fourth argument OLDMAP is specified, we redefine
  13812. +in KEYMAP as NEWDEF those chars which are defined as OLDDEF in OLDMAP.Fdefine-key-after
  13813. +Add binding in KEYMAP for KEY => DEFINITION, right after AFTER's binding.
  13814. +This is like `define-key' except that the binding for KEY is placed
  13815. +just after the binding for the event AFTER, instead of at the beginning
  13816. +of the map.
  13817. +The order matters when the keymap is used as a menu.
  13818. +KEY must contain just one event type--that is to say, it must be
  13819. +a string or vector of length 1.Fkeyboard-translate
  13820. +Translate character FROM to TO at a low level.
  13821. +This function creates a `keyboard-translate-table' if necessary
  13822. +and then modifies one entry in it.Vglobal-map
  13823. +Default global keymap mapping Emacs keyboard input into commands.
  13824. +The value is a keymap which is usually (but not necessarily) Emacs's
  13825. +global map.Vesc-map
  13826. +Default keymap for ESC (meta) commands.
  13827. +The normal global definition of the character ESC indirects to this keymap.Vctl-x-map
  13828. +Default keymap for C-x commands.
  13829. +The normal global definition of the character C-x indirects to this keymap.Vctl-x-4-map
  13830. +Keymap for subcommands of C-x 4Vctl-x-5-map
  13831. +Keymap for frame commands.Flistify-key-sequence
  13832. +Convert a key sequence to a list of events.Feventp
  13833. +True if the argument is an event object.Fevent-modifiers
  13834. +Returns a list of symbols representing the modifier keys in event EVENT.
  13835. +The elements of the list may include `meta', `control',
  13836. +`shift', `hyper', `super', `alt', `click', `double', `triple', `drag',
  13837. +and `down'.Fevent-basic-type
  13838. +Returns the basic type of the given event (all modifiers removed).
  13839. +The value is an ASCII printing character (not upper case) or a symbol.Fmouse-movement-p
  13840. +Return non-nil if OBJECT is a mouse movement event.Fevent-start
  13841. +Return the starting position of EVENT.
  13842. +If EVENT is a mouse press or a mouse click, this returns the location
  13843. +of the event.
  13844. +If EVENT is a drag, this returns the drag's starting position.
  13845. +The return value is of the form
  13846. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  13847. +The `posn-' functions access elements of such lists.Fevent-end
  13848. +Return the ending location of EVENT.  EVENT should be a click or drag event.
  13849. +If EVENT is a click event, this function is the same as `event-start'.
  13850. +The return value is of the form
  13851. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  13852. +The `posn-' functions access elements of such lists.Fevent-click-count
  13853. +Return the multi-click count of EVENT, a click or drag event.
  13854. +The return value is a positive integer.Fposn-window
  13855. +Return the window in POSITION.
  13856. +POSITION should be a list of the form
  13857. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  13858. +as returned by the `event-start' and `event-end' functions.Fposn-point
  13859. +Return the buffer location in POSITION.
  13860. +POSITION should be a list of the form
  13861. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  13862. +as returned by the `event-start' and `event-end' functions.Fposn-x-y
  13863. +Return the x and y coordinates in POSITION.
  13864. +POSITION should be a list of the form
  13865. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  13866. +as returned by the `event-start' and `event-end' functions.Fposn-col-row
  13867. +Return the column and row in POSITION, measured in characters.
  13868. +POSITION should be a list of the form
  13869. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  13870. +as returned by the `event-start' and `event-end' functions.
  13871. +For a scroll-bar event, the result column is 0, and the row
  13872. +corresponds to the vertical position of the click in the scroll bar.Fposn-timestamp
  13873. +Return the timestamp of POSITION.
  13874. +POSITION should be a list of the form
  13875. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  13876. +as returned by the `event-start' and `event-end' functions.Fbaud-rate
  13877. +Obsolete function returning the value of the `baud-rate' variable.
  13878. +Please convert your programs to use the variable `baud-rate' directly.Frun-hooks
  13879. +Takes hook names and runs each one in turn.  Major mode functions use this.
  13880. +Each argument should be a symbol, a hook variable.
  13881. +These symbols are processed in the order specified.
  13882. +If a hook symbol has a non-nil value, that value may be a function
  13883. +or a list of functions to be called to run the hook.
  13884. +If the value is a function, it is called with no arguments.
  13885. +If it is a list, the elements are called, in order, with no arguments.Frun-hook-with-args
  13886. +Run HOOK with the specified arguments ARGS.
  13887. +HOOK should be a symbol, a hook variable.  If HOOK has a non-nil
  13888. +value, that value may be a function or a list of functions to be
  13889. +called to run the hook.  If the value is a function, it is called with
  13890. +the given arguments and its return value is returned.  If it is a list
  13891. +of functions, those functions are called, in order,
  13892. +with the given arguments ARGS.
  13893. +It is best not to depend on the value return by `run-hook-with-args',
  13894. +as that may change.Vrun-hooks
  13895. +Variable by which C primitives find the function `run-hooks'.
  13896. +Don't change it.Fadd-hook
  13897. +Add to the value of HOOK the function FUNCTION.
  13898. +FUNCTION is not added if already present.
  13899. +FUNCTION is added (if necessary) at the beginning of the hook list
  13900. +unless the optional argument APPEND is non-nil, in which case
  13901. +FUNCTION is added at the end.
  13902. +
  13903. +HOOK should be a symbol, and FUNCTION may be any valid function.  If
  13904. +HOOK is void, it is first set to nil.  If HOOK's value is a single
  13905. +function, it is changed to a list of functions.Fremove-hook
  13906. +Remove from the value of HOOK the function FUNCTION.
  13907. +HOOK should be a symbol, and FUNCTION may be any valid function.  If
  13908. +FUNCTION isn't the value of HOOK, or, if FUNCTION doesn't appear in the
  13909. +list of hooks to run in HOOK, then nothing is done.  See `add-hook'.Feval-after-load
  13910. +Arrange that, if FILE is ever loaded, FORM will be run at that time.
  13911. +This makes or adds to an entry on `after-load-alist'.
  13912. +It does nothing if FORM is already on the list for FILE.
  13913. +FILE should be the name of a library, with no directory name.Feval-next-after-load
  13914. +Read the following input sexp, and run it whenever FILE is loaded.
  13915. +This makes or adds to an entry on `after-load-alist'.
  13916. +FILE should be the name of a library, with no directory name.Fread-quoted-char
  13917. +Like `read-char', except that if the first character read is an octal
  13918. +digit, we read up to two more octal digits and return the character
  13919. +represented by the octal number consisting of those digits.
  13920. +Optional argument PROMPT specifies a string to use to prompt the user.Fforce-mode-line-update
  13921. +Force the mode-line of the current buffer to be redisplayed.
  13922. +With optional non-nil ALL, force redisplay of all mode-lines.Fmomentary-string-display
  13923. +Momentarily display STRING in the buffer at POS.
  13924. +Display remains until next character is typed.
  13925. +If the char is EXIT-CHAR (optional third arg, default is SPC) it is swallowed;
  13926. +otherwise it is then available as input (as a command if nothing else).
  13927. +Display MESSAGE (optional fourth arg) in the echo area.
  13928. +If MESSAGE is nil, instructions to type EXIT-CHAR are displayed there.Fignore
  13929. +Do nothing and return nil.
  13930. +This function accepts any number of arguments, but ignores them.Ferror
  13931. +Signal an error, making error message by passing all args to `format'.Fstart-process-shell-command
  13932. +Start a program in a subprocess.  Return the process object for it.
  13933. +Args are NAME BUFFER COMMAND &rest COMMAND-ARGS.
  13934. +NAME is name for process.  It is modified if necessary to make it unique.
  13935. +BUFFER is the buffer or (buffer-name) to associate with the process.
  13936. + Process output goes at end of that buffer, unless you specify
  13937. + an output stream or filter function to handle the output.
  13938. + BUFFER may be also nil, meaning that this process is not associated
  13939. + with any buffer
  13940. +Third arg is command name, the name of a shell command.
  13941. +Remaining arguments are the arguments for the command.
  13942. +Wildcards and redirection are handled as usual in the shell.Fsave-match-data
  13943. +Execute the BODY forms, restoring the global value of the match data.Fshell-quote-argument
  13944. +Quote an argument for passing as argument to an inferior shell.Fmake-syntax-table
  13945. +Return a new syntax table.
  13946. +It inherits all letters and control characters from the standard
  13947. +syntax table; other characters are copied from the standard syntax table.Vtext-mode-syntax-table
  13948. +Syntax table used while in text mode.Vtext-mode-abbrev-table
  13949. +Abbrev table used while in text mode.Vtext-mode-map
  13950. +Keymap for Text mode.
  13951. +Many other modes, such as Mail mode, Outline mode and Indented Text mode,
  13952. +inherit all the commands defined in this map.Ftext-mode
  13953. +Major mode for editing text intended for humans to read.
  13954. +Special commands:
  13955. +\{text-mode-map}
  13956. +Turning on Text mode calls the value of the variable `text-mode-hook',
  13957. +if that value is non-nil.Vindented-text-mode-map
  13958. +Keymap for Indented Text mode.
  13959. +All the commands defined in Text mode are inherited unless overridden.Findented-text-mode
  13960. +Major mode for editing text with indented paragraphs.
  13961. +In this mode, paragraphs are delimited only by blank lines.
  13962. +You can thus get the benefit of adaptive filling
  13963. + (see the variable `adaptive-fill-mode').
  13964. +\{indented-text-mode-map}
  13965. +Turning on `indented-text-mode' calls the value of the variable
  13966. +`text-mode-hook', if that value is non-nil.Fcenter-paragraph
  13967. +Center each nonblank line in the paragraph at or after point.
  13968. +See `center-line' for more info.Fcenter-region
  13969. +Center each nonblank line starting in the region.
  13970. +See `center-line' for more info.Fcenter-line
  13971. +Center the line point is on, within the width specified by `fill-column'.
  13972. +This means adjusting the indentation so that it equals
  13973. +the distance between the end of the text and `fill-column'.Vvc-master-templates
  13974. +*Where to look for version-control master files.
  13975. +The first pair corresponding to a given back end is used as a template
  13976. +when creating new masters.Vvc-make-backup-files
  13977. +*If non-nil, backups of registered files are made as with other files.
  13978. +If nil (the default), files covered by version control don't get backups.Vvc-rcs-status
  13979. +*If non-nil, revision and locks on RCS working file displayed in modeline.
  13980. +Otherwise, not displayed.Vvc-file-prop-obarray
  13981. +Obarray for per-file properties.Fvc-name
  13982. +Return the master name of a file, nil if it is not registered.Fvc-backend-deduce
  13983. +Return the version-control type of a file, nil if it is not registered.Fvc-toggle-read-only
  13984. +Change read-only status of current buffer, perhaps via version control.
  13985. +If the buffer is visiting a file registered with version control,
  13986. +then check the file in or out.  Otherwise, just change the read-only flag
  13987. +of the buffer.Fvc-mode-line
  13988. +Set `vc-mode' to display type of version control for FILE.
  13989. +The value is set in the current buffer, which should be the buffer
  13990. +visiting FILE.Fvc-file-not-found-hook
  13991. +When file is not found, try to check it out from RCS or SCCS.
  13992. +Returns t if checkout was successful, nil otherwise.Fcount-windows
  13993. +Returns the number of visible windows.
  13994. +Optional arg NO-MINI non-nil means don't count the minibuffer
  13995. +even if it is active.Fbalance-windows
  13996. +Makes all visible windows the same height (approximately).Vsplit-window-keep-point
  13997. +*If non-nil, split windows keeps the original point in both children.
  13998. +This is often more convenient for editing.
  13999. +If nil, adjust point in each of the two windows to minimize redisplay.
  14000. +This is convenient on slow terminals, but point can move strangely.Fsplit-window-vertically
  14001. +Split current window into two windows, one above the other.
  14002. +The uppermost window gets ARG lines and the other gets the rest.
  14003. +Negative arg means select the size of the lowermost window instead.
  14004. +With no argument, split equally or close to it.
  14005. +Both windows display the same buffer now current.
  14006. +
  14007. +If the variable split-window-keep-point is non-nil, both new windows
  14008. +will get the same value of point as the current window.  This is often
  14009. +more convenient for editing.
  14010. +
  14011. +Otherwise, we chose window starts so as to minimize the amount of
  14012. +redisplay; this is convenient on slow terminals.  The new selected
  14013. +window is the one that the current value of point appears in.  The
  14014. +value of point can change if the text around point is hidden by the
  14015. +new mode line.Fsplit-window-horizontally
  14016. +Split current window into two windows side by side.
  14017. +This window becomes the leftmost of the two, and gets ARG columns.
  14018. +Negative arg means select the size of the rightmost window instead.
  14019. +No arg means split equally.Fenlarge-window-horizontally
  14020. +Make current window ARG columns wider.Fshrink-window-horizontally
  14021. +Make current window ARG columns narrower.Fshrink-window-if-larger-than-buffer
  14022. +Shrink the WINDOW to be as small as possible to display its contents.
  14023. +Do not shrink to less than `window-min-height' lines.
  14024. +Do nothing if the buffer contains more lines than the present window height,
  14025. +or if some of the window's contents are scrolled out of view,
  14026. +or if the window is not the full width of the frame,
  14027. +or if the window is the only window of its frame.Vemacs-version
  14028. +Version numbers of this version of Emacs.Vemacs-build-time
  14029. +Time at which Emacs was dumped out.Femacs-version
  14030. +Return string describing the version of Emacs that is running.
  14031. +If optional argument HERE is non-nil, insert string at point.
  14032. +Don't use this function in programs to choose actions according
  14033. +to the system configuration; look at `system-configuration' instead.
  14034. \ No newline at end of file
  14035. diff -rup --new-file baseline/fsf/emacs/etc/DOC-19.28.1 amiga/fsf/emacs/etc/DOC-19.28.1
  14036. --- baseline/fsf/emacs/etc/DOC-19.28.1    Wed Dec 31 17:00:00 1969
  14037. +++ amiga/fsf/emacs/etc/DOC-19.28.1    Sat Sep 28 00:00:00 1996
  14038. @@ -0,0 +1,11272 @@
  14039. +Fredraw-frame
  14040. +Clear frame FRAME and output again what is supposed to appear on it.
  14041. +
  14042. +(redraw-frame FRAME)Fredraw-frame
  14043. +Clear frame FRAME and output again what is supposed to appear on it.
  14044. +
  14045. +(redraw-frame FRAME)Fredraw-display
  14046. +Clear and redisplay all visible frames.
  14047. +
  14048. +(redraw-display)Fframe-or-buffer-changed-p
  14049. +Return non-nil if the frame and buffer state appears to have changed.
  14050. +The state variable is an internal vector containing all frames and buffers,
  14051. +along with the buffers' read-only and modified flags, which allows a fast
  14052. +check to see whether the menu bars might need to be recomputed.
  14053. +If this function returns non-nil, it updates the internal vector to reflect
  14054. +the current state.
  14055. +
  14056. +
  14057. +(frame-or-buffer-changed-p)Fopen-termscript
  14058. +Start writing all terminal output to FILE as well as the terminal.
  14059. +FILE = nil means just close any termscript file currently open.
  14060. +
  14061. +(open-termscript FILE)Fsend-string-to-terminal
  14062. +Send STRING to the terminal without alteration.
  14063. +Control characters in STRING will have terminal-dependent effects.
  14064. +
  14065. +(send-string-to-terminal STR)Fding
  14066. +Beep, or flash the screen.
  14067. +Also, unless an argument is given,
  14068. +terminate any keyboard macro currently executing.
  14069. +
  14070. +(ding &optional ARG)Fsleep-for
  14071. +Pause, without updating display, for SECONDS seconds.
  14072. +SECONDS may be a floating-point value, meaning that you can wait for a
  14073. +fraction of a second.  Optional second arg MILLISECONDS specifies an
  14074. +additional wait period, in milliseconds; this may be useful if your
  14075. +Emacs was built without floating point support.
  14076. +(Not all operating systems support waiting for a fraction of a second.)
  14077. +
  14078. +(sleep-for SECONDS &optional MILLISECONDS)Fsit-for
  14079. +Perform redisplay, then wait for SECONDS seconds or until input is available.
  14080. +SECONDS may be a floating-point value, meaning that you can wait for a
  14081. +fraction of a second.  Optional second arg MILLISECONDS specifies an
  14082. +additional wait period, in milliseconds; this may be useful if your
  14083. +Emacs was built without floating point support.
  14084. +(Not all operating systems support waiting for a fraction of a second.)
  14085. +Optional third arg non-nil means don't redisplay, just wait for input.
  14086. +Redisplay is preempted as always if input arrives, and does not happen
  14087. +if input is available before it starts.
  14088. +Value is t if waited the full time with no input arriving.
  14089. +
  14090. +(sit-for SECONDS &optional MILLISECONDS NODISP)Vbaud-rate
  14091. +*The output baud rate of the terminal.
  14092. +On most systems, changing this value will affect the amount of padding
  14093. +and the other strategic decisions made during redisplay.Vinverse-video
  14094. +*Non-nil means invert the entire frame display.
  14095. +This means everything is in inverse video which otherwise would not be.Vvisible-bell
  14096. +*Non-nil means try to flash the frame to represent a bell.Vno-redraw-on-reenter
  14097. +*Non-nil means no need to redraw entire frame after suspending.
  14098. +A non-nil value is useful if the terminal can automatically preserve
  14099. +Emacs's frame display when you reenter Emacs.
  14100. +It is up to you to set this variable if your terminal can do that.Vwindow-system
  14101. +A symbol naming the window-system under which Emacs is running
  14102. +(such as `x'), or nil if emacs is running on an ordinary terminal.Vwindow-system-version
  14103. +The version number of the window system in use.
  14104. +For X windows, this is 10 or 11.Vcursor-in-echo-area
  14105. +Non-nil means put cursor in minibuffer, at end of any message there.Vglyph-table
  14106. +Table defining how to output a glyph code to the frame.
  14107. +If not nil, this is a vector indexed by glyph code to define the glyph.
  14108. +Each element can be:
  14109. + integer: a glyph code which this glyph is an alias for.
  14110. + string: output this glyph using that string (not impl. in X windows).
  14111. + nil: this glyph mod 256 is char code to output,
  14112. +    and this glyph / 256 is face code for X windows (see `face-id').Vstandard-display-table
  14113. +Display table to use for buffers that specify none.
  14114. +See `buffer-display-table' for more information.Fframep
  14115. +Return non-nil if OBJECT is a frame.
  14116. +Value is t for a termcap frame (a character-only terminal),
  14117. +`x' for an Emacs frame that is really an X window.
  14118. +Also see `live-frame-p'.
  14119. +
  14120. +(framep OBJECT)Fframe-live-p
  14121. +Return non-nil if OBJECT is a frame which has not been deleted.
  14122. +Value is nil if OBJECT is not a live frame.  If object is a live
  14123. +frame, the return value indicates what sort of output device it is
  14124. +displayed on.  Value is t for a termcap frame (a character-only
  14125. +terminal), `x' for an Emacs frame being displayed in an X window.
  14126. +
  14127. +(frame-live-p OBJECT)Fselect-frame
  14128. +Select the frame FRAME.
  14129. +Subsequent editing commands apply to its selected window.
  14130. +The selection of FRAME lasts until the next time the user does
  14131. +something to select a different frame, or until the next time this
  14132. +function is called.
  14133. +
  14134. +(select-frame FRAME &optional NO-ENTER)Fhandle-switch-frame
  14135. +Handle a switch-frame event EVENT.
  14136. +Switch-frame events are usually bound to this function.
  14137. +A switch-frame event tells Emacs that the window manager has requested
  14138. +that the user's events be directed to the frame mentioned in the event.
  14139. +This function selects the selected window of the frame of EVENT.
  14140. +
  14141. +If EVENT is frame object, handle it as if it were a switch-frame event
  14142. +to that frame.
  14143. +
  14144. +(handle-switch-frame FRAME &optional NO-ENTER)Fselected-frame
  14145. +Return the frame that is now selected.
  14146. +
  14147. +(selected-frame)Fwindow-frame
  14148. +Return the frame object that window WINDOW is on.
  14149. +
  14150. +(window-frame WINDOW)Fframe-first-window
  14151. +Returns the topmost, leftmost window of FRAME.
  14152. +If omitted, FRAME defaults to the currently selected frame.
  14153. +
  14154. +(frame-first-window &optional FRAME)Fframe-root-window
  14155. +Returns the root-window of FRAME.
  14156. +If omitted, FRAME defaults to the currently selected frame.
  14157. +
  14158. +(frame-root-window &optional FRAME)Fframe-selected-window
  14159. +Return the selected window of frame object FRAME.
  14160. +If omitted, FRAME defaults to the currently selected frame.
  14161. +
  14162. +(frame-selected-window &optional FRAME)Fset-frame-selected-window
  14163. +Set the selected window of frame object FRAME to WINDOW.
  14164. +If FRAME is nil, the selected frame is used.
  14165. +If FRAME is the selected frame, this makes WINDOW the selected window.
  14166. +
  14167. +(set-frame-selected-window FRAME WINDOW)Fframe-list
  14168. +Return a list of all frames.
  14169. +
  14170. +(frame-list)Fnext-frame
  14171. +Return the next frame in the frame list after FRAME.
  14172. +By default, skip minibuffer-only frames.
  14173. +If omitted, FRAME defaults to the selected frame.
  14174. +If optional argument MINIFRAME is nil, exclude minibuffer-only frames.
  14175. +If MINIBUF is a window, include only its own frame
  14176. +and any frame now using that window as the minibuffer.
  14177. +If MINIFRAME is `visible', include all visible frames.
  14178. +If MINIBUF is 0, include all visible and iconified frames.
  14179. +Otherwise, include all frames.
  14180. +
  14181. +(next-frame &optional FRAME MINIFRAME)Fprevious-frame
  14182. +Return the previous frame in the frame list before FRAME.
  14183. +By default, skip minibuffer-only frames.
  14184. +If omitted, FRAME defaults to the selected frame.
  14185. +If optional argument MINIFRAME is nil, exclude minibuffer-only frames.
  14186. +If MINIBUF is a window, include only its own frame
  14187. +and any frame now using that window as the minibuffer.
  14188. +If MINIFRAME is `visible', include all visible frames.
  14189. +If MINIBUF is 0, include all visible and iconified frames.
  14190. +Otherwise, include all frames.
  14191. +
  14192. +(previous-frame &optional FRAME MINIFRAME)Fdelete-frame
  14193. +Delete FRAME, permanently eliminating it from use.
  14194. +If omitted, FRAME defaults to the selected frame.
  14195. +A frame may not be deleted if its minibuffer is used by other frames.
  14196. +Normally, you may not delete a frame if all other frames are invisible,
  14197. +but if the second optional argument FORCE is non-nil, you may do so.
  14198. +
  14199. +(delete-frame &optional FRAME FORCE)Fmouse-position
  14200. +Return a list (FRAME X . Y) giving the current mouse frame and position.
  14201. +The position is given in character cells, where (0, 0) is the
  14202. +upper-left corner.
  14203. +If Emacs is running on a mouseless terminal or hasn't been programmed
  14204. +to read the mouse position, it returns the selected frame for FRAME
  14205. +and nil for X and Y.
  14206. +
  14207. +(mouse-position)Fmouse-pixel-position
  14208. +Return a list (FRAME X . Y) giving the current mouse frame and position.
  14209. +The position is given in pixel units, where (0, 0) is the
  14210. +upper-left corner.
  14211. +If Emacs is running on a mouseless terminal or hasn't been programmed
  14212. +to read the mouse position, it returns the selected frame for FRAME
  14213. +and nil for X and Y.
  14214. +
  14215. +(mouse-pixel-position)Fset-mouse-position
  14216. +Move the mouse pointer to the center of character cell (X,Y) in FRAME.
  14217. +WARNING:  If you use this under X windows,
  14218. +you should call `unfocus-frame' afterwards.
  14219. +
  14220. +(set-mouse-position FRAME X Y)Fset-mouse-pixel-position
  14221. +Move the mouse pointer to pixel position (X,Y) in FRAME.
  14222. +WARNING:  If you use this under X windows,
  14223. +you should call `unfocus-frame' afterwards.
  14224. +
  14225. +(set-mouse-pixel-position FRAME X Y)Fmake-frame-visible
  14226. +Make the frame FRAME visible (assuming it is an X-window).
  14227. +If omitted, FRAME defaults to the currently selected frame.
  14228. +
  14229. +(make-frame-visible &optional FRAME)Fmake-frame-invisible
  14230. +Make the frame FRAME invisible (assuming it is an X-window).
  14231. +If omitted, FRAME defaults to the currently selected frame.
  14232. +Normally you may not make FRAME invisible if all other frames are invisible,
  14233. +but if the second optional argument FORCE is non-nil, you may do so.
  14234. +
  14235. +(make-frame-invisible &optional FRAME FORCE)Ficonify-frame
  14236. +Make the frame FRAME into an icon.
  14237. +If omitted, FRAME defaults to the currently selected frame.
  14238. +
  14239. +(iconify-frame &optional FRAME)Fframe-visible-p
  14240. +Return t if FRAME is now "visible" (actually in use for display).
  14241. +A frame that is not "visible" is not updated and, if it works through
  14242. +a window system, it may not show at all.
  14243. +Return the symbol `icon' if frame is visible only as an icon.
  14244. +
  14245. +(frame-visible-p FRAME)Fvisible-frame-list
  14246. +Return a list of all frames now "visible" (being updated).
  14247. +
  14248. +(visible-frame-list)Fraise-frame
  14249. +Bring FRAME to the front, so it occludes any frames it overlaps.
  14250. +If FRAME is invisible, make it visible.
  14251. +If Emacs is displaying on an ordinary terminal or some other device which
  14252. +doesn't support multiple overlapping frames, this function does nothing.
  14253. +
  14254. +(raise-frame FRAME)Flower-frame
  14255. +Send FRAME to the back, so it is occluded by any frames that overlap it.
  14256. +If Emacs is displaying on an ordinary terminal or some other device which
  14257. +doesn't support multiple overlapping frames, this function does nothing.
  14258. +
  14259. +(lower-frame FRAME)Fredirect-frame-focus
  14260. +Arrange for keystrokes typed at FRAME to be sent to FOCUS-FRAME.
  14261. +In other words, switch-frame events caused by events in FRAME will
  14262. +request a switch to FOCUS-FRAME, and `last-event-frame' will be
  14263. +FOCUS-FRAME after reading an event typed at FRAME.
  14264. +
  14265. +If FOCUS-FRAME is omitted or nil, any existing redirection is
  14266. +cancelled, and the frame again receives its own keystrokes.
  14267. +
  14268. +Focus redirection is useful for temporarily redirecting keystrokes to
  14269. +a surrogate minibuffer frame when a frame doesn't have its own
  14270. +minibuffer window.
  14271. +
  14272. +A frame's focus redirection can be changed by select-frame.  If frame
  14273. +FOO is selected, and then a different frame BAR is selected, any
  14274. +frames redirecting their focus to FOO are shifted to redirect their
  14275. +focus to BAR.  This allows focus redirection to work properly when the
  14276. +user switches from one frame to another using `select-window'.
  14277. +
  14278. +This means that a frame whose focus is redirected to itself is treated
  14279. +differently from a frame whose focus is redirected to nil; the former
  14280. +is affected by select-frame, while the latter is not.
  14281. +
  14282. +The redirection lasts until `redirect-frame-focus' is called to change it.
  14283. +
  14284. +(redirect-frame-focus FRAME &optional FOCUS-FRAME)Fframe-focus
  14285. +Return the frame to which FRAME's keystrokes are currently being sent.
  14286. +This returns nil if FRAME's focus is not redirected.
  14287. +See `redirect-frame-focus'.
  14288. +
  14289. +(frame-focus FRAME)Fframe-parameters
  14290. +Return the parameters-alist of frame FRAME.
  14291. +It is a list of elements of the form (PARM . VALUE), where PARM is a symbol.
  14292. +The meaningful PARMs depend on the kind of frame.
  14293. +If FRAME is omitted, return information on the currently selected frame.
  14294. +
  14295. +(frame-parameters &optional FRAME)Fmodify-frame-parameters
  14296. +Modify the parameters of frame FRAME according to ALIST.
  14297. +ALIST is an alist of parameters to change and their new values.
  14298. +Each element of ALIST has the form (PARM . VALUE), where PARM is a symbol.
  14299. +The meaningful PARMs depend on the kind of frame; undefined PARMs are ignored.
  14300. +
  14301. +(modify-frame-parameters FRAME ALIST)Fframe-char-height
  14302. +Height in pixels of a line in the font in frame FRAME.
  14303. +If FRAME is omitted, the selected frame is used.
  14304. +For a terminal frame, the value is always 1.
  14305. +
  14306. +(frame-char-height &optional FRAME)Fframe-char-width
  14307. +Width in pixels of characters in the font in frame FRAME.
  14308. +If FRAME is omitted, the selected frame is used.
  14309. +The width is the same for all characters, because
  14310. +currently Emacs supports only fixed-width fonts.
  14311. +For a terminal screen, the value is always 1.
  14312. +
  14313. +(frame-char-width &optional FRAME)Fframe-pixel-height
  14314. +Return a FRAME's height in pixels.
  14315. +For a terminal frame, the result really gives the height in characters.
  14316. +If FRAME is omitted, the selected frame is used.
  14317. +
  14318. +(frame-pixel-height &optional FRAME)Fframe-pixel-width
  14319. +Return FRAME's width in pixels.
  14320. +For a terminal frame, the result really gives the width in characters.
  14321. +If FRAME is omitted, the selected frame is used.
  14322. +
  14323. +(frame-pixel-width &optional FRAME)Fset-frame-height
  14324. +Specify that the frame FRAME has LINES lines.
  14325. +Optional third arg non-nil means that redisplay should use LINES lines
  14326. +but that the idea of the actual height of the frame should not be changed.
  14327. +
  14328. +(set-frame-height FRAME ROWS &optional PRETEND)Fset-frame-width
  14329. +Specify that the frame FRAME has COLS columns.
  14330. +Optional third arg non-nil means that redisplay should use COLS columns
  14331. +but that the idea of the actual width of the frame should not be changed.
  14332. +
  14333. +(set-frame-width FRAME COLS &optional PRETEND)Fset-frame-size
  14334. +Sets size of FRAME to COLS by ROWS, measured in characters.
  14335. +
  14336. +(set-frame-size FRAME COLS ROWS)Fset-frame-position
  14337. +Sets position of FRAME in pixels to XOFFSET by YOFFSET.
  14338. +This is actually the position of the upper left corner of the frame.
  14339. +Negative values for XOFFSET or YOFFSET are interpreted relative to
  14340. +the rightmost or bottommost possible position (that stays within the screen).
  14341. +
  14342. +(set-frame-position FRAME XOFFSET YOFFSET)Vterminal-frame
  14343. +The initial frame-object, which represents Emacs's stdout.Vemacs-iconified
  14344. +Non-nil if all of emacs is iconified and frame updates are not needed.Vdefault-minibuffer-frame
  14345. +Minibufferless frames use this frame's minibuffer.
  14346. +
  14347. +Emacs cannot create minibufferless frames unless this is set to an
  14348. +appropriate surrogate.
  14349. +
  14350. +Emacs consults this variable only when creating minibufferless
  14351. +frames; once the frame is created, it sticks with its assigned
  14352. +minibuffer, no matter what this variable is set to.  This means that
  14353. +this variable doesn't necessarily say anything meaningful about the
  14354. +current set of frames, or where the minibuffer is currently being
  14355. +displayed.Vdefault-frame-alist
  14356. +Alist of default values for frame creation.
  14357. +These may be set in your init file, like this:
  14358. +  (setq default-frame-alist '((width . 80) (height . 55)))
  14359. +These override values given in window system configuration data, like
  14360. +X Windows' defaults database.
  14361. +For values specific to the first Emacs frame, see `initial-frame-alist'.
  14362. +For values specific to the separate minibuffer frame, see
  14363. +`minibuffer-frame-alist'.Fframe-height
  14364. +Return number of lines available for display on FRAME.
  14365. +If FRAME is omitted, describe the currently selected frame.
  14366. +
  14367. +(frame-height &optional FRAME)Fframe-width
  14368. +Return number of columns available for display on FRAME.
  14369. +If FRAME is omitted, describe the currently selected frame.
  14370. +
  14371. +(frame-width &optional FRAME)Fset-screen-height
  14372. +Tell redisplay that the screen has LINES lines.
  14373. +Optional second arg non-nil means that redisplay should use LINES lines
  14374. +but that the idea of the actual height of the screen should not be changed.
  14375. +
  14376. +(set-screen-height LINES &optional PRETEND)Fset-screen-width
  14377. +Tell redisplay that the screen has COLS columns.
  14378. +Optional second arg non-nil means that redisplay should use COLS columns
  14379. +but that the idea of the actual width of the screen should not be changed.
  14380. +
  14381. +(set-screen-width COLS &optional PRETEND)Fmouse-pixel-position
  14382. +Return a list (FRAME X . Y) giving the current mouse frame and position.
  14383. +The position is given in pixel units, where (0, 0) is the
  14384. +upper-left corner.
  14385. +If Emacs is running on a mouseless terminal or hasn't been programmed
  14386. +to read the mouse position, it returns the selected frame for FRAME
  14387. +and nil for X and Y.
  14388. +
  14389. +(mouse-pixel-position)Vterminal-frame
  14390. +The initial frame-object, which represents Emacs's stdout.Vdefault-frame-alist
  14391. +Alist of default values for frame creation.
  14392. +These may be set in your init file, like this:
  14393. +  (setq default-frame-alist '((width . 80) (height . 55)))
  14394. +These override values given in window system configuration data, like
  14395. +X Windows' defaults database.
  14396. +For values specific to the first Emacs frame, see `initial-frame-alist'.
  14397. +For values specific to the separate minibuffer frame, see
  14398. +`minibuffer-frame-alist'.Vglobal-mode-string
  14399. +String (or mode line construct) included (normally) in `mode-line-format'.Voverlay-arrow-position
  14400. +Marker for where to display an arrow on top of the buffer text.
  14401. +This must be the beginning of a line in order to work.
  14402. +See also `overlay-arrow-string'.Voverlay-arrow-string
  14403. +String to display as an arrow.  See also `overlay-arrow-position'.Vscroll-step
  14404. +*The number of lines to try scrolling a window by when point moves out.
  14405. +If that fails to bring point back on frame, point is centered instead.
  14406. +If this is zero, point is always centered after it moves off frame.Vdebug-end-pos
  14407. +Don't askVtruncate-partial-width-windows
  14408. +*Non-nil means truncate lines in all windows less than full frame wide.Vmode-line-inverse-video
  14409. +*Non-nil means use inverse video for the mode line.Vline-number-display-limit
  14410. +*Maximum buffer size for which line number should be displayed.Vhighlight-nonselected-windows
  14411. +*Non-nil means highlight region even in nonselected windows.Fwindowp
  14412. +Returns t if OBJ is a window.
  14413. +
  14414. +(windowp OBJ)Fwindow-live-p
  14415. +Returns t if OBJ is a window which is currently visible.
  14416. +
  14417. +(window-live-p OBJ)Fselected-window
  14418. +Return the window that the cursor now appears in and commands apply to.
  14419. +
  14420. +(selected-window)Fminibuffer-window
  14421. +Return the window used now for minibuffers.
  14422. +If the optional argument FRAME is specified, return the minibuffer window
  14423. +used by that frame.
  14424. +
  14425. +(minibuffer-window &optional FRAME)Fwindow-minibuffer-p
  14426. +Returns non-nil if WINDOW is a minibuffer window.
  14427. +
  14428. +(window-minibuffer-p &optional WINDOW)Fpos-visible-in-window-p
  14429. +Return t if position POS is currently on the frame in WINDOW.
  14430. +Returns nil if that position is scrolled vertically out of view.
  14431. +POS defaults to point; WINDOW, to the selected window.
  14432. +
  14433. +(pos-visible-in-window-p &optional POS WINDOW)Fwindow-buffer
  14434. +Return the buffer that WINDOW is displaying.
  14435. +
  14436. +(window-buffer &optional WINDOW)Fwindow-height
  14437. +Return the number of lines in WINDOW (including its mode line).
  14438. +
  14439. +(window-height &optional WINDOW)Fwindow-width
  14440. +Return the number of display columns in WINDOW.
  14441. +This is the width that is usable columns available for text in WINDOW.
  14442. +If you want to find out how many columns WINDOW takes up,
  14443. +use  (let ((edges (window-edges))) (- (nth 2 edges) (nth 0 edges))).
  14444. +
  14445. +(window-width &optional WINDOW)Fwindow-hscroll
  14446. +Return the number of columns by which WINDOW is scrolled from left margin.
  14447. +
  14448. +(window-hscroll &optional WINDOW)Fset-window-hscroll
  14449. +Set number of columns WINDOW is scrolled from left margin to NCOL.
  14450. +NCOL should be zero or positive.
  14451. +
  14452. +(set-window-hscroll WINDOW NCOL)Fwindow-edges
  14453. +Return a list of the edge coordinates of WINDOW.
  14454. +(LEFT TOP RIGHT BOTTOM), all relative to 0, 0 at top left corner of frame.
  14455. +RIGHT is one more than the rightmost column used by WINDOW,
  14456. +and BOTTOM is one more than the bottommost row used by WINDOW
  14457. + and its mode-line.
  14458. +
  14459. +(window-edges &optional WINDOW)Fcoordinates-in-window-p
  14460. +Return non-nil if COORDINATES are in WINDOW.
  14461. +COORDINATES is a cons of the form (X . Y), X and Y being distances
  14462. +measured in characters from the upper-left corner of the frame.
  14463. +(0 .  0) denotes the character in the upper left corner of the
  14464. +frame.
  14465. +If COORDINATES are in the text portion of WINDOW,
  14466. +   the coordinates relative to the window are returned.
  14467. +If they are in the mode line of WINDOW, `mode-line' is returned.
  14468. +If they are on the border between WINDOW and its right sibling,
  14469. +   `vertical-line' is returned.
  14470. +
  14471. +(coordinates-in-window-p COORDINATES WINDOW)Fwindow-at
  14472. +Return window containing coordinates X and Y on FRAME.
  14473. +If omitted, FRAME defaults to the currently selected frame.
  14474. +The top left corner of the frame is considered to be row 0,
  14475. +column 0.
  14476. +
  14477. +(window-at X Y &optional FRAME)Fwindow-point
  14478. +Return current value of point in WINDOW.
  14479. +For a nonselected window, this is the value point would have
  14480. +if that window were selected.
  14481. +
  14482. +Note that, when WINDOW is the selected window and its buffer
  14483. +is also currently selected, the value returned is the same as (point).
  14484. +It would be more strictly correct to return the `top-level' value
  14485. +of point, outside of any save-excursion forms.
  14486. +But that is hard to define.
  14487. +
  14488. +(window-point &optional WINDOW)Fwindow-start
  14489. +Return position at which display currently starts in WINDOW.
  14490. +
  14491. +(window-start &optional WINDOW)Fwindow-end
  14492. +Return position at which display currently ends in WINDOW.
  14493. +This is updated by redisplay, when it runs to completion.
  14494. +Simply changing the buffer text or setting `window-start'
  14495. +does not update this value.
  14496. +
  14497. +(window-end &optional WINDOW)Fset-window-point
  14498. +Make point value in WINDOW be at position POS in WINDOW's buffer.
  14499. +
  14500. +(set-window-point WINDOW POS)Fset-window-start
  14501. +Make display in WINDOW start at position POS in WINDOW's buffer.
  14502. +Optional third arg NOFORCE non-nil inhibits next redisplay
  14503. +from overriding motion of point in order to display at this exact start.
  14504. +
  14505. +(set-window-start WINDOW POS &optional NOFORCE)Fwindow-dedicated-p
  14506. +Return WINDOW's dedicated object, usually t or nil.
  14507. +See also `set-window-dedicated-p'.
  14508. +
  14509. +(window-dedicated-p WINDOW)Fset-window-dedicated-p
  14510. +Control whether WINDOW is dedicated to the buffer it displays.
  14511. +If it is dedicated, Emacs will not automatically change
  14512. +which buffer appears in it.
  14513. +The second argument is the new value for the dedication flag;
  14514. +non-nil means yes.
  14515. +
  14516. +(set-window-dedicated-p WINDOW ARG)Fwindow-display-table
  14517. +Return the display-table that WINDOW is using.
  14518. +
  14519. +(window-display-table &optional WINDOW)Fset-window-display-table
  14520. +Set WINDOW's display-table to TABLE.
  14521. +
  14522. +(set-window-display-table WINDOW TABLE)Fdelete-window
  14523. +Remove WINDOW from the display.  Default is selected window.
  14524. +
  14525. +(delete-window &optional WINDOW)Fnext-window
  14526. +Return next window after WINDOW in canonical ordering of windows.
  14527. +If omitted, WINDOW defaults to the selected window.
  14528. +
  14529. +Optional second arg MINIBUF t means count the minibuffer window even
  14530. +if not active.  MINIBUF nil or omitted means count the minibuffer iff
  14531. +it is active.  MINIBUF neither t nor nil means not to count the
  14532. +minibuffer even if it is active.
  14533. +
  14534. +Several frames may share a single minibuffer; if the minibuffer
  14535. +counts, all windows on all frames that share that minibuffer count
  14536. +too.  Therefore, `next-window' can be used to iterate through the
  14537. +set of windows even when the minibuffer is on another frame.  If the
  14538. +minibuffer does not count, only windows from WINDOW's frame count.
  14539. +
  14540. +Optional third arg ALL-FRAMES t means include windows on all frames.
  14541. +ALL-FRAMES nil or omitted means cycle within the frames as specified
  14542. +above.  ALL-FRAMES = `visible' means include windows on all visible frames.
  14543. +ALL-FRAMES = 0 means include windows on all visible and iconified frames.
  14544. +Anything else means restrict to WINDOW's frame.
  14545. +
  14546. +If you use consistent values for MINIBUF and ALL-FRAMES, you can use
  14547. +`next-window' to iterate through the entire cycle of acceptable
  14548. +windows, eventually ending up back at the window you started with.
  14549. +`previous-window' traverses the same cycle, in the reverse order.
  14550. +
  14551. +(next-window &optional WINDOW MINIBUF ALL-FRAMES)Fprevious-window
  14552. +Return the window preceeding WINDOW in canonical ordering of windows.
  14553. +If omitted, WINDOW defaults to the selected window.
  14554. +
  14555. +Optional second arg MINIBUF t means count the minibuffer window even
  14556. +if not active.  MINIBUF nil or omitted means count the minibuffer iff
  14557. +it is active.  MINIBUF neither t nor nil means not to count the
  14558. +minibuffer even if it is active.
  14559. +
  14560. +Several frames may share a single minibuffer; if the minibuffer
  14561. +counts, all windows on all frames that share that minibuffer count
  14562. +too.  Therefore, `previous-window' can be used to iterate through
  14563. +the set of windows even when the minibuffer is on another frame.  If
  14564. +the minibuffer does not count, only windows from WINDOW's frame count
  14565. +
  14566. +Optional third arg ALL-FRAMES t means include windows on all frames.
  14567. +ALL-FRAMES nil or omitted means cycle within the frames as specified
  14568. +above.  ALL-FRAMES = `visible' means include windows on all visible frames.
  14569. +ALL-FRAMES = 0 means include windows on all visible and iconified frames.
  14570. +Anything else means restrict to WINDOW's frame.
  14571. +
  14572. +If you use consistent values for MINIBUF and ALL-FRAMES, you can use
  14573. +`previous-window' to iterate through the entire cycle of acceptable
  14574. +windows, eventually ending up back at the window you started with.
  14575. +`next-window' traverses the same cycle, in the reverse order.
  14576. +
  14577. +(previous-window &optional WINDOW MINIBUF ALL-FRAMES)Fother-window
  14578. +Select the ARG'th different window on this frame.
  14579. +All windows on current frame are arranged in a cyclic order.
  14580. +This command selects the window ARG steps away in that order.
  14581. +A negative ARG moves in the opposite order.  If the optional second
  14582. +argument ALL_FRAMES is non-nil, cycle through all frames.
  14583. +
  14584. +(other-window N &optional ALL-FRAMES)Fget-lru-window
  14585. +Return the window least recently selected or used for display.
  14586. +If optional argument FRAME is `visible', search all visible frames.
  14587. +If FRAME is 0, search all visible and iconified frames.
  14588. +If FRAME is t, search all frames.
  14589. +If FRAME is nil, search only the selected frame.
  14590. +If FRAME is a frame, search only that frame.
  14591. +
  14592. +(get-lru-window &optional FRAME)Fget-largest-window
  14593. +Return the largest window in area.
  14594. +If optional argument FRAME is `visible', search all visible frames.
  14595. +If FRAME is 0, search all visible and iconified frames.
  14596. +If FRAME is t, search all frames.
  14597. +If FRAME is nil, search only the selected frame.
  14598. +If FRAME is a frame, search only that frame.
  14599. +
  14600. +(get-largest-window &optional FRAME)Fget-buffer-window
  14601. +Return a window currently displaying BUFFER, or nil if none.
  14602. +If optional argument FRAME is `visible', search all visible frames.
  14603. +If optional argument FRAME is 0, search all visible and iconified frames.
  14604. +If FRAME is t, search all frames.
  14605. +If FRAME is nil, search only the selected frame.
  14606. +If FRAME is a frame, search only that frame.
  14607. +
  14608. +(get-buffer-window BUFFER &optional FRAME)Fdelete-other-windows
  14609. +Make WINDOW (or the selected window) fill its frame.
  14610. +Only the frame WINDOW is on is affected.
  14611. +This function tries to reduce display jumps
  14612. +by keeping the text previously visible in WINDOW
  14613. +in the same place on the frame.  Doing this depends on
  14614. +the value of (window-start WINDOW), so if calling this function
  14615. +in a program gives strange scrolling, make sure the window-start
  14616. +value is reasonable when this function is called.
  14617. +
  14618. +(delete-other-windows &optional WINDOW)Fdelete-windows-on
  14619. +Delete all windows showing BUFFER.
  14620. +Optional second argument FRAME controls which frames are affected.
  14621. +If nil or omitted, delete all windows showing BUFFER in any frame.
  14622. +If t, delete only windows showing BUFFER in the selected frame.
  14623. +If `visible', delete all windows showing BUFFER in any visible frame.
  14624. +If a frame, delete only windows showing BUFFER in that frame.
  14625. +
  14626. +(delete-windows-on BUFFER &optional FRAME)Freplace-buffer-in-windows
  14627. +Replace BUFFER with some other buffer in all windows showing it.
  14628. +
  14629. +(replace-buffer-in-windows BUFFER)Fset-window-buffer
  14630. +Make WINDOW display BUFFER as its contents.
  14631. +BUFFER can be a buffer or buffer name.
  14632. +
  14633. +(set-window-buffer WINDOW BUFFER)Fselect-window
  14634. +Select WINDOW.  Most editing will apply to WINDOW's buffer.
  14635. +The main editor command loop selects the buffer of the selected window
  14636. +before each command.
  14637. +
  14638. +(select-window WINDOW)Fdisplay-buffer
  14639. +Make BUFFER appear in some window but don't select it.
  14640. +BUFFER can be a buffer or a buffer name.
  14641. +If BUFFER is shown already in some window, just use that one,
  14642. +unless the window is the selected window and the optional second
  14643. +argument NOT-THIS-WINDOW is non-nil (interactively, with prefix arg).
  14644. +If `pop-up-frames' is non-nil, make a new frame if no window shows BUFFER.
  14645. +Returns the window displaying BUFFER.
  14646. +
  14647. +(display-buffer BUFFER &optional NOT-THIS-WINDOW)Fsplit-window
  14648. +Split WINDOW, putting SIZE lines in the first of the pair.
  14649. +WINDOW defaults to selected one and SIZE to half its size.
  14650. +If optional third arg HOR-FLAG is non-nil, split side by side
  14651. +and put SIZE columns in the first of the pair.
  14652. +
  14653. +(split-window &optional WINDOW CHSIZE HORFLAG)Fenlarge-window
  14654. +Make current window ARG lines bigger.
  14655. +From program, optional second arg non-nil means grow sideways ARG columns.
  14656. +
  14657. +(enlarge-window N &optional SIDE)Fshrink-window
  14658. +Make current window ARG lines smaller.
  14659. +From program, optional second arg non-nil means shrink sideways ARG columns.
  14660. +
  14661. +(shrink-window N &optional SIDE)Fscroll-up
  14662. +Scroll text of current window upward ARG lines; or near full screen if no ARG.
  14663. +A near full screen is `next-screen-context-lines' less than a full screen.
  14664. +Negative ARG means scroll downward.
  14665. +When calling from a program, supply a number as argument or nil.
  14666. +
  14667. +(scroll-up &optional N)Fscroll-down
  14668. +Scroll text of current window downward ARG lines; or near full screen if no ARG.
  14669. +A near full screen is `next-screen-context-lines' less than a full screen.
  14670. +Negative ARG means scroll upward.
  14671. +When calling from a program, supply a number as argument or nil.
  14672. +
  14673. +(scroll-down &optional N)Fother-window-for-scrolling
  14674. +Return the other window for "other window scroll" commands.
  14675. +If in the minibuffer, `minibuffer-scroll-window' if non-nil
  14676. +specifies the window.
  14677. +If `other-window-scroll-buffer' is non-nil, a window
  14678. +showing that buffer is used.
  14679. +
  14680. +(other-window-for-scrolling)Fscroll-other-window
  14681. +Scroll next window upward ARG lines; or near full screen if no ARG.
  14682. +The next window is the one below the current one; or the one at the top
  14683. +if the current one is at the bottom.  Negative ARG means scroll downward.
  14684. +When calling from a program, supply a number as argument or nil.
  14685. +
  14686. +If in the minibuffer, `minibuffer-scroll-window' if non-nil
  14687. +specifies the window to scroll.
  14688. +If `other-window-scroll-buffer' is non-nil, scroll the window
  14689. +showing that buffer, popping the buffer up if necessary.
  14690. +
  14691. +(scroll-other-window &optional N)Fscroll-left
  14692. +Scroll selected window display ARG columns left.
  14693. +Default for ARG is window width minus 2.
  14694. +
  14695. +(scroll-left &optional ARG)Fscroll-right
  14696. +Scroll selected window display ARG columns right.
  14697. +Default for ARG is window width minus 2.
  14698. +
  14699. +(scroll-right &optional ARG)Frecenter
  14700. +Center point in window and redisplay frame.  With ARG, put point on line ARG.
  14701. +The desired position of point is always relative to the current window.
  14702. +Just C-u as prefix means put point in the center of the window.
  14703. +No arg (i.e., it is nil) erases the entire frame and then
  14704. +redraws with point in the center of the current window.
  14705. +
  14706. +(recenter &optional N)Fmove-to-window-line
  14707. +Position point relative to window.
  14708. +With no argument, position point at center of window.
  14709. +An argument specifies frame line; zero means top of window,
  14710. +negative means relative to bottom of window.
  14711. +
  14712. +(move-to-window-line ARG)Fwindow-configuration-p
  14713. +T if OBJECT is a window-configration object.
  14714. +
  14715. +(window-configuration-p OBJ)Fset-window-configuration
  14716. +Set the configuration of windows and buffers as specified by CONFIGURATION.
  14717. +CONFIGURATION must be a value previously returned
  14718. +by `current-window-configuration' (which see).
  14719. +
  14720. +(set-window-configuration CONFIGURATION)Fcurrent-window-configuration
  14721. +Return an object representing the current window configuration of FRAME.
  14722. +If FRAME is nil or omitted, use the selected frame.
  14723. +This describes the number of windows, their sizes and current buffers,
  14724. +and for each displayed buffer, where display starts, and the positions of
  14725. +point and mark.  An exception is made for point in the current buffer:
  14726. +its value is -not- saved.
  14727. +This also records the currently selected frame, and FRAME's focus
  14728. +redirection (see `redirect-frame-focus').
  14729. +
  14730. +(current-window-configuration &optional FRAME)Fsave-window-excursion
  14731. +Execute body, preserving window sizes and contents.
  14732. +Restore which buffer appears in which window, where display starts,
  14733. +and the value of point and mark for each window.
  14734. +Also restore which buffer is current.
  14735. +But do not preserve point in the current buffer.
  14736. +Does not restore the value of point in current buffer.Vtemp-buffer-show-function
  14737. +Non-nil means call as function to display a help buffer.
  14738. +Used by `with-output-to-temp-buffer'.Vdisplay-buffer-function
  14739. +If non-nil, function to call to handle `display-buffer'.
  14740. +It will receive two args, the buffer and a flag which if non-nil means
  14741. + that the currently selected window is not acceptable.
  14742. +Commands such as `switch-to-buffer-other-window' and `find-file-other-window'
  14743. +work using this function.Vminibuffer-scroll-window
  14744. +Non-nil means it is the window that C-M-v in minibuffer should scroll.Vother-window-scroll-buffer
  14745. +If non-nil, this is a buffer and \[scroll-other-window] should scroll its window.Vpop-up-frames
  14746. +*Non-nil means `display-buffer' should make a separate frame.Vpop-up-frame-function
  14747. +Function to call to handle automatic new frame creation.
  14748. +It is called with no arguments and should return a newly created frame.
  14749. +
  14750. +A typical value might be `(lambda () (new-frame pop-up-frame-alist))'
  14751. +where `pop-up-frame-alist' would hold the default frame parameters.Vspecial-display-buffer-names
  14752. +*List of buffer names that should have their own special frames.
  14753. +Displaying a buffer whose name is in this list makes a special frame for it
  14754. +using `special-display-function'.  See also `special-display-regexps'.Vspecial-display-regexps
  14755. +*List of regexps saying which buffers should have their own special frames.
  14756. +If a buffer name matches one of these regexps, it gets its own frame.
  14757. +Displaying a buffer whose name is in this list makes a special frame for it
  14758. +using `special-display-function'.  See also `special-display-buffer-names'.Vspecial-display-function
  14759. +Function to call to make a new frame for a special buffer.
  14760. +It is called with one argument, the buffer,
  14761. +and should return a window displaying that buffer.
  14762. +The default value makes a separate frame for the buffer,
  14763. +using `special-display-alist' to specify the frame parameters.
  14764. +
  14765. +A buffer is special if its is listed in `special-display-buffer-names'
  14766. +or matches a regexp in `special-display-regexps'.Vpop-up-windows
  14767. +*Non-nil means display-buffer should make new windows.Vnext-screen-context-lines
  14768. +*Number of lines of continuity when scrolling by screenfuls.Vsplit-height-threshold
  14769. +*display-buffer would prefer to split the largest window if this large.
  14770. +If there is only one window, it is split regardless of this value.Vwindow-min-height
  14771. +*Delete any window less than this tall (including its mode line).Vwindow-min-width
  14772. +*Delete any window less than this wide.Vsystem-uses-terminfo
  14773. +Non-nil means the system uses terminfo rather than termcap.
  14774. +This variable can be used by terminal emulator packages.Finvocation-name
  14775. +Return the program name that was used to run Emacs.
  14776. +Any directory names are omitted.
  14777. +
  14778. +(invocation-name)Finvocation-directory
  14779. +Return the directory name in which the Emacs executable was located
  14780. +
  14781. +(invocation-directory)Fkill-emacs
  14782. +Exit the Emacs job and kill it.
  14783. +If ARG is an integer, return ARG as the exit program code.
  14784. +If ARG is a  string, stuff it as keyboard input.
  14785. +
  14786. +The value of `kill-emacs-hook', if not void,
  14787. +is a list of functions (of no args),
  14788. +all of which are called before Emacs is actually killed.
  14789. +
  14790. +(kill-emacs &optional ARG)Fdump-emacs-data
  14791. +Dump current state of Emacs into data file FILENAME.
  14792. +This function exists on systems that use HAVE_SHM.
  14793. +
  14794. +(dump-emacs-data INTONAME)Fdump-emacs
  14795. +Dump current state of Emacs into executable file FILENAME.
  14796. +Take symbols from SYMFILE (presumably the file you executed to run Emacs).
  14797. +This is used in the file `loadup.el' when building Emacs.
  14798. +
  14799. +Bind `command-line-processed' to nil before dumping,
  14800. +if you want the dumped Emacs to process its command line
  14801. +and announce itself normally when it is run.
  14802. +
  14803. +(dump-emacs INTONAME SYMNAME)Vcommand-line-args
  14804. +Args passed by shell to Emacs, as a list of strings.Vsystem-type
  14805. +Value is symbol indicating type of operating system you are using.Vsystem-configuration
  14806. +Value is string indicating configuration Emacs was built for.Vnoninteractive
  14807. +Non-nil means Emacs is running without interactive terminal.Vkill-emacs-hook
  14808. +Hook to be run whenever kill-emacs is called.
  14809. +Since kill-emacs may be invoked when the terminal is disconnected (or
  14810. +in other similar situations), functions placed on this hook should not
  14811. +expect to be able to interact with the user.Vemacs-priority
  14812. +Priority for Emacs to run at.
  14813. +This value is effective only if set before Emacs is dumped,
  14814. +and only if the Emacs executable is installed with setuid to permit
  14815. +it to change priority.  (Emacs sets its uid back to the real uid.)
  14816. +Currently, you need to define SET_EMACS_PRIORITY in `config.h'
  14817. +before you compile Emacs, to enable the code for this feature.Vinvocation-name
  14818. +The program name that was used to run Emacs.
  14819. +Any directory names are omitted.Vinvocation-directory
  14820. +The directory in which the Emacs executable was found, to run it.
  14821. +The value is nil if that directory's name is not known.Vinstallation-directory
  14822. +A directory within which to look for the `lib-src' and `etc' directories.
  14823. +This is non-nil when we can't find those directories in their standard
  14824. +installed locations, but we can find them
  14825. +near where the Emacs executable was found.Frecursive-edit
  14826. +Invoke the editor command loop recursively.
  14827. +To get out of the recursive edit, a command can do `(throw 'exit nil)';
  14828. +that tells this function to return.
  14829. +Alternately, `(throw 'exit t)' makes this function signal an error.
  14830. +This function is called by the editor initialization to begin editing.
  14831. +
  14832. +(recursive-edit)Ftop-level
  14833. +Exit all recursive editing levels.
  14834. +
  14835. +(top-level)Fexit-recursive-edit
  14836. +Exit from the innermost recursive edit or minibuffer.
  14837. +
  14838. +(exit-recursive-edit)Fabort-recursive-edit
  14839. +Abort the command that requested this recursive edit or minibuffer input.
  14840. +
  14841. +(abort-recursive-edit)Ftrack-mouse
  14842. +Evaluate BODY with mouse movement events enabled.
  14843. +Within a `track-mouse' form, mouse motion generates input events that
  14844. +you can read with `read-event'.
  14845. +Normally, mouse motion is ignored.Fread-key-sequence
  14846. +Read a sequence of keystrokes and return as a string or vector.
  14847. +The sequence is sufficient to specify a non-prefix command in the
  14848. +current local and global maps.
  14849. +
  14850. +First arg PROMPT is a prompt string.  If nil, do not prompt specially.
  14851. +Second (optional) arg CONTINUE-ECHO, if non-nil, means this key echos
  14852. +as a continuation of the previous key.
  14853. +
  14854. +A C-g typed while in this function is treated like any other character,
  14855. +and `quit-flag' is not set.
  14856. +
  14857. +If the key sequence starts with a mouse click, then the sequence is read
  14858. +using the keymaps of the buffer of the window clicked in, not the buffer
  14859. +of the selected window as normal.
  14860. +
  14861. +`read-key-sequence' drops unbound button-down events, since you normally
  14862. +only care about the click or drag events which follow them.  If a drag
  14863. +or multi-click event is unbound, but the corresponding click event would
  14864. +be bound, `read-key-sequence' turns the event into a click event at the
  14865. +drag's starting position.  This means that you don't have to distinguish
  14866. +between click and drag, double, or triple events unless you want to.
  14867. +
  14868. +`read-key-sequence' prefixes mouse events on mode lines, the vertical
  14869. +lines separating windows, and scroll bars with imaginary keys
  14870. +`mode-line', `vertical-line', and `vertical-scroll-bar'.
  14871. +
  14872. +If the user switches frames in the middle of a key sequence, the
  14873. +frame-switch event is put off until after the current key sequence.
  14874. +
  14875. +`read-key-sequence' checks `function-key-map' for function key
  14876. +sequences, where they wouldn't conflict with ordinary bindings.  See
  14877. +`function-key-map' for more details.
  14878. +
  14879. +(read-key-sequence PROMPT &optional CONTINUE-ECHO)Fcommand-execute
  14880. +Execute CMD as an editor command.
  14881. +CMD must be a symbol that satisfies the `commandp' predicate.
  14882. +Optional second arg RECORD-FLAG non-nil
  14883. +means unconditionally put this command in `command-history'.
  14884. +Otherwise, that is done only if an arg is read using the minibuffer.
  14885. +
  14886. +(command-execute CMD &optional RECORD)Fexecute-extended-command
  14887. +Read function name, then read its arguments and call it.
  14888. +
  14889. +(execute-extended-command PREFIXARG)Finput-pending-p
  14890. +T if command input is currently available with no waiting.
  14891. +Actually, the value is nil only if we can be sure that no input is available.
  14892. +
  14893. +(input-pending-p)Frecent-keys
  14894. +Return vector of last 100 events, not counting those from keyboard macros.
  14895. +
  14896. +(recent-keys)Fthis-command-keys
  14897. +Return the key sequence that invoked this command.
  14898. +The value is a string or a vector.
  14899. +
  14900. +(this-command-keys)Frecursion-depth
  14901. +Return the current depth in recursive edits.
  14902. +
  14903. +(recursion-depth)Fopen-dribble-file
  14904. +Start writing all keyboard characters to a dribble file called FILE.
  14905. +If FILE is nil, close any open dribble file.
  14906. +
  14907. +(open-dribble-file FILE)Fdiscard-input
  14908. +Discard the contents of the terminal input buffer.
  14909. +Also cancel any kbd macro being defined.
  14910. +
  14911. +(discard-input)Fsuspend-emacs
  14912. +Stop Emacs and return to superior process.  You can resume later.
  14913. +If `cannot-suspend' is non-nil, or if the system doesn't support job
  14914. +control, run a subshell instead.
  14915. +
  14916. +If optional arg STUFFSTRING is non-nil, its characters are stuffed
  14917. +to be read as terminal input by Emacs's parent, after suspension.
  14918. +
  14919. +Before suspending, call the functions in `suspend-hook' with no args.
  14920. +If any of them returns nil, don't call the rest and don't suspend.
  14921. +Otherwise, suspend normally and after resumption run the normal hook
  14922. +`suspend-resume-hook' if that is bound and non-nil.
  14923. +
  14924. +Some operating systems cannot stop the Emacs process and resume it later.
  14925. +On such systems, Emacs starts a subshell instead of suspending.
  14926. +
  14927. +(suspend-emacs &optional STUFFSTRING)Fset-input-mode
  14928. +Set mode of reading keyboard input.
  14929. +First arg INTERRUPT non-nil means use input interrupts;
  14930. + nil means use CBREAK mode.
  14931. +Second arg FLOW non-nil means use ^S/^Q flow control for output to terminal
  14932. + (no effect except in CBREAK mode).
  14933. +Third arg META t means accept 8-bit input (for a Meta key).
  14934. + META nil means ignore the top bit, on the assumption it is parity.
  14935. + Otherwise, accept 8-bit input and don't use the top bit for Meta.
  14936. +Optional fourth arg QUIT if non-nil specifies character to use for quitting.
  14937. +See also `current-input-mode'.
  14938. +
  14939. +(set-input-mode INTERRUPT FLOW META &optional QUIT)Fcurrent-input-mode
  14940. +Return information about the way Emacs currently reads keyboard input.
  14941. +The value is a list of the form (INTERRUPT FLOW META QUIT), where
  14942. +  INTERRUPT is non-nil if Emacs is using interrupt-driven input; if
  14943. +    nil, Emacs is using CBREAK mode.
  14944. +  FLOW is non-nil if Emacs uses ^S/^Q flow control for output to the
  14945. +    terminal; this does not apply if Emacs uses interrupt-driven input.
  14946. +  META is t if accepting 8-bit input with 8th bit as Meta flag.
  14947. +    META nil means ignoring the top bit, on the assumption it is parity.
  14948. +    META is neither t nor nil if accepting 8-bit input and using
  14949. +    all 8 bits as the character code.
  14950. +  QUIT is the character Emacs currently uses to quit.
  14951. +The elements of this list correspond to the arguments of
  14952. +`set-input-mode'.
  14953. +
  14954. +(current-input-mode)Vlast-command-char
  14955. +Last input event that was part of a command.Vlast-command-event
  14956. +Last input event that was part of a command.Vlast-nonmenu-event
  14957. +Last input event in a command, except for mouse menu events.
  14958. +Mouse menus give back keys that don't look like mouse events;
  14959. +this variable holds the actual mouse event that led to the menu,
  14960. +so that you can determine whether the command was run by mouse or not.Vlast-input-char
  14961. +Last input event.Vlast-input-event
  14962. +Last input event.Vunread-command-events
  14963. +List of objects to be read as next command input events.Vunread-command-char
  14964. +If not -1, an object to be read as next command input event.Vmeta-prefix-char
  14965. +Meta-prefix character code.  Meta-foo as command input
  14966. +turns into this character followed by foo.Vlast-command
  14967. +The last command executed.  Normally a symbol with a function definition,
  14968. +but can be whatever was found in the keymap, or whatever the variable
  14969. +`this-command' was set to by that command.Vthis-command
  14970. +The command now being executed.
  14971. +The command can set this variable; whatever is put here
  14972. +will be in `last-command' during the following command.Vauto-save-interval
  14973. +*Number of keyboard input characters between auto-saves.
  14974. +Zero means disable autosaving due to number of characters typed.Vauto-save-timeout
  14975. +*Number of seconds idle time before auto-save.
  14976. +Zero or nil means disable auto-saving due to idleness.
  14977. +After auto-saving due to this many seconds of idle time,
  14978. +Emacs also does a garbage collection if that seems to be warranted.Vecho-keystrokes
  14979. +*Nonzero means echo unfinished commands after this many seconds of pause.Vpolling-period
  14980. +*Interval between polling for input during Lisp execution.
  14981. +The reason for polling is to make C-g work to stop a running program.
  14982. +Polling is needed only when using X windows and SIGIO does not work.
  14983. +Polling is automatically disabled in all other cases.Vdouble-click-time
  14984. +*Maximum time between mouse clicks to make a double-click.
  14985. +Measured in milliseconds.  nil means disable double-click recognition;
  14986. +t means double-clicks have no time limit and are detected
  14987. +by position only.Vnum-input-keys
  14988. +*Number of complete keys read from the keyboard so far.Vlast-event-frame
  14989. +*The frame in which the most recently read event occurred.
  14990. +If the last event came from a keyboard macro, this is set to `macro'.Vhelp-char
  14991. +Character to recognize as meaning Help.
  14992. +When it is read, do `(eval help-form)', and display result if it's a string.
  14993. +If the value of `help-form' is nil, this char can be read normally.Vhelp-form
  14994. +Form to execute when character `help-char' is read.
  14995. +If the form returns a string, that string is displayed.
  14996. +If `help-form' is nil, the help char is not recognized.Vprefix-help-command
  14997. +Command to run when `help-char' character follows a prefix key.
  14998. +This command is used only when there is no actual binding
  14999. +for that character after that prefix key.Vtop-level
  15000. +Form to evaluate when Emacs starts up.
  15001. +Useful to set before you dump a modified Emacs.Vkeyboard-translate-table
  15002. +String used as translate table for keyboard input, or nil.
  15003. +Each character is looked up in this string and the contents used instead.
  15004. +If string is of length N, character codes N and up are untranslated.Vkey-translation-map
  15005. +Keymap of key translations that can override keymaps.
  15006. +This keymap works like `function-key-map', but comes after that,
  15007. +and applies even for keys that have ordinary bindings.Vcannot-suspend
  15008. +Non-nil means to always spawn a subshell instead of suspending,
  15009. +even if the operating system has support for stopping a process.Vmenu-prompting
  15010. +Non-nil means prompt with menus when appropriate.
  15011. +This is done when reading from a keymap that has a prompt string,
  15012. +for elements that have prompt strings.
  15013. +The menu is displayed on the screen
  15014. +if X menus were enabled at configuration
  15015. +time and the previous event was a mouse click prefix key.
  15016. +Otherwise, menu prompting uses the echo area.Vmenu-prompt-more-char
  15017. +Character to see next line of menu prompt.
  15018. +Type this character while in a menu prompt to rotate around the lines of it.Vextra-keyboard-modifiers
  15019. +A mask of additional modifier keys to use with every keyboard character.
  15020. +Emacs applies the modifiers of the character stored here to each keyboard
  15021. +character it reads.  For example, after evaluating the expression
  15022. +    (setq extra-keyboard-modifiers ?C-x)
  15023. +all input characters will have the control modifier applied to them.
  15024. +
  15025. +Note that the character ?C-@, equivalent to the integer zero, does
  15026. +not count as a control character; rather, it counts as a character
  15027. +with no modifiers; thus, setting `extra-keyboard-modifiers' to zero
  15028. +cancels any modification.Vdeactivate-mark
  15029. +If an editing command sets this to t, deactivate the mark afterward.
  15030. +The command loop sets this to nil before each command,
  15031. +and tests the value when the command returns.
  15032. +Buffer modification stores t in this variable.Vcommand-hook-internal
  15033. +Temporary storage of pre-command-hook or post-command-hook.Vpre-command-hook
  15034. +Normal hook run before each command is executed.
  15035. +While the hook is run, its value is temporarily set to nil
  15036. +to avoid an unbreakable infinite loop if a hook function gets an error.
  15037. +As a result, a hook function cannot straightforwardly alter the value of
  15038. +`pre-command-hook'.  See the Emacs Lisp manual for a way of
  15039. +implementing hook functions that alter the set of hook functions.Vpost-command-hook
  15040. +Normal hook run after each command is executed.
  15041. +While the hook is run, its value is temporarily set to nil
  15042. +to avoid an unbreakable infinite loop if a hook function gets an error.
  15043. +As a result, a hook function cannot straightforwardly alter the value of
  15044. +`post-command-hook'.  See the Emacs Lisp manual for a way of
  15045. +implementing hook functions that alter the set of hook functions.Vlucid-menu-bar-dirty-flag
  15046. +t means menu bar, specified Lucid style, needs to be recomputed.Vmenu-bar-final-items
  15047. +List of menu bar items to move to the end of the menu bar.
  15048. +The elements of the list are event types that may have menu bar bindings.Voverriding-local-map
  15049. +Keymap that overrides all other local keymaps.
  15050. +If this variable is non-nil, it is used as a keymap instead of the
  15051. +buffer's local map, and the minor mode keymaps and text property keymaps.Vtrack-mouse
  15052. +*Non-nil means generate motion events for mouse motion.Vsystem-key-alist
  15053. +Alist of system-specific X windows key symbols.
  15054. +Each element should have the form (N . SYMBOL) where N is the
  15055. +numeric keysym code (sans the "system-specific" bit 1<<28)
  15056. +and SYMBOL is its name.Vdeferred-action-list
  15057. +List of deferred actions to be performed at a later time.
  15058. +The precise format isn't relevant here; we just check whether it is nil.Vdeferred-action-function
  15059. +Function to call to handle deferred actions, after each command.
  15060. +This function is called with no arguments after each command
  15061. +whenever `deferred-action-list' is non-nil.Fstart-kbd-macro
  15062. +Record subsequent keyboard input, defining a keyboard macro.
  15063. +The commands are recorded even as they are executed.
  15064. +Use \[end-kbd-macro] to finish recording and make the macro available.
  15065. +Use \[name-last-kbd-macro] to give it a permanent name.
  15066. +Non-nil arg (prefix arg) means append to last macro defined;
  15067. + This begins by re-executing that macro as if you typed it again.
  15068. +
  15069. +(start-kbd-macro APPEND)Fend-kbd-macro
  15070. +Finish defining a keyboard macro.
  15071. +The definition was started by \[start-kbd-macro].
  15072. +The macro is now available for use via \[call-last-kbd-macro],
  15073. +or it can be given a name with \[name-last-kbd-macro] and then invoked
  15074. +under that name.
  15075. +
  15076. +With numeric arg, repeat macro now that many times,
  15077. +counting the definition just completed as the first repetition.
  15078. +An argument of zero means repeat until error.
  15079. +
  15080. +(end-kbd-macro &optional ARG)Fcall-last-kbd-macro
  15081. +Call the last keyboard macro that you defined with \[start-kbd-macro].
  15082. +
  15083. +A prefix argument serves as a repeat count.  Zero means repeat until error.
  15084. +
  15085. +To make a macro permanent so you can call it even after
  15086. +defining others, use \[name-last-kbd-macro].
  15087. +
  15088. +(call-last-kbd-macro &optional PREFIX)Fexecute-kbd-macro
  15089. +Execute MACRO as string of editor command characters.
  15090. +If MACRO is a symbol, its function definition is used.
  15091. +COUNT is a repeat count, or nil for once, or 0 for infinite loop.
  15092. +
  15093. +(execute-kbd-macro MACRO &optional PREFIXARG)Vdefining-kbd-macro
  15094. +Non-nil while a keyboard macro is being defined.  Don't set this!Vexecuting-macro
  15095. +Currently executing keyboard macro (a string); nil if none executing.Vexecuting-kbd-macro
  15096. +Currently executing keyboard macro (a string); nil if none executing.Vlast-kbd-macro
  15097. +Last kbd macro defined, as a string; nil if none defined.Fmake-keymap
  15098. +Construct and return a new keymap, of the form (keymap VECTOR . ALIST).
  15099. +VECTOR is a vector which holds the bindings for the ASCII
  15100. +characters.  ALIST is an assoc-list which holds bindings for function keys,
  15101. +mouse events, and any other things that appear in the input stream.
  15102. +All entries in it are initially nil, meaning "command undefined".
  15103. +
  15104. +The optional arg STRING supplies a menu name for the keymap
  15105. +in case you use it as a menu with `x-popup-menu'.
  15106. +
  15107. +(make-keymap &optional STRING)Fmake-sparse-keymap
  15108. +Construct and return a new sparse-keymap list.
  15109. +Its car is `keymap' and its cdr is an alist of (CHAR . DEFINITION),
  15110. +which binds the character CHAR to DEFINITION, or (SYMBOL . DEFINITION),
  15111. +which binds the function key or mouse event SYMBOL to DEFINITION.
  15112. +Initially the alist is nil.
  15113. +
  15114. +The optional arg STRING supplies a menu name for the keymap
  15115. +in case you use it as a menu with `x-popup-menu'.
  15116. +
  15117. +(make-sparse-keymap &optional STRING)Fkeymapp
  15118. +Return t if ARG is a keymap.
  15119. +
  15120. +A keymap is a list (keymap . ALIST),
  15121. +or a symbol whose function definition is itself a keymap.
  15122. +ALIST elements look like (CHAR . DEFN) or (SYMBOL . DEFN);
  15123. +a vector of densely packed bindings for small character codes
  15124. +is also allowed as an element.
  15125. +
  15126. +(keymapp OBJECT)Fcopy-keymap
  15127. +Return a copy of the keymap KEYMAP.
  15128. +The copy starts out with the same definitions of KEYMAP,
  15129. +but changing either the copy or KEYMAP does not affect the other.
  15130. +Any key definitions that are subkeymaps are recursively copied.
  15131. +However, a key definition which is a symbol whose definition is a keymap
  15132. +is not copied.
  15133. +
  15134. +(copy-keymap KEYMAP)Fdefine-key
  15135. +Args KEYMAP, KEY, DEF.  Define key sequence KEY, in KEYMAP, as DEF.
  15136. +KEYMAP is a keymap.  KEY is a string or a vector of symbols and characters
  15137. +meaning a sequence of keystrokes and events.
  15138. +Non-ASCII characters with codes above 127 (such as ISO Latin-1)
  15139. +can be included if you use a vector.
  15140. +DEF is anything that can be a key's definition:
  15141. + nil (means key is undefined in this keymap),
  15142. + a command (a Lisp function suitable for interactive calling)
  15143. + a string (treated as a keyboard macro),
  15144. + a keymap (to define a prefix key),
  15145. + a symbol.  When the key is looked up, the symbol will stand for its
  15146. +    function definition, which should at that time be one of the above,
  15147. +    or another symbol whose function definition is used, etc.
  15148. + a cons (STRING . DEFN), meaning that DEFN is the definition
  15149. +    (DEFN should be a valid definition in its own right),
  15150. + or a cons (KEYMAP . CHAR), meaning use definition of CHAR in map KEYMAP.
  15151. +
  15152. +If KEYMAP is a sparse keymap, the pair binding KEY to DEF is added at
  15153. +the front of KEYMAP.
  15154. +
  15155. +(define-key KEYMAP KEY DEF)Flookup-key
  15156. +In keymap KEYMAP, look up key sequence KEY.  Return the definition.
  15157. +nil means undefined.  See doc of `define-key' for kinds of definitions.
  15158. +
  15159. +A number as value means KEY is "too long";
  15160. +that is, characters or symbols in it except for the last one
  15161. +fail to be a valid sequence of prefix characters in KEYMAP.
  15162. +The number is how many characters at the front of KEY
  15163. +it takes to reach a non-prefix command.
  15164. +
  15165. +Normally, `lookup-key' ignores bindings for t, which act as default
  15166. +bindings, used when nothing else in the keymap applies; this makes it
  15167. +useable as a general function for probing keymaps.  However, if the
  15168. +third optional argument ACCEPT-DEFAULT is non-nil, `lookup-key' will
  15169. +recognize the default bindings, just as `read-key-sequence' does.
  15170. +
  15171. +(lookup-key KEYMAP KEY &optional ACCEPT-DEFAULT)Fkey-binding
  15172. +Return the binding for command KEY in current keymaps.
  15173. +KEY is a string or vector, a sequence of keystrokes.
  15174. +The binding is probably a symbol with a function definition.
  15175. +
  15176. +Normally, `key-binding' ignores bindings for t, which act as default
  15177. +bindings, used when nothing else in the keymap applies; this makes it
  15178. +usable as a general function for probing keymaps.  However, if the
  15179. +optional second argument ACCEPT-DEFAULT is non-nil, `key-binding' does
  15180. +recognize the default bindings, just as `read-key-sequence' does.
  15181. +
  15182. +(key-binding KEY &optional ACCEPT-DEFAULT)Flocal-key-binding
  15183. +Return the binding for command KEYS in current local keymap only.
  15184. +KEYS is a string, a sequence of keystrokes.
  15185. +The binding is probably a symbol with a function definition.
  15186. +
  15187. +If optional argument ACCEPT-DEFAULT is non-nil, recognize default
  15188. +bindings; see the description of `lookup-key' for more details about this.
  15189. +
  15190. +(local-key-binding KEYS &optional ACCEPT-DEFAULT)Fglobal-key-binding
  15191. +Return the binding for command KEYS in current global keymap only.
  15192. +KEYS is a string, a sequence of keystrokes.
  15193. +The binding is probably a symbol with a function definition.
  15194. +This function's return values are the same as those of lookup-key
  15195. +(which see).
  15196. +
  15197. +If optional argument ACCEPT-DEFAULT is non-nil, recognize default
  15198. +bindings; see the description of `lookup-key' for more details about this.
  15199. +
  15200. +(global-key-binding KEYS &optional ACCEPT-DEFAULT)Fminor-mode-key-binding
  15201. +Find the visible minor mode bindings of KEY.
  15202. +Return an alist of pairs (MODENAME . BINDING), where MODENAME is the
  15203. +the symbol which names the minor mode binding KEY, and BINDING is
  15204. +KEY's definition in that mode.  In particular, if KEY has no
  15205. +minor-mode bindings, return nil.  If the first binding is a
  15206. +non-prefix, all subsequent bindings will be omitted, since they would
  15207. +be ignored.  Similarly, the list doesn't include non-prefix bindings
  15208. +that come after prefix bindings.
  15209. +
  15210. +If optional argument ACCEPT-DEFAULT is non-nil, recognize default
  15211. +bindings; see the description of `lookup-key' for more details about this.
  15212. +
  15213. +(minor-mode-key-binding KEY &optional ACCEPT-DEFAULT)Fglobal-set-key
  15214. +Give KEY a global binding as COMMAND.
  15215. +COMMAND is a symbol naming an interactively-callable function.
  15216. +KEY is a key sequence (a string or vector of characters or event types).
  15217. +Non-ASCII characters with codes above 127 (such as ISO Latin-1)
  15218. +can be included if you use a vector.
  15219. +Note that if KEY has a local binding in the current buffer
  15220. +that local binding will continue to shadow any global binding.
  15221. +
  15222. +(global-set-key KEYS FUNCTION)Flocal-set-key
  15223. +Give KEY a local binding as COMMAND.
  15224. +COMMAND is a symbol naming an interactively-callable function.
  15225. +KEY is a key sequence (a string or vector of characters or event types).
  15226. +Non-ASCII characters with codes above 127 (such as ISO Latin-1)
  15227. +can be included if you use a vector.
  15228. +The binding goes in the current buffer's local map,
  15229. +which in most cases is shared with all other buffers in the same major mode.
  15230. +
  15231. +(local-set-key KEYS FUNCTION)Fglobal-unset-key
  15232. +Remove global binding of KEY.
  15233. +KEY is a string representing a sequence of keystrokes.
  15234. +
  15235. +(global-unset-key KEYS)Flocal-unset-key
  15236. +Remove local binding of KEY.
  15237. +KEY is a string representing a sequence of keystrokes.
  15238. +
  15239. +(local-unset-key KEYS)Fdefine-prefix-command
  15240. +Define COMMAND as a prefix command.  COMMAND should be a symbol.
  15241. +A new sparse keymap is stored as COMMAND's function definition and its value.
  15242. +If a second optional argument MAPVAR is given, the map is stored as
  15243. +its value instead of as COMMAND's value; but COMMAND is still defined
  15244. +as a function.
  15245. +
  15246. +(define-prefix-command NAME &optional MAPVAR)Fuse-global-map
  15247. +Select KEYMAP as the global keymap.
  15248. +
  15249. +(use-global-map KEYMAP)Fuse-local-map
  15250. +Select KEYMAP as the local keymap.
  15251. +If KEYMAP is nil, that means no local keymap.
  15252. +
  15253. +(use-local-map KEYMAP)Fcurrent-local-map
  15254. +Return current buffer's local keymap, or nil if it has none.
  15255. +
  15256. +(current-local-map)Fcurrent-global-map
  15257. +Return the current global keymap.
  15258. +
  15259. +(current-global-map)Fcurrent-minor-mode-maps
  15260. +Return a list of keymaps for the minor modes of the current buffer.
  15261. +
  15262. +(current-minor-mode-maps)Faccessible-keymaps
  15263. +Find all keymaps accessible via prefix characters from KEYMAP.
  15264. +Returns a list of elements of the form (KEYS . MAP), where the sequence
  15265. +KEYS starting from KEYMAP gets you to MAP.  These elements are ordered
  15266. +so that the KEYS increase in length.  The first element is ("" . KEYMAP).
  15267. +An optional argument PREFIX, if non-nil, should be a key sequence;
  15268. +then the value includes only maps for prefixes that start with PREFIX.
  15269. +
  15270. +(accessible-keymaps STARTMAP &optional PREFIX)Fkey-description
  15271. +Return a pretty description of key-sequence KEYS.
  15272. +Control characters turn into "C-foo" sequences, meta into "M-foo"
  15273. +spaces are put between sequence elements, etc.
  15274. +
  15275. +(key-description KEYS)Fsingle-key-description
  15276. +Return a pretty description of command character KEY.
  15277. +Control characters turn into C-whatever, etc.
  15278. +
  15279. +(single-key-description KEY)Ftext-char-description
  15280. +Return a pretty description of file-character CHAR.
  15281. +Control characters turn into "^char", etc.
  15282. +
  15283. +(text-char-description CHR)Fwhere-is-internal
  15284. +Return list of keys that invoke DEFINITION.
  15285. +If KEYMAP is non-nil, search only KEYMAP and the global keymap.
  15286. +If KEYMAP is nil, search all the currently active keymaps.
  15287. +
  15288. +If optional 3rd arg FIRSTONLY is non-nil, return the first key sequence found,
  15289. +rather than a list of all possible key sequences.
  15290. +If FIRSTONLY is t, avoid key sequences which use non-ASCII
  15291. +keys and therefore may not be usable on ASCII terminals.  If FIRSTONLY
  15292. +is the symbol `non-ascii', return the first binding found, no matter
  15293. +what its components.
  15294. +
  15295. +If optional 4th arg NOINDIRECT is non-nil, don't follow indirections
  15296. +to other keymaps or slots.  This makes it possible to search for an
  15297. +indirect definition itself.
  15298. +
  15299. +(where-is-internal DEFINITION &optional KEYMAP FIRSTONLY NOINDIRECT)Fdescribe-bindings
  15300. +Show a list of all defined keys, and their definitions.
  15301. +The list is put in a buffer, which is displayed.
  15302. +An optional argument PREFIX, if non-nil, should be a key sequence;
  15303. +then we display only bindings that start with that prefix.
  15304. +
  15305. +(describe-bindings &optional PREFIX)Fdescribe-vector
  15306. +Insert a description of contents of VECTOR.
  15307. +This is text showing the elements of vector matched against indices.
  15308. +
  15309. +(describe-vector VECTOR)Fapropos-internal
  15310. +Show all symbols whose names contain match for REGEXP.
  15311. +If optional 2nd arg PRED is non-nil, (funcall PRED SYM) is done
  15312. +for each symbol and a symbol is mentioned only if that returns non-nil.
  15313. +Return list of symbols found.
  15314. +
  15315. +(apropos-internal STRING &optional PRED)Vminibuffer-local-map
  15316. +Default keymap to use when reading from the minibuffer.Vminibuffer-local-ns-map
  15317. +Local keymap for the minibuffer when spaces are not allowed.Vminibuffer-local-completion-map
  15318. +Local keymap for minibuffer input with completion.Vminibuffer-local-must-match-map
  15319. +Local keymap for minibuffer input with completion, for exact match.Vminor-mode-map-alist
  15320. +Alist of keymaps to use for minor modes.
  15321. +Each element looks like (VARIABLE . KEYMAP); KEYMAP is used to read
  15322. +key sequences and look up bindings iff VARIABLE's value is non-nil.
  15323. +If two active keymaps bind the same key, the keymap appearing earlier
  15324. +in the list takes precedence.Vfunction-key-map
  15325. +Keymap mapping ASCII function key sequences onto their preferred forms.
  15326. +This allows Emacs to recognize function keys sent from ASCII
  15327. +terminals at any point in a key sequence.
  15328. +
  15329. +The `read-key-sequence' function replaces any subsequence bound by
  15330. +`function-key-map' with its binding.  More precisely, when the active
  15331. +keymaps have no binding for the current key sequence but
  15332. +`function-key-map' binds a suffix of the sequence to a vector or string,
  15333. +`read-key-sequence' replaces the matching suffix with its binding, and
  15334. +continues with the new sequence.
  15335. +
  15336. +The events that come from bindings in `function-key-map' are not
  15337. +themselves looked up in `function-key-map'.
  15338. +
  15339. +For example, suppose `function-key-map' binds `ESC O P' to [f1].
  15340. +Typing `ESC O P' to `read-key-sequence' would return [f1].  Typing
  15341. +`C-x ESC O P' would return [?\C-x f1].  If [f1] were a prefix
  15342. +key, typing `ESC O P x' would return [f1 x].Fbuffer-list
  15343. +Return a list of all existing live buffers.
  15344. +
  15345. +(buffer-list)Fget-buffer
  15346. +Return the buffer named NAME (a string).
  15347. +If there is no live buffer named NAME, return nil.
  15348. +NAME may also be a buffer; if so, the value is that buffer.
  15349. +
  15350. +(get-buffer NAME)Fget-file-buffer
  15351. +Return the buffer visiting file FILENAME (a string).
  15352. +The buffer's `buffer-file-name' must match exactly the expansion of FILENAME.
  15353. +If there is no such live buffer, return nil.
  15354. +
  15355. +(get-file-buffer FILENAME)Fget-buffer-create
  15356. +Return the buffer named NAME, or create such a buffer and return it.
  15357. +A new buffer is created if there is no live buffer named NAME.
  15358. +If NAME starts with a space, the new buffer does not keep undo information.
  15359. +If NAME is a buffer instead of a string, then it is the value returned.
  15360. +The value is never nil.
  15361. +
  15362. +(get-buffer-create NAME)Fgenerate-new-buffer-name
  15363. +Return a string that is the name of no existing buffer based on NAME.
  15364. +If there is no live buffer named NAME, then return NAME.
  15365. +Otherwise modify name by appending `<NUMBER>', incrementing NUMBER
  15366. +until an unused name is found, and then return that name.
  15367. +Optional second argument IGNORE specifies a name that is okay to use
  15368. +(if it is in the sequence to be tried)
  15369. +even if a buffer with that name exists.
  15370. +
  15371. +(generate-new-buffer-name NAME &optional IGNORE)Fbuffer-name
  15372. +Return the name of BUFFER, as a string.
  15373. +With no argument or nil as argument, return the name of the current buffer.
  15374. +
  15375. +(buffer-name &optional BUFFER)Fbuffer-file-name
  15376. +Return name of file BUFFER is visiting, or nil if none.
  15377. +No argument or nil as argument means use the current buffer.
  15378. +
  15379. +(buffer-file-name &optional BUFFER)Fbuffer-local-variables
  15380. +Return an alist of variables that are buffer-local in BUFFER.
  15381. +Most elements look like (SYMBOL . VALUE), describing one variable.
  15382. +For a symbol that is locally unbound, just the symbol appears in the value.
  15383. +Note that storing new VALUEs in these elements doesn't change the variables.
  15384. +No argument or nil as argument means use current buffer as BUFFER.
  15385. +
  15386. +(buffer-local-variables &optional BUFFER)Fbuffer-modified-p
  15387. +Return t if BUFFER was modified since its file was last read or saved.
  15388. +No argument or nil as argument means use current buffer as BUFFER.
  15389. +
  15390. +(buffer-modified-p &optional BUFFER)Fset-buffer-modified-p
  15391. +Mark current buffer as modified or unmodified according to FLAG.
  15392. +A non-nil FLAG means mark the buffer modified.
  15393. +
  15394. +(set-buffer-modified-p FLAG)Fbuffer-modified-tick
  15395. +Return BUFFER's tick counter, incremented for each change in text.
  15396. +Each buffer has a tick counter which is incremented each time the text in
  15397. +that buffer is changed.  It wraps around occasionally.
  15398. +No argument or nil as argument means use current buffer as BUFFER.
  15399. +
  15400. +(buffer-modified-tick &optional BUFFER)Frename-buffer
  15401. +Change current buffer's name to NEWNAME (a string).
  15402. +If second arg UNIQUE is nil or omitted, it is an error if a
  15403. +buffer named NEWNAME already exists.
  15404. +If UNIQUE is non-nil, come up with a new name using
  15405. +`generate-new-buffer-name'.
  15406. +Interactively, you can set UNIQUE with a prefix argument.
  15407. +We return the name we actually gave the buffer.
  15408. +This does not change the name of the visited file (if any).
  15409. +
  15410. +(rename-buffer NAME &optional UNIQUE)Fother-buffer
  15411. +Return most recently selected buffer other than BUFFER.
  15412. +Buffers not visible in windows are preferred to visible buffers,
  15413. +unless optional second argument VISIBLE-OK is non-nil.
  15414. +If no other buffer exists, the buffer `*scratch*' is returned.
  15415. +If BUFFER is omitted or nil, some interesting buffer is returned.
  15416. +
  15417. +(other-buffer &optional BUFFER VISIBLE-OK)Fbuffer-disable-undo
  15418. +Make BUFFER stop keeping undo information.
  15419. +No argument or nil as argument means do this for the current buffer.
  15420. +
  15421. +(buffer-disable-undo &optional BUFFER)Fbuffer-enable-undo
  15422. +Start keeping undo information for buffer BUFFER.
  15423. +No argument or nil as argument means do this for the current buffer.
  15424. +
  15425. +(buffer-enable-undo &optional BUFFER)Vkill-buffer-hook
  15426. +Hook to be run (by `run-hooks', which see) when a buffer is killed.
  15427. +The buffer being killed will be current while the hook is running.
  15428. +See `kill-buffer'.Fkill-buffer
  15429. +Kill the buffer BUFFER.
  15430. +The argument may be a buffer or may be the name of a buffer.
  15431. +An argument of nil means kill the current buffer.
  15432. +
  15433. +Value is t if the buffer is actually killed, nil if user says no.
  15434. +
  15435. +The value of `kill-buffer-hook' (which may be local to that buffer),
  15436. +if not void, is a list of functions to be called, with no arguments,
  15437. +before the buffer is actually killed.  The buffer to be killed is current
  15438. +when the hook functions are called.
  15439. +
  15440. +Any processes that have this buffer as the `process-buffer' are killed
  15441. +with `delete-process'.
  15442. +
  15443. +(kill-buffer BUFNAME)Fswitch-to-buffer
  15444. +Select buffer BUFFER in the current window.
  15445. +BUFFER may be a buffer or a buffer name.
  15446. +Optional second arg NORECORD non-nil means
  15447. +do not put this buffer at the front of the list of recently selected ones.
  15448. +
  15449. +WARNING: This is NOT the way to work on another buffer temporarily
  15450. +within a Lisp program!  Use `set-buffer' instead.  That avoids messing with
  15451. +the window-buffer correspondences.
  15452. +
  15453. +(switch-to-buffer BUFNAME &optional NORECORD)Fpop-to-buffer
  15454. +Select buffer BUFFER in some window, preferably a different one.
  15455. +If BUFFER is nil, then some other buffer is chosen.
  15456. +If `pop-up-windows' is non-nil, windows can be split to do this.
  15457. +If optional second arg OTHER-WINDOW is non-nil, insist on finding another
  15458. +window even if BUFFER is already visible in the selected window.
  15459. +
  15460. +(pop-to-buffer BUFNAME &optional OTHER)Fcurrent-buffer
  15461. +Return the current buffer as a Lisp object.
  15462. +
  15463. +(current-buffer)Fset-buffer
  15464. +Make the buffer BUFFER current for editing operations.
  15465. +BUFFER may be a buffer or the name of an existing buffer.
  15466. +See also `save-excursion' when you want to make a buffer current temporarily.
  15467. +This function does not display the buffer, so its effect ends
  15468. +when the current command terminates.
  15469. +Use `switch-to-buffer' or `pop-to-buffer' to switch buffers permanently.
  15470. +
  15471. +(set-buffer BUFNAME)Fbarf-if-buffer-read-only
  15472. +Signal a `buffer-read-only' error if the current buffer is read-only.
  15473. +
  15474. +(barf-if-buffer-read-only)Fbury-buffer
  15475. +Put BUFFER at the end of the list of all buffers.
  15476. +There it is the least likely candidate for `other-buffer' to return;
  15477. +thus, the least likely buffer for \[switch-to-buffer] to select by default.
  15478. +If BUFFER is nil or omitted, bury the current buffer.
  15479. +Also, if BUFFER is nil or omitted, remove the current buffer from the
  15480. +selected window if it is displayed there.
  15481. +
  15482. +(bury-buffer &optional BUF)Ferase-buffer
  15483. +Delete the entire contents of the current buffer.
  15484. +Any narrowing restriction in effect (see `narrow-to-region') is removed,
  15485. +so the buffer is truly empty after this.
  15486. +
  15487. +(erase-buffer)Flist-buffers
  15488. +Display a list of names of existing buffers.
  15489. +The list is displayed in a buffer named `*Buffer List*'.
  15490. +Note that buffers with names starting with spaces are omitted.
  15491. +Non-null optional arg FILES-ONLY means mention only file buffers.
  15492. +
  15493. +The M column contains a * for buffers that are modified.
  15494. +The R column contains a % for buffers that are read-only.
  15495. +
  15496. +(list-buffers &optional FILES)Fkill-all-local-variables
  15497. +Switch to Fundamental mode by killing current buffer's local variables.
  15498. +Most local variable bindings are eliminated so that the default values
  15499. +become effective once more.  Also, the syntax table is set from
  15500. +`standard-syntax-table', the local keymap is set to nil,
  15501. +and the abbrev table from `fundamental-mode-abbrev-table'.
  15502. +This function also forces redisplay of the mode line.
  15503. +
  15504. +Every function to select a new major mode starts by
  15505. +calling this function.
  15506. +
  15507. +As a special exception, local variables whose names have
  15508. +a non-nil `permanent-local' property are not eliminated by this function.
  15509. +
  15510. +The first thing this function does is run
  15511. +the normal hook `change-major-mode-hook'.
  15512. +
  15513. +(kill-all-local-variables)Foverlayp
  15514. +Return t if OBJECT is an overlay.
  15515. +
  15516. +(overlayp OBJECT)Fmake-overlay
  15517. +Create a new overlay with range BEG to END in BUFFER.
  15518. +If omitted, BUFFER defaults to the current buffer.
  15519. +BEG and END may be integers or markers.
  15520. +
  15521. +(make-overlay BEG END &optional BUFFER)Fmove-overlay
  15522. +Set the endpoints of OVERLAY to BEG and END in BUFFER.
  15523. +If BUFFER is omitted, leave OVERLAY in the same buffer it inhabits now.
  15524. +If BUFFER is omitted, and OVERLAY is in no buffer, put it in the current
  15525. +buffer.
  15526. +
  15527. +(move-overlay OVERLAY BEG END &optional BUFFER)Fdelete-overlay
  15528. +Delete the overlay OVERLAY from its buffer.
  15529. +
  15530. +(delete-overlay OVERLAY)Foverlay-start
  15531. +Return the position at which OVERLAY starts.
  15532. +
  15533. +(overlay-start OVERLAY)Foverlay-end
  15534. +Return the position at which OVERLAY ends.
  15535. +
  15536. +(overlay-end OVERLAY)Foverlay-buffer
  15537. +Return the buffer OVERLAY belongs to.
  15538. +
  15539. +(overlay-buffer OVERLAY)Foverlay-properties
  15540. +Return a list of the properties on OVERLAY.
  15541. +This is a copy of OVERLAY's plist; modifying its conses has no effect on
  15542. +OVERLAY.
  15543. +
  15544. +(overlay-properties OVERLAY)Foverlays-at
  15545. +Return a list of the overlays that contain position POS.
  15546. +
  15547. +(overlays-at POS)Fnext-overlay-change
  15548. +Return the next position after POS where an overlay starts or ends.
  15549. +If there are no more overlay boundaries after POS, return (point-max).
  15550. +
  15551. +(next-overlay-change POS)Foverlay-lists
  15552. +Return a pair of lists giving all the overlays of the current buffer.
  15553. +The car has all the overlays before the overlay center;
  15554. +the cdr has all the overlays after the overlay center.
  15555. +Recentering overlays moves overlays between these lists.
  15556. +The lists you get are copies, so that changing them has no effect.
  15557. +However, the overlays you get are the real objects that the buffer uses.
  15558. +
  15559. +(overlay-lists)Foverlay-recenter
  15560. +Recenter the overlays of the current buffer around position POS.
  15561. +
  15562. +(overlay-recenter POS)Foverlay-get
  15563. +Get the property of overlay OVERLAY with property name NAME.
  15564. +
  15565. +(overlay-get OVERLAY PROP)Foverlay-put
  15566. +Set one property of overlay OVERLAY: give property PROP value VALUE.
  15567. +
  15568. +(overlay-put OVERLAY PROP VALUE)Vdefault-mode-line-format
  15569. +Default value of `mode-line-format' for buffers that don't override it.
  15570. +This is the same as (default-value 'mode-line-format).Vdefault-abbrev-mode
  15571. +Default value of `abbrev-mode' for buffers that do not override it.
  15572. +This is the same as (default-value 'abbrev-mode).Vdefault-ctl-arrow
  15573. +Default value of `ctl-arrow' for buffers that do not override it.
  15574. +This is the same as (default-value 'ctl-arrow).Vdefault-truncate-lines
  15575. +Default value of `truncate-lines' for buffers that do not override it.
  15576. +This is the same as (default-value 'truncate-lines).Vdefault-fill-column
  15577. +Default value of `fill-column' for buffers that do not override it.
  15578. +This is the same as (default-value 'fill-column).Vdefault-left-margin
  15579. +Default value of `left-margin' for buffers that do not override it.
  15580. +This is the same as (default-value 'left-margin).Vdefault-tab-width
  15581. +Default value of `tab-width' for buffers that do not override it.
  15582. +This is the same as (default-value 'tab-width).Vdefault-case-fold-search
  15583. +Default value of `case-fold-search' for buffers that don't override it.
  15584. +This is the same as (default-value 'case-fold-search).Vdefault-buffer-file-type
  15585. +Default file type for buffers that do not override it.
  15586. +This is the same as (default-value 'buffer-file-type).
  15587. +The file type is nil for text, t for binary.Vmode-line-format
  15588. +Template for displaying mode line for current buffer.
  15589. +Each buffer has its own value of this variable.
  15590. +Value may be a string, a symbol or a list or cons cell.
  15591. +For a symbol, its value is used (but it is ignored if t or nil).
  15592. + A string appearing directly as the value of a symbol is processed verbatim
  15593. + in that the %-constructs below are not recognized.
  15594. +For a list whose car is a symbol, the symbol's value is taken,
  15595. + and if that is non-nil, the cadr of the list is processed recursively.
  15596. + Otherwise, the caddr of the list (if there is one) is processed.
  15597. +For a list whose car is a string or list, each element is processed
  15598. + recursively and the results are effectively concatenated.
  15599. +For a list whose car is an integer, the cdr of the list is processed
  15600. +  and padded (if the number is positive) or truncated (if negative)
  15601. +  to the width specified by that number.
  15602. +A string is printed verbatim in the mode line except for %-constructs:
  15603. +  (%-constructs are allowed when the string is the entire mode-line-format
  15604. +   or when it is found in a cons-cell or a list)
  15605. +  %b -- print buffer name.      %f -- print visited file name.
  15606. +  %* -- print %, * or hyphen.   %+ -- print *, % or hyphen.
  15607. +    % means buffer is read-only and * means it is modified.
  15608. +    For a modified read-only buffer, %* gives % and %+ gives *.
  15609. +  %s -- print process status.   %l -- print the current line number.
  15610. +  %p -- print percent of buffer above top of window, or Top, Bot or All.
  15611. +  %P -- print percent of buffer above bottom of window, perhaps plus Top,
  15612. +        or print Bottom or All.
  15613. +  %n -- print Narrow if appropriate.
  15614. +  %t -- print T if files is text, B if binary.
  15615. +  %[ -- print one [ for each recursive editing level.  %] similar.
  15616. +  %% -- print %.   %- -- print infinitely many dashes.
  15617. +Decimal digits after the % specify field width to which to pad.Vdefault-major-mode
  15618. +*Major mode for new buffers.  Defaults to `fundamental-mode'.
  15619. +nil here means use current buffer's major mode.Vmajor-mode
  15620. +Symbol for current buffer's major mode.Vmode-name
  15621. +Pretty name of current buffer's major mode (a string).Vabbrev-mode
  15622. +Non-nil turns on automatic expansion of abbrevs as they are inserted.
  15623. +Automatically becomes buffer-local when set in any fashion.Vcase-fold-search
  15624. +*Non-nil if searches should ignore case.
  15625. +Automatically becomes buffer-local when set in any fashion.Vfill-column
  15626. +*Column beyond which automatic line-wrapping should happen.
  15627. +Automatically becomes buffer-local when set in any fashion.Vleft-margin
  15628. +*Column for the default indent-line-function to indent to.
  15629. +Linefeed indents to this column in Fundamental mode.
  15630. +Automatically becomes buffer-local when set in any fashion.Vtab-width
  15631. +*Distance between tab stops (for display of tab characters), in columns.
  15632. +Automatically becomes buffer-local when set in any fashion.Vctl-arrow
  15633. +*Non-nil means display control chars with uparrow.
  15634. +Nil means use backslash and octal digits.
  15635. +Automatically becomes buffer-local when set in any fashion.
  15636. +This variable does not apply to characters whose display is specified
  15637. +in the current display table (if there is one).Vtruncate-lines
  15638. +*Non-nil means do not display continuation lines;
  15639. +give each line of text one screen line.
  15640. +Automatically becomes buffer-local when set in any fashion.
  15641. +
  15642. +Note that this is overridden by the variable
  15643. +`truncate-partial-width-windows' if that variable is non-nil
  15644. +and this buffer is not full-frame width.Vbuffer-file-type
  15645. +*If visited file is text, nil; otherwise, t.Vdefault-directory
  15646. +Name of default directory of current buffer.  Should end with slash.
  15647. +Each buffer has its own value of this variable.Vauto-fill-function
  15648. +Function called (if non-nil) to perform auto-fill.
  15649. +It is called after self-inserting a space at a column beyond `fill-column'.
  15650. +Each buffer has its own value of this variable.
  15651. +NOTE: This variable is not an ordinary hook;
  15652. +It may not be a list of functions.Vbuffer-file-name
  15653. +Name of file visited in current buffer, or nil if not visiting a file.
  15654. +Each buffer has its own value of this variable.Vbuffer-auto-save-file-name
  15655. +Name of file for auto-saving current buffer,
  15656. +or nil if buffer should not be auto-saved.
  15657. +Each buffer has its own value of this variable.Vbuffer-read-only
  15658. +Non-nil if this buffer is read-only.
  15659. +Each buffer has its own value of this variable.Vbuffer-backed-up
  15660. +Non-nil if this buffer's file has been backed up.
  15661. +Backing up is done before the first time the file is saved.
  15662. +Each buffer has its own value of this variable.Vbuffer-saved-size
  15663. +Length of current buffer when last read in, saved or auto-saved.
  15664. +0 initially.
  15665. +Each buffer has its own value of this variable.Vselective-display
  15666. +Non-nil enables selective display:
  15667. +Integer N as value means display only lines
  15668. + that start with less than n columns of space.
  15669. +A value of t means, after a ^M, all the rest of the line is invisible.
  15670. + Then ^M's in the file are written into files as newlines.
  15671. +
  15672. +Automatically becomes buffer-local when set in any fashion.Vselective-display-ellipses
  15673. +t means display ... on previous line when a line is invisible.
  15674. +Automatically becomes buffer-local when set in any fashion.Voverwrite-mode
  15675. +Non-nil if self-insertion should replace existing text.
  15676. +If non-nil and not `overwrite-mode-binary', self-insertion still
  15677. +inserts at the end of a line, and inserts when point is before a tab,
  15678. +until the tab is filled in.
  15679. +If `overwrite-mode-binary', self-insertion replaces newlines and tabs too.
  15680. +Automatically becomes buffer-local when set in any fashion.Vbuffer-display-table
  15681. +Display table that controls display of the contents of current buffer.
  15682. +Automatically becomes buffer-local when set in any fashion.
  15683. +The display table is a vector created with `make-display-table'.
  15684. +The first 256 elements control how to display each possible text character.
  15685. +Each value should be a vector of characters or nil;
  15686. +nil means display the character in the default fashion.
  15687. +The remaining five elements control the display of
  15688. +  the end of a truncated screen line (element 256, a single character);
  15689. +  the end of a continued line (element 257, a single character);
  15690. +  the escape character used to display character codes in octal
  15691. +    (element 258, a single character);
  15692. +  the character used as an arrow for control characters (element 259,
  15693. +    a single character);
  15694. +  the decoration indicating the presence of invisible lines (element 260,
  15695. +    a vector of characters).
  15696. +If this variable is nil, the value of `standard-display-table' is used.
  15697. +Each window can have its own, overriding display table.Vbefore-change-function
  15698. +Function to call before each text change.
  15699. +Two arguments are passed to the function: the positions of
  15700. +the beginning and end of the range of old text to be changed.
  15701. +(For an insertion, the beginning and end are at the same place.)
  15702. +No information is given about the length of the text after the change.
  15703. +
  15704. +Buffer changes made while executing the `before-change-function'
  15705. +don't call any before-change or after-change functions.
  15706. +That's because these variables are temporarily set to nil.
  15707. +As a result, a hook function cannot straightforwardly alter the value of
  15708. +these variables.  See the Emacs Lisp manual for a way of
  15709. +accomplishing an equivalent result by using other variables.Vafter-change-function
  15710. +Function to call after each text change.
  15711. +Three arguments are passed to the function: the positions of
  15712. +the beginning and end of the range of changed text,
  15713. +and the length of the pre-change text replaced by that range.
  15714. +(For an insertion, the pre-change length is zero;
  15715. +for a deletion, that length is the number of characters deleted,
  15716. +and the post-change beginning and end are at the same place.)
  15717. +
  15718. +Buffer changes made while executing the `after-change-function'
  15719. +don't call any before-change or after-change functions.
  15720. +That's because these variables are temporarily set to nil.
  15721. +As a result, a hook function cannot straightforwardly alter the value of
  15722. +these variables.  See the Emacs Lisp manual for a way of
  15723. +accomplishing an equivalent result by using other variables.Vbefore-change-functions
  15724. +List of functions to call before each text change.
  15725. +Two arguments are passed to each function: the positions of
  15726. +the beginning and end of the range of old text to be changed.
  15727. +(For an insertion, the beginning and end are at the same place.)
  15728. +No information is given about the length of the text after the change.
  15729. +
  15730. +Buffer changes made while executing the `before-change-functions'
  15731. +don't call any before-change or after-change functions.
  15732. +That's because these variables are temporarily set to nil.
  15733. +As a result, a hook function cannot straightforwardly alter the value of
  15734. +these variables.  See the Emacs Lisp manual for a way of
  15735. +accomplishing an equivalent result by using other variables.Vafter-change-functions
  15736. +List of function to call after each text change.
  15737. +Three arguments are passed to each function: the positions of
  15738. +the beginning and end of the range of changed text,
  15739. +and the length of the pre-change text replaced by that range.
  15740. +(For an insertion, the pre-change length is zero;
  15741. +for a deletion, that length is the number of characters deleted,
  15742. +and the post-change beginning and end are at the same place.)
  15743. +
  15744. +Buffer changes made while executing the `after-change-functions'
  15745. +don't call any before-change or after-change functions.
  15746. +That's because these variables are temporarily set to nil.
  15747. +As a result, a hook function cannot straightforwardly alter the value of
  15748. +these variables.  See the Emacs Lisp manual for a way of
  15749. +accomplishing an equivalent result by using other variables.Vfirst-change-hook
  15750. +A list of functions to call before changing a buffer which is unmodified.
  15751. +The functions are run using the `run-hooks' function.Vbuffer-undo-list
  15752. +List of undo entries in current buffer.
  15753. +Recent changes come first; older changes follow newer.
  15754. +
  15755. +An entry (START . END) represents an insertion which begins at
  15756. +position START and ends at position END.
  15757. +
  15758. +An entry (TEXT . POSITION) represents the deletion of the string TEXT
  15759. +from (abs POSITION).  If POSITION is positive, point was at the front
  15760. +of the text being deleted; if negative, point was at the end.
  15761. +
  15762. +An entry (t HIGHWORD LOWWORD) indicates that the buffer had been
  15763. +previously unmodified.  HIGHWORD and LOWWORD are the high and low
  15764. +16-bit words of the buffer's modification count at the time.  If the
  15765. +modification count of the most recent save is different, this entry is
  15766. +obsolete.
  15767. +
  15768. +An entry (nil PROP VAL BEG . END) indicates that a text property
  15769. +was modified between BEG and END.  PROP is the property name,
  15770. +and VAL is the old value.
  15771. +
  15772. +An entry of the form POSITION indicates that point was at the buffer
  15773. +location given by the integer.  Undoing an entry of this form places
  15774. +point at POSITION.
  15775. +
  15776. +nil marks undo boundaries.  The undo command treats the changes
  15777. +between two undo boundaries as a single step to be undone.
  15778. +
  15779. +If the value of the variable is t, undo information is not recorded.Vmark-active
  15780. +Non-nil means the mark and region are currently active in this buffer.
  15781. +Automatically local in all buffers.Vtransient-mark-mode
  15782. +*Non-nil means deactivate the mark when the buffer contents change.Vinhibit-read-only
  15783. +*Non-nil means disregard read-only status of buffers or characters.
  15784. +If the value is t, disregard `buffer-read-only' and all `read-only'
  15785. +text properties.  If the value is a list, disregard `buffer-read-only'
  15786. +and disregard a `read-only' text property if the property value
  15787. +is a member of the list.Vkill-buffer-query-functions
  15788. +List of functions called with no args to query before killing a buffer.Flock-buffer
  15789. +Lock FILE, if current buffer is modified.
  15790. +FILE defaults to current buffer's visited file,
  15791. +or else nothing is done if current buffer isn't visiting a file.
  15792. +
  15793. +(lock-buffer &optional FN)Funlock-buffer
  15794. +Unlock the file visited in the current buffer,
  15795. +if it should normally be locked.
  15796. +
  15797. +(unlock-buffer)Ffile-locked-p
  15798. +Return nil if the FILENAME is not locked,
  15799. +t if it is locked by you, else a string of the name of the locker.
  15800. +
  15801. +(file-locked-p &optional FN)Fmarker-buffer
  15802. +Return the buffer that MARKER points into, or nil if none.
  15803. +Returns nil if MARKER points into a dead buffer.
  15804. +
  15805. +(marker-buffer MARKER)Fmarker-position
  15806. +Return the position MARKER points at, as a character number.
  15807. +
  15808. +(marker-position MARKER)Fset-marker
  15809. +Position MARKER before character number NUMBER in BUFFER.
  15810. +BUFFER defaults to the current buffer.
  15811. +If NUMBER is nil, makes marker point nowhere.
  15812. +Then it no longer slows down editing in any buffer.
  15813. +Returns MARKER.
  15814. +
  15815. +(set-marker MARKER POS &optional BUFFER)Fcopy-marker
  15816. +Return a new marker pointing at the same place as MARKER.
  15817. +If argument is a number, makes a new marker pointing
  15818. +at that position in the current buffer.
  15819. +
  15820. +(copy-marker MARKER)Ftext-properties-at
  15821. +Return the list of properties held by the character at POSITION
  15822. +in optional argument OBJECT, a string or buffer.  If nil, OBJECT
  15823. +defaults to the current buffer.
  15824. +If POSITION is at the end of OBJECT, the value is nil.
  15825. +
  15826. +(text-properties-at POS &optional OBJECT)Fget-text-property
  15827. +Return the value of position POS's property PROP, in OBJECT.
  15828. +OBJECT is optional and defaults to the current buffer.
  15829. +If POSITION is at the end of OBJECT, the value is nil.
  15830. +
  15831. +(get-text-property POS PROP &optional OBJECT)Fget-char-property
  15832. +Return the value of position POS's property PROP, in OBJECT.
  15833. +OBJECT is optional and defaults to the current buffer.
  15834. +If POS is at the end of OBJECT, the value is nil.
  15835. +If OBJECT is a buffer, then overlay properties are considered as well as
  15836. +text properties.
  15837. +If OBJECT is a window, then that window's buffer is used, but window-specific
  15838. +overlays are considered only if they are associated with OBJECT.
  15839. +
  15840. +(get-char-property POS PROP &optional OBJECT)Fnext-property-change
  15841. +Return the position of next property change.
  15842. +Scans characters forward from POS in OBJECT till it finds
  15843. +a change in some text property, then returns the position of the change.
  15844. +The optional second argument OBJECT is the string or buffer to scan.
  15845. +Return nil if the property is constant all the way to the end of OBJECT.
  15846. +If the value is non-nil, it is a position greater than POS, never equal.
  15847. +
  15848. +If the optional third argument LIMIT is non-nil, don't search
  15849. +past position LIMIT; return LIMIT if nothing is found before LIMIT.
  15850. +
  15851. +(next-property-change POS &optional OBJECT LIMIT)Fnext-single-property-change
  15852. +Return the position of next property change for a specific property.
  15853. +Scans characters forward from POS till it finds
  15854. +a change in the PROP property, then returns the position of the change.
  15855. +The optional third argument OBJECT is the string or buffer to scan.
  15856. +The property values are compared with `eq'.
  15857. +Return nil if the property is constant all the way to the end of OBJECT.
  15858. +If the value is non-nil, it is a position greater than POS, never equal.
  15859. +
  15860. +If the optional fourth argument LIMIT is non-nil, don't search
  15861. +past position LIMIT; return LIMIT if nothing is found before LIMIT.
  15862. +
  15863. +(next-single-property-change POS PROP &optional OBJECT LIMIT)Fprevious-property-change
  15864. +Return the position of previous property change.
  15865. +Scans characters backwards from POS in OBJECT till it finds
  15866. +a change in some text property, then returns the position of the change.
  15867. +The optional second argument OBJECT is the string or buffer to scan.
  15868. +Return nil if the property is constant all the way to the start of OBJECT.
  15869. +If the value is non-nil, it is a position less than POS, never equal.
  15870. +
  15871. +If the optional third argument LIMIT is non-nil, don't search
  15872. +back past position LIMIT; return LIMIT if nothing is found until LIMIT.
  15873. +
  15874. +(previous-property-change POS &optional OBJECT LIMIT)Fprevious-single-property-change
  15875. +Return the position of previous property change for a specific property.
  15876. +Scans characters backward from POS till it finds
  15877. +a change in the PROP property, then returns the position of the change.
  15878. +The optional third argument OBJECT is the string or buffer to scan.
  15879. +The property values are compared with `eq'.
  15880. +Return nil if the property is constant all the way to the start of OBJECT.
  15881. +If the value is non-nil, it is a position less than POS, never equal.
  15882. +
  15883. +If the optional fourth argument LIMIT is non-nil, don't search
  15884. +back past position LIMIT; return LIMIT if nothing is found until LIMIT.
  15885. +
  15886. +(previous-single-property-change POS PROP &optional OBJECT LIMIT)Fadd-text-properties
  15887. +Add properties to the text from START to END.
  15888. +The third argument PROPS is a property list
  15889. +specifying the property values to add.
  15890. +The optional fourth argument, OBJECT,
  15891. +is the string or buffer containing the text.
  15892. +Return t if any property value actually changed, nil otherwise.
  15893. +
  15894. +(add-text-properties START END PROPERTIES &optional OBJECT)Fput-text-property
  15895. +Set one property of the text from START to END.
  15896. +The third and fourth arguments PROP and VALUE
  15897. +specify the property to add.
  15898. +The optional fifth argument, OBJECT,
  15899. +is the string or buffer containing the text.
  15900. +
  15901. +(put-text-property START END PROP VALUE &optional OBJECT)Fset-text-properties
  15902. +Completely replace properties of text from START to END.
  15903. +The third argument PROPS is the new property list.
  15904. +The optional fourth argument, OBJECT,
  15905. +is the string or buffer containing the text.
  15906. +
  15907. +(set-text-properties START END PROPS &optional OBJECT)Fremove-text-properties
  15908. +Remove some properties from text from START to END.
  15909. +The third argument PROPS is a property list
  15910. +whose property names specify the properties to remove.
  15911. +(The values stored in PROPS are ignored.)
  15912. +The optional fourth argument, OBJECT,
  15913. +is the string or buffer containing the text.
  15914. +Return t if any property was actually removed, nil otherwise.
  15915. +
  15916. +(remove-text-properties START END PROPS &optional OBJECT)Ftext-property-any
  15917. +Check text from START to END to see if PROP is ever `eq' to VALUE.
  15918. +If so, return the position of the first character whose PROP is `eq'
  15919. +to VALUE.  Otherwise return nil.
  15920. +The optional fifth argument, OBJECT, is the string or buffer
  15921. +containing the text.
  15922. +
  15923. +(text-property-any START END PROP VALUE &optional OBJECT)Ftext-property-not-all
  15924. +Check text from START to END to see if PROP is ever not `eq' to VALUE.
  15925. +If so, return the position of the first character whose PROP is not
  15926. +`eq' to VALUE.  Otherwise, return nil.
  15927. +The optional fifth argument, OBJECT, is the string or buffer
  15928. +containing the text.
  15929. +
  15930. +(text-property-not-all START END PROP VALUE &optional OBJECT)Ferase-text-properties
  15931. +Remove all properties from the text from START to END.
  15932. +The optional third argument, OBJECT,
  15933. +is the string or buffer containing the text.
  15934. +
  15935. +(erase-text-properties START END &optional OBJECT)Vinterval-balance-threshold
  15936. +Threshold for rebalancing interval trees, expressed as the
  15937. +percentage by which the left interval tree should not differ from the right.Vinhibit-point-motion-hooks
  15938. +If non-nil, don't call the text property values of
  15939. +`point-left' and `point-entered'.Fread-from-minibuffer
  15940. +Read a string from the minibuffer, prompting with string PROMPT.
  15941. +If optional second arg INITIAL-CONTENTS is non-nil, it is a string
  15942. +  to be inserted into the minibuffer before reading input.
  15943. +  If INITIAL-CONTENTS is (STRING . POSITION), the initial input
  15944. +  is STRING, but point is placed POSITION characters into the string.
  15945. +Third arg KEYMAP is a keymap to use whilst reading;
  15946. +  if omitted or nil, the default is `minibuffer-local-map'.
  15947. +If fourth arg READ is non-nil, then interpret the result as a lisp object
  15948. +  and return that object:
  15949. +  in other words, do `(car (read-from-string INPUT-STRING))'
  15950. +Fifth arg HIST, if non-nil, specifies a history list
  15951. +  and optionally the initial position in the list.
  15952. +  It can be a symbol, which is the history list variable to use,
  15953. +  or it can be a cons cell (HISTVAR . HISTPOS).
  15954. +  In that case, HISTVAR is the history list variable to use,
  15955. +  and HISTPOS is the initial position (the position in the list
  15956. +  which INITIAL-CONTENTS corresponds to).
  15957. +  Positions are counted starting from 1 at the beginning of the list.
  15958. +
  15959. +(read-from-minibuffer PROMPT &optional INITIAL-CONTENTS KEYMAP READ HIST)Fread-minibuffer
  15960. +Return a Lisp object read using the minibuffer.
  15961. +Prompt with PROMPT.  If non-nil, optional second arg INITIAL-CONTENTS
  15962. +is a string to insert in the minibuffer before reading.
  15963. +
  15964. +(read-minibuffer PROMPT &optional INITIAL-CONTENTS)Feval-minibuffer
  15965. +Return value of Lisp expression read using the minibuffer.
  15966. +Prompt with PROMPT.  If non-nil, optional second arg INITIAL-CONTENTS
  15967. +is a string to insert in the minibuffer before reading.
  15968. +
  15969. +(eval-minibuffer PROMPT &optional INITIAL-CONTENTS)Fread-string
  15970. +Read a string from the minibuffer, prompting with string PROMPT.
  15971. +If non-nil second arg INITIAL-INPUT is a string to insert before reading.
  15972. +
  15973. +(read-string PROMPT &optional INITIAL-INPUT)Fread-no-blanks-input
  15974. +Args PROMPT and INIT, strings.  Read a string from the terminal, not allowing blanks.
  15975. +Prompt with PROMPT, and provide INIT as an initial value of the input string.
  15976. +
  15977. +(read-no-blanks-input PROMPT &optional INIT)Fread-command
  15978. +One arg PROMPT, a string.  Read the name of a command and return as a symbol.
  15979. +Prompts with PROMPT.
  15980. +
  15981. +(read-command PROMPT)Fread-function
  15982. +One arg PROMPT, a string.  Read the name of a function and return as a symbol.
  15983. +Prompts with PROMPT.
  15984. +
  15985. +(read-function PROMPT)Fread-variable
  15986. +One arg PROMPT, a string.  Read the name of a user variable and return
  15987. +it as a symbol.  Prompts with PROMPT.
  15988. +A user variable is one whose documentation starts with a `*' character.
  15989. +
  15990. +(read-variable PROMPT)Fread-buffer
  15991. +One arg PROMPT, a string.  Read the name of a buffer and return as a string.
  15992. +Prompts with PROMPT.
  15993. +Optional second arg is value to return if user enters an empty line.
  15994. +If optional third arg REQUIRE-MATCH is non-nil, only existing buffer names are allowed.
  15995. +
  15996. +(read-buffer PROMPT &optional DEF REQUIRE-MATCH)Ftry-completion
  15997. +Return common substring of all completions of STRING in ALIST.
  15998. +Each car of each element of ALIST is tested to see if it begins with STRING.
  15999. +All that match are compared together; the longest initial sequence
  16000. +common to all matches is returned as a string.
  16001. +If there is no match at all, nil is returned.
  16002. +For an exact match, t is returned.
  16003. +
  16004. +ALIST can be an obarray instead of an alist.
  16005. +Then the print names of all symbols in the obarray are the possible matches.
  16006. +
  16007. +ALIST can also be a function to do the completion itself.
  16008. +It receives three arguments: the values STRING, PREDICATE and nil.
  16009. +Whatever it returns becomes the value of `try-completion'.
  16010. +
  16011. +If optional third argument PREDICATE is non-nil,
  16012. +it is used to test each possible match.
  16013. +The match is a candidate only if PREDICATE returns non-nil.
  16014. +The argument given to PREDICATE is the alist element or the symbol from the obarray.
  16015. +
  16016. +(try-completion STRING ALIST &optional PRED)Fall-completions
  16017. +Search for partial matches to STRING in ALIST.
  16018. +Each car of each element of ALIST is tested to see if it begins with STRING.
  16019. +The value is a list of all the strings from ALIST that match.
  16020. +ALIST can be an obarray instead of an alist.
  16021. +Then the print names of all symbols in the obarray are the possible matches.
  16022. +
  16023. +ALIST can also be a function to do the completion itself.
  16024. +It receives three arguments: the values STRING, PREDICATE and t.
  16025. +Whatever it returns becomes the value of `all-completion'.
  16026. +
  16027. +If optional third argument PREDICATE is non-nil,
  16028. +it is used to test each possible match.
  16029. +The match is a candidate only if PREDICATE returns non-nil.
  16030. +The argument given to PREDICATE is the alist element or the symbol from the obarray.
  16031. +
  16032. +(all-completions STRING ALIST &optional PRED)Fcompleting-read
  16033. +Read a string in the minibuffer, with completion.
  16034. +Args: PROMPT, TABLE, PREDICATE, REQUIRE-MATCH, INITIAL-INPUT, HIST.
  16035. +PROMPT is a string to prompt with; normally it ends in a colon and a space.
  16036. +TABLE is an alist whose elements' cars are strings, or an obarray.
  16037. +PREDICATE limits completion to a subset of TABLE.
  16038. +See `try-completion' for more details on completion, TABLE, and PREDICATE.
  16039. +If REQUIRE-MATCH is non-nil, the user is not allowed to exit unless
  16040. + the input is (or completes to) an element of TABLE or is null.
  16041. + If it is also not t, Return does not exit if it does non-null completion.
  16042. +If INITIAL-INPUT is non-nil, insert it in the minibuffer initially.
  16043. +  If it is (STRING . POSITION), the initial input
  16044. +  is STRING, but point is placed POSITION characters into the string.
  16045. +HIST, if non-nil, specifies a history list
  16046. +  and optionally the initial position in the list.
  16047. +  It can be a symbol, which is the history list variable to use,
  16048. +  or it can be a cons cell (HISTVAR . HISTPOS).
  16049. +  In that case, HISTVAR is the history list variable to use,
  16050. +  and HISTPOS is the initial position (the position in the list
  16051. +  which INITIAL-CONTENTS corresponds to).
  16052. +  Positions are counted starting from 1 at the beginning of the list.
  16053. +Completion ignores case if the ambient value of
  16054. +  `completion-ignore-case' is non-nil.
  16055. +
  16056. +(completing-read PROMPT TABLE &optional PRED REQUIRE-MATCH INIT HIST)Fminibuffer-complete
  16057. +Complete the minibuffer contents as far as possible.
  16058. +Return nil if there is no valid completion, else t.
  16059. +If no characters can be completed, display a list of possible completions.
  16060. +If you repeat this command after it displayed such a list,
  16061. +scroll the window of possible completions.
  16062. +
  16063. +(minibuffer-complete)Fminibuffer-complete-and-exit
  16064. +Complete the minibuffer contents, and maybe exit.
  16065. +Exit if the name is valid with no completion needed.
  16066. +If name was completed to a valid match,
  16067. +a repetition of this command will exit.
  16068. +
  16069. +(minibuffer-complete-and-exit)Fminibuffer-complete-word
  16070. +Complete the minibuffer contents at most a single word.
  16071. +After one word is completed as much as possible, a space or hyphen
  16072. +is added, provided that matches some possible completion.
  16073. +Return nil if there is no valid completion, else t.
  16074. +
  16075. +(minibuffer-complete-word)Fdisplay-completion-list
  16076. +Display the list of completions, COMPLETIONS, using `standard-output'.
  16077. +Each element may be just a symbol or string
  16078. +or may be a list of two strings to be printed as if concatenated.
  16079. +`standard-output' must be a buffer.
  16080. +At the end, run the normal hook `completion-setup-hook'.
  16081. +It can find the completion buffer in `standard-output'.
  16082. +
  16083. +(display-completion-list COMPLETIONS)Fminibuffer-completion-help
  16084. +Display a list of possible completions of the current minibuffer contents.
  16085. +
  16086. +(minibuffer-completion-help)Fself-insert-and-exit
  16087. +Terminate minibuffer input.
  16088. +
  16089. +(self-insert-and-exit)Fexit-minibuffer
  16090. +Terminate this minibuffer argument.
  16091. +
  16092. +(exit-minibuffer)Fminibuffer-depth
  16093. +Return current depth of activations of minibuffer, a nonnegative integer.
  16094. +
  16095. +(minibuffer-depth)Fminibuffer-prompt
  16096. +Return the prompt string of the currently-active minibuffer.
  16097. +If no minibuffer is active, return nil.
  16098. +
  16099. +(minibuffer-prompt)Fminibuffer-prompt-width
  16100. +Return the display width of the minibuffer prompt.
  16101. +
  16102. +(minibuffer-prompt-width)Vminibuffer-setup-hook
  16103. +Normal hook run just after entry to minibuffer.Vminibuffer-exit-hook
  16104. +Normal hook run just after exit from minibuffer.Vcompletion-auto-help
  16105. +*Non-nil means automatically provide help for invalid completion input.Vcompletion-ignore-case
  16106. +Non-nil means don't consider case significant in completion.Venable-recursive-minibuffers
  16107. +*Non-nil means to allow minibuffer commands while in the minibuffer.
  16108. +More precisely, this variable makes a difference when the minibuffer window
  16109. +is the selected window.  If you are in some other window, minibuffer commands
  16110. +are allowed even if a minibuffer is active.Vminibuffer-completion-table
  16111. +Alist or obarray used for completion in the minibuffer.
  16112. +This becomes the ALIST argument to `try-completion' and `all-completion'.
  16113. +
  16114. +The value may alternatively be a function, which is given three arguments:
  16115. +  STRING, the current buffer contents;
  16116. +  PREDICATE, the predicate for filtering possible matches;
  16117. +  CODE, which says what kind of things to do.
  16118. +CODE can be nil, t or `lambda'.
  16119. +nil means to return the best completion of STRING, or nil if there is none.
  16120. +t means to return a list of all possible completions of STRING.
  16121. +`lambda' means to return t if STRING is a valid completion as it stands.Vminibuffer-completion-predicate
  16122. +Within call to `completing-read', this holds the PREDICATE argument.Vminibuffer-completion-confirm
  16123. +Non-nil => demand confirmation of completion before exiting minibuffer.Vminibuffer-help-form
  16124. +Value that `help-form' takes on inside the minibuffer.Vminibuffer-history-variable
  16125. +History list symbol to add minibuffer values to.
  16126. +Each minibuffer output is added with
  16127. +  (set minibuffer-history-variable
  16128. +       (cons STRING (symbol-value minibuffer-history-variable)))Vminibuffer-history-position
  16129. +Current position of redoing in the history list.Vminibuffer-auto-raise
  16130. +*Non-nil means entering the minibuffer raises the minibuffer's frame.Vcompletion-regexp-list
  16131. +List of regexps that should restrict possible completions.Ffind-file-name-handler
  16132. +Return FILENAME's handler function for OPERATION, if it has one.
  16133. +Otherwise, return nil.
  16134. +A file name is handled if one of the regular expressions in
  16135. +`file-name-handler-alist' matches it.
  16136. +
  16137. +If OPERATION equals `inhibit-file-name-operation', then we ignore
  16138. +any handlers that are members of `inhibit-file-name-handlers',
  16139. +but we still do run any other handlers.  This lets handlers
  16140. +use the standard functions without calling themselves recursively.
  16141. +
  16142. +(find-file-name-handler FILENAME OPERATION)Ffile-name-directory
  16143. +Return the directory component in file name NAME.
  16144. +Return nil if NAME does not include a directory.
  16145. +Otherwise return a directory spec.
  16146. +Given a Unix syntax file name, returns a string ending in slash;
  16147. +on VMS, perhaps instead a string ending in `:', `]' or `>'.
  16148. +
  16149. +(file-name-directory FILE)Ffile-name-nondirectory
  16150. +Return file name NAME sans its directory.
  16151. +For example, in a Unix-syntax file name,
  16152. +this is everything after the last slash,
  16153. +or the entire name if it contains no slash.
  16154. +
  16155. +(file-name-nondirectory FILE)Funhandled-file-name-directory
  16156. +Return a directly usable directory name somehow associated with FILENAME.
  16157. +A `directly usable' directory name is one that may be used without the
  16158. +intervention of any file handler.
  16159. +If FILENAME is a directly usable file itself, return
  16160. +(file-name-directory FILENAME).
  16161. +The `call-process' and `start-process' functions use this function to
  16162. +get a current directory to run processes in.
  16163. +
  16164. +(unhandled-file-name-directory FILENAME)Ffile-name-as-directory
  16165. +Return a string representing file FILENAME interpreted as a directory.
  16166. +This operation exists because a directory is also a file, but its name as
  16167. +a directory is different from its name as a file.
  16168. +The result can be used as the value of `default-directory'
  16169. +or passed as second argument to `expand-file-name'.
  16170. +For a Unix-syntax file name, just appends a slash.
  16171. +On VMS, converts "[X]FOO.DIR" to "[X.FOO]", etc.
  16172. +
  16173. +(file-name-as-directory FILE)Fdirectory-file-name
  16174. +Returns the file name of the directory named DIR.
  16175. +This is the name of the file that holds the data for the directory DIR.
  16176. +This operation exists because a directory is also a file, but its name as
  16177. +a directory is different from its name as a file.
  16178. +In Unix-syntax, this function just removes the final slash.
  16179. +On VMS, given a VMS-syntax directory name such as "[X.Y]",
  16180. +it returns a file name such as "[X]Y.DIR.1".
  16181. +
  16182. +(directory-file-name DIRECTORY)Fmake-temp-name
  16183. +Generate temporary file name (string) starting with PREFIX (a string).
  16184. +The Emacs process number forms part of the result,
  16185. +so there is no danger of generating a name being used by another process.
  16186. +
  16187. +(make-temp-name PREFIX)Fexpand-file-name
  16188. +Convert FILENAME to absolute, and canonicalize it.
  16189. +Second arg DEFAULT is directory to start with if FILENAME is relative
  16190. + (does not start with slash); if DEFAULT is nil or missing,
  16191. +the current buffer's value of default-directory is used.
  16192. +Path components that are `.' are removed, and 
  16193. +path components followed by `..' are removed, along with the `..' itself;
  16194. +note that these simplifications are done without checking the resulting
  16195. +paths in the file system.
  16196. +An initial `~/' expands to your home directory.
  16197. +An initial `~USER/' expands to USER's home directory.
  16198. +See also the function `substitute-in-file-name'.
  16199. +
  16200. +(expand-file-name NAME &optional DEFAULT)Fsubstitute-in-file-name
  16201. +Substitute environment variables referred to in FILENAME.
  16202. +`$FOO' where FOO is an environment variable name means to substitute
  16203. +the value of that variable.  The variable name should be terminated
  16204. +with a character not a letter, digit or underscore; otherwise, enclose
  16205. +the entire variable name in braces.
  16206. +If `/~' appears, all of FILENAME through that `/' is discarded.
  16207. +
  16208. +On VMS, `$' substitution is not done; this function does little and only
  16209. +duplicates what `expand-file-name' does.
  16210. +
  16211. +(substitute-in-file-name STRING)Fcopy-file
  16212. +Copy FILE to NEWNAME.  Both args must be strings.
  16213. +Signals a `file-already-exists' error if file NEWNAME already exists,
  16214. +unless a third argument OK-IF-ALREADY-EXISTS is supplied and non-nil.
  16215. +A number as third arg means request confirmation if NEWNAME already exists.
  16216. +This is what happens in interactive use with M-x.
  16217. +Fourth arg KEEP-TIME non-nil means give the new file the same
  16218. +last-modified time as the old one.  (This works on only some systems.)
  16219. +A prefix arg makes KEEP-TIME non-nil.
  16220. +
  16221. +(copy-file FILENAME NEWNAME &optional OK-IF-ALREADY-EXISTS KEEP-DATE)Fmake-directory-internal
  16222. +Create a directory.  One argument, a file name string.
  16223. +
  16224. +(make-directory-internal DIRNAME)Fdelete-directory
  16225. +Delete a directory.  One argument, a file name or directory name string.
  16226. +
  16227. +(delete-directory DIRNAME)Fdelete-file
  16228. +Delete specified file.  One argument, a file name string.
  16229. +If file has multiple names, it continues to exist with the other names.
  16230. +
  16231. +(delete-file FILENAME)Frename-file
  16232. +Rename FILE as NEWNAME.  Both args strings.
  16233. +If file has names other than FILE, it continues to have those names.
  16234. +Signals a `file-already-exists' error if a file NEWNAME already exists
  16235. +unless optional third argument OK-IF-ALREADY-EXISTS is non-nil.
  16236. +A number as third arg means request confirmation if NEWNAME already exists.
  16237. +This is what happens in interactive use with M-x.
  16238. +
  16239. +(rename-file FILENAME NEWNAME &optional OK-IF-ALREADY-EXISTS)Fadd-name-to-file
  16240. +Give FILE additional name NEWNAME.  Both args strings.
  16241. +Signals a `file-already-exists' error if a file NEWNAME already exists
  16242. +unless optional third argument OK-IF-ALREADY-EXISTS is non-nil.
  16243. +A number as third arg means request confirmation if NEWNAME already exists.
  16244. +This is what happens in interactive use with M-x.
  16245. +
  16246. +(add-name-to-file FILENAME NEWNAME &optional OK-IF-ALREADY-EXISTS)Fmake-symbolic-link
  16247. +Make a symbolic link to FILENAME, named LINKNAME.  Both args strings.
  16248. +Signals a `file-already-exists' error if a file NEWNAME already exists
  16249. +unless optional third argument OK-IF-ALREADY-EXISTS is non-nil.
  16250. +A number as third arg means request confirmation if NEWNAME already exists.
  16251. +This happens for interactive use with M-x.
  16252. +
  16253. +(make-symbolic-link FILENAME LINKNAME &optional OK-IF-ALREADY-EXISTS)Fdefine-logical-name
  16254. +Define the job-wide logical name NAME to have the value STRING.
  16255. +If STRING is nil or a null string, the logical name NAME is deleted.
  16256. +
  16257. +(define-logical-name VARNAME STRING)Fsysnetunam
  16258. +Open a network connection to PATH using LOGIN as the login string.
  16259. +
  16260. +(sysnetunam PATH LOGIN)Ffile-name-absolute-p
  16261. +Return t if file FILENAME specifies an absolute path name.
  16262. +On Unix, this is a name starting with a `/' or a `~'.
  16263. +
  16264. +(file-name-absolute-p FILENAME)Ffile-exists-p
  16265. +Return t if file FILENAME exists.  (This does not mean you can read it.)
  16266. +See also `file-readable-p' and `file-attributes'.
  16267. +
  16268. +(file-exists-p FILENAME)Ffile-executable-p
  16269. +Return t if FILENAME can be executed by you.
  16270. +For a directory, this means you can access files in that directory.
  16271. +
  16272. +(file-executable-p FILENAME)Ffile-readable-p
  16273. +Return t if file FILENAME exists and you can read it.
  16274. +See also `file-exists-p' and `file-attributes'.
  16275. +
  16276. +(file-readable-p FILENAME)Ffile-symlink-p
  16277. +Return non-nil if file FILENAME is the name of a symbolic link.
  16278. +The value is the name of the file to which it is linked.
  16279. +Otherwise returns nil.
  16280. +
  16281. +(file-symlink-p FILENAME)Ffile-writable-p
  16282. +Return t if file FILENAME can be written or created by you.
  16283. +
  16284. +(file-writable-p FILENAME)Ffile-directory-p
  16285. +Return t if file FILENAME is the name of a directory as a file.
  16286. +A directory name spec may be given instead; then the value is t
  16287. +if the directory so specified exists and really is a directory.
  16288. +
  16289. +(file-directory-p FILENAME)Ffile-accessible-directory-p
  16290. +Return t if file FILENAME is the name of a directory as a file,
  16291. +and files in that directory can be opened by you.  In order to use a
  16292. +directory as a buffer's current directory, this predicate must return true.
  16293. +A directory name spec may be given instead; then the value is t
  16294. +if the directory so specified exists and really is a readable and
  16295. +searchable directory.
  16296. +
  16297. +(file-accessible-directory-p FILENAME)Ffile-modes
  16298. +Return mode bits of FILE, as an integer.
  16299. +
  16300. +(file-modes FILENAME)Fset-file-modes
  16301. +Set mode bits of FILE to MODE (an integer).
  16302. +Only the 12 low bits of MODE are used.
  16303. +
  16304. +(set-file-modes FILENAME MODE)Fset-default-file-modes
  16305. +Set the file permission bits for newly created files.
  16306. +The argument MODE should be an integer; only the low 9 bits are used.
  16307. +This setting is inherited by subprocesses.
  16308. +
  16309. +(set-default-file-modes MODE)Fdefault-file-modes
  16310. +Return the default file protection for created files.
  16311. +The value is an integer.
  16312. +
  16313. +(default-file-modes)Funix-sync
  16314. +Tell Unix to finish all pending disk updates.
  16315. +
  16316. +(unix-sync)Ffile-newer-than-file-p
  16317. +Return t if file FILE1 is newer than file FILE2.
  16318. +If FILE1 does not exist, the answer is nil;
  16319. +otherwise, if FILE2 does not exist, the answer is t.
  16320. +
  16321. +(file-newer-than-file-p FILE1 FILE2)Finsert-file-contents
  16322. +Insert contents of file FILENAME after point.
  16323. +Returns list of absolute file name and length of data inserted.
  16324. +If second argument VISIT is non-nil, the buffer's visited filename
  16325. +and last save file modtime are set, and it is marked unmodified.
  16326. +If visiting and the file does not exist, visiting is completed
  16327. +before the error is signaled.
  16328. +
  16329. +The optional third and fourth arguments BEG and END
  16330. +specify what portion of the file to insert.
  16331. +If VISIT is non-nil, BEG and END must be nil.
  16332. +If optional fifth argument REPLACE is non-nil,
  16333. +it means replace the current buffer contents (in the accessible portion)
  16334. +with the file contents.  This is better than simply deleting and inserting
  16335. +the whole thing because (1) it preserves some marker positions
  16336. +and (2) it puts less data in the undo list.
  16337. +
  16338. +(insert-file-contents FILENAME &optional VISIT BEG END REPLACE)Fwrite-region
  16339. +Write current region into specified file.
  16340. +When called from a program, takes three arguments:
  16341. +START, END and FILENAME.  START and END are buffer positions.
  16342. +Optional fourth argument APPEND if non-nil means
  16343. +  append to existing file contents (if any).
  16344. +Optional fifth argument VISIT if t means
  16345. +  set the last-save-file-modtime of buffer to this file's modtime
  16346. +  and mark buffer not modified.
  16347. +If VISIT is a string, it is a second file name;
  16348. +  the output goes to FILENAME, but the buffer is marked as visiting VISIT.
  16349. +  VISIT is also the file name to lock and unlock for clash detection.
  16350. +If VISIT is neither t nor nil nor a string,
  16351. +  that means do not print the "Wrote file" message.
  16352. +Kludgy feature: if START is a string, then that string is written
  16353. +to the file, instead of any buffer contents, and END is ignored.
  16354. +
  16355. +(write-region START END FILENAME &optional APPEND VISIT)Fcar-less-than-car
  16356. +Return t if (car A) is numerically less than (car B).
  16357. +
  16358. +(car-less-than-car A B)Fverify-visited-file-modtime
  16359. +Return t if last mod time of BUF's visited file matches what BUF records.
  16360. +This means that the file has not been changed since it was visited or saved.
  16361. +
  16362. +(verify-visited-file-modtime BUF)Fclear-visited-file-modtime
  16363. +Clear out records of last mod time of visited file.
  16364. +Next attempt to save will certainly not complain of a discrepancy.
  16365. +
  16366. +(clear-visited-file-modtime)Fvisited-file-modtime
  16367. +Return the current buffer's recorded visited file modification time.
  16368. +The value is a list of the form (HIGH . LOW), like the time values
  16369. +that `file-attributes' returns.
  16370. +
  16371. +(visited-file-modtime)Fset-visited-file-modtime
  16372. +Update buffer's recorded modification time from the visited file's time.
  16373. +Useful if the buffer was not read from the file normally
  16374. +or if the file itself has been changed for some known benign reason.
  16375. +An argument specifies the modification time value to use
  16376. +(instead of that of the visited file), in the form of a list
  16377. +(HIGH . LOW) or (HIGH LOW).
  16378. +
  16379. +(set-visited-file-modtime &optional TIME-LIST)Fdo-auto-save
  16380. +Auto-save all buffers that need it.
  16381. +This is all buffers that have auto-saving enabled
  16382. +and are changed since last auto-saved.
  16383. +Auto-saving writes the buffer into a file
  16384. +so that your editing is not lost if the system crashes.
  16385. +This file is not the file you visited; that changes only when you save.
  16386. +Normally we run the normal hook `auto-save-hook' before saving.
  16387. +
  16388. +Non-nil first argument means do not print any message if successful.
  16389. +Non-nil second argument means save only current buffer.
  16390. +
  16391. +(do-auto-save &optional NO-MESSAGE CURRENT-ONLY)Fset-buffer-auto-saved
  16392. +Mark current buffer as auto-saved with its current text.
  16393. +No auto-save file will be written until the buffer changes again.
  16394. +
  16395. +(set-buffer-auto-saved)Fclear-buffer-auto-save-failure
  16396. +Clear any record of a recent auto-save failure in the current buffer.
  16397. +
  16398. +(clear-buffer-auto-save-failure)Frecent-auto-save-p
  16399. +Return t if buffer has been auto-saved since last read in or saved.
  16400. +
  16401. +(recent-auto-save-p)Fread-file-name-internal
  16402. +Internal subroutine for read-file-name.  Do not call this.
  16403. +
  16404. +(read-file-name-internal STRING DIR ACTION)Fread-file-name
  16405. +Read file name, prompting with PROMPT and completing in directory DIR.
  16406. +Value is not expanded---you must call `expand-file-name' yourself.
  16407. +Default name to DEFAULT if user enters a null string.
  16408. + (If DEFAULT is omitted, the visited file name is used.)
  16409. +Fourth arg MUSTMATCH non-nil means require existing file's name.
  16410. + Non-nil and non-t means also require confirmation after completion.
  16411. +Fifth arg INITIAL specifies text to start with.
  16412. +DIR defaults to current buffer's directory default.
  16413. +
  16414. +(read-file-name PROMPT &optional DIR DEFAULT MUSTMATCH INITIAL)Vinsert-default-directory
  16415. +*Non-nil means when reading a filename start with default dir in minibuffer.Vvms-stmlf-recfm
  16416. +*Non-nil means write new files with record format `stmlf'.
  16417. +nil means use format `var'.  This variable is meaningful only on VMS.Vfile-name-handler-alist
  16418. +*Alist of elements (REGEXP . HANDLER) for file names handled specially.
  16419. +If a file name matches REGEXP, then all I/O on that file is done by calling
  16420. +HANDLER.
  16421. +
  16422. +The first argument given to HANDLER is the name of the I/O primitive
  16423. +to be handled; the remaining arguments are the arguments that were
  16424. +passed to that primitive.  For example, if you do
  16425. +    (file-exists-p FILENAME)
  16426. +and FILENAME is handled by HANDLER, then HANDLER is called like this:
  16427. +    (funcall HANDLER 'file-exists-p FILENAME)
  16428. +The function `find-file-name-handler' checks this list for a handler
  16429. +for its argument.Vafter-insert-file-functions
  16430. +A list of functions to be called at the end of `insert-file-contents'.
  16431. +Each is passed one argument, the number of bytes inserted.  It should return
  16432. +the new byte count, and leave point the same.  If `insert-file-contents' is
  16433. +intercepted by a handler from `file-name-handler-alist', that handler is
  16434. +responsible for calling the after-insert-file-functions if appropriate.Vwrite-region-annotate-functions
  16435. +A list of functions to be called at the start of `write-region'.
  16436. +Each is passed two arguments, START and END as for `write-region'.  It should
  16437. +return a list of pairs (POSITION . STRING) of strings to be effectively
  16438. +inserted at the specified positions of the file being written (1 means to
  16439. +insert before the first byte written).  The POSITIONs must be sorted into
  16440. +increasing order.  If there are several functions in the list, the several
  16441. +lists are merged destructively.Vwrite-region-annotations-so-far
  16442. +When an annotation function is called, this holds the previous annotations.
  16443. +These are the annotations made by other annotation functions
  16444. +that were already called.  See also `write-region-annotate-functions'.Vinhibit-file-name-handlers
  16445. +A list of file name handlers that temporarily should not be used.
  16446. +This applies only to the operation `inhibit-file-name-operation'.Vinhibit-file-name-operation
  16447. +The operation for which `inhibit-file-name-handlers' is applicable.Vauto-save-list-file-name
  16448. +File name in which we write a list of all auto save file names.Fdirectory-files
  16449. +Return a list of names of files in DIRECTORY.
  16450. +There are three optional arguments:
  16451. +If FULL is non-nil, absolute pathnames of the files are returned.
  16452. +If MATCH is non-nil, only pathnames containing that regexp are returned.
  16453. +If NOSORT is non-nil, the list is not sorted--its order is unpredictable.
  16454. + NOSORT is useful if you plan to sort the result yourself.
  16455. +
  16456. +(directory-files DIRNAME &optional FULL MATCH NOSORT)Ffile-name-completion
  16457. +Complete file name FILE in directory DIR.
  16458. +Returns the longest string
  16459. +common to all filenames in DIR that start with FILE.
  16460. +If there is only one and FILE matches it exactly, returns t.
  16461. +Returns nil if DIR contains no name starting with FILE.
  16462. +
  16463. +(file-name-completion FILE DIRNAME)Ffile-name-all-completions
  16464. +Return a list of all completions of file name FILE in directory DIR.
  16465. +These are all file names in directory DIR which begin with FILE.
  16466. +
  16467. +(file-name-all-completions FILE DIRNAME)Ffile-name-all-versions
  16468. +Return a list of all versions of file name FILE in directory DIR.
  16469. +
  16470. +(file-name-all-versions FILE DIRNAME)Ffile-version-limit
  16471. +Return the maximum number of versions allowed for FILE.
  16472. +Returns nil if the file cannot be opened or if there is no version limit.
  16473. +
  16474. +(file-version-limit FILENAME)Ffile-attributes
  16475. +Return a list of attributes of file FILENAME.
  16476. +Value is nil if specified file cannot be opened.
  16477. +Otherwise, list elements are:
  16478. + 0. t for directory, string (name linked to) for symbolic link, or nil.
  16479. + 1. Number of links to file.
  16480. + 2. File uid.
  16481. + 3. File gid.
  16482. + 4. Last access time, as a list of two integers.
  16483. +  First integer has high-order 16 bits of time, second has low 16 bits.
  16484. + 5. Last modification time, likewise.
  16485. + 6. Last status change time, likewise.
  16486. + 7. Size in bytes (-1, if number is out of range).
  16487. + 8. File modes, as a string of ten letters or dashes as in ls -l.
  16488. + 9. t iff file's gid would change if file were deleted and recreated.
  16489. +10. inode number.
  16490. +11. Device number.
  16491. +
  16492. +If file does not exist, returns nil.
  16493. +
  16494. +(file-attributes FILENAME)Vcompletion-ignored-extensions
  16495. +*Completion ignores filenames ending in any string in this list.
  16496. +This variable does not affect lists of possible completions,
  16497. +but does affect the commands that actually do completions.Fforward-char
  16498. +Move point right ARG characters (left if ARG negative).
  16499. +On reaching end of buffer, stop and signal error.
  16500. +
  16501. +(forward-char &optional N)Fbackward-char
  16502. +Move point left ARG characters (right if ARG negative).
  16503. +On attempt to pass beginning or end of buffer, stop and signal error.
  16504. +
  16505. +(backward-char &optional N)Fforward-line
  16506. +Move ARG lines forward (backward if ARG is negative).
  16507. +Precisely, if point is on line I, move to the start of line I + ARG.
  16508. +If there isn't room, go as far as possible (no error).
  16509. +Returns the count of lines left to move.  If moving forward,
  16510. +that is ARG - number of lines moved; if backward, ARG + number moved.
  16511. +With positive ARG, a non-empty line at the end counts as one line
  16512. +  successfully moved (for the return value).
  16513. +
  16514. +(forward-line &optional N)Fbeginning-of-line
  16515. +Move point to beginning of current line.
  16516. +With argument ARG not nil or 1, move forward ARG - 1 lines first.
  16517. +If scan reaches end of buffer, stop there without error.
  16518. +
  16519. +(beginning-of-line &optional N)Fend-of-line
  16520. +Move point to end of current line.
  16521. +With argument ARG not nil or 1, move forward ARG - 1 lines first.
  16522. +If scan reaches end of buffer, stop there without error.
  16523. +
  16524. +(end-of-line &optional N)Fdelete-char
  16525. +Delete the following ARG characters (previous, with negative arg).
  16526. +Optional second arg KILLFLAG non-nil means kill instead (save in kill ring).
  16527. +Interactively, ARG is the prefix arg, and KILLFLAG is set if
  16528. +ARG was explicitly specified.
  16529. +
  16530. +(delete-char N &optional KILLFLAG)Fdelete-backward-char
  16531. +Delete the previous ARG characters (following, with negative ARG).
  16532. +Optional second arg KILLFLAG non-nil means kill instead (save in kill ring).
  16533. +Interactively, ARG is the prefix arg, and KILLFLAG is set if
  16534. +ARG was explicitly specified.
  16535. +
  16536. +(delete-backward-char N &optional KILLFLAG)Fself-insert-command
  16537. +Insert the character you type.
  16538. +Whichever character you type to run this command is inserted.
  16539. +
  16540. +(self-insert-command ARG)Fnewline
  16541. +Insert a newline.  With arg, insert that many newlines.
  16542. +In Auto Fill mode, if no numeric arg, break the preceding line if it's long.
  16543. +
  16544. +(newline &optional ARG1)Vblink-paren-function
  16545. +Function called, if non-nil, whenever a close parenthesis is inserted.
  16546. +More precisely, a char with closeparen syntax is self-inserted.Fcase-table-p
  16547. +Return t iff ARG is a case table.
  16548. +See `set-case-table' for more information on these data structures.
  16549. +
  16550. +(case-table-p TABLE)Fcurrent-case-table
  16551. +Return the case table of the current buffer.
  16552. +
  16553. +(current-case-table)Fstandard-case-table
  16554. +Return the standard case table.
  16555. +This is the one used for new buffers.
  16556. +
  16557. +(standard-case-table)Fset-case-table
  16558. +Select a new case table for the current buffer.
  16559. +A case table is a list (DOWNCASE UPCASE CANONICALIZE EQUIVALENCES)
  16560. + where each element is either nil or a string of length 256.
  16561. +DOWNCASE maps each character to its lower-case equivalent.
  16562. +UPCASE maps each character to its upper-case equivalent;
  16563. + if lower and upper case characters are in 1-1 correspondence,
  16564. + you may use nil and the upcase table will be deduced from DOWNCASE.
  16565. +CANONICALIZE maps each character to a canonical equivalent;
  16566. + any two characters that are related by case-conversion have the same
  16567. + canonical equivalent character; it may be nil, in which case it is
  16568. + deduced from DOWNCASE and UPCASE.
  16569. +EQUIVALENCES is a map that cyclicly permutes each equivalence class
  16570. + (of characters with the same canonical equivalent); it may be nil,
  16571. + in which case it is deduced from CANONICALIZE.
  16572. +
  16573. +(set-case-table TABLE)Fset-standard-case-table
  16574. +Select a new standard case table for new buffers.
  16575. +See `set-case-table' for more info on case tables.
  16576. +
  16577. +(set-standard-case-table TABLE)Vascii-downcase-table
  16578. +String mapping ASCII characters to lowercase equivalents.Vascii-upcase-table
  16579. +String mapping ASCII characters to uppercase equivalents.Fupcase
  16580. +Convert argument to upper case and return that.
  16581. +The argument may be a character or string.  The result has the same type.
  16582. +The argument object is not altered.  See also `capitalize'.
  16583. +
  16584. +(upcase OBJ)Fdowncase
  16585. +Convert argument to lower case and return that.
  16586. +The argument may be a character or string.  The result has the same type.
  16587. +The argument object is not altered.
  16588. +
  16589. +(downcase OBJ)Fcapitalize
  16590. +Convert argument to capitalized form and return that.
  16591. +This means that each word's first character is upper case
  16592. +and the rest is lower case.
  16593. +The argument may be a character or string.  The result has the same type.
  16594. +The argument object is not altered.
  16595. +
  16596. +(capitalize OBJ)Fupcase-region
  16597. +Convert the region to upper case.  In programs, wants two arguments.
  16598. +These arguments specify the starting and ending character numbers of
  16599. +the region to operate on.  When used as a command, the text between
  16600. +point and the mark is operated on.
  16601. +See also `capitalize-region'.
  16602. +
  16603. +(upcase-region B E)Fdowncase-region
  16604. +Convert the region to lower case.  In programs, wants two arguments.
  16605. +These arguments specify the starting and ending character numbers of
  16606. +the region to operate on.  When used as a command, the text between
  16607. +point and the mark is operated on.
  16608. +
  16609. +(downcase-region B E)Fcapitalize-region
  16610. +Convert the region to capitalized form.
  16611. +Capitalized form means each word's first character is upper case
  16612. +and the rest of it is lower case.
  16613. +In programs, give two arguments, the starting and ending
  16614. +character positions to operate on.
  16615. +
  16616. +(capitalize-region B E)Fupcase-word
  16617. +Convert following word (or ARG words) to upper case, moving over.
  16618. +With negative argument, convert previous words but do not move.
  16619. +See also `capitalize-word'.
  16620. +
  16621. +(upcase-word ARG)Fdowncase-word
  16622. +Convert following word (or ARG words) to lower case, moving over.
  16623. +With negative argument, convert previous words but do not move.
  16624. +
  16625. +(downcase-word ARG)Fcapitalize-word
  16626. +Capitalize the following word (or ARG words), moving over.
  16627. +This gives the word(s) a first character in upper case
  16628. +and the rest lower case.
  16629. +With negative argument, capitalize previous words but do not move.
  16630. +
  16631. +(capitalize-word ARG)Fcurrent-column
  16632. +Return the horizontal position of point.  Beginning of line is column 0.
  16633. +This is calculated by adding together the widths of all the displayed
  16634. +representations of the character between the start of the previous line
  16635. +and point.  (eg control characters will have a width of 2 or 4, tabs
  16636. +will have a variable width)
  16637. +Ignores finite width of frame, which means that this function may return
  16638. +values greater than (frame-width).
  16639. +Whether the line is visible (if `selective-display' is t) has no effect;
  16640. +however, ^M is treated as end of line when `selective-display' is t.
  16641. +
  16642. +(current-column)Findent-to
  16643. +Indent from point with tabs and spaces until COLUMN is reached.
  16644. +Optional second argument MIN says always do at least MIN spaces
  16645. +even if that goes past COLUMN; by default, MIN is zero.
  16646. +
  16647. +(indent-to COL &optional MINIMUM)Fcurrent-indentation
  16648. +Return the indentation of the current line.
  16649. +This is the horizontal position of the character
  16650. +following any initial whitespace.
  16651. +
  16652. +(current-indentation)Fmove-to-column
  16653. +Move point to column COLUMN in the current line.
  16654. +The column of a character is calculated by adding together the widths
  16655. +as displayed of the previous characters in the line.
  16656. +This function ignores line-continuation;
  16657. +there is no upper limit on the column number a character can have
  16658. +and horizontal scrolling has no effect.
  16659. +
  16660. +If specified column is within a character, point goes after that character.
  16661. +If it's past end of line, point goes to end of line.
  16662. +
  16663. +A non-nil second (optional) argument FORCE means, if the line
  16664. +is too short to reach column COLUMN then add spaces/tabs to get there,
  16665. +and if COLUMN is in the middle of a tab character, change it to spaces.
  16666. +
  16667. +(move-to-column COLUMN &optional FORCE)Fcompute-motion
  16668. +Scan through the current buffer, calculating screen position.
  16669. +Scan the current buffer forward from offset FROM,
  16670. +assuming it is at position FROMPOS--a cons of the form (HPOS . VPOS)--
  16671. +to position TO or position TOPOS--another cons of the form (HPOS . VPOS)--
  16672. +and return the ending buffer position and screen location.
  16673. +
  16674. +There are three additional arguments:
  16675. +
  16676. +WIDTH is the number of columns available to display text;
  16677. +this affects handling of continuation lines.
  16678. +This is usually the value returned by `window-width', less one (to allow
  16679. +for the continuation glyph).
  16680. +
  16681. +OFFSETS is either nil or a cons cell (HSCROLL . TAB-OFFSET).
  16682. +HSCROLL is the number of columns not being displayed at the left
  16683. +margin; this is usually taken from a window's hscroll member.
  16684. +TAB-OFFSET is the number of columns of the first tab that aren't
  16685. +being displayed, perhaps because the line was continued within it.
  16686. +If OFFSETS is nil, HSCROLL and TAB-OFFSET are assumed to be zero.
  16687. +
  16688. +WINDOW is the window to operate on.  Currently this is used only to
  16689. +find the display table.  It does not matter what buffer WINDOW displays;
  16690. +`compute-motion' always operates on the current buffer.
  16691. +
  16692. +The value is a list of five elements:
  16693. +  (POS HPOS VPOS PREVHPOS CONTIN)
  16694. +POS is the buffer position where the scan stopped.
  16695. +VPOS is the vertical position where the scan stopped.
  16696. +HPOS is the horizontal position where the scan stopped.
  16697. +
  16698. +PREVHPOS is the horizontal position one character back from POS.
  16699. +CONTIN is t if a line was continued after (or within) the previous character.
  16700. +
  16701. +For example, to find the buffer position of column COL of line LINE
  16702. +of a certain window, pass the window's starting location as FROM
  16703. +and the window's upper-left coordinates as FROMPOS.
  16704. +Pass the buffer's (point-max) as TO, to limit the scan to the end of the
  16705. +visible section of the buffer, and pass LINE and COL as TOPOS.
  16706. +
  16707. +(compute-motion FROM FROMPOS TO TOPOS WIDTH OFFSETS WINDOW)Fvertical-motion
  16708. +Move to start of screen line LINES lines down.
  16709. +If LINES is negative, this is moving up.
  16710. +
  16711. +The optional second argument WINDOW specifies the window to use for
  16712. +parameters such as width, horizontal scrolling, and so on.
  16713. +the default is the selected window.
  16714. +It does not matter what buffer is displayed in WINDOW.
  16715. +`vertical-motion' always uses the current buffer.
  16716. +
  16717. +Sets point to position found; this may be start of line
  16718. +or just the start of a continuation line.
  16719. +Returns number of lines moved; may be closer to zero than LINES
  16720. +if beginning or end of buffer was reached.
  16721. +
  16722. +(vertical-motion LINES &optional WINDOW)Vindent-tabs-mode
  16723. +*Indentation can insert tabs if this is non-nil.
  16724. +Setting this variable automatically makes it local to the current buffer.Flooking-at
  16725. +Return t if text after point matches regular expression PAT.
  16726. +This function modifies the match data that `match-beginning',
  16727. +`match-end' and `match-data' access; save and restore the match
  16728. +data if you want to preserve them.
  16729. +
  16730. +(looking-at STRING)Fstring-match
  16731. +Return index of start of first match for REGEXP in STRING, or nil.
  16732. +If third arg START is non-nil, start search at that index in STRING.
  16733. +For index of first char beyond the match, do (match-end 0).
  16734. +`match-end' and `match-beginning' also give indices of substrings
  16735. +matched by parenthesis constructs in the pattern.
  16736. +
  16737. +(string-match REGEXP STRING &optional START)Fskip-chars-forward
  16738. +Move point forward, stopping before a char not in STRING, or at pos LIM.
  16739. +STRING is like the inside of a `[...]' in a regular expression
  16740. +except that `]' is never special and `\' quotes `^', `-' or `\'.
  16741. +Thus, with arg "a-zA-Z", this skips letters stopping before first nonletter.
  16742. +With arg "^a-zA-Z", skips nonletters stopping before first letter.
  16743. +Returns the distance traveled, either zero or positive.
  16744. +
  16745. +(skip-chars-forward STRING &optional LIM)Fskip-chars-backward
  16746. +Move point backward, stopping after a char not in STRING, or at pos LIM.
  16747. +See `skip-chars-forward' for details.
  16748. +Returns the distance traveled, either zero or negative.
  16749. +
  16750. +(skip-chars-backward STRING &optional LIM)Fskip-syntax-forward
  16751. +Move point forward across chars in specified syntax classes.
  16752. +SYNTAX is a string of syntax code characters.
  16753. +Stop before a char whose syntax is not in SYNTAX, or at position LIM.
  16754. +If SYNTAX starts with ^, skip characters whose syntax is NOT in SYNTAX.
  16755. +This function returns the distance traveled, either zero or positive.
  16756. +
  16757. +(skip-syntax-forward SYNTAX &optional LIM)Fskip-syntax-backward
  16758. +Move point backward across chars in specified syntax classes.
  16759. +SYNTAX is a string of syntax code characters.
  16760. +Stop on reaching a char whose syntax is not in SYNTAX, or at position LIM.
  16761. +If SYNTAX starts with ^, skip characters whose syntax is NOT in SYNTAX.
  16762. +This function returns the distance traveled, either zero or negative.
  16763. +
  16764. +(skip-syntax-backward SYNTAX &optional LIM)Fsearch-backward
  16765. +Search backward from point for STRING.
  16766. +Set point to the beginning of the occurrence found, and return point.
  16767. +An optional second argument bounds the search; it is a buffer position.
  16768. +The match found must not extend before that position.
  16769. +Optional third argument, if t, means if fail just return nil (no error).
  16770. + If not nil and not t, position at limit of search and return nil.
  16771. +Optional fourth argument is repeat count--search for successive occurrences.
  16772. +See also the functions `match-beginning', `match-end' and `replace-match'.
  16773. +
  16774. +(search-backward STRING &optional BOUND NOERROR COUNT)Fsearch-forward
  16775. +Search forward from point for STRING.
  16776. +Set point to the end of the occurrence found, and return point.
  16777. +An optional second argument bounds the search; it is a buffer position.
  16778. +The match found must not extend after that position.  nil is equivalent
  16779. +  to (point-max).
  16780. +Optional third argument, if t, means if fail just return nil (no error).
  16781. +  If not nil and not t, move to limit of search and return nil.
  16782. +Optional fourth argument is repeat count--search for successive occurrences.
  16783. +See also the functions `match-beginning', `match-end' and `replace-match'.
  16784. +
  16785. +(search-forward STRING &optional BOUND NOERROR COUNT)Fword-search-backward
  16786. +Search backward from point for STRING, ignoring differences in punctuation.
  16787. +Set point to the beginning of the occurrence found, and return point.
  16788. +An optional second argument bounds the search; it is a buffer position.
  16789. +The match found must not extend before that position.
  16790. +Optional third argument, if t, means if fail just return nil (no error).
  16791. +  If not nil and not t, move to limit of search and return nil.
  16792. +Optional fourth argument is repeat count--search for successive occurrences.
  16793. +
  16794. +(word-search-backward STRING &optional BOUND NOERROR COUNT)Fword-search-forward
  16795. +Search forward from point for STRING, ignoring differences in punctuation.
  16796. +Set point to the end of the occurrence found, and return point.
  16797. +An optional second argument bounds the search; it is a buffer position.
  16798. +The match found must not extend after that position.
  16799. +Optional third argument, if t, means if fail just return nil (no error).
  16800. +  If not nil and not t, move to limit of search and return nil.
  16801. +Optional fourth argument is repeat count--search for successive occurrences.
  16802. +
  16803. +(word-search-forward STRING &optional BOUND NOERROR COUNT)Fre-search-backward
  16804. +Search backward from point for match for regular expression REGEXP.
  16805. +Set point to the beginning of the match, and return point.
  16806. +The match found is the one starting last in the buffer
  16807. +and yet ending before the origin of the search.
  16808. +An optional second argument bounds the search; it is a buffer position.
  16809. +The match found must start at or after that position.
  16810. +Optional third argument, if t, means if fail just return nil (no error).
  16811. +  If not nil and not t, move to limit of search and return nil.
  16812. +Optional fourth argument is repeat count--search for successive occurrences.
  16813. +See also the functions `match-beginning', `match-end' and `replace-match'.
  16814. +
  16815. +(re-search-backward REGEXP &optional BOUND NOERROR COUNT)Fre-search-forward
  16816. +Search forward from point for regular expression REGEXP.
  16817. +Set point to the end of the occurrence found, and return point.
  16818. +An optional second argument bounds the search; it is a buffer position.
  16819. +The match found must not extend after that position.
  16820. +Optional third argument, if t, means if fail just return nil (no error).
  16821. +  If not nil and not t, move to limit of search and return nil.
  16822. +Optional fourth argument is repeat count--search for successive occurrences.
  16823. +See also the functions `match-beginning', `match-end' and `replace-match'.
  16824. +
  16825. +(re-search-forward REGEXP &optional BOUND NOERROR COUNT)Freplace-match
  16826. +Replace text matched by last search with NEWTEXT.
  16827. +If second arg FIXEDCASE is non-nil, do not alter case of replacement text.
  16828. +Otherwise maybe capitalize the whole text, or maybe just word initials,
  16829. +based on the replaced text.
  16830. +If the replaced text has only capital letters
  16831. +and has at least one multiletter word, convert NEWTEXT to all caps.
  16832. +If the replaced text has at least one word starting with a capital letter,
  16833. +then capitalize each word in NEWTEXT.
  16834. +
  16835. +If third arg LITERAL is non-nil, insert NEWTEXT literally.
  16836. +Otherwise treat `\' as special:
  16837. +  `\&' in NEWTEXT means substitute original matched text.
  16838. +  `\N' means substitute what matched the Nth `\(...\)'.
  16839. +       If Nth parens didn't match, substitute nothing.
  16840. +  `\\' means insert one `\'.
  16841. +FIXEDCASE and LITERAL are optional arguments.
  16842. +Leaves point at end of replacement text.
  16843. +
  16844. +(replace-match NEWTEXT &optional FIXEDCASE LITERAL)Fmatch-beginning
  16845. +Return position of start of text matched by last search.
  16846. +NUM specifies which parenthesized expression in the last regexp.
  16847. + Value is nil if NUMth pair didn't match, or there were less than NUM pairs.
  16848. +Zero means the entire text matched by the whole regexp or whole string.
  16849. +
  16850. +(match-beginning NUM)Fmatch-end
  16851. +Return position of end of text matched by last search.
  16852. +ARG, a number, specifies which parenthesized expression in the last regexp.
  16853. + Value is nil if ARGth pair didn't match, or there were less than ARG pairs.
  16854. +Zero means the entire text matched by the whole regexp or whole string.
  16855. +
  16856. +(match-end NUM)Fmatch-data
  16857. +Return a list containing all info on what the last search matched.
  16858. +Element 2N is `(match-beginning N)'; element 2N + 1 is `(match-end N)'.
  16859. +All the elements are markers or nil (nil if the Nth pair didn't match)
  16860. +if the last match was on a buffer; integers or nil if a string was matched.
  16861. +Use `store-match-data' to reinstate the data in this list.
  16862. +
  16863. +(match-data)Fstore-match-data
  16864. +Set internal data on last search match from elements of LIST.
  16865. +LIST should have been created by calling `match-data' previously.
  16866. +
  16867. +(store-match-data LIST)Fregexp-quote
  16868. +Return a regexp string which matches exactly STRING and nothing else.
  16869. +
  16870. +(regexp-quote STR)Fundo-boundary
  16871. +Mark a boundary between units of undo.
  16872. +An undo command will stop at this point,
  16873. +but another undo command will undo to the previous boundary.
  16874. +
  16875. +(undo-boundary)Fprimitive-undo
  16876. +Undo N records from the front of the list LIST.
  16877. +Return what remains of the list.
  16878. +
  16879. +(primitive-undo N LIST)Fcons
  16880. +Create a new cons, give it CAR and CDR as components, and return it.
  16881. +
  16882. +(cons CAR CDR)Flist
  16883. +Return a newly created list with specified arguments as elements.
  16884. +Any number of arguments, even zero arguments, are allowed.Fmake-list
  16885. +Return a newly created list of length LENGTH, with each element being INIT.
  16886. +
  16887. +(make-list LENGTH INIT)Fmake-vector
  16888. +Return a newly created vector of length LENGTH, with each element being INIT.
  16889. +See also the function `vector'.
  16890. +
  16891. +(make-vector LENGTH INIT)Fvector
  16892. +Return a newly created vector with specified arguments as elements.
  16893. +Any number of arguments, even zero arguments, are allowed.Fmake-byte-code
  16894. +Create a byte-code object with specified arguments as elements.
  16895. +The arguments should be the arglist, bytecode-string, constant vector,
  16896. +stack size, (optional) doc string, and (optional) interactive spec.
  16897. +The first four arguments are required; at most six have any
  16898. +significance.Fmake-symbol
  16899. +Return a newly allocated uninterned symbol whose name is NAME.
  16900. +Its value and function definition are void, and its property list is nil.
  16901. +
  16902. +(make-symbol STR)Fmake-marker
  16903. +Return a newly allocated marker which does not point at any place.
  16904. +
  16905. +(make-marker)Fmake-string
  16906. +Return a newly created string of length LENGTH, with each element being INIT.
  16907. +Both LENGTH and INIT must be numbers.
  16908. +
  16909. +(make-string LENGTH INIT)Fpurecopy
  16910. +Make a copy of OBJECT in pure storage.
  16911. +Recursively copies contents of vectors and cons cells.
  16912. +Does not copy symbols.
  16913. +
  16914. +(purecopy OBJ)Fgarbage-collect
  16915. +Reclaim storage for Lisp objects no longer needed.
  16916. +Returns info on amount of space in use:
  16917. + ((USED-CONSES . FREE-CONSES) (USED-SYMS . FREE-SYMS)
  16918. +  (USED-MARKERS . FREE-MARKERS) USED-STRING-CHARS USED-VECTOR-SLOTS
  16919. +  (USED-FLOATS . FREE-FLOATS))
  16920. +Garbage collection happens automatically if you cons more than
  16921. +`gc-cons-threshold' bytes of Lisp data since previous garbage collection.
  16922. +
  16923. +(garbage-collect)Fmemory-limit
  16924. +Return the address of the last byte Emacs has allocated, divided by 1024.
  16925. +This may be helpful in debugging Emacs's memory usage.
  16926. +We divide the value by 1024 to make sure it fits in a Lisp integer.
  16927. +
  16928. +(memory-limit)Vgc-cons-threshold
  16929. +*Number of bytes of consing between garbage collections.
  16930. +Garbage collection can happen automatically once this many bytes have been
  16931. +allocated since the last garbage collection.  All data types count.
  16932. +
  16933. +Garbage collection happens automatically only when `eval' is called.
  16934. +
  16935. +By binding this temporarily to a large number, you can effectively
  16936. +prevent garbage collection during a part of the program.Vpure-bytes-used
  16937. +Number of bytes of sharable Lisp data allocated so far.Vdata-bytes-used
  16938. +Number of bytes of unshared memory allocated in this session.Vdata-bytes-free
  16939. +Number of bytes of unshared memory remaining available in this session.Vpurify-flag
  16940. +Non-nil means loading Lisp code in order to dump an executable.
  16941. +This means that certain objects should be allocated in shared (pure) space.Vundo-limit
  16942. +Keep no more undo information once it exceeds this size.
  16943. +This limit is applied when garbage collection happens.
  16944. +The size is counted as the number of bytes occupied,
  16945. +which includes both saved text and other data.Vundo-strong-limit
  16946. +Don't keep more than this much size of undo information.
  16947. +A command which pushes past this size is itself forgotten.
  16948. +This limit is applied when garbage collection happens.
  16949. +The size is counted as the number of bytes occupied,
  16950. +which includes both saved text and other data.Feq
  16951. +T if the two args are the same Lisp object.
  16952. +
  16953. +(eq OBJ1 OBJ2)Fnull
  16954. +T if OBJECT is nil.
  16955. +
  16956. +(null OBJ)Fconsp
  16957. +T if OBJECT is a cons cell.
  16958. +
  16959. +(consp OBJ)Fatom
  16960. +T if OBJECT is not a cons cell.  This includes nil.
  16961. +
  16962. +(atom OBJ)Flistp
  16963. +T if OBJECT is a list.  This includes nil.
  16964. +
  16965. +(listp OBJ)Fnlistp
  16966. +T if OBJECT is not a list.  Lists include nil.
  16967. +
  16968. +(nlistp OBJ)Fsymbolp
  16969. +T if OBJECT is a symbol.
  16970. +
  16971. +(symbolp OBJ)Fvectorp
  16972. +T if OBJECT is a vector.
  16973. +
  16974. +(vectorp OBJ)Fstringp
  16975. +T if OBJECT is a string.
  16976. +
  16977. +(stringp OBJ)Farrayp
  16978. +T if OBJECT is an array (string or vector).
  16979. +
  16980. +(arrayp OBJ)Fsequencep
  16981. +T if OBJECT is a sequence (list or array).
  16982. +
  16983. +(sequencep OBJ)Fbufferp
  16984. +T if OBJECT is an editor buffer.
  16985. +
  16986. +(bufferp OBJ)Fmarkerp
  16987. +T if OBJECT is a marker (editor pointer).
  16988. +
  16989. +(markerp OBJ)Fsubrp
  16990. +T if OBJECT is a built-in function.
  16991. +
  16992. +(subrp OBJ)Fbyte-code-function-p
  16993. +T if OBJECT is a byte-compiled function object.
  16994. +
  16995. +(byte-code-function-p OBJ)Fchar-or-string-p
  16996. +T if OBJECT is a character (an integer) or a string.
  16997. +
  16998. +(char-or-string-p OBJ)Fintegerp
  16999. +T if OBJECT is an integer.
  17000. +
  17001. +(integerp OBJ)Finteger-or-marker-p
  17002. +T if OBJECT is an integer or a marker (editor pointer).
  17003. +
  17004. +(integer-or-marker-p OBJ)Fnatnump
  17005. +T if OBJECT is a nonnegative integer.
  17006. +
  17007. +(natnump OBJ)Fnumberp
  17008. +T if OBJECT is a number (floating point or integer).
  17009. +
  17010. +(numberp OBJ)Fnumber-or-marker-p
  17011. +T if OBJECT is a number or a marker.
  17012. +
  17013. +(number-or-marker-p OBJ)Ffloatp
  17014. +T if OBJECT is a floating point number.
  17015. +
  17016. +(floatp OBJ)Fcar
  17017. +Return the car of CONSCELL.  If arg is nil, return nil.
  17018. +Error if arg is not nil and not a cons cell.  See also `car-safe'.
  17019. +
  17020. +(car LIST)Fcar-safe
  17021. +Return the car of OBJECT if it is a cons cell, or else nil.
  17022. +
  17023. +(car-safe OBJECT)Fcdr
  17024. +Return the cdr of CONSCELL.  If arg is nil, return nil.
  17025. +Error if arg is not nil and not a cons cell.  See also `cdr-safe'.
  17026. +
  17027. +(cdr LIST)Fcdr-safe
  17028. +Return the cdr of OBJECT if it is a cons cell, or else  nil.
  17029. +
  17030. +(cdr-safe OBJECT)Fsetcar
  17031. +Set the car of CONSCELL to be NEWCAR.  Returns NEWCAR.
  17032. +
  17033. +(setcar CELL NEWCAR)Fsetcdr
  17034. +Set the cdr of CONSCELL to be NEWCDR.  Returns NEWCDR.
  17035. +
  17036. +(setcdr CELL NEWCDR)Fboundp
  17037. +T if SYMBOL's value is not void.
  17038. +
  17039. +(boundp SYM)Ffboundp
  17040. +T if SYMBOL's function definition is not void.
  17041. +
  17042. +(fboundp SYM)Fmakunbound
  17043. +Make SYMBOL's value be void.
  17044. +
  17045. +(makunbound SYM)Ffmakunbound
  17046. +Make SYMBOL's function definition be void.
  17047. +
  17048. +(fmakunbound SYM)Fsymbol-function
  17049. +Return SYMBOL's function definition.  Error if that is void.
  17050. +
  17051. +(symbol-function SYMBOL)Fsymbol-plist
  17052. +Return SYMBOL's property list.
  17053. +
  17054. +(symbol-plist SYM)Fsymbol-name
  17055. +Return SYMBOL's name, a string.
  17056. +
  17057. +(symbol-name SYM)Ffset
  17058. +Set SYMBOL's function definition to NEWVAL, and return NEWVAL.
  17059. +
  17060. +(fset SYM NEWDEF)Fdefalias
  17061. +Set SYMBOL's function definition to NEWVAL, and return NEWVAL.
  17062. +Associates the function with the current load file, if any.
  17063. +
  17064. +(defalias SYM NEWDEF)Fdefine-function
  17065. +Set SYMBOL's function definition to NEWVAL, and return NEWVAL.
  17066. +Associates the function with the current load file, if any.
  17067. +
  17068. +(define-function SYM NEWDEF)Fsetplist
  17069. +Set SYMBOL's property list to NEWVAL, and return NEWVAL.
  17070. +
  17071. +(setplist SYM NEWPLIST)Fsymbol-value
  17072. +Return SYMBOL's value.  Error if that is void.
  17073. +
  17074. +(symbol-value SYM)Fset
  17075. +Set SYMBOL's value to NEWVAL, and return NEWVAL.
  17076. +
  17077. +(set SYM NEWVAL)Fdefault-boundp
  17078. +Return T if SYMBOL has a non-void default value.
  17079. +This is the value that is seen in buffers that do not have their own values
  17080. +for this variable.
  17081. +
  17082. +(default-boundp SYM)Fdefault-value
  17083. +Return SYMBOL's default value.
  17084. +This is the value that is seen in buffers that do not have their own values
  17085. +for this variable.  The default value is meaningful for variables with
  17086. +local bindings in certain buffers.
  17087. +
  17088. +(default-value SYM)Fset-default
  17089. +Set SYMBOL's default value to VAL.  SYMBOL and VAL are evaluated.
  17090. +The default value is seen in buffers that do not have their own values
  17091. +for this variable.
  17092. +
  17093. +(set-default SYM VALUE)Fsetq-default
  17094. +Set the default value of variable VAR to VALUE.
  17095. +VAR, the variable name, is literal (not evaluated);
  17096. +VALUE is an expression and it is evaluated.
  17097. +The default value of a variable is seen in buffers
  17098. +that do not have their own values for the variable.
  17099. +
  17100. +More generally, you can use multiple variables and values, as in
  17101. +  (setq-default SYM VALUE SYM VALUE...)
  17102. +This sets each SYM's default value to the corresponding VALUE.
  17103. +The VALUE for the Nth SYM can refer to the new default values
  17104. +of previous SYMs.Fmake-variable-buffer-local
  17105. +Make VARIABLE have a separate value for each buffer.
  17106. +At any time, the value for the current buffer is in effect.
  17107. +There is also a default value which is seen in any buffer which has not yet
  17108. +set its own value.
  17109. +Using `set' or `setq' to set the variable causes it to have a separate value
  17110. +for the current buffer if it was previously using the default value.
  17111. +The function `default-value' gets the default value and `set-default' sets it.
  17112. +
  17113. +(make-variable-buffer-local SYM)Fmake-local-variable
  17114. +Make VARIABLE have a separate value in the current buffer.
  17115. +Other buffers will continue to share a common default value.
  17116. +(The buffer-local value of VARIABLE starts out as the same value
  17117. +VARIABLE previously had.  If VARIABLE was void, it remains void.)
  17118. +See also `make-variable-buffer-local'.
  17119. +
  17120. +If the variable is already arranged to become local when set,
  17121. +this function causes a local value to exist for this buffer,
  17122. +just as if the variable were set.
  17123. +
  17124. +(make-local-variable SYM)Fkill-local-variable
  17125. +Make VARIABLE no longer have a separate value in the current buffer.
  17126. +From now on the default value will apply in this buffer.
  17127. +
  17128. +(kill-local-variable SYM)Findirect-function
  17129. +Return the function at the end of OBJECT's function chain.
  17130. +If OBJECT is a symbol, follow all function indirections and return the final
  17131. +function binding.
  17132. +If OBJECT is not a symbol, just return it.
  17133. +Signal a void-function error if the final symbol is unbound.
  17134. +Signal a cyclic-function-indirection error if there is a loop in the
  17135. +function chain of symbols.
  17136. +
  17137. +(indirect-function OBJECT)Faref
  17138. +Return the element of ARRAY at index INDEX.
  17139. +ARRAY may be a vector or a string, or a byte-code object.  INDEX starts at 0.
  17140. +
  17141. +(aref ARRAY IDX)Faset
  17142. +Store into the element of ARRAY at index IDX the value NEWELT.
  17143. +ARRAY may be a vector or a string.  IDX starts at 0.
  17144. +
  17145. +(aset ARRAY IDX NEWELT)F=
  17146. +T if two args, both numbers or markers, are equal.
  17147. +
  17148. +(= NUM1 NUM2)F<
  17149. +T if first arg is less than second arg.  Both must be numbers or markers.
  17150. +
  17151. +(< NUM1 NUM2)F>
  17152. +T if first arg is greater than second arg.  Both must be numbers or markers.
  17153. +
  17154. +(> NUM1 NUM2)F<=
  17155. +T if first arg is less than or equal to second arg.
  17156. +Both must be numbers or markers.
  17157. +
  17158. +(<= NUM1 NUM2)F>=
  17159. +T if first arg is greater than or equal to second arg.
  17160. +Both must be numbers or markers.
  17161. +
  17162. +(>= NUM1 NUM2)F/=
  17163. +T if first arg is not equal to second arg.  Both must be numbers or markers.
  17164. +
  17165. +(/= NUM1 NUM2)Fzerop
  17166. +T if NUMBER is zero.
  17167. +
  17168. +(zerop NUM)Fnumber-to-string
  17169. +Convert NUM to a string by printing it in decimal.
  17170. +Uses a minus sign if negative.
  17171. +NUM may be an integer or a floating point number.
  17172. +
  17173. +(number-to-string NUM)Fstring-to-number
  17174. +Convert STRING to a number by parsing it as a decimal number.
  17175. +This parses both integers and floating point numbers.
  17176. +It ignores leading spaces and tabs.
  17177. +
  17178. +(string-to-number STR)F+
  17179. +Return sum of any number of arguments, which are numbers or markers.F-
  17180. +Negate number or subtract numbers or markers.
  17181. +With one arg, negates it.  With more than one arg,
  17182. +subtracts all but the first from the first.F*
  17183. +Returns product of any number of arguments, which are numbers or markers.F/
  17184. +Returns first argument divided by all the remaining arguments.
  17185. +The arguments must be numbers or markers.F%
  17186. +Returns remainder of first arg divided by second.
  17187. +Both must be integers or markers.
  17188. +
  17189. +(% NUM1 NUM2)Fmod
  17190. +Returns X modulo Y.
  17191. +The result falls between zero (inclusive) and Y (exclusive).
  17192. +Both X and Y must be numbers or markers.
  17193. +
  17194. +(mod NUM1 NUM2)Fmax
  17195. +Return largest of all the arguments (which must be numbers or markers).
  17196. +The value is always a number; markers are converted to numbers.Fmin
  17197. +Return smallest of all the arguments (which must be numbers or markers).
  17198. +The value is always a number; markers are converted to numbers.Flogand
  17199. +Return bitwise-and of all the arguments.
  17200. +Arguments may be integers, or markers converted to integers.Flogior
  17201. +Return bitwise-or of all the arguments.
  17202. +Arguments may be integers, or markers converted to integers.Flogxor
  17203. +Return bitwise-exclusive-or of all the arguments.
  17204. +Arguments may be integers, or markers converted to integers.Fash
  17205. +Return VALUE with its bits shifted left by COUNT.
  17206. +If COUNT is negative, shifting is actually to the right.
  17207. +In this case, the sign bit is duplicated.
  17208. +
  17209. +(ash NUM1 NUM2)Flsh
  17210. +Return VALUE with its bits shifted left by COUNT.
  17211. +If COUNT is negative, shifting is actually to the right.
  17212. +In this case,  zeros are shifted in on the left.
  17213. +
  17214. +(lsh NUM1 NUM2)F1+
  17215. +Return NUMBER plus one.  NUMBER may be a number or a marker.
  17216. +Markers are converted to integers.
  17217. +
  17218. +(1+ NUM)F1-
  17219. +Return NUMBER minus one.  NUMBER may be a number or a marker.
  17220. +Markers are converted to integers.
  17221. +
  17222. +(1- NUM)Flognot
  17223. +Return the bitwise complement of ARG.  ARG must be an integer.
  17224. +
  17225. +(lognot NUM)Fdocumentation
  17226. +Return the documentation string of FUNCTION.
  17227. +Unless a non-nil second argument is given, the
  17228. +string is passed through `substitute-command-keys'.
  17229. +
  17230. +(documentation FUNCTION &optional RAW)Fdocumentation-property
  17231. +Return the documentation string that is SYMBOL's PROP property.
  17232. +This is like `get', but it can refer to strings stored in the
  17233. +`etc/DOC' file; and if the value is a string, it is passed through
  17234. +`substitute-command-keys'.  A non-nil third argument avoids this
  17235. +translation.
  17236. +
  17237. +(documentation-property SYM PROP &optional RAW)FSnarf-documentation
  17238. +Used during Emacs initialization, before dumping runnable Emacs,
  17239. +to find pointers to doc strings stored in `etc/DOC...' and
  17240. +record them in function definitions.
  17241. +One arg, FILENAME, a string which does not include a directory.
  17242. +The file is found in `../etc' now; found in the `data-directory'
  17243. +when doc strings are referred to later in the dumped Emacs.
  17244. +
  17245. +(Snarf-documentation FILENAME)Fsubstitute-command-keys
  17246. +Substitute key descriptions for command names in STRING.
  17247. +Return a new string which is STRING with substrings of the form \=\[COMMAND]
  17248. +replaced by either:  a keystroke sequence that will invoke COMMAND,
  17249. +or "M-x COMMAND" if COMMAND is not on any keys.
  17250. +Substrings of the form \=\{MAPVAR} are replaced by summaries
  17251. +(made by describe-bindings) of the value of MAPVAR, taken as a keymap.
  17252. +Substrings of the form \=\<MAPVAR> specify to use the value of MAPVAR
  17253. +as the keymap for future \=\[COMMAND] substrings.
  17254. +\=\= quotes the following character and is discarded;
  17255. +thus, \=\=\=\= puts \=\= into the output, and \=\=\=\[ puts \=\[ into the output.
  17256. +
  17257. +(substitute-command-keys STR)Vinternal-doc-file-name
  17258. +Name of file containing documentation strings of built-in symbols.Fchar-to-string
  17259. +Convert arg CHAR to a one-character string containing that character.
  17260. +
  17261. +(char-to-string N)Fstring-to-char
  17262. +Convert arg STRING to a character, the first character of that string.
  17263. +
  17264. +(string-to-char STR)Fpoint
  17265. +Return value of point, as an integer.
  17266. +Beginning of buffer is position (point-min)
  17267. +
  17268. +(point)Fpoint-marker
  17269. +Return value of point, as a marker object.
  17270. +
  17271. +(point-marker)Fgoto-char
  17272. +Set point to POSITION, a number or marker.
  17273. +Beginning of buffer is position (point-min), end is (point-max).
  17274. +
  17275. +(goto-char N)Fregion-beginning
  17276. +Return position of beginning of region, as an integer.
  17277. +
  17278. +(region-beginning)Fregion-end
  17279. +Return position of end of region, as an integer.
  17280. +
  17281. +(region-end)Fmark
  17282. +Return this buffer's mark value as integer, or nil if no mark.
  17283. +If you are using this in an editing command, you are most likely making
  17284. +a mistake; see the documentation of `set-mark'.
  17285. +
  17286. +(mark)Fmark-marker
  17287. +Return this buffer's mark, as a marker object.
  17288. +Watch out!  Moving this marker changes the mark position.
  17289. +If you set the marker not to point anywhere, the buffer will have no mark.
  17290. +
  17291. +(mark-marker)Fset-mark
  17292. +Set this buffer's mark to POS.  Don't use this function!
  17293. +That is to say, don't use this function unless you want
  17294. +the user to see that the mark has moved, and you want the previous
  17295. +mark position to be lost.
  17296. +
  17297. +Normally, when a new mark is set, the old one should go on the stack.
  17298. +This is why most applications should use push-mark, not set-mark.
  17299. +
  17300. +Novice programmers often try to use the mark for the wrong purposes.
  17301. +The mark saves a location for the user's convenience.
  17302. +Most editing commands should not alter the mark.
  17303. +To remember a location for internal use in the Lisp program,
  17304. +store it in a Lisp variable.  Example:
  17305. +
  17306. +   (let ((beg (point))) (forward-line 1) (delete-region beg (point))).
  17307. +
  17308. +(set-mark POS)Fsave-excursion
  17309. +Save point, mark, and current buffer; execute BODY; restore those things.
  17310. +Executes BODY just like `progn'.
  17311. +The values of point, mark and the current buffer are restored
  17312. +even in case of abnormal exit (throw or error).
  17313. +The state of activation of the mark is also restored.Fbuffer-size
  17314. +Return the number of characters in the current buffer.
  17315. +
  17316. +(buffer-size)Fpoint-min
  17317. +Return the minimum permissible value of point in the current buffer.
  17318. +This is 1, unless narrowing (a buffer restriction) is in effect.
  17319. +
  17320. +(point-min)Fpoint-min-marker
  17321. +Return a marker to the minimum permissible value of point in this buffer.
  17322. +This is the beginning, unless narrowing (a buffer restriction) is in effect.
  17323. +
  17324. +(point-min-marker)Fpoint-max
  17325. +Return the maximum permissible value of point in the current buffer.
  17326. +This is (1+ (buffer-size)), unless narrowing (a buffer restriction)
  17327. +is in effect, in which case it is less.
  17328. +
  17329. +(point-max)Fpoint-max-marker
  17330. +Return a marker to the maximum permissible value of point in this buffer.
  17331. +This is (1+ (buffer-size)), unless narrowing (a buffer restriction)
  17332. +is in effect, in which case it is less.
  17333. +
  17334. +(point-max-marker)Ffollowing-char
  17335. +Return the character following point, as a number.
  17336. +At the end of the buffer or accessible region, return 0.
  17337. +
  17338. +(following-char)Fpreceding-char
  17339. +Return the character preceding point, as a number.
  17340. +At the beginning of the buffer or accessible region, return 0.
  17341. +
  17342. +(preceding-char)Fbobp
  17343. +Return T if point is at the beginning of the buffer.
  17344. +If the buffer is narrowed, this means the beginning of the narrowed part.
  17345. +
  17346. +(bobp)Feobp
  17347. +Return T if point is at the end of the buffer.
  17348. +If the buffer is narrowed, this means the end of the narrowed part.
  17349. +
  17350. +(eobp)Fbolp
  17351. +Return T if point is at the beginning of a line.
  17352. +
  17353. +(bolp)Feolp
  17354. +Return T if point is at the end of a line.
  17355. +`End of a line' includes point being at the end of the buffer.
  17356. +
  17357. +(eolp)Fchar-after
  17358. +Return character in current buffer at position POS.
  17359. +POS is an integer or a buffer pointer.
  17360. +If POS is out of range, the value is nil.
  17361. +
  17362. +(char-after POS)Fuser-login-name
  17363. +Return the name under which the user logged in, as a string.
  17364. +This is based on the effective uid, not the real uid.
  17365. +Also, if the environment variable LOGNAME or USER is set,
  17366. +that determines the value of this function.
  17367. +
  17368. +(user-login-name)Fuser-real-login-name
  17369. +Return the name of the user's real uid, as a string.
  17370. +This ignores the environment variables LOGNAME and USER, so it differs from
  17371. +`user-login-name' when running under `su'.
  17372. +
  17373. +(user-real-login-name)Fuser-uid
  17374. +Return the effective uid of Emacs, as an integer.
  17375. +
  17376. +(user-uid)Fuser-real-uid
  17377. +Return the real uid of Emacs, as an integer.
  17378. +
  17379. +(user-real-uid)Fuser-full-name
  17380. +Return the full name of the user logged in, as a string.
  17381. +
  17382. +(user-full-name)Fsystem-name
  17383. +Return the name of the machine you are running on, as a string.
  17384. +
  17385. +(system-name)Femacs-pid
  17386. +Return the process ID of Emacs, as an integer.
  17387. +
  17388. +(emacs-pid)Fcurrent-time
  17389. +Return the current time, as the number of seconds since 12:00 AM January 1970.
  17390. +The time is returned as a list of three integers.  The first has the
  17391. +most significant 16 bits of the seconds, while the second has the
  17392. +least significant 16 bits.  The third integer gives the microsecond
  17393. +count.
  17394. +
  17395. +The microsecond count is zero on systems that do not provide
  17396. +resolution finer than a second.
  17397. +
  17398. +(current-time)Fcurrent-time-string
  17399. +Return the current time, as a human-readable string.
  17400. +Programs can use this function to decode a time,
  17401. +since the number of columns in each field is fixed.
  17402. +The format is `Sun Sep 16 01:03:52 1973'.
  17403. +If an argument is given, it specifies a time to format
  17404. +instead of the current time.  The argument should have the form:
  17405. +  (HIGH . LOW)
  17406. +or the form:
  17407. +  (HIGH LOW . IGNORED).
  17408. +Thus, you can use times obtained from `current-time'
  17409. +and from `file-attributes'.
  17410. +
  17411. +(current-time-string &optional SPECIFIED-TIME)Fcurrent-time-zone
  17412. +Return the offset and name for the local time zone.
  17413. +This returns a list of the form (OFFSET NAME).
  17414. +OFFSET is an integer number of seconds ahead of UTC (east of Greenwich).
  17415. +    A negative value means west of Greenwich.
  17416. +NAME is a string giving the name of the time zone.
  17417. +If an argument is given, it specifies when the time zone offset is determined
  17418. +instead of using the current time.  The argument should have the form:
  17419. +  (HIGH . LOW)
  17420. +or the form:
  17421. +  (HIGH LOW . IGNORED).
  17422. +Thus, you can use times obtained from `current-time'
  17423. +and from `file-attributes'.
  17424. +
  17425. +Some operating systems cannot provide all this information to Emacs;
  17426. +in this case, `current-time-zone' returns a list containing nil for
  17427. +the data it can't find.
  17428. +
  17429. +(current-time-zone &optional SPECIFIED-TIME)Finsert
  17430. +Insert the arguments, either strings or characters, at point.
  17431. +Point moves forward so that it ends up after the inserted text.
  17432. +Any other markers at the point of insertion remain before the text.Finsert-and-inherit
  17433. +Insert the arguments at point, inheriting properties from adjoining text.
  17434. +Point moves forward so that it ends up after the inserted text.
  17435. +Any other markers at the point of insertion remain before the text.Finsert-before-markers
  17436. +Insert strings or characters at point, relocating markers after the text.
  17437. +Point moves forward so that it ends up after the inserted text.
  17438. +Any other markers at the point of insertion also end up after the text.Finsert-before-markers-and-inherit
  17439. +Insert text at point, relocating markers and inheriting properties.
  17440. +Point moves forward so that it ends up after the inserted text.
  17441. +Any other markers at the point of insertion also end up after the text.Finsert-char
  17442. +Insert COUNT (second arg) copies of CHAR (first arg).
  17443. +Point and all markers are affected as in the function `insert'.
  17444. +Both arguments are required.
  17445. +The optional third arg INHERIT, if non-nil, says to inherit text properties
  17446. +from adjoining text, if those properties are sticky.
  17447. +
  17448. +(insert-char CHR COUNT &optional INHERIT)Fbuffer-substring
  17449. +Return the contents of part of the current buffer as a string.
  17450. +The two arguments START and END are character positions;
  17451. +they can be in either order.
  17452. +
  17453. +(buffer-substring B E)Fbuffer-string
  17454. +Return the contents of the current buffer as a string.
  17455. +
  17456. +(buffer-string)Finsert-buffer-substring
  17457. +Insert before point a substring of the contents of buffer BUFFER.
  17458. +BUFFER may be a buffer or a buffer name.
  17459. +Arguments START and END are character numbers specifying the substring.
  17460. +They default to the beginning and the end of BUFFER.
  17461. +
  17462. +(insert-buffer-substring BUF &optional B E)Fcompare-buffer-substrings
  17463. +Compare two substrings of two buffers; return result as number.
  17464. +the value is -N if first string is less after N-1 chars,
  17465. ++N if first string is greater after N-1 chars, or 0 if strings match.
  17466. +Each substring is represented as three arguments: BUFFER, START and END.
  17467. +That makes six args in all, three for each substring.
  17468. +
  17469. +The value of `case-fold-search' in the current buffer
  17470. +determines whether case is significant or ignored.
  17471. +
  17472. +(compare-buffer-substrings BUFFER1 START1 END1 BUFFER2 START2 END2)Fsubst-char-in-region
  17473. +From START to END, replace FROMCHAR with TOCHAR each time it occurs.
  17474. +If optional arg NOUNDO is non-nil, don't record this change for undo
  17475. +and don't mark the buffer as really changed.
  17476. +
  17477. +(subst-char-in-region START END FROMCHAR TOCHAR &optional NOUNDO)Ftranslate-region
  17478. +From START to END, translate characters according to TABLE.
  17479. +TABLE is a string; the Nth character in it is the mapping
  17480. +for the character with code N.  Returns the number of characters changed.
  17481. +
  17482. +(translate-region START END TABLE)Fdelete-region
  17483. +Delete the text between point and mark.
  17484. +When called from a program, expects two arguments,
  17485. +positions (integers or markers) specifying the stretch to be deleted.
  17486. +
  17487. +(delete-region B E)Fwiden
  17488. +Remove restrictions (narrowing) from current buffer.
  17489. +This allows the buffer's full text to be seen and edited.
  17490. +
  17491. +(widen)Fnarrow-to-region
  17492. +Restrict editing in this buffer to the current region.
  17493. +The rest of the text becomes temporarily invisible and untouchable
  17494. +but is not deleted; if you save the buffer in a file, the invisible
  17495. +text is included in the file.  \[widen] makes all visible again.
  17496. +See also `save-restriction'.
  17497. +
  17498. +When calling from a program, pass two arguments; positions (integers
  17499. +or markers) bounding the text that should remain visible.
  17500. +
  17501. +(narrow-to-region B E)Fsave-restriction
  17502. +Execute BODY, saving and restoring current buffer's restrictions.
  17503. +The buffer's restrictions make parts of the beginning and end invisible.
  17504. +(They are set up with `narrow-to-region' and eliminated with `widen'.)
  17505. +This special form, `save-restriction', saves the current buffer's restrictions
  17506. +when it is entered, and restores them when it is exited.
  17507. +So any `narrow-to-region' within BODY lasts only until the end of the form.
  17508. +The old restrictions settings are restored
  17509. +even in case of abnormal exit (throw or error).
  17510. +
  17511. +The value returned is the value of the last form in BODY.
  17512. +
  17513. +`save-restriction' can get confused if, within the BODY, you widen
  17514. +and then make changes outside the area within the saved restrictions.
  17515. +
  17516. +Note: if you are using both `save-excursion' and `save-restriction',
  17517. +use `save-excursion' outermost:
  17518. +    (save-excursion (save-restriction ...))Fmessage
  17519. +Print a one-line message at the bottom of the screen.
  17520. +The first argument is a control string.
  17521. +It may contain %s or %d or %c to print successive following arguments.
  17522. +%s means print an argument as a string, %d means print as number in decimal,
  17523. +%c means print a number as a single character.
  17524. +The argument used by %s must be a string or a symbol;
  17525. +the argument used by %d or %c must be a number.
  17526. +If the first argument is nil, clear any existing message; let the
  17527. +minibuffer contents show.Fformat
  17528. +Format a string out of a control-string and arguments.
  17529. +The first argument is a control string.
  17530. +The other arguments are substituted into it to make the result, a string.
  17531. +It may contain %-sequences meaning to substitute the next argument.
  17532. +%s means print a string argument.  Actually, prints any object, with `princ'.
  17533. +%d means print as number in decimal (%o octal, %x hex).
  17534. +%c means print a number as a single character.
  17535. +%S means print any object as an s-expression (using prin1).
  17536. +  The argument used for %d, %o, %x or %c must be a number.
  17537. +Use %% to put a single % into the output.Fchar-equal
  17538. +Return t if two characters match, optionally ignoring case.
  17539. +Both arguments must be characters (i.e. integers).
  17540. +Case is ignored if `case-fold-search' is non-nil in the current buffer.
  17541. +
  17542. +(char-equal C1 C2)Ftranspose-regions
  17543. +Transpose region START1 to END1 with START2 to END2.
  17544. +The regions may not be overlapping, because the size of the buffer is
  17545. +never changed in a transposition.
  17546. +
  17547. +Optional fifth arg LEAVE_MARKERS, if non-nil, means don't transpose
  17548. +any markers that happen to be located in the regions.
  17549. +
  17550. +Transposing beyond buffer boundaries is an error.
  17551. +
  17552. +(transpose-regions STARTR1 ENDR1 STARTR2 ENDR2 &optional LEAVE-MARKERS)Finteractive
  17553. +Specify a way of parsing arguments for interactive use of a function.
  17554. +For example, write
  17555. +  (defun foo (arg) "Doc string" (interactive "p") ...use arg...)
  17556. +to make ARG be the prefix argument when `foo' is called as a command.
  17557. +The "call" to `interactive' is actually a declaration rather than a function;
  17558. + it tells `call-interactively' how to read arguments
  17559. + to pass to the function.
  17560. +When actually called, `interactive' just returns nil.
  17561. +
  17562. +The argument of `interactive' is usually a string containing a code letter
  17563. + followed by a prompt.  (Some code letters do not use I/O to get
  17564. + the argument and do not need prompts.)  To prompt for multiple arguments,
  17565. + give a code letter, its prompt, a newline, and another code letter, etc.
  17566. + Prompts are passed to format, and may use % escapes to print the
  17567. + arguments that have already been read.
  17568. +If the argument is not a string, it is evaluated to get a list of
  17569. + arguments to pass to the function.
  17570. +Just `(interactive)' means pass no args when calling interactively.
  17571. +
  17572. +Code letters available are:
  17573. +a -- Function name: symbol with a function definition.
  17574. +b -- Name of existing buffer.
  17575. +B -- Name of buffer, possibly nonexistent.
  17576. +c -- Character.
  17577. +C -- Command name: symbol with interactive function definition.
  17578. +d -- Value of point as number.  Does not do I/O.
  17579. +D -- Directory name.
  17580. +e -- Parametrized event (i.e., one that's a list) that invoked this command.
  17581. +     If used more than once, the Nth `e' returns the Nth parameterized event.
  17582. +     This skips events that are integers or symbols.
  17583. +f -- Existing file name.
  17584. +F -- Possibly nonexistent file name.
  17585. +k -- Key sequence (string).
  17586. +m -- Value of mark as number.  Does not do I/O.
  17587. +n -- Number read using minibuffer.
  17588. +N -- Prefix arg converted to number, or if none, do like code `n'.
  17589. +p -- Prefix arg converted to number.  Does not do I/O.
  17590. +P -- Prefix arg in raw form.  Does not do I/O.
  17591. +r -- Region: point and mark as 2 numeric args, smallest first.  Does no I/O.
  17592. +s -- Any string.
  17593. +S -- Any symbol.
  17594. +v -- Variable name: symbol that is user-variable-p.
  17595. +x -- Lisp expression read but not evaluated.
  17596. +X -- Lisp expression read and evaluated.
  17597. +In addition, if the string begins with `*'
  17598. + then an error is signaled if the buffer is read-only.
  17599. + This happens before reading any arguments.
  17600. +If the string begins with `@', then Emacs searches the key sequence
  17601. + which invoked the command for its first mouse click (or any other
  17602. + event which specifies a window), and selects that window before
  17603. + reading any arguments.  You may use both `@' and `*'; they are
  17604. + processed in the order that they appear.
  17605. +
  17606. +(interactive ARGS)Fcall-interactively
  17607. +Call FUNCTION, reading args according to its interactive calling specs.
  17608. +The function contains a specification of how to do the argument reading.
  17609. +In the case of user-defined functions, this is specified by placing a call
  17610. +to the function `interactive' at the top level of the function body.
  17611. +See `interactive'.
  17612. +
  17613. +Optional second arg RECORD-FLAG non-nil
  17614. +means unconditionally put this command in the command-history.
  17615. +Otherwise, this is done only if an arg is read using the minibuffer.
  17616. +
  17617. +(call-interactively FUNCTION &optional RECORD)Fprefix-numeric-value
  17618. +Return numeric meaning of raw prefix argument ARG.
  17619. +A raw prefix argument is what you get from `(interactive "P")'.
  17620. +Its numeric meaning is what you would get from `(interactive "p")'.
  17621. +
  17622. +(prefix-numeric-value RAW)Vprefix-arg
  17623. +The value of the prefix argument for the next editing command.
  17624. +It may be a number, or the symbol `-' for just a minus sign as arg,
  17625. +or a list whose car is a number for just one or more C-U's
  17626. +or nil if no argument has been specified.
  17627. +
  17628. +You cannot examine this variable to find the argument for this command
  17629. +since it has been set to nil by the time you can look.
  17630. +Instead, you should use the variable `current-prefix-arg', although
  17631. +normally commands can get this prefix argument with (interactive "P").Vcurrent-prefix-arg
  17632. +The value of the prefix argument for this editing command.
  17633. +It may be a number, or the symbol `-' for just a minus sign as arg,
  17634. +or a list whose car is a number for just one or more C-U's
  17635. +or nil if no argument has been specified.
  17636. +This is what `(interactive "P")' returns.Vcommand-history
  17637. +List of recent commands that read arguments from terminal.
  17638. +Each command is represented as a form to evaluate.Vcommand-debug-status
  17639. +Debugging status of current interactive command.
  17640. +Bound each time `call-interactively' is called;
  17641. +may be set by the debugger as a reminder for itself.Vmark-even-if-inactive
  17642. +*Non-nil means you can use the mark even when inactive.
  17643. +This option makes a difference in Transient Mark mode.
  17644. +When the option is non-nil, deactivation of the mark
  17645. +turns off region highlighting, but commands that use the mark
  17646. +behave as if the mark were still active.For
  17647. +Eval args until one of them yields non-nil, then return that value.
  17648. +The remaining args are not evalled at all.
  17649. +If all args return nil, return nil.Fand
  17650. +Eval args until one of them yields nil, then return nil.
  17651. +The remaining args are not evalled at all.
  17652. +If no arg yields nil, return the last arg's value.Fif
  17653. +(if COND THEN ELSE...): if COND yields non-nil, do THEN, else do ELSE...
  17654. +Returns the value of THEN or the value of the last of the ELSE's.
  17655. +THEN must be one expression, but ELSE... can be zero or more expressions.
  17656. +If COND yields nil, and there are no ELSE's, the value is nil.Fcond
  17657. +(cond CLAUSES...): try each clause until one succeeds.
  17658. +Each clause looks like (CONDITION BODY...).  CONDITION is evaluated
  17659. +and, if the value is non-nil, this clause succeeds:
  17660. +then the expressions in BODY are evaluated and the last one's
  17661. +value is the value of the cond-form.
  17662. +If no clause succeeds, cond returns nil.
  17663. +If a clause has one element, as in (CONDITION),
  17664. +CONDITION's value if non-nil is returned from the cond-form.Fprogn
  17665. +(progn BODY...): eval BODY forms sequentially and return value of last one.Fprog1
  17666. +(prog1 FIRST BODY...): eval FIRST and BODY sequentially; value from FIRST.
  17667. +The value of FIRST is saved during the evaluation of the remaining args,
  17668. +whose values are discarded.Fprog2
  17669. +(prog2 X Y BODY...): eval X, Y and BODY sequentially; value from Y.
  17670. +The value of Y is saved during the evaluation of the remaining args,
  17671. +whose values are discarded.Fsetq
  17672. +(setq SYM VAL SYM VAL ...): set each SYM to the value of its VAL.
  17673. +The symbols SYM are variables; they are literal (not evaluated).
  17674. +The values VAL are expressions; they are evaluated.
  17675. +Thus, (setq x (1+ y)) sets `x' to the value of `(1+ y)'.
  17676. +The second VAL is not computed until after the first SYM is set, and so on;
  17677. +each VAL can use the new value of variables set earlier in the `setq'.
  17678. +The return value of the `setq' form is the value of the last VAL.Fquote
  17679. +Return the argument, without evaluating it.  `(quote x)' yields `x'.Ffunction
  17680. +Like `quote', but preferred for objects which are functions.
  17681. +In byte compilation, `function' causes its argument to be compiled.
  17682. +`quote' cannot do that.Finteractive-p
  17683. +Return t if function in which this appears was called interactively.
  17684. +This means that the function was called with call-interactively (which
  17685. +includes being called as the binding of a key)
  17686. +and input is currently coming from the keyboard (not in keyboard macro).
  17687. +
  17688. +(interactive-p)Fdefun
  17689. +(defun NAME ARGLIST [DOCSTRING] BODY...): define NAME as a function.
  17690. +The definition is (lambda ARGLIST [DOCSTRING] BODY...).
  17691. +See also the function `interactive'.Fdefmacro
  17692. +(defmacro NAME ARGLIST [DOCSTRING] BODY...): define NAME as a macro.
  17693. +The definition is (macro lambda ARGLIST [DOCSTRING] BODY...).
  17694. +When the macro is called, as in (NAME ARGS...),
  17695. +the function (lambda ARGLIST BODY...) is applied to
  17696. +the list ARGS... as it appears in the expression,
  17697. +and the result should be a form to be evaluated instead of the original.Fdefvar
  17698. +(defvar SYMBOL INITVALUE DOCSTRING): define SYMBOL as a variable.
  17699. +You are not required to define a variable in order to use it,
  17700. +but the definition can supply documentation and an initial value
  17701. +in a way that tags can recognize.
  17702. +
  17703. +INITVALUE is evaluated, and used to set SYMBOL, only if SYMBOL's value is void.
  17704. +If SYMBOL is buffer-local, its default value is what is set;
  17705. + buffer-local values are not affected.
  17706. +INITVALUE and DOCSTRING are optional.
  17707. +If DOCSTRING starts with *, this variable is identified as a user option.
  17708. + This means that M-x set-variable and M-x edit-options recognize it.
  17709. +If INITVALUE is missing, SYMBOL's value is not set.Fdefconst
  17710. +(defconst SYMBOL INITVALUE DOCSTRING): define SYMBOL as a constant variable.
  17711. +The intent is that programs do not change this value, but users may.
  17712. +Always sets the value of SYMBOL to the result of evalling INITVALUE.
  17713. +If SYMBOL is buffer-local, its default value is what is set;
  17714. + buffer-local values are not affected.
  17715. +DOCSTRING is optional.
  17716. +If DOCSTRING starts with *, this variable is identified as a user option.
  17717. + This means that M-x set-variable and M-x edit-options recognize it.
  17718. +
  17719. +Note: do not use `defconst' for user options in libraries that are not
  17720. +normally loaded, since it is useful for users to be able to specify
  17721. +their own values for such variables before loading the library.
  17722. +Since `defconst' unconditionally assigns the variable,
  17723. +it would override the user's choice.Fuser-variable-p
  17724. +Returns t if VARIABLE is intended to be set and modified by users.
  17725. +(The alternative is a variable used internally in a Lisp program.)
  17726. +Determined by whether the first character of the documentation
  17727. +for the variable is "*"
  17728. +
  17729. +(user-variable-p VARIABLE)Flet*
  17730. +(let* VARLIST BODY...): bind variables according to VARLIST then eval BODY.
  17731. +The value of the last form in BODY is returned.
  17732. +Each element of VARLIST is a symbol (which is bound to nil)
  17733. +or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the value of VALUEFORM).
  17734. +Each VALUEFORM can refer to the symbols already bound by this VARLIST.Flet
  17735. +(let VARLIST BODY...): bind variables according to VARLIST then eval BODY.
  17736. +The value of the last form in BODY is returned.
  17737. +Each element of VARLIST is a symbol (which is bound to nil)
  17738. +or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the value of VALUEFORM).
  17739. +All the VALUEFORMs are evalled before any symbols are bound.Fwhile
  17740. +(while TEST BODY...): if TEST yields non-nil, eval BODY... and repeat.
  17741. +The order of execution is thus TEST, BODY, TEST, BODY and so on
  17742. +until TEST returns nil.Fmacroexpand
  17743. +Return result of expanding macros at top level of FORM.
  17744. +If FORM is not a macro call, it is returned unchanged.
  17745. +Otherwise, the macro is expanded and the expansion is considered
  17746. +in place of FORM.  When a non-macro-call results, it is returned.
  17747. +
  17748. +The second optional arg ENVIRONMENT species an environment of macro
  17749. +definitions to shadow the loaded ones for use in file byte-compilation.
  17750. +
  17751. +(macroexpand FORM &optional ENV)Fcatch
  17752. +(catch TAG BODY...): eval BODY allowing nonlocal exits using `throw'.
  17753. +TAG is evalled to get the tag to use.  Then the BODY is executed.
  17754. +Within BODY, (throw TAG) with same tag exits BODY and exits this `catch'.
  17755. +If no throw happens, `catch' returns the value of the last BODY form.
  17756. +If a throw happens, it specifies the value to return from `catch'.Fthrow
  17757. +(throw TAG VALUE): throw to the catch for TAG and return VALUE from it.
  17758. +Both TAG and VALUE are evalled.
  17759. +
  17760. +(throw TAG VAL)Funwind-protect
  17761. +Do BODYFORM, protecting with UNWINDFORMS.
  17762. +Usage looks like (unwind-protect BODYFORM UNWINDFORMS...).
  17763. +If BODYFORM completes normally, its value is returned
  17764. +after executing the UNWINDFORMS.
  17765. +If BODYFORM exits nonlocally, the UNWINDFORMS are executed anyway.Fcondition-case
  17766. +Regain control when an error is signaled.
  17767. +Usage looks like (condition-case VAR BODYFORM HANDLERS...).
  17768. +executes BODYFORM and returns its value if no error happens.
  17769. +Each element of HANDLERS looks like (CONDITION-NAME BODY...)
  17770. +where the BODY is made of Lisp expressions.
  17771. +
  17772. +A handler is applicable to an error
  17773. +if CONDITION-NAME is one of the error's condition names.
  17774. +If an error happens, the first applicable handler is run.
  17775. +
  17776. +The car of a handler may be a list of condition names
  17777. +instead of a single condition name.
  17778. +
  17779. +When a handler handles an error,
  17780. +control returns to the condition-case and the handler BODY... is executed
  17781. +with VAR bound to (SIGNALED-CONDITIONS . SIGNAL-DATA).
  17782. +VAR may be nil; then you do not get access to the signal information.
  17783. +
  17784. +The value of the last BODY form is returned from the condition-case.
  17785. +See also the function `signal' for more info.Fsignal
  17786. +Signal an error.  Args are ERROR-SYMBOL and associated DATA.
  17787. +This function does not return.
  17788. +
  17789. +An error symbol is a symbol with an `error-conditions' property
  17790. +that is a list of condition names.
  17791. +A handler for any of those names will get to handle this signal.
  17792. +The symbol `error' should normally be one of them.
  17793. +
  17794. +DATA should be a list.  Its elements are printed as part of the error message.
  17795. +If the signal is handled, DATA is made available to the handler.
  17796. +See also the function `condition-case'.
  17797. +
  17798. +(signal ERROR-SYMBOL DATA)Fcommandp
  17799. +T if FUNCTION makes provisions for interactive calling.
  17800. +This means it contains a description for how to read arguments to give it.
  17801. +The value is nil for an invalid function or a symbol with no function
  17802. +definition.
  17803. +
  17804. +Interactively callable functions include strings and vectors (treated
  17805. +as keyboard macros), lambda-expressions that contain a top-level call
  17806. +to `interactive', autoload definitions made by `autoload' with non-nil
  17807. +fourth argument, and some of the built-in functions of Lisp.
  17808. +
  17809. +Also, a symbol satisfies `commandp' if its function definition does so.
  17810. +
  17811. +(commandp FUNCTION)Fautoload
  17812. +Define FUNCTION to autoload from FILE.
  17813. +FUNCTION is a symbol; FILE is a file name string to pass to `load'.
  17814. +Third arg DOCSTRING is documentation for the function.
  17815. +Fourth arg INTERACTIVE if non-nil says function can be called interactively.
  17816. +Fifth arg TYPE indicates the type of the object:
  17817. +   nil or omitted says FUNCTION is a function,
  17818. +   `keymap' says FUNCTION is really a keymap, and
  17819. +   `macro' or t says FUNCTION is really a macro.
  17820. +Third through fifth args give info about the real definition.
  17821. +They default to nil.
  17822. +If FUNCTION is already defined other than as an autoload,
  17823. +this does nothing and returns nil.
  17824. +
  17825. +(autoload FUNCTION FILE &optional DOCSTRING INTERACTIVE TYPE)Feval
  17826. +Evaluate FORM and return its value.
  17827. +
  17828. +(eval FORM)Fapply
  17829. +Call FUNCTION with our remaining args, using our last arg as list of args.
  17830. +Thus, (apply '+ 1 2 '(3 4)) returns 10.Ffuncall
  17831. +Call first argument as a function, passing remaining arguments to it.
  17832. +Thus, (funcall 'cons 'x 'y) returns (x . y).Fbacktrace-debug
  17833. +Set the debug-on-exit flag of eval frame LEVEL levels down to FLAG.
  17834. +The debugger is entered when that frame exits, if the flag is non-nil.
  17835. +
  17836. +(backtrace-debug LEVEL FLAG)Fbacktrace
  17837. +Print a trace of Lisp function calls currently active.
  17838. +Output stream used is value of `standard-output'.
  17839. +
  17840. +(backtrace)Fbacktrace-frame
  17841. +Return the function and arguments N frames up from current execution point.
  17842. +If that frame has not evaluated the arguments yet (or is a special form),
  17843. +the value is (nil FUNCTION ARG-FORMS...).
  17844. +If that frame has evaluated its arguments and called its function already,
  17845. +the value is (t FUNCTION ARG-VALUES...).
  17846. +A &rest arg is represented as the tail of the list ARG-VALUES.
  17847. +FUNCTION is whatever was supplied as car of evaluated list,
  17848. +or a lambda expression for macro calls.
  17849. +If N is more than the number of frames, the value is nil.
  17850. +
  17851. +(backtrace-frame NFRAMES)Vmax-specpdl-size
  17852. +Limit on number of Lisp variable bindings & unwind-protects before error.Vmax-lisp-eval-depth
  17853. +Limit on depth in `eval', `apply' and `funcall' before error.
  17854. +This limit is to catch infinite recursions for you before they cause
  17855. +actual stack overflow in C, which would be fatal for Emacs.
  17856. +You can safely make it considerably larger than its default value,
  17857. +if that proves inconveniently small.Vquit-flag
  17858. +Non-nil causes `eval' to abort, unless `inhibit-quit' is non-nil.
  17859. +Typing C-g sets `quit-flag' non-nil, regardless of `inhibit-quit'.Vinhibit-quit
  17860. +Non-nil inhibits C-g quitting from happening immediately.
  17861. +Note that `quit-flag' will still be set by typing C-g,
  17862. +so a quit will be signalled as soon as `inhibit-quit' is nil.
  17863. +To prevent this happening, set `quit-flag' to nil
  17864. +before making `inhibit-quit' nil.Vstack-trace-on-error
  17865. +*Non-nil means automatically display a backtrace buffer
  17866. +after any error that is handled by the editor command loop.
  17867. +If the value is a list, an error only means to display a backtrace
  17868. +if one of its condition symbols appears in the list.Vdebug-on-error
  17869. +*Non-nil means enter debugger if an error is signaled.
  17870. +Does not apply to errors handled by `condition-case'.
  17871. +If the value is a list, an error only means to enter the debugger
  17872. +if one of its condition symbols appears in the list.
  17873. +See also variable `debug-on-quit'.Vdebug-on-quit
  17874. +*Non-nil means enter debugger if quit is signaled (C-g, for example).
  17875. +Does not apply if quit is handled by a `condition-case'.Vdebug-on-next-call
  17876. +Non-nil means enter debugger before next `eval', `apply' or `funcall'.Vdebugger
  17877. +Function to call to invoke debugger.
  17878. +If due to frame exit, args are `exit' and the value being returned;
  17879. + this function's value will be returned instead of that.
  17880. +If due to error, args are `error' and a list of the args to `signal'.
  17881. +If due to `apply' or `funcall' entry, one arg, `lambda'.
  17882. +If due to `eval' entry, one arg, t.Vmocklisp-arguments
  17883. +While in a mocklisp function, the list of its unevaluated args.Vrun-hooks
  17884. +Set to the function `run-hooks', if that function has been defined.
  17885. +Otherwise, nil (in a bare Emacs without preloaded Lisp code).Facos
  17886. +Return the inverse cosine of ARG.
  17887. +
  17888. +(acos ARG)Fasin
  17889. +Return the inverse sine of ARG.
  17890. +
  17891. +(asin ARG)Fatan
  17892. +Return the inverse tangent of ARG.
  17893. +
  17894. +(atan ARG)Fcos
  17895. +Return the cosine of ARG.
  17896. +
  17897. +(cos ARG)Fsin
  17898. +Return the sine of ARG.
  17899. +
  17900. +(sin ARG)Ftan
  17901. +Return the tangent of ARG.
  17902. +
  17903. +(tan ARG)Fbessel-j0
  17904. +Return the bessel function j0 of ARG.
  17905. +
  17906. +(bessel-j0 ARG)Fbessel-j1
  17907. +Return the bessel function j1 of ARG.
  17908. +
  17909. +(bessel-j1 ARG)Fbessel-jn
  17910. +Return the order N bessel function output jn of ARG.
  17911. +The first arg (the order) is truncated to an integer.
  17912. +
  17913. +(bessel-jn ARG1 ARG2)Fbessel-y0
  17914. +Return the bessel function y0 of ARG.
  17915. +
  17916. +(bessel-y0 ARG)Fbessel-y1
  17917. +Return the bessel function y1 of ARG.
  17918. +
  17919. +(bessel-y1 ARG)Fbessel-yn
  17920. +Return the order N bessel function output yn of ARG.
  17921. +The first arg (the order) is truncated to an integer.
  17922. +
  17923. +(bessel-yn ARG1 ARG2)Ferf
  17924. +Return the mathematical error function of ARG.
  17925. +
  17926. +(erf ARG)Ferfc
  17927. +Return the complementary error function of ARG.
  17928. +
  17929. +(erfc ARG)Flog-gamma
  17930. +Return the log gamma of ARG.
  17931. +
  17932. +(log-gamma ARG)Fcube-root
  17933. +Return the cube root of ARG.
  17934. +
  17935. +(cube-root ARG)Fexp
  17936. +Return the exponential base e of ARG.
  17937. +
  17938. +(exp ARG)Fexpt
  17939. +Return the exponential X ** Y.
  17940. +
  17941. +(expt ARG1 ARG2)Flog
  17942. +Return the natural logarithm of ARG.
  17943. +If second optional argument BASE is given, return log ARG using that base.
  17944. +
  17945. +(log ARG &optional BASE)Flog10
  17946. +Return the logarithm base 10 of ARG.
  17947. +
  17948. +(log10 ARG)Fsqrt
  17949. +Return the square root of ARG.
  17950. +
  17951. +(sqrt ARG)Facosh
  17952. +Return the inverse hyperbolic cosine of ARG.
  17953. +
  17954. +(acosh ARG)Fasinh
  17955. +Return the inverse hyperbolic sine of ARG.
  17956. +
  17957. +(asinh ARG)Fatanh
  17958. +Return the inverse hyperbolic tangent of ARG.
  17959. +
  17960. +(atanh ARG)Fcosh
  17961. +Return the hyperbolic cosine of ARG.
  17962. +
  17963. +(cosh ARG)Fsinh
  17964. +Return the hyperbolic sine of ARG.
  17965. +
  17966. +(sinh ARG)Ftanh
  17967. +Return the hyperbolic tangent of ARG.
  17968. +
  17969. +(tanh ARG)Fabs
  17970. +Return the absolute value of ARG.
  17971. +
  17972. +(abs ARG)Ffloat
  17973. +Return the floating point number equal to ARG.
  17974. +
  17975. +(float ARG)Flogb
  17976. +Returns largest integer <= the base 2 log of the magnitude of ARG.
  17977. +This is the same as the exponent of a float.
  17978. +
  17979. +(logb ARG)Fceiling
  17980. +Return the smallest integer no less than ARG.  (Round toward +inf.)
  17981. +
  17982. +(ceiling ARG)Ffloor
  17983. +Return the largest integer no greater than ARG.  (Round towards -inf.)
  17984. +With optional DIVISOR, return the largest integer no greater than ARG/DIVISOR.
  17985. +
  17986. +(floor ARG &optional DIVISOR)Fround
  17987. +Return the nearest integer to ARG.
  17988. +
  17989. +(round ARG)Ftruncate
  17990. +Truncate a floating point number to an int.
  17991. +Rounds the value toward zero.
  17992. +
  17993. +(truncate ARG)Ffceiling
  17994. +Return the smallest integer no less than ARG, as a float.
  17995. +(Round toward +inf.)
  17996. +
  17997. +(fceiling ARG)Fffloor
  17998. +Return the largest integer no greater than ARG, as a float.
  17999. +(Round towards -inf.)
  18000. +
  18001. +(ffloor ARG)Ffround
  18002. +Return the nearest integer to ARG, as a float.
  18003. +
  18004. +(fround ARG)Fftruncate
  18005. +Truncate a floating point number to an integral float value.
  18006. +Rounds the value toward zero.
  18007. +
  18008. +(ftruncate ARG)Fidentity
  18009. +Return the argument unchanged.
  18010. +
  18011. +(identity ARG)Frandom
  18012. +Return a pseudo-random number.
  18013. +On most systems all integers representable in Lisp are equally likely.
  18014. +  This is 24 bits' worth.
  18015. +With argument N, return random number in interval [0,N).
  18016. +With argument t, set the random number seed from the current time and pid.
  18017. +
  18018. +(random &optional LIMIT)Flength
  18019. +Return the length of vector, list or string SEQUENCE.
  18020. +A byte-code function object is also allowed.
  18021. +
  18022. +(length OBJ)Fstring-equal
  18023. +T if two strings have identical contents.
  18024. +Case is significant.
  18025. +Symbols are also allowed; their print names are used instead.
  18026. +
  18027. +(string-equal S1 S2)Fstring-lessp
  18028. +T if first arg string is less than second in lexicographic order.
  18029. +Case is significant.
  18030. +Symbols are also allowed; their print names are used instead.
  18031. +
  18032. +(string-lessp S1 S2)Fappend
  18033. +Concatenate all the arguments and make the result a list.
  18034. +The result is a list whose elements are the elements of all the arguments.
  18035. +Each argument may be a list, vector or string.
  18036. +The last argument is not copied, just used as the tail of the new list.Fconcat
  18037. +Concatenate all the arguments and make the result a string.
  18038. +The result is a string whose elements are the elements of all the arguments.
  18039. +Each argument may be a string, a list of characters (integers),
  18040. +or a vector of characters (integers).Fvconcat
  18041. +Concatenate all the arguments and make the result a vector.
  18042. +The result is a vector whose elements are the elements of all the arguments.
  18043. +Each argument may be a list, vector or string.Fcopy-sequence
  18044. +Return a copy of a list, vector or string.
  18045. +The elements of a list or vector are not copied; they are shared
  18046. +with the original.
  18047. +
  18048. +(copy-sequence ARG)Fcopy-alist
  18049. +Return a copy of ALIST.
  18050. +This is an alist which represents the same mapping from objects to objects,
  18051. +but does not share the alist structure with ALIST.
  18052. +The objects mapped (cars and cdrs of elements of the alist)
  18053. +are shared, however.
  18054. +Elements of ALIST that are not conses are also shared.
  18055. +
  18056. +(copy-alist ALIST)Fsubstring
  18057. +Return a substring of STRING, starting at index FROM and ending before TO.
  18058. +TO may be nil or omitted; then the substring runs to the end of STRING.
  18059. +If FROM or TO is negative, it counts from the end.
  18060. +
  18061. +(substring STRING FROM &optional TO)Fnthcdr
  18062. +Take cdr N times on LIST, returns the result.
  18063. +
  18064. +(nthcdr N LIST)Fnth
  18065. +Return the Nth element of LIST.
  18066. +N counts from zero.  If LIST is not that long, nil is returned.
  18067. +
  18068. +(nth N LIST)Felt
  18069. +Return element of SEQUENCE at index N.
  18070. +
  18071. +(elt SEQ N)Fmember
  18072. +Return non-nil if ELT is an element of LIST.  Comparison done with `equal'.
  18073. +The value is actually the tail of LIST whose car is ELT.
  18074. +
  18075. +(member ELT LIST)Fmemq
  18076. +Return non-nil if ELT is an element of LIST.  Comparison done with EQ.
  18077. +The value is actually the tail of LIST whose car is ELT.
  18078. +
  18079. +(memq ELT LIST)Fassq
  18080. +Return non-nil if KEY is `eq' to the car of an element of LIST.
  18081. +The value is actually the element of LIST whose car is KEY.
  18082. +Elements of LIST that are not conses are ignored.
  18083. +
  18084. +(assq KEY LIST)Fassoc
  18085. +Return non-nil if KEY is `equal' to the car of an element of LIST.
  18086. +The value is actually the element of LIST whose car is KEY.
  18087. +
  18088. +(assoc KEY LIST)Frassq
  18089. +Return non-nil if ELT is `eq' to the cdr of an element of LIST.
  18090. +The value is actually the element of LIST whose cdr is ELT.
  18091. +
  18092. +(rassq KEY LIST)Fdelq
  18093. +Delete by side effect any occurrences of ELT as a member of LIST.
  18094. +The modified LIST is returned.  Comparison is done with `eq'.
  18095. +If the first member of LIST is ELT, there is no way to remove it by side effect;
  18096. +therefore, write `(setq foo (delq element foo))'
  18097. +to be sure of changing the value of `foo'.
  18098. +
  18099. +(delq ELT LIST)Fdelete
  18100. +Delete by side effect any occurrences of ELT as a member of LIST.
  18101. +The modified LIST is returned.  Comparison is done with `equal'.
  18102. +If the first member of LIST is ELT, deleting it is not a side effect;
  18103. +it is simply using a different list.
  18104. +Therefore, write `(setq foo (delete element foo))'
  18105. +to be sure of changing the value of `foo'.
  18106. +
  18107. +(delete ELT LIST)Fnreverse
  18108. +Reverse LIST by modifying cdr pointers.
  18109. +Returns the beginning of the reversed list.
  18110. +
  18111. +(nreverse LIST)Freverse
  18112. +Reverse LIST, copying.  Returns the beginning of the reversed list.
  18113. +See also the function `nreverse', which is used more often.
  18114. +
  18115. +(reverse LIST)Fsort
  18116. +Sort LIST, stably, comparing elements using PREDICATE.
  18117. +Returns the sorted list.  LIST is modified by side effects.
  18118. +PREDICATE is called with two elements of LIST, and should return T
  18119. +if the first element is "less" than the second.
  18120. +
  18121. +(sort LIST PRED)Fget
  18122. +Return the value of SYMBOL's PROPNAME property.
  18123. +This is the last VALUE stored with `(put SYMBOL PROPNAME VALUE)'.
  18124. +
  18125. +(get SYM PROP)Fput
  18126. +Store SYMBOL's PROPNAME property with value VALUE.
  18127. +It can be retrieved with `(get SYMBOL PROPNAME)'.
  18128. +
  18129. +(put SYM PROP VAL)Fequal
  18130. +T if two Lisp objects have similar structure and contents.
  18131. +They must have the same data type.
  18132. +Conses are compared by comparing the cars and the cdrs.
  18133. +Vectors and strings are compared element by element.
  18134. +Numbers are compared by value, but integers cannot equal floats.
  18135. + (Use `=' if you want integers and floats to be able to be equal.)
  18136. +Symbols must match exactly.
  18137. +
  18138. +(equal O1 O2)Ffillarray
  18139. +Store each element of ARRAY with ITEM.  ARRAY is a vector or string.
  18140. +
  18141. +(fillarray ARRAY ITEM)Fnconc
  18142. +Concatenate any number of lists by altering them.
  18143. +Only the last argument is not altered, and need not be a list.Fmapconcat
  18144. +Apply FN to each element of SEQ, and concat the results as strings.
  18145. +In between each pair of results, stick in SEP.
  18146. +Thus, " " as SEP results in spaces between the values returned by FN.
  18147. +
  18148. +(mapconcat FN SEQ SEP)Fmapcar
  18149. +Apply FUNCTION to each element of SEQUENCE, and make a list of the results.
  18150. +The result is a list just as long as SEQUENCE.
  18151. +SEQUENCE may be a list, a vector or a string.
  18152. +
  18153. +(mapcar FN SEQ)Fy-or-n-p
  18154. +Ask user a "y or n" question.  Return t if answer is "y".
  18155. +Takes one argument, which is the string to display to ask the question.
  18156. +It should end in a space; `y-or-n-p' adds `(y or n) ' to it.
  18157. +No confirmation of the answer is requested; a single character is enough.
  18158. +Also accepts Space to mean yes, or Delete to mean no.
  18159. +
  18160. +(y-or-n-p PROMPT)Fyes-or-no-p
  18161. +Ask user a yes-or-no question.  Return t if answer is yes.
  18162. +Takes one argument, which is the string to display to ask the question.
  18163. +It should end in a space; `yes-or-no-p' adds `(yes or no) ' to it.
  18164. +The user must confirm the answer with RET,
  18165. +and can edit it until it as been confirmed.
  18166. +
  18167. +(yes-or-no-p PROMPT)Fload-average
  18168. +Return list of 1 minute, 5 minute and 15 minute load averages.
  18169. +Each of the three load averages is multiplied by 100,
  18170. +then converted to integer.
  18171. +If the 5-minute or 15-minute load averages are not available, return a
  18172. +shortened list, containing only those averages which are available.
  18173. +
  18174. +(load-average)Ffeaturep
  18175. +Returns t if FEATURE is present in this Emacs.
  18176. +Use this to conditionalize execution of lisp code based on the presence or
  18177. +absence of emacs or environment extensions.
  18178. +Use `provide' to declare that a feature is available.
  18179. +This function looks at the value of the variable `features'.
  18180. +
  18181. +(featurep FEATURE)Fprovide
  18182. +Announce that FEATURE is a feature of the current Emacs.
  18183. +
  18184. +(provide FEATURE)Frequire
  18185. +If feature FEATURE is not loaded, load it from FILENAME.
  18186. +If FEATURE is not a member of the list `features', then the feature
  18187. +is not loaded; so load the file FILENAME.
  18188. +If FILENAME is omitted, the printname of FEATURE is used as the file name.
  18189. +
  18190. +(require FEATURE &optional FILE-NAME)Vfeatures
  18191. +A list of symbols which are the features of the executing emacs.
  18192. +Used by `featurep' and `require', and altered by `provide'.Fwrite-char
  18193. +Output character CHAR to stream PRINTCHARFUN.
  18194. +PRINTCHARFUN defaults to the value of `standard-output' (which see).
  18195. +
  18196. +(write-char CH &optional PRINTCHARFUN)Fwith-output-to-temp-buffer
  18197. +Bind `standard-output' to buffer BUFNAME, eval BODY, then show that buffer.
  18198. +The buffer is cleared out initially, and marked as unmodified when done.
  18199. +All output done by BODY is inserted in that buffer by default.
  18200. +The buffer is displayed in another window, but not selected.
  18201. +The value of the last form in BODY is returned.
  18202. +If BODY does not finish normally, the buffer BUFNAME is not displayed.
  18203. +
  18204. +If variable `temp-buffer-show-function' is non-nil, call it at the end
  18205. +to get the buffer displayed.  It gets one argument, the buffer to display.Fterpri
  18206. +Output a newline to stream PRINTCHARFUN.
  18207. +If PRINTCHARFUN is omitted or nil, the value of `standard-output' is used.
  18208. +
  18209. +(terpri &optional PRINTCHARFUN)Fprin1
  18210. +Output the printed representation of OBJECT, any Lisp object.
  18211. +Quoting characters are printed when needed to make output that `read'
  18212. +can handle, whenever this is possible.
  18213. +Output stream is PRINTCHARFUN, or value of `standard-output' (which see).
  18214. +
  18215. +(prin1 OBJ &optional PRINTCHARFUN)Fprin1-to-string
  18216. +Return a string containing the printed representation of OBJECT,
  18217. +any Lisp object.  Quoting characters are used when needed to make output
  18218. +that `read' can handle, whenever this is possible, unless the optional
  18219. +second argument NOESCAPE is non-nil.
  18220. +
  18221. +(prin1-to-string OBJ &optional NOESCAPE)Fprinc
  18222. +Output the printed representation of OBJECT, any Lisp object.
  18223. +No quoting characters are used; no delimiters are printed around
  18224. +the contents of strings.
  18225. +Output stream is PRINTCHARFUN, or value of standard-output (which see).
  18226. +
  18227. +(princ OBJ &optional PRINTCHARFUN)Fprint
  18228. +Output the printed representation of OBJECT, with newlines around it.
  18229. +Quoting characters are printed when needed to make output that `read'
  18230. +can handle, whenever this is possible.
  18231. +Output stream is PRINTCHARFUN, or value of `standard-output' (which see).
  18232. +
  18233. +(print OBJ &optional PRINTCHARFUN)Fexternal-debugging-output
  18234. +Write CHARACTER to stderr.
  18235. +You can call print while debugging emacs, and pass it this function
  18236. +to make it write to the debugging output.
  18237. +
  18238. +
  18239. +(external-debugging-output CHARACTER)Vstandard-output
  18240. +Output stream `print' uses by default for outputting a character.
  18241. +This may be any function of one argument.
  18242. +It may also be a buffer (output is inserted before point)
  18243. +or a marker (output is inserted and the marker is advanced)
  18244. +or the symbol t (output appears in the minibuffer line).Vfloat-output-format
  18245. +The format descriptor string used to print floats.
  18246. +This is a %-spec like those accepted by `printf' in C,
  18247. +but with some restrictions.  It must start with the two characters `%.'.
  18248. +After that comes an integer precision specification,
  18249. +and then a letter which controls the format.
  18250. +The letters allowed are `e', `f' and `g'.
  18251. +Use `e' for exponential notation "DIG.DIGITSeEXPT"
  18252. +Use `f' for decimal point notation "DIGITS.DIGITS".
  18253. +Use `g' to choose the shorter of those two formats for the number at hand.
  18254. +The precision in any of these cases is the number of digits following
  18255. +the decimal point.  With `f', a precision of 0 means to omit the
  18256. +decimal point.  0 is not allowed with `e' or `g'.
  18257. +
  18258. +A value of nil means to use `%.17g'.Vprint-length
  18259. +Maximum length of list to print before abbreviating.
  18260. +A value of nil means no limit.Vprint-level
  18261. +Maximum depth of list nesting to print before abbreviating.
  18262. +A value of nil means no limit.Vprint-escape-newlines
  18263. +Non-nil means print newlines in strings as backslash-n.
  18264. +Also print formfeeds as backslash-f.Fread-char
  18265. +Read a character from the command input (keyboard or macro).
  18266. +It is returned as a number.
  18267. +If the user generates an event which is not a character (i.e. a mouse
  18268. +click or function key event), `read-char' signals an error.  As an
  18269. +exception, switch-frame events are put off until non-ASCII events can
  18270. +be read.
  18271. +If you want to read non-character events, or ignore them, call
  18272. +`read-event' or `read-char-exclusive' instead.
  18273. +
  18274. +(read-char)Fread-event
  18275. +Read an event object from the input stream.
  18276. +
  18277. +(read-event)Fread-char-exclusive
  18278. +Read a character from the command input (keyboard or macro).
  18279. +It is returned as a number.  Non character events are ignored.
  18280. +
  18281. +(read-char-exclusive)Fget-file-char
  18282. +Don't use this yourself.
  18283. +
  18284. +(get-file-char)Fload
  18285. +Execute a file of Lisp code named FILE.
  18286. +First try FILE with `.elc' appended, then try with `.el',
  18287. + then try FILE unmodified.
  18288. +This function searches the directories in `load-path'.
  18289. +If optional second arg NOERROR is non-nil,
  18290. + report no error if FILE doesn't exist.
  18291. +Print messages at start and end of loading unless
  18292. + optional third arg NOMESSAGE is non-nil.
  18293. +If optional fourth arg NOSUFFIX is non-nil, don't try adding
  18294. + suffixes `.elc' or `.el' to the specified name FILE.
  18295. +Return t if file exists.
  18296. +
  18297. +(load STR &optional NOERROR NOMESSAGE NOSUFFIX)Feval-buffer
  18298. +Execute the current buffer as Lisp code.
  18299. +Programs can pass two arguments, BUFFER and PRINTFLAG.
  18300. +BUFFER is the buffer to evaluate (nil means use current buffer).
  18301. +PRINTFLAG controls printing of output:
  18302. +nil means discard it; anything else is stream for print.
  18303. +
  18304. +If there is no error, point does not move.  If there is an error,
  18305. +point remains at the end of the last character read from the buffer.
  18306. +
  18307. +(eval-buffer &optional BUFNAME PRINTFLAG)Feval-current-buffer
  18308. +Execute the current buffer as Lisp code.
  18309. +Programs can pass argument PRINTFLAG which controls printing of output:
  18310. +nil means discard it; anything else is stream for print.
  18311. +
  18312. +If there is no error, point does not move.  If there is an error,
  18313. +point remains at the end of the last character read from the buffer.
  18314. +
  18315. +(eval-current-buffer &optional PRINTFLAG)Feval-region
  18316. +Execute the region as Lisp code.
  18317. +When called from programs, expects two arguments,
  18318. +giving starting and ending indices in the current buffer
  18319. +of the text to be executed.
  18320. +Programs can pass third argument PRINTFLAG which controls output:
  18321. +nil means discard it; anything else is stream for printing it.
  18322. +
  18323. +If there is no error, point does not move.  If there is an error,
  18324. +point remains at the end of the last character read from the buffer.
  18325. +
  18326. +(eval-region B E &optional PRINTFLAG)Fread
  18327. +Read one Lisp expression as text from STREAM, return as Lisp object.
  18328. +If STREAM is nil, use the value of `standard-input' (which see).
  18329. +STREAM or the value of `standard-input' may be:
  18330. + a buffer (read from point and advance it)
  18331. + a marker (read from where it points and advance it)
  18332. + a function (call it with no arguments for each character,
  18333. +     call it with a char as argument to push a char back)
  18334. + a string (takes text from string, starting at the beginning)
  18335. + t (read text line using minibuffer and use it).
  18336. +
  18337. +(read &optional READCHARFUN)Fread-from-string
  18338. +Read one Lisp expression which is represented as text by STRING.
  18339. +Returns a cons: (OBJECT-READ . FINAL-STRING-INDEX).
  18340. +START and END optionally delimit a substring of STRING from which to read;
  18341. + they default to 0 and (length STRING) respectively.
  18342. +
  18343. +(read-from-string STRING &optional START END)Fintern
  18344. +Return the canonical symbol whose name is STRING.
  18345. +If there is none, one is created by this function and returned.
  18346. +A second optional argument specifies the obarray to use;
  18347. +it defaults to the value of `obarray'.
  18348. +
  18349. +(intern STR &optional OBARRAY)Fintern-soft
  18350. +Return the canonical symbol whose name is STRING, or nil if none exists.
  18351. +A second optional argument specifies the obarray to use;
  18352. +it defaults to the value of `obarray'.
  18353. +
  18354. +(intern-soft STR &optional OBARRAY)Fmapatoms
  18355. +Call FUNCTION on every symbol in OBARRAY.
  18356. +OBARRAY defaults to the value of `obarray'.
  18357. +
  18358. +(mapatoms FUNCTION &optional OBARRAY)Vobarray
  18359. +Symbol table for use by `intern' and `read'.
  18360. +It is a vector whose length ought to be prime for best results.
  18361. +The vector's contents don't make sense if examined from Lisp programs;
  18362. +to find all the symbols in an obarray, use `mapatoms'.Vvalues
  18363. +List of values of all expressions which were read, evaluated and printed.
  18364. +Order is reverse chronological.Vstandard-input
  18365. +Stream for read to get input from.
  18366. +See documentation of `read' for possible values.Vload-path
  18367. +*List of directories to search for files to load.
  18368. +Each element is a string (directory name) or nil (try default directory).
  18369. +Initialized based on EMACSLOADPATH environment variable, if any,
  18370. +otherwise to default specified by file `paths.h' when Emacs was built.Vload-in-progress
  18371. +Non-nil iff inside of `load'.Vafter-load-alist
  18372. +An alist of expressions to be evalled when particular files are loaded.
  18373. +Each element looks like (FILENAME FORMS...).
  18374. +When `load' is run and the file-name argument is FILENAME,
  18375. +the FORMS in the corresponding element are executed at the end of loading.
  18376. +
  18377. +FILENAME must match exactly!  Normally FILENAME is the name of a library,
  18378. +with no directory specified, since that is how `load' is normally called.
  18379. +An error in FORMS does not undo the load,
  18380. +but does prevent execution of the rest of the FORMS.Vload-history
  18381. +Alist mapping source file names to symbols and features.
  18382. +Each alist element is a list that starts with a file name,
  18383. +except for one element (optional) that starts with nil and describes
  18384. +definitions evaluated from buffers not visiting files.
  18385. +The remaining elements of each list are symbols defined as functions
  18386. +or variables, and cons cells `(provide . FEATURE)' and `(require . FEATURE)'.Vcurrent-load-list
  18387. +Used for internal purposes by `load'.Fmake-abbrev-table
  18388. +Create a new, empty abbrev table object.
  18389. +
  18390. +(make-abbrev-table)Fclear-abbrev-table
  18391. +Undefine all abbrevs in abbrev table TABLE, leaving it empty.
  18392. +
  18393. +(clear-abbrev-table TABLE)Fdefine-abbrev
  18394. +Define an abbrev in TABLE named NAME, to expand to EXPANSION and call HOOK.
  18395. +NAME and EXPANSION are strings.
  18396. +To undefine an abbrev, define it with EXPANSION = nil.
  18397. +If HOOK is non-nil, it should be a function of no arguments;
  18398. +it is called after EXPANSION is inserted.
  18399. +
  18400. +(define-abbrev TABLE NAME EXPANSION &optional HOOK COUNT)Fdefine-global-abbrev
  18401. +Define ABBREV as a global abbreviation for EXPANSION.
  18402. +
  18403. +(define-global-abbrev NAME EXPANSION)Fdefine-mode-abbrev
  18404. +Define ABBREV as a mode-specific abbreviation for EXPANSION.
  18405. +
  18406. +(define-mode-abbrev NAME EXPANSION)Fabbrev-symbol
  18407. +Return the symbol representing abbrev named ABBREV.
  18408. +This symbol's name is ABBREV, but it is not the canonical symbol of that name;
  18409. +it is interned in an abbrev-table rather than the normal obarray.
  18410. +The value is nil if that abbrev is not defined.
  18411. +Optional second arg TABLE is abbrev table to look it up in.
  18412. +The default is to try buffer's mode-specific abbrev table, then global table.
  18413. +
  18414. +(abbrev-symbol ABBREV &optional TABLE)Fabbrev-expansion
  18415. +Return the string that ABBREV expands into in the current buffer.
  18416. +Optionally specify an abbrev table as second arg;
  18417. +then ABBREV is looked up in that table only.
  18418. +
  18419. +(abbrev-expansion ABBREV &optional TABLE)Fexpand-abbrev
  18420. +Expand the abbrev before point, if there is an abbrev there.
  18421. +Effective when explicitly called even when `abbrev-mode' is nil.
  18422. +Returns t if expansion took place.
  18423. +
  18424. +(expand-abbrev)Funexpand-abbrev
  18425. +Undo the expansion of the last abbrev that expanded.
  18426. +This differs from ordinary undo in that other editing done since then
  18427. +is not undone.
  18428. +
  18429. +(unexpand-abbrev)Finsert-abbrev-table-description
  18430. +Insert before point a full description of abbrev table named NAME.
  18431. +NAME is a symbol whose value is an abbrev table.
  18432. +If optional 2nd arg HUMAN is non-nil, a human-readable description is inserted.
  18433. +Otherwise the description is an expression,
  18434. +a call to `define-abbrev-table', which would
  18435. +define the abbrev table NAME exactly as it is currently defined.
  18436. +
  18437. +(insert-abbrev-table-description NAME &optional READABLE)Fdefine-abbrev-table
  18438. +Define TABNAME (a symbol) as an abbrev table name.
  18439. +Define abbrevs in it according to DEFINITIONS, which is a list of elements
  18440. +of the form (ABBREVNAME EXPANSION HOOK USECOUNT).
  18441. +
  18442. +(define-abbrev-table TABNAME DEFNS)Vabbrev-table-name-list
  18443. +List of symbols whose values are abbrev tables.Vglobal-abbrev-table
  18444. +The abbrev table whose abbrevs affect all buffers.
  18445. +Each buffer may also have a local abbrev table.
  18446. +If it does, the local table overrides the global one
  18447. +for any particular abbrev defined in both.Vfundamental-mode-abbrev-table
  18448. +The abbrev table of mode-specific abbrevs for Fundamental Mode.Vlast-abbrev
  18449. +The abbrev-symbol of the last abbrev expanded.  See `abbrev-symbol'.Vlast-abbrev-text
  18450. +The exact text of the last abbrev expanded.
  18451. +nil if the abbrev has already been unexpanded.Vlast-abbrev-location
  18452. +The location of the start of the last abbrev expanded.Vabbrev-start-location
  18453. +Buffer position for `expand-abbrev' to use as the start of the abbrev.
  18454. +nil means use the word before point as the abbrev.
  18455. +Calling `expand-abbrev' sets this to nil.Vabbrev-start-location-buffer
  18456. +Buffer that `abbrev-start-location' has been set for.
  18457. +Trying to expand an abbrev in any other buffer clears `abbrev-start-location'.Vlocal-abbrev-table
  18458. +Local (mode-specific) abbrev table of current buffer.Vabbrevs-changed
  18459. +Set non-nil by defining or altering any word abbrevs.
  18460. +This causes `save-some-buffers' to offer to save the abbrevs.Vabbrev-all-caps
  18461. +*Set non-nil means expand multi-word abbrevs all caps if abbrev was so.Vpre-abbrev-expand-hook
  18462. +Function or functions to be called before abbrev expansion is done.
  18463. +This is the first thing that `expand-abbrev' does, and so this may change
  18464. +the current abbrev table before abbrev lookup happens.Fsyntax-table-p
  18465. +Return t if ARG is a syntax table.
  18466. +Any vector of 256 elements will do.
  18467. +
  18468. +(syntax-table-p OBJ)Fsyntax-table
  18469. +Return the current syntax table.
  18470. +This is the one specified by the current buffer.
  18471. +
  18472. +(syntax-table)Fstandard-syntax-table
  18473. +Return the standard syntax table.
  18474. +This is the one used for new buffers.
  18475. +
  18476. +(standard-syntax-table)Fcopy-syntax-table
  18477. +Construct a new syntax table and return it.
  18478. +It is a copy of the TABLE, which defaults to the standard syntax table.
  18479. +
  18480. +(copy-syntax-table &optional TABLE)Fset-syntax-table
  18481. +Select a new syntax table for the current buffer.
  18482. +One argument, a syntax table.
  18483. +
  18484. +(set-syntax-table TABLE)Fchar-syntax
  18485. +Return the syntax code of CHAR, described by a character.
  18486. +For example, if CHAR is a word constituent, the character `?w' is returned.
  18487. +The characters that correspond to various syntax codes
  18488. +are listed in the documentation of `modify-syntax-entry'.
  18489. +
  18490. +(char-syntax CH)Fmatching-paren
  18491. +Return the matching parenthesis of CHAR, or nil if none.
  18492. +
  18493. +(matching-paren CH)Fmodify-syntax-entry
  18494. +Set syntax for character CHAR according to string S.
  18495. +The syntax is changed only for table TABLE, which defaults to
  18496. + the current buffer's syntax table.
  18497. +The first character of S should be one of the following:
  18498. +  Space or -  whitespace syntax.    w   word constituent.
  18499. +  _           symbol constituent.   .   punctuation.
  18500. +  (           open-parenthesis.     )   close-parenthesis.
  18501. +  "           string quote.         \   escape.
  18502. +  $           paired delimiter.     '   expression quote or prefix operator.
  18503. +  <           comment starter.      >   comment ender.
  18504. +  /           character-quote.      @   inherit from `standard-syntax-table'.
  18505. +
  18506. +Only single-character comment start and end sequences are represented thus.
  18507. +Two-character sequences are represented as described below.
  18508. +The second character of S is the matching parenthesis,
  18509. + used only if the first character is `(' or `)'.
  18510. +Any additional characters are flags.
  18511. +Defined flags are the characters 1, 2, 3, 4, b, and p.
  18512. + 1 means C is the start of a two-char comment start sequence.
  18513. + 2 means C is the second character of such a sequence.
  18514. + 3 means C is the start of a two-char comment end sequence.
  18515. + 4 means C is the second character of such a sequence.
  18516. +
  18517. +There can be up to two orthogonal comment sequences. This is to support
  18518. +language modes such as C++.  By default, all comment sequences are of style
  18519. +a, but you can set the comment sequence style to b (on the second character
  18520. +of a comment-start, or the first character of a comment-end sequence) using
  18521. +this flag:
  18522. + b means C is part of comment sequence b.
  18523. +
  18524. + p means C is a prefix character for `backward-prefix-chars';
  18525. +   such characters are treated as whitespace when they occur
  18526. +   between expressions.
  18527. +
  18528. +(modify-syntax-entry CHAR S &optional TABLE)Fdescribe-syntax
  18529. +Describe the syntax specifications in the syntax table.
  18530. +The descriptions are inserted in a buffer, which is then displayed.
  18531. +
  18532. +(describe-syntax)Fforward-word
  18533. +Move point forward ARG words (backward if ARG is negative).
  18534. +Normally returns t.
  18535. +If an edge of the buffer is reached, point is left there
  18536. +and nil is returned.
  18537. +
  18538. +(forward-word COUNT)Fforward-comment
  18539. +Move forward across up to N comments.  If N is negative, move backward.
  18540. +Stop scanning if we find something other than a comment or whitespace.
  18541. +Set point to where scanning stops.
  18542. +If N comments are found as expected, with nothing except whitespace
  18543. +between them, return t; otherwise return nil.
  18544. +
  18545. +(forward-comment COUNT)Fscan-lists
  18546. +Scan from character number FROM by COUNT lists.
  18547. +Returns the character number of the position thus found.
  18548. +
  18549. +If DEPTH is nonzero, paren depth begins counting from that value,
  18550. +only places where the depth in parentheses becomes zero
  18551. +are candidates for stopping; COUNT such places are counted.
  18552. +Thus, a positive value for DEPTH means go out levels.
  18553. +
  18554. +Comments are ignored if `parse-sexp-ignore-comments' is non-nil.
  18555. +
  18556. +If the beginning or end of (the accessible part of) the buffer is reached
  18557. +and the depth is wrong, an error is signaled.
  18558. +If the depth is right but the count is not used up, nil is returned.
  18559. +
  18560. +(scan-lists FROM COUNT DEPTH)Fscan-sexps
  18561. +Scan from character number FROM by COUNT balanced expressions.
  18562. +If COUNT is negative, scan backwards.
  18563. +Returns the character number of the position thus found.
  18564. +
  18565. +Comments are ignored if `parse-sexp-ignore-comments' is non-nil.
  18566. +
  18567. +If the beginning or end of (the accessible part of) the buffer is reached
  18568. +in the middle of a parenthetical grouping, an error is signaled.
  18569. +If the beginning or end is reached between groupings
  18570. +but before count is used up, nil is returned.
  18571. +
  18572. +(scan-sexps FROM COUNT)Fbackward-prefix-chars
  18573. +Move point backward over any number of chars with prefix syntax.
  18574. +This includes chars with "quote" or "prefix" syntax (' or p).
  18575. +
  18576. +(backward-prefix-chars)Fparse-partial-sexp
  18577. +Parse Lisp syntax starting at FROM until TO; return status of parse at TO.
  18578. +Parsing stops at TO or when certain criteria are met;
  18579. + point is set to where parsing stops.
  18580. +If fifth arg STATE is omitted or nil,
  18581. + parsing assumes that FROM is the beginning of a function.
  18582. +Value is a list of eight elements describing final state of parsing:
  18583. + 0. depth in parens.
  18584. + 1. character address of start of innermost containing list; nil if none.
  18585. + 2. character address of start of last complete sexp terminated.
  18586. + 3. non-nil if inside a string.
  18587. +    (it is the character that will terminate the string.)
  18588. + 4. t if inside a comment.
  18589. + 5. t if following a quote character.
  18590. + 6. the minimum paren-depth encountered during this scan.
  18591. + 7. t if in a comment of style `b'.
  18592. +If third arg TARGETDEPTH is non-nil, parsing stops if the depth
  18593. +in parentheses becomes equal to TARGETDEPTH.
  18594. +Fourth arg STOPBEFORE non-nil means stop when come to
  18595. + any character that starts a sexp.
  18596. +Fifth arg STATE is an eight-list like what this function returns.
  18597. +It is used to initialize the state of the parse.  Its second and third
  18598. +elements are ignored.
  18599. +Sixth args COMMENTSTOP non-nil means stop at the start of a comment.
  18600. +
  18601. +(parse-partial-sexp FROM TO &optional TARGETDEPTH STOPBEFORE STATE COMMENTSTOP)Vparse-sexp-ignore-comments
  18602. +Non-nil means `forward-sexp', etc., should treat comments as whitespace.Vwords-include-escapes
  18603. +Non-nil means `forward-word', etc., should treat escape chars part of words.Fml-if
  18604. +Mocklisp version of `if'.Fml-nargs
  18605. +Number of arguments to currently executing mocklisp function.
  18606. +
  18607. +(ml-nargs)Fml-arg
  18608. +Argument number N to currently executing mocklisp function.
  18609. +
  18610. +(ml-arg N &optional PROMPT)Fml-interactive
  18611. +True if currently executing mocklisp function was called interactively.
  18612. +
  18613. +(ml-interactive)Fml-provide-prefix-argument
  18614. +Evaluate second argument, using first argument as prefix arg value.Fml-prefix-argument-loop
  18615. +Fml-substr
  18616. +Return a substring of STRING, starting at index FROM and of length LENGTH.
  18617. +If either FROM or LENGTH is negative, the length of STRING is added to it.
  18618. +
  18619. +(ml-substr STRING FROM TO)Finsert-string
  18620. +Mocklisp-compatibility insert function.
  18621. +Like the function `insert' except that any argument that is a number
  18622. +is converted into a string by expressing it in decimal.Fbyte-code
  18623. +Function used internally in byte-compiled code.
  18624. +The first argument is a string of byte code; the second, a vector of constants;
  18625. +the third, the maximum stack depth used in this function.
  18626. +If the third argument is incorrect, Emacs may crash.
  18627. +
  18628. +(byte-code BYTESTR VECTOR MAXDEPTH)Vbyte-code-meter
  18629. +A vector of vectors which holds a histogram of byte-code usage.
  18630. +(aref (aref byte-code-meter 0) CODE) indicates how many times the byte
  18631. +opcode CODE has been executed.
  18632. +(aref (aref byte-code-meter CODE1) CODE2), where CODE1 is not 0,
  18633. +indicates how many times the byte opcodes CODE1 and CODE2 have been
  18634. +executed in succession.Vbyte-metering-on
  18635. +If non-nil, keep profiling information on byte code usage.
  18636. +The variable byte-code-meter indicates how often each byte opcode is used.
  18637. +If a symbol has a property named `byte-code-meter' whose value is an
  18638. +integer, it is incremented each time that symbol's function is called.Fprocessp
  18639. +Return t if OBJECT is a process.
  18640. +
  18641. +(processp OBJ)Fget-process
  18642. +Return the process named NAME, or nil if there is none.
  18643. +
  18644. +(get-process NAME)Fget-buffer-process
  18645. +Return the (or, a) process associated with BUFFER.
  18646. +BUFFER may be a buffer or the name of one.
  18647. +
  18648. +(get-buffer-process NAME)Fdelete-process
  18649. +Delete PROCESS: kill it and forget about it immediately.
  18650. +PROCESS may be a process, a buffer, the name of a process or buffer, or
  18651. +nil, indicating the current buffer's process.
  18652. +
  18653. +(delete-process PROC)Fprocess-status
  18654. +Return the status of PROCESS: a symbol, one of these:
  18655. +run  -- for a process that is running.
  18656. +stop -- for a process stopped but continuable.
  18657. +exit -- for a process that has exited.
  18658. +signal -- for a process that has got a fatal signal.
  18659. +open -- for a network stream connection that is open.
  18660. +closed -- for a network stream connection that is closed.
  18661. +nil -- if arg is a process name and no such process exists.
  18662. +PROCESS may be a process, a buffer, the name of a process or buffer, or
  18663. +nil, indicating the current buffer's process.
  18664. +
  18665. +(process-status PROC)Fprocess-exit-status
  18666. +Return the exit status of PROCESS or the signal number that killed it.
  18667. +If PROCESS has not yet exited or died, return 0.
  18668. +
  18669. +(process-exit-status PROC)Fprocess-id
  18670. +Return the process id of PROCESS.
  18671. +This is the pid of the Unix process which PROCESS uses or talks to.
  18672. +For a network connection, this value is nil.
  18673. +
  18674. +(process-id PROC)Fprocess-name
  18675. +Return the name of PROCESS, as a string.
  18676. +This is the name of the program invoked in PROCESS,
  18677. +possibly modified to make it unique among process names.
  18678. +
  18679. +(process-name PROC)Fprocess-command
  18680. +Return the command that was executed to start PROCESS.
  18681. +This is a list of strings, the first string being the program executed
  18682. +and the rest of the strings being the arguments given to it.
  18683. +For a non-child channel, this is nil.
  18684. +
  18685. +(process-command PROC)Fset-process-buffer
  18686. +Set buffer associated with PROCESS to BUFFER (a buffer, or nil).
  18687. +
  18688. +(set-process-buffer PROC BUFFER)Fprocess-buffer
  18689. +Return the buffer PROCESS is associated with.
  18690. +Output from PROCESS is inserted in this buffer
  18691. +unless PROCESS has a filter.
  18692. +
  18693. +(process-buffer PROC)Fprocess-mark
  18694. +Return the marker for the end of the last output from PROCESS.
  18695. +
  18696. +(process-mark PROC)Fset-process-filter
  18697. +Give PROCESS the filter function FILTER; nil means no filter.
  18698. +t means stop accepting output from the process.
  18699. +When a process has a filter, each time it does output
  18700. +the entire string of output is passed to the filter.
  18701. +The filter gets two arguments: the process and the string of output.
  18702. +If the process has a filter, its buffer is not used for output.
  18703. +
  18704. +(set-process-filter PROC FILTER)Fprocess-filter
  18705. +Returns the filter function of PROCESS; nil if none.
  18706. +See `set-process-filter' for more info on filter functions.
  18707. +
  18708. +(process-filter PROC)Fset-process-sentinel
  18709. +Give PROCESS the sentinel SENTINEL; nil for none.
  18710. +The sentinel is called as a function when the process changes state.
  18711. +It gets two arguments: the process, and a string describing the change.
  18712. +
  18713. +(set-process-sentinel PROC SENTINEL)Fprocess-sentinel
  18714. +Return the sentinel of PROCESS; nil if none.
  18715. +See `set-process-sentinel' for more info on sentinels.
  18716. +
  18717. +(process-sentinel PROC)Fset-process-window-size
  18718. +Tell PROCESS that it has logical window size HEIGHT and WIDTH.
  18719. +
  18720. +(set-process-window-size PROC HEIGHT WIDTH)Fprocess-kill-without-query
  18721. +Say no query needed if PROCESS is running when Emacs is exited.
  18722. +Optional second argument if non-nil says to require a query.
  18723. +Value is t if a query was formerly required.
  18724. +
  18725. +(process-kill-without-query PROC &optional VALUE)Fprocess-connection
  18726. +Return the connection type of `PROCESS'.
  18727. +The value is `nil' for a pipe,
  18728. +`t' or `pty' for a pty, or `stream' for a socket connection.
  18729. +
  18730. +(process-connection PROCESS)Flist-processes
  18731. +Display a list of all processes.
  18732. +(Any processes listed as Exited or Signaled are actually eliminated
  18733. +after the listing is made.)
  18734. +
  18735. +(list-processes)Fprocess-list
  18736. +Return a list of all processes.
  18737. +
  18738. +(process-list)Fstart-process
  18739. +Start a program in a subprocess.  Return the process object for it.
  18740. +Args are NAME BUFFER PROGRAM &rest PROGRAM-ARGS
  18741. +NAME is name for process.  It is modified if necessary to make it unique.
  18742. +BUFFER is the buffer or (buffer-name) to associate with the process.
  18743. + Process output goes at end of that buffer, unless you specify
  18744. + an output stream or filter function to handle the output.
  18745. + BUFFER may be also nil, meaning that this process is not associated
  18746. + with any buffer
  18747. +Third arg is program file name.  It is searched for as in the shell.
  18748. +Remaining arguments are strings to give program as arguments.Fopen-network-stream
  18749. +Open a TCP connection for a service to a host.
  18750. +Returns a subprocess-object to represent the connection.
  18751. +Input and output work as for subprocesses; `delete-process' closes it.
  18752. +Args are NAME BUFFER HOST SERVICE.
  18753. +NAME is name for process.  It is modified if necessary to make it unique.
  18754. +BUFFER is the buffer (or buffer-name) to associate with the process.
  18755. + Process output goes at end of that buffer, unless you specify
  18756. + an output stream or filter function to handle the output.
  18757. + BUFFER may be also nil, meaning that this process is not associated
  18758. + with any buffer
  18759. +Third arg is name of the host to connect to, or its IP address.
  18760. +Fourth arg SERVICE is name of the service desired, or an integer
  18761. + specifying a port number to connect to.
  18762. +
  18763. +(open-network-stream NAME BUFFER HOST SERVICE)Faccept-process-output
  18764. +Allow any pending output from subprocesses to be read by Emacs.
  18765. +It is read into the process' buffers or given to their filter functions.
  18766. +Non-nil arg PROCESS means do not return until some output has been received
  18767. +from PROCESS.
  18768. +Non-nil second arg TIMEOUT and third arg TIMEOUT-MSECS are number of
  18769. +seconds and microseconds to wait; return after that much time whether
  18770. +or not there is input.
  18771. +Return non-nil iff we received any output before the timeout expired.
  18772. +
  18773. +(accept-process-output &optional PROC TIMEOUT TIMEOUT-MSECS)Fwaiting-for-user-input-p
  18774. +Returns non-nil if emacs is waiting for input from the user.
  18775. +This is intended for use by asynchronous process output filters and sentinels.
  18776. +
  18777. +(waiting-for-user-input-p)Fprocess-send-region
  18778. +Send current contents of region as input to PROCESS.
  18779. +PROCESS may be a process, a buffer, the name of a process or buffer, or
  18780. +nil, indicating the current buffer's process.
  18781. +Called from program, takes three arguments, PROCESS, START and END.
  18782. +If the region is more than 500 characters long,
  18783. +it is sent in several bunches.  This may happen even for shorter regions.
  18784. +Output from processes can arrive in between bunches.
  18785. +
  18786. +(process-send-region PROCESS START END)Fprocess-send-string
  18787. +Send PROCESS the contents of STRING as input.
  18788. +PROCESS may be a process, a buffer, the name of a process or buffer, or
  18789. +nil, indicating the current buffer's process.
  18790. +If STRING is more than 500 characters long,
  18791. +it is sent in several bunches.  This may happen even for shorter strings.
  18792. +Output from processes can arrive in between bunches.
  18793. +
  18794. +(process-send-string PROCESS STRING)Finterrupt-process
  18795. +Interrupt process PROCESS.  May be process or name of one.
  18796. +PROCESS may be a process, a buffer, or the name of a process or buffer.
  18797. +nil or no arg means current buffer's process.
  18798. +Second arg CURRENT-GROUP non-nil means send signal to
  18799. +the current process-group of the process's controlling terminal
  18800. +rather than to the process's own process group.
  18801. +If the process is a shell, this means interrupt current subjob
  18802. +rather than the shell.
  18803. +
  18804. +(interrupt-process &optional PROCESS CURRENT-GROUP)Fkill-process
  18805. +Kill process PROCESS.  May be process or name of one.
  18806. +See function `interrupt-process' for more details on usage.
  18807. +
  18808. +(kill-process &optional PROCESS CURRENT-GROUP)Fquit-process
  18809. +Send QUIT signal to process PROCESS.  May be process or name of one.
  18810. +See function `interrupt-process' for more details on usage.
  18811. +
  18812. +(quit-process &optional PROCESS CURRENT-GROUP)Fstop-process
  18813. +Stop process PROCESS.  May be process or name of one.
  18814. +See function `interrupt-process' for more details on usage.
  18815. +
  18816. +(stop-process &optional PROCESS CURRENT-GROUP)Fcontinue-process
  18817. +Continue process PROCESS.  May be process or name of one.
  18818. +See function `interrupt-process' for more details on usage.
  18819. +
  18820. +(continue-process &optional PROCESS CURRENT-GROUP)Fsignal-process
  18821. +Send the process with number PID the signal with code CODE.
  18822. +Both PID and CODE are integers.
  18823. +
  18824. +(signal-process PID SIG)Fprocess-send-eof
  18825. +Make PROCESS see end-of-file in its input.
  18826. +Eof comes after any text already sent to it.
  18827. +PROCESS may be a process, a buffer, the name of a process or buffer, or
  18828. +nil, indicating the current buffer's process.
  18829. +If PROCESS is a network connection, or is a process communicating
  18830. +through a pipe (as opposed to a pty), then you cannot send any more
  18831. +text to PROCESS after you call this function.
  18832. +
  18833. +(process-send-eof &optional PROCESS)Vdelete-exited-processes
  18834. +*Non-nil means delete processes immediately when they exit.
  18835. +nil means don't delete them until `list-processes' is run.Vprocess-connection-type
  18836. +Control type of device used to communicate with subprocesses.
  18837. +Values are nil to use a pipe, or t or `pty' to use a pty.
  18838. +The value has no effect if the system has no ptys or if all ptys are busy:
  18839. +then a pipe is used in any case.
  18840. +The value takes effect when `start-process' is called.Fcall-process
  18841. +Call PROGRAM synchronously in separate process.
  18842. +The program's input comes from file INFILE (nil means `/dev/null').
  18843. +Insert output in BUFFER before point; t means current buffer;
  18844. + nil for BUFFER means discard it; 0 means discard and don't wait.
  18845. +Fourth arg DISPLAY non-nil means redisplay buffer as output is inserted.
  18846. +Remaining arguments are strings passed as command arguments to PROGRAM.
  18847. +If BUFFER is 0, returns immediately with value nil.
  18848. +Otherwise waits for PROGRAM to terminate
  18849. +and returns a numeric exit status or a signal description string.
  18850. +If you quit, the process is killed with SIGINT, or SIGKILL if you quit again.Fcall-process-region
  18851. +Send text from START to END to a synchronous process running PROGRAM.
  18852. +Delete the text if fourth arg DELETE is non-nil.
  18853. +Insert output in BUFFER before point; t means current buffer;
  18854. + nil for BUFFER means discard it; 0 means discard and don't wait.
  18855. +Sixth arg DISPLAY non-nil means redisplay buffer as output is inserted.
  18856. +Remaining args are passed to PROGRAM at startup as command args.
  18857. +If BUFFER is nil, returns immediately with value nil.
  18858. +Otherwise waits for PROGRAM to terminate
  18859. +and returns a numeric exit status or a signal description string.
  18860. +If you quit, the process is killed with SIGINT, or SIGKILL if you quit again.Fgetenv
  18861. +Return the value of environment variable VAR, as a string.
  18862. +VAR should be a string.  Value is nil if VAR is undefined in the environment.
  18863. +This function consults the variable ``process-environment'' for its value.
  18864. +
  18865. +(getenv VAR)Vbinary-process-input
  18866. +*If non-nil then new subprocesses are assumed to take binary input.Vbinary-process-output
  18867. +*If non-nil then new subprocesses are assumed to produce binary output.Vshell-file-name
  18868. +*File name to load inferior shells from.
  18869. +Initialized from the SHELL environment variable.Vexec-path
  18870. +*List of directories to search programs to run in subprocesses.
  18871. +Each element is a string (directory name) or nil (try default directory).Vexec-directory
  18872. +Directory of architecture-dependent files that come with GNU Emacs,
  18873. +especially executable programs intended for Emacs to invoke.Vdata-directory
  18874. +Directory of architecture-independent files that come with GNU Emacs,
  18875. +intended for Emacs to use.Vdoc-directory
  18876. +Directory containing the DOC file that comes with GNU Emacs.
  18877. +This is usually the same as data-directory.Vconfigure-info-directory
  18878. +For internal use by the build procedure only.
  18879. +This is the name of the directory in which the build procedure installed
  18880. +Emacs's info files; the default value for Info-default-directory-list
  18881. +includes this.Vprocess-environment
  18882. +List of environment variables for subprocesses to inherit.
  18883. +Each element should be a string of the form ENVVARNAME=VALUE.
  18884. +The environment which Emacs inherits is placed in this variable
  18885. +when Emacs starts.Famiga-cut
  18886. +Copy string into Amiga clipboard.
  18887. +
  18888. +(amiga-cut ARG)Famiga-paste
  18889. +Returns text currently in the Amiga clipboard, or NIL if there is none.
  18890. +
  18891. +(amiga-paste)Vamiga-new-clip
  18892. +Set to t every time a new clip is put in the Amiga clipboardFamiga-put-icon
  18893. +Create an icon for FILE.
  18894. +If FORCE is non-nil create it unconditionally, otherwise only if one doesn't exist.
  18895. +Returns t if an icon was created, nil otherwise.
  18896. +
  18897. +(amiga-put-icon FILE FORCE)Vamiga-initialized
  18898. +Vamiga-malloc-bytes-used
  18899. +Number of malloc bytes used when emacs was dumpedVamiga-create-icons
  18900. +If non-nil, create icons when saving files.Vamiga-process-stack-size
  18901. +Size of stack for called processes. 0 means same size as emacs stack.Famiga-mouse-events
  18902. +Return number of pending mouse events from Intuition.
  18903. +
  18904. +(amiga-mouse-events)Famiga-proc-mouse-event
  18905. +Pulls a mouse event out of the mouse event buffer and dispatches
  18906. +the appropriate function to act upon this event.
  18907. +
  18908. +(amiga-proc-mouse-event)Famiga-get-mouse-event
  18909. +Get next mouse event out of mouse event buffer (com-letter (x y)).
  18910. +ARG non-nil means return nil immediately if no pending event;
  18911. +otherwise, wait for an event.
  18912. +
  18913. +(amiga-get-mouse-event ARG)Famiga-get-wb-event
  18914. +Get next Workbench event out of workbench event buffer (a file name).
  18915. +ARG non-nil means return nil immediately if no pending event;
  18916. +otherwise, wait for an event.
  18917. +
  18918. +(amiga-get-wb-event ARG)Famiga-set-foreground-color
  18919. +Use PEN as foreground color
  18920. +
  18921. +(amiga-set-foreground-color PEN)Famiga-set-background-color
  18922. +Use PEN as background color
  18923. +
  18924. +(amiga-set-background-color PEN)Famiga-set-inverse-fill-pen
  18925. +Use PEN's color for inverse fills (0-7 or 8 for reverse)
  18926. +
  18927. +(amiga-set-inverse-fill-pen PEN)Famiga-set-inverse-text-pen
  18928. +Use PEN's color for inverse fills (0-7 or 8 for reverse)
  18929. +
  18930. +(amiga-set-inverse-text-pen PEN)Famiga-set-font
  18931. +Set font used for window to FONT with given HEIGHT.
  18932. +The font used must be non-proportional.
  18933. +
  18934. +(amiga-set-font WFONT HEIGHT)Famiga-set-geometry
  18935. +Set Emacs window geometry and screen.
  18936. +First 4 parameters are the (X,Y) position of the top-left corner of the window
  18937. +and its WIDTH and HEIGHT. These must be big enough for an 11x4 characters window.
  18938. +If nil is given for any of these, that means to keep the same value as before.
  18939. +The optional argument SCREEN specifies which screen to use, nil stands for the
  18940. +same screen as the window is on, t stands for the default public screen (normally
  18941. +the Workbench), a string specifies a given public screen.
  18942. +If optional argument BACKDROP is t, a backdrop window is used.Famiga-get-window-geometry
  18943. +Get Emacs window geometry.
  18944. +a list returned is of the form:  (iconified x y width height backdrop)
  18945. +where x, y, width, height are integers, backdrop is t or nil and iconified
  18946. +is t if the window is iconified and nil otherwise
  18947. +
  18948. +(amiga-get-window-geometry)Famiga-get-screen-geometry
  18949. +Get geometry of the screen emacs window resides on.
  18950. +a list returned is of the form:  (name x y width height)
  18951. +where name is a string, x, y, width, height are integers.
  18952. +Only the public screen name is returned if the window is not currently open.
  18953. +In this last case, the name may be nil if the window will be opened on the
  18954. +default public screen.
  18955. +
  18956. +(amiga-get-screen-geometry)Famiga-iconify
  18957. +Toggle the emacs iconification state.
  18958. +
  18959. +(amiga-iconify)Famiga-set-icon-pos
  18960. +Set the X Y position of the icon for emacs when iconified.
  18961. +
  18962. +(amiga-set-icon-pos LISP-OBJECT X LISP-OBJECT Y)Famiga-activate-window
  18963. +Makes emacs window the currently active one.
  18964. +
  18965. +(amiga-activate-window)Famiga-window-to-front
  18966. +Pulls the emacs window to the front (including screen)
  18967. +
  18968. +(amiga-window-to-front)Famiga-window-to-back
  18969. +Pushes the emacs window to the back (including screen)
  18970. +
  18971. +(amiga-window-to-back)Famiga-popup-font-request
  18972. +Open an ASL Font Requester and return the value as cons of font name and font size.
  18973. +
  18974. +(amiga-popup-font-request)Vamiga-mouse-item
  18975. +Encoded representation of last mouse click, corresponding to
  18976. +numerical entries in amiga-mouse-map.Vamiga-mouse-pos
  18977. +Current x-y position of mouse by row, column as specified by font.Vamiga-remap-bsdel
  18978. +*If true, map DEL to Ctrl-D and Backspace to DEL. 
  18979. +This is the most convenient (and default) setting. If nil, don't remap.Vamiga-remap-numeric-keypad
  18980. +*If true, numeric keypad keys are prefixed with C-x C-^ K.
  18981. +This enables you to remap them, but causes problems with functions like
  18982. +isearch-forward-regexp on some keyboards. Default to true.Vamiga-mouse-initialized
  18983. +Set to true once lisp has been setup to process mouse commands.
  18984. +No mouse processing request (C-X C-^ M) will be queued while this is nil.Vamiga-wb-initialized
  18985. +Set to true once lisp has been setup to process workbench commands.
  18986. +No workbench processing request (C-X C-^ W) will be queued while this is nil.Famiga-arexx-wait
  18987. +Wait for an ARexx event (command or reply) before proceeding.
  18988. +
  18989. +(amiga-arexx-wait)Famiga-arexx-check-command
  18990. +Return t if command ID has finished, nil otherwise.
  18991. +
  18992. +(amiga-arexx-check-command ID)Famiga-arexx-get-next-msg
  18993. +Returns the oldest arexx msg sent to emacs rexx port.
  18994. +When you are through with this message call (amiga-arexx-reply).
  18995. +if the msg is not replied this function will continue to
  18996. +return that msg until it has been replied to.
  18997. +
  18998. +(amiga-arexx-get-next-msg)Famiga-arexx-get-msg-results
  18999. +Returns the results from MSGID. will be a list of the form:
  19000. +  (msgid resultcode secondary)
  19001. +
  19002. +If resultcode is 0 then secondary will be a string or nil.
  19003. +else resulcode will be greater than 0 and secondary will be
  19004. +an error-code (int).
  19005. +
  19006. +If MSGID has not yet completed nil is returned.
  19007. +if MSGID has been dealt with or is invalid and error will occur.
  19008. +
  19009. +(amiga-arexx-get-msg-results MSGID)Famiga-arexx-reply
  19010. +Replies to the first arexx message (the one got via amiga-arexx-get-event)
  19011. +with RC as return code.
  19012. +If RC=0, TEXT is the result, otherwise it is the error text. It can be nil.
  19013. +
  19014. +(amiga-arexx-reply RC TEXT)Famiga-arexx-send-command
  19015. +Sends a command to ARexx for execution.
  19016. +If the second arg is non-nil, the command is directly interpreted.
  19017. +Returns an integer that uniquely identifies this message.  This must
  19018. +then be used to get the results from the command.
  19019. +NOTE: this is very different from old way things worked.
  19020. +      earlier versions of emacs discarded successful results
  19021. +      and errors always got replied to becuase they caused failures
  19022. +      Neither of these are true now.This function is also no longer interactive.
  19023. +Use (amiga-arexx-do-command)
  19024. +
  19025. +
  19026. +(amiga-arexx-send-command STR &optional AS-FILE)Vamiga-arexx-initialized
  19027. +Set this to t when Emacs is ready to respond to ARexx messages.
  19028. +Fsun-window-init
  19029. +One time setup for using Sun Windows with mouse.
  19030. +Unless optional argument FORCE is non-nil, is a noop after its first call.
  19031. +Returns a number representing the file descriptor of the open Sun Window,
  19032. +or -1 if can not open it.
  19033. +
  19034. +(sun-window-init &optional FORCE)Fsit-for-millisecs
  19035. +Like sit-for, but ARG is milliseconds. 
  19036. +Perform redisplay, then wait for ARG milliseconds or until
  19037. +input is available.  Returns t if wait completed with no input.
  19038. +Redisplay does not happen if input is available before it starts.
  19039. +
  19040. +(sit-for-millisecs N)Fsleep-for-millisecs
  19041. +Pause, without updating display, for ARG milliseconds.
  19042. +
  19043. +(sleep-for-millisecs N)Fupdate-display
  19044. +Perform redisplay.
  19045. +
  19046. +(update-display)Fsun-change-cursor-icon
  19047. +Change the Sun mouse cursor icon.  ICON is a lisp vector whose 1st element
  19048. +is the X offset of the cursor hot-point, whose 2nd element is the Y offset
  19049. +of the cursor hot-point and whose 3rd element is the cursor pixel data
  19050. +expressed as a string.  If ICON is nil then the original arrow cursor is used
  19051. +
  19052. +(sun-change-cursor-icon ICON)Fsun-set-selection
  19053. +Set the current sunwindow selection to STRING.
  19054. +
  19055. +(sun-set-selection STR)Fsun-get-selection
  19056. +Return the current sunwindows selection as a string.
  19057. +
  19058. +(sun-get-selection)Fsun-menu-internal
  19059. +Set up a SunView pop-up menu and return the user's choice.
  19060. +Arguments WINDOW, X, Y, BUTTON, and MENU.
  19061. +*** User code should generally use sun-menu-evaluate ***
  19062. +
  19063. +Arguments WINDOW, X, Y, BUTTON, and MENU.
  19064. +Put MENU up in WINDOW at position X, Y.
  19065. +The BUTTON argument specifies the button to be released that selects an item:
  19066. +   1 = LEFT BUTTON
  19067. +   2 = MIDDLE BUTTON
  19068. +   4 = RIGHT BUTTON
  19069. +The MENU argument is a vector containing (STRING . VALUE) pairs.
  19070. +The VALUE of the selected item is returned.
  19071. +If the VALUE of the first pair is nil, then the first STRING will be used
  19072. +as a menu label.
  19073. +
  19074. +(sun-menu-internal WINDOW X-POSITION Y-POSITION BUTTON MENU)Vonly-global-abbrevs
  19075. +*t means user plans to use global abbrevs only.
  19076. +Makes the commands to define mode-specific abbrevs define global ones instead.Fabbrev-mode
  19077. +Toggle abbrev mode.
  19078. +With argument ARG, turn abbrev mode on iff ARG is positive.
  19079. +In abbrev mode, inserting an abbreviation causes it to expand
  19080. +and be replaced by its expansion.Vedit-abbrevs-map
  19081. +Keymap used in edit-abbrevs.Fkill-all-abbrevs
  19082. +Undefine all defined abbrevs.Finsert-abbrevs
  19083. +Insert after point a description of all defined abbrevs.
  19084. +Mark is set after the inserted text.Flist-abbrevs
  19085. +Display a list of all defined abbrevs.Fedit-abbrevs-mode
  19086. +Major mode for editing the list of abbrev definitions.
  19087. +\{edit-abbrevs-map}Fedit-abbrevs
  19088. +Alter abbrev definitions by editing a list of them.
  19089. +Selects a buffer containing a list of abbrev definitions.
  19090. +You can edit them and type \<edit-abbrevs-map>\[edit-abbrevs-redefine] to redefine abbrevs
  19091. +according to your editing.
  19092. +Buffer contains a header line for each abbrev table,
  19093. + which is the abbrev table name in parentheses.
  19094. +This is followed by one line per abbrev in that table:
  19095. +NAME   USECOUNT   EXPANSION   HOOK
  19096. +where NAME and EXPANSION are strings with quotes,
  19097. +USECOUNT is an integer, and HOOK is any valid function
  19098. +or may be omitted (it is usually omitted).Fedit-abbrevs-redefine
  19099. +Redefine abbrevs according to current buffer contents.Fdefine-abbrevs
  19100. +Define abbrevs according to current visible buffer contents.
  19101. +See documentation of `edit-abbrevs' for info on the format of the
  19102. +text you must have in the buffer.
  19103. +With argument, eliminate all abbrev definitions except
  19104. +the ones defined from the buffer now.Fread-abbrev-file
  19105. +Read abbrev definitions from file written with `write-abbrev-file'.
  19106. +Optional argument FILE is the name of the file to read;
  19107. +it defaults to the value of `abbrev-file-name'.
  19108. +Optional second argument QUIETLY non-nil means don't print anything.Fquietly-read-abbrev-file
  19109. +Read abbrev definitions from file written with write-abbrev-file.
  19110. +Optional argument FILE is the name of the file to read;
  19111. +it defaults to the value of `abbrev-file-name'.
  19112. +Does not print anything.Fwrite-abbrev-file
  19113. +Write all abbrev definitions to a file of Lisp code.
  19114. +The file written can be loaded in another session to define the same abbrevs.
  19115. +The argument FILE is the file name to write.Fadd-mode-abbrev
  19116. +Define mode-specific abbrev for last word(s) before point.
  19117. +Argument is how many words before point form the expansion;
  19118. +or zero means the region is the expansion.
  19119. +A negative argument means to undefine the specified abbrev.
  19120. +Reads the abbreviation in the minibuffer.
  19121. +
  19122. +Don't use this function in a Lisp program; use `define-abbrev' instead.Fadd-global-abbrev
  19123. +Define global (all modes) abbrev for last word(s) before point.
  19124. +The prefix argument specifies the number of words before point that form the
  19125. +expansion; or zero means the region is the expansion.
  19126. +A negative argument means to undefine the specified abbrev.
  19127. +This command uses the minibuffer to read the abbreviation.
  19128. +
  19129. +Don't use this function in a Lisp program; use `define-abbrev' instead.Finverse-add-mode-abbrev
  19130. +Define last word before point as a mode-specific abbrev.
  19131. +With prefix argument N, defines the Nth word before point.
  19132. +This command uses the minibuffer to read the expansion.
  19133. +Expands the abbreviation after defining it.Finverse-add-global-abbrev
  19134. +Define last word before point as a global (mode-independent) abbrev.
  19135. +With prefix argument N, defines the Nth word before point.
  19136. +This command uses the minibuffer to read the expansion.
  19137. +Expands the abbreviation after defining it.Fabbrev-prefix-mark
  19138. +Mark current point as the beginning of an abbrev.
  19139. +Abbrev to be expanded starts here rather than at beginning of word.
  19140. +This way, you can expand an abbrev with a prefix: insert the prefix,
  19141. +use this command, then insert the abbrev.Fexpand-region-abbrevs
  19142. +For abbrev occurrence in the region, offer to expand it.
  19143. +The user is asked to type y or n for each occurrence.
  19144. +A prefix argument means don't query; expand all abbrevs.
  19145. +If called from a Lisp program, arguments are START END &optional NOQUERY.VBuffer-menu-mode-map
  19146. +FBuffer-menu-mode
  19147. +Major mode for editing a list of buffers.
  19148. +Each line describes one of the buffers in Emacs.
  19149. +Letters do not insert themselves; instead, they are commands.
  19150. +\<Buffer-menu-mode-map>
  19151. +\[Buffer-menu-mouse-select] -- select buffer you click on, in place of the buffer menu.
  19152. +\[Buffer-menu-this-window] -- select current line's buffer in place of the buffer menu.
  19153. +\[Buffer-menu-other-window] -- select that buffer in another window,
  19154. +  so the buffer menu buffer remains visible in its window.
  19155. +\[Buffer-menu-switch-other-window] -- make another window display that buffer.
  19156. +\[Buffer-menu-mark] -- mark current line's buffer to be displayed.
  19157. +\[Buffer-menu-select] -- select current line's buffer.
  19158. +  Also show buffers marked with m, in other windows.
  19159. +\[Buffer-menu-1-window] -- select that buffer in full-frame window.
  19160. +\[Buffer-menu-2-window] -- select that buffer in one window,
  19161. +  together with buffer selected before this one in another window.
  19162. +\[Buffer-menu-visit-tags-table] -- visit-tags-table this buffer.
  19163. +\[Buffer-menu-not-modified] -- clear modified-flag on that buffer.
  19164. +\[Buffer-menu-save] -- mark that buffer to be saved, and move down.
  19165. +\[Buffer-menu-delete] -- mark that buffer to be deleted, and move down.
  19166. +\[Buffer-menu-delete-backwards] -- mark that buffer to be deleted, and move up.
  19167. +\[Buffer-menu-execute] -- delete or save marked buffers.
  19168. +\[Buffer-menu-unmark] -- remove all kinds of marks from current line.
  19169. +  With prefix argument, also move up one line.
  19170. +\[Buffer-menu-backup-unmark] -- back up a line and remove marks.
  19171. +\[Buffer-menu-toggle-read-only] -- toggle read-only status of buffer on this line.FBuffer-menu-buffer
  19172. +Return buffer described by this line of buffer menu.Fbuffer-menu
  19173. +Make a menu of buffers so you can save, delete or select them.
  19174. +With argument, show only buffers that are visiting files.
  19175. +Type ? after invocation to get help on commands available.
  19176. +Type q immediately to make the buffer menu go away and to restore
  19177. +previous window configuration.FBuffer-menu-quit
  19178. +Quit the buffer menu.FBuffer-menu-mark
  19179. +Mark buffer on this line for being displayed by \<Buffer-menu-mode-map>\[Buffer-menu-select] command.FBuffer-menu-unmark
  19180. +Cancel all requested operations on buffer on this line and move down.
  19181. +Optional ARG means move up.FBuffer-menu-backup-unmark
  19182. +Move up and cancel all requested operations on buffer on line above.FBuffer-menu-delete
  19183. +Mark buffer on this line to be deleted by \<Buffer-menu-mode-map>\[Buffer-menu-execute] command.FBuffer-menu-delete-backwards
  19184. +Mark buffer on this line to be deleted by \<Buffer-menu-mode-map>\[Buffer-menu-execute] command
  19185. +and then move up one lineFBuffer-menu-save
  19186. +Mark buffer on this line to be saved by \<Buffer-menu-mode-map>\[Buffer-menu-execute] command.FBuffer-menu-not-modified
  19187. +Mark buffer on this line as unmodified (no changes to save).FBuffer-menu-execute
  19188. +Save and/or delete buffers marked with \<Buffer-menu-mode-map>\[Buffer-menu-save] or \<Buffer-menu-mode-map>\[Buffer-menu-delete] commands.FBuffer-menu-select
  19189. +Select this line's buffer; also display buffers marked with `>'.
  19190. +You can mark buffers with the \<Buffer-menu-mode-map>\[Buffer-menu-mark] command.FBuffer-menu-visit-tags-table
  19191. +Visit the tags table in the buffer on this line.  See `visit-tags-table'.FBuffer-menu-1-window
  19192. +Select this line's buffer, alone, in full frame.FBuffer-menu-mouse-select
  19193. +Select the buffer whose line you click on.FBuffer-menu-this-window
  19194. +Select this line's buffer in this window.FBuffer-menu-other-window
  19195. +Select this line's buffer in other window, leaving buffer menu visible.FBuffer-menu-switch-other-window
  19196. +Make the other window select this line's buffer.
  19197. +The current window remains selected.FBuffer-menu-2-window
  19198. +Select this line's buffer, with previous buffer in second window.FBuffer-menu-toggle-read-only
  19199. +Toggle read-only status of buffer on this line, perhaps via version control.Fdefsubst
  19200. +Define an inline function.  The syntax is just like that of `defun'.Fmake-obsolete
  19201. +Make the byte-compiler warn that FUNCTION is obsolete.
  19202. +The warning will say that NEW should be used instead.
  19203. +If NEW is a string, that is the `use instead' message.Fmake-obsolete-variable
  19204. +Make the byte-compiler warn that VARIABLE is obsolete,
  19205. +and NEW should be used instead.  If NEW is a string, then that is the
  19206. +`use instead' message.Fdont-compile
  19207. +Like `progn', but the body always runs interpreted (not compiled).
  19208. +If you think you need this, you're probably making a mistake somewhere.Feval-when-compile
  19209. +Like `progn', but evaluates the body at compile time.
  19210. +The result of the body appears to the compiler as a quoted constant.Feval-and-compile
  19211. +Like `progn', but evaluates the body at compile time and at load time.Vc-mode-abbrev-table
  19212. +Abbrev table in use in C mode.Vc-mode-map
  19213. +Keymap used in C mode.Fc-macro-expand
  19214. +Display the result of expanding all C macros occurring in the region.
  19215. +The expansion is entirely correct because it uses the C preprocessor.Vc-mode-syntax-table
  19216. +Syntax table in use in C-mode buffers.Vc-indent-level
  19217. +*Indentation of C statements with respect to containing block.Vc-brace-imaginary-offset
  19218. +*Imagined indentation of a C open brace that actually follows a statement.Vc-brace-offset
  19219. +*Extra indentation for braces, compared with other text in same context.Vc-argdecl-indent
  19220. +*Indentation level of declarations of C function arguments.Vc-label-offset
  19221. +*Offset of C label lines and case statements relative to usual indentation.Vc-continued-statement-offset
  19222. +*Extra indent for lines not starting new statements.Vc-continued-brace-offset
  19223. +*Extra indent for substatements that start with open-braces.
  19224. +This is in addition to c-continued-statement-offset.Vc-auto-newline
  19225. +*Non-nil means automatically newline before and after braces,
  19226. +and after colons and semicolons, inserted in C code.
  19227. +If you do not want a leading newline before braces then use:
  19228. +  (define-key c-mode-map "{" 'electric-c-semi)Vc-tab-always-indent
  19229. +*Non-nil means TAB in C mode should always reindent the current line,
  19230. +regardless of where in the line point is when the TAB command is used.Fc-mode
  19231. +Major mode for editing C code.
  19232. +Expression and list commands understand all C brackets.
  19233. +Tab indents for C code.
  19234. +Comments are delimited with /* ... */.
  19235. +Paragraphs are separated by blank lines only.
  19236. +Delete converts tabs to spaces as it moves back.
  19237. +\{c-mode-map}
  19238. +Variables controlling indentation style:
  19239. + c-tab-always-indent
  19240. +    Non-nil means TAB in C mode should always reindent the current line,
  19241. +    regardless of where in the line point is when the TAB command is used.
  19242. + c-auto-newline
  19243. +    Non-nil means automatically newline before and after braces,
  19244. +    and after colons and semicolons, inserted in C code.
  19245. + c-indent-level
  19246. +    Indentation of C statements within surrounding block.
  19247. +    The surrounding block's indentation is the indentation
  19248. +    of the line on which the open-brace appears.
  19249. + c-continued-statement-offset
  19250. +    Extra indentation given to a substatement, such as the
  19251. +    then-clause of an if or body of a while.
  19252. + c-continued-brace-offset
  19253. +    Extra indentation given to a brace that starts a substatement.
  19254. +    This is in addition to c-continued-statement-offset.
  19255. + c-brace-offset
  19256. +    Extra indentation for line if it starts with an open brace.
  19257. + c-brace-imaginary-offset
  19258. +    An open brace following other text is treated as if it were
  19259. +    this far to the right of the start of its line.
  19260. + c-argdecl-indent
  19261. +    Indentation level of declarations of C function arguments.
  19262. + c-label-offset
  19263. +    Extra indentation for line that is a label, or case or default.
  19264. +
  19265. +Settings for K&R and BSD indentation styles are
  19266. +  c-indent-level                5    8
  19267. +  c-continued-statement-offset  5    8
  19268. +  c-brace-offset               -5   -8
  19269. +  c-argdecl-indent              0    8
  19270. +  c-label-offset               -5   -8
  19271. +
  19272. +Turning on C mode calls the value of the variable c-mode-hook with no args,
  19273. +if that value is non-nil.Fc-fill-paragraph
  19274. +Like \[fill-paragraph] but handle C comments.
  19275. +If any of the current line is a comment or within a comment,
  19276. +fill the comment or the paragraph of it that point is in,
  19277. +preserving the comment indentation or line-starting decorations.Felectric-c-brace
  19278. +Insert character and correct line's indentation.Felectric-c-sharp-sign
  19279. +Insert character and correct line's indentation.Felectric-c-semi
  19280. +Insert character and correct line's indentation.Felectric-c-terminator
  19281. +Insert character and correct line's indentation.Fc-indent-command
  19282. +Indent current line as C code, or in some cases insert a tab character.
  19283. +If `c-tab-always-indent' is non-nil (the default), always indent current line.
  19284. +Otherwise, indent the current line only if point is at the left margin or
  19285. +in the line's indentation; otherwise insert a tab.
  19286. +
  19287. +A numeric argument, regardless of its value, means indent rigidly all the
  19288. +lines of the expression starting after point so that this line becomes
  19289. +properly indented.  The relative indentation among the lines of the
  19290. +expression are preserved.Fc-indent-line
  19291. +Indent current line as C code.
  19292. +Return the amount the indentation changed by.Fcalculate-c-indent
  19293. +Return appropriate indentation for current line as C code.
  19294. +In usual case returns an integer: the column to indent to.
  19295. +Returns nil if line starts inside a string, t if in a comment.Fcalculate-c-indent-within-comment
  19296. +Return the indentation amount for line inside a block comment.
  19297. +Optional arg AFTER-STAR means, if lines in the comment have a leading star,
  19298. +return the indentation of the text that would follow this star.Fc-backward-to-start-of-if
  19299. +Move to the start of the last "unbalanced" `if'.Fc-backward-to-start-of-do
  19300. +If point follows a `do' statement, move to beginning of it and return t.
  19301. +Otherwise return nil and don't move point.Fc-beginning-of-statement
  19302. +Go to the beginning of the innermost C statement.
  19303. +With prefix arg, go back N - 1 statements.  If already at the beginning of a
  19304. +statement then go to the beginning of the preceding one.
  19305. +If within a string or comment, or next to a comment (only whitespace between),
  19306. +move by sentences instead of statements.Fc-end-of-statement
  19307. +Go to the end of the innermost C statement.
  19308. +With prefix arg, go forward N - 1 statements.
  19309. +Move forward to end of the next statement if already at end.
  19310. +If within a string or comment, move by sentences instead of statements.Fmark-c-function
  19311. +Put mark at end of C function, point at beginning.Findent-c-exp
  19312. +Indent each line of the C grouping following point.Fset-c-style
  19313. +Set C-mode variables to use one of several different indentation styles.
  19314. +The arguments are a string representing the desired style
  19315. +and a flag which, if non-nil, means to set the style globally.
  19316. +(Interactively, the flag comes from the prefix argument.)
  19317. +Available styles are GNU, K&R, BSD and Whitesmith.Vc-backslash-column
  19318. +*Minimum column for end-of-line backslashes of macro definitions.Fc-backslash-region
  19319. +Insert, align, or delete end-of-line backslashes on the lines in the region.
  19320. +With no argument, inserts backslashes and aligns existing backslashes.
  19321. +With an argument, deletes the backslashes.
  19322. +
  19323. +This function does not modify the last line of the region if the region ends 
  19324. +right at the start of the following line; it does not modify blank lines
  19325. +at the start of the region.  So you can put the region around an entire macro
  19326. +definition and conveniently use this command.Fc-up-conditional
  19327. +Move back to the containing preprocessor conditional, leaving mark behind.
  19328. +A prefix argument acts as a repeat count.  With a negative argument,
  19329. +move forward to the end of the containing preprocessor conditional.
  19330. +When going backwards, `#elif' is treated like `#else' followed by `#if'.
  19331. +When going forwards, `#elif' is ignored.Fc-backward-conditional
  19332. +Move back across a preprocessor conditional, leaving mark behind.
  19333. +A prefix argument acts as a repeat count.  With a negative argument,
  19334. +move forward across a preprocessor conditional.Fc-forward-conditional
  19335. +Move forward across a preprocessor conditional, leaving mark behind.
  19336. +A prefix argument acts as a repeat count.  With a negative argument,
  19337. +move backward across a preprocessor conditional.Vdelete-auto-save-files
  19338. +*Non-nil means delete auto-save file when a buffer is saved or killed.Vdirectory-abbrev-alist
  19339. +*Alist of abbreviations for file directories.
  19340. +A list of elements of the form (FROM . TO), each meaning to replace
  19341. +FROM with TO when it appears in a directory name.  This replacement is
  19342. +done when setting up the default directory of a newly visited file.
  19343. +*Every* FROM string should start with `^'.
  19344. +
  19345. +Do not use `~' in the TO strings.
  19346. +They should be ordinary absolute directory names.
  19347. +
  19348. +Use this feature when you have directories which you normally refer to
  19349. +via absolute symbolic links.  Make TO the name of the link, and FROM
  19350. +the name it is linked to.Vmake-backup-files
  19351. +*Non-nil means make a backup of a file the first time it is saved.
  19352. +This can be done by renaming the file or by copying.
  19353. +
  19354. +Renaming means that Emacs renames the existing file so that it is a
  19355. +backup file, then writes the buffer into a new file.  Any other names
  19356. +that the old file had will now refer to the backup file.  The new file
  19357. +is owned by you and its group is defaulted.
  19358. +
  19359. +Copying means that Emacs copies the existing file into the backup
  19360. +file, then writes the buffer on top of the existing file.  Any other
  19361. +names that the old file had will now refer to the new (edited) file.
  19362. +The file's owner and group are unchanged.
  19363. +
  19364. +The choice of renaming or copying is controlled by the variables
  19365. +`backup-by-copying', `backup-by-copying-when-linked' and
  19366. +`backup-by-copying-when-mismatch'.  See also `backup-inhibited'.Vbackup-inhibited
  19367. +Non-nil means don't make a backup, regardless of the other parameters.
  19368. +This variable is intended for use by making it local to a buffer.
  19369. +But it is local only if you make it local.Vbackup-by-copying
  19370. +*Non-nil means always use copying to create backup files.
  19371. +See documentation of variable `make-backup-files'.Vbackup-by-copying-when-linked
  19372. +*Non-nil means use copying to create backups for files with multiple names.
  19373. +This causes the alternate names to refer to the latest version as edited.
  19374. +This variable is relevant only if `backup-by-copying' is nil.Vbackup-by-copying-when-mismatch
  19375. +*Non-nil means create backups by copying if this preserves owner or group.
  19376. +Renaming may still be used (subject to control of other variables)
  19377. +when it would not result in changing the owner or group of the file;
  19378. +that is, for files which are owned by you and whose group matches
  19379. +the default for a new file created there by you.
  19380. +This variable is relevant only if `backup-by-copying' is nil.Vbackup-enable-predicate
  19381. +Predicate that looks at a file name and decides whether to make backups.
  19382. +Called with an absolute file name as argument, it returns t to enable backup.Vbuffer-offer-save
  19383. +*Non-nil in a buffer means offer to save the buffer on exit
  19384. +even if the buffer is not visiting a file.
  19385. +Automatically local in all buffers.Vfind-file-existing-other-name
  19386. +*Non-nil means find a file under alternative names, in existing buffers.
  19387. +This means if any existing buffer is visiting the file you want
  19388. +under another name, you get the existing buffer instead of a new buffer.Vfind-file-visit-truename
  19389. +*Non-nil means visit a file under its truename.
  19390. +The truename of a file is found by chasing all links
  19391. +both at the file level and at the levels of the containing directories.Vbuffer-file-truename
  19392. +The abbreviated truename of the file visited in the current buffer.
  19393. +That is, (abbreviated-file-name (file-truename buffer-file-name)).
  19394. +This variable is automatically local in all buffers, when non-nil.Vbuffer-file-number
  19395. +The device number and file number of the file visited in the current buffer.
  19396. +The value is a list of the form (FILENUM DEVNUM).
  19397. +This pair of numbers uniquely identifies the file.
  19398. +If the buffer is visiting a new file, the value is nil.Vfile-precious-flag
  19399. +*Non-nil means protect against I/O errors while saving files.
  19400. +Some modes set this non-nil in particular buffers.Vversion-control
  19401. +*Control use of version numbers for backup files.
  19402. +t means make numeric backup versions unconditionally.
  19403. +nil means make them for files that have some already.
  19404. +`never' means do not make them.Vdired-kept-versions
  19405. +*When cleaning directory, number of versions to keep.Vdelete-old-versions
  19406. +*If t, delete excess backup versions silently.
  19407. +If nil, ask confirmation.  Any other value prevents any trimming.Vkept-old-versions
  19408. +*Number of oldest versions to keep when a new numbered backup is made.Vkept-new-versions
  19409. +*Number of newest versions to keep when a new numbered backup is made.
  19410. +Includes the new backup.  Must be > 0Vrequire-final-newline
  19411. +*Value of t says silently ensure a file ends in a newline when it is saved.
  19412. +Non-nil but not t says ask user whether to add a newline when there isn't one.
  19413. +nil means don't add newlines.Vauto-save-default
  19414. +*Non-nil says by default do auto-saving of every file-visiting buffer.Vauto-save-visited-file-name
  19415. +*Non-nil says auto-save a buffer in the file it is visiting, when practical.
  19416. +Normally auto-save files are written under other names.Vsave-abbrevs
  19417. +*Non-nil means save word abbrevs too when files are saved.
  19418. +Loading an abbrev file sets this to t.Vfind-file-run-dired
  19419. +*Non-nil says run dired if `find-file' is given the name of a directory.Vfind-file-not-found-hooks
  19420. +List of functions to be called for `find-file' on nonexistent file.
  19421. +These functions are called as soon as the error is detected.
  19422. +`buffer-file-name' is already set up.
  19423. +The functions are called in the order given until one of them returns non-nil.Vfind-file-hooks
  19424. +List of functions to be called after a buffer is loaded from a file.
  19425. +The buffer's local variables (if any) will have been processed before the
  19426. +functions are called.Vwrite-file-hooks
  19427. +List of functions to be called before writing out a buffer to a file.
  19428. +If one of them returns non-nil, the file is considered already written
  19429. +and the rest are not called.
  19430. +These hooks are considered to pertain to the visited file.
  19431. +So this list is cleared if you change the visited file name.
  19432. +See also `write-contents-hooks'.
  19433. +Don't make this variable buffer-local; instead, use `local-write-file-hooks'.Vlocal-write-file-hooks
  19434. +Just like `write-file-hooks', except intended for per-buffer use.
  19435. +The functions in this list are called before the ones in
  19436. +`write-file-hooks'.Vwrite-contents-hooks
  19437. +List of functions to be called before writing out a buffer to a file.
  19438. +If one of them returns non-nil, the file is considered already written
  19439. +and the rest are not called.
  19440. +These hooks are considered to pertain to the buffer's contents,
  19441. +not to the particular visited file; thus, `set-visited-file-name' does
  19442. +not clear this variable, but changing the major mode does clear it.
  19443. +See also `write-file-hooks'.Venable-local-variables
  19444. +*Control use of local-variables lists in files you visit.
  19445. +The value can be t, nil or something else.
  19446. +A value of t means local-variables lists are obeyed;
  19447. +nil means they are ignored; anything else means query.
  19448. +
  19449. +The command \[normal-mode] always obeys local-variables lists
  19450. +and ignores this variable.Venable-local-eval
  19451. +*Control processing of the "variable" `eval' in a file's local variables.
  19452. +The value can be t, nil or something else.
  19453. +A value of t means obey `eval' variables;
  19454. +nil means ignore them; anything else means query.
  19455. +
  19456. +The command \[normal-mode] always obeys local-variables lists
  19457. +and ignores this variable.Vbackup-char
  19458. +Character to add to file names to make backup names.Vautosave-char
  19459. +Character to add to file names to make autosave names.Vbufferfile-char
  19460. +Character to add to buffer names to make file names.Fpwd
  19461. +Show the current default directory.Vcd-path
  19462. +Value of the CDPATH environment variable, as a list.
  19463. +Not actually set up until the first time you you use it.Fparse-colon-path
  19464. +Explode a colon-separated list of paths into a string list.Fcd-absolute
  19465. +Change current directory to given absolute file name DIR.Fcd
  19466. +Make DIR become the current buffer's default directory.
  19467. +If your environment includes a `CDPATH' variable, try each one of that
  19468. +colon-separated list of directories when resolving a relative directory name.Fload-file
  19469. +Load the Lisp file named FILE.Fload-library
  19470. +Load the library named LIBRARY.
  19471. +This is an interface to the function `load'.Ffile-local-copy
  19472. +Copy the file FILE into a temporary file on this machine.
  19473. +Returns the name of the local copy, or nil, if FILE is directly
  19474. +accessible.Ffile-truename
  19475. +Return the truename of FILENAME, which should be absolute.
  19476. +The truename of a file name is found by chasing symbolic links
  19477. +both at the level of the file and at the level of the directories
  19478. +containing it, until no links are left at any level.
  19479. +
  19480. +The arguments COUNTER and PREV-DIRS are used only in recursive calls.
  19481. +Do not specify them in other calls.Ffile-chase-links
  19482. +Chase links in FILENAME until a name that is not a link.
  19483. +Does not examine containing directories for links,
  19484. +unlike `file-truename'.Fswitch-to-buffer-other-window
  19485. +Select buffer BUFFER in another window.Fswitch-to-buffer-other-frame
  19486. +Switch to buffer BUFFER in another frame.Ffind-file
  19487. +Edit file FILENAME.
  19488. +Switch to a buffer visiting file FILENAME,
  19489. +creating one if none already exists.Ffind-file-other-window
  19490. +Edit file FILENAME, in another window.
  19491. +May create a new window, or reuse an existing one.
  19492. +See the function `display-buffer'.Ffind-file-other-frame
  19493. +Edit file FILENAME, in another frame.
  19494. +May create a new frame, or reuse an existing one.
  19495. +See the function `display-buffer'.Ffind-file-read-only
  19496. +Edit file FILENAME but don't allow changes.
  19497. +Like \[find-file] but marks buffer as read-only.
  19498. +Use \[toggle-read-only] to permit editing.Ffind-file-read-only-other-window
  19499. +Edit file FILENAME in another window but don't allow changes.
  19500. +Like \[find-file-other-window] but marks buffer as read-only.
  19501. +Use \[toggle-read-only] to permit editing.Ffind-file-read-only-other-frame
  19502. +Edit file FILENAME in another frame but don't allow changes.
  19503. +Like \[find-file-other-frame] but marks buffer as read-only.
  19504. +Use \[toggle-read-only] to permit editing.Ffind-alternate-file
  19505. +Find file FILENAME, select its buffer, kill previous buffer.
  19506. +If the current buffer now contains an empty file that you just visited
  19507. +(presumably by mistake), use this command to visit the file you really want.Fcreate-file-buffer
  19508. +Create a suitably named buffer for visiting FILENAME, and return it.
  19509. +FILENAME (sans directory) is used unchanged if that name is free;
  19510. +otherwise a string <2> or <3> or ... is appended to get an unused name.Fgenerate-new-buffer
  19511. +Create and return a buffer with a name based on NAME.
  19512. +Choose the buffer's name using `generate-new-buffer-name'.Vautomount-dir-prefix
  19513. +Regexp to match the automounter prefix in a directory name.Vabbreviated-home-dir
  19514. +The user's homedir abbreviated according to `directory-abbrev-list'.Fabbreviate-file-name
  19515. +Return a version of FILENAME shortened using `directory-abbrev-alist'.
  19516. +This also substitutes "~" for the user's home directory.
  19517. +Type \[describe-variable] directory-abbrev-alist RET for more information.Vfind-file-not-true-dirname-list
  19518. +*List of logical names for which visiting shouldn't save the true dirname.
  19519. +On VMS, when you visit a file using a logical name that searches a path,
  19520. +you may or may not want the visited file name to record the specific
  19521. +directory where the file was found.  If you *do not* want that, add the logical
  19522. +name to this list as a string.Ffind-buffer-visiting
  19523. +Return the buffer visiting file FILENAME (a string).
  19524. +This is like `get-file-buffer', except that it checks for any buffer
  19525. +visiting the same file, possibly under a different name.
  19526. +If there is no such live buffer, return nil.Ffind-file-noselect
  19527. +Read file FILENAME into a buffer and return the buffer.
  19528. +If a buffer exists visiting FILENAME, return that one, but
  19529. +verify that the file has not changed since visited or saved.
  19530. +The buffer is not selected, just returned to the caller.Fafter-find-file
  19531. +Called after finding a file and by the default revert function.
  19532. +Sets buffer mode, parses local variables.
  19533. +Optional args ERROR, WARN, and NOAUTO: ERROR non-nil means there was an
  19534. +error in reading the file.  WARN non-nil means warn if there
  19535. +exists an auto-save file more recent than the visited file.
  19536. +NOAUTO means don't mess with auto-save mode.
  19537. +Fourth arg AFTER-FIND-FILE-FROM-REVERT-BUFFER non-nil
  19538. + means this call was from `revert-buffer'.
  19539. +Finishes by calling the functions in `find-file-hooks'.Fnormal-mode
  19540. +Choose the major mode for this buffer automatically.
  19541. +Also sets up any specified local variables of the file.
  19542. +Uses the visited file name, the -*- line, and the local variables spec.
  19543. +
  19544. +This function is called automatically from `find-file'.  In that case,
  19545. +we may set up specified local variables depending on the value of
  19546. +`enable-local-variables': if it is t, we do; if it is nil, we don't;
  19547. +otherwise, we query.  `enable-local-variables' is ignored if you
  19548. +run `normal-mode' explicitly.Vauto-mode-alist
  19549. +Alist of filename patterns vs corresponding major mode functions.
  19550. +Each element looks like (REGEXP . FUNCTION) or (REGEXP FUNCTION).
  19551. +Visiting a file whose name matches REGEXP causes FUNCTION to be called.
  19552. +If the element has the form (REGEXP FUNCTION), then after calling
  19553. +FUNCTION, we delete the suffix that matched REGEXP and search the list
  19554. +again for another match.Vinterpreter-mode-alist
  19555. +Alist mapping interpreter names to major modes.
  19556. +This alist applies to files whose first line starts with `#!'.
  19557. +Each element looks like (INTERPRETER . MODE).
  19558. +The car of each element is compared with
  19559. +the name of the interpreter specified in the first line.
  19560. +If it matches, mode MODE is selected.Vinhibit-first-line-modes-regexps
  19561. +List of regexps; if one matches a file name, don't look for `-*-'.Vuser-init-file
  19562. +File name including directory of user's initialization file.Fset-auto-mode
  19563. +Select major mode appropriate for current buffer.
  19564. +This checks for a -*- mode tag in the buffer's text,
  19565. +compares the filename against the entries in `auto-mode-alist',
  19566. +or checks the interpreter that runs this file against
  19567. +`interpreter-mode-alist'.
  19568. +
  19569. +It does not check for the `mode:' local variable in the
  19570. +Local Variables section of the file; for that, use `hack-local-variables'.
  19571. +
  19572. +If `enable-local-variables' is nil, this function does not check for a
  19573. +-*- mode tag.Fhack-local-variables
  19574. +Parse and put into effect this buffer's local variables spec.Vignored-local-variables
  19575. +Variables to be ignored in a file's local variable spec.Fset-visited-file-name
  19576. +Change name of file visited in current buffer to FILENAME.
  19577. +The next time the buffer is saved it will go in the newly specified file.
  19578. +nil or empty string as argument means make buffer not be visiting any file.
  19579. +Remember to delete the initial contents of the minibuffer
  19580. +if you wish to pass an empty string as the argument.Fwrite-file
  19581. +Write current buffer into file FILENAME.
  19582. +Makes buffer visit that file, and marks it not modified.
  19583. +If the buffer is already visiting a file, you can specify
  19584. +a directory name as FILENAME, to write a file of the same
  19585. +old name in that directory.Fbackup-buffer
  19586. +Make a backup of the disk file visited by the current buffer, if appropriate.
  19587. +This is normally done before saving the buffer the first time.
  19588. +If the value is non-nil, it is the result of `file-modes' on the original
  19589. +file; this means that the caller, after saving the buffer, should change
  19590. +the modes of the new file to agree with the old modes.Ffile-name-sans-versions
  19591. +Return FILENAME sans backup versions or strings.
  19592. +This is a separate procedure so your site-init or startup file can
  19593. +redefine it.
  19594. +If the optional argument KEEP-BACKUP-VERSION is non-nil,
  19595. +we do not remove backup version numbers, only true file version numbers.Fmake-backup-file-name
  19596. +Create the non-numeric backup file name for FILE.
  19597. +This is a separate function so you can redefine it for customization.Fbackup-file-name-p
  19598. +Return non-nil if FILE is a backup file name (numeric or not).
  19599. +This is a separate function so you can redefine it for customization.
  19600. +You may need to redefine `file-name-sans-versions' as well.Fbackup-extract-version
  19601. +Given the name of a numeric backup file, return the backup number.
  19602. +Uses the free variable `bv-length', whose value should be
  19603. +the index in the name where the version number begins.Ffind-backup-file-name
  19604. +Find a file name for a backup file, and suggestions for deletions.
  19605. +Value is a list whose car is the name for the backup file
  19606. + and whose cdr is a list of old versions to consider deleting now.Ffile-nlinks
  19607. +Return number of names file FILENAME has.Ffile-relative-name
  19608. +Convert FILENAME to be relative to DIRECTORY (default: default-directory).Fsave-buffer
  19609. +Save current buffer in visited file if modified.  Versions described below.
  19610. +By default, makes the previous version into a backup file
  19611. + if previously requested or if this is the first save.
  19612. +With 1 or 3 \[universal-argument]'s, marks this version
  19613. + to become a backup when the next save is done.
  19614. +With 2 or 3 \[universal-argument]'s,
  19615. + unconditionally makes the previous version into a backup file.
  19616. +With argument of 0, never makes the previous version into a backup file.
  19617. +
  19618. +If a file's name is FOO, the names of its numbered backup versions are
  19619. + FOO.~i~ for various integers i.  A non-numbered backup file is called FOO~.
  19620. +Numeric backups (rather than FOO~) will be made if value of
  19621. + `version-control' is not the atom `never' and either there are already
  19622. + numeric versions of the file being backed up, or `version-control' is
  19623. + non-nil.
  19624. +We don't want excessive versions piling up, so there are variables
  19625. + `kept-old-versions', which tells Emacs how many oldest versions to keep,
  19626. + and `kept-new-versions', which tells how many newest versions to keep.
  19627. + Defaults are 2 old versions and 2 new.
  19628. +`dired-kept-versions' controls dired's clean-directory (.) command.
  19629. +If `delete-old-versions' is nil, system will query user
  19630. + before trimming versions.  Otherwise it does it silently.Fdelete-auto-save-file-if-necessary
  19631. +Delete auto-save file for current buffer if `delete-auto-save-files' is t.
  19632. +Normally delete only if the file was written by this Emacs since
  19633. +the last real save, but optional arg FORCE non-nil means delete anyway.Fbasic-save-buffer
  19634. +Save the current buffer in its visited file, if it has been modified.Fsave-some-buffers
  19635. +Save some modified file-visiting buffers.  Asks user about each one.
  19636. +Optional argument (the prefix) non-nil means save all with no questions.
  19637. +Optional second argument EXITING means ask about certain non-file buffers
  19638. + as well as about file buffers.Fnot-modified
  19639. +Mark current buffer as unmodified, not needing to be saved.
  19640. +With prefix arg, mark buffer as modified, so \[save-buffer] will save.Ftoggle-read-only
  19641. +Change whether this buffer is visiting its file read-only.
  19642. +With arg, set read-only iff arg is positive.Finsert-file
  19643. +Insert contents of file FILENAME into buffer after point.
  19644. +Set mark after the inserted text.
  19645. +
  19646. +This function is meant for the user to run interactively.
  19647. +Don't call it from programs!  Use `insert-file-contents' instead.
  19648. +(Its calling sequence is different; see its documentation).Fappend-to-file
  19649. +Append the contents of the region to the end of file FILENAME.
  19650. +When called from a function, expects three arguments,
  19651. +START, END and FILENAME.  START and END are buffer positions
  19652. +saying what text to write.Ffile-newest-backup
  19653. +Return most recent backup file for FILENAME or nil if no backups exist.Frename-uniquely
  19654. +Rename current buffer to a similar name not already taken.
  19655. +This function is useful for creating multiple shell process buffers
  19656. +or multiple mail buffers, etc.Fmake-directory
  19657. +Create the directory DIR and any nonexistent parent dirs.
  19658. +Interactively, the default choice of directory to create
  19659. +is the current default directory for file names.
  19660. +That is useful when you have visited a file in a nonexistint directory.
  19661. +
  19662. +Noninteractively, the second (optional) argument PARENTS says whether
  19663. +to create parent directories if they don't exist.Vrevert-buffer-function
  19664. +Function to use to revert this buffer, or nil to do the default.
  19665. +The function receives two arguments IGNORE-AUTO and NOCONFIRM,
  19666. +which are the arguments that `revert-buffer' received.Vrevert-buffer-insert-file-contents-function
  19667. +Function to use to insert contents when reverting this buffer.
  19668. +Gets two args, first the nominal file name to use,
  19669. +and second, t if reading the auto-save file.Frevert-buffer
  19670. +Replace the buffer text with the text of the visited file on disk.
  19671. +This undoes all changes since the file was visited or saved.
  19672. +With a prefix argument, offer to revert from latest auto-save file, if
  19673. +that is more recent than the visited file.
  19674. +
  19675. +When called from lisp, The first argument is IGNORE-AUTO; only offer
  19676. +to revert from the auto-save file when this is nil.  Note that the
  19677. +sense of this argument is the reverse of the prefix argument, for the
  19678. +sake of backward compatibility.  IGNORE-AUTO is optional, defaulting
  19679. +to nil.
  19680. +
  19681. +Optional second argument NOCONFIRM means don't ask for confirmation at
  19682. +all.
  19683. +
  19684. +If the value of `revert-buffer-function' is non-nil, it is called to
  19685. +do the work.
  19686. +
  19687. +The default revert function runs the hook `before-revert-hook' at the
  19688. +beginning and `after-revert-hook' at the end.Frecover-file
  19689. +Visit file FILE, but get contents from its last auto-save file.Fkill-some-buffers
  19690. +For each buffer, ask whether to kill it.Fauto-save-mode
  19691. +Toggle auto-saving of contents of current buffer.
  19692. +With prefix argument ARG, turn auto-saving on if positive, else off.Frename-auto-save-file
  19693. +Adjust current buffer's auto save file name for current conditions.
  19694. +Also rename any existing auto save file, if it was made in this session.Fmake-auto-save-file-name
  19695. +Return file name to use for auto-saves of current buffer.
  19696. +Does not consider `auto-save-visited-file-name' as that variable is checked
  19697. +before calling this function.  You can redefine this for customization.
  19698. +See also `auto-save-file-name-p'.Fauto-save-file-name-p
  19699. +Return non-nil if FILENAME can be yielded by `make-auto-save-file-name'.
  19700. +FILENAME should lack slashes.  You can redefine this for customization.Vlist-directory-brief-switches
  19701. +*Switches for list-directory to pass to `ls' for brief listing,Vlist-directory-verbose-switches
  19702. +*Switches for list-directory to pass to `ls' for verbose listing,Flist-directory
  19703. +Display a list of files in or matching DIRNAME, a la `ls'.
  19704. +DIRNAME is globbed by the shell if necessary.
  19705. +Prefix arg (second arg if noninteractive) means supply -l switch to `ls'.
  19706. +Actions controlled by variables `list-directory-brief-switches'
  19707. +and `list-directory-verbose-switches'.Vinsert-directory-program
  19708. +Absolute or relative name of the `ls' program used by `insert-directory'.Finsert-directory
  19709. +Insert directory listing for FILE, formatted according to SWITCHES.
  19710. +Leaves point after the inserted text.
  19711. +SWITCHES may be a string of options, or a list of strings.
  19712. +Optional third arg WILDCARD means treat FILE as shell wildcard.
  19713. +Optional fourth arg FULL-DIRECTORY-P means file is a directory and
  19714. +switches do not contain `d', so that a full listing is expected.
  19715. +
  19716. +This works by running a directory listing program
  19717. +whose name is in the variable `insert-directory-program'.
  19718. +If WILDCARD, it also runs the shell specified by `shell-file-name'.Vkill-emacs-query-functions
  19719. +Functions to call with no arguments to query about killing Emacs.
  19720. +If any of these functions returns nil, killing Emacs is cancelled.Fsave-buffers-kill-emacs
  19721. +Offer to save each buffer, then kill this Emacs process.
  19722. +With prefix arg, silently save all file-visiting buffers, then kill.Vfill-individual-varying-indent
  19723. +*Controls criterion for a new paragraph in `fill-individual-paragraphs'.
  19724. +Non-nil means changing indent doesn't end a paragraph.
  19725. +That mode can handle paragraphs with extra indentation on the first line,
  19726. +but it requires separator lines between paragraphs.
  19727. +A value of nil means that any change in indentation starts a new paragraph.Vsentence-end-double-space
  19728. +*Non-nil means a single space does not end a sentence.Fset-fill-prefix
  19729. +Set the fill prefix to the current line up to point.
  19730. +Filling expects lines to start with the fill prefix and
  19731. +reinserts the fill prefix in each resulting line.Vadaptive-fill-mode
  19732. +*Non-nil means determine a paragraph's fill prefix from its text.Vadaptive-fill-regexp
  19733. +*Regexp to match text at start of line that constitutes indentation.
  19734. +If Adaptive Fill mode is enabled, whatever text matches this pattern
  19735. +on the second line of a paragraph is used as the standard indentation
  19736. +for the paragraph.Ffill-region-as-paragraph
  19737. +Fill region as one paragraph: break lines to fit `fill-column'.
  19738. +Prefix arg means justify too.
  19739. +If `sentence-end-double-space' is non-nil, then period followed by one
  19740. +space does not end a sentence, so don't break a line there.
  19741. +From program, pass args FROM, TO and JUSTIFY-FLAG.Ffill-paragraph
  19742. +Fill paragraph at or after point.  Prefix arg means justify as well.
  19743. +If `sentence-end-double-space' is non-nil, then period followed by one
  19744. +space does not end a sentence, so don't break a line there.Ffill-region
  19745. +Fill each of the paragraphs in the region.
  19746. +Prefix arg (non-nil third arg, if called from program) means justify as well.
  19747. +If `sentence-end-double-space' is non-nil, then period followed by one
  19748. +space does not end a sentence, so don't break a line there.Fjustify-current-line
  19749. +Add spaces to line point is in, so it ends at `fill-column'.Ffill-nonuniform-paragraphs
  19750. +Fill paragraphs within the region, allowing varying indentation within each.
  19751. +This command divides the region into "paragraphs",
  19752. +only at paragraph-separator lines, then fills each paragraph
  19753. +using as the fill prefix the smallest indentation of any line
  19754. +in the paragraph.
  19755. +
  19756. +When calling from a program, pass range to fill as first two arguments.
  19757. +
  19758. +Optional third and fourth arguments JUSTIFY-FLAG and MAIL-FLAG:
  19759. +JUSTIFY-FLAG to justify paragraphs (prefix arg),
  19760. +MAIL-FLAG for a mail message, i. e. don't fill header lines.Ffill-individual-paragraphs
  19761. +Fill paragraphs of uniform indentation within the region.
  19762. +This command divides the region into "paragraphs", 
  19763. +treating every change in indentation level as a paragraph boundary,
  19764. +then fills each paragraph using its indentation level as the fill prefix.
  19765. +
  19766. +When calling from a program, pass range to fill as first two arguments.
  19767. +
  19768. +Optional third and fourth arguments JUSTIFY-FLAG and MAIL-FLAG:
  19769. +JUSTIFY-FLAG to justify paragraphs (prefix arg),
  19770. +MAIL-FLAG for a mail message, i. e. don't fill header lines.Vpi
  19771. +The value of Pi (3.1415926...)Ve
  19772. +The value of e (2.7182818...)Vdegrees-to-radians
  19773. +Degrees to radian conversion constantVradians-to-degrees
  19774. +Radian to degree conversion constantFdegrees-to-radians
  19775. +Convert ARG from degrees to radians.Fradians-to-degrees
  19776. +Convert ARG from radians to degrees.Vhelp-map
  19777. +Keymap for characters following the Help key.Ffinder-by-keyword
  19778. +Find packages matching a given keyword.Fhelp-with-tutorial
  19779. +Select the Emacs learn-by-doing tutorial.Fdescribe-key-briefly
  19780. +Print the name of the function KEY invokes.  KEY is a string.Fprint-help-return-message
  19781. +Display or return message saying how to restore windows after help command.
  19782. +Computes a message and applies the optional argument FUNCTION to it.
  19783. +If FUNCTION is nil, applies `message' to it, thus printing it.Fdescribe-key
  19784. +Display documentation of the function invoked by KEY.  KEY is a string.Fdescribe-mode
  19785. +Display documentation of current major mode and minor modes.
  19786. +For this to work correctly for a minor mode, the mode's indicator variable
  19787. +(listed in `minor-mode-alist') must also be a function whose documentation
  19788. +describes the minor mode.Fdescribe-distribution
  19789. +Display info on how to obtain the latest version of GNU Emacs.Fdescribe-copying
  19790. +Display info on how you may redistribute copies of GNU Emacs.Fdescribe-project
  19791. +Display info on the GNU project.Fdescribe-no-warranty
  19792. +Display info on all the kinds of warranty Emacs does NOT have.Fdescribe-prefix-bindings
  19793. +Describe the bindings of the prefix used to reach this command.
  19794. +The prefix described consists of all but the last event
  19795. +of the key sequence that ran this command.Fview-emacs-news
  19796. +Display info on recent changes to Emacs.Fview-lossage
  19797. +Display last 100 input keystrokes.Fhelp-for-help
  19798. +You have typed \[help-command], the help character.  Type a Help option:
  19799. +(Use \<help-map>\[scroll-up] or \[scroll-down] to scroll through this text.
  19800. +Type \<help-map>\[help-quit] to exit the Help command.)
  19801. +
  19802. +a  command-apropos.  Give a substring, and see a list of commands
  19803. +    (functions interactively callable) that contain
  19804. +    that substring.  See also the  apropos  command.
  19805. +b  describe-bindings.  Display table of all key bindings.
  19806. +c  describe-key-briefly.  Type a command key sequence;
  19807. +    it prints the function name that sequence runs.
  19808. +f  describe-function.  Type a function name and get documentation of it.
  19809. +C-f Info-goto-emacs-command-node.  Type a function name;
  19810. +    it takes you to the Info node for that command.
  19811. +i  info. The  info  documentation reader.
  19812. +k  describe-key.  Type a command key sequence;
  19813. +    it displays the full documentation.
  19814. +C-k Info-goto-emacs-key-command-node.  Type a command key sequence;
  19815. +    it takes you to the Info node for the command bound to that key.
  19816. +l  view-lossage.  Shows last 100 characters you typed.
  19817. +m  describe-mode.  Print documentation of current major mode,
  19818. +    which describes the commands peculiar to it.
  19819. +n  view-emacs-news.  Shows emacs news file.
  19820. +p  finder-by-keyword. Find packages matching a given topic keyword.
  19821. +s  describe-syntax.  Display contents of syntax table, plus explanations
  19822. +t  help-with-tutorial.  Select the Emacs learn-by-doing tutorial.
  19823. +v  describe-variable.  Type name of a variable;
  19824. +    it displays the variable's documentation and value.
  19825. +w  where-is.  Type command name; it prints which keystrokes
  19826. +    invoke that command.
  19827. +C-c print Emacs copying permission (General Public License).
  19828. +C-d print Emacs ordering information.
  19829. +C-n print news of recent Emacs changes.
  19830. +C-p print information about the GNU project.
  19831. +C-w print information on absence of warranty for GNU Emacs.Fdescribe-function
  19832. +Display the full documentation of FUNCTION (a symbol).Fdescribe-variable
  19833. +Display the full documentation of VARIABLE (a symbol).
  19834. +Returns the documentation as a string, also.Fwhere-is
  19835. +Print message listing key sequences that invoke specified command.
  19836. +Argument is a command definition, usually a symbol with a function definition.Fcommand-apropos
  19837. +Like apropos but lists only symbols that are names of commands
  19838. +(interactively callable functions).  Argument REGEXP is a regular expression
  19839. +that is matched against command symbol names.  Returns list of symbols and
  19840. +documentation found.Flocate-library
  19841. +Show the full path name of Emacs library LIBRARY.
  19842. +This command searches the directories in `load-path' like `M-x load-library'
  19843. +to find the file that `M-x load-library RET LIBRARY RET' would load.
  19844. +Optional second arg NOSUFFIX non-nil means don't add suffixes `.elc' or `.el'
  19845. +to the specified name LIBRARY (a la calling `load' instead of `load-library').Vindent-line-function
  19846. +Function to indent current line.Findent-according-to-mode
  19847. +Indent line in proper way for current major mode.Findent-for-tab-command
  19848. +Indent line in proper way for current major mode.Findent-rigidly
  19849. +Indent all lines starting in the region sideways by ARG columns.
  19850. +Called from a program, takes three arguments, START, END and ARG.Vindent-region-function
  19851. +Function which is short cut to indent region using indent-according-to-mode.
  19852. +A value of nil means really run indent-according-to-mode on each line.Findent-region
  19853. +Indent each nonblank line in the region.
  19854. +With no argument, indent each line using `indent-according-to-mode',
  19855. +or use `indent-region-function' to do the whole region if that's non-nil.
  19856. +If there is a fill prefix, make each line start with the fill prefix.
  19857. +With argument COLUMN, indent each line to that column.
  19858. +Called from a program, takes three args: START, END and COLUMN.Findent-relative-maybe
  19859. +Indent a new line like previous nonblank line.Findent-relative
  19860. +Space out to under next indent point in previous nonblank line.
  19861. +An indent point is a non-whitespace character following whitespace.
  19862. +If the previous nonblank line has no indent points beyond the
  19863. +column point starts at, `tab-to-tab-stop' is done instead.Vtab-stop-list
  19864. +*List of tab stop positions used by `tab-to-tab-stops'.
  19865. +This should be a list of integers, ordered from smallest to largest.Vedit-tab-stops-map
  19866. +Keymap used in `edit-tab-stops'.Vedit-tab-stops-buffer
  19867. +Buffer whose tab stops are being edited--in case
  19868. +the variable `tab-stop-list' is local in that buffer.Fedit-tab-stops
  19869. +Edit the tab stops used by `tab-to-tab-stop'.
  19870. +Creates a buffer *Tab Stops* containing text describing the tab stops.
  19871. +A colon indicates a column where there is a tab stop.
  19872. +You can add or remove colons and then do \<edit-tab-stops-map>\[edit-tab-stops-note-changes] to make changes take effect.Fedit-tab-stops-note-changes
  19873. +Put edited tab stops into effect.Ftab-to-tab-stop
  19874. +Insert spaces or tabs to next defined tab-stop column.
  19875. +The variable `tab-stop-list' is a list of columns at which there are tab stops.
  19876. +Use \[edit-tab-stops] to edit them interactively.Fmove-to-tab-stop
  19877. +Move point to next defined tab-stop column.
  19878. +The variable `tab-stop-list' is a list of columns at which there are tab stops.
  19879. +Use \[edit-tab-stops] to edit them interactively.Vsearch-exit-option
  19880. +*Non-nil means random control characters terminate incremental search.Vsearch-slow-window-lines
  19881. +*Number of lines in slow search display windows.
  19882. +These are the short windows used during incremental search on slow terminals.
  19883. +Negative means put the slow search window at the top (normally it's at bottom)
  19884. +and the value is minus the number of lines.Vsearch-slow-speed
  19885. +*Highest terminal speed at which to use "slow" style incremental search.
  19886. +This is the style where a one-line window is created to show the line
  19887. +that the search has reached.Vsearch-upper-case
  19888. +*If non-nil, upper case chars disable case fold searching.
  19889. +That is, upper and lower case chars must match exactly.
  19890. +This applies no matter where the chars come from, but does not
  19891. +apply to chars in regexps that are prefixed with `\'.
  19892. +If this value is `not-yanks', yanked text is always downcased.Vsearch-nonincremental-instead
  19893. +*If non-nil, do a nonincremental search instead if exiting immediately.
  19894. +Actually, `isearch-edit-string' is called to let you enter the search
  19895. +string, and RET terminates editing and does a nonincremental search.Vsearch-whitespace-regexp
  19896. +*If non-nil, regular expression to match a sequence of whitespace chars.
  19897. +You might want to use something like "[ \t\r\n]+" instead.Vsearch-highlight
  19898. +*Non-nil means incremental search highlights the current match.Visearch-mode-hook
  19899. +Function(s) to call after starting up an incremental search.Visearch-mode-end-hook
  19900. +Function(s) to call after terminating an incremental search.Vsearch-ring
  19901. +List of search string sequences.Vregexp-search-ring
  19902. +List of regular expression search string sequences.Vsearch-ring-max
  19903. +*Maximum length of search ring before oldest elements are thrown away.Vregexp-search-ring-max
  19904. +*Maximum length of regexp search ring before oldest elements are thrown away.Vsearch-ring-yank-pointer
  19905. +Index in `search-ring' of last string reused.
  19906. +nil if none yet.Vregexp-search-ring-yank-pointer
  19907. +Index in `regexp-search-ring' of last string reused.
  19908. +nil if none yet.Vsearch-ring-update
  19909. +*Non-nil if advancing or retreating in the search ring should cause search.
  19910. +Default value, nil, means edit the string instead.Visearch-mode-map
  19911. +Keymap for isearch-mode.Vminibuffer-local-isearch-map
  19912. +Keymap for editing isearch strings in the minibuffer.Fisearch-forward
  19913. +Do incremental search forward.
  19914. +With a prefix argument, do an incremental regular expression search instead.
  19915. +\<isearch-mode-map>
  19916. +As you type characters, they add to the search string and are found.
  19917. +The following non-printing keys are bound in `isearch-mode-map'.  
  19918. +
  19919. +Type \[isearch-delete-char] to cancel characters from end of search string.
  19920. +Type \[isearch-exit] to exit, leaving point at location found.
  19921. +Type LFD (C-j) to match end of line.
  19922. +Type \[isearch-repeat-forward] to search again forward, \[isearch-repeat-backward] to search again backward.
  19923. +Type \[isearch-yank-word] to yank word from buffer onto end of search string and search for it.
  19924. +Type \[isearch-yank-line] to yank rest of line onto end of search string and search for it.
  19925. +Type \[isearch-quote-char] to quote control character to search for it.
  19926. +\[isearch-abort] while searching or when search has failed cancels input back to what has
  19927. + been found successfully.
  19928. +\[isearch-abort] when search is successful aborts and moves point to starting point.
  19929. +
  19930. +Also supported is a search ring of the previous 16 search strings.
  19931. +Type \[isearch-ring-advance] to search for the next item in the search ring.
  19932. +Type \[isearch-ring-retreat] to search for the previous item in the search ring.
  19933. +Type \[isearch-complete] to complete the search string using the search ring.
  19934. +
  19935. +The above keys, bound in `isearch-mode-map', are often controlled by 
  19936. + options; do M-x apropos on search-.* to find them.
  19937. +Other control and meta characters terminate the search
  19938. + and are then executed normally (depending on `search-exit-option').
  19939. +
  19940. +If this function is called non-interactively, it does not return to
  19941. +the calling function until the search is done.Fisearch-forward-regexp
  19942. +Do incremental search forward for regular expression.
  19943. +With a prefix argument, do a regular string search instead.
  19944. +Like ordinary incremental search except that your input
  19945. +is treated as a regexp.  See \[isearch-forward] for more info.Fisearch-backward
  19946. +Do incremental search backward.
  19947. +With a prefix argument, do a regular expression search instead.
  19948. +See \[isearch-forward] for more information.Fisearch-backward-regexp
  19949. +Do incremental search backward for regular expression.
  19950. +With a prefix argument, do a regular string search instead.
  19951. +Like ordinary incremental search except that your input
  19952. +is treated as a regexp.  See \[isearch-forward] for more info.Fisearch-mode
  19953. +Start isearch minor mode.  Called by isearch-forward, etc.Fisearch-exit
  19954. +Exit search normally.
  19955. +However, if this is the first command after starting incremental
  19956. +search and `search-nonincremental-instead' is non-nil, do a
  19957. +nonincremental search instead via `isearch-edit-string'.Fisearch-edit-string
  19958. +Edit the search string in the minibuffer.
  19959. +The following additional command keys are active while editing.
  19960. +\<minibuffer-local-isearch-map>
  19961. +\[exit-minibuffer] to resume incremental searching with the edited string.
  19962. +\[isearch-nonincremental-exit-minibuffer] to do one nonincremental search.
  19963. +\[isearch-forward-exit-minibuffer] to resume isearching forward.
  19964. +\[isearch-reverse-exit-minibuffer] to resume isearching backward.
  19965. +\[isearch-ring-advance-edit] to replace the search string with the next item in the search ring.
  19966. +\[isearch-ring-retreat-edit] to replace the search string with the previous item in the search ring.
  19967. +\[isearch-complete-edit] to complete the search string using the search ring.
  19968. +\<isearch-mode-map>
  19969. +If first char entered is \[isearch-yank-word], then do word search instead.Fisearch-abort
  19970. +Abort incremental search mode if searching is successful, signalling quit.
  19971. +Otherwise, revert to previous successful search and continue searching.
  19972. +Use `isearch-exit' to quit without signalling.Fisearch-repeat-forward
  19973. +Repeat incremental search forwards.Fisearch-repeat-backward
  19974. +Repeat incremental search backwards.Fisearch-toggle-regexp
  19975. +Toggle regexp searching on or off.Fisearch-toggle-case-fold
  19976. +Toggle case folding in searching on or off.Fisearch-delete-char
  19977. +Discard last input item and move point back.  
  19978. +If no previous match was done, just beep.Fisearch-yank-kill
  19979. +Pull string from kill ring into search string.Fisearch-yank-word
  19980. +Pull next word from buffer into search string.Fisearch-yank-line
  19981. +Pull rest of line from buffer into search string.Fisearch-*-char
  19982. +Handle * and ? specially in regexps.Fisearch-|-char
  19983. +If in regexp search, jump to the barrier.Fisearch-other-meta-char
  19984. +Exit the search normally and reread this key sequence.
  19985. +But only if `search-exit-option' is non-nil, the default.
  19986. +If it is the symbol `edit', the search string is edited in the minibuffer
  19987. +and the meta character is unread so that it applies to editing the string.Fisearch-quote-char
  19988. +Quote special characters for incremental search.Fisearch-return-char
  19989. +Convert return into newline for incremental search.
  19990. +Obsolete.Fisearch-printing-char
  19991. +Add this ordinary printing character to the search string and search.Fisearch-whitespace-chars
  19992. +Match all whitespace chars, if in regexp mode.
  19993. +If you want to search for just a space, type C-q SPC.Fisearch-ring-advance
  19994. +Advance to the next search string in the ring.Fisearch-ring-retreat
  19995. +Retreat to the previous search string in the ring.Fisearch-ring-advance-edit
  19996. +Insert the next element of the search history into the minibuffer.Fisearch-ring-retreat-edit
  19997. +Inserts the previous element of the search history into the minibuffer.Fisearch-complete
  19998. +Complete the search string from the strings on the search ring.
  19999. +The completed string is then editable in the minibuffer.
  20000. +If there is no completion possible, say so and continue searching.Fisearch-complete-edit
  20001. +Same as `isearch-complete' except in the minibuffer.Fisearch-no-upper-case-p
  20002. +Return t if there are no upper case chars in STRING.
  20003. +If REGEXP-FLAG is non-nil, disregard letters preceeded by `\' (but not `\\')
  20004. +since they have special meaning in a regexp.Vlisp-mode-syntax-table
  20005. +Vemacs-lisp-mode-syntax-table
  20006. +Vlisp-mode-abbrev-table
  20007. +Vshared-lisp-mode-map
  20008. +Keymap for commands shared by all sorts of Lisp modes.Vemacs-lisp-mode-map
  20009. +Keymap for Emacs Lisp mode.
  20010. +All commands in shared-lisp-mode-map are inherited by this map.Femacs-lisp-mode
  20011. +Major mode for editing Lisp code to run in Emacs.
  20012. +Commands:
  20013. +Delete converts tabs to spaces as it moves back.
  20014. +Blank lines separate paragraphs.  Semicolons start comments.
  20015. +\{emacs-lisp-mode-map}
  20016. +Entry to this mode calls the value of `emacs-lisp-mode-hook'
  20017. +if that value is non-nil.Vlisp-mode-map
  20018. +Keymap for ordinary Lisp mode.
  20019. +All commands in `shared-lisp-mode-map' are inherited by this map.Flisp-mode
  20020. +Major mode for editing Lisp code for Lisps other than GNU Emacs Lisp.
  20021. +Commands:
  20022. +Delete converts tabs to spaces as it moves back.
  20023. +Blank lines separate paragraphs.  Semicolons start comments.
  20024. +\{lisp-mode-map}
  20025. +Note that `run-lisp' may be used either to start an inferior Lisp job
  20026. +or to switch back to an existing one.
  20027. +
  20028. +Entry to this mode calls the value of `lisp-mode-hook'
  20029. +if that value is non-nil.Flisp-eval-defun
  20030. +Send the current defun to the Lisp process made by \[run-lisp].Vlisp-interaction-mode-map
  20031. +Keymap for Lisp Interaction moe.
  20032. +All commands in `shared-lisp-mode-map' are inherited by this map.Flisp-interaction-mode
  20033. +Major mode for typing and evaluating Lisp forms.
  20034. +Like Lisp mode except that \[eval-print-last-sexp] evals the Lisp expression
  20035. +before point, and prints its value into the buffer, advancing point.
  20036. +
  20037. +Commands:
  20038. +Delete converts tabs to spaces as it moves back.
  20039. +Paragraphs are separated only by blank lines.
  20040. +Semicolons start comments.
  20041. +\{lisp-interaction-mode-map}
  20042. +Entry to this mode calls the value of `lisp-interaction-mode-hook'
  20043. +if that value is non-nil.Feval-print-last-sexp
  20044. +Evaluate sexp before point; print value into current buffer.Feval-last-sexp
  20045. +Evaluate sexp before point; print value in minibuffer.
  20046. +With argument, print output into current buffer.Feval-defun
  20047. +Evaluate defun that point is in or before.
  20048. +Print value in minibuffer.
  20049. +With argument, insert value in current buffer after the defun.Vlisp-indent-offset
  20050. +Vlisp-indent-function
  20051. +Flisp-indent-line
  20052. +Indent current line as Lisp code.
  20053. +With argument, indent any additional lines of the same expression
  20054. +rigidly along with this one.Fcalculate-lisp-indent
  20055. +Return appropriate indentation for current line as Lisp code.
  20056. +In usual case returns an integer: the column to indent to.
  20057. +Can instead return a list, whose car is the column to indent to.
  20058. +This means that following lines at the same level of indentation
  20059. +should not necessarily be indented the same way.
  20060. +The second element of the list is the buffer position
  20061. +of the start of the containing expression.Vlisp-body-indent
  20062. +Number of columns to indent the second line of a `(def...)' form.Findent-sexp
  20063. +Indent each line of the list starting just after point.
  20064. +If optional arg ENDPOS is given, indent each line, stopping when
  20065. +ENDPOS is encountered.Flisp-fill-paragraph
  20066. +Like \[fill-paragraph], but handle Emacs Lisp comments.
  20067. +If any of the current line is a comment, fill the comment or the
  20068. +paragraph of it that point is in, preserving the comment's indentation
  20069. +and initial semicolons.Findent-code-rigidly
  20070. +Indent all lines of code, starting in the region, sideways by ARG columns.
  20071. +Does not affect lines starting inside comments or strings, assuming that
  20072. +the start of the region is not inside them.
  20073. +
  20074. +Called from a program, takes args START, END, COLUMNS and NOCHANGE-REGEXP.
  20075. +The last is a regexp which, if matched at the beginning of a line,
  20076. +means don't indent that line.Vdefun-prompt-regexp
  20077. +*Non-nil => regexp to ignore, before the character that starts a defun.
  20078. +This is only necessary if the opening paren or brace is not in column 0.
  20079. +See `beginning-of-defun'.Vparens-require-spaces
  20080. +Non-nil => `insert-parentheses' should insert whitespace as needed.Fforward-sexp
  20081. +Move forward across one balanced expression (sexp).
  20082. +With argument, do it that many times.  Negative arg -N means
  20083. +move backward across N balanced expressions.Fbackward-sexp
  20084. +Move backward across one balanced expression (sexp).
  20085. +With argument, do it that many times.  Negative arg -N means
  20086. +move forward across N balanced expressions.Fmark-sexp
  20087. +Set mark ARG sexps from point.
  20088. +The place mark goes is the same place \[forward-sexp] would
  20089. +move to with the same argument.Fforward-list
  20090. +Move forward across one balanced group of parentheses.
  20091. +With argument, do it that many times.
  20092. +Negative arg -N means move backward across N groups of parentheses.Fbackward-list
  20093. +Move backward across one balanced group of parentheses.
  20094. +With argument, do it that many times.
  20095. +Negative arg -N means move forward across N groups of parentheses.Fdown-list
  20096. +Move forward down one level of parentheses.
  20097. +With argument, do this that many times.
  20098. +A negative argument means move backward but still go down a level.
  20099. +In Lisp programs, an argument is required.Fbackward-up-list
  20100. +Move backward out of one level of parentheses.
  20101. +With argument, do this that many times.
  20102. +A negative argument means move forward but still to a less deep spot.
  20103. +In Lisp programs, an argument is required.Fup-list
  20104. +Move forward out of one level of parentheses.
  20105. +With argument, do this that many times.
  20106. +A negative argument means move backward but still to a less deep spot.
  20107. +In Lisp programs, an argument is required.Fkill-sexp
  20108. +Kill the sexp (balanced expression) following the cursor.
  20109. +With argument, kill that many sexps after the cursor.
  20110. +Negative arg -N means kill N sexps before the cursor.Fbackward-kill-sexp
  20111. +Kill the sexp (balanced expression) preceding the cursor.
  20112. +With argument, kill that many sexps before the cursor.
  20113. +Negative arg -N means kill N sexps after the cursor.Fbeginning-of-defun
  20114. +Move backward to the beginning of a defun.
  20115. +With argument, do it that many times.  Negative arg -N
  20116. +means move forward to Nth following beginning of defun.
  20117. +Returns t unless search stops due to beginning or end of buffer.
  20118. +
  20119. +Normally a defun starts when there is an char with open-parenthesis
  20120. +syntax at the beginning of a line.  If `defun-prompt-regexp' is
  20121. +non-nil, then a string which matches that regexp may precede the
  20122. +open-parenthesis, and point ends up at the beginning of the line.Fbeginning-of-defun-raw
  20123. +Move point to the character that starts a defun.
  20124. +This is identical to beginning-of-defun, except that point does not move
  20125. +to the beginning of the line when `defun-prompt-regexp' is non-nil.Fend-of-defun
  20126. +Move forward to next end of defun.  With argument, do it that many times.
  20127. +Negative argument -N means move back to Nth preceding end of defun.
  20128. +
  20129. +An end of a defun occurs right after the close-parenthesis that matches
  20130. +the open-parenthesis that starts a defun; see `beginning-of-defun'.Fmark-defun
  20131. +Put mark at end of this defun, point at beginning.
  20132. +The defun marked is the one that contains point or follows point.Finsert-parentheses
  20133. +Put parentheses around next ARG sexps.  Leave point after open-paren.
  20134. +No argument is equivalent to zero: just insert `()' and leave point between.
  20135. +If `parens-require-spaces' is non-nil, this command also inserts a space
  20136. +before and after, depending on the surrounding characters.Fmove-past-close-and-reindent
  20137. +Move past next `)', delete indentation before it, then indent after it.Flisp-complete-symbol
  20138. +Perform completion on Lisp symbol preceding point.
  20139. +Compare that symbol against the known Lisp symbols.
  20140. +
  20141. +The context determines which symbols are considered.
  20142. +If the symbol starts just after an open-parenthesis, only symbols
  20143. +with function definitions are considered.  Otherwise, all symbols with
  20144. +function definitions, values or properties are considered.Vminor-mode-alist
  20145. +Alist saying how to show minor modes in the mode line.
  20146. +Each element looks like (VARIABLE STRING);
  20147. +STRING is included in the mode line iff VARIABLE's value is non-nil.
  20148. +
  20149. +Actually, STRING need not be a string; any possible mode-line element
  20150. +is okay.  See `mode-line-format'.Fprompt-for-change-log-name
  20151. +Prompt for a change log name.Ffind-change-log
  20152. +Find a change log file for \[add-change-log-entry] and return the name.
  20153. +Optional arg FILE-NAME is a name to try first.
  20154. +If FILE-NAME is nil, use the value of `change-log-default-name' if non-nil.
  20155. +Failing that, use "ChangeLog" in the current directory.
  20156. +If the file does not exist in the named directory, successive parent
  20157. +directories are tried.
  20158. +
  20159. +Once a file is found, `change-log-default-name' is set locally in the
  20160. +current buffer to the complete file name.Fadd-change-log-entry
  20161. +Find change log file and add an entry for today.
  20162. +Optional arg (interactive prefix) non-nil means prompt for user name and site.
  20163. +Second arg is file name of change log.  If nil, uses `change-log-default-name'.
  20164. +Third arg OTHER-WINDOW non-nil means visit in other window.
  20165. +Fourth arg NEW-ENTRY non-nil means always create a new entry at the front;
  20166. +never append to an existing entry.Fadd-change-log-entry-other-window
  20167. +Find change log file in other window and add an entry for today.
  20168. +Optional arg (interactive prefix) non-nil means prompt for user name and site.
  20169. +Second arg is file name of change log.  If nil, uses `change-log-default-name'.Fchange-log-mode
  20170. +Major mode for editing change logs; like Indented Text Mode.
  20171. +Prevents numeric backups and sets `left-margin' to 8 and `fill-column' to 74.
  20172. +New log entries are usually made with \[add-change-log-entry] or \[add-change-log-entry-other-window].
  20173. +Each entry behaves as a paragraph, and the entries for one day as a page.
  20174. +Runs `change-log-mode-hook'.Fadd-log-current-defun
  20175. +Return name of function definition point is in, or nil.
  20176. +
  20177. +Understands C, Lisp, LaTeX ("functions" are chapters, sections, ...),
  20178. +Texinfo (@node titles), and Fortran.
  20179. +
  20180. +Other modes are handled by a heuristic that looks in the 10K before
  20181. +point for uppercase headings starting in the first column or
  20182. +identifiers followed by `:' or `=', see variable
  20183. +`add-log-current-defun-header-regexp'.
  20184. +
  20185. +Has a preference of looking backwards.Vad-start-advice-on-load
  20186. +*Non-nil will start Advice magic when this file gets loaded.
  20187. +Also see function `ad-start-advice'.Vad-activate-on-definition
  20188. +*Non-nil means automatic advice activation at function definition.
  20189. +Set this variable to t if you want to enable forward advice (which is
  20190. +automatic advice activation of a previously undefined function at the
  20191. +point the function gets defined/loaded/autoloaded).  The value of this
  20192. +variable takes effect only during the execution of `ad-start-advice'. 
  20193. +If non-nil it will enable definition hooks regardless of the value
  20194. +of `ad-enable-definition-hooks'.Vad-redefinition-action
  20195. +*Defines what to do with redefinitions during de/activation.
  20196. +Redefinition occurs if a previously activated function that already has an
  20197. +original definition associated with it gets redefined and then de/activated.
  20198. +In such a case we can either accept the current definition as the new
  20199. +original definition, discard the current definition and replace it with the
  20200. +old original, or keep it and raise an error.  The values `accept', `discard',
  20201. +`error' or `warn' govern what will be done.  `warn' is just like `accept' but
  20202. +it additionally prints a warning message.  All other values will be
  20203. +interpreted as `error'.Vad-definition-hooks
  20204. +*List of hooks to be run after a function definition.
  20205. +The variable `ad-defined-function' will be bound to the name of
  20206. +the currently defined function when the hook function is run.Vad-enable-definition-hooks
  20207. +*Non-nil will enable hooks to be run on function definition.
  20208. +Setting this variable is a noop unless the value of
  20209. +`ad-activate-on-definition' (which see) is nil.Fad-add-advice
  20210. +Adds a piece of ADVICE to FUNCTION's list of advices in CLASS.
  20211. +If FUNCTION already has one or more pieces of advice of the specified
  20212. +CLASS then POSITION determines where the new piece will go.  The value
  20213. +of POSITION can either be `first', `last' or a number where 0 corresponds
  20214. +to `first'.  Numbers outside the range will be mapped to the closest
  20215. +extreme position.  If there was already a piece of ADVICE with the same
  20216. +name, then the position argument will be ignored and the old advice
  20217. +will be overwritten with the new one.
  20218. +    If the FUNCTION was not advised already, then its advice info will be 
  20219. +initialized.  Redefining a piece of advice whose name is part of the cache-id
  20220. +will clear the cache.Fdefadvice
  20221. +Defines a piece of advice for FUNCTION (a symbol).
  20222. +The syntax of `defadvice' is as follows:
  20223. +
  20224. +  (defadvice FUNCTION (CLASS NAME [POSITION] [ARGLIST] FLAG...)
  20225. +    [DOCSTRING] [INTERACTIVE-FORM]
  20226. +    BODY... )
  20227. +
  20228. +FUNCTION ::= Name of the function to be advised.
  20229. +CLASS ::= `before' | `around' | `after' | `activation' | `deactivation'.
  20230. +NAME ::= Non-nil symbol that names this piece of advice.
  20231. +POSITION ::= `first' | `last' | NUMBER. Optional, defaults to `first',
  20232. +    see also `ad-add-advice'.
  20233. +ARGLIST ::= An optional argument list to be used for the advised function
  20234. +    instead of the argument list of the original.  The first one found in
  20235. +    before/around/after-advices will be used.
  20236. +FLAG ::= `protect'|`disable'|`activate'|`compile'|`preactivate'|`freeze'.
  20237. +    All flags can be specified with unambiguous initial substrings.
  20238. +DOCSTRING ::= Optional documentation for this piece of advice.
  20239. +INTERACTIVE-FORM ::= Optional interactive form to be used for the advised
  20240. +    function.  The first one found in before/around/after-advices will be used.
  20241. +BODY ::= Any s-expression.
  20242. +
  20243. +Semantics of the various flags:
  20244. +`protect': The piece of advice will be protected against non-local exits in
  20245. +any code that precedes it.  If any around-advice of a function is protected
  20246. +then automatically all around-advices will be protected (the complete onion).
  20247. +
  20248. +`activate': All advice of FUNCTION will be activated immediately if
  20249. +FUNCTION has been properly defined prior to this application of `defadvice'.
  20250. +
  20251. +`compile': In conjunction with `activate' specifies that the resulting
  20252. +advised function should be compiled.
  20253. +
  20254. +`disable': The defined advice will be disabled, hence, it will not be used 
  20255. +during activation until somebody enables it.
  20256. +
  20257. +`preactivate': Preactivates the advised FUNCTION at macro-expansion/compile
  20258. +time.  This generates a compiled advised definition according to the current
  20259. +advice state that will be used during activation if appropriate.  Only use
  20260. +this if the `defadvice' gets actually compiled.
  20261. +
  20262. +`freeze': Expands the `defadvice' into a redefining `defun/defmacro' according
  20263. +to the current advice state.  No other advice information will be saved.
  20264. +Frozen advices cannot be undone, they behave like a hard redefinition of
  20265. +the advised function.  `freeze' implies `activate' and `preactivate'.  The
  20266. +documentation of the advised function can be dumped onto the `DOC' file
  20267. +during preloading.
  20268. +
  20269. +Look at the file `advice.el' for comprehensive documentation.Fad-start-advice
  20270. +Redefines some primitives to start the advice magic.
  20271. +If `ad-activate-on-definition' is t then advice information will
  20272. +automatically get activated whenever an advised function gets defined or
  20273. +redefined.  This will enable goodies such as forward advice and
  20274. +automatically enable function definition hooks.  If its value is nil but
  20275. +the value of `ad-enable-definition-hooks' is t then definition hooks
  20276. +will be enabled without having automatic advice activation, otherwise
  20277. +function definition hooks will be disabled too.  If definition hooks are
  20278. +enabled then functions stored in `ad-definition-hooks' are run whenever
  20279. +a function gets defined or redefined.Vappt-issue-message
  20280. +*Non-nil means check for appointments in the diary buffer.
  20281. +To be detected, the diary entry must have the time
  20282. +as the first thing on a line.Vappt-message-warning-time
  20283. +*Time in minutes before an appointment that the warning begins.Vappt-audible
  20284. +*Non-nil means beep to indicate appointment.Vappt-visible
  20285. +*Non-nil means display appointment message in echo area.Vappt-display-mode-line
  20286. +*Non-nil means display minutes to appointment and time on the mode line.Vappt-msg-window
  20287. +*Non-nil means display appointment message in another window.Vappt-display-duration
  20288. +*The number of seconds an appointment message is displayed.Vappt-display-diary
  20289. +*Non-nil means to display the next days diary on the screen. 
  20290. +This will occur at midnight when the appointment list is updated.Fapropos
  20291. +Show all symbols whose names contain matches for REGEXP.
  20292. +If optional argument DO-ALL is non-nil (prefix argument if interactive),
  20293. +or if `apropos-do-all' is non-nil, does more (time-consuming) work such as
  20294. +showing key bindings.  Optional argument PRED is called with each symbol, and
  20295. +if it returns nil, the symbol is not shown.
  20296. +
  20297. +Returns list of symbols and documentation found.Fsuper-apropos
  20298. +Show symbols whose names/documentation contain matches for REGEXP.
  20299. +If optional argument DO-ALL is non-nil (prefix argument if interactive),
  20300. +or if `apropos-do-all' is non-nil, does more (time-consuming) work such as
  20301. +showing key bindings and documentation that is not stored in the documentation
  20302. +file.
  20303. +
  20304. +Returns list of symbols and documentation found.Fasm-mode
  20305. +Major mode for editing typical assembler code.
  20306. +Features a private abbrev table and the following bindings:
  20307. +
  20308. +\[asm-colon]    outdent a preceding label, tab to next tab stop.
  20309. +\[tab-to-tab-stop]    tab to next tab stop.
  20310. +\[asm-newline]    newline, then tab to next tab stop.
  20311. +\[asm-comment]    smart placement of assembler comments.
  20312. +
  20313. +The character used for making comments is set by the variable
  20314. +`asm-comment-char' (which defaults to `?;').
  20315. +
  20316. +Alternatively, you may set this variable in `asm-set-comment-hook', which is
  20317. +called near the beginning of mode initialization.
  20318. +
  20319. +Turning on Asm mode runs the hook `asm-mode-hook' at the end of initialization.
  20320. +
  20321. +Special commands:
  20322. +\{asm-mode-map}
  20323. +Fupdate-file-autoloads
  20324. +Update the autoloads for FILE in `generated-autoload-file'
  20325. +(which FILE might bind in its local variables).Fupdate-autoloads-here
  20326. +Update sections of the current buffer generated by \[update-file-autoloads].Fupdate-directory-autoloads
  20327. +Run \[update-file-autoloads] on each .el file in DIR.Fbatch-update-autoloads
  20328. +Update the autoloads for the files or directories on the command line.
  20329. +Runs \[update-file-autoloads] on files and \[update-directory-autoloads]
  20330. +on directories.  Must be used only with -batch, and kills Emacs on completion.
  20331. +Each file will be processed even if an error occurred previously.
  20332. +For example, invoke `emacs -batch -f batch-update-autoloads *.el'.Fawk-mode
  20333. +Major mode for editing AWK code.
  20334. +This is much like C mode except for the syntax of comments.  It uses
  20335. +the same keymap as C mode and has the same variables for customizing
  20336. +indentation.  It has its own abbrev table and its own syntax table.
  20337. +
  20338. +Turning on AWK mode calls the value of the variable `awk-mode-hook'
  20339. +with no args, if that value is non-nil.Fbackquote
  20340. +Argument STRUCTURE describes a template to build.
  20341. +
  20342. +The whole structure acts as if it were quoted except for certain
  20343. +places where expressions are evaluated and inserted or spliced in.
  20344. +
  20345. +For example:
  20346. +
  20347. +b                 => (ba bb bc)        ; assume b has this value
  20348. +(` (a b c))       => (a b c)        ; backquote acts like quote
  20349. +(` (a (, b) c))   => (a (ba bb bc) c)    ; insert the value of b
  20350. +(` (a (,@ b) c))  => (a ba bb bc c)    ; splice in the value of b
  20351. +
  20352. +Vectors work just like lists.  Nested backquotes are permitted.Fbibtex-mode
  20353. +Major mode for editing bibtex files.
  20354. +
  20355. +\{bibtex-mode-map}
  20356. +
  20357. +A command such as \[bibtex-Book] will outline the fields for a BibTeX book entry.
  20358. +
  20359. +The optional fields start with the string OPT, and thus ignored by BibTeX.
  20360. +The OPT string may be removed from a field with \[bibtex-remove-OPT].
  20361. +\[bibtex-kill-optional-field] kills the current optional field entirely.
  20362. +\[bibtex-remove-double-quotes] removes the double-quotes around the text of
  20363. +the current field.  \[bibtex-empty-field] replaces the text of the current
  20364. +field with the default "".
  20365. +
  20366. +The command \[bibtex-clean-entry] cleans the current entry, i.e. (i) removes
  20367. +double-quotes from entirely numerical fields, (ii) removes OPT from all
  20368. +non-empty optional fields, (iii) removes all empty optional fields, and (iv)
  20369. +checks that no non-optional fields are empty.
  20370. +
  20371. +Use \[bibtex-find-text] to position the dot at the end of the current field.
  20372. +Use \[bibtex-next-field] to move to end of the next field.
  20373. +
  20374. +The following may be of interest as well:
  20375. +
  20376. +  Functions:
  20377. +    find-bibtex-duplicates
  20378. +    find-bibtex-entry-location
  20379. +    hide-bibtex-entry-bodies
  20380. +    sort-bibtex-entries
  20381. +    validate-bibtex-buffer
  20382. +
  20383. +  Variables:
  20384. +    bibtex-clean-entry-zap-empty-opts
  20385. +    bibtex-entry-field-alist
  20386. +    bibtex-include-OPTannote
  20387. +    bibtex-include-OPTcrossref
  20388. +    bibtex-include-OPTkey
  20389. +    bibtex-maintain-sorted-entries
  20390. +    bibtex-mode-user-optional-fields
  20391. +
  20392. +Fields:
  20393. +    address
  20394. +           Publisher's address
  20395. +    annote
  20396. +           Long annotation used for annotated bibliographies (begins sentence)
  20397. +    author
  20398. +           Name(s) of author(s), in BibTeX name format
  20399. +    booktitle
  20400. +           Book title when the thing being referenced isn't the whole book.
  20401. +           For book entries, the title field should be used instead.
  20402. +    chapter
  20403. +           Chapter number
  20404. +    crossref
  20405. +       The database key of the entry being cross referenced.
  20406. +    edition
  20407. +           Edition of a book (e.g., "second")
  20408. +    editor
  20409. +           Name(s) of editor(s), in BibTeX name format.
  20410. +           If there is also an author field, then the editor field should be
  20411. +           for the book or collection that the work appears in
  20412. +    howpublished
  20413. +            How something strange has been published (begins sentence)
  20414. +    institution
  20415. +           Sponsoring institution
  20416. +    journal
  20417. +           Journal name (macros are provided for many)
  20418. +    key
  20419. +           Alphabetizing and labeling key (needed when no author or editor)
  20420. +    month
  20421. +           Month (macros are provided)
  20422. +    note
  20423. +           To help the reader find a reference (begins sentence)
  20424. +    number
  20425. +           Number of a journal or technical report
  20426. +    organization
  20427. +           Organization (sponsoring a conference)
  20428. +    pages
  20429. +           Page number or numbers (use `--' to separate a range)
  20430. +    publisher
  20431. +           Publisher name
  20432. +    school
  20433. +           School name (for theses)
  20434. +    series
  20435. +           The name of a series or set of books.
  20436. +           An individual book will will also have it's own title
  20437. +    title
  20438. +           The title of the thing being referenced
  20439. +    type
  20440. +           Type of a technical report (e.g., "Research Note") to be used
  20441. +           instead of the default "Technical Report"
  20442. +    volume
  20443. +           Volume of a journal or multivolume work
  20444. +    year
  20445. +           Year---should contain only numerals
  20446. +---------------------------------------------------------
  20447. +Entry to this mode calls the value of bibtex-mode-hook if that value is
  20448. +non-nil.Fblackbox
  20449. +Play blackbox.  Optional prefix argument is the number of balls;
  20450. +the default is 4.
  20451. +
  20452. +What is blackbox?
  20453. +
  20454. +Blackbox is a game of hide and seek played on an 8 by 8 grid (the
  20455. +Blackbox).  Your opponent (Emacs, in this case) has hidden several
  20456. +balls (usually 4) within this box.  By shooting rays into the box and
  20457. +observing where they emerge it is possible to deduce the positions of
  20458. +the hidden balls.  The fewer rays you use to find the balls, the lower
  20459. +your score.
  20460. +
  20461. +Overview of play:
  20462. +
  20463. +\<blackbox-mode-map>To play blackbox, type \[blackbox].  An optional prefix argument
  20464. +specifies the number of balls to be hidden in the box; the default is
  20465. +four.
  20466. +
  20467. +The cursor can be moved around the box with the standard cursor
  20468. +movement keys.
  20469. +
  20470. +To shoot a ray, move the cursor to the edge of the box and press SPC.
  20471. +The result will be determined and the playfield updated.
  20472. +
  20473. +You may place or remove balls in the box by moving the cursor into the
  20474. +box and pressing \[bb-romp].
  20475. +
  20476. +When you think the configuration of balls you have placed is correct,
  20477. +press \[bb-done].  You will be informed whether you are correct or
  20478. +not, and be given your score.  Your score is the number of letters and
  20479. +numbers around the outside of the box plus five for each incorrectly
  20480. +placed ball.  If you placed any balls incorrectly, they will be
  20481. +indicated with `x', and their actual positions indicated with `o'.
  20482. +
  20483. +Details:
  20484. +
  20485. +There are three possible outcomes for each ray you send into the box:
  20486. +
  20487. +    Detour: the ray is deflected and emerges somewhere other than
  20488. +        where you sent it in.  On the playfield, detours are
  20489. +        denoted by matching pairs of numbers -- one where the
  20490. +        ray went in, and the other where it came out.
  20491. +
  20492. +    Reflection: the ray is reflected and emerges in the same place
  20493. +        it was sent in.  On the playfield, reflections are
  20494. +        denoted by the letter `R'.
  20495. +
  20496. +    Hit:    the ray strikes a ball directly and is absorbed.  It does
  20497. +        not emerge from the box.  On the playfield, hits are
  20498. +        denoted by the letter `H'.
  20499. +
  20500. +The rules for how balls deflect rays are simple and are best shown by
  20501. +example.
  20502. +
  20503. +As a ray approaches a ball it is deflected ninety degrees.  Rays can
  20504. +be deflected multiple times.  In the diagrams below, the dashes
  20505. +represent empty box locations and the letter `O' represents a ball.
  20506. +The entrance and exit points of each ray are marked with numbers as
  20507. +described under "Detour" above.  Note that the entrance and exit
  20508. +points are always interchangeable.  `*' denotes the path taken by the
  20509. +ray.
  20510. +
  20511. +Note carefully the relative positions of the ball and the ninety
  20512. +degree deflection it causes.
  20513. +
  20514. +    1                                            
  20515. +  - * - - - - - -         - - - - - - - -         - - - - - - - -       
  20516. +  - * - - - - - -         - - - - - - - -         - - - - - - - -       
  20517. +1 * * - - - - - -         - - - - - - - -         - O - - - - O -       
  20518. +  - - O - - - - -         - - O - - - - -         - - * * * * - -
  20519. +  - - - - - - - -         - - - * * * * * 2     3 * * * - - * - -
  20520. +  - - - - - - - -         - - - * - - - -         - - - O - * - -      
  20521. +  - - - - - - - -         - - - * - - - -         - - - - * * - -       
  20522. +  - - - - - - - -         - - - * - - - -         - - - - * - O -       
  20523. +                                2                         3
  20524. +
  20525. +As mentioned above, a reflection occurs when a ray emerges from the same point
  20526. +it was sent in.  This can happen in several ways:
  20527. +
  20528. +                                                                           
  20529. +  - - - - - - - -         - - - - - - - -          - - - - - - - -
  20530. +  - - - - O - - -         - - O - O - - -          - - - - - - - -
  20531. +R * * * * - - - -         - - - * - - - -          O - - - - - - -
  20532. +  - - - - O - - -         - - - * - - - -        R - - - - - - - -
  20533. +  - - - - - - - -         - - - * - - - -          - - - - - - - -
  20534. +  - - - - - - - -         - - - * - - - -          - - - - - - - -
  20535. +  - - - - - - - -       R * * * * - - - -          - - - - - - - -
  20536. +  - - - - - - - -         - - - - O - - -          - - - - - - - -
  20537. +
  20538. +In the first example, the ray is deflected downwards by the upper
  20539. +ball, then left by the lower ball, and finally retraces its path to
  20540. +its point of origin.  The second example is similar.  The third
  20541. +example is a bit anomalous but can be rationalized by realizing the
  20542. +ray never gets a chance to get into the box.  Alternatively, the ray
  20543. +can be thought of as being deflected downwards and immediately
  20544. +emerging from the box.
  20545. +
  20546. +A hit occurs when a ray runs straight into a ball:
  20547. +
  20548. +  - - - - - - - -         - - - - - - - -          - - - - - - - -
  20549. +  - - - - - - - -         - - - - - - - -          - - - - O - - -
  20550. +  - - - - - - - -         - - - - O - - -        H * * * * - - - -
  20551. +  - - - - - - - -       H * * * * O - - -          - - - * - - - -
  20552. +  - - - - - - - -         - - - - O - - -          - - - O - - - -
  20553. +H * * * O - - - -         - - - - - - - -          - - - - - - - -
  20554. +  - - - - - - - -         - - - - - - - -          - - - - - - - -
  20555. +  - - - - - - - -         - - - - - - - -          - - - - - - - -
  20556. +
  20557. +Be sure to compare the second example of a hit with the first example of
  20558. +a reflection.Vbookmark-map
  20559. +Keymap containing bindings to bookmark functions.
  20560. +It is not bound to any key by default: to bind it
  20561. +so that you have a bookmark prefix, just use `global-set-key' and bind a
  20562. +key of your choice to `bookmark-map'.  All interactive bookmark
  20563. +functions have a binding in this keymap.Fbookmark-set
  20564. +Set a bookmark named NAME inside a file.  
  20565. +With prefix arg, will not overwrite a bookmark that has the same name
  20566. +as NAME if such a bookmark already exists, but instead will "push"
  20567. +the new bookmark onto the bookmark alist.  Thus the most recently set
  20568. +bookmark with name NAME would be the one in effect at any given time,
  20569. +but the others are still there, should you decide to delete the most
  20570. +recent one.
  20571. +
  20572. +To yank words from the text of the buffer and use them as part of the
  20573. +bookmark name, type C-w while setting a bookmark.  Successive C-w's
  20574. +yank successive words.
  20575. +
  20576. +Typing C-v inserts the name of the current file being visited. Typing
  20577. +C-u inserts the name of the last bookmark used in the buffer (as an
  20578. +aid in using a single bookmark name to track your progress through a
  20579. +large file).  If no bookmark was used, then C-u behaves like C-v and
  20580. +inserts the name of the file being visited.
  20581. +
  20582. +Use \[bookmark-delete] to remove bookmarks (you give it a name,
  20583. +and it removes only the first instance of a bookmark with that name from
  20584. +the list of bookmarks.)Fbookmark-jump
  20585. +Jump to bookmark BOOKMARK (a point in some file).  
  20586. +You may have a problem using this function if the value of variable
  20587. +`bookmark-alist' is nil.  If that happens, you need to load in some
  20588. +bookmarks.  See help on function `bookmark-load' for more about
  20589. +this.
  20590. +
  20591. +If the file pointed to by BOOKMARK no longer exists, you will be asked
  20592. +if you wish to give the bookmark a new location, and bookmark-jump
  20593. +will then jump to the new location, as well as recording it in place
  20594. +of the old one in the permanent bookmark record.Fbookmark-relocate
  20595. +Relocate BOOKMARK -- prompts for a filename, and makes an already
  20596. +existing bookmark point to that file, instead of the one it used to
  20597. +point at.  Useful when a file has been renamed after a bookmark was
  20598. +set in it.Fbookmark-locate
  20599. +Insert the name of the file associated with BOOKMARK.
  20600. +Optional second arg NO-INSERTION means merely return the filename as a
  20601. +string.Fbookmark-rename
  20602. +Change the name of OLD-BOOKMARK to NEWNAME.  
  20603. +If called from keyboard, prompts for OLD-BOOKMARK and NEWNAME.
  20604. +If called from menubar, OLD-BOOKMARK is selected from a menu, and
  20605. +prompts for NEWNAME. 
  20606. +If called from Lisp, prompts for NEWNAME if only OLD-BOOKMARK was
  20607. +passed as an argument.  If called with two strings, then no prompting
  20608. +is done.  You must pass at least OLD-BOOKMARK when calling from Lisp.
  20609. +
  20610. +While you are entering the new name, consecutive C-w's insert
  20611. +consectutive words from the text of the buffer into the new bookmark
  20612. +name, and C-v inserts the name of the file.Fbookmark-insert
  20613. +Insert the text of the file pointed to by bookmark BOOKMARK.  
  20614. +You may have a problem using this function if the value of variable
  20615. +`bookmark-alist' is nil.  If that happens, you need to load in some
  20616. +bookmarks.  See help on function `bookmark-load' for more about
  20617. +this.Fbookmark-delete
  20618. +Delete the bookmark named NAME from the bookmark list.  
  20619. +Removes only the first instance of a bookmark with that name.  If
  20620. +there are one or more other bookmarks with the same name, they will
  20621. +not be deleted.  Defaults to the "current" bookmark (that is, the
  20622. +one most recently used in this file, if any).Fbookmark-write
  20623. +Write bookmarks to a file (for which the user will be prompted
  20624. +interactively).  Don't use this in Lisp programs; use bookmark-save
  20625. +instead.Fbookmark-save
  20626. +Save currently defined bookmarks.
  20627. +Saves by default in the file defined by the variable
  20628. +`bookmark-file'.  With a prefix arg, save it in file FILE.
  20629. +
  20630. +If you are calling this from Lisp, the two arguments are PREFIX-ARG
  20631. +and FILE, and if you just want it to write to the default file, then
  20632. +pass no arguments.  Or pass in nil and FILE, and it will save in FILE
  20633. +instead.  If you pass in one argument, and it is non-nil, then the
  20634. +user will be interactively queried for a file to save in.
  20635. +
  20636. +When you want to load in the bookmarks from a file, use
  20637. +`bookmark-load', \[bookmark-load].  That function will prompt you
  20638. +for a file, defaulting to the file defined by variable
  20639. +`bookmark-file'.Fbookmark-load
  20640. +Load bookmarks from FILE (which must be in bookmark format).
  20641. +Appends loaded bookmarks to the front of the list of bookmarks.  If
  20642. +optional second argument REVERT is non-nil, existing bookmarks are
  20643. +destroyed.  Optional third arg NO-MSG means don't display any messages
  20644. +while loading.
  20645. +
  20646. +If you load a file that doesn't contain a proper bookmark alist, you
  20647. +will corrupt Emacs's bookmark list.  Generally, you should only load
  20648. +in files that were created with the bookmark functions in the first
  20649. +place.  Your own personal bookmark file, `~/.emacs-bkmrks', is
  20650. +maintained automatically by Emacs; you shouldn't need to load it
  20651. +explicitly.Flist-bookmarks
  20652. +Display a list of existing bookmarks.
  20653. +The list is displayed in a buffer named `*Bookmark List*'.
  20654. +The leftmost column displays a D if the bookmark is flagged for
  20655. +deletion, or > if it is flagged for displaying.Fbookmark-menu-bar-insert
  20656. +Insert the text of the file pointed to by bookmark BOOKMARK.  
  20657. +You may have a problem using this function if the value of variable
  20658. +`bookmark-alist' is nil.  If that happens, you need to load in some
  20659. +bookmarks.  See help on function `bookmark-load' for more about
  20660. +this.Fbookmark-menu-bar-jump
  20661. +Jump to bookmark BOOKMARK (a point in some file).  
  20662. +You may have a problem using this function if the value of variable
  20663. +`bookmark-alist' is nil.  If that happens, you need to load in some
  20664. +bookmarks.  See help on function `bookmark-load' for more about
  20665. +this.Fbookmark-menu-bar-locate
  20666. +Insert the name of the  file associated with BOOKMARK. 
  20667. +(This is not the same as the contents of that file).Fbookmark-menu-bar-rename
  20668. +Change the name of OLD-BOOKMARK to NEWNAME.  
  20669. +If called from keyboard, prompts for OLD-BOOKMARK and NEWNAME.
  20670. +If called from menubar, OLD-BOOKMARK is selected from a menu, and
  20671. +prompts for NEWNAME. 
  20672. +If called from Lisp, prompts for NEWNAME if only OLD-BOOKMARK was
  20673. +passed as an argument.  If called with two strings, then no prompting
  20674. +is done.  You must pass at least OLD-BOOKMARK when calling from Lisp.
  20675. +
  20676. +While you are entering the new name, consecutive C-w's insert
  20677. +consectutive words from the text of the buffer into the new bookmark
  20678. +name, and C-v inserts the name of the file.Fbookmark-menu-bar-delete
  20679. +Delete the bookmark named NAME from the bookmark list.  
  20680. +Removes only the first instance of a bookmark with that name.  If
  20681. +there are one or more other bookmarks with the same name, they will
  20682. +not be deleted.  Defaults to the "current" bookmark (that is, the
  20683. +one most recently used in this file, if any).Fbyte-recompile-directory
  20684. +Recompile every `.el' file in DIRECTORY that needs recompilation.
  20685. +This is if a `.elc' file exists but is older than the `.el' file.
  20686. +Files in subdirectories of DIRECTORY are processed also.
  20687. +
  20688. +If the `.elc' file does not exist, normally the `.el' file is *not* compiled.
  20689. +But a prefix argument (optional second arg) means ask user,
  20690. +for each such `.el' file, whether to compile it.  Prefix argument 0 means
  20691. +don't ask and compile the file anyway.
  20692. +
  20693. +A nonzero prefix argument also means ask about each subdirectory.Fbyte-compile-file
  20694. +Compile a file of Lisp code named FILENAME into a file of byte code.
  20695. +The output file's name is made by appending `c' to the end of FILENAME.
  20696. +With prefix arg (noninteractively: 2nd arg), load the file after compiling.Fcompile-defun
  20697. +Compile and evaluate the current top-level form.
  20698. +Print the result in the minibuffer.
  20699. +With argument, insert value in current buffer after the form.Fbyte-compile
  20700. +If FORM is a symbol, byte-compile its function definition.
  20701. +If FORM is a lambda or a macro, byte-compile it as a function.Fdisplay-call-tree
  20702. +Display a call graph of a specified file.
  20703. +This lists which functions have been called, what functions called
  20704. +them, and what functions they call.  The list includes all functions
  20705. +whose definitions have been compiled in this Emacs session, as well as
  20706. +all functions called by those functions.
  20707. +
  20708. +The call graph does not include macros, inline functions, or
  20709. +primitives that the byte-code interpreter knows about directly (eq,
  20710. +cons, etc.).
  20711. +
  20712. +The call tree also lists those functions which are not known to be called
  20713. +(that is, to which no calls have been compiled), and which cannot be
  20714. +invoked interactively.Fbatch-byte-compile
  20715. +Run `byte-compile-file' on the files remaining on the command line.
  20716. +Use this from the command line, with `-batch';
  20717. +it won't work in an interactive Emacs.
  20718. +Each file is processed even if an error occurred previously.
  20719. +For example, invoke "emacs -batch -f batch-byte-compile $emacs/ ~/*.el"Fbatch-byte-recompile-directory
  20720. +Runs `byte-recompile-directory' on the dirs remaining on the command line.
  20721. +Must be used only with `-batch', and kills Emacs on completion.
  20722. +For example, invoke `emacs -batch -f batch-byte-recompile-directory .'.Vcalendar-week-start-day
  20723. +*The day of the week on which a week in the calendar begins.
  20724. +0 means Sunday (default), 1 means Monday, and so on.Vview-diary-entries-initially
  20725. +*Non-nil means display current date's diary entries on entry.
  20726. +The diary is displayed in another window when the calendar is first displayed,
  20727. +if the current date is visible.  The number of days of diary entries displayed
  20728. +is governed by the variable `number-of-diary-entries'.Vnumber-of-diary-entries
  20729. +*Specifies how many days of diary entries are to be displayed initially.
  20730. +This variable affects the diary display when the command M-x diary is used,
  20731. +or if the value of the variable `view-diary-entries-initially' is t.  For
  20732. +example, if the default value 1 is used, then only the current day's diary
  20733. +entries will be displayed.  If the value 2 is used, then both the current
  20734. +day's and the next day's entries will be displayed.
  20735. +
  20736. +The value can also be a vector such as [0 2 2 2 2 4 1]; this value
  20737. +says to display no diary entries on Sunday, the display the entries
  20738. +for the current date and the day after on Monday through Thursday,
  20739. +display Friday through Monday's entries on Friday, and display only
  20740. +Saturday's entries on Saturday.
  20741. +
  20742. +This variable does not affect the diary display with the `d' command
  20743. +from the calendar; in that case, the prefix argument controls the
  20744. +number of days of diary entries displayed.Vmark-diary-entries-in-calendar
  20745. +*Non-nil means mark dates with diary entries, in the calendar window.
  20746. +The marking symbol is specified by the variable `diary-entry-marker'.Vview-calendar-holidays-initially
  20747. +*Non-nil means display holidays for current three month period on entry.
  20748. +The holidays are displayed in another window when the calendar is first
  20749. +displayed.Vmark-holidays-in-calendar
  20750. +*Non-nil means mark dates of holidays in the calendar window.
  20751. +The marking symbol is specified by the variable `calendar-holiday-marker'.Vall-hebrew-calendar-holidays
  20752. +*If nil, show only major holidays from the Hebrew calendar.
  20753. +This means only those Jewish holidays that appear on secular calendars.
  20754. +
  20755. +If t, show all the holidays that would appear in a complete Hebrew calendar.Vall-christian-calendar-holidays
  20756. +*If nil, show only major holidays from the Christian calendar.
  20757. +This means only those Christian holidays that appear on secular calendars.
  20758. +
  20759. +If t, show all the holidays that would appear in a complete Christian
  20760. +calendar.Vall-islamic-calendar-holidays
  20761. +*If nil, show only major holidays from the Islamic calendar.
  20762. +This means only those Islamic holidays that appear on secular calendars.
  20763. +
  20764. +If t, show all the holidays that would appear in a complete Islamic
  20765. +calendar.Vcalendar-load-hook
  20766. +*List of functions to be called after the calendar is first loaded.
  20767. +This is the place to add key bindings to `calendar-mode-map'.Vinitial-calendar-window-hook
  20768. +*List of functions to be called when the calendar window is first opened.
  20769. +The functions invoked are called after the calendar window is opened, but
  20770. +once opened is never called again.  Leaving the calendar with the `q' command
  20771. +and reentering it will cause these functions to be called again.Vtoday-visible-calendar-hook
  20772. +*List of functions called whenever the current date is visible.
  20773. +This can be used, for example, to replace today's date with asterisks; a
  20774. +function `calendar-star-date' is included for this purpose:
  20775. +    (setq today-visible-calendar-hook 'calendar-star-date)
  20776. +It can also be used to mark the current date with `calendar-today-marker';
  20777. +a function is also provided for this:
  20778. +    (setq today-visible-calendar-hook 'calendar-mark-today)
  20779. +
  20780. +The corresponding variable `today-invisible-calendar-hook' is the list of
  20781. +functions called when the calendar function was called when the current
  20782. +date is not visible in the window.
  20783. +
  20784. +Other than the use of the provided functions, the changing of any
  20785. +characters in the calendar buffer by the hooks may cause the failure of the
  20786. +functions that move by days and weeks.Vtoday-invisible-calendar-hook
  20787. +*List of functions called whenever the current date is not visible.
  20788. +
  20789. +The corresponding variable `today-visible-calendar-hook' is the list of
  20790. +functions called when the calendar function was called when the current
  20791. +date is visible in the window.
  20792. +
  20793. +Other than the use of the provided functions, the changing of any
  20794. +characters in the calendar buffer by the hooks may cause the failure of the
  20795. +functions that move by days and weeks.Vdiary-file
  20796. +*Name of the file in which one's personal diary of dates is kept.
  20797. +
  20798. +The file's entries are lines in any of the forms
  20799. +
  20800. +            MONTH/DAY
  20801. +            MONTH/DAY/YEAR
  20802. +            MONTHNAME DAY
  20803. +            MONTHNAME DAY, YEAR
  20804. +            DAYNAME
  20805. +
  20806. +at the beginning of the line; the remainder of the line is the diary entry
  20807. +string for that date.  MONTH and DAY are one or two digit numbers, YEAR is
  20808. +a number and may be written in full or abbreviated to the final two digits.
  20809. +If the date does not contain a year, it is generic and applies to any year.
  20810. +DAYNAME entries apply to any date on which is on that day of the week.
  20811. +MONTHNAME and DAYNAME can be spelled in full, abbreviated to three
  20812. +characters (with or without a period), capitalized or not.  Any of DAY,
  20813. +MONTH, or MONTHNAME, YEAR can be `*' which matches any day, month, or year,
  20814. +respectively.
  20815. +
  20816. +The European style (in which the day precedes the month) can be used
  20817. +instead, if you execute `european-calendar' when in the calendar, or set
  20818. +`european-calendar-style' to t in your .emacs file.  The European forms are
  20819. +
  20820. +            DAY/MONTH
  20821. +            DAY/MONTH/YEAR
  20822. +            DAY MONTHNAME
  20823. +            DAY MONTHNAME YEAR
  20824. +            DAYNAME
  20825. +
  20826. +To revert to the default American style from the European style, execute
  20827. +`american-calendar' in the calendar.
  20828. +
  20829. +A diary entry can be preceded by the character
  20830. +`diary-nonmarking-symbol' (ordinarily `&') to make that entry
  20831. +nonmarking--that is, it will not be marked on dates in the calendar
  20832. +window but will appear in a diary window.
  20833. +
  20834. +Multiline diary entries are made by indenting lines after the first with
  20835. +either a TAB or one or more spaces.
  20836. +
  20837. +Lines not in one the above formats are ignored.  Here are some sample diary
  20838. +entries (in the default American style):
  20839. +
  20840. +     12/22/1988 Twentieth wedding anniversary!!
  20841. +     &1/1. Happy New Year!
  20842. +     10/22 Ruth's birthday.
  20843. +     21: Payday
  20844. +     Tuesday--weekly meeting with grad students at 10am
  20845. +              Supowit, Shen, Bitner, and Kapoor to attend.
  20846. +     1/13/89 Friday the thirteenth!!
  20847. +     &thu 4pm squash game with Lloyd.
  20848. +     mar 16 Dad's birthday
  20849. +     April 15, 1989 Income tax due.
  20850. +     &* 15 time cards due.
  20851. +
  20852. +If the first line of a diary entry consists only of the date or day name with
  20853. +no trailing blanks or punctuation, then that line is not displayed in the
  20854. +diary window; only the continuation lines is shown.  For example, the
  20855. +single diary entry
  20856. +
  20857. +     02/11/1989
  20858. +      Bill Blattner visits Princeton today
  20859. +      2pm Cognitive Studies Committee meeting
  20860. +      2:30-5:30 Lizzie at Lawrenceville for `Group Initiative'
  20861. +      4:00pm Jamie Tappenden
  20862. +      7:30pm Dinner at George and Ed's for Alan Ryan
  20863. +      7:30-10:00pm dance at Stewart Country Day School
  20864. +
  20865. +will appear in the diary window without the date line at the beginning.  This
  20866. +facility allows the diary window to look neater, but can cause confusion if
  20867. +used with more than one day's entries displayed.
  20868. +
  20869. +Diary entries can be based on Lisp sexps.  For example, the diary entry
  20870. +
  20871. +      %%(diary-block 11 1 1990 11 10 1990) Vacation
  20872. +
  20873. +causes the diary entry "Vacation" to appear from November 1 through November
  20874. +10, 1990.  Other functions available are `diary-float', `diary-anniversary',
  20875. +`diary-cyclic', `diary-day-of-year', `diary-iso-date', `diary-french-date',
  20876. +`diary-hebrew-date', `diary-islamic-date', `diary-mayan-date',
  20877. +`diary-yahrzeit', `diary-sunrise-sunset', `diary-phases-of-moon',
  20878. +`diary-parasha', `diary-omer', `diary-rosh-hodesh', and
  20879. +`diary-sabbath-candles'.  See the documentation for the function
  20880. +`list-sexp-diary-entries' for more details.
  20881. +
  20882. +Diary entries based on the Hebrew and/or the Islamic calendar are also
  20883. +possible, but because these are somewhat slow, they are ignored
  20884. +unless you set the `nongregorian-diary-listing-hook' and the
  20885. +`nongregorian-diary-marking-hook' appropriately.  See the documentation
  20886. +for these functions for details.
  20887. +
  20888. +Diary files can contain directives to include the contents of other files; for
  20889. +details, see the documentation for the variable `list-diary-entries-hook'.Vdiary-nonmarking-symbol
  20890. +*Symbol indicating that a diary entry is not to be marked in the calendar.Vhebrew-diary-entry-symbol
  20891. +*Symbol indicating a diary entry according to the Hebrew calendar.Vislamic-diary-entry-symbol
  20892. +*Symbol indicating a diary entry according to the Islamic calendar.Vdiary-include-string
  20893. +*The string indicating inclusion of another file of diary entries.
  20894. +See the documentation for the function `include-other-diary-files'.Vsexp-diary-entry-symbol
  20895. +*The string used to indicate a sexp diary entry in diary-file.
  20896. +See the documentation for the function `list-sexp-diary-entries'.Vabbreviated-calendar-year
  20897. +*Interpret a two-digit year DD in a diary entry as either 19DD or 20DD.
  20898. +For the Gregorian calendar; similarly for the Hebrew and Islamic calendars.
  20899. +If this variable is nil, years must be written in full.Veuropean-calendar-style
  20900. +*Use the European style of dates in the diary and in any displays.
  20901. +If this variable is t, a date 1/2/1990 would be interpreted as February 1,
  20902. +1990.  The accepted European date styles are
  20903. +
  20904. +            DAY/MONTH
  20905. +            DAY/MONTH/YEAR
  20906. +            DAY MONTHNAME
  20907. +            DAY MONTHNAME YEAR
  20908. +            DAYNAME
  20909. +
  20910. +Names can be capitalized or not, written in full, or abbreviated to three
  20911. +characters with or without a period.Vamerican-date-diary-pattern
  20912. +*List of pseudo-patterns describing the American patterns of date used.
  20913. +See the documentation of `diary-date-forms' for an explanation.Veuropean-date-diary-pattern
  20914. +*List of pseudo-patterns describing the European patterns of date used.
  20915. +See the documentation of `diary-date-forms' for an explanation.Veuropean-calendar-display-form
  20916. +*Pseudo-pattern governing the way a date appears in the European style.
  20917. +See the documentation of calendar-date-display-form for an explanation.Vamerican-calendar-display-form
  20918. +*Pseudo-pattern governing the way a date appears in the American style.
  20919. +See the documentation of `calendar-date-display-form' for an explanation.Vprint-diary-entries-hook
  20920. +*List of functions called after a temporary diary buffer is prepared.
  20921. +The buffer shows only the diary entries currently visible in the diary
  20922. +buffer.  The default just does the printing.  Other uses might include, for
  20923. +example, rearranging the lines into order by day and time, saving the buffer
  20924. +instead of deleting it, or changing the function used to do the printing.Vlist-diary-entries-hook
  20925. +*List of functions called after diary file is culled for relevant entries.
  20926. +It is to be used for diary entries that are not found in the diary file.
  20927. +
  20928. +A function `include-other-diary-files' is provided for use as the value of
  20929. +this hook.  This function enables you to use shared diary files together
  20930. +with your own.  The files included are specified in the diary file by lines
  20931. +of the form
  20932. +
  20933. +        #include "filename"
  20934. +
  20935. +This is recursive; that is, #include directives in files thus included are
  20936. +obeyed.  You can change the "#include" to some other string by changing
  20937. +the variable `diary-include-string'.  When you use `include-other-diary-files'
  20938. +as part of the list-diary-entries-hook, you will probably also want to use the
  20939. +function `mark-included-diary-files' as part of `mark-diary-entries-hook'.
  20940. +
  20941. +For example, you could use
  20942. +
  20943. +     (setq list-diary-entries-hook
  20944. +       '(include-other-diary-files sort-diary-entries))
  20945. +     (setq diary-display-hook 'fancy-diary-display)
  20946. +
  20947. +in your `.emacs' file to cause the fancy diary buffer to be displayed with
  20948. +diary entries from various included files, each day's entries sorted into
  20949. +lexicographic order.Vdiary-hook
  20950. +*List of functions called after the display of the diary.
  20951. +Can be used for appointment notification.Vdiary-display-hook
  20952. +*List of functions that handle the display of the diary.
  20953. +If nil (the default), `simple-diary-display' is used.  Use `ignore' for no
  20954. +diary display.
  20955. +
  20956. +Ordinarily, this just displays the diary buffer (with holidays indicated in
  20957. +the mode line), if there are any relevant entries.  At the time these
  20958. +functions are called, the variable `diary-entries-list' is a list, in order
  20959. +by date, of all relevant diary entries in the form of ((MONTH DAY YEAR)
  20960. +STRING), where string is the diary entry for the given date.  This can be
  20961. +used, for example, a different buffer for display (perhaps combined with
  20962. +holidays), or produce hard copy output.
  20963. +
  20964. +A function `fancy-diary-display' is provided as an alternative
  20965. +choice for this hook; this function prepares a special noneditable diary
  20966. +buffer with the relevant diary entries that has neat day-by-day arrangement
  20967. +with headings.  The fancy diary buffer will show the holidays unless the
  20968. +variable `holidays-in-diary-buffer' is set to nil.  Ordinarily, the fancy
  20969. +diary buffer will not show days for which there are no diary entries, even
  20970. +if that day is a holiday; if you want such days to be shown in the fancy
  20971. +diary buffer, set the variable `diary-list-include-blanks' to t.Vnongregorian-diary-listing-hook
  20972. +*List of functions called for listing diary file and included files.
  20973. +As the files are processed for diary entries, these functions are used to cull
  20974. +relevant entries.  You can use either or both of `list-hebrew-diary-entries'
  20975. +and `list-islamic-diary-entries'.  The documentation for these functions
  20976. +describes the style of such diary entries.Vmark-diary-entries-hook
  20977. +*List of functions called after marking diary entries in the calendar.
  20978. +
  20979. +A function `mark-included-diary-files' is also provided for use as the
  20980. +mark-diary-entries-hook; it enables you to use shared diary files together
  20981. +with your own.  The files included are specified in the diary file by lines
  20982. +of the form
  20983. +        #include "filename"
  20984. +This is recursive; that is, #include directives in files thus included are
  20985. +obeyed.  You can change the "#include" to some other string by changing the
  20986. +variable `diary-include-string'.  When you use `mark-included-diary-files' as
  20987. +part of the mark-diary-entries-hook, you will probably also want to use the
  20988. +function `include-other-diary-files' as part of `list-diary-entries-hook'.Vnongregorian-diary-marking-hook
  20989. +*List of functions called for marking diary file and included files.
  20990. +As the files are processed for diary entries, these functions are used to cull
  20991. +relevant entries.  You can use either or both of `mark-hebrew-diary-entries'
  20992. +and `mark-islamic-diary-entries'.  The documentation for these functions
  20993. +describes the style of such diary entries.Vdiary-list-include-blanks
  20994. +*If nil, do not include days with no diary entry in the list of diary entries.
  20995. +Such days will then not be shown in the the fancy diary buffer, even if they
  20996. +are holidays.Vholidays-in-diary-buffer
  20997. +*Non-nil means include holidays in the diary display.
  20998. +The holidays appear in the mode line of the diary buffer, or in the
  20999. +fancy diary buffer next to the date.  This slows down the diary functions
  21000. +somewhat; setting it to nil makes the diary display faster.Vgeneral-holidays
  21001. +*General holidays.  Default value is for the United States.
  21002. +See the documentation for `calendar-holidays' for details.Vlocal-holidays
  21003. +*Local holidays.
  21004. +See the documentation for `calendar-holidays' for details.Vother-holidays
  21005. +*User defined holidays.
  21006. +See the documentation for `calendar-holidays' for details.Vhebrew-holidays
  21007. +*Jewish holidays.
  21008. +See the documentation for `calendar-holidays' for details.Vchristian-holidays
  21009. +*Christian holidays.
  21010. +See the documentation for `calendar-holidays' for details.Vislamic-holidays
  21011. +*Islamic holidays.
  21012. +See the documentation for `calendar-holidays' for details.Vsolar-holidays
  21013. +*Sun-related holidays.
  21014. +See the documentation for `calendar-holidays' for details.Fcalendar
  21015. +Display a three-month calendar in another window.
  21016. +The three months appear side by side, with the current month in the middle
  21017. +surrounded by the previous and next months.  The cursor is put on today's date.
  21018. +
  21019. +If called with an optional prefix argument, prompts for month and year.
  21020. +
  21021. +This function is suitable for execution in a .emacs file; appropriate setting
  21022. +of the variable `view-diary-entries-initially' will cause the diary entries for
  21023. +the current date to be displayed in another window.  The value of the variable
  21024. +`number-of-diary-entries' controls the number of days of diary entries
  21025. +displayed upon initial display of the calendar.
  21026. +
  21027. +An optional prefix argument ARG causes the calendar displayed to be ARG
  21028. +months in the future if ARG is positive or in the past if ARG is negative;
  21029. +in this case the cursor goes on the first day of the month.
  21030. +
  21031. +Once in the calendar window, future or past months can be moved into view.
  21032. +Arbitrary months can be displayed, or the calendar can be scrolled forward
  21033. +or backward.
  21034. +
  21035. +The cursor can be moved forward or backward by one day, one week, one month,
  21036. +or one year.  All of these commands take prefix arguments which, when negative,
  21037. +cause movement in the opposite direction.  For convenience, the digit keys
  21038. +and the minus sign are automatically prefixes.  The window is replotted as
  21039. +necessary to display the desired date.
  21040. +
  21041. +Diary entries can be marked on the calendar or displayed in another window.
  21042. +
  21043. +Use M-x describe-mode for details of the key bindings in the calendar window.
  21044. +
  21045. +The Gregorian calendar is assumed.
  21046. +
  21047. +After loading the calendar, the hooks given by the variable
  21048. +`calendar-load-hook' are run.  This the place to add key bindings to the
  21049. +calendar-mode-map.
  21050. +
  21051. +After preparing the calendar window initially, the hooks given by the variable
  21052. +`initial-calendar-window-hook' are run.
  21053. +
  21054. +The hooks given by the variable `today-visible-calendar-hook' are run
  21055. +everytime the calendar window gets scrolled, if the current date is visible
  21056. +in the window.  If it is not visible, the hooks given by the variable
  21057. +`today-invisible-calendar-hook' are run.  Thus, for example, setting
  21058. +`today-visible-calendar-hook' to 'calendar-star-date will cause today's date
  21059. +to be replaced by asterisks to highlight it whenever it is in the window.Flist-yahrzeit-dates
  21060. +List Yahrzeit dates for *Gregorian* DEATH-DATE from START-YEAR to END-YEAR.
  21061. +When called interactively from the calendar window, the date of death is taken
  21062. +from the cursor position.Fdescribe-buffer-case-table
  21063. +Describe the case table of the current buffer.Fset-case-syntax-delims
  21064. +Make characters L and R a matching pair of non-case-converting delimiters.
  21065. +This sets the entries for L and R in TABLE, which is a string
  21066. +that will be used as the downcase part of a case table.
  21067. +It also modifies `standard-syntax-table' to
  21068. +indicate left and right delimiters.Fset-case-syntax-pair
  21069. +Make characters UC and LC a pair of inter-case-converting letters.
  21070. +This sets the entries for characters UC and LC in TABLE, which is a string
  21071. +that will be used as the downcase part of a case table.
  21072. +It also modifies `standard-syntax-table' to give them the syntax of
  21073. +word constituents.Fset-case-syntax
  21074. +Make characters C case-invariant with syntax SYNTAX.
  21075. +This sets the entries for character C in TABLE, which is a string
  21076. +that will be used as the downcase part of a case table.
  21077. +It also modifies `standard-syntax-table'.
  21078. +SYNTAX should be " ", "w", "." or "_".Frepeat-matching-complex-command
  21079. +Edit and re-evaluate complex command with name matching PATTERN.
  21080. +Matching occurrences are displayed, most recent first, until you select
  21081. +a form for evaluation.  If PATTERN is empty (or nil), every form in the
  21082. +command history is offered.  The form is placed in the minibuffer for
  21083. +editing and the result is evaluated.Flist-command-history
  21084. +List history of commands typed to minibuffer.
  21085. +The number of commands listed is controlled by `list-command-history-max'.
  21086. +Calls value of `list-command-history-filter' (if non-nil) on each history
  21087. +element to judge if that element should be excluded from the list.
  21088. +
  21089. +The buffer is left in Command History mode.Fcommand-history-mode
  21090. +Major mode for examining commands from `command-history'.
  21091. +The number of commands listed is controlled by `list-command-history-max'.
  21092. +The command history is filtered by `list-command-history-filter' if non-nil.
  21093. +Use \<command-history-map>\[command-history-repeat] to repeat the command on the current line.
  21094. +
  21095. +Otherwise much like Emacs-Lisp Mode except that there is no self-insertion
  21096. +and digits provide prefix arguments.  Tab does not indent.
  21097. +\{command-history-map}
  21098. +Calls the value of `command-history-hook' if that is non-nil.
  21099. +The Command History listing is recomputed each time this mode is invoked.Fmake-comint
  21100. +Make a comint process NAME in a buffer, running PROGRAM.
  21101. +The name of the buffer is made by surrounding NAME with `*'s.
  21102. +If there is already a running process in that buffer, it is not restarted.
  21103. +Optional third arg STARTFILE is the name of a file to send the contents of to 
  21104. +the process.  Any more args are arguments to PROGRAM.Fcomint-run
  21105. +Run PROGRAM in a comint buffer and switch to it.
  21106. +The buffer name is made by surrounding the file name of PROGRAM with `*'s.
  21107. +The file name is used to make a symbol name, such as `comint-sh-hook', and any
  21108. +hooks on this symbol are run in the buffer.
  21109. +See `make-comint' and `comint-exec'.Fcompare-windows
  21110. +Compare text in current window with text in next window.
  21111. +Compares the text starting at point in each window,
  21112. +moving over text in each one as far as they match.
  21113. +
  21114. +A prefix arg means ignore changes in whitespace.
  21115. +The variable `compare-windows-whitespace' controls how whitespace is skipped.
  21116. +If `compare-ignore-case' is non-nil, changes in case are also ignored.Vcompilation-mode-hook
  21117. +*List of hook functions run by `compilation-mode' (see `run-hooks').Vcompilation-window-height
  21118. +*Number of lines in a compilation window.  If nil, use Emacs default.Vcompilation-buffer-name-function
  21119. +Function to compute the name of a compilation buffer.
  21120. +The function receives one argument, the name of the major mode of the
  21121. +compilation buffer.  It should return a string.
  21122. +nil means compute the name with `(concat "*" (downcase major-mode) "*")'.Vcompilation-finish-function
  21123. +*Function to call when a compilation process finishes.
  21124. +It is called with two arguments: the compilation buffer, and a string
  21125. +describing how the process finished.Vcompilation-search-path
  21126. +*List of directories to search for source files named in error messages.
  21127. +Elements should be directory names, not file names of directories.
  21128. +nil as an element means to try the default directory.Fcompile
  21129. +Compile the program including the current buffer.  Default: run `make'.
  21130. +Runs COMMAND, a shell command, in a separate process asynchronously
  21131. +with output going to the buffer `*compilation*'.
  21132. +
  21133. +You can then use the command \[next-error] to find the next error message
  21134. +and move to the source code that caused it.
  21135. +
  21136. +To run more than one compilation at once, start one and rename the
  21137. +`*compilation*' buffer to some other name with \[rename-buffer].
  21138. +Then start the next one.
  21139. +
  21140. +The name used for the buffer is actually whatever is returned by
  21141. +the function in `compilation-buffer-name-function', so you can set that
  21142. +to a function that generates a unique name.Fgrep
  21143. +Run grep, with user-specified args, and collect output in a buffer.
  21144. +While grep runs asynchronously, you can use the \[next-error] command
  21145. +to find the text that grep hits refer to.
  21146. +
  21147. +This command uses a special history list for its arguments, so you can
  21148. +easily repeat a grep command.Fcompilation-minor-mode
  21149. +Toggle compilation minor mode.
  21150. +With arg, turn compilation mode on if and only if arg is positive.
  21151. +See `compilation-mode'.Fnext-error
  21152. +Visit next compilation error message and corresponding source code.
  21153. +This operates on the output from the \[compile] command.
  21154. +If all preparsed error messages have been processed,
  21155. +the error message buffer is checked for new ones.
  21156. +
  21157. +A prefix arg specifies how many error messages to move;
  21158. +negative means move back to previous error messages.
  21159. +Just C-u as a prefix means reparse the error message buffer
  21160. +and start at the first error.
  21161. +
  21162. +\[next-error] normally applies to the most recent compilation started,
  21163. +but as long as you are in the middle of parsing errors from one compilation
  21164. +output buffer, you stay with that compilation output buffer.
  21165. +
  21166. +Use \[next-error] in a compilation output buffer to switch to
  21167. +processing errors from that compilation.
  21168. +
  21169. +See variables `compilation-parse-errors-function' and
  21170. +`compilation-error-regexp-alist' for customization ideas.Fcookie
  21171. +Return a random phrase from PHRASE-FILE.  When the phrase file
  21172. +is read in, display STARTMSG at beginning of load, ENDMSG at end.Fcookie-insert
  21173. +Insert random phrases from PHRASE-FILE; COUNT of them.  When the phrase file
  21174. +is read in, display STARTMSG at beginning of load, ENDMSG at end.Fcookie-snarf
  21175. +Reads in the PHRASE-FILE, returns it as a vector of strings.
  21176. +Emit STARTMSG and ENDMSG before and after.  Caches the result; second
  21177. +and subsequent calls on the same file won't go to disk.Fshuffle-vector
  21178. +Randomly permute the elements of VECTOR (all permutations equally likely)Fc++-mode
  21179. +Major mode for editing C++ code.  Very much like editing C code.
  21180. +Expression and list commands understand all C++ brackets.
  21181. +Tab at left margin indents for C++ code
  21182. +Comments are delimited with /* ... */ {or with // ... <newline>}
  21183. +Paragraphs are separated by blank lines only.
  21184. +Delete converts tabs to spaces as it moves back.
  21185. +\{c++-mode-map}
  21186. +Variables controlling indentation style:
  21187. + c-tab-always-indent
  21188. +    Non-nil means TAB in C mode should always reindent the current line,
  21189. +    regardless of where in the line point is when the TAB command is used.
  21190. +    Default is t.
  21191. + c-auto-newline
  21192. +    Non-nil means automatically newline before and after braces,
  21193. +    and after colons and semicolons, inserted in C code.
  21194. + c-indent-level
  21195. +    Indentation of C statements within surrounding block.
  21196. +    The surrounding block's indentation is the indentation
  21197. +    of the line on which the open-brace appears.
  21198. + c-continued-statement-offset
  21199. +    Extra indentation given to a substatement, such as the
  21200. +    then-clause of an if or body of a while.
  21201. + c-continued-brace-offset
  21202. +    Extra indentation given to a brace that starts a substatement.
  21203. +    This is in addition to c-continued-statement-offset.
  21204. + c-brace-offset
  21205. +    Extra indentation for line if it starts with an open brace.
  21206. + c-brace-imaginary-offset
  21207. +    An open brace following other text is treated as if it were
  21208. +    this far to the right of the start of its line.
  21209. + c-argdecl-indent
  21210. +    Indentation level of declarations of C function arguments.
  21211. + c-label-offset
  21212. +    Extra indentation for line that is a label, or case or ``default:'', or
  21213. +    ``public:'' or ``private:'', or ``protected:''.
  21214. + c++-electric-colon
  21215. +    If non-nil at invocation of c++-mode (t is the default) colon electricly
  21216. +    indents.
  21217. + c++-empty-arglist-indent
  21218. +    If non-nil, a function declaration or invocation which ends a line with a
  21219. +    left paren is indented this many extra spaces, instead of flush with the
  21220. +    left paren.
  21221. + c++-friend-offset
  21222. +    Offset of C++ friend declarations relative to member declarations.
  21223. + c++-member-init-indent
  21224. +    Indentation level of member initializations in function declarations,
  21225. +    if they are on a separate line beginning with a colon.
  21226. + c++-continued-member-init-offset
  21227. +    Extra indentation for continuation lines of member initializations; NIL
  21228. +    means to align with previous initializations rather than with the colon.
  21229. +
  21230. +Settings for K&R, BSD, and Stroustrup indentation styles are
  21231. +  c-indent-level                5    8    4
  21232. +  c-continued-statement-offset  5    8    4
  21233. +  c-continued-brace-offset                0
  21234. +  c-brace-offset               -5   -8    0
  21235. +  c-brace-imaginary-offset                0
  21236. +  c-argdecl-indent              0    8    4
  21237. +  c-label-offset               -5   -8   -4
  21238. +  c++-empty-arglist-indent                4
  21239. +  c++-friend-offset                       0
  21240. +
  21241. +Turning on C++ mode calls the value of the variable `c++-mode-hook' with
  21242. +no args if that value is non-nil.Fdabbrev-expand
  21243. +Expand previous word "dynamically".
  21244. +Expands to the most recent, preceding word for which this is a prefix.
  21245. +If no suitable preceding word is found, words following point are considered.
  21246. +
  21247. +If `case-fold-search' and `case-replace' are non-nil (usually true)
  21248. +then the substituted word may be case-adjusted to match the abbreviation
  21249. +that you had typed.  This takes place if the substituted word, as found,
  21250. +is all lower case, or if it is at the beginning of a sentence and only
  21251. +its first letter was upper case.
  21252. +
  21253. +A positive prefix arg N says to take the Nth backward DISTINCT
  21254. +possibility.  A negative argument says search forward.  The variable
  21255. +`dabbrev-backward-only' may be used to limit the direction of search to
  21256. +backward if set non-nil.
  21257. +
  21258. +If the cursor has not moved from the end of the previous expansion and
  21259. +no argument is given, replace the previously-made expansion
  21260. +with the next possible expansion not yet tried.Fdebug
  21261. +Enter debugger.  To return, type \<debugger-mode-map>`\[debugger-continue]'.
  21262. +Arguments are mainly for use when this is called from the internals
  21263. +of the evaluator.
  21264. +
  21265. +You may call with no args, or you may pass nil as the first arg and
  21266. +any other args you like.  In that case, the list of args after the
  21267. +first will be printed into the backtrace buffer.Fdebug-on-entry
  21268. +Request FUNCTION to invoke debugger each time it is called.
  21269. +If you tell the debugger to continue, FUNCTION's execution proceeds.
  21270. +This works by modifying the definition of FUNCTION,
  21271. +which must be written in Lisp, not predefined.
  21272. +Use \[cancel-debug-on-entry] to cancel the effect of this command.
  21273. +Redefining FUNCTION also cancels it.Fcancel-debug-on-entry
  21274. +Undo effect of \[debug-on-entry] on FUNCTION.
  21275. +If argument is nil or an empty string, cancel for all functions.Fdelete-selection-mode
  21276. +Toggle Delete Selection mode.
  21277. +When ON, typed text replaces the selection if the selection is active.
  21278. +When OFF, typed text is just inserted at point.Fdefine-derived-mode
  21279. +Create a new mode as a variant of an existing mode.
  21280. +
  21281. +The arguments to this command are as follow:
  21282. +
  21283. +PARENT:    the name of the command for the parent mode (ie. text-mode).
  21284. +CHILD:     the name of the command for the derived mode.
  21285. +NAME:      a string which will appear in the status line (ie. "Hypertext")
  21286. +DOCSTRING: an optional documentation string--if you do not supply one,
  21287. +           the function will attempt to invent something useful.
  21288. +BODY:      forms to execute just before running the
  21289. +           hooks for the new mode.
  21290. +
  21291. +Here is how you could define LaTeX-Thesis mode as a variant of LaTeX mode:
  21292. +
  21293. +  (define-derived-mode LaTeX-thesis-mode LaTeX-mode "LaTeX-Thesis")
  21294. +
  21295. +You could then make new key bindings for `LaTeX-thesis-mode-map'
  21296. +without changing regular LaTeX mode.  In this example, BODY is empty,
  21297. +and DOCSTRING is generated by default.
  21298. +
  21299. +On a more complicated level, the following command uses sgml-mode as
  21300. +the parent, and then sets the variable `case-fold-search' to nil:
  21301. +
  21302. +  (define-derived-mode article-mode sgml-mode "Article"
  21303. +    "Major mode for editing technical articles."
  21304. +    (setq case-fold-search nil))
  21305. +
  21306. +Note that if the documentation string had been left out, it would have
  21307. +been generated automatically, with a reference to the keymap.Fderived-mode-init-mode-variables
  21308. +Initialise variables for a new mode. 
  21309. +Right now, if they don't already exist, set up a blank keymap, an
  21310. +empty syntax table, and an empty abbrev table -- these will be merged
  21311. +the first time the mode is used.Fdiary
  21312. +Generate the diary window for ARG days starting with the current date.
  21313. +If no argument is provided, the number of days of diary entries is governed
  21314. +by the variable `number-of-diary-entries'.  This function is suitable for
  21315. +execution in a `.emacs' file.Fdiff
  21316. +Find and display the differences between OLD and NEW files.
  21317. +Interactively the current buffer's file name is the default for NEW
  21318. +and a backup file for NEW is the default for OLD.
  21319. +With prefix arg, prompt for diff switches.Fdiff-backup
  21320. +Diff this file with its backup file or vice versa.
  21321. +Uses the latest backup, if there are several numerical backups.
  21322. +If this file is a backup, diff it with its original.
  21323. +The backup file is the first file given to `diff'.Vdired-listing-switches
  21324. +*Switches passed to `ls' for dired.  MUST contain the `l' option.
  21325. +May contain all other options that don't contradict `-l';
  21326. +may contain even `F', `b', `i' and `s'.  See also the variable
  21327. +`dired-ls-F-marks-symlinks' concerning the `F' switch.Vdired-chown-program
  21328. +Name of chown command (usually `chown' or `/etc/chown').Vdired-ls-F-marks-symlinks
  21329. +*Informs dired about how `ls -lF' marks symbolic links.
  21330. +Set this to t if `insert-directory-program' with `-lF' marks the symbolic link
  21331. +itself with a trailing @ (usually the case under Ultrix).
  21332. +
  21333. +Example: if `ln -s foo bar; ls -F bar' gives `bar -> foo', set it to
  21334. +nil (the default), if it gives `bar@ -> foo', set it to t.
  21335. +
  21336. +Dired checks if there is really a @ appended.  Thus, if you have a
  21337. +marking `ls' program on one host and a non-marking on another host, and
  21338. +don't care about symbolic links which really end in a @, you can
  21339. +always set this variable to t.Vdired-trivial-filenames
  21340. +*Regexp of files to skip when finding first file of a directory.
  21341. +A value of nil means move to the subdir line.
  21342. +A value of t means move to first file.Vdired-keep-marker-rename
  21343. +*Controls marking of renamed files.
  21344. +If t, files keep their previous marks when they are renamed.
  21345. +If a character, renamed files (whether previously marked or not)
  21346. +are afterward marked with that character.Vdired-keep-marker-copy
  21347. +*Controls marking of copied files.
  21348. +If t, copied files are marked if and as the corresponding original files were.
  21349. +If a character, copied files are unconditionally marked with that character.Vdired-keep-marker-hardlink
  21350. +*Controls marking of newly made hard links.
  21351. +If t, they are marked if and as the files linked to were marked.
  21352. +If a character, new links are unconditionally marked with that character.Vdired-keep-marker-symlink
  21353. +*Controls marking of newly made symbolic links.
  21354. +If t, they are marked if and as the files linked to were marked.
  21355. +If a character, new links are unconditionally marked with that character.Vdired-dwim-target
  21356. +*If non-nil, dired tries to guess a default target directory.
  21357. +This means: if there is a dired buffer displayed in the next window,
  21358. +use its current subdir, instead of the current subdir of this dired buffer.
  21359. +
  21360. +The target is used in the prompt for file copy, rename etc.Vdired-copy-preserve-time
  21361. +*If non-nil, Dired preserves the last-modified time in a file copy.
  21362. +(This works on only some systems.)Fdired
  21363. +"Edit" directory DIRNAME--delete, rename, print, etc. some files in it.
  21364. +Optional second argument SWITCHES specifies the `ls' options used.
  21365. +(Interactively, use a prefix argument to be able to specify SWITCHES.)
  21366. +Dired displays a list of files in DIRNAME (which may also have
  21367. +shell wildcards appended to select certain files).  If DIRNAME is a cons,
  21368. +its first element is taken as the directory name and the resr as an explicit
  21369. +list of files to make directory entries for.
  21370. +\<dired-mode-map>You can move around in it with the usual commands.
  21371. +You can flag files for deletion with \[dired-flag-file-deletion] and then
  21372. +delete them by typing \[dired-do-flagged-delete].
  21373. +Type \[describe-mode] after entering dired for more info.
  21374. +
  21375. +If DIRNAME is already in a dired buffer, that buffer is used without refresh.Fdired-other-window
  21376. +"Edit" directory DIRNAME.  Like `dired' but selects in another window.Fdired-other-frame
  21377. +"Edit" directory DIRNAME.  Like `dired' but makes a new frame.Fdired-noselect
  21378. +Like `dired' but returns the dired buffer as value, does not select it.Fdired-diff
  21379. +Compare file at point with file FILE using `diff'.
  21380. +FILE defaults to the file at the mark.
  21381. +The prompted-for file is the first file given to `diff'.
  21382. +With prefix arg, prompt for second argument SWITCHES,
  21383. + which is options for `diff'.Fdired-backup-diff
  21384. +Diff this file with its backup file or vice versa.
  21385. +Uses the latest backup, if there are several numerical backups.
  21386. +If this file is a backup, diff it with its original.
  21387. +The backup file is the first file given to `diff'.
  21388. +With prefix arg, prompt for argument SWITCHES which is options for `diff'.Fdired-do-chmod
  21389. +Change the mode of the marked (or next ARG) files.
  21390. +This calls chmod, thus symbolic modes like `g+w' are allowed.Fdired-do-chgrp
  21391. +Change the group of the marked (or next ARG) files.Fdired-do-chown
  21392. +Change the owner of the marked (or next ARG) files.Fdired-do-print
  21393. +Print the marked (or next ARG) files.
  21394. +Uses the shell command coming from variables `lpr-command' and
  21395. +`lpr-switches' as default.Fdired-do-shell-command
  21396. +Run a shell command COMMAND on the marked files.
  21397. +If no files are marked or a specific numeric prefix arg is given,
  21398. +the next ARG files are used.  Just \[universal-argument] means the current file.
  21399. +The prompt mentions the file(s) or the marker, as appropriate.
  21400. +
  21401. +If there is output, it goes to a separate buffer.
  21402. +
  21403. +Normally the command is run on each file individually.
  21404. +However, if there is a `*' in the command then it is run
  21405. +just once with the entire file list substituted there.
  21406. +
  21407. +No automatic redisplay of dired buffers is attempted, as there's no
  21408. +telling what files the command may have changed.  Type
  21409. +\[dired-do-redisplay] to redisplay the marked files.
  21410. +
  21411. +The shell command has the top level directory as working directory, so
  21412. +output files usually are created there instead of in a subdir.Fdired-do-kill-lines
  21413. +Kill all marked lines (not the files).
  21414. +With a prefix argument, kill that many lines starting with the current line.
  21415. +(A negative argument kills lines before the current line.)
  21416. +To kill an entire subdirectory, go to its directory header line
  21417. +and use this command with a prefix argument (the value does not matter).Fdired-do-compress
  21418. +Compress or uncompress marked (or next ARG) files.Fdired-do-byte-compile
  21419. +Byte compile marked (or next ARG) Emacs Lisp files.Fdired-do-load
  21420. +Load the marked (or next ARG) Emacs Lisp files.Fdired-do-redisplay
  21421. +Redisplay all marked (or next ARG) files.
  21422. +If on a subdir line, redisplay that subdirectory.  In that case,
  21423. +a prefix arg lets you edit the `ls' switches used for the new listing.Fdired-string-replace-match
  21424. +Replace first match of REGEXP in STRING with NEWTEXT.
  21425. +If it does not match, nil is returned instead of the new string.
  21426. +Optional arg LITERAL means to take NEWTEXT literally.
  21427. +Optional arg GLOBAL means to replace all matches.Fdired-create-directory
  21428. +Create a directory called DIRECTORY.Fdired-do-copy
  21429. +Copy all marked (or next ARG) files, or copy the current file.
  21430. +This normally preserves the last-modified date when copying.
  21431. +When operating on just the current file, you specify the new name.
  21432. +When operating on multiple or marked files, you specify a directory
  21433. +and new symbolic links are made in that directory
  21434. +with the same names that the files currently have.Fdired-do-symlink
  21435. +Make symbolic links to current file or all marked (or next ARG) files.
  21436. +When operating on just the current file, you specify the new name.
  21437. +When operating on multiple or marked files, you specify a directory
  21438. +and new symbolic links are made in that directory
  21439. +with the same names that the files currently have.Fdired-do-hardlink
  21440. +Add names (hard links) current file or all marked (or next ARG) files.
  21441. +When operating on just the current file, you specify the new name.
  21442. +When operating on multiple or marked files, you specify a directory
  21443. +and new hard links are made in that directory
  21444. +with the same names that the files currently have.Fdired-do-rename
  21445. +Rename current file or all marked (or next ARG) files.
  21446. +When renaming just the current file, you specify the new name.
  21447. +When renaming multiple or marked files, you specify a directory.Fdired-do-rename-regexp
  21448. +Rename marked files containing REGEXP to NEWNAME.
  21449. +As each match is found, the user must type a character saying
  21450. +  what to do with it.  For directions, type \[help-command] at that time.
  21451. +NEWNAME may contain \=\<n> or \& as in `query-replace-regexp'.
  21452. +REGEXP defaults to the last regexp used.
  21453. +With a zero prefix arg, renaming by regexp affects the complete
  21454. +  pathname - usually only the non-directory part of file names is used
  21455. +  and changed.Fdired-do-copy-regexp
  21456. +Copy all marked files containing REGEXP to NEWNAME.
  21457. +See function `dired-rename-regexp' for more info.Fdired-do-hardlink-regexp
  21458. +Hardlink all marked files containing REGEXP to NEWNAME.
  21459. +See function `dired-rename-regexp' for more info.Fdired-do-symlink-regexp
  21460. +Symlink all marked files containing REGEXP to NEWNAME.
  21461. +See function `dired-rename-regexp' for more info.Fdired-upcase
  21462. +Rename all marked (or next ARG) files to upper case.Fdired-downcase
  21463. +Rename all marked (or next ARG) files to lower case.Fdired-maybe-insert-subdir
  21464. +Insert this subdirectory into the same dired buffer.
  21465. +If it is already present, just move to it (type \[dired-do-redisplay] to refresh),
  21466. +  else inserts it at its natural place (as `ls -lR' would have done).
  21467. +With a prefix arg, you may edit the ls switches used for this listing.
  21468. +  You can add `R' to the switches to expand the whole tree starting at
  21469. +  this subdirectory.
  21470. +This function takes some pains to conform to `ls -lR' output.Fdired-prev-subdir
  21471. +Go to previous subdirectory, regardless of level.
  21472. +When called interactively and not on a subdir line, go to this subdir's line.Fdired-goto-subdir
  21473. +Go to end of header line of DIR in this dired buffer.
  21474. +Return value of point on success, otherwise return nil.
  21475. +The next char is either \n, or \r if DIR is hidden.Fdired-mark-subdir-files
  21476. +Mark all files except `.' and `..'.Fdired-kill-subdir
  21477. +Remove all lines of current subdirectory.
  21478. +Lower levels are unaffected.Fdired-tree-up
  21479. +Go up ARG levels in the dired tree.Fdired-tree-down
  21480. +Go down in the dired tree.Fdired-hide-subdir
  21481. +Hide or unhide the current subdirectory and move to next directory.
  21482. +Optional prefix arg is a repeat factor.
  21483. +Use \[dired-hide-all] to (un)hide all directories.Fdired-hide-all
  21484. +Hide all subdirectories, leaving only their header lines.
  21485. +If there is already something hidden, make everything visible again.
  21486. +Use \[dired-hide-subdir] to (un)hide a particular subdirectory.Fdired-jump
  21487. +Jump to dired buffer corresponding to current buffer.
  21488. +If in a file, dired the current directory and move to file's line.
  21489. +If in dired already, pop up a level and goto old directory's line.
  21490. +In case the proper dired file line cannot be found, refresh the dired
  21491. +buffer and try again.Fdisassemble
  21492. +Print disassembled code for OBJECT in (optional) BUFFER.
  21493. +OBJECT can be a symbol defined as a function, or a function itself
  21494. +(a lambda expression or a compiled-function object).
  21495. +If OBJECT is not already compiled, we compile it, but do not
  21496. +redefine OBJECT if it is a symbol.Fdescribe-current-display-table
  21497. +Describe the display table in use in the selected window and buffer.Fmake-display-table
  21498. +Return a new, empty display table.Fstandard-display-8bit
  21499. +Display characters in the range L to H literally.Fstandard-display-default
  21500. +Display characters in the range L to H using the default notation.Fstandard-display-ascii
  21501. +Display character C using string S.
  21502. +S is usually a terminal-dependent escape sequence.
  21503. +This function is meaningless for an X frame.Fstandard-display-g1
  21504. +Display character C as character SC in the g1 character set.
  21505. +This function assumes that your terminal uses the SO/SI characters;
  21506. +it is meaningless for an X frame.Fstandard-display-graphic
  21507. +Display character C as character GC in graphics character set.
  21508. +This function assumes VT100-compatible escapes; it is meaningless for an
  21509. +X frame.Fstandard-display-underline
  21510. +Display character C as character UC plus underlining.Fstandard-display-european
  21511. +Toggle display of European characters encoded with ISO 8859.
  21512. +When enabled, characters in the range of 160 to 255 display not
  21513. +as octal escapes, but as accented characters.
  21514. +With prefix argument, enable European character display iff arg is positive.Fdissociated-press
  21515. +Dissociate the text of the current buffer.
  21516. +Output goes in buffer named *Dissociation*,
  21517. +which is redisplayed each time text is added to it.
  21518. +Every so often the user must say whether to continue.
  21519. +If ARG is positive, require ARG chars of continuity.
  21520. +If ARG is negative, require -ARG words of continuity.
  21521. +Default is 2.Fdoctor
  21522. +Switch to *doctor* buffer and start giving psychotherapy.Fdouble-mode
  21523. +Toggle double mode.
  21524. +With prefix arg, turn double mode on iff arg is positive.
  21525. +
  21526. +When double mode is on, some keys will insert will insert different
  21527. +strings when pressed twice.  See variable `double-map' for details.Fdunnet
  21528. +Switch to *dungeon* buffer and start game.Feasy-menu-define
  21529. +Define a menu bar submenu in maps MAPS, according to MENU.
  21530. +The arguments SYMBOL and DOC are ignored; they are present for
  21531. +compatibility only.  SYMBOL is not evaluated.  In other Emacs versions
  21532. +these arguments may be used as a variable to hold the menu data, and a
  21533. +doc string for that variable.
  21534. +
  21535. +The first element of MENU must be a string.  It is the menu bar item name.
  21536. +The rest of the elements are menu items.
  21537. +
  21538. +A menu item is usually a vector of three elements:  [NAME CALLBACK ENABLE]
  21539. +
  21540. +NAME is a string--the menu item name.
  21541. +
  21542. +CALLBACK is a command to run when the item is chosen,
  21543. +or a list to evaluate when the item is chosen.
  21544. +
  21545. +ENABLE is a symbol; if its value is non-nil, the item is enabled
  21546. +for selection.
  21547. +
  21548. +A menu item can be a string.  Then that string appears in the menu as
  21549. +unselectable text.  A string consisting solely of hyphens is displayed
  21550. +as a solid horizontal line.
  21551. +
  21552. +A menu item can be a list.  It is treated as a submenu.
  21553. +The first element should be the submenu name.  That's used as the
  21554. +menu item in the top-level menu.  The cdr of the submenu list
  21555. +is a list of menu items, as above.Felectric-buffer-list
  21556. +Pops up a buffer describing the set of Emacs buffers.
  21557. +Vaguely like ITS lunar select buffer; combining typeoutoid buffer
  21558. +listing with menuoid buffer selection.
  21559. +
  21560. +If the very next character typed is a space then the buffer list
  21561. +window disappears.  Otherwise, one may move around in the buffer list
  21562. +window, marking buffers to be selected, saved or deleted.
  21563. +
  21564. +To exit and select a new buffer, type a space when the cursor is on
  21565. +the appropriate line of the buffer-list window.  Other commands are
  21566. +much like those of buffer-menu-mode.
  21567. +
  21568. +Calls value of `electric-buffer-menu-mode-hook' on entry if non-nil.
  21569. +
  21570. +\{electric-buffer-menu-mode-map}FElectric-command-history-redo-expression
  21571. +Edit current history line in minibuffer and execute result.
  21572. +With prefix arg NOCONFIRM, execute current line as-is without editing.Fdef-edebug-spec
  21573. +Set the edebug-form-spec property of SYMBOL according to SPEC.
  21574. +Both SYMBOL and SPEC are unevaluated. The SPEC can be 0, t, a symbol
  21575. +(naming a function), or a list.Fedebug-eval-top-level-form
  21576. +Evaluate a top level form, such as a defun or defmacro.
  21577. +This is like `eval-defun', but the code is always instrumented for Edebug.
  21578. +Print its name in the minibuffer and leave point where it is,
  21579. +or if an error occurs, leave point after it with mark at the original
  21580. +point.Fediff-patch-file
  21581. +Run Ediff by patching FILE-TP-PATCH.Fediff-files
  21582. +Run Ediff on a pair files, FILE-A and FILE-B.Fediff-buffers
  21583. +Run Ediff on a pair of buffers, BUFFER-A and BUFFER-B.Fediff-patch-buffer
  21584. +Run Ediff by patching BUFFER-NAME.Fvc-ediff
  21585. +Run ediff on version REV of the current buffer in another window.
  21586. +If the current buffer is named `F', the version is named `F.~REV~'.
  21587. +If `F.~REV~' already exists, it is used instead of being re-created.Frcs-ediff
  21588. +Run Ediff on the current buffer, comparing it with previous RCS revision.  
  21589. +With prefix argument, prompts for revision name.Vedmacro-eight-bits
  21590. +*Non-nil if edit-kbd-macro should leave 8-bit characters intact.
  21591. +Default nil means to write characters above \177 in octal notation.Fedit-kbd-macro
  21592. +Edit a keyboard macro.
  21593. +At the prompt, type any key sequence which is bound to a keyboard macro.
  21594. +Or, type `C-x e' or RET to edit the last keyboard macro, `C-h l' to edit
  21595. +the last 100 keystrokes as a keyboard macro, or `M-x' to edit a macro by
  21596. +its command name.
  21597. +With a prefix argument, format the macro in a more concise way.Fedit-last-kbd-macro
  21598. +Edit the most recently defined keyboard macro.Fedit-named-kbd-macro
  21599. +Edit a keyboard macro which has been given a name by `name-last-kbd-macro'.Fread-kbd-macro
  21600. +Read the region as a keyboard macro definition.
  21601. +The region is interpreted as spelled-out keystrokes, e.g., "M-x abc RET".
  21602. +See documentation for `edmacro-mode' for details.
  21603. +Leading/trailing "C-x (" and "C-x )" in the text are allowed and ignored.
  21604. +The resulting macro is installed as the "current" keyboard macro.
  21605. +
  21606. +In Lisp, may also be called with a single STRING argument in which case
  21607. +the result is returned rather than being installed as the current macro.
  21608. +The result will be a string if possible, otherwise an event vector.
  21609. +Second argument NEED-VECTOR means to return an event vector always.Fformat-kbd-macro
  21610. +Return the keyboard macro MACRO as a human-readable string.
  21611. +This string is suitable for passing to `read-kbd-macro'.
  21612. +Second argument VERBOSE means to put one command per line with comments.
  21613. +If VERBOSE is `1', put everything on one line.  If VERBOSE is omitted
  21614. +or nil, use a compact 80-column format.Finsert-kbd-macro
  21615. +Insert in buffer the definition of kbd macro NAME, as Lisp code.
  21616. +Optional second arg KEYS means also record the keys it is on
  21617. +(this is the prefix argument, when calling interactively).
  21618. +
  21619. +This Lisp code will, when executed, define the kbd macro with the same
  21620. +definition it has now.  If you say to record the keys, the Lisp code
  21621. +will also rebind those keys to the macro.  Only global key bindings
  21622. +are recorded since executing this Lisp code always makes global
  21623. +bindings.
  21624. +
  21625. +To save a kbd macro, visit a file of Lisp code such as your `~/.emacs',
  21626. +use this command, and then save the file.Fedt-emulation-on
  21627. +Emulate DEC's EDT editor.
  21628. +Note that many keys are rebound; including nearly all keypad keys.
  21629. +Use \[edt-emulation-off] to undo all rebindings except the keypad keys.Freport-emacs-bug
  21630. +Report a bug in GNU Emacs.
  21631. +Prompts for bug subject.  Leaves you in a mail buffer.Femerge-files
  21632. +Run Emerge on two files.Femerge-files-with-ancestor
  21633. +Run Emerge on two files, giving another file as the ancestor.Femerge-buffers
  21634. +Run Emerge on two buffers.Femerge-buffers-with-ancestor
  21635. +Run Emerge on two buffers, giving another buffer as the ancestor.Femerge-revisions
  21636. +Emerge two RCS revisions of a file.Femerge-revisions-with-ancestor
  21637. +Emerge two RCS revisions of a file, with another revision as ancestor.Fsetenv
  21638. +Set the value of the environment variable named VARIABLE to VALUE.
  21639. +VARIABLE should be a string.  VALUE is optional; if not provided or is
  21640. +`nil', the environment variable VARIABLE will be removed.  
  21641. +This function works by modifying `process-environment'.Vtags-file-name
  21642. +*File name of tags table.
  21643. +To switch to a new tags table, setting this variable is sufficient.
  21644. +If you set this variable, do not also set `tags-table-list'.
  21645. +Use the `etags' program to make a tags table file.Vtags-table-list
  21646. +*List of file names of tags tables to search.
  21647. +An element that is a directory means the file "TAGS" in that directory.
  21648. +To switch to a new list of tags tables, setting this variable is sufficient.
  21649. +If you set this variable, do not also set `tags-file-name'.
  21650. +Use the `etags' program to make a tags table file.Vtags-add-tables
  21651. +*Control whether to add a new tags table to the current list.
  21652. +t means do; nil means don't (always start a new list).
  21653. +Any other value means ask the user whether to add a new tags table
  21654. +to the current list (as opposed to starting a new list).Vfind-tag-hook
  21655. +*Hook to be run by \[find-tag] after finding a tag.  See `run-hooks'.
  21656. +The value in the buffer in which \[find-tag] is done is used,
  21657. +not the value in the buffer \[find-tag] goes to.Vfind-tag-default-function
  21658. +*A function of no arguments used by \[find-tag] to pick a default tag.
  21659. +If nil, and the symbol that is the value of `major-mode'
  21660. +has a `find-tag-default-function' property (see `put'), that is used.
  21661. +Otherwise, `find-tag-default' is used.Fvisit-tags-table
  21662. +Tell tags commands to use tags table file FILE.
  21663. +FILE should be the name of a file created with the `etags' program.
  21664. +A directory name is ok too; it means file TAGS in that directory.
  21665. +
  21666. +Normally \[visit-tags-table] sets the global value of `tags-file-name'.
  21667. +With a prefix arg, set the buffer-local value instead.
  21668. +When you find a tag with \[find-tag], the buffer it finds the tag
  21669. +in is given a local value of this variable which is the name of the tags
  21670. +file the tag was in.Ftags-table-files
  21671. +Return a list of files in the current tags table.
  21672. +Assumes the tags table is the current buffer.
  21673. +File names returned are absolute.Ffind-tag-noselect
  21674. +Find tag (in current tags table) whose name contains TAGNAME.
  21675. +Returns the buffer containing the tag's definition and moves its point there,
  21676. +but does not select the buffer.
  21677. +The default for TAGNAME is the expression in the buffer near point.
  21678. +
  21679. +If second arg NEXT-P is t (interactively, with prefix arg), search for
  21680. +another tag that matches the last tagname or regexp used.  When there are
  21681. +multiple matches for a tag, more exact matches are found first.  If NEXT-P
  21682. +is the atom `-' (interactively, with prefix arg that is a negative number
  21683. +or just \[negative-argument]), pop back to the previous tag gone to.
  21684. +
  21685. +If third arg REGEXP-P is non-nil, treat TAGNAME as a regexp.
  21686. +
  21687. +See documentation of variable `tags-file-name'.Ffind-tag
  21688. +Find tag (in current tags table) whose name contains TAGNAME.
  21689. +Select the buffer containing the tag's definition, and move point there.
  21690. +The default for TAGNAME is the expression in the buffer around or before point.
  21691. +
  21692. +If second arg NEXT-P is t (interactively, with prefix arg), search for
  21693. +another tag that matches the last tagname or regexp used.  When there are
  21694. +multiple matches for a tag, more exact matches are found first.  If NEXT-P
  21695. +is the atom `-' (interactively, with prefix arg that is a negative number
  21696. +or just \[negative-argument]), pop back to the previous tag gone to.
  21697. +
  21698. +See documentation of variable `tags-file-name'.Ffind-tag-other-window
  21699. +Find tag (in current tags table) whose name contains TAGNAME.
  21700. +Select the buffer containing the tag's definition in another window, and
  21701. +move point there.  The default for TAGNAME is the expression in the buffer
  21702. +around or before point.
  21703. +
  21704. +If second arg NEXT-P is t (interactively, with prefix arg), search for
  21705. +another tag that matches the last tagname or regexp used.  When there are
  21706. +multiple matches for a tag, more exact matches are found first.  If NEXT-P
  21707. +is negative (interactively, with prefix arg that is a negative number or
  21708. +just \[negative-argument]), pop back to the previous tag gone to.
  21709. +
  21710. +See documentation of variable `tags-file-name'.Ffind-tag-other-frame
  21711. +Find tag (in current tags table) whose name contains TAGNAME.
  21712. +Select the buffer containing the tag's definition in another frame, and
  21713. +move point there.  The default for TAGNAME is the expression in the buffer
  21714. +around or before point.
  21715. +
  21716. +If second arg NEXT-P is t (interactively, with prefix arg), search for
  21717. +another tag that matches the last tagname or regexp used.  When there are
  21718. +multiple matches for a tag, more exact matches are found first.  If NEXT-P
  21719. +is negative (interactively, with prefix arg that is a negative number or
  21720. +just \[negative-argument]), pop back to the previous tag gone to.
  21721. +
  21722. +See documentation of variable `tags-file-name'.Ffind-tag-regexp
  21723. +Find tag (in current tags table) whose name matches REGEXP.
  21724. +Select the buffer containing the tag's definition and move point there.
  21725. +
  21726. +If second arg NEXT-P is t (interactively, with prefix arg), search for
  21727. +another tag that matches the last tagname or regexp used.  When there are
  21728. +multiple matches for a tag, more exact matches are found first.  If NEXT-P
  21729. +is negative (interactively, with prefix arg that is a negative number or
  21730. +just \[negative-argument]), pop back to the previous tag gone to.
  21731. +
  21732. +If third arg OTHER-WINDOW is non-nil, select the buffer in another window.
  21733. +
  21734. +See documentation of variable `tags-file-name'.Fnext-file
  21735. +Select next file among files in current tags table.
  21736. +
  21737. +A first argument of t (prefix arg, if interactive) initializes to the
  21738. +beginning of the list of files in the tags table.  If the argument is
  21739. +neither nil nor t, it is evalled to initialize the list of files.
  21740. +
  21741. +Non-nil second argument NOVISIT means use a temporary buffer
  21742. + to save time and avoid uninteresting warnings.
  21743. +
  21744. +Value is nil if the file was already visited;
  21745. +if the file was newly read in, the value is the filename.Ftags-loop-continue
  21746. +Continue last \[tags-search] or \[tags-query-replace] command.
  21747. +Used noninteractively with non-nil argument to begin such a command (the
  21748. +argument is passed to `next-file', which see).
  21749. +Two variables control the processing we do on each file:
  21750. +the value of `tags-loop-scan' is a form to be executed on each file
  21751. +to see if it is interesting (it returns non-nil if so)
  21752. +and `tags-loop-operate' is a form to execute to operate on an interesting file
  21753. +If the latter returns non-nil, we exit; otherwise we scan the next file.Ftags-search
  21754. +Search through all files listed in tags table for match for REGEXP.
  21755. +Stops when a match is found.
  21756. +To continue searching for next match, use command \[tags-loop-continue].
  21757. +
  21758. +See documentation of variable `tags-file-name'.Ftags-query-replace
  21759. +Query-replace-regexp FROM with TO through all files listed in tags table.
  21760. +Third arg DELIMITED (prefix arg) means replace only word-delimited matches.
  21761. +If you exit (\[keyboard-quit] or ESC), you can resume the query-replace
  21762. +with the command \[tags-loop-continue].
  21763. +
  21764. +See documentation of variable `tags-file-name'.Flist-tags
  21765. +Display list of tags in file FILE.
  21766. +FILE should not contain a directory specification.Ftags-apropos
  21767. +Display list of all tags in tags table REGEXP matches.Fselect-tags-table
  21768. +Select a tags table file from a menu of those you have already used.
  21769. +The list of tags tables to select from is stored in `tags-table-file-list';
  21770. +see the doc of that variable if you want to add names to the list.Fcomplete-tag
  21771. +Perform tags completion on the text around point.
  21772. +Completes to the set of names listed in the current tags table.  
  21773. +The string to complete is chosen in the same way as the default
  21774. +for \[find-tag] (which see).Vfind-ls-option
  21775. +*Option to `find' to produce an `ls -l'-type listing.Vfind-grep-options
  21776. +*Option to grep to be as silent as possible.
  21777. +On Berkeley systems, this is `-s', for others it seems impossible to
  21778. +suppress all output, so `-l' is used to print nothing more than the
  21779. +file name.Ffind-dired
  21780. +Run `find' and go into dired-mode on a buffer of the output.
  21781. +The command run (after changing into DIR) is
  21782. +
  21783. +    find . \( ARGS \) -lsFfind-name-dired
  21784. +Search DIR recursively for files matching the globbing pattern PATTERN,
  21785. +and run dired on those files.
  21786. +PATTERN is a shell wildcard (not an Emacs regexp) and need not be quoted.
  21787. +The command run (after changing into DIR) is
  21788. +
  21789. +    find . -name 'PATTERN' -lsFfind-grep-dired
  21790. +Find files in DIR containing a regexp ARG and start Dired on output.
  21791. +The command run (after changing into DIR) is
  21792. +
  21793. +    find . -exec grep -s ARG {} \; -ls
  21794. +
  21795. +Thus ARG can also contain additional grep options.Fenable-flow-control
  21796. +Toggle flow control handling.
  21797. +When handling is enabled, user can type C-s as C-\, and C-q as C-^.
  21798. +With arg, enable flow control mode if arg is positive, otherwise disable.Fenable-flow-control-on
  21799. +Enable flow control if using one of a specified set of terminal types.
  21800. +Use `(enable-flow-control-on "vt100" "h19")' to enable flow control
  21801. +on VT-100 and H19 terminals.  When flow control is enabled,
  21802. +you must type C-\ to get the effect of a C-s, and type C-^
  21803. +to get the effect of a C-q.Vfont-lock-mode-hook
  21804. +Function or functions to run on entry to Font Lock mode.Ffont-lock-mode
  21805. +Toggle Font Lock mode.
  21806. +With arg, turn Font Lock mode on if and only if arg is positive.
  21807. +
  21808. +When Font Lock mode is enabled, text is fontified as you type it:
  21809. +
  21810. + - comments are displayed in `font-lock-comment-face';
  21811. +     (That is a variable whose value should be a face name.)
  21812. + - strings are displayed in `font-lock-string-face';
  21813. + - documentation strings are displayed in `font-lock-doc-string-face';
  21814. + - function and variable names in their defining forms are displayed
  21815. +   in `font-lock-function-name-face';
  21816. + - and certain other expressions are displayed in other faces
  21817. +   according to the value of the variable `font-lock-keywords'.
  21818. +
  21819. +When you turn Font Lock mode on/off, the buffer is fontified/defontified.
  21820. +To fontify a buffer without having newly typed text become fontified, you
  21821. +can use \[font-lock-fontify-buffer].Fforms-mode
  21822. +Major mode to visit files in a field-structured manner using a form.
  21823. +
  21824. +Commands:                        Equivalent keys in read-only mode:
  21825. + TAB            forms-next-field          TAB
  21826. + \C-c TAB       forms-next-field          
  21827. + \C-c <         forms-first-record         <
  21828. + \C-c >         forms-last-record          >
  21829. + \C-c ?         describe-mode              ?
  21830. + \C-c \C-k      forms-delete-record
  21831. + \C-c \C-q      forms-toggle-read-only     q
  21832. + \C-c \C-o      forms-insert-record
  21833. + \C-c \C-l      forms-jump-record          l
  21834. + \C-c \C-n      forms-next-record          n
  21835. + \C-c \C-p      forms-prev-record          p
  21836. + \C-c \C-s      forms-search               s
  21837. + \C-c \C-x      forms-exit                 x
  21838. +Fforms-find-file
  21839. +Visit a file in Forms mode.Fforms-find-file-other-window
  21840. +Visit a file in Forms mode in other window.Vfortran-tab-mode-default
  21841. +*Default tabbing/carriage control style for empty files in Fortran mode.
  21842. +A value of t specifies tab-digit style of continuation control.
  21843. +A value of nil specifies that continuation lines are marked
  21844. +with a character in column 6.Ffortran-mode
  21845. +Major mode for editing Fortran code.
  21846. +\[fortran-indent-line] indents the current Fortran line correctly. 
  21847. +DO statements must not share a common CONTINUE.
  21848. +
  21849. +Type ;? or ;\[help-command] to display a list of built-in abbrevs for Fortran keywords.
  21850. +
  21851. +Key definitions:
  21852. +\{fortran-mode-map}
  21853. +
  21854. +Variables controlling indentation style and extra features:
  21855. +
  21856. + comment-start
  21857. +    Normally nil in Fortran mode.  If you want to use comments
  21858. +    starting with `!', set this to the string "!".
  21859. + fortran-do-indent
  21860. +    Extra indentation within do blocks.  (default 3)
  21861. + fortran-if-indent
  21862. +    Extra indentation within if blocks.  (default 3)
  21863. + fortran-structure-indent
  21864. +    Extra indentation within structure, union, map and interface blocks.
  21865. +    (default 3)
  21866. + fortran-continuation-indent
  21867. +    Extra indentation applied to continuation statements.  (default 5)
  21868. + fortran-comment-line-extra-indent
  21869. +    Amount of extra indentation for text within full-line comments. (default 0)
  21870. + fortran-comment-indent-style
  21871. +    nil    means don't change indentation of text in full-line comments,
  21872. +    fixed  means indent that text at `fortran-comment-line-extra-indent' beyond
  21873. +           the value of `fortran-minimum-statement-indent-fixed' (for fixed
  21874. +           format continuation style) or `fortran-minimum-statement-indent-tab'
  21875. +           (for TAB format continuation style).
  21876. +    relative  means indent at `fortran-comment-line-extra-indent' beyond the
  21877. +           indentation for a line of code.
  21878. +    (default 'fixed)
  21879. + fortran-comment-indent-char
  21880. +    Single-character string to be inserted instead of space for
  21881. +    full-line comment indentation.  (default " ")
  21882. + fortran-minimum-statement-indent-fixed
  21883. +    Minimum indentation for Fortran statements in fixed format mode. (def.6)
  21884. + fortran-minimum-statement-indent-tab
  21885. +    Minimum indentation for Fortran statements in TAB format mode. (default 9)
  21886. + fortran-line-number-indent
  21887. +    Maximum indentation for line numbers.  A line number will get
  21888. +    less than this much indentation if necessary to avoid reaching
  21889. +    column 5.  (default 1)
  21890. + fortran-check-all-num-for-matching-do
  21891. +    Non-nil causes all numbered lines to be treated as possible "continue"
  21892. +    statements.  (default nil)
  21893. + fortran-blink-matching-if 
  21894. +    From a Fortran ENDIF statement, blink the matching IF statement.
  21895. +    Also, from an ENDDO statement, blink on matching DO [WHILE] statement.
  21896. +    (default nil)
  21897. + fortran-continuation-string
  21898. +    Single-character string to be inserted in column 5 of a continuation
  21899. +    line.  (default "$")
  21900. + fortran-comment-region
  21901. +    String inserted by \[fortran-comment-region] at start of each line in 
  21902. +    region.  (default "c$$$")
  21903. + fortran-electric-line-number
  21904. +    Non-nil causes line number digits to be moved to the correct column 
  21905. +    as typed.  (default t)
  21906. + fortran-break-before-delimiters
  21907. +    Non-nil causes `fortran-do-auto-fill' breaks lines before delimiters.
  21908. +    (default t)
  21909. + fortran-startup-message
  21910. +    Set to nil to inhibit message first time Fortran mode is used.
  21911. +
  21912. +Turning on Fortran mode calls the value of the variable `fortran-mode-hook'
  21913. +with no args, if that value is non-nil.Fgnus
  21914. +Read network news.
  21915. +If optional argument CONFIRM is non-nil, ask NNTP server.Fgnus-post-news
  21916. +Begin editing a new USENET news article to be posted.
  21917. +Type \[describe-mode] once editing the article to get a list of commands.Fgomoku
  21918. +Start a Gomoku game between you and Emacs.
  21919. +If a game is in progress, this command allow you to resume it.
  21920. +If optional arguments N and M are given, an N by M board is used.
  21921. +
  21922. +You and Emacs play in turn by marking a free square.  You mark it with X
  21923. +and Emacs marks it with O. The winner is the first to get five contiguous
  21924. +marks horizontally, vertically or in diagonal.
  21925. +
  21926. +You play by moving the cursor over the square you choose and hitting
  21927. +\<gomoku-mode-map>\[gomoku-human-plays].
  21928. +Use \[describe-mode] for more info.Fgdb
  21929. +Run gdb on program FILE in buffer *gud-FILE*.
  21930. +The directory containing FILE becomes the initial working directory
  21931. +and source-file directory for your debugger.Fsdb
  21932. +Run sdb on program FILE in buffer *gud-FILE*.
  21933. +The directory containing FILE becomes the initial working directory
  21934. +and source-file directory for your debugger.Fdbx
  21935. +Run dbx on program FILE in buffer *gud-FILE*.
  21936. +The directory containing FILE becomes the initial working directory
  21937. +and source-file directory for your debugger.Fxdb
  21938. +Run xdb on program FILE in buffer *gud-FILE*.
  21939. +The directory containing FILE becomes the initial working directory
  21940. +and source-file directory for your debugger.
  21941. +
  21942. +You can set the variable 'gud-xdb-directories' to a list of program source
  21943. +directories if your program contains sources from more than one directory.Fperldb
  21944. +Run perldb on program FILE in buffer *gud-FILE*.
  21945. +The directory containing FILE becomes the initial working directory
  21946. +and source-file directory for your debugger.Fhanoi
  21947. +Towers of Hanoi diversion.  Argument is number of rings.Vthree-step-help
  21948. +*Non-nil means give more info about Help command in three steps.
  21949. +The three steps are simple prompt, prompt with all options,
  21950. +and window listing and describing the options.
  21951. +A value of nil means skip the middle step, so that
  21952. +\[help-command] \[help-command] gives the window that lists the options.FHelper-describe-bindings
  21953. +Describe local key bindings of current mode.FHelper-help
  21954. +Provide help for current mode.Fhexl-mode
  21955. +\<hexl-mode-map>
  21956. +A major mode for editing binary files in hex dump format.
  21957. +
  21958. +This function automatically converts a buffer into the hexl format
  21959. +using the function `hexlify-buffer'.
  21960. +
  21961. +Each line in the buffer has an "address" (displayed in hexadecimal)
  21962. +representing the offset into the file that the characters on this line
  21963. +are at and 16 characters from the file (displayed as hexadecimal
  21964. +values grouped every 16 bits) and as their ASCII values.
  21965. +
  21966. +If any of the characters (displayed as ASCII characters) are
  21967. +unprintable (control or meta characters) they will be replaced as
  21968. +periods.
  21969. +
  21970. +If `hexl-mode' is invoked with an argument the buffer is assumed to be
  21971. +in hexl format.
  21972. +
  21973. +A sample format:
  21974. +
  21975. +  HEX ADDR: 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f     ASCII-TEXT
  21976. +  --------  ---- ---- ---- ---- ---- ---- ---- ----  ----------------
  21977. +  00000000: 5468 6973 2069 7320 6865 786c 2d6d 6f64  This is hexl-mod
  21978. +  00000010: 652e 2020 4561 6368 206c 696e 6520 7265  e.  Each line re
  21979. +  00000020: 7072 6573 656e 7473 2031 3620 6279 7465  presents 16 byte
  21980. +  00000030: 7320 6173 2068 6578 6164 6563 696d 616c  s as hexadecimal
  21981. +  00000040: 2041 5343 4949 0a61 6e64 2070 7269 6e74   ASCII.and print
  21982. +  00000050: 6162 6c65 2041 5343 4949 2063 6861 7261  able ASCII chara
  21983. +  00000060: 6374 6572 732e 2020 416e 7920 636f 6e74  cters.  Any cont
  21984. +  00000070: 726f 6c20 6f72 206e 6f6e 2d41 5343 4949  rol or non-ASCII
  21985. +  00000080: 2063 6861 7261 6374 6572 730a 6172 6520   characters.are 
  21986. +  00000090: 6469 7370 6c61 7965 6420 6173 2070 6572  displayed as per
  21987. +  000000a0: 696f 6473 2069 6e20 7468 6520 7072 696e  iods in the prin
  21988. +  000000b0: 7461 626c 6520 6368 6172 6163 7465 7220  table character 
  21989. +  000000c0: 7265 6769 6f6e 2e0a                      region..
  21990. +
  21991. +Movement is as simple as movement in a normal emacs text buffer.  Most
  21992. +cursor movement bindings are the same (ie. Use \[hexl-backward-char], \[hexl-forward-char], \[hexl-next-line], and \[hexl-previous-line]
  21993. +to move the cursor left, right, down, and up).
  21994. +
  21995. +Advanced cursor movement commands (ala \[hexl-beginning-of-line], \[hexl-end-of-line], \[hexl-beginning-of-buffer], and \[hexl-end-of-buffer]) are
  21996. +also supported.
  21997. +
  21998. +There are several ways to change text in hexl mode:
  21999. +
  22000. +ASCII characters (character between space (0x20) and tilde (0x7E)) are
  22001. +bound to self-insert so you can simply type the character and it will
  22002. +insert itself (actually overstrike) into the buffer.
  22003. +
  22004. +\[hexl-quoted-insert] followed by another keystroke allows you to insert the key even if
  22005. +it isn't bound to self-insert.  An octal number can be supplied in place
  22006. +of another key to insert the octal number's ASCII representation.
  22007. +
  22008. +\[hexl-insert-hex-char] will insert a given hexadecimal value (if it is between 0 and 0xFF)
  22009. +into the buffer at the current point.
  22010. +
  22011. +\[hexl-insert-octal-char] will insert a given octal value (if it is between 0 and 0377)
  22012. +into the buffer at the current point.
  22013. +
  22014. +\[hexl-insert-decimal-char] will insert a given decimal value (if it is between 0 and 255)
  22015. +into the buffer at the current point.
  22016. +
  22017. +\[hexl-mode-exit] will exit hexl-mode.
  22018. +
  22019. +Note: saving the file with any of the usual Emacs commands
  22020. +will actually convert it back to binary format while saving.
  22021. +
  22022. +You can use \[hexl-find-file] to visit a file in hexl-mode.
  22023. +
  22024. +\[describe-bindings] for advanced commands.Fhexl-find-file
  22025. +Edit file FILENAME in hexl-mode.
  22026. +Switch to a buffer visiting file FILENAME, creating one in none exists.Fhexlify-buffer
  22027. +Convert a binary buffer to hexl formatFhide-ifdef-mode
  22028. +Toggle Hide-Ifdef mode.  This is a minor mode, albeit a large one.
  22029. +With ARG, turn Hide-Ifdef mode on iff arg is positive.
  22030. +In Hide-Ifdef mode, code within #ifdef constructs that the C preprocessor
  22031. +would eliminate may be hidden from view.  Several variables affect
  22032. +how the hiding is done:
  22033. +
  22034. +hide-ifdef-env
  22035. +    An association list of defined and undefined symbols for the
  22036. +    current buffer.  Initially, the global value of `hide-ifdef-env'
  22037. +    is used.
  22038. +
  22039. +hide-ifdef-define-alist
  22040. +    An association list of defined symbol lists.  
  22041. +        Use `hide-ifdef-set-define-alist' to save the current `hide-ifdef-env'
  22042. +        and `hide-ifdef-use-define-alist' to set the current `hide-ifdef-env'
  22043. +        from one of the lists in `hide-ifdef-define-alist'.
  22044. +
  22045. +hide-ifdef-lines
  22046. +    Set to non-nil to not show #if, #ifdef, #ifndef, #else, and
  22047. +    #endif lines when hiding.
  22048. +
  22049. +hide-ifdef-initially
  22050. +    Indicates whether `hide-ifdefs' should be called when Hide-Ifdef mode
  22051. +    is activated.
  22052. +
  22053. +hide-ifdef-read-only
  22054. +    Set to non-nil if you want to make buffers read only while hiding.
  22055. +    After `show-ifdefs', read-only status is restored to previous value.
  22056. +
  22057. +\{hide-ifdef-mode-map}Vhide-ifdef-initially
  22058. +*Non-nil if `hide-ifdefs' should be called when Hide-Ifdef mode
  22059. +is first activated.Vhide-ifdef-read-only
  22060. +*Set to non-nil if you want buffer to be read-only while hiding text.Vhide-ifdef-lines
  22061. +*Set to t if you don't want to see the #ifX, #else, and #endif lines.Vhippie-expand-try-functions-list
  22062. +The list of expansion functions tried in order by `hippie-expand'.
  22063. +To change the behavior of `hippie-expand', remove, change the order of,
  22064. +or insert functions in this list.Vhippie-expand-verbose
  22065. +*Non-nil makes `hippie-expand' output which function it is trying.Vhippie-expand-max-buffers
  22066. +*The maximum number of buffers (apart from the current) searched.
  22067. +If nil, all buffers are searched.Vhippie-expand-ignore-buffers
  22068. +*A list specifying which buffers not to search (if not current).
  22069. +Can contain both regexps matching buffer names (as strings) and major modes
  22070. +(as atoms)Fhippie-expand
  22071. +Try to expand text before point, using multiple methods.
  22072. +The expansion functions in `hippie-expand-try-functions-list' are
  22073. +tried in order, until a possible expansion is found.  Repeated
  22074. +application of `hippie-expand' inserts successively possible
  22075. +expansions.  
  22076. +With a positive numeric argument, jumps directly to the ARG next
  22077. +function in this list.  With a negative argument or just \[universal-argument], 
  22078. +undoes the expansion.Fmake-hippie-expand-function
  22079. +Construct a function similar to `hippie-expand'.
  22080. +Make it use the expansion functions in TRY-LIST.  An optional second
  22081. +argument VERBOSE non-nil makes the function verbose.Ficomplete-prime-session
  22082. +Prep emacs v 19 for more finely-grained minibuffer completion-feedback.
  22083. +
  22084. +You can inhibit icomplete after loading by setting icomplete-inhibit
  22085. +non-nil.  Set the var back to nil to re-enable icomplete.Fielm
  22086. +Interactively evaluate Emacs Lisp expressions.
  22087. +Switches to the buffer *ielm*, or creates it if it does not exist.Fimenu
  22088. +Jump to a place in the buffer chosen using a buffer menu or mouse menu.
  22089. +See `imenu-choose-buffer-index' for more information.Vinferior-lisp-filter-regexp
  22090. +*What not to save on inferior Lisp's input history.
  22091. +Input matching this regexp is not saved on the input history in Inferior Lisp
  22092. +mode.  Default is whitespace followed by 0 or 1 single-letter colon-keyword 
  22093. +(as in :a, :c, etc.)Vinferior-lisp-program
  22094. +*Program name for invoking an inferior Lisp with for Inferior Lisp mode.Vinferior-lisp-load-command
  22095. +*Format-string for building a Lisp expression to load a file.
  22096. +This format string should use `%s' to substitute a file name
  22097. +and should result in a Lisp expression that will command the inferior Lisp
  22098. +to load that file.  The default works acceptably on most Lisps.
  22099. +The string "(progn (load \"%s\" :verbose nil :print t) (values))\
  22100. +"
  22101. +produces cosmetically superior output for this application,
  22102. +but it works only in Common Lisp.Vinferior-lisp-prompt
  22103. +Regexp to recognise prompts in the Inferior Lisp mode.
  22104. +Defaults to "^[^> \n]*>+:? *", which works pretty good for Lucid, kcl,
  22105. +and franz.  This variable is used to initialize `comint-prompt-regexp' in the 
  22106. +Inferior Lisp buffer.
  22107. +
  22108. +More precise choices:
  22109. +Lucid Common Lisp: "^\(>\|\(->\)+\) *"
  22110. +franz: "^\(->\|<[0-9]*>:\) *"
  22111. +kcl: "^>+ *"
  22112. +
  22113. +This is a fine thing to set in your .emacs file.Vinferior-lisp-mode-hook
  22114. +*Hook for customising Inferior Lisp mode.Finferior-lisp
  22115. +Run an inferior Lisp process, input and output via buffer `*inferior-lisp*'.
  22116. +If there is a process already running in `*inferior-lisp*', just switch
  22117. +to that buffer.
  22118. +With argument, allows you to edit the command line (default is value
  22119. +of `inferior-lisp-program').  Runs the hooks from
  22120. +`inferior-lisp-mode-hook' (after the `comint-mode-hook' is run).
  22121. +(Type \[describe-mode] in the process buffer for a list of commands.)Finfo
  22122. +Enter Info, the documentation browser.
  22123. +Optional argument FILE specifies the file to examine;
  22124. +the default is the top-level directory of Info.
  22125. +
  22126. +In interactive use, a prefix argument directs this command
  22127. +to read a file name from the minibuffer.Finfo-standalone
  22128. +Run Emacs as a standalone Info reader.
  22129. +Usage:  emacs -f info-standalone [filename]
  22130. +In standalone mode, \<Info-mode-map>\[Info-exit] exits Emacs itself.FInfo-goto-emacs-command-node
  22131. +Go to the Info node in the Emacs manual for command COMMAND.
  22132. +The command is found by looking up in Emacs manual's Command Index.FInfo-goto-emacs-key-command-node
  22133. +Go to the Info node in the Emacs manual the command bound to KEY, a string.
  22134. +Interactively, if the binding is execute-extended-command, a command is read.
  22135. +The command is found by looking up in Emacs manual's Command Index.FInfo-tagify
  22136. +Create or update Info-file tag table in current buffer.FInfo-split
  22137. +Split an info file into an indirect file plus bounded-size subfiles.
  22138. +Each subfile will be up to 50,000 characters plus one node.
  22139. +
  22140. +To use this command, first visit a large Info file that has a tag
  22141. +table.  The buffer is modified into a (small) indirect info file which
  22142. +should be saved in place of the original visited file.
  22143. +
  22144. +The subfiles are written in the same directory the original file is
  22145. +in, with names generated by appending `-' and a number to the original
  22146. +file name.  The indirect file still functions as an Info file, but it
  22147. +contains just the tag table and a directory of subfiles.FInfo-validate
  22148. +Check current buffer for validity as an Info file.
  22149. +Check that every node pointer points to an existing node.Fbatch-info-validate
  22150. +Runs `Info-validate' on the files remaining on the command line.
  22151. +Must be used only with -batch, and kills Emacs on completion.
  22152. +Each file will be processed even if an error occurred previously.
  22153. +For example, invoke "emacs -batch -f batch-info-validate $info/ ~/*.info"Fiso-accents-mode
  22154. +Toggle ISO Accents mode, in which accents modify the following letter.
  22155. +This permits easy insertion of accented characters according to ISO-8859-1.
  22156. +When Iso-accents mode is enabled, accent character keys
  22157. +(`, ', ", ^, / and ~) do not self-insert; instead, they modify the following
  22158. +letter key so that it inserts an ISO accented letter.
  22159. +
  22160. +The variable `iso-accents-enable' specifies the list of characters to
  22161. +enable as accents.  If you don't need all of them, remove the ones you
  22162. +don't need from that list.
  22163. +
  22164. +Special combinations: ~c gives a c with cedilla,
  22165. +~d gives a d with dash.
  22166. +"s gives German sharp s.
  22167. +/a gives a with ring.
  22168. +/e gives an a-e ligature.
  22169. +~< and ~> give guillemets.
  22170. +
  22171. +With an argument, a positive argument enables ISO Accents mode, 
  22172. +and a negative argument disables it.Vispell-dictionary-alist
  22173. +An alist of dictionaries and their associated parameters.
  22174. +
  22175. +Each element of this list is also a list:
  22176. +
  22177. +(DICTIONARY-NAME CASECHARS NOT-CASECHARS OTHERCHARS MANY-OTHERCHARS-P
  22178. +        ISPELL-ARGS EXTENDED-CHARACTER-MODE)
  22179. +
  22180. +DICTIONARY-NAME is a possible value of variable `ispell-dictionary', nil
  22181. +means the default dictionary.
  22182. +
  22183. +CASECHARS is a regular expression of valid characters that comprise a
  22184. +word.
  22185. +
  22186. +NOT-CASECHARS is the opposite regexp of CASECHARS.
  22187. +
  22188. +OTHERCHARS is a regular expression of other characters that are valid
  22189. +in word constructs.  Otherchars cannot be adjacent to each other in a
  22190. +word, nor can they begin or end a word.  This implies we can't check
  22191. +"Stevens'" as a correct possessive and other correct formations.
  22192. +
  22193. +Hint: regexp syntax requires the hyphen to be declared first here.
  22194. +
  22195. +MANY-OTHERCHARS-P is non-nil if many otherchars are to be allowed in a
  22196. +word instead of only one.
  22197. +
  22198. +ISPELL-ARGS is a list of additional arguments passed to the ispell
  22199. +subprocess.
  22200. +
  22201. +EXTENDED-CHARACTER-MODE should be used when dictionaries are used which
  22202. +have been configured in Ispell's parse.y.  (For example, umlauts
  22203. +can be encoded as \"a, a\", "a, ...)  Defaults are ~tex and ~nroff
  22204. +in English.  This has the same effect as the command-line `-T' option.
  22205. +The buffer Major Mode controls Ispell's parsing in tex or nroff mode,
  22206. +but the dictionary can control the extended character mode.
  22207. +Both defaults can be overruled in a buffer-local fashion. See
  22208. +`ispell-parsing-keyword' for details on this.
  22209. +
  22210. +Note that the CASECHARS and OTHERCHARS slots of the alist should
  22211. +contain the same character set as casechars and otherchars in the
  22212. +language.aff file (e.g., english.aff).Fispell-word
  22213. +Check spelling of word under or before the cursor.
  22214. +If the word is not found in dictionary, display possible corrections
  22215. +in a window and so you can choose one.
  22216. +
  22217. +With a prefix argument (or if CONTINUE is non-nil),
  22218. +resume interrupted spell-checking of a buffer or region.
  22219. +
  22220. +If optional argument FOLLOWING is non-nil or if `ispell-following-word'
  22221. +is non-nil when called interactively, then the following word
  22222. +(rather than preceding) is checked when the cursor is not over a word.
  22223. +When the optional argument QUIETLY is non-nil or `ispell-quietly' is non-nil
  22224. +when called interactively, non-corrective messages are suppressed.
  22225. +
  22226. +Word syntax described by `ispell-dictionary-alist' (which see).
  22227. +
  22228. +This will check or reload the dictionary.  Use \[ispell-change-dictionary]
  22229. +or \[ispell-region] to update the Ispell process.Fispell-help
  22230. +Display a list of the options available when a misspelling is encountered.
  22231. +
  22232. +Selections are:
  22233. +
  22234. +DIGIT: Replace the word with a digit offered in the *Choices* buffer.
  22235. +SPC:   Accept word this time.
  22236. +`i':   Accept word and insert into private dictionary.
  22237. +`a':   Accept word for this session.
  22238. +`A':   Accept word and place in `buffer-local dictionary'.
  22239. +`r':   Replace word with typed-in value.  Rechecked.
  22240. +`R':   Replace word with typed-in value. Query-replaced in buffer. Rechecked.
  22241. +`?':   Show these commands.
  22242. +`x':   Exit spelling buffer.  Move cursor to original point.
  22243. +`X':   Exit spelling buffer.  Leaves cursor at the current point, and permits
  22244. +        the aborted check to be completed later.
  22245. +`q':   Quit spelling session (Kills ispell process).
  22246. +`l':   Look up typed-in replacement in alternate dictionary.  Wildcards okay.
  22247. +`u':   Like `i', but the word is lower-cased first.
  22248. +`m':   Like `i', but allows one to include dictionary completion information.
  22249. +`C-l':  redraws screen
  22250. +`C-r':  recursive edit
  22251. +`C-z':  suspend emacs or iconify frameFispell-kill-ispell
  22252. +Kill current Ispell process (so that you may start a fresh one).
  22253. +With NO-ERROR, just return non-nil if there was no Ispell running.Fispell-change-dictionary
  22254. +Change `ispell-dictionary' (q.v.) and kill old Ispell process.
  22255. +A new one will be started as soon as necessary.
  22256. +
  22257. +By just answering RET you can find out what the current dictionary is.
  22258. +
  22259. +With prefix argument, set the default directory.Fispell-region
  22260. +Interactively check a region for spelling errors.Fispell-buffer
  22261. +Check the current buffer for spelling errors interactively.Fispell-complete-word
  22262. +Look up word before or under point in dictionary (see lookup-words command)
  22263. +and try to complete it.  If optional INTERIOR-FRAG is non-nil then the word
  22264. +may be a character sequence inside of a word.
  22265. +
  22266. +Standard ispell choices are then available.Fispell-complete-word-interior-frag
  22267. +Completes word matching character sequence inside a word.Fispell-message
  22268. +Check the spelling of a mail message or news post.
  22269. +Don't check spelling of message headers except the Subject field.
  22270. +Don't check included messages.
  22271. +
  22272. +To abort spell checking of a message REGION and send the message anyway,
  22273. +use the `x' or `q' command.  (Any subsequent regions will be checked.)
  22274. +The `X' command aborts the message send so that you can edit the buffer.
  22275. +
  22276. +To spell-check whenever a message is sent, include the appropriate lines
  22277. +in your .emacs file:
  22278. +   (add-hook 'news-inews-hook 'ispell-message)
  22279. +   (add-hook 'mail-send-hook  'ispell-message)
  22280. +   (add-hook 'mh-before-send-letter-hook 'ispell-message)
  22281. +
  22282. +you can bind this to the key C-c i in GNUS or mail by adding to
  22283. +`news-reply-mode-hook' or `mail-mode-hook' the following lambda expression:
  22284. +   (function (lambda () (local-set-key "\C-ci" 'ispell-message)))Vledit-save-files
  22285. +*Non-nil means Ledit should save files before transferring to Lisp.Vledit-go-to-lisp-string
  22286. +*Shell commands to execute to resume Lisp job.Vledit-go-to-liszt-string
  22287. +*Shell commands to execute to resume Lisp compiler job.Fledit-mode
  22288. +\<ledit-mode-map>Major mode for editing text and stuffing it to a Lisp job.
  22289. +Like Lisp mode, plus these special commands:
  22290. +  \[ledit-save-defun]    -- record defun at or after point
  22291. +       for later transmission to Lisp job.
  22292. +  \[ledit-save-region] -- record region for later transmission to Lisp job.
  22293. +  \[ledit-go-to-lisp] -- transfer to Lisp job and transmit saved text.
  22294. +  \[ledit-go-to-liszt] -- transfer to Liszt (Lisp compiler) job
  22295. +       and transmit saved text.
  22296. +\{ledit-mode-map}
  22297. +To make Lisp mode automatically change to Ledit mode,
  22298. +do (setq lisp-mode-hook 'ledit-from-lisp-mode)Flife
  22299. +Run Conway's Life simulation.
  22300. +The starting pattern is randomly selected.  Prefix arg (optional first
  22301. +arg non-nil from a program) is the number of seconds to sleep between
  22302. +generations (this defaults to 1).Funload-feature
  22303. +Unload the library that provided FEATURE, restoring all its autoloads.
  22304. +If the feature is required by any other loaded code, and optional FORCE
  22305. +is nil, raise an error.Vlpr-switches
  22306. +*List of strings to pass as extra switch args to `lpr' when it is invoked.Vlpr-command
  22307. +*Shell command for printing a fileFlpr-buffer
  22308. +Print buffer contents as with Unix command `lpr'.
  22309. +`lpr-switches' is a list of extra switches (strings) to pass to lpr.Fprint-buffer
  22310. +Print buffer contents as with Unix command `lpr -p'.
  22311. +`lpr-switches' is a list of extra switches (strings) to pass to lpr.Flpr-region
  22312. +Print region contents as with Unix command `lpr'.
  22313. +`lpr-switches' is a list of extra switches (strings) to pass to lpr.Fprint-region
  22314. +Print region contents as with Unix command `lpr -p'.
  22315. +`lpr-switches' is a list of extra switches (strings) to pass to lpr.Fphases-of-moon
  22316. +Display the quarters of the moon for last month, this month, and next month.
  22317. +If called with an optional prefix argument, prompts for month and year.
  22318. +
  22319. +This function is suitable for execution in a .emacs file.Fname-last-kbd-macro
  22320. +Assign a name to the last keyboard macro defined.
  22321. +Argument SYMBOL is the name to define.
  22322. +The symbol's function definition becomes the keyboard macro string.
  22323. +Such a "function" cannot be called from Lisp, but it is a valid editor command.Finsert-kbd-macro
  22324. +Insert in buffer the definition of kbd macro NAME, as Lisp code.
  22325. +Optional second arg KEYS means also record the keys it is on
  22326. +(this is the prefix argument, when calling interactively).
  22327. +
  22328. +This Lisp code will, when executed, define the kbd macro with the same
  22329. +definition it has now.  If you say to record the keys, the Lisp code
  22330. +will also rebind those keys to the macro.  Only global key bindings
  22331. +are recorded since executing this Lisp code always makes global
  22332. +bindings.
  22333. +
  22334. +To save a kbd macro, visit a file of Lisp code such as your `~/.emacs',
  22335. +use this command, and then save the file.Fkbd-macro-query
  22336. +Query user during kbd macro execution.
  22337. +  With prefix argument, enters recursive edit, reading keyboard
  22338. +commands even within a kbd macro.  You can give different commands
  22339. +each time the macro executes.
  22340. +  Without prefix argument, asks whether to continue running the macro.
  22341. +Your options are: \<query-replace-map>
  22342. +\[act]    Finish this iteration normally and continue with the next.
  22343. +\[skip]    Skip the rest of this iteration, and start the next.
  22344. +\[exit]    Stop the macro entirely right now.
  22345. +\[recenter]    Redisplay the screen, then ask again.
  22346. +\[edit]    Enter recursive edit; ask again when you exit from that.Fapply-macro-to-region-lines
  22347. +For each complete line between point and mark, move to the beginning
  22348. +of the line, and run the last keyboard macro.
  22349. +
  22350. +When called from lisp, this function takes two arguments TOP and
  22351. +BOTTOM, describing the current region.  TOP must be before BOTTOM.
  22352. +The optional third argument MACRO specifies a keyboard macro to
  22353. +execute.
  22354. +
  22355. +This is useful for quoting or unquoting included text, adding and
  22356. +removing comments, or producing tables where the entries are regular.
  22357. +
  22358. +For example, in Usenet articles, sections of text quoted from another
  22359. +author are indented, or have each line start with `>'.  To quote a
  22360. +section of text, define a keyboard macro which inserts `>', put point
  22361. +and mark at opposite ends of the quoted section, and use
  22362. +`\[apply-macro-to-region-lines]' to mark the entire section.
  22363. +
  22364. +Suppose you wanted to build a keyword table in C where each entry
  22365. +looked like this:
  22366. +
  22367. +    { "foo", foo_data, foo_function }, 
  22368. +    { "bar", bar_data, bar_function },
  22369. +    { "baz", baz_data, baz_function },
  22370. +
  22371. +You could enter the names in this format:
  22372. +
  22373. +    foo
  22374. +    bar
  22375. +    baz
  22376. +
  22377. +and write a macro to massage a word into a table entry:
  22378. +
  22379. +    \C-x (
  22380. +       \M-d { "\C-y", \C-y_data, \C-y_function },
  22381. +    \C-x )
  22382. +
  22383. +and then select the region of un-tablified names and use
  22384. +`\[apply-macro-to-region-lines]' to build the table from the names.
  22385. +Fmail-extract-address-components
  22386. +Given an RFC-822 ADDRESS, extract full name and canonical address.
  22387. +Returns a list of the form (FULL-NAME CANONICAL-ADDRESS).
  22388. +If no name can be extracted, FULL-NAME will be nil.
  22389. +ADDRESS may be a string or a buffer.  If it is a buffer, the visible 
  22390. + (narrowed) portion of the buffer will be interpreted as the address.
  22391. + (This feature exists so that the clever caller might be able to avoid
  22392. + consing a string.)
  22393. +If ADDRESS contains more than one RFC-822 address, only the first is
  22394. + returned.  Some day this function may be extended to extract multiple
  22395. + addresses, or perhaps return the position at which parsing stopped.Fwhat-domain
  22396. +Convert mail domain to country tit corresponds to.Vmail-use-rfc822
  22397. +*If non-nil, use a full, hairy RFC822 parser on mail addresses.
  22398. +Otherwise, (the default) use a smaller, somewhat faster, and
  22399. +often correct parser.Fmail-fetch-field
  22400. +Return the value of the header field FIELD-NAME.
  22401. +The buffer is expected to be narrowed to just the headers of the message.
  22402. +If second arg LAST is non-nil, use the last such field if there are several.
  22403. +If third arg ALL is non-nil, concatenate all such fields with commas between.Fbuild-mail-abbrevs
  22404. +Read mail aliases from `~/.mailrc' file and set `mail-abbrevs'.Fdefine-mail-abbrev
  22405. +Define NAME as a mail-abbrev that translates to DEFINITION.
  22406. +If DEFINITION contains multiple addresses, separate them with commas.Fdefine-mail-alias
  22407. +Define NAME as a mail alias that translates to DEFINITION.
  22408. +This means that sending a message to NAME will actually send to DEFINITION.
  22409. +DEFINITION can be one or more mail addresses separated by commas.Fmakefile-mode
  22410. +Major mode for editing Makefiles.
  22411. +Calling this function invokes the function(s) "makefile-mode-hook" before
  22412. +doing anything else.
  22413. +
  22414. +\{makefile-mode-map}
  22415. +
  22416. +In the browser, use the following keys:
  22417. +
  22418. +\{makefile-browser-map}
  22419. +
  22420. +makefile-mode can be configured by modifying the following
  22421. +variables:
  22422. +
  22423. +makefile-mode-name:
  22424. +    The "pretty name" of makefile-mode, as it
  22425. +    appears in the modeline.
  22426. +
  22427. +makefile-browser-buffer-name:
  22428. +    Name of the macro- and target browser buffer.
  22429. +
  22430. +makefile-target-colon:
  22431. +    The string that gets appended to all target names
  22432. +    inserted by makefile-insert-target.
  22433. +    ":" or "::" are quite common values.
  22434. +
  22435. +makefile-macro-assign:
  22436. +   The string that gets appended to all macro names
  22437. +   inserted by makefile-insert-macro.
  22438. +   The normal value should be " = ", since this is what
  22439. +   standard make expects. However, newer makes such as dmake
  22440. +   allow a larger variety of different macro assignments, so you
  22441. +   might prefer to use " += " or " := " .
  22442. +
  22443. +makefile-tab-after-target-colon:
  22444. +   If you want a TAB (instead of a space) to be appended after the
  22445. +   target colon, then set this to a non-nil value.
  22446. +
  22447. +makefile-browser-leftmost-column:
  22448. +   Number of blanks to the left of the browser selection mark.
  22449. +
  22450. +makefile-browser-cursor-column:
  22451. +   Column in which the cursor is positioned when it moves
  22452. +   up or down in the browser.
  22453. +
  22454. +makefile-browser-selected-mark:
  22455. +   String used to mark selected entries in the browser.
  22456. +
  22457. +makefile-browser-unselected-mark:
  22458. +   String used to mark unselected entries in the browser.
  22459. +
  22460. +makefile-browser-auto-advance-after-selection-p:
  22461. +   If this variable is set to a non-nil value the cursor
  22462. +   will automagically advance to the next line after an item
  22463. +   has been selected in the browser.
  22464. +
  22465. +makefile-pickup-everything-picks-up-filenames-p:
  22466. +   If this variable is set to a non-nil value then
  22467. +   makefile-pickup-everything also picks up filenames as targets
  22468. +   (i.e. it calls makefile-find-filenames-as-targets), otherwise
  22469. +   filenames are omitted.
  22470. +
  22471. +makefile-cleanup-continuations-p:
  22472. +   If this variable is set to a non-nil value then makefile-mode
  22473. +   will assure that no line in the file ends with a backslash
  22474. +   (the continuation character) followed by any whitespace.
  22475. +   This is done by silently removing the trailing whitespace, leaving
  22476. +   the backslash itself intact.
  22477. +   IMPORTANT: Please note that enabling this option causes makefile-mode
  22478. +   to MODIFY A FILE WITHOUT YOUR CONFIRMATION when 'it seems necessary'.
  22479. +
  22480. +makefile-browser-hook:
  22481. +   A function or list of functions to be called just before the
  22482. +   browser is entered. This is executed in the makefile buffer.
  22483. +
  22484. +makefile-special-targets-list:
  22485. +   List of special targets. You will be offered to complete
  22486. +   on one of those in the minibuffer whenever you enter a "."
  22487. +   at the beginning of a line in makefile-mode.Fmake-command-summary
  22488. +Make a summary of current key bindings in the buffer *Summary*.
  22489. +Previous contents of that buffer are killed first.Fmanual-entry
  22490. +Get a Un*x manual page and put it in a buffer.
  22491. +This command is the top-level command in the man package.  It runs a Un*x
  22492. +command to retrieve and clean a manpage in the background and places the
  22493. +results in a Man mode (manpage browsing) buffer.  See variable
  22494. +`Man-notify' for what happens when the buffer is ready.
  22495. +Normally, if a buffer already exists for this man page, it will display
  22496. +immediately; either a prefix argument or a nil value to `Man-reuse-okay-p'
  22497. +overrides this and forces the man page to be regenerated.Fmap-y-or-n-p
  22498. +Ask a series of boolean questions.
  22499. +Takes args PROMPTER ACTOR LIST, and optional args HELP and ACTION-ALIST.
  22500. +
  22501. +LIST is a list of objects, or a function of no arguments to return the next
  22502. +object or nil.
  22503. +
  22504. +If PROMPTER is a string, the prompt is (format PROMPTER OBJECT).  If not
  22505. +a string, PROMPTER is a function of one arg (an object from LIST), which
  22506. +returns a string to be used as the prompt for that object.  If the return
  22507. +value is not a string, it is eval'd to get the answer; it may be nil to
  22508. +ignore the object, t to act on the object without asking the user, or a
  22509. +form to do a more complex prompt.
  22510. +
  22511. +ACTOR is a function of one arg (an object from LIST),
  22512. +which gets called with each object that the user answers `yes' for.
  22513. +
  22514. +If HELP is given, it is a list (OBJECT OBJECTS ACTION),
  22515. +where OBJECT is a string giving the singular noun for an elt of LIST;
  22516. +OBJECTS is the plural noun for elts of LIST, and ACTION is a transitive
  22517. +verb describing ACTOR.  The default is ("object" "objects" "act on").
  22518. +
  22519. +At the prompts, the user may enter y, Y, or SPC to act on that object;
  22520. +n, N, or DEL to skip that object; ! to act on all following objects;
  22521. +ESC or q to exit (skip all following objects); . (period) to act on the
  22522. +current object and then exit; or \[help-command] to get help.
  22523. +
  22524. +If ACTION-ALIST is given, it is an alist (KEY FUNCTION HELP) of extra keys
  22525. +that will be accepted.  KEY is a character; FUNCTION is a function of one
  22526. +arg (an object from LIST); HELP is a string.  When the user hits KEY,
  22527. +FUNCTION is called.  If it returns non-nil, the object is considered
  22528. +"acted upon", and the next object from LIST is processed.  If it returns
  22529. +nil, the prompt is repeated for the same object.
  22530. +
  22531. +Final optional argument NO-CURSOR-IN-ECHO-AREA non-nil says not to set
  22532. +`cursor-in-echo-area' while prompting.
  22533. +
  22534. +This function uses `query-replace-map' to define the standard responses,
  22535. +but not all of the responses which `query-replace' understands
  22536. +are meaningful here.
  22537. +
  22538. +Returns the number of actions taken.Fmh-smail
  22539. +Compose and send mail with the MH mail system.
  22540. +This function is an entry point to mh-e, the Emacs front end
  22541. +to the MH mail system.Fmh-smail-other-window
  22542. +Compose and send mail in other window with the MH mail system.
  22543. +This function is an entry point to mh-e, the Emacs front end
  22544. +to the MH mail system.Fmh-letter-mode
  22545. +Mode for composing letters in mh-e.\<mh-letter-mode-map>
  22546. +When you have finished composing, type \[mh-send-letter] to send the letter.
  22547. +
  22548. +\{mh-letter-mode-map}
  22549. +
  22550. +Variables controlling this mode (defaults in parentheses):
  22551. +
  22552. + mh-delete-yanked-msg-window (nil)
  22553. +    If non-nil, \[mh-yank-cur-msg] will delete any windows displaying
  22554. +    the yanked message.
  22555. +
  22556. + mh-yank-from-start-of-msg (t)
  22557. +    If non-nil, \[mh-yank-cur-msg] will include the entire message.
  22558. +    If `body', just yank the body (no header).
  22559. +    If nil, only the portion of the message following the point will be yanked.
  22560. +    If there is a region, this variable is ignored.
  22561. +
  22562. + mh-signature-file-name ("~/.signature")
  22563. +    File to be inserted into message by \[mh-insert-signature].
  22564. +
  22565. +Upon invoking mh-letter-mode, text-mode-hook and mh-letter-mode-hook are
  22566. +invoked with no args, if those values are non-nil.Fmh-rmail
  22567. +Inc(orporate) new mail with MH, or, with arg, scan an MH mail folder.
  22568. +This function is an entry point to mh-e, the Emacs front end
  22569. +to the MH mail system.Fconvert-mocklisp-buffer
  22570. +Convert buffer of Mocklisp code to real Lisp that GNU Emacs can run.Fmodula-2-mode
  22571. +This is a mode intended to support program development in Modula-2.
  22572. +All control constructs of Modula-2 can be reached by typing C-c
  22573. +followed by the first character of the construct.
  22574. +\<m2-mode-map>
  22575. +  \[m2-begin] begin         \[m2-case] case
  22576. +  \[m2-definition] definition    \[m2-else] else
  22577. +  \[m2-for] for           \[m2-header] header
  22578. +  \[m2-if] if            \[m2-module] module
  22579. +  \[m2-loop] loop          \[m2-or] or
  22580. +  \[m2-procedure] procedure     Control-c Control-w with
  22581. +  \[m2-record] record        \[m2-stdio] stdio
  22582. +  \[m2-type] type          \[m2-until] until
  22583. +  \[m2-var] var           \[m2-while] while
  22584. +  \[m2-export] export        \[m2-import] import
  22585. +  \[m2-begin-comment] begin-comment \[m2-end-comment] end-comment
  22586. +  \[suspend-emacs] suspend Emacs     \[m2-toggle] toggle
  22587. +  \[m2-compile] compile           \[m2-next-error] next-error
  22588. +  \[m2-link] link
  22589. +
  22590. +   `m2-indent' controls the number of spaces for each indentation.
  22591. +   `m2-compile-command' holds the command to compile a Modula-2 program.
  22592. +   `m2-link-command' holds the command to link a Modula-2 program.Fmpuz
  22593. +Multiplication puzzle with GNU Emacs.Fenable-command
  22594. +Allow COMMAND to be executed without special confirmation from now on.
  22595. +The user's .emacs file is altered so that this will apply
  22596. +to future sessions.Fdisable-command
  22597. +Require special confirmation to execute COMMAND from now on.
  22598. +The user's .emacs file is altered so that this will apply
  22599. +to future sessions.Fnroff-mode
  22600. +Major mode for editing text intended for nroff to format.
  22601. +\{nroff-mode-map}
  22602. +Turning on Nroff mode runs `text-mode-hook', then `nroff-mode-hook'.
  22603. +Also, try `nroff-electric-mode', for automatically inserting
  22604. +closing requests for requests that are used in matched pairs.Flist-options
  22605. +Display a list of Emacs user options, with values and documentation.Fedit-options
  22606. +Edit a list of Emacs user option values.
  22607. +Selects a buffer containing such a list,
  22608. +in which there are commands to set the option values.
  22609. +Type \[describe-mode] in that buffer for a list of commands.Foutline-mode
  22610. +Set major mode for editing outlines with selective display.
  22611. +Headings are lines which start with asterisks: one for major headings,
  22612. +two for subheadings, etc.  Lines not starting with asterisks are body lines. 
  22613. +
  22614. +Body text or subheadings under a heading can be made temporarily
  22615. +invisible, or visible again.  Invisible lines are attached to the end 
  22616. +of the heading, so they move with it, if the line is killed and yanked
  22617. +back.  A heading with text hidden under it is marked with an ellipsis (...).
  22618. +
  22619. +Commands:\<outline-mode-map>
  22620. +\[outline-next-visible-heading]   outline-next-visible-heading      move by visible headings
  22621. +\[outline-previous-visible-heading]   outline-previous-visible-heading
  22622. +\[outline-forward-same-level]   outline-forward-same-level        similar but skip subheadings
  22623. +\[outline-backward-same-level]   outline-backward-same-level
  22624. +\[outline-up-heading]   outline-up-heading            move from subheading to heading
  22625. +
  22626. +\[hide-body]    make all text invisible (not headings).
  22627. +\[show-all]    make everything in buffer visible.
  22628. +
  22629. +The remaining commands are used when point is on a heading line.
  22630. +They apply to some of the body or subheadings of that heading.
  22631. +\[hide-subtree]   hide-subtree    make body and subheadings invisible.
  22632. +\[show-subtree]   show-subtree    make body and subheadings visible.
  22633. +\[show-children]   show-children    make direct subheadings visible.
  22634. +         No effect on body, or subheadings 2 or more levels down.
  22635. +         With arg N, affects subheadings N levels down.
  22636. +\[hide-entry]       make immediately following body invisible.
  22637. +\[show-entry]       make it visible.
  22638. +\[hide-leaves]       make body under heading and under its subheadings invisible.
  22639. +             The subheadings remain visible.
  22640. +\[show-branches]  make all subheadings at all levels visible.
  22641. +
  22642. +The variable `outline-regexp' can be changed to control what is a heading.
  22643. +A line is a heading if `outline-regexp' matches something at the
  22644. +beginning of the line.  The longer the match, the deeper the level.
  22645. +
  22646. +Turning on outline mode calls the value of `text-mode-hook' and then of
  22647. +`outline-mode-hook', if they are non-nil.Foutline-minor-mode
  22648. +Toggle Outline minor mode.
  22649. +With arg, turn Outline minor mode on if arg is positive, off otherwise.
  22650. +See the command `outline-mode' for more information on this mode.Fpascal-mode
  22651. +Major mode for editing Pascal code. \<pascal-mode-map>
  22652. +TAB indents for Pascal code.  Delete converts tabs to spaces as it moves back.
  22653. +
  22654. +\[pascal-complete-word] completes the word around current point with respect to position in code
  22655. +\[pascal-show-completions] shows all possible completions at this point.
  22656. +
  22657. +Other useful functions are:
  22658. +
  22659. +\[pascal-mark-defun]    - Mark function.
  22660. +\[pascal-insert-block]    - insert begin ... end;
  22661. +\[pascal-star-comment]    - insert (* ... *)
  22662. +\[pascal-comment-area]    - Put marked area in a comment, fixing nested comments.
  22663. +\[pascal-uncomment-area]    - Uncomment an area commented with \[pascal-comment-area].
  22664. +\[pascal-beg-of-defun]    - Move to beginning of current function.
  22665. +\[pascal-end-of-defun]    - Move to end of current function.
  22666. +\[pascal-goto-defun]    - Goto function prompted for in the minibuffer.
  22667. +\[pascal-outline]    - Enter pascal-outline-mode (see also pascal-outline).
  22668. +
  22669. +Variables controlling indentation/edit style:
  22670. +
  22671. + pascal-indent-level      (default 3)
  22672. +    Indentation of Pascal statements with respect to containing block.
  22673. + pascal-case-indent       (default 2)
  22674. +    Indentation for case statements.
  22675. + pascal-auto-newline      (default nil)
  22676. +    Non-nil means automatically newline after simcolons and the punctation mark
  22677. +    after an end.
  22678. + pascal-tab-always-indent (defualt t)
  22679. +    Non-nil means TAB in Pascal mode should always reindent the current line,
  22680. +    regardless of where in the line point is when the TAB command is used.
  22681. + pascal-auto-endcomments  (default t)
  22682. +    Non-nil means a comment { ... } is set after the ends which ends cases and
  22683. +    functions. The name of the function or case will be set between the braces.
  22684. +
  22685. +See also the user variables pascal-type-keywords, pascal-start-keywords and
  22686. +pascal-separator-keywords.
  22687. +
  22688. +Turning on Pascal mode calls the value of the variable pascal-mode-hook with
  22689. +no args, if that value is non-nil.Fperl-mode
  22690. +Major mode for editing Perl code.
  22691. +Expression and list commands understand all Perl brackets.
  22692. +Tab indents for Perl code.
  22693. +Comments are delimited with # ... \n.
  22694. +Paragraphs are separated by blank lines only.
  22695. +Delete converts tabs to spaces as it moves back.
  22696. +\{perl-mode-map}
  22697. +Variables controlling indentation style:
  22698. + perl-tab-always-indent
  22699. +    Non-nil means TAB in Perl mode should always indent the current line,
  22700. +    regardless of where in the line point is when the TAB command is used.
  22701. + perl-tab-to-comment
  22702. +    Non-nil means that for lines which don't need indenting, TAB will
  22703. +    either delete an empty comment, indent an existing comment, move 
  22704. +    to end-of-line, or if at end-of-line already, create a new comment.
  22705. + perl-nochange
  22706. +    Lines starting with this regular expression are not auto-indented.
  22707. + perl-indent-level
  22708. +    Indentation of Perl statements within surrounding block.
  22709. +    The surrounding block's indentation is the indentation
  22710. +    of the line on which the open-brace appears.
  22711. + perl-continued-statement-offset
  22712. +    Extra indentation given to a substatement, such as the
  22713. +    then-clause of an if or body of a while.
  22714. + perl-continued-brace-offset
  22715. +    Extra indentation given to a brace that starts a substatement.
  22716. +    This is in addition to `perl-continued-statement-offset'.
  22717. + perl-brace-offset
  22718. +    Extra indentation for line if it starts with an open brace.
  22719. + perl-brace-imaginary-offset
  22720. +    An open brace following other text is treated as if it were
  22721. +    this far to the right of the start of its line.
  22722. + perl-label-offset
  22723. +    Extra indentation for line that is a label.
  22724. +
  22725. +Various indentation styles:       K&R  BSD  BLK  GNU  LW
  22726. +  perl-indent-level                5    8    0    2    4
  22727. +  perl-continued-statement-offset  5    8    4    2    4
  22728. +  perl-continued-brace-offset      0    0    0    0   -4
  22729. +  perl-brace-offset               -5   -8    0    0    0
  22730. +  perl-brace-imaginary-offset      0    0    4    0    0
  22731. +  perl-label-offset               -5   -8   -2   -2   -2
  22732. +
  22733. +Turning on Perl mode runs the normal hook `perl-mode-hook'.Fpicture-mode
  22734. +Switch to Picture mode, in which a quarter-plane screen model is used.
  22735. +Printing characters replace instead of inserting themselves with motion
  22736. +afterwards settable by these commands:
  22737. +  C-c <      Move left after insertion.
  22738. +  C-c >      Move right after insertion.
  22739. +  C-c ^      Move up after insertion.
  22740. +  C-c .      Move down after insertion.
  22741. +  C-c `      Move northwest (nw) after insertion.
  22742. +  C-c '      Move northeast (ne) after insertion.
  22743. +  C-c /      Move southwest (sw) after insertion.
  22744. +  C-c \   Move southeast (se) after insertion.
  22745. +The current direction is displayed in the mode line.  The initial
  22746. +direction is right.  Whitespace is inserted and tabs are changed to
  22747. +spaces when required by movement.  You can move around in the buffer
  22748. +with these commands:
  22749. +  \[picture-move-down]      Move vertically to SAME column in previous line.
  22750. +  \[picture-move-up]      Move vertically to SAME column in next line.
  22751. +  \[picture-end-of-line]      Move to column following last non-whitespace character.
  22752. +  \[picture-forward-column]      Move right inserting spaces if required.
  22753. +  \[picture-backward-column]      Move left changing tabs to spaces if required.
  22754. +  C-c C-f Move in direction of current picture motion.
  22755. +  C-c C-b Move in opposite direction of current picture motion.
  22756. +  Return  Move to beginning of next line.
  22757. +You can edit tabular text with these commands:
  22758. +  M-Tab      Move to column beneath (or at) next interesting character.
  22759. +        `Indents' relative to a previous line.
  22760. +  Tab      Move to next stop in tab stop list.
  22761. +  C-c Tab Set tab stops according to context of this line.
  22762. +        With ARG resets tab stops to default (global) value.
  22763. +        See also documentation of variable    picture-tab-chars
  22764. +        which defines "interesting character".  You can manually
  22765. +        change the tab stop list with command \[edit-tab-stops].
  22766. +You can manipulate text with these commands:
  22767. +  C-d      Clear (replace) ARG columns after point without moving.
  22768. +  C-c C-d Delete char at point - the command normally assigned to C-d.
  22769. +  \[picture-backward-clear-column]  Clear (replace) ARG columns before point, moving back over them.
  22770. +  \[picture-clear-line]      Clear ARG lines, advancing over them.     The cleared
  22771. +        text is saved in the kill ring.
  22772. +  \[picture-open-line]      Open blank line(s) beneath current line.
  22773. +You can manipulate rectangles with these commands:
  22774. +  C-c C-k Clear (or kill) a rectangle and save it.
  22775. +  C-c C-w Like C-c C-k except rectangle is saved in named register.
  22776. +  C-c C-y Overlay (or insert) currently saved rectangle at point.
  22777. +  C-c C-x Like C-c C-y except rectangle is taken from named register.
  22778. +  \[copy-rectangle-to-register]   Copies a rectangle to a register.
  22779. +  \[advertised-undo]   Can undo effects of rectangle overlay commands
  22780. +        commands if invoked soon enough.
  22781. +You can return to the previous mode with:
  22782. +  C-c C-c Which also strips trailing whitespace from every line.
  22783. +        Stripping is suppressed by supplying an argument.
  22784. +
  22785. +Entry to this mode calls the value of  picture-mode-hook  if non-nil.
  22786. +
  22787. +Note that Picture mode commands will work outside of Picture mode, but
  22788. +they are not defaultly assigned to keys.Fprolog-mode
  22789. +Major mode for editing Prolog code for Prologs.
  22790. +Blank lines and `%%...' separate paragraphs.  `%'s start comments.
  22791. +Commands:
  22792. +\{prolog-mode-map}
  22793. +Entry to this mode calls the value of `prolog-mode-hook'
  22794. +if that value is non-nil.Frun-prolog
  22795. +Run an inferior Prolog process, input and output via buffer *prolog*.Fremote-compile
  22796. +Compile the the current buffer's directory on HOST.  Log in as USER.
  22797. +See \[compile].Fdelete-rectangle
  22798. +Delete (don't save) text in rectangle with point and mark as corners.
  22799. +The same range of columns is deleted in each line starting with the line
  22800. +where the region begins and ending with the line where the region ends.Fdelete-extract-rectangle
  22801. +Delete contents of rectangle and return it as a list of strings.
  22802. +Arguments START and END are the corners of the rectangle.
  22803. +The value is list of strings, one for each line of the rectangle.Fextract-rectangle
  22804. +Return contents of rectangle with corners at START and END.
  22805. +Value is list of strings, one for each line of the rectangle.Fkill-rectangle
  22806. +Delete rectangle with corners at point and mark; save as last killed one.
  22807. +Calling from program, supply two args START and END, buffer positions.
  22808. +But in programs you might prefer to use `delete-extract-rectangle'.Fyank-rectangle
  22809. +Yank the last killed rectangle with upper left corner at point.Finsert-rectangle
  22810. +Insert text of RECTANGLE with upper left corner at point.
  22811. +RECTANGLE's first line is inserted at point, its second
  22812. +line is inserted at a point vertically under point, etc.
  22813. +RECTANGLE should be a list of strings.
  22814. +After this command, the mark is at the upper left corner
  22815. +and point is at the lower right corner.Fopen-rectangle
  22816. +Blank out rectangle with corners at point and mark, shifting text right.
  22817. +The text previously in the region is not overwritten by the blanks,
  22818. +but instead winds up to the right of the rectangle.Fstring-rectangle
  22819. +Insert STRING on each line of the region-rectangle, shifting text right.
  22820. +The left edge of the rectangle specifies the column for insertion.
  22821. +This command does not delete or overwrite any existing text.
  22822. +
  22823. +Called from a program, takes three args; START, END and STRING.Fclear-rectangle
  22824. +Blank out rectangle with corners at point and mark.
  22825. +The text previously in the region is overwritten by the blanks.
  22826. +When called from a program, requires two args which specify the corners.Freposition-window
  22827. +Make the current definition and/or comment visible.
  22828. +Further invocations move it to the top of the window or toggle the
  22829. +visibility of comments that precede it.
  22830. +  Point is left unchanged unless prefix ARG is supplied.
  22831. +  If the definition is fully onscreen, it is moved to the top of the
  22832. +window.  If it is partly offscreen, the window is scrolled to get the
  22833. +definition (or as much as will fit) onscreen, unless point is in a comment
  22834. +which is also partly offscreen, in which case the scrolling attempts to get
  22835. +as much of the comment onscreen as possible.
  22836. +  Initially `reposition-window' attempts to make both the definition and
  22837. +preceding comments visible.  Further invocations toggle the visibility of
  22838. +the comment lines.
  22839. +  If ARG is non-nil, point may move in order to make the whole defun
  22840. +visible (if only part could otherwise be made so), to make the defun line
  22841. +visible (if point is in code and it could not be made so, or if only
  22842. +comments, including the first comment line, are visible), or to make the
  22843. +first comment line visible (if point is in a comment).Fresume-suspend-hook
  22844. +Clear out the file used for transmitting args when Emacs resumes.Fring-p
  22845. +Returns t if X is a ring; nil otherwise.Fmake-ring
  22846. +Make a ring that can contain SIZE elements.Vrlogin-program
  22847. +*Name of program to invoke rloginVrlogin-explicit-args
  22848. +*List of arguments to pass to rlogin on the command line.Vrlogin-mode-hook
  22849. +*Hooks to run after setting current buffer to rlogin-mode.Vrlogin-process-connection-type
  22850. +*If non-`nil', use a pty for the local rlogin process.  
  22851. +If `nil', use a pipe (if pipes are supported on the local system).  
  22852. +
  22853. +Generally it is better not to waste ptys on systems which have a static
  22854. +number of them.  On the other hand, some implementations of `rlogin' assume
  22855. +a pty is being used, and errors will result from using a pipe instead.Vrlogin-initially-track-cwd
  22856. +*If non-`nil', do remote directory tracking via ange-ftp right away.
  22857. +If `nil', you can still enable directory tracking by doing 
  22858. +`M-x dirtrack-toggle'.Vrlogin-password-paranoia
  22859. +*If non-`nil', query user for a password in the minibuffer when a Password: prompt appears.
  22860. +It's also possible to selectively enter passwords without echoing them in
  22861. +the minibuffer using the command `rlogin-password' explicitly.Frlogin
  22862. +Open a network login connection to HOST via the `rlogin' program.
  22863. +Input is sent line-at-a-time to the remote connection.
  22864. +
  22865. +Communication with the remote host is recorded in a buffer *rlogin-HOST*,
  22866. +where HOST is the first word in the string ARGS.  If a prefix argument is
  22867. +given and the buffer *rlogin-HOST* already exists, a new buffer with a
  22868. +different connection will be made.
  22869. +
  22870. +The variable `rlogin-program' contains the name of the actual program to
  22871. +run.  It can be a relative or absolute path. 
  22872. +
  22873. +The variable `rlogin-explicit-args' is a list of arguments to give to
  22874. +the rlogin when starting.  They are added after any arguments given in ARGS.Vrmail-dont-reply-to-names
  22875. +*A regexp specifying names to prune of reply to messages.
  22876. +A value of nil means exclude your own name only.Vrmail-default-dont-reply-to-names
  22877. +A regular expression specifying part of the value of the default value of
  22878. +the variable `rmail-dont-reply-to-names', for when the user does not set
  22879. +`rmail-dont-reply-to-names' explicitly.  (The other part of the default
  22880. +value is the user's name.)
  22881. +It is useful to set this variable in the site customization file.Vrmail-ignored-headers
  22882. +*Regexp to match Header fields that Rmail should normally hide.Vrmail-highlighted-headers
  22883. +*Regexp to match Header fields that Rmail should normally highlight.
  22884. +A value of nil means don't highlight.
  22885. +See also `rmail-highlight-face'.Vrmail-highlight-face
  22886. +*Face used by Rmail for highlighting headers.Vrmail-delete-after-output
  22887. +*Non-nil means automatically delete a message that is copied to a file.Vrmail-primary-inbox-list
  22888. +*List of files which are inboxes for user's primary mail file `~/RMAIL'.
  22889. +`nil' means the default, which is ("/usr/spool/mail/$USER")
  22890. +(the name varies depending on the operating system,
  22891. +and the value of the environment variable MAIL overrides it).Vrmail-mail-new-frame
  22892. +*Non-nil means Rmail makes a new frame for composing outgoing mail.Vrmail-retry-setup-hook
  22893. +Hook that `rmail-retry-failure' uses in place of `mail-setup-hook'.Vrmail-secondary-file-directory
  22894. +*Directory for additional secondary Rmail files.Vrmail-secondary-file-regexp
  22895. +*Regexp for which files are secondary Rmail files.Frmail
  22896. +Read and edit incoming mail.
  22897. +Moves messages into file named by `rmail-file-name' (a babyl format file)
  22898. + and edits that file in RMAIL Mode.
  22899. +Type \[describe-mode] once editing that file, for a list of RMAIL commands.
  22900. +
  22901. +May be called with file name as argument; then performs rmail editing on
  22902. +that file, but does not copy any new mail into the file.
  22903. +Interactively, if you supply a prefix argument, then you
  22904. +have a chance to specify a file name with the minibuffer.
  22905. +
  22906. +If `rmail-display-summary' is non-nil, make a summary for this RMAIL file.Frmail-mode
  22907. +Rmail Mode is used by \<rmail-mode-map>\[rmail] for editing Rmail files.
  22908. +All normal editing commands are turned off.
  22909. +Instead, these commands are available:
  22910. +
  22911. +\[rmail-beginning-of-message]    Move point to front of this message (same as \[beginning-of-buffer]).
  22912. +\[scroll-up]    Scroll to next screen of this message.
  22913. +\[scroll-down]    Scroll to previous screen of this message.
  22914. +\[rmail-next-undeleted-message]    Move to Next non-deleted message.
  22915. +\[rmail-previous-undeleted-message]    Move to Previous non-deleted message.
  22916. +\[rmail-next-message]    Move to Next message whether deleted or not.
  22917. +\[rmail-previous-message]    Move to Previous message whether deleted or not.
  22918. +\[rmail-first-message]    Move to the first message in Rmail file.
  22919. +\[rmail-last-message]    Move to the last message in Rmail file.
  22920. +\[rmail-show-message]    Jump to message specified by numeric position in file.
  22921. +\[rmail-search]    Search for string and show message it is found in.
  22922. +\[rmail-delete-forward]    Delete this message, move to next nondeleted.
  22923. +\[rmail-delete-backward]    Delete this message, move to previous nondeleted.
  22924. +\[rmail-undelete-previous-message]    Undelete message.  Tries current message, then earlier messages
  22925. +    till a deleted message is found.
  22926. +\[rmail-edit-current-message]    Edit the current message.  \[rmail-cease-edit] to return to Rmail.
  22927. +\[rmail-expunge]    Expunge deleted messages.
  22928. +\[rmail-expunge-and-save]    Expunge and save the file.
  22929. +\[rmail-quit]       Quit Rmail: expunge, save, then switch to another buffer.
  22930. +\[save-buffer] Save without expunging.
  22931. +\[rmail-get-new-mail]    Move new mail from system spool directory into this file.
  22932. +\[rmail-mail]    Mail a message (same as \[mail-other-window]).
  22933. +\[rmail-continue]    Continue composing outgoing message started before.
  22934. +\[rmail-reply]    Reply to this message.  Like \[rmail-mail] but initializes some fields.
  22935. +\[rmail-retry-failure]    Send this message again.  Used on a mailer failure message.
  22936. +\[rmail-forward]    Forward this message to another user.
  22937. +\[rmail-output-to-rmail-file]       Output this message to an Rmail file (append it).
  22938. +\[rmail-output]    Output this message to a Unix-format mail file (append it).
  22939. +\[rmail-input]    Input Rmail file.  Run Rmail on that file.
  22940. +\[rmail-add-label]    Add label to message.  It will be displayed in the mode line.
  22941. +\[rmail-kill-label]    Kill label.  Remove a label from current message.
  22942. +\[rmail-next-labeled-message]   Move to Next message with specified label
  22943. +          (label defaults to last one specified).
  22944. +          Standard labels: filed, unseen, answered, forwarded, deleted.
  22945. +          Any other label is present only if you add it with \[rmail-add-label].
  22946. +\[rmail-previous-labeled-message]   Move to Previous message with specified label
  22947. +\[rmail-summary]    Show headers buffer, with a one line summary of each message.
  22948. +\[rmail-summary-by-labels]    Summarize only messages with particular label(s).
  22949. +\[rmail-summary-by-recipients]   Summarize only messages with particular recipient(s).
  22950. +\[rmail-summary-by-regexp]   Summarize only messages with particular regexp(s).
  22951. +\[rmail-summary-by-topic]   Summarize only messages with subject line regexp(s).
  22952. +\[rmail-toggle-header]    Toggle display of complete header.Frmail-input
  22953. +Run Rmail on file FILENAME.Frot13-other-window
  22954. +Display current buffer in rot 13 in another window.
  22955. +To terminate the rot13 display, delete that window.Ftoggle-rot13-mode
  22956. +Toggle the use of rot 13 encoding for the current window.Vresize-minibuffer-mode
  22957. +*If non-`nil', resize the minibuffer so its entire contents are visible.Vresize-minibuffer-window-max-height
  22958. +*Maximum size the minibuffer window is allowed to become.
  22959. +If less than 1 or not a number, the limit is the height of the frame in
  22960. +which the active minibuffer window resides.Vresize-minibuffer-window-exactly
  22961. +*Allow making minibuffer exactly the size to display all its contents.
  22962. +If `nil', the minibuffer window can temporarily increase in size but
  22963. +never get smaller while it is active.  Any other value allows exact
  22964. +resizing.Vresize-minibuffer-frame
  22965. +*Allow changing the frame height of minibuffer frames.
  22966. +If non-`nil' and the active minibuffer is the sole window in its frame,
  22967. +allow changing the frame height.Vresize-minibuffer-frame-max-height
  22968. +*Maximum size the minibuffer frame is allowed to become.
  22969. +If less than 1 or not a number, there is no limit.Vresize-minibuffer-frame-exactly
  22970. +*Allow making minibuffer frame exactly the size to display all its contents.
  22971. +If `nil', the minibuffer frame can temporarily increase in size but
  22972. +never get smaller while it is active.  Any other value allows exact
  22973. +resizing.Fresize-minibuffer-mode
  22974. +Enable or disable resize-minibuffer mode.
  22975. +A negative prefix argument disables this mode.  A positive argument or
  22976. +argument of 0 enables it.
  22977. +
  22978. +When this minor mode is enabled, the minibuffer is dynamically resized to
  22979. +contain the entire region of text put in it as you type.
  22980. +
  22981. +The variable `resize-minibuffer-mode' is set to t or nil depending on
  22982. +whether this mode is active or not.
  22983. +
  22984. +The maximum height to which the minibuffer can grow is controlled by the
  22985. +variable `resize-minibuffer-window-max-height'.
  22986. +
  22987. +The variable `resize-minibuffer-window-exactly' determines whether the
  22988. +minibuffer window should ever be shrunk to make it no larger than needed to
  22989. +display its contents.
  22990. +
  22991. +When using a window system, it is possible for a minibuffer to be the sole
  22992. +window in a frame.  Since that window is already its maximum size, the only
  22993. +way to make more text visible at once is to increase the size of the frame.
  22994. +The variable `resize-minibuffer-frame' controls whether this should be
  22995. +done.  The variables `resize-minibuffer-frame-max-height' and
  22996. +`resize-minibuffer-frame-exactly' are analogous to their window
  22997. +counterparts.Fscheme-mode
  22998. +Major mode for editing Scheme code.
  22999. +Editing commands are similar to those of lisp-mode.
  23000. +
  23001. +In addition, if an inferior Scheme process is running, some additional
  23002. +commands will be defined, for evaluating expressions and controlling
  23003. +the interpreter, and the state of the process will be displayed in the
  23004. +modeline of all Scheme buffers.  The names of commands that interact
  23005. +with the Scheme process start with "xscheme-".  For more information
  23006. +see the documentation for xscheme-interaction-mode.
  23007. +
  23008. +Commands:
  23009. +Delete converts tabs to spaces as it moves back.
  23010. +Blank lines separate paragraphs.  Semicolons start comments.
  23011. +\{scheme-mode-map}
  23012. +Entry to this mode calls the value of scheme-mode-hook
  23013. +if that value is non-nil.Fscribe-mode
  23014. +Major mode for editing files of Scribe (a text formatter) source.
  23015. +Scribe-mode is similar text-mode, with a few extra commands added.
  23016. +\{scribe-mode-map}
  23017. +
  23018. +Interesting variables:
  23019. +
  23020. +scribe-fancy-paragraphs
  23021. +  Non-nil makes Scribe mode use a different style of paragraph separation.
  23022. +
  23023. +scribe-electric-quote
  23024. +  Non-nil makes insert of double quote use `` or '' depending on context.
  23025. +
  23026. +scribe-electric-parenthesis
  23027. +  Non-nil makes an open-parenthesis char (one of `([<{')
  23028. +  automatically insert its close if typed after an @Command form.Vmail-self-blind
  23029. +Non-nil means insert BCC to self in messages to be sent.
  23030. +This is done when the message is initialized,
  23031. +so you can remove or alter the BCC field to override the default.Vmail-interactive
  23032. +Non-nil means when sending a message wait for and display errors.
  23033. +nil means let mailer mail back a message to report errors.Vmail-yank-ignored-headers
  23034. +Delete these headers from old message when it's inserted in a reply.Vsend-mail-function
  23035. +Function to call to send the current buffer as mail.
  23036. +The headers are be delimited by a line which is `mail-header-separator'.Vmail-header-separator
  23037. +*Line used to separate headers from text in messages being composed.Vmail-archive-file-name
  23038. +*Name of file to write all outgoing messages in, or nil for none.
  23039. +Do not use an rmail file here!  Instead, use its inbox file.Vmail-default-reply-to
  23040. +*Address to insert as default Reply-to field of outgoing messages.Vmail-alias-file
  23041. +*If non-nil, the name of a file to use instead of `/usr/lib/aliases'.
  23042. +This file defines aliases to be expanded by the mailer; this is a different
  23043. +feature from that of defining aliases in `.mailrc' to be expanded in Emacs.
  23044. +This variable has no effect unless your system uses sendmail as its mailer.Vmail-signature
  23045. +*Text inserted at end of mail buffer when a message is initialized.
  23046. +If t, it means to insert the contents of the file `~/.signature'.Fmail-mode
  23047. +Major mode for editing mail to be sent.
  23048. +Like Text Mode but with these additional commands:
  23049. +C-c C-s  mail-send (send the message)    C-c C-c  mail-send-and-exit
  23050. +C-c C-f  move to a header field (and create it if there isn't):
  23051. +     C-c C-f C-t  move to To:    C-c C-f C-s  move to Subj:
  23052. +     C-c C-f C-b  move to BCC:    C-c C-f C-c  move to CC:
  23053. +     C-c C-f C-f  move to FCC:
  23054. +C-c C-t  move to message text.
  23055. +C-c C-y  mail-yank-original (insert current message, in Rmail).
  23056. +C-c C-q  mail-fill-yanked-message (fill what was yanked).
  23057. +C-c C-v  mail-sent-via (add a sent-via field for each To or CC).Fmail
  23058. +Edit a message to be sent.  Prefix arg means resume editing (don't erase).
  23059. +When this function returns, the buffer `*mail*' is selected.
  23060. +The value is t if the message was newly initialized; otherwise, nil.
  23061. +
  23062. +By default, the signature file `~/.signature' is inserted at the end;
  23063. +see the variable `mail-signature'.
  23064. +
  23065. +\<mail-mode-map>
  23066. +While editing message, type \[mail-send-and-exit] to send the message and exit.
  23067. +
  23068. +Various special commands starting with C-c are available in sendmail mode
  23069. +to move to message header fields:
  23070. +\{mail-mode-map}
  23071. +
  23072. +If `mail-self-blind' is non-nil, a BCC to yourself is inserted
  23073. +when the message is initialized.
  23074. +
  23075. +If `mail-default-reply-to' is non-nil, it should be an address (a string);
  23076. +a Reply-to: field with that address is inserted.
  23077. +
  23078. +If `mail-archive-file-name' is non-nil, an FCC field with that file name
  23079. +is inserted.
  23080. +
  23081. +If `mail-setup-hook' is bound, its value is called with no arguments
  23082. +after the message is initialized.  It can add more default fields.
  23083. +
  23084. +When calling from a program, the second through fifth arguments
  23085. + TO, SUBJECT, IN-REPLY-TO and CC specify if non-nil
  23086. + the initial contents of those header fields.
  23087. + These arguments should not have final newlines.
  23088. +The sixth argument REPLYBUFFER is a buffer whose contents
  23089. + should be yanked if the user types C-c C-y.
  23090. +The seventh argument ACTIONS is a list of actions to take
  23091. + if/when the message is sent.  Each action looks like (FUNCTION . ARGS);
  23092. + when the message is sent, we apply FUNCTION to ARGS.
  23093. + This is how Rmail arranges to mark messages `answered'.Fmail-other-window
  23094. +Like `mail' command, but display mail buffer in another window.Fmail-other-frame
  23095. +Like `mail' command, but display mail buffer in another frame.Fserver-start
  23096. +Allow this Emacs process to be a server for client processes.
  23097. +This starts a server communications subprocess through which
  23098. +client "editors" can send your editing commands to this Emacs job.
  23099. +To use the server, set up the program `etc/emacsclient' in the
  23100. +Emacs distribution as your standard "editor".
  23101. +
  23102. +Prefix arg means just kill any existing server communications subprocess.Fsgml-mode
  23103. +Major mode for editing SGML.
  23104. +Makes > display the matching <.  Makes / display matching /.
  23105. +Use \[sgml-validate] to validate your document with an SGML parser.Vshell-prompt-pattern
  23106. +Regexp to match prompts in the inferior shell.
  23107. +Defaults to "^[^#$%>\n]*[#$%>] *", which works pretty well.
  23108. +This variable is used to initialise `comint-prompt-regexp' in the 
  23109. +shell buffer.
  23110. +
  23111. +The pattern should probably not match more than one line.  If it does,
  23112. +shell-mode may become confused trying to distinguish prompt from input
  23113. +on lines which don't start with a prompt.
  23114. +
  23115. +This is a fine thing to set in your `.emacs' file.Fshell
  23116. +Run an inferior shell, with I/O through buffer *shell*.
  23117. +If buffer exists but shell process is not running, make new shell.
  23118. +If buffer exists and shell process is running, just switch to buffer `*shell*'.
  23119. +Program used comes from variable `explicit-shell-file-name',
  23120. + or (if that is nil) from the ESHELL environment variable,
  23121. + or else from SHELL if there is no ESHELL.
  23122. +If a file `~/.emacs_SHELLNAME' exists, it is given as initial input
  23123. + (Note that this may lose due to a timing error if the shell
  23124. +  discards input when it starts up.)
  23125. +The buffer is put in Shell mode, giving commands for sending input
  23126. +and controlling the subjobs of the shell.  See `shell-mode'.
  23127. +See also the variable `shell-prompt-pattern'.
  23128. +
  23129. +The shell file name (sans directories) is used to make a symbol name
  23130. +such as `explicit-csh-args'.  If that symbol is a variable,
  23131. +its value is used as a list of arguments when invoking the shell.
  23132. +Otherwise, one argument `-i' is passed to the shell.
  23133. +
  23134. +(Type \[describe-mode] in the shell buffer for a list of commands.)Fdefine-skeleton
  23135. +Define a user-configurable COMMAND that enters a statement skeleton.
  23136. +DOCUMENTATION is that of the command, while the variable of the same name,
  23137. +which contains the definition, has a documentation to that effect.
  23138. +PROMPT and ELEMENT ... are as defined under `skeleton-insert'.Fskeleton-insert
  23139. +Insert the complex statement skeleton DEFINITION describes very concisely.
  23140. +If optional NO-NEWLINE is nil the skeleton will end on a line of its own.
  23141. +
  23142. +DEFINITION is made up as (PROMPT ELEMENT ...).  PROMPT may be nil if not
  23143. +needed, a prompt-string or an expression for complex read functions.
  23144. +
  23145. +If ELEMENT is a string or a character it gets inserted (see also
  23146. +`skeleton-transformation').  Other possibilities are:
  23147. +
  23148. +    \n    go to next line and align cursor
  23149. +    >    indent according to major mode
  23150. +    <    undent tab-width spaces but not beyond beginning of line
  23151. +    _    cursor after termination
  23152. +    &    skip next ELEMENT if previous didn't move point
  23153. +    |    skip next ELEMENT if previous moved point
  23154. +    -num    delete num preceding characters
  23155. +    resume:    skipped, continue here if quit is signaled
  23156. +    nil    skipped
  23157. +
  23158. +ELEMENT may itself be DEFINITION with a PROMPT.  The user is prompted
  23159. +repeatedly for different inputs.  The DEFINITION is processed as often
  23160. +as the user enters a non-empty string.  \[keyboard-quit] terminates
  23161. +skeleton insertion, but continues after `resume:' and positions at `_'
  23162. +if any.  If PROMPT in such a sub-definition contains a ".. %s .." it
  23163. +is replaced by `skeleton-subprompt'.
  23164. +
  23165. +Other lisp-expressions are evaluated and the value treated as above.
  23166. +The following local variables are available:
  23167. +
  23168. +    str    first time: read a string prompting with PROMPT and insert it
  23169. +                if PROMPT is not a string it is evaluated instead
  23170. +        then: insert previously read string once more
  23171. +    quit    non-nil when resume: section is entered by keyboard quit
  23172. +    v1, v2    local variables for memorising anything you wantFpair-insert-maybe
  23173. +Insert the character you type ARG times.
  23174. +
  23175. +With no ARG, if `pair' is non-nil, and if
  23176. +`pair-on-word' is non-nil or we are not before or inside a
  23177. +word, and if `pair-filter' returns nil, pairing is performed.
  23178. +
  23179. +If a match is found in `pair-alist', that is inserted, else
  23180. +the defaults are used.  These are (), [], {}, <> and `' for the
  23181. +symmetrical ones, and the same character twice for the others.Fdefine-skeleton
  23182. +Define a user-configurable COMMAND that enters a statement skeleton.
  23183. +DOCUMENTATION is that of the command, while the variable of the same name,
  23184. +which contains the definition, has a documentation to that effect.
  23185. +PROMPT and ELEMENT ... are as defined under `skeleton-insert'.Fskeleton-insert
  23186. +Insert the complex statement skeleton DEFINITION describes very concisely.
  23187. +If optional NO-NEWLINE is nil the skeleton will end on a line of its own.
  23188. +
  23189. +DEFINITION is made up as (PROMPT ELEMENT ...).  PROMPT may be nil if not
  23190. +needed, a prompt-string or an expression for complex read functions.
  23191. +
  23192. +If ELEMENT is a string or a character it gets inserted (see also
  23193. +`skeleton-transformation').  Other possibilities are:
  23194. +
  23195. +    \n    go to next line and align cursor
  23196. +    >    indent according to major mode
  23197. +    <    undent tab-width spaces but not beyond beginning of line
  23198. +    _    cursor after termination
  23199. +    &    skip next ELEMENT if previous didn't move point
  23200. +    |    skip next ELEMENT if previous moved point
  23201. +    -num    delete num preceding characters
  23202. +    resume:    skipped, continue here if quit is signaled
  23203. +    nil    skipped
  23204. +
  23205. +ELEMENT may itself be DEFINITION with a PROMPT.  The user is prompted
  23206. +repeatedly for different inputs.  The DEFINITION is processed as often
  23207. +as the user enters a non-empty string.  \[keyboard-quit] terminates
  23208. +skeleton insertion, but continues after `resume:' and positions at `_'
  23209. +if any.  If PROMPT in such a sub-definition contains a ".. %s .." it
  23210. +is replaced by `skeleton-subprompt'.
  23211. +
  23212. +Other lisp-expressions are evaluated and the value treated as above.
  23213. +The following local variables are available:
  23214. +
  23215. +    str    first time: read a string prompting with PROMPT and insert it
  23216. +                if PROMPT is not a string it is evaluated instead
  23217. +        then: insert previously read string once more
  23218. +    quit    non-nil when resume: section is entered by keyboard quit
  23219. +    v1, v2    local variables for memorising anything you wantFpair-insert-maybe
  23220. +Insert the character you type ARG times.
  23221. +
  23222. +With no ARG, if `pair' is non-nil, and if
  23223. +`pair-on-word' is non-nil or we are not before or inside a
  23224. +word, and if `pair-filter' returns nil, pairing is performed.
  23225. +
  23226. +If a match is found in `pair-alist', that is inserted, else
  23227. +the defaults are used.  These are (), [], {}, <> and `' for the
  23228. +symmetrical ones, and the same character twice for the others.Vcalendar-time-display-form
  23229. +*The pseudo-pattern that governs the way a time of day is formatted.
  23230. +
  23231. +A pseudo-pattern is a list of expressions that can involve the keywords
  23232. +`12-hours', `24-hours', and `minutes',  all numbers in string form,
  23233. +and `am-pm' and `time-zone',  both alphabetic strings.
  23234. +
  23235. +For example, the form
  23236. +
  23237. +  '(24-hours ":" minutes
  23238. +    (if time-zone " (") time-zone (if time-zone ")"))
  23239. +
  23240. +would give military-style times like `21:07 (UTC)'.Vcalendar-latitude
  23241. +*Latitude of `calendar-location-name' in degrees, + north, - south.
  23242. +For example, 40.7 for New York City.
  23243. +It may not be a good idea to set this in advance for your site;
  23244. +if there may be users running Emacs at your site
  23245. +who are physically located elsewhere, they would get the wrong
  23246. +value and might not know how to override it.Vcalendar-longitude
  23247. +*Longitude of `calendar-location-name' in degrees, + east, - west.
  23248. +For example, -74.0 for New York City.
  23249. +It may not be a good idea to set this in advance for your site;
  23250. +if there may be users running Emacs at your site
  23251. +who are physically located elsewhere, they would get the wrong
  23252. +value and might not know how to override it.Vcalendar-location-name
  23253. +*Expression evaluating to name of `calendar-longitude', calendar-latitude'.
  23254. +Default value is just the latitude, longitude pair.Fsunrise-sunset
  23255. +Local time of sunrise and sunset for today.  Accurate to +/- 2 minutes.
  23256. +If called with an optional prefix argument, prompt for date.
  23257. +
  23258. +If called with an optional double prefix argument, prompt for longitude,
  23259. +latitude, time zone, and date, and always use standard time.
  23260. +
  23261. +This function is suitable for execution in a .emacs file.Fsolar-equinoxes-solstices
  23262. +Date and time of equinoxes and solstices, if visible in the calendar window.
  23263. +Requires floating point.Fsort-subr
  23264. +General text sorting routine to divide buffer into records and sort them.
  23265. +Arguments are REVERSE NEXTRECFUN ENDRECFUN &optional STARTKEYFUN ENDKEYFUN.
  23266. +
  23267. +We divide the accessible portion of the buffer into disjoint pieces
  23268. +called sort records.  A portion of each sort record (perhaps all of
  23269. +it) is designated as the sort key.  The records are rearranged in the
  23270. +buffer in order by their sort keys.  The records may or may not be
  23271. +contiguous.
  23272. +
  23273. +Usually the records are rearranged in order of ascending sort key.
  23274. +If REVERSE is non-nil, they are rearranged in order of descending sort key.
  23275. +
  23276. +The next four arguments are functions to be called to move point
  23277. +across a sort record.  They will be called many times from within sort-subr.
  23278. +
  23279. +NEXTRECFUN is called with point at the end of the previous record.
  23280. +It moves point to the start of the next record.
  23281. +It should move point to the end of the buffer if there are no more records.
  23282. +The first record is assumed to start at the position of point when sort-subr
  23283. +is called.
  23284. +
  23285. +ENDRECFUN is called with point within the record.
  23286. +It should move point to the end of the record.
  23287. +
  23288. +STARTKEYFUN moves from the start of the record to the start of the key.
  23289. +It may return either a non-nil value to be used as the key, or
  23290. +else the key is the substring between the values of point after
  23291. +STARTKEYFUN and ENDKEYFUN are called.  If STARTKEYFUN is nil, the key
  23292. +starts at the beginning of the record.
  23293. +
  23294. +ENDKEYFUN moves from the start of the sort key to the end of the sort key.
  23295. +ENDKEYFUN may be nil if STARTKEYFUN returns a value or if it would be the
  23296. +same as ENDRECFUN.Fsort-lines
  23297. +Sort lines in region alphabetically; argument means descending order.
  23298. +Called from a program, there are three arguments:
  23299. +REVERSE (non-nil means reverse order), BEG and END (region to sort).Fsort-paragraphs
  23300. +Sort paragraphs in region alphabetically; argument means descending order.
  23301. +Called from a program, there are three arguments:
  23302. +REVERSE (non-nil means reverse order), BEG and END (region to sort).Fsort-pages
  23303. +Sort pages in region alphabetically; argument means descending order.
  23304. +Called from a program, there are three arguments:
  23305. +REVERSE (non-nil means reverse order), BEG and END (region to sort).Fsort-numeric-fields
  23306. +Sort lines in region numerically by the ARGth field of each line.
  23307. +Fields are separated by whitespace and numbered from 1 up.
  23308. +Specified field must contain a number in each line of the region.
  23309. +With a negative arg, sorts by the ARGth field counted from the right.
  23310. +Called from a program, there are three arguments:
  23311. +FIELD, BEG and END.  BEG and END specify region to sort.Fsort-fields
  23312. +Sort lines in region lexicographically by the ARGth field of each line.
  23313. +Fields are separated by whitespace and numbered from 1 up.
  23314. +With a negative arg, sorts by the ARGth field counted from the right.
  23315. +Called from a program, there are three arguments:
  23316. +FIELD, BEG and END.  BEG and END specify region to sort.Fsort-regexp-fields
  23317. +Sort the region lexicographically as specified by RECORD-REGEXP and KEY.
  23318. +RECORD-REGEXP specifies the textual units which should be sorted.
  23319. +  For example, to sort lines RECORD-REGEXP would be "^.*$"
  23320. +KEY specifies the part of each record (ie each match for RECORD-REGEXP)
  23321. +  is to be used for sorting.
  23322. +  If it is "\digit" then the digit'th "\(...\)" match field from
  23323. +  RECORD-REGEXP is used.
  23324. +  If it is "\&" then the whole record is used.
  23325. +  Otherwise, it is a regular-expression for which to search within the record.
  23326. +If a match for KEY is not found within a record then that record is ignored.
  23327. +
  23328. +With a negative prefix arg sorts in reverse order.
  23329. +
  23330. +For example: to sort lines in the region by the first word on each line
  23331. + starting with the letter "f",
  23332. + RECORD-REGEXP would be "^.*$" and KEY would be "\=\<f\w*\>"Fsort-columns
  23333. +Sort lines in region alphabetically by a certain range of columns.
  23334. +For the purpose of this command, the region includes
  23335. +the entire line that point is in and the entire line the mark is in.
  23336. +The column positions of point and mark bound the range of columns to sort on.
  23337. +A prefix argument means sort into reverse order.
  23338. +
  23339. +Note that `sort-columns' rejects text that contains tabs,
  23340. +because tabs could be split across the specified columns
  23341. +and it doesn't know how to handle that.  Also, when possible,
  23342. +it uses the `sort' utility program, which doesn't understand tabs.
  23343. +Use \[untabify] to convert tabs to spaces before sorting.Freverse-region
  23344. +Reverse the order of lines in a region.
  23345. +From a program takes two point or marker arguments, BEG and END.Fspell-buffer
  23346. +Check spelling of every word in the buffer.
  23347. +For each incorrect word, you are asked for the correct spelling
  23348. +and then put into a query-replace to fix some or all occurrences.
  23349. +If you do not want to change a word, just give the same word
  23350. +as its "correct" spelling; then the query replace is skipped.Fspell-word
  23351. +Check spelling of word at or before point.
  23352. +If it is not correct, ask user for the correct spelling
  23353. +and `query-replace' the entire buffer to substitute it.Fspell-region
  23354. +Like `spell-buffer' but applies only to region.
  23355. +Used in a program, applies from START to END.
  23356. +DESCRIPTION is an optional string naming the unit being checked:
  23357. +for example, "word".Fspell-string
  23358. +Check spelling of string supplied as argument.Fspook
  23359. +Adds that special touch of class to your outgoing mail.Fsnarf-spooks
  23360. +Return a vector containing the lines from `spook-phrases-file'.Fsc-cite-original
  23361. +Workhorse citing function which performs the initial citation.
  23362. +This is callable from the various mail and news readers' reply
  23363. +function according to the agreed upon standard.  See `\[sc-describe]'
  23364. +for more details.  `sc-cite-original' does not do any yanking of the
  23365. +original message but it does require a few things:
  23366. +
  23367. +     1) The reply buffer is the current buffer.
  23368. +
  23369. +     2) The original message has been yanked and inserted into the
  23370. +        reply buffer.
  23371. +
  23372. +     3) Verbose mail headers from the original message have been
  23373. +        inserted into the reply buffer directly before the text of the
  23374. +        original message.
  23375. +
  23376. +     4) Point is at the beginning of the verbose headers.
  23377. +
  23378. +     5) Mark is at the end of the body of text to be cited.
  23379. +
  23380. +For Emacs 19's, the region need not be active (and typically isn't
  23381. +when this function is called.  Also, the hook `sc-pre-hook' is run
  23382. +before, and `sc-post-hook' is run after the guts of this function.Funtabify
  23383. +Convert all tabs in region to multiple spaces, preserving columns.
  23384. +Called non-interactively, the region is specified by arguments
  23385. +START and END, rather than by the position of point and mark.
  23386. +The variable `tab-width' controls the spacing of tab stops.Ftabify
  23387. +Convert multiple spaces in region to tabs when possible.
  23388. +A group of spaces is partially replaced by tabs
  23389. +when this can be done without changing the column they end at.
  23390. +Called non-interactively, the region is specified by arguments
  23391. +START and END, rather than by the position of point and mark.
  23392. +The variable `tab-width' controls the spacing of tab stops.Ftar-mode
  23393. +Major mode for viewing a tar file as a dired-like listing of its contents.
  23394. +You can move around using the usual cursor motion commands. 
  23395. +Letters no longer insert themselves.
  23396. +Type `e' to pull a file out of the tar file and into its own buffer;
  23397. +or click mouse-2 on the file's line in the Tar mode buffer.
  23398. +Type `c' to copy an entry from the tar file into another file on disk.
  23399. +
  23400. +If you edit a sub-file of this archive (as with the `e' command) and 
  23401. +save it with Control-x Control-s, the contents of that buffer will be 
  23402. +saved back into the tar-file buffer; in this way you can edit a file 
  23403. +inside of a tar archive without extracting it and re-archiving it.
  23404. +
  23405. +See also: variables `tar-update-datestamp' and `tar-anal-blocksize'.
  23406. +\{tar-mode-map}Ftcl-mode
  23407. +Major mode for editing tcl scripts.
  23408. +The following keys are bound:
  23409. +\{tcl-mode-map}
  23410. +Ftelnet
  23411. +Open a network login connection to host named HOST (a string).
  23412. +Communication with HOST is recorded in a buffer *HOST-telnet*.
  23413. +Normally input is edited in Emacs and sent a line at a time.Frsh
  23414. +Open a network login connection to host named HOST (a string).
  23415. +Communication with HOST is recorded in a buffer *HOST-rsh*.
  23416. +Normally input is edited in Emacs and sent a line at a time.Fterminal-emulator
  23417. +Under a display-terminal emulator in BUFFER, run PROGRAM on arguments ARGS.
  23418. +ARGS is a list of argument-strings.  Remaining arguments are WIDTH and HEIGHT.
  23419. +BUFFER's contents are made an image of the display generated by that program,
  23420. +and any input typed when BUFFER is the current Emacs buffer is sent to that
  23421. +program an keyboard input.
  23422. +
  23423. +Interactively, BUFFER defaults to "*terminal*" and PROGRAM and ARGS
  23424. +are parsed from an input-string using your usual shell.
  23425. +WIDTH and HEIGHT are determined from the size of the current window
  23426. +-- WIDTH will be one less than the window's width, HEIGHT will be its height.
  23427. +
  23428. +To switch buffers and leave the emulator, or to give commands
  23429. +to the emulator itself (as opposed to the program running under it),
  23430. +type Control-^.  The following character is an emulator command.
  23431. +Type Control-^ twice to send it to the subprogram.
  23432. +This escape character may be changed using the variable `terminal-escape-char'.
  23433. +
  23434. +`Meta' characters may not currently be sent through the terminal emulator.
  23435. +
  23436. +Here is a list of some of the variables which control the behaviour
  23437. +of the emulator -- see their documentation for more information:
  23438. +terminal-escape-char, terminal-scrolling, terminal-more-processing,
  23439. +terminal-redisplay-interval.
  23440. +
  23441. +This function calls the value of terminal-mode-hook if that exists
  23442. +and is non-nil after the terminal buffer has been set up and the
  23443. +subprocess started.
  23444. +
  23445. +Presently with `termcap' only; if somebody sends us code to make this
  23446. +work with `terminfo' we will try to use it.Vtex-shell-file-name
  23447. +*If non-nil, the shell file name to run in the subshell used to run TeX.Vtex-directory
  23448. +*Directory in which temporary files are left.
  23449. +You can make this `/tmp' if your TEXINPUTS has no relative directories in it
  23450. +and you don't try to apply \[tex-region] or \[tex-buffer] when there are
  23451. +`\input' commands with relative directories.Vtex-offer-save
  23452. +*If non-nil, ask about saving modified buffers before \[tex-file] is run.Vtex-run-command
  23453. +*Command used to run TeX subjob.
  23454. +If this string contains an asterisk (`*'), that is replaced by the file name;
  23455. +otherwise, the file name, preceded by blank, is added at the end.Vlatex-run-command
  23456. +*Command used to run LaTeX subjob.
  23457. +If this string contains an asterisk (`*'), that is replaced by the file name;
  23458. +otherwise, the file name, preceded by blank, is added at the end.Vlatex-block-names
  23459. +*User defined LaTeX block names.
  23460. +Combined with `standard-latex-block-names' for minibuffer completion.Vslitex-run-command
  23461. +*Command used to run SliTeX subjob.
  23462. +If this string contains an asterisk (`*'), that is replaced by the file name;
  23463. +otherwise, the file name, preceded by blank, is added at the end.Vtex-bibtex-command
  23464. +*Command used by `tex-bibtex-file' to gather bibliographic data.
  23465. +If this string contains an asterisk (`*'), that is replaced by the file name;
  23466. +otherwise, the file name, preceded by blank, is added at the end.Vtex-dvi-print-command
  23467. +*Command used by \[tex-print] to print a .dvi file.
  23468. +If this string contains an asterisk (`*'), that is replaced by the file name;
  23469. +otherwise, the file name, preceded by blank, is added at the end.Vtex-alt-dvi-print-command
  23470. +*Command used by \[tex-print] with a prefix arg to print a .dvi file.
  23471. +If this string contains an asterisk (`*'), that is replaced by the file name;
  23472. +otherwise, the file name, preceded by blank, is added at the end.
  23473. +
  23474. +If two printers are not enough of a choice, you can set the variable
  23475. +`tex-alt-dvi-print-command' to an expression that asks what you want;
  23476. +for example,
  23477. +
  23478. +    (setq tex-alt-dvi-print-command
  23479. +         '(format "lpr -P%s" (read-string "Use printer: ")))
  23480. +
  23481. +would tell \[tex-print] with a prefix argument to ask you which printer to
  23482. +use.Vtex-dvi-view-command
  23483. +*Command used by \[tex-view] to display a `.dvi' file.
  23484. +If this string contains an asterisk (`*'), that is replaced by the file name;
  23485. +otherwise, the file name, preceded by blank, is added at the end.
  23486. +
  23487. +This can be set conditionally so that the previewer used is suitable for the
  23488. +window system being used.  For example,
  23489. +
  23490. +    (setq tex-dvi-view-command
  23491. +          (if (eq window-system 'x) "xdvi" "dvi2tty * | cat -s"))
  23492. +
  23493. +would tell \[tex-view] to use xdvi under X windows and to use dvi2tty
  23494. +otherwise.Vtex-show-queue-command
  23495. +*Command used by \[tex-show-print-queue] to show the print queue.
  23496. +Should show the queue(s) that \[tex-print] puts jobs on.Vtex-default-mode
  23497. +*Mode to enter for a new file that might be either TeX or LaTeX.
  23498. +This variable is used when it can't be determined whether the file
  23499. +is plain TeX or LaTeX or what because the file contains no commands.
  23500. +Normally set to either `plain-tex-mode' or `latex-mode'.Vtex-open-quote
  23501. +*String inserted by typing \[tex-insert-quote] to open a quotation.Vtex-close-quote
  23502. +*String inserted by typing \[tex-insert-quote] to close a quotation.Ftex-mode
  23503. +Major mode for editing files of input for TeX, LaTeX, or SliTeX.
  23504. +Tries to determine (by looking at the beginning of the file) whether
  23505. +this file is for plain TeX, LaTeX, or SliTeX and calls `plain-tex-mode',
  23506. +`latex-mode', or `slitex-mode', respectively.  If it cannot be determined,
  23507. +such as if there are no commands in the file, the value of `tex-default-mode'
  23508. +says which mode to use.Fplain-tex-mode
  23509. +Major mode for editing files of input for plain TeX.
  23510. +Makes $ and } display the characters they match.
  23511. +Makes " insert `` when it seems to be the beginning of a quotation,
  23512. +and '' when it appears to be the end; it inserts " only after a \.
  23513. +
  23514. +Use \[tex-region] to run TeX on the current region, plus a "header"
  23515. +copied from the top of the file (containing macro definitions, etc.),
  23516. +running TeX under a special subshell.  \[tex-buffer] does the whole buffer.
  23517. +\[tex-file] saves the buffer and then processes the file.
  23518. +\[tex-print] prints the .dvi file made by any of these.
  23519. +\[tex-view] previews the .dvi file made by any of these.
  23520. +\[tex-bibtex-file] runs bibtex on the file of the current buffer.
  23521. +
  23522. +Use \[validate-tex-buffer] to check buffer for paragraphs containing
  23523. +mismatched $'s or braces.
  23524. +
  23525. +Special commands:
  23526. +\{tex-mode-map}
  23527. +
  23528. +Mode variables:
  23529. +tex-run-command
  23530. +    Command string used by \[tex-region] or \[tex-buffer].
  23531. +tex-directory
  23532. +    Directory in which to create temporary files for TeX jobs
  23533. +    run by \[tex-region] or \[tex-buffer].
  23534. +tex-dvi-print-command
  23535. +    Command string used by \[tex-print] to print a .dvi file.
  23536. +tex-alt-dvi-print-command
  23537. +    Alternative command string used by \[tex-print] (when given a prefix
  23538. +    argument) to print a .dvi file.
  23539. +tex-dvi-view-command
  23540. +    Command string used by \[tex-view] to preview a .dvi file.
  23541. +tex-show-queue-command
  23542. +    Command string used by \[tex-show-print-queue] to show the print
  23543. +    queue that \[tex-print] put your job on.
  23544. +
  23545. +Entering Plain-tex mode runs the hook `text-mode-hook', then the hook
  23546. +`tex-mode-hook', and finally the hook `plain-tex-mode-hook'.  When the
  23547. +special subshell is initiated, the hook `tex-shell-hook' is run.Flatex-mode
  23548. +Major mode for editing files of input for LaTeX.
  23549. +Makes $ and } display the characters they match.
  23550. +Makes " insert `` when it seems to be the beginning of a quotation,
  23551. +and '' when it appears to be the end; it inserts " only after a \.
  23552. +
  23553. +Use \[tex-region] to run LaTeX on the current region, plus the preamble
  23554. +copied from the top of the file (containing \documentstyle, etc.),
  23555. +running LaTeX under a special subshell.  \[tex-buffer] does the whole buffer.
  23556. +\[tex-file] saves the buffer and then processes the file.
  23557. +\[tex-print] prints the .dvi file made by any of these.
  23558. +\[tex-view] previews the .dvi file made by any of these.
  23559. +\[tex-bibtex-file] runs bibtex on the file of the current buffer.
  23560. +
  23561. +Use \[validate-tex-buffer] to check buffer for paragraphs containing
  23562. +mismatched $'s or braces.
  23563. +
  23564. +Special commands:
  23565. +\{tex-mode-map}
  23566. +
  23567. +Mode variables:
  23568. +latex-run-command
  23569. +    Command string used by \[tex-region] or \[tex-buffer].
  23570. +tex-directory
  23571. +    Directory in which to create temporary files for LaTeX jobs
  23572. +    run by \[tex-region] or \[tex-buffer].
  23573. +tex-dvi-print-command
  23574. +    Command string used by \[tex-print] to print a .dvi file.
  23575. +tex-alt-dvi-print-command
  23576. +    Alternative command string used by \[tex-print] (when given a prefix
  23577. +    argument) to print a .dvi file.
  23578. +tex-dvi-view-command
  23579. +    Command string used by \[tex-view] to preview a .dvi file.
  23580. +tex-show-queue-command
  23581. +    Command string used by \[tex-show-print-queue] to show the print
  23582. +    queue that \[tex-print] put your job on.
  23583. +
  23584. +Entering Latex mode runs the hook `text-mode-hook', then 
  23585. +`tex-mode-hook', and finally `latex-mode-hook'.  When the special
  23586. +subshell is initiated, `tex-shell-hook' is run.Fslitex-mode
  23587. +Major mode for editing files of input for SliTeX.
  23588. +Makes $ and } display the characters they match.
  23589. +Makes " insert `` when it seems to be the beginning of a quotation,
  23590. +and '' when it appears to be the end; it inserts " only after a \.
  23591. +
  23592. +Use \[tex-region] to run SliTeX on the current region, plus the preamble
  23593. +copied from the top of the file (containing \documentstyle, etc.),
  23594. +running SliTeX under a special subshell.  \[tex-buffer] does the whole buffer.
  23595. +\[tex-file] saves the buffer and then processes the file.
  23596. +\[tex-print] prints the .dvi file made by any of these.
  23597. +\[tex-view] previews the .dvi file made by any of these.
  23598. +\[tex-bibtex-file] runs bibtex on the file of the current buffer.
  23599. +
  23600. +Use \[validate-tex-buffer] to check buffer for paragraphs containing
  23601. +mismatched $'s or braces.
  23602. +
  23603. +Special commands:
  23604. +\{tex-mode-map}
  23605. +
  23606. +Mode variables:
  23607. +slitex-run-command
  23608. +    Command string used by \[tex-region] or \[tex-buffer].
  23609. +tex-directory
  23610. +    Directory in which to create temporary files for SliTeX jobs
  23611. +    run by \[tex-region] or \[tex-buffer].
  23612. +tex-dvi-print-command
  23613. +    Command string used by \[tex-print] to print a .dvi file.
  23614. +tex-alt-dvi-print-command
  23615. +    Alternative command string used by \[tex-print] (when given a prefix
  23616. +    argument) to print a .dvi file.
  23617. +tex-dvi-view-command
  23618. +    Command string used by \[tex-view] to preview a .dvi file.
  23619. +tex-show-queue-command
  23620. +    Command string used by \[tex-show-print-queue] to show the print
  23621. +    queue that \[tex-print] put your job on.
  23622. +
  23623. +Entering SliTeX mode runs the hook `text-mode-hook', then the hook
  23624. +`tex-mode-hook', then the hook `latex-mode-hook', and finally the hook
  23625. +`slitex-mode-hook'.  When the special subshell is initiated, the hook
  23626. +`tex-shell-hook' is run.Ftexinfo-format-buffer
  23627. +Process the current buffer as texinfo code, into an Info file.
  23628. +The Info file output is generated in a buffer visiting the Info file
  23629. +names specified in the @setfilename command.
  23630. +
  23631. +Non-nil argument (prefix, if interactive) means don't make tag table
  23632. +and don't split the file if large.  You can use Info-tagify and
  23633. +Info-split to do these manually.Ftexinfo-format-region
  23634. +Convert the current region of the Texinfo file to Info format.
  23635. +This lets you see what that part of the file will look like in Info.
  23636. +The command is bound to \[texinfo-format-region].  The text that is
  23637. +converted to Info is stored in a temporary buffer.Ftexinfo-mode
  23638. +Major mode for editing Texinfo files.
  23639. +
  23640. +  It has these extra commands:
  23641. +\{texinfo-mode-map}
  23642. +
  23643. +  These are files that are used as input for TeX to make printed manuals
  23644. +and also to be turned into Info files with \[makeinfo-buffer] or
  23645. +the `makeinfo' program.  These files must be written in a very restricted and
  23646. +modified version of TeX input format.
  23647. +
  23648. +  Editing commands are like text-mode except that the syntax table is
  23649. +set up so expression commands skip Texinfo bracket groups.  To see
  23650. +what the Info version of a region of the Texinfo file will look like,
  23651. +use \[makeinfo-region], which runs `makeinfo' on the current region.
  23652. +
  23653. +  You can show the structure of a Texinfo file with \[texinfo-show-structure].
  23654. +This command shows the structure of a Texinfo file by listing the
  23655. +lines with the @-sign commands for @chapter, @section, and the like.
  23656. +These lines are displayed in another window called the *Occur* window.
  23657. +In that window, you can position the cursor over one of the lines and
  23658. +use \[occur-mode-goto-occurrence], to jump to the corresponding spot
  23659. +in the Texinfo file.
  23660. +
  23661. +  In addition, Texinfo mode provides commands that insert various
  23662. +frequently used @-sign commands into the buffer.  You can use these
  23663. +commands to save keystrokes.  And you can insert balanced braces with
  23664. +\[texinfo-insert-braces] and later use the command \[up-list] to
  23665. +move forward past the closing brace.
  23666. +
  23667. +Also, Texinfo mode provides functions for automatically creating or
  23668. +updating menus and node pointers.  These functions
  23669. +
  23670. +  * insert the `Next', `Previous' and `Up' pointers of a node,
  23671. +  * insert or update the menu for a section, and
  23672. +  * create a master menu for a Texinfo source file.
  23673. +
  23674. +Here are the functions:
  23675. +
  23676. +    texinfo-update-node                \[texinfo-update-node]
  23677. +    texinfo-every-node-update          \[texinfo-every-node-update]
  23678. +    texinfo-sequential-node-update 
  23679. +
  23680. +    texinfo-make-menu                  \[texinfo-make-menu]
  23681. +    texinfo-all-menus-update           \[texinfo-all-menus-update]
  23682. +    texinfo-master-menu
  23683. +
  23684. +    texinfo-indent-menu-description (column &optional region-p)
  23685. +
  23686. +The `texinfo-column-for-description' variable specifies the column to
  23687. +which menu descriptions are indented. 
  23688. +
  23689. +Passed an argument (a prefix argument, if interactive), the
  23690. +`texinfo-update-node' and `texinfo-make-menu' functions do their jobs
  23691. +in the region.
  23692. +
  23693. +To use the updating commands, you must structure your Texinfo file
  23694. +hierarchically, such that each `@node' line, with the exception of the
  23695. +Top node, is accompanied by some kind of section line, such as an
  23696. +`@chapter' or `@section' line.
  23697. +
  23698. +If the file has a `top' node, it must be called `top' or `Top' and
  23699. +be the first node in the file.
  23700. +
  23701. +Entering Texinfo mode calls the value of text-mode-hook, and then the
  23702. +value of texinfo-mode-hook.Ftexinfo-update-node
  23703. +Without any prefix argument, update the node in which point is located.
  23704. +Non-nil argument (prefix, if interactive) means update the nodes in the
  23705. +marked region.
  23706. +
  23707. +The functions for creating or updating nodes and menus, and their
  23708. +keybindings, are:
  23709. +
  23710. +    texinfo-update-node (&optional region-p)    \[texinfo-update-node]
  23711. +    texinfo-every-node-update ()                \[texinfo-every-node-update]
  23712. +    texinfo-sequential-node-update (&optional region-p)
  23713. +
  23714. +    texinfo-make-menu (&optional region-p)      \[texinfo-make-menu]
  23715. +    texinfo-all-menus-update ()                 \[texinfo-all-menus-update]
  23716. +    texinfo-master-menu ()
  23717. +
  23718. +    texinfo-indent-menu-description (column &optional region-p)
  23719. +
  23720. +The `texinfo-column-for-description' variable specifies the column to
  23721. +which menu descriptions are indented. Its default value is 32.Ftexinfo-every-node-update
  23722. +Update every node in a Texinfo file.Ftexinfo-sequential-node-update
  23723. +Update one node (or many) in a Texinfo file with sequential pointers.
  23724. +
  23725. +This function causes the `Next' or `Previous' pointer to point to the
  23726. +immediately preceding or following node, even if it is at a higher or
  23727. +lower hierarchical level in the document.  Continually pressing `n' or
  23728. +`p' takes you straight through the file.
  23729. +
  23730. +Without any prefix argument, update the node in which point is located.
  23731. +Non-nil argument (prefix, if interactive) means update the nodes in the
  23732. +marked region.
  23733. +
  23734. +This command makes it awkward to navigate among sections and
  23735. +subsections; it should be used only for those documents that are meant
  23736. +to be read like a novel rather than a reference, and for which the
  23737. +Info `g*' command is inadequate.Fforward-thing
  23738. +Move forward to the end of the next THING.Fbounds-of-thing-at-point
  23739. +Determine the start and end buffer locations for the THING at point,
  23740. +where THING is an entity for which there is a either a corresponding
  23741. +forward-THING operation, or corresponding beginning-of-THING and
  23742. +end-of-THING operations, eg. 'word, 'sentence, 'defun.
  23743. +  Return a cons cell '(start . end) giving the start and end positions.Fthing-at-point
  23744. +Return the THING at point, where THING is an entity defined by
  23745. +bounds-of-thing-at-point.Vdisplay-time-day-and-date
  23746. +*Non-nil means \[display-time] should display day and date as well as time.Fdisplay-time
  23747. +Display current time, load level, and mail flag in mode line of each buffer.
  23748. +Updates automatically every minute.
  23749. +If `display-time-day-and-date' is non-nil, the current day and date
  23750. +are displayed as well.
  23751. +After each update, `display-time-hook' is run with `run-hooks'.Ftime-stamp
  23752. +Update the time stamp string in the buffer.
  23753. +If you put a time stamp template anywhere in the first 8 lines of a file,
  23754. +it can be updated every time you save the file.  See the top of
  23755. +`time-stamp.el' for a sample.  The template looks like one of the following:
  23756. +    Time-stamp: <>
  23757. +    Time-stamp: " "
  23758. +The time stamp is written between the brackets or quotes, resulting in
  23759. +    Time-stamp: <93/06/18 10:26:51 gildea>
  23760. +Only does its thing if the variable  time-stamp-active  is non-nil.
  23761. +Typically used on  write-file-hooks  for automatic time-stamping.
  23762. +The format of the time stamp is determined by the variable  time-stamp-format.
  23763. +The variables time-stamp-line-limit, time-stamp-start, and time-stamp-end
  23764. +control finding the template.Frun-at-time
  23765. +Run a function at a time, and optionally on a regular interval.
  23766. +Arguments are TIME, REPEAT, FUNCTION &rest ARGS.
  23767. +TIME, a string, can be specified absolutely or relative to now.
  23768. +TIME can also be an integer, a number of seconds.
  23769. +REPEAT, an integer number of seconds, is the interval on which to repeat
  23770. +the call to the function.  If REPEAT is nil, call it just once.
  23771. +
  23772. +Absolute times may be specified in a wide variety of formats;
  23773. +Something of the form `HOUR:MIN:SEC TIMEZONE MONTH/DAY/YEAR', where
  23774. +all fields are numbers, works; the format used by the Unix `date'
  23775. +command works too.
  23776. +
  23777. +Relative times may be specified as a series of numbers followed by units:
  23778. +  1 min             denotes one minute from now.
  23779. +  min            does too.
  23780. +  1 min 5 sec        denotes 65 seconds from now.
  23781. +  1 min 2 sec 3 hour 4 day 5 week 6 fortnight 7 month 8 year
  23782. +            denotes the sum of all the given durations from now.Ftpu-edt-on
  23783. +Turn on TPU/edt emulation.Ftpu-set-scroll-margins
  23784. +Set scroll margins.Ftpu-set-cursor-free
  23785. +Allow the cursor to move freely about the screen.Ftpu-set-cursor-bound
  23786. +Constrain the cursor to the flow of the text.Ftq-create
  23787. +Create and return a transaction queue communicating with PROCESS.
  23788. +PROCESS should be a subprocess capable of sending and receiving
  23789. +streams of bytes.  It may be a local process, or it may be connected
  23790. +to a tcp server on another machine.Vtrace-buffer
  23791. +*Trace output will by default go to that buffer.Ftrace-function
  23792. +Traces FUNCTION with trace output going to BUFFER.
  23793. +For every call of FUNCTION Lisp-style trace messages that display argument
  23794. +and return values will be inserted into BUFFER. This function generates the
  23795. +trace advice for FUNCTION and activates it together with any other advice
  23796. +there might be!! The trace BUFFER will popup whenever FUNCTION is called.
  23797. +Do not use this to trace functions that switch buffers or do any other
  23798. +display oriented stuff, use `trace-function-background' instead.Ftrace-function-background
  23799. +Traces FUNCTION with trace output going quietly to BUFFER.
  23800. +For every call of FUNCTION Lisp-style trace messages that display argument
  23801. +and return values will be inserted into BUFFER. This function generates the
  23802. +trace advice for FUNCTION and activates it together with any other advice
  23803. +there might be!! Trace output will quietly go to BUFFER without changing
  23804. +the window or buffer configuration at all.Vtc-mode-map
  23805. +Keymap for commands for two-column mode.Ftc-two-columns
  23806. +Split current window vertically for two-column editing.
  23807. +
  23808. +When called the first time, associates a buffer with the current
  23809. +buffer.  Both buffers are put in two-column minor mode and
  23810. +tc-mode-hook gets called on both.  These buffers remember
  23811. +about one another, even when renamed.
  23812. +
  23813. +When called again, restores the screen layout with the current buffer
  23814. +first and the associated buffer to it's right.
  23815. +
  23816. +If you include long lines, i.e which will span both columns (eg.
  23817. +source code), they should be in what will be the first column, with
  23818. +the associated buffer having empty lines next to them.
  23819. +
  23820. +You have the following commands at your disposal:
  23821. +
  23822. +\[tc-two-columns]   Rearrange screen
  23823. +\[tc-associate-buffer]   Reassociate buffer after changing major mode
  23824. +\[tc-scroll-up]   Scroll both buffers up by a screenfull
  23825. +\[tc-scroll-down]   Scroll both buffers down by a screenful
  23826. +\[tc-scroll-line]   Scroll both buffers up by one or more lines
  23827. +\[tc-recenter]   Recenter and realign other buffer
  23828. +\[shrink-window-horizontally], \[enlarge-window-horizontally]   Shrink, enlarge current column
  23829. +\[tc-associated-buffer]   Switch to associated buffer
  23830. +\[tc-merge]   Merge both buffers
  23831. +
  23832. +These keybindings can be customized in your ~/.emacs by `tc-prefix'
  23833. +and `tc-mode-map'.
  23834. +
  23835. +The appearance of the screen can be customized by the variables
  23836. +`tc-window-width', `tc-beyond-fill-column',
  23837. +`tc-mode-line-format' and `truncate-partial-width-windows'.Ftc-associate-buffer
  23838. +Associate another buffer with this one in two-column minor mode.
  23839. +Can also be used to associate a just previously visited file, by
  23840. +accepting the proposed default buffer.
  23841. +
  23842. +See  \[tc-two-columns]  and  `two-column.el'  for further details.Ftc-split
  23843. +Unmerge a two-column text into two buffers in two-column minor mode.
  23844. +The text is unmerged at the cursor's column which becomes the local
  23845. +value of `tc-window-width'.  Only lines that have the ARG same
  23846. +preceding characters at that column get split.  The ARG preceding
  23847. +characters without any leading whitespace become the local value for
  23848. +`tc-separator'.  This way lines that continue across both
  23849. +columns remain untouched in the first buffer.
  23850. +
  23851. +This function can be used with a prototype line, to set up things as
  23852. +you like them.  You write the first line of each column with the
  23853. +separator you like and then unmerge that line.  E.g.:
  23854. +
  23855. +First column's text    sSs  Second columns text
  23856. +               \___/\
  23857. +            /    \
  23858. +   5 character Separator      You type  M-5 \[tc-split]  with the point here
  23859. +
  23860. +See  \[tc-two-columns]  and  `two-column.el'  for further details.Ftc-dissociate
  23861. +Turn off two-column minor mode in current and associated buffer.
  23862. +If the associated buffer is unmodified and empty, it is killed.Ftc-merge
  23863. +Merges the associated buffer with the current buffer.
  23864. +They get merged at the column, which is the value of
  23865. +`tc-window-width', i.e. usually at the vertical window
  23866. +separator.  This separator gets replaced with white space.  Beyond
  23867. +that the value of gets inserted on merged lines.  The two columns are
  23868. +thus pasted side by side, in a single text.  If the other buffer is
  23869. +not displayed to the left of this one, then this one becomes the left
  23870. +column.
  23871. +
  23872. +If you want `tc-separator' on empty lines in the second column,
  23873. +you should put just one space in them.  In the final result, you can strip
  23874. +off trailing spaces with \[beginning-of-buffer] \[replace-regexp] [ SPC TAB ] + $ RET RETFtc-associated-buffer
  23875. +Switch to associated buffer.Ftc-scroll-line
  23876. +Scroll current window upward by ARG lines.
  23877. +The associated window gets scrolled to the same line.Ftc-scroll-up
  23878. +Scroll current window upward by ARG screens.
  23879. +The associated window gets scrolled to the same line.Ftc-scroll-down
  23880. +Scroll current window downward by ARG screens.
  23881. +The associated window gets scrolled to the same line.Ftc-recenter
  23882. +Center point in window.  With ARG, put point on line ARG.
  23883. +This counts from bottom if ARG is negative.  The associated window
  23884. +gets scrolled to the same line.Funderline-region
  23885. +Underline all nonblank characters in the region.
  23886. +Works by overstriking underscores.
  23887. +Called from program, takes two arguments START and END
  23888. +which specify the range to operate on.Fununderline-region
  23889. +Remove all underlining (overstruck underscores) in the region.
  23890. +Called from program, takes two arguments START and END
  23891. +which specify the range to operate on.Fbatch-unrmail
  23892. +Convert Rmail files to system inbox format.
  23893. +Specify the input Rmail file names as command line arguments.
  23894. +For each Rmail file, the corresponding output file name
  23895. +is made by adding `.mail' at the end.
  23896. +For example, invoke `emacs -batch -f batch-unrmail RMAIL'.Funrmail
  23897. +Convert Rmail file FILE to system inbox format file TO-FILE.Vreplace-copying-with
  23898. +*If non-nil, replace copying notices with this file.Fupdate-copyright
  23899. +Update the copyright notice at the beginning of the buffer
  23900. +to indicate the current year.  If optional arg REPLACE is given
  23901. +(interactively, with prefix arg) replace the years in the notice
  23902. +rather than adding the current year after them.
  23903. +If `replace-copying-with' is set, the copying permissions following the
  23904. +copyright are replaced as well.
  23905. +
  23906. +If optional third argument ASK is non-nil, the user is prompted for whether
  23907. +or not to update the copyright.  If optional fourth argument ASK-YEAR is
  23908. +non-nil, the user is prompted for whether or not to replace the year rather
  23909. +than adding to it.Fask-to-update-copyright
  23910. +If the current buffer contains a copyright notice that is out of date,
  23911. +ask the user if it should be updated with `update-copyright' (which see).
  23912. +Put this on write-file-hooks.Fask-user-about-lock
  23913. +Ask user what to do when he wants to edit FILE but it is locked by USER.
  23914. +This function has a choice of three things to do:
  23915. +  do (signal 'buffer-file-locked (list FILE USER))
  23916. +    to refrain from editing the file
  23917. +  return t (grab the lock on the file)
  23918. +  return nil (edit the file even though it is locked).
  23919. +You can rewrite it to use any criterion you like to choose which one to do.Fask-user-about-supersession-threat
  23920. +Ask a user who is about to modify an obsolete buffer what to do.
  23921. +This function has two choices: it can return, in which case the modification
  23922. +of the buffer will proceed, or it can (signal 'file-supersession (file)),
  23923. +in which case the proposed buffer modification will not be made.
  23924. +
  23925. +You can rewrite this to use any criterion you like to choose which one to do.
  23926. +The buffer in question is current when this function is called.Vvc-checkin-hook
  23927. +*List of functions called after a checkin is done.  See `run-hooks'.Fvc-next-action
  23928. +Do the next logical checkin or checkout operation on the current file.
  23929. +   If the file is not already registered, this registers it for version
  23930. +control and then retrieves a writable, locked copy for editing.
  23931. +   If the file is registered and not locked by anyone, this checks out
  23932. +a writable and locked file ready for editing.
  23933. +   If the file is checked out and locked by the calling user, this
  23934. +first checks to see if the file has changed since checkout.  If not,
  23935. +it performs a revert.
  23936. +   If the file has been changed, this pops up a buffer for entry
  23937. +of a log message; when the message has been entered, it checks in the
  23938. +resulting changes along with the log message as change commentary.  If
  23939. +the variable `vc-keep-workfiles' is non-nil (which is its default), a
  23940. +read-only copy of the changed file is left in place afterwards.
  23941. +   If the file is registered and locked by someone else, you are given
  23942. +the option to steal the lock.
  23943. +   If you call this from within a VC dired buffer with no files marked,
  23944. +it will operate on the file in the current line.
  23945. +   If you call this from within a VC dired buffer, and one or more
  23946. +files are marked, it will accept a log message and then operate on
  23947. +each one.  The log message will be used as a comment for any register
  23948. +or checkin operations, but ignored when doing checkouts.  Attempted
  23949. +lock steals will raise an error.
  23950. +
  23951. +   For checkin, a prefix argument lets you specify the version number to use.Fvc-register
  23952. +Register the current file into your version-control system.Fvc-diff
  23953. +Display diffs between file versions.
  23954. +Normally this compares the current file and buffer with the most recent 
  23955. +checked in version of that file.  This uses no arguments.
  23956. +With a prefix argument, it reads the file name to use
  23957. +and two version designators specifying which versions to compare.Fvc-version-other-window
  23958. +Visit version REV of the current buffer in another window.
  23959. +If the current buffer is named `F', the version is named `F.~REV~'.
  23960. +If `F.~REV~' already exists, it is used instead of being re-created.Fvc-insert-headers
  23961. +Insert headers in a file for use with your version-control system.
  23962. +Headers desired are inserted at the start of the buffer, and are pulled from
  23963. +the variable `vc-header-alist'.Fvc-directory
  23964. +Show version-control status of all files under the current directory.Fvc-create-snapshot
  23965. +Make a snapshot called NAME.
  23966. +The snapshot is made from all registered files at or below the current
  23967. +directory.  For each file, the version level of its latest
  23968. +version becomes part of the named configuration.Fvc-retrieve-snapshot
  23969. +Retrieve the snapshot called NAME.
  23970. +This function fails if any files are locked at or below the current directory
  23971. +Otherwise, all registered files are checked out (unlocked) at their version
  23972. +levels in the snapshot.Fvc-print-log
  23973. +List the change log of the current buffer in a window.Fvc-revert-buffer
  23974. +Revert the current buffer's file back to the latest checked-in version.
  23975. +This asks for confirmation if the buffer contents are not identical
  23976. +to that version.Fvc-cancel-version
  23977. +Get rid of most recently checked in version of this file.
  23978. +A prefix argument means do not revert the buffer afterwards.Fvc-update-change-log
  23979. +Find change log file and add entries from recent RCS logs.
  23980. +The mark is left at the end of the text prepended to the change log.
  23981. +With prefix arg of C-u, only find log entries for the current buffer's file.
  23982. +With any numeric prefix arg, find log entries for all files currently visited.
  23983. +Otherwise, find log entries for all registered files in the default directory.
  23984. +From a program, any arguments are passed to the `rcs2log' script.Fvi-mode
  23985. +Major mode that acts like the `vi' editor.
  23986. +The purpose of this mode is to provide you the combined power of vi (namely,
  23987. +the "cross product" effect of commands and repeat last changes) and Emacs.
  23988. +
  23989. +This command redefines nearly all keys to look like vi commands.
  23990. +It records the previous major mode, and any vi command for input
  23991. +(`i', `a', `s', etc.) switches back to that mode.
  23992. +Thus, ordinary Emacs (in whatever major mode you had been using)
  23993. +is "input" mode as far as vi is concerned.
  23994. +
  23995. +To get back into vi from "input" mode, you must issue this command again.
  23996. +Therefore, it is recommended that you assign it to a key.
  23997. +
  23998. +Major differences between this mode and real vi :
  23999. +
  24000. +* Limitations and unsupported features
  24001. +  - Search patterns with line offset (e.g. /pat/+3 or /pat/z.) are
  24002. +    not supported.
  24003. +  - Ex commands are not implemented; try ':' to get some hints.
  24004. +  - No line undo (i.e. the 'U' command), but multi-undo is a standard feature.
  24005. +
  24006. +* Modifications
  24007. +  - The stopping positions for some point motion commands (word boundary,
  24008. +    pattern search) are slightly different from standard 'vi'.
  24009. +    Also, no automatic wrap around at end of buffer for pattern searching.
  24010. +  - Since changes are done in two steps (deletion then insertion), you need
  24011. +    to undo twice to completely undo a change command.  But this is not needed
  24012. +    for undoing a repeated change command.
  24013. +  - No need to set/unset 'magic', to search for a string with regular expr
  24014. +    in it just put a prefix arg for the search commands.  Replace cmds too.
  24015. +  - ^R is bound to incremental backward search, so use ^L to redraw screen.
  24016. +
  24017. +* Extensions
  24018. +  - Some standard (or modified) Emacs commands were integrated, such as
  24019. +    incremental search, query replace, transpose objects, and keyboard macros.
  24020. +  - In command state, ^X links to the 'ctl-x-map', and ESC can be linked to
  24021. +    esc-map or set undefined.  These can give you the full power of Emacs.
  24022. +  - See vi-com-map for those keys that are extensions to standard vi, e.g.
  24023. +    `vi-name-last-change-or-macro', `vi-verify-spelling', `vi-locate-def',
  24024. +    `vi-mark-region', and 'vi-quote-words'.  Some of them are quite handy.
  24025. +  - Use \[vi-switch-mode] to switch among different modes quickly.
  24026. +  
  24027. +Syntax table and abbrevs while in vi mode remain as they were in Emacs.Fview-file
  24028. +View FILE in View mode, returning to previous buffer when done.
  24029. +The usual Emacs commands are not available; instead,
  24030. +a special set of commands (mostly letters and punctuation)
  24031. +are defined for moving around in the buffer.
  24032. +Space scrolls forward, Delete scrolls backward.
  24033. +For list of all View commands, type ? or h while viewing.
  24034. +
  24035. +This command runs the normal hook `view-mode-hook'.Fview-file-other-window
  24036. +View FILE in View mode in other window.
  24037. +Return to previous buffer when done.
  24038. +The usual Emacs commands are not available; instead,
  24039. +a special set of commands (mostly letters and punctuation)
  24040. +are defined for moving around in the buffer.
  24041. +Space scrolls forward, Delete scrolls backward.
  24042. +For list of all View commands, type ? or h while viewing.
  24043. +
  24044. +This command runs the normal hook `view-mode-hook'.Fview-buffer
  24045. +View BUFFER in View mode, returning to previous buffer when done.
  24046. +The usual Emacs commands are not available; instead,
  24047. +a special set of commands (mostly letters and punctuation)
  24048. +are defined for moving around in the buffer.
  24049. +Space scrolls forward, Delete scrolls backward.
  24050. +For list of all View commands, type ? or h while viewing.
  24051. +
  24052. +This command runs the normal hook `view-mode-hook'.Fview-buffer-other-window
  24053. +View BUFFER in View mode in another window,
  24054. +returning to original buffer when done *only* if 
  24055. +prefix argument NOT-RETURN is nil (which is the default).
  24056. +
  24057. +The usual Emacs commands are not available in View mode; instead,
  24058. +a special set of commands (mostly letters and punctuation)
  24059. +are defined for moving around in the buffer.
  24060. +Space scrolls forward, Delete scrolls backward.
  24061. +For list of all View commands, type ? or h while viewing.
  24062. +
  24063. +This command runs the normal hook `view-mode-hook'.Fview-mode
  24064. +Major mode for viewing text but not editing it.
  24065. +Letters do not insert themselves.  Instead these commands are provided.
  24066. +Most commands take prefix arguments.  Commands dealing with lines
  24067. +default to "scroll size" lines (initially size of window).
  24068. +Search commands default to a repeat count of one.
  24069. +M-< or <    move to beginning of buffer.
  24070. +M-> or >    move to end of buffer.
  24071. +C-v or Space    scroll forward lines.
  24072. +M-v or DEL    scroll backward lines.
  24073. +CR or LF    scroll forward one line (backward with prefix argument).
  24074. +z        like Space except set number of lines for further
  24075. +           scrolling commands to scroll by.
  24076. +C-u and Digits    provide prefix arguments.  `-' denotes negative argument.
  24077. +=        prints the current line number.
  24078. +g        goes to line given by prefix argument.
  24079. +/ or M-C-s    searches forward for regular expression
  24080. +\ or M-C-r    searches backward for regular expression.
  24081. +n        searches forward for last regular expression.
  24082. +p        searches backward for last regular expression.
  24083. +C-@ or .    set the mark.
  24084. +x        exchanges point and mark.
  24085. +C-s or s    do forward incremental search.
  24086. +C-r or r    do reverse incremental search.
  24087. +@ or '        return to mark and pops mark ring.
  24088. +          Mark ring is pushed at start of every
  24089. +          successful search and when jump to line to occurs.
  24090. +          The mark is set on jump to buffer start or end.
  24091. +? or h        provide help message (list of commands).
  24092. +\[Helper-help]        provides help (list of commands or description of a command).
  24093. +C-n        moves down lines vertically.
  24094. +C-p        moves upward lines vertically.
  24095. +C-l        recenters the screen.
  24096. +q or C-c    exit view-mode and return to previous buffer.
  24097. +
  24098. +Entry to this mode runs the normal hook `view-mode-hook'.
  24099. +
  24100. +\{view-mode-map}Fvip-mode
  24101. +Turn on VIP emulation of VI.Fwordstar-mode
  24102. +Major mode with WordStar-like key bindings.
  24103. +
  24104. +BUGS:
  24105. + - Help menus with WordStar commands (C-j just calls help-for-help)
  24106. +   are not implemented
  24107. + - Options for search and replace
  24108. + - Show markers (C-k h) is somewhat strange
  24109. + - Search and replace (C-q a) is only available in forward direction
  24110. +
  24111. +No key bindings beginning with ESC are installed, they will work
  24112. +Emacs-like.
  24113. +
  24114. +The key bindings are:
  24115. +
  24116. +  C-a        backward-word
  24117. +  C-b        fill-paragraph
  24118. +  C-c        scroll-up-line
  24119. +  C-d        forward-char
  24120. +  C-e        previous-line
  24121. +  C-f        forward-word
  24122. +  C-g        delete-char
  24123. +  C-h        backward-char
  24124. +  C-i        indent-for-tab-command
  24125. +  C-j        help-for-help
  24126. +  C-k        ordstar-C-k-map
  24127. +  C-l        ws-repeat-search
  24128. +  C-n        open-line
  24129. +  C-p        quoted-insert
  24130. +  C-r        scroll-down-line
  24131. +  C-s        backward-char
  24132. +  C-t        kill-word
  24133. +  C-u        keyboard-quit
  24134. +  C-v        overwrite-mode
  24135. +  C-w        scroll-down
  24136. +  C-x        next-line
  24137. +  C-y        kill-complete-line
  24138. +  C-z        scroll-up
  24139. +
  24140. +  C-k 0        ws-set-marker-0
  24141. +  C-k 1        ws-set-marker-1
  24142. +  C-k 2        ws-set-marker-2
  24143. +  C-k 3        ws-set-marker-3
  24144. +  C-k 4        ws-set-marker-4
  24145. +  C-k 5        ws-set-marker-5
  24146. +  C-k 6        ws-set-marker-6
  24147. +  C-k 7        ws-set-marker-7
  24148. +  C-k 8        ws-set-marker-8
  24149. +  C-k 9        ws-set-marker-9
  24150. +  C-k b        ws-begin-block
  24151. +  C-k c        ws-copy-block
  24152. +  C-k d        save-buffers-kill-emacs
  24153. +  C-k f        find-file
  24154. +  C-k h        ws-show-markers
  24155. +  C-k i        ws-indent-block
  24156. +  C-k k        ws-end-block
  24157. +  C-k p        ws-print-block
  24158. +  C-k q        kill-emacs
  24159. +  C-k r        insert-file
  24160. +  C-k s        save-some-buffers
  24161. +  C-k t        ws-mark-word
  24162. +  C-k u        ws-exdent-block
  24163. +  C-k C-u    keyboard-quit
  24164. +  C-k v        ws-move-block
  24165. +  C-k w        ws-write-block
  24166. +  C-k x        kill-emacs
  24167. +  C-k y        ws-delete-block
  24168. +
  24169. +  C-o c        center-line
  24170. +  C-o b        switch-to-buffer
  24171. +  C-o j        justify-current-line
  24172. +  C-o k        kill-buffer
  24173. +  C-o l        list-buffers
  24174. +  C-o m        auto-fill-mode
  24175. +  C-o r        set-fill-column
  24176. +  C-o C-u    keyboard-quit
  24177. +  C-o wd    delete-other-windows
  24178. +  C-o wh    split-window-horizontally
  24179. +  C-o wo    other-window
  24180. +  C-o wv    split-window-vertically
  24181. +
  24182. +  C-q 0        ws-find-marker-0
  24183. +  C-q 1        ws-find-marker-1
  24184. +  C-q 2        ws-find-marker-2
  24185. +  C-q 3        ws-find-marker-3
  24186. +  C-q 4        ws-find-marker-4
  24187. +  C-q 5        ws-find-marker-5
  24188. +  C-q 6        ws-find-marker-6
  24189. +  C-q 7        ws-find-marker-7
  24190. +  C-q 8        ws-find-marker-8
  24191. +  C-q 9        ws-find-marker-9
  24192. +  C-q a        ws-query-replace
  24193. +  C-q b        ws-to-block-begin
  24194. +  C-q c        end-of-buffer
  24195. +  C-q d        end-of-line
  24196. +  C-q f        ws-search
  24197. +  C-q k        ws-to-block-end
  24198. +  C-q l        ws-undo
  24199. +  C-q p        ws-last-cursorp
  24200. +  C-q r        beginning-of-buffer
  24201. +  C-q C-u    keyboard-quit
  24202. +  C-q w        ws-last-error
  24203. +  C-q y        ws-kill-eol
  24204. +  C-q DEL    ws-kill-bol
  24205. +Frun-scheme
  24206. +Run an inferior Scheme process.
  24207. +Output goes to the buffer `*scheme*'.
  24208. +With argument, asks for a command line.Fyow
  24209. +Return or display a random Zippy quotation.  With prefix arg, insert it.Finsert-zippyism
  24210. +Prompt with completion for a known Zippy quotation, and insert it at point.Fpsychoanalyze-pinhead
  24211. +Zippy goes to the analyst.Fmap-y-or-n-p
  24212. +Ask a series of boolean questions.
  24213. +Takes args PROMPTER ACTOR LIST, and optional args HELP and ACTION-ALIST.
  24214. +
  24215. +LIST is a list of objects, or a function of no arguments to return the next
  24216. +object or nil.
  24217. +
  24218. +If PROMPTER is a string, the prompt is (format PROMPTER OBJECT).  If not
  24219. +a string, PROMPTER is a function of one arg (an object from LIST), which
  24220. +returns a string to be used as the prompt for that object.  If the return
  24221. +value is not a string, it is eval'd to get the answer; it may be nil to
  24222. +ignore the object, t to act on the object without asking the user, or a
  24223. +form to do a more complex prompt.
  24224. +
  24225. +ACTOR is a function of one arg (an object from LIST),
  24226. +which gets called with each object that the user answers `yes' for.
  24227. +
  24228. +If HELP is given, it is a list (OBJECT OBJECTS ACTION),
  24229. +where OBJECT is a string giving the singular noun for an elt of LIST;
  24230. +OBJECTS is the plural noun for elts of LIST, and ACTION is a transitive
  24231. +verb describing ACTOR.  The default is ("object" "objects" "act on").
  24232. +
  24233. +At the prompts, the user may enter y, Y, or SPC to act on that object;
  24234. +n, N, or DEL to skip that object; ! to act on all following objects;
  24235. +ESC or q to exit (skip all following objects); . (period) to act on the
  24236. +current object and then exit; or \[help-command] to get help.
  24237. +
  24238. +If ACTION-ALIST is given, it is an alist (KEY FUNCTION HELP) of extra keys
  24239. +that will be accepted.  KEY is a character; FUNCTION is a function of one
  24240. +arg (an object from LIST); HELP is a string.  When the user hits KEY,
  24241. +FUNCTION is called.  If it returns non-nil, the object is considered
  24242. +"acted upon", and the next object from LIST is processed.  If it returns
  24243. +nil, the prompt is repeated for the same object.
  24244. +
  24245. +Final optional argument NO-CURSOR-IN-ECHO-AREA non-nil says not to set
  24246. +`cursor-in-echo-area' while prompting.
  24247. +
  24248. +This function uses `query-replace-map' to define the standard responses,
  24249. +but not all of the responses which `query-replace' understands
  24250. +are meaningful here.
  24251. +
  24252. +Returns the number of actions taken.Fforward-page
  24253. +Move forward to page boundary.  With arg, repeat, or go back if negative.
  24254. +A page boundary is any line whose beginning matches the regexp
  24255. +`page-delimiter'.Fbackward-page
  24256. +Move backward to page boundary.  With arg, repeat, or go fwd if negative.
  24257. +A page boundary is any line whose beginning matches the regexp
  24258. +`page-delimiter'.Fmark-page
  24259. +Put mark at end of page, point at beginning.
  24260. +A numeric arg specifies to move forward or backward by that many pages,
  24261. +thus marking a page other than the one point was originally in.Fnarrow-to-page
  24262. +Make text outside current page invisible.
  24263. +A numeric arg specifies to move forward or backward by that many pages,
  24264. +thus showing a page other than the one point was originally in.Fcount-lines-page
  24265. +Report number of lines on current page, and how many are before or after point.Fwhat-page
  24266. +Print page and line number of point.Vparagraph-start
  24267. +*Regexp for beginning of a line that starts OR separates paragraphs.
  24268. +This regexp should match lines that separate paragraphs
  24269. +and should also match lines that start a paragraph
  24270. +(and are part of that paragraph).
  24271. +The variable `paragraph-separate' specifies how to distinguish
  24272. +lines that start paragraphs from lines that separate them.Vparagraph-separate
  24273. +*Regexp for beginning of a line that separates paragraphs.
  24274. +If you change this, you may have to change paragraph-start also.Vsentence-end
  24275. +*Regexp describing the end of a sentence.
  24276. +All paragraph boundaries also end sentences, regardless.
  24277. +
  24278. +In order to be recognized as the end of a sentence, the ending period,
  24279. +question mark, or exclamation point must be followed by two spaces,
  24280. +unless it's inside some sort of quotes or parenthesis.Vpage-delimiter
  24281. +*Regexp describing line-beginnings that separate pages.Vparagraph-ignore-fill-prefix
  24282. +Non-nil means the paragraph commands are not affected by `fill-prefix'.
  24283. +This is desirable in modes where blank lines are the paragraph delimiters.Fforward-paragraph
  24284. +Move forward to end of paragraph.
  24285. +With arg N, do it N times; negative arg -N means move backward N paragraphs.
  24286. +
  24287. +A line which `paragraph-start' matches either separates paragraphs
  24288. +(if `paragraph-separate' matches it also) or is the first line of a paragraph.
  24289. +A paragraph end is the beginning of a line which is not part of the paragraph
  24290. +to which the end of the previous line belongs, or the end of the buffer.Fbackward-paragraph
  24291. +Move backward to start of paragraph.
  24292. +With arg N, do it N times; negative arg -N means move forward N paragraphs.
  24293. +
  24294. +A paragraph start is the beginning of a line which is a
  24295. +`first-line-of-paragraph' or which is ordinary text and follows a
  24296. +paragraph-separating line; except: if the first real line of a
  24297. +paragraph is preceded by a blank line, the paragraph starts at that
  24298. +blank line.
  24299. +
  24300. +See `forward-paragraph' for more information.Fmark-paragraph
  24301. +Put point at beginning of this paragraph, mark at end.
  24302. +The paragraph marked is the one that contains point or follows point.Fkill-paragraph
  24303. +Kill forward to end of paragraph.
  24304. +With arg N, kill forward to Nth end of paragraph;
  24305. +negative arg -N means kill backward to Nth start of paragraph.Fbackward-kill-paragraph
  24306. +Kill back to start of paragraph.
  24307. +With arg N, kill back to Nth start of paragraph;
  24308. +negative arg -N means kill forward to Nth end of paragraph.Ftranspose-paragraphs
  24309. +Interchange this (or next) paragraph with previous one.Fforward-sentence
  24310. +Move forward to next `sentence-end'.  With argument, repeat.
  24311. +With negative argument, move backward repeatedly to `sentence-beginning'.
  24312. +
  24313. +The variable `sentence-end' is a regular expression that matches ends of
  24314. +sentences.  Also, every paragraph boundary terminates sentences as well.Fbackward-sentence
  24315. +Move backward to start of sentence.  With arg, do it arg times.
  24316. +See `forward-sentence' for more information.Fkill-sentence
  24317. +Kill from point to end of sentence.
  24318. +With arg, repeat; negative arg -N means kill back to Nth start of sentence.Fbackward-kill-sentence
  24319. +Kill back from point to start of sentence.
  24320. +With arg, repeat, or kill forward to Nth end of sentence if negative arg -N.Fmark-end-of-sentence
  24321. +Put mark at end of sentence.  Arg works as in `forward-sentence'.Ftranspose-sentences
  24322. +Interchange this (next) and previous sentence.Vregister-alist
  24323. +Alist of elements (NAME . CONTENTS), one for each Emacs register.
  24324. +NAME is a character (a number).  CONTENTS is a string, number,
  24325. +frame configuration, mark or list.
  24326. +A list of strings represents a rectangle.
  24327. +A list of the form (file . NAME) represents the file named NAME.Fget-register
  24328. +Return contents of Emacs register named CHAR, or nil if none.Fset-register
  24329. +Set contents of Emacs register named CHAR to VALUE.  Returns VALUE.
  24330. +See the documentation of the variable `register-alist' for possible VALUE.Fpoint-to-register
  24331. +Store current location of point in register REGISTER.
  24332. +With prefix argument, store current frame configuration.
  24333. +Use \[jump-to-register] to go to that location or restore that configuration.
  24334. +Argument is a character, naming the register.Fwindow-configuration-to-register
  24335. +Store the window configuration of the selected frame in register REGISTER.
  24336. +Use \[jump-to-register] to restore the configuration.
  24337. +Argument is a character, naming the register.Fframe-configuration-to-register
  24338. +Store the window configuration of all frames in register REGISTER.
  24339. +Use \[jump-to-register] to restore the configuration.
  24340. +Argument is a character, naming the register.Fjump-to-register
  24341. +Move point to location stored in a register.
  24342. +If the register contains a file name, find that file.
  24343. + (To put a file name in a register, you must use `set-register'.)
  24344. +If the register contains a window configuration (one frame) or a frame
  24345. +configuration (all frames), restore that frame or all frames accordingly.
  24346. +First argument is a character, naming the register.
  24347. +Optional second arg non-nil (interactively, prefix argument) says to
  24348. +delete any existing frames that the frame configuration doesn't mention.
  24349. +(Otherwise, these frames are iconified.)Fview-register
  24350. +Display what is contained in register named REGISTER.
  24351. +REGISTER is a character.Finsert-register
  24352. +Insert contents of register REG.  REG is a character.
  24353. +Normally puts point before and mark after the inserted text.
  24354. +If optional second arg is non-nil, puts mark before and point after.
  24355. +Interactively, second arg is non-nil if prefix arg is supplied.Fcopy-to-register
  24356. +Copy region into register REG.  With prefix arg, delete as well.
  24357. +Called from program, takes four args: REG, START, END and DELETE-FLAG.
  24358. +START and END are buffer positions indicating what to copy.Fappend-to-register
  24359. +Append region to text in register REG.  With prefix arg, delete as well.
  24360. +Called from program, takes four args: REG, START, END and DELETE-FLAG.
  24361. +START and END are buffer positions indicating what to append.Fprepend-to-register
  24362. +Prepend region to text in register REG.  With prefix arg, delete as well.
  24363. +Called from program, takes four args: REG, START, END and DELETE-FLAG.
  24364. +START and END are buffer positions indicating what to prepend.Fcopy-rectangle-to-register
  24365. +Copy rectangular region into register REG.  With prefix arg, delete as well.
  24366. +Called from program, takes four args: REG, START, END and DELETE-FLAG.
  24367. +START and END are buffer positions giving two corners of rectangle.Vcase-replace
  24368. +*Non-nil means query-replace should preserve case in replacements.Fquery-replace
  24369. +Replace some occurrences of FROM-STRING with TO-STRING.
  24370. +As each match is found, the user must type a character saying
  24371. +what to do with it.  For directions, type \[help-command] at that time.
  24372. +
  24373. +Preserves case in each replacement if `case-replace' and `case-fold-search'
  24374. +are non-nil and FROM-STRING has no uppercase letters.
  24375. +Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace
  24376. +only matches surrounded by word boundaries.
  24377. +
  24378. +To customize possible responses, change the "bindings" in `query-replace-map'.Fquery-replace-regexp
  24379. +Replace some things after point matching REGEXP with TO-STRING.
  24380. +As each match is found, the user must type a character saying
  24381. +what to do with it.  For directions, type \[help-command] at that time.
  24382. +
  24383. +Preserves case in each replacement if `case-replace' and `case-fold-search'
  24384. +are non-nil and REGEXP has no uppercase letters.
  24385. +Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace
  24386. +only matches surrounded by word boundaries.
  24387. +In TO-STRING, `\&' stands for whatever matched the whole of REGEXP,
  24388. +and `\=\N' (where N is a digit) stands for
  24389. + whatever what matched the Nth `\(...\)' in REGEXP.Fmap-query-replace-regexp
  24390. +Replace some matches for REGEXP with various strings, in rotation.
  24391. +The second argument TO-STRINGS contains the replacement strings, separated
  24392. +by spaces.  This command works like `query-replace-regexp' except
  24393. +that each successive replacement uses the next successive replacement string,
  24394. +wrapping around from the last such string to the first.
  24395. +
  24396. +Non-interactively, TO-STRINGS may be a list of replacement strings.
  24397. +
  24398. +A prefix argument N says to use each replacement string N times
  24399. +before rotating to the next.Freplace-string
  24400. +Replace occurrences of FROM-STRING with TO-STRING.
  24401. +Preserve case in each match if `case-replace' and `case-fold-search'
  24402. +are non-nil and FROM-STRING has no uppercase letters.
  24403. +Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace
  24404. +only matches surrounded by word boundaries.
  24405. +
  24406. +This function is usually the wrong thing to use in a Lisp program.
  24407. +What you probably want is a loop like this:
  24408. +  (while (search-forward FROM-STRING nil t)
  24409. +    (replace-match TO-STRING nil t))
  24410. +which will run faster and will not set the mark or print anything.Freplace-regexp
  24411. +Replace things after point matching REGEXP with TO-STRING.
  24412. +Preserve case in each match if `case-replace' and `case-fold-search'
  24413. +are non-nil and REGEXP has no uppercase letters.
  24414. +Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace
  24415. +only matches surrounded by word boundaries.
  24416. +In TO-STRING, `\&' stands for whatever matched the whole of REGEXP,
  24417. +and `\=\N' (where N is a digit) stands for
  24418. + whatever what matched the Nth `\(...\)' in REGEXP.
  24419. +
  24420. +This function is usually the wrong thing to use in a Lisp program.
  24421. +What you probably want is a loop like this:
  24422. +  (while (re-search-forward REGEXP nil t)
  24423. +    (replace-match TO-STRING nil nil))
  24424. +which will run faster and will not set the mark or print anything.Vregexp-history
  24425. +History list for some commands that read regular expressions.Fkeep-lines
  24426. +Delete all lines except those containing matches for REGEXP.
  24427. +A match split across lines preserves all the lines it lies in.
  24428. +Applies to all lines after point.Fflush-lines
  24429. +Delete lines containing matches for REGEXP.
  24430. +If a match is split across lines, all the lines it lies in are deleted.
  24431. +Applies to lines after point.Fhow-many
  24432. +Print number of matches for REGEXP following point.Foccur-mode
  24433. +Major mode for output from \[occur].
  24434. +Move point to one of the occurrences in this buffer,
  24435. +then use \[occur-mode-goto-occurrence] to go to the same occurrence
  24436. +in the buffer that the occurrences were found in.
  24437. +Or click \<occur-mode-map>\[occur-mode-mouse-goto] on an occurrence line.
  24438. +\{occur-mode-map}Foccur-mode-mouse-goto
  24439. +In Occur mode, go to the occurrence whose line you click on.Foccur-mode-goto-occurrence
  24440. +Go to the occurrence the current line describes.Vlist-matching-lines-default-context-lines
  24441. +*Default number of context lines to include around a `list-matching-lines'
  24442. +match.  A negative number means to include that many lines before the match.
  24443. +A positive number means to include that many lines both before and after.Foccur
  24444. +Show all lines in the current buffer containing a match for REGEXP.
  24445. +
  24446. +If a match spreads across multiple lines, all those lines are shown.
  24447. +
  24448. +Each line is displayed with NLINES lines before and after, or -NLINES
  24449. +before if NLINES is negative.
  24450. +NLINES defaults to `list-matching-lines-default-context-lines'.
  24451. +Interactively it is the prefix arg.
  24452. +
  24453. +The lines are shown in a buffer named `*Occur*'.
  24454. +It serves as a menu to find any of the occurrences in this buffer.
  24455. +\[describe-mode] in that buffer will explain how.Vquery-replace-help
  24456. +Help message while in query-replaceVquery-replace-map
  24457. +Keymap that defines the responses to questions in `query-replace'.
  24458. +The "bindings" in this map are not commands; they are answers.
  24459. +The valid answers include `act', `skip', `act-and-show',
  24460. +`exit', `act-and-exit', `edit', `delete-and-edit', `recenter',
  24461. +`automatic', `backup', and `help'.Fperform-replace
  24462. +Subroutine of `query-replace'.  Its complexity handles interactive queries.
  24463. +Don't use this in your own program unless you want to query and set the mark
  24464. +just as `query-replace' does.  Instead, write a simple loop like this:
  24465. +  (while (re-search-forward "foo[     ]+bar" nil t)
  24466. +    (replace-match "foobar" nil nil))
  24467. +which will run faster and probably do exactly what you want.Vquery-replace-highlight
  24468. +*Non-nil means to highlight words during query replacement.Fopen-line
  24469. +Insert a newline and leave point before it.
  24470. +If there is a fill prefix, insert the fill prefix on the new line
  24471. +if the line would have been empty.
  24472. +With arg N, insert N newlines.Fsplit-line
  24473. +Split current line, moving portion beyond point vertically down.Fquoted-insert
  24474. +Read next input character and insert it.
  24475. +This is useful for inserting control characters.
  24476. +You may also type up to 3 octal digits, to insert a character with that code.
  24477. +
  24478. +In overwrite mode, this function inserts the character anyway, and
  24479. +does not handle octal digits specially.  This means that if you use
  24480. +overwrite as your normal editing mode, you can use this function to
  24481. +insert characters when necessary.
  24482. +
  24483. +In binary overwrite mode, this function does overwrite, and octal
  24484. +digits are interpreted as a character code.  This is supposed to make
  24485. +this function useful in editing binary files.Fdelete-indentation
  24486. +Join this line to previous and fix up whitespace at join.
  24487. +If there is a fill prefix, delete it from the beginning of this line.
  24488. +With argument, join this line to following line.Ffixup-whitespace
  24489. +Fixup white space between objects around point.
  24490. +Leave one space or none, according to the context.Fdelete-horizontal-space
  24491. +Delete all spaces and tabs around point.Fjust-one-space
  24492. +Delete all spaces and tabs around point, leaving one space.Fdelete-blank-lines
  24493. +On blank line, delete all surrounding blank lines, leaving just one.
  24494. +On isolated blank line, delete that one.
  24495. +On nonblank line, delete any immediately following blank lines.Fback-to-indentation
  24496. +Move point to the first non-whitespace character on this line.Fnewline-and-indent
  24497. +Insert a newline, then indent according to major mode.
  24498. +Indentation is done using the value of `indent-line-function'.
  24499. +In programming language modes, this is the same as TAB.
  24500. +In some text modes, where TAB inserts a tab, this command indents to the
  24501. +column specified by the variable `left-margin'.Freindent-then-newline-and-indent
  24502. +Reindent current line, insert newline, then indent the new line.
  24503. +Indentation of both lines is done according to the current major mode,
  24504. +which means calling the current value of `indent-line-function'.
  24505. +In programming language modes, this is the same as TAB.
  24506. +In some text modes, where TAB inserts a tab, this indents to the
  24507. +column specified by the variable `left-margin'.Fbackward-delete-char-untabify
  24508. +Delete characters backward, changing tabs into spaces.
  24509. +Delete ARG chars, and kill (save in kill ring) if KILLP is non-nil.
  24510. +Interactively, ARG is the prefix arg (default 1)
  24511. +and KILLP is t if a prefix arg was specified.Fzap-to-char
  24512. +Kill up to and including ARG'th occurrence of CHAR.
  24513. +Goes backward if ARG is negative; error if CHAR not found.Fbeginning-of-buffer
  24514. +Move point to the beginning of the buffer; leave mark at previous position.
  24515. +With arg N, put point N/10 of the way from the true beginning.
  24516. +
  24517. +Don't use this command in Lisp programs!
  24518. +(goto-char (point-min)) is faster and avoids clobbering the mark.Fend-of-buffer
  24519. +Move point to the end of the buffer; leave mark at previous position.
  24520. +With arg N, put point N/10 of the way from the true end.
  24521. +
  24522. +Don't use this command in Lisp programs!
  24523. +(goto-char (point-max)) is faster and avoids clobbering the mark.Fmark-whole-buffer
  24524. +Put point at beginning and mark at end of buffer.
  24525. +You probably should not use this function in Lisp programs;
  24526. +it is usually a mistake for a Lisp function to use any subroutine
  24527. +that uses or sets the mark.Fcount-lines-region
  24528. +Print number of lines and characters in the region.Fwhat-line
  24529. +Print the current line number (in the buffer) of point.Fcount-lines
  24530. +Return number of lines between START and END.
  24531. +This is usually the number of newlines between them,
  24532. +but can be one more if START is not equal to END
  24533. +and the greater of them is not at the start of a line.Fwhat-cursor-position
  24534. +Print info on cursor position (on screen and within buffer).Ffundamental-mode
  24535. +Major mode not specialized for anything in particular.
  24536. +Other major modes are defined by comparison with this one.Vread-expression-map
  24537. +Minibuffer keymap used for reading Lisp expressions.Feval-expression
  24538. +Evaluate EXPRESSION and print value in minibuffer.
  24539. +Value is also consed on to front of the variable `values'.Fedit-and-eval-command
  24540. +Prompting with PROMPT, let user edit COMMAND and eval result.
  24541. +COMMAND is a Lisp expression.  Let user edit that expression in
  24542. +the minibuffer, then read and evaluate the result.Frepeat-complex-command
  24543. +Edit and re-evaluate last complex command, or ARGth from last.
  24544. +A complex command is one which used the minibuffer.
  24545. +The command is placed in the minibuffer as a Lisp form for editing.
  24546. +The result is executed, repeating the command as changed.
  24547. +If the command has been changed or is not the most recent previous command
  24548. +it is added to the front of the command history.
  24549. +You can use the minibuffer history commands \<minibuffer-local-map>\[next-history-element] and \[previous-history-element]
  24550. +to get different commands to edit and resubmit.Vminibuffer-history
  24551. +Default minibuffer history list.
  24552. +This is used for all minibuffer input
  24553. +except when an alternate history list is specified.Vminibuffer-history-sexp-flag
  24554. +Non-nil when doing history operations on `command-history'.
  24555. +More generally, indicates that the history list being acted on
  24556. +contains expressions rather than strings.Fprevious-matching-history-element
  24557. +Find the previous history element that matches REGEXP.
  24558. +(Previous history elements refer to earlier actions.)
  24559. +With prefix argument N, search for Nth previous match.
  24560. +If N is negative, find the next or Nth next match.Fnext-matching-history-element
  24561. +Find the next history element that matches REGEXP.
  24562. +(The next history element refers to a more recent action.)
  24563. +With prefix argument N, search for Nth next match.
  24564. +If N is negative, find the previous or Nth previous match.Fnext-history-element
  24565. +Insert the next element of the minibuffer history into the minibuffer.Fprevious-history-element
  24566. +Inserts the previous element of the minibuffer history into the minibuffer.Fnext-complete-history-element
  24567. +Get next element of history which is a completion of minibuffer contents.Fprevious-complete-history-element
  24568. +Get previous element of history which is a completion of minibuffer contents.Fgoto-line
  24569. +Goto line ARG, counting from line 1 at beginning of buffer.Fundo
  24570. +Undo some previous changes.
  24571. +Repeat this command to undo more changes.
  24572. +A numeric argument serves as a repeat count.Vpending-undo-list
  24573. +Within a run of consecutive undo commands, list remaining to be undone.Fundo-start
  24574. +Set `pending-undo-list' to the front of the undo list.
  24575. +The next call to `undo-more' will undo the most recently made change.Fundo-more
  24576. +Undo back N undo-boundaries beyond what was already undone recently.
  24577. +Call `undo-start' to get ready to undo recent changes,
  24578. +then call `undo-more' one or more times to undo them.Vshell-command-history
  24579. +History list for some commands that read shell commands.Fshell-command
  24580. +Execute string COMMAND in inferior shell; display output, if any.
  24581. +If COMMAND ends in ampersand, execute it asynchronously.
  24582. +Optional second arg non-nil (prefix arg, if interactive)
  24583. +means insert output in current buffer after point (leave mark after it).
  24584. +This cannot be done asynchronously.Fshell-command-on-region
  24585. +Execute string COMMAND in inferior shell with region as input.
  24586. +Normally display output (if any) in temp buffer `*Shell Command Output*';
  24587. +Prefix arg means replace the region with it.
  24588. +Noninteractive args are START, END, COMMAND, FLAG.
  24589. +Noninteractively FLAG means insert output in place of text from START to END,
  24590. +and put point at the end, but don't alter the mark.
  24591. +
  24592. +If the output is one line, it is displayed in the echo area,
  24593. +but it is nonetheless available in buffer `*Shell Command Output*'
  24594. +even though that buffer is not automatically displayed.  If there is no output
  24595. +or output is inserted in the current buffer then `*Shell Command Output*' is
  24596. +deleted.Funiversal-argument
  24597. +Begin a numeric argument for the following command.
  24598. +Digits or minus sign following \[universal-argument] make up the numeric argument.
  24599. +\[universal-argument] following the digits or minus sign ends the argument.
  24600. +\[universal-argument] without digits or minus sign provides 4 as argument.
  24601. +Repeating \[universal-argument] without digits or minus sign
  24602. + multiplies the argument by 4 each time.Fdigit-argument
  24603. +Part of the numeric argument for the next command.
  24604. +\[universal-argument] following digits or minus sign ends the argument.Fnegative-argument
  24605. +Begin a negative numeric argument for the next command.
  24606. +\[universal-argument] following digits or minus sign ends the argument.Fforward-to-indentation
  24607. +Move forward ARG lines and position at first nonblank character.Fbackward-to-indentation
  24608. +Move backward ARG lines and position at first nonblank character.Vkill-whole-line
  24609. +*If non-nil, `kill-line' with no arg at beg of line kills the whole line.Fkill-line
  24610. +Kill the rest of the current line; if no nonblanks there, kill thru newline.
  24611. +With prefix argument, kill that many lines from point.
  24612. +Negative arguments kill lines backward.
  24613. +
  24614. +When calling from a program, nil means "no arg",
  24615. +a number counts as a prefix arg.
  24616. +
  24617. +If `kill-whole-line' is non-nil, then kill the whole line
  24618. +when given no argument at the beginning of a line.Vinterprogram-cut-function
  24619. +Function to call to make a killed region available to other programs.
  24620. +
  24621. +Most window systems provide some sort of facility for cutting and
  24622. +pasting text between the windows of different programs.
  24623. +This variable holds a function that Emacs calls whenever text
  24624. +is put in the kill ring, to make the new kill available to other
  24625. +programs.
  24626. +
  24627. +The function takes one or two arguments.
  24628. +The first argument, TEXT, is a string containing
  24629. +the text which should be made available.
  24630. +The second, PUSH, if non-nil means this is a "new" kill;
  24631. +nil means appending to an "old" kill.Vinterprogram-paste-function
  24632. +Function to call to get text cut from other programs.
  24633. +
  24634. +Most window systems provide some sort of facility for cutting and
  24635. +pasting text between the windows of different programs.
  24636. +This variable holds a function that Emacs calls to obtain
  24637. +text that other programs have provided for pasting.
  24638. +
  24639. +The function should be called with no arguments.  If the function
  24640. +returns nil, then no other program has provided such text, and the top
  24641. +of the Emacs kill ring should be used.  If the function returns a
  24642. +string, that string should be put in the kill ring as the latest kill.
  24643. +
  24644. +Note that the function should return a string only if a program other
  24645. +than Emacs has provided a string for pasting; if Emacs provided the
  24646. +most recent string, the function should return nil.  If it is
  24647. +difficult to tell whether Emacs or some other program provided the
  24648. +current string, it is probably good enough to return nil if the string
  24649. +is equal (according to `string=') to the last text Emacs provided.Vkill-ring
  24650. +List of killed text sequences.
  24651. +Since the kill ring is supposed to interact nicely with cut-and-paste
  24652. +facilities offered by window systems, use of this variable should
  24653. +interact nicely with `interprogram-cut-function' and
  24654. +`interprogram-paste-function'.  The functions `kill-new',
  24655. +`kill-append', and `current-kill' are supposed to implement this
  24656. +interaction; you may want to use them instead of manipulating the kill
  24657. +ring directly.Vkill-ring-max
  24658. +*Maximum length of kill ring before oldest elements are thrown away.Vkill-ring-yank-pointer
  24659. +The tail of the kill ring whose car is the last thing yanked.Fkill-new
  24660. +Make STRING the latest kill in the kill ring.
  24661. +Set the kill-ring-yank pointer to point to it.
  24662. +If `interprogram-cut-function' is non-nil, apply it to STRING.Fkill-append
  24663. +Append STRING to the end of the latest kill in the kill ring.
  24664. +If BEFORE-P is non-nil, prepend STRING to the kill.
  24665. +If `interprogram-cut-function' is set, pass the resulting kill to
  24666. +it.Fcurrent-kill
  24667. +Rotate the yanking point by N places, and then return that kill.
  24668. +If N is zero, `interprogram-paste-function' is set, and calling it
  24669. +returns a string, then that string is added to the front of the
  24670. +kill ring and returned as the latest kill.
  24671. +If optional arg DO-NOT-MOVE is non-nil, then don't actually move the 
  24672. +yanking point; just return the Nth kill forward.Vkill-read-only-ok
  24673. +*Non-nil means don't signal an error for killing read-only text.Fkill-region
  24674. +Kill between point and mark.
  24675. +The text is deleted but saved in the kill ring.
  24676. +The command \[yank] can retrieve it from there.
  24677. +(If you want to kill and then yank immediately, use \[copy-region-as-kill].)
  24678. +If the buffer is read-only, Emacs will beep and refrain from deleting
  24679. +the text, but put the text in the kill ring anyway.  This means that
  24680. +you can use the killing commands to copy text from a read-only buffer.
  24681. +
  24682. +This is the primitive for programs to kill text (as opposed to deleting it).
  24683. +Supply two arguments, character numbers indicating the stretch of text
  24684. + to be killed.
  24685. +Any command that calls this function is a "kill command".
  24686. +If the previous command was also a kill command,
  24687. +the text killed this time appends to the text killed last time
  24688. +to make one entry in the kill ring.Fcopy-region-as-kill
  24689. +Save the region as if killed, but don't kill it.
  24690. +If `interprogram-cut-function' is non-nil, also save the text for a window
  24691. +system cut and paste.Fkill-ring-save
  24692. +Save the region as if killed, but don't kill it.
  24693. +This command is similar to `copy-region-as-kill', except that it gives
  24694. +visual feedback indicating the extent of the region being copied.
  24695. +If `interprogram-cut-function' is non-nil, also save the text for a window
  24696. +system cut and paste.Fappend-next-kill
  24697. +Cause following command, if it kills, to append to previous kill.Fyank-pop
  24698. +Replace just-yanked stretch of killed text with a different stretch.
  24699. +This command is allowed only immediately after a `yank' or a `yank-pop'.
  24700. +At such a time, the region contains a stretch of reinserted
  24701. +previously-killed text.  `yank-pop' deletes that text and inserts in its
  24702. +place a different stretch of killed text.
  24703. +
  24704. +With no argument, the previous kill is inserted.
  24705. +With argument N, insert the Nth previous kill.
  24706. +If N is negative, this is a more recent kill.
  24707. +
  24708. +The sequence of kills wraps around, so that after the oldest one
  24709. +comes the newest one.Fyank
  24710. +Reinsert the last stretch of killed text.
  24711. +More precisely, reinsert the stretch of killed text most recently
  24712. +killed OR yanked.  Put point at end, and set mark at beginning.
  24713. +With just C-u as argument, same but put point at beginning (and mark at end).
  24714. +With argument N, reinsert the Nth most recently killed stretch of killed
  24715. +text.
  24716. +See also the command \[yank-pop].Frotate-yank-pointer
  24717. +Rotate the yanking point in the kill ring.
  24718. +With argument, rotate that many kills forward (or backward, if negative).Finsert-buffer
  24719. +Insert after point the contents of BUFFER.
  24720. +Puts mark after the inserted text.
  24721. +BUFFER may be a buffer or a buffer name.Fappend-to-buffer
  24722. +Append to specified buffer the text of the region.
  24723. +It is inserted into that buffer before its point.
  24724. +
  24725. +When calling from a program, give three arguments:
  24726. +BUFFER (or buffer name), START and END.
  24727. +START and END specify the portion of the current buffer to be copied.Fprepend-to-buffer
  24728. +Prepend to specified buffer the text of the region.
  24729. +It is inserted into that buffer after its point.
  24730. +
  24731. +When calling from a program, give three arguments:
  24732. +BUFFER (or buffer name), START and END.
  24733. +START and END specify the portion of the current buffer to be copied.Fcopy-to-buffer
  24734. +Copy to specified buffer the text of the region.
  24735. +It is inserted into that buffer, replacing existing text there.
  24736. +
  24737. +When calling from a program, give three arguments:
  24738. +BUFFER (or buffer name), START and END.
  24739. +START and END specify the portion of the current buffer to be copied.Vmark-even-if-inactive
  24740. +*Non-nil means you can use the mark even when inactive.
  24741. +This option makes a difference in Transient Mark mode.
  24742. +When the option is non-nil, deactivation of the mark
  24743. +turns off region highlighting, but commands that use the mark
  24744. +behave as if the mark were still active.Fmark
  24745. +Return this buffer's mark value as integer; error if mark inactive.
  24746. +If optional argument FORCE is non-nil, access the mark value
  24747. +even if the mark is not currently active, and return nil
  24748. +if there is no mark at all.
  24749. +
  24750. +If you are using this in an editing command, you are most likely making
  24751. +a mistake; see the documentation of `set-mark'.Fdeactivate-mark
  24752. +Deactivate the mark by setting `mark-active' to nil.
  24753. +(That makes a difference only in Transient Mark mode.)
  24754. +Also runs the hook `deactivate-mark-hook'.Fset-mark
  24755. +Set this buffer's mark to POS.  Don't use this function!
  24756. +That is to say, don't use this function unless you want
  24757. +the user to see that the mark has moved, and you want the previous
  24758. +mark position to be lost.
  24759. +
  24760. +Normally, when a new mark is set, the old one should go on the stack.
  24761. +This is why most applications should use push-mark, not set-mark.
  24762. +
  24763. +Novice Emacs Lisp programmers often try to use the mark for the wrong
  24764. +purposes.  The mark saves a location for the user's convenience.
  24765. +Most editing commands should not alter the mark.
  24766. +To remember a location for internal use in the Lisp program,
  24767. +store it in a Lisp variable.  Example:
  24768. +
  24769. +   (let ((beg (point))) (forward-line 1) (delete-region beg (point))).Vmark-ring
  24770. +The list of former marks of the current buffer, most recent first.Vmark-ring-max
  24771. +*Maximum size of mark ring.  Start discarding off end if gets this big.Vglobal-mark-ring
  24772. +The list of saved global marks, most recent first.Vglobal-mark-ring-max
  24773. +*Maximum size of global mark ring.  Start discarding off end if gets this big.Fset-mark-command
  24774. +Set mark at where point is, or jump to mark.
  24775. +With no prefix argument, set mark, push old mark position on local mark
  24776. +ring, and push mark on global mark ring.
  24777. +With argument, jump to mark, and pop a new position for mark off the ring
  24778. +(does not affect global mark ring).
  24779. +
  24780. +Novice Emacs Lisp programmers often try to use the mark for the wrong
  24781. +purposes.  See the documentation of `set-mark' for more information.Fpush-mark
  24782. +Set mark at LOCATION (point, by default) and push old mark on mark ring.
  24783. +If the last global mark pushed was not in the current buffer,
  24784. +also push LOCATION on the global mark ring.
  24785. +Display `Mark set' unless the optional second arg NOMSG is non-nil.
  24786. +In Transient Mark mode, activate mark if optional third arg ACTIVATE non-nil.
  24787. +
  24788. +Novice Emacs Lisp programmers often try to use the mark for the wrong
  24789. +purposes.  See the documentation of `set-mark' for more information.
  24790. +
  24791. +In Transient Mark mode, this does not activate the mark.Fpop-mark
  24792. +Pop off mark ring into the buffer's actual mark.
  24793. +Does not set point.  Does nothing if mark ring is empty.Fexchange-point-and-mark
  24794. +Put the mark where point is now, and point where the mark is now.
  24795. +This command works even when the mark is not active,
  24796. +and it reactivates the mark.Ftransient-mark-mode
  24797. +Toggle Transient Mark mode.
  24798. +With arg, turn Transient Mark mode on if arg is positive, off otherwise.
  24799. +
  24800. +In Transient Mark mode, when the mark is active, the region is highlighted.
  24801. +Changing the buffer "deactivates" the mark.
  24802. +So do certain other operations that set the mark
  24803. +but whose main purpose is something else--for example,
  24804. +incremental search, \[beginning-of-buffer], and \[end-of-buffer].Fpop-global-mark
  24805. +Pop off global mark ring and jump to the top location.Vnext-line-add-newlines
  24806. +*If non-nil, `next-line' inserts newline to avoid `end of buffer' error.Fnext-line
  24807. +Move cursor vertically down ARG lines.
  24808. +If there is no character in the target line exactly under the current column,
  24809. +the cursor is positioned after the character in that line which spans this
  24810. +column, or at the end of the line if it is not long enough.
  24811. +If there is no line in the buffer after this one, behavior depends on the
  24812. +value of next-line-add-newlines.  If non-nil, a newline character is inserted
  24813. +to create a line and the cursor moves to that line, otherwise the cursor is
  24814. +moved to the end of the buffer (if already at the end of the buffer, an error
  24815. +is signaled).
  24816. +
  24817. +The command \[set-goal-column] can be used to create
  24818. +a semipermanent goal column to which this command always moves.
  24819. +Then it does not try to move vertically.  This goal column is stored
  24820. +in `goal-column', which is nil when there is none.
  24821. +
  24822. +If you are thinking of using this in a Lisp program, consider
  24823. +using `forward-line' instead.  It is usually easier to use
  24824. +and more reliable (no dependence on goal column, etc.).Fprevious-line
  24825. +Move cursor vertically up ARG lines.
  24826. +If there is no character in the target line exactly over the current column,
  24827. +the cursor is positioned after the character in that line which spans this
  24828. +column, or at the end of the line if it is not long enough.
  24829. +
  24830. +The command \[set-goal-column] can be used to create
  24831. +a semipermanent goal column to which this command always moves.
  24832. +Then it does not try to move vertically.
  24833. +
  24834. +If you are thinking of using this in a Lisp program, consider using
  24835. +`forward-line' with a negative argument instead.  It is usually easier
  24836. +to use and more reliable (no dependence on goal column, etc.).Vtrack-eol
  24837. +*Non-nil means vertical motion starting at end of line keeps to ends of lines.
  24838. +This means moving to the end of each line moved onto.
  24839. +The beginning of a blank line does not count as the end of a line.Vgoal-column
  24840. +*Semipermanent goal column for vertical motion, as set by \[set-goal-column], or nil.Vtemporary-goal-column
  24841. +Current goal column for vertical motion.
  24842. +It is the column where point was
  24843. +at the start of current run of vertical motion commands.
  24844. +When the `track-eol' feature is doing its job, the value is 9999.Fset-goal-column
  24845. +Set the current horizontal position as a goal for \[next-line] and \[previous-line].
  24846. +Those commands will move to this position in the line moved to
  24847. +rather than trying to keep the same horizontal position.
  24848. +With a non-nil argument, clears out the goal column
  24849. +so that \[next-line] and \[previous-line] resume vertical motion.
  24850. +The goal column is stored in the variable `goal-column'.Vhscroll-step
  24851. +*The number of columns to try scrolling a window by when point moves out.
  24852. +If that fails to bring point back on frame, point is centered instead.
  24853. +If this is zero, point is always centered after it moves off frame.Fhscroll-point-visible
  24854. +Scrolls the selected window horizontally to make point visible.Fscroll-other-window-down
  24855. +Scroll the "other window" down.Fbeginning-of-buffer-other-window
  24856. +Move point to the beginning of the buffer in the other window.
  24857. +Leave mark at previous position.
  24858. +With arg N, put point N/10 of the way from the true beginning.Fend-of-buffer-other-window
  24859. +Move point to the end of the buffer in the other window.
  24860. +Leave mark at previous position.
  24861. +With arg N, put point N/10 of the way from the true end.Ftranspose-chars
  24862. +Interchange characters around point, moving forward one character.
  24863. +With prefix arg ARG, effect is to take character before point
  24864. +and drag it forward past ARG other characters (backward if ARG negative).
  24865. +If no argument and at end of line, the previous two chars are exchanged.Ftranspose-words
  24866. +Interchange words around point, leaving point at end of them.
  24867. +With prefix arg ARG, effect is to take word before or around point
  24868. +and drag it forward past ARG other words (backward if ARG negative).
  24869. +If ARG is zero, the words around or after point and around or after mark
  24870. +are interchanged.Ftranspose-sexps
  24871. +Like \[transpose-words] but applies to sexps.
  24872. +Does not work on a sexp that point is in the middle of
  24873. +if it is a list or string.Ftranspose-lines
  24874. +Exchange current line and previous line, leaving point after both.
  24875. +With argument ARG, takes previous line and moves it past ARG lines.
  24876. +With argument 0, interchanges line point is in with line mark is in.Vcomment-column
  24877. +*Column to indent right-margin comments to.
  24878. +Setting this variable automatically makes it local to the current buffer.
  24879. +Each mode establishes a different default value for this variable; you
  24880. +can set the value for a particular mode using that mode's hook.Vcomment-start
  24881. +*String to insert to start a new comment, or nil if no comment syntax defined.Vcomment-start-skip
  24882. +*Regexp to match the start of a comment plus everything up to its body.
  24883. +If there are any \(...\) pairs, the comment delimiter text is held to begin
  24884. +at the place matched by the close of the first pair.Vcomment-end
  24885. +*String to insert to end a new comment.
  24886. +Should be an empty string if comments are terminated by end-of-line.Vcomment-indent-hook
  24887. +Obsolete variable for function to compute desired indentation for a comment.
  24888. +This function is called with no args with point at the beginning of
  24889. +the comment's starting delimiter.Vcomment-indent-function
  24890. +Function to compute desired indentation for a comment.
  24891. +This function is called with no args with point at the beginning of
  24892. +the comment's starting delimiter.Findent-for-comment
  24893. +Indent this line's comment to comment column, or insert an empty comment.Fset-comment-column
  24894. +Set the comment column based on point.
  24895. +With no arg, set the comment column to the current column.
  24896. +With just minus as arg, kill any comment on this line.
  24897. +With any other arg, set comment column to indentation of the previous comment
  24898. + and then align or create a comment on this line at that column.Fkill-comment
  24899. +Kill the comment on this line, if any.
  24900. +With argument, kill comments on that many lines starting with this one.Fcomment-region
  24901. +Comment or uncomment each line in the region.
  24902. +With just C-u prefix arg, uncomment each line in region.
  24903. +Numeric prefix arg ARG means use ARG comment characters.
  24904. +If ARG is negative, delete that many comment characters instead.
  24905. +Comments are terminated on each line, even for syntax in which newline does
  24906. +not end the comment.  Blank lines do not get comments.Fbackward-word
  24907. +Move backward until encountering the end of a word.
  24908. +With argument, do this that many times.
  24909. +In programs, it is faster to call `forward-word' with negative arg.Fmark-word
  24910. +Set mark arg words away from point.Fkill-word
  24911. +Kill characters forward until encountering the end of a word.
  24912. +With argument, do this that many times.Fbackward-kill-word
  24913. +Kill characters backward until encountering the end of a word.
  24914. +With argument, do this that many times.Fcurrent-word
  24915. +Return the word point is on (or a nearby word) as a string.
  24916. +If optional arg STRICT is non-nil, return nil unless point is within
  24917. +or adjacent to a word.Vfill-prefix
  24918. +*String for filling to insert at front of new line, or nil for none.
  24919. +Setting this variable automatically makes it local to the current buffer.Vauto-fill-inhibit-regexp
  24920. +*Regexp to match lines which should not be auto-filled.Fauto-fill-mode
  24921. +Toggle auto-fill mode.
  24922. +With arg, turn Auto-Fill mode on if and only if arg is positive.
  24923. +In Auto-Fill mode, inserting a space at a column beyond `fill-column'
  24924. +automatically breaks the line at a previous space.Fauto-fill-function
  24925. +Automatically break line at a previous space, in insertion of text.Fturn-on-auto-fill
  24926. +Unconditionally turn on Auto Fill mode.Fset-fill-column
  24927. +Set `fill-column' to current column, or to argument if given.
  24928. +The variable `fill-column' has a separate value for each buffer.Vcomment-multi-line
  24929. +*Non-nil means \[indent-new-comment-line] should continue same comment
  24930. +on new line, with no new terminator or starter.
  24931. +This is obsolete because you might as well use \[newline-and-indent].Findent-new-comment-line
  24932. +Break line at point and indent, continuing comment if within one.
  24933. +This indents the body of the continued comment
  24934. +under the previous comment line.
  24935. +
  24936. +This command is intended for styles where you write a comment per line,
  24937. +starting a new comment (and terminating it if necessary) on each line.
  24938. +If you want to continue one comment across several lines, use \[newline-and-indent].Fset-selective-display
  24939. +Set `selective-display' to ARG; clear it if no arg.
  24940. +When the value of `selective-display' is a number > 0,
  24941. +lines whose indentation is >= that value are not displayed.
  24942. +The variable `selective-display' has a separate value for each buffer.Voverwrite-mode-textual
  24943. +The string displayed in the mode line when in overwrite mode.Voverwrite-mode-binary
  24944. +The string displayed in the mode line when in binary overwrite mode.Foverwrite-mode
  24945. +Toggle overwrite mode.
  24946. +With arg, turn overwrite mode on iff arg is positive.
  24947. +In overwrite mode, printing characters typed in replace existing text
  24948. +on a one-for-one basis, rather than pushing it to the right.  At the
  24949. +end of a line, such characters extend the line.  Before a tab,
  24950. +such characters insert until the tab is filled in.
  24951. +\[quoted-insert] still inserts characters in overwrite mode; this
  24952. +is supposed to make it easier to insert characters when necessary.Fbinary-overwrite-mode
  24953. +Toggle binary overwrite mode.
  24954. +With arg, turn binary overwrite mode on iff arg is positive.
  24955. +In binary overwrite mode, printing characters typed in replace
  24956. +existing text.  Newlines are not treated specially, so typing at the
  24957. +end of a line joins the line to the next, with the typed character
  24958. +between them.  Typing before a tab character simply replaces the tab
  24959. +with the character typed.
  24960. +\[quoted-insert] replaces the text at the cursor, just as ordinary
  24961. +typing characters do.
  24962. +
  24963. +Note that binary overwrite mode is not its own minor mode; it is a
  24964. +specialization of overwrite-mode, entered by setting the
  24965. +`overwrite-mode' variable to `overwrite-mode-binary'.Vline-number-mode
  24966. +*Non-nil means display line number in mode line.Fline-number-mode
  24967. +Toggle Line Number mode.
  24968. +With arg, turn Line Number mode on iff arg is positive.
  24969. +When Line Number mode is enabled, the line number appears
  24970. +in the mode line.Vblink-matching-paren
  24971. +*Non-nil means show matching open-paren when close-paren is inserted.Vblink-matching-paren-distance
  24972. +*If non-nil, is maximum distance to search for matching open-paren.Fblink-matching-open
  24973. +Move cursor momentarily to the beginning of the sexp before point.Fkeyboard-quit
  24974. +Signal a  quit  condition.
  24975. +During execution of Lisp code, this character causes a quit directly.
  24976. +At top-level, as an editor command, this simply beeps.Fset-variable
  24977. +Set VARIABLE to VALUE.  VALUE is a Lisp object.
  24978. +When using this interactively, supply a Lisp expression for VALUE.
  24979. +If you want VALUE to be a string, you must surround it with doublequotes.
  24980. +
  24981. +If VARIABLE has a `variable-interactive' property, that is used as if
  24982. +it were the arg to `interactive' (which see) to interactively read the value.Fchoose-completion
  24983. +Choose the completion that point is in or next to.Fcompletion-list-mode
  24984. +Major mode for buffers showing lists of possible completions.
  24985. +Type \<completion-list-mode-map>\[choose-completion] in the completion list to select the completion near point.
  24986. +Use \<completion-list-mode-map>\[mouse-choose-completion] to select one with the mouse.Vcommand-line-processed
  24987. +t once command line has been processedVinhibit-startup-message
  24988. +*Non-nil inhibits the initial startup message.
  24989. +This is for use in your personal init file, once you are familiar
  24990. +with the contents of the startup message.Vinhibit-startup-echo-area-message
  24991. +*Non-nil inhibits the initial startup echo area message.
  24992. +Inhibition takes effect only if your `.emacs' file contains
  24993. +a line of this form:
  24994. + (setq inhibit-startup-echo-area-message "YOUR-USER-NAME")
  24995. +If your `.emacs' file is byte-compiled, use the following form instead:
  24996. + (eval '(setq inhibit-startup-echo-area-message "YOUR-USER-NAME"))
  24997. +Thus, someone else using a copy of your `.emacs' file will see
  24998. +the startup message unless he personally acts to inhibit it.Vinhibit-default-init
  24999. +*Non-nil inhibits loading the `default' library.Vcommand-switch-alist
  25000. +Alist of command-line switches.
  25001. +Elements look like (SWITCH-STRING . HANDLER-FUNCTION).
  25002. +HANDLER-FUNCTION receives switch name as sole arg;
  25003. +remaining command-line args are in the variable `command-line-args-left'.Vcommand-line-args-left
  25004. +List of command-line args not yet processed.Vcommand-line-functions
  25005. +List of functions to process unrecognized command-line arguments.
  25006. +Each function should access the dynamically bound variables
  25007. +`argi' (the current argument) and `command-line-args-left' (the remaining
  25008. +arguments).  The function should return non-nil only if it recognizes and
  25009. +processes `argi'.  If it does so, it may consume successive arguments by
  25010. +altering `command-line-args-left' to remove them.Vcommand-line-default-directory
  25011. +Default directory to use for command line arguments.
  25012. +This is normally copied from `default-directory' when Emacs starts.Vbefore-init-hook
  25013. +Functions to call after handling urgent options but before init files.
  25014. +The frame system uses this to open frames to display messages while
  25015. +Emacs loads the user's initialization file.Vafter-init-hook
  25016. +Functions to call after loading the init file (`~/.emacs').
  25017. +The call is not protected by a condition-case, so you can set `debug-on-error'
  25018. +in `.emacs', and put all the actual code on `after-init-hook'.Vterm-setup-hook
  25019. +Functions to be called after loading terminal-specific Lisp code.
  25020. +See `run-hooks'.  This variable exists for users to set,
  25021. +so as to override the definitions made by the terminal-specific file.
  25022. +Emacs never sets this variable itself.Vkeyboard-type
  25023. +The brand of keyboard you are using.
  25024. +This variable is used to define
  25025. +the proper function and keypad keys for use under X.  It is used in a
  25026. +fashion analogous to the environment value TERM.Vwindow-setup-hook
  25027. +Normal hook run to initialize window system display.
  25028. +Emacs runs this hook after processing the command line arguments and loading
  25029. +the user's init file.Vinitial-major-mode
  25030. +Major mode command symbol to use for the initial *scratch* buffer.Vinit-file-user
  25031. +Identity of user whose `.emacs' file is or was read.
  25032. +The value is nil if no init file is being used; otherwise, it may be either
  25033. +the null string, meaning that the init file was taken from the user that
  25034. +originally logged in, or it may be a string containing a user's name.
  25035. +
  25036. +In either of the latter cases, `(concat "~" init-file-user "/")'
  25037. +evaluates to the name of the directory where the `.emacs' file was
  25038. +looked for.Vsite-run-file
  25039. +File containing site-wide run-time initializations.
  25040. +This file is loaded at run-time before `~/.emacs'.  It contains inits
  25041. +that need to be in place for the entire site, but which, due to their
  25042. +higher incidence of change, don't make sense to load into emacs'
  25043. +dumped image.  Thus, the run-time load order is: 1. file described in
  25044. +this variable, if non-nil; 2. `~/.emacs'; 3. `default.el'.Viso-8859-1-locale-regexp
  25045. +Regexp that specifies when to enable the ISO 8859-1 character set.
  25046. +We do that if this regexp matches the locale name
  25047. +specified by the LC_ALL, LC_CTYPE and LANG environment variables.Vuser-mail-address
  25048. +Full mailing address of this user.Flambda
  25049. +Return a lambda expression.
  25050. +A call of the form (lambda ARGS DOCSTRING INTERACTIVE BODY) is
  25051. +self-quoting; the result of evaluating the lambda expression is the
  25052. +expression itself.  The lambda expression may then be treated as a
  25053. +function, i. e. stored as the function value of a symbol, passed to
  25054. +funcall or mapcar, etcetera.
  25055. +ARGS should take the same form as an argument list for a `defun'.
  25056. +DOCSTRING should be a string, as described for `defun'.  It may be omitted.
  25057. +INTERACTIVE should be a call to the function `interactive', which see.
  25058. +It may also be omitted.
  25059. +BODY should be a list of lisp expressions.Fone-window-p
  25060. +Returns non-nil if the selected window is the only window (in its frame).
  25061. +Optional arg NOMINI non-nil means don't count the minibuffer
  25062. +even if it is active.
  25063. +
  25064. +The optional arg ALL-FRAMES t means count windows on all frames.
  25065. +If it is `visible', count windows on all visible frames.
  25066. +ALL-FRAMES nil or omitted means count only the selected frame, 
  25067. +plus the minibuffer it uses (which may be on another frame).
  25068. +If ALL-FRAMES is neither nil nor t, count only the selected frame.Fwalk-windows
  25069. +Cycle through all visible windows, calling PROC for each one.
  25070. +PROC is called with a window as argument.
  25071. +Optional second arg MINIBUF t means count the minibuffer window
  25072. +even if not active.  If MINIBUF is neither t nor nil it means
  25073. +not to count the minibuffer even if it is active.
  25074. +
  25075. +Optional third arg ALL-FRAMES, if t, means include all frames.
  25076. +ALL-FRAMES nil or omitted means cycle within the selected frame,
  25077. +but include the minibuffer window (if MINIBUF says so) that that
  25078. +frame uses, even if it is on another frame.
  25079. +If ALL-FRAMES is neither nil nor t, stick strictly to the selected frame.Fminibuffer-window-active-p
  25080. +Return t if WINDOW (a minibuffer window) is now active.Fsuppress-keymap
  25081. +Make MAP override all normally self-inserting keys to be undefined.
  25082. +Normally, as an exception, digits and minus-sign are set to make prefix args,
  25083. +but optional second arg NODIGITS non-nil treats them like other chars.Vkey-substitution-in-progress
  25084. +Used internally by substitute-key-definition.Fsubstitute-key-definition
  25085. +Replace OLDDEF with NEWDEF for any keys in KEYMAP now defined as OLDDEF.
  25086. +In other words, OLDDEF is replaced with NEWDEF where ever it appears.
  25087. +If optional fourth argument OLDMAP is specified, we redefine
  25088. +in KEYMAP as NEWDEF those chars which are defined as OLDDEF in OLDMAP.Fdefine-key-after
  25089. +Add binding in KEYMAP for KEY => DEFINITION, right after AFTER's binding.
  25090. +This is like `define-key' except that the binding for KEY is placed
  25091. +just after the binding for the event AFTER, instead of at the beginning
  25092. +of the map.
  25093. +The order matters when the keymap is used as a menu.
  25094. +KEY must contain just one event type--that is to say, it must be
  25095. +a string or vector of length 1.Fkeyboard-translate
  25096. +Translate character FROM to TO at a low level.
  25097. +This function creates a `keyboard-translate-table' if necessary
  25098. +and then modifies one entry in it.Vglobal-map
  25099. +Default global keymap mapping Emacs keyboard input into commands.
  25100. +The value is a keymap which is usually (but not necessarily) Emacs's
  25101. +global map.Vesc-map
  25102. +Default keymap for ESC (meta) commands.
  25103. +The normal global definition of the character ESC indirects to this keymap.Vctl-x-map
  25104. +Default keymap for C-x commands.
  25105. +The normal global definition of the character C-x indirects to this keymap.Vctl-x-4-map
  25106. +Keymap for subcommands of C-x 4Vctl-x-5-map
  25107. +Keymap for frame commands.Flistify-key-sequence
  25108. +Convert a key sequence to a list of events.Feventp
  25109. +True if the argument is an event object.Fevent-modifiers
  25110. +Returns a list of symbols representing the modifier keys in event EVENT.
  25111. +The elements of the list may include `meta', `control',
  25112. +`shift', `hyper', `super', `alt', `click', `double', `triple', `drag',
  25113. +and `down'.Fevent-basic-type
  25114. +Returns the basic type of the given event (all modifiers removed).
  25115. +The value is an ASCII printing character (not upper case) or a symbol.Fmouse-movement-p
  25116. +Return non-nil if OBJECT is a mouse movement event.Fevent-start
  25117. +Return the starting position of EVENT.
  25118. +If EVENT is a mouse press or a mouse click, this returns the location
  25119. +of the event.
  25120. +If EVENT is a drag, this returns the drag's starting position.
  25121. +The return value is of the form
  25122. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  25123. +The `posn-' functions access elements of such lists.Fevent-end
  25124. +Return the ending location of EVENT.  EVENT should be a click or drag event.
  25125. +If EVENT is a click event, this function is the same as `event-start'.
  25126. +The return value is of the form
  25127. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  25128. +The `posn-' functions access elements of such lists.Fevent-click-count
  25129. +Return the multi-click count of EVENT, a click or drag event.
  25130. +The return value is a positive integer.Fposn-window
  25131. +Return the window in POSITION.
  25132. +POSITION should be a list of the form
  25133. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  25134. +as returned by the `event-start' and `event-end' functions.Fposn-point
  25135. +Return the buffer location in POSITION.
  25136. +POSITION should be a list of the form
  25137. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  25138. +as returned by the `event-start' and `event-end' functions.Fposn-x-y
  25139. +Return the x and y coordinates in POSITION.
  25140. +POSITION should be a list of the form
  25141. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  25142. +as returned by the `event-start' and `event-end' functions.Fposn-col-row
  25143. +Return the column and row in POSITION, measured in characters.
  25144. +POSITION should be a list of the form
  25145. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  25146. +as returned by the `event-start' and `event-end' functions.
  25147. +For a scroll-bar event, the result column is 0, and the row
  25148. +corresponds to the vertical position of the click in the scroll bar.Fposn-timestamp
  25149. +Return the timestamp of POSITION.
  25150. +POSITION should be a list of the form
  25151. +   (WINDOW BUFFER-POSITION (X . Y) TIMESTAMP)
  25152. +as returned by the `event-start' and `event-end' functions.Fbaud-rate
  25153. +Obsolete function returning the value of the `baud-rate' variable.
  25154. +Please convert your programs to use the variable `baud-rate' directly.Frun-hooks
  25155. +Takes hook names and runs each one in turn.  Major mode functions use this.
  25156. +Each argument should be a symbol, a hook variable.
  25157. +These symbols are processed in the order specified.
  25158. +If a hook symbol has a non-nil value, that value may be a function
  25159. +or a list of functions to be called to run the hook.
  25160. +If the value is a function, it is called with no arguments.
  25161. +If it is a list, the elements are called, in order, with no arguments.Frun-hook-with-args
  25162. +Run HOOK with the specified arguments ARGS.
  25163. +HOOK should be a symbol, a hook variable.  If HOOK has a non-nil
  25164. +value, that value may be a function or a list of functions to be
  25165. +called to run the hook.  If the value is a function, it is called with
  25166. +the given arguments and its return value is returned.  If it is a list
  25167. +of functions, those functions are called, in order,
  25168. +with the given arguments ARGS.
  25169. +It is best not to depend on the value return by `run-hook-with-args',
  25170. +as that may change.Vrun-hooks
  25171. +Variable by which C primitives find the function `run-hooks'.
  25172. +Don't change it.Fadd-hook
  25173. +Add to the value of HOOK the function FUNCTION.
  25174. +FUNCTION is not added if already present.
  25175. +FUNCTION is added (if necessary) at the beginning of the hook list
  25176. +unless the optional argument APPEND is non-nil, in which case
  25177. +FUNCTION is added at the end.
  25178. +
  25179. +HOOK should be a symbol, and FUNCTION may be any valid function.  If
  25180. +HOOK is void, it is first set to nil.  If HOOK's value is a single
  25181. +function, it is changed to a list of functions.Fremove-hook
  25182. +Remove from the value of HOOK the function FUNCTION.
  25183. +HOOK should be a symbol, and FUNCTION may be any valid function.  If
  25184. +FUNCTION isn't the value of HOOK, or, if FUNCTION doesn't appear in the
  25185. +list of hooks to run in HOOK, then nothing is done.  See `add-hook'.Feval-after-load
  25186. +Arrange that, if FILE is ever loaded, FORM will be run at that time.
  25187. +This makes or adds to an entry on `after-load-alist'.
  25188. +It does nothing if FORM is already on the list for FILE.
  25189. +FILE should be the name of a library, with no directory name.Feval-next-after-load
  25190. +Read the following input sexp, and run it whenever FILE is loaded.
  25191. +This makes or adds to an entry on `after-load-alist'.
  25192. +FILE should be the name of a library, with no directory name.Fread-quoted-char
  25193. +Like `read-char', except that if the first character read is an octal
  25194. +digit, we read up to two more octal digits and return the character
  25195. +represented by the octal number consisting of those digits.
  25196. +Optional argument PROMPT specifies a string to use to prompt the user.Fforce-mode-line-update
  25197. +Force the mode-line of the current buffer to be redisplayed.
  25198. +With optional non-nil ALL, force redisplay of all mode-lines.Fmomentary-string-display
  25199. +Momentarily display STRING in the buffer at POS.
  25200. +Display remains until next character is typed.
  25201. +If the char is EXIT-CHAR (optional third arg, default is SPC) it is swallowed;
  25202. +otherwise it is then available as input (as a command if nothing else).
  25203. +Display MESSAGE (optional fourth arg) in the echo area.
  25204. +If MESSAGE is nil, instructions to type EXIT-CHAR are displayed there.Fignore
  25205. +Do nothing and return nil.
  25206. +This function accepts any number of arguments, but ignores them.Ferror
  25207. +Signal an error, making error message by passing all args to `format'.Fstart-process-shell-command
  25208. +Start a program in a subprocess.  Return the process object for it.
  25209. +Args are NAME BUFFER COMMAND &rest COMMAND-ARGS.
  25210. +NAME is name for process.  It is modified if necessary to make it unique.
  25211. +BUFFER is the buffer or (buffer-name) to associate with the process.
  25212. + Process output goes at end of that buffer, unless you specify
  25213. + an output stream or filter function to handle the output.
  25214. + BUFFER may be also nil, meaning that this process is not associated
  25215. + with any buffer
  25216. +Third arg is command name, the name of a shell command.
  25217. +Remaining arguments are the arguments for the command.
  25218. +Wildcards and redirection are handled as usual in the shell.Fsave-match-data
  25219. +Execute the BODY forms, restoring the global value of the match data.Fshell-quote-argument
  25220. +Quote an argument for passing as argument to an inferior shell.Fmake-syntax-table
  25221. +Return a new syntax table.
  25222. +It inherits all letters and control characters from the standard
  25223. +syntax table; other characters are copied from the standard syntax table.Vtext-mode-syntax-table
  25224. +Syntax table used while in text mode.Vtext-mode-abbrev-table
  25225. +Abbrev table used while in text mode.Vtext-mode-map
  25226. +Keymap for Text mode.
  25227. +Many other modes, such as Mail mode, Outline mode and Indented Text mode,
  25228. +inherit all the commands defined in this map.Ftext-mode
  25229. +Major mode for editing text intended for humans to read.
  25230. +Special commands:
  25231. +\{text-mode-map}
  25232. +Turning on Text mode calls the value of the variable `text-mode-hook',
  25233. +if that value is non-nil.Vindented-text-mode-map
  25234. +Keymap for Indented Text mode.
  25235. +All the commands defined in Text mode are inherited unless overridden.Findented-text-mode
  25236. +Major mode for editing text with indented paragraphs.
  25237. +In this mode, paragraphs are delimited only by blank lines.
  25238. +You can thus get the benefit of adaptive filling
  25239. + (see the variable `adaptive-fill-mode').
  25240. +\{indented-text-mode-map}
  25241. +Turning on `indented-text-mode' calls the value of the variable
  25242. +`text-mode-hook', if that value is non-nil.Fcenter-paragraph
  25243. +Center each nonblank line in the paragraph at or after point.
  25244. +See `center-line' for more info.Fcenter-region
  25245. +Center each nonblank line starting in the region.
  25246. +See `center-line' for more info.Fcenter-line
  25247. +Center the line point is on, within the width specified by `fill-column'.
  25248. +This means adjusting the indentation so that it equals
  25249. +the distance between the end of the text and `fill-column'.Vvc-master-templates
  25250. +*Where to look for version-control master files.
  25251. +The first pair corresponding to a given back end is used as a template
  25252. +when creating new masters.Vvc-make-backup-files
  25253. +*If non-nil, backups of registered files are made as with other files.
  25254. +If nil (the default), files covered by version control don't get backups.Vvc-rcs-status
  25255. +*If non-nil, revision and locks on RCS working file displayed in modeline.
  25256. +Otherwise, not displayed.Vvc-file-prop-obarray
  25257. +Obarray for per-file properties.Fvc-name
  25258. +Return the master name of a file, nil if it is not registered.Fvc-backend-deduce
  25259. +Return the version-control type of a file, nil if it is not registered.Fvc-toggle-read-only
  25260. +Change read-only status of current buffer, perhaps via version control.
  25261. +If the buffer is visiting a file registered with version control,
  25262. +then check the file in or out.  Otherwise, just change the read-only flag
  25263. +of the buffer.Fvc-mode-line
  25264. +Set `vc-mode' to display type of version control for FILE.
  25265. +The value is set in the current buffer, which should be the buffer
  25266. +visiting FILE.Fvc-file-not-found-hook
  25267. +When file is not found, try to check it out from RCS or SCCS.
  25268. +Returns t if checkout was successful, nil otherwise.Fcount-windows
  25269. +Returns the number of visible windows.
  25270. +Optional arg NO-MINI non-nil means don't count the minibuffer
  25271. +even if it is active.Fbalance-windows
  25272. +Makes all visible windows the same height (approximately).Vsplit-window-keep-point
  25273. +*If non-nil, split windows keeps the original point in both children.
  25274. +This is often more convenient for editing.
  25275. +If nil, adjust point in each of the two windows to minimize redisplay.
  25276. +This is convenient on slow terminals, but point can move strangely.Fsplit-window-vertically
  25277. +Split current window into two windows, one above the other.
  25278. +The uppermost window gets ARG lines and the other gets the rest.
  25279. +Negative arg means select the size of the lowermost window instead.
  25280. +With no argument, split equally or close to it.
  25281. +Both windows display the same buffer now current.
  25282. +
  25283. +If the variable split-window-keep-point is non-nil, both new windows
  25284. +will get the same value of point as the current window.  This is often
  25285. +more convenient for editing.
  25286. +
  25287. +Otherwise, we chose window starts so as to minimize the amount of
  25288. +redisplay; this is convenient on slow terminals.  The new selected
  25289. +window is the one that the current value of point appears in.  The
  25290. +value of point can change if the text around point is hidden by the
  25291. +new mode line.Fsplit-window-horizontally
  25292. +Split current window into two windows side by side.
  25293. +This window becomes the leftmost of the two, and gets ARG columns.
  25294. +Negative arg means select the size of the rightmost window instead.
  25295. +No arg means split equally.Fenlarge-window-horizontally
  25296. +Make current window ARG columns wider.Fshrink-window-horizontally
  25297. +Make current window ARG columns narrower.Fshrink-window-if-larger-than-buffer
  25298. +Shrink the WINDOW to be as small as possible to display its contents.
  25299. +Do not shrink to less than `window-min-height' lines.
  25300. +Do nothing if the buffer contains more lines than the present window height,
  25301. +or if some of the window's contents are scrolled out of view,
  25302. +or if the window is not the full width of the frame,
  25303. +or if the window is the only window of its frame.Vemacs-version
  25304. +Version numbers of this version of Emacs.Vemacs-build-time
  25305. +Time at which Emacs was dumped out.Femacs-version
  25306. +Return string describing the version of Emacs that is running.
  25307. +If optional argument HERE is non-nil, insert string at point.
  25308. +Don't use this function in programs to choose actions according
  25309. +to the system configuration; look at `system-configuration' instead.
  25310. \ No newline at end of file
  25311. Binary files baseline/fsf/emacs/etc/EMACS-DATA and amiga/fsf/emacs/etc/EMACS-DATA differ
  25312. diff -rup --new-file baseline/fsf/emacs/lib-src/SCOPTIONS amiga/fsf/emacs/lib-src/SCOPTIONS
  25313. --- baseline/fsf/emacs/lib-src/SCOPTIONS    Wed Dec 31 17:00:00 1969
  25314. +++ amiga/fsf/emacs/lib-src/SCOPTIONS    Sat Sep 28 00:00:00 1996
  25315. @@ -0,0 +1,23 @@
  25316. +MATH=68881
  25317. +CPU=68030
  25318. +ANSI
  25319. +STRINGMERGE
  25320. +UNSIGNEDCHARS
  25321. +NOMULTIPLEINCLUDES
  25322. +SMALLCODE
  25323. +SMALLDATA
  25324. +VERBOSE
  25325. +ADDSYMBOLS
  25326. +NOVERSION
  25327. +STRICT
  25328. +STACKEXTEND
  25329. +NOCONSTLIBBASE
  25330. +COVERAGE
  25331. +NOERRORHIGHLIGHT
  25332. +GENPROTOSTATICS
  25333. +NOGENPROTOTYPEDEFS
  25334. +NOGENPROTODATAITEMS
  25335. +LINKEROPTIONS="bufsize 4096"
  25336. +OPTIMIZERCOMPLEXITY=10
  25337. +OPTIMIZERDEPTH=6
  25338. +OPTIMIZERRECURDEPTH=6
  25339. diff -rup --new-file baseline/fsf/emacs/lib-src/env.c amiga/fsf/emacs/lib-src/env.c
  25340. --- baseline/fsf/emacs/lib-src/env.c    Wed Dec 31 17:00:00 1969
  25341. +++ amiga/fsf/emacs/lib-src/env.c    Sat Sep 28 00:00:00 1996
  25342. @@ -0,0 +1,338 @@
  25343. +/* env - manipulate environment and execute a program in that environment
  25344. +   Copyright (C) 1986 Free Software Foundation, Inc.
  25345. +
  25346. +   This program is free software; you can redistribute it and/or modify
  25347. +   it under the terms of the GNU General Public License as published by
  25348. +   the Free Software Foundation; either version 2, or (at your option)
  25349. +   any later version.
  25350. +
  25351. +   This program is distributed in the hope that it will be useful,
  25352. +   but WITHOUT ANY WARRANTY; without even the implied warranty of
  25353. +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  25354. +   GNU General Public License for more details.
  25355. +
  25356. +   You should have received a copy of the GNU General Public License
  25357. +   along with this program; if not, write to the Free Software
  25358. +   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  25359. +
  25360. +/* Mly 861126 */
  25361. +
  25362. +/* If first argument is "-", then a new environment is constructed
  25363. +   from scratch; otherwise the environment is inherited from the parent
  25364. +   process, except as modified by other options.
  25365. +
  25366. +   So, "env - foo" will invoke the "foo" program in a null environment,
  25367. +   whereas "env foo" would invoke "foo" in the same environment as that
  25368. +   passed to "env" itself.
  25369. +
  25370. +   Subsequent arguments are interpreted as follows:
  25371. +
  25372. +   * "variable=value" (i.e., an arg containing a "=" character)
  25373. +     means to set the specified environment variable to that value.
  25374. +     `value' may be of zero length ("variable=").  Note that setting
  25375. +     a variable to a zero-length value is different from unsetting it.
  25376. +
  25377. +   * "-u variable" or "-unset variable"
  25378. +     means to unset that variable.
  25379. +     If that variable isn't set, does nothing.
  25380. +
  25381. +   * "-s variable value" or "-set variable value"
  25382. +     same as "variable=value".
  25383. +
  25384. +   * "-" or "--"
  25385. +     are used to indicate that the following argument is the program
  25386. +     to invoke.  This is only necessary when the program's name
  25387. +     begins with "-" or contains a "=".
  25388. +
  25389. +   * anything else
  25390. +     The first remaining argument specifies a program to invoke
  25391. +     (it is searched for according to the specification of the PATH
  25392. +     environment variable) and any arguments following that are
  25393. +     passed as arguments to that program.
  25394. +
  25395. +     If no program-name is specified following the environment
  25396. +     specifications, the resulting environment is printed.
  25397. +     This is like specifying a program-name of "printenv".
  25398. +
  25399. +   Examples:
  25400. +     If the environment passed to "env" is
  25401. +     { USER=rms EDITOR=emacs PATH=.:/gnubin:/hacks }
  25402. +
  25403. +     * "env DISPLAY=gnu:0 nemacs"
  25404. +        calls "nemacs" in the environment
  25405. +    { USER=rms EDITOR=emacs PATH=.:/gnubin:/hacks DISPLAY=gnu:0 }
  25406. +
  25407. +     * "env - USER=foo /hacks/hack bar baz"
  25408. +       calls the "hack" program on arguments "bar" and "baz"
  25409. +       in an environment in which the only variable is "USER".
  25410. +       Note that the "-" option clears out the PATH variable,
  25411. +       so one should be careful to specify in which directory
  25412. +       to find the program to call.
  25413. +
  25414. +     * "env -u EDITOR USER=foo PATH=/energy -- e=mc2 bar baz"
  25415. +       The program "/energy/e=mc2" is called with environment
  25416. +       { USER=foo PATH=/energy }
  25417. +*/
  25418. +
  25419. +#ifdef EMACS
  25420. +#define NO_SHORTNAMES
  25421. +#include "../src/config.h"
  25422. +#endif /* EMACS */
  25423. +
  25424. +#include <stdio.h>
  25425. +
  25426. +extern int execvp ();
  25427. +
  25428. +char *xmalloc (), *xrealloc ();
  25429. +char *concat ();
  25430. +
  25431. +extern char **environ;
  25432. +
  25433. +char **nenv;
  25434. +int nenv_size;
  25435. +
  25436. +char *progname;
  25437. +void setenv ();
  25438. +void fatal ();
  25439. +char *myindex ();
  25440. +
  25441. +main (argc, argv, envp)
  25442. +     register int argc;
  25443. +     register char **argv;
  25444. +     char **envp;
  25445. +{
  25446. +  register char *tem;
  25447. +
  25448. +  progname = argv[0];
  25449. +  argc--;
  25450. +  argv++;
  25451. +
  25452. +  nenv_size = 100;
  25453. +  nenv = (char **) xmalloc (nenv_size * sizeof (char *));
  25454. +  *nenv = (char *) 0;
  25455. +
  25456. +  /* "-" flag means to not inherit parent's environment */
  25457. +  if (argc && !strcmp (*argv, "-"))
  25458. +    {
  25459. +      argc--;
  25460. +      argv++;
  25461. +    }
  25462. +  else
  25463. +    /* Else pass on existing env vars. */
  25464. +    for (; *envp; envp++)
  25465. +      {
  25466. +    tem = myindex (*envp, '=');
  25467. +    if (tem)
  25468. +      {
  25469. +        *tem = '\000';
  25470. +        setenv (*envp, tem + 1);
  25471. +      }
  25472. +      }
  25473. +
  25474. +  while (argc > 0)
  25475. +    {
  25476. +      tem = myindex (*argv, '=');
  25477. +      if (tem)
  25478. +    /* If arg contains a "=" it specifies to set a variable */
  25479. +    {
  25480. +      *tem = '\000';
  25481. +      setenv (*argv, tem + 1);
  25482. +      argc--;
  25483. +      argv++;
  25484. +      continue;
  25485. +    }
  25486. +
  25487. +      if (**argv != '-')
  25488. +    /* Remaining args are program name and args to pass it */
  25489. +    break;
  25490. +
  25491. +      if (argc < 2)
  25492. +    fatal ("no argument for `%s' option", *argv);
  25493. +      if (!strcmp (*argv, "-u")
  25494. +      || !strcmp (*argv, "-unset"))
  25495. +    /* Unset a variable */
  25496. +    {
  25497. +      argc--;
  25498. +      argv++;
  25499. +      setenv (*argv, (char *) 0);
  25500. +      argc--;
  25501. +      argv++;
  25502. +    }
  25503. +      else if (!strcmp (*argv, "-s") ||
  25504. +           !strcmp (*argv, "-set"))
  25505. +    /* Set a variable */
  25506. +    {
  25507. +      argc--;
  25508. +      argv++;
  25509. +      tem = *argv;
  25510. +      if (argc < 2)
  25511. +        fatal ("no value specified for variable \"%s\"", tem);
  25512. +      argc--;
  25513. +      argv++;
  25514. +      setenv (tem, *argv);
  25515. +      argc--;
  25516. +      argv++;
  25517. +    }
  25518. +      else if (!strcmp (*argv, "-") || !strcmp (*argv, "--"))
  25519. +    {
  25520. +      argc--;
  25521. +      argv++;
  25522. +      break;
  25523. +    }
  25524. +      else
  25525. +    {
  25526. +      fatal ("unrecognized option `%s'", *argv);
  25527. +    }
  25528. +    }
  25529. +
  25530. +  /* If no program specified print the environment and exit */
  25531. +  if (argc <= 0)
  25532. +    {
  25533. +      while (*nenv)
  25534. +    printf ("%s\n", *nenv++);
  25535. +      exit (0);
  25536. +    }
  25537. +  else
  25538. +    {
  25539. +      extern int errno, sys_nerr;
  25540. +      extern char *sys_errlist[];
  25541. +
  25542. +      environ = nenv;
  25543. +      (void) execvp (*argv, argv);
  25544. +
  25545. +      fprintf (stderr, "%s: cannot execute `%s'", progname, *argv);
  25546. +      if (errno < sys_nerr)
  25547. +    fprintf (stderr, ": %s\n", sys_errlist[errno]);
  25548. +      else
  25549. +    putc ('\n', stderr);
  25550. +      exit (errno != 0 ? errno : 1);
  25551. +    }
  25552. +}
  25553. +
  25554. +void
  25555. +setenv (var, val)
  25556. +     register char *var, *val;
  25557. +{
  25558. +  register char **e;
  25559. +  int len = strlen (var);
  25560. +
  25561. +  {
  25562. +    register char *tem = myindex (var, '=');
  25563. +    if (tem)
  25564. +      fatal ("environment variable names can not contain `=': %s", var);
  25565. +    else if (*var == '\000')
  25566. +      fatal ("zero-length environment variable name specified");
  25567. +  }
  25568. +
  25569. +  for (e = nenv; *e; e++)
  25570. +    if (!strncmp (var, *e, len) && (*e)[len] == '=')
  25571. +      {
  25572. +    if (val)
  25573. +      goto set;
  25574. +    else
  25575. +      do
  25576. +        {
  25577. +          *e = *(e + 1);
  25578. +      } while (*e++);
  25579. +    return;
  25580. +      }
  25581. +
  25582. +  if (!val)
  25583. +    return;            /* Nothing to unset */
  25584. +
  25585. +  len = e - nenv;
  25586. +  if (len + 1 >= nenv_size)
  25587. +    {
  25588. +      nenv_size += 100;
  25589. +      nenv = (char **) xrealloc (nenv, nenv_size * sizeof (char *));
  25590. +      e = nenv + len;
  25591. +    }
  25592. +
  25593. +set:
  25594. +  val = concat (var, "=", val);
  25595. +  if (*e)
  25596. +    free (*e);
  25597. +  else
  25598. +    *(e + 1) = (char *) 0;
  25599. +  *e = val;
  25600. +  return;
  25601. +}
  25602. +
  25603. +void
  25604. +fatal (msg, arg1, arg2)
  25605. +     char *msg, *arg1, *arg2;
  25606. +{
  25607. +  fprintf (stderr, "%s: ", progname);
  25608. +  fprintf (stderr, msg, arg1, arg2);
  25609. +  putc ('\n', stderr);
  25610. +  exit (1);
  25611. +}
  25612. +
  25613. +
  25614. +extern char *malloc (), *realloc ();
  25615. +
  25616. +void
  25617. +memory_fatal ()
  25618. +{
  25619. +  fatal ("virtual memory exhausted");
  25620. +}
  25621. +
  25622. +char *
  25623. +xmalloc (size)
  25624. +     int size;
  25625. +{
  25626. +  register char *value;
  25627. +  value = (char *) malloc (size);
  25628. +  if (!value)
  25629. +    memory_fatal ();
  25630. +  return (value);
  25631. +}
  25632. +
  25633. +char *
  25634. +xrealloc (ptr, size)
  25635. +     char *ptr;
  25636. +     int size;
  25637. +{
  25638. +  register char *value;
  25639. +  value = (char *) realloc (ptr, size);
  25640. +  if (!value)
  25641. +    memory_fatal ();
  25642. +  return (value);
  25643. +}
  25644. +
  25645. +/* Return a newly-allocated string whose contents concatenate
  25646. +   those of S1, S2, S3.  */
  25647. +
  25648. +char *
  25649. +concat (s1, s2, s3)
  25650. +     char *s1, *s2, *s3;
  25651. +{
  25652. +  int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3);
  25653. +  char *result = (char *) xmalloc (len1 + len2 + len3 + 1);
  25654. +
  25655. +  strcpy (result, s1);
  25656. +  strcpy (result + len1, s2);
  25657. +  strcpy (result + len1 + len2, s3);
  25658. +  result[len1 + len2 + len3] = 0;
  25659. +
  25660. +  return result;
  25661. +}
  25662. +
  25663. +/* Return a pointer to the first occurrence in STR of C,
  25664. +   or 0 if C does not occur.  */
  25665. +
  25666. +char *
  25667. +myindex (str, c)
  25668. +     char *str;
  25669. +     char c;
  25670. +{
  25671. +  char *s = str;
  25672. +
  25673. +  while (*s)
  25674. +    {
  25675. +      if (*s == c)
  25676. +    return s;
  25677. +      s++;
  25678. +    }
  25679. +  return 0;
  25680. +}
  25681. diff -rup --new-file baseline/fsf/emacs/lib-src/make-docfile.lnk amiga/fsf/emacs/lib-src/make-docfile.lnk
  25682. --- baseline/fsf/emacs/lib-src/make-docfile.lnk    Wed Dec 31 17:00:00 1969
  25683. +++ amiga/fsf/emacs/lib-src/make-docfile.lnk    Sat Sep 28 00:00:00 1996
  25684. @@ -0,0 +1,8 @@
  25685. +FROM LIB:c.o "/lib-src/make-docfile.o"
  25686. +TO "/lib-src/make-docfile"
  25687. +LIB LIB:scm881.lib
  25688. +    LIB:sc.lib LIB:amiga.lib
  25689. +ADDSYM
  25690. +QUIET
  25691. +NOICONS
  25692. +
  25693. diff -rup --new-file baseline/fsf/emacs/lib-src/sh.c amiga/fsf/emacs/lib-src/sh.c
  25694. --- baseline/fsf/emacs/lib-src/sh.c    Wed Dec 31 17:00:00 1969
  25695. +++ amiga/fsf/emacs/lib-src/sh.c    Sat Sep 28 00:00:00 1996
  25696. @@ -0,0 +1,146 @@
  25697. +;/*
  25698. +SC LINK NOSTKCHK DEF SASC=1 sh.c
  25699. +QUIT
  25700. +*/
  25701. +/*
  25702. + * original version: David Gay
  25703. + *
  25704. + * 05/18/93 ch added SAS support, external verbose flag and primitive_parse
  25705. + */
  25706. +#include <exec/types.h>
  25707. +#include <dos/dostags.h>
  25708. +#include <stdio.h>
  25709. +
  25710. +#ifdef SASC
  25711. +#include <string.h>
  25712. +#include <stdlib.h>
  25713. +#endif
  25714. +
  25715. +#include <proto/dos.h>
  25716. +
  25717. +/*
  25718. +  translates:
  25719. +  echo "string1;string2" ; cd xx:c ; copy xx yy
  25720. +      into
  25721. +  echo "string1;string2" \n cd xx:c \n copy xx yy
  25722. +
  25723. +  note:
  25724. +    this is a really primitive function ;-) , it may be 
  25725. +    changed if necessary
  25726. +
  25727. +*/
  25728. +
  25729. +#define QUOTE    '"'
  25730. +
  25731. +void primitive_parse(char *s)
  25732. +{
  25733. +    int c;
  25734. +
  25735. +    while(c = *s++)
  25736. +    {
  25737. +    if(c == QUOTE)
  25738. +    {
  25739. +        while((c = *s++) && (c != QUOTE))
  25740. +        ;
  25741. +        if(!c)
  25742. +        break;
  25743. +    }
  25744. +    else if(c == ';')
  25745. +        *(s-1) = '\n';
  25746. +    }
  25747. +}
  25748. +
  25749. +int execute(char *cmd, int debug)
  25750. +{
  25751. +    long rc;
  25752. +    char *s;
  25753. +
  25754. +    while (*cmd == ' ') cmd++;
  25755. +    if (strncmp(cmd, "exec", 4) == 0 && (cmd[4] == ' ' || cmd[4] == '\t')) 
  25756. +    cmd += 4;
  25757. +    
  25758. +    s = cmd;
  25759. +    primitive_parse(s);
  25760. +
  25761. +    if(debug)
  25762. +    fprintf(stderr,"/etc/sh: preparsed line:\n%s\n", cmd);
  25763. +
  25764. +    if ((rc = SystemTags(cmd, SYS_UserShell, TRUE, TAG_END)) == -1)
  25765. +    {
  25766. +    fprintf(stderr, "Failed to execute command %s\n", cmd);
  25767. +    return 1;
  25768. +    }
  25769. +    else
  25770. +    return rc ? 1 : 0;
  25771. +}
  25772. +
  25773. +void main(int argc, char **argv)
  25774. +{
  25775. +  int command;
  25776. +  char *command_string;
  25777. +  char *program_name = argv[0];
  25778. +  struct RDArgs *args;
  25779. +  long opts[1];
  25780. +  static char options[] = "";
  25781. +  long debug = 0;
  25782. +  char *shenv;
  25783. +
  25784. +  /* Throw out AmigaOS args so that Input() is clean */
  25785. +  if (args = ReadArgs(options, opts, NULL)) FreeArgs(args);
  25786. +
  25787. +  shenv = getenv("EMACS_SH_DEBUG");
  25788. +
  25789. +  if(shenv)
  25790. +      if(strstr(shenv, "-v")) /* external verbose flag */
  25791. +      debug = 1;
  25792. +  
  25793. +  command = 0;
  25794. +  /* Simplistic argument parsing */
  25795. +  argv++;
  25796. +  argc--;
  25797. +  while (argc > 0 && argv[0][0] == '-')
  25798. +    {
  25799. +      switch (argv[0][1])
  25800. +    {
  25801. +    case 'c':
  25802. +      if (argc == 1) goto usage;
  25803. +      command = 1;
  25804. +      command_string = argv[1];
  25805. +      argv++;
  25806. +      argc--;
  25807. +      break;
  25808. +    case 'v':
  25809. +      debug = 1;
  25810. +      break;
  25811. +    case 'i':
  25812. +      /* ignored for now */
  25813. +      break;
  25814. +    default: goto usage;
  25815. +    }
  25816. +      argc--;
  25817. +      argv++;
  25818. +    }
  25819. +  if (argc != 0) goto usage;
  25820. +
  25821. +  if (command) 
  25822. +  {
  25823. +      if(debug)
  25824. +      fprintf(stderr,"%s: command_string = %s\n", argv[0], command_string);
  25825. +      exit(execute(command_string, debug));
  25826. +  }
  25827. +  else exit(Execute("", Input(), NULL) ? 0 : 1);
  25828. +
  25829. + usage:
  25830. +  fprintf(stderr, "%s [-i] [-v] [-c command]\n", program_name);
  25831. +  exit(1);
  25832. +}
  25833. +
  25834. +
  25835. +/*
  25836. + * Local variables:
  25837. + * compile-command: "sc link nostkchk def SASC=1 DEBUG=FULL sh.c"
  25838. + * end:
  25839. + */
  25840. diff -rup --new-file baseline/fsf/emacs/lisp/amiga-init.el amiga/fsf/emacs/lisp/amiga-init.el
  25841. --- baseline/fsf/emacs/lisp/amiga-init.el    Wed Dec 31 17:00:00 1969
  25842. +++ amiga/fsf/emacs/lisp/amiga-init.el    Sat Sep 28 00:00:00 1996
  25843. @@ -0,0 +1,302 @@
  25844. +(global-set-key "\C-z" 'amiga-iconify)
  25845. +(setq amiga-map (make-keymap))
  25846. +(global-set-key "\C-x\C-^" amiga-map)
  25847. +
  25848. +(load "amiga-mouse")
  25849. +;; (load "amiga-menu")
  25850. +
  25851. +; these are directly mapped now
  25852. +;(define-key amiga-map "A" [up])
  25853. +;(define-key amiga-map "B" [down])
  25854. +;(define-key amiga-map "D" [left])
  25855. +;(define-key amiga-map "C" [right])
  25856. +;(define-key amiga-map "0~" [f1])
  25857. +;(define-key amiga-map "1~" [f2])
  25858. +;(define-key amiga-map "2~" [f3])
  25859. +;(define-key amiga-map "3~" [f4])
  25860. +;(define-key amiga-map "4~" [f5])
  25861. +;(define-key amiga-map "5~" [f6])
  25862. +;(define-key amiga-map "6~" [f7])
  25863. +;(define-key amiga-map "7~" [f8])
  25864. +;(define-key amiga-map "8~" [f9])
  25865. +;(define-key amiga-map "9~" [f10])
  25866. +;(define-key amiga-map "10~" [S-f1])
  25867. +;(define-key amiga-map "11~" [S-f2])
  25868. +;(define-key amiga-map "12~" [S-f3])
  25869. +;(define-key amiga-map "13~" [S-f4])
  25870. +;(define-key amiga-map "14~" [S-f5])
  25871. +;(define-key amiga-map "15~" [S-f6])
  25872. +;(define-key amiga-map "16~" [S-f7])
  25873. +;(define-key amiga-map "17~" [S-f8])
  25874. +;(define-key amiga-map "18~" [S-f9])
  25875. +;(define-key amiga-map "19~" [S-f10])
  25876. +
  25877. +(define-key global-map [help] 'info)
  25878. +
  25879. +(define-key global-map [S-left] [prior])
  25880. +(define-key global-map [S-right] [next])
  25881. +(define-key global-map [S-down] 'scroll-up)
  25882. +(define-key global-map [S-up] 'scroll-down)
  25883. +(define-key global-map [C-left] 'forward-sexp)
  25884. +(define-key global-map [C-right] 'backward-sexp)
  25885. +(define-key global-map [C-down] 'scroll-down-1)
  25886. +(define-key global-map [C-up] 'scroll-up-1)
  25887. +
  25888. +; CHFIXME: use default emacs binding? 
  25889. +(define-key global-map [M-up] [begin])
  25890. +(define-key global-map [M-down] [end])
  25891. +(define-key global-map [M-left] 'beginning-of-line)
  25892. +(define-key global-map [M-right] 'end-of-line)
  25893. +
  25894. +; Keypad sequences
  25895. +(setq amiga-keypad-map (make-sparse-keymap))
  25896. +(define-key amiga-map "K" amiga-keypad-map)
  25897. +(define-key amiga-keypad-map "[" "[")
  25898. +(define-key amiga-keypad-map "]" "]")
  25899. +(define-key amiga-keypad-map "{" "{")
  25900. +(define-key amiga-keypad-map "}" "}")
  25901. +(define-key amiga-keypad-map "/" [kp-divide])
  25902. +(define-key amiga-keypad-map "*" [kp-multiply])
  25903. +(define-key amiga-keypad-map "-" [kp-subtract])
  25904. +(define-key amiga-keypad-map "+" [kp-add])
  25905. +(define-key amiga-keypad-map "." [kp-decimal])
  25906. +(define-key amiga-keypad-map [RET] [kp-enter])
  25907. +(define-key amiga-keypad-map [0] [kp-0])
  25908. +(define-key amiga-keypad-map [1] [kp-1])
  25909. +(define-key amiga-keypad-map [2] [kp-2])
  25910. +(define-key amiga-keypad-map [3] [kp-3])
  25911. +(define-key amiga-keypad-map [4] [kp-4])
  25912. +(define-key amiga-keypad-map [5] [kp-5])
  25913. +(define-key amiga-keypad-map [6] [kp-6])
  25914. +(define-key amiga-keypad-map [7] [kp-7])
  25915. +(define-key amiga-keypad-map [8] [kp-8])
  25916. +(define-key amiga-keypad-map [9] [kp-9])
  25917. +
  25918. +(defun scroll-down-1 ()
  25919. +  "Move up one line on screen."
  25920. +  (interactive)
  25921. +  (scroll-down 1))
  25922. +
  25923. +(defun scroll-up-1 ()
  25924. +  "Move down one line on screen."
  25925. +  (interactive)
  25926. +  (scroll-up 1))
  25927. +
  25928. +(defun unfocus-frame ()
  25929. +  "A dummy, used by general mouse.el."
  25930. +  (interactive))
  25931. +
  25932. +
  25933. +(defun window-frame (w)
  25934. +  "Return the frame object that window WINDOW is on."
  25935. +  (interactive)
  25936. +  (selected-frame))
  25937. +
  25938. +;; ARexx stuff
  25939. +
  25940. +;;; This function needs to be re-written to handle rexx returned results.
  25941. +;;;
  25942. +(setq amiga-arexx-processing nil)
  25943. +(setq amiga-arexx-errors nil)
  25944. +
  25945. +(defvar amiga-arexx-failat 5
  25946. +  "Return level from which arexx commands returns cause errors")
  25947. +
  25948. +;;
  25949. +;; process incoming rexx messages
  25950. +;;
  25951. +(defun amiga-arexx-process ()
  25952. +  (interactive)
  25953. +  (if (not amiga-arexx-processing)
  25954. +      (progn
  25955. +    (setq amiga-arexx-processing t)
  25956. +    (condition-case nil ; Avoid blocking of processing in case of bugs
  25957. +        (let (arexxcmd)
  25958. +          (while (setq arexxcmd (amiga-arexx-get-next-msg))
  25959. +        (let ((rc 0) result)
  25960. +          (condition-case err ; detect errors in arexx command
  25961. +              (let ((expr (car (read-from-string arexxcmd))))
  25962. +            (setq result (prin1-to-string (eval expr))))
  25963. +            (error (progn
  25964. +                 (setq rc 20)
  25965. +                 (setq result (prin1-to-string err)))))
  25966. +          (amiga-arexx-reply rc result))))
  25967. +      (error nil))
  25968. +    (setq amiga-arexx-processing nil))))
  25969. +
  25970. +(defun amiga-arexx-wait-command (id)
  25971. +  "Waits for a pending ARexx commands (MSGID) to complete.
  25972. +Also processes any pending ARexx requests during this interval.
  25973. +returns the result list associated with this id, which takes the
  25974. +form: (msgid result-code error-or-string)
  25975. +``error-or-string'' depends on ``result-code''.
  25976. +if ``result-code'' is 0 the command finished successfully and
  25977. +``error-or-string'' will be a string or nil, otherwise the command
  25978. +returned with an error and ``error-or-string'' will be an interger
  25979. +that is the secondary error code of the arexx command."
  25980. +  (amiga-arexx-process)
  25981. +  (while (not (amiga-arexx-check-command id))
  25982. +    (amiga-arexx-wait)
  25983. +    (amiga-arexx-process))
  25984. +  (amiga-arexx-get-msg-results id))
  25985. +
  25986. +(defconst amiga-arexx-error-messages
  25987. +["No cause"
  25988. +"Program not found"
  25989. +"Execution halted"
  25990. +"Insufficient memory"
  25991. +"Invalid character"
  25992. +"Unmatched quote"
  25993. +"Unterminated comment"
  25994. +"Clause too long"
  25995. +"Invalid token"
  25996. +"Symbol or string too long"
  25997. +"Invalid message packet"
  25998. +"Command string error"
  25999. +"Error return from function"
  26000. +"Host environment not found"
  26001. +"Requested library not found"
  26002. +"Function not found"
  26003. +"Function did not return value"
  26004. +"Wrong number of arguments"
  26005. +"Invalid argument to function"
  26006. +"Invalid PROCEDURE"
  26007. +"Unexpected THEN or WHEN"
  26008. +"Unexpected ELSE or OTHERWISE"
  26009. +"Unexpected BREAK, LEAVE or ITERATE"
  26010. +"Invalid statement in SELECT"
  26011. +"Missing or multiple THEN"
  26012. +"Missing OTHERWISE"
  26013. +"Missing or unexpected END"
  26014. +"Symbol mismatch"
  26015. +"Invalid DO syntax"
  26016. +"Incomplete IF or SELECT"
  26017. +"Label not found"
  26018. +"Symbol expected"
  26019. +"Symbol or string expected"
  26020. +"Invalid keyword"
  26021. +"Required keyword missing"
  26022. +"Extraneous characters"
  26023. +"Keyword conflict"
  26024. +"Invalid template"
  26025. +"Invalid TRACE request"
  26026. +"Unitialized variable"
  26027. +"Invalid variable name"
  26028. +"Invalid expression"
  26029. +"Unbalanced parentheses"
  26030. +"Nesting limit exceeded"
  26031. +"Invalid expression result"
  26032. +"Expression required"
  26033. +"Boolean value not 0 or 1"
  26034. +"Arithmetic conversion error"
  26035. +"Invalid operand"
  26036. +]
  26037. +"The arexx error messages, sorted by number")
  26038. +
  26039. +(defun amiga-arexx-do-command (str as-file)
  26040. +  "Sends ARexx command STR (like amiga-arexx-send-command).
  26041. +If AS-FILE is true, STR is an arexx command, otherwise it is a file name.
  26042. +Waits for the command to return.  If the arexx command fails an error will
  26043. +be caused.
  26044. +
  26045. +If you would like to get result strings and errors (ie. not cause
  26046. +a lisp error) use: (amiga-arexx-do-command-with-results)"
  26047. +  (interactive "sARexx command:
  26048. +P")
  26049. +  (let ((id (amiga-arexx-send-command str as-file)))
  26050. +    (if (not id)
  26051. +    (error "Failed to send arexx command.")
  26052. +      (let ((reslist (amiga-arexx-wait-command id)))
  26053. +    (let ((rc (nth 1 reslist)) (second (nth 2 reslist)))
  26054. +      (if (> rc 0)
  26055. +          (progn            ; error
  26056. +        (let ((error-message
  26057. +               (if (< second (length amiga-arexx-error-messages))
  26058. +             (aref amiga-arexx-error-messages second)
  26059. +             (format nil "Unknown error %d" second))))
  26060. +          (error "Arexx command failed, level %d, cause %s" rc error-message))
  26061. +        reslist)
  26062. +      second))))))
  26063. +
  26064. +(defun amiga-arexx-do-command-with-results (str as-file)
  26065. +  "Sends ARexx command STR (like amiga-arexx-do-command).
  26066. +If AS-FILE is true, STR is an arexx command, otherwise it is a file name.
  26067. +Waits for the command to return.
  26068. +
  26069. +The return value is one of three things:
  26070. + - the command executed succesfully: nil or a result string.
  26071. + - the command failed: a list of the form (RC ERROR-CODE)
  26072. +   where RC is the severity and ERROR-CODE is the secondary error."
  26073. +  (interactive "sARexx command:
  26074. +P")
  26075. +  (let ((id (amiga-arexx-send-command str as-file)))
  26076. +    (if (not id)
  26077. +    (error "Failed to send arexx command.")
  26078. +      (let ((reslist (amiga-arexx-wait-command id)))
  26079. +    (let ((rc (nth 1 reslist)) (second (nth 2 reslist)))
  26080. +      (if (and rc (> rc 0))
  26081. +          (list rc second)
  26082. +        second))))))
  26083. +
  26084. +(define-key amiga-map "X" 'amiga-arexx-process)
  26085. +(setq amiga-arexx-initialized t) ;; ARexx commands can now be processed.
  26086. +
  26087. +(defun amiga-wb-process ()
  26088. +  "Process all pending workbench events, ie load all files requested"
  26089. +  (interactive)
  26090. +  (let (file)
  26091. +    (condition-case nil
  26092. +    (while (setq file (amiga-get-wb-event t))
  26093. +      (condition-case nil
  26094. +          (find-file file)
  26095. +        (error nil)))
  26096. +      (error nil))))
  26097. +
  26098. +(define-key amiga-map "W" 'amiga-wb-process)
  26099. +(setq amiga-wb-initialized t) ;; WB events can now be processed.
  26100. +
  26101. +(setq completion-ignore-case t)
  26102. +;; Default is no numbered versions on Amiga, because directory searches are too
  26103. +;; slow.
  26104. +(setq version-control 'never)
  26105. +
  26106. +(defun safe-amiga-paste ()
  26107. +  "Paste from the amiga clipboard, trapping any errors."
  26108. +  (if amiga-new-clip
  26109. +      nil)
  26110. +  (condition-case nil
  26111. +      (amiga-paste)
  26112. +    (error nil)))
  26113. +
  26114. +(defun check-clipboard ()
  26115. +  "If there is anything new in the clipboard, add it to the emacs kill ring.
  26116. +Returns t if there was something added, nil otherwise."
  26117. +  (let (added)
  26118. +    (if amiga-new-clip
  26119. +        (let ((str (safe-amiga-paste)))
  26120. +          (setq amiga-new-clip nil)
  26121. +          (if str
  26122. +              (progn
  26123. +                (kill-add str)
  26124. +                (setq added t)
  26125. +                (setq kill-ring-yank-pointer kill-ring)))))
  26126. +          added))
  26127. +
  26128. +(defun update-clipboard (str &optional dummy)
  26129. +  (amiga-cut str)
  26130. +  (setq amiga-new-clip nil))
  26131. +
  26132. +(setq interprogram-cut-function 'update-clipboard)
  26133. +(setq interprogram-paste-function 'safe-amiga-paste)
  26134. +
  26135. +;;; VM creates nasty names that we need to patch with this function.
  26136. +;;; dgilbert.
  26137. +
  26138. +(defun amiga-auto-save-check (file-name)
  26139. +  "Determines that an auto-save-file-name is valid on the Amiga"
  26140. +  (let ((max (length file-name)) (i 0))
  26141. +    (while (< i max)
  26142. +      (if (= (aref file-name i) ?:)
  26143. +          (aset file-name i ?-))
  26144. +      (setq i (1+ i)))
  26145. +  file-name))
  26146. Binary files baseline/fsf/emacs/lisp/amiga-init.elc and amiga/fsf/emacs/lisp/amiga-init.elc differ
  26147. diff -rup --new-file baseline/fsf/emacs/lisp/amiga-menu-bar.el amiga/fsf/emacs/lisp/amiga-menu-bar.el
  26148. --- baseline/fsf/emacs/lisp/amiga-menu-bar.el    Wed Dec 31 17:00:00 1969
  26149. +++ amiga/fsf/emacs/lisp/amiga-menu-bar.el    Sat Sep 28 00:00:00 1996
  26150. @@ -0,0 +1,435 @@
  26151. +;;; amiga-menu-bar.el --- define a default menu bar.
  26152. +;;; it's nearly menu-bar.el except multi-frame stuff (CHFIXME)
  26153. +
  26154. +(defun frame-list () "Dummy frame-list, returns list of selected- frame."
  26155. +  (list (selected-frame))) ; CHFIXME
  26156. +
  26157. +;;; menu-bar.el --- define a default menu bar.
  26158. +
  26159. +;; Author: RMS
  26160. +;; Keywords: internal
  26161. +
  26162. +;; Copyright (C) 1993, 1994 Free Software Foundation, Inc.
  26163. +
  26164. +;; This file is part of GNU Emacs.
  26165. +
  26166. +;; GNU Emacs is free software; you can redistribute it and/or modify
  26167. +;; it under the terms of the GNU General Public License as published by
  26168. +;; the Free Software Foundation; either version 2, or (at your option)
  26169. +;; any later version.
  26170. +
  26171. +;; GNU Emacs is distributed in the hope that it will be useful,
  26172. +;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  26173. +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  26174. +;; GNU General Public License for more details.
  26175. +
  26176. +;; You should have received a copy of the GNU General Public License
  26177. +;; along with GNU Emacs; see the file COPYING.  If not, write to
  26178. +;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  26179. +
  26180. +;;; Code:
  26181. +
  26182. +;; Don't clobber an existing menu-bar keymap, to preserve any menu-bar key
  26183. +;; definitions made in loaddefs.el.
  26184. +(or (lookup-key global-map [menu-bar])
  26185. +    (define-key global-map [menu-bar] (make-sparse-keymap "menu-bar")))
  26186. +(defvar menu-bar-help-menu (make-sparse-keymap "Help"))
  26187. +;; Put Help item last.
  26188. +(setq menu-bar-final-items '(help))
  26189. +(define-key global-map [menu-bar help] (cons "Help" menu-bar-help-menu))
  26190. +(defvar menu-bar-edit-menu (make-sparse-keymap "Edit"))
  26191. +(define-key global-map [menu-bar edit] (cons "Edit" menu-bar-edit-menu))
  26192. +(defvar menu-bar-file-menu (make-sparse-keymap "File"))
  26193. +(define-key global-map [menu-bar file] (cons "File" menu-bar-file-menu))
  26194. +
  26195. +(define-key menu-bar-file-menu [exit-emacs]
  26196. +  '("Exit Emacs" . save-buffers-kill-emacs))
  26197. +(define-key menu-bar-file-menu [kill-buffer]
  26198. +  '("Kill Buffer" . kill-this-buffer))
  26199. +;; (define-key menu-bar-file-menu [delete-frame] '("Delete Frame" . delete-frame)) 
  26200. +(define-key menu-bar-file-menu [epatch]
  26201. +  '("Apply Patch" . menu-bar-epatch-menu))
  26202. +(define-key menu-bar-file-menu [ediff]
  26203. +  '("Compare Files" . menu-bar-ediff-menu))
  26204. +(define-key menu-bar-file-menu [emerge] '("Emerge" . menu-bar-emerge-menu))
  26205. +(define-key menu-bar-file-menu [calendar] '("Calendar" . calendar))
  26206. +(define-key menu-bar-file-menu [rmail] '("Read Mail" . rmail))
  26207. +(define-key menu-bar-file-menu [gnus] '("Read Net News" . gnus))
  26208. +(define-key menu-bar-file-menu [bookmark]
  26209. +  '("Bookmarks" . menu-bar-bookmark-map))
  26210. +(define-key menu-bar-file-menu [print-buffer] '("Print Buffer" . print-buffer))
  26211. +(define-key menu-bar-file-menu [revert-buffer]
  26212. +  '("Revert Buffer" . revert-buffer))
  26213. +(define-key menu-bar-file-menu [write-file]
  26214. +  '("Save Buffer As..." . write-file))
  26215. +(define-key menu-bar-file-menu [save-buffer] '("Save Buffer" . save-buffer))
  26216. +(define-key menu-bar-file-menu [dired] '("Open Directory..." . dired))
  26217. +(define-key menu-bar-file-menu [open-file] '("Open File..." . find-file))
  26218. +;; (define-key menu-bar-file-menu [make-frame] '("Make New Frame" . make-frame))
  26219. +
  26220. +(define-key menu-bar-edit-menu [spell] '("Spell" . ispell-menu-map))
  26221. +(define-key menu-bar-edit-menu [fill] '("Fill" . fill-region))
  26222. +(define-key menu-bar-edit-menu [clear] '("Clear" . delete-region))
  26223. +(define-key menu-bar-edit-menu [query-replace]
  26224. +  '("Query Replace" . query-replace))
  26225. +(define-key menu-bar-edit-menu [re-search-back]
  26226. +  '("Regexp Search Backwards" . re-search-backward))
  26227. +(define-key menu-bar-edit-menu [search-back]
  26228. +  '("Search Backwards" . search-backward))
  26229. +(define-key menu-bar-edit-menu [re-search-fwd]
  26230. +  '("Regexp Search" . re-search-forward))
  26231. +(define-key menu-bar-edit-menu [search-fwd]
  26232. +  '("Search" . search-forward))
  26233. +(define-key menu-bar-edit-menu [choose-next-paste]
  26234. +  '("Choose Next Paste >" . mouse-menu-choose-yank))
  26235. +(define-key menu-bar-edit-menu [paste] '("Paste" . yank))
  26236. +(define-key menu-bar-edit-menu [copy] '("Copy" . kill-ring-save))
  26237. +(define-key menu-bar-edit-menu [cut] '("Cut" . kill-region))
  26238. +(define-key menu-bar-edit-menu [undo] '("Undo" . undo))
  26239. +
  26240. +(put 'fill-region 'menu-enable 'mark-active)
  26241. +(put 'kill-region 'menu-enable 'mark-active)
  26242. +(put 'kill-ring-save 'menu-enable 'mark-active)
  26243. +(put 'yank 'menu-enable '(x-selection-exists-p))
  26244. +(put 'delete-region 'menu-enable 'mark-active)
  26245. +(put 'undo 'menu-enable '(if (eq last-command 'undo)
  26246. +                 pending-undo-list
  26247. +               (consp buffer-undo-list)))
  26248. +(put 'query-replace 'menu-enable (not buffer-read-only))
  26249. +
  26250. +(autoload 'ispell-menu-map "ispell" nil t 'keymap)
  26251. +
  26252. +;; These are alternative definitions for the cut, paste and copy
  26253. +;; menu items.  Use them if your system expects these to use the clipboard
  26254. +
  26255. +(put 'clipboard-kill-region 'menu-enable 'mark-active)
  26256. +(put 'clipboard-kill-ring-save 'menu-enable 'mark-active)
  26257. +(put 'clipboard-yank 'menu-enable
  26258. +     '(or (x-selection-exists-p) (x-selection-exists-p 'CLIPBOARD)))
  26259. +
  26260. +(defun clipboard-yank ()
  26261. +  "Reinsert the last stretch of killed text, or the clipboard contents."
  26262. +  (interactive)
  26263. +  (let ((x-select-enable-clipboard t))
  26264. +    (yank)))
  26265. +
  26266. +(defun clipboard-kill-ring-save (beg end)
  26267. +  "Copy region to kill ring, and save in the X clipboard."
  26268. +  (interactive "r")
  26269. +  (let ((x-select-enable-clipboard t))
  26270. +    (kill-ring-save beg end)))
  26271. +
  26272. +(defun clipboard-kill-region (beg end)
  26273. +  "Kill the region, and save it in the X clipboard."
  26274. +  (interactive "r")
  26275. +  (let ((x-select-enable-clipboard t))
  26276. +    (kill-region beg end)))
  26277. +
  26278. +(defun menu-bar-enable-clipboard ()
  26279. +  "Make the menu bar CUT, PASTE and COPY items use the clipboard."
  26280. +  (interactive)
  26281. +  ;; We can't use constant list structure here because it becomes pure,
  26282. +  ;; and because it gets modified with cache data.
  26283. +  (define-key menu-bar-edit-menu [paste]
  26284. +    (cons "Paste" 'clipboard-yank))
  26285. +  (define-key menu-bar-edit-menu [copy]
  26286. +    (cons "Copy" 'clipboard-kill-ring-save))
  26287. +  (define-key menu-bar-edit-menu [cut]
  26288. +    (cons "Cut" 'clipboard-kill-region)))
  26289. +
  26290. +;; Sun expects these commands on these keys, so why not?
  26291. +(define-key global-map [f20] 'clipboard-kill-region)
  26292. +(define-key global-map [f16] 'clipboard-kill-ring-save)
  26293. +(define-key global-map [f18] 'clipboard-yank)
  26294. +
  26295. +(define-key menu-bar-help-menu [emacs-version]
  26296. +  '("Show Version" . emacs-version))
  26297. +(define-key menu-bar-help-menu [report-emacs-bug]
  26298. +  '("Send Bug Report" . report-emacs-bug))
  26299. +(define-key menu-bar-help-menu [emacs-tutorial]
  26300. +  '("Emacs Tutorial" . help-with-tutorial))
  26301. +(define-key menu-bar-help-menu [man] '("Man..." . manual-entry))
  26302. +(define-key menu-bar-help-menu [describe-variable]
  26303. +  '("Describe Variable..." . describe-variable))
  26304. +(define-key menu-bar-help-menu [describe-function]
  26305. +  '("Describe Function..." . describe-function))
  26306. +(define-key menu-bar-help-menu [describe-key]
  26307. +  '("Describe Key..." . describe-key))
  26308. +(define-key menu-bar-help-menu [list-keybindings]
  26309. +  '("List Keybindings" . describe-bindings))
  26310. +(define-key menu-bar-help-menu [command-apropos]
  26311. +  '("Command Apropos..." . command-apropos))
  26312. +(define-key menu-bar-help-menu [describe-mode]
  26313. +  '("Describe Mode" . describe-mode))
  26314. +(define-key menu-bar-help-menu [info] '("Info" . info))
  26315. +
  26316. +(define-key menu-bar-help-menu [emacs-news] '("Emacs News" . view-emacs-news))
  26317. +(defun kill-this-buffer ()    ; for the menubar
  26318. +  "Kills the current buffer."
  26319. +  (interactive)
  26320. +  (kill-buffer (current-buffer)))
  26321. +
  26322. +(defun kill-this-buffer-enabled-p ()
  26323. +  (let ((count 0)
  26324. +    (buffers (buffer-list)))
  26325. +    (while buffers
  26326. +      (or (string-match "^ " (buffer-name (car buffers)))
  26327. +      (setq count (1+ count)))
  26328. +      (setq buffers (cdr buffers)))
  26329. +    (> count 1)))
  26330. +
  26331. +(put 'save-buffer 'menu-enable '(buffer-modified-p))
  26332. +(put 'revert-buffer 'menu-enable
  26333. +     '(or revert-buffer-function revert-buffer-insert-file-contents-function
  26334. +      (and (buffer-file-name)
  26335. +           (or (buffer-modified-p)
  26336. +           (not (verify-visited-file-modtime (current-buffer)))))))
  26337. +;; Permit deleting frame if it would leave a visible or iconified frame.
  26338. +;(put 'delete-frame 'menu-enable
  26339. +;     '(let ((frames (frame-list))
  26340. +;        (count 0))
  26341. +;    (while frames
  26342. +;      (if (cdr (assq 'visibility (frame-parameters (car frames))))
  26343. +;          (setq count (1+ count)))
  26344. +;      (setq frames (cdr frames)))
  26345. +;    (> count 1)))
  26346. +(put 'kill-this-buffer 'menu-enable '(kill-this-buffer-enabled-p))
  26347. +
  26348. +(put 'advertised-undo 'menu-enable
  26349. +     '(and (not (eq t buffer-undo-list))
  26350. +       (if (eq last-command 'undo)
  26351. +           (and (boundp 'pending-undo-list)
  26352. +            pending-undo-list)
  26353. +         buffer-undo-list)))
  26354. +
  26355. +(defvar yank-menu-length 100
  26356. +  "*Maximum length of an item in the menu for \
  26357. +\\[mouse-menu-choose-yank].")
  26358. +
  26359. +(defun mouse-menu-choose-yank (event)
  26360. +  "Pop up a menu of the kill-ring for selection with the mouse.
  26361. +The kill-ring-yank-pointer is moved to the selected element.
  26362. +A subsequent \\[yank] yanks the choice just selected."
  26363. +  (interactive "e")
  26364. +  (let* ((count 0)
  26365. +     (menu (mapcar (lambda (string)
  26366. +             (if (> (length string) yank-menu-length)
  26367. +                 (setq string (substring string
  26368. +                             0 yank-menu-length)))
  26369. +             (prog1 (cons string count)
  26370. +               (setq count (1+ count))))
  26371. +               kill-ring))
  26372. +     (arg (x-popup-menu event 
  26373. +                (list "Yank Menu"
  26374. +                  (cons "Choose Next Yank" menu)))))
  26375. +    ;; A mouse click outside the menu returns nil.
  26376. +    ;; Avoid a confusing error from passing nil to rotate-yank-pointer.
  26377. +    ;; XXX should this perhaps do something other than simply return? -rm
  26378. +    (if arg
  26379. +    (progn
  26380. +      ;; We don't use `rotate-yank-pointer' because we want to move
  26381. +      ;; relative to the beginning of kill-ring, not the current
  26382. +      ;; position.  Also, that would ask for any new X selection and
  26383. +      ;; thus change the list of items the user just chose from, which
  26384. +      ;; would be highly confusing.
  26385. +      (setq kill-ring-yank-pointer (nthcdr arg kill-ring))
  26386. +      (if (interactive-p)
  26387. +          (message "The next yank will insert the selected text.")
  26388. +        (current-kill 0))))))
  26389. +(put 'mouse-menu-choose-yank 'menu-enable 'kill-ring)
  26390. +
  26391. +(define-key global-map [menu-bar buffer] '("Buffers" . menu-bar-buffers))
  26392. +
  26393. +(defalias 'menu-bar-buffers (make-sparse-keymap "Buffers"))
  26394. +
  26395. +(defvar complex-buffers-menu-p nil
  26396. +  "*Non-nil says, offer a choice of actions after you pick a buffer.
  26397. +This applies to the Buffers menu from the menu bar.")
  26398. +
  26399. +(defvar buffers-menu-max-size 10
  26400. +  "*Maximum number of entries which may appear on the Buffers menu.
  26401. +If this is 10, then only the ten most-recently-selected buffers are shown.
  26402. +If this is nil, then all buffers are shown.
  26403. +A large number or nil slows down menu responsiveness.")
  26404. +
  26405. +(defvar list-buffers-directory nil)
  26406. +
  26407. +(defun menu-bar-select-buffer ()
  26408. +  (interactive)
  26409. +  (switch-to-buffer last-command-event))
  26410. +
  26411. +;(defun menu-bar-select-frame ()
  26412. +;  (interactive)
  26413. +;  (make-frame-visible last-command-event)
  26414. +;  (raise-frame last-command-event)
  26415. +;  (select-frame last-command-event))
  26416. +
  26417. +(defvar menu-bar-update-buffers-last-buffers nil)
  26418. +(defvar menu-bar-update-buffers-last-frames nil)
  26419. +
  26420. +(defun menu-bar-update-buffers ()
  26421. +  (let ((buffers (buffer-list))
  26422. +    (frames (frame-list))
  26423. +    buffers-info
  26424. +    buffers-menu frames-menu)
  26425. +    (setq buffers-info
  26426. +      (mapcar (function (lambda (buffer)
  26427. +                  (list buffer (buffer-modified-p buffer)
  26428. +                    (save-excursion
  26429. +                      (set-buffer buffer)
  26430. +                      buffer-read-only))))
  26431. +          buffers))
  26432. +    (if (and (equal buffers-info menu-bar-update-buffers-last-buffers)
  26433. +         (equal frames menu-bar-update-buffers-last-frames))
  26434. +    nil
  26435. +      (setq menu-bar-update-buffers-last-buffers buffers-info)
  26436. +      (setq menu-bar-update-buffers-last-frames frames)
  26437. +      ;; If requested, list only the N most recently selected buffers.
  26438. +      (if (and (integerp buffers-menu-max-size)
  26439. +           (> buffers-menu-max-size 1))
  26440. +      (if (> (length buffers) buffers-menu-max-size)
  26441. +          (setcdr (nthcdr buffers-menu-max-size buffers) nil)))
  26442. +
  26443. +      ;; Make the menu of buffers proper.
  26444. +      (setq buffers-menu
  26445. +        (cons "Select Buffer"
  26446. +          (let ((tail buffers)
  26447. +            (maxbuf 0)
  26448. +            (maxlen 0)
  26449. +            alist
  26450. +            head)
  26451. +            (while tail
  26452. +              (or (eq ?\ (aref (buffer-name (car tail)) 0))
  26453. +              (setq maxbuf
  26454. +                (max maxbuf
  26455. +                     (length (buffer-name (car tail))))))
  26456. +              (setq tail (cdr tail)))
  26457. +            (setq tail buffers)
  26458. +            (while tail
  26459. +              (let ((elt (car tail)))
  26460. +            (or (eq ?\ (aref (buffer-name elt) 0))
  26461. +                (setq alist (cons
  26462. +                     (cons
  26463. +                      (format
  26464. +                       (format "%%%ds  %%s%%s  %%s"
  26465. +                           maxbuf)
  26466. +                       (buffer-name elt)
  26467. +                       (if (buffer-modified-p elt)
  26468. +                           "*" " ")
  26469. +                       (save-excursion
  26470. +                         (set-buffer elt)
  26471. +                         (if buffer-read-only "%" " "))
  26472. +                       (or (buffer-file-name elt)
  26473. +                           (save-excursion
  26474. +                         (set-buffer elt)
  26475. +                         list-buffers-directory)
  26476. +                           ""))
  26477. +                      elt)
  26478. +                     alist)))
  26479. +            (and alist (> (length (car (car alist))) maxlen)
  26480. +                 (setq maxlen (length (car (car alist))))))
  26481. +              (setq tail (cdr tail)))
  26482. +            (setq alist (nreverse alist))
  26483. +            (nconc (mapcar '(lambda (pair)
  26484. +                      ;; This is somewhat risque, to use
  26485. +                      ;; the buffer name itself as the event type
  26486. +                      ;; to define, but it works.
  26487. +                      ;; It would not work to use the buffer
  26488. +                      ;; since a buffer as an event has its
  26489. +                      ;; own meaning.
  26490. +                      (nconc (list (buffer-name (cdr pair))
  26491. +                           (car pair)
  26492. +                           (cons nil nil))
  26493. +                         'menu-bar-select-buffer))
  26494. +                   alist)
  26495. +               (list (cons 'list-buffers
  26496. +                       (cons
  26497. +                    (concat (make-string (max (- (/ maxlen
  26498. +                                    2)
  26499. +                                     8)
  26500. +                                  0) ?\ )
  26501. +                        "List All Buffers")
  26502. +                    'list-buffers)))))))
  26503. +
  26504. +
  26505. +      ;; Make a Frames menu if we have more than one frame.
  26506. +      (if (cdr frames)
  26507. +      (setq frames-menu
  26508. +        (cons "Select Frame"
  26509. +              (mapcar '(lambda (frame)
  26510. +                 (nconc (list frame
  26511. +                          (cdr (assq 'name
  26512. +                             (frame-parameters frame)))
  26513. +                          (cons nil nil))
  26514. +                    'menu-bar-select-frame))
  26515. +                  frames))))
  26516. +      (if buffers-menu
  26517. +      (setq buffers-menu (cons 'keymap buffers-menu)))
  26518. +      (if frames-menu
  26519. +      (setq frames-menu (cons 'keymap frames-menu)))
  26520. +      (define-key global-map [menu-bar buffer]
  26521. +    (cons "Buffers"
  26522. +          (if (and buffers-menu frames-menu)
  26523. +          (list 'keymap "Buffers and Frames"
  26524. +            (cons 'buffers (cons "Buffers" buffers-menu))
  26525. +            (cons 'frames (cons "Frames" frames-menu)))
  26526. +        (or buffers-menu frames-menu 'undefined)))))))
  26527. +
  26528. +(add-hook 'menu-bar-update-hook 'menu-bar-update-buffers)
  26529. +
  26530. +;; this version is too slow
  26531. +;;;(defun format-buffers-menu-line (buffer)
  26532. +;;;  "Returns a string to represent the given buffer in the Buffer menu.
  26533. +;;;nil means the buffer shouldn't be listed.  You can redefine this."
  26534. +;;;  (if (string-match "\\` " (buffer-name buffer))
  26535. +;;;      nil
  26536. +;;;    (save-excursion
  26537. +;;;     (set-buffer buffer)
  26538. +;;;     (let ((size (buffer-size)))
  26539. +;;;       (format "%s%s %-19s %6s %-15s %s"
  26540. +;;;           (if (buffer-modified-p) "*" " ")
  26541. +;;;           (if buffer-read-only "%" " ")
  26542. +;;;           (buffer-name)
  26543. +;;;           size
  26544. +;;;           mode-name
  26545. +;;;           (or (buffer-file-name) ""))))))
  26546. +
  26547. +(defun menu-bar-mode (flag)
  26548. +  "Toggle display of a menu bar on each frame.
  26549. +This command applies to all frames that exist and frames to be
  26550. +created in the future.
  26551. +With a numeric argument, if the argument is negative,
  26552. +turn off menu bars; otherwise, turn on menu bars."
  26553. + (interactive "P")
  26554. +
  26555. + ;; Obtain the current setting by looking at default-frame-alist.
  26556. + (let ((menu-bar-mode
  26557. +    (not (zerop (let ((assq (assq 'menu-bar-lines default-frame-alist)))
  26558. +              (if assq (cdr assq) 0))))))
  26559. +
  26560. +   ;; Tweedle it according to the argument.
  26561. +   (setq menu-bar-mode (if (null flag) (not menu-bar-mode)
  26562. +             (> (prefix-numeric-value flag) 0)))
  26563. +
  26564. +   ;; Apply it to default-frame-alist.
  26565. +   (let ((parameter (assq 'menu-bar-lines default-frame-alist)))
  26566. +     (if (consp parameter)
  26567. +     (setcdr parameter (if menu-bar-mode 1 0))
  26568. +       (setq default-frame-alist
  26569. +         (cons (cons 'menu-bar-lines (if menu-bar-mode 1 0))
  26570. +           default-frame-alist))))
  26571. +
  26572. +   ;; Apply it to existing frames.
  26573. +   (let ((frames (frame-list)))
  26574. +     (while frames
  26575. +       (let ((height (cdr (assq 'height (frame-parameters (car frames))))))
  26576. +     (modify-frame-parameters (car frames)
  26577. +                  (list (cons 'menu-bar-lines
  26578. +                        (if menu-bar-mode 1 0))))
  26579. +     (modify-frame-parameters (car frames)
  26580. +                  (list (cons 'height height))))
  26581. +       (setq frames (cdr frames))))))
  26582. +
  26583. +(provide 'menu-bar)
  26584. +
  26585. +;;; menu-bar.el ends here
  26586. diff -rup --new-file baseline/fsf/emacs/lisp/amiga-menu.el amiga/fsf/emacs/lisp/amiga-menu.el
  26587. --- baseline/fsf/emacs/lisp/amiga-menu.el    Wed Dec 31 17:00:00 1969
  26588. +++ amiga/fsf/emacs/lisp/amiga-menu.el    Sat Sep 28 00:00:00 1996
  26589. @@ -0,0 +1,135 @@
  26590. +;(provide 'amiga-menu)
  26591. +
  26592. +(defconst amiga-menu-pick (char-to-string 3))
  26593. +(defconst amiga-menu-help (char-to-string 7))
  26594. +
  26595. +(defvar amiga-menus-description nil
  26596. +  "Variable containing the menus setup for Emacs")
  26597. +
  26598. +(defun amiga-menus-set (menus)
  26599. +  "Setup menus for emacs (parameter as for amiga-menus)"
  26600. +  (define-key mouse-map amiga-menu-pick 'amiga-menus-dispatch)
  26601. +  (define-key mouse-map amiga-menu-help 'amiga-menus-help)
  26602. +  (setq amiga-menus-description menus)
  26603. +  (amiga-menus menus))
  26604. +
  26605. +(defun amiga-menus-dispatch (selection)
  26606. +  (let* ((menu (car selection))
  26607. +     (item (cadr selection))
  26608. +     (code (cadr (nth item (cadr (nth menu amiga-menus-description))))))
  26609. +    (if (and (listp code) (eq (car code) 'call-interactively)
  26610. +         (listp (cadr code)) (eq (car (cadr code)) 'quote))
  26611. +    (setq this-command (cadr (cadr code))))
  26612. +    (eval code)))
  26613. +
  26614. +(defun amiga-menus-help (selection)
  26615. +  (let* ((menu (car selection))
  26616. +     (item (cadr selection))
  26617. +     (cmd (cadr (nth item (cadr (nth menu amiga-menus-description))))))
  26618. +    (if (and (listp cmd) (eq (car cmd) 'call-interactively)
  26619. +         (listp (car (cdr cmd))) (eq (car (car (cdr cmd))) 'quote))
  26620. +    (describe-function (car (cdr (car (cdr cmd)))))
  26621. +    (error "Don't know how to describe %s" cmd))))
  26622. +
  26623. +(defun make-explicit-string (str)
  26624. +  (if (and (>= (length str) 2) (= (elt str 0) 27) (< (elt str 1) 128))
  26625. +      (key-description (concat (char-to-string (+ 128 (elt str 1)))
  26626. +                   (substring str 2)))
  26627. +      (key-description str)))
  26628. +
  26629. +(defun make-command-name (command str width)
  26630. +  (let ((keys (where-is-internal command nil t))
  26631. +    (string (if str str (symbol-name command))))
  26632. +    (if keys
  26633. +    (format (if width (format "%%-%ds%%s" (+ width 2)) "%s (%s)")
  26634. +        string (make-explicit-string keys))
  26635. +    string)))
  26636. +
  26637. +(defun menu-items (commands proportional)
  26638. +  (let* ((width (if proportional nil 0))
  26639. +     (names (mapcar
  26640. +         (function (lambda (cmd)
  26641. +                 (if cmd
  26642. +                 (let* ((name (if (symbolp cmd)
  26643. +                          (symbol-name cmd)
  26644. +                          (car cmd)))
  26645. +                    (len (length name)))
  26646. +                   (if (and (not proportional) (> len width))
  26647. +                       (setq width len))
  26648. +                   name))))
  26649. +         commands)))
  26650. +    (mapcar
  26651. +     (function (lambda (cmd)
  26652. +         (let ((name (car names)))
  26653. +           (setq names (cdr names))
  26654. +           (if cmd
  26655. +               (let ((command (if (symbolp cmd) cmd (cadr cmd))))
  26656. +             (list (make-command-name command name width)
  26657. +                   (list 'call-interactively (list 'quote command))
  26658. +                   (caddr cmd)))))))
  26659. +     commands)))
  26660. +
  26661. +(defun convert-menu-buffer (proportional)
  26662. +  "Convert the current buffer into a loadable menu file for emacs.\n\
  26663. +If PROPORTIONAL is true (or if a prefix arg is given), assume menu is in a \n\
  26664. +proportional font & present it differently."
  26665. +  (interactive "P")
  26666. +  (save-buffer)
  26667. +  (widen)
  26668. +  (goto-char 1)
  26669. +  (let ((menu-spec (reverse (read (current-buffer))))
  26670. +    menu-code)
  26671. +    (while menu-spec
  26672. +      (let ((menu-item (car menu-spec)))
  26673. +    (setq menu-code
  26674. +          (cons (list (car menu-item)
  26675. +              (menu-items (cdr menu-item) proportional))
  26676. +            menu-code))
  26677. +    (setq menu-spec (cdr menu-spec))))
  26678. +    (let ((new-buf
  26679. +       (find-file (concat
  26680. +               (substring (buffer-file-name) 0
  26681. +                  (string-match "\\.menu$" (buffer-file-name)))
  26682. +               ".el"))))
  26683. +      (erase-buffer)
  26684. +      (prin1 (list 'amiga-menus-set (list 'quote menu-code)) (current-buffer))
  26685. +      (beginning-of-buffer))))
  26686. +
  26687. +(defvar menu-mode-syntax-table nil
  26688. +  "Syntax table used while in menu mode.")
  26689. +
  26690. +(defvar menu-mode-abbrev-table nil
  26691. +  "Abbrev table used while in menu mode.")
  26692. +(define-abbrev-table 'menu-mode-abbrev-table ())
  26693. +
  26694. +(if menu-mode-syntax-table
  26695. +    ()
  26696. +  (setq menu-mode-syntax-table (make-syntax-table))
  26697. +  (modify-syntax-entry ?' "w   " menu-mode-syntax-table))
  26698. +
  26699. +(defvar menu-mode-map ())
  26700. +(if menu-mode-map
  26701. +    ()
  26702. +  (setq menu-mode-map (make-sparse-keymap))
  26703. +  (define-key menu-mode-map "\t" 'indent-relative)
  26704. +  (define-key menu-mode-map "\C-c\C-c" 'convert-menu-buffer))
  26705. +
  26706. +(defun menu-mode ()
  26707. +  "Major mode for editing menus intended for humans to read.
  26708. +Indentation works like in indented-text-mode. This could be improved.\\{menu-mode-map}
  26709. +Turning on menu-mode calls the value of the variable menu-mode-hook,
  26710. +if that value is non-nil."
  26711. +  (interactive)
  26712. +  (kill-all-local-variables)
  26713. +  (use-local-map menu-mode-map)
  26714. +  (define-abbrev-table 'menu-mode-abbrev-table ())
  26715. +  (setq local-abbrev-table menu-mode-abbrev-table)
  26716. +  (set-syntax-table menu-mode-syntax-table)
  26717. +  (make-local-variable 'indent-line-function)
  26718. +  (setq indent-line-function 'indent-relative-maybe)
  26719. +  (use-local-map menu-mode-map)
  26720. +  (setq mode-name "Menu")
  26721. +  (setq major-mode 'menu-mode)
  26722. +  (run-hooks 'menu-mode-hook))
  26723. +
  26724. +(setq auto-mode-alist (cons '("\\.menu$" . menu-mode) auto-mode-alist))
  26725. diff -rup --new-file baseline/fsf/emacs/lisp/amiga-mouse-old.el amiga/fsf/emacs/lisp/amiga-mouse-old.el
  26726. --- baseline/fsf/emacs/lisp/amiga-mouse-old.el    Wed Dec 31 17:00:00 1969
  26727. +++ amiga/fsf/emacs/lisp/amiga-mouse-old.el    Sat Sep 28 00:00:00 1996
  26728. @@ -0,0 +1,276 @@
  26729. +;; Mouse support for Amiga Intuition window system.
  26730. +;; Copyright (C) 1985, 1987 Free Software Foundation, Inc.
  26731. +
  26732. +;; This file is part of GNU Emacs.
  26733. +
  26734. +;; GNU Emacs is distributed in the hope that it will be useful,
  26735. +;; but WITHOUT ANY WARRANTY.  No author or distributor
  26736. +;; accepts responsibility to anyone for the consequences of using it
  26737. +;; or for whether it serves any particular purpose or works at all,
  26738. +;; unless he says so in writing.  Refer to the GNU Emacs General Public
  26739. +;; License for full details.
  26740. +
  26741. +;; Everyone is granted permission to copy, modify and redistribute
  26742. +;; GNU Emacs, but only under the conditions described in the
  26743. +;; GNU Emacs General Public License.   A copy of this license is
  26744. +;; supposed to have been given to you along with GNU Emacs so you
  26745. +;; can know your rights and responsibilities.  It should be in a
  26746. +;; file named COPYING.  Among other things, the copyright notice
  26747. +;; and this notice must be preserved on all copies.
  26748. +
  26749. +(provide 'amiga-mouse)
  26750. +
  26751. +(defconst amiga-button-right (char-to-string 0))
  26752. +(defconst amiga-button-middle (char-to-string 1))
  26753. +(defconst amiga-button-left (char-to-string 2))
  26754. +
  26755. +(defconst amiga-button-right-up (char-to-string 4))
  26756. +(defconst amiga-button-middle-up (char-to-string 5))
  26757. +(defconst amiga-button-left-up (char-to-string 6))
  26758. +
  26759. +(defconst amiga-button-s-right (char-to-string 16))
  26760. +(defconst amiga-button-s-middle (char-to-string 17))
  26761. +(defconst amiga-button-s-left (char-to-string 18))
  26762. +
  26763. +(defconst amiga-button-s-right-up (char-to-string 20))
  26764. +(defconst amiga-button-s-middle-up (char-to-string 21))
  26765. +(defconst amiga-button-s-left-up (char-to-string 22))
  26766. +
  26767. +(defconst amiga-button-m-right (char-to-string 32))
  26768. +(defconst amiga-button-m-middle (char-to-string 33))
  26769. +(defconst amiga-button-m-left (char-to-string 34))
  26770. +
  26771. +(defconst amiga-button-m-right-up (char-to-string 36))
  26772. +(defconst amiga-button-m-middle-up (char-to-string 37))
  26773. +(defconst amiga-button-m-left-up (char-to-string 38))
  26774. +
  26775. +(defconst amiga-button-c-right (char-to-string 64))
  26776. +(defconst amiga-button-c-middle (char-to-string 65))
  26777. +(defconst amiga-button-c-left (char-to-string 66))
  26778. +
  26779. +(defconst amiga-button-c-right-up (char-to-string 68))
  26780. +(defconst amiga-button-c-middle-up (char-to-string 69))
  26781. +(defconst amiga-button-c-left-up (char-to-string 70))
  26782. +
  26783. +(defconst amiga-button-m-s-right (char-to-string 48))
  26784. +(defconst amiga-button-m-s-middle (char-to-string 49))
  26785. +(defconst amiga-button-m-s-left (char-to-string 50))
  26786. +
  26787. +(defconst amiga-button-m-s-right-up (char-to-string 52))
  26788. +(defconst amiga-button-m-s-middle-up (char-to-string 53))
  26789. +(defconst amiga-button-m-s-left-up (char-to-string 54))
  26790. +
  26791. +(defconst amiga-button-c-s-right (char-to-string 80))
  26792. +(defconst amiga-button-c-s-middle (char-to-string 81))
  26793. +(defconst amiga-button-c-s-left (char-to-string 82))
  26794. +
  26795. +(defconst amiga-button-c-s-right-up (char-to-string 84))
  26796. +(defconst amiga-button-c-s-middle-up (char-to-string 85))
  26797. +(defconst amiga-button-c-s-left-up (char-to-string 86))
  26798. +
  26799. +(defconst amiga-button-c-m-right (char-to-string 96))
  26800. +(defconst amiga-button-c-m-middle (char-to-string 97))
  26801. +(defconst amiga-button-c-m-left (char-to-string 98))
  26802. +
  26803. +(defconst amiga-button-c-m-right-up (char-to-string 100))
  26804. +(defconst amiga-button-c-m-middle-up (char-to-string 101))
  26805. +(defconst amiga-button-c-m-left-up (char-to-string 102))
  26806. +
  26807. +(defconst amiga-button-c-m-s-right (char-to-string 112))
  26808. +(defconst amiga-button-c-m-s-middle (char-to-string 113))
  26809. +(defconst amiga-button-c-m-s-left (char-to-string 114))
  26810. +
  26811. +(defconst amiga-button-c-m-s-right-up (char-to-string 116))
  26812. +(defconst amiga-button-c-m-s-middle-up (char-to-string 117))
  26813. +(defconst amiga-button-c-m-s-left-up (char-to-string 118))
  26814. +
  26815. +(defmacro cadr (x) (list 'car (list 'cdr x)))
  26816. +(defmacro caddr (x) (list 'car (list 'cdr (list 'cdr x))))
  26817. +(defmacro cadddr (x) (list 'car (list 'cdr (list 'cdr (list 'cdr x)))))
  26818. +
  26819. +(defun coordinates-in-window-p (arg w)
  26820. +  (let ((x (car arg))
  26821. +    (y (cadr arg))
  26822. +    (edges (window-edges w)))
  26823. +    (and (>= x (car edges)) (< x (caddr edges))
  26824. +     (>= y (cadr edges)) (< y (cadddr edges))
  26825. +     (list (- x (car edges)) (- y (cadr edges))))))
  26826. +
  26827. +(defvar amiga-process-mouse-hook nil
  26828. +  "Hook to run after each mouse event is processed.  Should take two
  26829. +arguments; the first being a list (XPOS YPOS) corresponding to character
  26830. +offset from top left of screen and the second being a specifier for the
  26831. +buttons/keys.
  26832. +
  26833. +This will normally be set on a per-buffer basis.")
  26834. +
  26835. +(defun amiga-flush-mouse-queue () 
  26836. +  "Process all queued mouse events."
  26837. +  ;; A mouse event causes a special character sequence to be given
  26838. +  ;; as keyboard input.  That runs this function, which process all
  26839. +  ;; queued mouse events and returns.
  26840. +  (interactive)
  26841. +  (while (> (amiga-mouse-events) 0)
  26842. +    (amiga-proc-mouse-event)
  26843. +    (and (boundp 'amiga-process-mouse-hook)
  26844. +     (symbol-value 'amiga-process-mouse-hook)
  26845. +     (funcall amiga-process-mouse-hook amiga-mouse-pos amiga-mouse-item))))
  26846. +
  26847. +(defun amiga-mouse-select (arg)
  26848. +  "Select Emacs window the mouse is on."
  26849. +  (let ((start-w (selected-window))
  26850. +    (done nil)
  26851. +    (w (selected-window))
  26852. +    (rel-coordinate nil))
  26853. +    (if (eq start-w (minibuffer-window))
  26854. +    (setq rel-coordinate (coordinates-in-window-p arg w))
  26855. +    (while (and (not done)
  26856. +            (null (setq rel-coordinate
  26857. +                (coordinates-in-window-p arg w))))
  26858. +      (setq w (next-window w))
  26859. +      (if (eq w start-w)
  26860. +          (setq done t))))
  26861. +    (select-window w)
  26862. +    rel-coordinate))
  26863. +
  26864. +(defun amiga-mouse-keep-one-window (arg)
  26865. +  "Select Emacs window mouse is on, then kill all other Emacs windows."
  26866. +  (if (amiga-mouse-select arg)
  26867. +      (delete-other-windows)))
  26868. +
  26869. +(defun amiga-mouse-select-and-split (arg)
  26870. +  "Select Emacs window mouse is on, then split it vertically in half."
  26871. +  (if (amiga-mouse-select arg)
  26872. +      (split-window-vertically nil)))
  26873. +
  26874. +
  26875. +(defun amiga-mouse-set-point (arg)
  26876. +  "Select Emacs window mouse is on, and move point to mouse position."
  26877. +  (let* ((relative-coordinate (amiga-mouse-select arg))
  26878. +     margin-column
  26879. +     (rel-x (car relative-coordinate))
  26880. +     (rel-y (car (cdr relative-coordinate))))
  26881. +    (if relative-coordinate
  26882. +    (let ((prompt-width (if (eq (selected-window) (minibuffer-window))
  26883. +                minibuffer-prompt-width 0)))
  26884. +      (move-to-window-line rel-y)
  26885. +      (setq margin-column
  26886. +        (if (or truncate-lines (> (window-hscroll) 0))
  26887. +            (current-column)
  26888. +          ;; If we are using line continuation,
  26889. +          ;; compensate if first character on a continuation line
  26890. +          ;; does not start precisely at the margin.
  26891. +          (- (current-column)
  26892. +             (% (current-column) (1- (window-width))))))
  26893. +      (move-to-column (+ rel-x (1- (max 1 (window-hscroll)))
  26894. +                 (if (= (point) 1)
  26895. +                 (- prompt-width) 0)
  26896. +                 margin-column))))))
  26897. +
  26898. +(defun amiga-mouse-set-mark (arg)
  26899. +  "Select Emacs window mouse is on, and set mark at mouse position.
  26900. +Display cursor at that position for a second."
  26901. +  (if (amiga-mouse-select arg)
  26902. +      (let ((point-save (point)))
  26903. +    (unwind-protect
  26904. +        (progn (amiga-mouse-set-point arg)
  26905. +           (push-mark nil t)
  26906. +           (sit-for 1))
  26907. +      (goto-char point-save)))))
  26908. +
  26909. +(defun amiga-mouse-cut (arg)
  26910. +  "Select Emacs window mouse is on, and set mark at mouse position. 
  26911. +Display cursor at that position for a second. Then cut."
  26912. +  (if (amiga-mouse-select arg)
  26913. +      (let ((point-save (point)))
  26914. +    (unwind-protect
  26915. +        (progn (amiga-mouse-set-point arg)
  26916. +           (push-mark nil t)
  26917. +           (kill-region point-save (point))
  26918. +           (sit-for 1))
  26919. +      (goto-char point-save)))))
  26920. +
  26921. +(defun amiga-mouse-copy (arg)
  26922. +  "Select Emacs window mouse is on, and set mark at mouse position. 
  26923. +Display cursor at that position for a second. Then copy."
  26924. +  (if (amiga-mouse-select arg)
  26925. +      (let ((point-save (point)))
  26926. +    (unwind-protect
  26927. +        (progn (amiga-mouse-set-point arg)
  26928. +           (push-mark nil t)
  26929. +           (copy-region-as-kill point-save (point))
  26930. +           (sit-for 1))
  26931. +      (goto-char point-save)))))
  26932. +
  26933. +(defun amiga-mouse-paste (arg)
  26934. +  "Move point to mouse position (and select window), then paste."
  26935. +  (if (amiga-mouse-select arg)
  26936. +      (progn
  26937. +    (amiga-mouse-set-point arg)
  26938. +    (yank))))
  26939. +
  26940. +(defun amiga-mouse-iconify (arg) (amiga-iconify))
  26941. +
  26942. +(defun amiga-mouse-ignore (arg)
  26943. +  "Don't do anything.")
  26944. +
  26945. +; Prevent beeps. on button-up.  If the button isn't bound to anything, it
  26946. +(define-key mouse-map amiga-button-right 'amiga-mouse-ignore)
  26947. +(define-key mouse-map amiga-button-middle 'amiga-mouse-ignore)
  26948. +(define-key mouse-map amiga-button-left 'amiga-mouse-ignore)
  26949. +(define-key mouse-map amiga-button-right-up 'amiga-mouse-ignore)
  26950. +(define-key mouse-map amiga-button-middle-up 'amiga-mouse-ignore)
  26951. +(define-key mouse-map amiga-button-left-up 'amiga-mouse-ignore)
  26952. +(define-key mouse-map amiga-button-s-right 'amiga-mouse-ignore)
  26953. +(define-key mouse-map amiga-button-s-middle 'amiga-mouse-ignore)
  26954. +(define-key mouse-map amiga-button-s-left 'amiga-mouse-ignore)
  26955. +(define-key mouse-map amiga-button-s-right-up 'amiga-mouse-ignore)
  26956. +(define-key mouse-map amiga-button-s-middle-up 'amiga-mouse-ignore)
  26957. +(define-key mouse-map amiga-button-s-left-up 'amiga-mouse-ignore)
  26958. +(define-key mouse-map amiga-button-m-right 'amiga-mouse-ignore)
  26959. +(define-key mouse-map amiga-button-m-middle 'amiga-mouse-ignore)
  26960. +(define-key mouse-map amiga-button-m-left 'amiga-mouse-ignore)
  26961. +(define-key mouse-map amiga-button-m-right-up 'amiga-mouse-ignore)
  26962. +(define-key mouse-map amiga-button-m-middle-up 'amiga-mouse-ignore)
  26963. +(define-key mouse-map amiga-button-m-left-up 'amiga-mouse-ignore)
  26964. +(define-key mouse-map amiga-button-c-right 'amiga-mouse-ignore)
  26965. +(define-key mouse-map amiga-button-c-middle 'amiga-mouse-ignore)
  26966. +(define-key mouse-map amiga-button-c-left 'amiga-mouse-ignore)
  26967. +(define-key mouse-map amiga-button-c-right-up 'amiga-mouse-ignore)
  26968. +(define-key mouse-map amiga-button-c-middle-up 'amiga-mouse-ignore)
  26969. +(define-key mouse-map amiga-button-c-left-up 'amiga-mouse-ignore)
  26970. +(define-key mouse-map amiga-button-m-s-right 'amiga-mouse-ignore)
  26971. +(define-key mouse-map amiga-button-m-s-middle 'amiga-mouse-ignore)
  26972. +(define-key mouse-map amiga-button-m-s-left 'amiga-mouse-ignore)
  26973. +(define-key mouse-map amiga-button-m-s-right-up 'amiga-mouse-ignore)
  26974. +(define-key mouse-map amiga-button-m-s-middle-up 'amiga-mouse-ignore)
  26975. +(define-key mouse-map amiga-button-m-s-left-up 'amiga-mouse-ignore)
  26976. +(define-key mouse-map amiga-button-c-s-right 'amiga-mouse-ignore)
  26977. +(define-key mouse-map amiga-button-c-s-middle 'amiga-mouse-ignore)
  26978. +(define-key mouse-map amiga-button-c-s-left 'amiga-mouse-ignore)
  26979. +(define-key mouse-map amiga-button-c-s-right-up 'amiga-mouse-ignore)
  26980. +(define-key mouse-map amiga-button-c-s-middle-up 'amiga-mouse-ignore)
  26981. +(define-key mouse-map amiga-button-c-s-left-up 'amiga-mouse-ignore)
  26982. +(define-key mouse-map amiga-button-c-m-right 'amiga-mouse-ignore)
  26983. +(define-key mouse-map amiga-button-c-m-middle 'amiga-mouse-ignore)
  26984. +(define-key mouse-map amiga-button-c-m-left 'amiga-mouse-ignore)
  26985. +(define-key mouse-map amiga-button-c-m-right-up 'amiga-mouse-ignore)
  26986. +(define-key mouse-map amiga-button-c-m-middle-up 'amiga-mouse-ignore)
  26987. +(define-key mouse-map amiga-button-c-m-left-up 'amiga-mouse-ignore)
  26988. +(define-key mouse-map amiga-button-c-m-s-right 'amiga-mouse-ignore)
  26989. +(define-key mouse-map amiga-button-c-m-s-middle 'amiga-mouse-ignore)
  26990. +(define-key mouse-map amiga-button-c-m-s-left 'amiga-mouse-ignore)
  26991. +(define-key mouse-map amiga-button-c-m-s-right-up 'amiga-mouse-ignore)
  26992. +(define-key mouse-map amiga-button-c-m-s-middle-up 'amiga-mouse-ignore)
  26993. +(define-key mouse-map amiga-button-c-m-s-left-up 'amiga-mouse-ignore)
  26994. +
  26995. +; Define a few events
  26996. +(define-key mouse-map amiga-button-left 'amiga-mouse-set-point)
  26997. +(define-key mouse-map amiga-button-s-left 'amiga-mouse-set-mark)
  26998. +(define-key mouse-map amiga-button-c-left 'amiga-mouse-cut)
  26999. +(define-key mouse-map amiga-button-m-left 'amiga-mouse-copy)
  27000. +(define-key mouse-map amiga-button-middle 'amiga-mouse-paste)
  27001. +(define-key mouse-map amiga-button-s-middle 'amiga-mouse-iconify)
  27002. +
  27003. +(define-key amiga-map "M" 'amiga-flush-mouse-queue)
  27004. +(setq amiga-mouse-initialized t)  ;; Mouse commands can now be processed.
  27005. diff -rup --new-file baseline/fsf/emacs/lisp/amiga-mouse.el amiga/fsf/emacs/lisp/amiga-mouse.el
  27006. --- baseline/fsf/emacs/lisp/amiga-mouse.el    Wed Dec 31 17:00:00 1969
  27007. +++ amiga/fsf/emacs/lisp/amiga-mouse.el    Sat Sep 28 00:00:00 1996
  27008. @@ -0,0 +1,1025 @@
  27009. +;;; amiga-mouse.el --- amiga intuition version of mouse.el
  27010. +;;; mouse.el claims to provide window system-independent mouse support but
  27011. +;;; there are too many X dependancies.
  27012. +
  27013. +;;; Copyright (C) 1993, 1994 Free Software Foundation, Inc.
  27014. +
  27015. +;; Maintainer: Alph (change to FSF if you like)
  27016. +;; Keywords: hardware
  27017. +
  27018. +;;; This file is part of GNU Emacs.
  27019. +
  27020. +;;; GNU Emacs is free software; you can redistribute it and/or modify
  27021. +;;; it under the terms of the GNU General Public License as published by
  27022. +;;; the Free Software Foundation; either version 2, or (at your option)
  27023. +;;; any later version.
  27024. +
  27025. +;;; GNU Emacs is distributed in the hope that it will be useful,
  27026. +;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  27027. +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  27028. +;;; GNU General Public License for more details.
  27029. +
  27030. +;;; You should have received a copy of the GNU General Public License
  27031. +;;; along with GNU Emacs; see the file COPYING.  If not, write to
  27032. +;;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  27033. +
  27034. +;;; Commentary:
  27035. +
  27036. +;; This package provides various useful commands (including help
  27037. +;; system access) through the mouse.  All this code assumes that mouse
  27038. +;; interpretation has been abstracted into Emacs input events.
  27039. +;;
  27040. +;; The code is not X-dependent.
  27041. +
  27042. +;;; Code:
  27043. +
  27044. +;;; Utility functions.
  27045. +
  27046. +;;; Indent track-mouse like progn.
  27047. +(put 'track-mouse 'lisp-indent-function 0)
  27048. +
  27049. +(defvar mouse-yank-at-point nil
  27050. +  "*If non-nil, mouse yank commands yank at point instead of at click.")
  27051. +
  27052. +(defun mouse-minibuffer-check (event)
  27053. +  (let ((w (posn-window (event-start event))))
  27054. +    (and (window-minibuffer-p w)
  27055. +     (not (minibuffer-window-active-p w))
  27056. +     (error "Minibuffer window is not active"))))
  27057. +
  27058. +(defun mouse-delete-window (click)
  27059. +  "Delete the window you click on.
  27060. +This must be bound to a mouse click."
  27061. +  (interactive "e")
  27062. +  (mouse-minibuffer-check click)
  27063. +  (delete-window (posn-window (event-start click))))
  27064. +
  27065. +(defun mouse-select-window (click)
  27066. +  "Select the window clicked on; don't move point."
  27067. +  (interactive "e")
  27068. +  (mouse-minibuffer-check click)
  27069. +  (let ((oframe (selected-frame))
  27070. +    (frame (window-frame (posn-window (event-start click)))))
  27071. +    (select-window (posn-window (event-start click)))
  27072. +    (raise-frame frame)
  27073. +    (select-frame frame)
  27074. +    (or (eq frame oframe)
  27075. +    (set-mouse-position (selected-frame) (1- (frame-width)) 0))
  27076. +    (unfocus-frame)))
  27077. +
  27078. +;(defun mouse-tear-off-window (click)
  27079. +;  "Delete the window clicked on, and create a new frame displaying its buffer."
  27080. +;  (interactive "e")
  27081. +;  (mouse-minibuffer-check click)
  27082. +;  (let* ((window (posn-window (event-start click)))
  27083. +;     (buf (window-buffer window))
  27084. +;     (frame (make-frame)))
  27085. +;    (select-frame frame)
  27086. +;    (switch-to-buffer buf)
  27087. +;    (delete-window window)))
  27088. +
  27089. +(defun mouse-delete-other-windows ()
  27090. +  "Delete all window except the one you click on."
  27091. +  (interactive "@")
  27092. +  (delete-other-windows))
  27093. +
  27094. +(defun mouse-split-window-vertically (click)
  27095. +  "Select Emacs window mouse is on, then split it vertically in half.
  27096. +The window is split at the line clicked on.
  27097. +This command must be bound to a mouse click."
  27098. +  (interactive "@e")
  27099. +  (mouse-minibuffer-check click)
  27100. +  (let ((start (event-start click)))
  27101. +    (select-window (posn-window start))
  27102. +    (let ((new-height (1+ (cdr (posn-col-row (event-end click)))))
  27103. +      (first-line window-min-height)
  27104. +      (last-line (- (window-height) window-min-height)))
  27105. +      (if (< last-line first-line)
  27106. +      (error "window too short to split")
  27107. +    (split-window-vertically
  27108. +     (min (max new-height first-line) last-line))))))
  27109. +
  27110. +(defun mouse-split-window-horizontally (click)
  27111. +  "Select Emacs window mouse is on, then split it horizontally in half.
  27112. +The window is split at the column clicked on.
  27113. +This command must be bound to a mouse click."
  27114. +  (interactive "@e")
  27115. +  (mouse-minibuffer-check click)
  27116. +  (let ((start (event-start click)))
  27117. +    (select-window (posn-window start))
  27118. +    (let ((new-width (1+ (car (posn-col-row (event-end click)))))
  27119. +      (first-col window-min-width)
  27120. +      (last-col (- (window-width) window-min-width)))
  27121. +      (if (< last-col first-col)
  27122. +      (error "window too narrow to split")
  27123. +    (split-window-horizontally
  27124. +     (min (max new-width first-col) last-col))))))
  27125. +
  27126. +(defun mouse-set-point (event)
  27127. +  "Move point to the position clicked on with the mouse.
  27128. +This should be bound to a mouse click event type."
  27129. +  (interactive "e")
  27130. +  (mouse-minibuffer-check event)
  27131. +  ;; Use event-end in case called from mouse-drag-region.
  27132. +  ;; If EVENT is a click, event-end and event-start give same value.
  27133. +  (let ((posn (event-end event)))
  27134. +    (select-window (posn-window posn))
  27135. +    (if (numberp (posn-point posn))
  27136. +    (goto-char (posn-point posn)))))
  27137. +
  27138. +(defun mouse-set-region (click)
  27139. +  "Set the region to the text dragged over, and copy to kill ring.
  27140. +This should be bound to a mouse drag event."
  27141. +  (interactive "e")
  27142. +  (mouse-minibuffer-check click)
  27143. +  (let ((posn (event-start click))
  27144. +    (end (event-end click)))
  27145. +    (select-window (posn-window posn))
  27146. +    (if (numberp (posn-point posn))
  27147. +    (goto-char (posn-point posn)))
  27148. +    ;; If mark is highlighted, no need to bounce the cursor.
  27149. +    (or (and transient-mark-mode
  27150. +         (eq (framep (selected-frame)) 'x))
  27151. +    (sit-for 1))
  27152. +    (push-mark)
  27153. +    (set-mark (point))
  27154. +    (if (numberp (posn-point end))
  27155. +    (goto-char (posn-point end)))
  27156. +    ;; Don't set this-command to kill-region, so that a following
  27157. +    ;; C-w will not double the text in the kill ring.
  27158. +    (let (this-command)
  27159. +      (copy-region-as-kill (mark) (point)))))
  27160. +
  27161. +(defvar mouse-scroll-delay 0.25
  27162. +  "*The pause between scroll steps caused by mouse drags, in seconds.
  27163. +If you drag the mouse beyond the edge of a window, Emacs scrolls the
  27164. +window to bring the text beyond that edge into view, with a delay of
  27165. +this many seconds between scroll steps.  Scrolling stops when you move
  27166. +the mouse back into the window, or release the button.
  27167. +This variable's value may be non-integral.
  27168. +Setting this to zero causes Emacs to scroll as fast as it can.")
  27169. +
  27170. +(defun mouse-scroll-subr (jump &optional overlay start)
  27171. +  "Scroll the selected window JUMP lines at a time, until new input arrives.
  27172. +If OVERLAY is an overlay, let it stretch from START to the far edge of
  27173. +the newly visible text.
  27174. +Upon exit, point is at the far edge of the newly visible text."
  27175. +  (while (progn
  27176. +       (goto-char (window-start))
  27177. +       (if (not (zerop (vertical-motion jump)))
  27178. +           (progn
  27179. +         (set-window-start (selected-window) (point))
  27180. +         (if (natnump jump)
  27181. +             (progn
  27182. +               (goto-char (window-end (selected-window)))
  27183. +               ;; window-end doesn't reflect the window's new
  27184. +               ;; start position until the next redisplay.  Hurrah.
  27185. +               (vertical-motion (1- jump)))
  27186. +           (goto-char (window-start (selected-window))))
  27187. +         (if overlay
  27188. +             (move-overlay overlay start (point)))
  27189. +         (if (not (eobp))
  27190. +             (sit-for mouse-scroll-delay))))))
  27191. +  (point))
  27192. +
  27193. +; CHFIXME: no dump support for overlays (yet ?)
  27194. +;(defvar mouse-drag-overlay (make-overlay 1 1))
  27195. +;(overlay-put mouse-drag-overlay 'face 'region)
  27196. +
  27197. +(defvar mouse-selection-click-count 0)
  27198. +
  27199. +(defun mouse-drag-region (start-event)
  27200. +  "Set the region to the text that the mouse is dragged over.
  27201. +Highlight the drag area as you move the mouse.
  27202. +This must be bound to a button-down mouse event.
  27203. +In Transient Mark mode, the highlighting remains once you
  27204. +release the mouse button.  Otherwise, it does not."
  27205. +  (interactive "e")
  27206. +  (mouse-minibuffer-check start-event)
  27207. +  (let* ((start-posn (event-start start-event))
  27208. +     (start-point (posn-point start-posn))
  27209. +     (start-window (posn-window start-posn))
  27210. +     (start-frame (window-frame start-window))
  27211. +     (bounds (window-edges start-window))
  27212. +     (top (nth 1 bounds))
  27213. +     (bottom (if (window-minibuffer-p start-window)
  27214. +             (nth 3 bounds)
  27215. +           ;; Don't count the mode line.
  27216. +           (1- (nth 3 bounds))))
  27217. +     (click-count (1- (event-click-count start-event))))
  27218. +    (setq mouse-selection-click-count click-count)
  27219. +    (mouse-set-point start-event)
  27220. +    (let ((range (mouse-start-end start-point start-point click-count)))
  27221. +      (move-overlay mouse-drag-overlay (car range) (nth 1 range)
  27222. +            (window-buffer start-window)))
  27223. +    (deactivate-mark)
  27224. +    (let (event end end-point)
  27225. +      (track-mouse
  27226. +    (while (progn
  27227. +         (setq event (read-event))
  27228. +         (or (mouse-movement-p event)
  27229. +             (eq (car-safe event) 'switch-frame)))
  27230. +      (if (eq (car-safe event) 'switch-frame)
  27231. +          nil
  27232. +        (setq end (event-end event)
  27233. +          end-point (posn-point end))
  27234. +
  27235. +        (cond
  27236. +
  27237. +         ;; Ignore switch-frame events.
  27238. +         ((eq (car-safe event) 'switch-frame))
  27239. +
  27240. +         ;; Are we moving within the original window?
  27241. +         ((and (eq (posn-window end) start-window)
  27242. +           (integer-or-marker-p end-point))
  27243. +          (goto-char end-point)
  27244. +          (let ((range (mouse-start-end start-point (point) click-count)))
  27245. +        (move-overlay mouse-drag-overlay (car range) (nth 1 range))))
  27246. +
  27247. +         (t
  27248. +          (let ((mouse-row (cdr (cdr (mouse-position)))))
  27249. +        (cond
  27250. +         ((null mouse-row))
  27251. +         ((< mouse-row top)
  27252. +          (mouse-scroll-subr
  27253. +           (- mouse-row top) mouse-drag-overlay start-point))
  27254. +         ((and (not (eobp))
  27255. +               (>= mouse-row bottom))
  27256. +          (mouse-scroll-subr (1+ (- mouse-row bottom))
  27257. +                     mouse-drag-overlay start-point)))))))))
  27258. +
  27259. +      (if (and (eq (get (event-basic-type event) 'event-kind) 'mouse-click)
  27260. +           (eq (posn-window (event-end event)) start-window)
  27261. +           (numberp (posn-point (event-end event))))
  27262. +      (let ((fun (key-binding (vector (car event)))))
  27263. +        (if (memq fun '(mouse-set-region mouse-set-point))
  27264. +        (if (not (= (overlay-start mouse-drag-overlay)
  27265. +                (overlay-end mouse-drag-overlay)))
  27266. +            (let (this-command)
  27267. +              (push-mark (overlay-start mouse-drag-overlay) t t)
  27268. +              (goto-char (overlay-end mouse-drag-overlay))
  27269. +              (copy-region-as-kill (point) (mark t)))
  27270. +          (goto-char (overlay-end mouse-drag-overlay))
  27271. +          (setq this-command 'mouse-set-point))
  27272. +          (if (fboundp fun)
  27273. +          (funcall fun event)))))
  27274. +      (delete-overlay mouse-drag-overlay))))
  27275. +
  27276. +;; Commands to handle xterm-style multiple clicks.
  27277. +
  27278. +(defun mouse-skip-word (dir)
  27279. +  "Skip over word, over whitespace, or over identical punctuation.
  27280. +If DIR is positive skip forward; if negative, skip backward."
  27281. +  (let* ((char (following-char))
  27282. +     (syntax (char-to-string (char-syntax char))))
  27283. +    (if (or (string= syntax "w") (string= syntax " "))
  27284. +    (if (< dir 0)
  27285. +        (skip-syntax-backward syntax)
  27286. +      (skip-syntax-forward syntax))
  27287. +      (if (< dir 0)
  27288. +      (while (and (not (bobp)) (= (preceding-char) char))
  27289. +        (forward-char -1))
  27290. +    (while (and (not (eobp)) (= (following-char) char))
  27291. +      (forward-char 1))))))
  27292. +
  27293. +;; Return a list of region bounds based on START and END according to MODE.
  27294. +;; If MODE is 0 then set point to (min START END), mark to (max START END).
  27295. +;; If MODE is 1 then set point to start of word at (min START END),
  27296. +;; mark to end of word at (max START END).
  27297. +;; If MODE is 2 then do the same for lines.
  27298. +(defun mouse-start-end (start end mode)
  27299. +  (if (> start end)
  27300. +      (let ((temp start))
  27301. +        (setq start end
  27302. +              end temp)))
  27303. +  (setq mode (mod mode 3))
  27304. +  (cond ((= mode 0)
  27305. +     (list start end))
  27306. +        ((and (= mode 1)
  27307. +              (= start end)
  27308. +          (char-after start)
  27309. +              (= (char-syntax (char-after start)) ?\())
  27310. +     (list start
  27311. +           (save-excursion
  27312. +         (goto-char start)
  27313. +         (forward-sexp 1)
  27314. +         (point))))
  27315. +        ((and (= mode 1)
  27316. +              (= start end)
  27317. +          (char-after start)
  27318. +              (= (char-syntax (char-after start)) ?\)))
  27319. +     (list (save-excursion 
  27320. +         (goto-char (1+ start))
  27321. +         (backward-sexp 1)
  27322. +         (point))
  27323. +           (1+ start)))
  27324. +        ((= mode 1)
  27325. +     (list (save-excursion
  27326. +         (goto-char start)
  27327. +         (mouse-skip-word -1)
  27328. +         (point))
  27329. +           (save-excursion
  27330. +         (goto-char end)
  27331. +         (mouse-skip-word 1)
  27332. +         (point))))
  27333. +        ((= mode 2)
  27334. +     (list (save-excursion
  27335. +         (goto-char start)
  27336. +         (beginning-of-line 1)
  27337. +         (point))
  27338. +           (save-excursion
  27339. +         (goto-char end)
  27340. +         (forward-line 1)
  27341. +         (point))))))
  27342. +
  27343. +;; Subroutine: set the mark where CLICK happened,
  27344. +;; but don't do anything else.
  27345. +(defun mouse-set-mark-fast (click)
  27346. +  (mouse-minibuffer-check click)
  27347. +  (let ((posn (event-start click)))
  27348. +    (select-window (posn-window posn))
  27349. +    (if (numberp (posn-point posn))
  27350. +    (push-mark (posn-point posn) t t))))
  27351. +
  27352. +;; Momentarily show where the mark is, if highlighting doesn't show it. 
  27353. +(defun mouse-show-mark ()
  27354. +  (or transient-mark-mode
  27355. +      (save-excursion
  27356. +    (goto-char (mark t))
  27357. +    (sit-for 1))))
  27358. +
  27359. +(defun mouse-set-mark (click)
  27360. +  "Set mark at the position clicked on with the mouse.
  27361. +Display cursor at that position for a second.
  27362. +This must be bound to a mouse click."
  27363. +  (interactive "e")
  27364. +  (let ((point-save (point)))
  27365. +    (unwind-protect
  27366. +    (progn (mouse-set-point click)
  27367. +           (push-mark nil t t)
  27368. +           (or transient-mark-mode
  27369. +           (sit-for 1)))
  27370. +      (goto-char point-save))))
  27371. +
  27372. +(defun mouse-kill (click)
  27373. +  "Kill the region between point and the mouse click.
  27374. +The text is saved in the kill ring, as with \\[kill-region]."
  27375. +  (interactive "e")
  27376. +  (mouse-minibuffer-check click)
  27377. +  (let* ((posn (event-start click))
  27378. +     (click-posn (posn-point posn)))
  27379. +    (select-window (posn-window posn))
  27380. +    (if (numberp click-posn)
  27381. +    (kill-region (min (point) click-posn)
  27382. +             (max (point) click-posn)))))
  27383. +
  27384. +(defun mouse-yank-at-click (click arg)
  27385. +  "Insert the last stretch of killed text at the position clicked on.
  27386. +Also move point to one end of the text thus inserted (normally the end).
  27387. +Prefix arguments are interpreted as with \\[yank].
  27388. +If `mouse-yank-at-point' is non-nil, insert at point
  27389. +regardless of where you click."
  27390. +  (interactive "e\nP")
  27391. +  (or mouse-yank-at-point (mouse-set-point click))
  27392. +  (setq this-command 'yank)
  27393. +  (yank arg))
  27394. +
  27395. +(defun mouse-kill-ring-save (click)
  27396. +  "Copy the region between point and the mouse click in the kill ring.
  27397. +This does not delete the region; it acts like \\[kill-ring-save]."
  27398. +  (interactive "e")
  27399. +  (mouse-set-mark-fast click)
  27400. +  (kill-ring-save (point) (mark t))
  27401. +  (mouse-show-mark))
  27402. +
  27403. +;;; This function used to delete the text between point and the mouse
  27404. +;;; whenever it was equal to the front of the kill ring, but some
  27405. +;;; people found that confusing.
  27406. +
  27407. +;;; A list (TEXT START END), describing the text and position of the last
  27408. +;;; invocation of mouse-save-then-kill.
  27409. +(defvar mouse-save-then-kill-posn nil)
  27410. +
  27411. +(defun mouse-save-then-kill-delete-region (beg end)
  27412. +  ;; We must make our own undo boundaries
  27413. +  ;; because they happen automatically only for the current buffer.
  27414. +  (undo-boundary)
  27415. +  (if (or (= beg end) (eq buffer-undo-list t))
  27416. +      ;; If we have no undo list in this buffer,
  27417. +      ;; just delete.
  27418. +      (delete-region beg end)
  27419. +    ;; Delete, but make the undo-list entry share with the kill ring.
  27420. +    ;; First, delete just one char, so in case buffer is being modified
  27421. +    ;; for the first time, the undo list records that fact.
  27422. +    (delete-region beg
  27423. +           (+ beg (if (> end beg) 1 -1)))
  27424. +    (let ((buffer-undo-list buffer-undo-list))
  27425. +      ;; Undo that deletion--but don't change the undo list!
  27426. +      (primitive-undo 1 buffer-undo-list)
  27427. +      ;; Now delete the rest of the specified region,
  27428. +      ;; but don't record it.
  27429. +      (setq buffer-undo-list t)
  27430. +      (if (/= (length (car kill-ring)) (- (max end beg) (min end beg)))
  27431. +      (error "Lossage in mouse-save-then-kill-delete-region"))
  27432. +      (delete-region beg end))
  27433. +    (let ((tail buffer-undo-list))
  27434. +      ;; Search back in buffer-undo-list for the string
  27435. +      ;; that came from deleting one character.
  27436. +      (while (and tail (not (stringp (car (car tail)))))
  27437. +    (setq tail (cdr tail)))
  27438. +      ;; Replace it with an entry for the entire deleted text.
  27439. +      (and tail
  27440. +       (setcar tail (cons (car kill-ring) (min beg end))))))
  27441. +  (undo-boundary))
  27442. +
  27443. +(defun mouse-save-then-kill (click)
  27444. +  "Save text to point in kill ring; the second time, kill the text.
  27445. +If the text between point and the mouse is the same as what's
  27446. +at the front of the kill ring, this deletes the text.
  27447. +Otherwise, it adds the text to the kill ring, like \\[kill-ring-save],
  27448. +which prepares for a second click to delete the text.
  27449. +
  27450. +If you have selected words or lines, this command extends the
  27451. +selection through the word or line clicked on.  If you do this
  27452. +again in a different position, it extends the selection again.
  27453. +If you do this twice in the same position, the selection is killed." 
  27454. +  (interactive "e")
  27455. +  (mouse-minibuffer-check click)
  27456. +  (let ((click-posn (posn-point (event-start click)))
  27457. +    ;; Don't let a subsequent kill command append to this one:
  27458. +    ;; prevent setting this-command to kill-region.
  27459. +    (this-command this-command))
  27460. +    (if (> (mod mouse-selection-click-count 3) 0)
  27461. +    (if (not (and (eq last-command 'mouse-save-then-kill)
  27462. +              (equal click-posn
  27463. +                 (car (cdr-safe (cdr-safe mouse-save-then-kill-posn))))))
  27464. +        ;; Find both ends of the object selected by this click.
  27465. +        (let* ((range
  27466. +            (mouse-start-end click-posn click-posn
  27467. +                     mouse-selection-click-count)))
  27468. +          ;; Move whichever end is closer to the click.
  27469. +          ;; That's what xterm does, and it seems reasonable.
  27470. +          (if (< (abs (- click-posn (mark t)))
  27471. +             (abs (- click-posn (point))))
  27472. +          (set-mark (car range))
  27473. +        (goto-char (nth 1 range)))
  27474. +          ;; We have already put the old region in the kill ring.
  27475. +          ;; Replace it with the extended region.
  27476. +          ;; (It would be annoying to make a separate entry.)
  27477. +          (setcar kill-ring (buffer-substring (point) (mark t)))
  27478. +          (if interprogram-cut-function
  27479. +          (funcall interprogram-cut-function (car kill-ring)))
  27480. +          ;; Arrange for a repeated mouse-3 to kill this region.
  27481. +          (setq mouse-save-then-kill-posn
  27482. +            (list (car kill-ring) (point) click-posn))
  27483. +          (mouse-show-mark))
  27484. +      ;; If we click this button again without moving it,
  27485. +      ;; that time kill.
  27486. +      (mouse-save-then-kill-delete-region (point) (mark))
  27487. +      (setq mouse-selection-click-count 0)
  27488. +      (setq mouse-save-then-kill-posn nil))
  27489. +      (if (and (eq last-command 'mouse-save-then-kill)
  27490. +           mouse-save-then-kill-posn
  27491. +           (eq (car mouse-save-then-kill-posn) (car kill-ring))
  27492. +           (equal (cdr mouse-save-then-kill-posn) (list (point) click-posn)))
  27493. +      ;; If this is the second time we've called
  27494. +      ;; mouse-save-then-kill, delete the text from the buffer.
  27495. +      (progn
  27496. +        (mouse-save-then-kill-delete-region (point) (mark))
  27497. +        ;; After we kill, another click counts as "the first time".
  27498. +        (setq mouse-save-then-kill-posn nil))
  27499. +    (if (or (and (eq last-command 'mouse-save-then-kill)
  27500. +             mouse-save-then-kill-posn)
  27501. +        (and mark-active transient-mark-mode)
  27502. +        (and (eq last-command 'mouse-drag-region)
  27503. +             (or mark-even-if-inactive
  27504. +             (not transient-mark-mode))))
  27505. +        ;; We have a selection or suitable region, so adjust it.
  27506. +        (let* ((posn (event-start click))
  27507. +           (new (posn-point posn)))
  27508. +          (select-window (posn-window posn))
  27509. +          (if (numberp new)
  27510. +          (progn
  27511. +            ;; Move whichever end of the region is closer to the click.
  27512. +            ;; That is what xterm does, and it seems reasonable.
  27513. +            (if (< (abs (- new (point))) (abs (- new (mark t))))
  27514. +            (goto-char new)
  27515. +              (set-mark new))
  27516. +            (setq deactivate-mark nil)))
  27517. +          (setcar kill-ring (buffer-substring (point) (mark t)))
  27518. +          (if interprogram-cut-function
  27519. +          (funcall interprogram-cut-function (car kill-ring))))
  27520. +      ;; We just have point, so set mark here.
  27521. +      (mouse-set-mark-fast click)
  27522. +      (kill-ring-save (point) (mark t))
  27523. +      (mouse-show-mark))
  27524. +    (setq mouse-save-then-kill-posn
  27525. +          (list (car kill-ring) (point) click-posn))))))
  27526. +
  27527. +;(global-set-key [M-mouse-1] 'mouse-start-secondary)
  27528. +;(global-set-key [M-drag-mouse-1] 'mouse-set-secondary)
  27529. +;(global-set-key [M-down-mouse-1] 'mouse-drag-secondary)
  27530. +;(global-set-key [M-mouse-3] 'mouse-secondary-save-then-kill)
  27531. +;(global-set-key [M-mouse-2] 'mouse-yank-secondary)
  27532. +
  27533. +;;
  27534. +;; CHFIXME no secondary (add clipboard support here?)
  27535. +;;
  27536. +
  27537. +;; An overlay which records the current secondary selection
  27538. +;; or else is deleted when there is no secondary selection.
  27539. +;; May be nil.
  27540. +;(defvar mouse-secondary-overlay nil)
  27541. +
  27542. +;; A marker which records the specified first end for a secondary selection.
  27543. +;; May be nil.
  27544. +;(defvar mouse-secondary-start nil)
  27545. +;
  27546. +;(defun mouse-start-secondary (click)
  27547. +;  "Set one end of the secondary selection to the position clicked on.
  27548. +;Use \\[mouse-secondary-save-then-kill] to set the other end
  27549. +;and complete the secondary selection."
  27550. +;  (interactive "e")
  27551. +;  (mouse-minibuffer-check click)
  27552. +;  (let ((posn (event-start click)))
  27553. +;    (save-excursion
  27554. +;      (set-buffer (window-buffer (posn-window posn)))
  27555. +;      ;; Cancel any preexisting secondary selection.
  27556. +;      (if mouse-secondary-overlay
  27557. +;      (delete-overlay mouse-secondary-overlay))
  27558. +;      (if (numberp (posn-point posn))
  27559. +;      (progn
  27560. +;        (or mouse-secondary-start
  27561. +;        (setq mouse-secondary-start (make-marker)))
  27562. +;        (move-marker mouse-secondary-start (posn-point posn)))))))
  27563. +;
  27564. +;(defun mouse-set-secondary (click)
  27565. +;  "Set the secondary selection to the text that the mouse is dragged over.
  27566. +;This must be bound to a mouse drag event."
  27567. +;  (interactive "e")
  27568. +;  (mouse-minibuffer-check click)
  27569. +;  (let ((posn (event-start click))
  27570. +;    beg
  27571. +;    (end (event-end click)))
  27572. +;    (save-excursion
  27573. +;      (set-buffer (window-buffer (posn-window posn)))
  27574. +;      (if (numberp (posn-point posn))
  27575. +;      (setq beg (posn-point posn)))
  27576. +;      (if mouse-secondary-overlay
  27577. +;      (move-overlay mouse-secondary-overlay beg (posn-point end))
  27578. +;    (setq mouse-secondary-overlay (make-overlay beg (posn-point end))))
  27579. +;      (overlay-put mouse-secondary-overlay 'face 'secondary-selection))))
  27580. +;
  27581. +;(defun mouse-drag-secondary (start-event)
  27582. +;  "Set the secondary selection to the text that the mouse is dragged over.
  27583. +;Highlight the drag area as you move the mouse.
  27584. +;This must be bound to a button-down mouse event."
  27585. +;  (interactive "e")
  27586. +;  (mouse-minibuffer-check start-event)
  27587. +;  (let* ((start-posn (event-start start-event))
  27588. +;     (start-point (posn-point start-posn))
  27589. +;     (start-window (posn-window start-posn))
  27590. +;     (start-frame (window-frame start-window))
  27591. +;     (bounds (window-edges start-window))
  27592. +;     (top (nth 1 bounds))
  27593. +;     (bottom (if (window-minibuffer-p start-window)
  27594. +;             (nth 3 bounds)
  27595. +;           ;; Don't count the mode line.
  27596. +;           (1- (nth 3 bounds))))
  27597. +;     (click-count (1- (event-click-count start-event))))
  27598. +;    (save-excursion
  27599. +;      (set-buffer (window-buffer start-window))
  27600. +;      (setq mouse-selection-click-count click-count)
  27601. +;      (or mouse-secondary-overlay
  27602. +;      (setq mouse-secondary-overlay
  27603. +;        (make-overlay (point) (point))))
  27604. +;      (overlay-put mouse-secondary-overlay 'face 'secondary-selection)
  27605. +;      (if (> (mod click-count 3) 0)
  27606. +;      ;; Double or triple press: make an initial selection
  27607. +;      ;; of one word or line.
  27608. +;      (let ((range (mouse-start-end start-point start-point click-count)))
  27609. +;        (set-marker mouse-secondary-start nil)
  27610. +;        (move-overlay mouse-secondary-overlay 1 1
  27611. +;              (window-buffer start-window))
  27612. +;        (move-overlay mouse-secondary-overlay (car range) (nth 1 range)
  27613. +;              (window-buffer start-window)))
  27614. +;    ;; Single-press: cancel any preexisting secondary selection.
  27615. +;    (or mouse-secondary-start
  27616. +;        (setq mouse-secondary-start (make-marker)))
  27617. +;    (set-marker mouse-secondary-start start-point)
  27618. +;    (delete-overlay mouse-secondary-overlay))
  27619. +;      (let (event end end-point)
  27620. +;    (track-mouse
  27621. +;      (while (progn
  27622. +;           (setq event (read-event))
  27623. +;           (or (mouse-movement-p event)
  27624. +;               (eq (car-safe event) 'switch-frame)))
  27625. +;
  27626. +;        (if (eq (car-safe event) 'switch-frame)
  27627. +;        nil
  27628. +;          (setq end (event-end event)
  27629. +;            end-point (posn-point end))
  27630. +;          (cond
  27631. +;
  27632. +;           ;; Ignore switch-frame events.
  27633. +;           ((eq (car-safe event) 'switch-frame))
  27634. +;
  27635. +;           ;; Are we moving within the original window?
  27636. +;           ((and (eq (posn-window end) start-window)
  27637. +;             (integer-or-marker-p end-point))
  27638. +;        (if (/= start-point end-point)
  27639. +;            (set-marker mouse-secondary-start nil))
  27640. +;        (let ((range (mouse-start-end start-point end-point
  27641. +;                          click-count)))
  27642. +;          (move-overlay mouse-secondary-overlay
  27643. +;                (car range) (nth 1 range))))
  27644. +;               (t
  27645. +;                (let ((mouse-row (cdr (cdr (mouse-position)))))
  27646. +;                  (cond
  27647. +;                   ((null mouse-row))
  27648. +;                   ((< mouse-row top)
  27649. +;                    (mouse-scroll-subr
  27650. +;                     (- mouse-row top) mouse-secondary-overlay start-point))
  27651. +;                   ((and (not (eobp))
  27652. +;                         (>= mouse-row bottom))
  27653. +;                    (mouse-scroll-subr (1+ (- mouse-row bottom))
  27654. +;                                       mouse-secondary-overlay start-point)))))))))
  27655. +;
  27656. +;    (if (and (eq (get (event-basic-type event) 'event-kind) 'mouse-click)
  27657. +;         (eq (posn-window (event-end event)) start-window)
  27658. +;         (numberp (posn-point (event-end event))))
  27659. +;        (if (marker-position mouse-secondary-start)
  27660. +;        (save-window-excursion
  27661. +;          (delete-overlay mouse-secondary-overlay)
  27662. +;          (x-set-selection 'SECONDARY nil)
  27663. +;          (select-window start-window)
  27664. +;          (save-excursion
  27665. +;            (goto-char mouse-secondary-start)
  27666. +;            (sit-for 1)))
  27667. +;          (x-set-selection
  27668. +;           'SECONDARY
  27669. +;           (buffer-substring (overlay-start mouse-secondary-overlay)
  27670. +;                 (overlay-end mouse-secondary-overlay)))))))))
  27671. +;
  27672. +;(defun mouse-yank-secondary (click)
  27673. +;  "Insert the secondary selection at the position clicked on.
  27674. +;Move point to the end of the inserted text.
  27675. +;If `mouse-yank-at-point' is non-nil, insert at point
  27676. +;regardless of where you click."
  27677. +;  (interactive "e")
  27678. +;  (or mouse-yank-at-point (mouse-set-point click))
  27679. +;  (insert (x-get-selection 'SECONDARY)))
  27680. +;
  27681. +;(defun mouse-kill-secondary ()
  27682. +;  "Kill the text in the secondary selection.
  27683. +;This is intended more as a keyboard command than as a mouse command
  27684. +;but it can work as either one.
  27685. +;
  27686. +;The current buffer (in case of keyboard use), or the buffer clicked on,
  27687. +;must be the one that the secondary selection is in.  This requirement
  27688. +;is to prevent accidents."
  27689. +;  (interactive)
  27690. +;  (let* ((keys (this-command-keys))
  27691. +;     (click (elt keys (1- (length keys)))))
  27692. +;    (or (eq (overlay-buffer mouse-secondary-overlay)
  27693. +;        (if (listp click)
  27694. +;        (window-buffer (posn-window (event-start click)))
  27695. +;          (current-buffer)))
  27696. +;    (error "Select or click on the buffer where the secondary selection is")))
  27697. +;  (save-excursion
  27698. +;    (set-buffer (overlay-buffer mouse-secondary-overlay))
  27699. +;    (kill-region (overlay-start mouse-secondary-overlay)
  27700. +;         (overlay-end mouse-secondary-overlay)))
  27701. +;  (delete-overlay mouse-secondary-overlay)
  27702. +;  (x-set-selection 'SECONDARY nil)
  27703. +;  (setq mouse-secondary-overlay nil))
  27704. +;
  27705. +;(defun mouse-secondary-save-then-kill (click)
  27706. +;  "Save text to point in kill ring; the second time, kill the text.
  27707. +;You must use this in a buffer where you have recently done \\[mouse-start-secondary].
  27708. +;If the text between where you did \\[mouse-start-secondary] and where
  27709. +;you use this command matches the text at the front of the kill ring,
  27710. +;this command deletes the text.
  27711. +;Otherwise, it adds the text to the kill ring, like \\[kill-ring-save],
  27712. +;which prepares for a second click with this command to delete the text.
  27713. +;
  27714. +;If you have already made a secondary selection in that buffer,
  27715. +;this command extends or retracts the selection to where you click.
  27716. +;If you do this again in a different position, it extends or retracts
  27717. +;again.  If you do this twice in the same position, it kills the selection."
  27718. +;  (interactive "e")
  27719. +;  (mouse-minibuffer-check click)
  27720. +;  (let ((posn (event-start click))
  27721. +;    (click-posn (posn-point (event-start click)))
  27722. +;    ;; Don't let a subsequent kill command append to this one:
  27723. +;    ;; prevent setting this-command to kill-region.
  27724. +;    (this-command this-command))
  27725. +;    (or (eq (window-buffer (posn-window posn))
  27726. +;        (or (and mouse-secondary-overlay
  27727. +;             (overlay-buffer mouse-secondary-overlay))
  27728. +;        (if mouse-secondary-start
  27729. +;            (marker-buffer mouse-secondary-start))))
  27730. +;    (error "Wrong buffer"))
  27731. +;    (save-excursion
  27732. +;      (set-buffer (window-buffer (posn-window posn)))
  27733. +;      (if (> (mod mouse-selection-click-count 3) 0)
  27734. +;      (if (not (and (eq last-command 'mouse-secondary-save-then-kill)
  27735. +;            (equal click-posn
  27736. +;                   (car (cdr-safe (cdr-safe mouse-save-then-kill-posn))))))
  27737. +;          ;; Find both ends of the object selected by this click.
  27738. +;          (let* ((range
  27739. +;              (mouse-start-end click-posn click-posn
  27740. +;                       mouse-selection-click-count)))
  27741. +;        ;; Move whichever end is closer to the click.
  27742. +;        ;; That's what xterm does, and it seems reasonable.
  27743. +;        (if (< (abs (- click-posn (overlay-start mouse-secondary-overlay)))
  27744. +;               (abs (- click-posn (overlay-end mouse-secondary-overlay))))
  27745. +;            (move-overlay mouse-secondary-overlay (car range)
  27746. +;                  (overlay-end mouse-secondary-overlay))
  27747. +;          (move-overlay mouse-secondary-overlay
  27748. +;                (overlay-start mouse-secondary-overlay)
  27749. +;                (nth 1 range)))
  27750. +;        ;; We have already put the old region in the kill ring.
  27751. +;        ;; Replace it with the extended region.
  27752. +;        ;; (It would be annoying to make a separate entry.)
  27753. +;        (setcar kill-ring (buffer-substring
  27754. +;                   (overlay-start mouse-secondary-overlay)
  27755. +;                   (overlay-end mouse-secondary-overlay)))
  27756. +;        (if interprogram-cut-function
  27757. +;            (funcall interprogram-cut-function (car kill-ring)))
  27758. +;        ;; Arrange for a repeated mouse-3 to kill this region.
  27759. +;        (setq mouse-save-then-kill-posn
  27760. +;              (list (car kill-ring) (point) click-posn)))
  27761. +;        ;; If we click this button again without moving it,
  27762. +;        ;; that time kill.
  27763. +;        (progn
  27764. +;          (mouse-save-then-kill-delete-region
  27765. +;           (overlay-start mouse-secondary-overlay)
  27766. +;           (overlay-end mouse-secondary-overlay))
  27767. +;          (setq mouse-save-then-kill-posn nil)
  27768. +;          (setq mouse-selection-click-count 0)
  27769. +;          (delete-overlay mouse-secondary-overlay)))
  27770. +;    (if (and (eq last-command 'mouse-secondary-save-then-kill)
  27771. +;         mouse-save-then-kill-posn
  27772. +;         (eq (car mouse-save-then-kill-posn) (car kill-ring))
  27773. +;         (equal (cdr mouse-save-then-kill-posn) (list (point) click-posn)))
  27774. +;        ;; If this is the second time we've called
  27775. +;        ;; mouse-secondary-save-then-kill, delete the text from the buffer.
  27776. +;        (progn
  27777. +;          (mouse-save-then-kill-delete-region
  27778. +;           (overlay-start mouse-secondary-overlay)
  27779. +;           (overlay-end mouse-secondary-overlay))
  27780. +;          (setq mouse-save-then-kill-posn nil)
  27781. +;          (delete-overlay mouse-secondary-overlay))
  27782. +;      (if (overlay-start mouse-secondary-overlay)
  27783. +;          ;; We have a selection, so adjust it.
  27784. +;          (progn
  27785. +;        (if (numberp click-posn)
  27786. +;            (progn
  27787. +;              ;; Move whichever end of the region is closer to the click.
  27788. +;              ;; That is what xterm does, and it seems reasonable.
  27789. +;              (if (< (abs (- click-posn (overlay-start mouse-secondary-overlay)))
  27790. +;                 (abs (- click-posn (overlay-end mouse-secondary-overlay))))
  27791. +;              (move-overlay mouse-secondary-overlay click-posn
  27792. +;                    (overlay-end mouse-secondary-overlay))
  27793. +;            (move-overlay mouse-secondary-overlay
  27794. +;                      (overlay-start mouse-secondary-overlay)
  27795. +;                      click-posn))
  27796. +;              (setq deactivate-mark nil)))
  27797. +;        (setcar kill-ring (buffer-substring
  27798. +;                   (overlay-start mouse-secondary-overlay)
  27799. +;                   (overlay-end mouse-secondary-overlay)))
  27800. +;        (if interprogram-cut-function
  27801. +;            (funcall interprogram-cut-function (car kill-ring))))
  27802. +;        (if mouse-secondary-start
  27803. +;        ;; All we have is one end of a selection,
  27804. +;        ;; so put the other end here.
  27805. +;        (let ((start (+ 0 mouse-secondary-start)))
  27806. +;          (kill-ring-save start click-posn)
  27807. +;          (if mouse-secondary-overlay
  27808. +;              (move-overlay mouse-secondary-overlay start click-posn)
  27809. +;            (setq mouse-secondary-overlay (make-overlay start click-posn)))
  27810. +;          (overlay-put mouse-secondary-overlay 'face 'secondary-selection))))
  27811. +;      (setq mouse-save-then-kill-posn
  27812. +;        (list (car kill-ring) (point) click-posn))))
  27813. +;      (x-set-selection 'SECONDARY
  27814. +;               (if (overlay-buffer mouse-secondary-overlay)
  27815. +;               (buffer-substring
  27816. +;                (overlay-start mouse-secondary-overlay)
  27817. +;                (overlay-end mouse-secondary-overlay)))))))
  27818. +
  27819. +; CHFIXME: no menus yet
  27820. +
  27821. +;(defun mouse-buffer-menu (event)
  27822. +;  "Pop up a menu of buffers for selection with the mouse.
  27823. +;This switches buffers in the window that you clicked on,
  27824. +;and selects that window."
  27825. +;  (interactive "e")
  27826. +;  (mouse-minibuffer-check event)
  27827. +;  (let ((menu
  27828. +;     (list "Buffer Menu"
  27829. +;           (cons "Select Buffer"
  27830. +;             (let ((tail (buffer-list))
  27831. +;               (maxbuf 0)
  27832. +;               head)
  27833. +;               (while tail
  27834. +;             (or (eq ?\ (aref (buffer-name (car tail)) 0))
  27835. +;                 (setq maxbuf
  27836. +;                   (max maxbuf
  27837. +;                    (length (buffer-name (car tail))))))
  27838. +;             (setq tail (cdr tail)))
  27839. +;               (setq tail (buffer-list))
  27840. +;               (while tail
  27841. +;             (let ((elt (car tail)))
  27842. +;               (if (not (string-match "^ "
  27843. +;                          (buffer-name elt)))
  27844. +;                   (setq head (cons
  27845. +;                       (cons
  27846. +;                        (format
  27847. +;                         (format "%%%ds  %%s%%s  %%s"
  27848. +;                             maxbuf)
  27849. +;                         (buffer-name elt)
  27850. +;                         (if (buffer-modified-p elt)
  27851. +;                         "*" " ")
  27852. +;                         (save-excursion
  27853. +;                           (set-buffer elt)
  27854. +;                           (if buffer-read-only "%" " "))
  27855. +;                         (or (buffer-file-name elt) ""))
  27856. +;                        elt)
  27857. +;                       head))))
  27858. +;             (setq tail (cdr tail)))
  27859. +;               (reverse head))))))
  27860. +;    (let ((buf (x-popup-menu event menu))
  27861. +;      (window (posn-window (event-start event))))
  27862. +;      (if buf
  27863. +;      (progn
  27864. +;        (or (framep window) (select-window window))
  27865. +;        (switch-to-buffer buf))))))
  27866. +
  27867. +;; Choose a completion with the mouse.
  27868. +
  27869. +(defun mouse-choose-completion (event)
  27870. +  "Click on an alternative in the `*Completions*' buffer to choose it."
  27871. +  (interactive "e")
  27872. +  (let ((buffer (window-buffer))
  27873. +        choice)
  27874. +    (save-excursion
  27875. +      (set-buffer (window-buffer (posn-window (event-start event))))
  27876. +      (if completion-reference-buffer
  27877. +      (setq buffer completion-reference-buffer))
  27878. +      (save-excursion
  27879. +    (goto-char (posn-point (event-start event)))
  27880. +    (let (beg end)
  27881. +      (skip-chars-forward "^ \t\n")
  27882. +      (while (looking-at " [^ \n\t]")
  27883. +        (forward-char 1)
  27884. +        (skip-chars-forward "^ \t\n"))
  27885. +      (setq end (point))
  27886. +      (skip-chars-backward "^ \t\n")
  27887. +      (while (and (= (preceding-char) ?\ )
  27888. +              (not (and (> (point) (1+ (point-min)))
  27889. +                (= (char-after (- (point) 2)) ?\ ))))
  27890. +        (backward-char 1)
  27891. +        (skip-chars-backward "^ \t\n"))
  27892. +      (setq beg (point))
  27893. +      (setq choice (buffer-substring beg end)))))
  27894. +    (let ((owindow (selected-window)))
  27895. +      (select-window (posn-window (event-start event)))
  27896. +      (bury-buffer)
  27897. +      (select-window owindow))
  27898. +    (choose-completion-string choice buffer)))
  27899. +
  27900. +;; Font selection.
  27901. +
  27902. +;(defun font-menu-add-default ()
  27903. +;  (let* ((default (cdr (assq 'font (frame-parameters (selected-frame)))))
  27904. +;     (font-alist x-fixed-font-alist)
  27905. +;     (elt (or (assoc "Misc" font-alist) (nth 1 font-alist))))
  27906. +;    (if (assoc "Default" elt)
  27907. +;    (delete (assoc "Default" elt) elt))
  27908. +;    (setcdr elt
  27909. +;        (cons (list "Default"
  27910. +;            (cdr (assq 'font (frame-parameters (selected-frame)))))
  27911. +;          (cdr elt)))))
  27912. +;
  27913. +;(defvar x-fixed-font-alist
  27914. +;  '("Font menu"
  27915. +;    ("Misc"
  27916. +;     ("6x10" "-misc-fixed-medium-r-normal--10-100-75-75-c-60-*-1" "6x10")
  27917. +;     ("6x12" "-misc-fixed-medium-r-semicondensed--12-110-75-75-c-60-*-1" "6x12")
  27918. +;     ("6x13" "-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-*-1" "6x13")
  27919. +;     ("lucida 13"
  27920. +;      "-b&h-lucidatypewriter-medium-r-normal-sans-0-0-0-0-m-0-*-1")
  27921. +;     ("7x13" "-misc-fixed-medium-r-normal--13-120-75-75-c-70-*-1" "7x13")
  27922. +;     ("7x14" "-misc-fixed-medium-r-normal--14-130-75-75-c-70-*-1" "7x14")
  27923. +;     ("9x15" "-misc-fixed-medium-r-normal--15-140-*-*-c-*-*-1" "9x15")
  27924. +;     ("")
  27925. +;     ("clean 8x8" "-schumacher-clean-medium-r-normal--*-80-*-*-c-*-*-1")
  27926. +;     ("clean 8x14" "-schumacher-clean-medium-r-normal--*-140-*-*-c-*-*-1")
  27927. +;     ("clean 8x10" "-schumacher-clean-medium-r-normal--*-100-*-*-c-*-*-1")
  27928. +;     ("clean 8x16" "-schumacher-clean-medium-r-normal--*-160-*-*-c-*-*-1")
  27929. +;     ("")
  27930. +;     ("sony 8x16" "-sony-fixed-medium-r-normal--16-120-100-100-c-80-*-1")
  27931. +;     ("")
  27932. +;     ("fixed" "fixed")
  27933. +;     ("10x20" "10x20")
  27934. +;     ("11x18" "11x18")
  27935. +;     ("12x24" "12x24"))
  27936. +;;;; We don't seem to have these; who knows what they are.
  27937. +;;;;    ("fg-18" "fg-18")
  27938. +;;;;    ("fg-25" "fg-25")
  27939. +;;;;    ("lucidasanstypewriter-12" "lucidasanstypewriter-12")
  27940. +;;;;    ("lucidasanstypewriter-bold-14" "lucidasanstypewriter-bold-14")
  27941. +;;;;    ("lucidasanstypewriter-bold-24" "lucidasanstypewriter-bold-24")
  27942. +;;;;    ("lucidatypewriter-bold-r-24" "-b&h-lucidatypewriter-bold-r-normal-sans-24-240-75-75-m-140-iso8859-1")
  27943. +;;;;    ("fixed-medium-20" "-misc-fixed-medium-*-*-*-20-*-*-*-*-*-*-*")
  27944. +;    ("Courier"
  27945. +;     ("8" "-adobe-courier-medium-r-normal--*-80-*-*-m-*-iso8859-1")
  27946. +;     ("10" "-adobe-courier-medium-r-normal--*-100-*-*-m-*-iso8859-1")
  27947. +;     ("12" "-adobe-courier-medium-r-normal--*-120-*-*-m-*-iso8859-1")
  27948. +;     ("14" "-adobe-courier-medium-r-normal--*-140-*-*-m-*-iso8859-1")
  27949. +;     ("18" "-adobe-courier-medium-r-normal--*-180-*-*-m-*-iso8859-1")
  27950. +;     ("24" "-adobe-courier-medium-r-normal--*-240-*-*-m-*-iso8859-1")
  27951. +;     ("8 bold" "-adobe-courier-bold-r-normal--*-80-*-*-m-*-iso8859-1")
  27952. +;     ("10 bold" "-adobe-courier-bold-r-normal--*-100-*-*-m-*-iso8859-1")
  27953. +;     ("12 bold" "-adobe-courier-bold-r-normal--*-120-*-*-m-*-iso8859-1")
  27954. +;     ("14 bold" "-adobe-courier-bold-r-normal--*-140-*-*-m-*-iso8859-1")
  27955. +;     ("18 bold" "-adobe-courier-bold-r-normal--*-180-*-*-m-*-iso8859-1")
  27956. +;     ("24 bold" "-adobe-courier-bold-r-normal--*-240-*-*-m-*-iso8859-1")
  27957. +;     ("8 slant" "-adobe-courier-medium-o-normal--*-80-*-*-m-*-iso8859-1")
  27958. +;     ("10 slant" "-adobe-courier-medium-o-normal--*-100-*-*-m-*-iso8859-1")
  27959. +;     ("12 slant" "-adobe-courier-medium-o-normal--*-120-*-*-m-*-iso8859-1")
  27960. +;     ("14 slant" "-adobe-courier-medium-o-normal--*-140-*-*-m-*-iso8859-1")
  27961. +;     ("18 slant" "-adobe-courier-medium-o-normal--*-180-*-*-m-*-iso8859-1")
  27962. +;     ("24 slant" "-adobe-courier-medium-o-normal--*-240-*-*-m-*-iso8859-1")
  27963. +;     ("8 bold slant" "-adobe-courier-bold-o-normal--*-80-*-*-m-*-iso8859-1")
  27964. +;     ("10 bold slant" "-adobe-courier-bold-o-normal--*-100-*-*-m-*-iso8859-1")
  27965. +;     ("12 bold slant" "-adobe-courier-bold-o-normal--*-120-*-*-m-*-iso8859-1")
  27966. +;     ("14 bold slant" "-adobe-courier-bold-o-normal--*-140-*-*-m-*-iso8859-1")
  27967. +;     ("18 bold slant" "-adobe-courier-bold-o-normal--*-180-*-*-m-*-iso8859-1")
  27968. +;     ("24 bold slant" "-adobe-courier-bold-o-normal--*-240-*-*-m-*-iso8859-1"))
  27969. +;    )
  27970. +;  "X fonts suitable for use in Emacs.")
  27971. +;
  27972. +;(defun mouse-set-font (&rest fonts)
  27973. +;  "Select an emacs font from a list of known good fonts"
  27974. +;  (interactive
  27975. +;   (x-popup-menu last-nonmenu-event x-fixed-font-alist))
  27976. +;  (if fonts
  27977. +;      (let (font)
  27978. +;    (while fonts
  27979. +;      (condition-case nil
  27980. +;          (progn
  27981. +;        (set-default-font (car fonts))
  27982. +;        (setq font (car fonts))
  27983. +;        (setq fonts nil))
  27984. +;        (error
  27985. +;         (setq fonts (cdr fonts)))))
  27986. +;    (if (null font)
  27987. +;        (error "Font not found")))))
  27988. +(defun mouse-set-font ()
  27989. +  "Select and set an emacs font from the system list of fonts."
  27990. +  (interactive)
  27991. +  (let ((the-font (amiga-popup-font-request)))
  27992. +    (if the-font
  27993. +    (amiga-set-font (car the-font) (cdr the-font)))))
  27994. +
  27995. +;;; Bindings for mouse commands.
  27996. +
  27997. +;(define-key global-map [down-mouse-1] 'mouse-drag-region) ; CHFIXME: no overlay
  27998. +(global-set-key [mouse-1]    'mouse-set-point)
  27999. +(global-set-key [drag-mouse-1]    'mouse-set-region)
  28000. +
  28001. +;; These are tested for in mouse-drag-region.
  28002. +(global-set-key [double-mouse-1] 'mouse-set-point)
  28003. +(global-set-key [triple-mouse-1] 'mouse-set-point)
  28004. +
  28005. +(global-set-key [mouse-2]    'mouse-yank-at-click)
  28006. +(global-set-key [mouse-3]    'mouse-save-then-kill)
  28007. +
  28008. +;; By binding these to down-going events, we let the user use the up-going
  28009. +;; event to make the selection, saving a click.
  28010. +;(global-set-key [C-down-mouse-1]    'mouse-buffer-menu)
  28011. +(global-set-key [C-down-mouse-1]    'mouse-set-font)
  28012. +
  28013. +;; Replaced with dragging mouse-1
  28014. +;; (global-set-key [S-mouse-1]    'mouse-set-mark)
  28015. +
  28016. +(global-set-key [mode-line mouse-1] 'mouse-select-window)
  28017. +(global-set-key [mode-line mouse-2] 'mouse-delete-other-windows)
  28018. +(global-set-key [mode-line mouse-3] 'mouse-delete-window)
  28019. +(global-set-key [mode-line C-mouse-2] 'mouse-split-window-horizontally)
  28020. +
  28021. +;;
  28022. +;; some old amiga-mouse like bindings
  28023. +
  28024. +(defun amiga-mouse-iconify (arg) (amiga-iconify))
  28025. +
  28026. +(global-set-key [S-mouse-1] 'mouse-set-mark)
  28027. +(global-set-key [C-mouse-1] 'mouse-save-then-kill) ;; CHFIXME ok?
  28028. +(global-set-key [M-mouse-2] 'mouse-set-region)
  28029. +(global-set-key [S-mouse-2] 'amiga-mouse-iconify)
  28030. +
  28031. +(provide 'amiga-mouse)
  28032. +
  28033. +;;; amiga-mouse.el ends here
  28034. diff -rup --new-file baseline/fsf/emacs/lisp/compile.el amiga/fsf/emacs/lisp/compile.el
  28035. --- baseline/fsf/emacs/lisp/compile.el    Mon Sep  5 10:22:05 1994
  28036. +++ amiga/fsf/emacs/lisp/compile.el    Sat Sep 28 00:00:00 1996
  28037. @@ -186,6 +186,20 @@ of[ \t]+\"?\\([^\":\n]+\\)\"?:" 3 2)
  28038.      ;; GNU message with program name and column number.
  28039.      ("\n\\([^ \n\t:]+\\):\\([^ \n\t:]+\\):\
  28040.  \\([0-9]+\\):\\([0-9]+\\)[: \t]" 2 3 4)
  28041. +
  28042. +    ;; Compiler Toolkit cocktail
  28043. +    ;; "ctla.pars", 151, 38: Error       illegal character: ;
  28044. +    ;; "ctla.pars", 167,  1: Warning     node type not used: ModuleName
  28045. +    ;; CHFIXME: find out how to "or" functions
  28046. +    ("\n\\\"\\([^ \n\\\"]+\\)\\\",[ ]*\\([0-9]+\\),[ ]*\\([0-9]+\\): Error" 1 2 3)
  28047. +    ("\n\\\"\\([^ \n\\\"]+\\)\\\",[ ]*\\([0-9]+\\),[ ]*\\([0-9]+\\): Warning" 1 2 3)
  28048. +
  28049. +    ;; AmigaOS SAS/C Compiler 6.3
  28050. +    ;; amiga_dump.c 53 Error 72: conflict with previous declaration
  28051. +    ;; amiga_dump.c 164 Warning 72: conflict with previous declaration
  28052. +    ;; CHFIXME: find out how to "or" functions
  28053. +    ("\n\\([^ \n]+\\) \\([0-9]+\\) Warning" 1 2)
  28054. +    ("\n\\([^ \n]+\\) \\([0-9]+\\) Error" 1 2)
  28055.      )
  28056.    "Alist that specifies how to match errors in compiler output.
  28057.  Each element has the form (REGEXP FILE-IDX LINE-IDX [COLUMN-IDX]).
  28058. @@ -296,7 +310,9 @@ easily repeat a grep command."
  28059.    (interactive
  28060.     (list (read-from-minibuffer "Run grep (like this): "
  28061.                     grep-command nil nil 'grep-history)))
  28062. -  (compile-internal (concat command-args " /dev/null")
  28063. +  (compile-internal (concat command-args 
  28064. +                (if (eq system-type 'amigaos) " nil:"
  28065. +                  " /dev/null"))
  28066.              "No more grep hits" "grep"
  28067.              ;; Give it a simpler regexp to match.
  28068.              nil grep-regexp-alist))
  28069. diff -rup --new-file baseline/fsf/emacs/lisp/files.el amiga/fsf/emacs/lisp/files.el
  28070. --- baseline/fsf/emacs/lisp/files.el    Sun Aug 28 00:37:49 1994
  28071. +++ amiga/fsf/emacs/lisp/files.el    Sat Sep 28 00:00:00 1996
  28072. @@ -231,6 +231,15 @@ nil means ignore them; anything else mea
  28073.  The command \\[normal-mode] always obeys local-variables lists
  28074.  and ignores this variable.")
  28075.  
  28076. +(defconst backup-char (if (eq system-type 'amigaos) "!" "~")
  28077. +  "Character to add to file names to make backup names.")
  28078. +
  28079. +(defconst autosave-char (if (eq system-type 'amigaos) "@" "#")
  28080. +  "Character to add to file names to make autosave names.")
  28081. +
  28082. +(defconst bufferfile-char (if (eq system-type 'amigaos) "^" "%")
  28083. +  "Character to add to buffer names to make file names.")
  28084. +
  28085.  ;; Avoid losing in versions where CLASH_DETECTION is disabled.
  28086.  (or (fboundp 'lock-buffer)
  28087.      (defalias 'lock-buffer 'ignore))
  28088. @@ -986,7 +995,8 @@ If `enable-local-variables' is nil, this
  28089.            (let ((alist auto-mode-alist)
  28090.              (mode nil))
  28091.          ;; Find first matching alist entry.
  28092. -        (let ((case-fold-search (eq system-type 'vax-vms)))
  28093. +        (let ((case-fold-search (or (eq system-type 'vax-vms)
  28094. +                        (ed system-type 'amigaos))))
  28095.            (while (and (not mode) alist)
  28096.              (if (string-match (car (car alist)) name)
  28097.              (if (and (consp (cdr (car alist)))
  28098. @@ -1379,8 +1389,11 @@ the modes of the new file to agree with 
  28099.              (setq setmodes (file-modes backupname)))
  28100.          (file-error
  28101.           ;; If trouble writing the backup, write it in ~.
  28102. -         (setq backupname (expand-file-name "~/%backup%~"))
  28103. -         (message "Cannot write backup file; backing up in ~/%%backup%%~")
  28104. +         (setq backupname 
  28105. +               (expand-file-name (concat "~/" bufferfile-char "backup"
  28106. +                         bufferfile-char backup-char)))
  28107. +         (message "Cannot write backup file; backing up in ~/%sbackup%s%s"
  28108. +              bufferfile-char bufferfile-char backup-char)
  28109.           (sleep-for 1)
  28110.           (condition-case ()
  28111.               (copy-file real-file-name backupname t t)
  28112. @@ -1425,8 +1438,11 @@ we do not remove backup version numbers,
  28113.               (length name))
  28114.             (if keep-backup-version
  28115.                 (length name)
  28116. -             (or (string-match "\\.~[0-9]+~\\'" name)
  28117. -             (string-match "~\\'" name)
  28118. +             (or (string-match 
  28119. +              (concat "\\." backup-char
  28120. +                  "[0-9]+" backup-char "\\'") name)
  28121. +             (string-match 
  28122. +              (concat backup-char "\\'") name)
  28123.               (length name))))))))
  28124.  
  28125.  (defun make-backup-file-name (file)
  28126. @@ -1438,7 +1454,7 @@ This is a separate function so you can r
  28127.          (if (string-match "\\([^.]*\\)\\(\\..*\\)?" fn)
  28128.              (substring fn 0 (match-end 1)))
  28129.          ".bak"))
  28130. -    (concat file "~")))
  28131. +    (concat file backup-char)))
  28132.  
  28133.  (defun backup-file-name-p (file)
  28134.    "Return non-nil if FILE is a backup file name (numeric or not).
  28135. @@ -1446,7 +1462,7 @@ This is a separate function so you can r
  28136.  You may need to redefine `file-name-sans-versions' as well."
  28137.    (if (eq system-type 'ms-dos)
  28138.        (string-match "\\.bak$" file)
  28139. -    (string-match "~$" file)))
  28140. +    (string-match (concat backup-char "$") file)))
  28141.  
  28142.  ;; This is used in various files.
  28143.  ;; The usage of bv-length is not very clean,
  28144. @@ -1456,7 +1472,7 @@ You may need to redefine `file-name-sans
  28145.    "Given the name of a numeric backup file, return the backup number.
  28146.  Uses the free variable `bv-length', whose value should be
  28147.  the index in the name where the version number begins."
  28148. -  (if (and (string-match "[0-9]+~$" fn bv-length)
  28149. +  (if (and (string-match (concat "[0-9]+" backup-char "$") fn bv-length)
  28150.         (= (match-beginning 0) bv-length))
  28151.        (string-to-int (substring fn bv-length -1))
  28152.        0))
  28153. @@ -1469,7 +1485,7 @@ Value is a list whose car is the name fo
  28154.   and whose cdr is a list of old versions to consider deleting now."
  28155.    (if (eq version-control 'never)
  28156.        (list (make-backup-file-name fn))
  28157. -    (let* ((base-versions (concat (file-name-nondirectory fn) ".~"))
  28158. +    (let* ((base-versions (concat (file-name-nondirectory fn) "." backup-char))
  28159.         (bv-length (length base-versions))
  28160.         possibilities
  28161.         (versions nil)
  28162. @@ -1493,13 +1509,13 @@ Value is a list whose car is the name fo
  28163.       (setq possibilities nil)))
  28164.        (if (not deserve-versions-p)
  28165.        (list (make-backup-file-name fn))
  28166. -    (cons (concat fn ".~" (int-to-string (1+ high-water-mark)) "~")
  28167. +    (cons (concat fn "." backup-char (int-to-string (1+ high-water-mark)) backup-char)
  28168.            (if (and (> number-to-delete 0)
  28169.                         ;; Delete nothing if there is overflow
  28170.                 ;; in the number of versions to keep.
  28171.                 (>= (+ kept-new-versions kept-old-versions -1) 0))
  28172.            (mapcar (function (lambda (n)
  28173. -                      (concat fn ".~" (int-to-string n) "~")))
  28174. +                      (concat fn "." backup-char (int-to-string n) backup-char)))
  28175.                (let ((v (nthcdr kept-old-versions versions)))
  28176.                  (rplacd (nthcdr (1- number-to-delete) v) ())
  28177.                  v))))))))
  28178. @@ -1660,6 +1676,7 @@ the last real save, but optional arg FOR
  28179.          (setq nogood t)
  28180.          ;; Find the temporary name to write under.
  28181.          (while nogood
  28182. +          (setq tempname (format (concat "%s" autosave-char "tmp" autosave-char "%d" dir i)))
  28183.            (setq tempname (format "%s#tmp#%d" dir i))
  28184.            (setq nogood (file-exists-p tempname))
  28185.            (setq i (1+ i)))
  28186. @@ -1686,6 +1703,9 @@ the last real save, but optional arg FOR
  28187.             ;; Change the mode back, after writing.
  28188.             (setq setmodes (file-modes buffer-file-name))
  28189.             (set-file-modes buffer-file-name 511)))
  28190. +    (if (eq system-type 'amigaos)
  28191. +        (if amiga-create-icons
  28192. +        (amiga-put-icon buffer-file-name nil)))
  28193.      (write-region (point-min) (point-max)
  28194.                buffer-file-name nil t)))
  28195.      setmodes))
  28196. @@ -2008,6 +2028,12 @@ Also rename any existing auto save file,
  28197.           (recent-auto-save-p))
  28198.      (rename-file osave buffer-auto-save-file-name t))))
  28199.  
  28200. +;;; VM (the mailreader) creates nasty buffer names with ":"s in them.
  28201. +;;; After much discussion with the VM maintainers, we trap there here.
  28202. +;;; They assert that Emacs should always generate a valid name.  This
  28203. +;;; may also be needed for VM to work on DOS and VMS.  The function
  28204. +;;; amiga-auto-save-check performs this function.
  28205. +
  28206.  (defun make-auto-save-file-name ()
  28207.    "Return file name to use for auto-saves of current buffer.
  28208.  Does not consider `auto-save-visited-file-name' as that variable is checked
  28209. @@ -2015,9 +2041,9 @@ before calling this function.  You can r
  28210.  See also `auto-save-file-name-p'."
  28211.    (if buffer-file-name
  28212.        (concat (file-name-directory buffer-file-name)
  28213. -          "#"
  28214. +          autosave-char
  28215.            (file-name-nondirectory buffer-file-name)
  28216. -          "#")
  28217. +          autosave-char)
  28218.  
  28219.      ;; Deal with buffers that don't have any associated files.  (Mail
  28220.      ;; mode tends to create a good number of these.)
  28221. @@ -2039,12 +2065,19 @@ See also `auto-save-file-name-p'."
  28222.              (substring buffer-name (match-end 0))))
  28223.      (setq limit (1+ (match-end 0))))
  28224.  
  28225. -      (expand-file-name (format "#%s#%s#" buffer-name (make-temp-name ""))))))
  28226. +      ;; For non-file bfr, use bfr name and Emacs pid.
  28227. +    (let ((file-name 
  28228. +          (format (concat autosave-char "%s" 
  28229. +                          autosave-char "%s"
  28230. +                          autosave-char) (buffer-name) (make-temp-name ""))))
  28231. +      (if (eq system-type 'amigaos)
  28232. +          (setq file-name (amiga-auto-save-check file-name)))
  28233. +    (expand-file-name file-name)))))
  28234.  
  28235.  (defun auto-save-file-name-p (filename)
  28236.    "Return non-nil if FILENAME can be yielded by `make-auto-save-file-name'.
  28237.  FILENAME should lack slashes.  You can redefine this for customization."
  28238. -  (string-match "^#.*#$" filename))
  28239. +  (string-match (concat "^" autosave-char ".*" autosave-char "$") filename))
  28240.  
  28241.  (defconst list-directory-brief-switches
  28242.    (if (eq system-type 'vax-vms) "" "-CF")
  28243. Binary files baseline/fsf/emacs/lisp/files.elc and amiga/fsf/emacs/lisp/files.elc differ
  28244. diff -rup --new-file baseline/fsf/emacs/lisp/loadup.el amiga/fsf/emacs/lisp/loadup.el
  28245. --- baseline/fsf/emacs/lisp/loadup.el    Sat Jul  9 12:03:57 1994
  28246. +++ amiga/fsf/emacs/lisp/loadup.el    Sat Sep 28 00:00:00 1996
  28247. @@ -59,7 +59,11 @@
  28248.        (garbage-collect)
  28249.        (load "menu-bar")
  28250.        (load "scroll-bar")
  28251. -      (load "select")))
  28252. +      (load "select"))
  28253. +  (if (eq system-type 'amigaos)
  28254. +      (progn
  28255. +      (load "amiga-menu-bar")
  28256. +      )))
  28257.  (garbage-collect)
  28258.  (load "paths.el")  ;Don't get confused if someone compiled paths by mistake.
  28259.  (garbage-collect)
  28260. @@ -106,6 +110,10 @@
  28261.        (garbage-collect)
  28262.        (load "disp-table") ; needed to setup ibm-pc char set, see internal.el
  28263.        (garbage-collect)))
  28264. +(if (eq system-type 'amigaos)
  28265. +    (progn
  28266. +      (garbage-collect)
  28267. +      (load "amiga-init")))
  28268.  (if (fboundp 'atan)    ; preload some constants and 
  28269.      (progn        ; floating pt. functions if 
  28270.        (garbage-collect)    ; we have float support.
  28271. @@ -154,14 +162,21 @@
  28272.      (setq name (concat (downcase (substring name 0 (match-beginning 0)))
  28273.                 "-"
  28274.                 (substring name (match-end 0)))))
  28275. -      (if (eq system-type 'ms-dos)
  28276. -      (setq name (expand-file-name "../etc/DOC"))
  28277. -    (setq name (concat (expand-file-name "../etc/DOC-") name))
  28278. +      (if (eq system-type 'amigaos)
  28279. +      (progn
  28280. +        (setq name (concat (expand-file-name "/etc/DOC-") name))
  28281. +        (if (file-exists-p name)
  28282. +        (delete-file name))
  28283. +        (copy-file (expand-file-name "/etc/DOC") name t))
  28284. +    
  28285. +    (if (eq system-type 'ms-dos)
  28286. +        (setq name (expand-file-name "../etc/DOC"))
  28287. +      (setq name (concat (expand-file-name "../etc/DOC-") name)))
  28288.      (if (file-exists-p name)
  28289.          (delete-file name))
  28290.      (copy-file (expand-file-name "../etc/DOC") name t))
  28291.        (Snarf-documentation (file-name-nondirectory name)))
  28292. -    (Snarf-documentation "DOC"))
  28293. +  (Snarf-documentation "DOC"))
  28294.  (message "Finding pointers to doc strings...done")
  28295.  
  28296.  ;Note: You can cause additional libraries to be preloaded
  28297. @@ -181,31 +196,37 @@
  28298.        (message "Dumping data as file temacs.dump")
  28299.        (dump-emacs "temacs.dump" "temacs")
  28300.        (kill-emacs))
  28301. -      (let ((name (concat "emacs-" emacs-version)))
  28302. -    (while (string-match "[^-+_.a-zA-Z0-9]+" name)
  28303. -      (setq name (concat (downcase (substring name 0 (match-beginning 0)))
  28304. -                 "-"
  28305. -                 (substring name (match-end 0)))))
  28306. -    (if (eq system-type 'ms-dos)
  28307. -        (message "Dumping under the name emacs")
  28308. -      (message "Dumping under names emacs and %s" name)))
  28309. -      (condition-case ()
  28310. -      (delete-file "emacs")
  28311. -    (file-error nil))
  28312. -      ;; We used to dump under the name xemacs, but that occasionally
  28313. -      ;; confused people installing Emacs (they'd install the file
  28314. -      ;; under the name `xemacs'), and it's inconsistent with every
  28315. -      ;; other GNU product's build process.
  28316. -      (dump-emacs "emacs" "temacs")
  28317. -      ;; Recompute NAME now, so that it isn't set when we dump.
  28318. -      (if (not (eq system-type 'ms-dos))
  28319. -      (let ((name (concat "emacs-" emacs-version)))
  28320. -        (while (string-match "[^-+_.a-zA-Z0-9]+" name)
  28321. -          (setq name (concat (downcase (substring name 0 (match-beginning 0)))
  28322. -                 "-"
  28323. +      (if (eq system-type 'amigaos)
  28324. +      (progn
  28325. +        (message "Dumping data as file /etc/EMACS-DATA")
  28326. +        (dump-emacs-data "/etc/EMACS-DATA")
  28327. +        (kill-emacs))
  28328. +    (let ((name (concat "emacs-" emacs-version)))
  28329. +      (while (string-match "[^-+_.a-zA-Z0-9]+" name)
  28330. +        (setq name (concat (downcase (substring name 0 (match-beginning 0)))
  28331. +                   "-"
  28332. +                   (substring name (match-end 0)))))
  28333. +      (if (eq system-type 'ms-dos)
  28334. +          (message "Dumping under the name emacs")
  28335. +        (message "Dumping under names emacs and %s" name)))
  28336. +    (condition-case ()
  28337. +        (delete-file "emacs")
  28338. +      (file-error nil))
  28339. +    ;; We used to dump under the name xemacs, but that occasionally
  28340. +    ;; confused people installing Emacs (they'd install the file
  28341. +    ;; under the name `xemacs'), and it's inconsistent with every
  28342. +    ;; other GNU product's build process.
  28343. +    (progn
  28344. +      (dump-emacs "emacs" "temacs")
  28345. +      ;; Recompute NAME now, so that it isn't set when we dump.
  28346. +      (if (not (eq system-type 'ms-dos))
  28347. +          (let ((name (concat "emacs-" emacs-version)))
  28348. +        (while (string-match "[^-+_.a-zA-Z0-9]+" name)
  28349. +          (setq name (concat (downcase (substring name 0 (match-beginning 0)))
  28350. +                     "-"
  28351.                   (substring name (match-end 0)))))
  28352. -        (add-name-to-file "emacs" name t)))
  28353. -      (kill-emacs)))
  28354. +        (add-name-to-file "emacs" name t)))
  28355. +      (kill-emacs)))))
  28356.  
  28357.  ;; Avoid error if user loads some more libraries now.
  28358.  (setq purify-flag nil)
  28359. diff -rup --new-file baseline/fsf/emacs/lisp/paths.el amiga/fsf/emacs/lisp/paths.el
  28360. --- baseline/fsf/emacs/lisp/paths.el    Tue Jul  5 11:31:46 1994
  28361. +++ amiga/fsf/emacs/lisp/paths.el    Sat Sep 28 00:00:00 1996
  28362. @@ -32,14 +32,14 @@
  28363.  ;;; Code:
  28364.  
  28365.  (defvar Info-default-directory-list
  28366. -  (let ((start (list "/usr/local/lib/info/"
  28367. +  (let ((start (list "gnuemacs-19.25:info/"
  28368.               ;; This comes second so that, if it is the same
  28369.               ;; as configure-info-directory (which is usually true)
  28370.               ;; and Emacs has been installed (also usually true)
  28371.               ;; then the list will end with two copies of this;
  28372.               ;; which means that the last dir file Info-insert-dir
  28373.               ;; finds will be the one in this directory.
  28374. -             "/usr/local/info/"))
  28375. +             "gnuemacs:info/"))
  28376.      (configdir (file-name-as-directory configure-info-directory)))
  28377.      (setq start (nconc start (list configdir)))
  28378.      start)
  28379. diff -rup --new-file baseline/fsf/emacs/lisp/sendmail.el amiga/fsf/emacs/lisp/sendmail.el
  28380. --- baseline/fsf/emacs/lisp/sendmail.el    Mon Aug  8 16:22:31 1994
  28381. +++ amiga/fsf/emacs/lisp/sendmail.el    Sat Sep 28 00:00:00 1996
  28382. @@ -459,21 +459,24 @@ the user from the mailer."
  28383.            (set-buffer errbuf)
  28384.            (erase-buffer))))
  28385.        (apply 'call-process-region
  28386. -         (append (list (point-min) (point-max)
  28387. -                   (if (boundp 'sendmail-program)
  28388. -                   sendmail-program
  28389. -                 "/usr/lib/sendmail")
  28390. -                   nil errbuf nil "-oi")
  28391. -             ;; Always specify who from,
  28392. -             ;; since some systems have broken sendmails.
  28393. -             (list "-f" (user-login-name))
  28394. +             (append (list (point-min) (point-max)
  28395. +                           (if (boundp 'sendmail-program)
  28396. +                               sendmail-program
  28397. +                             "/usr/lib/sendmail")
  28398. +                           nil errbuf nil)
  28399. +;;;                           "-oi" "-t")
  28400. +                     ;; Always specify who from,
  28401. +                     ;; since some systems have broken sendmails.
  28402. +;;;                     (list "-f" (user-login-name))
  28403.  ;;;             ;; Don't say "from root" if running under su.
  28404.  ;;;             (and (equal (user-real-login-name) "root")
  28405.  ;;;                  (list "-f" (user-login-name)))
  28406. -             (and mail-alias-file
  28407. -                  (list (concat "-oA" mail-alias-file)))
  28408. -             ;; These mean "report errors by mail"
  28409. -             ;; and "deliver in background".
  28410. +;;;                     (and mail-alias-file
  28411. +;;;                          (list (concat "-oA" mail-alias-file)))
  28412. +;;;                     ;; These mean "report errors by mail"
  28413. +;;;                     ;; and "deliver in background".
  28414. +;;;                     (if (null mail-interactive) '("-oem" "-odb"))
  28415. +                     ))
  28416.               (if (null mail-interactive) '("-oem" "-odb"))
  28417.               ;; Get the addresses from the message
  28418.               ;; unless this is a resend.
  28419. diff -rup --new-file baseline/fsf/emacs/lisp/startup.el amiga/fsf/emacs/lisp/startup.el
  28420. --- baseline/fsf/emacs/lisp/startup.el    Tue Aug  9 20:33:45 1994
  28421. +++ amiga/fsf/emacs/lisp/startup.el    Sat Sep 28 00:00:00 1996
  28422. @@ -326,6 +326,8 @@ specified by the LC_ALL, LC_CTYPE and LA
  28423.                  (concat "~" init-file-user "/_emacs"))
  28424.                 ((eq system-type 'vax-vms) 
  28425.                  "sys$login:.emacs")
  28426. +               ((eq system-type 'amigaos) 
  28427. +                "s:.emacs")
  28428.                 (t 
  28429.                  (concat "~" init-file-user "/.emacs"))))
  28430.              (load user-init-file t t t)
  28431. @@ -364,6 +366,10 @@ specified by the LC_ALL, LC_CTYPE and LA
  28432.      (set-buffer "*scratch*")
  28433.      (if (eq major-mode 'fundamental-mode)
  28434.          (funcall initial-major-mode))))
  28435. +  ;; On Amiga, initialise clipboard CHFIXME
  28436. +;  (if (eq system-type 'amigaos)
  28437. +;      (let ((clip (safe-amiga-paste)))
  28438. +;    (if clip (kill-add clip))))
  28439.    ;; Load library for our terminal type.
  28440.    ;; User init file can set term-file-prefix to nil to prevent this.
  28441.    (and term-file-prefix (not noninteractive) (not window-system)
  28442. Binary files baseline/fsf/emacs/lisp/startup.elc and amiga/fsf/emacs/lisp/startup.elc differ
  28443. diff -rup --new-file baseline/fsf/emacs/lisp/term/intuition-win.el amiga/fsf/emacs/lisp/term/intuition-win.el
  28444. --- baseline/fsf/emacs/lisp/term/intuition-win.el    Wed Dec 31 17:00:00 1969
  28445. +++ amiga/fsf/emacs/lisp/term/intuition-win.el    Sat Sep 28 00:00:00 1996
  28446. @@ -0,0 +1,50 @@
  28447. +;(setq stack-trace-on-error t) ; CHFIXME
  28448. +;(load "s:.emacs-menu" t t)
  28449. +(setq command-switch-alist (append '(("-fn" . amiga-handle-set-font)
  28450. +                     ("-fg" . amiga-handle-set-foreground)
  28451. +                     ("-bg" . amiga-handle-set-background)
  28452. +                     ("-geometry" . amiga-handle-set-geometry)
  28453. +                     ("-screen" . amiga-handle-set-screen))
  28454. +                   command-switch-alist))
  28455. +
  28456. +(defun amiga-handle-set-font (switch)
  28457. +  (condition-case err
  28458. +      (let ((wfont (car command-line-args-left))
  28459. +        (height (car (read-from-string (car (cdr command-line-args-left))))))
  28460. +    (setq command-line-args-left (cdr (cdr command-line-args-left)))
  28461. +    (amiga-set-font wfont height))
  28462. +    (error (message "Failed to load font"))))
  28463. +
  28464. +(defun amiga-handle-set-foreground (switch)
  28465. +  (condition-case err
  28466. +      (let ((pen (car (read-from-string (car command-line-args-left)))))
  28467. +    (setq command-line-args-left (cdr command-line-args-left))
  28468. +    (amiga-set-foreground-color pen))
  28469. +    (error (message "Failed to set foreground colour"))))
  28470. +
  28471. +(defun amiga-handle-set-background (switch)
  28472. +  (condition-case err
  28473. +      (let ((pen (car (read-from-string (car command-line-args-left)))))
  28474. +    (setq command-line-args-left (cdr command-line-args-left))
  28475. +    (amiga-set-background-color pen))
  28476. +    (error (message "Failed to set background colour"))))
  28477. +
  28478. +(defun amiga-handle-set-screen (switch)
  28479. +  (condition-case err
  28480. +      (let ((name (car command-line-args-left)))
  28481. +    (setq command-line-args-left (cdr command-line-args-left))
  28482. +    (amiga-set-geometry nil nil nil nil name))
  28483. +    (error (message "Couldn't open on public screen"))))
  28484. +
  28485. +(defun amiga-handle-set-geometry (switch)
  28486. +  (condition-case err
  28487. +      (let ((x (car (read-from-string (car command-line-args-left))))
  28488. +        (y (car (read-from-string (car (cdr command-line-args-left)))))
  28489. +        (w (car (read-from-string (car (cdr (cdr command-line-args-left))))))
  28490. +        (h (car (read-from-string (car (cdr (cdr (cdr command-line-args-left)))))))
  28491. +)
  28492. +    (setq command-line-args-left (cdr (cdr (cdr (cdr command-line-args-left)))))
  28493. +    (amiga-set-geometry x y w h nil))
  28494. +    (error (message "Couldn't set window size"))))
  28495. +
  28496. +
  28497. diff -rup --new-file baseline/fsf/emacs/lisp/texinfmt.el amiga/fsf/emacs/lisp/texinfmt.el
  28498. --- baseline/fsf/emacs/lisp/texinfmt.el    Fri Mar 11 17:06:52 1994
  28499. +++ amiga/fsf/emacs/lisp/texinfmt.el    Sat Sep 28 00:00:00 1996
  28500. @@ -2056,7 +2056,7 @@ Default is to leave paragraph indentatio
  28501.      (setq opoint (point))
  28502.      (texinfo-print-index nil indexelts)
  28503.  
  28504. -    (if (eq system-type 'vax-vms)
  28505. +    (if (or (eq system-type 'amigaos) (eq system-type 'vax-vms))
  28506.          (texinfo-sort-region opoint (point))
  28507.        (shell-command-on-region opoint (point) "sort -fd" 1))))
  28508.  
  28509. diff -rup --new-file baseline/fsf/emacs/lisp/version.el amiga/fsf/emacs/lisp/version.el
  28510. --- baseline/fsf/emacs/lisp/version.el    Wed Oct  5 22:06:53 1994
  28511. +++ amiga/fsf/emacs/lisp/version.el    Sat Sep 28 00:00:00 1996
  28512. @@ -28,15 +28,15 @@ Version numbers of this version of Emacs
  28513.  
  28514.  (defconst emacs-major-version
  28515.    (progn (string-match "^[0-9]+" emacs-version)
  28516. -     (string-to-int (substring emacs-version
  28517. -                   (match-beginning 0) (match-end 0))))
  28518. +         (string-to-int (substring emacs-version
  28519. +                                   (match-beginning 0) (match-end 0))))
  28520.    "Major version number of this version of Emacs.
  28521.  This variable first existed in version 19.23.")
  28522.  
  28523.  (defconst emacs-minor-version
  28524.    (progn (string-match "^[0-9]+\\.\\([0-9]+\\)" emacs-version)
  28525. -     (string-to-int (substring emacs-version
  28526. -                   (match-beginning 1) (match-end 1))))
  28527. +         (string-to-int (substring emacs-version
  28528. +                                   (match-beginning 1) (match-end 1))))
  28529.    "Minor version number of this version of Emacs.
  28530.  This variable first existed in version 19.23.")
  28531.  
  28532. diff -rup --new-file baseline/fsf/emacs/manifests/src amiga/fsf/emacs/manifests/src
  28533. --- baseline/fsf/emacs/manifests/src    Wed Dec 31 17:00:00 1969
  28534. +++ amiga/fsf/emacs/manifests/src    Sat Sep 28 00:00:00 1996
  28535. @@ -0,0 +1,1638 @@
  28536. +fsf/emacs/BUGS
  28537. +fsf/emacs/ChangeLog
  28538. +fsf/emacs/Checksums
  28539. +fsf/emacs/GETTING.GNU.SOFTWARE
  28540. +fsf/emacs/INSTALL
  28541. +fsf/emacs/INSTALLATION
  28542. +fsf/emacs/Makefile.in
  28543. +fsf/emacs/PROBLEMS
  28544. +fsf/emacs/Product-Info
  28545. +fsf/emacs/README
  28546. +fsf/emacs/README.1st
  28547. +fsf/emacs/amiga.doc
  28548. +fsf/emacs/announce2.0
  28549. +fsf/emacs/build-ins.in
  28550. +fsf/emacs/compile.doc
  28551. +fsf/emacs/config.bat
  28552. +fsf/emacs/config.guess
  28553. +fsf/emacs/config.sub
  28554. +fsf/emacs/configure
  28555. +fsf/emacs/configure.in
  28556. +fsf/emacs/cpp/Makefile
  28557. +fsf/emacs/cpp/README
  28558. +fsf/emacs/cpp/SASCOPTS
  28559. +fsf/emacs/cpp/SCOPTIONS
  28560. +fsf/emacs/cpp/cccp.c
  28561. +fsf/emacs/cpp/cccp.lnk
  28562. +fsf/emacs/cpp/cexp.y
  28563. +fsf/emacs/cpp/lmkfile
  28564. +fsf/emacs/etc/3B-MAXMEM
  28565. +fsf/emacs/etc/AIX.DUMP
  28566. +fsf/emacs/etc/APPLE
  28567. +fsf/emacs/etc/BABYL
  28568. +fsf/emacs/etc/COOKIES
  28569. +fsf/emacs/etc/COPYING
  28570. +fsf/emacs/etc/ChangeLog
  28571. +fsf/emacs/etc/DEBUG
  28572. +fsf/emacs/etc/DISTRIB
  28573. +fsf/emacs/etc/DOC
  28574. +fsf/emacs/etc/DOC-19.28.1
  28575. +fsf/emacs/etc/EMACS-DATA
  28576. +fsf/emacs/etc/FAQ
  28577. +fsf/emacs/etc/FTP
  28578. +fsf/emacs/etc/GNU
  28579. +fsf/emacs/etc/INTERVIEW
  28580. +fsf/emacs/etc/JOKES
  28581. +fsf/emacs/etc/LEDIT
  28582. +fsf/emacs/etc/LNEWS
  28583. +fsf/emacs/etc/LPF
  28584. +fsf/emacs/etc/MACHINES
  28585. +fsf/emacs/etc/MAILINGLISTS
  28586. +fsf/emacs/etc/MH-E-NEWS
  28587. +fsf/emacs/etc/MORE.STUFF
  28588. +fsf/emacs/etc/MOTIVATION
  28589. +fsf/emacs/etc/MSDOS
  28590. +fsf/emacs/etc/Makefile
  28591. +fsf/emacs/etc/NEWS
  28592. +fsf/emacs/etc/ONEWS
  28593. +fsf/emacs/etc/OONEWS
  28594. +fsf/emacs/etc/OOONEWS
  28595. +fsf/emacs/etc/OOOONEWS
  28596. +fsf/emacs/etc/ORDERS
  28597. +fsf/emacs/etc/ORDERS.EUROPE
  28598. +fsf/emacs/etc/ORDERS.JAPAN
  28599. +fsf/emacs/etc/OTHER.EMACSES
  28600. +fsf/emacs/etc/README
  28601. +fsf/emacs/etc/SERVICE
  28602. +fsf/emacs/etc/SUN-SUPPORT
  28603. +fsf/emacs/etc/TERMS
  28604. +fsf/emacs/etc/TUTORIAL
  28605. +fsf/emacs/etc/Xkeymap.txt
  28606. +fsf/emacs/etc/celibacy.1
  28607. +fsf/emacs/etc/condom.1
  28608. +fsf/emacs/etc/copying.paper
  28609. +fsf/emacs/etc/ctags.1
  28610. +fsf/emacs/etc/echo.msg
  28611. +fsf/emacs/etc/emacs.1
  28612. +fsf/emacs/etc/emacs.bash
  28613. +fsf/emacs/etc/emacs.csh
  28614. +fsf/emacs/etc/emacs.icon
  28615. +fsf/emacs/etc/emacs.xbm
  28616. +fsf/emacs/etc/emacstool.1
  28617. +fsf/emacs/etc/etags.1
  28618. +fsf/emacs/etc/etags.notes
  28619. +fsf/emacs/etc/etags.vms
  28620. +fsf/emacs/etc/ledit.l
  28621. +fsf/emacs/etc/ms-kermit
  28622. +fsf/emacs/etc/ms-kermit-7bit
  28623. +fsf/emacs/etc/news.texi
  28624. +fsf/emacs/etc/refcard.ps
  28625. +fsf/emacs/etc/refcard.tex
  28626. +fsf/emacs/etc/sex.6
  28627. +fsf/emacs/etc/spook.lines
  28628. +fsf/emacs/etc/termcap.dat
  28629. +fsf/emacs/etc/termcap.ucb
  28630. +fsf/emacs/etc/ulimit.hack
  28631. +fsf/emacs/etc/vipcard.tex
  28632. +fsf/emacs/etc/yow.lines
  28633. +fsf/emacs/info/COPYING
  28634. +fsf/emacs/info/cl
  28635. +fsf/emacs/info/cl-1
  28636. +fsf/emacs/info/cl-2
  28637. +fsf/emacs/info/cl-3
  28638. +fsf/emacs/info/cl-4
  28639. +fsf/emacs/info/cl-5
  28640. +fsf/emacs/info/cl-6
  28641. +fsf/emacs/info/dir
  28642. +fsf/emacs/info/dired-x
  28643. +fsf/emacs/info/emacs
  28644. +fsf/emacs/info/emacs-1
  28645. +fsf/emacs/info/emacs-10
  28646. +fsf/emacs/info/emacs-11
  28647. +fsf/emacs/info/emacs-12
  28648. +fsf/emacs/info/emacs-13
  28649. +fsf/emacs/info/emacs-14
  28650. +fsf/emacs/info/emacs-15
  28651. +fsf/emacs/info/emacs-16
  28652. +fsf/emacs/info/emacs-17
  28653. +fsf/emacs/info/emacs-18
  28654. +fsf/emacs/info/emacs-19
  28655. +fsf/emacs/info/emacs-2
  28656. +fsf/emacs/info/emacs-20
  28657. +fsf/emacs/info/emacs-21
  28658. +fsf/emacs/info/emacs-22
  28659. +fsf/emacs/info/emacs-23
  28660. +fsf/emacs/info/emacs-24
  28661. +fsf/emacs/info/emacs-3
  28662. +fsf/emacs/info/emacs-4
  28663. +fsf/emacs/info/emacs-5
  28664. +fsf/emacs/info/emacs-6
  28665. +fsf/emacs/info/emacs-7
  28666. +fsf/emacs/info/emacs-8
  28667. +fsf/emacs/info/emacs-9
  28668. +fsf/emacs/info/forms
  28669. +fsf/emacs/info/gnus
  28670. +fsf/emacs/info/gnus-1
  28671. +fsf/emacs/info/gnus-2
  28672. +fsf/emacs/info/gnus-3
  28673. +fsf/emacs/info/info
  28674. +fsf/emacs/info/sc
  28675. +fsf/emacs/info/sc-1
  28676. +fsf/emacs/info/sc-2
  28677. +fsf/emacs/info/sc-3
  28678. +fsf/emacs/info/vip
  28679. +fsf/emacs/info/vip-1
  28680. +fsf/emacs/info/vip-2
  28681. +fsf/emacs/install.sh
  28682. +fsf/emacs/lib-src/COPYING
  28683. +fsf/emacs/lib-src/ChangeLog
  28684. +fsf/emacs/lib-src/Makefile.in.in
  28685. +fsf/emacs/lib-src/README
  28686. +fsf/emacs/lib-src/SCOPTIONS
  28687. +fsf/emacs/lib-src/aixcc.lex
  28688. +fsf/emacs/lib-src/alloca.c
  28689. +fsf/emacs/lib-src/b2m.c
  28690. +fsf/emacs/lib-src/cvtmail.c
  28691. +fsf/emacs/lib-src/digest-doc.c
  28692. +fsf/emacs/lib-src/emacs.csh
  28693. +fsf/emacs/lib-src/emacsclient.c
  28694. +fsf/emacs/lib-src/emacsserver.c
  28695. +fsf/emacs/lib-src/emacstool.c
  28696. +fsf/emacs/lib-src/env.c
  28697. +fsf/emacs/lib-src/etags-vmslib.c
  28698. +fsf/emacs/lib-src/etags.c
  28699. +fsf/emacs/lib-src/fakemail.c
  28700. +fsf/emacs/lib-src/getdate.c
  28701. +fsf/emacs/lib-src/getdate.y
  28702. +fsf/emacs/lib-src/getopt.c
  28703. +fsf/emacs/lib-src/getopt.h
  28704. +fsf/emacs/lib-src/getopt1.c
  28705. +fsf/emacs/lib-src/hexl.c
  28706. +fsf/emacs/lib-src/leditcfns.c
  28707. +fsf/emacs/lib-src/make-docfile.c
  28708. +fsf/emacs/lib-src/make-docfile.lnk
  28709. +fsf/emacs/lib-src/make-path.c
  28710. +fsf/emacs/lib-src/movemail.c
  28711. +fsf/emacs/lib-src/profile.c
  28712. +fsf/emacs/lib-src/qsort.c
  28713. +fsf/emacs/lib-src/rcs-checkin
  28714. +fsf/emacs/lib-src/rcs2log
  28715. +fsf/emacs/lib-src/sh.c
  28716. +fsf/emacs/lib-src/sorted-doc.c
  28717. +fsf/emacs/lib-src/tcp.c
  28718. +fsf/emacs/lib-src/test-distrib.c
  28719. +fsf/emacs/lib-src/testfile
  28720. +fsf/emacs/lib-src/timer.c
  28721. +fsf/emacs/lib-src/vcdiff
  28722. +fsf/emacs/lib-src/wakeup.c
  28723. +fsf/emacs/lib-src/yow.c
  28724. +fsf/emacs/lisp/COPYING
  28725. +fsf/emacs/lisp/ChangeLog
  28726. +fsf/emacs/lisp/ChangeLog.1
  28727. +fsf/emacs/lisp/ChangeLog.2
  28728. +fsf/emacs/lisp/ChangeLog.3
  28729. +fsf/emacs/lisp/Makefile
  28730. +fsf/emacs/lisp/README
  28731. +fsf/emacs/lisp/abbrev.el
  28732. +fsf/emacs/lisp/abbrev.elc
  28733. +fsf/emacs/lisp/abbrevlist.el
  28734. +fsf/emacs/lisp/abbrevlist.elc
  28735. +fsf/emacs/lisp/ada.el
  28736. +fsf/emacs/lisp/ada.elc
  28737. +fsf/emacs/lisp/add-log.el
  28738. +fsf/emacs/lisp/add-log.elc
  28739. +fsf/emacs/lisp/advice.el
  28740. +fsf/emacs/lisp/advice.elc
  28741. +fsf/emacs/lisp/allout.el
  28742. +fsf/emacs/lisp/allout.elc
  28743. +fsf/emacs/lisp/amiga-init.el
  28744. +fsf/emacs/lisp/amiga-init.elc
  28745. +fsf/emacs/lisp/amiga-menu-bar.el
  28746. +fsf/emacs/lisp/amiga-menu.el
  28747. +fsf/emacs/lisp/amiga-mouse-old.el
  28748. +fsf/emacs/lisp/amiga-mouse.el
  28749. +fsf/emacs/lisp/ange-ftp.el
  28750. +fsf/emacs/lisp/ange-ftp.elc
  28751. +fsf/emacs/lisp/appt.el
  28752. +fsf/emacs/lisp/appt.elc
  28753. +fsf/emacs/lisp/apropos.el
  28754. +fsf/emacs/lisp/apropos.elc
  28755. +fsf/emacs/lisp/array.el
  28756. +fsf/emacs/lisp/array.elc
  28757. +fsf/emacs/lisp/asm-mode.el
  28758. +fsf/emacs/lisp/asm-mode.elc
  28759. +fsf/emacs/lisp/assoc.el
  28760. +fsf/emacs/lisp/assoc.elc
  28761. +fsf/emacs/lisp/autoinsert.el
  28762. +fsf/emacs/lisp/autoinsert.elc
  28763. +fsf/emacs/lisp/autoload.el
  28764. +fsf/emacs/lisp/autoload.elc
  28765. +fsf/emacs/lisp/avoid.el
  28766. +fsf/emacs/lisp/avoid.elc
  28767. +fsf/emacs/lisp/awk-mode.el
  28768. +fsf/emacs/lisp/awk-mode.elc
  28769. +fsf/emacs/lisp/backquote.el
  28770. +fsf/emacs/lisp/backquote.elc
  28771. +fsf/emacs/lisp/bib-mode.el
  28772. +fsf/emacs/lisp/bib-mode.elc
  28773. +fsf/emacs/lisp/bibtex.el
  28774. +fsf/emacs/lisp/bibtex.elc
  28775. +fsf/emacs/lisp/blackbox.el
  28776. +fsf/emacs/lisp/blackbox.elc
  28777. +fsf/emacs/lisp/blessmail.el
  28778. +fsf/emacs/lisp/bookmark.el
  28779. +fsf/emacs/lisp/bookmark.elc
  28780. +fsf/emacs/lisp/buff-menu.el
  28781. +fsf/emacs/lisp/buff-menu.elc
  28782. +fsf/emacs/lisp/byte-opt.el
  28783. +fsf/emacs/lisp/byte-opt.elc
  28784. +fsf/emacs/lisp/byte-run.el
  28785. +fsf/emacs/lisp/byte-run.elc
  28786. +fsf/emacs/lisp/bytecomp.el
  28787. +fsf/emacs/lisp/bytecomp.elc
  28788. +fsf/emacs/lisp/c-mode.el
  28789. +fsf/emacs/lisp/c-mode.elc
  28790. +fsf/emacs/lisp/cal-dst.el
  28791. +fsf/emacs/lisp/cal-dst.elc
  28792. +fsf/emacs/lisp/cal-french.el
  28793. +fsf/emacs/lisp/cal-french.elc
  28794. +fsf/emacs/lisp/cal-mayan.el
  28795. +fsf/emacs/lisp/cal-mayan.elc
  28796. +fsf/emacs/lisp/cal-menu.el
  28797. +fsf/emacs/lisp/cal-menu.elc
  28798. +fsf/emacs/lisp/calendar.el
  28799. +fsf/emacs/lisp/calendar.elc
  28800. +fsf/emacs/lisp/case-table.el
  28801. +fsf/emacs/lisp/case-table.elc
  28802. +fsf/emacs/lisp/cc-mode.el
  28803. +fsf/emacs/lisp/cc-mode.elc
  28804. +fsf/emacs/lisp/cdl.el
  28805. +fsf/emacs/lisp/cdl.elc
  28806. +fsf/emacs/lisp/chistory.el
  28807. +fsf/emacs/lisp/chistory.elc
  28808. +fsf/emacs/lisp/cl-compat.el
  28809. +fsf/emacs/lisp/cl-compat.elc
  28810. +fsf/emacs/lisp/cl-extra.el
  28811. +fsf/emacs/lisp/cl-extra.elc
  28812. +fsf/emacs/lisp/cl-indent.el
  28813. +fsf/emacs/lisp/cl-indent.elc
  28814. +fsf/emacs/lisp/cl-macs.el
  28815. +fsf/emacs/lisp/cl-macs.elc
  28816. +fsf/emacs/lisp/cl-seq.el
  28817. +fsf/emacs/lisp/cl-seq.elc
  28818. +fsf/emacs/lisp/cl-specs.el
  28819. +fsf/emacs/lisp/cl-specs.elc
  28820. +fsf/emacs/lisp/cl.el
  28821. +fsf/emacs/lisp/cl.elc
  28822. +fsf/emacs/lisp/cmacexp.el
  28823. +fsf/emacs/lisp/cmacexp.elc
  28824. +fsf/emacs/lisp/cmuscheme.el
  28825. +fsf/emacs/lisp/cmuscheme.elc
  28826. +fsf/emacs/lisp/comint.el
  28827. +fsf/emacs/lisp/comint.elc
  28828. +fsf/emacs/lisp/compare-w.el
  28829. +fsf/emacs/lisp/compare-w.elc
  28830. +fsf/emacs/lisp/compile.el
  28831. +fsf/emacs/lisp/compile.elc
  28832. +fsf/emacs/lisp/complete.el
  28833. +fsf/emacs/lisp/complete.elc
  28834. +fsf/emacs/lisp/completion.el
  28835. +fsf/emacs/lisp/completion.elc
  28836. +fsf/emacs/lisp/cookie1.el
  28837. +fsf/emacs/lisp/cookie1.elc
  28838. +fsf/emacs/lisp/cplus-md.el
  28839. +fsf/emacs/lisp/cplus-md.elc
  28840. +fsf/emacs/lisp/cust-print.el
  28841. +fsf/emacs/lisp/cust-print.elc
  28842. +fsf/emacs/lisp/dabbrev.el
  28843. +fsf/emacs/lisp/dabbrev.elc
  28844. +fsf/emacs/lisp/debug.el
  28845. +fsf/emacs/lisp/debug.elc
  28846. +fsf/emacs/lisp/delsel.el
  28847. +fsf/emacs/lisp/delsel.elc
  28848. +fsf/emacs/lisp/derived.el
  28849. +fsf/emacs/lisp/derived.elc
  28850. +fsf/emacs/lisp/desktop.el
  28851. +fsf/emacs/lisp/desktop.elc
  28852. +fsf/emacs/lisp/diary-ins.el
  28853. +fsf/emacs/lisp/diary-ins.elc
  28854. +fsf/emacs/lisp/diary-lib.el
  28855. +fsf/emacs/lisp/diary-lib.elc
  28856. +fsf/emacs/lisp/diff.el
  28857. +fsf/emacs/lisp/diff.elc
  28858. +fsf/emacs/lisp/dired-aux.el
  28859. +fsf/emacs/lisp/dired-aux.elc
  28860. +fsf/emacs/lisp/dired-x.el
  28861. +fsf/emacs/lisp/dired-x.elc
  28862. +fsf/emacs/lisp/dired.el
  28863. +fsf/emacs/lisp/dired.elc
  28864. +fsf/emacs/lisp/dired.todo
  28865. +fsf/emacs/lisp/disass.el
  28866. +fsf/emacs/lisp/disass.elc
  28867. +fsf/emacs/lisp/disp-table.el
  28868. +fsf/emacs/lisp/disp-table.elc
  28869. +fsf/emacs/lisp/dissociate.el
  28870. +fsf/emacs/lisp/dissociate.elc
  28871. +fsf/emacs/lisp/doctor.el
  28872. +fsf/emacs/lisp/doctor.elc
  28873. +fsf/emacs/lisp/dos-fns.el
  28874. +fsf/emacs/lisp/dos-fns.elc
  28875. +fsf/emacs/lisp/double.el
  28876. +fsf/emacs/lisp/double.elc
  28877. +fsf/emacs/lisp/dunnet.el
  28878. +fsf/emacs/lisp/dunnet.elc
  28879. +fsf/emacs/lisp/easymenu.el
  28880. +fsf/emacs/lisp/easymenu.elc
  28881. +fsf/emacs/lisp/ebuff-menu.el
  28882. +fsf/emacs/lisp/ebuff-menu.elc
  28883. +fsf/emacs/lisp/echistory.el
  28884. +fsf/emacs/lisp/echistory.elc
  28885. +fsf/emacs/lisp/edebug.el
  28886. +fsf/emacs/lisp/edebug.elc
  28887. +fsf/emacs/lisp/ediff.el
  28888. +fsf/emacs/lisp/ediff.elc
  28889. +fsf/emacs/lisp/edmacro.el
  28890. +fsf/emacs/lisp/edmacro.elc
  28891. +fsf/emacs/lisp/edt.el
  28892. +fsf/emacs/lisp/edt.elc
  28893. +fsf/emacs/lisp/ehelp.el
  28894. +fsf/emacs/lisp/ehelp.elc
  28895. +fsf/emacs/lisp/electric.el
  28896. +fsf/emacs/lisp/electric.elc
  28897. +fsf/emacs/lisp/emacsbug.el
  28898. +fsf/emacs/lisp/emacsbug.elc
  28899. +fsf/emacs/lisp/emerge.el
  28900. +fsf/emacs/lisp/emerge.elc
  28901. +fsf/emacs/lisp/env.el
  28902. +fsf/emacs/lisp/env.elc
  28903. +fsf/emacs/lisp/etags.el
  28904. +fsf/emacs/lisp/etags.elc
  28905. +fsf/emacs/lisp/eval-reg.el
  28906. +fsf/emacs/lisp/eval-reg.elc
  28907. +fsf/emacs/lisp/faces.el
  28908. +fsf/emacs/lisp/faces.elc
  28909. +fsf/emacs/lisp/files.el
  28910. +fsf/emacs/lisp/files.elc
  28911. +fsf/emacs/lisp/fill.el
  28912. +fsf/emacs/lisp/fill.elc
  28913. +fsf/emacs/lisp/find-dired.el
  28914. +fsf/emacs/lisp/find-dired.elc
  28915. +fsf/emacs/lisp/find-gc.el
  28916. +fsf/emacs/lisp/find-gc.elc
  28917. +fsf/emacs/lisp/finder-inf.el
  28918. +fsf/emacs/lisp/finder-inf.elc
  28919. +fsf/emacs/lisp/finder.el
  28920. +fsf/emacs/lisp/finder.elc
  28921. +fsf/emacs/lisp/float-sup.el
  28922. +fsf/emacs/lisp/float-sup.elc
  28923. +fsf/emacs/lisp/float.el
  28924. +fsf/emacs/lisp/float.elc
  28925. +fsf/emacs/lisp/flow-ctrl.el
  28926. +fsf/emacs/lisp/flow-ctrl.elc
  28927. +fsf/emacs/lisp/foldout.el
  28928. +fsf/emacs/lisp/foldout.elc
  28929. +fsf/emacs/lisp/font-lock.el
  28930. +fsf/emacs/lisp/font-lock.elc
  28931. +fsf/emacs/lisp/forms-d2.dat
  28932. +fsf/emacs/lisp/forms-d2.el
  28933. +fsf/emacs/lisp/forms-pass.el
  28934. +fsf/emacs/lisp/forms.el
  28935. +fsf/emacs/lisp/forms.elc
  28936. +fsf/emacs/lisp/fortran.el
  28937. +fsf/emacs/lisp/fortran.elc
  28938. +fsf/emacs/lisp/frame.el
  28939. +fsf/emacs/lisp/frame.elc
  28940. +fsf/emacs/lisp/gnus-uu.el
  28941. +fsf/emacs/lisp/gnus-uu.elc
  28942. +fsf/emacs/lisp/gnus.el
  28943. +fsf/emacs/lisp/gnus.elc
  28944. +fsf/emacs/lisp/gnusmail.el
  28945. +fsf/emacs/lisp/gnusmail.elc
  28946. +fsf/emacs/lisp/gnusmisc.el
  28947. +fsf/emacs/lisp/gnusmisc.elc
  28948. +fsf/emacs/lisp/gnuspost.el
  28949. +fsf/emacs/lisp/gnuspost.elc
  28950. +fsf/emacs/lisp/gomoku.el
  28951. +fsf/emacs/lisp/gomoku.elc
  28952. +fsf/emacs/lisp/gud.el
  28953. +fsf/emacs/lisp/gud.elc
  28954. +fsf/emacs/lisp/hanoi.el
  28955. +fsf/emacs/lisp/hanoi.elc
  28956. +fsf/emacs/lisp/help-macro.el
  28957. +fsf/emacs/lisp/help-macro.elc
  28958. +fsf/emacs/lisp/help.el
  28959. +fsf/emacs/lisp/help.elc
  28960. +fsf/emacs/lisp/helper.el
  28961. +fsf/emacs/lisp/helper.elc
  28962. +fsf/emacs/lisp/hexl.el
  28963. +fsf/emacs/lisp/hexl.elc
  28964. +fsf/emacs/lisp/hideif.el
  28965. +fsf/emacs/lisp/hideif.elc
  28966. +fsf/emacs/lisp/hilit19.el
  28967. +fsf/emacs/lisp/hilit19.elc
  28968. +fsf/emacs/lisp/hippie-exp.el
  28969. +fsf/emacs/lisp/hippie-exp.elc
  28970. +fsf/emacs/lisp/holidays.el
  28971. +fsf/emacs/lisp/holidays.elc
  28972. +fsf/emacs/lisp/icomplete.el
  28973. +fsf/emacs/lisp/icomplete.elc
  28974. +fsf/emacs/lisp/icon.el
  28975. +fsf/emacs/lisp/icon.elc
  28976. +fsf/emacs/lisp/ielm.el
  28977. +fsf/emacs/lisp/ielm.elc
  28978. +fsf/emacs/lisp/imenu.el
  28979. +fsf/emacs/lisp/imenu.elc
  28980. +fsf/emacs/lisp/indent.el
  28981. +fsf/emacs/lisp/indent.elc
  28982. +fsf/emacs/lisp/inf-lisp.el
  28983. +fsf/emacs/lisp/inf-lisp.elc
  28984. +fsf/emacs/lisp/info.el
  28985. +fsf/emacs/lisp/info.elc
  28986. +fsf/emacs/lisp/informat.el
  28987. +fsf/emacs/lisp/informat.elc
  28988. +fsf/emacs/lisp/isearch.el
  28989. +fsf/emacs/lisp/isearch.elc
  28990. +fsf/emacs/lisp/iso-acc.el
  28991. +fsf/emacs/lisp/iso-acc.elc
  28992. +fsf/emacs/lisp/iso-ascii.el
  28993. +fsf/emacs/lisp/iso-ascii.elc
  28994. +fsf/emacs/lisp/iso-cvt.el
  28995. +fsf/emacs/lisp/iso-cvt.elc
  28996. +fsf/emacs/lisp/iso-insert.el
  28997. +fsf/emacs/lisp/iso-insert.elc
  28998. +fsf/emacs/lisp/iso-swed.el
  28999. +fsf/emacs/lisp/iso-swed.elc
  29000. +fsf/emacs/lisp/iso-syntax.el
  29001. +fsf/emacs/lisp/iso-syntax.elc
  29002. +fsf/emacs/lisp/iso-transl.el
  29003. +fsf/emacs/lisp/iso-transl.elc
  29004. +fsf/emacs/lisp/ispell.el
  29005. +fsf/emacs/lisp/ispell.elc
  29006. +fsf/emacs/lisp/ispell4.el
  29007. +fsf/emacs/lisp/ispell4.elc
  29008. +fsf/emacs/lisp/jka-compr.el
  29009. +fsf/emacs/lisp/jka-compr.elc
  29010. +fsf/emacs/lisp/kermit.el
  29011. +fsf/emacs/lisp/kermit.elc
  29012. +fsf/emacs/lisp/ledit.el
  29013. +fsf/emacs/lisp/ledit.elc
  29014. +fsf/emacs/lisp/levents.el
  29015. +fsf/emacs/lisp/levents.elc
  29016. +fsf/emacs/lisp/life.el
  29017. +fsf/emacs/lisp/life.elc
  29018. +fsf/emacs/lisp/lisp-mnt.el
  29019. +fsf/emacs/lisp/lisp-mnt.elc
  29020. +fsf/emacs/lisp/lisp-mode.el
  29021. +fsf/emacs/lisp/lisp-mode.elc
  29022. +fsf/emacs/lisp/lisp.el
  29023. +fsf/emacs/lisp/lisp.elc
  29024. +fsf/emacs/lisp/lmenu.el
  29025. +fsf/emacs/lisp/lmenu.elc
  29026. +fsf/emacs/lisp/loaddefs.el
  29027. +fsf/emacs/lisp/loadhist.el
  29028. +fsf/emacs/lisp/loadhist.elc
  29029. +fsf/emacs/lisp/loadup.el
  29030. +fsf/emacs/lisp/lpr.el
  29031. +fsf/emacs/lisp/lpr.elc
  29032. +fsf/emacs/lisp/ls-lisp.el
  29033. +fsf/emacs/lisp/ls-lisp.elc
  29034. +fsf/emacs/lisp/lselect.el
  29035. +fsf/emacs/lisp/lselect.elc
  29036. +fsf/emacs/lisp/lucid.el
  29037. +fsf/emacs/lisp/lucid.elc
  29038. +fsf/emacs/lisp/lunar.el
  29039. +fsf/emacs/lisp/lunar.elc
  29040. +fsf/emacs/lisp/macros.el
  29041. +fsf/emacs/lisp/macros.elc
  29042. +fsf/emacs/lisp/mail-extr.el
  29043. +fsf/emacs/lisp/mail-extr.elc
  29044. +fsf/emacs/lisp/mail-hist.el
  29045. +fsf/emacs/lisp/mail-hist.elc
  29046. +fsf/emacs/lisp/mail-utils.el
  29047. +fsf/emacs/lisp/mail-utils.elc
  29048. +fsf/emacs/lisp/mailabbrev.el
  29049. +fsf/emacs/lisp/mailabbrev.elc
  29050. +fsf/emacs/lisp/mailalias.el
  29051. +fsf/emacs/lisp/mailalias.elc
  29052. +fsf/emacs/lisp/mailpost.el
  29053. +fsf/emacs/lisp/mailpost.elc
  29054. +fsf/emacs/lisp/makefile.el
  29055. +fsf/emacs/lisp/makefile.elc
  29056. +fsf/emacs/lisp/makeinfo.el
  29057. +fsf/emacs/lisp/makeinfo.elc
  29058. +fsf/emacs/lisp/makesum.el
  29059. +fsf/emacs/lisp/makesum.elc
  29060. +fsf/emacs/lisp/man.el
  29061. +fsf/emacs/lisp/man.elc
  29062. +fsf/emacs/lisp/map-ynp.el
  29063. +fsf/emacs/lisp/map-ynp.elc
  29064. +fsf/emacs/lisp/medit.el
  29065. +fsf/emacs/lisp/medit.elc
  29066. +fsf/emacs/lisp/meese.el
  29067. +fsf/emacs/lisp/meese.elc
  29068. +fsf/emacs/lisp/menu-bar.el
  29069. +fsf/emacs/lisp/menu-bar.elc
  29070. +fsf/emacs/lisp/metamail.el
  29071. +fsf/emacs/lisp/metamail.elc
  29072. +fsf/emacs/lisp/mh-comp.el
  29073. +fsf/emacs/lisp/mh-comp.elc
  29074. +fsf/emacs/lisp/mh-e.el
  29075. +fsf/emacs/lisp/mh-e.elc
  29076. +fsf/emacs/lisp/mh-funcs.el
  29077. +fsf/emacs/lisp/mh-funcs.elc
  29078. +fsf/emacs/lisp/mh-mime.el
  29079. +fsf/emacs/lisp/mh-mime.elc
  29080. +fsf/emacs/lisp/mh-pick.el
  29081. +fsf/emacs/lisp/mh-pick.elc
  29082. +fsf/emacs/lisp/mh-seq.el
  29083. +fsf/emacs/lisp/mh-seq.elc
  29084. +fsf/emacs/lisp/mh-utils.el
  29085. +fsf/emacs/lisp/mh-utils.elc
  29086. +fsf/emacs/lisp/mhspool.el
  29087. +fsf/emacs/lisp/mhspool.elc
  29088. +fsf/emacs/lisp/mim-mode.el
  29089. +fsf/emacs/lisp/mim-mode.elc
  29090. +fsf/emacs/lisp/mim-syntax.el
  29091. +fsf/emacs/lisp/mim-syntax.elc
  29092. +fsf/emacs/lisp/misc.el
  29093. +fsf/emacs/lisp/misc.elc
  29094. +fsf/emacs/lisp/mlconvert.el
  29095. +fsf/emacs/lisp/mlconvert.elc
  29096. +fsf/emacs/lisp/mldrag.el
  29097. +fsf/emacs/lisp/mldrag.elc
  29098. +fsf/emacs/lisp/mlsupport.el
  29099. +fsf/emacs/lisp/mlsupport.elc
  29100. +fsf/emacs/lisp/modula2.el
  29101. +fsf/emacs/lisp/modula2.elc
  29102. +fsf/emacs/lisp/mouse-sel.el
  29103. +fsf/emacs/lisp/mouse-sel.elc
  29104. +fsf/emacs/lisp/mouse.el
  29105. +fsf/emacs/lisp/mouse.elc
  29106. +fsf/emacs/lisp/mpuz.el
  29107. +fsf/emacs/lisp/mpuz.elc
  29108. +fsf/emacs/lisp/netunam.el
  29109. +fsf/emacs/lisp/netunam.elc
  29110. +fsf/emacs/lisp/nnspool.el
  29111. +fsf/emacs/lisp/nnspool.elc
  29112. +fsf/emacs/lisp/nntp.el
  29113. +fsf/emacs/lisp/nntp.elc
  29114. +fsf/emacs/lisp/novice.el
  29115. +fsf/emacs/lisp/novice.elc
  29116. +fsf/emacs/lisp/nroff-mode.el
  29117. +fsf/emacs/lisp/nroff-mode.elc
  29118. +fsf/emacs/lisp/options.el
  29119. +fsf/emacs/lisp/options.elc
  29120. +fsf/emacs/lisp/outline.el
  29121. +fsf/emacs/lisp/outline.elc
  29122. +fsf/emacs/lisp/page-ext.el
  29123. +fsf/emacs/lisp/page-ext.elc
  29124. +fsf/emacs/lisp/page.el
  29125. +fsf/emacs/lisp/page.elc
  29126. +fsf/emacs/lisp/paragraphs.el
  29127. +fsf/emacs/lisp/paragraphs.elc
  29128. +fsf/emacs/lisp/paren.el
  29129. +fsf/emacs/lisp/paren.elc
  29130. +fsf/emacs/lisp/pascal.el
  29131. +fsf/emacs/lisp/pascal.elc
  29132. +fsf/emacs/lisp/paths.el
  29133. +fsf/emacs/lisp/perl-mode.el
  29134. +fsf/emacs/lisp/perl-mode.elc
  29135. +fsf/emacs/lisp/picture.el
  29136. +fsf/emacs/lisp/picture.elc
  29137. +fsf/emacs/lisp/pp.el
  29138. +fsf/emacs/lisp/pp.elc
  29139. +fsf/emacs/lisp/profile.el
  29140. +fsf/emacs/lisp/profile.elc
  29141. +fsf/emacs/lisp/prolog.el
  29142. +fsf/emacs/lisp/prolog.elc
  29143. +fsf/emacs/lisp/rcompile.el
  29144. +fsf/emacs/lisp/rcompile.elc
  29145. +fsf/emacs/lisp/rect.el
  29146. +fsf/emacs/lisp/rect.elc
  29147. +fsf/emacs/lisp/refbib.el
  29148. +fsf/emacs/lisp/refbib.elc
  29149. +fsf/emacs/lisp/refer.el
  29150. +fsf/emacs/lisp/refer.elc
  29151. +fsf/emacs/lisp/regi.el
  29152. +fsf/emacs/lisp/regi.elc
  29153. +fsf/emacs/lisp/register.el
  29154. +fsf/emacs/lisp/register.elc
  29155. +fsf/emacs/lisp/replace.el
  29156. +fsf/emacs/lisp/replace.elc
  29157. +fsf/emacs/lisp/reporter.el
  29158. +fsf/emacs/lisp/reporter.elc
  29159. +fsf/emacs/lisp/reposition.el
  29160. +fsf/emacs/lisp/reposition.elc
  29161. +fsf/emacs/lisp/resume.el
  29162. +fsf/emacs/lisp/resume.elc
  29163. +fsf/emacs/lisp/rfc822.el
  29164. +fsf/emacs/lisp/rfc822.elc
  29165. +fsf/emacs/lisp/ring.el
  29166. +fsf/emacs/lisp/ring.elc
  29167. +fsf/emacs/lisp/rlogin.el
  29168. +fsf/emacs/lisp/rlogin.elc
  29169. +fsf/emacs/lisp/rmail.el
  29170. +fsf/emacs/lisp/rmail.elc
  29171. +fsf/emacs/lisp/rmailedit.el
  29172. +fsf/emacs/lisp/rmailedit.elc
  29173. +fsf/emacs/lisp/rmailkwd.el
  29174. +fsf/emacs/lisp/rmailkwd.elc
  29175. +fsf/emacs/lisp/rmailmsc.el
  29176. +fsf/emacs/lisp/rmailmsc.elc
  29177. +fsf/emacs/lisp/rmailout.el
  29178. +fsf/emacs/lisp/rmailout.elc
  29179. +fsf/emacs/lisp/rmailsort.el
  29180. +fsf/emacs/lisp/rmailsort.elc
  29181. +fsf/emacs/lisp/rmailsum.el
  29182. +fsf/emacs/lisp/rmailsum.elc
  29183. +fsf/emacs/lisp/rnews.el
  29184. +fsf/emacs/lisp/rnews.elc
  29185. +fsf/emacs/lisp/rnewspost.el
  29186. +fsf/emacs/lisp/rnewspost.elc
  29187. +fsf/emacs/lisp/rot13.el
  29188. +fsf/emacs/lisp/rot13.elc
  29189. +fsf/emacs/lisp/rsz-mini.el
  29190. +fsf/emacs/lisp/rsz-mini.elc
  29191. +fsf/emacs/lisp/s-region.el
  29192. +fsf/emacs/lisp/s-region.elc
  29193. +fsf/emacs/lisp/saveplace.el
  29194. +fsf/emacs/lisp/saveplace.elc
  29195. +fsf/emacs/lisp/sc.el
  29196. +fsf/emacs/lisp/scheme.el
  29197. +fsf/emacs/lisp/scheme.elc
  29198. +fsf/emacs/lisp/scribe.el
  29199. +fsf/emacs/lisp/scribe.elc
  29200. +fsf/emacs/lisp/scroll-bar.el
  29201. +fsf/emacs/lisp/scroll-bar.elc
  29202. +fsf/emacs/lisp/select.el
  29203. +fsf/emacs/lisp/select.elc
  29204. +fsf/emacs/lisp/sendmail.el
  29205. +fsf/emacs/lisp/sendmail.elc
  29206. +fsf/emacs/lisp/server.el
  29207. +fsf/emacs/lisp/server.elc
  29208. +fsf/emacs/lisp/sgml-mode.el
  29209. +fsf/emacs/lisp/sgml-mode.elc
  29210. +fsf/emacs/lisp/sh-script.el
  29211. +fsf/emacs/lisp/sh-script.elc
  29212. +fsf/emacs/lisp/shadowfile.el
  29213. +fsf/emacs/lisp/shadowfile.elc
  29214. +fsf/emacs/lisp/shell.el
  29215. +fsf/emacs/lisp/shell.elc
  29216. +fsf/emacs/lisp/simple.el
  29217. +fsf/emacs/lisp/simple.elc
  29218. +fsf/emacs/lisp/simula.el
  29219. +fsf/emacs/lisp/simula.elc
  29220. +fsf/emacs/lisp/skeleton.el
  29221. +fsf/emacs/lisp/skeleton.elc
  29222. +fsf/emacs/lisp/solar.el
  29223. +fsf/emacs/lisp/solar.elc
  29224. +fsf/emacs/lisp/sort.el
  29225. +fsf/emacs/lisp/sort.elc
  29226. +fsf/emacs/lisp/soundex.el
  29227. +fsf/emacs/lisp/soundex.elc
  29228. +fsf/emacs/lisp/spell.el
  29229. +fsf/emacs/lisp/spell.elc
  29230. +fsf/emacs/lisp/spook.el
  29231. +fsf/emacs/lisp/spook.elc
  29232. +fsf/emacs/lisp/startup.el
  29233. +fsf/emacs/lisp/startup.elc
  29234. +fsf/emacs/lisp/studly.el
  29235. +fsf/emacs/lisp/studly.elc
  29236. +fsf/emacs/lisp/subr.el
  29237. +fsf/emacs/lisp/subr.elc
  29238. +fsf/emacs/lisp/sun-curs.el
  29239. +fsf/emacs/lisp/sun-fns.el
  29240. +fsf/emacs/lisp/supercite.el
  29241. +fsf/emacs/lisp/supercite.elc
  29242. +fsf/emacs/lisp/swedish.el
  29243. +fsf/emacs/lisp/swedish.elc
  29244. +fsf/emacs/lisp/tabify.el
  29245. +fsf/emacs/lisp/tabify.elc
  29246. +fsf/emacs/lisp/tar-mode.el
  29247. +fsf/emacs/lisp/tar-mode.elc
  29248. +fsf/emacs/lisp/tcl-mode.el
  29249. +fsf/emacs/lisp/tcl-mode.elc
  29250. +fsf/emacs/lisp/tcp.el
  29251. +fsf/emacs/lisp/tcp.elc
  29252. +fsf/emacs/lisp/telnet.el
  29253. +fsf/emacs/lisp/telnet.elc
  29254. +fsf/emacs/lisp/tempo.el
  29255. +fsf/emacs/lisp/tempo.elc
  29256. +fsf/emacs/lisp/term-nasty.el
  29257. +fsf/emacs/lisp/term/AT386.el
  29258. +fsf/emacs/lisp/term/README
  29259. +fsf/emacs/lisp/term/apollo.el
  29260. +fsf/emacs/lisp/term/apollo.elc
  29261. +fsf/emacs/lisp/term/bg-mouse.el
  29262. +fsf/emacs/lisp/term/bg-mouse.elc
  29263. +fsf/emacs/lisp/term/bobcat.el
  29264. +fsf/emacs/lisp/term/internal.el
  29265. +fsf/emacs/lisp/term/intuition-win.el
  29266. +fsf/emacs/lisp/term/keyswap.el
  29267. +fsf/emacs/lisp/term/lk201.el
  29268. +fsf/emacs/lisp/term/news.el
  29269. +fsf/emacs/lisp/term/news.elc
  29270. +fsf/emacs/lisp/term/sun-curs.el
  29271. +fsf/emacs/lisp/term/sun-fns.el
  29272. +fsf/emacs/lisp/term/sun-mouse.el
  29273. +fsf/emacs/lisp/term/sun-mouse.elc
  29274. +fsf/emacs/lisp/term/sun.el
  29275. +fsf/emacs/lisp/term/sun.elc
  29276. +fsf/emacs/lisp/term/sup-mouse.el
  29277. +fsf/emacs/lisp/term/sup-mouse.elc
  29278. +fsf/emacs/lisp/term/tvi970.el
  29279. +fsf/emacs/lisp/term/tvi970.elc
  29280. +fsf/emacs/lisp/term/vt100-led.el
  29281. +fsf/emacs/lisp/term/vt100-led.elc
  29282. +fsf/emacs/lisp/term/vt100.el
  29283. +fsf/emacs/lisp/term/vt100.elc
  29284. +fsf/emacs/lisp/term/vt102.el
  29285. +fsf/emacs/lisp/term/vt125.el
  29286. +fsf/emacs/lisp/term/vt200.el
  29287. +fsf/emacs/lisp/term/vt200.elc
  29288. +fsf/emacs/lisp/term/vt201.el
  29289. +fsf/emacs/lisp/term/vt220.el
  29290. +fsf/emacs/lisp/term/vt240.el
  29291. +fsf/emacs/lisp/term/vt300.el
  29292. +fsf/emacs/lisp/term/vt320.el
  29293. +fsf/emacs/lisp/term/vt400.el
  29294. +fsf/emacs/lisp/term/vt420.el
  29295. +fsf/emacs/lisp/term/wyse50.el
  29296. +fsf/emacs/lisp/term/wyse50.elc
  29297. +fsf/emacs/lisp/term/x-win.el
  29298. +fsf/emacs/lisp/term/x-win.elc
  29299. +fsf/emacs/lisp/terminal.el
  29300. +fsf/emacs/lisp/terminal.elc
  29301. +fsf/emacs/lisp/tex-mode.el
  29302. +fsf/emacs/lisp/tex-mode.elc
  29303. +fsf/emacs/lisp/texinfmt.el
  29304. +fsf/emacs/lisp/texinfmt.elc
  29305. +fsf/emacs/lisp/texinfo.el
  29306. +fsf/emacs/lisp/texinfo.elc
  29307. +fsf/emacs/lisp/texnfo-upd.el
  29308. +fsf/emacs/lisp/texnfo-upd.elc
  29309. +fsf/emacs/lisp/text-mode.el
  29310. +fsf/emacs/lisp/text-mode.elc
  29311. +fsf/emacs/lisp/thingatpt.el
  29312. +fsf/emacs/lisp/thingatpt.elc
  29313. +fsf/emacs/lisp/time-stamp.el
  29314. +fsf/emacs/lisp/time-stamp.elc
  29315. +fsf/emacs/lisp/time.el
  29316. +fsf/emacs/lisp/time.elc
  29317. +fsf/emacs/lisp/timer.el
  29318. +fsf/emacs/lisp/timer.elc
  29319. +fsf/emacs/lisp/timezone.el
  29320. +fsf/emacs/lisp/timezone.elc
  29321. +fsf/emacs/lisp/tpu-doc.el
  29322. +fsf/emacs/lisp/tpu-edt.el
  29323. +fsf/emacs/lisp/tpu-edt.elc
  29324. +fsf/emacs/lisp/tpu-extras.el
  29325. +fsf/emacs/lisp/tpu-extras.elc
  29326. +fsf/emacs/lisp/tpu-mapper.el
  29327. +fsf/emacs/lisp/tpu-mapper.elc
  29328. +fsf/emacs/lisp/tq.el
  29329. +fsf/emacs/lisp/tq.elc
  29330. +fsf/emacs/lisp/trace.el
  29331. +fsf/emacs/lisp/trace.elc
  29332. +fsf/emacs/lisp/two-column.el
  29333. +fsf/emacs/lisp/two-column.elc
  29334. +fsf/emacs/lisp/uncompress.el
  29335. +fsf/emacs/lisp/uncompress.elc
  29336. +fsf/emacs/lisp/underline.el
  29337. +fsf/emacs/lisp/underline.elc
  29338. +fsf/emacs/lisp/undigest.el
  29339. +fsf/emacs/lisp/undigest.elc
  29340. +fsf/emacs/lisp/unrmail.el
  29341. +fsf/emacs/lisp/unrmail.elc
  29342. +fsf/emacs/lisp/unused.el
  29343. +fsf/emacs/lisp/unused.elc
  29344. +fsf/emacs/lisp/upd-copyr.el
  29345. +fsf/emacs/lisp/upd-copyr.elc
  29346. +fsf/emacs/lisp/userlock.el
  29347. +fsf/emacs/lisp/userlock.elc
  29348. +fsf/emacs/lisp/vc-hooks.el
  29349. +fsf/emacs/lisp/vc-hooks.elc
  29350. +fsf/emacs/lisp/vc.el
  29351. +fsf/emacs/lisp/vc.elc
  29352. +fsf/emacs/lisp/version.el
  29353. +fsf/emacs/lisp/vi.el
  29354. +fsf/emacs/lisp/vi.elc
  29355. +fsf/emacs/lisp/view.el
  29356. +fsf/emacs/lisp/view.elc
  29357. +fsf/emacs/lisp/vip.el
  29358. +fsf/emacs/lisp/vip.elc
  29359. +fsf/emacs/lisp/vms-patch.el
  29360. +fsf/emacs/lisp/vms-patch.elc
  29361. +fsf/emacs/lisp/vms-pmail.el
  29362. +fsf/emacs/lisp/vms-pmail.elc
  29363. +fsf/emacs/lisp/vmsproc.el
  29364. +fsf/emacs/lisp/vmsproc.elc
  29365. +fsf/emacs/lisp/vmsx.el
  29366. +fsf/emacs/lisp/vmsx.elc
  29367. +fsf/emacs/lisp/vt-control.el
  29368. +fsf/emacs/lisp/vt100-led.el
  29369. +fsf/emacs/lisp/vt100-led.elc
  29370. +fsf/emacs/lisp/window.el
  29371. +fsf/emacs/lisp/window.elc
  29372. +fsf/emacs/lisp/ws-mode.el
  29373. +fsf/emacs/lisp/ws-mode.elc
  29374. +fsf/emacs/lisp/x-menu.el
  29375. +fsf/emacs/lisp/x-menu.elc
  29376. +fsf/emacs/lisp/xscheme.el
  29377. +fsf/emacs/lisp/xscheme.elc
  29378. +fsf/emacs/lisp/yow.el
  29379. +fsf/emacs/lisp/yow.elc
  29380. +fsf/emacs/lwlib/ChangeLog
  29381. +fsf/emacs/lwlib/Imakefile
  29382. +fsf/emacs/lwlib/Makefile.in
  29383. +fsf/emacs/lwlib/README
  29384. +fsf/emacs/lwlib/dispatch.c
  29385. +fsf/emacs/lwlib/dispatch.h
  29386. +fsf/emacs/lwlib/lwlib-Xaw.c
  29387. +fsf/emacs/lwlib/lwlib-Xaw.h
  29388. +fsf/emacs/lwlib/lwlib-Xlw.c
  29389. +fsf/emacs/lwlib/lwlib-Xlw.h
  29390. +fsf/emacs/lwlib/lwlib-Xm.c
  29391. +fsf/emacs/lwlib/lwlib-Xm.h
  29392. +fsf/emacs/lwlib/lwlib-Xol.c
  29393. +fsf/emacs/lwlib/lwlib-Xol.h
  29394. +fsf/emacs/lwlib/lwlib-Xolmb.c
  29395. +fsf/emacs/lwlib/lwlib-Xolmb.h
  29396. +fsf/emacs/lwlib/lwlib-XolmbP.h
  29397. +fsf/emacs/lwlib/lwlib-int.h
  29398. +fsf/emacs/lwlib/lwlib-utils.c
  29399. +fsf/emacs/lwlib/lwlib-utils.h
  29400. +fsf/emacs/lwlib/lwlib.c
  29401. +fsf/emacs/lwlib/lwlib.h
  29402. +fsf/emacs/lwlib/xlwmenu.c
  29403. +fsf/emacs/lwlib/xlwmenu.h
  29404. +fsf/emacs/lwlib/xlwmenuP.h
  29405. +fsf/emacs/lwlib/xrdb-cpp.c
  29406. +fsf/emacs/lwlib/xrdb.c
  29407. +fsf/emacs/make-dist
  29408. +fsf/emacs/man/ChangeLog
  29409. +fsf/emacs/man/Makefile
  29410. +fsf/emacs/man/abbrevs.texi
  29411. +fsf/emacs/man/anti.texi
  29412. +fsf/emacs/man/back.texi
  29413. +fsf/emacs/man/basic.texi
  29414. +fsf/emacs/man/buffers.texi
  29415. +fsf/emacs/man/building.texi
  29416. +fsf/emacs/man/calendar.texi
  29417. +fsf/emacs/man/cl.texi
  29418. +fsf/emacs/man/cmdargs.texi
  29419. +fsf/emacs/man/commands.texi
  29420. +fsf/emacs/man/custom.texi
  29421. +fsf/emacs/man/dired-x.texi
  29422. +fsf/emacs/man/dired.texi
  29423. +fsf/emacs/man/display.texi
  29424. +fsf/emacs/man/emacs.aux
  29425. +fsf/emacs/man/emacs.cps
  29426. +fsf/emacs/man/emacs.fns
  29427. +fsf/emacs/man/emacs.kys
  29428. +fsf/emacs/man/emacs.texi
  29429. +fsf/emacs/man/emacs.vrs
  29430. +fsf/emacs/man/entering.texi
  29431. +fsf/emacs/man/files.texi
  29432. +fsf/emacs/man/fixit.texi
  29433. +fsf/emacs/man/forms.aux
  29434. +fsf/emacs/man/forms.cps
  29435. +fsf/emacs/man/forms.texi
  29436. +fsf/emacs/man/forms.vrs
  29437. +fsf/emacs/man/frames.texi
  29438. +fsf/emacs/man/getopt.c
  29439. +fsf/emacs/man/glossary.texi
  29440. +fsf/emacs/man/gnu.texi
  29441. +fsf/emacs/man/gnu1.texi
  29442. +fsf/emacs/man/gnus.texi
  29443. +fsf/emacs/man/help.texi
  29444. +fsf/emacs/man/indent.texi
  29445. +fsf/emacs/man/info-stnd.texi
  29446. +fsf/emacs/man/info.texi
  29447. +fsf/emacs/man/killing.texi
  29448. +fsf/emacs/man/m-x.texi
  29449. +fsf/emacs/man/major.texi
  29450. +fsf/emacs/man/mark.texi
  29451. +fsf/emacs/man/mini.texi
  29452. +fsf/emacs/man/misc.texi
  29453. +fsf/emacs/man/msdog.texi
  29454. +fsf/emacs/man/picture.texi
  29455. +fsf/emacs/man/programs.texi
  29456. +fsf/emacs/man/regs.texi
  29457. +fsf/emacs/man/rmail.texi
  29458. +fsf/emacs/man/sc.texi
  29459. +fsf/emacs/man/screen.texi
  29460. +fsf/emacs/man/search.texi
  29461. +fsf/emacs/man/sending.texi
  29462. +fsf/emacs/man/split-man
  29463. +fsf/emacs/man/texindex.c
  29464. +fsf/emacs/man/texinfo.tex
  29465. +fsf/emacs/man/text.texi
  29466. +fsf/emacs/man/trouble.texi
  29467. +fsf/emacs/man/vip.aux
  29468. +fsf/emacs/man/vip.texi
  29469. +fsf/emacs/man/windows.texi
  29470. +fsf/emacs/manifests/src
  29471. +fsf/emacs/move-if-change
  29472. +fsf/emacs/msdos/COPYING
  29473. +fsf/emacs/msdos/ChangeLog
  29474. +fsf/emacs/msdos/emacs.ico
  29475. +fsf/emacs/msdos/emacs.pif
  29476. +fsf/emacs/msdos/mainmake
  29477. +fsf/emacs/msdos/sed1.inp
  29478. +fsf/emacs/msdos/sed2.inp
  29479. +fsf/emacs/msdos/sed3.inp
  29480. +fsf/emacs/msdos/sed4.inp
  29481. +fsf/emacs/oldXMenu/Activate.c
  29482. +fsf/emacs/oldXMenu/AddPane.c
  29483. +fsf/emacs/oldXMenu/AddSel.c
  29484. +fsf/emacs/oldXMenu/ChangeLog
  29485. +fsf/emacs/oldXMenu/ChgPane.c
  29486. +fsf/emacs/oldXMenu/ChgSel.c
  29487. +fsf/emacs/oldXMenu/Create.c
  29488. +fsf/emacs/oldXMenu/DelPane.c
  29489. +fsf/emacs/oldXMenu/DelSel.c
  29490. +fsf/emacs/oldXMenu/Destroy.c
  29491. +fsf/emacs/oldXMenu/Error.c
  29492. +fsf/emacs/oldXMenu/EvHand.c
  29493. +fsf/emacs/oldXMenu/FindPane.c
  29494. +fsf/emacs/oldXMenu/FindSel.c
  29495. +fsf/emacs/oldXMenu/Imakefile
  29496. +fsf/emacs/oldXMenu/InsPane.c
  29497. +fsf/emacs/oldXMenu/InsSel.c
  29498. +fsf/emacs/oldXMenu/Internal.c
  29499. +fsf/emacs/oldXMenu/Locate.c
  29500. +fsf/emacs/oldXMenu/Makefile.in
  29501. +fsf/emacs/oldXMenu/Post.c
  29502. +fsf/emacs/oldXMenu/README
  29503. +fsf/emacs/oldXMenu/Recomp.c
  29504. +fsf/emacs/oldXMenu/SetAEQ.c
  29505. +fsf/emacs/oldXMenu/SetFrz.c
  29506. +fsf/emacs/oldXMenu/SetPane.c
  29507. +fsf/emacs/oldXMenu/SetSel.c
  29508. +fsf/emacs/oldXMenu/X10.h
  29509. +fsf/emacs/oldXMenu/XCrAssoc.c
  29510. +fsf/emacs/oldXMenu/XDelAssoc.c
  29511. +fsf/emacs/oldXMenu/XDestAssoc.c
  29512. +fsf/emacs/oldXMenu/XLookAssoc.c
  29513. +fsf/emacs/oldXMenu/XMakeAssoc.c
  29514. +fsf/emacs/oldXMenu/XMenu.h
  29515. +fsf/emacs/oldXMenu/XMenuInt.h
  29516. +fsf/emacs/oldXMenu/compile.com
  29517. +fsf/emacs/oldXMenu/copyright.h
  29518. +fsf/emacs/oldXMenu/descrip.mms
  29519. +fsf/emacs/oldXMenu/insque.c
  29520. +fsf/emacs/shortnames/COPYING
  29521. +fsf/emacs/shortnames/Makefile
  29522. +fsf/emacs/shortnames/defines.c
  29523. +fsf/emacs/shortnames/dups.c
  29524. +fsf/emacs/shortnames/names.c
  29525. +fsf/emacs/shortnames/reserved
  29526. +fsf/emacs/shortnames/special
  29527. +fsf/emacs/site-lisp/ChangeLog
  29528. +fsf/emacs/site-lisp/DUMPING
  29529. +fsf/emacs/site-lisp/MANIFEST
  29530. +fsf/emacs/site-lisp/README
  29531. +fsf/emacs/site-lisp/cc-compat.el
  29532. +fsf/emacs/site-lisp/cc-mode-18.el
  29533. +fsf/emacs/site-lisp/cc-mode.el
  29534. +fsf/emacs/site-lisp/reporter.elc
  29535. +fsf/emacs/site-lisp/tapestry.elc
  29536. +fsf/emacs/site-lisp/timezone.elc
  29537. +fsf/emacs/site-lisp/vm-auto-archive.el
  29538. +fsf/emacs/site-lisp/vm-delete.elc
  29539. +fsf/emacs/site-lisp/vm-digest.elc
  29540. +fsf/emacs/site-lisp/vm-edit.elc
  29541. +fsf/emacs/site-lisp/vm-folder.elc
  29542. +fsf/emacs/site-lisp/vm-license.elc
  29543. +fsf/emacs/site-lisp/vm-mark.elc
  29544. +fsf/emacs/site-lisp/vm-message.elc
  29545. +fsf/emacs/site-lisp/vm-minibuf.elc
  29546. +fsf/emacs/site-lisp/vm-misc.elc
  29547. +fsf/emacs/site-lisp/vm-motion.elc
  29548. +fsf/emacs/site-lisp/vm-page.elc
  29549. +fsf/emacs/site-lisp/vm-pop.elc
  29550. +fsf/emacs/site-lisp/vm-reply.elc
  29551. +fsf/emacs/site-lisp/vm-save.elc
  29552. +fsf/emacs/site-lisp/vm-search.elc
  29553. +fsf/emacs/site-lisp/vm-sort.elc
  29554. +fsf/emacs/site-lisp/vm-startup.elc
  29555. +fsf/emacs/site-lisp/vm-summary.elc
  29556. +fsf/emacs/site-lisp/vm-thread.elc
  29557. +fsf/emacs/site-lisp/vm-undo.elc
  29558. +fsf/emacs/site-lisp/vm-vars.elc
  29559. +fsf/emacs/site-lisp/vm-version.elc
  29560. +fsf/emacs/site-lisp/vm-virtual.elc
  29561. +fsf/emacs/site-lisp/vm-window.elc
  29562. +fsf/emacs/site-lisp/vm.el
  29563. +fsf/emacs/site-lisp/vm.elc
  29564. +fsf/emacs/src/.dbxinit
  29565. +fsf/emacs/src/.gdbinit
  29566. +fsf/emacs/src/COPYING
  29567. +fsf/emacs/src/ChangeLog
  29568. +fsf/emacs/src/ChangeLog.1
  29569. +fsf/emacs/src/ChangeLog.2
  29570. +fsf/emacs/src/ChangeLog.3
  29571. +fsf/emacs/src/DOC
  29572. +fsf/emacs/src/Makefile.in.in
  29573. +fsf/emacs/src/README
  29574. +fsf/emacs/src/abbrev.c
  29575. +fsf/emacs/src/abbrev_protos.h
  29576. +fsf/emacs/src/acldef.h
  29577. +fsf/emacs/src/alloc.c
  29578. +fsf/emacs/src/alloc_protos.h
  29579. +fsf/emacs/src/alloca.c
  29580. +fsf/emacs/src/alloca.s
  29581. +fsf/emacs/src/amiga.h
  29582. +fsf/emacs/src/amiga_clipboard.c
  29583. +fsf/emacs/src/amiga_clipboard_protos.h
  29584. +fsf/emacs/src/amiga_data.c
  29585. +fsf/emacs/src/amiga_dump.c
  29586. +fsf/emacs/src/amiga_dump_protos.h
  29587. +fsf/emacs/src/amiga_fns.c
  29588. +fsf/emacs/src/amiga_fns_protos.h
  29589. +fsf/emacs/src/amiga_malloc.c
  29590. +fsf/emacs/src/amiga_malloc_protos.h
  29591. +fsf/emacs/src/amiga_menu.c
  29592. +fsf/emacs/src/amiga_menu_protos.h
  29593. +fsf/emacs/src/amiga_processes.c
  29594. +fsf/emacs/src/amiga_rexx.c
  29595. +fsf/emacs/src/amiga_rexx_protos.h
  29596. +fsf/emacs/src/amiga_screen.c
  29597. +fsf/emacs/src/amiga_screen_protos.h
  29598. +fsf/emacs/src/amiga_serial.c
  29599. +fsf/emacs/src/amiga_serial_protos.h
  29600. +fsf/emacs/src/amiga_sysdep.c
  29601. +fsf/emacs/src/amiga_sysdep_protos.h
  29602. +fsf/emacs/src/amiga_term.c
  29603. +fsf/emacs/src/amiga_term_protos.h
  29604. +fsf/emacs/src/amiga_tty.c
  29605. +fsf/emacs/src/amiga_tty_protos.h
  29606. +fsf/emacs/src/amiga_xmenu.c
  29607. +fsf/emacs/src/amiga_xmenu_protos.h
  29608. +fsf/emacs/src/bitmaps/README
  29609. +fsf/emacs/src/bitmaps/cntrpmsk.xbm
  29610. +fsf/emacs/src/bitmaps/cntrptr.xbm
  29611. +fsf/emacs/src/bitmaps/crosswv.xbm
  29612. +fsf/emacs/src/bitmaps/dimple1.xbm
  29613. +fsf/emacs/src/bitmaps/dimple3.xbm
  29614. +fsf/emacs/src/bitmaps/gray.xbm
  29615. +fsf/emacs/src/bitmaps/gray1.xbm
  29616. +fsf/emacs/src/bitmaps/gray3.xbm
  29617. +fsf/emacs/src/bitmaps/leftpmsk.xbm
  29618. +fsf/emacs/src/bitmaps/leftptr.xbm
  29619. +fsf/emacs/src/bitmaps/rtpmsk.xbm
  29620. +fsf/emacs/src/bitmaps/rtptr.xbm
  29621. +fsf/emacs/src/bitmaps/stipple.xbm
  29622. +fsf/emacs/src/blockinput.h
  29623. +fsf/emacs/src/buffer.c
  29624. +fsf/emacs/src/buffer.h
  29625. +fsf/emacs/src/buffer_protos.h
  29626. +fsf/emacs/src/bytecode.c
  29627. +fsf/emacs/src/bytecode_protos.h
  29628. +fsf/emacs/src/callint.c
  29629. +fsf/emacs/src/callint_protos.h
  29630. +fsf/emacs/src/callproc.c
  29631. +fsf/emacs/src/callproc_protos.h
  29632. +fsf/emacs/src/casefiddle.c
  29633. +fsf/emacs/src/casefiddle_protos.h
  29634. +fsf/emacs/src/casetab.c
  29635. +fsf/emacs/src/casetab_protos.h
  29636. +fsf/emacs/src/cdodump.sh
  29637. +fsf/emacs/src/chpdef.h
  29638. +fsf/emacs/src/cm.c
  29639. +fsf/emacs/src/cm.h
  29640. +fsf/emacs/src/cm_protos.h
  29641. +fsf/emacs/src/cmds.c
  29642. +fsf/emacs/src/cmds_protos.h
  29643. +fsf/emacs/src/commands.h
  29644. +fsf/emacs/src/config.h.in
  29645. +fsf/emacs/src/config.h.in-sasc
  29646. +fsf/emacs/src/cover.dat
  29647. +fsf/emacs/src/cprinit
  29648. +fsf/emacs/src/crt0.c
  29649. +fsf/emacs/src/ct.sh
  29650. +fsf/emacs/src/cxux-crt0.s
  29651. +fsf/emacs/src/data.c
  29652. +fsf/emacs/src/data_protos.h
  29653. +fsf/emacs/src/dired.c
  29654. +fsf/emacs/src/dired_protos.h
  29655. +fsf/emacs/src/dispextern.h
  29656. +fsf/emacs/src/dispnew.c
  29657. +fsf/emacs/src/dispnew_protos.h
  29658. +fsf/emacs/src/disptab.h
  29659. +fsf/emacs/src/doc.c
  29660. +fsf/emacs/src/doc_protos.h
  29661. +fsf/emacs/src/dodump.sh
  29662. +fsf/emacs/src/doprnt.c
  29663. +fsf/emacs/src/doprnt_protos.h
  29664. +fsf/emacs/src/dosfns.c
  29665. +fsf/emacs/src/dosfns.h
  29666. +fsf/emacs/src/dostrip.c
  29667. +fsf/emacs/src/dostrip.lnk
  29668. +fsf/emacs/src/editfns.c
  29669. +fsf/emacs/src/editfns_protos.h
  29670. +fsf/emacs/src/emacs.c
  29671. +fsf/emacs/src/emacs.sh
  29672. +fsf/emacs/src/emacs_protos.h
  29673. +fsf/emacs/src/emacssignal.h
  29674. +fsf/emacs/src/eval.c
  29675. +fsf/emacs/src/eval_protos.h
  29676. +fsf/emacs/src/fileio.c
  29677. +fsf/emacs/src/fileio_protos.h
  29678. +fsf/emacs/src/filelock.c
  29679. +fsf/emacs/src/filelock_protos.h
  29680. +fsf/emacs/src/filemode.c
  29681. +fsf/emacs/src/filemode_protos.h
  29682. +fsf/emacs/src/firstfile.c
  29683. +fsf/emacs/src/floatfns.c
  29684. +fsf/emacs/src/floatfns_protos.h
  29685. +fsf/emacs/src/fns.c
  29686. +fsf/emacs/src/fns_protos.h
  29687. +fsf/emacs/src/frame.c
  29688. +fsf/emacs/src/frame.h
  29689. +fsf/emacs/src/frame_protos.h
  29690. +fsf/emacs/src/getloadavg.c
  29691. +fsf/emacs/src/getloadavg_protos.h
  29692. +fsf/emacs/src/getpagesize.h
  29693. +fsf/emacs/src/gmalloc.c
  29694. +fsf/emacs/src/gnu.h
  29695. +fsf/emacs/src/hftctl.c
  29696. +fsf/emacs/src/indent.c
  29697. +fsf/emacs/src/indent.h
  29698. +fsf/emacs/src/indent_protos.h
  29699. +fsf/emacs/src/insdel.c
  29700. +fsf/emacs/src/insdel_protos.h
  29701. +fsf/emacs/src/intervals.c
  29702. +fsf/emacs/src/intervals.h
  29703. +fsf/emacs/src/ioctl.h
  29704. +fsf/emacs/src/keyboard.c
  29705. +fsf/emacs/src/keyboard.h
  29706. +fsf/emacs/src/keyboard_protos.h
  29707. +fsf/emacs/src/keymap.c
  29708. +fsf/emacs/src/keymap_protos.h
  29709. +fsf/emacs/src/lastfile.c
  29710. +fsf/emacs/src/line.h
  29711. +fsf/emacs/src/lisp.h
  29712. +fsf/emacs/src/lread.c
  29713. +fsf/emacs/src/lread_protos.h
  29714. +fsf/emacs/src/m/7300.h
  29715. +fsf/emacs/src/m/README
  29716. +fsf/emacs/src/m/alliant-2800.h
  29717. +fsf/emacs/src/m/alliant.h
  29718. +fsf/emacs/src/m/alliant1.h
  29719. +fsf/emacs/src/m/alliant4.h
  29720. +fsf/emacs/src/m/altos.h
  29721. +fsf/emacs/src/m/amdahl.h
  29722. +fsf/emacs/src/m/amiga.h
  29723. +fsf/emacs/src/m/apollo.h
  29724. +fsf/emacs/src/m/att3b.h
  29725. +fsf/emacs/src/m/aviion.h
  29726. +fsf/emacs/src/m/celerity.h
  29727. +fsf/emacs/src/m/clipper.h
  29728. +fsf/emacs/src/m/cnvrgnt.h
  29729. +fsf/emacs/src/m/convex.h
  29730. +fsf/emacs/src/m/cydra5.h
  29731. +fsf/emacs/src/m/delta.h
  29732. +fsf/emacs/src/m/delta88k.h
  29733. +fsf/emacs/src/m/dpx2.h
  29734. +fsf/emacs/src/m/dual.h
  29735. +fsf/emacs/src/m/elxsi.h
  29736. +fsf/emacs/src/m/gec63.h
  29737. +fsf/emacs/src/m/gould-np1.h
  29738. +fsf/emacs/src/m/gould.h
  29739. +fsf/emacs/src/m/hp800.h
  29740. +fsf/emacs/src/m/hp9000s300.h
  29741. +fsf/emacs/src/m/i860.h
  29742. +fsf/emacs/src/m/ibm370aix.h
  29743. +fsf/emacs/src/m/ibmps2-aix.h
  29744. +fsf/emacs/src/m/ibmrs6000.h
  29745. +fsf/emacs/src/m/ibmrs6000.inp
  29746. +fsf/emacs/src/m/ibmrt-aix.h
  29747. +fsf/emacs/src/m/ibmrt.h
  29748. +fsf/emacs/src/m/intel386.h
  29749. +fsf/emacs/src/m/iris4d.h
  29750. +fsf/emacs/src/m/iris5d.h
  29751. +fsf/emacs/src/m/irist.h
  29752. +fsf/emacs/src/m/is386.h
  29753. +fsf/emacs/src/m/isi-ov.h
  29754. +fsf/emacs/src/m/masscomp.h
  29755. +fsf/emacs/src/m/mega68.h
  29756. +fsf/emacs/src/m/mg1.h
  29757. +fsf/emacs/src/m/mips-siemens.h
  29758. +fsf/emacs/src/m/mips.h
  29759. +fsf/emacs/src/m/mips4.h
  29760. +fsf/emacs/src/m/news-risc.h
  29761. +fsf/emacs/src/m/news.h
  29762. +fsf/emacs/src/m/next.h
  29763. +fsf/emacs/src/m/nh3000.h
  29764. +fsf/emacs/src/m/nh4000.h
  29765. +fsf/emacs/src/m/ns16000.h
  29766. +fsf/emacs/src/m/ns32000.h
  29767. +fsf/emacs/src/m/nu.h
  29768. +fsf/emacs/src/m/orion.h
  29769. +fsf/emacs/src/m/orion105.h
  29770. +fsf/emacs/src/m/pfa50.h
  29771. +fsf/emacs/src/m/plexus.h
  29772. +fsf/emacs/src/m/pmax.h
  29773. +fsf/emacs/src/m/pyramid.h
  29774. +fsf/emacs/src/m/pyrmips.h
  29775. +fsf/emacs/src/m/sequent.h
  29776. +fsf/emacs/src/m/sgi3000.h
  29777. +fsf/emacs/src/m/sparc.h
  29778. +fsf/emacs/src/m/sps7.h
  29779. +fsf/emacs/src/m/stride.h
  29780. +fsf/emacs/src/m/sun1.h
  29781. +fsf/emacs/src/m/sun2.h
  29782. +fsf/emacs/src/m/sun3-68881.h
  29783. +fsf/emacs/src/m/sun3-fpa.h
  29784. +fsf/emacs/src/m/sun3-soft.h
  29785. +fsf/emacs/src/m/sun3.h
  29786. +fsf/emacs/src/m/sun386.h
  29787. +fsf/emacs/src/m/symmetry.h
  29788. +fsf/emacs/src/m/tad68k.h
  29789. +fsf/emacs/src/m/tahoe.h
  29790. +fsf/emacs/src/m/tandem-s2.h
  29791. +fsf/emacs/src/m/targon31.h
  29792. +fsf/emacs/src/m/tek4300.h
  29793. +fsf/emacs/src/m/tekxd88.h
  29794. +fsf/emacs/src/m/template.h
  29795. +fsf/emacs/src/m/tower32.h
  29796. +fsf/emacs/src/m/tower32v3.h
  29797. +fsf/emacs/src/m/ustation.h
  29798. +fsf/emacs/src/m/vax.h
  29799. +fsf/emacs/src/m/wicat.h
  29800. +fsf/emacs/src/m/xps100.h
  29801. +fsf/emacs/src/macros.c
  29802. +fsf/emacs/src/macros.h
  29803. +fsf/emacs/src/macros_protos.h
  29804. +fsf/emacs/src/marker.c
  29805. +fsf/emacs/src/marker_protos.h
  29806. +fsf/emacs/src/mem-limits.h
  29807. +fsf/emacs/src/minibuf.c
  29808. +fsf/emacs/src/minibuf_protos.h
  29809. +fsf/emacs/src/mocklisp.c
  29810. +fsf/emacs/src/mocklisp.h
  29811. +fsf/emacs/src/mocklisp_protos.h
  29812. +fsf/emacs/src/msdos.c
  29813. +fsf/emacs/src/msdos.h
  29814. +fsf/emacs/src/ndir.h
  29815. +fsf/emacs/src/oldalloca.c
  29816. +fsf/emacs/src/param.h
  29817. +fsf/emacs/src/paths.h
  29818. +fsf/emacs/src/paths.h.in
  29819. +fsf/emacs/src/point.h
  29820. +fsf/emacs/src/pre-crt0.c
  29821. +fsf/emacs/src/prefix-args
  29822. +fsf/emacs/src/prefix-args.c
  29823. +fsf/emacs/src/prefix-args.o
  29824. +fsf/emacs/src/print.c
  29825. +fsf/emacs/src/print_protos.h
  29826. +fsf/emacs/src/process.c
  29827. +fsf/emacs/src/process.h
  29828. +fsf/emacs/src/process_protos.h
  29829. +fsf/emacs/src/protos.c
  29830. +fsf/emacs/src/protos.h
  29831. +fsf/emacs/src/puresize.h
  29832. +fsf/emacs/src/ralloc.c
  29833. +fsf/emacs/src/regex.c
  29834. +fsf/emacs/src/regex.h
  29835. +fsf/emacs/src/regex_protos.h
  29836. +fsf/emacs/src/s/3700.h
  29837. +fsf/emacs/src/s/386-ix.h
  29838. +fsf/emacs/src/s/386bsd.h
  29839. +fsf/emacs/src/s/README
  29840. +fsf/emacs/src/s/aix3-1.h
  29841. +fsf/emacs/src/s/aix3-2-5.h
  29842. +fsf/emacs/src/s/aix3-2.h
  29843. +fsf/emacs/src/s/alliant-2800.h
  29844. +fsf/emacs/src/s/alliant.h
  29845. +fsf/emacs/src/s/altos.h
  29846. +fsf/emacs/src/s/amdahl.h
  29847. +fsf/emacs/src/s/amigaos.h
  29848. +fsf/emacs/src/s/apollo.h
  29849. +fsf/emacs/src/s/bsd386.h
  29850. +fsf/emacs/src/s/bsd4-1.h
  29851. +fsf/emacs/src/s/bsd4-2.h
  29852. +fsf/emacs/src/s/bsd4-3.h
  29853. +fsf/emacs/src/s/cxux.h
  29854. +fsf/emacs/src/s/cxux7.h
  29855. +fsf/emacs/src/s/dgux.h
  29856. +fsf/emacs/src/s/dgux5-4r2.h
  29857. +fsf/emacs/src/s/dgux5-4r3.h
  29858. +fsf/emacs/src/s/esix.h
  29859. +fsf/emacs/src/s/esix5r4.h
  29860. +fsf/emacs/src/s/freebsd.h
  29861. +fsf/emacs/src/s/gnu.h
  29862. +fsf/emacs/src/s/hpux.h
  29863. +fsf/emacs/src/s/hpux8.h
  29864. +fsf/emacs/src/s/hpux9.h
  29865. +fsf/emacs/src/s/hpux9shr.h
  29866. +fsf/emacs/src/s/iris3-5.h
  29867. +fsf/emacs/src/s/iris3-6.h
  29868. +fsf/emacs/src/s/irix3-3.h
  29869. +fsf/emacs/src/s/irix4-0.h
  29870. +fsf/emacs/src/s/irix5-0.h
  29871. +fsf/emacs/src/s/isc2-2.h
  29872. +fsf/emacs/src/s/isc3-0.h
  29873. +fsf/emacs/src/s/isc4-0.h
  29874. +fsf/emacs/src/s/linux.h
  29875. +fsf/emacs/src/s/mach2.h
  29876. +fsf/emacs/src/s/msdos.h
  29877. +fsf/emacs/src/s/netbsd.h
  29878. +fsf/emacs/src/s/newsos5.h
  29879. +fsf/emacs/src/s/osf1.h
  29880. +fsf/emacs/src/s/rtu.h
  29881. +fsf/emacs/src/s/sco4.h
  29882. +fsf/emacs/src/s/sol2-3.h
  29883. +fsf/emacs/src/s/sol2-4.h
  29884. +fsf/emacs/src/s/sol2.h
  29885. +fsf/emacs/src/s/sunos4-0.h
  29886. +fsf/emacs/src/s/sunos4-1-2.h
  29887. +fsf/emacs/src/s/sunos4-1-3.h
  29888. +fsf/emacs/src/s/sunos4-1.h
  29889. +fsf/emacs/src/s/sunos4shr.h
  29890. +fsf/emacs/src/s/template.h
  29891. +fsf/emacs/src/s/umax.h
  29892. +fsf/emacs/src/s/umips.h
  29893. +fsf/emacs/src/s/unipl5-0.h
  29894. +fsf/emacs/src/s/unipl5-2.h
  29895. +fsf/emacs/src/s/usg5-0.h
  29896. +fsf/emacs/src/s/usg5-2-2.h
  29897. +fsf/emacs/src/s/usg5-2.h
  29898. +fsf/emacs/src/s/usg5-3.h
  29899. +fsf/emacs/src/s/usg5-4-2.h
  29900. +fsf/emacs/src/s/usg5-4.h
  29901. +fsf/emacs/src/s/vms.h
  29902. +fsf/emacs/src/s/vms4-0.h
  29903. +fsf/emacs/src/s/vms4-2.h
  29904. +fsf/emacs/src/s/vms4-4.h
  29905. +fsf/emacs/src/s/vms5-5.h
  29906. +fsf/emacs/src/s/xenix.h
  29907. +fsf/emacs/src/scoptions
  29908. +fsf/emacs/src/scroll.c
  29909. +fsf/emacs/src/scroll_protos.h
  29910. +fsf/emacs/src/search.c
  29911. +fsf/emacs/src/search_protos.h
  29912. +fsf/emacs/src/semacs.sh
  29913. +fsf/emacs/src/setlisp.cpr
  29914. +fsf/emacs/src/simplerexx.c
  29915. +fsf/emacs/src/simplerexx.h
  29916. +fsf/emacs/src/sink.h
  29917. +fsf/emacs/src/sink11.h
  29918. +fsf/emacs/src/sink11mask.h
  29919. +fsf/emacs/src/sinkmask.h
  29920. +fsf/emacs/src/smakefile
  29921. +fsf/emacs/src/st.sh
  29922. +fsf/emacs/src/sunfns.c
  29923. +fsf/emacs/src/syntax.c
  29924. +fsf/emacs/src/syntax.h
  29925. +fsf/emacs/src/syntax_protos.h
  29926. +fsf/emacs/src/sysdep.c
  29927. +fsf/emacs/src/syssignal.h
  29928. +fsf/emacs/src/systime.h
  29929. +fsf/emacs/src/systty.h
  29930. +fsf/emacs/src/syswait.h
  29931. +fsf/emacs/src/temacs.opt
  29932. +fsf/emacs/src/term.c
  29933. +fsf/emacs/src/term_protos.h
  29934. +fsf/emacs/src/termcap.c
  29935. +fsf/emacs/src/termchar.h
  29936. +fsf/emacs/src/termhooks.h
  29937. +fsf/emacs/src/terminfo.c
  29938. +fsf/emacs/src/termopts.h
  29939. +fsf/emacs/src/textprop.c
  29940. +fsf/emacs/src/tparam.c
  29941. +fsf/emacs/src/uaf.h
  29942. +fsf/emacs/src/undo.c
  29943. +fsf/emacs/src/undo_protos.h
  29944. +fsf/emacs/src/unexaix.c
  29945. +fsf/emacs/src/unexconvex.c
  29946. +fsf/emacs/src/unexec.c
  29947. +fsf/emacs/src/unexelf.c
  29948. +fsf/emacs/src/unexelfsgi.c
  29949. +fsf/emacs/src/unexencap.c
  29950. +fsf/emacs/src/unexenix.c
  29951. +fsf/emacs/src/unexfx2800.c
  29952. +fsf/emacs/src/unexhp9k800.c
  29953. +fsf/emacs/src/unexmips.c
  29954. +fsf/emacs/src/unexnext.c
  29955. +fsf/emacs/src/unexsunos4.c
  29956. +fsf/emacs/src/vlimit.h
  29957. +fsf/emacs/src/vm-limit.c
  29958. +fsf/emacs/src/vms-pp.c
  29959. +fsf/emacs/src/vms-pp.trans
  29960. +fsf/emacs/src/vms-pwd.h
  29961. +fsf/emacs/src/vmsdir.h
  29962. +fsf/emacs/src/vmsfns.c
  29963. +fsf/emacs/src/vmsgmalloc.c
  29964. +fsf/emacs/src/vmsmap.c
  29965. +fsf/emacs/src/vmspaths.h
  29966. +fsf/emacs/src/vmsproc.c
  29967. +fsf/emacs/src/vmsproc.h
  29968. +fsf/emacs/src/vmstime.c
  29969. +fsf/emacs/src/vmstime.h
  29970. +fsf/emacs/src/widget.c
  29971. +fsf/emacs/src/widget.h
  29972. +fsf/emacs/src/widgetprv.h
  29973. +fsf/emacs/src/window.c
  29974. +fsf/emacs/src/window.h
  29975. +fsf/emacs/src/window_protos.h
  29976. +fsf/emacs/src/xdisp.c
  29977. +fsf/emacs/src/xdisp_protos.h
  29978. +fsf/emacs/src/xfaces.c
  29979. +fsf/emacs/src/xfns.c
  29980. +fsf/emacs/src/xmakefile
  29981. +fsf/emacs/src/xmakefile.test
  29982. +fsf/emacs/src/xmenu.c
  29983. +fsf/emacs/src/xrdb.c
  29984. +fsf/emacs/src/xselect.c
  29985. +fsf/emacs/src/xterm.c
  29986. +fsf/emacs/src/xterm.h
  29987. +fsf/emacs/src/ymakefile
  29988. +fsf/emacs/unixlib/include/alloca.h
  29989. +fsf/emacs/unixlib/include/amiga/ioctl.h
  29990. +fsf/emacs/unixlib/include/errno.h
  29991. +fsf/emacs/unixlib/include/fcntl.h
  29992. +fsf/emacs/unixlib/include/grp.h
  29993. +fsf/emacs/unixlib/include/internal/devices.h
  29994. +fsf/emacs/unixlib/include/internal/files.h
  29995. +fsf/emacs/unixlib/include/internal/messages.h
  29996. +fsf/emacs/unixlib/include/internal/timers.h
  29997. +fsf/emacs/unixlib/include/internal/vars.h
  29998. +fsf/emacs/unixlib/include/pwd.h
  29999. +fsf/emacs/unixlib/include/setjmp.h
  30000. +fsf/emacs/unixlib/include/signal.h
  30001. +fsf/emacs/unixlib/include/stat.h
  30002. +fsf/emacs/unixlib/include/stdio.h
  30003. +fsf/emacs/unixlib/include/stdlib.h
  30004. +fsf/emacs/unixlib/include/strings.h
  30005. +fsf/emacs/unixlib/include/sys/cdefs.h
  30006. +fsf/emacs/unixlib/include/sys/fcntl.h
  30007. +fsf/emacs/unixlib/include/sys/file.h
  30008. +fsf/emacs/unixlib/include/sys/filio.h
  30009. +fsf/emacs/unixlib/include/sys/ioctl.h
  30010. +fsf/emacs/unixlib/include/sys/param.h
  30011. +fsf/emacs/unixlib/include/sys/socket.h
  30012. +fsf/emacs/unixlib/include/sys/stat.h
  30013. +fsf/emacs/unixlib/include/sys/termios.h
  30014. +fsf/emacs/unixlib/include/sys/time.h
  30015. +fsf/emacs/unixlib/include/sys/timeb.h
  30016. +fsf/emacs/unixlib/include/sys/types.h
  30017. +fsf/emacs/unixlib/include/sys/unistd.h
  30018. +fsf/emacs/unixlib/include/sys/vlimit.h
  30019. +fsf/emacs/unixlib/include/sys/wait.h
  30020. +fsf/emacs/unixlib/include/time.h
  30021. +fsf/emacs/unixlib/include/tzfile.h
  30022. +fsf/emacs/unixlib/include/unistd.h
  30023. +fsf/emacs/unixlib/include/utime.h
  30024. +fsf/emacs/unixlib/intro.doc
  30025. +fsf/emacs/unixlib/mkmkf
  30026. +fsf/emacs/unixlib/mkmkf.perl
  30027. +fsf/emacs/unixlib/src/SCOPTIONS
  30028. +fsf/emacs/unixlib/src/_exit.c
  30029. +fsf/emacs/unixlib/src/_main.c
  30030. +fsf/emacs/unixlib/src/_setjmp.asm
  30031. +fsf/emacs/unixlib/src/abort.c
  30032. +fsf/emacs/unixlib/src/access.c
  30033. +fsf/emacs/unixlib/src/alloca.c
  30034. +fsf/emacs/unixlib/src/allocdos.c
  30035. +fsf/emacs/unixlib/src/amiga.h
  30036. +fsf/emacs/unixlib/src/amigaos.c
  30037. +fsf/emacs/unixlib/src/amigaos.h
  30038. +fsf/emacs/unixlib/src/amigatime.c
  30039. +fsf/emacs/unixlib/src/bcmp.c
  30040. +fsf/emacs/unixlib/src/bcopy.c
  30041. +fsf/emacs/unixlib/src/bzero.c
  30042. +fsf/emacs/unixlib/src/chmod.c
  30043. +fsf/emacs/unixlib/src/chown.c
  30044. +fsf/emacs/unixlib/src/close.c
  30045. +fsf/emacs/unixlib/src/creat.c
  30046. +fsf/emacs/unixlib/src/ctime.c
  30047. +fsf/emacs/unixlib/src/devices.c
  30048. +fsf/emacs/unixlib/src/dir.c
  30049. +fsf/emacs/unixlib/src/dir_data.c
  30050. +fsf/emacs/unixlib/src/dir_data.h
  30051. +fsf/emacs/unixlib/src/error.c
  30052. +fsf/emacs/unixlib/src/error_msg.c
  30053. +fsf/emacs/unixlib/src/exec.c
  30054. +fsf/emacs/unixlib/src/fchmod.c
  30055. +fsf/emacs/unixlib/src/fcntl.c
  30056. +fsf/emacs/unixlib/src/fibstat.c
  30057. +fsf/emacs/unixlib/src/fibstat.h
  30058. +fsf/emacs/unixlib/src/fifo.h
  30059. +fsf/emacs/unixlib/src/fifo_pragmas.h
  30060. +fsf/emacs/unixlib/src/fifofd.c
  30061. +fsf/emacs/unixlib/src/fifofd.h
  30062. +fsf/emacs/unixlib/src/files.c
  30063. +fsf/emacs/unixlib/src/fstat.c
  30064. +fsf/emacs/unixlib/src/ftruncate.c
  30065. +fsf/emacs/unixlib/src/getenv.c
  30066. +fsf/emacs/unixlib/src/gethostname.c
  30067. +fsf/emacs/unixlib/src/getpid.c
  30068. +fsf/emacs/unixlib/src/getwd.c
  30069. +fsf/emacs/unixlib/src/gid.c
  30070. +fsf/emacs/unixlib/src/grp.c
  30071. +fsf/emacs/unixlib/src/index.c
  30072. +fsf/emacs/unixlib/src/ioctl.c
  30073. +fsf/emacs/unixlib/src/isatty.c
  30074. +fsf/emacs/unixlib/src/kill.c
  30075. +fsf/emacs/unixlib/src/link.c
  30076. +fsf/emacs/unixlib/src/lseek.c
  30077. +fsf/emacs/unixlib/src/message.c
  30078. +fsf/emacs/unixlib/src/mkdir.c
  30079. +fsf/emacs/unixlib/src/mkfifo.c
  30080. +fsf/emacs/unixlib/src/mktemp.c
  30081. +fsf/emacs/unixlib/src/open.c
  30082. +fsf/emacs/unixlib/src/perror.c
  30083. +fsf/emacs/unixlib/src/pipe.c
  30084. +fsf/emacs/unixlib/src/popen.c
  30085. +fsf/emacs/unixlib/src/processes.c
  30086. +fsf/emacs/unixlib/src/processes.h
  30087. +fsf/emacs/unixlib/src/protection.c
  30088. +fsf/emacs/unixlib/src/pseudo_c.c
  30089. +fsf/emacs/unixlib/src/pwd.c
  30090. +fsf/emacs/unixlib/src/read.c
  30091. +fsf/emacs/unixlib/src/readlink.c
  30092. +fsf/emacs/unixlib/src/rename.c
  30093. +fsf/emacs/unixlib/src/rindex.c
  30094. +fsf/emacs/unixlib/src/rmdir.c
  30095. +fsf/emacs/unixlib/src/select.c
  30096. +fsf/emacs/unixlib/src/setjmp.c
  30097. +fsf/emacs/unixlib/src/siglist.c
  30098. +fsf/emacs/unixlib/src/signal.c
  30099. +fsf/emacs/unixlib/src/signals.c
  30100. +fsf/emacs/unixlib/src/signals.h
  30101. +fsf/emacs/unixlib/src/sigpause.c
  30102. +fsf/emacs/unixlib/src/sigsetmask.c
  30103. +fsf/emacs/unixlib/src/sleep.c
  30104. +fsf/emacs/unixlib/src/smakefile
  30105. +fsf/emacs/unixlib/src/smakefile.base
  30106. +fsf/emacs/unixlib/src/sprintf.asm
  30107. +fsf/emacs/unixlib/src/start.c
  30108. +fsf/emacs/unixlib/src/stat.c
  30109. +fsf/emacs/unixlib/src/strftime.c
  30110. +fsf/emacs/unixlib/src/symlink.c
  30111. +fsf/emacs/unixlib/src/time.c
  30112. +fsf/emacs/unixlib/src/timeconvert.c
  30113. +fsf/emacs/unixlib/src/timeconvert.h
  30114. +fsf/emacs/unixlib/src/timers.c
  30115. +fsf/emacs/unixlib/src/tmpnam.c
  30116. +fsf/emacs/unixlib/src/truncate.c
  30117. +fsf/emacs/unixlib/src/uid.c
  30118. +fsf/emacs/unixlib/src/umask.c
  30119. +fsf/emacs/unixlib/src/unix-hard.lib.uue
  30120. +fsf/emacs/unixlib/src/unix.lib.uue
  30121. +fsf/emacs/unixlib/src/unlink.c
  30122. +fsf/emacs/unixlib/src/utime.c
  30123. +fsf/emacs/unixlib/src/wait4.c
  30124. +fsf/emacs/unixlib/src/write.c
  30125. +fsf/emacs/unixlib/src/zoneinfo/SCOPTIONS
  30126. +fsf/emacs/unixlib/src/zoneinfo/datfiles/africa
  30127. +fsf/emacs/unixlib/src/zoneinfo/datfiles/antarctica
  30128. +fsf/emacs/unixlib/src/zoneinfo/datfiles/asia
  30129. +fsf/emacs/unixlib/src/zoneinfo/datfiles/australasia
  30130. +fsf/emacs/unixlib/src/zoneinfo/datfiles/etcetera
  30131. +fsf/emacs/unixlib/src/zoneinfo/datfiles/europe
  30132. +fsf/emacs/unixlib/src/zoneinfo/datfiles/factory
  30133. +fsf/emacs/unixlib/src/zoneinfo/datfiles/leapseconds
  30134. +fsf/emacs/unixlib/src/zoneinfo/datfiles/northamerica
  30135. +fsf/emacs/unixlib/src/zoneinfo/datfiles/pacificnew
  30136. +fsf/emacs/unixlib/src/zoneinfo/datfiles/smakefile
  30137. +fsf/emacs/unixlib/src/zoneinfo/datfiles/solar87
  30138. +fsf/emacs/unixlib/src/zoneinfo/datfiles/solar88
  30139. +fsf/emacs/unixlib/src/zoneinfo/datfiles/solar89
  30140. +fsf/emacs/unixlib/src/zoneinfo/datfiles/southamerica
  30141. +fsf/emacs/unixlib/src/zoneinfo/datfiles/systemv
  30142. +fsf/emacs/unixlib/src/zoneinfo/datfiles/usno1988
  30143. +fsf/emacs/unixlib/src/zoneinfo/datfiles/usno1989
  30144. +fsf/emacs/unixlib/src/zoneinfo/getopt.c
  30145. +fsf/emacs/unixlib/src/zoneinfo/getopt.h
  30146. +fsf/emacs/unixlib/src/zoneinfo/ialloc.c
  30147. +fsf/emacs/unixlib/src/zoneinfo/smakefile
  30148. +fsf/emacs/unixlib/src/zoneinfo/zic
  30149. +fsf/emacs/unixlib/src/zoneinfo/zic.8
  30150. +fsf/emacs/unixlib/src/zoneinfo/zic.c
  30151. +fsf/emacs/unixlib/unix.doc
  30152. +fsf/emacs/vms/ChangeLog
  30153. +fsf/emacs/vms/README
  30154. +fsf/emacs/vms/VMSINSTALL
  30155. +fsf/emacs/vms/VMSNOTES
  30156. +fsf/emacs/vms/allrename.com
  30157. +fsf/emacs/vms/build.com
  30158. +fsf/emacs/vms/compile.com
  30159. +fsf/emacs/vms/complink.com
  30160. +fsf/emacs/vms/development.notes
  30161. +fsf/emacs/vms/emacs.com
  30162. +fsf/emacs/vms/etags.vms
  30163. +fsf/emacs/vms/kepteditor.com
  30164. +fsf/emacs/vms/link.com
  30165. +fsf/emacs/vms/logout.com
  30166. +fsf/emacs/vms/mailemacs.com
  30167. +fsf/emacs/vms/makedoc.com
  30168. +fsf/emacs/vms/precomp.com
  30169. +fsf/emacs/vms/testemacs.com
  30170. +fsf/emacs/vms/vmsbuild
  30171. +fsf/emacs/vms/vmsdist.com
  30172. +fsf/emacs/vms/vmslink.opt
  30173. +fsf/emacs/vpath.sed
  30174. diff -rup --new-file baseline/fsf/emacs/site-lisp/ChangeLog amiga/fsf/emacs/site-lisp/ChangeLog
  30175. --- baseline/fsf/emacs/site-lisp/ChangeLog    Wed Dec 31 17:00:00 1969
  30176. +++ amiga/fsf/emacs/site-lisp/ChangeLog    Sat Sep 28 00:00:00 1996
  30177. @@ -0,0 +1,4199 @@
  30178. +Sat Sep 10 13:27:11 1994  Barry A. Warsaw  (warsaw@anthem.nlm.nih.gov)
  30179. +
  30180. +    * Public Release of 4.85.
  30181. +
  30182. +Wed Sep  7 18:41:29 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30183. +
  30184. +    * cc-mode.el (c-mode-fsf-menu, c-mode-map, c++-mode-map,
  30185. +      objc-mode-map):
  30186. +    use a better feature test to figure out how to set the menu title
  30187. +    string.
  30188. +
  30189. +Tue Sep  6 13:49:46 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30190. +
  30191. +    * cc-mode.el (c-search-uplist-for-classkey):
  30192. +    in `class' keyword verification section, only skip forward for ?>
  30193. +    template char if a matching ?< char was found previous to
  30194. +    search-start.  This eliminates false match of template base
  30195. +    classes.
  30196. +
  30197. +Thu Sep  1 22:30:23 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30198. +
  30199. +    * cc-mode.el (c-submit-bug-report): updated var list
  30200. +
  30201. +    * cc-mode.el (c-mode-fsf-menu, c-mode-map, c++-mode-map,
  30202. +      objc-mode-map):
  30203. +    do a better job of getting the menu title string appropriate for
  30204. +    the mode being edited in.  Bogus, but necessary.  XEmacs is better
  30205. +    in this respect.
  30206. +
  30207. +    * cc-mode.el (c-search-uplist-for-classkey): Lele patch for objc-mode
  30208. +
  30209. +    * cc-mode.el (c-search-uplist-for-classkey):
  30210. +    avoid "invalid search bound" error
  30211. +
  30212. +    * cc-mode.el (c-beginning-of-statement-1):
  30213. +    skip special modifier chars in all cases, not just in "no balanced
  30214. +    expr found" case.
  30215. +
  30216. +    * cc-mode.el (c-guess-basic-syntax):
  30217. +    CASE 9: generalize and collect common code for finding position
  30218. +    after conditional statements, and check for `while' statement of a
  30219. +    `do' loop.  In that case, skip over the trailing semi.
  30220. +
  30221. +Wed Aug 31 22:20:47 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30222. +
  30223. +    * cc-mode.el (c-progress-init, c-progress-update, c-progress-fini):
  30224. +    use a marker for end (and be sure to free it!) so that as
  30225. +    indentation occurs, % can't go above 100.
  30226. +
  30227. +    * cc-mode.el (c-mode-map):
  30228. +    check on feature (fboundp 'add-menu) for FSF 19 (which doesn't
  30229. +    have it).
  30230. +
  30231. +    * cc-mode.el (c-progress-info, c-progress-init,
  30232. +      c-progress-update,c-progress-fini):
  30233. +    new vars/defuns for better long indentation progress
  30234. +    reporting
  30235. +
  30236. +    (c-indent-exp, c-indent-region): use new progress reporting
  30237. +
  30238. +Tue Aug 30 21:57:37 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30239. +
  30240. +    * cc-mode.el (c-guess-basic-syntax):
  30241. +    CASE 6F, go forward 1 char from b-o-s of containing-sexp bufpos to
  30242. +    find proper relpos of an arglist-cont.
  30243. +
  30244. +    * cc-mode.el (c-offset-alist-default):
  30245. +    statement-case-open default offset is zero
  30246. +
  30247. +    (c-skip-case-statement-forward): new function
  30248. +
  30249. +    (c-guess-basic-syntax): CASE 15: use c-skip-case-statement-forward in
  30250. +    proper places to find the real relpos of statement's inside switch
  30251. +    case/default bodies.  CASE 15D: remove special handling when looking
  30252. +    at c-conditional-key.
  30253. +
  30254. +    * cc-mode.el (c-offsets-alist, c-cleanup-list, c-mode-menu,
  30255. +      c-mode-map, c-symbol-key, c-indent-line, c-popup-menu):
  30256. +    make sure ObjC is properly documented.
  30257. +
  30258. +    * cc-mode.el (c-least-enclosing-brace): new function
  30259. +
  30260. +    (c-enclosing-brace, c-guess-basic-syntax): renamed
  30261. +    c-enclosing-brace to c-most-enclosing-brace
  30262. +
  30263. +    (c-indent-defun): handle opening braces not in column 1
  30264. +
  30265. +    * cc-mode.el (c-beginning-of-statement-1):
  30266. +    skip over statement mod characters that don't preceed an open
  30267. +    paren.
  30268. +
  30269. +Fri Aug 26 17:42:24 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30270. +
  30271. +    * cc-mode.el (c-guess-basic-syntax):
  30272. +    be careful to check for c-access-key non-nil before calling
  30273. +    (looking-at c-access-key).  For C, this is nil.
  30274. +
  30275. +    * cc-mode.el (c-beginning-of-statement-1):
  30276. +    swapped CASE 3 and 4, so that conditional statements are picked up
  30277. +    properly
  30278. +
  30279. +    * cc-mode.el (c-guess-basic-syntax):
  30280. +    CASE 15D, calculate relpos from boi of beginning of statement
  30281. +    prior to indent-point, unless we're looking at a conditional key
  30282. +
  30283. +    * cc-mode.el (c-mode-map, c++-mode-map, objc-mode-map):
  30284. +    change test of 'FSF in c-emacs-features to an fboundp
  30285. +    set-keymap-parent test
  30286. +
  30287. +Thu Aug 25 13:31:31 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30288. +
  30289. +    * cc-mode.el (c-just-after-func-arglist-p,
  30290. +      c-guess-basic-syntax, c-lineup-objc-method-args-2):
  30291. +    more objc patches from Lele
  30292. +
  30293. +Wed Aug 24 21:06:05 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30294. +
  30295. +    * cc-mode.el (c-indent-command):
  30296. +    with optional arg, shift-amt had wrong sign
  30297. +
  30298. +    * cc-mode.el (c-lineup-arglist):
  30299. +    better handling of comments preceding arg lists
  30300. +
  30301. +    * cc-mode.el (c-guess-basic-syntax):
  30302. +    swapped CASE 6A and 6B so that empty arglists with close paren on
  30303. +    separate line are properly recognized.
  30304. +
  30305. +    * cc-mode.el (c-mode-menu, c-emacs-features, c-mode-map,
  30306. +      c-common-init):
  30307. +    remove dependency on string "Lucid" in emacs-version.  Use
  30308. +    features based means where such descrimination is necessary.
  30309. +
  30310. +Tue Aug 23 18:43:28 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30311. +
  30312. +    * cc-mode.el (c-fill-paragraph):
  30313. +    merge with c-mode.el uses fill-region-as-paragraph
  30314. +
  30315. +    * cc-mode.el (c-offsets-alist-default, c-offsets-alist,
  30316. +    c-hanging-braces-alist, c-electric-brace, c-guess-basic-syntax):
  30317. +    added syntactic symbol statement-case-open for
  30318. +    statement-case-intro's that contain an open brace.
  30319. +
  30320. +    * cc-mode.el (c-lineup-math): watch for equal signs in literals
  30321. +
  30322. +    * cc-mode.el (c-beginning-of-statement-1):
  30323. +    CASE5 and CASE 6, better pick up of label's with potential
  30324. +    embedded colons (scope operators).
  30325. +
  30326. +Mon Aug 22 22:28:03 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30327. +
  30328. +    * cc-mode.el (c-hanging-comment-ender-p): new variable
  30329. +
  30330. +    (c-fill-paragraph): looks at c-hanging-comment-ender-p to see if
  30331. +    */ should be left on its own line.  c-mode.el behavior is default
  30332. +    value t, but there have been *many* requests for nil's behavior.
  30333. +
  30334. +Wed Aug 17 23:05:01 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30335. +
  30336. +    * cc-mode.el (c-recognize-knr-p, c-common-init):
  30337. +    fix the way this var is made buffer local
  30338. +
  30339. +Tue Aug 16 20:05:49 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30340. +
  30341. +    * cc-mode.el (c-recognize-knr-p, c-mode, c++-mode, objc-mode):
  30342. +    make it so c-recognize-knr-p is settable from c-mode-common-hook.
  30343. +
  30344. +Thu Aug 11 20:40:06 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30345. +
  30346. +    * cc-mode.el (c-recognize-knr-p): new variable
  30347. +
  30348. +    (c-offsets-alist-default, c-offsets-alist, c-guess-basic-syntax):
  30349. +    changed syntactic symbol c++-funcdecl-cont to ansi-funcdecl-cont
  30350. +
  30351. +    (c-mode, c++-mode, objc-mode): use new c-recognize-knr-p variable
  30352. +
  30353. +    (c-guess-basic-syntax): use new c-recognize-knr-p variable; swap
  30354. +    CASE 5B.2 and 5B.3.
  30355. +
  30356. +Wed Aug 10 17:54:53 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30357. +
  30358. +    * cc-mode.el (c-offsets-alist, c-read-offset, c-set-offset):
  30359. +    can accept variable symbols as offsets.
  30360. +
  30361. +    (c-get-offset): can now accept ++ and -- symbols, which evaluate
  30362. +    to 2* positive and negative c-basic-offset.
  30363. +
  30364. +Thu Aug  4 15:29:43 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30365. +
  30366. +    * cc-mode.el (c-guess-basic-syntax):
  30367. +    case 9C added small performance improvment to c-in-literal call
  30368. +
  30369. +Wed Aug  3 17:37:30 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30370. +
  30371. +    * cc-mode.el (c-beginning-of-statement-1):
  30372. +    use c-in-literal-cache, and limit backscanning in CASE 5 to known,
  30373. +    non-literal position.
  30374. +
  30375. +    * cc-mode.el (c-in-literal, c-guess-basic-syntax):
  30376. +    caching of last literal result
  30377. +
  30378. +Tue Aug  2 20:18:10 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30379. +
  30380. +    * cc-mode.el (c-guess-basic-syntax):
  30381. +    CASE 15D, calculate 'statement relpos as the
  30382. +    beginning-of-statement relative to indent-point.
  30383. +
  30384. +    * cc-mode.el (c-beginning-of-statement-1):
  30385. +    CASE 4, check for conditional keywords which could be followed by
  30386. +    a balanced paren expr.  I.e. while(foo)
  30387. +
  30388. +Tue Jul 26 15:55:21 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30389. +
  30390. +    * cc-mode.el (c++-mode-syntax-table, objc-mode-syntax-table):
  30391. +    give CR same syntax as newline, for selective-display.
  30392. +
  30393. +Fri Jul 22 18:42:38 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30394. +
  30395. +    * cc-mode.el (c-electric-star):
  30396. +    fixed indentation problem when a star is not preceded by a slash.
  30397. +
  30398. +    * cc-mode.el (c-indent-defun):
  30399. +    removed condition-case inside unwind-protect.  All error
  30400. +    conditions are properly handled at other levels of the code.
  30401. +
  30402. +Thu Jul 21 22:34:19 1994  Barry A. Warsaw, ITB  <warsaw@anthem>
  30403. +
  30404. +    * cc-mode.el (c-class-key, c-search-uplist-for-classkey):
  30405. +    greatly simplified, this constant now contains a regexp that only
  30406. +    matches valid `class' keywords, in the C++ sense. It now ignores
  30407. +    any template, extern, static, etc. keywords.
  30408. +
  30409. +Tue Jul 19 09:53:37 1994  Barry A. Warsaw  (warsaw@anthem.nlm.nih.gov)
  30410. +
  30411. +    * Public Release of 4.35.
  30412. +
  30413. +Sun Jul 17 18:29:51 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30414. +
  30415. +    * cc-mode.el (c-guess-basic-syntax):
  30416. +    Lele Gaifax's patch to fix an Objc problem...
  30417. +    
  30418. +    "this patch, applied to 4.32, will correct a little bug in ObjC
  30419. +    mode.  Currently objc-mode fails to recognize a continued arglist,
  30420. +    as it guesses every such construct is a continued method call."
  30421. +
  30422. +Fri Jul 15 13:48:39 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30423. +
  30424. +    * cc-mode.el (c-search-uplist-for-classkey): don't get fooled by
  30425. +    the following C construct:
  30426. +    
  30427. +    struct shmid_internal
  30428. +    shmconv(
  30429. +        register int    s)
  30430. +    {
  30431. +        int foo = 1;
  30432. +    }
  30433. +
  30434. +Tue Jul 12 14:36:10 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30435. +
  30436. +    * cc-mode.el (c-parse-state): in body of `something bad happened'
  30437. +    part, don't use beginning-of-defun to find "real" bod since based
  30438. +    on some coding styles, this could loop us all the way back to
  30439. +    bob. E.g.:
  30440. +    
  30441. +    int foo() {
  30442. +    int a = 7;
  30443. +    {
  30444. +        foobar();
  30445. +    }}
  30446. +    
  30447. +    int foo() {
  30448. +    int a = 7;
  30449. +    {
  30450. +        foobar();
  30451. +    }}
  30452. +    
  30453. +    
  30454. +    Instead use scan-lists and be more robust about crossing
  30455. +    unbalanced close braces.  Now even antisocial coding styles like
  30456. +    the above can be quickly parsed correctly.
  30457. +
  30458. +    * cc-mode.el (c-parse-state): small but important fix in
  30459. +    `something bad happened' test. make sure that placeholder close
  30460. +    brace ends up before indent point, otherwise we didn't cross it.
  30461. +
  30462. +Thu Jul  7 13:56:08 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30463. +
  30464. +    * cc-mode.el (c-parse-state): in `something bad' section,
  30465. +    placeholder will always be just after any close brace so we need
  30466. +    to 1- from it to check for ?}. Also, we probably don't need to
  30467. +    check for placeholder-1 being nil.
  30468. +
  30469. +Thu Jun 30 21:03:55 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30470. +
  30471. +    * cc-mode.el (c-switch-label-key): a paren can follow the `case'
  30472. +    keyword without any intervening whitespace.
  30473. +
  30474. +    * cc-mode.el (c-beginning-of-statement-1): when skipping over
  30475. +    unary ops, remember that whitespace could be intermixed before the
  30476. +    paren
  30477. +
  30478. +    * cc-mode.el (c-electric-brace): added brace-list-intro and
  30479. +    brace-list-entry to list of hangables
  30480. +    
  30481. +    (c-hanging-braces-alist): added docstring for b-l-i and b-l-e
  30482. +    hangability
  30483. +
  30484. +    * cc-mode.el (c-beginning-of-statement-1): CASE 6: be sure to
  30485. +    ignore switch labels too.
  30486. +
  30487. +    * cc-mode.el (c-lineup-arglist-intro-after-paren): new lineup
  30488. +    function to conform to GNU style.
  30489. +    
  30490. +    (c-style-alist): for style GNU, arglist-intro set to
  30491. +    c-lineup-arglist-intro-after-paren and arglist-close set to
  30492. +    c-lineup-arglist to conform to BOCM GNU style.
  30493. +
  30494. +Wed Jun 29 00:48:56 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30495. +
  30496. +    * cc-mode.el (c-guess-basic-syntax): installed this patch:
  30497. +    
  30498. +    In ObjC mode 4.6 the tests 6D and 6E in c-guess-basic-syntax need
  30499. +    to be swapped. Otherwise what is a continued method call line will
  30500. +    be recognized as a 'arglist-cont-nonempty. Swapping these test
  30501. +    will not interfere with the normal behaviour of cc-mode, since the
  30502. +    test for the method call is surrounded with a test on (eq
  30503. +    major-mode 'objc-mode).
  30504. +    
  30505. +    Emanuele (lele) Gaifax     | ...calling Emacs convenient, of course, is
  30506. +    lele@nautilus.sublink.org  | like calling oxygen useful  -- Rens Troost
  30507. +
  30508. +    * cc-mode.el (c-mark-function): new implementation based on
  30509. +    c-parse-state.  I think this should work much better for people.
  30510. +
  30511. +Tue Jun 28 23:57:42 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30512. +
  30513. +    * cc-mode.el (c-just-after-func-arglist-p): partial fix for this bug:
  30514. +    
  30515. +    class foo
  30516. +    {
  30517. +       foo()
  30518. +          :                    // member-init-intro
  30519. +       a (0),                // topmost-intro-cont???
  30520. +       b (0)                // member-init-cont
  30521. +       {}
  30522. +    };
  30523. +    
  30524. +    
  30525. +    note that if there is a comment after foo(), its still broken.
  30526. +    But that probably won't happen too often...
  30527. +
  30528. +    * cc-mode.el (c-lineup-arglist): don't limit skippages forward
  30529. +    over syntactic ws to eol.
  30530. +
  30531. +Mon Jun 27 18:25:42 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30532. +
  30533. +    * cc-mode.el (c-parse-state): when looking to see if `something
  30534. +    bad happened', and guaranteeing that the char-after placeholder is
  30535. +    = to ?}, make sure that char-after placeholder is less than
  30536. +    point-max (i.e. char-after placeholder returns non-nil).
  30537. +
  30538. +    * cc-mode.el (c-electric-star): should not re-indent line if
  30539. +    introducing a comment not on a comment-only line
  30540. +
  30541. +Thu Jun 23 17:54:49 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30542. +
  30543. +    * cc-mode.el (c-inside-bracelist-p): when finding an enum, check
  30544. +    to be sure its not a type descriptor on a return value of a func
  30545. +    (i.e. skip-chars-forward for not semi or open paren).
  30546. +
  30547. +Wed Jun 22 19:23:43 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30548. +
  30549. +    * cc-mode.el (c-parse-state): when trying to find out if
  30550. +    "something bad happened" be sure to check for crossing a close
  30551. +    *brace* and not a close paren or square bracket.  Only crossing a
  30552. +    close brace indicates badness.
  30553. +
  30554. +Mon Jun 20 00:32:46 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30555. +
  30556. +    * cc-mode.el (c-set-offset): initial contents of prompt is the
  30557. +    last syntactic symbol on the syntactic analysis list -- the most
  30558. +    likely symbol that the user wants to change.
  30559. +
  30560. +Fri Jun 17 22:25:41 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30561. +
  30562. +    * cc-mode.el (c-lineup-arglist): fixed problem of skipping too
  30563. +    many close parens when finding the relpos of arglist-close.
  30564. +
  30565. +    * cc-mode.el (c-guess-basic-syntax): CASE 6F fixed incorrect
  30566. +      relpos
  30567. +
  30568. +    * cc-mode.el (c-guess-basic-syntax): CASE 8B and CASE 8C: when an
  30569. +    otherwise brace-list-entry or brace-list-intro is found to start
  30570. +    with an open brace, the line is given brace-list-open syntax
  30571. +    instead
  30572. +    
  30573. +    (c-inside-bracelist-p): fix small bug in recognizing open brace at
  30574. +    brace-list-intro line, and infinite loop problem.
  30575. +
  30576. +    * cc-mode.el (c-inside-bracelist-p): more accurate handling of
  30577. +    nested aggregates. Now uses brace-state as provided by
  30578. +    c-parse-state.
  30579. +
  30580. +Tue Jun 14 22:25:09 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30581. +
  30582. +    * cc-mode.el (c-forward-conditional): break infinite loop when
  30583. +    finding commented out conditionals
  30584. +
  30585. +Mon Jun 13 17:40:08 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30586. +
  30587. +    * cc-mode.el (c-submit-bug-report): Use new interface for
  30588. +    reporter.el 2.x
  30589. +
  30590. +Fri Jun 10 13:42:02 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30591. +
  30592. +    * cc-mode.el (c-submit-bug-report): remove defun-prompt-regexp
  30593. +    from the list of vars if it is not boundp (i.e. v18)
  30594. +
  30595. +Thu Jun  9 14:15:00 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30596. +
  30597. +    * cc-mode.el (c-guess-basic-syntax): repaired all CASE numbers
  30598. +
  30599. +    * cc-mode.el (c-offsets-alist-default): added syntactic symbols
  30600. +    objc-method-intro objc-method-args-cont objc-method-call-cont.
  30601. +    
  30602. +    (c-offsets-alist): added descriptions for above new syntactic symbols
  30603. +    
  30604. +    (objc-mode-hook) (objc-mode-abbrev-table) (objc-mode-map)
  30605. +    (objc-mode-syntax-table) (objc-mode): added for Objective-C support
  30606. +    
  30607. +    (c-objc-method-key): new regexp desribing an ObjC method intro.
  30608. +    
  30609. +    (c-electric-slash): objc-mode understands // comments
  30610. +    
  30611. +    (c-fill-paragraph): objc-mode understands // comments
  30612. +    
  30613. +    (c-beginning-of-statement-1): added CASE 7 for objc-mode
  30614. +    
  30615. +    (c-in-objc-method-def-p): checks to see if inside an Objective-C
  30616. +    method definition.
  30617. +    
  30618. +    (c-just-after-func-arglist-p): check for Objective-C method def
  30619. +    
  30620. +    (c-guess-basic-syntax): many modifications to look for Objective-C
  30621. +    syntactic symbols: CASE 3.5, CASE 4G, CASE 4I, CASE 5E.
  30622. +    
  30623. +    (c-lineup-objc-method-call) (c-lineup-objc-method-args): new custom
  30624. +    lineup functions for Objective-C methods.
  30625. +    
  30626. +    (c-submit-bug-report): look for ObjC mode
  30627. +
  30628. +Mon Jun  6 19:47:19 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30629. +
  30630. +    * cc-mode.el (c-style-alist): another fix to Ellemtel style.
  30631. +    Since the style guide recommends braces around the body of all
  30632. +    case statements, statement-case-intro should be 0, letting
  30633. +    statement-block-intro of the following line pick up the proper
  30634. +    indentation
  30635. +
  30636. +    * cc-mode.el (c-style-alist): Ellemtel style should have
  30637. +    c-hanging-braces-alist for substatement-open be before and after
  30638. +
  30639. +Thu Jun  2 23:09:16 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30640. +
  30641. +    * cc-mode.el (c-strict-syntactics-p): changed to c-strict-syntax-p
  30642. +    
  30643. +    (c-guess-basic-syntactics): changed to c-guess-basic-syntax
  30644. +    
  30645. +    (c-add-syntactics): changed to c-add-syntax
  30646. +    
  30647. +    (various): use new function and variable names
  30648. +
  30649. +Wed Jun  1 15:46:19 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30650. +
  30651. +    * cc-mode.el: bumping to version 4 in anticipation of objc-mode
  30652. +      support
  30653. +
  30654. +Tue May 31 23:51:08 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30655. +
  30656. +    * cc-mode.el (c-strict-semantics-p): changed to c-strict-syntactics-p
  30657. +    
  30658. +    (c-echo-semantic-information-p): changed to
  30659. +    c-echo-syntactic-information-p
  30660. +    
  30661. +    (c-semantics): changed to c-syntactic-context
  30662. +    
  30663. +    (c-guess-basic-semantics): changed to c-guess-basic-syntactics
  30664. +    
  30665. +    (c-show-semantic-information): changed to c-show-syntactic-information
  30666. +    
  30667. +    (cc-mode.el): other internal changes to make terminology consistent
  30668. +
  30669. +    * cc-mode.el (c-guess-basic-semantics):
  30670. +    CASE 14.E, if defun opening brace is not at
  30671. +    boi, its because its hung on right side so we need a different relpos
  30672. +
  30673. +    * cc-mode.el (c-guess-basic-semantics):
  30674. +    CASE5, various.  Extend the notion of
  30675. +    arglists to bracket lists, i.e. [...]
  30676. +
  30677. +    * cc-mode.el (c-search-uplist-for-classkey):
  30678. +    when skipping over commas after
  30679. +    classkey's watch out for inheritance lists...
  30680. +
  30681. +    * cc-mode.el (c-beginning-of-statement-1):
  30682. +    ignore labels and access keys
  30683. +
  30684. +Tue May 24 22:04:15 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30685. +
  30686. +    * Public Release 3.349
  30687. +
  30688. +    * cc-mode.el (c-search-uplist-for-classkey):
  30689. +    break out of infinite loop when
  30690. +    finding `struct' keyword in arglist
  30691. +
  30692. +Mon May 23 15:43:07 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30693. +
  30694. +    * cc-mode.el (c-electric-brace):
  30695. +    we need to recalculate semantics if, when
  30696. +    re-indenting the preceding line, point changes.  If this happens, the
  30697. +    relpos for semantics is invalid.
  30698. +
  30699. +Thu May 19 22:27:55 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30700. +
  30701. +    * cc-mode.el (c-style-alist):
  30702. +    updated the various styles to set the correct values
  30703. +    for substatement-open
  30704. +    
  30705. +    (c-style-alist): added dynamic setting of default style.  The way this
  30706. +    works may or may not be a feature?
  30707. +
  30708. +Wed May 18 22:07:15 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30709. +
  30710. +    * cc-mode.el (c-backward-to-start-of-if):
  30711. +    fix to correctly handle `else-if'
  30712. +    clauses, which should be skipped when looking for the matching if.
  30713. +
  30714. +    * cc-mode.el (c-search-uplist-for-classkey):
  30715. +    don't get confused by a single struct
  30716. +    type arg in a function's arglist
  30717. +
  30718. +    * cc-mode.el (c-beginning-of-statement-1):
  30719. +    on backward-sexp failure, skip over
  30720. +    funny chars and whitespace only when just before a paren
  30721. +    
  30722. +    (c-search-uplist-for-classkey): watch out for comma ending struct arg
  30723. +    declarations which doesn't leave us in a class definition.
  30724. +
  30725. +    * cc-mode.el (c-mode-map):
  30726. +    fix the setting of mode-popup-menu for Lemacs 19.10.
  30727. +    Menu must have a title string.
  30728. +
  30729. +    * cc-mode.el (c-style-alist):
  30730. +    changes to Ellemtel style: substatement sets its
  30731. +    offset to 3, substatement-open sets its offset to 0.  Given by:
  30732. +    <qhslali@aom.ericsson.se> Lars Lindberg.
  30733. +
  30734. +Tue May 17 22:46:22 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30735. +
  30736. +    * cc-mode.el (c-beginning-of-statement-1):
  30737. +    when backward-sexp fails and doing
  30738. +    backward-up-list, and before skipping over noise characters, skip over
  30739. +    any preceding syntactic whitespace:
  30740. +    
  30741. +    --------------V
  30742. +        if ( ! backup_dev ||
  30743. +                 sep1 != ':' || )
  30744. +
  30745. +    * cc-mode.el (c-beginning-of-statement-1):
  30746. +    fixed small infinite loop in CASE5 test
  30747. +    when barrier char is in literal.
  30748. +
  30749. +    * cc-mode.el (c-guess-basic-semantics):
  30750. +    CASE 13: don't limit the search backwards
  30751. +    for the beginning of statement
  30752. +
  30753. +    * cc-mode.el (c-beginning-of-statement-1):
  30754. +    completely rewritten to properly account
  30755. +    for cpp macros and statement barrier characters (e.g. { } ;) in
  30756. +    literals.
  30757. +
  30758. +Mon May 16 20:21:12 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30759. +
  30760. +    * cc-mode.el (c-inside-bracelist-p):
  30761. +    must check that enum keyword truly introduces
  30762. +    a bracelist and not that it is a type identifier for a declaration.
  30763. +    
  30764. +    I.e. match:
  30765. +    
  30766. +    enum foo { /* ... */ }
  30767. +    
  30768. +    but not:
  30769. +    
  30770. +    enum foo bar;
  30771. +
  30772. +Thu May 12 22:52:12 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30773. +
  30774. +    * cc-mode.el (c-guess-basic-semantics):
  30775. +    CASE 4A.2 watch out for enum keywords in
  30776. +    K&R argdecl lists.  These don't open enum definitions, but they are
  30777. +    declarations instead.  E.g.:
  30778. +    
  30779. +    ret_stat (rpt_stat, filename, pcode)
  30780. +        enum xrpt_status_codes rpt_stat;
  30781. +        char filename[];
  30782. +        enum xpippop_codes pcode;
  30783. +    {
  30784. +
  30785. +    * cc-mode.el:
  30786. +    (c-C-conditional-key) (c-C++-conditional-key): new regexps which
  30787. +    describe conditionals in the two supported languages.  This is
  30788. +    necessary because `try' and `catch' blocks are defined as
  30789. +    substatements equivalent to `while', `for', etc., in C++ only
  30790. +    
  30791. +    (c-mode) (c++-mode): set c-conditional-key, which is now buffer-local,
  30792. +    to either c-C-conditional-key or c-C++-conditional-key.
  30793. +
  30794. +    * cc-mode.el (c-parse-state):
  30795. +    when we discover that an open brace we thought
  30796. +    specified the bod, actually isn't the bod, we backup and search for
  30797. +    another potential bod.  This is necessary so that open braces in
  30798. +    column zero that aren't really defun opening braces don't trip us up.
  30799. +    Our test for invalid bod is if we cross over an unbalanced close
  30800. +    brace.
  30801. +
  30802. +    * cc-mode.el (c-guess-basic-semantics):
  30803. +    CASE 4G, in c-mode, fix recognition of the
  30804. +    last line in the following construct:
  30805. +    
  30806. +    typedef int (*foobar)           /* if I break this into 2 lines ...*/
  30807. +        (int foo, char *bar);
  30808. +    extern foobar really;       /* this is incorrectly indented */
  30809. +
  30810. +Tue May 10 16:42:13 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30811. +
  30812. +    * cc-mode.el (c-indent-region):
  30813. +    fixed a bug where comment-only lines were being
  30814. +    skipped.  Wrapped an unwind-protect around mark copying so we can't
  30815. +    leak marks.
  30816. +
  30817. +    * cc-mode.el (c-emacs-feature): use variables emacs-major-version and
  30818. +    emacs-minor-version if they exist
  30819. +
  30820. +Fri May  6 21:09:58 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30821. +
  30822. +    * cc-mode.el (c-style-alist):
  30823. +    small changes to the Ellemtel style: inline-open and
  30824. +    topmost-intro-cont are changed to 0 offset.
  30825. +
  30826. +    * cc-mode.el (c-hanging-braces-alist):
  30827. +    added (substatement after) so that braces
  30828. +    will hanging on substatement blocks
  30829. +
  30830. +Thu May  5 22:48:23 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30831. +
  30832. +    * cc-mode.el (c-lineup-math):
  30833. +    can now line up equals signs even if the equals isn't
  30834. +    at boi.  E.g., it can now handle:
  30835. +    
  30836. +    float a = 1.0,
  30837. +          b = 7,
  30838. +          c = 9;
  30839. +
  30840. +    * cc-mode.el (c-comment-start-regexp):
  30841. +    new buffer-local variable which describes
  30842. +    how comments start.  This improves generality for C-like modes with
  30843. +    different comment intro styles.
  30844. +
  30845. +    * cc-mode.el (c-indent-via-language-element):
  30846. +    renamed to c-indent-line for better
  30847. +    backwards compatibility, i.e. awk-mode
  30848. +
  30849. +Tue Apr 26 16:17:29 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30850. +
  30851. +    * cc-mode.el (c-parse-state):
  30852. +    make sure we ignore any bogus beginning-of-defun
  30853. +    bufpos's when we're searching back 2 bods
  30854. +
  30855. +    * cc-mode.el (c-search-uplist-for-classkey):
  30856. +    after finding what looks like a class
  30857. +    header, search for both a semi (denoting a fwd decl), and an equals
  30858. +    (denoting a struct init).
  30859. +
  30860. +Thu Apr 21 21:12:26 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30861. +
  30862. +    * cc-mode.el:
  30863. +    (c-electric-brace) (c-electric-semi&comma) (c-electric-colon)
  30864. +    (c-indent-command) (c-indent-exp) (c-indent-region)
  30865. +    (c-indent-via-language-element): eliminated extraneous optional
  30866. +    arguments, i.e. lim and bod
  30867. +
  30868. +    * cc-mode.el (c-adaptive-block-open): obsolete
  30869. +    
  30870. +    (c-offsets-alist-default) (c-electric-brace): added substatement-open
  30871. +    syntactic symbol
  30872. +    
  30873. +    (c-hanging-braces-alist): added ability to hang substatement-open
  30874. +    braces.
  30875. +    
  30876. +    (c-style-alist): changed defaults of block-open to substatement-open
  30877. +
  30878. +    * cc-mode.el (c-safe):
  30879. +    use Dan LaLiberte's version impl. workaround for an FSF
  30880. +    19.22 bug
  30881. +
  30882. +Tue Apr 19 15:15:41 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30883. +
  30884. +    * cc-mode.el (c-mode-map): put c-macro-expand on C-c C-e
  30885. +
  30886. +    * cc-mode.el:
  30887. +    (c-mode-map) (c-common-init): put in code to conform to Lucid 19.10's
  30888. +    popup menu convention of using mode-popup-menu variable
  30889. +
  30890. +Fri Apr 15 23:09:59 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30891. +
  30892. +    * cc-mode.el (c-indent-defun): handle buffer-read-only errors better
  30893. +
  30894. +    * cc-mode.el (c-lineup-math): also lines up multi-line equal signs
  30895. +
  30896. +    * cc-mode.el (c-guess-basic-semantics):
  30897. +    replaced calculation of literal which must
  30898. +    have gotten accidentally removed some time ago.
  30899. +
  30900. +    * cc-mode.el (c-1bit-il):
  30901. +    removed since it appears to be identical to c-in-literal,
  30902. +    and thus obsolete.
  30903. +
  30904. +    * cc-mode.el (c-search-uplist-for-classkey):
  30905. +    programmatically ignore the `class'
  30906. +    keyword inside template arg lists
  30907. +    
  30908. +    (c-enclosing-brace) (c-narrow-out-enclosing-class): new helper
  30909. +    functions
  30910. +    
  30911. +    (c-guess-basic-semantics): fixed recognition of 'defun-open CASE 4A.4,
  30912. +    CASE 13.A, 'block-close CASE 13.B, 'defun-block-intro CASE 14.E
  30913. +
  30914. +Thu Apr 14 18:42:00 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30915. +
  30916. +    * cc-mode.el (c-parse-state):
  30917. +    record containing paren, but not balanced paren sexps
  30918. +
  30919. +    * cc-mode.el (c-guess-basic-semantics):
  30920. +    fixed a regression problem in recognizing
  30921. +    the difference between an inline-close and a nested class-close
  30922. +
  30923. +    * cc-mode.el: (c-parse-state) (c-guess-basic-semantics)
  30924. +    (c-search-uplist-for-classkey): massive rewrite of all parsing
  30925. +    components. c-parse-state now uncovers the brace nesting level of the
  30926. +    construct from (bod 2) to point and the other two defuns use this
  30927. +    information to make scooting around brace levels much quicker and more
  30928. +    accurate.
  30929. +
  30930. +Thu Apr  7 14:34:28 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30931. +
  30932. +    * cc-mode.el (c-electric-brace):
  30933. +    can now specify `hanginess' on close braces
  30934. +
  30935. +Thu Mar 31 15:10:09 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30936. +
  30937. +    * Public release: 3.304
  30938. +
  30939. +    * cc-mode.el (c-search-uplist-for-classkey):
  30940. +    class relpos should be at the 'boi of
  30941. +    where c-class-key gives us a match.  This is because its too hard to
  30942. +    make c-class-key match the typedef keyword on:
  30943. +    
  30944. +    typedef struct Foo
  30945. +    {
  30946. +    
  30947. +    so its easier to make this fix instead.
  30948. +
  30949. +Fri Mar 25 20:34:18 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30950. +
  30951. +    * cc-mode.el:
  30952. +    (c-forward-syntactic-ws) (c-backward-syntactic-ws): minor speed ups
  30953. +    achieved by calling forward-comment with a huge number so we don't
  30954. +    have to return to the lisp loop after just 1 comment.
  30955. +
  30956. +    * cc-mode.el (c-search-uplist-for-classkey):
  30957. +    added another speedup where syntactic
  30958. +    whitespace is skipped before doing a re-search-forward.  This requires
  30959. +    however that the buffer be narrowed during the r-s-f because of the
  30960. +    definition of c-class-key which matches \\` or empty-string-at-bod.
  30961. +    It would be better to use \\`\\|\\= to match empty-string-at-point,
  30962. +    but that's not defined for v18, and doesn't seem to work anyway, at
  30963. +    least in Lemacs.
  30964. +    
  30965. +    (c-search-uplist-for-classkey): after finding a match for c-class-key,
  30966. +    skip non-semicolons up to brace point.  If a semi is found, we're
  30967. +    looking at a forward declaration, not a class definition.
  30968. +
  30969. +Thu Mar 24 18:43:38 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30970. +
  30971. +    * cc-mode.el (c-guess-basic-semantics): do not limit calls to
  30972. +    c-search-uplist-for-classkey to just c++-mode since even in C we can
  30973. +    have nested structs and unions.
  30974. +    
  30975. +    (c-search-uplist-for-classkey): now returns a vector instead of a
  30976. +    cons cell
  30977. +    
  30978. +    (c-guess-basic-semantics): modifications for new c-s-u-f-c return
  30979. +    value
  30980. +
  30981. +    * cc-mode.el:
  30982. +    (c-inside-bracelist-p) (c-guess-basic-semantics): when looking for an
  30983. +    enum brace-list, c-beginning-of-statement could leave us at point-min,
  30984. +    which could contain an intervening comment, so you need to call
  30985. +    c-forward-syntactic-ws.
  30986. +
  30987. +Wed Mar 23 23:22:37 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30988. +
  30989. +    * cc-mode.el (c-search-uplist-for-classkey):
  30990. +    another fix for infinite loops that
  30991. +    can occur when indenting inside the second of multiple nested classes.
  30992. +    This should also speed things up by further limiting the region being
  30993. +    searched.
  30994. +
  30995. +Tue Mar 22 23:12:58 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  30996. +
  30997. +    * cc-mode.el (c-mark-function):
  30998. +    worked around call to backward-paragraph, which
  30999. +    didn't work and wasn't the right semantics anyway.  Movement should be
  31000. +    by beginning-/end-of-defun.
  31001. +
  31002. +    * cc-mode.el (c-indent-exp):
  31003. +    restructure the unwind-protect call to ensure that the
  31004. +    `end' marker is always removed on any error condition.
  31005. +    
  31006. +    (c-indent-exp): find any open brace that occurs after point, ignoring
  31007. +    lexical whitespace, including newlines.
  31008. +
  31009. +    * cc-mode.el (c-inside-bracelist-p):
  31010. +    in the first goto-char, goto containing-sexp,
  31011. +    not 1- c-s, otherwise, it will not properly recognize bracelists with
  31012. +    comments on the end of the line.  The following
  31013. +    c-beginning-of-statement will properly consume any preceding
  31014. +    whitespace.
  31015. +
  31016. +Mon Mar 21 22:01:25 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31017. +
  31018. +    * cc-mode.el (c-search-uplist-for-classkey):
  31019. +    must handle nil return value from
  31020. +    scan-lists.
  31021. +
  31022. +    * cc-mode.el (c-search-uplist-for-classkey):
  31023. +    fix problem of infinite loops when
  31024. +    there are balanced expressions between (bod 2) and the indent-point
  31025. +    that aren't picked up by bod because they don't match
  31026. +    defun-prompt-regexp.  We skip over this noise with scan-lists.
  31027. +
  31028. +    * cc-mode-18.el:
  31029. +    don't hack c-emacs18-common-hook onto c-mode-common-hook anymore. tell
  31030. +    users to put it on their c-mode-common-hook themselves.
  31031. +
  31032. +    * cc-mode.el (c-search-uplist-for-classkey): end-of-defun can fail
  31033. +
  31034. +Fri Mar 18 21:38:31 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31035. +
  31036. +    * cc-mode.el (c-search-uplist-for-classkey):
  31037. +    new performance tuned version.  Here
  31038. +    are some numbers: hitting tab at the end of an 11k function, with an
  31039. +    8k function just before it was giving me 2.637sec for
  31040. +    c-indent-command, and 1.784sec for c-s-u-f-c alone.  Now I'm getting
  31041. +    0.972sec for c-i-c and 0.180sec for c-s-u-f-c.  An order of magnitude
  31042. +    improvement in c-s-u-f-c.  These are un-bc'd times. Other bottlenecks
  31043. +    must exist in c-i-c...
  31044. +
  31045. +    * cc-mode.el:
  31046. +    added an eval-when-compile to pick up the reporter-* symbols when
  31047. +    byte-compiling.
  31048. +
  31049. +Thu Mar 17 20:56:04 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31050. +
  31051. +    * cc-mode.el (c-electric-colon):
  31052. +    do scope-operator clean up immediately after
  31053. +    self-insert-command so that subsequent indentation and hanging
  31054. +    calculations will be performed correctly
  31055. +
  31056. +Tue Mar 15 23:29:16 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31057. +
  31058. +    * cc-mode.el (c-search-uplist-for-classkey):
  31059. +    adjust for the fact that c-class-key
  31060. +    now match 1 character before the `c' in "class".  goto-char 1+ foundp
  31061. +    to get to the proper character starting the class definition.
  31062. +
  31063. +    * cc-mode.el (c-read-offset): new helper function for c-set-offset
  31064. +    
  31065. +    (c-set-offset): sanity check OFFSET argument both interactively and
  31066. +    non-interactively.  This seems to trip up many novices.
  31067. +
  31068. +    * cc-mode.el (c++-mode-map):
  31069. +    fixed binding for c-scope-operator. It is now on C-c :
  31070. +
  31071. +Fri Mar 11 23:45:51 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31072. +
  31073. +    * cc-mode-18.el (c-emacs18-il): applied patch contributed by
  31074. +    SAKAI Kiyotaka(ksakai@mtl.t.u-tokyo.ac.jp) to fix infinite loop bug.
  31075. +
  31076. +    * cc-mode.el (c-fill-paragraph): removed last 2 c-mode.el dependencies
  31077. +
  31078. +    * cc-mode.el (c-guess-basic-semantics):
  31079. +    CASE 8C: after moving to placeholder, which
  31080. +    is bos, move over any conditional statments if looking at
  31081. +    c-conditional-key.  Otherwise the following code indents incorrectly:
  31082. +    
  31083. +    main()
  31084. +    {
  31085. +        while (cin >> float)
  31086. +            cout << float
  31087. +                 << float;   //  This should not be this far over but beneath <<
  31088. +    }
  31089. +
  31090. +    * cc-mode.el (c-indent-exp):
  31091. +    put an unwind-protect around the sanity checks so that
  31092. +    point is restored on error
  31093. +
  31094. +    * cc-mode.el (c-class-key): another fix to recognize keyword
  31095. +      `class' at beginning-of-buffer.
  31096. +    
  31097. +    (c-guess-basic-semantics): if class opening brace is not the last
  31098. +    non-whitespace on a line, the narrow-to-region narrowing out of
  31099. +    enclosing class will not have the proper begin point.  Make sure the
  31100. +    region does not contain the class opening brace.
  31101. +
  31102. +    * cc-mode.el (c-indent-region):
  31103. +    fixed error signal when indenting region not
  31104. +    containing balanced sexp. e.g. at the top level:
  31105. +    
  31106. +    int i,
  31107. +        j,
  31108. +        k;
  31109. +
  31110. +    * cc-mode.el (c-class-key):
  31111. +    another fix to recognize nested class but not the word
  31112. +    'class' in a template declaration
  31113. +
  31114. +Thu Mar 10 23:32:37 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31115. +
  31116. +    * cc-mode.el (c-beginning-of-statement-1):
  31117. +    sped up about 8x by removing an
  31118. +    unnecessary (I think) call to c-backward-syntactic-ws and a duplicate
  31119. +    call to c-in-literal.  By using elp, I think these were the real time
  31120. +    hogs in c-b-o-s-1 which was the biggest hog in
  31121. +    c-guess-basic-semantics.
  31122. +
  31123. +Wed Mar  9 22:15:26 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31124. +
  31125. +    * cc-mode.el (c-lineup-arglist):
  31126. +    added a (beginning-of-line) call before the
  31127. +    (backward-up-list 1) call in the special case for arglist-intro and
  31128. +    arglist-cont-nonempty.  Without this, indentation would be different
  31129. +    when point was at the beginning and end of line.  E.g.:
  31130. +    
  31131. +    main()
  31132. +    {
  31133. +        if ((BuddyRec* buf = (BuddyRec*)(bufs[message_bufs++]
  31134. +                         = ::new unsigned char[MessageBufSize]))
  31135. +            == 0) {
  31136. +        }
  31137. +    }
  31138. +    
  31139. +    
  31140. +    On the "== 0) {" line.
  31141. +
  31142. +    * cc-mode.el (c-indent-exp):
  31143. +    try to be smarter about finding the beginning of the
  31144. +    balanced expression to indent.  Gives results closer to old
  31145. +    indent-c-exp behavior.
  31146. +
  31147. +    * cc-mode.el (c-submit-bug-report):
  31148. +    moved the require of reporter to after the
  31149. +    y-or-n-p question. Shortened the package name so it will fit on the
  31150. +    Subject line better.
  31151. +
  31152. +Mon Mar  7 17:39:45 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31153. +
  31154. +    * cc-mode.el (c-skip-conditional):
  31155. +    new function. factorized duplicate code
  31156. +    
  31157. +    (c-guess-basic-semantics): fixed statement-cont relpos calculation in
  31158. +    a continued statement following an else clause. CASE 8A and 8D changed
  31159. +    to use c-skip-conditional.
  31160. +
  31161. +Mon Feb 28 18:23:36 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31162. +
  31163. +    * cc-mode.el (c-conditional-key):
  31164. +    not sufficient to wrap conditional keywords in
  31165. +    \\<...\\> since this will false hit a keyword followed by an
  31166. +    underscore, which technically isn't a keyword.  An example is
  31167. +    "do_table" which incorrectly gets marked as a `do' keyword.
  31168. +
  31169. +Fri Feb 25 23:01:45 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31170. +
  31171. +    * cc-mode.el (c-guess-basic-semantics):
  31172. +    swapped CASE 7A and 7B so that we properly
  31173. +    indentify a brace-list-close of an empty brace list.
  31174. +
  31175. +    * cc-mode.el (c-style-alist):
  31176. +    added the "Ellemtel" style which implements the
  31177. +    coding style defined in "Programming in C++, Rules and
  31178. +    Recommendations, Erik Nyquist and Mats Henricson, Ellemtel, ftp from
  31179. +    euagate.eua.ericsson.se".
  31180. +
  31181. +    * cc-mode.el: (c-point) (c-indent-defun): only check the value of
  31182. +    defun-prompt-regexp if it is boundp (so v18 doesn't break)
  31183. +
  31184. +Thu Feb 24 23:34:08 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31185. +
  31186. +    * cc-mode.el (c-electric-brace):
  31187. +    fixed bug in temporary newline insertion when
  31188. +    auto-newline is off.  If a temp newline was not inserted, don't try to
  31189. +    delete it later on.
  31190. +
  31191. +    * cc-mode.el (c-set-offset):
  31192. +    changed the minibuffer prompt.  "Langelem" =>
  31193. +    "Syntactic symbol", and put in a brief message so that people won't
  31194. +    quote the symbol (as some novices have been doing).
  31195. +
  31196. +    * cc-mode.el (c-guess-basic-semantics):
  31197. +    CASE 4B.1, check for member init colon
  31198. +    preceding point even after doing a forward-char -1.  Need to skip over
  31199. +    constructor parameter list that span multiple lines, with the member
  31200. +    init colon hanging on the last of those line.
  31201. +    
  31202. +    CASE 4D.1. added a backward-sexp call to handle member-init-cont's
  31203. +    which are paren-lists broken across multiple lines.
  31204. +
  31205. +    * cc-mode.el (c-inhibit-startup-warnings-p):
  31206. +    new variable, used in c-emacs-features
  31207. +    
  31208. +    (c-emacs-features): rewrote feature extraction logic to be based on
  31209. +    version numbers. This more closely reflects the current state of
  31210. +    affairs of the main Emacs flavors.  There is sanity checking and
  31211. +    warning messages built-in too, to help inform the user if there are
  31212. +    known problems.
  31213. +
  31214. +Mon Feb 21 18:13:53 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31215. +
  31216. +    * cc-mode.el (c-guess-basic-semantics):
  31217. +    swap case 4A.2 and 4A.3 so that brace-lists
  31218. +    are checked before inline-open's, otherwise enums inside of classes
  31219. +    are not recognized properly.
  31220. +
  31221. +    * cc-mode.el (c-backslashify-current-line):
  31222. +    use kill-region instead of kill-line so
  31223. +    we don't have to use the kill-lines-magic hack.
  31224. +
  31225. +    * cc-mode.el (c-beginning-of-statement-1):
  31226. +    do not register last-begin when looking
  31227. +    at a case/default label, otherwise statement-cont lines after a case
  31228. +    label will not be associated with the correct beginning-of-statement
  31229. +
  31230. +Fri Feb 18 16:13:27 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31231. +
  31232. +    * cc-mode.el (c-lineup-arglist):
  31233. +    must handle arglist-intro lines just like
  31234. +    arglist-cont-nonempty lines in the calculation of containing-sexp in
  31235. +    the let* statement.
  31236. +    
  31237. +    (c-lineup-arglist): do not hard-code offset to 2 if at the end, we are
  31238. +    still looking at the eol.  I don't know why that was there...
  31239. +
  31240. +    * cc-mode.el (c-guess-basic-semantics):
  31241. +    CASE 4I, topmost-intro-cont's relpos must
  31242. +    be the boi of the beginning-of-statement, otherwise multiple t-i-c
  31243. +    lines get marching indentation.
  31244. +
  31245. +Thu Feb 17 23:53:16 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31246. +
  31247. +    * cc-mode.el (c-set-style):
  31248. +    changed the sense of the optional argument.  Now, style
  31249. +    changes modify the global variables by default, except when a non-nil
  31250. +    second argument is given.  Only then are buffer-local versions of the
  31251. +    variables made.
  31252. +
  31253. +    * cc-mode.el (c-lineup-arglist):
  31254. +    fixed calculation of containing-sexp for the
  31255. +    following code:
  31256. +    
  31257. +    main()
  31258. +    {
  31259. +        if( someFunction(someArg,
  31260. +                         anotherArg) &&
  31261. +            someOtherFunction(someArg,
  31262. +                              anotherArg))
  31263. +            doThis();
  31264. +    }
  31265. +
  31266. +    * cc-mode.el (c-class-key):
  31267. +    fixed class recognizing regexp so that it doesn't
  31268. +    falsely match the word `class' in a template function declaration,
  31269. +    e.g.:
  31270. +    
  31271. +    template<class T>
  31272. +    int A<T>::foo(
  31273. +
  31274. +    * cc-mode.el (c-mode-map):
  31275. +    moved c-indent-defun to C-c C-q.  This should be its
  31276. +    final resting place
  31277. +    
  31278. +    (c-lineup-math): new optional custom indent function, not used by
  31279. +    default.
  31280. +
  31281. +    * cc-mode.el (c-mode-map):
  31282. +    moved c-indent-defun from C-M-x to C-c C-i.  RMS says
  31283. +    C-M-x is reserved.
  31284. +
  31285. +Wed Feb 16 23:06:15 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31286. +
  31287. +    * cc-mode.el (c++-mode-syntax-table):
  31288. +    change : back to default (. == punctuation)
  31289. +    syntax class since c-label-key is busted when its (_ == symbol)
  31290. +
  31291. +    * cc-mode.el (c-lineup-runin-statements):
  31292. +    new lineup function for people who hang
  31293. +    the first statement after the open brace.
  31294. +    
  31295. +    (c-offsets-alist-default): added comment about alternative indentation
  31296. +    style for `statement'
  31297. +
  31298. +Mon Feb 14 15:53:30 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31299. +
  31300. +    * cc-mode.el (c-point):
  31301. +    when defun-prompt-regexp is non-nil, b-o-d doesn't leave us
  31302. +    at the brace, so we need to skip it as noise.
  31303. +
  31304. +    * cc-mode.el (c-indent-defun): if defun-prompt-regexp is non-nil,
  31305. +    beginning-of-defun won't leave us at the open brace, so we must skip
  31306. +    over defun-prompt-regexp... its noise.
  31307. +
  31308. +Fri Feb 11 20:49:19 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31309. +
  31310. +    * cc-mode.el (c-guess-basic-semantics):
  31311. +    CASE 14.C, when looking for a ?: construct,
  31312. +    and checking for not looking at a :: scope operator, make sure we do
  31313. +    this comparison at indent-point, instead of the first non-blank line
  31314. +    in the block
  31315. +
  31316. +    * cc-mode.el (c-guess-basic-semantics):
  31317. +    CASE 8C: if first stream-op is on a
  31318. +    separate line (i.e. not on the `cout' line), it should be indented
  31319. +    like a statement-cont, not a stream-op.  Relpos in this case is boi of
  31320. +    the first preceding non-syntactic-ws line
  31321. +
  31322. +    * cc-mode.el: (c-backward-to-start-of-if) (c-backward-to-start-of-do)
  31323. +    (c-guess-basic-semantics): It is not enough to search test for
  31324. +    looking-at "keyword\\b" since this will not catch "keyword_thing",
  31325. +    which is a valid symbol and not a keyword.  There is no equivalent of
  31326. +    \\b that matches at the end of a word-or-symbol string.  For now, I
  31327. +    changed the looking-at's to "keyword\\b[^_]" which seems to work.
  31328. +    There are probably instances of "keyword\\>" that are broken too, but
  31329. +    we'll hit them as they occur, since I'm not sure they are broken.
  31330. +
  31331. +Thu Feb 10 23:30:11 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31332. +
  31333. +    * cc-mode.el (c-populate-syntax-table):
  31334. +    only put c-mode/c++-mode common syntax
  31335. +    entries into syntax table.
  31336. +    
  31337. +    (c++-mode-syntax-table): colon (:) gets symbol class
  31338. +
  31339. +    * cc-mode.el:
  31340. +    (c-mode-hook) (c++-mode-hook) (c-mode-common-hook): added defvars for
  31341. +    completeness.
  31342. +
  31343. +Wed Feb  9 17:48:21 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31344. +
  31345. +    * Public release: 3.229
  31346. +
  31347. +    * cc-mode.el (c-electric-braces):
  31348. +    when calculating the initial semantics of the
  31349. +    open brace, we only need to insert a temporary newline if there is
  31350. +    non-whitespace preceding the brace, on the same line.
  31351. +
  31352. +    * cc-mode.el (c-guess-basic-semantics):
  31353. +    CASE 4I, don't add `inclass' semantics to
  31354. +    the list since the relpos already has any inclass offset added in.
  31355. +    Otherwise we get inclass offsets added twice.
  31356. +
  31357. +    * cc-mode.el (c-guess-basic-semantics):
  31358. +    fixed small problem introduced in version
  31359. +    3.235. when skipping lexical whitespace, we must skip [ \t\n].
  31360. +    newline wasn't getting skipped.
  31361. +
  31362. +Tue Feb  8 22:05:48 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31363. +
  31364. +    * cc-mode.el:
  31365. +    (c-offsets-alist) (c-offsets-alist-default): added `friend' syntactic
  31366. +    symbol for recognition of C++ friend declarations.  Default offset is
  31367. +    0.
  31368. +    
  31369. +    (c-guess-basic-semantics): recognize C++ friend declarations, and add
  31370. +    `friend' syntactic symbols as a modifier.
  31371. +
  31372. +    * cc-mode.el (c-guess-basic-semantics):
  31373. +    when narrowing out enclosing class, and
  31374. +    calculating start of region to narrow to, do not skip all syntactic
  31375. +    ws, just lexical whitespace (change c-forward-syntactic-ws call to
  31376. +    skip-chars-forward). Otherwise, you could skip into the middle of a C
  31377. +    comment block and not figure out that what you're looking at is a `c'
  31378. +    syntactic symbol.
  31379. +
  31380. +    * cc-mode.el:
  31381. +    (c-offsets-alist) (c-offsets-alist-default) (c-guess-basic-semantics):
  31382. +    added defun-block-intro syntactic symbol which controls indentation
  31383. +    for the first line in a top-level defun, analogous to
  31384. +    statement-block-intro.  (CASE 14.E)
  31385. +
  31386. +    * cc-mode.el (c-indent-defun):
  31387. +    catch any errors that occur in c-indent-exp and make
  31388. +    sure point is restored and the temporary mark is destroyed.
  31389. +
  31390. +    * cc-mode.el: (c-untame-characters) (c-backscan-limit) (c-tame-insert)
  31391. +    (c-tame-comments) (c-emacs18-fsws) (c-emacs18-bsws) (c-emacs18-il):
  31392. +    moved these defuns and vars to cc-mode-18.el file.
  31393. +    
  31394. +    (c-mode-map): do not install Emacs 18-only bindings
  31395. +    
  31396. +    (c-populate-syntax-table): do not install Emacs 18-only syntax table
  31397. +    entries
  31398. +    
  31399. +    (c-insert-and-tame): renamed to c-insert-special-chars and make this
  31400. +    call only self-insert-command.  Don't worry about Emacs 18
  31401. +    compatibility.
  31402. +    
  31403. +    (c-mark-function) (c-common-init): Don't worry about Emacs 18
  31404. +    compatibility.
  31405. +    
  31406. +    (c-emacs19-accurate-fsws): renamed to c-forward-syntactic-ws. Don't
  31407. +    worry about Emacs 18 compatibility.
  31408. +    
  31409. +    (c-emacs19-accurate-bsws): renamed to c-backward-syntactic-ws. Don't
  31410. +    worry about Emacs 18 compatibility.
  31411. +    
  31412. +    (c-8bit-il): renamed to c-in-literal. Don't worry about Emacs 18
  31413. +    compatibility.
  31414. +    
  31415. +    (c-submit-bug-report): remove reporting of c-backscan-limit and
  31416. +    c-untame-characters since these are for Emacs 18 only.
  31417. +
  31418. +Wed Feb  2 00:00:40 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31419. +
  31420. +    * cc-mode.el (c-lineup-arglist):
  31421. +    add kludge for arglist-cont-nonempty to get
  31422. +    correct indentation.
  31423. +    
  31424. +    (c-guess-basic-semantics): CASE 5D: arglist-cont-nonempty's relpos
  31425. +    needs to be boi of containing-sexp paren.  this is good for + offset,
  31426. +    but bad for c-lineup-arglist, so add the kludge described above.
  31427. +
  31428. +Tue Feb  1 22:14:35 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31429. +
  31430. +    * cc-mode.el (c-inside-bracelist-p):
  31431. +    enum keyword could be preceded by a typedef
  31432. +    keyword
  31433. +
  31434. +    * cc-mode.el (c-comment-region):
  31435. +    removed as obsolete, use comment-region instead.
  31436. +    Put the new comment-region function in, but commented out.
  31437. +
  31438. +    * cc-mode.el (c-default-macroize-column):
  31439. +    changed to c-backslash-column. Default
  31440. +    value changed to 48 from 78.  This is merged from c-mode.el
  31441. +    
  31442. +    (c-macroize-region): changed to c-backslash-region for c-mode.el merge.
  31443. +
  31444. +Mon Jan 31 22:57:05 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31445. +
  31446. +    * cc-mode.el (c-guess-basic-semantics):
  31447. +    CASE 8B.3: instead of try-block-open, which
  31448. +    is now gone, put statement-cont, block-open on semantics list.
  31449. +    Eventually I may call a recognition hook, and/or exceptions probably
  31450. +    fall through to here.
  31451. +
  31452. +    * cc-mode.el (c-guess-basic-semantics):
  31453. +    CASE 5E. go to beginning of statement
  31454. +    before looking getting relpos, so that we properly pick up nested
  31455. +    argument lists.
  31456. +
  31457. +    * cc-mode.el (c-common-init):
  31458. +    better setting up of Lucid menubar (use mode-name as
  31459. +    menu bar title)
  31460. +    
  31461. +    (c-popup-menu): use mode-name in menu title
  31462. +
  31463. +    * cc-mode.el (c-keep-region-active):
  31464. +    shouldn't check for interactive-p in tests
  31465. +    
  31466. +    (c-submit-bug-report): don't keep region active.
  31467. +
  31468. +    * cc-mode.el (c-keep-region-active): no-op for FSF 19
  31469. +    
  31470. +    (c-set-style) (c-beginning-of-statement) (c-end-of-statement)
  31471. +    (c-up-conditional) (c-backward-conditional) (c-forward-conditional)
  31472. +    (c-popup-menu): added a call to c-keep-region-active
  31473. +    
  31474. +    (c-tame-comments) (c-indent-command) (c-indent-exp) (c-indent-defun)
  31475. +    (c-indent-region) (c-macroize-region) (c-comment-region): removed call
  31476. +    to c-keep-region-active
  31477. +
  31478. +Sun Jan 30 20:22:09 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31479. +
  31480. +    * cc-mode.el (c-mode-map):
  31481. +    remapped c-toggle-hungry-state to C-c C-d so it would
  31482. +    not interfer with standard C-c C-h key prefix help mapping
  31483. +
  31484. +Fri Jan 28 22:16:29 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31485. +
  31486. +    * cc-mode.el (c-switch-label-key):
  31487. +    fixed what can occur between the `case' keyword
  31488. +    and the colon.  Its any amount of whitespace, followed by a single,
  31489. +    non-whitespace character, followed by any number of other characters.
  31490. +
  31491. +Thu Jan 27 21:15:57 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31492. +
  31493. +    * cc-mode.el (c-fill-paragraph):
  31494. +    much better for C++ style comments. 1. does not
  31495. +    munge up font-lock regions by inserting/deleting the intended
  31496. +    fill-prefix. 2. does not assume that leading whitespace before // is
  31497. +    spaces, *but* fill-prefix must be consistent for every line in the
  31498. +    region.
  31499. +
  31500. +    * cc-mode.el (c-mode-menu): moved this higher up in file
  31501. +
  31502. +    * cc-mode.el (c-end-of-statement): simple paren mismatch in call to
  31503. +    c-beginning-of-statement
  31504. +
  31505. +    * cc-mode.el (c-guess-basic-semantics):
  31506. +    CASE 2, skip over any preceding blank lines
  31507. +    that can occur before the comment. This fixes comment indentation for
  31508. +    the second and following paragraphs in a multi-paragraph C block
  31509. +    comment region with no leading stars.
  31510. +    
  31511. +    (c-lineup-C-comment): don't assume relpos is at the beginning of the
  31512. +    line (even though it usually is).
  31513. +
  31514. +    * cc-mode.el (c-switch-label-key):
  31515. +    simplify description of what can follow a 'case' tag
  31516. +
  31517. +    * cc-mode.el: Use copy-alist instead of c-copy-sequence
  31518. +
  31519. +    * cc-mode.el (c-common-init):
  31520. +    fix the way c-mode-menu is added to the Lucid menubar
  31521. +    so existing menubars aren't clobbered
  31522. +
  31523. +    * cc-mode.el (c-copy-sequence):
  31524. +    workaround for FSF 19.22 bug in copy-sequence
  31525. +
  31526. +Wed Jan 26 22:38:20 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31527. +
  31528. +    * cc-mode.el (c-lineup-comment): renamed from c-indent-for-comment
  31529. +    
  31530. +    (c-lineup-comment): call c-comment-indent when a comment-only line's
  31531. +    indentation is at or to the right of comment-column.
  31532. +    
  31533. +    (c-guess-basic-semantics): when a comment-only line's indentation is
  31534. +    at or to the right of comment-column, only 'comment-intro is on the
  31535. +    semantics list since the comment does not indent relative to a
  31536. +    non-comment line would get indented.
  31537. +
  31538. +    * cc-mode.el (c-lineup-arglist):
  31539. +    now correctly handles arglist-close langelems
  31540. +    (i.e. closing parens in an arglist)
  31541. +
  31542. +    * cc-mode.el (c-offsets-alist-default):
  31543. +    new constant containing unchanging default
  31544. +    settings for langelems
  31545. +    
  31546. +    (c-offsets-alist): value is set as a distinct copy of
  31547. +    c-offsets-alist-default.
  31548. +    
  31549. +    (c-set-style): if 'c-offsets-alist is found in style, first reset the
  31550. +    value of this variable to c-offses-alist-default, then change only
  31551. +    those langelems that differ.
  31552. +
  31553. +    * cc-mode.el (c-style-alist):
  31554. +    changed defconst to defvar. removed comments from
  31555. +    c-mode merge
  31556. +
  31557. +    * cc-mode.el (c-indent-region): minor format change
  31558. +
  31559. +    * cc-mode.el (c-indent-region):
  31560. +    merged in RMS's latest c-indent-region. Added a
  31561. +    skip of blank lines before the current line is indented. Recalculate
  31562. +    beginning-of-defun lim inside of top-level while loop so that
  31563. +    back-parsing is further restricted properly, speeding indentation
  31564. +    calculation.
  31565. +
  31566. +Tue Jan 25 18:01:01 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31567. +
  31568. +    * cc-mode.el (c-fill-paragraph): small fix to RMS's paren level typo
  31569. +
  31570. +    * cc-mode.el (c-fill-paragraph):
  31571. +    fixed (hopefully) obvious parenthesis level typo
  31572. +
  31573. +    * cc-mode.el (c-fill-paragraph): added RMS's new C++ aware version
  31574. +    
  31575. +    (c-mode-map): put back the binding of M-q to c-fill-paragraph
  31576. +
  31577. +Mon Jan 24 22:52:53 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31578. +
  31579. +    * cc-mode.el (c-update-modeline): typo: use c-hungry-delete-key
  31580. +
  31581. +    * cc-mode.el (c-auto-hungry-string): minor-mode-alist variable
  31582. +    
  31583. +    (c-common-init): auto-hungry designation string happens on
  31584. +    minor-mode-alist now
  31585. +    
  31586. +    (c-update-modeline): sets the c-auto-hungry-string
  31587. +
  31588. +    * cc-mode.el (c-electric-semi&comma):
  31589. +    only re-indent line when c-auto-newline is non-nil
  31590. +
  31591. +    * cc-mode.el (c-mode-menu):
  31592. +    new Lucid menu variable for popup and menubar
  31593. +    
  31594. +    (c-popup-menu): command for popping up a menu in Lemacs
  31595. +    
  31596. +    (c-mode-map): FSF 19's menu initialization stuff is moved to here. Add
  31597. +    binding for Lemacs to put c-popup-menu on button 3.
  31598. +    
  31599. +    (c-common-init): put c-mode-menu on buffer-local menubar for Lucid
  31600. +
  31601. +Fri Jan 21 22:36:03 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31602. +
  31603. +    * cc-mode.el:
  31604. +    (c-up-block) (c-down-block): removed.  backward-up-list and down-list
  31605. +    do the job already
  31606. +
  31607. +    * cc-mode.el: (cc-mode.el) comment improvements
  31608. +    
  31609. +    (c-mode-map): a few merges from lemacs, but commented out for now.
  31610. +    
  31611. +    (c-insert-brackets) (c-insert-braces): taken from lemacs, but
  31612. +    commented out for now
  31613. +    
  31614. +    (cc-mode.el): menus added from FSF emacs.  Still need menus for
  31615. +    lemacs.
  31616. +
  31617. +Fri Jan 14 18:59:57 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31618. +
  31619. +    * cc-mode.el (cc-mode.el): fixed typo on make-obsolete-variable
  31620. +
  31621. +    * cc-mode.el (cc-mode.el): added all make-variable-obsolete calls
  31622. +
  31623. +Thu Jan 13 23:25:57 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31624. +
  31625. +    * cc-mode.el (c-guess-basic-semantics):
  31626. +    CASE 8A substatement. relpos is boi of
  31627. +    placeholder
  31628. +
  31629. +    * cc-mode.el (c-beginning-of-statement-1):
  31630. +    skip back over syntactic ws before
  31631. +    checking bobp in while condition
  31632. +
  31633. +Wed Jan 12 14:24:11 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31634. +
  31635. +    * cc-mode.el (cc-mode.el): only v19 has the make-obsolete calls
  31636. +
  31637. +    * cc-mode.el (c-guess-basic-semantics):
  31638. +    CASE 8B.3 now returns a try-block-open, but
  31639. +    exceptions aren't yet fully supported.
  31640. +
  31641. +    * cc-mode.el (c-beginning-of-statement):
  31642. +    when in a comment, or looking at the
  31643. +    beginning of a comment, only call forward-sentence if not called
  31644. +    interactively.  Thus programmatically, this function always goes back
  31645. +    to the real beginning-of-statement.
  31646. +
  31647. +    * cc-mode.el (cc-mode.el): changes to comments at top of file
  31648. +
  31649. +    * cc-mode.el:
  31650. +    (c-common-init) (c-style-name) (c-set-style): removed c-style-name,
  31651. +    and no longer put style name on minor mode list
  31652. +
  31653. +    * cc-mode.el:
  31654. +    (c-set-style) (c-style-alist): vastly verbosified docstrings
  31655. +
  31656. +Tue Jan 11 23:50:45 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31657. +
  31658. +    * cc-mode.el (c-offsets-alist): vastly verbosified docstring.
  31659. +    
  31660. +    (cc-mode.el): LANGELEM in docstrings are changed to "syntactic element
  31661. +    symbols" for clarity (?!)
  31662. +
  31663. +    * cc-mode.el: (c-electric-colon) (c-offsets-alist) (c-macroize-region)
  31664. +    (c-block-comments-indent-p) (c-untame-characters)
  31665. +    (c-toggle-auto-state) (c-toggle-hungry-state) (c-macroize-region):
  31666. +    minor docstring mods
  31667. +
  31668. +    * cc-mode.el (c-electric-colon): minor docstring mod
  31669. +    
  31670. +    (c-submit-bug-report): removed c-auto-hungry-initial-state from
  31671. +    reported var list
  31672. +
  31673. +    * cc-mode.el (c-offsets-alist):
  31674. +    improve the docstrings for brace-list-* langelems
  31675. +
  31676. +    * cc-mode.el (c-auto-hungry-initial-state):
  31677. +    obsolete variable, use c-auto-newline
  31678. +    and c-hungry-delete-key variables instead
  31679. +    
  31680. +    (c-mode) (c++-mode): run-hooks is now the last thing
  31681. +    
  31682. +    (c-set-auto-hungry-state) (c-make-region-active): removed
  31683. +    
  31684. +    (c-keep-region-active): is now a defun
  31685. +    
  31686. +    (c-update-modeline) (c-calculate-state): added
  31687. +    
  31688. +    (c-toggle-auto-state) (c-toggle-hungry-state)
  31689. +    (c-toggle-auto-hungry-state): simplified vastly. also, docstrings now
  31690. +    explain what the features do.
  31691. +
  31692. +    * cc-mode.el (cc-mode.el):
  31693. +    added an fset of c++-beginning-of-defun for lemacs 19.9
  31694. +    lossage
  31695. +
  31696. +    * cc-mode.el (c-cleanup-list):
  31697. +    improved docstring, when do clean ups take place?
  31698. +
  31699. +    * cc-mode.el (c-cleanup-list): minor docstring typo fix
  31700. +
  31701. +    * cc-mode.el (cc-mode.el): changed FSFmacs to FSF Emacs
  31702. +
  31703. +    * cc-mode.el: added my name to 1993 and 1994 copyrights
  31704. +
  31705. +Mon Jan 10 22:10:11 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31706. +
  31707. +    * cc-mode.el (c-set-offset):
  31708. +    conversion of offset to a number in the interactive
  31709. +    list glom section was missing negative numbers due to the leading
  31710. +    minus sign
  31711. +
  31712. +    * cc-mode.el (c-beginning-of-statement-1):
  31713. +    on error, skip backwards over +!~ in
  31714. +    addition to other chars skipped
  31715. +
  31716. +Sat Jan  8 03:20:49 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31717. +
  31718. +    * cc-mode.el (c-electric-pound):
  31719. +    fixed after-functionality positioning when point
  31720. +    is at bolp before # is installed
  31721. +
  31722. +    * cc-mode.el (c-guess-basic-semantics):
  31723. +    CASE 13, inline-close relpos should be boi
  31724. +    of the beginning-of-statement relpos
  31725. +
  31726. +    * cc-mode.el (c-beginning-of-statement-1):
  31727. +     only do the skip-chars-backwards in the
  31728. +    failure of the condition-case statement.  also, add the `-' character
  31729. +    to the list of skippage
  31730. +
  31731. +Fri Jan  7 23:27:20 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31732. +
  31733. +    * cc-mode.el (c-beginning-of-statement-1):
  31734. +    do not let backward scanning stop inside
  31735. +    a literal.  use c-in-literal to stop this, which really catches only
  31736. +    preprocs
  31737. +
  31738. +    * cc-mode.el (c-guess-basic-semantics):
  31739. +    CASE 13, block-close relpos should be boi
  31740. +    of relpos to catch "} else {" constructs
  31741. +
  31742. +    * cc-mode.el: (c-forward-conditional) (c-indent-region)
  31743. +    (c-beginning-of-inheritance-list) (c-backward-to-start-of-do)
  31744. +    (c-backward-to-start-of-if): removed unused let-bound variables as per
  31745. +    output of byte compiler
  31746. +
  31747. +    * cc-mode.el: better messages about the necessary makunbounds
  31748. +
  31749. +Thu Jan  6 18:52:51 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31750. +
  31751. +    * cc-mode.el (c-beginning-of-statement-1): recognize "else if" clauses
  31752. +    
  31753. +    (c-guess-basic-semantics): CASE 8A recognizes "else if" clauses
  31754. +
  31755. +Mon Jan  3 23:01:58 1994  Barry A. Warsaw, ITB  (warsaw@anthem)
  31756. +
  31757. +    * cc-mode.el: upped the copyright notice date
  31758. +
  31759. +    * cc-mode.el (c-beginning-of-statement-1):
  31760. +    before calculating last-begin, skip over
  31761. +    any bogus characters like *&:. for the following situations:
  31762. +    
  31763. +        if(::foo(),
  31764. +        if(.0123,
  31765. +        if(&blatz,
  31766. +        if(*bar,
  31767. +
  31768. +    * cc-mode.el (c-guess-basic-semantics):
  31769. +    CASE 8A.  do and else clauses aren't
  31770. +    followed by a paren list, so we should only skip forward over 1 sexp
  31771. +    in those cases.
  31772. +
  31773. +Wed Dec 29 18:06:12 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  31774. +
  31775. +    * cc-mode.el (c-lineup-multi-inher):
  31776. +    skip syntactic ws if there is only a comment
  31777. +    on the end of the line containing the opening colon
  31778. +
  31779. +    * cc-mode.el (c-guess-basic-semantics): CASE 5C, don't check for
  31780. +    c-conditional-statement, since only "for" can have multiple
  31781. +    substatements
  31782. +
  31783. +    * cc-mode.el (c-guess-basic-semantics):
  31784. +    CASE 8: added colon to list of characters
  31785. +    that don't continue a statement, all other cases will be caught later
  31786. +    on (I hope).
  31787. +
  31788. +    * cc-mode.el (c-guess-basic-semantics):
  31789. +    rewrote and re-arranged CASE 5 subcases to
  31790. +    correctly identifiy for-list substatements, etc.  looks like
  31791. +    paren-lists now work pretty well.
  31792. +
  31793. +Tue Dec 28 16:36:06 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  31794. +
  31795. +    * cc-mode.el (c-guess-basic-semantics):
  31796. +    fixed CASE 5C to use new semantics for
  31797. +    c-beginning-of-statement.
  31798. +
  31799. +    * cc-mode.el (c-beginning-of-statement-1):
  31800. +    make sure searching stops correctly at
  31801. +    conditional statements (if/while,...etc) so that substatements are
  31802. +    properly recognized
  31803. +
  31804. +    * cc-mode.el (c-beginning-of-statement):
  31805. +    make sure we're left at or after lim
  31806. +
  31807. +    * cc-mode.el: (c-electric-brace) (c-electric-slash) (c-electric-star)
  31808. +    (c-electric-semi&comma) (c-electric-colon): let-bind
  31809. +    c-echo-semantic-information-p to nil to shut up information printing
  31810. +    in inappropriate places
  31811. +
  31812. +    * cc-mode.el (c-guess-basic-semantics):
  31813. +    fixes to CASE 8 for new semantics of
  31814. +    c-beginning-of-statement.  Added a test of placeholder !=
  31815. +    containing-sexp in top-level test.  CASE 8D, progn => save-excursion
  31816. +    so correct statement start can be found
  31817. +
  31818. +    * cc-mode.el:
  31819. +    (c-beginning-of-statement) (c-end-of-statement): minor clean up.
  31820. +    removed my old c-beginning-of-statement -- we'll go with FSF's and fix
  31821. +    it as need bee
  31822. +
  31823. +Mon Dec 27 23:25:17 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  31824. +
  31825. +    * cc-mode.el:
  31826. +    (c-beginning-of-statement) (c-end-of-statement): add another optional
  31827. +    argument, lim
  31828. +    
  31829. +    (c-guess-basic-semantics): corrected to use new arg list for the above
  31830. +
  31831. +    * cc-mode.el:
  31832. +    (c-beginning-of-statement) (c-end-of-statement): check for argument ==
  31833. +    nil (optional arg not supplied)
  31834. +
  31835. +    * cc-mode.el:
  31836. +    (c-beginning-of-statement) (c-end-of-statement): make arg optional
  31837. +
  31838. +    * cc-mode.el (c-beginning-of-statement, et al):
  31839. +    try using BOCM's version to see if
  31840. +    it works any better
  31841. +
  31842. +    * cc-mode.el (c-set-style): put a space in front of c-style name
  31843. +    
  31844. +    (c-common-init): only hack on c-style-name once!
  31845. +
  31846. +    * cc-mode.el: provide cc-mode, not c-mode
  31847. +
  31848. +    * cc-mode.el (c-style-name): new variable, buffer local
  31849. +    
  31850. +    (c-common-init): hack on c-style-name to the minor-mode alist
  31851. +    
  31852. +    (c-set-style): set c-style-name variable for minor-mode
  31853. +
  31854. +    * cc-mode.el (c-conditional-key): added "switch"
  31855. +    
  31856. +    (c-guess-basic-semantics): renumbered CASE 8 subcases, no substantive
  31857. +    changes.
  31858. +    
  31859. +    (c-guess-basic-semantics): added dummy CASE 8B.3 to generate an error.
  31860. +    I don't know what constructs fall through this case.
  31861. +
  31862. +    * cc-mode.el (c-symbol-key):
  31863. +    put this back in and fixed all the other -key's to use it
  31864. +
  31865. +    * cc-mode.el (c-set-auto-hungry-state):
  31866. +    small typo in check for force-mode-line-update
  31867. +
  31868. +    * cc-mode.el: use force-mode-line-update where appropriate
  31869. +
  31870. +    * cc-mode.el: added autoload directives
  31871. +
  31872. +Wed Dec 22 20:52:32 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  31873. +
  31874. +    * cc-mode.el (c-inside-bracelist-p):
  31875. +    fixed a bug when no spaces were between the =
  31876. +    char and open brace in an aggregate list
  31877. +
  31878. +    * cc-mode.el (c-switch-label-key): fixed to recognize negative numbers
  31879. +
  31880. +    * cc-mode.el:
  31881. +    (c-forward-into-nomenclature) (c-backward-into-nomenclature): new
  31882. +    commands, but as yet unbound
  31883. +
  31884. +    * cc-mode.el (c-guess-basic-semantics):
  31885. +    CASE 7C: look for block-open modifier
  31886. +
  31887. +Tue Dec 21 22:55:21 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  31888. +
  31889. +    * cc-mode.el (c-guess-basic-semantics):
  31890. +    CASE 7 improved but nested brace-lists are
  31891. +    still not perfect.  Do I need to add another langelem??? blech.
  31892. +
  31893. +    * cc-mode.el (c-inside-bracelist-p):
  31894. +    new function to calculate whether we're inside
  31895. +    a brace list or not
  31896. +    
  31897. +    (c-guess-basic-semantics): use c-inside-bracelist-p where appropriate
  31898. +
  31899. +    * cc-mode.el (c-guess-basic-semantics):
  31900. +    CASE 7B's (brace-list-close) relpos is not
  31901. +    boi of bo-stmt, instead its boi of containing-sexp
  31902. +
  31903. +    * cc-mode.el (c-offsets-alist):
  31904. +    added brace-list-close, brace-list-intro,
  31905. +    brace-list-entry
  31906. +    
  31907. +    (c-guess-basic-semantics): added logic to recognize brace-list-open
  31908. +    new langelems
  31909. +
  31910. +    * cc-mode.el (c-hanging-braces-alist):
  31911. +    docstring addition: brace-list-open
  31912. +    
  31913. +    (c-offsets-alist): added brace-list-open
  31914. +    
  31915. +    (c-electric-brace): added logic to hang brace-list-open's
  31916. +    
  31917. +    (c-guess-basic-semantics): added logic to recognize brace-list-open's
  31918. +
  31919. +    * cc-mode.el (c-mode-map): removed binding to undefined c-match-paren
  31920. +
  31921. +    * cc-mode.el (c-semantics): new variable
  31922. +    
  31923. +    (c-indent-via-language-element): use globally advertised c-semantics
  31924. +    variable now.
  31925. +    
  31926. +    (c-offsets-alist): better docstring, describes c-semantics
  31927. +
  31928. +    * cc-mode.el (c-adaptive-block-open):
  31929. +    new function, but block-open doesn't use it
  31930. +    by default yet
  31931. +    
  31932. +    (c-guess-basic-semantics): moved M2 (block-open) test into body of
  31933. +    defun instead of at the end -- to many special case tests
  31934. +
  31935. +Mon Dec 20 17:55:38 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  31936. +
  31937. +    * cc-mode.el (c-indent-command):
  31938. +    guarantee that c-tab-always-indent == nil has the
  31939. +    same semantics as in BOCM
  31940. +
  31941. +    * cc-mode.el (cc-mode.el): pulled in bocm's beginning-of-statement,
  31942. +    end-of-statement and related defuns, but I still need to make a pass
  31943. +    through them.
  31944. +    
  31945. +    (c-up-conditional) (c-backward-conditional) (c-forward-conditional):
  31946. +    yanked in verbatim from c-mode.el
  31947. +    
  31948. +    (c-backslash-region): fset from c-macroize-region.  also, we're
  31949. +    leaving c-backslash-column commented out. use
  31950. +    c-default-macroize-column instead.
  31951. +
  31952. +    * cc-mode.el (c-fill-paragraph): removed, use filladapt instead
  31953. +    
  31954. +    (c-comment-indent): adopted from c-mode.el, but fixed to handle C++
  31955. +    comments
  31956. +
  31957. +    * cc-mode.el (c-mode.el):
  31958. +    moved some defuns and defmacros around. no substantive changes
  31959. +
  31960. +    * cc-mode.el (c-symbol-key): obsolete, use \\s_ syntax class instead
  31961. +    
  31962. +    (c-protection-key): new defconst
  31963. +    
  31964. +    (c-case-statement-key): renamed to c-switch-label-key
  31965. +
  31966. +    * cc-mode.el (c-lineup-streamop):
  31967. +    search for stream operator, be careful of
  31968. +    singular less than, greater than symbol.
  31969. +
  31970. +Fri Dec 17 21:42:27 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  31971. +
  31972. +    * cc-mode.el:
  31973. +    fixed semantics for c-macroize-region and c-comment-region
  31974. +
  31975. +    * cc-mode.el (c-guess-basic-semantics):
  31976. +    don't put block-open on semantics list if
  31977. +    other brace open symbols are already there
  31978. +
  31979. +Thu Dec 16 20:49:34 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  31980. +
  31981. +    * cc-mode.el (c-emacs-features): minor docstring change
  31982. +
  31983. +    * cc-mode.el (c-set-offset):
  31984. +    new optional add-p arg. when non-nil, require-match on
  31985. +    completion is inhibited and new langelem symbols can be added to the
  31986. +    c-offsets-alist.
  31987. +    
  31988. +    (c-guess-basic-semantics): CASE 7C has been extended to properly
  31989. +    recognize conditional's substatements.  CASE 7D now handles continued
  31990. +    statements.  CASE 7A now recognizes only func local class opening
  31991. +    braces, which means 7C + M2 will catch substatement block-opens.
  31992. +    
  31993. +    (c-offsets-alist): added substatement langelem
  31994. +
  31995. +    * cc-mode.el (c-strict-semantics-p):
  31996. +    default value to nil for debugging purposes
  31997. +    
  31998. +    (c-guess-basic-semantics): block-open langelem is now a relpos-less
  31999. +    langelem because it is really a modifier on the basic langelem of the
  32000. +    line.  Specifically: Case M2 added; CASE 7A.2 now places just a
  32001. +    statement-cont langelem on semantics; CASE 13.B is completely removed.
  32002. +    
  32003. +    (c-offsets-alist): block-open default offset is now 0.
  32004. +
  32005. +Mon Dec 13 15:29:26 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32006. +
  32007. +    * cc-mode.el (c-guess-basic-semantics):
  32008. +    now it does the the test for c++-mode to
  32009. +    save a potential funcall in c-mode.
  32010. +    
  32011. +    (c-search-uplist-for-class): fixed bug where c-in-literal test was
  32012. +    testing end-point of parse-partial-sexp, not the classkey search begin
  32013. +    point.
  32014. +
  32015. +Thu Dec  9 19:02:25 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32016. +
  32017. +    * cc-mode.el (c++-mode-map): fixed FSF call to set-keymap-parent
  32018. +
  32019. +    * cc-mode.el (c++-mode-map):
  32020. +    JWZ contributed a better way to share keymaps for v18
  32021. +    using nconc
  32022. +    
  32023. +    (c-populate-map): obsolete, move all define-keys into c-mode-map if
  32024. +    statement
  32025. +
  32026. +    * cc-mode.el (c-emacs-features):
  32027. +    for Emacs 19's, add a flavor member to distinguish
  32028. +    between FSF19 and Lucid19.
  32029. +    
  32030. +    (c++-mode-map): for Emacs 19's, inherit c++-mode-map from c-mode-map.
  32031. +    Handle FSF/Lucid properly and handle GNU18 the hard way.
  32032. +
  32033. +Wed Dec  8 22:43:02 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32034. +
  32035. +    * cc-mode.el (c-down-block):
  32036. +    changed call of c-beginning-of-block to c-up-block
  32037. +
  32038. +    * cc-mode.el:
  32039. +    (c-populate-map) (c-populate-syntax-table): new funcs to consolatate
  32040. +    setting these structures
  32041. +    
  32042. +    (c-mode-map) (c++-mode-map): get as close as we can with BOCM's
  32043. +    mappings, but there are still some inconsistencies I need to clean up
  32044. +
  32045. +Tue Dec  7 23:52:29 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32046. +
  32047. +    * cc-mode.el (c-set-style): added functionality
  32048. +    
  32049. +    (c-macro-expand): added autoload
  32050. +    
  32051. +    (documentation and docstrings): updated many places
  32052. +    
  32053. +    (c-set-offset): better interactive spec
  32054. +    
  32055. +    (c-fill-paragraph): stolen from c-mode, but not looked at yet
  32056. +    
  32057. +    (cc-mode.el): added fset compatibility with c-mode
  32058. +    
  32059. +    NOTE: THERE ARE STILL SOME FUNCTIONS I HAVEN'T MOVED HERE YET.
  32060. +
  32061. +Mon Dec  6 15:46:30 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32062. +
  32063. +    * cc-mode.el (c-guess-basic-semantics):
  32064. +    CASE 5D is only a statement-cont if the
  32065. +    beginning-of-statement is not bound by continued-sexp
  32066. +
  32067. +    * cc-mode.el: fixed a coupble of cc-emacs-features to c-emacs-features
  32068. +
  32069. +Fri Dec  3 23:05:29 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32070. +
  32071. +    * cc-mode.el (cc-mode.el):
  32072. +    changed all symbols from cc-<thing> to c-<thing>, except
  32073. +    where both c-<thing> and c++-<thing> are needed:
  32074. +    c++-mode-abbrev-table, c++-mode-map, c++-mode-syntax-table,
  32075. +    
  32076. +    (c-mode-common-hook): new common hook name
  32077. +    
  32078. +    (c-mode-map): don't add c-scope-operator.
  32079. +
  32080. +Thu Dec  2 00:59:34 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32081. +
  32082. +    * cc-mode.el (cc-guess-basic-semantics):
  32083. +    CASE 7B, its possible that the line that
  32084. +    placeholder points to does not contain the first streamop.  This can
  32085. +    be the case if the streamop line follows an `if' clause.
  32086. +
  32087. +Wed Dec  1 23:35:44 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32088. +
  32089. +    * cc-mode.el (cc-macroize-region):
  32090. +    simplified so begin/end semantics are identical
  32091. +    to cc-comment-region.
  32092. +    
  32093. +    (cc-backslashify-current-line): do not (forward-char -1) if eol ==
  32094. +    bol.  Also, must let-bind kill-lines-magic to nil so that blank line,
  32095. +    with only a \ on it will not consume the newline character
  32096. +
  32097. +Mon Nov 29 22:50:30 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32098. +
  32099. +    * cc-mode.el (cc-indent-region):
  32100. +    only generate an error on non-open paren/brace
  32101. +    when shutup-p is nil
  32102. +
  32103. +    * cc-mode.el:
  32104. +    (cc-uncomment-region) (cc-comment-region): combined into 1 function,
  32105. +    bound to C-c C-c and behavior analogous to cc-macroize-region.
  32106. +    
  32107. +    (cc-up-block) (cc-down-block): new commands, bound to C-c C-u and C-c
  32108. +    C-d respectively.
  32109. +
  32110. +    * cc-mode.el (cc-indent-exp):
  32111. +    don't indent line with cc-indent-via-language-element
  32112. +    if line is blank
  32113. +
  32114. +    * cc-mode.el (cc-electric-brace):
  32115. +    use (boundp 'blink-paren-function) as emacs
  32116. +    version test, not cc-emacs-features.  The latter breaks on Emacs18's
  32117. +    with the syntax patch
  32118. +
  32119. +    * cc-mode.el (cc-guess-basic-semantics):
  32120. +    fixed the comment-intro regexp to ignore
  32121. +    newlines. (spaces and tabs only)
  32122. +
  32123. +Fri Nov 26 19:01:34 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32124. +
  32125. +    * cc-mode.el (cc-search-uplist-for-classkey):
  32126. +    fixed two small bugs. first, the cdr
  32127. +    of foundp should be cc-point boi to catch any template prefix on the
  32128. +    class key (remember we're searching backwards now -- maybe we should
  32129. +    search forward, eh?).  Also, we have to set donep to (not foundp) so
  32130. +    that the search ends when we haven't found any classkey
  32131. +
  32132. +    * cc-mode.el (cc-guess-basic-semantics):
  32133. +    CASE 13.D make sure we're not looking at a
  32134. +    globally scoped function call
  32135. +
  32136. +    * cc-mode.el (cc-guess-basic-semantics):
  32137. +    arglist-close should relpos boi of
  32138. +    containing-sexp
  32139. +    
  32140. +    (cc-change-semantic-symbol-offset): fixed setqcdr typo
  32141. +    
  32142. +    (cc-offsets-alist): arglist-close default is now +
  32143. +
  32144. +    * cc-mode.el (cc-beginning-of-statement):
  32145. +    fix problem when crossing a paren level
  32146. +    (i.e. the cc-safe forward-sexp call fails).  just move back a space
  32147. +    and keep going.
  32148. +    
  32149. +    (cc-guess-basic-semantics): expand CASE 5C test and CASE 5E relpos
  32150. +    calculation
  32151. +
  32152. +Wed Nov 24 22:54:31 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32153. +
  32154. +    * cc-mode.el (cc-safe):
  32155. +    added this macro back in -- it seems to be useful
  32156. +    
  32157. +    (cc-beginning-of-statement): really improved this a lot. we only go
  32158. +    back a sexp if we aren't already at the beginning of indentation.
  32159. +    This is now a more generally useful function since it seems to do the
  32160. +    right thing under all circumstances.
  32161. +    
  32162. +    (cc-guess-basic-semantics): lots of changes to use the new cc-b-o-s
  32163. +    function.  All known indentations after hanging braces are now fixed.
  32164. +    This includes case 4D.5, CASE 7, CASE 12, and CASE 13.F.  Are there
  32165. +    others?
  32166. +
  32167. +    * cc-mode.el (cc-offsets-alist): added knr-argdecl offset
  32168. +    
  32169. +    (cc-change-semantic-symbol-offset): allow addition of new langelem
  32170. +    symbols with universal arg
  32171. +    
  32172. +    (cc-guess-basic-semantics): added recognition of subsequent
  32173. +    knr-argdecl langelems in cc-c-mode only
  32174. +
  32175. +    * cc-mode.el (cc-electric-brace):
  32176. +    in brace-else-brace cleanup, I forgot to insert
  32177. +    the new "} else {" string after deleting the old string!
  32178. +
  32179. +    * cc-mode.el:
  32180. +    (cc-back-block) (cc-safe-uplist) (cc-safe-downlist): obsolete
  32181. +    
  32182. +    (cc-search-uplist-for-classkey): completely rewritten for speed. it
  32183. +    now uses re-search-backwards limited to two bod's back.  Orders of
  32184. +    magnitude faster when operating towards the end of a large file.  In
  32185. +    fact exec time is not buffer size dependent anymore (but like
  32186. +    everything else, it is bod dependent of course).
  32187. +    
  32188. +    (cc-guess-basic-semantics): fixed cases 4, 7, and 12 to work with the
  32189. +    new cc-search-uplist-for-classkey
  32190. +
  32191. +Tue Nov 23 22:41:41 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32192. +
  32193. +    * cc-mode.el (cc-guess-basic-semantics):
  32194. +    fixed case 4F. if a class-close is found,
  32195. +    it should indent relative to the class declaration, not the opening
  32196. +    brace (i.e. the cdr of inclass-p, not the car)
  32197. +
  32198. +    * cc-mode.el (cc-guess-basic-semantics):
  32199. +    fix CASE 12's determination of the type of
  32200. +    langelem that a brace closes.
  32201. +
  32202. +    * cc-mode.el (cc-c++-mode-syntax-table):
  32203. +    switched A/B comment styles as per Paul
  32204. +    Smith's FSFmacs patch
  32205. +    
  32206. +    (cc-1bit-il): switched A/B comment styles as per Paul Smith's FSFmacs
  32207. +    patch
  32208. +
  32209. +    * cc-mode.el (cc-search-uplist-for-classkey):
  32210. +    only search when in a C++ buffer.  C
  32211. +    buffers have no enclosing class!
  32212. +
  32213. +    * cc-mode.el (cc-electric-pound):
  32214. +    oops, forgot to prefix-numeric-value arg on the
  32215. +    self-insert-command
  32216. +
  32217. +    * cc-mode.el (cc-mark-function):
  32218. +    must funcall the second call to push-mark since
  32219. +    v18 only accepts 2 arguments, not the 3 of v19.
  32220. +    
  32221. +    (cc-electric-brace): fix the blink-paren-function/-hook mismatch for
  32222. +    v18 vs. v19.
  32223. +    
  32224. +    (cc-point): added the (,@ nil) form as a workaround for v18's
  32225. +    backquote bug.  Doesn't seem to hurt us for v19 so I left it in for
  32226. +    everyone.
  32227. +
  32228. +Mon Nov 22 23:29:19 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32229. +
  32230. +    * cc-mode.el (cc-guess-basic-semantics):
  32231. +    CASE 12, always return boi of the line
  32232. +    that containing-sexp is on, not just for block-close langelem
  32233. +
  32234. +    * cc-mode.el (cc-search-uplist-for-classkey):
  32235. +    make backward searching slightly more
  32236. +    efficient by stopping when char under search-start is a close brace
  32237. +
  32238. +    * cc-mode.el (cc-label-key):
  32239. +    new constant, change all concat'd label regexps to use
  32240. +    this new constant
  32241. +    
  32242. +    (cc-guess-basic-semantics): fix case 13.D to not accidentally code a
  32243. +    statement that follows a label as a ?: construct
  32244. +
  32245. +    * cc-mode.el (cc-indent-command):
  32246. +    fixed behavior when cc-tab-always-indent was nil.
  32247. +    should now be like old behavior (CASE 1)
  32248. +
  32249. +    * cc-mode.el (cc-emacs-features): improve documentation
  32250. +
  32251. +    * cc-mode.el (cc-point):
  32252. +    retain quoted symbol semantics on argument but don't use
  32253. +    dangerous `eval' to get an eq ready symbol
  32254. +
  32255. +    * cc-mode.el (cc-indent-exp):
  32256. +    better error messages so people don't get as confused
  32257. +
  32258. +    * cc-mode.el (cc-beginning-of-statement):
  32259. +    much more robust movement across balanced
  32260. +    expressions now correctly finds the beginning of statements for very
  32261. +    complex forloops and more.  We now no longer assume that expressions
  32262. +    begin and end on a single line.
  32263. +    
  32264. +    (cc-guess-basic-semantics): CASE 5C is expanded to correctly locate
  32265. +    multi-line mathematical paren groupings.  Also, CASE 5E now returns
  32266. +    boi at the beginning-of-statement for any arglist-cont.
  32267. +
  32268. +    * cc-mode.el:
  32269. +    (cc-electric-brace) (cc-electric-slash) (cc-electric-star)
  32270. +    (cc-electric-semi&comma) (cc-electric-colon)
  32271. +    (cc-change-semantic-symbol-offset): changed docstrings to more
  32272. +    accurately describe defuns' behavior
  32273. +
  32274. +    * cc-mode.el (cc-indent-exp):
  32275. +    calculate bod before doing the forward-sexp since
  32276. +    unindented open parens in col0 lower down will mess this calculation
  32277. +    up.
  32278. +
  32279. +Sat Nov 20 21:53:29 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32280. +
  32281. +    * cc-mode.el (cc-submit-bug-report): typo on cc-hanging-colons-alist
  32282. +
  32283. +    * cc-mode.el:
  32284. +    (cc-keep-region-active) (cc-make-region-active): split this into a
  32285. +    macro (the former) and a defun (the latter).  This way we can check
  32286. +    for interactivity as expected, but still cut down on the number of bc
  32287. +    warnings.
  32288. +
  32289. +    * cc-mode.el:
  32290. +    (cc-setup-comment-indent-variable) (cc-keep-region-active): make these
  32291. +    defuns so that the .elc file won't be editor version specific. The
  32292. +    trade off is that the byte compiler will complain
  32293. +
  32294. +    * cc-mode.el (cc-lineup-C-comments):
  32295. +    limit re-search-forward to eol, not eol-1...
  32296. +    why did we do this?
  32297. +
  32298. +    * cc-mode.el:
  32299. +    (cc-electric-brace) (cc-electric-semi&comma) (cc-electric-colon):
  32300. +    re-indent the line even if cc-auto-newline is nil, just don't add any
  32301. +    newlines
  32302. +
  32303. +    * cc-mode.el (cc-offsets-alist):
  32304. +    multi-line strings should be shoved against the
  32305. +    left side margin
  32306. +
  32307. +    * cc-mode.el (cc-setup-comment-indent-variable):
  32308. +    new macro to cut down on byte
  32309. +    compiler warnings
  32310. +
  32311. +    * cc-mode.el (cc-case-statement-key):
  32312. +    should now recognize character constants as
  32313. +    arguments to case statement
  32314. +
  32315. +    * cc-mode.el (cc-keep-region-active):
  32316. +    support for FSFmacs and don't lay down calls
  32317. +    to variables that don't exist
  32318. +    
  32319. +    (cc-submit-bug-report): variable typos
  32320. +
  32321. +    * cc-mode.el:
  32322. +    fixed order of macro expansions.  defmacro's must appear before their
  32323. +    first use -- this is probably why cc-point was busted in compiled code
  32324. +
  32325. +Fri Nov 19 18:44:54 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32326. +
  32327. +    * cc-mode.el (cc-guess-basic-semantics):
  32328. +    added some minimal recognition of template
  32329. +    continuation lines.  Probably not so great.
  32330. +    
  32331. +    (cc-guess-basic-semantics): fixed top-level decl continutation lines
  32332. +    
  32333. +    (cc-guess-basic-semantics): fixed ?: constructs
  32334. +
  32335. +    * cc-mode.el:
  32336. +    (cc-c++-mode) (cc-c-mode): setq'ing of comment-start/-end must happen
  32337. +    *after* cc-common-init for those values to retain their proper settings
  32338. +    
  32339. +    (cc-indent-exp): add optional SHUTUP-P argument to suppress
  32340. +    operational messages.
  32341. +    
  32342. +    (c++-indent-exp): removed this commented out function. I think the
  32343. +    byte-compiled, simplified cc-indent-exp is fast enough!
  32344. +    
  32345. +    (cc-indent-region): stolen from c-mode and fixed.
  32346. +    
  32347. +    (cc-beginning-of-inheritance): backscanning must stop when we're
  32348. +    looking at a cc-class-key
  32349. +    
  32350. +    (cc-guess-basic-semantics): inher-intro and inher-cont should not have
  32351. +    inclass langelem added since their relpos offsets already contain any
  32352. +    inclass offset
  32353. +
  32354. +Thu Nov 18 23:06:37 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32355. +
  32356. +    * cc-mode.el (cc-change-semantic-symbol-offset): new command
  32357. +
  32358. +    * cc-mode.el (cc-guess-basic-semantics):
  32359. +    added recognition of 'block-open braces
  32360. +    following a full statement (yup they are legal)
  32361. +
  32362. +    * cc-mode.el (cc-lineup-C-comments): added to support old
  32363. +    cc-C-block-comments-indent-p behavior
  32364. +
  32365. +    * cc-mode.el:
  32366. +    removed the multi-line preprocessor stuff.  its just too much of a
  32367. +    hack right now
  32368. +
  32369. +    * cc-mode.el: some limited support for multi-line macros and such
  32370. +
  32371. +Wed Nov 17 23:29:41 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32372. +
  32373. +    * cc-mode.el:
  32374. +    fixed all byte-compiler warnings. did a pass through the comments and
  32375. +    docstrings. macro-ized a few more defuns
  32376. +
  32377. +    * cc-mode.el (cc-indent-exp):
  32378. +    a slow, but moderately useful interrim solution.
  32379. +
  32380. +    * cc-mode.el (cc-point):
  32381. +    another small fix to the macro to get byte compilation to work
  32382. +
  32383. +    * cc-mode.el (cc-point):
  32384. +    small fix to macro expansion. must eval position so that
  32385. +    'sym idiom still works
  32386. +
  32387. +    * cc-mode.el:
  32388. +    added cc-keep-region-active to all appropriate interactive defuns
  32389. +
  32390. +    * cc-mode.el (cc-point):
  32391. +    made this a macro so things should be much quicker when
  32392. +    byte compiled
  32393. +
  32394. +    * cc-mode.el (cc-electric-brace):
  32395. +    insert any after-brace newlines after all
  32396. +    cleanups have taken place
  32397. +
  32398. +    * cc-mode.el (cc-electric-colon):
  32399. +    semantic information can only be accurately
  32400. +    retrieved on the line with colon for label, case-label, and
  32401. +    access-key.  member-init-intro and inher-intro must be gathered from
  32402. +    the following line.
  32403. +
  32404. +    * cc-mode.el: (cc-electric-start) (cc-electric-slash): use
  32405. +    cc-indent-via-language-element instead of cc-indent-line
  32406. +
  32407. +Tue Nov 16 23:04:59 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32408. +
  32409. +    * cc-mode.el (c++-electric-colon): deleted
  32410. +
  32411. +    * cc-mode.el (cc-electric-brace):
  32412. +    inhibit blinking any close paren until we've done
  32413. +    all our magic, then just call blink-paren-function manually
  32414. +
  32415. +    * cc-mode.el (cc-guess-basic-semantics): CASE 4 was missing a call to
  32416. +    cc-backward-syntactic-ws which broke arglist indentations
  32417. +
  32418. +    * cc-mode.el (cc-beginning-of-statement):
  32419. +    catch multi-line function calls by going
  32420. +    backward over balanced () sexps
  32421. +
  32422. +    * cc-mode.el: had to add all the lineup functions from c++-syntax.el
  32423. +
  32424. +    * cc-mode.el: continued if/while/do/else/for statements now work again
  32425. +
  32426. +    * cc-mode.el: 1. a good shot at cc-electric-colon
  32427. +    2. added cc-scope-operator bound onto C-c C-;
  32428. +
  32429. +    * cc-mode.el:
  32430. +    everything is rewritten and tested except c++-electric-colon and
  32431. +    c++-indent-exp
  32432. +
  32433. +Thu Nov 11 21:24:06 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32434. +
  32435. +    * cc-mode.el: got rid of glaring byte-compiler reported problems.
  32436. +
  32437. +    * cc-mode.el:
  32438. +    The bulk of the rename work has been done.  The entire mode has been
  32439. +    renamed CC-Mode.  The file has been renamed cc-mode.el, and all
  32440. +    symbols have changed from c++-<thing> to cc-<thing>.  In addition, all
  32441. +    known remaining c-mode dependencies have been eliminated.
  32442. +    
  32443. +    There is still much work to be done.
  32444. +
  32445. +Tue Nov  9 22:26:06 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32446. +
  32447. +    * cc-mode.el: rough attempt at syntactic analysis. more to come
  32448. +
  32449. +Mon Nov  1 03:25:12 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32450. +
  32451. +    * cc-mode.el (c++-search-uplist-for-classkey):
  32452. +    restore point if no enclosing class
  32453. +    is found
  32454. +
  32455. +Sun Oct 31 19:14:59 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32456. +
  32457. +    * cc-mode.el:
  32458. +    (c++-narrow-out-enclosing-class) (c++-search-uplist-for-classkey): new
  32459. +    defuns
  32460. +    
  32461. +    (c++-point): added 'boe and 'eoe positions
  32462. +
  32463. +Fri Oct 29 22:42:35 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32464. +
  32465. +    * cc-mode.el:
  32466. +    totally screwed up indentation.  we're going to have to back out the
  32467. +    last few mods.  URG!
  32468. +
  32469. +    * cc-mode.el (c++-indent-exp):
  32470. +    special case of looking at ?{, should not add
  32471. +    c-indent-level since this is only for C statements wrt containing
  32472. +    block and not block opening paren
  32473. +
  32474. +    * cc-mode.el (c++-calculate-indent):
  32475. +    undid split from previous revision. now case
  32476. +    3A always returns 0.  Any additional top-level brace offset gets
  32477. +    applied in c++-indent-line and c++-indent-exp (although the later does
  32478. +    not yet work).
  32479. +
  32480. +    * cc-mode.el (c++-calculate-indent):
  32481. +    needed to split case 3A into 2 parts since
  32482. +    bobp does not get the same indent as a top-level opening paren
  32483. +
  32484. +Wed Oct 27 14:28:16 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32485. +
  32486. +    * cc-mode.el (c++-common-init):
  32487. +    don't set the auto-hungry state here since the
  32488. +    mode hook has not been run yet.
  32489. +    
  32490. +    (c++-mode) (c++-c-mode): set the auto-hungry state for the buffer
  32491. +    after the mode hook has been run
  32492. +
  32493. +Wed Oct 20 18:46:53 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32494. +
  32495. +    * cc-mode.el (c++-mode-map):
  32496. +    do NOT define C-m and C-j, so as to retain the
  32497. +    standard default settings for these keybindings
  32498. +
  32499. +Mon Oct 11 16:32:02 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32500. +
  32501. +    * cc-mode.el (c++-calculate-indent):
  32502. +    in CASE 3C, when checking for hanging member
  32503. +    init colon, but not scope operator, we didin't check for double colons
  32504. +    when looking at the preceding-char.  Now look at char before point and
  32505. +    char 2 before point.  If both are colons, we're looking at a scope
  32506. +    operator.
  32507. +
  32508. +Fri Oct  1 13:21:00 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32509. +
  32510. +    * cc-mode.el (c++-common-init):
  32511. +    changed the test for comment-indent-function to
  32512. +    checking for boundp of the variable instead of c++-emacs-features
  32513. +    since Emacs 18 with syntax patches is (8bit v19) but does not have the
  32514. +    variable bound.
  32515. +
  32516. +Wed Sep 29 21:08:29 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32517. +
  32518. +    * cc-mode.el (c++-backward-to-start-of-if):
  32519. +    better error message for else with no if
  32520. +
  32521. +    * cc-mode.el (c++-calculate-indent):
  32522. +    test case 3H, when taking the current-column,
  32523. +    must subtract out the inclass-shift so it doesn't get added twice.
  32524. +    inclass-shift is implicit in current-column.
  32525. +
  32526. +Tue Sep 28 23:11:04 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32527. +
  32528. +    * cc-mode.el (c++-mode-syntax-table): don't be as harsh on FSF
  32529. +
  32530. +    * cc-mode.el: (c++-cleanup-list) (c++-hanging-member-init-colon)
  32531. +    (c++-auto-hungry-initial-state) (c++-auto-hungry-toggle) (c++-mode):
  32532. +    use the terminology "valid" instead of "legal" to define acceptable
  32533. +    values as per RMS's conventions.
  32534. +
  32535. +    * cc-mode.el (c++-c-mode): improve the docstring re: running the hook
  32536. +
  32537. +    * cc-mode.el (c++-indent-exp):
  32538. +    use c++-cont-indent to calculate continued statement
  32539. +    indentation amount.  remove large part of hackery here so lets watch
  32540. +    and see if anything got broken, but I think c++-c-i should do the
  32541. +    trick for all constructs
  32542. +
  32543. +    * cc-mode.el (c++-indent-defun):
  32544. +    better, quicker implementation of this defun
  32545. +
  32546. +    * cc-mode.el (c++-electric-pound):
  32547. +    better implementation of previous patch
  32548. +
  32549. +    * cc-mode.el (c++-electric-pound):
  32550. +    only align pound to left column if there isn't
  32551. +    one already there.  This lets people enter ## as cpp concat command
  32552. +
  32553. +    * cc-mode.el (c++-electric-semi):
  32554. +    renamed c++-electric-semi&comma to implement },
  32555. +    and }; cleanups
  32556. +    
  32557. +    (c++-cleanup-list): added list-close-comma to allow cleanups of },
  32558. +    constructs.
  32559. +
  32560. +    * cc-mode.el: cleaned up some comments
  32561. +
  32562. +    * cc-mode.el (c++-common-init):
  32563. +    new function to provide one entry point for all
  32564. +    common initializations of the mode.
  32565. +    
  32566. +    (c++-mode) (c++-c-mode): use c++-common-init to do the common stuff,
  32567. +    then do mode specific stuff.
  32568. +
  32569. +    * cc-mode.el (c++-calculate-indent):
  32570. +    complete fix for proper indentation of base
  32571. +    classes in a multiple inheritance declaration.
  32572. +    
  32573. +    (c++-baseclass-key): new constant defining regexp for base class defs
  32574. +
  32575. +    * cc-mode.el: partial fix for multi-inher lines
  32576. +
  32577. +Mon Sep 27 19:15:51 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32578. +
  32579. +    * cc-mode.el (c++-backward-to-start-of-if):
  32580. +    give a more informative message if an
  32581. +    unbalanced if/else was found
  32582. +
  32583. +    * cc-mode.el (c++-compound-offset):
  32584. +    fixed a bug when looking at "typedef enum",
  32585. +    this wasn't registering as an enum start.
  32586. +    
  32587. +    (c++-indent-exp): fixed indentation of comma separated compound
  32588. +    statements by using the function c++-compound-offset to calculate
  32589. +    offset instead of just using the variable c-continued-statement-offset
  32590. +
  32591. +    * cc-mode.el (c++-mode):
  32592. +    compatibility with old style comment-indent-hook and new
  32593. +    style comment-indent-function
  32594. +
  32595. +    * cc-mode.el:
  32596. +    (c++-indent-line) (c++-calculate-indent): improved calculate in
  32597. +    let-body for open-paren and top-open-paren values, using car-safe and
  32598. +    cdr-safe
  32599. +    
  32600. +    (c++-indent-line): fix typo bug when looking at open brace.
  32601. +    
  32602. +    (c++-indent-line): apply TOPLEVEL c-brace-offset when brace is at top
  32603. +    level wrt class, or real top level.
  32604. +
  32605. +    * cc-mode.el (c-brace-offset): moved here from c-mode.el
  32606. +    
  32607. +    (c++-mode): for vars c-brace-offset and c++-block-close-brace-offset,
  32608. +    both can now take list values.  describe these in the mode's
  32609. +    docstring.
  32610. +    
  32611. +    (c++-indent-exp) (c++-indent-line) (c++-calculate-indent): when
  32612. +    looking at an open brace, apply c-brace-offset depending on
  32613. +    top-level-ness of the opening brace.
  32614. +
  32615. +Fri Sep 24 22:05:21 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32616. +
  32617. +    * cc-mode.el (c++-indent-exp):
  32618. +    when inside a class definition, if we are looking at
  32619. +    an open brace, we apply c-continued-brace-offset instead of just zero.
  32620. +    this allows users to indent the opening brace of an inline function
  32621. +    body.
  32622. +
  32623. +    * cc-mode.el (c++-calculate-indent):
  32624. +    when inside a class definition, if we are
  32625. +    looking at an open brace, we apply c-continued-brace-offset instead of
  32626. +    just zero.  this allows users to indent the opening brace of an inline
  32627. +    function body.
  32628. +
  32629. +    * cc-mode.el (c++-calculate-indent):
  32630. +    removed the commented out text which used to
  32631. +    test for null state.  we never hit null state from c++-parse-state
  32632. +    anymore.
  32633. +
  32634. +    * cc-mode.el (c++-emacs19-accurate-bsws):
  32635. +    new function which skips syntactic
  32636. +    whitespace w/o treating cpp macros as comments syntactically.
  32637. +    
  32638. +    (c++-emacs18-bsws): renamed from c++-backwards-syntactic-ws
  32639. +    
  32640. +    (c++-lemacs-pre19-8-bsws): renamed from c++-backwards-syntactic-ws-1
  32641. +    
  32642. +    (c++-emacs18-il): renamed from c++-in-literal
  32643. +    
  32644. +    (c++-8bit-il): renamed from c++-in-literal-8-bit
  32645. +    
  32646. +    (c++-1bit-il): renamed from c++-in-literal-1-bit
  32647. +    
  32648. +    Changed the way compatibility is fset into the function symbols
  32649. +    c++-backward-syntactic-ws and c++-in-literal.
  32650. +
  32651. +Tue Aug 10 16:44:26 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32652. +
  32653. +    * cc-mode.el: minor cosmetic comment typo
  32654. +
  32655. +Thu Jul 29 00:18:00 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32656. +
  32657. +    * cc-mode.el: consensus was to nuke c++-insert-header
  32658. +
  32659. +Mon Jul 12 20:37:27 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32660. +
  32661. +    * cc-mode.el (c++-mode.el): updated the comments at the top of the file
  32662. +
  32663. +    * cc-mode.el (c++-calculate-indent):
  32664. +    removed test for null state during initial
  32665. +    parse from beginning-of-defun to indent-point.  this is obsolete now.
  32666. +
  32667. +Fri Jul  2 22:42:03 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32668. +
  32669. +    * cc-mode.el (c++-mode-map): removed bindings to obsolete functions
  32670. +    c++-beginning-of-defun and c++-end-of-defun.
  32671. +    
  32672. +    (c++-electric-terminator) (c++-in-literal) (c++-in-literal-8-bit)
  32673. +    (c++-in-literal-1-bit) (c++-point) (c++-indent-defun): changed all
  32674. +    references of obsolete functions c++-beginning-of-defun and
  32675. +    c++-end-of-defun to beginning-of-defun and end-of-defun respectively.
  32676. +
  32677. +    * cc-mode.el:
  32678. +    (c++-match-header-strongly) (c++-defun-header-strong-struct-equivs)
  32679. +    (c++-defun-header-strong) (c++-defun-header-weak)
  32680. +    (c++-beginning-of-defun) (c++-end-of-defun): removed as obsolete.
  32681. +    there are better and cheaper ways of accomplishing the same
  32682. +    functionality.
  32683. +
  32684. +    * cc-mode.el (c++-electric-brace):
  32685. +    I missed a few calls to c++-indent-line.  Added
  32686. +    bod argument to remaining few.
  32687. +
  32688. +    * cc-mode.el (c++-calculate-indent):
  32689. +    removed logic dealing with (null state) and
  32690. +    placed an error call there in anticipation of removal of header strong
  32691. +    matching stuff.  I want to be sure there's no way to get to this code
  32692. +    
  32693. +    (c++-electric-brace): added bod argument to calls to c++-indent-line
  32694. +    so the correct bod is found, not the newly created one with the just
  32695. +    inserted open brace.
  32696. +
  32697. +    * cc-mode.el:
  32698. +    (c++-indent-command) (c++-tab-always-indent) (c++-hanging-braces)
  32699. +    (c++-mode): changed the not-nil-or-t language to read "other than nil
  32700. +    or t"
  32701. +
  32702. +Thu Jul  1 17:40:53 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32703. +
  32704. +    * cc-mode.el (c++-backward-to-start-of-if):
  32705. +    changed c++-backward-sexp call to
  32706. +    backward-sexp now that parse-sexp-ignore-comments is handled correctly.
  32707. +
  32708. +Wed Jun 30 17:03:00 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32709. +
  32710. +    * cc-mode.el:
  32711. +    (c++-forward-sexp) (c++-backward-sexp): removed because these are obsoleted by the correct implementation for setting parse-sexp-ignore-comments. (c++-mode): improved idiom for setting up local vars
  32712. +
  32713. +Mon Jun 28 15:47:13 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32714. +
  32715. +    * cc-mode.el:
  32716. +    (c++-cleanup-list) (c++-mode) (c++-fast-backward-syntactic-ws-1)
  32717. +    (c++-calculate-indent) (c++-in-literal) (c++-in-literal-8-bit)
  32718. +    (c++-in-literal-1-bit) (c++-at-top-level-p)
  32719. +    (c++-backward-to-start-of-do) (c++-backward-to-start-of-if)
  32720. +    (c++-uncomment-region): install RMS's suggested doc string fixes based
  32721. +    on last public release.
  32722. +
  32723. +Wed Jun 23 13:58:52 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32724. +
  32725. +    * cc-mode.el:
  32726. +    hacking on syntax entry must be mode specific in -ws functions.  ie in
  32727. +    c++-c-mode, hack c++-c-mode-syntax-table and for c++-mode hack only
  32728. +    c++-mode-syntax-table.
  32729. +
  32730. +Mon Jun 21 21:40:15 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32731. +
  32732. +    * cc-mode.el:
  32733. +    should not skip-chars-backward in ws-2, let forward-comment handle that
  32734. +
  32735. +Fri Jun 18 21:31:24 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32736. +
  32737. +    * cc-mode.el:
  32738. +    another refinement to addition offset given to open brace lines in
  32739. +    c++-indent-exp.  Check for not at top level wrt class before adding
  32740. +    c-indent-level.
  32741. +
  32742. +    * cc-mode.el: another fix to c++-indent-exp for member init lists
  32743. +
  32744. +    * cc-mode.el:
  32745. +    fixed c++-indent-exp when comments follow a continued statement
  32746. +
  32747. +    * cc-mode.el: a fix to c++-indent-exp where c-brace-offset is < 0
  32748. +
  32749. +    * cc-mode.el:
  32750. +    fixed some comment spelling errors which were fixed (but *not*
  32751. +    reported!) by FSF
  32752. +
  32753. +    * cc-mode.el:
  32754. +    fixed a problem where default_answer("boof: glorp"); was being
  32755. +    incorrectly matched to a default: statement
  32756. +
  32757. +Thu Jun 17 21:52:21 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32758. +
  32759. +    * cc-mode.el:
  32760. +    update language to accurately reflect state of Lemacsen and FSFmacsen
  32761. +
  32762. +Wed Jun 16 22:27:29 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32763. +
  32764. +    * cc-mode.el:
  32765. +    fixed indentation when base class declaration is on a separate line
  32766. +    then the derived class intro header.
  32767. +
  32768. +    * cc-mode.el:
  32769. +    1. cleaned up the way closing block braces are adjusted in
  32770. +       c++-indent-line.
  32771. +    
  32772. +    2. also extended c++-block-close-brace-offset to allow list value so
  32773. +       the following style can be easily supported:
  32774. +    
  32775. +    foo(a)
  32776. +    {
  32777. +        if(a)
  32778. +            {
  32779. +            asasdfsdf;
  32780. +            }
  32781. +    }
  32782. +    
  32783. +      Previously, there was no way to adjust the closing brace into column
  32784. +      zero.
  32785. +
  32786. +Tue Jun 15 22:04:43 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32787. +
  32788. +    * cc-mode.el:
  32789. +    use c-continued-statement-offset instead of c-indent-level to indent
  32790. +    comma separated arg decl lists
  32791. +
  32792. +    * cc-mode.el: bind C-m to newline-and-indent
  32793. +
  32794. +    * cc-mode.el:
  32795. +    much simplification on c++-fast-backward-syntactic-ws-2 to work with
  32796. +    new forward-comment semantics
  32797. +
  32798. +    * cc-mode.el:
  32799. +    don't skip up past compound statement if we're in a member init list
  32800. +
  32801. +    * cc-mode.el: fixed a bug in the translation of CASE 3 to cond stmt
  32802. +
  32803. +    * cc-mode.el:
  32804. +    1. cleaned up the spaghetti if's in CASE3 of c++-calculate-indent, by
  32805. +       converting all if's to a single cond statement -- I *hope* I got it
  32806. +       right!
  32807. +    
  32808. +    2. Added indentation, via c-indent-level of multi-line,
  32809. +       comma-separated, compound statements/declarations, with correction
  32810. +       for enum and static array inits.
  32811. +    y
  32812. +
  32813. +Mon Jun 14 21:54:38 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32814. +
  32815. +    * cc-mode.el:
  32816. +    merged in submitted patch to fix a possible bug which rears its ugly
  32817. +    head in FSFmacs19.  I haven't verified it so the fix only happens in FSFmacs
  32818. +
  32819. +Thu Jun  3 22:42:44 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32820. +
  32821. +    * cc-mode.el: try to conform to GNU cosmetic style
  32822. +
  32823. +Tue Jun  1 14:58:00 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32824. +
  32825. +    * cc-mode.el:
  32826. +    better to make a copy of the syntax table so we don't screw up text
  32827. +    mode's syntax table!
  32828. +
  32829. +Fri May 28 22:20:57 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32830. +
  32831. +    * cc-mode.el:
  32832. +    fixed the bug in c++-electric-brace where entering an open brace while
  32833. +    point is at bol and c++-auto-newline is nil did not indent the brace.
  32834. +
  32835. +Tue May 25 18:37:21 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32836. +
  32837. +    * cc-mode.el: some cosmetic differences to c++-emacs-features
  32838. +
  32839. +Mon May 24 23:23:05 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32840. +
  32841. +    * cc-mode.el: take out bogus defun c++-emacs-features
  32842. +
  32843. +    * cc-mode.el:
  32844. +    be really really smart about figuring out c++-emacs-features
  32845. +
  32846. +    * cc-mode.el:
  32847. +    we must use a different c++-in-literal for GNU19's 1-bit solution
  32848. +
  32849. +Wed May 19 14:19:20 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32850. +
  32851. +    * cc-mode.el: better c++-emacs-features deciphering
  32852. +
  32853. +Tue May 18 15:13:39 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32854. +
  32855. +    * cc-mode.el: no c++-mode-maintainer
  32856. +
  32857. +Fri May 14 22:05:02 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32858. +
  32859. +    * cc-mode.el:
  32860. +    can't yet make c++-indent-exp work in weird situation (see bug reports)
  32861. +
  32862. +    * cc-mode.el:
  32863. +    make sure we check for default: in the same place we check for case:
  32864. +    labels in CASE 4 of c++-calculate-indent
  32865. +
  32866. +Tue May 11 21:41:13 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32867. +
  32868. +    * cc-mode.el: a little better documentation
  32869. +
  32870. +    * cc-mode.el:
  32871. +    fixed the compat cond when setting c++-backward-syntactic-ws
  32872. +
  32873. +    * cc-mode.el: fixed the string-match call in c++-emacs-features
  32874. +
  32875. +Mon May 10 18:20:42 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32876. +
  32877. +    * cc-mode.el: check for forward-comment first
  32878. +
  32879. +    * cc-mode.el: fixed syntax errors in previous mod
  32880. +
  32881. +    * cc-mode.el: attempt to port between all known flavors of emacsen
  32882. +
  32883. +Thu Apr 22 21:16:15 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32884. +
  32885. +    * cc-mode.el:
  32886. +    ask user if they want to submit a bug report before actually doing it
  32887. +
  32888. +    * cc-mode.el:
  32889. +    quick fix for when the ? part of a ?: construct is a negative number
  32890. +
  32891. +Wed Apr 21 19:53:29 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32892. +
  32893. +    * cc-mode.el: use new interface to reporter.el
  32894. +
  32895. +Mon Apr 19 20:41:48 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32896. +
  32897. +    * cc-mode.el: uuencode when sending to ftpmail
  32898. +
  32899. +    * cc-mode.el: c++-mailer is obsolete now
  32900. +
  32901. +    * cc-mode.el:
  32902. +    modify c++-submit-bug-report to use reporter package, and require it.
  32903. +
  32904. +    * cc-mode.el: updated some documentation about getting c++-mode
  32905. +
  32906. +Fri Apr 16 15:36:39 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32907. +
  32908. +    * cc-mode.el:
  32909. +    in c++-indent-exp, during the logic which evaluates special
  32910. +    adjustments in the line's indentation, the sequential ifs should be a
  32911. +    cond statement since the conditions should be mutually exclusive
  32912. +
  32913. +    * cc-mode.el: updated mail-server (getting the mode) comments
  32914. +
  32915. +Fri Apr  2 15:35:10 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32916. +
  32917. +    * cc-mode.el:
  32918. +    c++-backward-to-start-of-if wasn't taking into account "if" clauses in
  32919. +    intervening comments.  Needed to add a c++-backward-syntactic-ws
  32920. +
  32921. +Thu Apr  1 23:08:37 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32922. +
  32923. +    * cc-mode.el:
  32924. +    cleaned up (I hope) all docstrings related to auto-hungry features
  32925. +
  32926. +    * cc-mode.el:
  32927. +    modified c++-class-key to recognize typedef in addition to extern
  32928. +
  32929. +    * cc-mode.el:
  32930. +    fixed c++-electric-star handling of stars inside C block comments but
  32931. +    not part of comment line head (i.e. stars embedded inside C block
  32932. +    comment lines not at 'boi, don't re-indent line)
  32933. +
  32934. +Thu Mar 18 18:49:42 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32935. +
  32936. +    * cc-mode.el:
  32937. +    fix infinite loop in c++-fast... in the following situation
  32938. +    \n
  32939. +    #define x \
  32940. +    -----------^
  32941. +    hit return here
  32942. +
  32943. +    * cc-mode.el:
  32944. +    wrap temporary binding of # to comment syntax in c++-fast-... in an
  32945. +    unwind-protect to ensure that it gets reset on any exit
  32946. +
  32947. +Thu Mar 11 15:36:26 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32948. +
  32949. +    * cc-mode.el:
  32950. +    fixed indentation of block comments after first /* line in c++-indent-exp
  32951. +
  32952. +Wed Mar 10 18:50:29 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32953. +
  32954. +    * cc-mode.el: c++-in-literal-quick wasn't checking for inside a string
  32955. +
  32956. +Fri Mar  5 20:00:17 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32957. +
  32958. +    * cc-mode.el: fixed regexps for case labels... I hope
  32959. +
  32960. +Thu Mar  4 23:00:30 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32961. +
  32962. +    * cc-mode.el: updated copyright date
  32963. +
  32964. +    * cc-mode.el: c++-c-mode uses c-mode-abbrev-table
  32965. +
  32966. +    * cc-mode.el:
  32967. +    in c++-fast-backward-syntactic-ws, check for lim<point *after* lim has
  32968. +    be let bound
  32969. +
  32970. +Wed Mar  3 20:25:17 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32971. +
  32972. +    * cc-mode.el: forgot to add basic inclass-shift
  32973. +
  32974. +Tue Mar  2 20:11:48 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  32975. +
  32976. +    * cc-mode.el: handle underscores in c++-inher-key
  32977. +
  32978. +    * cc-mode.el:
  32979. +    inclass-shift is now calculated by multiplying inclass-depth with the
  32980. +    sum of c-indent-level and c-brace-imaginary-offset.  Usually at least
  32981. +    one of these c vars is zero.  Also, precompute inclass-unshift
  32982. +
  32983. +    * cc-mode.el: 1. fixed bogus end-of-buffer error when lim>=(point)
  32984. +    2. extended c++-class-key to include optional "extern" keyword
  32985. +
  32986. +    * cc-mode.el: 1. extended c++-class-key to handle template definitions
  32987. +    2. made MI-regexp in c++-calculate-indent into the global constant
  32988. +       c++-inher-key so it doesn't need to be concat'd every entry into
  32989. +       the loop.
  32990. +
  32991. +    * cc-mode.el: fixed small infinite loop introduced in previous patch
  32992. +
  32993. +    * cc-mode.el:
  32994. +    fixed c++-indent-exp when a multi-line C block comment caused
  32995. +    calculation of state to be wrong.  Now, when calculating line-end, we
  32996. +    first check to see of eol is in a C comment, and if so, we scan
  32997. +    forward until we find the end of the block comment.
  32998. +    
  32999. +    this algorithm might break if there is code on the same line, but
  33000. +    after the closing */ of a comment. this is to bizarre to support
  33001. +
  33002. +    * cc-mode.el:
  33003. +    no longer rely on # being of syntax class comment for really patched
  33004. +    emacses, except for convenience when in
  33005. +    c++-fast-backward-syntactic-ws.  Also, in this method, go into a loop
  33006. +    checking for cpp directives since its possible that a directive has a
  33007. +    comment on the end of the line:
  33008. +    
  33009. +    #include <foo.h>      /* opening a block comment here
  33010. +                           * which isn't closed until here
  33011. +                           */
  33012. +    
  33013. +    Finally, fix c++-in-literal-quick to handle new syntax class of #
  33014. +
  33015. +Mon Mar  1 23:32:40 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33016. +
  33017. +    * cc-mode.el:
  33018. +    no longer rely on # being of syntax class for really patched emacses
  33019. +
  33020. +    * cc-mode.el:
  33021. +    c++-macroize-region will now take any prefix arg instead of just a
  33022. +    negative arg.
  33023. +
  33024. +Tue Feb 16 20:30:37 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33025. +
  33026. +    * cc-mode.el: don't use _ as word constituent, instead fix regexps
  33027. +
  33028. +    * cc-mode.el:
  33029. +    give _ word constituent syntax class so indentation of case_ and like
  33030. +    symbols will work properly.  forward-word will gobble underscores in
  33031. +    symbols so that's the trade off for taking the easy way out.
  33032. +
  33033. +Fri Feb 12 16:40:35 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33034. +
  33035. +    * cc-mode.el:
  33036. +    c++-backward-to-start-of-if was necessitated because backward-sexp
  33037. +    call was bombing out in new syntax, on single quote in preceding C++
  33038. +    comment line.  use c++-backward-sexp to properly handle this and
  33039. +    change all references of c-backward... to c++-backward.
  33040. +
  33041. +Thu Feb 11 18:33:50 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33042. +
  33043. +    * cc-mode.el:
  33044. +    should only bind parse-sexp-ignore-comments to t if c++-is-really-fixed-p
  33045. +
  33046. +Sat Feb  6 00:04:45 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33047. +
  33048. +    * cc-mode.el:
  33049. +    in c++-comment-indent, if previous line contains a comment only line
  33050. +    that is to the left of comment-column, indent the line to
  33051. +    comment-column
  33052. +
  33053. +Fri Feb  5 23:41:34 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33054. +
  33055. +    * cc-mode.el: fixed K&R C arg decl with keyword struct in line
  33056. +
  33057. +    * cc-mode.el:
  33058. +    fixed c++-indent-command to follow documentation. previous the
  33059. +    following situation was broken: c++-tab-always-indent == nil and:
  33060. +    
  33061. +    ...
  33062. +    {
  33063. +    foo;
  33064. +    ^------- point was here
  33065. +
  33066. +    * cc-mode.el:
  33067. +    use Ken Laprade's patch for format vs symbol-name print of
  33068. +    c++-special-indent-hook
  33069. +
  33070. +    * cc-mode.el:
  33071. +    check for (not (c++-in-parens-p)) when deciding whether we're looking
  33072. +    at a continuation line or not to avoid bad indentation of continued
  33073. +    lines such as:
  33074. +    
  33075. +        if( !tnode->expanded_p() &&
  33076. +            docobj->hasChild_p() &&
  33077. +            docobj->tocLevel() < xmaxTocDepth )
  33078. +
  33079. +    * cc-mode.el: fixed anchor of comment only lines in c++-indent-exp
  33080. +
  33081. +    * cc-mode.el:
  33082. +    anchor comment only lines to (current-column) if the comment is at, or
  33083. +    to the right of, comment-column.
  33084. +
  33085. +    * cc-mode.el:
  33086. +    c++-continued-member-init-offset works for line with just single colon
  33087. +    line, where member inits follow on subsequent lines:
  33088. +    
  33089. +    ff::ff ()
  33090. +       :
  33091. +       xxx (0),
  33092. +       yyy (0)
  33093. +    {
  33094. +
  33095. +    * cc-mode.el:
  33096. +    don't add c-continued-statement-offset if looking at a class's opening
  33097. +    brace
  33098. +
  33099. +    * cc-mode.el: fixed c++-indent-exp wrt stream ops
  33100. +
  33101. +    * cc-mode.el: fixed another small problem with nested class indentation
  33102. +
  33103. +    * cc-mode.el:
  33104. +    another fix for nested class indentation when looking at the line
  33105. +    after an access specifier.  we needed to substract one level of
  33106. +    indentation
  33107. +
  33108. +Tue Feb  2 21:27:52 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33109. +
  33110. +    * cc-mode.el: modifications to better indent nested classes
  33111. +
  33112. +Fri Jan 29 22:31:07 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33113. +
  33114. +    * cc-mode.el:
  33115. +    in c++-forward/backward-sexp, only let bind parse-sexp-ignore-comments
  33116. +    to t if emacs is fixed (not really fixed)
  33117. +
  33118. +Wed Jan 27 22:48:56 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33119. +
  33120. +    * cc-mode.el:
  33121. +    some previous fix (don't know when) broke MI continuation line
  33122. +    indentation.  This fixes that problem by making sure we're not looking
  33123. +    at MI-regexp
  33124. +
  33125. +    * cc-mode.el: commented out bogus part
  33126. +
  33127. +    * cc-mode.el: commented out bogus top level continuation indentations
  33128. +
  33129. +Mon Jan 25 23:34:52 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33130. +
  33131. +    * cc-mode.el:
  33132. +    fixed minor bug with c++-submit-bug-report which manifests
  33133. +    only on unpatched emacses
  33134. +
  33135. +    * cc-mode.el: fixed small bug in c++-submit-bug-report manifesting
  33136. +    in unpatched emacses
  33137. +
  33138. +Thu Jan 21 23:38:34 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33139. +
  33140. +    * cc-mode.el:
  33141. +    c++-indent-exp must let-bind parse-sexp-ignore-comments to t for the
  33142. +    whole duration
  33143. +
  33144. +    * cc-mode.el:
  33145. +    hack for c++-indent-sexp continued statement offsets... are there
  33146. +    repercussions???
  33147. +
  33148. +    * cc-mode.el: fixed c++-cont-indent free variable
  33149. +
  33150. +    * cc-mode.el: partial fix of continuation lines at top level
  33151. +
  33152. +Wed Jan 20 23:39:40 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33153. +
  33154. +    * cc-mode.el: 1. remove infinite loop from c++-in-literal
  33155. +    2. get rid of messages
  33156. +    
  33157. +    note that c++-in-literal-quick is broken wrt to old emacs patches
  33158. +
  33159. +Wed Jan 13 22:57:51 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33160. +
  33161. +    * cc-mode.el:
  33162. +    c++-end-of-defun needed to let-bind parse-sexp-ignore-comments to t
  33163. +
  33164. +    * cc-mode.el: better c++-in-literal-quick
  33165. +
  33166. +    * cc-mode.el: 1. cosmetic cleanups of code
  33167. +    2. a pass through c++-mode docstring and all variables
  33168. +
  33169. +    * cc-mode.el: another hack on the comments at the top of the file
  33170. +
  33171. +    * cc-mode.el: a documentation pass
  33172. +
  33173. +    * cc-mode.el: changed name of c++-backward-over-syntactic-ws to just
  33174. +    c++-backward-syntactic-ws to more closely resemble new lemacs builtin
  33175. +    function name.
  33176. +
  33177. +    * cc-mode.el: fixed c++-syntax-mode-table to work with patched lemacs
  33178. +
  33179. +Sat Jan  9 05:08:25 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33180. +
  33181. +    * cc-mode.el: put # back as a comment-style
  33182. +
  33183. +    * cc-mode.el: comment about new bc and backward-syntactic-ws
  33184. +
  33185. +    * cc-mode.el: better syntax specifications for new patched lemacs
  33186. +
  33187. +Thu Jan  7 22:22:53 1993  Barry A. Warsaw, ITB  (warsaw@anthem)
  33188. +
  33189. +    * cc-mode.el:
  33190. +    added c++-backward-sexp and c++-forward-sexp which are bound to M-C-f
  33191. +    and M-C-b and work better than their non-c++-mode counterparts since
  33192. +    they let-bind parse-sexp-ignore-comments to t.
  33193. +
  33194. +Thu Dec 31 22:17:36 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33195. +
  33196. +    * cc-mode.el:
  33197. +    use the really, really, up-to-date syntax patch for Lemacs 19
  33198. +
  33199. +Tue Dec 29 01:22:19 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33200. +
  33201. +    * cc-mode.el: removed extraneous commented out code
  33202. +
  33203. +    * cc-mode.el: need to ensure that c-mode is loaded in
  33204. +
  33205. +    * cc-mode.el:
  33206. +    fixed a problem inside member init lists, where the first member (on
  33207. +    the colon line) has its args continued
  33208. +
  33209. +    * cc-mode.el:
  33210. +    fix bug when indenting a line at level zero which begins at the
  33211. +    beginning of buffer
  33212. +
  33213. +Wed Dec 23 23:20:05 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33214. +
  33215. +    * cc-mode.el:
  33216. +    fix for c++-indent-exp so that it properly indents c block comments
  33217. +
  33218. +Fri Dec 18 16:15:12 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33219. +
  33220. +    * cc-mode.el: greater improvements on c++-b-o-w-s performance
  33221. +
  33222. +Thu Dec 17 23:29:18 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33223. +
  33224. +    * cc-mode.el:
  33225. +    another run at optimizing c++-backward-over-syntactic-ws based on
  33226. +    information gleaned from calc.el experience
  33227. +
  33228. +    * cc-mode.el:
  33229. +    c++-backward-over-syntactic uses beginning-of-defun instead of
  33230. +    point-min as minimum distance to scan back
  33231. +
  33232. +Wed Dec 16 21:52:41 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33233. +
  33234. +    * cc-mode.el:
  33235. +    check for brace insertion at not-quite-end-of-line (ie eol, ignoring
  33236. +    any trailing ws)
  33237. +
  33238. +    * cc-mode.el: allow c++-backscan-limit to be nil
  33239. +
  33240. +Fri Dec 11 16:26:05 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33241. +
  33242. +    * cc-mode.el:
  33243. +    in electric terminator, don't just check for eolp to determine if
  33244. +    terminator should electrify. also look for hanging whitespace which
  33245. +    may look like eolp, even though it isn't:
  33246. +    
  33247. +            fooo();......\n
  33248. +                  ^------^
  33249. +    undiscovered ws---|
  33250. +
  33251. +Thu Dec 10 22:59:25 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33252. +
  33253. +    * cc-mode.el:
  33254. +    simple fix in calculate indent so forward-char 1 at end of buffer
  33255. +    won't throw an error
  33256. +
  33257. +Wed Dec  9 17:55:17 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33258. +
  33259. +    * cc-mode.el:
  33260. +    error in default value for c++-untame-characters. needed to negate the
  33261. +    check for c++-emacs-is-fixed-p
  33262. +
  33263. +    * cc-mode.el:
  33264. +    fixed problems in electric-(star|slash) when inserting as first
  33265. +    character in a buffer.
  33266. +
  33267. +    * cc-mode.el:
  33268. +    don't treat double-colon as member init when member defun is split
  33269. +    across two lines at the scope operator. eg:
  33270. +    
  33271. +    HereIsAReallyLongClassName
  33272. +    ::HereIsAReallyLongClassName( const WithALongConstructorArgument& )
  33273. +        : andItsFirstMemberInit( 7 )
  33274. +    {}
  33275. +
  33276. +    * cc-mode.el: added some thanks to the documentation
  33277. +
  33278. +Tue Dec  8 23:57:27 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33279. +
  33280. +    * cc-mode.el:
  33281. +    better c++-submit-bug-report that works with all known mailers
  33282. +
  33283. +Mon Dec  7 16:26:51 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33284. +
  33285. +    * cc-mode.el:
  33286. +    fixed calculation of multiple member-inits where double colons can
  33287. +    appear inside initing parens
  33288. +
  33289. +    * cc-mode.el: improved documentation for c++-special-indent-hook
  33290. +
  33291. +Sat Dec  5 02:52:04 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33292. +
  33293. +    * cc-mode.el: handled member init lists with first embedded colon
  33294. +    
  33295. +    foo() : foo, foo,
  33296. +        foo, foo,
  33297. +        ^--- this should probably be indented to
  33298. +          ^--- here (under colon)
  33299. +    
  33300. +    but that's really hard and of minimal use.
  33301. +
  33302. +    * cc-mode.el:
  33303. +    finally figured out that "questionable member init" indentation
  33304. +    section. It occurs when you have the following style:
  33305. +    
  33306. +    foo(...) :
  33307. +        foo(9), blat(10),
  33308. +        clob(3)
  33309. +    
  33310. +    Note the colon hanging on the previous line. Steve Vinoski is correct,
  33311. +    we should not subtract a level of indentation from the shift since
  33312. +    inclass-shift takes care of it.
  33313. +
  33314. +    * cc-mode.el:
  33315. +    seems like a fix for some close parens not getting outdented when
  33316. +    c++-paren-as-block-close-p is t.  DOES ANYTHING ELSE BREAK????
  33317. +
  33318. +Fri Dec  4 22:11:27 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33319. +
  33320. +    * cc-mode.el:
  33321. +    fixed continued expression in a simple if statement where there is a
  33322. +    comment between the if and the simple statement.
  33323. +
  33324. +Thu Dec  3 23:38:27 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33325. +
  33326. +    * cc-mode.el: cleaned up some documentation
  33327. +
  33328. +    * cc-mode.el: fixed c++-indent-exp for stream operators
  33329. +
  33330. +Tue Dec  1 18:01:45 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33331. +
  33332. +    * cc-mode.el:
  33333. +    c++-backward-over-syntactic-ws should always be given a backlimit in
  33334. +    c++-calculate-indent.
  33335. +
  33336. +    * cc-mode.el:
  33337. +    in previous fix for c++-c-i, it is possible that containing-sexp is
  33338. +    nil, so use (goto-char (or containing-sexp bod))
  33339. +
  33340. +    * cc-mode.el:
  33341. +    enhancements to c++-calculate-indent so that it doesn't assume that
  33342. +    class opening brace starts in column zero.
  33343. +
  33344. +    * cc-mode.el:
  33345. +    c++-submit-bug-report now reports whether emacs is patched
  33346. +
  33347. +Mon Nov 30 23:39:13 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33348. +
  33349. +    * cc-mode.el: fixed K&R C arg decl indentations
  33350. +
  33351. +    * cc-mode.el: cosmetic changes
  33352. +
  33353. +    * cc-mode.el: removed old c++-bosw which was too slow anyway
  33354. +
  33355. +Fri Nov 27 20:18:12 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33356. +
  33357. +    * cc-mode.el:
  33358. +    fixed comment indentation for new c++-comment-only-line-offset
  33359. +    semantics, and also simplified electric-star and electric-slash. They
  33360. +    no longer call c++-electric-terminator.
  33361. +
  33362. +Fri Nov 13 22:42:04 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33363. +
  33364. +    * cc-mode.el: some documentation improvements
  33365. +
  33366. +    * cc-mode.el:
  33367. +    fixed erroneous newline insertion on member init colons when
  33368. +    c++-auto-newline is off.
  33369. +
  33370. +    * cc-mode.el: fixed buggy regexp which would fail on this situation:
  33371. +    
  33372. +    int foo(                                     // foo
  33373. +        int arg1,                                 // arg1
  33374. +                                                 int arg2
  33375. +    
  33376. +    last line gets indented wrong because of the spaces b/w the foo( and
  33377. +    the comment
  33378. +
  33379. +    * cc-mode.el: 1. alphabetized varlist in c++-dump-state
  33380. +    2. improved portability of c++-submit-bug-report for mailers other
  33381. +       than vm.
  33382. +
  33383. +    * cc-mode.el:
  33384. +    use comment-start-skip instead of hard-coded comment regexp
  33385. +
  33386. +    * cc-mode.el:
  33387. +    1. added c++-emacs-is-fixed-p to check for a patched emacs
  33388. +    2. automatically set c++-untame-characters to nil if patched
  33389. +
  33390. +    * cc-mode.el:
  33391. +    fixed comment-line indent calculation. now c++-calculate-indent does
  33392. +    no comment-line calculations, its all handled in c++-indent-line and
  33393. +    c++-indent-sexp
  33394. +
  33395. +    * cc-mode.el: slight documentation fixup
  33396. +
  33397. +    * cc-mode.el:
  33398. +    vastly improved c++-comment-only-line-offset to provide ability to
  33399. +    determine column-zero offsets
  33400. +
  33401. +    * cc-mode.el: attempt to speed up c++-backward-over-syntactic-ws
  33402. +
  33403. +Thu Nov 12 16:45:30 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33404. +
  33405. +    * cc-mode.el:
  33406. +    1. some experimental performance enhancements (not working really great)
  33407. +    2. in c++-at-top-level-p, check for null containing-sexp before in-parens
  33408. +
  33409. +Tue Nov  3 20:46:19 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33410. +
  33411. +    * cc-mode.el:
  33412. +    removed the variable c++-class-member-indent and replaced all
  33413. +    occurances with c-indent-level.  it caused very bad things when
  33414. +    c-indent-level != c++-class-member-indent
  33415. +
  33416. +    * cc-mode.el: c++-match-paren must set parse-sexp-ignore-comments to t
  33417. +
  33418. +Fri Oct  2 22:31:14 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33419. +
  33420. +    * cc-mode.el:
  33421. +    perhaps optimization on skipping backwards over c++ literal comment
  33422. +
  33423. +Tue Sep 29 00:19:22 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33424. +
  33425. +    * cc-mode.el: replaced code accidently removed during last bug fix
  33426. +
  33427. +Mon Sep 28 22:44:51 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33428. +
  33429. +    * cc-mode.el: fixed default[ \t]*: indentation bug
  33430. +
  33431. +    * cc-mode.el:
  33432. +    continuation indentation problem should now work correctly.
  33433. +    c++-in-function-p search from containing-sexp or point
  33434. +
  33435. +    * cc-mode.el:
  33436. +    added c++-in-function-p defun to be used when checking if we're in a
  33437. +    function.  Continuations inside a function
  33438. +
  33439. +    * cc-mode.el: fixed the LCD Archive Entry syntax
  33440. +
  33441. +    * cc-mode.el: removed c++-fill-C-comment, function is unused anywhere
  33442. +
  33443. +Tue Sep  1 21:02:17 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33444. +
  33445. +    * cc-mode.el: 1. compatibility code for loading into a patched emacs
  33446. +    2. also a *slightly* improved c++-backward-over-syntactic-ws.  This
  33447. +       function needs a drastic overhaul -- I bet its the main performance
  33448. +       pig now that emacs is patched.
  33449. +
  33450. +Fri Aug 28 22:07:39 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33451. +
  33452. +    * cc-mode.el: final cleansing before posting
  33453. +
  33454. +Thu Aug 27 16:41:30 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33455. +
  33456. +    * cc-mode.el: added GNU copyright info
  33457. +
  33458. +    * cc-mode.el: standard header and many comment changes
  33459. +
  33460. +Wed Aug 26 23:40:46 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33461. +
  33462. +    * cc-mode.el: cleaned up documentation
  33463. +
  33464. +    * cc-mode.el: yet again, better documentation about untame characters
  33465. +
  33466. +    * cc-mode.el: better documentation on c++-untame-characters
  33467. +
  33468. +    * cc-mode.el:
  33469. +    added some documentation to the front of the file to describe untame
  33470. +    characters
  33471. +
  33472. +    * cc-mode.el:
  33473. +    default value for c++-untame-characters is now just single tick, the
  33474. +    most troublesome character
  33475. +
  33476. +Thu Aug 20 19:29:00 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33477. +
  33478. +    * cc-mode.el:
  33479. +    only check for inside template spec if looking at c++-class-key
  33480. +
  33481. +    * cc-mode.el:
  33482. +    attempted to address keyword "class" appearing inside a template
  33483. +    specification:
  33484. +    
  33485. +    template<class Foo>
  33486. +    Foo& Bar<Foo>::doit( void ){};
  33487. +    
  33488. +    template<class Foo, class Blat>
  33489. +    Foo& Bar<Foo>::doit( void ){};
  33490. +
  33491. +Tue Aug 11 14:06:02 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33492. +
  33493. +    * cc-mode.el: updated docstring for c++-at-top-level-p
  33494. +
  33495. +Mon Aug 10 22:19:52 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33496. +
  33497. +    * cc-mode.el: c++-c-mode's mode-name is "C"
  33498. +
  33499. +    * cc-mode.el: style 1-3 is default for c++-C-block-comments-indent-p
  33500. +
  33501. +Thu Aug  6 19:47:36 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33502. +
  33503. +    * cc-mode.el: fixed auto-indenting of C block comment style 3
  33504. +
  33505. +Wed Aug  5 21:25:39 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33506. +
  33507. +    * cc-mode.el: another patch to docstring
  33508. +
  33509. +    * cc-mode.el: another docstring change
  33510. +
  33511. +    * cc-mode.el: qualify doc string change of previous revision
  33512. +
  33513. +    * cc-mode.el:
  33514. +    improved (hopefully) the docstring for var c++-untame-characters
  33515. +
  33516. +    * cc-mode.el: more optimizations by passing bod to c++-at-top-level-p
  33517. +
  33518. +    * cc-mode.el: parameterized c++-class-key and c++-access-key
  33519. +    the first is class\|struct\|union
  33520. +    the second is public\|protected\|private
  33521. +
  33522. +    * cc-mode.el:
  33523. +    fixed (c++-at-top-level-p t) so it won't get fooled by struct declarations.
  33524. +
  33525. +    * cc-mode.el:
  33526. +    fixed c++-at-top-level-p so it won't get fooled by struct declarations
  33527. +
  33528. +Tue Aug  4 20:59:29 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33529. +
  33530. +    * cc-mode.el: fixed docstring for c++-tab-always-indent
  33531. +
  33532. +Wed Jul 29 14:50:46 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33533. +
  33534. +    * cc-mode.el:
  33535. +    this branch combines C and C++ modes for inclusion into emacs 19
  33536. +
  33537. +Tue Jul 28 19:28:29 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33538. +
  33539. +    * cc-mode.el: fixed documentation for c++-C-block-comments-indent-p
  33540. +
  33541. +Mon Jul 27 15:13:36 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33542. +
  33543. +    * cc-mode.el:
  33544. +    fixed indentation of member init list after a multiline member init call
  33545. +
  33546. +Thu Jul 23 19:59:45 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33547. +
  33548. +    * cc-mode.el:
  33549. +    fixed c++-electric-pound when inserting # at beginning of buffer
  33550. +
  33551. +    * cc-mode.el: simple fix for *some* sequence continuation lines
  33552. +
  33553. +Wed Jul 22 13:28:54 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33554. +
  33555. +    * cc-mode.el:
  33556. +    fixed (c++-at-top-level-p t) so it wouldn't return non-nil if keyword
  33557. +    class appears in arglist
  33558. +
  33559. +    * cc-mode.el:
  33560. +    added to c++-calculate-indent a check if we're at the bobp
  33561. +
  33562. +Tue Jul 21 21:59:27 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33563. +
  33564. +    * cc-mode.el:
  33565. +    new function c++-calculate-c-indent-within-comment used instead of
  33566. +    calculate-c-indent-within-comment (from c-mode).  Supports 4 styles of
  33567. +    C block comments.
  33568. +    
  33569. +    Also, new variable c++-C-block-comments-indent-p to control which
  33570. +    style(s) to use.
  33571. +
  33572. +    * cc-mode.el:
  33573. +    fixed c++-indent-exp to handle public/private/protected with friends
  33574. +
  33575. +    * cc-mode.el: fixed indentation for the following style:
  33576. +    
  33577. +    class foo {
  33578. +        friend class bar;
  33579. +        public:
  33580. +            foo();
  33581. +        private:
  33582. +    };
  33583. +
  33584. +Mon Jul 20 20:22:58 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33585. +
  33586. +    * cc-mode.el:
  33587. +    1. added c++-paren-as-block-close-p to control whether a closing paren is
  33588. +       treated as a closing brace.
  33589. +    
  33590. +    2. also added c++-block-close-brace-offset to bug list of variables
  33591. +
  33592. +    * cc-mode.el: added a c++-c-mode-syntax-table
  33593. +    NOTE: patch in previous version DOES work
  33594. +
  33595. +    * cc-mode.el: rewrite of c++-at-top-level-p for c mode (doesn't work)
  33596. +
  33597. +Fri Jul 17 20:14:30 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33598. +
  33599. +    * cc-mode.el:
  33600. +    change syntax table entry to support lemacs 19 syntax table extension
  33601. +    WARNING: this may change
  33602. +
  33603. +Thu Jul 16 19:35:21 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33604. +
  33605. +    * cc-mode.el: fixed comment-only lines in c++-indent-exp
  33606. +
  33607. +    * cc-mode.el:
  33608. +    patch to c++-indent-exp to make it work consistently with manual
  33609. +    tabbing
  33610. +
  33611. +    * cc-mode.el:
  33612. +    better c++-(un)comment-region functions as supplied by enami
  33613. +
  33614. +Wed Jul 15 18:07:13 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33615. +
  33616. +    * cc-mode.el:
  33617. +    C mode entry point, including a properly working c++-(un)comment-region
  33618. +
  33619. +    * cc-mode.el:
  33620. +    use c++-backward-over-syntactic-ws in another appropriate location in
  33621. +    c++-calculate-indent
  33622. +
  33623. +Tue Jul 14 21:33:04 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33624. +
  33625. +    * cc-mode.el: implemented Brian Kennedy's patches for { if style
  33626. +    seems to be clean now
  33627. +
  33628. +    * cc-mode.el: regexp to correctly pickup '\\' character constant
  33629. +
  33630. +    * cc-mode.el:
  33631. +    new regexp to match even number of backslashes followed by a quote for
  33632. +    c++-in-literal matching of string terminators
  33633. +
  33634. +Mon Jul 13 18:25:21 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33635. +
  33636. +    * cc-mode.el:
  33637. +    better fix to c++-at-top-level-p for limiting backsearching of
  33638. +    class/struct
  33639. +
  33640. +    * cc-mode.el: another patch to c++-at-top-level-p, but now slower
  33641. +
  33642. +    * cc-mode.el:
  33643. +    Igor Metz's patch to fix c++-uncomment-region for Emacs 19
  33644. +    derivatives since zap-to-char now works differently
  33645. +
  33646. +Fri Jul 10 22:02:26 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33647. +
  33648. +    * cc-mode.el:
  33649. +    in c++-fill-C-comment, its cleaner to use let-bind fill-prefix itself
  33650. +    instead of saving its value and later restoring it.
  33651. +
  33652. +    * cc-mode.el:
  33653. +    c++-at-top-level-p never returns non-nil if inside the parens of an
  33654. +    arg decl list for a function.  Also cleaned up c++-at-top-level-p's
  33655. +    docstring for new functionality
  33656. +
  33657. +    * cc-mode.el: 1. added usage notes to top of file
  33658. +    2. another fix for indentation of member init lists in nested classes
  33659. +
  33660. +    * cc-mode.el: fixed member init continuation lines
  33661. +
  33662. +    * cc-mode.el:
  33663. +    fixed emtpy-defun-braces cleanup when at top level wrt enclosing class
  33664. +
  33665. +    * cc-mode.el: fixed nested class member init list indentation
  33666. +
  33667. +Thu Jul  9 21:54:08 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33668. +
  33669. +    * cc-mode.el:
  33670. +    added c++-class-member-indent to varlist in bug submission
  33671. +
  33672. +    * cc-mode.el: nested classes!
  33673. +    added a variable c++-class-member-indent to handle indentation of
  33674. +    class members relative to their enclosing class
  33675. +
  33676. +    * cc-mode.el:
  33677. +    new c++-at-top-level-p function for nested class definitions (does not
  33678. +    work though)
  33679. +
  33680. +    * cc-mode.el:
  33681. +    optimized by changing all references to c++-in-comment-p and
  33682. +    c++-in-open-string-p to use memq and c++-in-literal.  This should
  33683. +    overall reduce the number of calls to c++-in-literal, a time consuming
  33684. +    defun.
  33685. +
  33686. +    * cc-mode.el:
  33687. +    c++-electric-star will now re-indent the line when typed as the first
  33688. +    character on a line of a C block style comment continuation
  33689. +
  33690. +    * cc-mode.el:
  33691. +    fix to c++-at-top-level-p to ignore struct/class declarations inside a
  33692. +    defun which are not definitions:
  33693. +    
  33694. +    void foo()
  33695. +    {
  33696. +        struct blah;
  33697. +    
  33698. +        // we are not now (c++-at-top-level-p t)
  33699. +    
  33700. +    The function is still not perfect so we really need to rethink this
  33701. +    algorithm.
  33702. +
  33703. +    * cc-mode.el:
  33704. +    collapse all c++-point-* commands into a single c++-point command with
  33705. +    an argument
  33706. +
  33707. +Wed Jul  8 19:40:14 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33708. +
  33709. +    * cc-mode.el: fixed parse-start setq in c++-calculate-indent
  33710. +
  33711. +Tue Jul  7 22:03:41 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33712. +
  33713. +    * cc-mode.el: pasing => parsing
  33714. +
  33715. +    * cc-mode.el: grammer -> grammar in comment
  33716. +
  33717. +    * cc-mode.el:
  33718. +    implemented c++-backward-over-syntactic-ws with help of Tor Lillqvist
  33719. +    <tml@tik.vtt.fi>  and replaced all occurances of
  33720. +    c++-backward-over-cpp-directives and c++-skip-backward-to-noncomment.
  33721. +
  33722. +Mon Jul  6 21:25:17 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33723. +
  33724. +    * cc-mode.el:
  33725. +    colon and semi-colon are no longer electric inside of literals
  33726. +
  33727. +    * cc-mode.el: it is possible that c++-beginning-of-defun with
  33728. +    c++-match-header-strong equal to nil will incorrectly find the
  33729. +    beginning of defun.  if this happens, c++-parse-state will return a
  33730. +    null state so we can check for this and then let* bind
  33731. +    c++-match-header-strongly to t.  Then we re-calculate the beginning of
  33732. +    the c++ defun.
  33733. +    
  33734. +    Seems to work around the (char-after ...) bug
  33735. +
  33736. +    * cc-mode.el: swap back to another use of c++-parse-state
  33737. +
  33738. +    * cc-mode.el:
  33739. +    1. don't inherit syntax table from c-mode.  Initialize completely from
  33740. +       in this file
  33741. +    2. wrote c++-parse-state to centralize parsing of syntactic context
  33742. +
  33743. +Tue Jun 30 21:39:23 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33744. +
  33745. +    * cc-mode.el:
  33746. +    fixed a bug in brace-else-brace cleanup where insertion of new
  33747. +    (non-else) brace could possibly go way back to clean up old else brace
  33748. +    constructs.
  33749. +
  33750. +    * cc-mode.el:
  33751. +    use new c++-cleanup-list to replace c++-cleanup-brace-else-brace-p and
  33752. +    c++-cleanup-empty-defun-braces-p, and to implement new cleanup on
  33753. +    close semi.
  33754. +
  33755. +    * cc-mode.el:
  33756. +    fixed c++-electric-pound behavior for # directives in a level of
  33757. +    nesting for alignleft behavior
  33758. +
  33759. +    * cc-mode.el:
  33760. +    c++-cleanup-empty-defun-braces-p only for defun braces (not for empty
  33761. +    if braces for example)
  33762. +
  33763. +    * cc-mode.el:
  33764. +    only do the extra c++-indent-line in c++-electric-brace if hanging
  33765. +    braces is turned off
  33766. +
  33767. +Wed Jun 24 20:07:00 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33768. +
  33769. +    * cc-mode.el:
  33770. +    added a c++-indent-line in the c++-electric-brace to fix non-hanging
  33771. +    brace error message.
  33772. +
  33773. +    * cc-mode.el:
  33774. +    added function c++-skip-backwards-over-cpp-directives for improved
  33775. +    indentation around # lines.
  33776. +
  33777. +Tue Jun 23 19:35:27 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33778. +
  33779. +    * cc-mode.el:
  33780. +    fixed stream op positioning when first >> or << is on the next
  33781. +    continued line of the statement.
  33782. +
  33783. +    * cc-mode.el:
  33784. +    hacking the mode line should only occur in c++-mode defun, when the
  33785. +    mode line is a list, otherwise, if people use the obsolete string-only
  33786. +    form, their mode line will be made invalid.
  33787. +
  33788. +    * cc-mode.el:
  33789. +    fixed indentation of lines not at top level, which follow preprocessor
  33790. +    directive lines.
  33791. +
  33792. +Fri Jun 19 21:46:58 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33793. +
  33794. +    * cc-mode.el:
  33795. +    fixed bug when access specifier line has a comment at the end of it
  33796. +
  33797. +    * cc-mode.el: simplified all point-marks to use (point-marker)
  33798. +
  33799. +Thu Jun 18 15:10:04 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33800. +
  33801. +    * cc-mode.el: fixed c++-electric-pound by using insert-before-markers
  33802. +
  33803. +    * cc-mode.el: 1. added c++-electric-pound command and bound it to #
  33804. +    2. also added c++-electric-pound-behavior to control how # behaves.
  33805. +       Currently only supported behavior is alignleft, but eventually I
  33806. +       will support nested behavior as well.
  33807. +    3. changed the way c++-electric-delete and c++-insert-command work on
  33808. +       # lines.  delete is never hungry in the whitespace b/w # and
  33809. +       directive, and tab only inserts in this area as well.
  33810. +
  33811. +    * cc-mode.el:
  33812. +    added c++-delete-function variable and made c++-electric-delete use
  33813. +    this variable
  33814. +
  33815. +Wed Jun 17 22:29:12 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33816. +
  33817. +    * cc-mode.el:
  33818. +    added c++-special-indent-hook and bug reporting of this variable
  33819. +
  33820. +    * cc-mode.el: support for lining up >> and <<
  33821. +
  33822. +    * cc-mode.el:
  33823. +    added c++-matching-paren as contrib'd by Gnanasekaran Swaminathan
  33824. +
  33825. +Mon Jun 15 21:07:29 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33826. +
  33827. +    * cc-mode.el: fixed c++-indent-command when looking at a blank line and
  33828. +    c++-tab-always-indent is nil
  33829. +
  33830. +    * cc-mode.el:
  33831. +    another fix to c++-indent-command for c++-tab-always-indent == nil
  33832. +
  33833. +    * cc-mode.el:
  33834. +    made c++-indent-command behavior when c++-tab-always-indent is nil
  33835. +    consistent with documentation
  33836. +
  33837. +Thu Jun 11 22:44:47 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33838. +
  33839. +    * cc-mode.el:
  33840. +    added a test to see if c++-auto-newline actually inserts the newline
  33841. +    doing the auto-fill
  33842. +
  33843. +Wed Jun 10 19:10:31 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33844. +
  33845. +    * cc-mode.el:
  33846. +    fixed indentation of first member function after an access specifier
  33847. +    inside a class definition
  33848. +
  33849. +Tue Jun  9 22:45:24 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33850. +
  33851. +    * cc-mode.el:
  33852. +    c++-submit-bug-report uses pop-to-buffer instead of switch-buffer
  33853. +
  33854. +    * cc-mode.el: refined regexp patch in previous fix
  33855. +
  33856. +    * cc-mode.el:
  33857. +    fixed c++-calculate-indent int the situation where we're looking at
  33858. +    the line after a class declaration, but we're not inheriting.  see the
  33859. +    lines after:
  33860. +    ;; else first check to see if its a
  33861. +    ;; multiple inheritance continuation line
  33862. +    
  33863. +    the regexp should match optional inheritance syntax.
  33864. +
  33865. +    * cc-mode.el:
  33866. +    small fix to c++-at-top-level for checking if at top wrt a containing
  33867. +    class definition. (previous fix didn't work)
  33868. +
  33869. +    * cc-mode.el:
  33870. +    1. fixed small bug in c++-at-top-level-p for nested in class checking
  33871. +    2. fixed bug in indentation of continued arg lists in class nested
  33872. +       function declarations
  33873. +
  33874. +Mon Jun  8 21:50:48 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33875. +
  33876. +    * cc-mode.el: removed extra define-key of DEL in c++-mode-map init
  33877. +
  33878. +    * cc-mode.el: fixed friend offset in c++-indent-exp
  33879. +
  33880. +    * cc-mode.el:
  33881. +    indent by c++-friend-offset for all friends, not just class friends
  33882. +
  33883. +    * cc-mode.el: fixed scan-lists failure in c++-at-top-level-p
  33884. +
  33885. +    * cc-mode.el: fixed bogus colon entry "premature sexp end" bug
  33886. +
  33887. +    * cc-mode.el: much preliminary work for inline code proper formatting
  33888. +
  33889. +    * cc-mode.el: fixed double colon cleanup inside defun level
  33890. +
  33891. +    * cc-mode.el: added variable c++-cleanup-empty-defun-braces-p
  33892. +
  33893. +    * cc-mode.el: default value for c++-comment-only-line-offset is now 0
  33894. +
  33895. +    * cc-mode.el: fixed c++-electric-delete's consuming of [] characters
  33896. +
  33897. +    * cc-mode.el: c++-cleanup-brace-else-brace-p is now nil by default
  33898. +
  33899. +    * cc-mode.el:
  33900. +    fixed c++-hanging-member-init-colon for all known situations
  33901. +
  33902. +Fri Jun  5 21:13:54 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33903. +
  33904. +    * cc-mode.el: reorganized the major sections of code
  33905. +
  33906. +Tue Jun  2 15:18:25 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33907. +
  33908. +    * cc-mode.el: more optimizations using c++-beginning-of-defun
  33909. +
  33910. +Mon Jun  1 22:24:52 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33911. +
  33912. +    * cc-mode.el: interrim speedups
  33913. +
  33914. +    * cc-mode.el:
  33915. +    another patch to c++-in-literal for checking for null strings. I think
  33916. +    I've got it this time...
  33917. +
  33918. +    * cc-mode.el:
  33919. +    fixed the regexp for matching the closing double quote of a string
  33920. +
  33921. +Thu May 28 22:24:09 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33922. +
  33923. +    * cc-mode.el: added a (provide ...) to the end of the file
  33924. +
  33925. +    * cc-mode.el: changed c++-brace-}-else-{-p to c++-brace-else-brace-p
  33926. +
  33927. +    * cc-mode.el: fixed hanging base classes for multiple inheritance
  33928. +
  33929. +    * cc-mode.el:
  33930. +    completely rewrote c++-backward-to-noncomment to use c++-in-literal
  33931. +    function.
  33932. +
  33933. +    * cc-mode.el:
  33934. +    replace all beginning-of-defun calls with c++-beginning-of-defun which
  33935. +    more correctly find the true beginning of a c++ definition
  33936. +
  33937. +    * cc-mode.el:
  33938. +    fixed c++-in-literal for the case where "" appears as a string
  33939. +
  33940. +    * cc-mode.el:
  33941. +    fixed bug in c++-calculate-indent when class line is first line in
  33942. +    file. also there may be no space between the class name and colon.
  33943. +
  33944. +    * cc-mode.el:
  33945. +    fixed c++-backward-to-noncomment bug when looking at # lines
  33946. +
  33947. +    * cc-mode.el:
  33948. +    fixed indentation of top-level construct immediately preceeded by a
  33949. +    c-block comment
  33950. +
  33951. +Wed May 27 23:30:43 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33952. +
  33953. +    * cc-mode.el:
  33954. +    complete replacement for c++-in-open-string-p and c++-in-comment-p
  33955. +
  33956. +Tue May 26 22:25:39 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33957. +
  33958. +    * cc-mode.el: added Warner Losh's addition of c++-relative-offset-p
  33959. +
  33960. +    * cc-mode.el:
  33961. +    patched c++-backward-to-start-of-do to ignore do/while constructs in
  33962. +    comments
  33963. +
  33964. +    * cc-mode.el: yet another patch to c++-in-comment-p
  33965. +
  33966. +Fri May 22 18:09:04 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33967. +
  33968. +    * cc-mode.el:
  33969. +    added c++-access-specifier-offset for extra indentation for public,
  33970. +    protected, and private keyword lines
  33971. +
  33972. +Thu May 21 19:18:31 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33973. +
  33974. +    * cc-mode.el: cosmetic changes
  33975. +
  33976. +Wed May 20 22:53:43 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  33977. +
  33978. +    * cc-mode.el: fixed typo with c++-always-arglist-indent-p
  33979. +
  33980. +    * cc-mode.el:
  33981. +    mode-line-format is now not completely overridden, but instead, the
  33982. +    c++-isms are tacked onto the format after the mode-name symbol (if it
  33983. +    exists).
  33984. +
  33985. +    * cc-mode.el: installed Terry Glanfield's patch to c++-indent-exp
  33986. +
  33987. +    * cc-mode.el: documented c++-always-arglist-indent, changed the name to
  33988. +    c++-always-arglist-indent-p and added to bug report list.
  33989. +
  33990. +    * cc-mode.el:
  33991. +    installed Milo Chan's patch for addition of c++-always-arglist-indent
  33992. +
  33993. +    * cc-mode.el:
  33994. +    small patch to fix whitespace only line before top-level construct
  33995. +
  33996. +    * cc-mode.el:
  33997. +    rewrote c++-tame-comments to look at a list of characters to tame.
  33998. +    Also removed c++-tame-comments-p and replaced it with
  33999. +    c++-tame-characters
  34000. +
  34001. +    * cc-mode.el: equivalenced class and struct keyword syntacticly
  34002. +
  34003. +Tue May 19 19:34:16 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34004. +
  34005. +    * cc-mode.el: fixed multiple inheritance continuation indentation
  34006. +
  34007. +    * cc-mode.el: fixed indentation for member init lists when colon hangs
  34008. +
  34009. +    * cc-mode.el:
  34010. +    1. c++-electric-colon is made smarter so that it only adds newlines
  34011. +       after a colong when absolutely necessary
  34012. +    
  34013. +    2. extended semantics of c++-hanging-member-init-colon
  34014. +
  34015. +    * cc-mode.el: fixed small bug in constness fix of 2.55
  34016. +
  34017. +Mon May 18 21:55:14 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34018. +
  34019. +    * cc-mode.el: fixed top level enum constructs
  34020. +
  34021. +    * cc-mode.el: fixed indentation when inputing after a const function
  34022. +
  34023. +    * cc-mode.el: handle default: lines exactly line case: lines
  34024. +
  34025. +Thu May 14 21:37:53 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34026. +
  34027. +    * cc-mode.el: updated info at top of file re, bug reports
  34028. +
  34029. +    * cc-mode.el:
  34030. +    fixed continued statements inside a simple for/if style loop
  34031. +
  34032. +    * cc-mode.el: fixed member-init bug introduced in v2.47
  34033. +
  34034. +Wed May 13 20:45:33 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34035. +
  34036. +    * cc-mode.el: yet another patch to c++-in-comment-p
  34037. +
  34038. +    * cc-mode.el:
  34039. +    added interactive command c++-version and bound it to C-c C-v
  34040. +
  34041. +Tue May 12 21:37:20 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34042. +
  34043. +    * cc-mode.el: another patch to c++-in-comment-p
  34044. +
  34045. +    * cc-mode.el:
  34046. +    fixed c++-calculate-indent to ignore parens and such which occur in
  34047. +    comment regions during the initial iterative parse of the defun.
  34048. +
  34049. +    * cc-mode.el:
  34050. +    in c++-in-comment-p, it was necessary to set ?/ temporarily to ". 14"
  34051. +    class so that c++ style comments wouldn't affect parse-partial-sexp
  34052. +
  34053. +    * cc-mode.el:
  34054. +    tab does not insert a C style comment block continuation line when
  34055. +    point is on or before the first non-whitespace character on the line.
  34056. +
  34057. +Mon May 11 22:28:30 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34058. +
  34059. +    * cc-mode.el: added variable c++-tame-comments-p
  34060. +
  34061. +    * cc-mode.el:
  34062. +    fixed c++-in-comment-p to handle special case of C style block comments
  34063. +
  34064. +    * cc-mode.el: added some documentation to c++-mode
  34065. +
  34066. +    * cc-mode.el:
  34067. +    C-c C-b is the accepted standard for c++-submit-bug-report
  34068. +
  34069. +Fri May  8 20:47:38 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34070. +
  34071. +    * cc-mode.el:
  34072. +    1. cleaned up all the intro information at the top of the file
  34073. +    2. added c++-submit-bug-report function and related variables.
  34074. +
  34075. +    * cc-mode.el: fixed mailing list info
  34076. +
  34077. +    * cc-mode.el: added information about c++-mode-victims mailing list.
  34078. +
  34079. +    * cc-mode.el:
  34080. +    fixed c++-tame-comments. now we tame all string and parenthesis class
  34081. +    characters.
  34082. +
  34083. +    * cc-mode.el:
  34084. +    changed syntax of single quote back to string class and added
  34085. +    c++-electric-tick and c++-tame-ticks defuns to handle backslashifying
  34086. +    single quotes in comment areas.
  34087. +
  34088. +Thu May  7 20:03:32 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34089. +
  34090. +    * cc-mode.el:
  34091. +    added fix by Reed Hastings <reed@adapt.net.com> so that c++-indent-exp
  34092. +    can properly terminate when // style comments are found within the
  34093. +    function.
  34094. +
  34095. +    * cc-mode.el:
  34096. +    c++-calculate-indent should now not re-indent comment-only lines which
  34097. +    begin in comment-column
  34098. +
  34099. +    * cc-mode.el:
  34100. +    fixed c++-electric-terminator insertion when auto-newline fills a long
  34101. +    line due to auto-fill being on.
  34102. +
  34103. +    * cc-mode.el:
  34104. +    comment only lines which continue previous line's comment field would
  34105. +    probably be indented in comment-column so those comments which begin
  34106. +    in comment-column don't indent
  34107. +
  34108. +Wed May  6 17:29:16 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34109. +
  34110. +    * cc-mode.el:
  34111. +    handle comment-only lines which continue from the previous line.
  34112. +
  34113. +Mon May  4 23:33:51 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34114. +
  34115. +    * cc-mode.el:
  34116. +    added a few of Hallvard's speedups (but not the c++-auto-newline one)
  34117. +
  34118. +    * cc-mode.el: changed all functions to conform to c++-<func> style
  34119. +
  34120. +    * cc-mode.el:
  34121. +    changed the variable c-tab-always-indent to c++-tab-always-indent and
  34122. +    extended this variable's functionality.
  34123. +
  34124. +    * cc-mode.el: forgot to remove the debug statement
  34125. +
  34126. +    * cc-mode.el: simplified c++-cleanup-}-else-{-p
  34127. +
  34128. +Sat May  2 18:12:21 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34129. +
  34130. +    * cc-mode.el: changed c++-cleanup-}-else-{ to c++-cleanup-}-else-{-p
  34131. +
  34132. +Fri May  1 21:09:09 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34133. +
  34134. +    * cc-mode.el:
  34135. +    beginnings of } else { cleanup, but not completely bugless yet
  34136. +
  34137. +    * cc-mode.el:
  34138. +    fixed indent-c++-exp. when setting this-indent as max of different
  34139. +    values, max it with 0 not 1, otherwise some things won't ever end up
  34140. +    in column zero.
  34141. +
  34142. +    * cc-mode.el:
  34143. +    I think I've extended calculate-c++-indent to properly handle
  34144. +    switch/case statements (at least the style that I use).
  34145. +
  34146. +Thu Apr 30 22:21:51 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34147. +
  34148. +    * cc-mode.el: added c++-backward-to-start-of-do, which is analogous to
  34149. +    c-backward-to-start-of-if and finds the corresponding preceding do for
  34150. +    a do/while statement.  made the necessary changes to
  34151. +    calculate-c++-indent to handle nested do's
  34152. +
  34153. +    * cc-mode.el:
  34154. +    this version will now handle continued statements with no compound
  34155. +    statements on ifs, elses, fors, dos, and whiles.
  34156. +
  34157. +    * cc-mode.el: add tab-width to the list of variables to dump...
  34158. +
  34159. +Wed Apr 29 22:23:25 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34160. +
  34161. +    * cc-mode.el:
  34162. +    simplification of auto-hungry functions and mode-line updates with
  34163. +    much thanks to Hallvard Furuseth.
  34164. +
  34165. +    * cc-mode.el:
  34166. +    copied c++-in-parens-p from c-mode's c-inside-parens-p.  this is so we
  34167. +    can play with trying to work around emacs' bogus syntax bugs. we'll
  34168. +    see if the new behavior is any better
  34169. +
  34170. +    * cc-mode.el:
  34171. +    eliminate infinite loop bug in c++-indent-defun by using a marker.
  34172. +    this is necessary since c++-indent-line could change the location of
  34173. +    the marker and just saving its buffer position is not sufficient.
  34174. +
  34175. +    * cc-mode.el:
  34176. +    close parens act like close braces by indenting to c-indent-level
  34177. +    plus value of c++-block-close-brace-offset.
  34178. +
  34179. +    * cc-mode.el:
  34180. +    fixed infinite loop problem in c++-indent-defun which was caused by
  34181. +    substituting forward-line for next-line.
  34182. +
  34183. +    * cc-mode.el: some changes to calculate-c++-indent defun
  34184. +    1. fixed unbalanced paren problem (emacs bug) in comment by adding a
  34185. +       paren to the j.peck hack comment (probably should eventually clean
  34186. +       up these comments)
  34187. +    
  34188. +    2. applied Doug Moore's (dougm@cs.rice.edu) patch to fix continued
  34189. +       function declarations of the form:
  34190. +    
  34191. +       int foo( int i,
  34192. +                int j );
  34193. +       ^---- next line should only indent to here
  34194. +    
  34195. +    3. cleaned up some comment sections
  34196. +
  34197. +    * cc-mode.el:
  34198. +    added the variable c++-block-close-brace-offset for modifying the
  34199. +    offset of close braces for non-top level blocks (i.e. braces which
  34200. +    don't close a function).
  34201. +
  34202. +    * cc-mode.el:
  34203. +    removed c++-delete-is-hungry-in-literals-p.  Delete key is now,
  34204. +    *never* hungry inside literals.
  34205. +
  34206. +Tue Apr 28 22:38:35 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34207. +
  34208. +    * cc-mode.el: fixed free variable problems in indent-c++-exp
  34209. +    1. innerloop-done was let'ed as inner-loop-done. changed all
  34210. +       innerloop-done's to inner-loop-done in body of defun
  34211. +    
  34212. +    2. last-depth wasn't let'ed
  34213. +
  34214. +    * cc-mode.el:
  34215. +    added c++-delete-is-hungry-in-literals-p to control whether
  34216. +    hungry-delete consumes whitespace even in literals.
  34217. +
  34218. +    * cc-mode.el:
  34219. +    whoops, parse-start was a free variable in c++-at-top-level-p. I just
  34220. +    added the local binding to the let statement in that defun.
  34221. +
  34222. +    * cc-mode.el:
  34223. +    changed c++-hanging-braces-p to c++-hanging-braces. this variable can
  34224. +    now control whether hanging braces happen always, never, or only on
  34225. +    non-top level open braces.
  34226. +
  34227. +    * cc-mode.el: fixed comment-only line related bugs:
  34228. +    
  34229. +    1. comment-only lines not in the first column, but at the top level
  34230. +       were inserting all tab characters.
  34231. +    
  34232. +    2. fixed #1, but this caused non-comment top-level lines which follow
  34233. +       indented top-level comment-only lines to indent, which they
  34234. +       shouldn't do.
  34235. +    
  34236. +    I think this fixes all repercussions of comment-only lines.
  34237. +
  34238. +    * cc-mode.el:
  34239. +    replaced all next-line's with forward-line's since next-line is really
  34240. +    a user level function (and may be overloaded by the user).
  34241. +
  34242. +Mon Apr 27 16:03:29 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34243. +
  34244. +    * cc-mode.el:
  34245. +    fixed enum entry bug reported by Rolf Schreiber by patching
  34246. +    c++-backward-to-noncomment.  it is possible that (max (point-bol) lim)
  34247. +    is greater than point, which chokes the search-backward call.  I now
  34248. +    have a test for sblim being less than or equal to point.
  34249. +
  34250. +Fri Apr 24 22:02:47 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34251. +
  34252. +    * cc-mode.el:
  34253. +    1. added documentation in c++-mode for auto-hungry states and related
  34254. +       variables.
  34255. +    2. removed duplicated setq's in c++-mode buffer-local-variable setups
  34256. +
  34257. +    * cc-mode.el: more header doc information
  34258. +
  34259. +Wed Apr 22 22:30:31 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34260. +
  34261. +    * cc-mode.el: final clean up before posting
  34262. +
  34263. +    * cc-mode.el: bumping to baseline rev number 2.0
  34264. +
  34265. +Thu Apr 16 17:05:40 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34266. +
  34267. +    * cc-mode.el: added LCD Archive Entry and new file header format
  34268. +
  34269. +Wed Apr 15 19:44:38 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34270. +
  34271. +    * cc-mode.el:
  34272. +    fixed column zero comment-only line indentation problem when inside a
  34273. +    containing-sexp.
  34274. +
  34275. +    * cc-mode.el: needed to add a trailing newline for proper unsharing
  34276. +
  34277. +Tue Apr 14 18:12:22 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34278. +
  34279. +    * cc-mode.el: Bumping
  34280. +
  34281. +    * cc-mode.el: added bug reporting information
  34282. +
  34283. +Fri Apr 10 17:48:46 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34284. +
  34285. +    * cc-mode.el: cleaned up c++-mode doc string
  34286. +
  34287. +    * cc-mode.el:
  34288. +    1. updated mode documentation string for c++-mode to include new
  34289. +       variables.
  34290. +    
  34291. +    2. changed c++-auto-hungry-toggle-p to c++-auto-hungry-toggle since it
  34292. +       is not a binary valued variable.
  34293. +
  34294. +    * cc-mode.el:
  34295. +    changed ' syntax back to string quote instead of punctuation
  34296. +
  34297. +Thu Apr  9 22:26:00 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34298. +
  34299. +    * cc-mode.el: added a (goto-char (point-min)) in c++-dump-state
  34300. +
  34301. +    * cc-mode.el: added c++-dump-state function for bug reporting
  34302. +
  34303. +Tue Mar 31 23:38:56 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34304. +
  34305. +    * cc-mode.el: lots of toggling options, plus individual toggling for
  34306. +    hungry-delete-key and auto-newline states.
  34307. +
  34308. +    * cc-mode.el: added organization
  34309. +
  34310. +Fri Mar 27 23:19:32 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34311. +
  34312. +    * cc-mode.el: major renovation on auto/hungry toggling
  34313. +
  34314. +Thu Mar 26 23:43:09 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34315. +
  34316. +    * cc-mode.el:
  34317. +    use better mode-line formatting instead of hacking mode-name
  34318. +
  34319. +Fri Mar 20 20:38:29 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34320. +
  34321. +    * cc-mode.el:
  34322. +    made buffer-local c++-auto-newline and c++-hungry-delete-key-p
  34323. +
  34324. +Thu Mar 19 19:16:14 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34325. +
  34326. +    * cc-mode.el:
  34327. +    bound c++-toggle-auto-newline function to C-cC-t and compacted info
  34328. +    mode name
  34329. +
  34330. +    * cc-mode.el:
  34331. +    use better mode-line updating than (redraw-display) in c++-toggle-auto-newline
  34332. +
  34333. +Wed Mar 18 19:52:14 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34334. +
  34335. +    * cc-mode.el: fixed display of c++-toggle-auto-newline
  34336. +
  34337. +Tue Mar 17 21:01:05 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34338. +
  34339. +    * cc-mode.el: test for c++-hungry-delete-key-p (typo)
  34340. +
  34341. +Mon Mar 16 22:14:18 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34342. +
  34343. +    * cc-mode.el: added c++-hungry-delete-key-p
  34344. +
  34345. +    * cc-mode.el: handles auto newline for member init list
  34346. +
  34347. +    * cc-mode.el: replaced within-c++-string w/ c++-in-open-string-p
  34348. +
  34349. +    * cc-mode.el: lots of fixes for:
  34350. +    1. column zero comments don't indent
  34351. +    2. made electric chars comment & open-string safe
  34352. +    3. made electric brace w/auto-fill work
  34353. +    4. made calculate-c++-indent work for while( foo ) style
  34354. +    5. added c++-hanging-braces-p for no auto-newline on left braces
  34355. +
  34356. +Sat Mar 14 07:01:14 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34357. +
  34358. +    * cc-mode.el:
  34359. +    fixed double-colon and various other problems with c-auto-newline
  34360. +    also changed c-auto-newline to c++-auto-newline
  34361. +
  34362. +    * cc-mode.el: fixed c-auto-newline for double colons and }; syntax
  34363. +
  34364. +    * cc-mode.el: fixed autoindent of comments for hanging arithmetic
  34365. +
  34366. +Fri Mar 13 23:47:34 1992  Barry A. Warsaw, ITB  (warsaw@anthem)
  34367. +
  34368. +    * cc-mode.el: better documentation for electric-c++-slash
  34369. +
  34370. +    * cc-mode.el:
  34371. +    fixed c++-indent-line to work with electric-c++-slash and bind "/" to it
  34372. +
  34373. +    * cc-mode.el: added c++-comment-only-line-offset
  34374. +
  34375. +    * cc-mode.el: Initial revision
  34376. +
  34377. diff -rup --new-file baseline/fsf/emacs/site-lisp/DUMPING amiga/fsf/emacs/site-lisp/DUMPING
  34378. --- baseline/fsf/emacs/site-lisp/DUMPING    Wed Dec 31 17:00:00 1969
  34379. +++ amiga/fsf/emacs/site-lisp/DUMPING    Sat Sep 28 00:00:00 1996
  34380. @@ -0,0 +1,132 @@
  34381. +DUMPING instructions for cc-mode.el 4.85
  34382. +Barry A. Warsaw <bwarsaw@cnri.reston.va.us>
  34383. +1994/09/10 17:30:12
  34384. +
  34385. +For now, you're going to be kind of on your own, but here are my, and
  34386. +other, experiences in dumping Emacs with cc-mode.  If you like
  34387. +cc-mode.el, you should lobby RMS to adopt it as *the* c-mode,
  34388. +c++-mode, and objc-mode for FSF's Emacs.  Note that if you are using
  34389. +XEmacs 19.11 (formerly Lucid Emacs), you do not need to do any of
  34390. +this.  XEmacs comes with cc-mode already dumped.  Yay!
  34391. +
  34392. +    Do this:
  34393. +
  34394. +    % cd <wherever_c_mode.el_is>
  34395. +    % mv c-mode.el c-mode.el.bak
  34396. +    % mv cc-mode.el c-mode.el
  34397. +
  34398. +    Then byte-compile c-mode.el to produce c-mode.elc
  34399. +
  34400. +    In both FSF 19.22 and Lucid 19.9 version.el is loaded too late in
  34401. +    the loadup.el file.  cc-mode.el depends on the value of
  34402. +    emacs-version so you need to move the load of version.el higher up
  34403. +    in the file.
  34404. +
  34405. +    You may need to crank up PURESIZE in src/pursize.h.  I found I had
  34406. +    to add about 14k, others have reported an increase of ~23k, but of
  34407. +    course YMMV.
  34408. +
  34409. +    Tell your users not to add the f/makunbound's or autoloads to
  34410. +    their .emacs files, since they'll now get cc-mode for free.
  34411. +
  34412. +    In Lucid 19.9, loaddefs.el contains a lot of automatically
  34413. +    generated autoload definitions which will cause warnings when it
  34414. +    finds pointers to doc strings.  You can either ignore these
  34415. +    warnings (they won't hurt you), or you can comment out the
  34416. +    autoloads for c++-mode and c-style.  Or you can regenerate the
  34417. +    automatic autoloads once you've moved c++-mode.el and c-mode.el
  34418. +    aside, but you'll have to figure this part out by yourself.
  34419. +
  34420. +    I've also been told that under FSF Emacs 19, you have to get rid
  34421. +    of the autoloads for cplus-md*.el since c++-mode.el has been
  34422. +    renamed. You should also do an update-directory-autoloads on the
  34423. +    lisp directory before you redump.
  34424. +
  34425. +
  34426. +Andrew Hall <fmrco!ahall@uunet.uu.net> provides this diff which
  34427. +applies to FSF's Emacs 19.25.90 loaddefs.el file.  This zaps the
  34428. +autoloads for cplus-md.el and c-mode.el so you shouldn't need to do an
  34429. +update-directory-autoloads.
  34430. +
  34431. +*** loaddefs.el.orig    Sat Jul  2 15:39:30 1994
  34432. +--- loaddefs.el    Thu Jul 21 12:23:22 1994
  34433. +***************
  34434. +*** 1959,2035 ****
  34435. +  
  34436. +  ;;;***
  34437. +  
  34438. +- ;;;### (autoloads (c++-mode) "cplus-md" "cplus-md.el" (11649 1462))
  34439. +- ;;; Generated autoloads from cplus-md.el
  34440. +- 
  34441. +- (autoload (quote c++-mode) "cplus-md" "\
  34442. +- Major mode for editing C++ code.  Very much like editing C code.
  34443. +- Expression and list commands understand all C++ brackets.
  34444. +- Tab at left margin indents for C++ code
  34445. +- Comments are delimited with /* ... */ {or with // ... <newline>}
  34446. +- Paragraphs are separated by blank lines only.
  34447. +- Delete converts tabs to spaces as it moves back.
  34448. +- \\{c++-mode-map}
  34449. +- Variables controlling indentation style:
  34450. +-  c-tab-always-indent
  34451. +-     Non-nil means TAB in C mode should always reindent the current line,
  34452. +-     regardless of where in the line point is when the TAB command is used.
  34453. +-     Default is t.
  34454. +-  c-auto-newline
  34455. +-     Non-nil means automatically newline before and after braces,
  34456. +-     and after colons and semicolons, inserted in C code.
  34457. +-  c-indent-level
  34458. +-     Indentation of C statements within surrounding block.
  34459. +-     The surrounding block's indentation is the indentation
  34460. +-     of the line on which the open-brace appears.
  34461. +-  c-continued-statement-offset
  34462. +-     Extra indentation given to a substatement, such as the
  34463. +-     then-clause of an if or body of a while.
  34464. +-  c-continued-brace-offset
  34465. +-     Extra indentation given to a brace that starts a substatement.
  34466. +-     This is in addition to c-continued-statement-offset.
  34467. +-  c-brace-offset
  34468. +-     Extra indentation for line if it starts with an open brace.
  34469. +-  c-brace-imaginary-offset
  34470. +-     An open brace following other text is treated as if it were
  34471. +-     this far to the right of the start of its line.
  34472. +-  c-argdecl-indent
  34473. +-     Indentation level of declarations of C function arguments.
  34474. +-  c-label-offset
  34475. +-     Extra indentation for line that is a label, or case or ``default:'', or
  34476. +-     ``public:'' or ``private:'', or ``protected:''.
  34477. +-  c++-electric-colon
  34478. +-     If non-nil at invocation of c++-mode (t is the default) colon electricly
  34479. +-     indents.
  34480. +-  c++-empty-arglist-indent
  34481. +-     If non-nil, a function declaration or invocation which ends a line with a
  34482. +-     left paren is indented this many extra spaces, instead of flush with the
  34483. +-     left paren.
  34484. +-  c++-friend-offset
  34485. +-     Offset of C++ friend declarations relative to member declarations.
  34486. +-  c++-member-init-indent
  34487. +-     Indentation level of member initializations in function declarations,
  34488. +-     if they are on a separate line beginning with a colon.
  34489. +-  c++-continued-member-init-offset
  34490. +-     Extra indentation for continuation lines of member initializations; NIL
  34491. +-     means to align with previous initializations rather than with the colon.
  34492. +- 
  34493. +- Settings for K&R, BSD, and Stroustrup indentation styles are
  34494. +-   c-indent-level                5    8    4
  34495. +-   c-continued-statement-offset  5    8    4
  34496. +-   c-continued-brace-offset                0
  34497. +-   c-brace-offset               -5   -8    0
  34498. +-   c-brace-imaginary-offset                0
  34499. +-   c-argdecl-indent              0    8    4
  34500. +-   c-label-offset               -5   -8   -4
  34501. +-   c++-empty-arglist-indent                4
  34502. +-   c++-friend-offset                       0
  34503. +- 
  34504. +- Turning on C++ mode calls the value of the variable `c++-mode-hook' with
  34505. +- no args if that value is non-nil." t nil)
  34506. +- 
  34507. +- ;;;***
  34508. +- 
  34509. +  ;;;### (autoloads (dabbrev-expand) "dabbrev" "dabbrev.el" (11577 36858))
  34510. +  ;;; Generated autoloads from dabbrev.el
  34511. +  
  34512. +--- 1959,1964 ----
  34513. diff -rup --new-file baseline/fsf/emacs/site-lisp/MANIFEST amiga/fsf/emacs/site-lisp/MANIFEST
  34514. --- baseline/fsf/emacs/site-lisp/MANIFEST    Wed Dec 31 17:00:00 1969
  34515. +++ amiga/fsf/emacs/site-lisp/MANIFEST    Sat Sep 28 00:00:00 1996
  34516. @@ -0,0 +1,29 @@
  34517. +MANIFEST for tar distribution of cc-mode.el 4.85
  34518. +Barry A. Warsaw <bwarsaw@cnri.reston.va.us>
  34519. +1994/09/10 17:46:02
  34520. +
  34521. +You should have received the following files in the distribution tar
  34522. +file for cc-mode 4.85:
  34523. +
  34524. +    MANIFEST: This file
  34525. +
  34526. +    cc-mode.el: Version 4.85 of the mode.
  34527. +
  34528. +    cc-compat.el: version 1.2.  Helps ease the transition from
  34529. +    c-mode.el to cc-mode style indentation control.  This is provided
  34530. +    for your convenience only, and is completely unguaranteed and
  34531. +    unsupported.
  34532. +
  34533. +    cc-mode-18.el: Emacs 18 compatibility file.  This is provided for
  34534. +    your convenience only, and is completely unguaranteed and
  34535. +    unsupported.  Emacs 18 support will probably be completely dropped
  34536. +    in cc-mode version 5.
  34537. +
  34538. +    README: manual on how to use cc-mode to edit C, C++, and
  34539. +    Objective-C files. Eventually this will be replaced by a texinfo
  34540. +    manual.  VOLUNTEERS ARE SOUGHT to help complete the manual.
  34541. +
  34542. +    DUMPING: A guide to ditching c-mode.el and c++-mode.el in favor of
  34543. +    cc-mode.el.  Unnecessary for XEmacs 19.11!  Yay!
  34544. +
  34545. +    ChangeLog: Extremely verbose history of changes.
  34546. diff -rup --new-file baseline/fsf/emacs/site-lisp/README amiga/fsf/emacs/site-lisp/README
  34547. --- baseline/fsf/emacs/site-lisp/README    Wed Dec 31 17:00:00 1969
  34548. +++ amiga/fsf/emacs/site-lisp/README    Sat Sep 28 00:00:00 1996
  34549. @@ -0,0 +1,847 @@
  34550. +README for cc-mode.el 4.85
  34551. +Barry A. Warsaw <bwarsaw@cnri.reston.va.us>
  34552. +1994/09/10 17:18:01
  34553. +
  34554. +Note, you can browse this file either as a flat, multiple page file,
  34555. +or as an Emacs outline.  As a flat file, just use "C-x ]" to move
  34556. +forward one page, or "C-x [" to move backward one page.  To read this
  34557. +as an outline, hit "M-x outline-mode RET".  outline-mode is described
  34558. +in your Emacs documentation.
  34559. +
  34560. +
  34561. +* Introduction
  34562. +
  34563. +    Welcome to cc-mode, version 4.  This is a Emacs Lisp mode for
  34564. +    editing C, C++, and Objective-C in GNU Emacs.  This mode is
  34565. +    decendent from c-mode.el (also called "Boring Old C Mode" or bocm
  34566. +    :-), and c++-mode.el, version 2, which I have been maintaining
  34567. +    since 1992.  cc-mode represents a significant milestone in the
  34568. +    mode's life.  It has been fully merged back with Emacs 19's
  34569. +    c-mode.el. Also a new, more intuitive and flexible mechanism for
  34570. +    controlling indentation has been developed.  More on this below.
  34571. +
  34572. +    You can now use cc-mode to edit K&R and ANSI C, most ARM C++, and
  34573. +    Objective-C programs.  See below for limitations.
  34574. +
  34575. +    In lieu of a texinfo manual (which is in the works -- volunteers
  34576. +    are desperately sought!), this file will describe the following:
  34577. +
  34578. +        * how to get started using cc-mode
  34579. +    * how to customize the new indentation engine
  34580. +    * the differences between cc-mode.el and bocm c-mode.el
  34581. +    * the differences between cc-mode.el and c++-mode.el.
  34582. +
  34583. +    Note that the name of the file is cc-mode.el, and I'll often refer
  34584. +    to the mode as cc-mode, but there really is no top level cc-mode
  34585. +    entry point.  I call it cc-mode simply to differentiate it from
  34586. +    c-mode.el.  All of the variables, commands, and functions in
  34587. +    cc-mode are prefixed with c-<thing>, and c-mode, c++-mode, and
  34588. +    objc-mode entry points are provided.  This file is intended to be
  34589. +    a replacement for c-mode.el and c++-mode.el -- you should be able
  34590. +    to remove them and dump Emacs with cc-mode.el instead.  See the
  34591. +    file DUMPING for details on how to do this.
  34592. +
  34593. +    The major version number was incremented to 4 with the addition of
  34594. +    objc-mode.
  34595. +
  34596. +    This distribution contains release 4.85 of cc-mode.  See below for
  34597. +    a list of changes since the last release version 4.35.  See the
  34598. +    MANIFEST for a list of files that should have been included in
  34599. +    this distribution.
  34600. +
  34601. +    XEmacs 19.11 (formerly Lucid Emacs) now comes with cc-mode.el 4.85
  34602. +    dumped in the executable.  It has completely replaced c-mode.el
  34603. +    and c++-mode.el.  Both XEmacs and this distribution now contain a
  34604. +    new file called cc-compat.el which should ease your transition
  34605. +    from bocm to cc-mode.  It comes unguaranteed and unsupported.
  34606. +
  34607. +    Note also that I am moving to a new job!  I don't yet know what
  34608. +    the state of the mailing lists will be, but for a short while, I
  34609. +    expect mail will get forwarded to my new address, so please
  34610. +    continue to send bug reports, add/drop messages to the old
  34611. +    addresses.  I'll make the appropriate announcements to the various
  34612. +    newsgroups when I know more what's going to happen.  My
  34613. +    *tentative* new email address is given above.  No guarantees that
  34614. +    will really be it, as I don't start the job until Sept. 19, 1994.
  34615. +    Don't try sending mail there at least until after that date.
  34616. +
  34617. +
  34618. +* Getting Started
  34619. +
  34620. +    cc-mode.el works well with the 2 main branches of Emacs 19, XEmacs
  34621. +    (former Lucid Emacs) and the Emacs 19 maintained by the FSF.
  34622. +    FSF's Emacs 19 users will want to use Emacs version 19.21 or
  34623. +    better, XEmacs/Lucid users will want 19.6 or better.  cc-mode.el
  34624. +    works moderately well with Emacs 18, if you use the cc-mode-18.el
  34625. +    compatibility file.  A word of warning though, Emacs 18 lacks some
  34626. +    fundamental functionality that makes Emacs 18 support a losing
  34627. +    battle.  Hence it is no longer supported and it is highly
  34628. +    recommended that you upgrade to Emacs 19.  If you use cc-mode
  34629. +    under Emacs 18, you're on your own.  With cc-mode version 5, Emacs
  34630. +    18 support will be dropped altogether.
  34631. +
  34632. +    The first thing you want to do is put cc-mode.el somewhere on your
  34633. +    load-path where Emacs can find it.  Do a "C-h v load-path" to see
  34634. +    all the directories Emacs looks at when loading a file.  If none
  34635. +    of these directories are appropriate, create a new directory and
  34636. +    add it to your load-path:
  34637. +
  34638. +        [in the shell]
  34639. +    % cd
  34640. +    % mkdir mylisp
  34641. +    % mv cc-mode.el mylisp
  34642. +    % cd mylisp
  34643. +
  34644. +    [in your .emacs file add]
  34645. +    (setq load-path (cons "~/mylisp" load-path))
  34646. +
  34647. +    Next you want to byte-compile cc-mode.el.  The mode uses a lot of
  34648. +    macros so if you don't byte-compile it, things will be unbearably
  34649. +    slow.  YOU CAN IGNORE ALL BYTE-COMPILER WARNINGS!  They are the
  34650. +    result of the multi-Emacs support and none of the warnings have
  34651. +    any effect on operation. Let me say this again: YOU REALLY CAN
  34652. +    IGNORE ALL BYTE-COMPILER WARNINGS!
  34653. +
  34654. +    Here's what to do to byte-comple the file [in emacs]:
  34655. +
  34656. +    M-x byte-compile-file RET ~/mylisp/cc-mode.el RET
  34657. +
  34658. +    Most users will probably be running an Emacs that already has bocm
  34659. +    c-mode.el dumped.  You will not want to use this, or any older
  34660. +    releases of c++-mode.el if you use cc-mode.el.  If your Emacs is
  34661. +    dumped with either of these files you first need to make Emacs
  34662. +    "forget" about those older modes.
  34663. +
  34664. +    If you can do a "C-h v c-mode-map" you probably need to add these
  34665. +    lines at the top of your .emacs file:
  34666. +
  34667. +        (fmakunbound 'c-mode)
  34668. +        (makunbound 'c-mode-map)
  34669. +        (fmakunbound 'c++-mode)
  34670. +        (makunbound 'c++-mode-map)
  34671. +    (makunbound 'c-style-alist)
  34672. +
  34673. +    After those lines you will want to add the following autoloads to
  34674. +    your .emacs file so that cc-mode gets loaded at the right time:
  34675. +
  34676. +        (autoload 'c++-mode  "cc-mode" "C++ Editing Mode" t)
  34677. +        (autoload 'c-mode    "cc-mode" "C Editing Mode" t)
  34678. +        (autoload 'objc-mode "cc-mode" "Objective-C Editing Mode" t)
  34679. +
  34680. +    Important note: XEmacs 19.11 already have cc-mode.el dumped in
  34681. +    their Emacs, so if you are using that Emacs, do *not* add the
  34682. +    *makunbound or autoload lines above!
  34683. +
  34684. +    Next, you will want to set up Emacs so that it edits C files in
  34685. +    c-mode, C++ files in c++-mode, and Objective-C files in objc-mode.
  34686. +    All users (including XEmacs users) should add the following to
  34687. +    your .emacs file after the autoload lines above.  Note that this
  34688. +    assumes you'll be editing .h and .c files as C, .hh, .C, and .cc
  34689. +    files as C++, and .m files as Objective-C. Your mileage may vary:
  34690. +
  34691. +    (setq auto-mode-alist
  34692. +      (append '(("\\.C$"     . c++-mode)
  34693. +            ("\\.cc$"    . c++-mode)
  34694. +            ("\\.hh$"    . c++-mode)
  34695. +            ("\\.c$"     . c-mode)
  34696. +            ("\\.h$"     . c-mode)
  34697. +            ("\\.m$"  . objc-mode)
  34698. +           ) auto-mode-alist))
  34699. +
  34700. +    You may already have some or all of these settings on your
  34701. +    auto-mode-alist, but it won't hurt to put them on there again.
  34702. +
  34703. +    That's all you need. After you've done all this, you should quit
  34704. +    and restart Emacs.  The next time you visit a C, C++, or
  34705. +    Objective-C file you should be using cc-mode.  You can check this
  34706. +    easily by hitting "C-c C-v" in the c-mode, c++-mode, or objc-mode
  34707. +    buffer.  You should see this message in the echo area:
  34708. +
  34709. +        Using cc-mode version 4.85
  34710. +
  34711. +
  34712. +* New indentation engine
  34713. +
  34714. +    cc-mode has a new indentation engine, providing a simplified, yet
  34715. +    flexible and general mechanism for customizing indentation. It
  34716. +    breaks indentation calculation into two steps. First it tries to
  34717. +    figure out what kind of language construct its looking at, then it
  34718. +    applies a user defined offset to the current line based on the
  34719. +    type of construct it finds.
  34720. +
  34721. +    This section will briefly cover how indentation is calculated in
  34722. +    cc-mode. Only enough detail will be given so that you will know
  34723. +    how to customize indentation.  Plenty of examples will be given to
  34724. +    help you stylize your code, but more detailed examples will be
  34725. +    left to the texinfo manual (when it is complete) and your own
  34726. +    exploration.  You can also contact the help address given below.
  34727. +
  34728. +** Step 1: Syntactic Analysis
  34729. +
  34730. +    In the first step, cc-mode looks at the line you are currently
  34731. +    indenting and tries to determine the syntactic components of the
  34732. +    construct on that line.  cc-mode builds a list of these syntactic
  34733. +    components, where each component on the list contains a "syntactic
  34734. +    symbol" and a relative buffer position.  Syntactic symbols
  34735. +    describe elements of C/C++/Objc code such as `statement',
  34736. +    `substatement', `class-open', `class-close', `knr-argdecl', etc.
  34737. +    You can do a "C-h v c-offsets-alist" to see the entire list of
  34738. +    support syntactic symbols along with a description of the
  34739. +    constructs they represent.
  34740. +
  34741. +    Conceptually, a line of C/C++/Objc code is always indented
  34742. +    relative to the indentation of some line higher up in the buffer.
  34743. +    This is represented by the relative buffer positions in the
  34744. +    syntactic component list.
  34745. +
  34746. +    Here's an example. Suppose we had the following code in a c++-mode
  34747. +    buffer (the line numbers don't actually appear in the buffer):
  34748. +
  34749. +  Example 1:
  34750. +
  34751. +    1: void swap( int& a, int& b ) 
  34752. +    2: {
  34753. +    3:     int tmp = a;
  34754. +    4:     a = b;
  34755. +    5:     b = tmp;
  34756. +    6: }
  34757. +
  34758. +    We can use the command C-c C-s (c-show-syntactic-information) to
  34759. +    simply report what syntactic analysis is for a line.  If we hit
  34760. +    C-c C-s on line 4, we'd see in the echo area:
  34761. +
  34762. +        ((statement . 36))
  34763. +
  34764. +    This tells us that the line is a statement and it is indented
  34765. +    relative to buffer position 36, which happens to be the `i' in
  34766. +    "int" on line 3.  If you were to move point to line 3 and hit C-c
  34767. +    C-s, you would see:
  34768. +
  34769. +        ((defun-block-intro . 30))
  34770. +
  34771. +    This indicates that the `int' line is the first statement in a
  34772. +    block, and is indented relative to buffer position 30, which is
  34773. +    the brace just after the function header.
  34774. +
  34775. +    Here's another example:
  34776. +
  34777. +  Example 2:
  34778. +
  34779. +    1: int add( int val, int incr, int doit )
  34780. +    2: {
  34781. +    3:     if( doit )
  34782. +    4:         {
  34783. +    5:             return( val + incr );
  34784. +    6:         }
  34785. +    7:     return( val );
  34786. +    8: }
  34787. +
  34788. +    Hitting C-c C-s on line 4 gives us:
  34789. +
  34790. +        ((substatement-open . 46))
  34791. +
  34792. +    which tells us that this is a brace that `opens' a substatement
  34793. +    block. By the way, a `substatement' indicates the line after an
  34794. +    if, else, while, do, switch, and for statements.  See the variable
  34795. +    c-offsets-alist for a full description of the available syntactic
  34796. +    symbols.
  34797. +
  34798. +    Syntactic analysis lists can contain more than one element
  34799. +    (i.e. cons cell), and syntactic symbols need not have relative
  34800. +    buffer positions.
  34801. +
  34802. +** Step 2: Indentation Calculation
  34803. +
  34804. +    Indentation for the current line is calculated using the list of
  34805. +    syntactic components derived in step 1 above.  Each component
  34806. +    contributes to the final total indentation of the line in two
  34807. +    ways.
  34808. +
  34809. +    First, the syntactic symbol is looked up in the c-offsets-alist
  34810. +    variable, which is an association list of syntactic symbols and
  34811. +    the offsets to apply for those symbols.  This offset is added to
  34812. +    the running total.
  34813. +
  34814. +    Second, if the component has a relative buffer position, cc-mode
  34815. +    adds the column number of that position to the running total.  By
  34816. +    adding up the offsets and columns for every syntactic component on
  34817. +    the list, the final total indentation for the current line is
  34818. +    computed.
  34819. +
  34820. +    Lets use our two code examples above to see how this works.  Just
  34821. +    as a reminder and a convenience the code is presented again here.
  34822. +
  34823. +  Example 1:
  34824. +
  34825. +    1: void swap( int& a, int& b ) 
  34826. +    2: {
  34827. +    3:     int tmp = a;
  34828. +    4:     a = b;
  34829. +    5:     b = tmp;
  34830. +    6: }
  34831. +
  34832. +    Lets say point is on line 3 and we hit the TAB key to re-indent
  34833. +    the line.  Remember that the syntactic component list for that
  34834. +    line is:
  34835. +
  34836. +        ((defun-block-intro . 30))
  34837. +
  34838. +    So first cc-mode is going to look up `defun-block-intro' in the
  34839. +    c-offsets-alist variable.  Lets say it find the integer `4'; it
  34840. +    adds this to the running total (initialized to zero), yielding a
  34841. +    running total indentation of 4 spaces.
  34842. +
  34843. +    Next cc-mode goes to buffer position 30 and asks for the current
  34844. +    column.  Since the brace at buffer position 30 is in column zero,
  34845. +    it adds 0 to the running total, and since there is only one
  34846. +    syntactic component on the list for this line, the total
  34847. +    indentation for the line is 4 spaces.
  34848. +
  34849. +  Example 2:
  34850. +
  34851. +    1: int add( int val, int incr, int doit )
  34852. +    2: {
  34853. +    3:     if( doit )
  34854. +    4:         {
  34855. +    5:             return( val + incr );
  34856. +    6:         }
  34857. +    7:     return( val );
  34858. +    8: }
  34859. +
  34860. +    If we were to hit TAB on line 4 in example 2 above, the same basic
  34861. +    process is performed, despite the differences in the syntactic
  34862. +    component list.  Remember that the list for this line is:
  34863. +
  34864. +        ((substatement-open . 46))
  34865. +
  34866. +    Here, cc-mode first looks up the `substatement-open' symbol in
  34867. +    c-offsets-alist, for which it might find `4'.  At this point the
  34868. +    running total is 4 (0 + 4 = 4).  cc-mode then goes to buffer
  34869. +    position 46, which is the `i' in "if" on line 3.  This character
  34870. +    is in the fourth column on that line so adding this to the running
  34871. +    total, yields an indentation for the line of 8 spaces.
  34872. +
  34873. +    Simple, huh?
  34874. +
  34875. +    Actually, the mode usually just does The Right Thing without you
  34876. +    having to think about it in this much detail.  But when
  34877. +    customizing indentation, its good to have a general idea of the
  34878. +    indentation model being used.
  34879. +
  34880. +
  34881. +* Customizing Indentation
  34882. +
  34883. +    The c-offsets-alist variable is where you customize all your
  34884. +    indentations.  You simply need to decide what additional offset
  34885. +    you want to add for every syntactic symbol.  You can use the
  34886. +    command C-c C-o (c-set-offset) as the way to set offsets, both
  34887. +    interactively and from your mode hook.  Also, you can set up
  34888. +    "styles" of indentation just like in standard c-mode.el.  But
  34889. +    you'll probably find that most of the offsets are right for your
  34890. +    style.
  34891. +
  34892. +    In fact, the offset values in c-offsets-alist can be an integer, a
  34893. +    function or variable name, or one of the following symbols: +, -,
  34894. +    ++, or --, indicating positive or negative multiples of the
  34895. +    variable c-basic-offset.  Thus if you like the general indentation
  34896. +    levels, but you use 3 spaces instead of 4 spaces per level, you
  34897. +    can probably achieve your style by just changing c-basic-offset
  34898. +    like so (in your .emacs file):
  34899. +
  34900. +        (setq c-basic-offset 3)
  34901. +
  34902. +    The offset value can also be a function, and this can really give
  34903. +    power users a lot of flexibility in customizing indentation.
  34904. +
  34905. +    As an example of how to customize indentation, lets change the
  34906. +    style of example 2 above from:
  34907. +
  34908. +    1: int add( int val, int incr, int doit )
  34909. +    2: {
  34910. +    3:     if( doit )
  34911. +    4:         {
  34912. +    5:             return( val + incr );
  34913. +    6:         }
  34914. +    7:     return( val );
  34915. +    8: }
  34916. +
  34917. +    to:
  34918. +
  34919. +    1: int add( int val, int incr, int doit )
  34920. +    2: {
  34921. +    3:     if( doit )
  34922. +    4:     {
  34923. +    5:         return( val + incr );
  34924. +    6:     }
  34925. +    7:     return( val );
  34926. +    8: }
  34927. +
  34928. +    Since line 4 is the start of the construct we want to re-indent,
  34929. +    we first move to that line and hit C-c C-s:
  34930. +
  34931. +        ((substatement-open . 46))
  34932. +
  34933. +    So we know want to change the `substatement-open' indentation.  To
  34934. +    do this interactively, just hit C-c C-o.  This prompts you for the
  34935. +    syntactic symbol to change, giving you a reasonable default, in
  34936. +    this case, substatement-open, which is just the syntactic symbol
  34937. +    we want to change!
  34938. +
  34939. +    After you hit return cc-mode will then prompt you for the new
  34940. +    offset value, with the old value as the default.  Hit backspace to
  34941. +    delete the old value, then hit "0" and then return.  This moves
  34942. +    the construct one level of indentation to the left.
  34943. +
  34944. +    To check your changes quickly, just hit C-c C-q to reindent the
  34945. +    entire function.  If this does what you want, you can put the
  34946. +    following lisp in your c-mode-common-hook (see below for an
  34947. +    example):
  34948. +
  34949. +        (c-set-offset 'substatement-open 0)
  34950. +
  34951. +    You could also set up a "style" that sets this and all your
  34952. +    customizations in a convenient manner.  See the variable
  34953. +    c-style-alist and the command c-set-style for more information, or
  34954. +    take a look at the sample .emacs file below.
  34955. +    
  34956. +
  34957. +* Frequently Asked Questions
  34958. +
  34959. +    Q. How do I re-indent the whole file?
  34960. +    A. Visit the file and hit "C-x h" to mark the whole buffer. Then
  34961. +       hit "ESC C-\" to re-indent the entire region which you've just
  34962. +       marked.
  34963. +
  34964. +    Q. How do I re-indent the entire function? ESC C-x doesn't work
  34965. +    A. ESC C-x is reserved for future Emacs use.  To re-indent the
  34966. +       entire function hit C-c C-q.
  34967. +
  34968. +    Q. How do I re-indent the current block?
  34969. +    A. First move to the brace which opens the block with "ESC C-u",
  34970. +       then re-indent that expression with "ESC C-q".
  34971. +
  34972. +    Q. Why doesn't the RET key indent the line to where the new text
  34973. +       should go after inserting the newline?
  34974. +    A. Emacs' convention is that RET just add a new line, and that LFD
  34975. +       adds a newline and indents.  You can make RET do this too by
  34976. +       adding this to your c-mode-common-hook (see the sample .emacs
  34977. +       file below):
  34978. +
  34979. +       (define-key c-mode-map "\C-m" 'newline-and-indent)
  34980. +
  34981. +       This is a very common question. :-) If you want this to be the
  34982. +       default behavior, don't lobby me, lobby RMS!
  34983. +
  34984. +    Q. I put (c-set-offset 'substatement-open 0) in my .emacs file and
  34985. +       I get an error saying that c-set-offset's function definition is
  34986. +       void.
  34987. +    A. Since cc-mode is autoloaded, it is typically not loaded into
  34988. +       your Emacs session by the time of the c-set-offset call.
  34989. +       Instead of putting this in your top-level .emacs file, put the
  34990. +       call to c-set-offset in your c-mode-common-hook.  See the
  34991. +       sample .emacs file below for details.
  34992. +
  34993. +
  34994. +;; Sample .emacs file
  34995. +
  34996. +;; Of course there are lots of other indentation features that I
  34997. +;; haven't touched on here.  Until the texinfo is complete, you're
  34998. +;; going to have to explore these on your own.  Here's a sample .emacs
  34999. +;; file that might help you along the way.  Just hit "C-x C-p", then
  35000. +;; "ESC w" to copy this region, then paste it into your .emacs file
  35001. +;; with "C-y".  You may want to change some of the actual values.
  35002. +
  35003. +(defconst my-c-style
  35004. +  '("PERSONAL"
  35005. +    (c-tab-always-indent           . t)
  35006. +    (c-comment-only-line-offset    . 4)
  35007. +    (c-hanging-braces-alist        . ((substatement-open after)
  35008. +                      (brace-list-open)))
  35009. +    (c-hanging-colons-alist        . ((member-init-intro before)
  35010. +                      (inher-intro)
  35011. +                      (case-label after)
  35012. +                      (label after)
  35013. +                      (access-label after)))
  35014. +    (c-cleanup-list                . (scope-operator
  35015. +                      empty-defun-braces
  35016. +                      defun-close-semi))
  35017. +    (c-offsets-alist               . ((arglist-close     . c-lineup-arglist)
  35018. +                      (substatement-open . 0
  35019. +                      (case-label        . 4)
  35020. +                      (block-open        . 0)
  35021. +                      (knr-argdecl-intro . -)))
  35022. +    (c-echo-syntactic-information-p . t)
  35023. +    )
  35024. +  "My C Programming Style")
  35025. +
  35026. +;; Customizations for both c-mode and c++-mode
  35027. +(defun my-c-mode-common-hook ()
  35028. +  ;; set up for my perferred indentation style, but  only do it once
  35029. +  (let ((my-style "PERSONAL"))
  35030. +    (or (assoc my-style c-style-alist)
  35031. +    (setq c-style-alist (cons my-c-style c-style-alist)))
  35032. +    (c-set-style my-style))
  35033. +  ;; offset customizations not in my-c-style
  35034. +  (c-set-offset 'member-init-intro '++)
  35035. +  ;; other customizations
  35036. +  (setq tab-width 8
  35037. +    ;; this will make sure spaces are used instead of tabs
  35038. +    indent-tabs-mode nil)
  35039. +  ;; we like auto-newline and hungry-delete
  35040. +  (c-toggle-auto-hungry-state 1)
  35041. +  ;; keybindings for C, C++, and Objective-C.  We can put these in
  35042. +  ;; c-mode-map because c++-mode-map and objc-mode-map inherit it
  35043. +  (define-key c-mode-map "\C-m" 'newline-and-indent)
  35044. +  )
  35045. +
  35046. +;; the following only works in Emacs 19
  35047. +;; Emacs 18ers can use (setq c-mode-common-hook 'my-c-mode-common-hook)
  35048. +(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
  35049. +
  35050. +
  35051. +* User level differences between cc-mode.el and c-mode.el (as
  35052. +  distributed with FSF Emacs 19.22).
  35053. +
  35054. +    New indentation engine (described above).
  35055. +
  35056. +    Direct support for C++ and Objective-C editing.
  35057. +
  35058. +    Menubar support (Emacs 19 only).
  35059. +
  35060. +    New variables:
  35061. +        c-mode-common-hook
  35062. +        c-strict-semantics-p
  35063. +        c-echo-semantic-information-p
  35064. +        c-basic-offset
  35065. +        c-offsets-alist
  35066. +        c-comment-only-line-offset
  35067. +        c-block-comments-indent-p
  35068. +        c-cleanup-list
  35069. +        c-hanging-braces-alist
  35070. +        c-hanging-colons-alist
  35071. +        c-untame-characters (Emacs 18 users only)
  35072. +        c-special-indent-hook
  35073. +        c-delete-function
  35074. +        c-electric-pound-behavior
  35075. +        c-backscan-limit (Emacs 18 users only)
  35076. +
  35077. +    Expanded semantics for variables:
  35078. +        c-tab-always-indent
  35079. +    c-style-alist
  35080. +
  35081. +    New minor-mode features: auto-newline and hungry-delete-key (do
  35082. +    "C-h f c-toggle-auto-hungry-state RET" for more info).
  35083. +
  35084. +    New commands:
  35085. +        c-toggle-auto-state         (C-c C-a)
  35086. +    c-toggle-hungry-state       (C-c C-d)
  35087. +    c-toggle-auto-hungry-state  (C-c C-t)
  35088. +    c-electric-delete           (DEL)
  35089. +        c-electric-slash            (/)
  35090. +    c-electric-star             (*)
  35091. +    c-set-offset                (C-c C-o)
  35092. +    c-forward-into-nomenclature
  35093. +    c-backward-into-nomenclature
  35094. +    c-scope-operator
  35095. +    c-tame-insert               (Emacs 18 only)
  35096. +    c-tame-comments             (Emacs 18 only)
  35097. +    c-indent-defun              (C-c C-q)
  35098. +    c-show-semantic-information (C-c C-s)
  35099. +    c-version                   (C-c C-v)
  35100. +    c-submit-bug-report         (C-c C-b)
  35101. +
  35102. +    Renamed commands:
  35103. +        electric-c-brace      => c-electric-brace
  35104. +    electric-c-semi       => c-electric-semi&comma
  35105. +    electric-c-sharp-sign => c-electric-pound
  35106. +    mark-c-function       => c-mark-function
  35107. +        electric-c-terminator => c-electric-colon
  35108. +    indent-c-exp          => c-indent-exp
  35109. +    set-c-style           => c-set-style
  35110. +
  35111. +    Obsolete variables:
  35112. +        c-indent-level
  35113. +    c-brace-imaginary-offset
  35114. +    c-brace-offset
  35115. +    c-argdecl-indent
  35116. +    c-label-offset
  35117. +    c-continued-statement-offset
  35118. +    c-continued-brace-offset
  35119. +
  35120. +
  35121. +* User level differences between cc-mode.el and c++-mode.el 2.353
  35122. +  (a.k.a cplus-md1.el in FSF 19):
  35123. +
  35124. +    New Indentation Engine (described above).
  35125. +
  35126. +    General rename of all variables and defuns from c++-<thing> to
  35127. +    c-<thing>.  I don't list them all individually here.
  35128. +
  35129. +    Direct support for C and Objective-C editing.
  35130. +
  35131. +    Menubar support (Emacs 19 only).
  35132. +
  35133. +    New variables:
  35134. +        c-strict-semantics-p
  35135. +    c-echo-semantic-information-p
  35136. +    c-basic-offset
  35137. +    c-offsets-alist
  35138. +    c-style-alist
  35139. +
  35140. +    New commands:
  35141. +        c-set-offset
  35142. +    c-set-style
  35143. +    c-fill-paragraph
  35144. +    c-forward-into-nomenclature
  35145. +    c-backward-into-nomenclature
  35146. +    c-scope-operator
  35147. +    c-beginning-of-statement
  35148. +    c-end-of-statement
  35149. +    c-up-conditional
  35150. +    c-backward-conditional
  35151. +    c-forward-conditional
  35152. +    c-show-semantic-information
  35153. +
  35154. +    Other renamed commands/variables:
  35155. +        c++-c-mode                    => c-mode
  35156. +    c++-C-block-comments-indent-p => c-block-comments-indent-p
  35157. +        c++-hanging-braces            => c-hanging-braces-alist
  35158. +    c++-hanging-member-init-colon => c-hanging-colons-alist
  35159. +        c++-default-macroize-column   => c-backslash-column
  35160. +    c++-macroize-region           => c-backslash-region
  35161. +        c++-electric-semi             => c-electric-semi&comma
  35162. +
  35163. +    Obsolete variables/commands:
  35164. +        c++-always-arglist-indent-p
  35165. +    c++-block-close-brace-offset
  35166. +    c++-paren-as-block-close-p
  35167. +    c++-continued-member-init-offset
  35168. +    c++-member-init-indent
  35169. +    c++-friend-offset
  35170. +    c++-access-specifier-offset
  35171. +    c++-empty-arglist-indent
  35172. +    c++-auto-hungry-initial-state
  35173. +    c++-auto-hungry-toggle
  35174. +    c++-relative-offset-p
  35175. +    c++-match-header-strongly
  35176. +    c++-beginning-of-defun
  35177. +    c++-end-of-defun
  35178. +    c++-insert-header
  35179. +    c++-match-paren
  35180. +    c++-forward-sexp
  35181. +    c++-backward-sexp
  35182. +        c++-comment-region
  35183. +    c++-uncomment-region
  35184. +
  35185. +
  35186. +* For more information
  35187. +
  35188. +    The best thing to do at this point is poke around the source code.
  35189. +    Eventually there will be an extensive texinfo manual describing
  35190. +    the mode in greater detail.  Can I say this again?  Volunteers to
  35191. +    help finish the manual are desperately sought!
  35192. +
  35193. +
  35194. +* Requirements
  35195. +
  35196. +    cc-mode.el requires reporter.el for submission of bug reports.
  35197. +    reporter.el is distributed with the latest FSF and Lucid Emacs
  35198. +    19's.  See below for Emacs Lisp Archive anonymous ftp'ing
  35199. +    instructions for those of you who are using older Emacsen.
  35200. +
  35201. +
  35202. +* Limitations and Known Bugs
  35203. +
  35204. +    multi-line macros are not handled properly.
  35205. +
  35206. +    re-indenting large regions or expressions can be slow.
  35207. +
  35208. +    Use with Emacs 18 can be slow and annoying. You should seriously
  35209. +    consider upgrading to Emacs 19.
  35210. +
  35211. +    indentation of some nested switch constructs are known to be
  35212. +    broken.
  35213. +
  35214. +    there is still some weird behavior when filling C block comments.
  35215. +    My suggestion is to check out add-on fill packages such as
  35216. +    filladapt, available at the elisp archive.
  35217. +
  35218. +
  35219. +* Electronic Mail
  35220. +
  35221. +    To report bugs, use the C-c C-b (c-submit-bug-report) command.
  35222. +    This provides vital information I need to reproduce your problem.
  35223. +    Make sure you include a stripped down code example.
  35224. +
  35225. +    For other help or suggestions, send a message to
  35226. +    cc-mode-help@anthem.nlm.nih.gov.
  35227. +
  35228. +    To get on the beta testers list, send an add message to
  35229. +    cc-mode-victims-request@anthem.nlm.nih.gov.  Note that this is a
  35230. +    fairly technical discussion list so you should be moderately Emacs
  35231. +    lisp fluent and have anonymous ftp access.
  35232. +
  35233. +    There is also an announce only list where you will get beta
  35234. +    version update diffs, but will not join in the technical
  35235. +    discussions.  You should still have anon-ftp, and you shouldn't
  35236. +    expect beta releases to be as stable as public releases.  Send an
  35237. +    add message to cc-mode-announce-request@anthem.nlm.nih.gov to be
  35238. +    added to this list.
  35239. +
  35240. +    Please use these addresses instead of my personal address so I can
  35241. +    keep track of all the incoming mail!
  35242. +
  35243. +
  35244. +* Here's the Emacs Lisp Archive information for reporter.el:
  35245. +
  35246. +     GNU Emacs Lisp Code Directory Apropos -- "reporter"
  35247. +"~/" refers to archive.cis.ohio-state.edu:/pub/gnu/emacs/elisp-archive/
  35248. +
  35249. +reporter (1.23)          02-Feb-1993
  35250. +     Barry A. Warsaw, <bwarsaw@cen.com>
  35251. +     ~/misc/reporter.el.Z
  35252. +     Customizable bug reporting of lisp programs.
  35253. +
  35254. +
  35255. +* User visible changes since 4.35
  35256. +
  35257. +** c-set-offset and related functions and variables can now accept
  35258. +   variable symbols.  Also ++ and -- which mean 2* positive and
  35259. +   negative c-basic-offset respectively.
  35260. +
  35261. +** new variable, c-recognize-knr-p, which controls whether K&R C
  35262. +   contructs will be recognized.  Trying to recognize K&R constructs
  35263. +   is a time hog so if you're programming strictly in ANSI C, set this
  35264. +   variable to nil (it should already be nil in c++-mode).
  35265. +
  35266. +** new variable, c-hanging-comment-ender-p for controlling
  35267. +   c-fill-paragraph's behavior.
  35268. +
  35269. +** new syntactic symbol: statement-case-open.  This is assigned to
  35270. +   lines containing an open brace just after a case/default label.
  35271. +
  35272. +** new variable, c-progress-interval, which controls minibuffer update
  35273. +   message displays during long re-indention.  This is a new feature
  35274. +   which prints percentage complete messages at specified intervals.
  35275. +
  35276. +** Better menu titles in FSF's Emacs.
  35277. +
  35278. +** Improved selective-display compatibility.
  35279. +
  35280. +** Bug fixes, bug fixes, bug fixes!
  35281. +
  35282. +** Some performance enhancements, but nothing radically better.
  35283. +
  35284. +
  35285. +* User visible changes since 3.349
  35286. +
  35287. +** New major-mode: objc-mode for Objective-C editing. Also added,
  35288. +   objc-mode-hook, objc-mode-abbrev-table, objc-mode-map, and
  35289. +   objc-mode-syntax-table.
  35290. +
  35291. +** New syntactic symbols objc-method-intro, objc-method-args, and
  35292. +   objc-method-call-cont have been added, with appropriate offsets in
  35293. +   c-offsets-alist.
  35294. +
  35295. +** Ellemtel style puts substatement-open braces on their own line.
  35296. +
  35297. +** Better conformance to GNU coding style. New line up function set on
  35298. +   arglist-close for GNU style: c-lineup-arglist-intro-after-paren.
  35299. +
  35300. +** bracket lists are treated like paren lists (i.e. they are given the
  35301. +   appropriate arglist-* syntax).
  35302. +
  35303. +** some changes to recognition of brace-lists. When an otherwise
  35304. +   brace-list-entry or brace-list-intro is found to start with an open
  35305. +   brace, the line is given brace-list-open syntax instead.
  35306. +
  35307. +** brace-list-intro and brace-list-entry are hangable via
  35308. +   c-hanging-braces-alist.
  35309. +
  35310. +** c-set-offset provides a reasonable default in the prompt.
  35311. +
  35312. +** various name changes to commands and variables for consistency of
  35313. +   terminology.  The changes are:
  35314. +
  35315. +   Cmd/Var   Old Name                       New Name
  35316. +   -------   --------                       --------
  35317. +   [var]     c-strict-semantics-p           c-strict-syntax-p
  35318. +   [var]     c-echo-semantic-information-p  c-echo-syntactic-information-p
  35319. +   [var]     c-semantics                    c-syntactic-context
  35320. +   [cmd]     c-show-syntactic-information   c-show-syntactic-information
  35321. +
  35322. +   some other, non-user-level name changes were effected as well
  35323. +
  35324. +** Usual gobs of bug fixes.
  35325. +
  35326. +
  35327. +* User-visible Changes Since 3.304
  35328. +
  35329. +** You can now specify `hanginess' of close braces. See
  35330. +   c-hanging-braces-alist.
  35331. +
  35332. +** New syntactic symbol `substatement-open' to control indentation of
  35333. +   braces which open a substatement block (i.e. if, for, ...).  C-c
  35334. +   C-s used to call these ((block-open . ??) (substatement . ??)), but
  35335. +   now they are just ((substatement-open . ??)).  WARNING: THIS CHANGE
  35336. +   MAY AFFECT YOUR CURRENT INDENTATION SETTINGS.
  35337. +
  35338. +** c-adaptive-block-open lineup function is removed. Obsoleted by
  35339. +   substatement-open change above.
  35340. +
  35341. +** New "Default" style returns indentation variables to their default
  35342. +   values.
  35343. +
  35344. +** Support for Lucid Emacs 19.10's mode-popup-menu convention.
  35345. +
  35346. +** c-macro-expand command put on C-c C-e.
  35347. +
  35348. +** New buffer-local variable c-comment-start-regexp. Useful for using
  35349. +   cc-mode as a basis for other C-like languages.
  35350. +
  35351. +** c++-mode handles try/catch blocks.  Assigns them `substatement'
  35352. +   syntax similar to if/for/while/...
  35353. +
  35354. +** c-indent-via-language-element renamed to c-indent-line for
  35355. +   awk-mode, BOCM compatibility.
  35356. +
  35357. +** Usual gobs of bug fixes.
  35358. +
  35359. +
  35360. +* User-visible Changes Since 3.229
  35361. +
  35362. +** Tons 'o performance enhancements.
  35363. +
  35364. +** Tons 'o bug fixes.
  35365. +
  35366. +** Improved support for nested structs in C.
  35367. +
  35368. +** Emacs 18 support has been split out into a separate file,
  35369. +   cc-mode-18.el. Emacs 18 support is a losing battle, so after this
  35370. +   release, I am not going to actively maintain cc-mode for Emacs 18,
  35371. +   although I will incorporate contributed patches to cc-mode-18.el.
  35372. +
  35373. +** The last of the dependencies on c-mode.el should be removed.
  35374. +
  35375. +** New syntactic symbol, defun-block-intro, which controls the
  35376. +   indentation for the first line in a top-level function or class.
  35377. +
  35378. +** c-indent-defun moved to C-c C-q
  35379. +
  35380. +** c-scope-operator moved to C-c :
  35381. +
  35382. +** New coding style added to c-style-alist: Ellemtel.  This supports
  35383. +   the C++ coding style defined in "Programming in C++, Rules and
  35384. +   Recommendations", Erik Nyquist and Mats Henricson, Ellemtel,
  35385. +   ftp'able from euagate.eua.ericsson.se.
  35386. +
  35387. +** c-set-style now modifies the global values by default. Buffer local
  35388. +   versions are made when optional universal argument is given.
  35389. +
  35390. +** New variable: c-inhibit-startup-warnings-p
  35391. +
  35392. +** New custom indentation functions, which are not used by default:
  35393. +   c-lineup-math and c-lineup-runin-statements.  The former lines up
  35394. +   math statement-cont lines after the equals sign.  The latter lines
  35395. +   up statement lines when the first statement in a block appears on
  35396. +   the same line as the block opening brace.
  35397. diff -rup --new-file baseline/fsf/emacs/site-lisp/cc-compat.el amiga/fsf/emacs/site-lisp/cc-compat.el
  35398. --- baseline/fsf/emacs/site-lisp/cc-compat.el    Wed Dec 31 17:00:00 1969
  35399. +++ amiga/fsf/emacs/site-lisp/cc-compat.el    Sat Sep 28 00:00:00 1996
  35400. @@ -0,0 +1,155 @@
  35401. +;;; cc-compat.el --- cc-mode compatibility with c-mode.el confusion
  35402. +
  35403. +;; Author: 1994 Barry A. Warsaw, Century Computing, Inc. <bwarsaw@cen.com>
  35404. +;; Maintainer:    bwarsaw@cen.com
  35405. +;; Created:       August 1994
  35406. +;; Version:       1.2
  35407. +;; Last Modified: 1994/08/10 17:54:53
  35408. +;; Keywords: C++ C Objective-C cc-mode
  35409. +
  35410. +;; Copyright (C) 1994 Barry A. Warsaw
  35411. +
  35412. +;; This file is not part of GNU Emacs.
  35413. +
  35414. +;; This program is free software; you can redistribute it and/or modify
  35415. +;; it under the terms of the GNU General Public License as published by
  35416. +;; the Free Software Foundation; either version 2 of the License, or
  35417. +;; (at your option) any later version.
  35418. +;; 
  35419. +;; This program is distributed in the hope that it will be useful,
  35420. +;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  35421. +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  35422. +;; GNU General Public License for more details.
  35423. +;; 
  35424. +;; You should have received a copy of the GNU General Public License
  35425. +;; along with this program; if not, write to the Free Software
  35426. +;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  35427. +
  35428. +;;; Commentary:
  35429. +;;
  35430. +;; Boring old c-mode.el (BOCM) is confusion and brain melt. cc-mode.el
  35431. +;; is clarity of thought and purity of chi. If you are still unwilling
  35432. +;; to accept enlightenment, this might help, or it may prolong your
  35433. +;; agony.
  35434. +;;
  35435. +;; To use, add the following to your c-mode-hook:
  35436. +;;
  35437. +;; (require 'cc-compat)
  35438. +;; (c-set-style "BOCM")
  35439. +
  35440. +;; LCD Archive Entry:
  35441. +;; cc-compat|Barry A. Warsaw|bwarsaw@cen.com
  35442. +;; |cc-mode compatibility with c-mode.el confusion
  35443. +;; |1994/08/10 17:54:53|1.2|
  35444. +
  35445. +;;; Code:
  35446. +
  35447. +
  35448. +;; In case c-mode.el isn't loaded
  35449. +(defvar c-indent-level 2
  35450. +  "*Indentation of C statements with respect to containing block.")
  35451. +(defvar c-brace-imaginary-offset 0
  35452. +  "*Imagined indentation of a C open brace that actually follows a statement.")
  35453. +(defvar c-brace-offset 0
  35454. +  "*Extra indentation for braces, compared with other text in same context.")
  35455. +(defvar c-argdecl-indent 5
  35456. +  "*Indentation level of declarations of C function arguments.")
  35457. +(defvar c-label-offset -2
  35458. +  "*Offset of C label lines and case statements relative to usual indentation.")
  35459. +(defvar c-continued-statement-offset 2
  35460. +  "*Extra indent for lines not starting new statements.")
  35461. +(defvar c-continued-brace-offset 0
  35462. +  "*Extra indent for substatements that start with open-braces.
  35463. +This is in addition to c-continued-statement-offset.")
  35464. +
  35465. +
  35466. +
  35467. +;; these offsets are taken by brute force testing c-mode.el, since
  35468. +;; there's no logic to what it does.
  35469. +(let* ((offsets
  35470. +    '((defun-block-intro     . cc-block-intro-offset)
  35471. +      (statement-block-intro . cc-block-intro-offset)
  35472. +      (defun-open            . 0)
  35473. +      (class-open            . 0)
  35474. +      (inline-open           . c-brace-offset)
  35475. +      (block-open            . c-brace-offset)
  35476. +      (block-close           . cc-block-close-offset)
  35477. +      (brace-list-open       . c-brace-offset)
  35478. +      (substatement-open     . cc-substatement-open-offset)
  35479. +      (substatement          . c-continued-statement-offset)
  35480. +      (knr-argdecl-intro     . c-argdecl-indent)
  35481. +      (case-label            . c-label-offset)
  35482. +      (access-label          . c-label-offset)
  35483. +      (label                 . c-label-offset)
  35484. +      )))
  35485. +  (if (assoc "BOCM" c-style-alist)
  35486. +      (setcdr (assoc "BOCM" c-style-alist)
  35487. +          (list (cons 'c-offsets-alist offsets)))
  35488. +    (setq c-style-alist
  35489. +      (cons (list "BOCM" (cons 'c-offsets-alist offsets))
  35490. +        c-style-alist)))
  35491. +  )
  35492. +
  35493. +(defun cc-block-intro-offset (langelem)
  35494. +  ;; taken directly from calculate-c-indent confusion
  35495. +  (save-excursion
  35496. +    (c-backward-syntactic-ws)
  35497. +    (if (= (preceding-char) ?{)
  35498. +    (forward-char -1)
  35499. +      (goto-char (cdr langelem)))
  35500. +    (let* ((curcol (save-excursion 
  35501. +             (goto-char (cdr langelem))
  35502. +             (current-column)))
  35503. +      (bocm-lossage
  35504. +       ;; If no previous statement, indent it relative to line
  35505. +       ;; brace is on.  For open brace in column zero, don't let
  35506. +       ;; statement start there too.  If c-indent-level is zero,
  35507. +       ;; use c-brace-offset + c-continued-statement-offset
  35508. +       ;; instead.  For open-braces not the first thing in a line,
  35509. +       ;; add in c-brace-imaginary-offset.
  35510. +       (+ (if (and (bolp) (zerop c-indent-level))
  35511. +          (+ c-brace-offset c-continued-statement-offset)
  35512. +        c-indent-level)
  35513. +          ;; Move back over whitespace before the openbrace.  If
  35514. +          ;; openbrace is not first nonwhite thing on the line,
  35515. +          ;; add the c-brace-imaginary-offset.
  35516. +          (progn (skip-chars-backward " \t")
  35517. +             (if (bolp) 0 c-brace-imaginary-offset))
  35518. +          ;; If the openbrace is preceded by a parenthesized exp,
  35519. +          ;; move to the beginning of that; possibly a different
  35520. +          ;; line
  35521. +          (progn
  35522. +        (if (eq (preceding-char) ?\))
  35523. +            (forward-sexp -1))
  35524. +        ;; Get initial indentation of the line we are on.
  35525. +        (current-indentation)))))
  35526. +      (- bocm-lossage curcol))))
  35527. +
  35528. +
  35529. +(defun cc-block-close-offset (langelem)
  35530. +  (save-excursion
  35531. +    (let* ((here (point))
  35532. +       bracep 
  35533. +       (curcol (progn
  35534. +             (goto-char (cdr langelem))
  35535. +             (current-column)))
  35536. +       (bocm-lossage (progn
  35537. +               (goto-char (cdr langelem))
  35538. +               (if (= (following-char) ?{)
  35539. +                   (setq bracep t)
  35540. +                 (goto-char here)
  35541. +                 (beginning-of-line)
  35542. +                 (backward-up-list 1)
  35543. +                 (forward-char 1)
  35544. +                 (c-forward-syntactic-ws))
  35545. +               (current-column))))
  35546. +      (- bocm-lossage curcol
  35547. +     (if bracep 0 c-indent-level)))))
  35548. +      
  35549. +
  35550. +(defun cc-substatement-open-offset (langelem)
  35551. +  (+ c-continued-statement-offset c-continued-brace-offset))
  35552. +
  35553. +
  35554. +(provide 'cc-compat)
  35555. +;;; cc-compat.el ends here
  35556. diff -rup --new-file baseline/fsf/emacs/site-lisp/cc-mode-18.el amiga/fsf/emacs/site-lisp/cc-mode-18.el
  35557. --- baseline/fsf/emacs/site-lisp/cc-mode-18.el    Wed Dec 31 17:00:00 1969
  35558. +++ amiga/fsf/emacs/site-lisp/cc-mode-18.el    Sat Sep 28 00:00:00 1996
  35559. @@ -0,0 +1,334 @@
  35560. +;;; cc-mode-18.el --- compatibility for cc-mode in Emacs 18
  35561. +
  35562. +;; Authors: 1994 Barry A. Warsaw, Century Computing Inc. <bwarsaw@cen.com>
  35563. +;; Maintainer:      cc-mode-help@anthem.nlm.nih.gov
  35564. +;; Created:         8-Feb-1994 (from cc-mode.el)
  35565. +;; Version:         1.11
  35566. +;; Last Modified:   1994/04/15 23:14:27
  35567. +;; Keywords: C++ C editing major-mode Emacs 18 compatible
  35568. +
  35569. +;; Copyright (C) 1994 Barry A. Warsaw
  35570. +
  35571. +;; This file is not yet part of GNU Emacs, and hopefully never will be.
  35572. +;;
  35573. +;; This program is free software; you can redistribute it and/or modify
  35574. +;; it under the terms of the GNU General Public License as published by
  35575. +;; the Free Software Foundation; either version 2 of the License, or
  35576. +;; (at your option) any later version.
  35577. +;; 
  35578. +;; This program is distributed in the hope that it will be useful,
  35579. +;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  35580. +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  35581. +;; GNU General Public License for more details.
  35582. +;; 
  35583. +;; You should have received a copy of the GNU General Public License
  35584. +;; along with this program; if not, write to the Free Software
  35585. +;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  35586. +
  35587. +;;; Commentary:
  35588. +
  35589. +;; This file provides hooks into cc-mode for use with Emacs 18. All
  35590. +;; native Emacs 18 support has been moved out of cc-mode.el proper. If
  35591. +;; you find you need this file (i.e. you're using Emacs 18), you
  35592. +;; should SERIOUSLY consider upgrading to FSF or Lucid 19.  Emacs 18
  35593. +;; simply doesn't have what it takes to edit C++ code.
  35594. +;;
  35595. +;; To use this, put the following in your .emacs file:
  35596. +;;
  35597. +;; (require 'cc-mode-18)
  35598. +;; (or (assq 'c-emacs18-common-hook c-mode-common-hook)
  35599. +;;     (setq c-mode-common-hook (cons 'c-emacs18-common-hook
  35600. +;;                                    c-mode-common-hook)))
  35601. +;;
  35602. +;; I cannot provide any direct support for v18 support anymore, but I
  35603. +;; will install and distribute contributed patches.  This file, and
  35604. +;; v18 support in general should be considered sold "As Is".  Caveat
  35605. +;; Emptor! :-)
  35606. +
  35607. +;; LCD Archive Entry:
  35608. +;; cc-mode-18.el|Barry A. Warsaw|cc-mode-help@anthem.nlm.nih.gov
  35609. +;; |Compatibility for cc-mode in Emacs 18
  35610. +;; |1994/04/15 23:14:27|1.11|
  35611. +
  35612. +;;; Code:
  35613. +(require 'cc-mode)
  35614. +
  35615. +
  35616. +;; user definable variables
  35617. +;; vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
  35618. +
  35619. +(defvar c-untame-characters '(?\')
  35620. +  "*Utilize a backslashing workaround of an Emacs18 syntax deficiency.
  35621. +If non-nil, this variable should contain a list of characters which
  35622. +are prepended by a backslash in comment regions.  By default, the list
  35623. +contains only the most troublesome character, the single quote.  To be
  35624. +completely safe, set this variable to:
  35625. +
  35626. +    '(?\( ?\) ?\' ?\{ ?\} ?\[ ?\])
  35627. +
  35628. +This variable has no effect under Emacs 19. For details on why this is
  35629. +necessary in GNU Emacs 18, please refer to the cc-mode texinfo manual.")
  35630. +
  35631. +(defvar c-backscan-limit 2000
  35632. +  "*Character limit for looking back while skipping syntactic whitespace.
  35633. +This variable has no effect under Emacs 19.  For details on why this
  35634. +is necessary under GNU Emacs 18, please refer to the texinfo manual.")
  35635. +
  35636. +
  35637. +;; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  35638. +;; NO USER DEFINABLE VARIABLES BEYOND THIS POINT
  35639. +
  35640. +;; extend the keymap
  35641. +(defun c-emacs18-common-hook ()
  35642. +  ;; Do all the set up necessary to get cc-mode working in Emacs 18,
  35643. +  ;; but make sure we only do it once
  35644. +  (if (or (get 'c-mode 'c-emacs-18)
  35645. +      (not (featurep 'cc-mode))
  35646. +      (not (memq 'v18 c-emacs-features)))
  35647. +      ;; do nothing if conditions we aren't in Emacs 18, or cc-mode
  35648. +      ;; hasn't been loaded yet, or we've already run this hook
  35649. +      nil
  35650. +    ;; extend the keymap for use with Emacs 18. c-mode-map must already
  35651. +    ;; be set up (i.e. from cc-mode.el)
  35652. +    (define-key c-mode-map "\C-c'" 'c-tame-comments)
  35653. +    (define-key c-mode-map "'"     'c-tame-insert)
  35654. +    (define-key c-mode-map "["     'c-tame-insert)
  35655. +    (define-key c-mode-map "]"     'c-tame-insert)
  35656. +    (define-key c-mode-map "("     'c-tame-insert)
  35657. +    (define-key c-mode-map ")"     'c-tame-insert)
  35658. +
  35659. +    ;; Vanilla GNU18 doesn't support mult-style comments.  We'll do
  35660. +    ;; the best we can, but some strange behavior may be encountered.
  35661. +    ;; PATCH or UPGRADE!
  35662. +    (modify-syntax-entry ?/  ". 124" c-mode-syntax-table)
  35663. +    (modify-syntax-entry ?*  ". 23"  c-mode-syntax-table)
  35664. +    (modify-syntax-entry ?\n ">"     c-mode-syntax-table)
  35665. +
  35666. +    (modify-syntax-entry ?/  ". 124" c++-mode-syntax-table)
  35667. +    (modify-syntax-entry ?*  ". 23"  c++-mode-syntax-table)
  35668. +    (modify-syntax-entry ?\n ">"     c++-mode-syntax-table)
  35669. +
  35670. +    ;; set up comment skipping interface functions, and other
  35671. +    ;; non-compatible functions
  35672. +    (fset 'c-forward-syntactic-ws 'c-emacs18-fsws)
  35673. +    (fset 'c-backward-syntactic-ws 'c-emacs18-bsws)
  35674. +    (fset 'c-in-literal 'c-emacs18-il)
  35675. +    (fset 'c-mark-function 'c-emacs18-mark-function)
  35676. +    (fset 'c-insert-special-chars 'c-emacs18-insert-special-chars)
  35677. +
  35678. +    ;; Emacs 18 can't handle parse-sexp-ignore-comments == t
  35679. +    (setq parse-sexp-ignore-comments nil)
  35680. +
  35681. +    ;; put the property out there so we don't do this again
  35682. +    (put 'c-mode 'c-emacs-18 'c-emacs-18)
  35683. +    ))
  35684. +
  35685. +
  35686. +;; Emacs 18 support for whitespace skipping and literal parsing.
  35687. +
  35688. +;; Emacs 19 has nice built-in functions to do this, but Emacs 18 does
  35689. +;; not.  Also note that only Emacs19 implementation currently has
  35690. +;; support for multi-line macros, and this feature is imposes the
  35691. +;; restriction that backslashes at the end of a line can only occur on
  35692. +;; multi-line macro lines.
  35693. +
  35694. +;; This is the best we can do in vanilla GNU 18 Emacsen.
  35695. +(defun c-emacs18-fsws (&optional lim)
  35696. +  ;; Forward skip syntactic whitespace for Emacs 18.
  35697. +  (let ((lim (or lim (point-max)))
  35698. +    stop)
  35699. +    (while (not stop)
  35700. +      (skip-chars-forward " \t\n\r\f" lim)
  35701. +      (cond
  35702. +       ;; c++ comment
  35703. +       ((looking-at "//") (end-of-line))
  35704. +       ;; c comment
  35705. +       ((looking-at "/\\*") (re-search-forward "*/" lim 'noerror))
  35706. +       ;; preprocessor directive
  35707. +       ((and (= (c-point 'boi) (point))
  35708. +         (= (following-char) ?#))
  35709. +    (end-of-line))
  35710. +       ;; none of the above
  35711. +       (t (setq stop t))
  35712. +       ))))
  35713. +
  35714. +(defun c-emacs18-bsws (&optional lim)
  35715. +  ;; Backward skip syntactic whitespace for Emacs 18.
  35716. +  (let ((lim (or lim (c-point 'bod)))
  35717. +    literal stop)
  35718. +    (if (and c-backscan-limit
  35719. +         (> (- (point) lim) c-backscan-limit))
  35720. +    (setq lim (- (point) c-backscan-limit)))
  35721. +    (while (not stop)
  35722. +      (skip-chars-backward " \t\n\r\f" lim)
  35723. +      ;; c++ comment
  35724. +      (if (eq (setq literal (c-in-literal lim)) 'c++)
  35725. +      (progn
  35726. +        (skip-chars-backward "^/" lim)
  35727. +        (skip-chars-backward "/" lim)
  35728. +        (while (not (or (and (= (following-char) ?/)
  35729. +                 (= (char-after (1+ (point))) ?/))
  35730. +                (<= (point) lim)))
  35731. +          (skip-chars-backward "^/" lim)
  35732. +          (skip-chars-backward "/" lim)))
  35733. +    ;; c comment
  35734. +    (if (eq literal 'c)
  35735. +        (progn
  35736. +          (skip-chars-backward "^*" lim)
  35737. +          (skip-chars-backward "*" lim)
  35738. +          (while (not (or (and (= (following-char) ?*)
  35739. +                   (= (preceding-char) ?/))
  35740. +                  (<= (point) lim)))
  35741. +        (skip-chars-backward "^*" lim)
  35742. +        (skip-chars-backward "*" lim))
  35743. +          (or (bobp) (forward-char -1)))
  35744. +      ;; preprocessor directive
  35745. +      (if (eq literal 'pound)
  35746. +          (progn
  35747. +        (beginning-of-line)
  35748. +        (setq stop (<= (point) lim)))
  35749. +        ;; just outside of c block
  35750. +        (if (and (= (preceding-char) ?/)
  35751. +             (= (char-after (- (point) 2)) ?*))
  35752. +        (progn
  35753. +          (skip-chars-backward "^*" lim)
  35754. +          (skip-chars-backward "*" lim)
  35755. +          (while (not (or (and (= (following-char) ?*)
  35756. +                       (= (preceding-char) ?/))
  35757. +                  (<= (point) lim)))
  35758. +            (skip-chars-backward "^*" lim)
  35759. +            (skip-chars-backward "*" lim))
  35760. +          (or (bobp) (forward-char -1)))
  35761. +          ;; none of the above
  35762. +          (setq stop t))))))))
  35763. +
  35764. +
  35765. +;; Return `c' if in a C-style comment, `c++' if in a C++ style
  35766. +;; comment, `string' if in a string literal, `pound' if on a
  35767. +;; preprocessor line, or nil if not in a comment at all.  Optional LIM
  35768. +;; is used as the backward limit of the search.  If omitted, or nil,
  35769. +;; `beginning-of-defun' is used."
  35770. +(defun c-emacs18-il (&optional lim)
  35771. +  ;; Determine if point is in a C/C++ literal
  35772. +  (save-excursion
  35773. +    (let* ((here (c-point 'eol))
  35774. +       (state nil)
  35775. +       (match nil)
  35776. +       (lim  (or lim (c-point 'bod))))
  35777. +      (goto-char lim )
  35778. +      (while (< (point) here)
  35779. +    (setq match
  35780. +          (and (re-search-forward "\\(/[/*]\\)\\|[\"']\\|\\(^[ \t]*#\\)"
  35781. +                      here 'move)
  35782. +           (buffer-substring (match-beginning 0) (match-end 0))))
  35783. +    (setq state
  35784. +          (cond
  35785. +           ;; no match
  35786. +           ((null match) nil)
  35787. +           ;; looking at the opening of a C++ style comment
  35788. +           ((string= "//" match)
  35789. +        (if (<= here (progn (end-of-line) (point))) 'c++))
  35790. +           ;; looking at the opening of a C block comment
  35791. +           ((string= "/*" match)
  35792. +        (if (not (re-search-forward "*/" here 'move)) 'c
  35793. +          (if (= (+ (match-beginning 0) 2) here) 'c)))
  35794. +           ;; looking at the opening of a double quote string
  35795. +           ((string= "\"" match)
  35796. +        (if (not (save-restriction
  35797. +               ;; this seems to be necessary since the
  35798. +               ;; re-search-forward will not work without it
  35799. +               (narrow-to-region (point) here)
  35800. +               (re-search-forward
  35801. +                ;; this regexp matches a double quote
  35802. +                ;; which is preceded by an even number
  35803. +                ;; of backslashes, including zero
  35804. +                "\\([^\\]\\|^\\)\\(\\\\\\\\\\)*\"" here 'move)))
  35805. +            'string))
  35806. +           ;; looking at the opening of a single quote string
  35807. +           ((string= "'" match)
  35808. +        (if (not (save-restriction
  35809. +               ;; see comments from above
  35810. +               (narrow-to-region (point) here)
  35811. +               (re-search-forward
  35812. +                ;; this matches a single quote which is
  35813. +                ;; preceded by zero or two backslashes.
  35814. +                "\\([^\\]\\|^\\)\\(\\\\\\\\\\)?'"
  35815. +                here 'move)))
  35816. +            'string))
  35817. +           ((string-match "[ \t]*#" match)
  35818. +        (if (<= here (progn (end-of-line) (point))) 'pound))
  35819. +           (t nil)))
  35820. +    ) ; end-while
  35821. +      state)))
  35822. +
  35823. +
  35824. +(defun c-emacs18-mark-function ()
  35825. +  "Put mark at end of a C/C++ defun, point at beginning."
  35826. +  (interactive)
  35827. +  (push-mark (point))
  35828. +  (end-of-defun)
  35829. +  (push-mark)
  35830. +  (beginning-of-defun)
  35831. +  (backward-paragraph))
  35832. +
  35833. +
  35834. +(defun c-emacs18-insert-special-chars (arg)
  35835. +  ;; insert last-command-char in the buffer and possibly tame it
  35836. +  (let ((numarg (prefix-numeric-value arg))
  35837. +    (literal (c-in-literal)))
  35838. +    (and (memq literal '(c c++))
  35839. +     (memq last-command-char c-untame-characters)
  35840. +     (= numarg 1)
  35841. +     (insert "\\"))
  35842. +    (self-insert-command numarg)))
  35843. +
  35844. +
  35845. +;; Workarounds for GNU Emacs 18 scanning deficiencies
  35846. +(defun c-tame-insert (arg)
  35847. +  "Safely inserts certain troublesome characters in comment regions.
  35848. +This function is only necessary in GNU Emacs 18.  For details, refer
  35849. +to the accompanying texinfo manual.
  35850. +
  35851. +See also the variable `c-untame-characters'."
  35852. +  (interactive "P")
  35853. +  (let ((literal (c-in-literal)))
  35854. +    (c-insert-special-chars arg)))
  35855. +
  35856. +(defun c-tame-comments ()
  35857. +  "Backslashifies all untamed in comment regions found in the buffer.
  35858. +This function is only necessary in GNU Emacs 18. For details, refer to
  35859. +the accompanying texinfo manual.
  35860. +
  35861. +See also the variable `c-untame-characters'."
  35862. +  (interactive)
  35863. +  ;; make the list into a valid charset, escaping where necessary
  35864. +  (let ((charset (concat "^" (mapconcat
  35865. +                  (function
  35866. +                   (lambda (char)
  35867. +                 (if (memq char '(?\\ ?^ ?-))
  35868. +                     (concat "\\" (char-to-string char))
  35869. +                   (char-to-string char))))
  35870. +                  c-untame-characters ""))))
  35871. +    (save-excursion
  35872. +      (beginning-of-buffer)
  35873. +      (while (not (eobp))
  35874. +    (skip-chars-forward charset)
  35875. +    (if (and (not (zerop (following-char)))
  35876. +         (memq (c-in-literal) '(c c++))
  35877. +         (/= (preceding-char) ?\\ ))
  35878. +        (insert-char  ?\\ 1))
  35879. +    (if (not (eobp))
  35880. +        (forward-char 1))))))
  35881. +
  35882. +
  35883. +;; set up an Emacs session to use this stuff
  35884. +;;(let ((hookfunsym 'c-emacs18-common-hook))
  35885. +;;  (if (fboundp 'add-hook)
  35886. +;;      (add-hook 'c-mode-common-hook hookfunsym)
  35887. +    ;; do it the hard way
  35888. +;;    (if (not (memq hookfunsym c-mode-common-hook))
  35889. +;;    (setq c-mode-common-hook (cons hookfunsym c-mode-common-hook))
  35890. +;;      )))
  35891. +
  35892. +(provide 'cc-mode-18)
  35893. +;; cc-mode-18.el ends here
  35894. diff -rup --new-file baseline/fsf/emacs/site-lisp/cc-mode.el amiga/fsf/emacs/site-lisp/cc-mode.el
  35895. --- baseline/fsf/emacs/site-lisp/cc-mode.el    Wed Dec 31 17:00:00 1969
  35896. +++ amiga/fsf/emacs/site-lisp/cc-mode.el    Sat Sep 28 00:00:00 1996
  35897. @@ -0,0 +1,4260 @@
  35898. +;;; cc-mode.el --- major mode for editing C++ and C code
  35899. +
  35900. +;; Authors: 1992 Barry A. Warsaw <bwarsaw@cnri.reston.va.us>
  35901. +;;          1987 Dave Detlefs and Stewart Clamen
  35902. +;;          1985 Richard M. Stallman
  35903. +;; Maintainer: cc-mode-help@anthem.nlm.nih.gov
  35904. +;; Created: a long, long, time ago. adapted from the original c-mode.el
  35905. +;; Version:         4.85
  35906. +;; Last Modified:   1994/09/08 14:27:45
  35907. +;; Keywords: C++ C Objective-C editing major-mode
  35908. +
  35909. +;; Copyright (C) 1992, 1993, 1994 Barry A. Warsaw
  35910. +;; Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
  35911. +
  35912. +;; This file is part of GNU Emacs.
  35913. +
  35914. +;; GNU Emacs is free software; you can redistribute it and/or modify
  35915. +;; it under the terms of the GNU General Public License as published by
  35916. +;; the Free Software Foundation; either version 2, or (at your option)
  35917. +;; any later version.
  35918. +
  35919. +;; GNU Emacs is distributed in the hope that it will be useful,
  35920. +;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  35921. +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  35922. +;; GNU General Public License for more details.
  35923. +
  35924. +;; You should have received a copy of the GNU General Public License
  35925. +;; along with GNU Emacs; see the file COPYING.  If not, write to
  35926. +;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  35927. +
  35928. +;;; Commentary:
  35929. +
  35930. +;; This package provides modes in GNU Emacs for editing C, C++, and
  35931. +;; Objective-C code. It is intended to be a replacement for c-mode.el
  35932. +;; (a.k.a. BOCM -- Boring Old C-Mode), and c++-mode.el, both of which
  35933. +;; are ancestors of this file.  A number of important improvements
  35934. +;; have been made, briefly: complete K&R C, ANSI C, `ARM' C++, and
  35935. +;; Objective-C support with consistent indentation across all modes,
  35936. +;; more intuitive indentation controlling variables, compatibility
  35937. +;; across all known Emacsen, nice new features, and tons of bug fixes.
  35938. +;; This package is called "cc-mode" to distinguish it from its
  35939. +;; ancestors, but there really is no top-level cc-mode.
  35940. +
  35941. +;; Details on how to use cc-mode will some day be contained in an
  35942. +;; accompanying texinfo manual.  Volunteers to help finish this manual
  35943. +;; would be greatly appreciated!  Contact me at the address above if
  35944. +;; you'd like to volunteer. Until the manual is finished, an
  35945. +;; accompanying README is the only documentation available.
  35946. +
  35947. +;; To submit bug reports, hit "C-c C-b", and please try to include a
  35948. +;; code sample and exact recipe so I can reproduce your problem.  If
  35949. +;; you have other questions contact me at the following address:
  35950. +;; cc-mode-help@anthem.nlm.nih.gov.  Please don't send bug reports to
  35951. +;; my personal account, I may not get it for a long time.
  35952. +
  35953. +;; YOU CAN IGNORE ALL BYTE-COMPILER WARNINGS. They are the result of
  35954. +;; the multi-Emacsen support. FSF's Emacs 19, XEmacs 19 (formerly
  35955. +;; Lucid), and GNU Emacs 18 all do things differently and there's no
  35956. +;; way to shut the byte-compiler up at the necessary granularity.  Let
  35957. +;; me say this again: YOU CAN IGNORE ALL BYTE-COMPILER WARNINGS (you'd
  35958. +;; be surprised at how many people don't follow this advice :-).
  35959. +
  35960. +;; If your Emacs is dumped with c-mode.el and/or c++-mode.el, you will
  35961. +;; need to add the following to your .emacs file before any other
  35962. +;; reference to c-mode or c++-mode:
  35963. +;;
  35964. +;; (fmakunbound 'c-mode)
  35965. +;; (makunbound 'c-mode-map)
  35966. +;; (fmakunbound 'c++-mode)
  35967. +;; (makunbound 'c++-mode-map)
  35968. +;; (makunbound 'c-style-alist)
  35969. +
  35970. +;; There are three major mode entry points provided by this package,
  35971. +;; one for editing C++ code, one for editing C code (both K&R and
  35972. +;; ANSI), and one for editing Objective-C code.  To use cc-mode, add
  35973. +;; the following to your .emacs file.  This assumes you will use .cc
  35974. +;; or .C extensions for your C++ source, .c for your C code, and .m
  35975. +;; for your Objective-C code:
  35976. +;;
  35977. +;; (autoload 'c++-mode  "cc-mode" "C++ Editing Mode" t)
  35978. +;; (autoload 'c-mode    "cc-mode" "C Editing Mode" t)
  35979. +;; (autoload 'objc-mode "cc-mode" "Objective-C Editing Mode" t)
  35980. +;; (setq auto-mode-alist
  35981. +;;   (append '(("\\.C$"  . c++-mode)
  35982. +;;             ("\\.cc$" . c++-mode)
  35983. +;;             ("\\.c$"  . c-mode)
  35984. +;;             ("\\.h$"  . c-mode)
  35985. +;;             ("\\.m$"  . objc-mode)
  35986. +;;            ) auto-mode-alist))
  35987. +;;
  35988. +;; If you would like to join the beta testers list, send add/drop
  35989. +;; requests to cc-mode-victims-request@anthem.nlm.nih.gov.
  35990. +;; Discussions go to cc-mode-victims@anthem.nlm.nih.gov, but bug
  35991. +;; reports and such should still be sent to cc-mode-help only (see
  35992. +;; above).
  35993. +;;
  35994. +;; Many, many thanks go out to all the folks on the beta test list.
  35995. +;; Without their patience, testing, insight, code contributions, and
  35996. +;; encouragement cc-mode.el would be a far inferior package.
  35997. +
  35998. +;; LCD Archive Entry:
  35999. +;; cc-mode.el|Barry A. Warsaw|cc-mode-help@anthem.nlm.nih.gov
  36000. +;; |Major mode for editing C++, Objective-C, and ANSI/K&R C code
  36001. +;; |1994/09/08 14:27:45|4.85|
  36002. +
  36003. +;;; Code:
  36004. +
  36005. +
  36006. +;; user definable variables
  36007. +;; vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
  36008. +
  36009. +(defvar c-inhibit-startup-warnings-p nil
  36010. +  "*If non-nil, inhibits start up compatibility warnings.")
  36011. +(defvar c-strict-syntax-p nil
  36012. +  "*If non-nil, all syntactic symbols must be found in `c-offsets-alist'.
  36013. +If the syntactic symbol for a particular line does not match a symbol
  36014. +in the offsets alist, an error is generated, otherwise no error is
  36015. +reported and the syntactic symbol is ignored.")
  36016. +(defvar c-echo-syntactic-information-p nil
  36017. +  "*If non-nil, syntactic info is echoed when the line is indented.")
  36018. +(defvar c-basic-offset 4
  36019. +  "*Amount of basic offset used by + and - symbols in `c-offsets-alist'.")
  36020. +
  36021. +(defconst c-offsets-alist-default
  36022. +  '((string                . -1000)
  36023. +    (c                     . c-lineup-C-comments)
  36024. +    (defun-open            . 0)
  36025. +    (defun-close           . 0)
  36026. +    (defun-block-intro     . +)
  36027. +    (class-open            . 0)
  36028. +    (class-close           . 0)
  36029. +    (inline-open           . +)
  36030. +    (inline-close          . 0)
  36031. +    (ansi-funcdecl-cont    . -)
  36032. +    (knr-argdecl-intro     . +)
  36033. +    (knr-argdecl           . 0)
  36034. +    (topmost-intro         . 0)
  36035. +    (topmost-intro-cont    . 0)
  36036. +    (member-init-intro     . +)
  36037. +    (member-init-cont      . 0)
  36038. +    (inher-intro           . +)
  36039. +    (inher-cont            . c-lineup-multi-inher)
  36040. +    (block-open            . 0)
  36041. +    (block-close           . 0)
  36042. +    (brace-list-open       . 0)
  36043. +    (brace-list-close      . 0)
  36044. +    (brace-list-intro      . +)
  36045. +    (brace-list-entry      . 0)
  36046. +    (statement             . 0)
  36047. +    ;; some people might prefer
  36048. +    ;;(statement             . c-lineup-runin-statements)
  36049. +    (statement-cont        . +)
  36050. +    ;; some people might prefer
  36051. +    ;;(statement-cont        . c-lineup-math)
  36052. +    (statement-block-intro . +)
  36053. +    (statement-case-intro  . +)
  36054. +    (statement-case-open   . 0)
  36055. +    (substatement          . +)
  36056. +    (substatement-open     . +)
  36057. +    (case-label            . 0)
  36058. +    (access-label          . -)
  36059. +    (label                 . 2)
  36060. +    (do-while-closure      . 0)
  36061. +    (else-clause           . 0)
  36062. +    (comment-intro         . c-lineup-comment)
  36063. +    (arglist-intro         . +)
  36064. +    (arglist-cont          . 0)
  36065. +    (arglist-cont-nonempty . c-lineup-arglist)
  36066. +    (arglist-close         . +)
  36067. +    (stream-op             . c-lineup-streamop)
  36068. +    (inclass               . +)
  36069. +    (cpp-macro             . -1000)
  36070. +    (friend                . 0)
  36071. +    (objc-method-intro     . -1000)
  36072. +    (objc-method-args-cont . c-lineup-objc-method-args)
  36073. +    (objc-method-call-cont . c-lineup-objc-method-call)
  36074. +    )
  36075. +  "Default settings for offsets of syntactic elements.
  36076. +Do not change this constant!  See the variable `c-offsets-alist' for
  36077. +more information.")
  36078. +
  36079. +(defvar c-offsets-alist (copy-alist c-offsets-alist-default)
  36080. +  "*Association list of syntactic element symbols and indentation offsets.
  36081. +As described below, each cons cell in this list has the form:
  36082. +
  36083. +    (SYNTACTIC-SYMBOL . OFFSET)
  36084. +
  36085. +When a line is indented, cc-mode first determines the syntactic
  36086. +context of the line by generating a list of symbols called syntactic
  36087. +elements.  This list can contain more than one syntactic element and
  36088. +the global variable `c-syntactic-context' contains the context list
  36089. +for the line being indented.  Each element in this list is actually a
  36090. +cons cell of the syntactic symbol and a buffer position.  This buffer
  36091. +position is call the relative indent point for the line.  Some
  36092. +syntactic symbols may not have a relative indent point associated with
  36093. +them.
  36094. +
  36095. +After the syntactic context list for a line is generated, cc-mode
  36096. +calculates the absolute indentation for the line by looking at each
  36097. +syntactic element in the list.  First, it compares the syntactic
  36098. +element against the SYNTACTIC-SYMBOL's in `c-offsets-alist'.  When it
  36099. +finds a match, it adds the OFFSET to the column of the relative indent
  36100. +point.  The sum of this calculation for each element in the syntactic
  36101. +list is the absolute offset for line being indented.
  36102. +
  36103. +If the syntactic element does not match any in the `c-offsets-alist',
  36104. +an error is generated if `c-strict-syntax-p' is non-nil, otherwise
  36105. +the element is ignored.
  36106. +
  36107. +Actually, OFFSET can be an integer, a function, a variable, or one of
  36108. +the following symbols: `+', `-', `++', or `--'.  These latter
  36109. +designate positive or negative multiples of `c-basic-offset',
  36110. +respectively: *1, *-1, *2, and *-2. If OFFSET is a function, it is
  36111. +called with a single argument containing the cons of the syntactic
  36112. +element symbol and the relative indent point.  The function should
  36113. +return an integer offset.
  36114. +
  36115. +Here is the current list of valid syntactic element symbols:
  36116. +
  36117. + string                 -- inside multi-line string
  36118. + c                      -- inside a multi-line C style block comment
  36119. + defun-open             -- brace that opens a function definition
  36120. + defun-close            -- brace that closes a function definition
  36121. + defun-block-intro      -- the first line in a top-level defun
  36122. + class-open             -- brace that opens a class definition
  36123. + class-close            -- brace that closes a class definition
  36124. + inline-open            -- brace that opens an in-class inline method
  36125. + inline-close           -- brace that closes an in-class inline method
  36126. + ansi-funcdecl-cont     -- the nether region between an ANSI function
  36127. +                           declaration and the defun opening brace
  36128. + knr-argdecl-intro      -- first line of a K&R C argument declaration
  36129. + knr-argdecl            -- subsequent lines in a K&R C argument declaration
  36130. + topmost-intro          -- the first line in a topmost construct definition
  36131. + topmost-intro-cont     -- topmost definition continuation lines
  36132. + member-init-intro      -- first line in a member initialization list
  36133. + member-init-cont       -- subsequent member initialization list lines
  36134. + inher-intro            -- first line of a multiple inheritance list
  36135. + inher-cont             -- subsequent multiple inheritance lines
  36136. + block-open             -- statement block open brace
  36137. + block-close            -- statement block close brace
  36138. + brace-list-open        -- open brace of an enum or static array list
  36139. + brace-list-close       -- close brace of an enum or static array list
  36140. + brace-list-intro       -- first line in an enum or static array list
  36141. + brace-list-entry       -- subsequent lines in an enum or static array list
  36142. + statement              -- a C/C++/ObjC statement
  36143. + statement-cont         -- a continuation of a C/C++/ObjC statement
  36144. + statement-block-intro  -- the first line in a new statement block
  36145. + statement-case-intro   -- the first line in a case `block'
  36146. + statement-case-open    -- the first line in a case block starting with brace
  36147. + substatement           -- the first line after an if/while/for/do/else
  36148. + substatement-open      -- the brace that opens a substatement block
  36149. + case-label             -- a case or default label
  36150. + access-label           -- C++ private/protected/public access label
  36151. + label                  -- any non-special C/C++/ObjC label
  36152. + do-while-closure       -- the `while' that ends a do/while construct
  36153. + else-clause            -- the `else' of an if/else construct
  36154. + comment-intro          -- a line containing only a comment introduction
  36155. + arglist-intro          -- the first line in an argument list
  36156. + arglist-cont           -- subsequent argument list lines when no
  36157. +                           arguments follow on the same line as the
  36158. +                           the arglist opening paren
  36159. + arglist-cont-nonempty  -- subsequent argument list lines when at
  36160. +                           least one argument follows on the same
  36161. +                           line as the arglist opening paren
  36162. + arglist-close          -- the solo close paren of an argument list
  36163. + stream-op              -- lines continuing a stream operator construct
  36164. + inclass                -- the construct is nested inside a class definition
  36165. + cpp-macro              -- the start of a cpp macro
  36166. + friend                 -- a C++ friend declaration
  36167. + objc-method-intro      -- the first line of an Objective-C method definition
  36168. + objc-method-args-cont  -- lines continuing an Objective-C method definition
  36169. + objc-method-call-cont  -- lines continuing an Objective-C method call
  36170. +")
  36171. +
  36172. +(defvar c-tab-always-indent t
  36173. +  "*Controls the operation of the TAB key.
  36174. +If t, hitting TAB always just indents the current line.  If nil,
  36175. +hitting TAB indents the current line if point is at the left margin or
  36176. +in the line's indentation, otherwise it insert a real tab character.
  36177. +If other than nil or t, then tab is inserted only within literals
  36178. +-- defined as comments and strings -- and inside preprocessor
  36179. +directives, but line is always reindented.
  36180. +
  36181. +Note that indentation of lines containing only comments is also
  36182. +controlled by the `c-comment-only-line-offset' variable.")
  36183. +
  36184. +(defvar c-comment-only-line-offset 0
  36185. +  "*Extra offset for line which contains only the start of a comment.
  36186. +Can contain an integer or a cons cell of the form:
  36187. +
  36188. + (NON-ANCHORED-OFFSET . ANCHORED-OFFSET)
  36189. +
  36190. +Where NON-ANCHORED-OFFSET is the amount of offset given to
  36191. +non-column-zero anchored comment-only lines, and ANCHORED-OFFSET is
  36192. +the amount of offset to give column-zero anchored comment-only lines.
  36193. +Just an integer as value is equivalent to (<val> . 0)")
  36194. +
  36195. +(defvar c-block-comments-indent-p nil
  36196. +  "*Specifies how to re-indent C style block comments.
  36197. +
  36198. +4 styles of C block comments are supported.  If this variable is nil,
  36199. +then styles 1-3 are supported.  If this variable is non-nil, style 4
  36200. +only is supported.  Note that this currently has *no* effect on how
  36201. +comments are lined up or whether stars are inserted when C comments
  36202. +are auto-filled.  In any case, you still have to insert the stars
  36203. +manually.
  36204. +
  36205. + style 1:       style 2:       style 3:       style 4:
  36206. + /*             /*             /*             /*
  36207. +    blah         * blah        ** blah        blah
  36208. +    blah         * blah        ** blah        blah
  36209. +    */           */            */             */")
  36210. +
  36211. +(defvar c-cleanup-list '(scope-operator)
  36212. +  "*List of various C/C++/ObjC constructs to \"clean up\".
  36213. +These clean ups only take place when the auto-newline feature is turned
  36214. +on, as evidenced by the `/a' or `/ah' appearing next to the mode name.
  36215. +Valid symbols are:
  36216. +
  36217. + brace-else-brace    -- cleans up `} else {' constructs by placing entire
  36218. +                        construct on a single line.  This clean up only
  36219. +                        takes place when there is nothing but white
  36220. +                        space between the braces and the `else'.  Clean
  36221. +            up occurs when the open-brace after the `else'
  36222. +            is typed.
  36223. + empty-defun-braces  -- cleans up empty defun braces by placing the
  36224. +                        braces on the same line.  Clean up occurs when
  36225. +            the defun closing brace is typed.
  36226. + defun-close-semi    -- cleans up the terminating semi-colon on defuns
  36227. +            by placing the semi-colon on the same line as
  36228. +            the closing brace.  Clean up occurs when the
  36229. +            semi-colon is typed.
  36230. + list-close-comma    -- cleans up commas following braces in array
  36231. +                        and aggregate initializers.  Clean up occurs
  36232. +            when the comma is typed.
  36233. + scope-operator      -- cleans up double colons which may designate
  36234. +            a C++ scope operator split across multiple
  36235. +            lines. Note that certain C++ constructs can
  36236. +            generate ambiguous situations.  This clean up
  36237. +            only takes place when there is nothing but
  36238. +            whitespace between colons. Clean up occurs
  36239. +            when the second colon is typed.")
  36240. +
  36241. +(defvar c-hanging-braces-alist '((brace-list-open)
  36242. +                 (substatement-open after))
  36243. +  "*Controls the insertion of newlines before and after braces.
  36244. +This variable contains an association list with elements of the
  36245. +following form: (SYNTACTIC-SYMBOL . (NL-LIST)).
  36246. +
  36247. +SYNTACTIC-SYMBOL can be any of: defun-open, defun-close, class-open,
  36248. +class-close, inline-open, inline-close, block-open, block-close,
  36249. +substatement-open, statement-case-open, brace-list-open,
  36250. +brace-list-close, brace-list-intro, or brace-list-entry. See
  36251. +`c-offsets-alist' for details.
  36252. +
  36253. +NL-LIST can contain any combination of the symbols `before' or
  36254. +`after'. It also be nil.  When a brace is inserted, the syntactic
  36255. +context it defines is looked up in this list, and if found, the
  36256. +NL-LIST is used to determine where newlines are inserted.  If not
  36257. +found, the default is to insert a newline both before and after
  36258. +braces.")
  36259. +
  36260. +(defvar c-hanging-colons-alist nil
  36261. +  "*Controls the insertion of newlines before and after certain colons.
  36262. +This variable contains an association list with elements of the
  36263. +following form: (SYNTACTIC-SYMBOL . (NL-LIST)).
  36264. +
  36265. +SYNTACTIC-SYMBOL can be any of: member-init-intro, inher-intro,
  36266. +case-label, label, and access-label. See `c-offsets-alist' for
  36267. +details.
  36268. +
  36269. +NL-LIST can contain any combination of the symbols `before' or
  36270. +`after'. It also be nil.  When a colon is inserted, the language
  36271. +element that it defines is looked up in this list, and if found, the
  36272. +NL-LIST is used to determine where newlines are inserted.  If the
  36273. +language element for the colon is not found in this list, the default
  36274. +behavior is to not insert any newlines.")
  36275. +
  36276. +(defvar c-hanging-comment-ender-p t
  36277. +  "*If nil, `c-fill-paragraph' leaves C block comment enders on their own line.
  36278. +Default value is t, which inhibits leaving block comment ending string
  36279. +`*/' on a line by itself.  This is BOCM's sole behavior.")
  36280. +
  36281. +(defvar c-backslash-column 48
  36282. +  "*Column to insert backslashes when macroizing a region.")
  36283. +(defvar c-special-indent-hook nil
  36284. +  "*Hook for user defined special indentation adjustments.
  36285. +This hook gets called after a line is indented by the mode.")
  36286. +(defvar c-delete-function 'backward-delete-char-untabify
  36287. +  "*Function called by `c-electric-delete' when deleting a single char.")
  36288. +(defvar c-electric-pound-behavior nil
  36289. +  "*List of behaviors for electric pound insertion.
  36290. +Only currently supported behavior is `alignleft'.")
  36291. +
  36292. +(defvar c-recognize-knr-p t
  36293. +  "*If non-nil, `c-mode' and `objc-mode' will recognize K&R constructs.
  36294. +This variable is needed because of ambiguities in C syntax that make
  36295. +fast recognition of K&R constructs problematic, and slow.  If you are
  36296. +coding with ANSI prototypes, set this variable to nil to speed up
  36297. +recognition of certain constructs.
  36298. +
  36299. +This variable is nil by default in `c++-mode', and t by default in
  36300. +`c-mode' and `objc-mode'.  This variable is buffer-local.")
  36301. +
  36302. +(defvar c-progress-interval 5
  36303. +  "*Interval used to update progress status during long re-indentation.
  36304. +If a number, percentage complete gets updated after each interval of
  36305. +that many seconds.   Set to nil to inhibit updating.  This is only
  36306. +useful for Emacs 19.")
  36307. +
  36308. +(defvar c-style-alist
  36309. +  '(("GNU"
  36310. +     (c-basic-offset . 2)
  36311. +     (c-comment-only-line-offset . 0)
  36312. +     (c-offsets-alist . ((statement-block-intro . +)
  36313. +             (knr-argdecl-intro . 5)
  36314. +             (substatement-open . +)
  36315. +             (label . -)
  36316. +             (statement-cont . +)
  36317. +             (arglist-intro . c-lineup-arglist-intro-after-paren)
  36318. +             (arglist-close . c-lineup-arglist)
  36319. +             ))
  36320. +     )
  36321. +    ("K&R"
  36322. +     (c-basic-offset . 5)
  36323. +     (c-comment-only-line-offset . 0)
  36324. +     (c-offsets-alist . ((statement-block-intro . +)
  36325. +             (knr-argdecl-intro . 0)
  36326. +             (substatement-open . 0)
  36327. +             (label . -)
  36328. +             (statement-cont . +)
  36329. +             ))
  36330. +     )
  36331. +    ("BSD"
  36332. +     (c-basic-offset . 4)
  36333. +     (c-comment-only-line-offset . 0)
  36334. +     (c-offsets-alist . ((statement-block-intro . +)
  36335. +             (knr-argdecl-intro . +)
  36336. +             (substatement-open . 0)
  36337. +             (label . -)
  36338. +             (statement-cont . +)
  36339. +             ))
  36340. +     )
  36341. +    ("Stroustrup"
  36342. +     (c-basic-offset . 4)
  36343. +     (c-comment-only-line-offset . 0)
  36344. +     (c-offsets-alist . ((statement-block-intro . +)
  36345. +             (substatement-open . 0)
  36346. +             (label . -)
  36347. +             (statement-cont . +)
  36348. +             ))
  36349. +     )
  36350. +    ("Whitesmith"
  36351. +     (c-basic-offset . 4)
  36352. +     (c-comment-only-line-offset . 0)
  36353. +     (c-offsets-alist . ((statement-block-intro . +)
  36354. +             (knr-argdecl-intro . +)
  36355. +             (substatement-open . 0)
  36356. +             (label . -)
  36357. +             (statement-cont . +)
  36358. +             ))
  36359. +
  36360. +     )
  36361. +    ("Ellemtel"
  36362. +     (c-basic-offset . 3)
  36363. +     (c-comment-only-line-offset . 0)
  36364. +     (c-hanging-braces-alist     . ((substatement-open before after)))
  36365. +     (c-offsets-alist . ((topmost-intro        . 0)
  36366. +                         (topmost-intro-cont   . 0)
  36367. +                         (substatement         . 3)
  36368. +             (substatement-open    . 0)
  36369. +             (statement-case-intro . 0)
  36370. +                         (case-label           . +)
  36371. +                         (access-label         . -3)
  36372. +                         (inclass              . 6)
  36373. +                         (inline-open          . 0)
  36374. +                         ))
  36375. +     ))
  36376. +  "Styles of Indentation.
  36377. +Elements of this alist are of the form:
  36378. +
  36379. +  (STYLE-STRING (VARIABLE . VALUE) [(VARIABLE . VALUE) ...])
  36380. +
  36381. +where STYLE-STRING is a short descriptive string used to select a
  36382. +style, VARIABLE is any cc-mode variable, and VALUE is the intended
  36383. +value for that variable when using the selected style.
  36384. +
  36385. +There is one special case when VARIABLE is `c-offsets-alist'.  In this
  36386. +case, the VALUE is a list containing elements of the form:
  36387. +
  36388. +  (SYNTACTIC-SYMBOL . VALUE)
  36389. +
  36390. +as described in `c-offsets-alist'.  These are passed directly to
  36391. +`c-set-offset' so there is no need to set every syntactic symbol in
  36392. +your style, only those that are different from the default.")
  36393. +
  36394. +;; dynamically append the default value of most variables
  36395. +(or (assoc "Default" c-style-alist)
  36396. +    (let* ((varlist '(c-inhibit-startup-warnings-p
  36397. +              c-strict-syntax-p
  36398. +              c-echo-syntactic-information-p
  36399. +              c-basic-offset
  36400. +              c-offsets-alist
  36401. +              c-tab-always-indent
  36402. +              c-comment-only-line-offset
  36403. +              c-block-comments-indent-p
  36404. +              c-cleanup-list
  36405. +              c-hanging-braces-alist
  36406. +              c-hanging-colons-alist
  36407. +              c-backslash-column
  36408. +              c-electric-pound-behavior))
  36409. +       (default (cons "Default"
  36410. +              (mapcar
  36411. +               (function
  36412. +                (lambda (var)
  36413. +                  (cons var (symbol-value var))
  36414. +                  ))
  36415. +               varlist))))
  36416. +      (setq c-style-alist (cons default c-style-alist))))
  36417. +
  36418. +(defvar c-mode-hook nil
  36419. +  "*Hook called by `c-mode'.")
  36420. +(defvar c++-mode-hook nil
  36421. +  "*Hook called by `c++-mode'.")
  36422. +(defvar objc-mode-hook nil
  36423. +  "*Hook called by `objc-mode'.")
  36424. +
  36425. +(defvar c-mode-common-hook nil
  36426. +  "*Hook called by `c-mode', `c++-mode', and 'objc-mode' during common init.")
  36427. +
  36428. +(defvar c-mode-menu
  36429. +  '(["Comment Out Region"     comment-region (mark)]
  36430. +    ["Macro Expand Region"    c-macro-expand (mark)]
  36431. +    ["Backslashify"           c-backslash-region (mark)]
  36432. +    ["Indent Expression"      c-indent-exp
  36433. +     (memq (following-char) '(?\( ?\[ ?\{))]
  36434. +    ["Indent Line"            c-indent-command t]
  36435. +    ["Fill Comment Paragraph" c-fill-paragraph t]
  36436. +    ["Up Conditional"         c-up-conditional t]
  36437. +    ["Backward Conditional"   c-backward-conditional t]
  36438. +    ["Forward Conditional"    c-forward-conditional t]
  36439. +    ["Backward Statement"     c-beginning-of-statement t]
  36440. +    ["Forward Statement"      c-end-of-statement t]
  36441. +    )
  36442. +  "XEmacs 19 (formerly Lucid) menu for C/C++/ObjC modes.")
  36443. +
  36444. +
  36445. +;; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  36446. +;; NO USER DEFINABLE VARIABLES BEYOND THIS POINT
  36447. +
  36448. +(defconst c-emacs-features
  36449. +  (let ((major (and (boundp 'emacs-major-version)
  36450. +            emacs-major-version))
  36451. +    (minor (and (boundp 'emacs-minor-version)
  36452. +            emacs-minor-version))
  36453. +    flavor comments)
  36454. +    ;; figure out version numbers if not already discovered
  36455. +    (and (or (not major) (not minor))
  36456. +     (string-match "\\([0-9]+\\).\\([0-9]+\\)" emacs-version)
  36457. +     (setq major (string-to-int (substring emacs-version
  36458. +                           (match-beginning 1)
  36459. +                           (match-end 1)))
  36460. +           minor (string-to-int (substring emacs-version
  36461. +                           (match-beginning 2)
  36462. +                           (match-end 2)))))
  36463. +    (if (not (and major minor))
  36464. +    (error "Cannot figure out the major and minor version numbers."))
  36465. +    ;; calculate the major version
  36466. +    (cond
  36467. +     ((= major 18) (setq major 'v18))    ;Emacs 18
  36468. +     ((= major 4)  (setq major 'v18))    ;Epoch 4
  36469. +     ((= major 19) (setq major 'v19    ;Emacs 19
  36470. +             flavor (if (or (string-match "Lucid" emacs-version)
  36471. +                    (string-match "XEmacs" emacs-version))
  36472. +                    'XEmacs 'FSF)))
  36473. +     ;; I don't know
  36474. +     (t (error "Cannot recognize major version number: %s" major)))
  36475. +    ;; All XEmacs 19's (formerly Lucid) use 8-bit modify-syntax-entry
  36476. +    ;; flags, as do all patched (obsolete) FSF Emacs 19, Emacs 18,
  36477. +    ;; Epoch 4's.  Only vanilla FSF Emacs 19 uses 1-bit flag.  Lets be
  36478. +    ;; as smart as we can about figuring this out.
  36479. +    (if (eq major 'v19)
  36480. +    (let ((table (copy-syntax-table)))
  36481. +      (modify-syntax-entry ?a ". 12345678" table)
  36482. +      (if (= (logand (lsh (aref table ?a) -16) 255) 255)
  36483. +          (setq comments '8-bit)
  36484. +        (setq comments '1-bit)))
  36485. +      (setq comments 'no-dual-comments))
  36486. +    ;; lets do some minimal sanity checking.
  36487. +    (if (and (or
  36488. +          ;; Lemacs before 19.6 had bugs
  36489. +          (and (eq major 'v19) (eq flavor 'XEmacs) (< minor 6))
  36490. +          ;; FSF 19 before 19.21 has known bugs
  36491. +          (and (eq major 'v19) (eq flavor 'FSF) (< minor 21)))
  36492. +         (not c-inhibit-startup-warnings-p))
  36493. +    (with-output-to-temp-buffer "*cc-mode warnings*"
  36494. +      (print (format
  36495. +"The version of Emacs that you are running, %s,
  36496. +has known bugs in its syntax.c parsing routines which will affect the
  36497. +performance of cc-mode. You should strongly consider upgrading to the
  36498. +latest available version.  cc-mode may continue to work, after a
  36499. +fashion, but strange indentation errors could be encountered."
  36500. +             emacs-version))))
  36501. +    ;; Emacs 18, with no patch is not too good
  36502. +    (if (and (eq major 'v18) (eq comments 'no-dual-comments)
  36503. +         (not c-inhibit-startup-warnings-p))
  36504. +    (with-output-to-temp-buffer "*cc-mode warnings*"
  36505. +      (print (format
  36506. +"The version of Emacs 18 you are running, %s,
  36507. +has known deficiencies in its ability to handle dual C++ comments,
  36508. +i.e. C++ line style comments and C block style comments.  This will
  36509. +not be much of a problem for you if you are only editing C code, but
  36510. +if you are doing much C++ editing, you should strongly consider
  36511. +upgrading to one of the latest Emacs 19's.  In Emacs 18, you may also
  36512. +experience performance degradations. Emacs 19 has some new built-in
  36513. +routines which will speed things up for you.
  36514. +
  36515. +Because of these inherent problems, cc-mode is no longer being
  36516. +actively maintained for Emacs 18, however, until you can upgrade to
  36517. +Emacs 19, you may want to look at cc-mode-18.el in the cc-mode
  36518. +distribution.  THIS FILE IS COMPLETELY UNSUPPORTED!  If you use it,
  36519. +you are on your own, although patch contributions will be folded into
  36520. +the main release."
  36521. +                emacs-version))))
  36522. +    ;; Emacs 18 with the syntax patches are no longer supported
  36523. +    (if (and (eq major 'v18) (not (eq comments 'no-dual-comments))
  36524. +         (not c-inhibit-startup-warnings-p))
  36525. +    (with-output-to-temp-buffer "*cc-mode warnings*"
  36526. +      (print (format
  36527. +"You are running a syntax patched Emacs 18 variant.  While this should
  36528. +work for you, you may want to consider upgrading to one of the latest
  36529. +Emacs 19's (FSF or XEmacs -- formerly Lucid).  The syntax patches are
  36530. +no longer supported either for syntax.c or cc-mode."))))
  36531. +    (list major comments))
  36532. +  "A list of features extant in the Emacs you are using.
  36533. +There are many flavors of Emacs out there, each with different
  36534. +features supporting those needed by cc-mode.  Here's the current
  36535. +supported list, along with the values for this variable:
  36536. +
  36537. + Vanilla Emacs 18/Epoch 4:   (v18 no-dual-comments)
  36538. + Emacs 18/Epoch 4 (patch2):  (v18 8-bit)
  36539. + XEmacs (formerly Lucid) 19: (v19 8-bit)
  36540. + FSF Emacs 19:               (v19 1-bit).")
  36541. +
  36542. +(defvar c++-mode-abbrev-table nil
  36543. +  "Abbrev table in use in c++-mode buffers.")
  36544. +(define-abbrev-table 'c++-mode-abbrev-table ())
  36545. +
  36546. +(defvar c-mode-abbrev-table nil
  36547. +  "Abbrev table in use in c-mode buffers.")
  36548. +(define-abbrev-table 'c-mode-abbrev-table ())
  36549. +
  36550. +(defvar objc-mode-abbrev-table nil
  36551. +  "Abbrev table in use in objc-mode buffers.")
  36552. +(define-abbrev-table 'objc-mode-abbrev-table ())
  36553. +
  36554. +(defun c-mode-fsf-menu (name map)
  36555. +  ;; Add FSF menu to a keymap.  FSF menus suck.  Don't add them for
  36556. +  ;; XEmacs. This feature test will fail on other than FSF's Emacs 19.
  36557. +  (condition-case nil
  36558. +      (progn
  36559. +    (define-key map [menu-bar] (make-sparse-keymap))
  36560. +    (define-key map [menu-bar c] (cons name (make-sparse-keymap name)))
  36561. +
  36562. +    (define-key map [menu-bar c comment-region]
  36563. +      '("Comment Out Region" . comment-region))
  36564. +    (define-key map [menu-bar c c-macro-expand]
  36565. +      '("Macro Expand Region" . c-macro-expand))
  36566. +    (define-key map [menu-bar c c-backslash-region]
  36567. +      '("Backslashify" . c-backslash-region))
  36568. +    (define-key map [menu-bar c indent-exp]
  36569. +      '("Indent Expression" . c-indent-exp))
  36570. +    (define-key map [menu-bar c indent-line]
  36571. +      '("Indent Line" . c-indent-command))
  36572. +    (define-key map [menu-bar c fill]
  36573. +      '("Fill Comment Paragraph" . c-fill-paragraph))
  36574. +    (define-key map [menu-bar c up]
  36575. +      '("Up Conditional" . c-up-conditional))
  36576. +    (define-key map [menu-bar c backward]
  36577. +      '("Backward Conditional" . c-backward-conditional))
  36578. +    (define-key map [menu-bar c forward]
  36579. +      '("Forward Conditional" . c-forward-conditional))
  36580. +    (define-key map [menu-bar c backward-stmt]
  36581. +      '("Backward Statement" . c-beginning-of-statement))
  36582. +    (define-key map [menu-bar c forward-stmt]
  36583. +      '("Forward Statement" . c-end-of-statement))
  36584. +
  36585. +    ;; RMS: mouse-3 should not select this menu.  mouse-3's global
  36586. +    ;; definition is useful in C mode and we should not interfere
  36587. +    ;; with that.  The menu is mainly for beginners, and for them,
  36588. +    ;; the menubar requires less memory than a special click.
  36589. +    t)
  36590. +    (error nil)))
  36591. +
  36592. +(defvar c-mode-map ()
  36593. +  "Keymap used in c-mode buffers.")
  36594. +(if c-mode-map
  36595. +    ()
  36596. +  ;; TBD: should we even worry about naming this keymap. My vote: no,
  36597. +  ;; because FSF and XEmacs (formerly Lucid) do it differently.
  36598. +  (setq c-mode-map (make-sparse-keymap))
  36599. +  ;; put standard keybindings into MAP
  36600. +  ;; the following mappings correspond more or less directly to BOCM
  36601. +  (define-key c-mode-map "{"         'c-electric-brace)
  36602. +  (define-key c-mode-map "}"         'c-electric-brace)
  36603. +  (define-key c-mode-map ";"         'c-electric-semi&comma)
  36604. +  (define-key c-mode-map "#"         'c-electric-pound)
  36605. +  (define-key c-mode-map ":"         'c-electric-colon)
  36606. +  ;; Lemacs 19.9 defines these two, the second of which is commented out
  36607. +  ;; (define-key c-mode-map "\e{" 'c-insert-braces)
  36608. +  ;; Commented out electric square brackets because nobody likes them.
  36609. +  ;; (define-key c-mode-map "[" 'c-insert-brackets)
  36610. +  (define-key c-mode-map "\e\C-h"    'c-mark-function)
  36611. +  (define-key c-mode-map "\e\C-q"    'c-indent-exp)
  36612. +  (define-key c-mode-map "\ea"       'c-beginning-of-statement)
  36613. +  (define-key c-mode-map "\ee"       'c-end-of-statement)
  36614. +  ;; I'd rather use an adaptive fill program instead of this.
  36615. +  (define-key c-mode-map "\eq"       'c-fill-paragraph)
  36616. +  (define-key c-mode-map "\C-c\C-n"  'c-forward-conditional)
  36617. +  (define-key c-mode-map "\C-c\C-p"  'c-backward-conditional)
  36618. +  (define-key c-mode-map "\C-c\C-u"  'c-up-conditional)
  36619. +  (define-key c-mode-map "\t"        'c-indent-command)
  36620. +  (define-key c-mode-map "\177"      'c-electric-delete)
  36621. +  ;; these are new keybindings, with no counterpart to BOCM
  36622. +  (define-key c-mode-map ","         'c-electric-semi&comma)
  36623. +  (define-key c-mode-map "/"         'c-electric-slash)
  36624. +  (define-key c-mode-map "*"         'c-electric-star)
  36625. +  (define-key c-mode-map "\C-c\C-q"  'c-indent-defun)
  36626. +  (define-key c-mode-map "\C-c\C-\\" 'c-backslash-region)
  36627. +  ;; TBD: where if anywhere, to put c-backward|forward-into-nomenclature
  36628. +  (define-key c-mode-map "\C-c\C-a"  'c-toggle-auto-state)
  36629. +  (define-key c-mode-map "\C-c\C-b"  'c-submit-bug-report)
  36630. +  (define-key c-mode-map "\C-c\C-c"  'comment-region)
  36631. +  (define-key c-mode-map "\C-c\C-d"  'c-toggle-hungry-state)
  36632. +  (define-key c-mode-map "\C-c\C-e"  'c-macro-expand)
  36633. +  (define-key c-mode-map "\C-c\C-o"  'c-set-offset)
  36634. +  (define-key c-mode-map "\C-c\C-s"  'c-show-syntactic-information)
  36635. +  (define-key c-mode-map "\C-c\C-t"  'c-toggle-auto-hungry-state)
  36636. +  (define-key c-mode-map "\C-c\C-v"  'c-version)
  36637. +  ;; FSF Emacs 19 defines menus in the mode map. This call will return
  36638. +  ;; t on FSF Emacs 19, otherwise no-op and return nil.
  36639. +  (if (and (not (c-mode-fsf-menu "C" c-mode-map))
  36640. +       ;; in XEmacs (formerly Lucid) 19, we want the menu to popup
  36641. +       ;; when the 3rd button is hit.  In 19.10 and beyond this is
  36642. +       ;; done automatically if we put the menu on mode-popup-menu
  36643. +       ;; variable, see c-common-init. RMS decided that this
  36644. +       ;; feature should not be included for FSF's Emacs.
  36645. +       (boundp 'current-menubar)
  36646. +       (not (boundp 'mode-popup-menu)))
  36647. +      (define-key c-mode-map 'button3 'c-popup-menu)))
  36648. +
  36649. +(defvar c++-mode-map ()
  36650. +  "Keymap used in c++-mode buffers.")
  36651. +(if c++-mode-map
  36652. +    ()
  36653. +  ;; In Emacs 19, it makes more sense to inherit c-mode-map
  36654. +  (if (memq 'v19 c-emacs-features)
  36655. +      ;; XEmacs (formerly Lucid) and FSF Emacs 19 do this differently
  36656. +      (if (not (fboundp 'set-keymap-parent))
  36657. +      (setq c++-mode-map (cons 'keymap c-mode-map))
  36658. +    (setq c++-mode-map (make-sparse-keymap))
  36659. +    (set-keymap-parent c++-mode-map c-mode-map))
  36660. +    ;; Do it the hard way for Emacs 18 -- given by JWZ
  36661. +    (setq c++-mode-map (nconc (make-sparse-keymap) c-mode-map)))
  36662. +  ;; add bindings which are only useful for C++
  36663. +  (define-key c++-mode-map "\C-c:"  'c-scope-operator)
  36664. +  ;; FSF Emacs 19 defines menus in the mode map. This call will return
  36665. +  ;; t on FSF Emacs 19, otherwise no-op and return nil.
  36666. +  (c-mode-fsf-menu "C++" c++-mode-map))
  36667. +
  36668. +(defvar objc-mode-map ()
  36669. +  "Keymap used in objc-mode buffers.")
  36670. +(if objc-mode-map
  36671. +    ()
  36672. +  ;; In Emacs 19, it makes more sense to inherit c-mode-map
  36673. +  (if (memq 'v19 c-emacs-features)
  36674. +      ;; XEmacs (formerly Lucid) and FSF Emacs 19 do this differently
  36675. +      (if (not (fboundp 'set-keymap-parent))
  36676. +      (setq objc-mode-map (cons 'keymap c-mode-map))
  36677. +    (setq objc-mode-map (make-sparse-keymap))
  36678. +    (set-keymap-parent objc-mode-map c-mode-map))
  36679. +    ;; Do it the hard way for Emacs 18 -- given by JWZ
  36680. +    (setq objc-mode-map (nconc (make-sparse-keymap) c-mode-map)))
  36681. +  ;; add bindings which are only useful for Objective-C
  36682. +  ;;
  36683. +  ;; no additional bindings
  36684. +  ;;
  36685. +  ;; FSF Emacs 19 defines menus in the mode map. This call will return
  36686. +  ;; t on FSF Emacs 19, otherwise no-op and return nil.
  36687. +  (c-mode-fsf-menu "ObjC" objc-mode-map))
  36688. +
  36689. +(defun c-populate-syntax-table (table)
  36690. +  ;; Populate the syntax TABLE
  36691. +  ;; DO NOT TRY TO SET _ (UNDERSCORE) TO WORD CLASS!
  36692. +  (modify-syntax-entry ?\\ "\\"    table)
  36693. +  (modify-syntax-entry ?+  "."     table)
  36694. +  (modify-syntax-entry ?-  "."     table)
  36695. +  (modify-syntax-entry ?=  "."     table)
  36696. +  (modify-syntax-entry ?%  "."     table)
  36697. +  (modify-syntax-entry ?<  "."     table)
  36698. +  (modify-syntax-entry ?>  "."     table)
  36699. +  (modify-syntax-entry ?&  "."     table)
  36700. +  (modify-syntax-entry ?|  "."     table)
  36701. +  (modify-syntax-entry ?\' "\""    table))
  36702. +
  36703. +(defvar c-mode-syntax-table nil
  36704. +  "Syntax table used in c-mode buffers.")
  36705. +(if c-mode-syntax-table
  36706. +    ()
  36707. +  (setq c-mode-syntax-table (make-syntax-table))
  36708. +  (c-populate-syntax-table c-mode-syntax-table)
  36709. +  ;; add extra comment syntax
  36710. +  (modify-syntax-entry ?/  ". 14"  c-mode-syntax-table)
  36711. +  (modify-syntax-entry ?*  ". 23"  c-mode-syntax-table))
  36712. +
  36713. +(defvar c++-mode-syntax-table nil
  36714. +  "Syntax table used in c++-mode buffers.")
  36715. +(if c++-mode-syntax-table
  36716. +    ()
  36717. +  (setq c++-mode-syntax-table (make-syntax-table))
  36718. +  (c-populate-syntax-table c++-mode-syntax-table)
  36719. +  ;; add extra comment syntax
  36720. +  (cond
  36721. +   ((memq '8-bit c-emacs-features)
  36722. +    ;; XEmacs (formerly Lucid) has the best implementation
  36723. +    (modify-syntax-entry ?/  ". 1456" c++-mode-syntax-table)
  36724. +    (modify-syntax-entry ?*  ". 23"   c++-mode-syntax-table)
  36725. +    (modify-syntax-entry ?\n "> b"    c++-mode-syntax-table)
  36726. +    ;; Give CR the same syntax as newline, for selective-display
  36727. +    (modify-syntax-entry ?\^m "> b"    c++-mode-syntax-table))
  36728. +   ((memq '1-bit c-emacs-features)
  36729. +    ;; FSF Emacs 19 does things differently, but we can work with it
  36730. +    (modify-syntax-entry ?/  ". 124b" c++-mode-syntax-table)
  36731. +    (modify-syntax-entry ?*  ". 23"   c++-mode-syntax-table)
  36732. +    (modify-syntax-entry ?\n "> b"    c++-mode-syntax-table)
  36733. +    ;; Give CR the same syntax as newline, for selective-display
  36734. +    (modify-syntax-entry ?\^m "> b"    c++-mode-syntax-table))
  36735. +   )
  36736. +  ;; TBD: does it make sense for colon to be symbol class in C++?
  36737. +  ;; I'm not so sure, since c-label-key is busted on lines like:
  36738. +  ;; Foo::bar( i );
  36739. +  ;; maybe c-label-key should be fixed instead of commenting this out,
  36740. +  ;; but it also bothers me that this only seems appropriate for C++
  36741. +  ;; and not C.
  36742. +  ;;(modify-syntax-entry ?: "_" c++-mode-syntax-table)
  36743. +  )
  36744. +
  36745. +(defvar objc-mode-syntax-table nil
  36746. +  "Syntax table used in objc-mode buffers.")
  36747. +(if objc-mode-syntax-table
  36748. +    ()
  36749. +  (setq objc-mode-syntax-table (make-syntax-table))
  36750. +  (c-populate-syntax-table objc-mode-syntax-table)
  36751. +  ;; add extra comment syntax
  36752. +  (cond
  36753. +   ((memq '8-bit c-emacs-features)
  36754. +    ;; XEmacs (formerly Lucid) has the best implementation
  36755. +    (modify-syntax-entry ?/  ". 1456" objc-mode-syntax-table)
  36756. +    (modify-syntax-entry ?*  ". 23"   objc-mode-syntax-table)
  36757. +    (modify-syntax-entry ?\n "> b"    objc-mode-syntax-table)
  36758. +    ;; Give CR the same syntax as newline, for selective-display
  36759. +    (modify-syntax-entry ?\^m "> b"   objc-mode-syntax-table))
  36760. +   ((memq '1-bit c-emacs-features)
  36761. +    ;; FSF Emacs 19 does things differently, but we can work with it
  36762. +    (modify-syntax-entry ?/  ". 124b" objc-mode-syntax-table)
  36763. +    (modify-syntax-entry ?*  ". 23"   objc-mode-syntax-table)
  36764. +    (modify-syntax-entry ?\n "> b"    objc-mode-syntax-table)
  36765. +    ;; Give CR the same syntax as newline, for selective-display
  36766. +    (modify-syntax-entry ?\^m "> b"   objc-mode-syntax-table))
  36767. +   )
  36768. +  ;; everyone gets these
  36769. +  (modify-syntax-entry ?@ "_" objc-mode-syntax-table)
  36770. +  )
  36771. +
  36772. +(defvar c-hungry-delete-key nil
  36773. +  "Internal state of hungry delete key feature.")
  36774. +(defvar c-auto-newline nil
  36775. +  "Internal state of auto newline feature.")
  36776. +(defvar c-auto-hungry-string nil
  36777. +  "Internal auto-newline/hungry-delete designation string for mode line.")
  36778. +(defvar c-syntactic-context nil
  36779. +  "Variable containing syntactic analysis list during indentation.")
  36780. +(defvar c-comment-start-regexp nil
  36781. +  "Buffer local variable describing how comment are introduced.")
  36782. +(defvar c-conditional-key nil
  36783. +  "Buffer local language-specific conditional keyword regexp.")
  36784. +(defvar c-access-key nil
  36785. +  "Buffer local language-specific access key regexp.")
  36786. +(defvar c-class-key nil
  36787. +  "Buffer local language-specific class key regexp.")
  36788. +
  36789. +(make-variable-buffer-local 'c-auto-newline)
  36790. +(make-variable-buffer-local 'c-hungry-delete-key)
  36791. +(make-variable-buffer-local 'c-auto-hungry-string)
  36792. +(make-variable-buffer-local 'c-comment-start-regexp)
  36793. +(make-variable-buffer-local 'c-conditional-key)
  36794. +(make-variable-buffer-local 'c-access-key)
  36795. +(make-variable-buffer-local 'c-class-key)
  36796. +(make-variable-buffer-local 'c-recognize-knr-p)
  36797. +
  36798. +;; cmacexp is lame because it uses no preprocessor symbols.
  36799. +;; It isn't very extensible either -- hardcodes /lib/cpp.
  36800. +;; [I add it here only because c-mode has it -- BAW]]
  36801. +(autoload 'c-macro-expand "cmacexp"
  36802. +  "Display the result of expanding all C macros occurring in the region.
  36803. +The expansion is entirely correct because it uses the C preprocessor."
  36804. +  t)
  36805. +
  36806. +
  36807. +;; constant regular expressions for looking at various constructs
  36808. +(defconst c-symbol-key "\\(\\w\\|\\s_\\)+"
  36809. +  "Regexp describing a C/C++/ObjC symbol.
  36810. +We cannot use just `word' syntax class since `_' cannot be in word
  36811. +class.  Putting underscore in word class breaks forward word movement
  36812. +behavior that users are familiar with.")
  36813. +(defconst c-C++-class-key "\\(class\\|struct\\|union\\)"
  36814. +  "Regexp describing a C++ class declaration, including templates.")
  36815. +(defconst c-inher-key
  36816. +  (concat "\\(\\<static\\>\\s +\\)?"
  36817. +      c-C++-class-key "[ \t]+" c-symbol-key
  36818. +      "\\([ \t]*:[ \t]*\\)?\\s *[^;]")
  36819. +  "Regexp describing a class inheritance declaration.")
  36820. +(defconst c-protection-key
  36821. +  "\\<\\(public\\|protected\\|private\\)\\>"
  36822. +  "Regexp describing protection keywords.")
  36823. +(defconst c-baseclass-key
  36824. +  (concat
  36825. +   ":?[ \t]*\\(virtual[ \t]+\\)?\\("
  36826. +   c-protection-key "[ \t]+\\)" c-symbol-key)
  36827. +  "Regexp describing base classes in a derived class definition.")
  36828. +(defconst c-switch-label-key
  36829. +  "\\(\\(case[( \t]+\\S .*\\)\\|default[ \t]*\\):"
  36830. +  "Regexp describing a switch's case or default label")
  36831. +(defconst c-C++-access-key
  36832. +  (concat c-protection-key ":")
  36833. +  "Regexp describing C++ access specification keywords.")
  36834. +(defconst c-label-key
  36835. +  (concat c-symbol-key ":\\([^:]\\|$\\)")
  36836. +  "Regexp describing any label.")
  36837. +(defconst c-C-conditional-key
  36838. +  "\\b\\(for\\|if\\|do\\|else\\|while\\|switch\\)\\b[^_]"
  36839. +  "Regexp describing a conditional control.")
  36840. +(defconst c-C++-conditional-key
  36841. +  "\\b\\(for\\|if\\|do\\|else\\|while\\|switch\\|try\\|catch\\)\\b[^_]"
  36842. +  "Regexp describing a conditional control for C++.")
  36843. +
  36844. +(defconst c-ObjC-method-key
  36845. +  (concat
  36846. +   "^\\s *[+-]\\s *"
  36847. +   "\\(([^)]*)\\)?"            ; return type
  36848. +   ;; \\s- in objc syntax table does not include \n
  36849. +   ;; since it is considered the end of //-comments.
  36850. +   "[ \t\n]*" c-symbol-key)
  36851. +  "Regexp describing an Objective-C method intro.")
  36852. +(defconst c-ObjC-access-key
  36853. +  (concat "@" c-protection-key)
  36854. +  "Regexp describing access specification keywords for Objective-C.")
  36855. +(defconst c-ObjC-class-key
  36856. +  (concat
  36857. +   "@\\(interface\\|implementation\\)\\s +"
  36858. +   c-symbol-key                ;name of the class
  36859. +   "\\(\\s *:\\s *" c-symbol-key "\\)?"    ;maybe followed by the superclass
  36860. +   "\\(\\s *<[^>]+>\\)?"        ;and maybe the adopted protocols list
  36861. +   )
  36862. +  "Regexp describing a class or protocol declaration for Objective-C.")
  36863. +
  36864. +
  36865. +;; main entry points for the modes
  36866. +;;;###autoload
  36867. +(defun c++-mode ()
  36868. +  "Major mode for editing C++ code.
  36869. +cc-mode Revision: 4.85
  36870. +To submit a problem report, enter `\\[c-submit-bug-report]' from a
  36871. +c++-mode buffer.  This automatically sets up a mail buffer with
  36872. +version information already added.  You just need to add a description
  36873. +of the problem, including a reproducable test case and send the
  36874. +message.
  36875. +
  36876. +Note that the details of configuring c++-mode have been moved to the
  36877. +accompanying texinfo manual (which is not yet completed -- volunteers
  36878. +are welcome).  Until then, please read the README file that came with
  36879. +the cc-mode distribution.
  36880. +
  36881. +The hook variable `c++-mode-hook' is run with no args, if that
  36882. +variable is bound and has a non-nil value.  Also the common hook
  36883. +c-mode-common-hook is run first, by this defun, `c-mode', and `objc-mode'.
  36884. +
  36885. +Key bindings:
  36886. +\\{c++-mode-map}"
  36887. +  (interactive)
  36888. +  (kill-all-local-variables)
  36889. +  (set-syntax-table c++-mode-syntax-table)
  36890. +  (setq major-mode 'c++-mode
  36891. +    mode-name "C++"
  36892. +    local-abbrev-table c++-mode-abbrev-table
  36893. +    ;; should be set before c-common-init call
  36894. +    c-recognize-knr-p nil)
  36895. +  (use-local-map c++-mode-map)
  36896. +  (c-common-init)
  36897. +  (setq comment-start "// "
  36898. +    comment-end ""
  36899. +    c-conditional-key c-C++-conditional-key
  36900. +    c-comment-start-regexp "//\\|/\\*"
  36901. +    c-class-key c-C++-class-key
  36902. +    c-access-key c-C++-access-key)
  36903. +  (run-hooks 'c++-mode-hook))
  36904. +
  36905. +;;;###autoload
  36906. +(defun c-mode ()
  36907. +  "Major mode for editing K&R and ANSI C code.
  36908. +cc-mode Revision: 4.85
  36909. +To submit a problem report, enter `\\[c-submit-bug-report]' from a
  36910. +c-mode buffer.  This automatically sets up a mail buffer with version
  36911. +information already added.  You just need to add a description of the
  36912. +problem, including a reproducable test case and send the message.
  36913. +
  36914. +Note that the details of configuring c++-mode have been moved to the
  36915. +accompanying texinfo manual (which is not yet completed -- volunteers
  36916. +are welcome).  Until then, please read the README file that came with
  36917. +the cc-mode distribution.
  36918. +
  36919. +The hook variable `c-mode-hook' is run with no args, if that value is
  36920. +bound and has a non-nil value.  Also the common hook
  36921. +c-mode-common-hook is run first, by this defun, `c++-mode', and `objc-mode'.
  36922. +
  36923. +Key bindings:
  36924. +\\{c-mode-map}"
  36925. +  (interactive)
  36926. +  (kill-all-local-variables)
  36927. +  (set-syntax-table c-mode-syntax-table)
  36928. +  (setq major-mode 'c-mode
  36929. +    mode-name "C"
  36930. +    local-abbrev-table c-mode-abbrev-table
  36931. +    ;; should be set before c-common-init call
  36932. +    c-recognize-knr-p t)
  36933. +  (use-local-map c-mode-map)
  36934. +  (c-common-init)
  36935. +  (setq comment-start "/* "
  36936. +    comment-end   " */"
  36937. +    c-conditional-key c-C-conditional-key
  36938. +    c-class-key c-C++-class-key
  36939. +    c-comment-start-regexp "/\\*")
  36940. +  (run-hooks 'c-mode-hook))
  36941. +
  36942. +;;;###autoload
  36943. +(defun objc-mode ()
  36944. +  "Major mode for editing Objective C code.
  36945. +cc-mode Revision: 4.85
  36946. +To submit a problem report, enter `\\[c-submit-bug-report]' from an
  36947. +objc-mode buffer.  This automatically sets up a mail buffer with
  36948. +version information already added.  You just need to add a description
  36949. +of the problem, including a reproducable test case and send the
  36950. +message.
  36951. +
  36952. +Note that the details of configuring c++-mode have been moved to the
  36953. +accompanying texinfo manual (which is not yet completed -- volunteers
  36954. +are welcome).  Until then, please read the README file that came with
  36955. +the cc-mode distribution.
  36956. +
  36957. +The hook variable `objc-mode-hook' is run with no args, if that value
  36958. +is bound and has a non-nil value.  Also the common hook
  36959. +c-mode-common-hook is run first, by this defun, `c-mode', and `c++-mode'.
  36960. +
  36961. +Key bindings:
  36962. +\\{objc-mode-map}"
  36963. +  (interactive)
  36964. +  (kill-all-local-variables)
  36965. +  (set-syntax-table objc-mode-syntax-table)
  36966. +  (setq major-mode 'objc-mode
  36967. +    mode-name "ObjC"
  36968. +    local-abbrev-table objc-mode-abbrev-table
  36969. +    ;; should be set before c-common-init call
  36970. +    c-recognize-knr-p t)
  36971. +  (use-local-map objc-mode-map)
  36972. +  (c-common-init)
  36973. +  (setq comment-start "// "
  36974. +    comment-end   ""
  36975. +    c-conditional-key c-C-conditional-key
  36976. +    c-comment-start-regexp "//\\|/\\*"
  36977. +     c-class-key c-ObjC-class-key
  36978. +    c-access-key c-ObjC-access-key)
  36979. +  (run-hooks 'objc-mode-hook))
  36980. +
  36981. +(defun c-common-init ()
  36982. +  ;; Common initializations for c++-mode and c-mode.
  36983. +  ;; make local variables
  36984. +  (make-local-variable 'paragraph-start)
  36985. +  (make-local-variable 'paragraph-separate)
  36986. +  (make-local-variable 'paragraph-ignore-fill-prefix)
  36987. +  (make-local-variable 'require-final-newline)
  36988. +  (make-local-variable 'parse-sexp-ignore-comments)
  36989. +  (make-local-variable 'indent-line-function)
  36990. +  (make-local-variable 'indent-region-function)
  36991. +  (make-local-variable 'comment-start)
  36992. +  (make-local-variable 'comment-end)
  36993. +  (make-local-variable 'comment-column)
  36994. +  (make-local-variable 'comment-start-skip)
  36995. +  ;; now set their values
  36996. +  (setq paragraph-start (concat "^$\\|" page-delimiter)
  36997. +    paragraph-separate paragraph-start
  36998. +    paragraph-ignore-fill-prefix t
  36999. +    require-final-newline t
  37000. +    parse-sexp-ignore-comments t
  37001. +    indent-line-function 'c-indent-line
  37002. +    indent-region-function 'c-indent-region
  37003. +    comment-column 32
  37004. +    comment-start-skip "/\\*+ *\\|// *")
  37005. +  ;; setup the comment indent variable in a Emacs version portable way
  37006. +  ;; ignore any byte compiler warnings you might get here
  37007. +  (if (boundp 'comment-indent-function)
  37008. +      (progn
  37009. +       (make-local-variable 'comment-indent-function)
  37010. +       (setq comment-indent-function 'c-comment-indent))
  37011. +    (make-local-variable 'comment-indent-hook)
  37012. +    (setq comment-indent-hook 'c-comment-indent))
  37013. +  ;; put C menu into menubar and on popup menu for XEmacs (formerly
  37014. +  ;; Lucid) 19. I think this happens automatically for FSF Emacs 19.
  37015. +  (if (and (boundp 'current-menubar)
  37016. +       current-menubar
  37017. +       (not (assoc mode-name current-menubar)))
  37018. +      (progn
  37019. +    (set-buffer-menubar (copy-sequence current-menubar))
  37020. +    (add-menu nil mode-name c-mode-menu)))
  37021. +  (if (boundp 'mode-popup-menu)
  37022. +      (setq mode-popup-menu
  37023. +        (cons (concat mode-name " Mode Commands") c-mode-menu)))
  37024. +  ;; put auto-hungry designators onto minor-mode-alist, but only once
  37025. +  (or (assq 'c-auto-hungry-string minor-mode-alist)
  37026. +      (setq minor-mode-alist
  37027. +        (cons '(c-auto-hungry-string c-auto-hungry-string)
  37028. +          minor-mode-alist)))
  37029. +  (run-hooks 'c-mode-common-hook))
  37030. +
  37031. +
  37032. +;; macros must be defined before first use
  37033. +(defmacro c-point (position)
  37034. +  ;; Returns the value of point at certain commonly referenced POSITIONs.
  37035. +  ;; POSITION can be one of the following symbols:
  37036. +  ;; 
  37037. +  ;; bol  -- beginning of line
  37038. +  ;; eol  -- end of line
  37039. +  ;; bod  -- beginning of defun
  37040. +  ;; boi  -- back to indentation
  37041. +  ;; ionl -- indentation of next line
  37042. +  ;; iopl -- indentation of previous line
  37043. +  ;; bonl -- beginning of next line
  37044. +  ;; bopl -- beginning of previous line
  37045. +  ;; 
  37046. +  ;; This function does not modify point or mark.
  37047. +  (or (and (eq 'quote (car-safe position))
  37048. +       (null (cdr (cdr position))))
  37049. +      (error "bad buffer position requested: %s" position))
  37050. +  (setq position (nth 1 position))
  37051. +  (` (let ((here (point)))
  37052. +       (,@ (cond
  37053. +        ((eq position 'bol)  '((beginning-of-line)))
  37054. +        ((eq position 'eol)  '((end-of-line)))
  37055. +        ((eq position 'bod)
  37056. +         '((beginning-of-defun)
  37057. +           ;; if defun-prompt-regexp is non-nil, b-o-d won't leave
  37058. +           ;; us at the open brace.
  37059. +           (and (boundp 'defun-prompt-regexp)
  37060. +            defun-prompt-regexp
  37061. +            (looking-at defun-prompt-regexp)
  37062. +            (goto-char (match-end 0)))
  37063. +           ))
  37064. +        ((eq position 'boi)  '((back-to-indentation)))
  37065. +        ((eq position 'bonl) '((forward-line 1)))
  37066. +        ((eq position 'bopl) '((forward-line -1)))
  37067. +        ((eq position 'iopl)
  37068. +         '((forward-line -1)
  37069. +           (back-to-indentation)))
  37070. +        ((eq position 'ionl)
  37071. +         '((forward-line 1)
  37072. +           (back-to-indentation)))
  37073. +        (t (error "unknown buffer position requested: %s" position))
  37074. +        ))
  37075. +       (prog1
  37076. +       (point)
  37077. +     (goto-char here))
  37078. +       ;; workaround for an Emacs18 bug -- blech! Well, at least it
  37079. +       ;; doesn't hurt for v19
  37080. +       (,@ nil)
  37081. +       )))
  37082. +
  37083. +(defmacro c-auto-newline ()
  37084. +  ;; if auto-newline feature is turned on, insert a newline character
  37085. +  ;; and return t, otherwise return nil.
  37086. +  (` (and c-auto-newline
  37087. +      (not (c-in-literal))
  37088. +      (not (newline)))))
  37089. +
  37090. +(defmacro c-safe (&rest body)
  37091. +  ;; safely execute BODY, return nil if an error occurred
  37092. +  (` (condition-case nil
  37093. +     (progn (,@ body))
  37094. +       (error nil))))
  37095. +
  37096. +(defun c-insert-special-chars (arg)
  37097. +  ;; simply call self-insert-command in Emacs 19
  37098. +  (self-insert-command (prefix-numeric-value arg)))
  37099. +
  37100. +
  37101. +;; This is used by indent-for-comment to decide how much to indent a
  37102. +;; comment in C code based on its context.
  37103. +(defun c-comment-indent ()
  37104. +  (if (looking-at (concat "^\\(" c-comment-start-regexp "\\)"))
  37105. +      0                ;Existing comment at bol stays there.
  37106. +    (let ((opoint (point))
  37107. +      placeholder)
  37108. +      (save-excursion
  37109. +    (beginning-of-line)
  37110. +    (cond
  37111. +     ;; CASE 1: A comment following a solitary close-brace should
  37112. +     ;; have only one space.
  37113. +     ((looking-at (concat "[ \t]*}[ \t]*\\($\\|"
  37114. +                  c-comment-start-regexp
  37115. +                  "\\)"))
  37116. +      (search-forward "}")
  37117. +      (1+ (current-column)))
  37118. +     ;; CASE 2: 2 spaces after #endif
  37119. +     ((or (looking-at "^#[ \t]*endif[ \t]*")
  37120. +          (looking-at "^#[ \t]*else[ \t]*"))
  37121. +      7)
  37122. +     ;; CASE 3: use comment-column if previous line is a
  37123. +     ;; comment-only line indented to the left of comment-column
  37124. +     ((save-excursion
  37125. +        (beginning-of-line)
  37126. +        (and (not (bobp))
  37127. +         (forward-line -1))
  37128. +        (skip-chars-forward " \t")
  37129. +        (prog1
  37130. +        (looking-at c-comment-start-regexp)
  37131. +          (setq placeholder (point))))
  37132. +      (goto-char placeholder)
  37133. +      (if (< (current-column) comment-column)
  37134. +          comment-column
  37135. +        (current-column)))
  37136. +     ;; CASE 4: If comment-column is 0, and nothing but space
  37137. +     ;; before the comment, align it at 0 rather than 1.
  37138. +     ((progn
  37139. +        (goto-char opoint)
  37140. +        (skip-chars-backward " \t")
  37141. +        (and (= comment-column 0) (bolp)))
  37142. +      0)
  37143. +     ;; CASE 5: indent at comment column except leave at least one
  37144. +     ;; space.
  37145. +     (t (max (1+ (current-column))
  37146. +         comment-column))
  37147. +     )))))
  37148. +
  37149. +
  37150. +;; active regions, and auto-newline/hungry delete key
  37151. +(defun c-keep-region-active ()
  37152. +  ;; do whatever is necessary to keep the region active in Xemacs
  37153. +  ;; (formerly Lucid). ignore byte-compiler warnings you might see
  37154. +  (and (boundp 'zmacs-region-stays)
  37155. +       (setq zmacs-region-stays t)))
  37156. +
  37157. +(defun c-update-modeline ()
  37158. +  ;; set the c-auto-hungry-string for the correct designation on the modeline
  37159. +  (setq c-auto-hungry-string
  37160. +    (if c-auto-newline
  37161. +        (if c-hungry-delete-key "/ah" "/a")
  37162. +      (if c-hungry-delete-key "/h" nil)))
  37163. +  ;; updates the modeline for all Emacsen
  37164. +  (if (memq 'v19 c-emacs-features)
  37165. +      (force-mode-line-update)
  37166. +    (set-buffer-modified-p (buffer-modified-p))))
  37167. +
  37168. +(defun c-calculate-state (arg prevstate)
  37169. +  ;; Calculate the new state of PREVSTATE, t or nil, based on arg. If
  37170. +  ;; arg is nil or zero, toggle the state. If arg is negative, turn
  37171. +  ;; the state off, and if arg is positive, turn the state on
  37172. +  (if (or (not arg)
  37173. +      (zerop (setq arg (prefix-numeric-value arg))))
  37174. +      (not prevstate)
  37175. +    (> arg 0)))
  37176. +
  37177. +(defun c-toggle-auto-state (arg)
  37178. +  "Toggle auto-newline feature.
  37179. +Optional numeric ARG, if supplied turns on auto-newline when positive,
  37180. +turns it off when negative, and just toggles it when zero.
  37181. +
  37182. +When the auto-newline feature is enabled (as evidenced by the `/a' or
  37183. +`/ah' on the modeline after the mode name) newlines are automatically
  37184. +inserted after special characters such as brace, comma, semi-colon,
  37185. +and colon."
  37186. +  (interactive "P")
  37187. +  (setq c-auto-newline (c-calculate-state arg c-auto-newline))
  37188. +  (c-update-modeline)
  37189. +  (c-keep-region-active))
  37190. +
  37191. +(defun c-toggle-hungry-state (arg)
  37192. +  "Toggle hungry-delete-key feature.
  37193. +Optional numeric ARG, if supplied turns on hungry-delete when positive,
  37194. +turns it off when negative, and just toggles it when zero.
  37195. +
  37196. +When the hungry-delete-key feature is enabled (as evidenced by the
  37197. +`/h' or `/ah' on the modeline after the mode name) the delete key
  37198. +gobbles all preceding whitespace in one fell swoop."
  37199. +  (interactive "P")
  37200. +  (setq c-hungry-delete-key (c-calculate-state arg c-hungry-delete-key))
  37201. +  (c-update-modeline)
  37202. +  (c-keep-region-active))
  37203. +
  37204. +(defun c-toggle-auto-hungry-state (arg)
  37205. +  "Toggle auto-newline and hungry-delete-key features.
  37206. +Optional numeric ARG, if supplied turns on auto-newline and
  37207. +hungry-delete when positive, turns them off when negative, and just
  37208. +toggles them when zero.
  37209. +
  37210. +See `c-toggle-auto-state' and `c-toggle-hungry-state' for details."
  37211. +  (interactive "P")
  37212. +  (setq c-auto-newline (c-calculate-state arg c-auto-newline))
  37213. +  (setq c-hungry-delete-key (c-calculate-state arg c-hungry-delete-key))
  37214. +  (c-update-modeline)
  37215. +  (c-keep-region-active))
  37216. +
  37217. +
  37218. +;; COMMANDS
  37219. +(defun c-electric-delete (arg)
  37220. +  "Deletes preceding character or whitespace.
  37221. +If `c-hungry-delete-key' is non-nil, as evidenced by the \"/h\" or
  37222. +\"/ah\" string on the mode line, then all preceding whitespace is
  37223. +consumed.  If however an ARG is supplied, or `c-hungry-delete-key' is
  37224. +nil, or point is inside a literal then the function in the variable
  37225. +`c-delete-function' is called."
  37226. +  (interactive "P")
  37227. +  (if (or (not c-hungry-delete-key)
  37228. +      arg
  37229. +      (c-in-literal))
  37230. +      (funcall c-delete-function (prefix-numeric-value arg))
  37231. +    (let ((here (point)))
  37232. +      (skip-chars-backward " \t\n")
  37233. +      (if (/= (point) here)
  37234. +      (delete-region (point) here)
  37235. +    (funcall c-delete-function 1)
  37236. +    ))))
  37237. +
  37238. +(defun c-electric-pound (arg)
  37239. +  "Electric pound (`#') insertion.
  37240. +Inserts a `#' character specially depending on the variable
  37241. +`c-electric-pound-behavior'.  If a numeric ARG is supplied, or if
  37242. +point is inside a literal, nothing special happens."
  37243. +  (interactive "P")
  37244. +  (if (or (c-in-literal)
  37245. +      arg
  37246. +      (not (memq 'alignleft c-electric-pound-behavior)))
  37247. +      ;; do nothing special
  37248. +      (self-insert-command (prefix-numeric-value arg))
  37249. +    ;; place the pound character at the left edge
  37250. +    (let ((pos (- (point-max) (point)))
  37251. +      (bolp (bolp)))
  37252. +      (beginning-of-line)
  37253. +      (delete-horizontal-space)
  37254. +      (insert-char last-command-char 1)
  37255. +      (and (not bolp)
  37256. +       (goto-char (- (point-max) pos)))
  37257. +      )))
  37258. +
  37259. +(defun c-electric-brace (arg)
  37260. +  "Insert a brace.
  37261. +
  37262. +If the auto-newline feature is turned on, as evidenced by the \"/a\"
  37263. +or \"/ah\" string on the mode line, newlines are inserted before and
  37264. +after braces based on the value of `c-hanging-braces-alist'.
  37265. +
  37266. +Also, the line is re-indented unless a numeric ARG is supplied, there
  37267. +are non-whitespace characters present on the line after the brace, or
  37268. +the brace is inserted inside a literal."
  37269. +  (interactive "P")
  37270. +  (let* ((bod (c-point 'bod))
  37271. +     (literal (c-in-literal bod))
  37272. +     ;; we want to inhibit blinking the paren since this will be
  37273. +     ;; most disruptive. we'll blink it ourselves later on
  37274. +     (old-blink-paren (if (boundp 'blink-paren-function)
  37275. +                  blink-paren-function
  37276. +                blink-paren-hook))
  37277. +     blink-paren-function        ; emacs19
  37278. +     blink-paren-hook        ; emacs18
  37279. +     syntax newlines
  37280. +     delete-temp-newline
  37281. +     ;; shut this up
  37282. +     (c-echo-syntactic-information-p nil))
  37283. +    (if (or literal
  37284. +        arg
  37285. +        (not (looking-at "[ \t]*$")))
  37286. +    (c-insert-special-chars arg)
  37287. +      (setq syntax (progn
  37288. +             ;; only insert a newline if there is
  37289. +             ;; non-whitespace behind us
  37290. +             (if (save-excursion
  37291. +               (skip-chars-backward " \t")
  37292. +               (not (bolp)))
  37293. +             (progn (newline)
  37294. +                (setq delete-temp-newline t)))
  37295. +             (self-insert-command (prefix-numeric-value arg))
  37296. +             (c-guess-basic-syntax))
  37297. +        newlines (and
  37298. +              c-auto-newline
  37299. +              (or (assq (car (or (assq 'defun-open syntax)
  37300. +                     (assq 'defun-close syntax)
  37301. +                     (assq 'class-open syntax)
  37302. +                     (assq 'class-close syntax)
  37303. +                     (assq 'inline-open syntax)
  37304. +                     (assq 'inline-close syntax)
  37305. +                     (assq 'brace-list-open syntax)
  37306. +                     (assq 'brace-list-close syntax)
  37307. +                     (assq 'brace-list-intro syntax)
  37308. +                     (assq 'brace-list-entry syntax)
  37309. +                     (assq 'block-open syntax)
  37310. +                     (assq 'block-close syntax)
  37311. +                     (assq 'substatement-open syntax)
  37312. +                     (assq 'statement-case-open syntax)
  37313. +                     ))
  37314. +                c-hanging-braces-alist)
  37315. +              '(ignore before after))))
  37316. +      ;; does a newline go before the open brace?
  37317. +      (if (memq 'before newlines)
  37318. +      ;; we leave the newline we've put in there before,
  37319. +      ;; but we need to re-indent the line above
  37320. +      (let ((pos (- (point-max) (point)))
  37321. +        (here (point)))
  37322. +        (forward-line -1)
  37323. +        (c-indent-line)
  37324. +        (goto-char (- (point-max) pos))
  37325. +        ;; if the buffer has changed due to the indentation, we
  37326. +        ;; need to recalculate syntax for the current line
  37327. +        (if (/= (point) here)
  37328. +        (setq syntax (c-guess-basic-syntax))))
  37329. +    ;; must remove the newline we just stuck in (if we really did it)
  37330. +    (and delete-temp-newline
  37331. +         (delete-region (- (point) 2) (1- (point))))
  37332. +    ;; since we're hanging the brace, we need to recalculate
  37333. +    ;; syntax
  37334. +    (setq syntax (c-guess-basic-syntax)))
  37335. +      ;; now adjust the line's indentation
  37336. +      (c-indent-line syntax)
  37337. +      ;; Do all appropriate clean ups
  37338. +      (let ((here (point))
  37339. +        (pos (- (point-max) (point)))
  37340. +        mbeg mend)
  37341. +    ;; clean up empty defun braces
  37342. +    (if (and c-auto-newline
  37343. +         (memq 'empty-defun-braces c-cleanup-list)
  37344. +         (= last-command-char ?\})
  37345. +         (or (assq 'defun-close syntax)
  37346. +             (assq 'class-close syntax)
  37347. +             (assq 'inline-close syntax))
  37348. +         (progn
  37349. +           (forward-char -1)
  37350. +           (skip-chars-backward " \t\n")
  37351. +           (= (preceding-char) ?\{))
  37352. +         ;; make sure matching open brace isn't in a comment
  37353. +         (not (c-in-literal)))
  37354. +        (delete-region (point) (1- here)))
  37355. +    ;; clean up brace-else-brace
  37356. +    (if (and c-auto-newline
  37357. +         (memq 'brace-else-brace c-cleanup-list)
  37358. +         (= last-command-char ?\{)
  37359. +         (re-search-backward "}[ \t\n]*else[ \t\n]*{" nil t)
  37360. +         (progn
  37361. +           (setq mbeg (match-beginning 0)
  37362. +             mend (match-end 0))
  37363. +           (= mend here))
  37364. +         (not (c-in-literal)))
  37365. +        (progn
  37366. +          (delete-region mbeg mend)
  37367. +          (insert "} else {")))
  37368. +    (goto-char (- (point-max) pos))
  37369. +    )
  37370. +      ;; does a newline go after the brace?
  37371. +      (if (memq 'after (cdr-safe newlines))
  37372. +      (progn
  37373. +        (newline)
  37374. +        (c-indent-line)))
  37375. +      ;; blink the paren
  37376. +      (and (= last-command-char ?\})
  37377. +       old-blink-paren
  37378. +       (save-excursion
  37379. +         (c-backward-syntactic-ws bod)
  37380. +         (if (boundp 'blink-paren-function)
  37381. +         (funcall old-blink-paren)
  37382. +           (run-hooks old-blink-paren))))
  37383. +      )))
  37384. +      
  37385. +(defun c-electric-slash (arg)
  37386. +  "Insert a slash character.
  37387. +If slash is second of a double-slash C++ style comment introducing
  37388. +construct, and we are on a comment-only-line, indent line as comment.
  37389. +If numeric ARG is supplied or point is inside a literal, indentation
  37390. +is inhibited."
  37391. +  (interactive "P")
  37392. +  (let ((indentp (and (memq major-mode '(c++-mode objc-mode))
  37393. +              (not arg)
  37394. +              (= (preceding-char) ?/)
  37395. +              (= last-command-char ?/)
  37396. +              (not (c-in-literal))))
  37397. +    ;; shut this up
  37398. +    (c-echo-syntactic-information-p nil))
  37399. +    (self-insert-command (prefix-numeric-value arg))
  37400. +    (if indentp
  37401. +    (c-indent-line))))
  37402. +
  37403. +(defun c-electric-star (arg)
  37404. +  "Insert a star character.
  37405. +If the star is the second character of a C style comment introducing
  37406. +construct, and we are on a comment-only-line, indent line as comment.
  37407. +If numeric ARG is supplied or point is inside a literal, indentation
  37408. +is inhibited."
  37409. +  (interactive "P")
  37410. +  (self-insert-command (prefix-numeric-value arg))
  37411. +  ;; if we are in a literal, or if arg is given do not re-indent the
  37412. +  ;; current line, unless this star introduces a comment-only line.
  37413. +  (if (and (not arg)
  37414. +       (memq (c-in-literal) '(c))
  37415. +       (= (preceding-char) ?*)
  37416. +       (save-excursion
  37417. +         (forward-char -1)
  37418. +         (skip-chars-backward "*")
  37419. +         (if (= (preceding-char) ?/)
  37420. +         (forward-char -1))
  37421. +         (skip-chars-backward " \t")
  37422. +         (bolp)))
  37423. +      ;; shut this up
  37424. +      (let (c-echo-syntactic-information-p)
  37425. +    (c-indent-line))
  37426. +    ))
  37427. +
  37428. +(defun c-electric-semi&comma (arg)
  37429. +  "Insert a comma or semicolon.
  37430. +When the auto-newline feature is turned on, as evidenced by the \"/a\"
  37431. +or \"/ah\" string on the mode line, a newline is inserted after
  37432. +semicolons, but not commas.
  37433. +
  37434. +When semicolon is inserted, the line is re-indented unless a numeric
  37435. +arg is supplied, point is inside a literal, or there are
  37436. +non-whitespace characters on the line following the semicolon."
  37437. +  (interactive "P")
  37438. +  (let* ((bod (c-point 'bod))
  37439. +     (literal (c-in-literal bod))
  37440. +     (here (point))
  37441. +     ;; shut this up
  37442. +     (c-echo-syntactic-information-p nil))
  37443. +    (if (or literal
  37444. +        arg
  37445. +        (not (looking-at "[ \t]*$")))
  37446. +    (c-insert-special-chars arg)
  37447. +      ;; do some special stuff with the character
  37448. +      (self-insert-command (prefix-numeric-value arg))
  37449. +      ;; do all cleanups, reindentations, and newline insertions, but
  37450. +      ;; only if c-auto-newline is turned on
  37451. +      (if (not c-auto-newline) nil
  37452. +    ;; clean ups
  37453. +    (let ((pos (- (point-max) (point))))
  37454. +      (if (and (or (and
  37455. +            (= last-command-char ?,)
  37456. +            (memq 'list-close-comma c-cleanup-list))
  37457. +               (and
  37458. +            (= last-command-char ?\;)
  37459. +            (memq 'defun-close-semi c-cleanup-list)))
  37460. +           (progn
  37461. +             (forward-char -1)
  37462. +             (skip-chars-backward " \t\n")
  37463. +             (= (preceding-char) ?}))
  37464. +           ;; make sure matching open brace isn't in a comment
  37465. +           (not (c-in-literal)))
  37466. +          (delete-region (point) here))
  37467. +      (goto-char (- (point-max) pos)))
  37468. +    ;; re-indent line
  37469. +    (c-indent-line)
  37470. +    ;; newline only after semicolon, but only if that semicolon is
  37471. +    ;; not inside a parenthesis list (e.g. a for loop statement)
  37472. +    (and (= last-command-char ?\;)
  37473. +         (condition-case nil
  37474. +         (save-excursion
  37475. +           (up-list -1)
  37476. +           (/= (following-char) ?\())
  37477. +           (error t))
  37478. +         (progn (newline) t)
  37479. +         (c-indent-line))
  37480. +    ))))
  37481. +
  37482. +(defun c-electric-colon (arg)
  37483. +  "Insert a colon.
  37484. +
  37485. +If the auto-newline feature is turned on, as evidenced by the \"/a\"
  37486. +or \"/ah\" string on the mode line, newlines are inserted before and
  37487. +after colons based on the value of `c-hanging-colons-alist'.
  37488. +
  37489. +Also, the line is re-indented unless a numeric ARG is supplied, there
  37490. +are non-whitespace characters present on the line after the colon, or
  37491. +the colon is inserted inside a literal.
  37492. +
  37493. +This function cleans up double colon scope operators based on the
  37494. +value of `c-cleanup-list'."
  37495. +  (interactive "P")
  37496. +  (let* ((bod (c-point 'bod))
  37497. +     (literal (c-in-literal bod))
  37498. +     syntax newlines
  37499. +     ;; shut this up
  37500. +     (c-echo-syntactic-information-p nil))
  37501. +    (if (or literal
  37502. +        arg
  37503. +        (not (looking-at "[ \t]*$")))
  37504. +    (c-insert-special-chars arg)
  37505. +      ;; insert the colon, then do any specified cleanups
  37506. +      (self-insert-command (prefix-numeric-value arg))
  37507. +      (let ((pos (- (point-max) (point)))
  37508. +        (here (point)))
  37509. +    (if (and c-auto-newline
  37510. +         (memq 'scope-operator c-cleanup-list)
  37511. +         (= (preceding-char) ?:)
  37512. +         (progn
  37513. +           (forward-char -1)
  37514. +           (skip-chars-backward " \t\n")
  37515. +           (= (preceding-char) ?:))
  37516. +         (not (c-in-literal))
  37517. +         (not (= (char-after (- (point) 2)) ?:)))
  37518. +        (delete-region (point) (1- here)))
  37519. +    (goto-char (- (point-max) pos)))
  37520. +      ;; lets do some special stuff with the colon character
  37521. +      (setq syntax (c-guess-basic-syntax)
  37522. +        ;; some language elements can only be determined by
  37523. +        ;; checking the following line.  Lets first look for ones
  37524. +        ;; that can be found when looking on the line with the
  37525. +        ;; colon
  37526. +        newlines
  37527. +        (and c-auto-newline
  37528. +         (or
  37529. +          (let ((langelem (or (assq 'case-label syntax)
  37530. +                      (assq 'label syntax)
  37531. +                      (assq 'access-label syntax))))
  37532. +            (and langelem
  37533. +             (assq (car langelem) c-hanging-colons-alist)))
  37534. +          (prog2
  37535. +              (insert "\n")
  37536. +              (let* ((syntax (c-guess-basic-syntax))
  37537. +                 (langelem
  37538. +                  (or (assq 'member-init-intro syntax)
  37539. +                  (assq 'inher-intro syntax))))
  37540. +            (and langelem
  37541. +                 (assq (car langelem) c-hanging-colons-alist)))
  37542. +            (delete-char -1))
  37543. +          )))
  37544. +      ;; indent the current line
  37545. +      (c-indent-line syntax)
  37546. +      ;; does a newline go before the colon?
  37547. +      (if (memq 'before newlines)
  37548. +      (let ((pos (- (point-max) (point))))
  37549. +        (forward-char -1)
  37550. +        (newline)
  37551. +        (c-indent-line)
  37552. +        (goto-char (- (point-max) pos))))
  37553. +      ;; does a newline go after the colon?
  37554. +      (if (memq 'after (cdr-safe newlines))
  37555. +      (progn
  37556. +        (newline)
  37557. +        (c-indent-line)))
  37558. +      )))
  37559. +
  37560. +(defun c-read-offset (langelem)
  37561. +  ;; read new offset value for LANGELEM from minibuffer. return a
  37562. +  ;; legal value only
  37563. +  (let ((oldoff (format "%s" (cdr-safe (assq langelem c-offsets-alist))))
  37564. +    (errmsg "Offset must be int, func, var, or one of +, -, ++, --: ")
  37565. +    (prompt "Offset: ")
  37566. +    offset input interned)
  37567. +    (while (not offset)
  37568. +      (setq input (read-string prompt oldoff)
  37569. +        offset (cond ((string-equal "+" input) '+)
  37570. +             ((string-equal "-" input) '-)
  37571. +             ((string-equal "++" input) '++)
  37572. +             ((string-equal "--" input) '--)
  37573. +             ((string-match "^-?[0-9]+$" input)
  37574. +              (string-to-int input))
  37575. +             ((fboundp (setq interned (intern input)))
  37576. +              interned)
  37577. +             ((boundp interned) interned)
  37578. +             ;; error, but don't signal one, keep trying
  37579. +             ;; to read an input value
  37580. +             (t (ding)
  37581. +                (setq prompt errmsg)
  37582. +                nil))))
  37583. +    offset))
  37584. +
  37585. +(defun c-set-offset (symbol offset &optional add-p)
  37586. +  "Change the value of a syntactic element symbol in `c-offsets-alist'.
  37587. +SYMBOL is the syntactic element symbol to change and OFFSET is the new
  37588. +offset for that syntactic element.  Optional ADD says to add SYMBOL to
  37589. +`c-offsets-alist' if it doesn't already appear there."
  37590. +  (interactive
  37591. +   (let* ((langelem
  37592. +       (intern (completing-read
  37593. +            (concat "Syntactic symbol to change"
  37594. +                (if current-prefix-arg " or add" "")
  37595. +                ": ")
  37596. +            (mapcar
  37597. +             (function
  37598. +              (lambda (langelem)
  37599. +            (cons (format "%s" (car langelem)) nil)))
  37600. +             c-offsets-alist)
  37601. +            nil (not current-prefix-arg)
  37602. +            ;; initial contents tries to be the last element
  37603. +            ;; on the syntactic analysis list for the current
  37604. +            ;; line
  37605. +            (let* ((syntax (c-guess-basic-syntax))
  37606. +               (len (length syntax))
  37607. +               (ic (format "%s" (car (nth (1- len) syntax)))))
  37608. +              (if (memq 'v19 c-emacs-features)
  37609. +              (cons ic 0)
  37610. +            ic))
  37611. +            )))
  37612. +      (offset (c-read-offset langelem)))
  37613. +     (list langelem offset current-prefix-arg)))
  37614. +  ;; sanity check offset
  37615. +  (or (eq offset '+)
  37616. +      (eq offset '-)
  37617. +      (eq offset '++)
  37618. +      (eq offset '--)
  37619. +      (integerp offset)
  37620. +      (fboundp offset)
  37621. +      (boundp offset)
  37622. +      (error "Offset must be int, func, var, or one of +, -, ++, --: %s"
  37623. +         offset))
  37624. +  (let ((entry (assq symbol c-offsets-alist)))
  37625. +    (if entry
  37626. +    (setcdr entry offset)
  37627. +      (if add-p
  37628. +      (setq c-offsets-alist (cons (cons symbol offset) c-offsets-alist))
  37629. +    (error "%s is not a valid syntactic symbol." symbol))))
  37630. +  (c-keep-region-active))
  37631. +
  37632. +(defun c-set-style (style &optional local)
  37633. +  "Set cc-mode variables to use one of several different indentation styles.
  37634. +STYLE is a string representing the desired style and optional LOCAL is
  37635. +a flag which, if non-nil, means to make the style variables being
  37636. +changed buffer local, instead of the default, which is to set the
  37637. +global variables.  Interactively, the flag comes from the prefix
  37638. +argument.  The styles are chosen from the `c-style-alist' variable."
  37639. +  (interactive (list (completing-read "Use which C indentation style? "
  37640. +                                      c-style-alist nil t)
  37641. +             current-prefix-arg))
  37642. +  (let ((vars (cdr (assoc style c-style-alist))))
  37643. +    (or vars
  37644. +    (error "Invalid C indentation style `%s'" style))
  37645. +    ;; set all the variables
  37646. +    (mapcar
  37647. +     (function
  37648. +      (lambda (varentry)
  37649. +    (let ((var (car varentry))
  37650. +          (val (cdr varentry)))
  37651. +      (and local
  37652. +           (make-local-variable var))
  37653. +      ;; special case for c-offsets-alist
  37654. +      (if (not (eq var 'c-offsets-alist))
  37655. +          (set var val)
  37656. +        ;; reset c-offsets-alist to the default value first
  37657. +        (setq c-offsets-alist (copy-alist c-offsets-alist-default))
  37658. +        ;; now set the langelems that are different
  37659. +        (mapcar
  37660. +         (function
  37661. +          (lambda (langentry)
  37662. +        (let ((langelem (car langentry))
  37663. +              (offset (cdr langentry)))
  37664. +          (c-set-offset langelem offset)
  37665. +          )))
  37666. +         val))
  37667. +      )))
  37668. +     vars))
  37669. +  (c-keep-region-active))
  37670. +
  37671. +(defun c-fill-paragraph (&optional arg)
  37672. +  "Like \\[fill-paragraph] but handles C and C++ style comments.
  37673. +If any of the current line is a comment or within a comment,
  37674. +fill the comment or the paragraph of it that point is in,
  37675. +preserving the comment indentation or line-starting decorations."
  37676. +  (interactive "P")
  37677. +  (let* (comment-start-place
  37678. +     (first-line
  37679. +      ;; Check for obvious entry to comment.
  37680. +      (save-excursion
  37681. +        (beginning-of-line)
  37682. +        (skip-chars-forward " \t\n")
  37683. +        (and (looking-at comment-start-skip)
  37684. +         (setq comment-start-place (point))))))
  37685. +    (if (and (memq major-mode '(c++-mode objc-mode))
  37686. +         (save-excursion
  37687. +           (beginning-of-line)
  37688. +           (looking-at ".*//")))
  37689. +    (let (fill-prefix
  37690. +          (paragraph-start
  37691. +           ;; Lines containing just a comment start or just an end
  37692. +           ;; should not be filled into paragraphs they are next to.
  37693. +           (concat 
  37694. +        paragraph-start
  37695. +        "\\|^[ \t]*/\\*[ \t]*$\\|^[ \t]*\\*/[ \t]*$\\|^[ \t/*]*$"))
  37696. +          (paragraph-separate
  37697. +           (concat
  37698. +        paragraph-separate
  37699. +        "\\|^[ \t]*/\\*[ \t]*$\\|^[ \t]*\\*/[ \t]*$\\|^[ \t/*]*$")))
  37700. +      (save-excursion
  37701. +        (beginning-of-line)
  37702. +        ;; Move up to first line of this comment.
  37703. +        (while (and (not (bobp))
  37704. +            (looking-at "[ \t]*//"))
  37705. +          (forward-line -1))
  37706. +        (if (not (looking-at ".*//"))
  37707. +        (forward-line 1))
  37708. +        ;; Find the comment start in this line.
  37709. +        (re-search-forward "[ \t]*//[ \t]*")
  37710. +        ;; Set the fill-prefix to be what all lines except the first
  37711. +        ;; should start with.
  37712. +        (setq fill-prefix (buffer-substring (match-beginning 0)
  37713. +                        (match-end 0)))
  37714. +        (save-restriction
  37715. +          ;; Narrow down to just the lines of this comment.
  37716. +          (narrow-to-region (c-point 'bol)
  37717. +                (save-excursion
  37718. +                  (forward-line 1)
  37719. +                  (while (looking-at fill-prefix)
  37720. +                    (forward-line 1))
  37721. +                  (point)))
  37722. +          (fill-paragraph arg)
  37723. +          )))
  37724. +      ;; else C style comments
  37725. +      (if (or first-line
  37726. +          ;; t if we enter a comment between start of function and
  37727. +          ;; this line.
  37728. +          (eq (c-in-literal) 'c)
  37729. +          ;; t if this line contains a comment starter.
  37730. +          (setq first-line
  37731. +            (save-excursion
  37732. +              (beginning-of-line)
  37733. +              (prog1
  37734. +              (re-search-forward comment-start-skip
  37735. +                         (save-excursion (end-of-line)
  37736. +                                 (point))
  37737. +                         t)
  37738. +            (setq comment-start-place (point))))))
  37739. +      ;; Inside a comment: fill one comment paragraph.
  37740. +      (let ((fill-prefix
  37741. +         ;; The prefix for each line of this paragraph
  37742. +         ;; is the appropriate part of the start of this line,
  37743. +         ;; up to the column at which text should be indented.
  37744. +         (save-excursion
  37745. +           (beginning-of-line)
  37746. +           (if (looking-at "[ \t]*/\\*.*\\*/")
  37747. +               (progn (re-search-forward comment-start-skip)
  37748. +                  (make-string (current-column) ?\ ))
  37749. +             (if first-line (forward-line 1))
  37750. +
  37751. +             (let ((line-width (progn (end-of-line) (current-column))))
  37752. +               (beginning-of-line)
  37753. +               (prog1
  37754. +               (buffer-substring
  37755. +                (point)
  37756. +
  37757. +                ;; How shall we decide where the end of the
  37758. +                ;; fill-prefix is?
  37759. +                (progn
  37760. +                  (beginning-of-line)
  37761. +                  (skip-chars-forward " \t*" (c-point 'eol))
  37762. +                  (point)))
  37763. +
  37764. +             ;; If the comment is only one line followed
  37765. +             ;; by a blank line, calling move-to-column
  37766. +             ;; above may have added some spaces and tabs
  37767. +             ;; to the end of the line; the fill-paragraph
  37768. +             ;; function will then delete it and the
  37769. +             ;; newline following it, so we'll lose a
  37770. +             ;; blank line when we shouldn't.  So delete
  37771. +             ;; anything move-to-column added to the end
  37772. +             ;; of the line.  We record the line width
  37773. +             ;; instead of the position of the old line
  37774. +             ;; end because move-to-column might break a
  37775. +             ;; tab into spaces, and the new characters
  37776. +             ;; introduced there shouldn't be deleted.
  37777. +
  37778. +             ;; If you can see a better way to do this,
  37779. +             ;; please make the change.  This seems very
  37780. +             ;; messy to me.
  37781. +             (delete-region (progn (move-to-column line-width)
  37782. +                           (point))
  37783. +                    (progn (end-of-line) (point))))))))
  37784. +
  37785. +        (paragraph-start
  37786. +         ;; Lines containing just a comment start or just an end
  37787. +         ;; should not be filled into paragraphs they are next to.
  37788. +         (concat 
  37789. +          paragraph-start
  37790. +          "\\|^[ \t]*/\\*[ \t]*$\\|^[ \t]*\\*/[ \t]*$\\|^[ \t/*]*$"))
  37791. +        (paragraph-separate
  37792. +         (concat
  37793. +          paragraph-separate
  37794. +          "\\|^[ \t]*/\\*[ \t]*$\\|^[ \t]*\\*/[ \t]*$\\|^[ \t/*]*$"))
  37795. +        (chars-to-delete 0))
  37796. +        (save-restriction
  37797. +          ;; Don't fill the comment together with the code
  37798. +          ;; following it.  So temporarily exclude everything
  37799. +          ;; before the comment start, and everything after the
  37800. +          ;; line where the comment ends.  If comment-start-place
  37801. +          ;; is non-nil, the comment starter is there.  Otherwise,
  37802. +          ;; point is inside the comment.
  37803. +          (narrow-to-region (save-excursion
  37804. +                  (if comment-start-place
  37805. +                      (goto-char comment-start-place)
  37806. +                    (search-backward "/*"))
  37807. +                  ;; Protect text before the comment
  37808. +                  ;; start by excluding it.  Add
  37809. +                  ;; spaces to bring back proper
  37810. +                  ;; indentation of that point.
  37811. +                  (let ((column (current-column)))
  37812. +                    (prog1 (point)
  37813. +                      (setq chars-to-delete column)
  37814. +                      (insert-char ?\  column))))
  37815. +                (save-excursion
  37816. +                  (if comment-start-place
  37817. +                      (goto-char (+ comment-start-place 2)))
  37818. +                  (search-forward "*/" nil 'move)
  37819. +                  (forward-line 1)
  37820. +                  (point)))
  37821. +          (fill-paragraph arg)
  37822. +          (save-excursion
  37823. +        ;; Delete the chars we inserted to avoid clobbering
  37824. +        ;; the stuff before the comment start.
  37825. +        (goto-char (point-min))
  37826. +        (if (> chars-to-delete 0)
  37827. +            (delete-region (point) (+ (point) chars-to-delete)))
  37828. +        ;; Find the comment ender (should be on last line of
  37829. +        ;; buffer, given the narrowing) and don't leave it on
  37830. +        ;; its own line, unless that's the style that's desired.
  37831. +        (goto-char (point-max))
  37832. +        (forward-line -1)
  37833. +        (search-forward "*/" nil 'move)
  37834. +        (beginning-of-line)
  37835. +        (if (and c-hanging-comment-ender-p
  37836. +             (looking-at "[ \t]*\\*/"))
  37837. +            ;(delete-indentation)))))
  37838. +            (let ((fill-column (+ fill-column 9999)))
  37839. +              (forward-line -1)
  37840. +              (fill-region-as-paragraph (point) (point-max)))))))
  37841. +    ;; Outside of comments: do ordinary filling.
  37842. +    (fill-paragraph arg)))))
  37843. +
  37844. +;; better movement routines for ThisStyleOfVariablesCommonInCPlusPlus
  37845. +;; originally contributed by Terry_Glanfield.Southern@rxuk.xerox.com
  37846. +(defun c-forward-into-nomenclature (&optional arg)
  37847. +  "Move forward to end of a nomenclature section or word.
  37848. +With arg, to it arg times."
  37849. +  (interactive "p")
  37850. +  (let ((case-fold-search nil))
  37851. +    (if (> arg 0)
  37852. +    (re-search-forward "\\W*\\([A-Z]*[a-z0-9]*\\)" (point-max) t arg)
  37853. +      (while (and (< arg 0)
  37854. +          (re-search-backward
  37855. +           "\\(\\(\\W\\|[a-z0-9]\\)[A-Z]+\\|\\W\\w+\\)"
  37856. +           (point-min) 0))
  37857. +    (forward-char 1)
  37858. +    (setq arg (1+ arg)))))
  37859. +  (c-keep-region-active))
  37860. +
  37861. +(defun c-backward-into-nomenclature (&optional arg)
  37862. +  "Move backward to beginning of a nomenclature section or word.
  37863. +With optional ARG, move that many times.  If ARG is negative, move
  37864. +forward."
  37865. +  (interactive "p")
  37866. +  (c-forward-into-nomenclature (- arg))
  37867. +  (c-keep-region-active))
  37868. +
  37869. +(defun c-scope-operator ()
  37870. +  "Insert a double colon scope operator at point.
  37871. +No indentation or other \"electric\" behavior is performed."
  37872. +  (interactive)
  37873. +  (insert "::"))
  37874. +
  37875. +;; TBD: These are from XEmacs (formerly Lucid) 19.9's version of c-mode.el
  37876. +;;(defun c-insert-brackets ()
  37877. +;;  (interactive)
  37878. +;;  (insert ?[)
  37879. +;;  (save-excursion
  37880. +;;    (insert ?])))
  37881. +
  37882. +;;(defun c-insert-braces ()
  37883. +;;  (interactive)
  37884. +;;  (setq last-command-char ?{)
  37885. +;;  (electric-c-brace 1)
  37886. +;;  (newline)
  37887. +;;  (c-indent-line)
  37888. +;;  (save-excursion
  37889. +;;    (newline)
  37890. +;;    (insert ?})
  37891. +;;    (c-indent-line)))
  37892. +
  37893. +
  37894. +(defun c-beginning-of-statement (&optional count lim)
  37895. +  "Go to the beginning of the innermost C statement.
  37896. +With prefix arg, go back N - 1 statements.  If already at the
  37897. +beginning of a statement then go to the beginning of the preceding
  37898. +one.  If within a string or comment, or next to a comment (only
  37899. +whitespace between), move by sentences instead of statements.
  37900. +
  37901. +When called from a program, this function takes 2 optional args: the
  37902. +prefix arg, and a buffer position limit which is the farthest back to
  37903. +search."
  37904. +  (interactive "p")
  37905. +  (let ((here (point))
  37906. +    (count (or count 1))
  37907. +    (lim (or lim (c-point 'bod)))
  37908. +    state)
  37909. +    (save-excursion
  37910. +      (goto-char lim)
  37911. +      (setq state (parse-partial-sexp (point) here nil nil)))
  37912. +    (if (and (interactive-p)
  37913. +         (or (nth 3 state)
  37914. +         (nth 4 state)
  37915. +         (looking-at (concat "[ \t]*" comment-start-skip))
  37916. +         (save-excursion
  37917. +           (skip-chars-backward " \t")
  37918. +           (goto-char (- (point) 2))
  37919. +           (looking-at "\\*/"))))
  37920. +    (forward-sentence (- count))
  37921. +      (while (> count 0)
  37922. +    (c-beginning-of-statement-1)
  37923. +    (setq count (1- count)))
  37924. +      (while (< count 0)
  37925. +    (c-end-of-statement-1)
  37926. +    (setq count (1+ count))))
  37927. +    ;; its possible we've been left up-buf of lim
  37928. +    (goto-char (max (point) lim))
  37929. +    )
  37930. +  (c-keep-region-active))
  37931. +
  37932. +(defun c-end-of-statement (&optional count lim)
  37933. +  "Go to the end of the innermost C statement.
  37934. +
  37935. +With prefix arg, go forward N - 1 statements.  Move forward to end of
  37936. +the next statement if already at end.  If within a string or comment,
  37937. +move by sentences instead of statements.
  37938. +
  37939. +When called from a program, this function takes 2 optional args: the
  37940. +prefix arg, and a buffer position limit which is the farthest back to
  37941. +search."
  37942. +  (interactive "p")
  37943. +  (c-beginning-of-statement (- (or count 1)) lim)
  37944. +  (c-keep-region-active))
  37945. +
  37946. +(defun c-beginning-of-statement-1 ()
  37947. +  ;; move to the start of the current statement, or the previous
  37948. +  ;; statement if already at the beginning of one.
  37949. +  (let ((firstp t)
  37950. +    donep c-in-literal-cache maybe-labelp
  37951. +    (last-begin (point)))
  37952. +    (while (not donep)
  37953. +      ;; stop at beginning of buffer
  37954. +      (if (bobp) (setq donep t)
  37955. +    ;; go backwards one balanced expression, but be careful of
  37956. +    ;; unbalanced paren being reached
  37957. +    (if (not (c-safe (progn (backward-sexp 1) t)))
  37958. +        (progn
  37959. +          (if firstp
  37960. +          (backward-up-list 1)
  37961. +        (goto-char last-begin))
  37962. +          ;; skip over any unary operators, or other special
  37963. +          ;; characters appearing at front of identifier
  37964. +          (save-excursion
  37965. +        (c-backward-syntactic-ws)
  37966. +        (skip-chars-backward "-+!*&:.~ \t\n")
  37967. +        (if (= (preceding-char) ?\()
  37968. +            (setq last-begin (point))))
  37969. +          (goto-char last-begin)
  37970. +          (setq last-begin (point)
  37971. +            donep t)))
  37972. +
  37973. +    (setq maybe-labelp nil)
  37974. +    ;; see if we're in a literal. if not, then this bufpos may be
  37975. +    ;; a candidate for stopping
  37976. +    (cond
  37977. +     ;; CASE 0: did we hit the error condition above?
  37978. +     (donep)
  37979. +     ;; CASE 1: are we in a literal?
  37980. +     ((eq (c-in-literal) 'pound)
  37981. +      (beginning-of-line))
  37982. +     ;; CASE 2: some other kind of literal?
  37983. +     ((c-in-literal))
  37984. +     ;; CASE 3: are we looking at a conditional keyword?
  37985. +     ((or (looking-at c-conditional-key)
  37986. +          (and (= (following-char) ?\()
  37987. +           (let ((here (point))
  37988. +             (foundp (progn
  37989. +                   (c-backward-syntactic-ws)
  37990. +                   (forward-word -1)
  37991. +                   (looking-at c-conditional-key))))
  37992. +             (if (not foundp)
  37993. +             (goto-char here))
  37994. +             foundp)))
  37995. +      ;; are we in the middle of an else-if clause?
  37996. +      (if (save-excursion
  37997. +        (c-safe (forward-sexp -1))
  37998. +        (looking-at "\\<else\\>[ \t]+\\<if\\>"))
  37999. +          (forward-sexp -1))
  38000. +      (setq last-begin (point)
  38001. +        donep t))
  38002. +     ;; CASE 4: is this the first time we're checking?
  38003. +     (firstp (setq firstp nil
  38004. +               last-begin (point)))
  38005. +     ;; CASE 5: have we crossed a statement barrier?
  38006. +     ((let ((lim (point))
  38007. +        crossedp)
  38008. +        (save-excursion
  38009. +          (while (and (not crossedp)
  38010. +              (< (point) last-begin))
  38011. +        (skip-chars-forward "^;{}:" last-begin)
  38012. +        (if (not (c-in-literal lim))
  38013. +            (if (memq (following-char) '(?\; ?{ ?}))
  38014. +            (setq crossedp t
  38015. +                  donep t)
  38016. +              (if (= (following-char) ?:)
  38017. +              (setq maybe-labelp t))
  38018. +              (forward-char 1))
  38019. +          (forward-char 1))))
  38020. +        crossedp))
  38021. +     ;; CASE 6: ignore labels
  38022. +     ((and maybe-labelp
  38023. +           (or (and c-access-key (looking-at c-access-key))
  38024. +           ;; with switch labels, we have to go back further
  38025. +           ;; to try to pick up the case or default
  38026. +           ;; keyword. Potential bogosity alert: we assume
  38027. +           ;; `case' or `default' is first thing on line
  38028. +           (let ((here (point)))
  38029. +             (beginning-of-line)
  38030. +             (c-forward-syntactic-ws)
  38031. +             (if (looking-at c-switch-label-key)
  38032. +             t
  38033. +               (goto-char here)
  38034. +               nil))
  38035. +           (looking-at c-label-key))))
  38036. +     ;; CASE 7: ObjC method def
  38037. +     ((and (eq major-mode 'objc-mode)
  38038. +           (c-in-objc-method-def-p))
  38039. +      (setq last-begin (point)
  38040. +        donep t))
  38041. +     ;; CASE 8: nothing special
  38042. +     (t (setq last-begin (point)))
  38043. +     )))
  38044. +    (goto-char last-begin)
  38045. +    ;; we always do want to skip over non-whitespace modifier
  38046. +    ;; characters that didn't get skipped above
  38047. +    (skip-chars-backward "-+!*&:.~" (c-point 'boi))))
  38048. +
  38049. +(defun c-end-of-statement-1 ()
  38050. +  (condition-case ()
  38051. +      (progn
  38052. +    (while (and (not (eobp))
  38053. +            (let ((beg (point)))
  38054. +              (forward-sexp 1)
  38055. +              (let ((end (point)))
  38056. +            (save-excursion
  38057. +              (goto-char beg)
  38058. +              (not (re-search-forward "[;{}]" end t)))))))
  38059. +    (re-search-backward "[;}]")
  38060. +    (forward-char 1))
  38061. +    (error 
  38062. +     (let ((beg (point)))
  38063. +       (backward-up-list -1)
  38064. +       (let ((end (point)))
  38065. +     (goto-char beg)
  38066. +     (search-forward ";" end 'move))))))
  38067. +
  38068. +
  38069. +;;(defun c-beginning-of-defun (count)
  38070. +;;  "Move the the COUNTth `real' beginning-of-defun.
  38071. +;;This is defined as the first declaration line of the most enclosing
  38072. +;;top level construct; i.e. class/struct, function, enum, etc.  With
  38073. +;;negative COUNT, go forward."
  38074. +;;  (interactive "p")
  38075. +;;  )
  38076. +;;
  38077. +;;(defun c-beginning-of-defun-1 ()
  38078. +;;  ;; move to the real beginning of defun. `Real' being defined as the
  38079. +;;  ;; first C/C++ declaration line of the most enclosing top level construct.
  38080. +;;  (let* ((state (c-parse-state))
  38081. +;;     (search-start (car state)))
  38082. +;;    ;; if the last thing is a cons then start searching from the end
  38083. +;;    ;; of the previous balanced sexp
  38084. +;;    (goto-char (or (car-safe search-start)
  38085. +;;           (and (numberp search-start)
  38086. +;;            search-start)
  38087. +;;           (point)))
  38088. +;;    (c-beginning-of-statement)
  38089. +;;    (if (bobp)
  38090. +;;    (c-forward-syntactic-ws))
  38091. +;;    ))
  38092. +;;
  38093. +;;(defun c-end-of-defun-1 ()
  38094. +;;  ;; move to the end of the defun.
  38095. +;;  (let* ((state (c-parse-state))
  38096. +;;     (search-start (car state))
  38097. +;;     )))
  38098. +;;
  38099. +
  38100. +(defun c-up-conditional (count)
  38101. +  "Move back to the containing preprocessor conditional, leaving mark behind.
  38102. +A prefix argument acts as a repeat count.  With a negative argument,
  38103. +move forward to the end of the containing preprocessor conditional.
  38104. +When going backwards, `#elif' is treated like `#else' followed by
  38105. +`#if'.  When going forwards, `#elif' is ignored."
  38106. +  (interactive "p")
  38107. +  (c-forward-conditional (- count) t)
  38108. +  (c-keep-region-active))
  38109. +
  38110. +(defun c-backward-conditional (count &optional up-flag)
  38111. +  "Move back across a preprocessor conditional, leaving mark behind.
  38112. +A prefix argument acts as a repeat count.  With a negative argument,
  38113. +move forward across a preprocessor conditional."
  38114. +  (interactive "p")
  38115. +  (c-forward-conditional (- count) up-flag)
  38116. +  (c-keep-region-active))
  38117. +
  38118. +(defun c-forward-conditional (count &optional up-flag)
  38119. +  "Move forward across a preprocessor conditional, leaving mark behind.
  38120. +A prefix argument acts as a repeat count.  With a negative argument,
  38121. +move backward across a preprocessor conditional."
  38122. +  (interactive "p")
  38123. +  (let* ((forward (> count 0))
  38124. +     (increment (if forward -1 1))
  38125. +     (search-function (if forward 're-search-forward 're-search-backward))
  38126. +     (new))
  38127. +    (save-excursion
  38128. +      (while (/= count 0)
  38129. +    (let ((depth (if up-flag 0 -1)) found)
  38130. +      (save-excursion
  38131. +        ;; Find the "next" significant line in the proper direction.
  38132. +        (while (and (not found)
  38133. +            ;; Rather than searching for a # sign that
  38134. +            ;; comes at the beginning of a line aside from
  38135. +            ;; whitespace, search first for a string
  38136. +            ;; starting with # sign.  Then verify what
  38137. +            ;; precedes it.  This is faster on account of
  38138. +            ;; the fastmap feature of the regexp matcher.
  38139. +            (funcall search-function
  38140. +                 "#[ \t]*\\(if\\|elif\\|endif\\)"
  38141. +                 nil t))
  38142. +          (beginning-of-line)
  38143. +          ;; Now verify it is really a preproc line.
  38144. +          (if (looking-at "^[ \t]*#[ \t]*\\(if\\|elif\\|endif\\)")
  38145. +          (let ((prev depth))
  38146. +            ;; Update depth according to what we found.
  38147. +            (beginning-of-line)
  38148. +            (cond ((looking-at "[ \t]*#[ \t]*endif")
  38149. +               (setq depth (+ depth increment)))
  38150. +              ((looking-at "[ \t]*#[ \t]*elif")
  38151. +               (if (and forward (= depth 0))
  38152. +                   (setq found (point))))
  38153. +              (t (setq depth (- depth increment))))
  38154. +            ;; If we are trying to move across, and we find an
  38155. +            ;; end before we find a beginning, get an error.
  38156. +            (if (and (< prev 0) (< depth prev))
  38157. +            (error (if forward
  38158. +                   "No following conditional at this level"
  38159. +                 "No previous conditional at this level")))
  38160. +            ;; When searching forward, start from next line so
  38161. +            ;; that we don't find the same line again.
  38162. +            (if forward (forward-line 1))
  38163. +            ;; If this line exits a level of conditional, exit
  38164. +            ;; inner loop.
  38165. +            (if (< depth 0)
  38166. +            (setq found (point))))
  38167. +        ;; else
  38168. +        (if forward (forward-line 1))
  38169. +        )))
  38170. +      (or found
  38171. +          (error "No containing preprocessor conditional"))
  38172. +      (goto-char (setq new found)))
  38173. +    (setq count (+ count increment))))
  38174. +    (push-mark)
  38175. +    (goto-char new))
  38176. +  (c-keep-region-active))
  38177. +
  38178. +
  38179. +;; commands to indent lines, regions, defuns, and expressions
  38180. +(defun c-indent-command (&optional whole-exp)
  38181. +  "Indent current line as C++ code, or in some cases insert a tab character.
  38182. +
  38183. +If `c-tab-always-indent' is t, always just indent the current line.
  38184. +If nil, indent the current line only if point is at the left margin or
  38185. +in the line's indentation; otherwise insert a tab.  If other than nil
  38186. +or t, then tab is inserted only within literals (comments and strings)
  38187. +and inside preprocessor directives, but line is always reindented.
  38188. +
  38189. +A numeric argument, regardless of its value, means indent rigidly all
  38190. +the lines of the expression starting after point so that this line
  38191. +becomes properly indented.  The relative indentation among the lines
  38192. +of the expression are preserved."
  38193. +  (interactive "P")
  38194. +  (let ((bod (c-point 'bod)))
  38195. +    (if whole-exp
  38196. +    ;; If arg, always indent this line as C
  38197. +    ;; and shift remaining lines of expression the same amount.
  38198. +    (let ((shift-amt (c-indent-line))
  38199. +          beg end)
  38200. +      (save-excursion
  38201. +        (if (eq c-tab-always-indent t)
  38202. +        (beginning-of-line))
  38203. +        (setq beg (point))
  38204. +        (forward-sexp 1)
  38205. +        (setq end (point))
  38206. +        (goto-char beg)
  38207. +        (forward-line 1)
  38208. +        (setq beg (point)))
  38209. +      (if (> end beg)
  38210. +          (indent-code-rigidly beg end (- shift-amt) "#")))
  38211. +      ;; No arg supplied, use c-tab-always-indent to determine
  38212. +      ;; behavior
  38213. +      (cond
  38214. +       ;; CASE 1: indent when at column zero or in lines indentation,
  38215. +       ;; otherwise insert a tab
  38216. +       ((not c-tab-always-indent)
  38217. +    (if (save-excursion
  38218. +          (skip-chars-backward " \t")
  38219. +          (not (bolp)))
  38220. +        (insert-tab)
  38221. +      (c-indent-line)))
  38222. +       ;; CASE 2: just indent the line
  38223. +       ((eq c-tab-always-indent t)
  38224. +    (c-indent-line))
  38225. +       ;; CASE 3: if in a literal, insert a tab, but always indent the
  38226. +       ;; line
  38227. +       (t
  38228. +    (if (c-in-literal bod)
  38229. +        (insert-tab))
  38230. +    (c-indent-line)
  38231. +    )))))
  38232. +
  38233. +(defun c-indent-exp (&optional shutup-p)
  38234. +  "Indent each line in balanced expression following point.
  38235. +Optional SHUTUP-P if non-nil, inhibits message printing and error checking."
  38236. +  (interactive "P")
  38237. +  (let ((here (point))
  38238. +    end)
  38239. +    (unwind-protect
  38240. +    (let ((c-echo-syntactic-information-p nil) ;keep quiet for speed
  38241. +          (start (progn
  38242. +               ;; try to be smarter about finding the range of
  38243. +               ;; lines to indent. skip all following
  38244. +               ;; whitespace. failing that, try to find any
  38245. +               ;; opening brace on the current line
  38246. +               (skip-chars-forward " \t\n")
  38247. +               (if (memq (following-char) '(?\( ?\[ ?\{))
  38248. +               (point)
  38249. +             (let ((state (parse-partial-sexp (point)
  38250. +                              (c-point 'eol))))
  38251. +               (and (nth 1 state)
  38252. +                (goto-char (nth 1 state))
  38253. +                (memq (following-char) '(?\( ?\[ ?\{))
  38254. +                (point)))))))
  38255. +      ;; find balanced expression end
  38256. +      (setq end (and (c-safe (progn (forward-sexp 1) t))
  38257. +             (point-marker)))
  38258. +      ;; sanity check
  38259. +      (and (not start)
  38260. +           (not shutup-p)
  38261. +           (error "Cannot find start of balanced expression to indent."))
  38262. +      (and (not end)
  38263. +           (not shutup-p)
  38264. +           (error "Cannot find end of balanced expression to
  38265. +           indent."))
  38266. +      (c-progress-init start end 'c-indent-exp)
  38267. +      (goto-char start)
  38268. +      (beginning-of-line)
  38269. +      (while (< (point) end)
  38270. +        (if (not (looking-at "[ \t]*$"))
  38271. +        (c-indent-line))
  38272. +        (c-progress-update)
  38273. +        (forward-line 1)))
  38274. +      ;; make sure marker is deleted
  38275. +      (and end
  38276. +       (set-marker end nil))
  38277. +      (c-progress-fini 'c-indent-exp)
  38278. +      (goto-char here))))
  38279. +
  38280. +(defun c-indent-defun ()
  38281. +  "Re-indents the current top-level function def, struct or class declaration."
  38282. +  (interactive)
  38283. +  (let ((here (point-marker))
  38284. +    (c-echo-syntactic-information-p nil)
  38285. +    (brace (c-least-enclosing-brace (c-parse-state))))
  38286. +    (if brace
  38287. +    (goto-char brace)
  38288. +      (beginning-of-defun))
  38289. +    ;; if defun-prompt-regexp is non-nil, b-o-d might not leave us at
  38290. +    ;; the open brace. I consider this an Emacs bug.
  38291. +    (and (boundp 'defun-prompt-regexp)
  38292. +     defun-prompt-regexp
  38293. +     (looking-at defun-prompt-regexp)
  38294. +     (goto-char (match-end 0)))
  38295. +    ;; catch all errors in c-indent-exp so we can 1. give more
  38296. +    ;; meaningful error message, and 2. restore point
  38297. +    (unwind-protect
  38298. +    (c-indent-exp)
  38299. +      (goto-char here)
  38300. +      (set-marker here nil))))
  38301. +
  38302. +(defun c-indent-region (start end)
  38303. +  ;; Indent every line whose first char is between START and END inclusive.
  38304. +  (save-excursion
  38305. +    (goto-char start)
  38306. +    ;; Advance to first nonblank line.
  38307. +    (skip-chars-forward " \t\n")
  38308. +    (beginning-of-line)
  38309. +    (let (endmark)
  38310. +      (unwind-protect
  38311. +      (let ((c-tab-always-indent t)
  38312. +        ;; shut up any echo msgs on indiv lines
  38313. +        (c-echo-syntactic-information-p nil))
  38314. +        (c-progress-init start end 'c-indent-region)
  38315. +        (setq endmark (copy-marker end))
  38316. +        (while (and (bolp)
  38317. +            (not (eobp))
  38318. +            (< (point) endmark))
  38319. +          ;; update progress
  38320. +          (c-progress-update)
  38321. +          ;; Indent one line as with TAB.
  38322. +          (let (nextline sexpend sexpbeg)
  38323. +        ;; skip blank lines
  38324. +        (skip-chars-forward " \t\n")
  38325. +        (beginning-of-line)
  38326. +        ;; indent the current line
  38327. +        (c-indent-line)
  38328. +        (if (save-excursion
  38329. +              (beginning-of-line)
  38330. +              (looking-at "[ \t]*#"))
  38331. +            (forward-line 1)
  38332. +          (save-excursion
  38333. +            ;; Find beginning of following line.
  38334. +            (setq nextline (c-point 'bonl))
  38335. +            ;; Find first beginning-of-sexp for sexp extending past
  38336. +            ;; this line.
  38337. +            (beginning-of-line)
  38338. +            (while (< (point) nextline)
  38339. +              (condition-case nil
  38340. +              (progn
  38341. +                (forward-sexp 1)
  38342. +                (setq sexpend (point)))
  38343. +            (error (setq sexpend nil)
  38344. +                   (goto-char nextline)))
  38345. +              (c-forward-syntactic-ws))
  38346. +            (if sexpend
  38347. +            (progn 
  38348. +              ;; make sure the sexp we found really starts on the
  38349. +              ;; current line and extends past it
  38350. +              (goto-char sexpend)
  38351. +              (setq sexpend (point-marker))
  38352. +              (backward-sexp 1)
  38353. +              (setq sexpbeg (point)))))
  38354. +          ;; check to see if the next line starts a
  38355. +          ;; comment-only line
  38356. +          (save-excursion
  38357. +            (forward-line 1)
  38358. +            (skip-chars-forward " \t")
  38359. +            (if (looking-at c-comment-start-regexp)
  38360. +            (setq sexpbeg (c-point 'bol))))
  38361. +          ;; If that sexp ends within the region, indent it all at
  38362. +          ;; once, fast.
  38363. +          (condition-case nil
  38364. +              (if (and sexpend
  38365. +                   (> sexpend nextline)
  38366. +                   (<= sexpend endmark))
  38367. +              (progn
  38368. +                (goto-char sexpbeg)
  38369. +                (c-indent-exp 'shutup)
  38370. +                (c-progress-update)
  38371. +                (goto-char sexpend)))
  38372. +            (error
  38373. +             (goto-char sexpbeg)
  38374. +             (c-indent-line)))
  38375. +          ;; Move to following line and try again.
  38376. +          (and sexpend
  38377. +               (markerp sexpend)
  38378. +               (set-marker sexpend nil))
  38379. +          (forward-line 1)))))
  38380. +    (set-marker endmark nil)
  38381. +    (c-progress-fini 'c-indent-region)
  38382. +    ))))
  38383. +
  38384. +(defun c-mark-function ()
  38385. +  "Put mark at end of a C, C++, or Objective-C defun, point at beginning."
  38386. +  (interactive)
  38387. +  (let ((here (point))
  38388. +    ;; there should be a c-point position for 'eod
  38389. +    (eod  (save-excursion (end-of-defun) (point)))
  38390. +    (state (c-parse-state))
  38391. +    brace)
  38392. +    (while state
  38393. +      (setq brace (car state))
  38394. +      (if (consp brace)
  38395. +      (goto-char (cdr brace))
  38396. +    (goto-char brace))
  38397. +      (setq state (cdr state)))
  38398. +    (if (= (following-char) ?{)
  38399. +    (progn
  38400. +      (forward-line -1)
  38401. +      (while (not (or (bobp)
  38402. +              (looking-at "[ \t]*$")))
  38403. +        (forward-line -1)))
  38404. +      (forward-line 1)
  38405. +      (skip-chars-forward " \t\n"))
  38406. +    (push-mark here)
  38407. +    (push-mark eod nil t)))
  38408. +
  38409. +
  38410. +;; for progress reporting
  38411. +(defvar c-progress-info nil)
  38412. +
  38413. +(defun c-progress-init (start end context)
  38414. +  ;; start the progress update messages.  if this emacs doesn't have a
  38415. +  ;; built-in timer, just be dumb about it
  38416. +  (if (not (fboundp 'current-time))
  38417. +      (message "indenting region... (this may take a while)")
  38418. +    ;; if progress has already been initialized, do nothing. otherwise
  38419. +    ;; initialize the counter with a vector of:
  38420. +    ;; [start end lastsec context]
  38421. +    (if c-progress-info
  38422. +    ()
  38423. +      (setq c-progress-info (vector start
  38424. +                    (save-excursion
  38425. +                      (goto-char end)
  38426. +                      (point-marker))
  38427. +                    (nth 1 (current-time))
  38428. +                    context))
  38429. +      (message "indenting region..."))))
  38430. +
  38431. +(defun c-progress-update ()
  38432. +  ;; update progress
  38433. +  (if (not (and c-progress-info c-progress-interval))
  38434. +      nil
  38435. +    (let ((now (nth 1 (current-time)))
  38436. +      (start (aref c-progress-info 0))
  38437. +      (end (aref c-progress-info 1))
  38438. +      (lastsecs (aref c-progress-info 2)))
  38439. +      ;; should we update?  currently, update happens every 2 seconds,
  38440. +      ;; what's the right value?
  38441. +      (if (< c-progress-interval (- now lastsecs))
  38442. +      (progn
  38443. +        (message "indenting region... (%d%% complete)"
  38444. +             (/ (* 100 (- (point) start)) (- end start)))
  38445. +        (aset c-progress-info 2 now)))
  38446. +      )))
  38447. +
  38448. +(defun c-progress-fini (context)
  38449. +  ;; finished
  38450. +  (if (or (eq context (aref c-progress-info 3))
  38451. +      (eq context t))
  38452. +      (progn
  38453. +    (set-marker (aref c-progress-info 1) nil)
  38454. +    (setq c-progress-info nil)
  38455. +    (message "indenting region... done."))))
  38456. +
  38457. +
  38458. +;; Skipping of "syntactic whitespace" for Emacs 19.  Syntactic
  38459. +;; whitespace is defined as lexical whitespace, C and C++ style
  38460. +;; comments, and preprocessor directives.  Search no farther back or
  38461. +;; forward than optional LIM.  If LIM is omitted, `beginning-of-defun'
  38462. +;; is used for backward skipping, point-max is used for forward
  38463. +;; skipping.  Note that Emacs 18 support has been moved to cc-mode-18.el.
  38464. +
  38465. +(defun c-forward-syntactic-ws (&optional lim)
  38466. +  ;; Forward skip of syntactic whitespace for Emacs 19.
  38467. +  (save-restriction
  38468. +    (let* ((lim (or lim (point-max)))
  38469. +       (here lim)
  38470. +       (hugenum (point-max)))
  38471. +      (narrow-to-region lim (point))
  38472. +      (while (/= here (point))
  38473. +    (setq here (point))
  38474. +    (forward-comment hugenum)
  38475. +    ;; skip preprocessor directives
  38476. +    (if (and (= (following-char) ?#)
  38477. +         (= (c-point 'boi) (point)))
  38478. +        (end-of-line)
  38479. +      )))))
  38480. +
  38481. +(defun c-backward-syntactic-ws (&optional lim)
  38482. +  ;; Backward skip over syntactic whitespace for Emacs 19.
  38483. +  (save-restriction
  38484. +    (let* ((lim (or lim (c-point 'bod)))
  38485. +       (here lim)
  38486. +       (hugenum (- (point-max))))
  38487. +      (if (< lim (point))
  38488. +      (progn
  38489. +        (narrow-to-region lim (point))
  38490. +        (while (/= here (point))
  38491. +          (setq here (point))
  38492. +          (forward-comment hugenum)
  38493. +          (if (eq (c-in-literal lim) 'pound)
  38494. +          (beginning-of-line))
  38495. +          )))
  38496. +      )))
  38497. +
  38498. +
  38499. +;; Return `c' if in a C-style comment, `c++' if in a C++ style
  38500. +;; comment, `string' if in a string literal, `pound' if on a
  38501. +;; preprocessor line, or nil if not in a comment at all.  Optional LIM
  38502. +;; is used as the backward limit of the search.  If omitted, or nil,
  38503. +;; `beginning-of-defun' is used."
  38504. +
  38505. +;; This is for all v19 Emacsen supporting either 1-bit or 8-bit syntax
  38506. +(defun c-in-literal (&optional lim)
  38507. +  ;; Determine if point is in a C++ literal. we cache the last point
  38508. +  ;; calculated if the cache is enabled
  38509. +  (if (and (boundp 'c-in-literal-cache)
  38510. +       c-in-literal-cache
  38511. +       (= (point) (aref c-in-literal-cache 0)))
  38512. +      (aref c-in-literal-cache 1)
  38513. +    (let ((rtn (save-excursion
  38514. +         (let* ((lim (or lim (c-point 'bod)))
  38515. +            (here (point))
  38516. +            (state (parse-partial-sexp lim (point))))
  38517. +           (cond
  38518. +            ((nth 3 state) 'string)
  38519. +            ((nth 4 state) (if (nth 7 state) 'c++ 'c))
  38520. +            ((progn
  38521. +               (goto-char here)
  38522. +               (beginning-of-line)
  38523. +               (looking-at "[ \t]*#"))
  38524. +             'pound)
  38525. +            (t nil))))))
  38526. +      ;; cache this result if the cache is enabled
  38527. +      (and (boundp 'c-in-literal-cache)
  38528. +       (setq c-in-literal-cache (vector (point) rtn)))
  38529. +      rtn)))
  38530. +
  38531. +
  38532. +;; utilities for moving and querying around syntactic elements
  38533. +(defun c-parse-state ()
  38534. +  ;; Finds and records all open parens between some important point
  38535. +  ;; earlier in the file and point.
  38536. +  (let* (at-bob placeholder
  38537. +     (pos (save-excursion
  38538. +        ;; go back 2 bods, but ignore any bogus positions
  38539. +        ;; returned by beginning-of-defun (i.e. open paren in
  38540. +        ;; column zero)
  38541. +        (let ((cnt 0))
  38542. +          (while (and (not at-bob) (< cnt 2))
  38543. +            (beginning-of-defun)
  38544. +            (if (= (following-char) ?\{)
  38545. +            (setq cnt (1+ cnt)))
  38546. +            (if (bobp)
  38547. +            (setq at-bob t))))
  38548. +        (point)))
  38549. +     (here (save-excursion
  38550. +         ;;(skip-chars-forward " \t}")
  38551. +         (point)))
  38552. +     (last-bod pos) (last-pos pos) state sexp-end)
  38553. +    ;; cache last bod position
  38554. +    (while (catch 'backup-bod
  38555. +         (setq state nil)
  38556. +         (while (and pos (< pos here))
  38557. +           (setq last-pos pos)
  38558. +           (if (and (setq pos (c-safe (scan-lists pos 1 -1)))
  38559. +            (<= pos here))
  38560. +           (progn
  38561. +             (setq sexp-end (c-safe (scan-sexps (1- pos) 1)))
  38562. +             (if (and sexp-end
  38563. +                  (<= sexp-end here))
  38564. +             ;; we want to record both the start and end
  38565. +             ;; of this sexp, but we only want to record
  38566. +             ;; the last-most of any of them before here
  38567. +             (progn
  38568. +               (if (= (char-after (1- pos)) ?\{)
  38569. +                   (setq state (cons (cons (1- pos) sexp-end)
  38570. +                         (if (consp (car state))
  38571. +                             (cdr state)
  38572. +                           state))))
  38573. +               (setq pos sexp-end))
  38574. +               ;; we're contained in this sexp so put pos on
  38575. +               ;; front of list
  38576. +               (setq state (cons (1- pos) state))))
  38577. +         ;; something bad happened. check to see if we crossed
  38578. +         ;; an unbalanced close brace. if so, we didn't really
  38579. +         ;; find the right `important bufpos' so lets back up
  38580. +         ;; and try again
  38581. +         (if (and (not pos) (not at-bob)
  38582. +              (setq placeholder (c-safe (scan-lists last-pos 1 1)))
  38583. +              ;;(char-after (1- placeholder))
  38584. +              (<= placeholder here)
  38585. +              (= (char-after (1- placeholder)) ?\}))
  38586. +             (while t
  38587. +               (setq last-bod (c-safe (scan-lists last-bod -1 1)))
  38588. +               (if (not last-bod)
  38589. +               (error "unbalanced close brace found at position %d"
  38590. +                  (1- placeholder))
  38591. +             (setq at-bob (= last-bod (point-min))
  38592. +                   pos last-bod)
  38593. +             (if (= (char-after last-bod) ?\{)
  38594. +                 (throw 'backup-bod t)))
  38595. +               ))        ;end-if
  38596. +         ))            ;end-while
  38597. +         nil))
  38598. +    state))
  38599. +
  38600. +(defun c-beginning-of-inheritance-list (&optional lim)
  38601. +  ;; Go to the first non-whitespace after the colon that starts a
  38602. +  ;; multiple inheritance introduction.  Optional LIM is the farthest
  38603. +  ;; back we should search.
  38604. +  (let ((lim (or lim (c-point 'bod)))
  38605. +    (placeholder (progn
  38606. +               (back-to-indentation)
  38607. +               (point))))
  38608. +    (c-backward-syntactic-ws lim)
  38609. +    (while (and (> (point) lim)
  38610. +        (memq (preceding-char) '(?, ?:))
  38611. +        (progn
  38612. +          (beginning-of-line)
  38613. +          (setq placeholder (point))
  38614. +          (skip-chars-forward " \t")
  38615. +          (not (looking-at c-class-key))
  38616. +          ))
  38617. +      (c-backward-syntactic-ws lim))
  38618. +    (goto-char placeholder)
  38619. +    (skip-chars-forward "^:" (c-point 'eol))))
  38620. +
  38621. +(defun c-beginning-of-macro (&optional lim)
  38622. +  ;; Go to the beginning of the macro. Right now we don't support
  38623. +  ;; multi-line macros too well
  38624. +  (back-to-indentation))
  38625. +
  38626. +(defun c-in-objc-method-def-p ()
  38627. +  ;; Return nil if we aren't in a method definition, otherwise the
  38628. +  ;; position of the initial [+-].
  38629. +  (save-excursion
  38630. +    (c-backward-syntactic-ws)
  38631. +    (if (or (= (preceding-char) ?-)
  38632. +        (= (preceding-char) ?+))
  38633. +    (let ((initial-pos (1- (point))))
  38634. +      (beginning-of-line)
  38635. +      (if (looking-at c-ObjC-method-key)
  38636. +          initial-pos))
  38637. +      nil)))
  38638. +
  38639. +(defun c-just-after-func-arglist-p (&optional containing)
  38640. +  ;; Return t if we are between a function's argument list closing
  38641. +  ;; paren and its opening brace.  Note that the list close brace
  38642. +  ;; could be followed by a "const" specifier or a member init hanging
  38643. +  ;; colon.  Optional CONTAINING is position of containing s-exp open
  38644. +  ;; brace.  If not supplied, point is used as search start.
  38645. +  (save-excursion
  38646. +    (c-backward-syntactic-ws)
  38647. +    (let ((checkpoint (or containing (point))))
  38648. +      (goto-char checkpoint)
  38649. +      ;; could be looking at const specifier
  38650. +      (if (and (= (preceding-char) ?t)
  38651. +           (forward-word -1)
  38652. +           (looking-at "\\<const\\>"))
  38653. +      (c-backward-syntactic-ws)
  38654. +    ;; otherwise, we could be looking at a hanging member init
  38655. +    ;; colon
  38656. +    (goto-char checkpoint)
  38657. +    (if (and (= (preceding-char) ?:)
  38658. +         (progn
  38659. +           (forward-char -1)
  38660. +           (c-backward-syntactic-ws)
  38661. +           (looking-at "[ \t\n]*:\\([^:]+\\|$\\)")))
  38662. +        nil
  38663. +      (goto-char checkpoint))
  38664. +    )
  38665. +      (and (= (preceding-char) ?\))
  38666. +       ;; check if we are looking at a method def
  38667. +       (or (not (eq major-mode 'objc-mode))
  38668. +           (progn
  38669. +         (forward-sexp -1)
  38670. +         (forward-char -1)
  38671. +         (c-backward-syntactic-ws)
  38672. +         (not (or (= (preceding-char) ?-)
  38673. +              (= (preceding-char) ?+)
  38674. +              ;; or a class category
  38675. +              (progn
  38676. +                (forward-sexp -2)
  38677. +                (looking-at c-class-key))
  38678. +              )))))
  38679. +      )))
  38680. +
  38681. +;; defuns to look backwards for things
  38682. +(defun c-backward-to-start-of-do (&optional lim)
  38683. +  ;; Move to the start of the last "unbalanced" do expression.
  38684. +  ;; Optional LIM is the farthest back to search.
  38685. +  (let ((do-level 1)
  38686. +    (case-fold-search nil)
  38687. +    (lim (or lim (c-point 'bod))))
  38688. +    (while (not (zerop do-level))
  38689. +      ;; we protect this call because trying to execute this when the
  38690. +      ;; while is not associated with a do will throw an error
  38691. +      (condition-case nil
  38692. +      (progn
  38693. +        (backward-sexp 1)
  38694. +        (cond
  38695. +         ((memq (c-in-literal lim) '(c c++)))
  38696. +         ((looking-at "while\\b[^_]")
  38697. +          (setq do-level (1+ do-level)))
  38698. +         ((looking-at "do\\b[^_]")
  38699. +          (setq do-level (1- do-level)))
  38700. +         ((< (point) lim)
  38701. +          (setq do-level 0)
  38702. +          (goto-char lim))))
  38703. +    (error
  38704. +     (goto-char lim)
  38705. +     (setq do-level 0))))))
  38706. +
  38707. +(defun c-backward-to-start-of-if (&optional lim)
  38708. +  ;; Move to the start of the last "unbalanced" if and return t.  If
  38709. +  ;; none is found, and we are looking at an if clause, nil is
  38710. +  ;; returned.  If none is found and we are looking at an else clause,
  38711. +  ;; an error is thrown.
  38712. +  (let ((if-level 1)
  38713. +    (case-fold-search nil)
  38714. +    (lim (or lim (c-point 'bod)))
  38715. +    (at-if (looking-at "if\\b[^_]")))
  38716. +    (catch 'orphan-if
  38717. +      (while (and (not (bobp))
  38718. +          (not (zerop if-level)))
  38719. +    (c-backward-syntactic-ws)
  38720. +    (condition-case nil
  38721. +        (backward-sexp 1)
  38722. +      (error
  38723. +       (if at-if
  38724. +           (throw 'orphan-if nil)
  38725. +         (error "Orphaned `else' clause encountered."))))
  38726. +    (cond
  38727. +     ((looking-at "else\\b[^_]")
  38728. +      (setq if-level (1+ if-level)))
  38729. +     ((looking-at "if\\b[^_]")
  38730. +      ;; check for else if... skip over
  38731. +      (let ((here (point)))
  38732. +        (c-safe (forward-sexp -1))
  38733. +        (if (looking-at "\\<else\\>[ \t]+\\<if\\>")
  38734. +        nil
  38735. +          (setq if-level (1- if-level))
  38736. +          (goto-char here))))
  38737. +     ((< (point) lim)
  38738. +      (setq if-level 0)
  38739. +      (goto-char lim))
  38740. +     ))
  38741. +      t)))
  38742. +
  38743. +(defun c-skip-conditional ()
  38744. +  ;; skip forward over conditional at point, including any predicate
  38745. +  ;; statements in parentheses. No error checking is performed.
  38746. +  (forward-sexp
  38747. +   ;; else if()
  38748. +   (if (looking-at "\\<else\\>[ \t]+\\<if\\>")
  38749. +       3
  38750. +     ;; do and else aren't followed by parens
  38751. +     (if (looking-at "\\<\\(do\\|else\\)\\>")
  38752. +     1 2))))
  38753. +
  38754. +(defun c-skip-case-statement-forward (&optional lim)
  38755. +  ;; skip forward over case/default bodies, with optional maximal
  38756. +  ;; limit. if no next case body is found, nil is returned and point
  38757. +  ;; is not moved
  38758. +  (let ((lim (or lim (point-max)))
  38759. +    (here (point))
  38760. +    donep foundp)
  38761. +    (while (and (< (point) lim)
  38762. +        (not donep))
  38763. +      (if (and (re-search-forward c-switch-label-key lim 'move)
  38764. +           (save-match-data
  38765. +         (not (c-in-literal)))
  38766. +           (/= (match-beginning 0) here))
  38767. +      (progn
  38768. +        (goto-char (match-beginning 0))
  38769. +        (setq donep t
  38770. +          foundp t))))
  38771. +    (if (not foundp)
  38772. +    (goto-char here))
  38773. +    foundp))
  38774. +
  38775. +(defun c-search-uplist-for-classkey (brace-state)
  38776. +  ;; search for the containing class, returning a 2 element vector if
  38777. +  ;; found. aref 0 contains the bufpos of the class key, and aref 1
  38778. +  ;; contains the bufpos of the open brace.
  38779. +  (if (null brace-state)
  38780. +      ;; no brace-state means we cannot be inside a class
  38781. +      nil
  38782. +    (let ((carcache (car brace-state))
  38783. +      search-start search-end)
  38784. +      (if (consp carcache)
  38785. +      ;; a cons cell in the first element means that there is some
  38786. +      ;; balanced sexp before the current bufpos. this we can
  38787. +      ;; ignore. the nth 1 and nth 2 elements define for us the
  38788. +      ;; search boundaries
  38789. +      (setq search-start (nth 2 brace-state)
  38790. +        search-end (nth 1 brace-state))
  38791. +    ;; if the car was not a cons cell then nth 0 and nth 1 define
  38792. +    ;; for us the search boundaries
  38793. +    (setq search-start (nth 1 brace-state)
  38794. +          search-end (nth 0 brace-state)))
  38795. +      ;; search-end cannot be a cons cell
  38796. +      (and (consp search-end)
  38797. +       (error "consp search-end: %s" search-end))
  38798. +      ;; if search-end is nil, or if the search-end character isn't an
  38799. +      ;; open brace, we are definitely not in a class
  38800. +      (if (or (not search-end)
  38801. +          (/= (char-after search-end) ?{))
  38802. +      nil
  38803. +    ;; now, we need to look more closely at search-start.  if
  38804. +    ;; search-start is nil, then our start boundary is really
  38805. +    ;; point-min.
  38806. +    (if (not search-start)
  38807. +        (setq search-start (point-min))
  38808. +      ;; if search-start is a cons cell, then we can start
  38809. +      ;; searching from the end of the balanced sexp just ahead of
  38810. +      ;; us
  38811. +      (if (consp search-start)
  38812. +          (setq search-start (cdr search-start))))
  38813. +    ;; now we can do a quick regexp search from search-start to
  38814. +    ;; search-end and see if we can find a class key.  watch for
  38815. +    ;; class like strings in literals
  38816. +    (save-excursion
  38817. +      (save-restriction
  38818. +        (goto-char search-start)
  38819. +        (let (foundp class)
  38820. +          (while (and (not foundp)
  38821. +              (progn
  38822. +                (c-forward-syntactic-ws)
  38823. +                (> search-end (point)))
  38824. +              (re-search-forward c-class-key search-end t))
  38825. +        (setq class (match-beginning 0))
  38826. +        (if (c-in-literal search-start)
  38827. +            nil            ; its in a comment or string, ignore
  38828. +          (goto-char class)
  38829. +          (skip-chars-forward " \t\n")
  38830. +          (setq foundp (vector (c-point 'boi) search-end))
  38831. +          ;; make sure we're really looking at the start of
  38832. +          ;; a class definition, and not a forward decl,
  38833. +          ;; return arg, template arg list, or an ObjC method.
  38834. +          (if (eq major-mode 'objc-mode)
  38835. +              (if (re-search-forward c-ObjC-method-key search-end t)
  38836. +              (setq foundp nil))
  38837. +            ;; Its impossible to define a regexp for this, and
  38838. +            ;; nearly so to do it programmatically.
  38839. +            ;;
  38840. +            ;; ; picks up forward decls
  38841. +            ;; = picks up init lists
  38842. +            ;; ) picks up return types
  38843. +            ;; > picks up templates, but remember that we can
  38844. +            ;;   inherit from templates!
  38845. +            (let ((skipchars "^;=)"))
  38846. +              ;; try to see if we found the `class' keyword
  38847. +              ;; inside a template arg list
  38848. +              (save-excursion
  38849. +            (skip-chars-backward "^<" search-start)
  38850. +            (if (= (preceding-char) ?<)
  38851. +                (setq skipchars (concat skipchars ">"))))
  38852. +              (skip-chars-forward skipchars search-end)
  38853. +              (if (/= (point) search-end)
  38854. +              (setq foundp nil))
  38855. +              ))))
  38856. +          foundp))
  38857. +      )))))
  38858. +
  38859. +(defun c-inside-bracelist-p (containing-sexp brace-state)
  38860. +  ;; return the buffer position of the beginning of the brace list
  38861. +  ;; statement if we're inside a brace list, otherwise return nil.
  38862. +  ;; CONTAINING-SEXP is the buffer pos of the innermost containing
  38863. +  ;; paren. BRACE-STATE is the remainder of the state of enclosing braces
  38864. +  (or
  38865. +   ;; this will pick up enum lists
  38866. +   (save-excursion
  38867. +     (goto-char containing-sexp)
  38868. +     (c-beginning-of-statement)
  38869. +     ;; c-b-o-s could have left us at point-min
  38870. +     (and (bobp)
  38871. +      (c-forward-syntactic-ws))
  38872. +     (if (and (< (point) containing-sexp)
  38873. +          (looking-at "\\(typedef[ \t]+\\)?enum[ \t\n]+")
  38874. +          (save-excursion
  38875. +        (skip-chars-forward "^;(" containing-sexp)
  38876. +        (= (point) containing-sexp)))
  38877. +     (point)))
  38878. +   ;; this will pick up array/aggregate init lists, even if they are nested.
  38879. +   (save-excursion
  38880. +     (let (bufpos)
  38881. +       (while (and (not bufpos)
  38882. +           containing-sexp)
  38883. +     (if (consp containing-sexp)
  38884. +         (setq containing-sexp (car brace-state)
  38885. +           brace-state (cdr brace-state))
  38886. +       (goto-char containing-sexp)
  38887. +       (c-backward-syntactic-ws)
  38888. +       (if (/= (preceding-char) ?=)
  38889. +           ;; lets see if we're nested. find the most nested
  38890. +           ;; containing brace
  38891. +           (setq containing-sexp (car brace-state)
  38892. +             brace-state (cdr brace-state))
  38893. +         ;; we've hit the beginning of the aggregate list
  38894. +         (c-beginning-of-statement)
  38895. +         (setq bufpos (point)))
  38896. +       ))
  38897. +       bufpos))
  38898. +   ))
  38899. +
  38900. +
  38901. +;; defuns for calculating the syntactic state and indenting a single
  38902. +;; line of C/C++/ObjC code
  38903. +(defmacro c-add-syntax (symbol &optional relpos)
  38904. +  ;; a simple macro to append the syntax in symbol to the syntax list.
  38905. +  ;; try to increase performance by using this macro
  38906. +  (` (setq syntax (cons (cons (, symbol) (, relpos)) syntax))))
  38907. +
  38908. +(defun c-most-enclosing-brace (state)
  38909. +  ;; return the bufpos of the most enclosing brace that hasn't been
  38910. +  ;; narrowed out by any enclosing class, or nil if none was found
  38911. +  (let (enclosingp)
  38912. +    (while (and state (not enclosingp))
  38913. +      (setq enclosingp (car state)
  38914. +        state (cdr state))
  38915. +      (if (consp enclosingp)
  38916. +      (setq enclosingp nil)
  38917. +    (if (> (point-min) enclosingp)
  38918. +        (setq enclosingp nil))
  38919. +    (setq state nil)))
  38920. +    enclosingp))
  38921. +
  38922. +(defun c-least-enclosing-brace (state)
  38923. +  ;; return the bufpos of the least (highest) enclosing brace that
  38924. +  ;; hasn't been narrowed out by any enclosing class, or nil if none
  38925. +  ;; was found.
  38926. +  (c-most-enclosing-brace (nreverse state)))
  38927. +
  38928. +(defun c-narrow-out-enclosing-class (state lim)
  38929. +  ;; narrow the buffer so that the enclosing class is hidden
  38930. +  (let (inclass-p)
  38931. +    (and state
  38932. +     (setq inclass-p (c-search-uplist-for-classkey state))
  38933. +     (narrow-to-region
  38934. +      (progn
  38935. +        (goto-char (1+ (aref inclass-p 1)))
  38936. +        (skip-chars-forward " \t\n" lim)
  38937. +        ;; if point is now left of the class opening brace, we're
  38938. +        ;; hosed, so try a different tact
  38939. +        (if (<= (c-point 'bol) (aref inclass-p 1))
  38940. +        (progn
  38941. +          (goto-char (1+ (aref inclass-p 1)))
  38942. +          (c-forward-syntactic-ws lim)))
  38943. +        (c-point 'bol))
  38944. +      ;; end point is the end of the current line
  38945. +      (progn
  38946. +        (goto-char lim)
  38947. +        (c-point 'eol))))
  38948. +    ;; return the class vector
  38949. +    inclass-p))
  38950. +
  38951. +(defun c-guess-basic-syntax ()
  38952. +  ;; guess the syntactic description of the current line of C++ code.
  38953. +  (save-excursion
  38954. +    (save-restriction
  38955. +      (beginning-of-line)
  38956. +      (let* ((indent-point (point))
  38957. +         (case-fold-search nil)
  38958. +         (state (c-parse-state))
  38959. +         (in-method-intro-p (and (eq major-mode 'objc-mode)
  38960. +                     (looking-at c-ObjC-method-key)))
  38961. +         literal containing-sexp char-before-ip char-after-ip lim
  38962. +         syntax placeholder c-in-literal-cache
  38963. +         ;; narrow out any enclosing class
  38964. +         (inclass-p (c-narrow-out-enclosing-class state indent-point))
  38965. +         )
  38966. +
  38967. +    ;; get the buffer position of the most nested opening brace,
  38968. +    ;; if there is one, and it hasn't been narrowed out
  38969. +    (save-excursion
  38970. +      (goto-char indent-point)
  38971. +      (skip-chars-forward " \t}")
  38972. +      (skip-chars-backward " \t")
  38973. +      (while (and state
  38974. +              (not in-method-intro-p)
  38975. +              (not containing-sexp))
  38976. +        (setq containing-sexp (car state)
  38977. +          state (cdr state))
  38978. +        (if (consp containing-sexp)
  38979. +        ;; if cdr == point, then containing sexp is the brace
  38980. +        ;; that opens the sexp we close
  38981. +        (if (= (cdr containing-sexp) (point))
  38982. +            (setq containing-sexp (car containing-sexp))
  38983. +          ;; otherwise, ignore this element
  38984. +          (setq containing-sexp nil))
  38985. +          ;; ignore the bufpos if its been narrowed out by the
  38986. +          ;; containing class
  38987. +          (if (<= containing-sexp (point-min))
  38988. +          (setq containing-sexp nil)))))
  38989. +
  38990. +    ;; set the limit on the farthest back we need to search
  38991. +    (setq lim (or containing-sexp (point-min)))
  38992. +
  38993. +    ;; cache char before and after indent point, and move point to
  38994. +    ;; the most likely position to perform the majority of tests
  38995. +    (goto-char indent-point)
  38996. +    (skip-chars-forward " \t")
  38997. +    (setq char-after-ip (following-char))
  38998. +    (c-backward-syntactic-ws lim)
  38999. +    (setq char-before-ip (preceding-char))
  39000. +    (goto-char indent-point)
  39001. +    (skip-chars-forward " \t")
  39002. +
  39003. +    ;; are we in a literal?
  39004. +    (setq literal (c-in-literal lim))
  39005. +
  39006. +    ;; now figure out syntactic qualities of the current line
  39007. +    (cond
  39008. +     ;; CASE 1: in a string.
  39009. +     ((memq literal '(string))
  39010. +      (c-add-syntax 'string (c-point 'bopl)))
  39011. +     ;; CASE 2: in a C or C++ style comment.
  39012. +     ((memq literal '(c c++))
  39013. +      ;; we need to catch multi-paragraph C comments
  39014. +      (while (and (zerop (forward-line -1))
  39015. +              (looking-at "^[ \t]*$")))
  39016. +      (c-add-syntax literal (c-point 'bol)))
  39017. +     ;; CASE 3: in a cpp preprocessor
  39018. +     ((eq literal 'pound)
  39019. +      (c-beginning-of-macro lim)
  39020. +      (c-add-syntax 'cpp-macro (c-point 'boi)))
  39021. +     ;; CASE 4: in an objective-c method intro
  39022. +     (in-method-intro-p
  39023. +      (c-add-syntax 'objc-method-intro (c-point 'boi)))
  39024. +     ;; CASE 5: Line is at top level.
  39025. +     ((null containing-sexp)
  39026. +      (cond
  39027. +       ;; CASE 5A: we are looking at a defun, class, or
  39028. +       ;; inline-inclass method opening brace
  39029. +       ((= char-after-ip ?{)
  39030. +        (cond
  39031. +         ;; CASE 5A.1: we are looking at a class opening brace
  39032. +         ((save-excursion
  39033. +        (goto-char indent-point)
  39034. +        (skip-chars-forward " \t{")
  39035. +        (let ((decl (c-search-uplist-for-classkey (c-parse-state))))
  39036. +          (and decl
  39037. +               (setq placeholder (aref decl 0)))
  39038. +          ))
  39039. +          (c-add-syntax 'class-open placeholder))
  39040. +         ;; CASE 5A.2: brace list open
  39041. +         ((save-excursion
  39042. +        (c-beginning-of-statement nil lim)
  39043. +        ;; c-b-o-s could have left us at point-min
  39044. +        (and (bobp)
  39045. +             (c-forward-syntactic-ws indent-point))
  39046. +        (setq placeholder (point))
  39047. +        (and (or (looking-at "enum[ \t\n]+")
  39048. +             (= char-before-ip ?=))
  39049. +             (save-excursion
  39050. +               (skip-chars-forward "^;" indent-point)
  39051. +               (/= (following-char) ?\;))))
  39052. +          (c-add-syntax 'brace-list-open placeholder))
  39053. +         ;; CASE 5A.3: inline defun open
  39054. +         (inclass-p
  39055. +          (c-add-syntax 'inline-open (aref inclass-p 0)))
  39056. +         ;; CASE 5A.4: ordinary defun open
  39057. +         (t
  39058. +          (goto-char placeholder)
  39059. +          (c-add-syntax 'defun-open (c-point 'bol))
  39060. +          )))
  39061. +       ;; CASE 5B: first K&R arg decl or member init
  39062. +       ((c-just-after-func-arglist-p)
  39063. +        (cond
  39064. +         ;; CASE 5B.1: a member init
  39065. +         ((or (= char-before-ip ?:)
  39066. +          (= char-after-ip ?:))
  39067. +          ;; this line should be indented relative to the beginning
  39068. +          ;; of indentation for the topmost-intro line that contains
  39069. +          ;; the prototype's open paren
  39070. +          ;; TBD: is the following redundant?
  39071. +          (if (= char-before-ip ?:)
  39072. +          (forward-char -1))
  39073. +          (c-backward-syntactic-ws lim)
  39074. +          ;; TBD: is the preceding redundant?
  39075. +          (if (= (preceding-char) ?:)
  39076. +          (progn (forward-char -1)
  39077. +             (c-backward-syntactic-ws lim)))
  39078. +          (if (= (preceding-char) ?\))
  39079. +          (backward-sexp 1))
  39080. +          (c-add-syntax 'member-init-intro (c-point 'boi))
  39081. +          ;; we don't need to add any class offset since this
  39082. +          ;; should be relative to the ctor's indentation
  39083. +          )
  39084. +         ;; CASE 5B.2: K&R arg decl intro
  39085. +         (c-recognize-knr-p
  39086. +          (c-add-syntax 'knr-argdecl-intro (c-point 'boi))
  39087. +          (and inclass-p (c-add-syntax 'inclass (aref inclass-p 0))))
  39088. +         ;; CASE 5B.3: nether region after a C++ func decl
  39089. +         (t
  39090. +          (c-add-syntax 'ansi-funcdecl-cont (c-point 'boi))
  39091. +          (and inclass-p (c-add-syntax 'inclass (aref inclass-p 0))))
  39092. +         ))
  39093. +       ;; CASE 5C: inheritance line. could be first inheritance
  39094. +       ;; line, or continuation of a multiple inheritance
  39095. +       ((looking-at c-baseclass-key)
  39096. +        (cond
  39097. +         ;; CASE 5C.1: non-hanging colon on an inher intro
  39098. +         ((= char-after-ip ?:)
  39099. +          (c-backward-syntactic-ws lim)
  39100. +          (c-add-syntax 'inher-intro (c-point 'boi))
  39101. +          ;; don't add inclass symbol since relative point already
  39102. +          ;; contains any class offset
  39103. +          )
  39104. +         ;; CASE 5C.2: hanging colon on an inher intro
  39105. +         ((= char-before-ip ?:)
  39106. +          (c-add-syntax 'inher-intro (c-point 'boi))
  39107. +          (and inclass-p (c-add-syntax 'inclass (aref inclass-p 0))))
  39108. +         ;; CASE 5C.3: a continued inheritance line
  39109. +         (t
  39110. +          (c-beginning-of-inheritance-list lim)
  39111. +          (c-add-syntax 'inher-cont (point))
  39112. +          ;; don't add inclass symbol since relative point already
  39113. +          ;; contains any class offset
  39114. +          )))
  39115. +       ;; CASE 5D: this could be a top-level compound statement or a
  39116. +       ;; member init list continuation
  39117. +       ((= char-before-ip ?,)
  39118. +        (goto-char indent-point)
  39119. +        (c-backward-syntactic-ws lim)
  39120. +        (while (and (< lim (point))
  39121. +            (= (preceding-char) ?,))
  39122. +          ;; this will catch member inits with multiple
  39123. +          ;; line arglists
  39124. +          (forward-char -1)
  39125. +          (c-backward-syntactic-ws (c-point 'bol))
  39126. +          (if (= (preceding-char) ?\))
  39127. +          (backward-sexp 1))
  39128. +          ;; now continue checking
  39129. +          (beginning-of-line)
  39130. +          (c-backward-syntactic-ws lim))
  39131. +        (cond
  39132. +         ;; CASE 5D.1: hanging member init colon
  39133. +         ((= (preceding-char) ?:)
  39134. +          (goto-char indent-point)
  39135. +          (c-backward-syntactic-ws lim)
  39136. +          (c-safe (backward-sexp 1))
  39137. +          (c-add-syntax 'member-init-cont (c-point 'boi))
  39138. +          ;; we do not need to add class offset since relative
  39139. +          ;; point is the member init above us
  39140. +          )
  39141. +         ;; CASE 5D.2: non-hanging member init colon
  39142. +         ((progn
  39143. +        (c-forward-syntactic-ws indent-point)
  39144. +        (= (following-char) ?:))
  39145. +          (skip-chars-forward " \t:")
  39146. +          (c-add-syntax 'member-init-cont (point)))
  39147. +         ;; CASE 5D.3: perhaps a multiple inheritance line?
  39148. +         ((looking-at c-inher-key)
  39149. +          (c-add-syntax 'inher-cont-1 (c-point 'boi)))
  39150. +         ;; CASE 5D.4: perhaps a template list continuation?
  39151. +         ((save-excursion
  39152. +        (skip-chars-backward "^<" lim)
  39153. +        (= (preceding-char) ?<))
  39154. +          ;; we can probably indent it just like and arglist-cont
  39155. +          (c-add-syntax 'arglist-cont (point)))
  39156. +         ;; CASE 5D.5: perhaps a top-level statement-cont
  39157. +         (t
  39158. +          (c-beginning-of-statement nil lim)
  39159. +          (c-add-syntax 'statement-cont (c-point 'boi)))
  39160. +         ))
  39161. +       ;; CASE 5E: we are looking at a access specifier
  39162. +       ((and inclass-p
  39163. +         c-access-key
  39164. +         (looking-at c-access-key))
  39165. +        (c-add-syntax 'access-label (c-point 'bonl))
  39166. +        (c-add-syntax 'inclass (aref inclass-p 0)))
  39167. +       ;; CASE 5F: we are looking at the brace which closes the
  39168. +       ;; enclosing nested class decl
  39169. +       ((and inclass-p
  39170. +         (= char-after-ip ?})
  39171. +         (save-excursion
  39172. +           (save-restriction
  39173. +             (widen)
  39174. +             (forward-char 1)
  39175. +             (and
  39176. +              (condition-case nil
  39177. +              (progn (backward-sexp 1) t)
  39178. +            (error nil))
  39179. +              (= (point) (aref inclass-p 1))
  39180. +              ))))
  39181. +        (save-restriction
  39182. +          (widen)
  39183. +          (goto-char (aref inclass-p 0))
  39184. +          (c-add-syntax 'class-close (c-point 'boi))))
  39185. +       ;; CASE 5G: we could be looking at subsequent knr-argdecls
  39186. +       ((and c-recognize-knr-p
  39187. +         (save-excursion
  39188. +           (c-backward-syntactic-ws lim)
  39189. +           (while (memq (preceding-char) '(?\; ?,))
  39190. +             (beginning-of-line)
  39191. +             (setq placeholder (point))
  39192. +             (c-backward-syntactic-ws lim))
  39193. +           (and (= (preceding-char) ?\))
  39194. +            (or (not (eq major-mode 'objc-mode))
  39195. +                (progn
  39196. +                  (forward-sexp -1)
  39197. +                  (backward-char)
  39198. +                  (c-backward-syntactic-ws)
  39199. +                  (not (or (= (preceding-char) ?-)
  39200. +                       (= (preceding-char) ?+)
  39201. +                       ;; or a class category
  39202. +                       (progn
  39203. +                     (forward-sexp -2)
  39204. +                     (looking-at c-class-key))
  39205. +                       )))))
  39206. +           )
  39207. +         (save-excursion
  39208. +           (c-beginning-of-statement)
  39209. +           (not (looking-at "typedef[ \t\n]+"))))
  39210. +        (goto-char placeholder)
  39211. +        (c-add-syntax 'knr-argdecl (c-point 'boi)))
  39212. +       ;; CASE 5H: we are at the topmost level, make sure we skip
  39213. +       ;; back past any access specifiers
  39214. +       ((progn
  39215. +          (c-backward-syntactic-ws lim)
  39216. +          (while (and inclass-p
  39217. +              c-access-key
  39218. +              (= (preceding-char) ?:)
  39219. +              (not (and (eq major-mode 'objc-mode)
  39220. +                    (bobp)))
  39221. +              (save-excursion
  39222. +                (backward-sexp 1)
  39223. +                (looking-at c-access-key)))
  39224. +        (backward-sexp 1)
  39225. +        (c-backward-syntactic-ws lim))
  39226. +          (or (bobp)
  39227. +          (memq (preceding-char) '(?\; ?\}))))
  39228. +        (c-add-syntax 'topmost-intro (c-point 'bol))
  39229. +        (and inclass-p (c-add-syntax 'inclass (aref inclass-p 0))))
  39230. +       ;; CASE 5I: we are at a method definition continuation line
  39231. +       ((and (eq major-mode 'objc-mode)
  39232. +         (progn
  39233. +           (c-beginning-of-statement 1 lim)
  39234. +           (beginning-of-line)
  39235. +           (looking-at c-ObjC-method-key)))
  39236. +        (c-add-syntax 'objc-method-args-cont (point)))
  39237. +       ;; CASE 5J: we are at a topmost continuation line
  39238. +       (t
  39239. +        (c-beginning-of-statement 1 lim)
  39240. +        (c-add-syntax 'topmost-intro-cont (c-point 'boi)))
  39241. +       ))                ; end CASE 5
  39242. +     ;; CASE 6: line is an expression, not a statement.  Most
  39243. +     ;; likely we are either in a function prototype or a function
  39244. +     ;; call argument list
  39245. +     ((/= (char-after containing-sexp) ?{)
  39246. +      (c-backward-syntactic-ws containing-sexp)
  39247. +      (cond
  39248. +       ;; CASE 6A: we are looking at the arglist closing paren
  39249. +       ((and (/= char-before-ip ?,)
  39250. +         (memq char-after-ip '(?\) ?\])))
  39251. +        (goto-char containing-sexp)
  39252. +        (c-add-syntax 'arglist-close (c-point 'boi)))
  39253. +       ;; CASE 6B: we are looking at the first argument in an empty
  39254. +       ;; argument list. Use arglist-close if we're actually
  39255. +       ;; looking at a close paren or bracket.
  39256. +       ((memq char-before-ip '(?\( ?\[))
  39257. +        (goto-char containing-sexp)
  39258. +        (c-add-syntax 'arglist-intro (c-point 'boi)))
  39259. +       ;; CASE 6C: we are inside a conditional test clause. treat
  39260. +       ;; these things as statements
  39261. +       ((save-excursion
  39262. +         (goto-char containing-sexp)
  39263. +         (and (c-safe (progn (forward-sexp -1) t))
  39264. +          (looking-at "\\<for\\>")))
  39265. +        (c-beginning-of-statement 1 containing-sexp)
  39266. +        (if (= char-before-ip ?\;)
  39267. +        (c-add-syntax 'statement (point))
  39268. +          (c-add-syntax 'statement-cont (point))
  39269. +          ))
  39270. +       ;; CASE 6D: maybe a continued method call. This is the case
  39271. +       ;; when we are inside a [] bracketed exp, and what precede
  39272. +       ;; the opening bracket is not an identifier.
  39273. +       ((and (eq major-mode 'objc-mode)
  39274. +         (= (char-after containing-sexp) ?\[)
  39275. +         (save-excursion
  39276. +           (goto-char (1- containing-sexp))
  39277. +           (c-backward-syntactic-ws (c-point 'bod))
  39278. +           (if (not (looking-at c-symbol-key))
  39279. +               (c-add-syntax 'objc-method-call-cont containing-sexp))
  39280. +           )))
  39281. +       ;; CASE 6E: we are looking at an arglist continuation line,
  39282. +       ;; but the preceding argument is on the same line as the
  39283. +       ;; opening paren.  This case includes multi-line
  39284. +       ;; mathematical paren groupings, but we could be on a
  39285. +       ;; for-list continuation line
  39286. +       ((and (save-excursion
  39287. +           (goto-char (1+ containing-sexp))
  39288. +           (skip-chars-forward " \t")
  39289. +           (not (eolp)))
  39290. +         (save-excursion
  39291. +           (c-beginning-of-statement)
  39292. +           (skip-chars-backward " \t([")
  39293. +           (<= (point) containing-sexp)))
  39294. +        (goto-char containing-sexp)
  39295. +        (c-add-syntax 'arglist-cont-nonempty (c-point 'boi)))
  39296. +       ;; CASE 6F: we are looking at just a normal arglist
  39297. +       ;; continuation line
  39298. +       (t (c-beginning-of-statement 1 containing-sexp)
  39299. +          (forward-char 1)
  39300. +          (c-forward-syntactic-ws indent-point)
  39301. +          (c-add-syntax 'arglist-cont (c-point 'boi)))
  39302. +       ))
  39303. +     ;; CASE 7: func-local multi-inheritance line
  39304. +     ((save-excursion
  39305. +        (goto-char indent-point)
  39306. +        (skip-chars-forward " \t")
  39307. +        (looking-at c-baseclass-key))
  39308. +      (goto-char indent-point)
  39309. +      (skip-chars-forward " \t")
  39310. +      (cond
  39311. +       ;; CASE 7A: non-hanging colon on an inher intro
  39312. +       ((= char-after-ip ?:)
  39313. +        (c-backward-syntactic-ws lim)
  39314. +        (c-add-syntax 'inher-intro (c-point 'boi)))
  39315. +       ;; CASE 7B: hanging colon on an inher intro
  39316. +       ((= char-before-ip ?:)
  39317. +        (c-add-syntax 'inher-intro (c-point 'boi)))
  39318. +       ;; CASE 7C: a continued inheritance line
  39319. +       (t
  39320. +        (c-beginning-of-inheritance-list lim)
  39321. +        (c-add-syntax 'inher-cont (point))
  39322. +        )))
  39323. +     ;; CASE 8: we are inside a brace-list
  39324. +     ((setq placeholder (c-inside-bracelist-p containing-sexp state))
  39325. +      (cond
  39326. +       ;; CASE 8A: brace-list-close brace
  39327. +       ((and (= char-after-ip ?})
  39328. +         (c-safe (progn (forward-char 1)
  39329. +                (backward-sexp 1)
  39330. +                t))
  39331. +         (= (point) containing-sexp))
  39332. +        (c-add-syntax 'brace-list-close (c-point 'boi)))
  39333. +       ;; CASE 8B: we're looking at the first line in a brace-list
  39334. +       ((save-excursion
  39335. +          (goto-char indent-point)
  39336. +          (c-backward-syntactic-ws containing-sexp)
  39337. +          (= (point) (1+ containing-sexp)))
  39338. +        (goto-char containing-sexp)
  39339. +        ;;(if (= char-after-ip ?{)
  39340. +        ;;(c-add-syntax 'brace-list-open (c-point 'boi))
  39341. +        (c-add-syntax 'brace-list-intro (c-point 'boi))
  39342. +        )
  39343. +        ;;))            ; end CASE 8B
  39344. +       ;; CASE 8C: this is just a later brace-list-entry
  39345. +       (t (goto-char (1+ containing-sexp))
  39346. +          (c-forward-syntactic-ws indent-point)
  39347. +          (if (= char-after-ip ?{)
  39348. +          (c-add-syntax 'brace-list-open (point))
  39349. +        (c-add-syntax 'brace-list-entry (point))
  39350. +        ))            ; end CASE 8C
  39351. +       ))                ; end CASE 8
  39352. +     ;; CASE 9: A continued statement
  39353. +     ((and (not (memq char-before-ip '(?\; ?} ?:)))
  39354. +           (> (point)
  39355. +          (save-excursion
  39356. +            (c-beginning-of-statement 1 containing-sexp)
  39357. +            (setq placeholder (point))))
  39358. +           (/= placeholder containing-sexp))
  39359. +      (goto-char indent-point)
  39360. +      (skip-chars-forward " \t")
  39361. +      (let ((after-cond-placeholder
  39362. +         (save-excursion
  39363. +           (goto-char placeholder)
  39364. +           (if (looking-at c-conditional-key)
  39365. +               (progn
  39366. +             (c-safe (c-skip-conditional))
  39367. +             (c-forward-syntactic-ws)
  39368. +             (if (memq (following-char) '(?\;))
  39369. +                 (progn
  39370. +                   (forward-char 1)
  39371. +                   (c-forward-syntactic-ws)))
  39372. +             (point))
  39373. +             nil))))
  39374. +        (cond
  39375. +         ;; CASE 9A: substatement
  39376. +         ((and after-cond-placeholder
  39377. +           (>= after-cond-placeholder indent-point))
  39378. +          (goto-char placeholder)
  39379. +          (if (= char-after-ip ?{)
  39380. +          (c-add-syntax 'substatement-open (c-point 'boi))
  39381. +        (c-add-syntax 'substatement (c-point 'boi))))
  39382. +         ;; CASE 9B: open braces for class or brace-lists
  39383. +         ((= char-after-ip ?{)
  39384. +          (cond
  39385. +           ;; CASE 9B.1: class-open
  39386. +           ((save-excursion
  39387. +          (goto-char indent-point)
  39388. +          (skip-chars-forward " \t{")
  39389. +          (let ((decl (c-search-uplist-for-classkey (c-parse-state))))
  39390. +            (and decl
  39391. +             (setq placeholder (aref decl 0)))
  39392. +            ))
  39393. +        (c-add-syntax 'class-open placeholder))
  39394. +           ;; CASE 9B.2: brace-list-open
  39395. +           ((or (save-excursion
  39396. +              (goto-char placeholder)
  39397. +              (looking-at "\\<enum\\>"))
  39398. +            (= char-before-ip ?=))
  39399. +        (c-add-syntax 'brace-list-open placeholder))
  39400. +           ;; CASE 9B.3: catch-all for unknown construct.
  39401. +           (t
  39402. +        ;; Even though this isn't right, it's the best I'm
  39403. +        ;; going to do for now. Exceptions probably fall
  39404. +        ;; through to here, but aren't supported yet.  Also,
  39405. +        ;; after the next release, I may call a recognition
  39406. +        ;; hook like so: (run-hooks 'c-recognize-hook), but I
  39407. +        ;; dunno.
  39408. +        (c-add-syntax 'statement-cont placeholder)
  39409. +        (c-add-syntax 'block-open))
  39410. +           ))
  39411. +         ;; CASE 9C: iostream insertion or extraction operator
  39412. +         ((looking-at "<<\\|>>")
  39413. +          (goto-char placeholder)
  39414. +          (and after-cond-placeholder
  39415. +           (goto-char after-cond-placeholder))
  39416. +          (while (and (re-search-forward "<<\\|>>" indent-point 'move)
  39417. +              (c-in-literal placeholder)))
  39418. +          ;; if we ended up at indent-point, then the first
  39419. +          ;; streamop is on a separate line. Indent the line like
  39420. +          ;; a statement-cont instead
  39421. +          (if (/= (point) indent-point)
  39422. +          (c-add-syntax 'stream-op (c-point 'boi))
  39423. +        (c-backward-syntactic-ws lim)
  39424. +        (c-add-syntax 'statement-cont (c-point 'boi))))
  39425. +         ;; CASE 9D: continued statement. find the accurate
  39426. +         ;; beginning of statement or substatement
  39427. +         (t
  39428. +          (c-beginning-of-statement nil after-cond-placeholder)
  39429. +          (c-add-syntax 'statement-cont (point)))
  39430. +         )))
  39431. +     ;; CASE 10: an else clause?
  39432. +     ((looking-at "\\<else\\>")
  39433. +      (c-backward-to-start-of-if containing-sexp)
  39434. +      (c-add-syntax 'else-clause (c-point 'boi)))
  39435. +     ;; CASE 11: Statement. But what kind?  Lets see if its a
  39436. +     ;; while closure of a do/while construct
  39437. +     ((progn
  39438. +        (goto-char indent-point)
  39439. +        (skip-chars-forward " \t")
  39440. +        (and (looking-at "while\\b[^_]")
  39441. +         (save-excursion
  39442. +           (c-backward-to-start-of-do containing-sexp)
  39443. +           (setq placeholder (point))
  39444. +           (looking-at "do\\b[^_]"))
  39445. +         ))
  39446. +      (c-add-syntax 'do-while-closure placeholder))
  39447. +     ;; CASE 12: A case or default label
  39448. +     ((looking-at c-switch-label-key)
  39449. +      (goto-char containing-sexp)
  39450. +      ;; for a case label, we set relpos the first non-whitespace
  39451. +      ;; char on the line containing the switch opening brace. this
  39452. +      ;; should handle hanging switch opening braces correctly.
  39453. +      (c-add-syntax 'case-label (c-point 'boi)))
  39454. +     ;; CASE 13: any other label
  39455. +     ((looking-at c-label-key)
  39456. +      (goto-char containing-sexp)
  39457. +      (c-add-syntax 'label (c-point 'boi)))
  39458. +     ;; CASE 14: block close brace, possibly closing the defun or
  39459. +     ;; the class
  39460. +     ((= char-after-ip ?})
  39461. +      (let ((relpos (save-excursion
  39462. +              (goto-char containing-sexp)
  39463. +              (if (/= (point) (c-point 'boi))
  39464. +                  (c-beginning-of-statement))
  39465. +              (c-point 'boi))))
  39466. +        (cond
  39467. +         ;; CASE 14A: does this close an inline?
  39468. +         ((progn
  39469. +        (goto-char containing-sexp)
  39470. +        (c-search-uplist-for-classkey state))
  39471. +          (c-add-syntax 'inline-close relpos))
  39472. +         ;; CASE 14B: if there an enclosing brace that hasn't
  39473. +         ;; been narrowed out by a class, then this is a
  39474. +         ;; block-close
  39475. +         ((c-most-enclosing-brace state)
  39476. +          (c-add-syntax 'block-close relpos))
  39477. +         ;; CASE 14C: find out whether we're closing a top-level
  39478. +         ;; class or a defun
  39479. +         (t
  39480. +          (save-restriction
  39481. +        (narrow-to-region (point-min) indent-point)
  39482. +        (let ((decl (c-search-uplist-for-classkey (c-parse-state))))
  39483. +          (if decl
  39484. +              (c-add-syntax 'class-close (aref decl 0))
  39485. +            (c-add-syntax 'defun-close relpos)))))
  39486. +         )))
  39487. +     ;; CASE 15: statement catchall
  39488. +     (t
  39489. +      ;; we know its a statement, but we need to find out if it is
  39490. +      ;; the first statement in a block
  39491. +      (goto-char containing-sexp)
  39492. +      (forward-char 1)
  39493. +      (c-forward-syntactic-ws indent-point)
  39494. +      ;; we want to ignore labels when skipping forward
  39495. +      (let ((ignore-re (concat c-switch-label-key "\\|" c-label-key))
  39496. +        inswitch-p)
  39497. +        (while (looking-at ignore-re)
  39498. +          (if (looking-at c-switch-label-key)
  39499. +          (progn
  39500. +            (setq inswitch-p t)
  39501. +            ;; we also want to skip over the body of the
  39502. +            ;; case/switch statement if that doesn't put us at
  39503. +            ;; after the indent-point
  39504. +            (while (c-skip-case-statement-forward indent-point))))
  39505. +          (forward-line 1)
  39506. +          (c-forward-syntactic-ws indent-point))
  39507. +        (cond
  39508. +         ;; CASE 15A: we saw a case/default statement so we must be
  39509. +         ;; in a switch statement.  find out if we are at the
  39510. +         ;; statement just after a case or default label
  39511. +         ((and inswitch-p
  39512. +           (save-excursion
  39513. +             (goto-char indent-point)
  39514. +             (c-backward-syntactic-ws containing-sexp)
  39515. +             (back-to-indentation)
  39516. +             (setq placeholder (point))
  39517. +             (looking-at c-switch-label-key)))
  39518. +          (goto-char indent-point)
  39519. +          (skip-chars-forward " \t")
  39520. +          (if (= (following-char) ?{)
  39521. +          (c-add-syntax 'statement-case-open placeholder)
  39522. +        (c-add-syntax 'statement-case-intro placeholder)))
  39523. +         ;; CASE 15B: continued statement
  39524. +         ((= char-before-ip ?,)
  39525. +          (c-add-syntax 'statement-cont (c-point 'boi)))
  39526. +         ;; CASE 15C: a question/colon construct?  But make sure
  39527. +         ;; what came before was not a label, and what comes after
  39528. +         ;; is not a globally scoped function call!
  39529. +         ((or (and (memq char-before-ip '(?: ??))
  39530. +               (save-excursion
  39531. +             (goto-char indent-point)
  39532. +             (c-backward-syntactic-ws lim)
  39533. +             (back-to-indentation)
  39534. +             (not (looking-at c-label-key))))
  39535. +          (and (memq char-after-ip '(?: ??))
  39536. +               (save-excursion
  39537. +             (goto-char indent-point)
  39538. +             (skip-chars-forward " \t")
  39539. +             ;; watch out for scope operator
  39540. +             (not (looking-at "::")))))
  39541. +          (c-add-syntax 'statement-cont (c-point 'boi)))
  39542. +         ;; CASE 15D: any old statement
  39543. +         ((< (point) indent-point)
  39544. +          (c-add-syntax 'statement (c-point 'boi))
  39545. +          (if (= char-after-ip ?{)
  39546. +          (c-add-syntax 'block-open)))
  39547. +         ;; CASE 15E: first statement in an inline, or first
  39548. +         ;; statement in a top-level defun. we can tell this is it
  39549. +         ;; if there are no enclosing braces that haven't been
  39550. +         ;; narrowed out by a class (i.e. don't use bod here!)
  39551. +         ((save-excursion
  39552. +        (save-restriction
  39553. +          (widen)
  39554. +          (goto-char containing-sexp)
  39555. +          (c-narrow-out-enclosing-class state containing-sexp)
  39556. +          (not (c-most-enclosing-brace state))))
  39557. +          (goto-char containing-sexp)
  39558. +          ;; if not at boi, then defun-opening braces are hung on
  39559. +          ;; right side, so we need a different relpos
  39560. +          (if (/= (point) (c-point 'boi))
  39561. +          (progn
  39562. +            (c-backward-syntactic-ws)
  39563. +            (c-safe (forward-sexp (if (= (preceding-char) ?\))
  39564. +                          -1 -2)))
  39565. +            ))
  39566. +          (c-add-syntax 'defun-block-intro (c-point 'boi)))
  39567. +         ;; CASE 15F: first statement in a block
  39568. +         (t (goto-char containing-sexp)
  39569. +        (if (/= (point) (c-point 'boi))
  39570. +            (c-beginning-of-statement))
  39571. +        (c-add-syntax 'statement-block-intro (c-point 'boi))
  39572. +        (if (= char-after-ip ?{)
  39573. +            (c-add-syntax 'block-open)))
  39574. +         )))
  39575. +     )
  39576. +
  39577. +    ;; now we need to look at any modifiers
  39578. +    (goto-char indent-point)
  39579. +    (skip-chars-forward " \t")
  39580. +    (if (looking-at c-comment-start-regexp)
  39581. +        ;; we are looking at a comment. if the comment is at or to
  39582. +        ;; the right of comment-column, then all we want on the
  39583. +        ;; syntax list is comment-intro, otherwise, the
  39584. +        ;; indentation of the comment is relative to where a
  39585. +        ;; normal statement would indent
  39586. +        (if (< (current-column) comment-column)
  39587. +        (c-add-syntax 'comment-intro)
  39588. +          ;; reset syntax kludge
  39589. +          (setq syntax nil)
  39590. +          (c-add-syntax 'comment-intro)))
  39591. +    ;; we might want to give additional offset to friends (in C++)
  39592. +    (if (and (eq major-mode 'c++-mode)
  39593. +         (looking-at "friend[ \t]+"))
  39594. +        (c-add-syntax 'friend))
  39595. +    ;; return the syntax
  39596. +    syntax))))
  39597. +
  39598. +
  39599. +;; indent via syntactic language elements
  39600. +(defun c-get-offset (langelem)
  39601. +  ;; Get offset from LANGELEM which is a cons cell of the form:
  39602. +  ;; (SYMBOL . RELPOS).  The symbol is matched against
  39603. +  ;; c-offsets-alist and the offset found there is either returned,
  39604. +  ;; or added to the indentation at RELPOS.  If RELPOS is nil, then
  39605. +  ;; the offset is simply returned.
  39606. +  (let* ((symbol (car langelem))
  39607. +     (relpos (cdr langelem))
  39608. +     (match  (assq symbol c-offsets-alist))
  39609. +     (offset (cdr-safe match)))
  39610. +    ;; offset can be a number, a function, a variable, or one of the
  39611. +    ;; symbols + or -
  39612. +    (cond
  39613. +     ((not match)
  39614. +      (if c-strict-syntax-p
  39615. +      (error "don't know how to indent a %s" symbol)
  39616. +    (setq offset 0
  39617. +          relpos 0)))
  39618. +     ((eq offset '+)  (setq offset c-basic-offset))
  39619. +     ((eq offset '-)  (setq offset (- c-basic-offset)))
  39620. +     ((eq offset '++) (setq offset (* 2 c-basic-offset)))
  39621. +     ((eq offset '--) (setq offset (* 2 (- c-basic-offset))))
  39622. +     ((and (not (numberp offset))
  39623. +       (fboundp offset))
  39624. +      (setq offset (funcall offset langelem)))
  39625. +     ((not (numberp offset))
  39626. +      (setq offset (eval offset)))
  39627. +     )
  39628. +    (+ (if (and relpos
  39629. +        (< relpos (c-point 'bol)))
  39630. +       (save-excursion
  39631. +         (goto-char relpos)
  39632. +         (current-column))
  39633. +     0)
  39634. +       offset)))
  39635. +
  39636. +(defun c-indent-line (&optional syntax)
  39637. +  ;; indent the current line as C/C++/ObjC code. Optional SYNTAX is the
  39638. +  ;; syntactic information for the current line. Returns the amount of
  39639. +  ;; indentation change
  39640. +  (let* ((c-syntactic-context (or syntax (c-guess-basic-syntax)))
  39641. +     (pos (- (point-max) (point)))
  39642. +     (indent (apply '+ (mapcar 'c-get-offset c-syntactic-context)))
  39643. +     (shift-amt  (- (current-indentation) indent)))
  39644. +    (and c-echo-syntactic-information-p
  39645. +     (message "syntax: %s, indent= %d" c-syntactic-context indent))
  39646. +    (if (zerop shift-amt)
  39647. +    nil
  39648. +      (delete-region (c-point 'bol) (c-point 'boi))
  39649. +      (beginning-of-line)
  39650. +      (indent-to indent))
  39651. +    (if (< (point) (c-point 'boi))
  39652. +    (back-to-indentation)
  39653. +      ;; If initial point was within line's indentation, position after
  39654. +      ;; the indentation.  Else stay at same point in text.
  39655. +      (if (> (- (point-max) pos) (point))
  39656. +      (goto-char (- (point-max) pos)))
  39657. +      )
  39658. +    (run-hooks 'c-special-indent-hook)
  39659. +    shift-amt))
  39660. +
  39661. +(defun c-show-syntactic-information ()
  39662. +  "Show syntactic information for current line."
  39663. +  (interactive)
  39664. +  (message "syntactic analysis: %s" (c-guess-basic-syntax))
  39665. +  (c-keep-region-active))
  39666. +
  39667. +
  39668. +;; Standard indentation line-ups
  39669. +(defun c-lineup-arglist (langelem)
  39670. +  ;; lineup the current arglist line with the arglist appearing just
  39671. +  ;; after the containing paren which starts the arglist.
  39672. +  (save-excursion
  39673. +    (let* ((containing-sexp
  39674. +        (save-excursion
  39675. +          ;; arglist-cont-nonempty gives relpos ==
  39676. +          ;; to boi of containing-sexp paren. This
  39677. +          ;; is good when offset is +, but bad
  39678. +          ;; when it is c-lineup-arglist, so we
  39679. +          ;; have to special case a kludge here.
  39680. +          (if (memq (car langelem) '(arglist-intro arglist-cont-nonempty))
  39681. +          (progn
  39682. +            (beginning-of-line)
  39683. +            (backward-up-list 1)
  39684. +            (skip-chars-forward " \t" (c-point 'eol)))
  39685. +        (goto-char (cdr langelem)))
  39686. +          (point)))
  39687. +       (cs-curcol (save-excursion
  39688. +            (goto-char (cdr langelem))
  39689. +            (current-column))))
  39690. +      (if (save-excursion
  39691. +        (beginning-of-line)
  39692. +        (looking-at "[ \t]*)"))
  39693. +      (progn (goto-char (match-end 0))
  39694. +         (forward-sexp -1)
  39695. +         (forward-char 1)
  39696. +         (c-forward-syntactic-ws)
  39697. +         (- (current-column) cs-curcol))
  39698. +    (goto-char containing-sexp)
  39699. +    (or (eolp)
  39700. +        (let ((eol (c-point 'eol))
  39701. +          (here (progn
  39702. +              (forward-char 1)
  39703. +              (skip-chars-forward " \t")
  39704. +              (point))))
  39705. +          (c-forward-syntactic-ws)
  39706. +          (if (< (point) eol)
  39707. +          (goto-char here))))
  39708. +    (- (current-column) cs-curcol)
  39709. +    ))))
  39710. +
  39711. +(defun c-lineup-arglist-intro-after-paren (langelem)
  39712. +  ;; lineup an arglist-intro line to just after the open paren
  39713. +  (save-excursion
  39714. +    (let ((cs-curcol (save-excursion
  39715. +               (goto-char (cdr langelem))
  39716. +               (current-column)))
  39717. +      (ce-curcol (save-excursion
  39718. +               (beginning-of-line)
  39719. +               (backward-up-list 1)
  39720. +               (skip-chars-forward " \t" (c-point 'eol))
  39721. +               (current-column))))
  39722. +      (- ce-curcol cs-curcol -1))))
  39723. +
  39724. +(defun c-lineup-streamop (langelem)
  39725. +  ;; lineup stream operators
  39726. +  (save-excursion
  39727. +    (let* ((relpos (cdr langelem))
  39728. +       (curcol (progn (goto-char relpos)
  39729. +              (current-column))))
  39730. +      (re-search-forward "<<\\|>>" (c-point 'eol) 'move)
  39731. +      (goto-char (match-beginning 0))
  39732. +      (- (current-column) curcol))))
  39733. +
  39734. +(defun c-lineup-multi-inher (langelem)
  39735. +  ;; line up multiple inheritance lines
  39736. +  (save-excursion
  39737. +    (let (cs-curcol
  39738. +      (eol (c-point 'eol))
  39739. +      (here (point)))
  39740. +      (goto-char (cdr langelem))
  39741. +      (setq cs-curcol (current-column))
  39742. +      (skip-chars-forward "^:" eol)
  39743. +      (skip-chars-forward " \t:" eol)
  39744. +      (if (or (eolp)
  39745. +          (looking-at c-comment-start-regexp))
  39746. +      (c-forward-syntactic-ws here))
  39747. +      (- (current-column) cs-curcol)
  39748. +      )))
  39749. +
  39750. +(defun c-lineup-C-comments (langelem)
  39751. +  ;; line up C block comment continuation lines
  39752. +  (save-excursion
  39753. +    (let ((stars (progn
  39754. +           (beginning-of-line)
  39755. +           (skip-chars-forward " \t")
  39756. +           (if (looking-at "\\*\\*?")
  39757. +               (- (match-end 0) (match-beginning 0))
  39758. +             0)))
  39759. +      (cs-curcol (progn (goto-char (cdr langelem))
  39760. +                (current-column))))
  39761. +      (back-to-indentation)
  39762. +      (if (re-search-forward "/\\*[ \t]*" (c-point 'eol) t)
  39763. +      (goto-char (+ (match-beginning 0)
  39764. +            (cond
  39765. +             (c-block-comments-indent-p 0)
  39766. +             ((= stars 1) 1)
  39767. +             ((= stars 2) 0)
  39768. +             (t (- (match-end 0) (match-beginning 0)))))))
  39769. +      (- (current-column) cs-curcol))))
  39770. +
  39771. +(defun c-lineup-comment (langelem)
  39772. +  ;; support old behavior for comment indentation. we look at
  39773. +  ;; c-comment-only-line-offset to decide how to indent comment
  39774. +  ;; only-lines
  39775. +  (save-excursion
  39776. +    (back-to-indentation)
  39777. +    ;; at or to the right of comment-column
  39778. +    (if (>= (current-column) comment-column)
  39779. +    (c-comment-indent)
  39780. +      ;; otherwise, indent as specified by c-comment-only-line-offset
  39781. +      (if (not (bolp))
  39782. +      (or (car-safe c-comment-only-line-offset)
  39783. +          c-comment-only-line-offset)
  39784. +    (or (cdr-safe c-comment-only-line-offset)
  39785. +        (car-safe c-comment-only-line-offset)
  39786. +        -1000            ;jam it against the left side
  39787. +        )))))
  39788. +
  39789. +(defun c-lineup-runin-statements (langelem)
  39790. +  ;; line up statements in coding standards which place the first
  39791. +  ;; statement on the same line as the block opening brace.
  39792. +  (if (= (char-after (cdr langelem)) ?{)
  39793. +      (save-excursion
  39794. +    (let ((curcol (progn
  39795. +            (goto-char (cdr langelem))
  39796. +            (current-column))))
  39797. +      (forward-char 1)
  39798. +      (skip-chars-forward " \t")
  39799. +      (- (current-column) curcol)))
  39800. +    0))
  39801. +
  39802. +(defun c-lineup-math (langelem)
  39803. +  ;; line up math statement-cont after the equals
  39804. +  (save-excursion
  39805. +    (let* ((relpos (cdr langelem))
  39806. +       (equalp (save-excursion
  39807. +             (goto-char (c-point 'boi))
  39808. +             (skip-chars-forward "^=" (c-point 'eol))
  39809. +             (and (= (following-char) ?=)
  39810. +              (- (point) (c-point 'boi)))))
  39811. +       (curcol (progn
  39812. +             (goto-char relpos)
  39813. +             (current-column)))
  39814. +       donep)
  39815. +      (while (and (not donep)
  39816. +          (< (point) (c-point 'eol)))
  39817. +    (skip-chars-forward "^=" (c-point 'eol))
  39818. +    (if (c-in-literal (cdr langelem))
  39819. +        (forward-char 1)
  39820. +      (setq donep t)))
  39821. +      (if (/= (following-char) ?=)
  39822. +      ;; there's no equal sign on the line
  39823. +      c-basic-offset
  39824. +    ;; calculate indentation column after equals and ws, unless
  39825. +    ;; our line contains an equals sign
  39826. +    (if (not equalp)
  39827. +        (progn
  39828. +          (forward-char 1)
  39829. +          (skip-chars-forward " \t")
  39830. +          (setq equalp 0)))
  39831. +    (- (current-column) equalp curcol))
  39832. +      )))
  39833. +
  39834. +(defun c-lineup-objc-method-call (langelem)
  39835. +  ;; Line up methods args as elisp-mode does with function args
  39836. +  (save-excursion
  39837. +    (let* ((relpos (cdr langelem))
  39838. +       (curcol (progn (goto-char relpos)
  39839. +              (current-column))))
  39840. +      ;; We are now on the opening square bracket
  39841. +      (forward-char)           
  39842. +      (forward-sexp)
  39843. +      (- (1+ (current-column)) curcol))))
  39844. +
  39845. +(defun c-lineup-objc-method-args (langelem)
  39846. +  ;; Line up the colons that separate args. This is done trying to
  39847. +  ;; align colons vertically.
  39848. +  (save-excursion
  39849. +    (let* ((here (c-point 'boi))
  39850. +       (curcol (progn (goto-char here) (current-column)))
  39851. +       (eol (c-point 'eol))
  39852. +       (relpos (cdr langelem))
  39853. +       (first-col-column (progn
  39854. +                   (goto-char relpos)
  39855. +                   (skip-chars-forward "^:" eol)
  39856. +                   (and (= (following-char) ?:)
  39857. +                    (current-column)))))
  39858. +      (if (not first-col-column)
  39859. +      c-basic-offset
  39860. +    (goto-char here)
  39861. +    (skip-chars-forward "^:" eol)
  39862. +    (if (= (following-char) ?:)
  39863. +        (+ curcol (- first-col-column (current-column)))
  39864. +      c-basic-offset)))))
  39865. +
  39866. +(defun c-lineup-objc-method-args-2 (langelem)
  39867. +  ;; Line up the colons that separate args. This is done trying to
  39868. +  ;; align the colon on the current line with the previous one.
  39869. +  (save-excursion
  39870. +    (let* ((here (c-point 'boi))
  39871. +       (curcol (progn (goto-char here) (current-column)))
  39872. +       (eol (c-point 'eol))
  39873. +       (relpos (cdr langelem))
  39874. +       (prev-col-column (progn
  39875. +                  (skip-chars-backward "^:" relpos)
  39876. +                  (and (= (preceding-char) ?:)
  39877. +                   (- (current-column) 1)))))
  39878. +      (if (not prev-col-column)
  39879. +      c-basic-offset
  39880. +    (goto-char here)
  39881. +    (skip-chars-forward "^:" eol)
  39882. +    (if (= (following-char) ?:)
  39883. +        (+ curcol (- prev-col-column (current-column)))
  39884. +      c-basic-offset)))))
  39885. +
  39886. +
  39887. +;; commands for "macroizations" -- making C++ parameterized types via
  39888. +;; macros. Also commands for commentifying regions
  39889. +
  39890. +(defun c-backslashify-current-line (doit)
  39891. +  ;; Backslashifies current line if DOIT is non-nil, otherwise
  39892. +  ;; unbackslashifies the current line.
  39893. +  (end-of-line)
  39894. +  (if doit
  39895. +      ;; Note that "\\\\" is needed to get one backslash.
  39896. +      (if (not (save-excursion
  39897. +         (forward-char -1)
  39898. +         (looking-at "\\\\")))
  39899. +      (progn
  39900. +        (if (>= (current-column) c-backslash-column)
  39901. +        (insert " \\")
  39902. +          (while (<= (current-column) c-backslash-column)
  39903. +        (insert "\t")
  39904. +        (end-of-line))
  39905. +          (delete-char -1)
  39906. +          (while (< (current-column) c-backslash-column)
  39907. +        (insert " ")
  39908. +        (end-of-line))
  39909. +          (insert "\\"))))
  39910. +    (if (not (bolp))
  39911. +    (progn
  39912. +      (forward-char -1)
  39913. +      (if (looking-at "\\\\")
  39914. +          (progn
  39915. +        (skip-chars-backward " \t")
  39916. +        (delete-region (point) (c-point 'eol))))
  39917. +      ))))
  39918. +
  39919. +(defun c-backslash-region (beg end arg)
  39920. +  "Insert backslashes at end of every line in region.
  39921. +Useful for defining cpp macros.  If called with a prefix argument,
  39922. +it trailing backslashes are removed."
  39923. +  (interactive "r\nP")
  39924. +  (save-excursion
  39925. +    (let ((do-lastline-p (progn (goto-char end) (not (bolp)))))
  39926. +      (save-restriction
  39927. +    (narrow-to-region beg end)
  39928. +    (goto-char (point-min))
  39929. +    (while (not (save-excursion
  39930. +              (forward-line 1)
  39931. +              (eobp)))
  39932. +      (c-backslashify-current-line (null arg))
  39933. +      (forward-line 1)))
  39934. +      (and do-lastline-p
  39935. +       (progn (goto-char end)
  39936. +          (c-backslashify-current-line (null arg))))
  39937. +      )))
  39938. +
  39939. +;;(defun comment-region (beg end &optional arg)
  39940. +;;  "Comment or uncomment each line in the region.
  39941. +;;With just C-u prefix arg, uncomment each line in region.
  39942. +;;Numeric prefix arg ARG means use ARG comment characters.
  39943. +;;If ARG is negative, delete that many comment characters instead.
  39944. +;;Comments are terminated on each line, even for syntax in which newline does
  39945. +;;not end the comment.  Blank lines do not get comments."
  39946. +;;  ;; if someone wants it to only put a comment-start at the beginning and
  39947. +;;  ;; comment-end at the end then typing it, C-x C-x, closing it, C-x C-x
  39948. +;;  ;; is easy enough.  No option is made here for other than commenting
  39949. +;;  ;; every line.
  39950. +;;  (interactive "r\nP")
  39951. +;;  (or comment-start (error "No comment syntax is defined"))
  39952. +;;  (if (> beg end) (let (mid) (setq mid beg beg end end mid)))
  39953. +;;  (save-excursion
  39954. +;;    (save-restriction
  39955. +;;      (let ((cs comment-start) (ce comment-end)
  39956. +;;        numarg)
  39957. +;;        (if (consp arg) (setq numarg t)
  39958. +;;      (setq numarg (prefix-numeric-value arg))
  39959. +;;      ;; For positive arg > 1, replicate the comment delims now,
  39960. +;;      ;; then insert the replicated strings just once.
  39961. +;;      (while (> numarg 1)
  39962. +;;        (setq cs (concat cs comment-start)
  39963. +;;          ce (concat ce comment-end))
  39964. +;;        (setq numarg (1- numarg))))
  39965. +;;    ;; Loop over all lines from BEG to END.
  39966. +;;        (narrow-to-region beg end)
  39967. +;;        (goto-char beg)
  39968. +;;        (while (not (eobp))
  39969. +;;          (if (or (eq numarg t) (< numarg 0))
  39970. +;;          (progn
  39971. +;;        ;; Delete comment start from beginning of line.
  39972. +;;        (if (eq numarg t)
  39973. +;;            (while (looking-at (regexp-quote cs))
  39974. +;;              (delete-char (length cs)))
  39975. +;;          (let ((count numarg))
  39976. +;;            (while (and (> 1 (setq count (1+ count)))
  39977. +;;                (looking-at (regexp-quote cs)))
  39978. +;;              (delete-char (length cs)))))
  39979. +;;        ;; Delete comment end from end of line.
  39980. +;;                (if (string= "" ce)
  39981. +;;            nil
  39982. +;;          (if (eq numarg t)
  39983. +;;              (progn
  39984. +;;            (end-of-line)
  39985. +;;            ;; This is questionable if comment-end ends in
  39986. +;;            ;; whitespace.  That is pretty brain-damaged,
  39987. +;;            ;; though.
  39988. +;;            (skip-chars-backward " \t")
  39989. +;;            (if (and (>= (- (point) (point-min)) (length ce))
  39990. +;;                 (save-excursion
  39991. +;;                   (backward-char (length ce))
  39992. +;;                   (looking-at (regexp-quote ce))))
  39993. +;;                (delete-char (- (length ce)))))
  39994. +;;            (setq count numarg)
  39995. +;;            (while (> 1 (setq count (1+ count)))
  39996. +;;              (end-of-line)
  39997. +;;              ;; this is questionable if comment-end ends in whitespace
  39998. +;;              ;; that is pretty brain-damaged though
  39999. +;;              (skip-chars-backward " \t")
  40000. +;;              (save-excursion
  40001. +;;            (backward-char (length ce))
  40002. +;;            (if (looking-at (regexp-quote ce))
  40003. +;;                (delete-char (length ce)))))))
  40004. +;;        (forward-line 1))
  40005. +;;        ;; Insert at beginning and at end.
  40006. +;;            (if (looking-at "[ \t]*$") ()
  40007. +;;              (insert cs)
  40008. +;;              (if (string= "" ce) ()
  40009. +;;                (end-of-line)
  40010. +;;                (insert ce)))
  40011. +;;            (search-forward "\n" nil 'move)))))))
  40012. +
  40013. +
  40014. +;; defuns for submitting bug reports
  40015. +
  40016. +(defconst c-version "4.85"
  40017. +  "cc-mode version number.")
  40018. +(defconst c-mode-help-address "cc-mode-help@anthem.nlm.nih.gov"
  40019. +  "Address accepting submission of bug reports.")
  40020. +
  40021. +(defun c-version ()
  40022. +  "Echo the current version of cc-mode in the minibuffer."
  40023. +  (interactive)
  40024. +  (message "Using cc-mode version %s" c-version)
  40025. +  (c-keep-region-active))
  40026. +
  40027. +;; get reporter-submit-bug-report when byte-compiling
  40028. +(and (fboundp 'eval-when-compile)
  40029. +     (eval-when-compile
  40030. +      (require 'reporter)))
  40031. +
  40032. +(defun c-submit-bug-report ()
  40033. +  "Submit via mail a bug report on cc-mode."
  40034. +  (interactive)
  40035. +  ;; load in reporter
  40036. +  (let ((reporter-prompt-for-summary-p t))
  40037. +    (and
  40038. +     (y-or-n-p "Do you want to submit a report on cc-mode? ")
  40039. +     (require 'reporter)
  40040. +     (reporter-submit-bug-report
  40041. +      c-mode-help-address
  40042. +      (concat "cc-mode " c-version " ("
  40043. +          (cond ((eq major-mode 'c++-mode)  "C++")
  40044. +            ((eq major-mode 'c-mode)    "C")
  40045. +            ((eq major-mode 'objc-mode) "ObjC"))
  40046. +          ")")
  40047. +      (let ((vars (list
  40048. +           ;; report only the vars that affect indentation
  40049. +           'c-basic-offset
  40050. +           'c-offsets-alist
  40051. +           'c-block-comments-indent-p
  40052. +           'c-cleanup-list
  40053. +           'c-comment-only-line-offset
  40054. +           'c-backslash-column
  40055. +           'c-delete-function
  40056. +           'c-electric-pound-behavior
  40057. +           'c-hanging-braces-alist
  40058. +           'c-hanging-colons-alist
  40059. +           'c-hanging-comment-ender-p
  40060. +           'c-tab-always-indent
  40061. +           'c-recognize-knr-p
  40062. +           'defun-prompt-regexp
  40063. +           'tab-width
  40064. +           )))
  40065. +    (if (not (boundp 'defun-prompt-regexp))
  40066. +        (delq 'defun-prompt-regexp vars)
  40067. +      vars))
  40068. +      (function
  40069. +       (lambda ()
  40070. +     (insert
  40071. +      (if c-special-indent-hook
  40072. +          (concat "\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"
  40073. +              "c-special-indent-hook is set to '"
  40074. +              (format "%s" c-special-indent-hook)
  40075. +              ".\nPerhaps this is your problem?\n"
  40076. +              "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n\n")
  40077. +        "\n")
  40078. +      (format "c-emacs-features: %s\n" c-emacs-features)
  40079. +      )))
  40080. +      nil
  40081. +      "Dear Barry,"
  40082. +      ))))
  40083. +
  40084. +
  40085. +;; menus for XEmacs (formerly Lucid)
  40086. +(defun c-popup-menu (e)
  40087. +  "Pops up the C/C++/ObjC menu."
  40088. +  (interactive "@e")
  40089. +  (popup-menu (cons (concat mode-name " Mode Commands") c-mode-menu))
  40090. +  (c-keep-region-active))
  40091. +    
  40092. +
  40093. +;; fsets for compatibility with BOCM
  40094. +(fset 'electric-c-brace      'c-electric-brace)
  40095. +(fset 'electric-c-semi       'c-electric-semi&comma)
  40096. +(fset 'electric-c-sharp-sign 'c-electric-pound)
  40097. +;; there is no cc-mode equivalent for electric-c-terminator
  40098. +(fset 'mark-c-function       'c-mark-function)
  40099. +(fset 'indent-c-exp          'c-indent-exp)
  40100. +(fset 'set-c-style           'c-set-style)
  40101. +;; lemacs 19.9 + font-lock + cc-mode - c++-mode lossage
  40102. +(fset 'c++-beginning-of-defun 'beginning-of-defun)
  40103. +(fset 'c++-end-of-defun 'end-of-defun)
  40104. +
  40105. +;; set up bc warnings for obsolete variables, but for now lets not
  40106. +;; worry about obsolete functions.  maybe later some will be important
  40107. +;; to flag
  40108. +(and (memq 'v19 c-emacs-features)
  40109. +     (let* ((na "Nothing appropriate.")
  40110. +        (vars
  40111. +         (list
  40112. +          (cons 'c++-c-mode-syntax-table 'c-mode-syntaxt-table)
  40113. +          (cons 'c++-tab-always-indent 'c-tab-always-indent)
  40114. +          (cons 'c++-always-arglist-indent-p na)
  40115. +          (cons 'c++-block-close-brace-offset 'c-offsets-alist)
  40116. +          (cons 'c++-paren-as-block-close-p na)
  40117. +          (cons 'c++-continued-member-init-offset 'c-offsets-alist)
  40118. +          (cons 'c++-member-init-indent 'c-offsets-alist)
  40119. +          (cons 'c++-friend-offset na)
  40120. +          (cons 'c++-access-specifier-offset 'c-offsets-alist)
  40121. +          (cons 'c++-empty-arglist-indent 'c-offsets-alist)
  40122. +          (cons 'c++-comment-only-line-offset 'c-comment-only-line-offset)
  40123. +          (cons 'c++-C-block-comments-indent-p 'c-block-comments-indent-p)
  40124. +          (cons 'c++-cleanup-list 'c-cleanup-list)
  40125. +          (cons 'c++-hanging-braces 'c-hanging-braces-alist)
  40126. +          (cons 'c++-hanging-member-init-colon 'c-hanging-colons-alist)
  40127. +          (cons 'c++-auto-hungry-initial-state
  40128. +            "Use `c-auto-newline' and `c-hungry-delete-key' instead.")
  40129. +          (cons 'c++-auto-hungry-toggle na)
  40130. +          (cons 'c++-relative-offset-p na)
  40131. +          (cons 'c++-special-indent-hook 'c-special-indent-hook)
  40132. +          (cons 'c++-delete-function 'c-delete-function)
  40133. +          (cons 'c++-electric-pound-behavior 'c-electric-pound-behavior)
  40134. +          (cons 'c++-hungry-delete-key 'c-hungry-delete-key)
  40135. +          (cons 'c++-auto-newline 'c-auto-newline)
  40136. +          (cons 'c++-match-header-strongly na)
  40137. +          (cons 'c++-defun-header-strong-struct-equivs na)
  40138. +          (cons 'c++-version 'c-version)
  40139. +          (cons 'c++-mode-help-address 'c-mode-help-address)
  40140. +          (cons 'c-indent-level 'c-basic-offset)
  40141. +          (cons 'c-brace-imaginary-offset na)
  40142. +          (cons 'c-brace-offset 'c-offsets-alist)
  40143. +          (cons 'c-argdecl-indent 'c-offsets-alist)
  40144. +          (cons 'c-label-offset 'c-offsets-alist)
  40145. +          (cons 'c-continued-statement-offset 'c-offsets-alist)
  40146. +          (cons 'c-continued-brace-offset 'c-offsets-alist)
  40147. +          (cons 'c-default-macroize-column 'c-backslash-column)
  40148. +          (cons 'c++-default-macroize-column 'c-backslash-column)
  40149. +          )))
  40150. +       (mapcar
  40151. +    (function
  40152. +     (lambda (elt)
  40153. +       (make-obsolete-variable (car elt) (cdr elt))))
  40154. +    vars)))
  40155. +
  40156. +(provide 'cc-mode)
  40157. +;;; cc-mode.el ends here
  40158. Binary files baseline/fsf/emacs/site-lisp/reporter.elc and amiga/fsf/emacs/site-lisp/reporter.elc differ
  40159. Binary files baseline/fsf/emacs/site-lisp/tapestry.elc and amiga/fsf/emacs/site-lisp/tapestry.elc differ
  40160. Binary files baseline/fsf/emacs/site-lisp/timezone.elc and amiga/fsf/emacs/site-lisp/timezone.elc differ
  40161. diff -rup --new-file baseline/fsf/emacs/site-lisp/vm-auto-archive.el amiga/fsf/emacs/site-lisp/vm-auto-archive.el
  40162. --- baseline/fsf/emacs/site-lisp/vm-auto-archive.el    Wed Dec 31 17:00:00 1969
  40163. +++ amiga/fsf/emacs/site-lisp/vm-auto-archive.el    Sat Sep 28 00:00:00 1996
  40164. @@ -0,0 +1,372 @@
  40165. +;;
  40166. +;; LCD Archive Entry:
  40167. +;; vm-auto-archive|Neal Young|ney@research.att.com|
  40168. +;; Two ways to automatically archive outgoing mail into appropriate VM folders.  Supersedes vm-auto-fcc.el|
  40169. +;; 20-Oct-1994|version 5.72a|~/misc/vm-auto-archive.el|
  40170. +;;
  40171. +;; PURPOSE: Automatically archive outgoing mail into appropriate VM folders.
  40172. +;;
  40173. +;;   This works with vm 5.72.
  40174. +;;
  40175. +;; USAGE: 
  40176. +;;   This package provides two methods for automatically archiving outgoing
  40177. +;;   mail messages using the VM mailer.  [Also it provides a utility function
  40178. +;;   "return-match" which is useful in vm-auto-folder-alist -- e.g.,
  40179. +;;   after matching the regexp "a\(.*\)b" to "axb", (return-match "\\1 \\1") 
  40180. +;;   will return "x x".]
  40181. +;;
  40182. +;;   The first method is implemented by an interactive function vm-auto-fcc.
  40183. +;;   This function, invoked by "" when composing a message, prompts for a
  40184. +;;   folder name and inserts an "FCC: <folder-name>" field into the msg.  When
  40185. +;;   prompting for the folder name, the function provides a default determined
  40186. +;;   by pattern-matching the contents of the current message, similarly to VM's
  40187. +;;   use of vm-auto-folder-alist, as described below.  When the message is
  40188. +;;   sent, the "FCC:" field causes a copy to be appended to the chosen folder.
  40189. +;;
  40190. +;;   The second method is implemented by a function vm-auto-archive.  This
  40191. +;;   function, invoked by "" when composing a message, prompts for a
  40192. +;;   folder name and inserts two fields into the message.  When prompting for
  40193. +;;   the folder name, the function provides a default determined as in the
  40194. +;;   first method.  The first field is a "BCC: " field with your
  40195. +;;   user-login-name.  The second field is a "X-VM-folder: " field with the
  40196. +;;   chosen folder name.  When the message is sent, the "BCC:" field causes a
  40197. +;;   copy to be mailed to you.  This file modifies VM (using "advice") so that
  40198. +;;   when you save a message that appears to be from you and has an
  40199. +;;   "X-VM-folder:" field, that folder will be offered as the default folder
  40200. +;;   for saving.
  40201. +;;
  40202. +;;   The second method has the advantage that all of the fields added to the
  40203. +;;   message by send-mail are present in the archived message too.  It has
  40204. +;;   the disadvantages that the mail is not immediately archived and a
  40205. +;;   malicious mail sender could screw it up.
  40206. +;;
  40207. +;;   In each case, the default folder is determined by pattern-matching the
  40208. +;;   contents of the message being composed to the variable
  40209. +;;   vm-auto-archive-alist.  This variable has the same format and semantics
  40210. +;;   as vm-auto-folder-alist, except that it is used to classify a message
  40211. +;;   that is being composed for sending, rather than one in a VM folder.
  40212. +;;
  40213. +;;   (VM is an alternative to rmail.  It has some nice features like using the
  40214. +;;    standard mailbox format, automatically filing mail messages by pattern
  40215. +;;    matching, easily customized summary buffer display, threads...
  40216. +;;    If you don't have VM, try /ftp.uu.net:networking/mail/vm.
  40217. +;;
  40218. +;; INSTALLATION:
  40219. +;;    Probably best not to compile this file, but if you do, recompile it
  40220. +;;    whenever you install a new version of vm.
  40221. +;;
  40222. +;;    PUT this file in a directory on your e-lisp search path
  40223. +;;    under the name "vm-auto-archive.el".
  40224. +;;
  40225. +;;    ADD these lines to your .vm (or .emacs) file:
  40226. +
  40227. +(defvar vm-auto-archive-alist nil "\
  40228. +Like vm-auto-folder-alist, but used by vm-auto-fcc and vm-auto-archive
  40229. +to categorize a message being composed for sending.")
  40230. +
  40231. +(defvar vm-auto-archive-sender-regexp nil "\
  40232. +Regexp.  If the sender of a mail message matches this, and the message
  40233. + has an X-VM-folder field, then vm-auto-select-folder will return the folder
  40234. + named in the field.  Defaults to vm-reply-ignored-addresses.")
  40235. +
  40236. +(autoload (quote vm-auto-fcc) "vm-auto-archive" "\
  40237. +Add a new FCC field, with file name guessed by vm-auto-archive-alist.
  40238. +Return file name." t nil)
  40239. +
  40240. +(autoload (quote vm-auto-archive) "vm-auto-archive" "\
  40241. +Add BCC and X-VM-folder fields to message being composed,
  40242. + guessing folder name based on vm-auto-archive-alist.  Return file name." t nil)
  40243. +
  40244. +(autoload (quote vm-auto-archive-enable) "vm-auto-archive" "\
  40245. +Enable vm-auto-archive." t nil)
  40246. +
  40247. +(autoload (quote vm-auto-archive-disable) "vm-auto-archive" "\
  40248. +Disable vm-auto-archive." t nil)
  40249. +
  40250. +(autoload (quote return-match) "vm-auto-archive" "\
  40251. +Like replace-match except return the string that would be
  40252. +substituted for the match, instead of replacing the match with it." nil nil)
  40253. +
  40254. +(add-hook 'mail-setup-hook 
  40255. +         '(lambda () 
  40256. +        (local-set-key "" 'vm-auto-fcc)
  40257. +        (local-set-key "" 'vm-auto-archive)
  40258. +        ))
  40259. +
  40260. +(vm-auto-archive-enable)
  40261. +
  40262. +;;    (continued...)
  40263. +;;
  40264. +;;    SET variable vm-auto-archive-alist (in your .vm (or .emacs) file)
  40265. +;;     as you would set vm-auto-folder-alist, 
  40266. +;;     except set it to recognize fields of outgoing messages.
  40267. +;;      You probably want to reverse the sense of "from" and "to" headers,
  40268. +;;    but you could just (setq vm-auto-archive-alist vm-auto-folder-alist).
  40269. +;;      
  40270. +;; BUGS:
  40271. +;;    The method is a hack.  It advises vm-get-header-contents to work in
  40272. +;;    arbitrary buffers, so that vm-auto-select-folder can too.  It also
  40273. +;;    advises vm-auto-select-folder to catch the "X-VM-folder:" field if
  40274. +;;    appropriate.  If vm-auto-select-folder or vm-get-header-contents is
  40275. +;;    changed, it might cease to work.
  40276. +;;
  40277. +;;    For these reasons, I added commands to disable/enable vm-auto-archive
  40278. +;;    at will.
  40279. +;;
  40280. +;; Copyright (C) 1993,1994  Neal Young
  40281. +;;
  40282. +;;    "X-VM-folder:" field functionality based on code
  40283. +;;    provided by gec@Mti.Sgi.Com (Gardner Cohen).
  40284. +;; 
  40285. +;;    This program is free software; you can redistribute it and/or modify
  40286. +;;    it under the terms of the GNU General Public License as published by
  40287. +;;    the Free Software Foundation; either version 2 of the License, or
  40288. +;;    (at your option) any later version.
  40289. +;; 
  40290. +;;    This program is distributed in the hope that it will be useful,
  40291. +;;    but WITHOUT ANY WARRANTY; without even the implied warranty of
  40292. +;;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  40293. +;;    GNU General Public License for more details.
  40294. +;; 
  40295. +
  40296. +(require 'advice)
  40297. +
  40298. +(defvar vm-auto-archive-enabled nil "vm-auto-archive private variable")
  40299. +
  40300. +;;;###autoload
  40301. +(defvar vm-auto-archive-alist nil 
  40302. +  "Like vm-auto-folder-alist, but used by vm-auto-fcc and vm-auto-archive
  40303. +to categorize a message being composed for sending.")
  40304. +
  40305. +(defvar vm-auto-archive-alist nil "\
  40306. +Like vm-auto-folder-alist, but used by vm-auto-fcc and vm-auto-archive
  40307. +to categorize a message being composed for sending.")
  40308. +
  40309. +(defvar vm-auto-archive-alist nil "\
  40310. +Like vm-auto-folder-alist, but used by vm-auto-fcc and vm-auto-archive
  40311. +to categorize a message being composed for sending.")
  40312. +
  40313. +;;;###autoload
  40314. +(defvar vm-auto-archive-sender-regexp nil
  40315. +  "Regexp.  If the sender of a mail message matches this, and the message
  40316. + has an X-VM-folder field, then vm-auto-select-folder will return the folder
  40317. + named in the field.  Defaults to vm-reply-ignored-addresses.")
  40318. +
  40319. +(defvar vm-auto-archive-sender-regexp nil "\
  40320. +Regexp.  If the sender of a mail message matches this, and the message
  40321. + has an X-VM-folder field, then vm-auto-select-folder will return the folder
  40322. + named in the field.  Defaults to vm-reply-ignored-addresses.")
  40323. +
  40324. +(defvar vm-auto-archive-sender-regexp nil "\
  40325. +Regexp.  If the sender of a mail message matches this, and the message
  40326. + has an X-VM-folder field, then vm-auto-select-folder will return the folder
  40327. + named in the field.  Defaults to vm-reply-ignored-addresses.")
  40328. +
  40329. +;;;###autoload
  40330. +(defun vm-auto-fcc (&optional dont-ask-if-default-available)
  40331. +  "Add a new FCC field, with file name guessed by vm-auto-archive-alist.
  40332. +Return file name."
  40333. +  (interactive)
  40334. +  (if (not vm-auto-archive-enabled)
  40335. +      (message "execute vm-auto-archive-enable first!")
  40336. +    (let (file-name)
  40337. +      (save-excursion
  40338. +    (expand-abbrev)
  40339. +    (or (mail-position-on-field "fcc" t) ;Put new field after existing FCC.
  40340. +        (mail-position-on-field "to"))
  40341. +    (let ((default (vm-auto-select-folder-for-buffer 
  40342. +            vm-auto-archive-alist)))
  40343. +      (if (or (not (stringp default)) (equal default ""))
  40344. +          (setq default vm-last-save-folder))
  40345. +      (setq file-name
  40346. +        (if (or (not (stringp default)) (equal default ""))
  40347. +            (read-file-name "FCC: " vm-folder-directory)
  40348. +          (if (not (file-name-absolute-p default))
  40349. +              (setq default (concat vm-folder-directory default)))
  40350. +          (if dont-ask-if-default-available
  40351. +              default
  40352. +            (read-file-name (concat "FCC: (default " default ") ")
  40353. +                    vm-folder-directory
  40354. +                    default)))))
  40355. +    (insert "\nFCC: " file-name))
  40356. +      file-name)))
  40357. +
  40358. +;;;###autoload
  40359. +(defun vm-auto-archive (&optional dont-ask-if-default-available)
  40360. +  "Add BCC and X-VM-folder fields to message being composed,
  40361. + guessing folder name based on vm-auto-archive-alist.  Return file name."
  40362. +  (interactive)
  40363. +  (if (not vm-auto-archive-enabled)
  40364. +      (message "execute vm-auto-archive-enable first!")
  40365. +    (save-excursion
  40366. +      (expand-abbrev)
  40367. +      (or (mail-position-on-field "bcc" t) ;Put new field after existing BCC.
  40368. +      (mail-position-on-field "to"))
  40369. +      (insert "\nbcc: " (user-login-name))
  40370. +      (let ((default (vm-auto-select-folder-for-buffer vm-auto-archive-alist)))
  40371. +    (if (or (not (stringp default)) (equal default ""))
  40372. +        (setq default vm-last-save-folder))
  40373. +    (let ((file-name
  40374. +           (if (or (not (stringp default)) (equal default ""))
  40375. +           (read-file-name "folder: " vm-folder-directory)
  40376. +         (if (not (file-name-absolute-p default))
  40377. +             (setq default (concat vm-folder-directory default)))
  40378. +         (if dont-ask-if-default-available
  40379. +             default
  40380. +           (read-file-name (concat "folder: (default " default ") ")
  40381. +                   vm-folder-directory
  40382. +                   default)))))
  40383. +      (insert "\nX-VM-folder: " file-name)
  40384. +      file-name)))))
  40385. +
  40386. +(defun vm-auto-select-folder-for-buffer (auto-folder-alist)
  40387. +  (vm-auto-select-folder '(CURRENT-BUFFER) auto-folder-alist))
  40388. +
  40389. +;;
  40390. +(defadvice vm-get-header-contents;; args: message header-name-regexp
  40391. +  (around vm-auto-archive-get-header-contents disable)
  40392. +  "Advised so as to work in current buffer (instead of vm msg)
  40393. +   when (eq MESSAGE 'CURRENT-BUFFER).  For vm-5.65."
  40394. +  (if (not (eq message 'CURRENT-BUFFER))
  40395. +      ad-do-it
  40396. +    (vm-get-header-contents-current-buffer header-name-regexp)))
  40397. +
  40398. +;; logic to use X-VM-folder field to set the default when saving message.
  40399. +(defadvice vm-auto-select-folder
  40400. +  (around vm-auto-archive-auto-select (MP AUTO-FOLDER-ALIST) disable)
  40401. +  "If you sent the message, use the `X-VM-folder' field, if any."
  40402. +  (let ((header-folder (vm-get-header-contents (car MP) "x-vm-folder"))
  40403. +    (sender-regexp (or vm-auto-archive-sender-regexp
  40404. +               (if vm-reply-ignored-addresses
  40405. +                   (mapconcat 'identity
  40406. +                      vm-reply-ignored-addresses
  40407. +                      "\\|"))
  40408. +               (user-login-name)))
  40409. +    (sender (vm-get-header-contents (car MP) "from:")))
  40410. +    (or
  40411. +     (and sender 
  40412. +      (string-match sender-regexp sender)
  40413. +      (setq ad-return-value header-folder))
  40414. +     ad-do-it)))
  40415. +
  40416. +(defun vm-get-header-contents-current-buffer (header-name-regexp)
  40417. +  "like vm-get-header-contents but within a buffer holding text of message"
  40418. +  (condition-case nil
  40419. +      (let ((contents nil) 
  40420. +        (regexp (concat "^\\(" header-name-regexp "\\)")))
  40421. +    (save-excursion
  40422. +      (save-restriction
  40423. +        (let ((end
  40424. +           (progn (goto-char (point-min))
  40425. +              (re-search-forward "\n\n\\|\\'")
  40426. +              (point))))
  40427. +          (goto-char (point-min))
  40428. +          (let ((case-fold-search t))
  40429. +        (while (and (re-search-forward regexp end t)
  40430. +                (save-excursion (goto-char (match-beginning 0))
  40431. +                        (vm-match-header)))
  40432. +          (if contents
  40433. +              (setq contents
  40434. +                (concat contents ", " (vm-matched-header-contents)))
  40435. +            (setq contents (vm-matched-header-contents)))))))
  40436. +      (setq ad-return-value contents)))
  40437. +    (error
  40438. +     (error 
  40439. +      "vm-auto-archive incompatible with vm version or needs recompilation"
  40440. +      ))))
  40441. +
  40442. +;;; use the next two functions to enable/disable vm-auto-archive once loaded
  40443. +
  40444. +;;;###autoload
  40445. +(defun vm-auto-archive-enable ()
  40446. +  "Enable vm-auto-archive."
  40447. +  (interactive)
  40448. +  (if vm-auto-archive-enabled
  40449. +      nil
  40450. +    (setq ad-activate-on-definition t)
  40451. +    (ad-start-advice)
  40452. +    (ad-enable-advice 'vm-get-header-contents 'around
  40453. +             'vm-auto-archive-get-header-contents)
  40454. +    (ad-activate 'vm-get-header-contents)
  40455. +    (ad-enable-advice 'vm-auto-select-folder 'around 
  40456. +              'vm-auto-archive-auto-select)
  40457. +    (ad-activate 'vm-auto-select-folder)
  40458. +    (setq vm-auto-archive-enabled t)
  40459. +    ))
  40460. +
  40461. +;;;###autoload
  40462. +(defun vm-auto-archive-disable ()
  40463. +  "Disable vm-auto-archive."
  40464. +  (interactive)
  40465. +  (if (not vm-auto-archive-enabled)
  40466. +      nil
  40467. +    (ad-disable-advice 'vm-get-header-contents 'around
  40468. +               'vm-auto-archive-get-header-contents)
  40469. +    (ad-activate 'vm-get-header-contents)
  40470. +    (ad-disable-advice 'vm-auto-select-folder 'around 
  40471. +               'vm-auto-archive-auto-select)
  40472. +    (ad-activate 'vm-auto-select-folder)
  40473. +    (setq vm-auto-archive-enabled nil)
  40474. +    ))
  40475. +
  40476. +;; the following function is useful in vm-auto-folder-alist,
  40477. +;; e.g. after matching the regular expression "\(.*\)aa" to "bbaa"
  40478. +;; (return-match "\\1 x \\1") yields "bb x bb".  So, for instance, 
  40479. +;; the following would return the username of the first person in the
  40480. +;; from, to, sender, or cc fields, whichever comes first.
  40481. +;; (setq 
  40482. +;;      vm-auto-folder-alist
  40483. +;;      '(
  40484. +;;    ("From\\|To\\|Sender\\|CC"
  40485. +;;      ("^\\(.*<\\)?\\([^@%>     
  40486. +;; ]+\\)" . (return-match "\\2"))
  40487. +;;      )
  40488. +;;     )
  40489. +
  40490. +;;;###autoload
  40491. +(defun return-match (new-text &optional fixed-case &optional literal)
  40492. +  "Like replace-match except return the string that would be
  40493. +substituted for the match, instead of replacing the match with it."
  40494. +  (let* ((maxi (- (length new-text) 1))
  40495. +     (submatches (make-vector 10 ""))
  40496. +     (substrings nil)
  40497. +     (this (substring new-text 0 1))
  40498. +     (next (if (<= 1 maxi)
  40499. +           (substring new-text 1 2)
  40500. +         (char-to-string 0)))
  40501. +     (i 0))
  40502. +
  40503. +    (while (< i 10)
  40504. +      (if (match-beginning i)
  40505. +      (aset submatches i
  40506. +        (buffer-substring (match-beginning i) (match-end i))))
  40507. +      (setq i (+ 1 i)))
  40508. +
  40509. +    (setq i 0)
  40510. +    (while (<= i maxi)
  40511. +      (setq substrings 
  40512. +        (cons 
  40513. +         (if (string= this "\\")
  40514. +         (progn 
  40515. +           (setq i (+ 1 i))
  40516. +           (setq this next)
  40517. +           (setq next (if (< i maxi)
  40518. +                  (substring new-text (+ 1 i) (+ 2 i))
  40519. +                (char-to-string 0)))
  40520. +           (cond
  40521. +            ((string= this "&") (aref submatches 0))
  40522. +            ((and (string< "0" this)
  40523. +              (or (string= this "9")
  40524. +                  (string< this "9")))
  40525. +             (aref submatches (string-to-int this)))
  40526. +            (t this)))
  40527. +           this)
  40528. +         substrings))
  40529. +      (setq i (+ 1 i))
  40530. +      (setq this next)
  40531. +      (setq next (if (< i maxi)
  40532. +             (substring new-text (+ 1 i) (+ 2 i))
  40533. +           (char-to-string 0))))
  40534. +    (apply 'concat (nreverse substrings))))
  40535. +
  40536. +(provide 'vm-auto-archive)
  40537. Binary files baseline/fsf/emacs/site-lisp/vm-delete.elc and amiga/fsf/emacs/site-lisp/vm-delete.elc differ
  40538. Binary files baseline/fsf/emacs/site-lisp/vm-digest.elc and amiga/fsf/emacs/site-lisp/vm-digest.elc differ
  40539. Binary files baseline/fsf/emacs/site-lisp/vm-edit.elc and amiga/fsf/emacs/site-lisp/vm-edit.elc differ
  40540. Binary files baseline/fsf/emacs/site-lisp/vm-folder.elc and amiga/fsf/emacs/site-lisp/vm-folder.elc differ
  40541. Binary files baseline/fsf/emacs/site-lisp/vm-license.elc and amiga/fsf/emacs/site-lisp/vm-license.elc differ
  40542. Binary files baseline/fsf/emacs/site-lisp/vm-mark.elc and amiga/fsf/emacs/site-lisp/vm-mark.elc differ
  40543. Binary files baseline/fsf/emacs/site-lisp/vm-message.elc and amiga/fsf/emacs/site-lisp/vm-message.elc differ
  40544. Binary files baseline/fsf/emacs/site-lisp/vm-minibuf.elc and amiga/fsf/emacs/site-lisp/vm-minibuf.elc differ
  40545. Binary files baseline/fsf/emacs/site-lisp/vm-misc.elc and amiga/fsf/emacs/site-lisp/vm-misc.elc differ
  40546. Binary files baseline/fsf/emacs/site-lisp/vm-motion.elc and amiga/fsf/emacs/site-lisp/vm-motion.elc differ
  40547. Binary files baseline/fsf/emacs/site-lisp/vm-page.elc and amiga/fsf/emacs/site-lisp/vm-page.elc differ
  40548. Binary files baseline/fsf/emacs/site-lisp/vm-pop.elc and amiga/fsf/emacs/site-lisp/vm-pop.elc differ
  40549. Binary files baseline/fsf/emacs/site-lisp/vm-reply.elc and amiga/fsf/emacs/site-lisp/vm-reply.elc differ
  40550. Binary files baseline/fsf/emacs/site-lisp/vm-save.elc and amiga/fsf/emacs/site-lisp/vm-save.elc differ
  40551. Binary files baseline/fsf/emacs/site-lisp/vm-search.elc and amiga/fsf/emacs/site-lisp/vm-search.elc differ
  40552. Binary files baseline/fsf/emacs/site-lisp/vm-sort.elc and amiga/fsf/emacs/site-lisp/vm-sort.elc differ
  40553. Binary files baseline/fsf/emacs/site-lisp/vm-startup.elc and amiga/fsf/emacs/site-lisp/vm-startup.elc differ
  40554. Binary files baseline/fsf/emacs/site-lisp/vm-summary.elc and amiga/fsf/emacs/site-lisp/vm-summary.elc differ
  40555. Binary files baseline/fsf/emacs/site-lisp/vm-thread.elc and amiga/fsf/emacs/site-lisp/vm-thread.elc differ
  40556. Binary files baseline/fsf/emacs/site-lisp/vm-undo.elc and amiga/fsf/emacs/site-lisp/vm-undo.elc differ
  40557. Binary files baseline/fsf/emacs/site-lisp/vm-vars.elc and amiga/fsf/emacs/site-lisp/vm-vars.elc differ
  40558. Binary files baseline/fsf/emacs/site-lisp/vm-version.elc and amiga/fsf/emacs/site-lisp/vm-version.elc differ
  40559. Binary files baseline/fsf/emacs/site-lisp/vm-virtual.elc and amiga/fsf/emacs/site-lisp/vm-virtual.elc differ
  40560. Binary files baseline/fsf/emacs/site-lisp/vm-window.elc and amiga/fsf/emacs/site-lisp/vm-window.elc differ
  40561. diff -rup --new-file baseline/fsf/emacs/site-lisp/vm.el amiga/fsf/emacs/site-lisp/vm.el
  40562. --- baseline/fsf/emacs/site-lisp/vm.el    Wed Dec 31 17:00:00 1969
  40563. +++ amiga/fsf/emacs/site-lisp/vm.el    Sat Sep 28 00:00:00 1996
  40564. @@ -0,0 +1,1751 @@
  40565. +;;; UNIX style mail reader for GNU Emacs
  40566. +;;; Copyright (C) 1989 Kyle E. Jones
  40567. +;;;
  40568. +;;; This program is free software; you can redistribute it and/or modify
  40569. +;;; it under the terms of the GNU General Public License as published by
  40570. +;;; the Free Software Foundation; either version 1, or (at your option)
  40571. +;;; any later version.
  40572. +;;;
  40573. +;;; This program is distributed in the hope that it will be useful,
  40574. +;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  40575. +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  40576. +;;; GNU General Public License for more details.
  40577. +;;;
  40578. +;;; You should have received a copy of the GNU General Public License
  40579. +;;; along with this program; if not, write to the Free Software
  40580. +;;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  40581. +
  40582. +;; This is a set of Emacs-Lisp commands and support functions for
  40583. +;; reading mail.  While a mail reader (RMAIL) is distributed with GNU
  40584. +;; Emacs it converts a user's mailbox to BABYL format, a behavior I
  40585. +;; find quite unpalatable.
  40586. +;;
  40587. +;; VM is similar to RMAIL in that it scoops mail from the system mailbox
  40588. +;; into a primary inbox for reading, but the similarity ends there.
  40589. +;; VM does not reformat the mailbox beyond reordering the headers
  40590. +;; according to user preference, and adding a header used internally to
  40591. +;; store message attributes.
  40592. +;;
  40593. +;; Entry points to VM are the commands vm and vm-visit-folder.
  40594. +;;
  40595. +;; If autoloading then the lines:
  40596. +;;   (autoload 'vm "vm" nil t)
  40597. +;;   (autoload 'vm-visit-folder "vm" nil t)
  40598. +;; should appear in a user's .emacs or in default.el in the lisp
  40599. +;; directory of the Emacs distribution.
  40600. +;;
  40601. +;; VM requires Emacs' etc/movemail to work on your system.
  40602. +
  40603. +(provide 'vm)
  40604. +
  40605. +(defvar vm-primary-inbox "~/INBOX"
  40606. +  "*Mail is moved from the system mailbox to this file for reading.")
  40607. +
  40608. +(defvar vm-crash-box "~/INBOX.CRASH"
  40609. +  "*File in which to store mail temporarily while it is transferrred from
  40610. +the system mailbox to the primary inbox.  If the something happens
  40611. +during this mail transfer, any missing mail will be found in this file.
  40612. +VM will do crash recovery from this file automatically at startup, as
  40613. +necessary.")
  40614. +
  40615. +(defvar vm-spool-files nil
  40616. +  "*If non-nil this variable's value should be a list of strings naming files
  40617. +that VM will check for incoming mail instead of the where VM thinks your
  40618. +system mailbox is.  This variable can be used to specify multiple spool files
  40619. +or to point VM in the right direction if its notion of your system mailbox is
  40620. +incorrect.")
  40621. +
  40622. +(defvar vm-visible-headers
  40623. +  '("From:" "Sender:" "To:" "Apparently-To:" "Cc:" "Subject:" "Date:")
  40624. +  "*List of headers that should be visible when VM first displays a message.
  40625. +These should be listed in the order you wish them presented.
  40626. +Regular expressions are allowed.")
  40627. +
  40628. +(defvar vm-highlighted-header-regexp nil
  40629. +  "*Regular expression that matches the beginnings of headers that should
  40630. +be highlighted when a message is first presented.  For exmaple setting
  40631. +this variable to \"^From\\\\|^Subject\" causes the From: and Subject:
  40632. +headers to be highlighted.")
  40633. +
  40634. +(defvar vm-preview-lines 0
  40635. +  "*Non-nil value N causes VM to display the visible headers + N lines of text
  40636. +from a message when it is first presented.  The message is not actually marked
  40637. +as read until the message is exposed in its entirety.  Nil causes VM not to
  40638. +preview a message at all; it is displayed in its entirety when first
  40639. +presented and is marked as read.")
  40640. +
  40641. +(defvar vm-preview-read-messages t
  40642. +  "*Non-nil value means to preview messages, even if they've already been read.
  40643. +A nil value causes VM to preview messages only if new or unread.")
  40644. +
  40645. +(defvar vm-folder-type nil
  40646. +  "*Value specifies the type of mail folder VM should expect to read and
  40647. +write.  Nil means expect the UNIX style folders characterized by the
  40648. +\"\\n\\nFrom \" message separators.  The only other supported value for
  40649. +this variable is the symbol `mmdf' which causes VM to use
  40650. +\"^A^A^A^A\\n\" MMDF style leaders and trailers.")
  40651. +
  40652. +(defvar vm-folder-directory nil
  40653. +  "*Directory where folders of mail are kept.")
  40654. +
  40655. +(defvar vm-confirm-new-folders nil
  40656. +  "*Non-nil value causes interactive calls to vm-save-message
  40657. +to ask for confirmation before creating a new folder.")
  40658. +
  40659. +(defvar vm-delete-empty-folders t
  40660. +  "*Non-nil value causes VM to remove empty (zero length) folder files
  40661. +after saving them.")
  40662. +
  40663. +(defvar vm-included-text-prefix " > "
  40664. +  "*String used to prefix included text in replies.")
  40665. +
  40666. +(defvar vm-auto-folder-alist nil
  40667. +  "*Non-nil value should be an alist that VM will use to choose a default
  40668. +folder name when messages are saved.  The alist should be of the form
  40669. +\((HEADER-NAME
  40670. +   (REGEXP . FOLDER-NAME) ...
  40671. +  ...))
  40672. +where HEADER-NAME and REGEXP are strings, and FOLDER-NAME is a string or an s-expression that evaluates to a string.
  40673. +
  40674. +If any part of the contents of the message header named by HEADER-NAME
  40675. +is matched by the regular expression REGEXP, VM will evaluate the
  40676. +corresponding FOLDER-NAME and use the result as the default when
  40677. +prompting for a folder to save the message in.  If trhe resulting folder
  40678. +name is a relative pathname, then it will resolve to the directory named by
  40679. +vm-folder-directory, or the default-directory of the currently visited
  40680. +folder if vm-folder-directory is nil.
  40681. +
  40682. +When FOLDER-NAME is evaluated, the current buffer will contain only the
  40683. +contents of the header named by HEADER-NAME.  It is safe to modify this
  40684. +buffer.  You can use the match data from any \\( ... \\) grouping
  40685. +constructs in REGEXP along with the function buffer-substring to build a
  40686. +folder name based on the header information.
  40687. +
  40688. +Matching is case sensitive.")
  40689. +
  40690. +(defvar vm-visit-when-saving nil
  40691. +  "*Non-nil causes VM to visit folders when saving messages.  This means
  40692. +VM will read the folder into Emacs and append the message to the buffer
  40693. +instead of appending to the folder file directly.  This behavior is
  40694. +ideal when folders are encrypted or compressed since appending plaintext
  40695. +to such files is a ghastly mistake.
  40696. +
  40697. +Note the setting of this variable does not affect how the primary inbox
  40698. +is accessed, i.e. the primary inbox must be a plaintext file.")
  40699. +
  40700. +(defvar vm-in-reply-to-format "%i"
  40701. +  "*String which specifies the format of the contents of the In-Reply-To
  40702. +header that is generated for replies.  See the documentation for the
  40703. +variable vm-summary-format for information on what this string may
  40704. +contain.  The format should *not* end with a newline.
  40705. +Nil means don't put an In-Reply-To: header in replies.")
  40706. +
  40707. +(defvar vm-included-text-attribution-format "%F writes:\n"
  40708. +  "*String which specifies the format of the attribution that precedes the
  40709. +included text from a message in a reply.  See the documentation for the
  40710. +variable vm-summary-format for information on what this string may contain.
  40711. +Nil means don't attribute included text in replies.")
  40712. +
  40713. +(defvar vm-forwarding-subject-format "forwarded message from %F"
  40714. +  "*String which specifies the format of the contents of the Subject
  40715. +header that is generated for a forwarded message.  See the documentation
  40716. +for the variable vm-summary-format for information on what this string
  40717. +may contain.  The format should *not* end with a newline.  Nil means
  40718. +leave the Subject header empty when forwarding.")
  40719. +
  40720. +(defvar vm-summary-format "%2n %a %-17.17F %3m %2d %3l/%-5c \"%s\"\n"
  40721. +  "*String which specifies the message summary line format.
  40722. +The string may contain the printf-like `%' conversion specifiers which
  40723. +substitute information about the message into the final summary line.
  40724. +
  40725. +Recognized specifiers are:
  40726. +   a - attribute indicators (always three characters wide)
  40727. +       The first char is  `D', `N', `U' or ` ' for deleted, new, unread
  40728. +       and read message respectively.
  40729. +       The second char is `F' for filed (saved) messages.
  40730. +       The third char is `R' if the message has been replied to.
  40731. +   c - number of characters in message (ignoring headers)
  40732. +   d - date of month message sent
  40733. +   f - author's address
  40734. +   F - author's full name (same as f if full name not found)
  40735. +   h - hour message sent
  40736. +   i - message ID
  40737. +   l - number of lines in message (ignoring headers)
  40738. +   m - month message sent
  40739. +   n - message number
  40740. +   s - message subject
  40741. +   w - day of the week message sent
  40742. +   y - year message sent
  40743. +   z - timezone of date when the message was sent
  40744. +
  40745. +Use %% to get a single %.
  40746. +
  40747. +A numeric field width may be specified between the `%' and the specifier;
  40748. +this causes right justification of the substituted string.  A negative field
  40749. +width causes left justification.
  40750. +
  40751. +The field width may be followed by a `.' and a number specifying the maximum
  40752. +allowed length of the substituted string.  If the string is longer than this
  40753. +value it is truncated.
  40754. +
  40755. +The summary format need not be one line per message but it must end with
  40756. +a newline, otherwise the message pointer will not be displayed correctly
  40757. +in the summary window.")
  40758. +
  40759. +(defvar vm-mail-window-percentage 75
  40760. +  "*Percentage of the screen that should be used to show mail messages.
  40761. +The rest of the screen will be used by the summary buffer, if displayed.")
  40762. +
  40763. +(defvar vm-mutable-windows t
  40764. +  "*This variable's value controls VM's window usage.
  40765. +
  40766. +A value of t gives VM free run of the Emacs display; it will commandeer
  40767. +the entire screen for its purposes.
  40768. +
  40769. +A value of nil restricts VM's window usage to the window from which
  40770. +it was invoked.  VM will not create, delete, or use any other windows,
  40771. +nor will it resize it's own window.
  40772. +
  40773. +A value that is neither t nor nil allows VM to use other windows, but it
  40774. +will not create new ones, or resize or delete the current ones.")
  40775. +
  40776. +(defvar vm-startup-with-summary nil
  40777. +  "*Value tells VM what to display when a folder is visited.
  40778. +Nil means display folder only, t means display the summary only.  A
  40779. +value that is neither t not nil means to display both folder and summary.
  40780. +The latter only works if the variable pop-up-windows's value is non-nil.
  40781. +See the documentation for vm-mail-window-percentage to see how to change how
  40782. +the screen is apportioned between the folder and summary windows.")
  40783. +
  40784. +(defvar vm-follow-summary-cursor nil
  40785. +  "*Non-nil value causes VM to select the message under the cursor in the
  40786. +summary window before executing commands that operate on the current message.
  40787. +This occurs only when the summary buffer window is the selected window.")
  40788. +
  40789. +(defvar vm-group-by nil
  40790. +  "*Non-nil value tells VM how to group message presentation.
  40791. +Currently, the valid non-nil values for this variable are
  40792. +  \"subject\", which causes messages with the same subject (ignoring
  40793. +    Re:'s) to be presented together,
  40794. +  \"author\", which causes messages with the same author to be presented
  40795. +    together, and
  40796. +  \"date-sent\", which causes message sent on the same day to be
  40797. +    presented together.
  40798. +  \"arrival-time\" which appears only for completeness, this is the
  40799. +    default behavior and is the same as nil.
  40800. +
  40801. +The ordering of the messages in the folder itself is not altered, messages
  40802. +are simply numbered and ordered differently internally.")
  40803. +
  40804. +(defvar vm-skip-deleted-messages t
  40805. +  "*Non-nil value causes VM's `n' and 'p' commands to skip over
  40806. +deleted messages.  If all messages are marked deleted then this variable
  40807. +is, of course, ignored.")
  40808. +
  40809. +(defvar vm-skip-read-messages nil
  40810. +  "*Non-nil value causes VM's `n' and `p' commands to skip over
  40811. +message that have already been read in favor of new or unread messages.
  40812. +If there are no unread message then this variable is, of course, ignored.")
  40813. +
  40814. +(defvar vm-move-after-deleting nil
  40815. +  "*Non-nil value causes VM's `d' command to automatically invoke
  40816. +vm-next-message or vm-previous-message after deleting, to move
  40817. +past the deleted messages.")
  40818. +
  40819. +(defvar vm-delete-after-saving nil
  40820. +  "*Non-nil value causes VM automatically to mark messages for deletion
  40821. +after successfully saving them to a folder.")
  40822. +
  40823. +(defvar vm-circular-folders 0
  40824. +  "*Value determines whether VM folders will be considered circular by
  40825. +various commands.  `Circular' means VM will wrap from the end of the folder
  40826. +to the start and vice versa when moving the message pointer or deleting,
  40827. +undeleting or saving messages before or after the current message.
  40828. +
  40829. +A value of t causes all VM commands to consider folders circular.
  40830. +
  40831. +A value of nil causes all of VM commands to signal an error if the start
  40832. +or end of the folder would have to be passed to complete the command.
  40833. +For movement commands, this occurs after the message pointer has been
  40834. +moved as far it can go.  For other commands the error occurs before any
  40835. +part of the command has been executed, i.e. no moves, saves, etc. will
  40836. +be done unless they can be done in their entirety.
  40837. +
  40838. +A value that is not nil and not t causes only VM's movement commands to
  40839. +consider folders circular.  Saves, deletes and undeleted command will
  40840. +behave the same as if the value is nil.")
  40841. +
  40842. +(defvar vm-search-using-regexps nil
  40843. +  "*Non-nil value causes VM's search command will interpret user input as a
  40844. +regular expression instead of as a literal string.")
  40845. +
  40846. +(defvar vm-mode-hooks nil
  40847. +  "*List of hook functions to run when a buffer enters vm-mode.
  40848. +These hook functions should generally be used to set key bindings
  40849. +and local variables.  Mucking about in the folder buffer is certainly
  40850. +possible but it is not encouraged.")
  40851. +
  40852. +(defvar vm-berkeley-mail-compatibility
  40853. +  (memq system-type '(berkeley-unix))
  40854. +  "*Non-nil means to read and write BSD Mail(1) style Status: headers.
  40855. +This makes sense if you plan to use VM to read mail archives created by
  40856. +Mail.")
  40857. +
  40858. +(defvar vm-gargle-uucp nil
  40859. +  "*Non-nil value means to use a crufty regular expression that does
  40860. +surprisingly well at beautifying UUCP addresses that are substitued for
  40861. +%f as part of summary and attribution formats.")
  40862. +
  40863. +(defvar vm-strip-reply-headers nil
  40864. +  "*Non-nil value causes VM to strip away all comments and extraneous text
  40865. +from the headers generated in reply messages.  If you use the \"fakemail\"
  40866. +program as distributed with Emacs, you probably want to set this variable to
  40867. +to t, because as of Emacs v18.52 \"fakemail\" could not handle unstripped
  40868. +headers.")
  40869. +
  40870. +(defvar vm-rfc934-forwarding t
  40871. +  "*Non-nil value causes VM to use char stuffing as described in RFC 934
  40872. +when packaging a message to be forwarded.  This will allow the recipient
  40873. +to use a standard bursting agent on the message and act upon it as if it
  40874. +were sent directly.")
  40875. +
  40876. +(defvar vm-inhibit-startup-message nil
  40877. +  "*Non-nil causes VM not to display its copyright notice, disclaimers
  40878. +etc. when started in the usual way.")
  40879. +
  40880. +(defvar mail-yank-hooks nil
  40881. +  "*List of hooks functions called after yanking a message into a *mail*
  40882. +buffer.")
  40883. +
  40884. +(defvar vm-mode-map nil
  40885. +  "Keymap for VM mode and VM Summary mode.")
  40886. +
  40887. +(defconst vm-version "4.42"
  40888. +  "Version number of VM.")
  40889. +
  40890. +;; internal vars
  40891. +(defvar vm-message-list nil)
  40892. +(make-variable-buffer-local 'vm-message-list)
  40893. +(defvar vm-message-pointer nil)
  40894. +(make-variable-buffer-local 'vm-message-pointer)
  40895. +(defvar vm-last-message-pointer nil)
  40896. +(make-variable-buffer-local 'vm-last-message-pointer)
  40897. +(defvar vm-primary-inbox-p nil)
  40898. +(make-variable-buffer-local 'vm-primary-inbox-p)
  40899. +(defvar vm-visible-header-alist nil)
  40900. +(make-variable-buffer-local 'vm-visible-header-alist)
  40901. +(defvar vm-mail-buffer nil)
  40902. +(make-variable-buffer-local 'vm-mail-buffer)
  40903. +(defvar vm-summary-buffer nil)
  40904. +(make-variable-buffer-local 'vm-summary-buffer)
  40905. +(defvar vm-system-state nil)
  40906. +(make-variable-buffer-local 'vm-system-state)
  40907. +(defvar vm-undo-record-list nil)
  40908. +(make-variable-buffer-local 'vm-undo-record-list)
  40909. +(defvar vm-undo-record-pointer nil)
  40910. +(make-variable-buffer-local 'vm-undo-record-pointer)
  40911. +(defvar vm-messages-needing-display-update nil)
  40912. +(make-variable-buffer-local 'vm-messages-needing-display-update)
  40913. +(defvar vm-current-grouping nil)
  40914. +(make-variable-buffer-local 'vm-current-grouping)
  40915. +(defvar vm-last-save-folder nil)
  40916. +(make-variable-buffer-local 'vm-last-save-folder)
  40917. +(defvar vm-last-pipe-command nil)
  40918. +(make-variable-buffer-local 'vm-last-pipe-command)
  40919. +(defvar vm-messages-not-on-disk 0)
  40920. +(make-variable-buffer-local 'vm-messages-not-on-disk)
  40921. +(defvar vm-inhibit-write-file-hook nil)
  40922. +(defvar vm-session-beginning t)
  40923. +(defconst vm-spool-directory
  40924. +  (or (and (boundp 'rmail-spool-directory) rmail-spool-directory)
  40925. +      "/usr/spool/mail"))
  40926. +(defconst vm-attributes-header-regexp
  40927. +  "^X-VM-Attributes:\\(.*\n\\([ \t]+.*\n\\)*\\)")
  40928. +(defconst vm-v5-data-header-regexp "^X-VM-v5-Data:\\(.*\n\\([ \t]+.*\n\\)*\\)")
  40929. +(defconst vm-attributes-header "X-VM-Attributes:")
  40930. +(defconst vm-berkeley-mail-status-header "Status: ")
  40931. +(defconst vm-berkeley-mail-status-header-regexp "^Status: ..?\n")
  40932. +(defconst vm-generic-header-regexp "^[^:\n]+:\\(.*\n\\([ \t]+.*\n\\)*\\)")
  40933. +(defconst vm-header-regexp-format "^%s:[ \t]*\\(.*\\(\n[ \t]+.*\\)*\\)")
  40934. +(defconst vm-supported-groupings-alist
  40935. +  '(("arrival-time") ("subject") ("author") ("date-sent")))
  40936. +(defconst vm-total-count 0)
  40937. +(defconst vm-new-count 0)
  40938. +(defconst vm-unread-count 0)
  40939. +;; for the mode line
  40940. +(defvar vm-ml-message-number nil)
  40941. +(make-variable-buffer-local 'vm-ml-message-number)
  40942. +(defvar vm-ml-highest-message-number nil)
  40943. +(make-variable-buffer-local 'vm-ml-highest-message-number)
  40944. +(defvar vm-ml-attributes-string nil)
  40945. +(make-variable-buffer-local 'vm-ml-attributes-string)
  40946. +
  40947. +;; general purpose macros and functions
  40948. +(defmacro vm-marker (pos &optional buffer)
  40949. +  (list 'set-marker '(make-marker) pos buffer))
  40950. +
  40951. +(defmacro vm-increment (variable)
  40952. +  (list 'setq variable (list '1+ variable)))
  40953. +
  40954. +(defmacro vm-decrement (variable)
  40955. +  (list 'setq variable (list '1- variable)))
  40956. +
  40957. +(defun vm-abs (n) (if (< n 0) (- n) n))
  40958. +
  40959. +;; save-restriction flubs restoring the clipping region if you
  40960. +;; (widen) and modify text outside the old region.
  40961. +;; This should do it right.
  40962. +(defmacro vm-save-restriction (&rest forms)
  40963. +  (let ((vm-sr-clip (make-symbol "vm-sr-clip"))
  40964. +    (vm-sr-min (make-symbol "vm-sr-min"))
  40965. +    (vm-sr-max (make-symbol "vm-sr-max")))
  40966. +    (list 'let (list (list vm-sr-clip '(> (buffer-size)
  40967. +                      (- (point-max) (point-min)))))
  40968. +      (list 'and vm-sr-clip
  40969. +        (list 'setq vm-sr-min '(set-marker (make-marker) (point-min)))
  40970. +        (list 'setq vm-sr-max '(set-marker (make-marker) (point-max))))
  40971. +      (list 'unwind-protect (cons 'progn forms)
  40972. +        '(widen)
  40973. +        (list 'and vm-sr-clip
  40974. +              (list 'progn
  40975. +                (list 'narrow-to-region vm-sr-min vm-sr-max)
  40976. +                (list 'set-marker vm-sr-min nil)
  40977. +                (list 'set-marker vm-sr-max nil)))))))
  40978. +
  40979. +;; macros and functions dealing with accessing messages struct fields
  40980. +(defun vm-make-message () (make-vector 20 nil))
  40981. +
  40982. +;; where message begins (From_ line)
  40983. +(defmacro vm-start-of (message) (list 'aref message 0))
  40984. +;; where visible headers start
  40985. +(defun vm-vheaders-of (message)
  40986. +  (or (aref message 1)
  40987. +      (progn (vm-reorder-message-headers message)
  40988. +         (aref message 1))))
  40989. +;; where text section starts
  40990. +(defmacro vm-text-of (message) (list 'aref message 2))
  40991. +;; where message ends
  40992. +(defmacro vm-end-of (message) (list 'aref message 3))
  40993. +;; message number
  40994. +(defmacro vm-number-of (message) (list 'aref message 4))
  40995. +;; message attribute vector
  40996. +(defmacro vm-attributes-of (message) (list 'aref message 5))
  40997. +(defmacro vm-new-flag (message) (list 'aref (list 'aref message 5) 0))
  40998. +(defmacro vm-unread-flag (message) (list 'aref (list 'aref message 5) 1))
  40999. +(defmacro vm-deleted-flag (message) (list 'aref (list 'aref message 5) 2))
  41000. +(defmacro vm-filed-flag (message) (list 'aref (list 'aref message 5) 3))
  41001. +(defmacro vm-replied-flag (message) (list 'aref (list 'aref message 5) 4))
  41002. +;; message size in bytes (as a string)
  41003. +(defmacro vm-byte-count-of (message) (list 'aref message 6))
  41004. +;; weekday sent
  41005. +(defmacro vm-weekday-of (message) (list 'aref message 7))
  41006. +;; month day
  41007. +(defmacro vm-monthday-of (message) (list 'aref message 8))
  41008. +;; month sent
  41009. +(defmacro vm-month-of (message) (list 'aref message 9))
  41010. +;; year sent
  41011. +(defmacro vm-year-of (message) (list 'aref message 10))
  41012. +;; hour sent
  41013. +(defmacro vm-hour-of (message) (list 'aref message 11))
  41014. +;; timezone
  41015. +(defmacro vm-zone-of (message) (list 'aref message 12))
  41016. +;; message author's full name (Full-Name: or gouged from From:)
  41017. +(defmacro vm-full-name-of (message) (list 'aref message 13))
  41018. +;; message author address (gouged from From:)
  41019. +(defmacro vm-from-of (message) (list 'aref message 14))
  41020. +;; message ID (Message-Id:)
  41021. +(defmacro vm-message-id-of (message) (list 'aref message 15))
  41022. +;; number of lines in message (as a string)
  41023. +(defmacro vm-line-count-of (message) (list 'aref message 16))
  41024. +;; message subject (Subject:)
  41025. +(defmacro vm-subject-of (message) (list 'aref message 17))
  41026. +(defmacro vm-su-start-of (message) (list 'aref message 18))
  41027. +(defmacro vm-su-end-of (message) (list 'aref message 19))
  41028. +
  41029. +(defmacro vm-set-start-of (message start) (list 'aset message 0 start))
  41030. +(defmacro vm-set-vheaders-of (message vh) (list 'aset message 1 vh))
  41031. +(defmacro vm-set-text-of (message text) (list 'aset message 2 text))
  41032. +(defmacro vm-set-end-of (message end) (list 'aset message 3 end))
  41033. +(defmacro vm-set-number-of (message n) (list 'aset message 4 n))
  41034. +(defmacro vm-set-attributes-of (message attrs) (list 'aset message 5 attrs))
  41035. +(defmacro vm-set-byte-count-of (message count) (list 'aset message 6 count))
  41036. +(defmacro vm-set-weekday-of (message val) (list 'aset message 7 val))
  41037. +(defmacro vm-set-monthday-of (message val) (list 'aset message 8 val))
  41038. +(defmacro vm-set-month-of (message val) (list 'aset message 9 val))
  41039. +(defmacro vm-set-year-of (message val) (list 'aset message 10 val))
  41040. +(defmacro vm-set-hour-of (message val) (list 'aset message 11 val))
  41041. +(defmacro vm-set-zone-of (message val) (list 'aset message 12 val))
  41042. +(defmacro vm-set-full-name-of (message author) (list 'aset message 13 author))
  41043. +(defmacro vm-set-from-of (message author) (list 'aset message 14 author))
  41044. +(defmacro vm-set-message-id-of (message id) (list 'aset message 15 id))
  41045. +(defmacro vm-set-line-count-of (message count) (list 'aset message 16 count))
  41046. +(defmacro vm-set-subject-of (message subject) (list 'aset message 17 subject))
  41047. +(defmacro vm-set-su-start-of (message start) (list 'aset message 18 start))
  41048. +(defmacro vm-set-su-end-of (message end) (list 'aset message 19 end))
  41049. +
  41050. +(defun vm-text-end-of (message)
  41051. +  (- (vm-end-of message)
  41052. +     (cond ((eq vm-folder-type 'mmdf) 5)
  41053. +       (t 1))))
  41054. +
  41055. +;; The remaining routines in this group are part of the undo system.
  41056. +
  41057. +;; init
  41058. +(if vm-mode-map
  41059. +    ()
  41060. +  (setq vm-mode-map (make-keymap))
  41061. +  (suppress-keymap vm-mode-map)
  41062. +  (define-key vm-mode-map "h" 'vm-summarize)
  41063. +  (define-key vm-mode-map "\M-n" 'vm-next-unread-message)
  41064. +  (define-key vm-mode-map "\M-p" 'vm-previous-unread-message)
  41065. +  (define-key vm-mode-map "n" 'vm-next-message)
  41066. +  (define-key vm-mode-map "p" 'vm-previous-message)
  41067. +  (define-key vm-mode-map "N" 'vm-Next-message)
  41068. +  (define-key vm-mode-map "P" 'vm-Previous-message)
  41069. +  (define-key vm-mode-map "\t" 'vm-goto-message-last-seen)
  41070. +  (define-key vm-mode-map "\r" 'vm-goto-message)
  41071. +  (define-key vm-mode-map "t" 'vm-expose-hidden-headers)
  41072. +  (define-key vm-mode-map " " 'vm-scroll-forward)
  41073. +  (define-key vm-mode-map "b" 'vm-scroll-backward)
  41074. +  (define-key vm-mode-map "\C-?" 'vm-scroll-backward)
  41075. +  (define-key vm-mode-map "d" 'vm-delete-message)
  41076. +  (define-key vm-mode-map "u" 'vm-undelete-message)
  41077. +  (define-key vm-mode-map "k" 'vm-kill-subject)
  41078. +  (define-key vm-mode-map "f" 'vm-followup)
  41079. +  (define-key vm-mode-map "F" 'vm-followup-include-text)
  41080. +  (define-key vm-mode-map "r" 'vm-reply)
  41081. +  (define-key vm-mode-map "R" 'vm-reply-include-text)
  41082. +  (define-key vm-mode-map "z" 'vm-forward-message)
  41083. +  (define-key vm-mode-map "@" 'vm-send-digest)
  41084. +  (define-key vm-mode-map "*" 'vm-burst-digest)
  41085. +  (define-key vm-mode-map "m" 'vm-mail)
  41086. +  (define-key vm-mode-map "g" 'vm-get-new-mail)
  41087. +  (define-key vm-mode-map "G" 'vm-group-messages)
  41088. +  (define-key vm-mode-map "v" 'vm-visit-folder)
  41089. +  (define-key vm-mode-map "s" 'vm-save-message)
  41090. +  (define-key vm-mode-map "w" 'vm-save-message-sans-headers)
  41091. +  (define-key vm-mode-map "A" 'vm-auto-archive-messages)
  41092. +  (define-key vm-mode-map "S" 'vm-save-folder)
  41093. +  (define-key vm-mode-map "|" 'vm-pipe-message-to-command)
  41094. +  (define-key vm-mode-map "#" 'vm-expunge-folder)
  41095. +  (define-key vm-mode-map "q" 'vm-quit)
  41096. +  (define-key vm-mode-map "x" 'vm-quit-no-change)
  41097. +  (define-key vm-mode-map "?" 'vm-help)
  41098. +  (define-key vm-mode-map "\C-_" 'vm-undo)
  41099. +  (define-key vm-mode-map "\C-xu" 'vm-undo)
  41100. +  (define-key vm-mode-map "!" 'shell-command)
  41101. +  (define-key vm-mode-map "<" 'beginning-of-buffer)
  41102. +  (define-key vm-mode-map ">" 'vm-end-of-message)
  41103. +  (define-key vm-mode-map "\M-s" 'vm-isearch-forward)
  41104. +  (define-key vm-mode-map "=" 'vm-summarize)
  41105. +  (define-key vm-mode-map "\M-C" 'vm-show-copying-restrictions)
  41106. +  (define-key vm-mode-map "\M-W" 'vm-show-no-warranty)
  41107. +  (define-key vm-mode-map "\C-y" 'undefined))
  41108. +
  41109. +(defun vm-mark-for-display-update (message)
  41110. +  (if (not (memq message vm-messages-needing-display-update))
  41111. +      (setq vm-messages-needing-display-update
  41112. +        (cons message vm-messages-needing-display-update))))
  41113. +
  41114. +(defun vm-last (list) (while (cdr-safe list) (setq list (cdr list))) list)
  41115. +
  41116. +(put 'folder-empty 'error-conditions '(folder-empty error))
  41117. +(put 'folder-empty 'error-message "Folder is empty")
  41118. +
  41119. +(defun vm-error-if-folder-empty ()
  41120. +  (while (null vm-message-list)
  41121. +    (signal 'folder-empty nil)))
  41122. +
  41123. +(defun vm-proportion-windows ()
  41124. +  (if vm-mail-buffer
  41125. +      (set-buffer vm-mail-buffer))
  41126. +  (if (not (one-window-p t))
  41127. +      (let ((mail-w (get-buffer-window (current-buffer)))
  41128. +        (n (- (window-height (get-buffer-window (current-buffer)))
  41129. +          (/ (* vm-mail-window-percentage
  41130. +            (- (screen-height)
  41131. +               (window-height (minibuffer-window))))
  41132. +             100)))
  41133. +        (old-w (selected-window)))
  41134. +    (if mail-w
  41135. +        (save-excursion
  41136. +          (select-window mail-w)
  41137. +          (shrink-window n)
  41138. +          (select-window old-w))))))
  41139. +
  41140. +(defun vm-number-messages ()
  41141. +  (let ((n 1) (message-list vm-message-list))
  41142. +    (while message-list
  41143. +      (vm-set-number-of (car message-list) (int-to-string n))
  41144. +      (setq n (1+ n) message-list (cdr message-list)))
  41145. +    (setq vm-ml-highest-message-number (int-to-string (1- n)))))
  41146. +
  41147. +(defun vm-match-visible-header (alist)
  41148. +  (catch 'match
  41149. +    (while alist
  41150. +      (if (looking-at (car (car alist)))
  41151. +      (throw 'match (car alist)))
  41152. +      (setq alist (cdr alist)))
  41153. +    nil))
  41154. +
  41155. +(defun vm-delete-header ()
  41156. +  (if (looking-at vm-generic-header-regexp)
  41157. +      (delete-region (match-beginning 0) (match-end 0))))
  41158. +
  41159. +;; Build a chain of message structures.
  41160. +;; Find the start and end of each message and fill end the relevant
  41161. +;; fields in the message structures.
  41162. +
  41163. +(defun vm-build-message-list ()
  41164. +  (save-excursion
  41165. +    (vm-build-visible-header-alist)
  41166. +    (let (tail-cons message prev-message case-fold-search marker
  41167. +      start-regexp sep-pattern trailer-length)
  41168. +      (if (eq vm-folder-type 'mmdf)
  41169. +      (setq start-regexp "^\001\001\001\001\n"
  41170. +        separator-string "\n\001\001\001\001\n\001\001\001\001"
  41171. +        trailer-length 6)
  41172. +    (setq start-regexp "^From "
  41173. +          separator-string "\n\nFrom "
  41174. +          trailer-length 2))
  41175. +      (if vm-message-list
  41176. +      (let ((mp vm-message-list)
  41177. +        (end (point-min)))
  41178. +        (while mp
  41179. +          (if (< end (vm-end-of (car mp)))
  41180. +          (setq end (vm-end-of (car mp))))
  41181. +          (setq mp (cdr mp)))
  41182. +        ;; move back past trailer so separator-string will match below
  41183. +        (goto-char (- end trailer-length))
  41184. +        (setq tail-cons (vm-last vm-message-list)))
  41185. +    (goto-char (point-min))
  41186. +    (if (looking-at start-regexp)
  41187. +        (progn
  41188. +          (setq message (vm-make-message) prev-message message)
  41189. +          (vm-set-start-of message (vm-marker (match-beginning 0)))
  41190. +          (setq vm-message-list (list message)
  41191. +            tail-cons vm-message-list))))
  41192. +      (while (search-forward separator-string nil t)
  41193. +    (setq marker (vm-marker (+ trailer-length (match-beginning 0)))
  41194. +          message (vm-make-message))
  41195. +    (vm-set-start-of message marker)
  41196. +    (if prev-message
  41197. +        (vm-set-end-of prev-message marker))
  41198. +    (if tail-cons
  41199. +        (progn
  41200. +          (setcdr tail-cons (list message))
  41201. +          (setq tail-cons (cdr tail-cons)
  41202. +            prev-message message))
  41203. +      (setq vm-message-list (list message)
  41204. +        tail-cons vm-message-list
  41205. +        prev-message message)))
  41206. +      (if prev-message
  41207. +      (vm-set-end-of prev-message (vm-marker (point-max)))))))
  41208. +
  41209. +(defun vm-build-visible-header-alist ()
  41210. +  (let ((header-alist (cons nil nil))
  41211. +    (vheaders vm-visible-headers)
  41212. +    list)
  41213. +    (setq list header-alist)
  41214. +    (while vheaders
  41215. +      (setcdr list (cons (cons (car vheaders) nil) nil))
  41216. +      (setq list (cdr list) vheaders (cdr vheaders)))
  41217. +    (setq vm-visible-header-alist (cdr header-alist))))
  41218. +
  41219. +;; Group the headers that the user wants to see at the end of the headers
  41220. +;; section so we can narrow to them.  The vheaders field of the
  41221. +;; message struct is set.  This function is called on demand whenever
  41222. +;; a vheaders field is discovered to be nil for a particular message.
  41223. +
  41224. +(defun vm-reorder-message-headers (message)
  41225. +  (save-excursion
  41226. +    (vm-save-restriction
  41227. +     (let ((header-alist vm-visible-header-alist)
  41228. +       list buffer-read-only match-end-0
  41229. +       (inhibit-quit t)
  41230. +       (old-buffer-modified-p (buffer-modified-p)))
  41231. +       (goto-char (vm-start-of message))
  41232. +       (forward-line)
  41233. +       (while (and (not (= (following-char) ?\n))
  41234. +           (looking-at vm-generic-header-regexp))
  41235. +     (setq match-end-0 (match-end 0)
  41236. +           list (vm-match-visible-header header-alist))
  41237. +     (if (null list)
  41238. +         (goto-char match-end-0)
  41239. +       (if (cdr list)
  41240. +           (setcdr list 
  41241. +               (concat
  41242. +            (cdr list)
  41243. +            (buffer-substring (point) match-end-0)))
  41244. +         (setcdr list (buffer-substring (point) match-end-0)))
  41245. +       (delete-region (point) match-end-0)))
  41246. +       (vm-set-vheaders-of message (point-marker))
  41247. +       (setq list header-alist)
  41248. +       (while list
  41249. +     (if (cdr (car list))
  41250. +         (progn
  41251. +           (insert (cdr (car list)))
  41252. +           (setcdr (car list) nil)))
  41253. +     (setq list (cdr list)))
  41254. +       (set-buffer-modified-p old-buffer-modified-p)))))
  41255. +
  41256. +;; Read the attribute headers from the messages and store their contents
  41257. +;; in attributes fields of the message structures.  If a message has no
  41258. +;; attributes header assume it is new.  If a message already has
  41259. +;; attributes don't bother checking the headers.
  41260. +;;
  41261. +;; Stores the position where the message text begins in the message struct.
  41262. +
  41263. +(defun vm-read-attributes ()
  41264. +  (save-excursion
  41265. +    (let ((mp vm-message-list))
  41266. +      (setq vm-new-count 0
  41267. +        vm-unread-count 0
  41268. +        vm-total-count 0)
  41269. +      (while mp
  41270. +    (vm-increment vm-total-count)
  41271. +    (if (vm-attributes-of (car mp))
  41272. +        ()
  41273. +      (goto-char (vm-start-of (car mp)))
  41274. +      (search-forward "\n\n" (vm-text-end-of (car mp)) 0)
  41275. +      (vm-set-text-of (car mp) (point-marker))
  41276. +      (goto-char (vm-start-of (car mp)))
  41277. +      (cond ((re-search-forward vm-attributes-header-regexp
  41278. +                    (vm-text-of (car mp)) t)
  41279. +         (goto-char (match-beginning 1))
  41280. +         (vm-set-attributes-of (car mp)
  41281. +                       (condition-case ()
  41282. +                       (read (current-buffer))
  41283. +                     (error (vector t nil nil nil nil))))
  41284. +         ;; If attributes are unrecogniable just assume the
  41285. +         ;; message is new.
  41286. +         (cond ((or (not (vectorp (vm-attributes-of (car mp))))
  41287. +                (not (= (length (vm-attributes-of (car mp)))
  41288. +                    5)))
  41289. +            (vm-set-attributes-of (car mp)
  41290. +                          (vector t nil nil nil nil)))))
  41291. +        ;; recognize version 5 header in case the user wants to
  41292. +        ;; switch back to version 5.
  41293. +        ((re-search-forward vm-v5-data-header-regexp
  41294. +                    (vm-text-of (car mp)) t)
  41295. +         (goto-char (match-beginning 1))
  41296. +         (vm-set-attributes-of (car mp)
  41297. +                       (condition-case ()
  41298. +                       (car (read (current-buffer)))
  41299. +                     (error (vector t nil nil nil nil))))
  41300. +         (let ((i 0) (v (vector nil nil nil nil nil)))
  41301. +           (while (< i 5)
  41302. +             (aset v i (aref (vm-attributes-of (car mp)) i))
  41303. +             (vm-increment i))
  41304. +           (vm-set-attributes-of (car mp) v)))
  41305. +        ((and vm-berkeley-mail-compatibility
  41306. +              (re-search-forward vm-berkeley-mail-status-header-regexp
  41307. +                     (vm-text-of (car mp)) t))
  41308. +         (vm-set-attributes-of (car mp) (vector nil (looking-at "R")
  41309. +                            nil nil nil)))
  41310. +        (t
  41311. +         (vm-set-attributes-of (car mp) (vector t nil nil nil nil)))))
  41312. +    (cond ((vm-deleted-flag (car mp))) ; don't count deleted messages
  41313. +          ((vm-new-flag (car mp))
  41314. +           (vm-increment vm-new-count))
  41315. +          ((vm-unread-flag (car mp))
  41316. +           (vm-increment vm-unread-count)))
  41317. +    (setq mp (cdr mp))))))
  41318. +
  41319. +;; Stuff the messages attributes back into the messages as headers.
  41320. +(defun vm-stuff-attributes ()
  41321. +  (save-excursion
  41322. +    (vm-save-restriction
  41323. +     (widen)
  41324. +     (let ((mp vm-message-list) attributes buffer-read-only
  41325. +       (old-buffer-modified-p (buffer-modified-p)))
  41326. +       (while mp
  41327. +     (setq attributes (vm-attributes-of (car mp)))
  41328. +     (goto-char (vm-start-of (car mp)))
  41329. +     (if (re-search-forward vm-attributes-header-regexp
  41330. +                (vm-text-of (car mp)) t)
  41331. +         (delete-region (match-beginning 0) (match-end 0)))
  41332. +     (goto-char (vm-start-of (car mp)))
  41333. +     (if (re-search-forward vm-v5-data-header-regexp
  41334. +                (vm-text-of (car mp)) t)
  41335. +         (delete-region (match-beginning 0) (match-end 0)))
  41336. +     (cond (vm-berkeley-mail-compatibility
  41337. +        (goto-char (vm-start-of (car mp)))
  41338. +        (if (re-search-forward vm-berkeley-mail-status-header-regexp
  41339. +                       (vm-text-of (car mp)) t)
  41340. +            (delete-region (match-beginning 0) (match-end 0)))
  41341. +        (cond ((not (vm-new-flag (car mp)))
  41342. +               (goto-char (vm-start-of (car mp)))
  41343. +               (forward-line)
  41344. +               (insert-before-markers
  41345. +            vm-berkeley-mail-status-header
  41346. +            (if (vm-unread-flag (car mp)) "" "R")
  41347. +            "O\n")))))
  41348. +     (goto-char (vm-start-of (car mp)))
  41349. +     (forward-line)
  41350. +     (insert-before-markers vm-attributes-header " "
  41351. +                (prin1-to-string attributes) "\n")
  41352. +     (setq mp (cdr mp)))
  41353. +       (set-buffer-modified-p old-buffer-modified-p)))))
  41354. +      
  41355. +;; Remove any message marked for deletion from the buffer and the
  41356. +;; message list.
  41357. +(defun vm-gobble-deleted-messages ()
  41358. +  (save-excursion
  41359. +    (vm-save-restriction
  41360. +     (widen)
  41361. +     (let ((mp vm-message-list) prev buffer-read-only did-gobble)
  41362. +       (while mp
  41363. +     (if (not (vm-deleted-flag (car mp)))
  41364. +         (setq prev mp)
  41365. +       (setq did-gobble t)
  41366. +       (delete-region (vm-start-of (car mp))
  41367. +              (vm-end-of (car mp)))
  41368. +       (if (null prev)
  41369. +           (setq vm-message-list (cdr vm-message-list))
  41370. +         (setcdr prev (cdr mp))))
  41371. +     (setq mp (cdr mp)))
  41372. +       (if did-gobble
  41373. +       (progn
  41374. +         (vm-clear-expunge-invalidated-undos)
  41375. +         (if (null vm-message-list)
  41376. +         (setq overlay-arrow-position nil))
  41377. +         (cond ((and vm-last-message-pointer
  41378. +             (vm-deleted-flag (car vm-last-message-pointer)))
  41379. +            (setq vm-last-message-pointer nil)))
  41380. +         (cond ((and vm-message-pointer
  41381. +             (vm-deleted-flag (car vm-message-pointer)))
  41382. +            (setq vm-system-state nil)
  41383. +            (setq mp (cdr vm-message-pointer))
  41384. +            (while (and mp (vm-deleted-flag (car mp)))
  41385. +              (setq mp (cdr mp)))
  41386. +            (setq vm-message-pointer
  41387. +              (or mp (vm-last vm-message-list)))))
  41388. +         did-gobble ))))))
  41389. +
  41390. +(defun vm-change-all-new-to-unread ()
  41391. +  (let ((mp vm-message-list))
  41392. +    (while mp
  41393. +      (if (vm-new-flag (car mp))
  41394. +      (progn
  41395. +        (vm-set-new-flag (car mp) nil)
  41396. +        (vm-set-unread-flag (car mp) t)))
  41397. +      (setq mp (cdr mp)))))
  41398. +
  41399. +(defun vm-update-summary-and-mode-line ()
  41400. +  (setq vm-ml-message-number (vm-number-of (car vm-message-pointer)))
  41401. +  (cond ((vm-new-flag (car vm-message-pointer))
  41402. +     (setq vm-ml-attributes-string "new"))
  41403. +    ((vm-unread-flag (car vm-message-pointer))
  41404. +     (setq vm-ml-attributes-string "unread"))
  41405. +    (t (setq vm-ml-attributes-string "read")))
  41406. +  (cond ((vm-filed-flag (car vm-message-pointer))
  41407. +     (setq vm-ml-attributes-string
  41408. +           (concat vm-ml-attributes-string " filed"))))
  41409. +  (cond ((vm-replied-flag (car vm-message-pointer))
  41410. +     (setq vm-ml-attributes-string
  41411. +           (concat vm-ml-attributes-string " replied"))))
  41412. +  (cond ((vm-deleted-flag (car vm-message-pointer))
  41413. +     (setq vm-ml-attributes-string
  41414. +           (concat vm-ml-attributes-string " deleted"))))
  41415. +  (while vm-messages-needing-display-update
  41416. +    (vm-update-message-summary vm-messages-needing-display-update)
  41417. +    (setq vm-messages-needing-display-update
  41418. +      (cdr vm-messages-needing-display-update)))
  41419. +  (save-excursion
  41420. +    (set-buffer (other-buffer))
  41421. +    (set-buffer-modified-p (buffer-modified-p))))
  41422. +
  41423. +(defun vm-goto-message (n)
  41424. +  "Go to the message numbered N.
  41425. +Interactively N is the prefix argument.  If no prefix arg is provided
  41426. +N is prompted for in the minibuffer."
  41427. +  (interactive "NGo to message: ")
  41428. +  (if vm-mail-buffer
  41429. +      (set-buffer vm-mail-buffer))
  41430. +  (vm-error-if-folder-empty)
  41431. +  (let ((cons (nthcdr (1- n) vm-message-list)))
  41432. +    (if (null cons)
  41433. +    (error "No such message."))
  41434. +    (if (eq vm-message-pointer cons)
  41435. +    (vm-preview-current-message)
  41436. +      (setq vm-last-message-pointer vm-message-pointer
  41437. +        vm-message-pointer cons)
  41438. +      (vm-set-summary-pointer (car vm-message-pointer))
  41439. +      (vm-preview-current-message))))
  41440. +
  41441. +(defun vm-goto-message-last-seen ()
  41442. +  "Go to the message last previewed."
  41443. +  (interactive)
  41444. +  (if vm-mail-buffer
  41445. +      (set-buffer vm-mail-buffer))
  41446. +  (vm-error-if-folder-empty)
  41447. +  (if vm-last-message-pointer
  41448. +      (let (tmp)
  41449. +    (setq tmp vm-message-pointer
  41450. +          vm-message-pointer vm-last-message-pointer
  41451. +          vm-last-message-pointer tmp)
  41452. +    (vm-set-summary-pointer (car vm-message-pointer))
  41453. +    (vm-preview-current-message))))
  41454. +
  41455. +(put 'beginning-of-folder 'error-conditions '(beginning-of-folder error))
  41456. +(put 'beginning-of-folder 'error-message "Beginning of folder")
  41457. +(put 'end-of-folder 'error-conditions '(end-of-folder error))
  41458. +(put 'end-of-folder 'error-message "End of folder")
  41459. +
  41460. +(defun vm-check-count (count)
  41461. +  (if (>= count 0)
  41462. +      (if (< (length vm-message-pointer) count)
  41463. +      (signal 'end-of-folder nil))
  41464. +    (if (< (1+ (- (length vm-message-list) (length vm-message-pointer)))
  41465. +       (vm-abs count))
  41466. +    (signal 'beginning-of-folder nil))))
  41467. +
  41468. +(defun vm-move-message-pointer (direction)
  41469. +  (let ((mp vm-message-pointer))
  41470. +    (if (eq direction 'forward)
  41471. +    (progn
  41472. +      (setq mp (cdr mp))
  41473. +      (if (null mp)
  41474. +          (if vm-circular-folders
  41475. +          (setq mp vm-message-list)
  41476. +        (signal 'end-of-folder nil))))
  41477. +      (if (eq mp vm-message-list)
  41478. +      (if vm-circular-folders
  41479. +          (setq mp (vm-last vm-message-list))
  41480. +        (signal 'beginning-of-folder nil))
  41481. +    (setq mp (let ((curr vm-message-list))
  41482. +           (while (not (eq (cdr curr) mp))
  41483. +             (setq curr (cdr curr)))
  41484. +           curr))))
  41485. +    (setq vm-message-pointer mp)))
  41486. +
  41487. +(defun vm-should-skip-message (mp)
  41488. +  (or (and vm-skip-deleted-messages
  41489. +       (vm-deleted-flag (car mp)))
  41490. +      (and vm-skip-read-messages
  41491. +       (or (vm-deleted-flag (car mp))
  41492. +           (not (or (vm-new-flag (car mp))
  41493. +            (vm-unread-flag (car mp))))))))
  41494. +
  41495. +(defun vm-next-message (&optional count retry)
  41496. +  "Go forward one message and preview it.
  41497. +With prefix arg COUNT, go forward COUNT messages.  A negative COUNT
  41498. +means go backward.  If the absolute value of COUNT > 1 the values of the
  41499. +variables vm-skip-deleted-messages and vm-skip-read-messages are
  41500. +ignored."
  41501. +  (interactive "p\np")
  41502. +  (if vm-mail-buffer
  41503. +      (set-buffer vm-mail-buffer))
  41504. +  (vm-error-if-folder-empty)
  41505. +  (or count (setq count 1))
  41506. +  (let ((oldmp vm-message-pointer)
  41507. +    (error)
  41508. +    (direction (if (> count 0) 'forward 'backward))
  41509. +    (count (vm-abs count)))
  41510. +    (cond
  41511. +     ((null vm-message-pointer)
  41512. +      (setq vm-message-pointer vm-message-list))
  41513. +     ((/= count 1)
  41514. +      (condition-case ()
  41515. +      (while (not (zerop count))
  41516. +        (vm-move-message-pointer direction)
  41517. +        (vm-decrement count))
  41518. +    (beginning-of-folder (setq error 'beginning-of-folder))
  41519. +    (end-of-folder (setq error 'end-of-folder))))
  41520. +     (t
  41521. +      (condition-case ()
  41522. +      (progn
  41523. +        (vm-move-message-pointer direction)
  41524. +        (while (and (not (eq oldmp vm-message-pointer))
  41525. +            (vm-should-skip-message vm-message-pointer))
  41526. +          (vm-move-message-pointer direction))
  41527. +        ;; Retry the move if we've gone a complete circle and we should
  41528. +        ;; skip the current message and there are other messages.
  41529. +        (and (eq vm-message-pointer oldmp) retry (cdr vm-message-list)
  41530. +         (vm-should-skip-message vm-message-pointer)
  41531. +         (vm-move-message-pointer direction)))
  41532. +    (beginning-of-folder
  41533. +     (setq vm-message-pointer oldmp)
  41534. +     (if retry
  41535. +         (vm-move-message-pointer direction)
  41536. +       (setq error 'beginning-of-folder)))
  41537. +    (end-of-folder
  41538. +     (setq vm-message-pointer oldmp)
  41539. +     (if retry
  41540. +         (vm-move-message-pointer direction)
  41541. +       (setq error 'end-of-folder))))))
  41542. +    (if (not (eq vm-message-pointer oldmp))
  41543. +    (progn
  41544. +      (setq vm-last-message-pointer oldmp)
  41545. +      (vm-set-summary-pointer (car vm-message-pointer))
  41546. +      (vm-preview-current-message)))
  41547. +    (if error
  41548. +    (signal error nil))))
  41549. +
  41550. +(defun vm-previous-message (&optional count retry)
  41551. +  "Go back one message and preview it.
  41552. +With prefix arg COUNT, go backward COUNT messages.  A negative COUNT
  41553. +means go forward.  If the absolute value of COUNT > 1 the values of the
  41554. +variables vm-skip-deleted-messages and vm-skip-read-messages are
  41555. +ignored."
  41556. +  (interactive "p\np")
  41557. +  (or count (setq count 1))
  41558. +  (vm-next-message (- count) retry))
  41559. +
  41560. +(defun vm-Next-message (&optional count)
  41561. +  "Like vm-next-message but will not skip messages."
  41562. +  (interactive "p")
  41563. +  (let (vm-skip-deleted-messages vm-skip-read-messages)
  41564. +    (vm-next-message count)))
  41565. +
  41566. +(defun vm-Previous-message (&optional count)
  41567. +  "Like vm-previous-message but will not skip messages."
  41568. +  (interactive "p")
  41569. +  (let (vm-skip-deleted-messages vm-skip-read-messages)
  41570. +    (vm-previous-message count)))
  41571. +
  41572. +(defun vm-next-unread-message ()
  41573. +  "Move forward to the nearest new or unread message, if there is one."
  41574. +  (interactive)
  41575. +  (if vm-mail-buffer
  41576. +      (set-buffer vm-mail-buffer))
  41577. +  (condition-case ()
  41578. +      (let ((vm-skip-read-messages t)
  41579. +        (oldmp vm-message-pointer))
  41580. +    (vm-next-message)
  41581. +    ;; in case vm-circular-folder is non-nil
  41582. +    (and (eq vm-message-pointer oldmp) (signal 'end-of-folder nil)))
  41583. +    (end-of-folder (error "No next unread message"))))
  41584. +
  41585. +(defun vm-previous-unread-message ()
  41586. +  "Move backward to the nearest new or unread message, if there is one."
  41587. +  (interactive)
  41588. +  (if vm-mail-buffer
  41589. +      (set-buffer vm-mail-buffer))
  41590. +  (condition-case ()
  41591. +      (let ((vm-skip-read-messages t)
  41592. +        (oldmp vm-message-pointer))
  41593. +    (vm-previous-message)
  41594. +    ;; in case vm-circular-folder is non-nil
  41595. +    (and (eq vm-message-pointer oldmp) (signal 'beginning-of-folder nil)))
  41596. +    (beginning-of-folder (error "No previous unread message"))))
  41597. +
  41598. +(defun vm-preview-current-message ()
  41599. +  (setq vm-system-state 'previewing)
  41600. +  (widen)
  41601. +  (narrow-to-region
  41602. +   (vm-vheaders-of (car vm-message-pointer))
  41603. +   (if vm-preview-lines
  41604. +       (min
  41605. +    (vm-text-end-of (car vm-message-pointer))
  41606. +    (save-excursion
  41607. +      (goto-char (vm-text-of (car vm-message-pointer)))
  41608. +      (forward-line (if (natnump vm-preview-lines) vm-preview-lines 0))
  41609. +      (point)))
  41610. +     (vm-text-of (car vm-message-pointer))))
  41611. +  (let ((w (get-buffer-window (current-buffer))))
  41612. +    (and w (progn (set-window-start w (point-min))
  41613. +          (set-window-point w (point-max))))
  41614. +    (and w vm-highlighted-header-regexp
  41615. +     (progn
  41616. +       (save-restriction
  41617. +         (narrow-to-region (point) (point))
  41618. +         (sit-for 0))
  41619. +       (goto-char (point-min))
  41620. +       (while (re-search-forward vm-highlighted-header-regexp nil t)
  41621. +         (save-restriction
  41622. +           (goto-char (match-beginning 0))
  41623. +           (looking-at vm-generic-header-regexp)
  41624. +           (goto-char (match-beginning 1))
  41625. +           (narrow-to-region (point-min) (point))
  41626. +           (sit-for 0)
  41627. +           (setq inverse-video t)
  41628. +           (widen)
  41629. +           (narrow-to-region (point-min) (match-end 1))
  41630. +           (sit-for 0)
  41631. +           (setq inverse-video nil)
  41632. +           (goto-char (match-end 0)))))))
  41633. +  (goto-char (point-max))
  41634. +  ;; De Morgan's Theorems could clear away most of the following negations,
  41635. +  ;; but the resulting code would be horribly obfuscated.
  41636. +  (if (or (null vm-preview-lines)
  41637. +      (and (not vm-preview-read-messages)
  41638. +           (not (vm-new-flag (car vm-message-pointer)))
  41639. +           (not (vm-unread-flag (car vm-message-pointer)))))
  41640. +      ;; Don't sit and howl unless the mail buffer is visible.
  41641. +      (vm-show-current-message (get-buffer-window (current-buffer)))
  41642. +    (vm-update-summary-and-mode-line)))
  41643. +
  41644. +(defun vm-show-current-message (&optional sit-and-howl)
  41645. +  (setq vm-system-state 'reading)
  41646. +  (save-excursion
  41647. +    (goto-char (point-min))
  41648. +    (widen)
  41649. +    (narrow-to-region (point) (vm-text-end-of (car vm-message-pointer))))
  41650. +  (cond ((vm-new-flag (car vm-message-pointer))
  41651. +     (vm-set-new-flag (car vm-message-pointer) nil))
  41652. +    ((vm-unread-flag (car vm-message-pointer))
  41653. +     (vm-set-unread-flag (car vm-message-pointer) nil)))
  41654. +  (vm-update-summary-and-mode-line)
  41655. +  (cond (sit-and-howl
  41656. +     (sit-for 0)
  41657. +     (vm-howl-if-eom-visible))))
  41658. +
  41659. +(defun vm-expose-hidden-headers ()
  41660. +  "Expose headers omitted from vm-visible-headers."
  41661. +  (interactive)
  41662. +  (vm-follow-summary-cursor)
  41663. +  (if vm-mail-buffer
  41664. +      (set-buffer vm-mail-buffer))
  41665. +  (vm-error-if-folder-empty)
  41666. +  (save-excursion
  41667. +    (goto-char (point-max))
  41668. +    (widen)
  41669. +    (narrow-to-region (point) (vm-start-of (car vm-message-pointer)))
  41670. +    (let (w)
  41671. +      (and (setq w (get-buffer-window (current-buffer)))
  41672. +       (= (window-start w) (vm-vheaders-of (car vm-message-pointer)))
  41673. +       (set-window-start w (vm-start-of (car vm-message-pointer)))))))
  41674. +
  41675. +(defun vm-howl-if-eom-visible ()
  41676. +  (let ((w (get-buffer-window (current-buffer))))
  41677. +    (and w (pos-visible-in-window-p (point-max) w)
  41678. +     (message "End of message %s from %s"
  41679. +          (vm-number-of (car vm-message-pointer))
  41680. +          (vm-su-full-name (car vm-message-pointer))))))
  41681. +
  41682. +;; message-changed is an old-fashoined local variable.
  41683. +(defun vm-scroll-forward (&optional arg message-changed)
  41684. +  "Scroll forward a screenful of text.
  41685. +If the current message is being previewed, the message body is revealed.
  41686. +If at the end of the current message, move to the next message."
  41687. +  (interactive "P")
  41688. +  (setq message-changed (vm-follow-summary-cursor))
  41689. +  (if vm-mail-buffer
  41690. +      (set-buffer vm-mail-buffer))
  41691. +  (vm-error-if-folder-empty)
  41692. +  (if (null (get-buffer-window (current-buffer)))
  41693. +      (progn
  41694. +    (if vm-mutable-windows
  41695. +        (let ((pop-up-windows
  41696. +           (and pop-up-windows (eq vm-mutable-windows t))))
  41697. +          (display-buffer (current-buffer)))
  41698. +      (switch-to-buffer (current-buffer)))
  41699. +    (if (and vm-summary-buffer (get-buffer-window vm-summary-buffer)
  41700. +         (eq vm-mutable-windows t))
  41701. +        (vm-proportion-windows))
  41702. +    (if (eq vm-system-state 'previewing)
  41703. +        (vm-show-current-message t)
  41704. +      (vm-howl-if-eom-visible)))
  41705. +    (if (eq vm-system-state 'previewing)
  41706. +    (vm-show-current-message t)
  41707. +      (if message-changed
  41708. +      (vm-howl-if-eom-visible)
  41709. +    (let ((w (get-buffer-window (current-buffer)))
  41710. +          (old-w (selected-window)))
  41711. +      (unwind-protect
  41712. +          (progn
  41713. +        (select-window w)
  41714. +        (if (not (eq (condition-case () (scroll-up arg)
  41715. +                   (end-of-buffer (if (null arg)
  41716. +                          (progn
  41717. +                            (vm-next-message)
  41718. +                            'next-message))))
  41719. +                 'next-message))
  41720. +            (vm-howl-if-eom-visible)))
  41721. +        (select-window old-w)))))))
  41722. +
  41723. +(defun vm-scroll-backward (&optional arg)
  41724. +  "Scroll backward a screenful of text."
  41725. +  (interactive "P")
  41726. +  (vm-follow-summary-cursor)
  41727. +  (if vm-mail-buffer
  41728. +      (set-buffer vm-mail-buffer))
  41729. +  (vm-error-if-folder-empty)
  41730. +  (if (null (get-buffer-window (current-buffer)))
  41731. +      (progn
  41732. +    (if vm-mutable-windows
  41733. +        (let ((pop-up-windows
  41734. +           (and pop-up-windows (eq vm-mutable-windows t))))
  41735. +          (display-buffer (current-buffer)))
  41736. +      (switch-to-buffer (current-buffer)))
  41737. +    (if (and vm-summary-buffer (get-buffer-window vm-summary-buffer)
  41738. +         (eq vm-mutable-windows t))
  41739. +        (vm-proportion-windows)))
  41740. +    (let ((w (get-buffer-window (current-buffer)))
  41741. +      (old-w (selected-window)))
  41742. +      (unwind-protect
  41743. +      (progn
  41744. +        (select-window w)
  41745. +        (scroll-down arg))
  41746. +    (select-window old-w)))))
  41747. +
  41748. +(defun vm-end-of-message ()
  41749. +  "Displays the end of the current message, exposing and marking it read
  41750. +as necessary."
  41751. +  (interactive)
  41752. +  (vm-follow-summary-cursor)
  41753. +  (if vm-mail-buffer
  41754. +      (set-buffer vm-mail-buffer))
  41755. +  (vm-error-if-folder-empty)
  41756. +  (if (eq vm-system-state 'previewing)
  41757. +      (vm-show-current-message))
  41758. +  (goto-char (point-max))
  41759. +  (vm-howl-if-eom-visible))
  41760. +
  41761. +(defun vm-quit-no-change ()
  41762. +  "Exit VM without saving changes made to the folder."
  41763. +  (interactive)
  41764. +  (vm-quit t))
  41765. +
  41766. +(defun vm-quit (&optional no-change)
  41767. +  "Quit VM, saving changes and expunging messages marked for deletion.
  41768. +New messages are changed to unread."
  41769. +  (interactive)
  41770. +  (if vm-mail-buffer
  41771. +      (set-buffer vm-mail-buffer))
  41772. +  (and no-change (buffer-modified-p)
  41773. +       (not (zerop vm-messages-not-on-disk))
  41774. +       ;; Folder may have been saved with C-x C-s and atriutes may have
  41775. +       ;; been changed after that; in that case vm-messages-not-on-disk
  41776. +       ;; would not have been zeroed.  However, all modification flag
  41777. +       ;; undos are cleared if VM actually modifies the folder buffer
  41778. +       ;; (as opposed to the folder's attributes), so this can be used
  41779. +       ;; to verify that there are indeed unsaved messages.
  41780. +       (null (assq 'set-buffer-modified-p vm-undo-record-list))
  41781. +       (not (y-or-n-p
  41782. +         (format "%d message%s have not been saved to disk, exit anyway? "
  41783. +             vm-messages-not-on-disk
  41784. +             (if (= 1 vm-messages-not-on-disk) "" "s"))))
  41785. +       (error "Aborted"))
  41786. +  (let ((inhibit-quit t))
  41787. +    (if (not no-change)
  41788. +    (vm-change-all-new-to-unread))
  41789. +    (if (and (buffer-modified-p) (not no-change))
  41790. +    (vm-save-folder t))
  41791. +    (let ((summary-buffer vm-summary-buffer)
  41792. +      (mail-buffer (current-buffer)))
  41793. +      (if summary-buffer
  41794. +      (progn
  41795. +        (setq overlay-arrow-position nil)
  41796. +        (if (eq vm-mutable-windows t)
  41797. +        (delete-windows-on vm-summary-buffer))
  41798. +        (kill-buffer summary-buffer)))
  41799. +      (set-buffer mail-buffer)
  41800. +      (set-buffer-modified-p nil)
  41801. +      (kill-buffer (current-buffer)))
  41802. +    ;; Make sure we are now dealing with the buffer and window that
  41803. +    ;; would be selected were we to give up control now.
  41804. +    (set-buffer (window-buffer (selected-window)))
  41805. +    ;; If we land on a buffer that VM knows about
  41806. +    ;; do some nice things for the user, if we're allowed.
  41807. +    (cond ((and (eq major-mode 'vm-mode) (eq vm-mutable-windows t))
  41808. +       (if (null vm-startup-with-summary)
  41809. +           (delete-other-windows)
  41810. +         (condition-case () (vm-summarize t) (error nil))
  41811. +         (and (not (eq major-mode 'vm-summary-mode))
  41812. +          (eq vm-startup-with-summary t)
  41813. +          (not (one-window-p t))
  41814. +          vm-summary-buffer
  41815. +          (get-buffer-window vm-summary-buffer)
  41816. +          (progn
  41817. +            (select-window (get-buffer-window vm-summary-buffer))
  41818. +            (delete-other-windows)))))
  41819. +      ((eq major-mode 'vm-summary-mode)
  41820. +       (cond ((eq vm-startup-with-summary nil)
  41821. +          (switch-to-buffer vm-mail-buffer)
  41822. +          (and (not (one-window-p t)) (eq vm-mutable-windows t)
  41823. +               (delete-other-windows)))
  41824. +         ((not (eq vm-startup-with-summary t))
  41825. +          (let ((pop-up-windows
  41826. +             (and pop-up-windows (eq vm-mutable-windows t))))
  41827. +            (display-buffer vm-mail-buffer))
  41828. +          (if (eq vm-mutable-windows t)
  41829. +              (if (eq major-mode 'vm-summary-mode)
  41830. +              (vm-proportion-windows)
  41831. +            (switch-to-buffer vm-summary-buffer))))
  41832. +         ((eq vm-mutable-windows t)
  41833. +          (delete-other-windows)))))))
  41834. +
  41835. +;; This allows C-x C-s to do the right thing for VM mail buffers.
  41836. +;; Note that deleted messages are not expunged.
  41837. +(defun vm-write-file-hook ()
  41838. +  (if (not (eq major-mode 'vm-mode))
  41839. +      ()
  41840. +    (if vm-inhibit-write-file-hook
  41841. +    ()
  41842. +      ;; The vm-save-restriction isn't really necessary here (since
  41843. +      ;; vm-stuff-atributes cleans up after itself) but should remain
  41844. +      ;; as a safeguard against the time when other stuff is added here.
  41845. +      (vm-save-restriction
  41846. +       (let ((inhibit-quit t)
  41847. +         (buffer-read-only))
  41848. +     (vm-stuff-attributes)
  41849. +     nil )))))
  41850. +
  41851. +(defun vm-save-folder (&optional quitting)
  41852. +  "Save current folder to disk."
  41853. +  (interactive)
  41854. +  (if vm-mail-buffer
  41855. +      (set-buffer vm-mail-buffer))
  41856. +  (if (buffer-modified-p)
  41857. +      (let ((inhibit-quit t))
  41858. +    ;; may get error if folder is emptied by the expunge.
  41859. +    (condition-case ()
  41860. +        (vm-expunge-folder quitting t)
  41861. +      (error nil))
  41862. +    (vm-stuff-attributes)
  41863. +    (let ((vm-inhibit-write-file-hook t))
  41864. +      (save-buffer))
  41865. +    (setq vm-messages-not-on-disk 0)
  41866. +    (and (zerop (buffer-size)) vm-delete-empty-folders
  41867. +         (condition-case ()
  41868. +         (progn
  41869. +           (delete-file buffer-file-name)
  41870. +           (message "%s removed" buffer-file-name))
  41871. +           (error nil)))
  41872. +    (if (not quitting)
  41873. +        (if vm-message-pointer
  41874. +        (vm-update-summary-and-mode-line)
  41875. +          (vm-next-message))))))
  41876. +
  41877. +(defun vm-visit-folder (folder)
  41878. +  "Visit a mail file.
  41879. +VM will parse and present its messages to you in the usual way."
  41880. +  (interactive
  41881. +   (list (read-file-name
  41882. +      "Visit folder: " (if vm-folder-directory
  41883. +                   (expand-file-name vm-folder-directory)
  41884. +                 default-directory) nil t)))
  41885. +  (if vm-mail-buffer
  41886. +      (set-buffer vm-mail-buffer))
  41887. +  (vm folder))
  41888. +
  41889. +(defun vm-help ()
  41890. +  "Display VM command and variable information."
  41891. +  (interactive)
  41892. +  (if (and vm-mail-buffer (get-buffer-window vm-mail-buffer))
  41893. +      (set-buffer vm-mail-buffer))
  41894. +  (let ((pop-up-windows (and pop-up-windows (eq vm-mutable-windows t))))
  41895. +    (cond
  41896. +     ((eq last-command 'vm-help)
  41897. +      (describe-mode))
  41898. +     ((eq vm-system-state 'previewing)
  41899. +      (message "Type SPC to read message, n previews next message   (? gives more help)"))
  41900. +     ((eq vm-system-state 'reading)
  41901. +      (message "SPC and b scroll, (d)elete, (s)ave, (n)ext, (r)eply   (? gives more help)"))
  41902. +     (t (describe-mode)))))
  41903. +
  41904. +(defun vm-move-mail (source destination)
  41905. +  (call-process "movemail" nil nil nil (expand-file-name source)
  41906. +        (expand-file-name destination)))
  41907. +
  41908. +(defun vm-gobble-crash-box ()
  41909. +  (save-excursion
  41910. +    (vm-save-restriction
  41911. +     (widen)
  41912. +     (let ((opoint-max (point-max)) crash-buf buffer-read-only
  41913. +       (old-buffer-modified-p (buffer-modified-p))
  41914. +       ;; crash box could contain a letter bomb...
  41915. +       ;; force user notification of file variables.
  41916. +       (inhibit-local-variables t))
  41917. +       (setq crash-buf (find-file-noselect vm-crash-box))
  41918. +       (goto-char (point-max))
  41919. +       (insert-buffer-substring crash-buf
  41920. +                1 (1+ (save-excursion
  41921. +                    (set-buffer crash-buf)
  41922. +                    (widen)
  41923. +                    (buffer-size))))
  41924. +       (write-region opoint-max (point-max) buffer-file-name t t)
  41925. +       (backup-buffer)
  41926. +       ;; make sure primary inbox is private.  384 = octal 600
  41927. +       (condition-case () (set-file-modes buffer-file-name 384) (error nil))
  41928. +       (set-buffer-modified-p old-buffer-modified-p)
  41929. +       (kill-buffer crash-buf)
  41930. +       (condition-case () (delete-file vm-crash-box)
  41931. +     (error nil))))))
  41932. +
  41933. +(defun vm-get-spooled-mail ()
  41934. +  (let ((spool-files (or vm-spool-files
  41935. +             (list (concat vm-spool-directory (user-login-name)))))
  41936. +    (inhibit-quit t)
  41937. +    (got-mail))
  41938. +    (if (file-exists-p vm-crash-box)
  41939. +    (progn
  41940. +      (message "Recovering messages from crash box...")
  41941. +      (vm-gobble-crash-box)
  41942. +      (message "Recovering messages from crash box... done")
  41943. +      (setq got-mail t)))
  41944. +    (while spool-files
  41945. +      (if (file-readable-p (car spool-files))
  41946. +      (progn
  41947. +        (message "Getting new mail from %s..." (car spool-files))
  41948. +        (vm-move-mail (car spool-files) vm-crash-box)
  41949. +        (vm-gobble-crash-box)
  41950. +        (message "Getting new mail from %s... done" (car spool-files))
  41951. +        (setq got-mail t)))
  41952. +      (setq spool-files (cdr spool-files)))
  41953. +    got-mail ))
  41954. +
  41955. +(defun vm-get-new-mail ()
  41956. +  "Move any new mail that has arrived in the system mailbox into the
  41957. +primary inbox.  New mail is appended to the disk and buffer copies of
  41958. +the primary inbox.
  41959. +
  41960. +This command is valid only from the primary inbox buffer."
  41961. +  (interactive)
  41962. +  (if vm-mail-buffer
  41963. +      (set-buffer vm-mail-buffer))
  41964. +  (if (not vm-primary-inbox-p)
  41965. +      (error "This is not your primary inbox."))
  41966. +  (if (not (and (vm-get-spooled-mail) (vm-assimilate-new-messages)))
  41967. +      (message "No new mail.")
  41968. +    (vm-emit-totals-blurb)
  41969. +    ;; If there's a current grouping, then the summary has already
  41970. +    ;; been redone in vm-group-messages.
  41971. +    (if (and vm-summary-buffer (not vm-current-grouping))
  41972. +    (progn
  41973. +      (vm-do-summary)
  41974. +      (vm-emit-totals-blurb)))
  41975. +    (vm-thoughtfully-select-message)
  41976. +    (if vm-summary-buffer
  41977. +    (vm-set-summary-pointer (car vm-message-pointer)))))
  41978. +
  41979. +(defun vm-emit-totals-blurb ()
  41980. +  (message "%d message%s, %d new, %d unread."
  41981. +       vm-total-count (if (= vm-total-count 1) "" "s")
  41982. +       vm-new-count vm-unread-count))
  41983. +
  41984. +(defun vm-find-first-unread-message ()
  41985. +  (let (mp unread-mp)
  41986. +    (setq mp vm-message-list)
  41987. +    (while mp
  41988. +      (if (and (vm-new-flag (car mp)) (not (vm-deleted-flag (car mp))))
  41989. +      (setq unread-mp mp mp nil)
  41990. +    (setq mp (cdr mp))))
  41991. +    (if (null unread-mp)
  41992. +    (progn
  41993. +      (setq mp vm-message-list)
  41994. +      (while mp
  41995. +        (if (and (vm-unread-flag (car mp))
  41996. +             (not (vm-deleted-flag (car mp))))
  41997. +        (setq unread-mp mp mp nil)
  41998. +          (setq mp (cdr mp))))))
  41999. +    unread-mp))
  42000. +
  42001. +;; returns non-nil if there were any new messages
  42002. +(defun vm-assimilate-new-messages ()
  42003. +  (let ((tail-cons (vm-last vm-message-list))
  42004. +    (new-messages-p (null vm-message-pointer)))
  42005. +    (vm-save-restriction
  42006. +     (widen)
  42007. +     (vm-build-message-list)
  42008. +     (vm-read-attributes)
  42009. +     (setq new-messages-p (or new-messages-p (cdr tail-cons)))
  42010. +     (if (and vm-current-grouping new-messages-p)
  42011. +     (condition-case data
  42012. +         (vm-group-messages vm-current-grouping)
  42013. +       ;; presumably an unsupported grouping
  42014. +       (error (message (car (cdr data)))
  42015. +          (sleep-for 2)
  42016. +          (vm-number-messages)))
  42017. +       (vm-number-messages)))
  42018. +    new-messages-p ))
  42019. +
  42020. +(defun vm-thoughtfully-select-message ()
  42021. +  ;; This is called after new messages have been assimilated in a folder.
  42022. +  ;; We move to a new message only if the user is not "reading" the current
  42023. +  ;; message, or if there is no current message.
  42024. +  ;;
  42025. +  ;; Most of the complications in the `if' test below are due to the presence
  42026. +  ;; of the variables vm-preview-lines and vm-preview-read-messages.
  42027. +  ;; These can cause previewing never to be done, or not be done for
  42028. +  ;; specific messages.  In these cases VM assumes a user is "reading"
  42029. +  ;; an exposed message if the top of the message is not visible in the
  42030. +  ;; folder buffer window.
  42031. +  (if (or (null vm-message-pointer)
  42032. +      (not (eq vm-system-state 'reading))
  42033. +      (and (or (null vm-preview-lines)
  42034. +           (and (not vm-preview-read-messages)
  42035. +            (not (vm-new-flag (car vm-message-pointer)))
  42036. +            (not (vm-unread-flag (car vm-message-pointer)))))
  42037. +           (let ((w (get-buffer-window (current-buffer))))
  42038. +         (and w (pos-visible-in-window-p (point-min) w)))))
  42039. +      (let ((mp (vm-find-first-unread-message)))
  42040. +    (if mp
  42041. +        (progn
  42042. +          (if vm-message-pointer
  42043. +          (setq vm-last-message-pointer vm-message-pointer
  42044. +            vm-message-pointer mp)
  42045. +        (setq vm-message-pointer mp))
  42046. +          (vm-preview-current-message))
  42047. +      (if (null vm-message-pointer)
  42048. +          (vm-Next-message))))))
  42049. +
  42050. +(defun vm-display-startup-message ()
  42051. +  (if (sit-for 5)
  42052. +      (let ((lines
  42053. +         '(
  42054. +"You may give out copies of VM.  Type \\[vm-show-copying-restrictions] to see the conditions"
  42055. +"VM comes with ABSOLUTELY NO WARRANTY; type \\[vm-show-no-warranty] for full details"
  42056. +           )))
  42057. +    (message "VM %s, Copyright (C) 1989 Kyle E. Jones; type ? for help"
  42058. +         vm-version)
  42059. +    (while (and (sit-for 4) lines)
  42060. +      (message (substitute-command-keys (car lines)))
  42061. +      (setq lines (cdr lines)))))
  42062. +  (message ""))
  42063. +
  42064. +(defun vm (&optional folder)
  42065. +  "Read mail under Emacs.
  42066. +Optional first arg FOLDER specifies the folder to visit.  It defaults
  42067. +to the value of vm-primary-inbox.  The folder buffer is put into VM
  42068. +mode, a major mode for reading mail.
  42069. +
  42070. +Visiting the primary inbox causes any contents of the system mailbox to
  42071. +be moved and appended to the resulting buffer.
  42072. +
  42073. +All the messages can be read by repeatedly pressing SPC.  Messages are
  42074. +marked for deletion with `d', and saved to a folder with `s'.  Quitting
  42075. +VM with `q' expunges messages marked for deletion and saves the buffered
  42076. +folder to disk.
  42077. +
  42078. +See the documentation for vm-mode for more information."
  42079. +  (interactive)
  42080. +  (if vm-session-beginning
  42081. +      (progn
  42082. +    (random t)
  42083. +    (load "~/.vm" t t t)
  42084. +    (load "vm-undo")
  42085. +    (load "vm-summary")))
  42086. +  (if vm-mail-buffer
  42087. +      (set-buffer vm-mail-buffer))
  42088. +  ;; set inhibit-local-varaibles non-nil to protect
  42089. +  ;; against letter bombs.
  42090. +  (let ((inhibit-local-variables t))
  42091. +    (setq mail-buffer (find-file-noselect
  42092. +               (or folder (expand-file-name vm-primary-inbox))))
  42093. +    (set-buffer mail-buffer)
  42094. +    (or (buffer-modified-p) (setq vm-messages-not-on-disk 0))
  42095. +    (let ((first-time (not (eq major-mode 'vm-mode)))
  42096. +      (inhibit-quit t))
  42097. +      (if first-time
  42098. +      (progn
  42099. +        (buffer-flush-undo (current-buffer))
  42100. +        (abbrev-mode 0)
  42101. +        (auto-fill-mode 0)
  42102. +        (vm-mode)))
  42103. +      (if (or (and vm-primary-inbox-p (vm-get-spooled-mail)) first-time)
  42104. +      (progn
  42105. +        (vm-assimilate-new-messages)
  42106. +        ;; Can't allow a folder-empty error here because execution
  42107. +        ;; would abort before the session startup code below.
  42108. +        (if (null vm-message-list)
  42109. +        (message "Folder is empty.")
  42110. +          (vm-emit-totals-blurb)
  42111. +          ;; If there's a current grouping, then the summary has already
  42112. +          ;; been redone in vm-group-messages.
  42113. +          (if (and vm-summary-buffer (not vm-current-grouping))
  42114. +          (progn
  42115. +            (vm-do-summary)
  42116. +            ;; The summary update messages erased this info
  42117. +            ;; from the echo area.
  42118. +            (vm-emit-totals-blurb)))
  42119. +          (save-window-excursion
  42120. +        ;; Make sure the mail buffer is not visible.  This is
  42121. +        ;; needed to insure that if vm-preview-lines is nil, the
  42122. +        ;; mail window won't be momentarily displayed and then
  42123. +        ;; disappear behind the summary window, if
  42124. +        ;; vm-startup-with-summary is t.
  42125. +        (if (get-buffer-window mail-buffer)
  42126. +            (if (one-window-p)
  42127. +            (switch-to-buffer (other-buffer))
  42128. +              (delete-windows-on mail-buffer)))
  42129. +        (set-buffer mail-buffer)
  42130. +        (vm-thoughtfully-select-message))
  42131. +          (if vm-summary-buffer
  42132. +          (vm-set-summary-pointer (car vm-message-pointer))))))
  42133. +      (switch-to-buffer mail-buffer)
  42134. +      (if (and vm-message-list vm-startup-with-summary)
  42135. +      (progn
  42136. +        (vm-summarize t)
  42137. +        (vm-emit-totals-blurb)
  42138. +        (and (eq vm-startup-with-summary t)
  42139. +         (eq vm-mutable-windows t)
  42140. +         (if (eq major-mode 'vm-summary-mode)
  42141. +             (delete-other-windows)
  42142. +           (select-window (get-buffer-window vm-summary-buffer))
  42143. +           (delete-other-windows))))
  42144. +    (if (eq vm-mutable-windows t)
  42145. +        (delete-other-windows)))
  42146. +      (if vm-session-beginning
  42147. +      (progn
  42148. +        (setq vm-session-beginning nil)
  42149. +        (or vm-inhibit-startup-message folder
  42150. +        (vm-display-startup-message))
  42151. +        (if (and vm-message-list (not (input-pending-p)))
  42152. +        (vm-emit-totals-blurb)))))))
  42153. +
  42154. +(defun vm-mode ()
  42155. +  "Major mode for reading mail.
  42156. +
  42157. +Commands:
  42158. +   h - summarize folder contents
  42159. +
  42160. +   n - go to next message
  42161. +   p - go to previous message
  42162. +   N - like `n' but ignores skip-variable settings
  42163. +   P - like `p' but ignores skip-variable settings
  42164. + M-n - go to next unread message
  42165. + M-p - go to previous unread message
  42166. + RET - go to numbered message (uses prefix arg or prompts in minibuffer)
  42167. + TAB - go to last message seen
  42168. + M-s - incremental search through the folder
  42169. +
  42170. +   t - display hidden headers
  42171. + SPC - scroll forward a page (if at end of message, then display next message)
  42172. +   b - scroll backward a page
  42173. +   > - go to end of current message
  42174. +
  42175. +   d - delete current message (mark as deleted)
  42176. +   u - undelete
  42177. +   k - mark for deletion all messages with same subject as the current message
  42178. +
  42179. +   r - reply (only to the sender of the message)
  42180. +   R - reply with included text for current message
  42181. +   f - followup (reply to all recipients of message)
  42182. +   F - followup with included text from the current message
  42183. +   z - forward the current message
  42184. +   m - send a message
  42185. +
  42186. +   @ - digestify and mail entire folder contents (the folder is not modified)
  42187. +   * - burst a digest into indivdual messages, and append and assimilate these
  42188. +       message into the current folder.
  42189. +
  42190. +   G - group messages according to some criteria
  42191. +
  42192. +   g - get any new mail that has arrived in the system mailbox
  42193. +       (new mail is appended to the disk and buffer copies of the
  42194. +       primary inbox.)
  42195. +   v - visit another mail folder
  42196. +
  42197. +   s - save current message in a folder (appends if folder already exists)
  42198. +   w - write current message to a file without its headers (appends if exists)
  42199. +   S - save entire folder to disk, expunging deleted messages
  42200. +   A - save unfiled messages to their vm-auto-folder-alist specified folders
  42201. +   # - expunge deleted messages (without saving folder)
  42202. +   q - quit VM, deleted messages are expunged, folder saved to disk
  42203. +   x - exit VM with no change to the folder
  42204. +
  42205. + C-_ - undo, special undo that retracts the most recent
  42206. +             changes in message attributes.  Expunges and saves
  42207. +             cannot be undone.
  42208. +
  42209. +   ? - help
  42210. +
  42211. +   ! - run a shell command
  42212. +   | - run a shell command with the current message as input
  42213. +
  42214. + M-c - view conditions under which youmay redistribute of VM
  42215. + M-w - view the details of VM's lack of a warranty
  42216. +
  42217. +Variables:
  42218. +   vm-auto-folder-alist
  42219. +   vm-berkeley-mail-compatibility
  42220. +   vm-circular-folders
  42221. +   vm-confirm-new-folders
  42222. +   vm-crash-box
  42223. +   vm-delete-after-saving
  42224. +   vm-delete-empty-folders
  42225. +   vm-folder-directory
  42226. +   vm-folder-type
  42227. +   vm-follow-summary-cursor
  42228. +   vm-forwarding-subject-format
  42229. +   vm-gargle-uucp
  42230. +   vm-group-by
  42231. +   vm-highlighted-header-regexp
  42232. +   vm-in-reply-to-format
  42233. +   vm-included-text-attribution-format
  42234. +   vm-included-text-prefix
  42235. +   vm-inhibit-startup-message
  42236. +   vm-mail-window-percentage
  42237. +   vm-mode-hooks
  42238. +   vm-move-after-deleting
  42239. +   vm-mutable-windows
  42240. +   vm-preview-lines
  42241. +   vm-preview-read-messages
  42242. +   vm-primary-inbox
  42243. +   vm-rfc934-forwarding
  42244. +   vm-search-using-regexps
  42245. +   vm-skip-deleted-messages
  42246. +   vm-skip-read-messages
  42247. +   vm-spool-files
  42248. +   vm-startup-with-summary
  42249. +   vm-strip-reply-headers
  42250. +   vm-summary-format
  42251. +   vm-visible-headers
  42252. +   vm-visit-when-saving"
  42253. +  (widen)
  42254. +  (make-local-variable 'require-final-newline)
  42255. +  (make-local-variable 'file-precious-flag)
  42256. +  (setq
  42257. +   buffer-read-only nil
  42258. +   case-fold-search t
  42259. +   file-precious-flag t
  42260. +   major-mode 'vm-mode
  42261. +   mode-line-format
  42262. +   '("" mode-line-modified mode-line-buffer-identification "   "
  42263. +     global-mode-string
  42264. +     (vm-message-list
  42265. +      ("   %[(" vm-ml-attributes-string ")%]----")
  42266. +      ("   %[()%]----"))
  42267. +     (-3 . "%p") "-%-")
  42268. +   mode-line-buffer-identification
  42269. +   '("VM " vm-version ": %b"
  42270. +     (vm-message-list
  42271. +      ("   " vm-ml-message-number
  42272. +       " (of " vm-ml-highest-message-number ")")
  42273. +      "  (no messages)"))
  42274. +   mode-name "VM"
  42275. +   require-final-newline nil
  42276. +   vm-current-grouping vm-group-by
  42277. +   vm-primary-inbox-p (equal buffer-file-name
  42278. +                 (expand-file-name vm-primary-inbox)))
  42279. +  (use-local-map vm-mode-map)
  42280. +  (run-hooks 'vm-mode-hooks))
  42281. +
  42282. +(put 'vm-mode 'mode-class 'special)
  42283. +
  42284. +(autoload 'vm-group-messages "vm-group" nil t)
  42285. +
  42286. +(autoload 'vm-reply "vm-reply" nil t)
  42287. +(autoload 'vm-reply-include-text "vm-reply" nil t)
  42288. +(autoload 'vm-followup "vm-reply" nil t)
  42289. +(autoload 'vm-followup-include-text "vm-reply" nil t)
  42290. +(autoload 'vm-mail "vm-reply" nil t)
  42291. +(autoload 'vm-forward-message "vm-reply" nil t)
  42292. +(autoload 'vm-send-digest "vm-reply" nil t)
  42293. +
  42294. +(autoload 'vm-isearch-forward "vm-search" nil t)
  42295. +
  42296. +(autoload 'vm-burst-digest "vm-digest" nil t)
  42297. +(autoload 'vm-rfc934-char-stuff-region "vm-digest")
  42298. +(autoload 'vm-digestify-region "vm-digest")
  42299. +
  42300. +(autoload 'vm-show-no-warranty "vm-license" nil t)
  42301. +(autoload 'vm-show-copying-restrictions "vm-license" nil t)
  42302. +
  42303. +(autoload 'vm-auto-archive-messages "vm-save" nil t)
  42304. +(autoload 'vm-save-message "vm-save" nil t)
  42305. +(autoload 'vm-save-message-sans-headers "vm-save" nil t)
  42306. +(autoload 'vm-pipe-message-to-command "vm-save" nil t)
  42307. +
  42308. +(autoload 'vm-delete-message "vm-delete" nil t)
  42309. +(autoload 'vm-undelete-message "vm-delete" nil t)
  42310. +(autoload 'vm-kill-subject "vm-delete" nil t)
  42311. +(autoload 'vm-expunge-folder "vm-delete" nil t)
  42312. +
  42313. +(if (not (memq 'vm-write-file-hook write-file-hooks))
  42314. +    (setq write-file-hooks
  42315. +      (cons 'vm-write-file-hook write-file-hooks)))
  42316. Binary files baseline/fsf/emacs/site-lisp/vm.elc and amiga/fsf/emacs/site-lisp/vm.elc differ
  42317. diff -rup --new-file baseline/fsf/emacs/src/Makefile.in.in amiga/fsf/emacs/src/Makefile.in.in
  42318. --- baseline/fsf/emacs/src/Makefile.in.in    Fri Aug 26 14:25:09 1994
  42319. +++ amiga/fsf/emacs/src/Makefile.in.in    Sat Sep 28 00:00:00 1996
  42320. @@ -252,9 +252,23 @@ SHORT= shortnames
  42321.  
  42322.  /* C_SWITCH_X_SITE must come before C_SWITCH_X_MACHINE and C_SWITCH_X_SYSTEM
  42323.     since it may have -I options that should override those two.  */
  42324. +
  42325. +
  42326. +#ifdef __amigaos__
  42327. +/* FIXME - should really be dependant on expected compiler, in this case
  42328. +   it is SAS/C.  Also, in order to get '.' and '..' handling, you must
  42329. +   have "unixdirs" running. */
  42330. +#undef AMIGA    /* Probably belongs somewhere else, just haven't found it yet... */
  42331. +#undef amiga    /* Probably belongs somewhere else, just haven't found it yet... */
  42332. +CC=sc:c/sc
  42333. +ALL_CFLAGS= def AMIGA def emacs def HAVE_CONFIG_H def static $(MYCPPFLAG) idir . idir ${srcdir}/../unixlib/include idir ${srcdir} C_SWITCH_MACHINE C_SWITCH_SYSTEM C_SWITCH_SITE C_SWITCH_X_SITE C_SWITCH_X_MACHINE C_SWITCH_X_SYSTEM ${CFLAGS}
  42334. +.c.o:
  42335. +    $(CC) $(CPPFLAGS) $(ALL_CFLAGS) $< OBJNAME=$*.o
  42336. +#else
  42337.  ALL_CFLAGS=-Demacs -DHAVE_CONFIG_H $(MYCPPFLAG) -I. -I${srcdir} C_SWITCH_MACHINE C_SWITCH_SYSTEM C_SWITCH_SITE C_SWITCH_X_SITE C_SWITCH_X_MACHINE C_SWITCH_X_SYSTEM ${CFLAGS}
  42338.  .c.o:
  42339.      $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
  42340. +#endif
  42341.  
  42342.  #ifndef LIBX10_MACHINE
  42343.  #define LIBX10_MACHINE
  42344. @@ -456,7 +470,7 @@ obj=    dispnew.o frame.o scroll.o xdisp
  42345.      eval.o floatfns.o fns.o print.o lread.o \
  42346.      abbrev.o syntax.o UNEXEC mocklisp.o bytecode.o \
  42347.      process.o callproc.o \
  42348. -    doprnt.o GETLOADAVG_OBJ
  42349. +    doprnt.o GETLOADAVG_OBJ EXTRA_OBJECTS
  42350.  
  42351.  /* Object files used on some machine or other.
  42352.     These go in the DOC file on all machines
  42353. @@ -496,7 +510,7 @@ mallocobj = malloc.o
  42354.  
  42355.  
  42356.  #ifndef HAVE_ALLOCA
  42357. -allocaobj = alloca.o
  42358. +allocaobj = oldalloca.o
  42359.  #else
  42360.  allocaobj =
  42361.  #endif
  42362. @@ -587,8 +601,12 @@ lisp= \
  42363.     Note that SunOS needs -lm to come before -lc; otherwise, you get
  42364.     duplicated symbols.  If the standard libraries were compiled
  42365.     with GCC, we might need gnulib again after them.  */
  42366. +#ifdef __amigaos__    /* FIXME */
  42367. +LIBES = lib ../unixlib/src/unix.lib lib:scmieee.lib lib:sc.lib lib:amiga.lib
  42368. +#else
  42369.  LIBES = $(LIBX) LIBS_SYSTEM LIBS_MACHINE LIBS_TERMCAP \
  42370.     LIBS_DEBUG $(GNULIB_VAR) LIB_MATH LIB_STANDARD $(GNULIB_VAR)
  42371. +#endif
  42372.  
  42373.  /* Enable recompilation of certain other files depending on system type.  */
  42374.  
  42375. @@ -633,9 +651,13 @@ ${libsrc}make-docfile:
  42376.  #endif
  42377.  
  42378.  temacs: MAKE_PARALLEL $(LOCALCPP) $(SHORT) $(STARTFILES) $(OLDXMENU) ${obj} ${otherobj} OBJECTS_SYSTEM OBJECTS_MACHINE prefix-args
  42379. +#ifdef __amigaos
  42380. +    sc:c/slink from $(STARTFILES) ${obj} ${otherobj} OBJECTS_SYSTEM OBJECTS_MACHINE ${LIBES} ${ALL_LDFLAGS} to temacs
  42381. +#else
  42382.      $(LD) YMF_PASS_LDFLAGS (${STARTFLAGS} ${ALL_LDFLAGS}) \
  42383.      -o temacs ${STARTFILES} ${obj} ${otherobj}  \
  42384.      OBJECTS_SYSTEM OBJECTS_MACHINE ${LIBES}
  42385. +#endif
  42386.  
  42387.  prefix-args: prefix-args.c $(config_h)
  42388.      $(CC) $(ALL_CFLAGS) ${srcdir}/prefix-args.c -o prefix-args
  42389. diff -rup --new-file baseline/fsf/emacs/src/abbrev_protos.h amiga/fsf/emacs/src/abbrev_protos.h
  42390. --- baseline/fsf/emacs/src/abbrev_protos.h    Wed Dec 31 17:00:00 1969
  42391. +++ amiga/fsf/emacs/src/abbrev_protos.h    Sat Sep 28 00:00:00 1996
  42392. @@ -0,0 +1,80 @@
  42393. +/* Prototypes for functions defined in
  42394. +abbrev.c
  42395. + */
  42396. +
  42397. +extern int Vabbrev_table_name_list;
  42398. +
  42399. +extern int Vglobal_abbrev_table;
  42400. +
  42401. +extern int Vfundamental_mode_abbrev_table;
  42402. +
  42403. +extern int abbrevs_changed;
  42404. +
  42405. +extern int abbrev_all_caps;
  42406. +
  42407. +extern int Vabbrev_start_location;
  42408. +
  42409. +extern int Vabbrev_start_location_buffer;
  42410. +
  42411. +extern int Vlast_abbrev;
  42412. +
  42413. +extern int Vlast_abbrev_text;
  42414. +
  42415. +extern int last_abbrev_point;
  42416. +
  42417. +extern int Vpre_abbrev_expand_hook;
  42418. +
  42419. +extern int Qpre_abbrev_expand_hook;
  42420. +
  42421. +extern struct Lisp_Subr Smake_abbrev_table;
  42422. +
  42423. +int Fmake_abbrev_table(void);
  42424. +
  42425. +extern struct Lisp_Subr Sclear_abbrev_table;
  42426. +
  42427. +int Fclear_abbrev_table(int );
  42428. +
  42429. +extern struct Lisp_Subr Sdefine_abbrev;
  42430. +
  42431. +int Fdefine_abbrev(int , int , int , int , int );
  42432. +
  42433. +extern struct Lisp_Subr Sdefine_global_abbrev;
  42434. +
  42435. +int Fdefine_global_abbrev(int , int );
  42436. +
  42437. +extern struct Lisp_Subr Sdefine_mode_abbrev;
  42438. +
  42439. +int Fdefine_mode_abbrev(int , int );
  42440. +
  42441. +extern struct Lisp_Subr Sabbrev_symbol;
  42442. +
  42443. +int Fabbrev_symbol(int , int );
  42444. +
  42445. +extern struct Lisp_Subr Sabbrev_expansion;
  42446. +
  42447. +int Fabbrev_expansion(int , int );
  42448. +
  42449. +extern struct Lisp_Subr Sexpand_abbrev;
  42450. +
  42451. +int Fexpand_abbrev(void);
  42452. +
  42453. +extern struct Lisp_Subr Sunexpand_abbrev;
  42454. +
  42455. +int Funexpand_abbrev(void);
  42456. +
  42457. +int write_abbrev(int sym,
  42458. +                 int stream);
  42459. +
  42460. +int describe_abbrev(int sym,
  42461. +                    int stream);
  42462. +
  42463. +extern struct Lisp_Subr Sinsert_abbrev_table_description;
  42464. +
  42465. +int Finsert_abbrev_table_description(int , int );
  42466. +
  42467. +extern struct Lisp_Subr Sdefine_abbrev_table;
  42468. +
  42469. +int Fdefine_abbrev_table(int , int );
  42470. +
  42471. +int syms_of_abbrev(void);
  42472. +
  42473. diff -rup --new-file baseline/fsf/emacs/src/alloc.c amiga/fsf/emacs/src/alloc.c
  42474. --- baseline/fsf/emacs/src/alloc.c    Tue May  3 19:29:50 1994
  42475. +++ amiga/fsf/emacs/src/alloc.c    Sat Sep 28 00:00:00 1996
  42476. @@ -76,6 +76,11 @@ int undo_strong_limit;
  42477.  /* Non-nil means defun should do purecopy on the function definition */
  42478.  Lisp_Object Vpurify_flag;
  42479.  
  42480. +#ifdef AMIGA_DUMP
  42481. +int *pure;   /* pure array is allocated at run-time */
  42482. +int puresize = DEF_PURESIZE; /* and has a variable size */
  42483. +#define PUREBEG (char *) pure
  42484. +#else /* not AMIGA_DUMP */
  42485.  #ifndef HAVE_SHM
  42486.  int pure[PURESIZE / sizeof (int)] = {0,};   /* Force it into data space! */
  42487.  #define PUREBEG (char *) pure
  42488. @@ -91,6 +96,7 @@ int pure[PURESIZE / sizeof (int)] = {0,}
  42489.     out.  */
  42490.  int pure_size;
  42491.  #endif /* not HAVE_SHM */
  42492. +#endif /* not AMIGA_DUMP */
  42493.  
  42494.  /* Index in pure at which next pure object will be allocated. */
  42495.  int pureptr;
  42496. @@ -1159,7 +1165,11 @@ struct gcpro *gcprolist;
  42497.  
  42498.  #define NSTATICS 512
  42499.  
  42500. +#ifndef AMIGA_DUMP
  42501.  Lisp_Object *staticvec[NSTATICS] = {0};
  42502. +#else
  42503. +Lisp_Object *staticvec[NSTATICS]; /* Doesn't need to be pure */
  42504. +#endif
  42505.  
  42506.  int staticidx = 0;
  42507.  
  42508. @@ -2012,8 +2022,16 @@ compact_strings ()
  42509.           Find the end of the chain, where the actual size lives.  */
  42510.            while ((unsigned) size > STRING_BLOCK_SIZE)
  42511.          {
  42512. +#ifdef AMIGA /* SAS/C 6.3 code generation bug */
  42513. +          int hi;
  42514. +          
  42515. +          if (size & 1) size ^= MARKBIT | 1;
  42516. +          hi = *(int *) size;
  42517. +          size = hi & ~MARKBIT;
  42518. +#else
  42519.            if (size & 1) size ^= MARKBIT | 1;
  42520.            size = *(int *)size & ~MARKBIT;
  42521. +#endif
  42522.          }
  42523.  
  42524.            total_string_size += size;
  42525. @@ -2052,7 +2070,15 @@ compact_strings ()
  42526.            if (size & 1) size ^= MARKBIT | 1;
  42527.            objptr = (Lisp_Object *)size;
  42528.  
  42529. +#ifdef AMIGA /* see above */
  42530. +              {
  42531. +            int hi;
  42532. +            hi = XFASTINT (*objptr);
  42533. +            size = hi & ~MARKBIT;
  42534. +          }
  42535. +#else
  42536.            size = XFASTINT (*objptr) & ~MARKBIT;
  42537. +#endif
  42538.            if (XMARKBIT (*objptr))
  42539.              {
  42540.                XSET (*objptr, Lisp_String, newaddr);
  42541. diff -rup --new-file baseline/fsf/emacs/src/alloc_protos.h amiga/fsf/emacs/src/alloc_protos.h
  42542. --- baseline/fsf/emacs/src/alloc_protos.h    Wed Dec 31 17:00:00 1969
  42543. +++ amiga/fsf/emacs/src/alloc_protos.h    Sat Sep 28 00:00:00 1996
  42544. @@ -0,0 +1,191 @@
  42545. +/* Prototypes for functions defined in
  42546. +alloc.c
  42547. + */
  42548. +
  42549. +extern int consing_since_gc;
  42550. +
  42551. +extern int gc_cons_threshold;
  42552. +
  42553. +extern int gc_in_progress;
  42554. +
  42555. +extern int undo_limit;
  42556. +
  42557. +extern int undo_strong_limit;
  42558. +
  42559. +extern int Vpurify_flag;
  42560. +
  42561. +extern int * pure;
  42562. +
  42563. +extern int puresize;
  42564. +
  42565. +extern int pureptr;
  42566. +
  42567. +extern char * pending_malloc_warning;
  42568. +
  42569. +extern int memory_signal_data;
  42570. +
  42571. +extern char * stack_copy;
  42572. +
  42573. +extern int stack_copy_size;
  42574. +
  42575. +extern int ignore_warnings;
  42576. +
  42577. +int malloc_warning_1(int str);
  42578. +
  42579. +int malloc_warning(char * str);
  42580. +
  42581. +int display_malloc_warning(void);
  42582. +
  42583. +int memory_full(void);
  42584. +
  42585. +long * xmalloc(int size);
  42586. +
  42587. +long * xrealloc(void * block,
  42588. +                int size);
  42589. +
  42590. +void xfree(void * block);
  42591. +
  42592. +extern struct cons_block * cons_block;
  42593. +
  42594. +extern int cons_block_index;
  42595. +
  42596. +extern struct Lisp_Cons * cons_free_list;
  42597. +
  42598. +void init_cons(void);
  42599. +
  42600. +int free_cons(struct Lisp_Cons * ptr);
  42601. +
  42602. +extern struct Lisp_Subr Scons;
  42603. +
  42604. +int Fcons(int , int );
  42605. +
  42606. +extern struct Lisp_Subr Slist;
  42607. +
  42608. +int Flist(int , int * );
  42609. +
  42610. +extern struct Lisp_Subr Smake_list;
  42611. +
  42612. +int Fmake_list(int , int );
  42613. +
  42614. +extern struct Lisp_Vector * all_vectors;
  42615. +
  42616. +extern struct Lisp_Subr Smake_vector;
  42617. +
  42618. +int Fmake_vector(int , int );
  42619. +
  42620. +extern struct Lisp_Subr Svector;
  42621. +
  42622. +int Fvector(int , int * );
  42623. +
  42624. +extern struct Lisp_Subr Smake_byte_code;
  42625. +
  42626. +int Fmake_byte_code(int , int * );
  42627. +
  42628. +extern struct symbol_block * symbol_block;
  42629. +
  42630. +extern int symbol_block_index;
  42631. +
  42632. +extern struct Lisp_Symbol * symbol_free_list;
  42633. +
  42634. +void init_symbol(void);
  42635. +
  42636. +extern struct Lisp_Subr Smake_symbol;
  42637. +
  42638. +int Fmake_symbol(int );
  42639. +
  42640. +extern struct marker_block * marker_block;
  42641. +
  42642. +extern int marker_block_index;
  42643. +
  42644. +extern struct Lisp_Marker * marker_free_list;
  42645. +
  42646. +void init_marker(void);
  42647. +
  42648. +extern struct Lisp_Subr Smake_marker;
  42649. +
  42650. +int Fmake_marker(void);
  42651. +
  42652. +extern struct string_block * current_string_block;
  42653. +
  42654. +extern struct string_block * first_string_block;
  42655. +
  42656. +extern struct string_block * large_string_blocks;
  42657. +
  42658. +void init_strings(void);
  42659. +
  42660. +extern struct Lisp_Subr Smake_string;
  42661. +
  42662. +int Fmake_string(int , int );
  42663. +
  42664. +int make_string(char * contents,
  42665. +                int length);
  42666. +
  42667. +int build_string(char * str);
  42668. +
  42669. +int make_uninit_string(int length);
  42670. +
  42671. +int make_event_array(register int nargs,
  42672. +                     int * args);
  42673. +
  42674. +int make_pure_string(char * data,
  42675. +                     int length);
  42676. +
  42677. +int pure_cons(int car,
  42678. +              int cdr);
  42679. +
  42680. +int make_pure_vector(int len);
  42681. +
  42682. +extern struct Lisp_Subr Spurecopy;
  42683. +
  42684. +int Fpurecopy(int );
  42685. +
  42686. +extern struct gcpro * gcprolist;
  42687. +
  42688. +extern int * staticvec[512];
  42689. +
  42690. +extern int staticidx;
  42691. +
  42692. +void staticpro(int * varaddress);
  42693. +
  42694. +extern int total_conses;
  42695. +
  42696. +extern int total_markers;
  42697. +
  42698. +extern int total_symbols;
  42699. +
  42700. +extern int total_string_size;
  42701. +
  42702. +extern int total_vector_size;
  42703. +
  42704. +extern int total_free_conses;
  42705. +
  42706. +extern int total_free_markers;
  42707. +
  42708. +extern int total_free_symbols;
  42709. +
  42710. +extern struct Lisp_Subr Sgarbage_collect;
  42711. +
  42712. +int Fgarbage_collect(void);
  42713. +
  42714. +extern int * last_marked[500];
  42715. +
  42716. +extern int last_marked_index;
  42717. +
  42718. +void mark_object(int * objptr);
  42719. +
  42720. +void mark_buffer(int buf);
  42721. +
  42722. +void gc_sweep(void);
  42723. +
  42724. +void compact_strings(void);
  42725. +
  42726. +extern struct Lisp_Subr Smemory_limit;
  42727. +
  42728. +int Fmemory_limit(void);
  42729. +
  42730. +int init_alloc_once(void);
  42731. +
  42732. +int init_alloc(void);
  42733. +
  42734. +void syms_of_alloc(void);
  42735. +
  42736. diff -rup --new-file baseline/fsf/emacs/src/amiga.h amiga/fsf/emacs/src/amiga.h
  42737. --- baseline/fsf/emacs/src/amiga.h    Wed Dec 31 17:00:00 1969
  42738. +++ amiga/fsf/emacs/src/amiga.h    Sat Sep 28 00:00:00 1996
  42739. @@ -0,0 +1,105 @@
  42740. +
  42741. +struct x_display
  42742. +{
  42743. +    struct Window *emacs_win; /* amiga window */
  42744. +    struct Menu *emacs_menu;
  42745. +    void *emacs_vi; /* visual info */
  42746. +    char *emacs_menu_strings; 
  42747. +};
  42748. +
  42749. +#define EMACS_WIN(f) (FRAME_DISPLAY(f)->emacs_win)
  42750. +#define EMACS_MENU(f) (FRAME_DISPLAY(f)->emacs_menu)
  42751. +#define EMACS_MENU_STRINGS(f) (FRAME_DISPLAY(f)->emacs_menu_strings)
  42752. +#define EMACS_VI(f) (FRAME_DISPLAY(f)->emacs_vi)
  42753. +
  42754. +/* Symbols defined in amiga_tty.c */
  42755. +extern unsigned long inputsig;
  42756. +
  42757. +/* Prototypes for functions defined in amiga_clipboard.c */
  42758. +void syms_of_amiga_clipboard(void);
  42759. +void early_clipboard(void);
  42760. +void init_clipboard(void);
  42761. +void cleanup_clipboard(void);
  42762. +
  42763. +/* Prototypes for functions defined in amiga_dump.c */
  42764. +void map_out_data(char *fn);
  42765. +void map_in_data(int load);
  42766. +extern void *far first_fn, *far last_fn;
  42767. +
  42768. +/* Prototypes for functions defined in amiga_processes.c */
  42769. +/* Simulation of unix processes & signals */
  42770. +int wait_for_termination(int pid);
  42771. +int wait_without_blocking(void);
  42772. +char *amiga_path(void);
  42773. +void init_amiga_processes(void);
  42774. +void cleanup_amiga_processes(void);
  42775. +
  42776. +/* Prototypes for functions defined in amiga_rexx.c */
  42777. +int check_arexx(int force, int kbd);
  42778. +void init_amiga_rexx(void);
  42779. +void cleanup_amiga_rexx(void);
  42780. +void syms_of_amiga_rexx(void);
  42781. +
  42782. +/* Prototypes for functions defined in amiga_serial.c */
  42783. +void init_amiga_serial(void);
  42784. +void cleanup_amiga_serial(void);
  42785. +void check_serial(int force);
  42786. +void serial_puts(char *str, int len);
  42787. +unsigned long serial_baud_rate(void);
  42788. +
  42789. +/* Prototypes for functions defined in amiga_sysdep.c */
  42790. +extern int selecting;
  42791. +
  42792. +int set_exclusive_use(int fd);
  42793. +int sys_suspend(void);
  42794. +char *get_system_name(void);
  42795. +char *expand_path(char *path, char *buf, int len);
  42796. +int syms_of_amiga(void);
  42797. +void cleanup_amiga(void);
  42798. +void amiga_undump_reinit(void);
  42799. +void *early_xmalloc(long size);
  42800. +void *early_xrealloc(void *old, long size);
  42801. +
  42802. +/* Failure stuff */
  42803. +void wbmessage(char *msg);
  42804. +void fail(char *cause);
  42805. +void fail_nomem(void);
  42806. +void _fail_internal(char *file, int line);
  42807. +#define fail_internal() _fail_internal(__FILE__, __LINE__);
  42808. +enum exit_method { use_exit, use_xcexit, use_safe };
  42809. +extern enum exit_method amiga_fail_exit;
  42810. +
  42811. +#define MALLOC_HUNK_SIZE 400000 /* Default malloc hunk size */
  42812. +extern long malloc_hunk_size; /* Amount of memory malloc'ed by a to-be-dumped emacs */
  42813. +extern long malloc_bytes_used;    /* Amount of this hunk actually used */
  42814. +extern long far pre_alloc;    /* amount of memory to reserve for emacs */
  42815. +extern int puresize;        /* Size of pure hunk */
  42816. +
  42817. +/* Various special values used to find the beginning & end of the text, data,
  42818. +   bss and malloc segments. */
  42819. +extern int first_data, last_data, first_bss, last_bss;
  42820. +extern void first_function(), last_function();
  42821. +extern char *malloc_hunk;
  42822. +extern int amiga_initialized;    /* True once Emacs has been undumped or initialised */
  42823. +struct mem_header        /* sizeof() must be multiple of 4 ! */
  42824. +{
  42825. +    struct mem_header *next, *prev;
  42826. +    long size;
  42827. +    /* Data follows */
  42828. +};
  42829. +extern struct mem_header *free_list;
  42830. +
  42831. +
  42832. +/* Prototypes for functions defined in amiga_term.c */
  42833. +int amiga_term_init(void);
  42834. +
  42835. +#define AMIGASEQ 256 /* When passed to enque, insert the Amiga sequence introducer
  42836. +                C-x C-^ */
  42837. +
  42838. +/* Prototypes for functions defined in amiga_unix.c */
  42839. +void MemCleanup(void);
  42840. +void *malloc(unsigned int size);
  42841. +void free(void *p);
  42842. +void *calloc(unsigned int, unsigned int);
  42843. +void *realloc(void *p, unsigned int size);
  42844. +void emacs_malloc_init(void);
  42845. diff -rup --new-file baseline/fsf/emacs/src/amiga_clipboard.c amiga/fsf/emacs/src/amiga_clipboard.c
  42846. --- baseline/fsf/emacs/src/amiga_clipboard.c    Wed Dec 31 17:00:00 1969
  42847. +++ amiga/fsf/emacs/src/amiga_clipboard.c    Sat Sep 28 00:00:00 1996
  42848. @@ -0,0 +1,249 @@
  42849. +/* Amiga clipboard support
  42850. +   Copyright (C) 1994 Free Software Foundation, Inc.
  42851. +
  42852. +This file is part of GNU Emacs.
  42853. +
  42854. +GNU Emacs is free software; you can redistribute it and/or modify
  42855. +it under the terms of the GNU General Public License as published by
  42856. +the Free Software Foundation; either version 2, or (at your option)
  42857. +any later version.
  42858. +
  42859. +GNU Emacs is distributed in the hope that it will be useful,
  42860. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  42861. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  42862. +GNU General Public License for more details.
  42863. +
  42864. +You should have received a copy of the GNU General Public License
  42865. +along with GNU Emacs; see the file COPYING.  If not, write to
  42866. +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  42867. +
  42868. +/* CHFIXME: check if this file is uptodate */
  42869. +
  42870. +#include "config.h"
  42871. +#include "lisp.h"
  42872. +#include "termchar.h"
  42873. +#include "amiga.h"
  42874. +
  42875. +#include <stdio.h>
  42876. +#include <internal/devices.h>
  42877. +
  42878. +#undef LONGBITS
  42879. +
  42880. +#include <exec/types.h>
  42881. +#include <exec/io.h>
  42882. +#include <devices/clipboard.h>
  42883. +#include <libraries/iffparse.h>
  42884. +#include <utility/hooks.h>
  42885. +
  42886. +#include <proto/exec.h>
  42887. +#include <proto/iffparse.h>
  42888. +
  42889. +#ifdef USE_PROTOS
  42890. +#include "protos.h"
  42891. +#endif
  42892. +
  42893. +#define  ID_FTXT    MAKE_ID('F','T','X','T')
  42894. +#define  ID_CHRS    MAKE_ID('C','H','R','S')
  42895. +
  42896. +/*
  42897. + * Text error messages for possible IFFERR_#? returns from various
  42898. + * IFF routines.  To get the index into this array, take your IFFERR code,
  42899. + * negate it, and subtract one.
  42900. + *  idx = -error - 1;
  42901. + */
  42902. +static char *far ifferrormsgs[] = {
  42903. +    "End of file (not an error).",
  42904. +    "End of context (not an error).",
  42905. +    "No lexical scope.",
  42906. +    "Insufficient memory.",
  42907. +    "Stream read error.",
  42908. +    "Stream write error.",
  42909. +    "Stream seek error.",
  42910. +    "File is corrupt.",
  42911. +    "IFF syntax error.",
  42912. +    "Not an IFF file.",
  42913. +    "Required call-back hook missing.",
  42914. +    "Return to client.  You should never see this."
  42915. +};
  42916. +
  42917. +Lisp_Object amiga_new_clip;
  42918. +static struct IFFHandle *far iff;
  42919. +struct Library *IFFParseBase;
  42920. +
  42921. +static struct IOClipReq *far ClipRequest;
  42922. +static struct Hook cliphook;
  42923. +
  42924. +/* added __interrupt flag this disables stack checking for this function
  42925. + * so we can compile with stack checking on.  -ch3/19/93. */
  42926. +static ULONG __saveds __asm __interrupt
  42927. +clip_change(    register __a0 struct Hook    *hook,
  42928. +        register __a2 VOID        *object,
  42929. +        register __a1 ULONG        *message )
  42930. +{
  42931. +    amiga_new_clip = 1;
  42932. +    return 0;
  42933. +}
  42934. +
  42935. +static Lisp_Object clip_unwind(Lisp_Object dummy)
  42936. +{
  42937. +    CloseIFF (iff);
  42938. +    CloseClipboard ((struct ClipboardHandle *) iff->iff_Stream);
  42939. +
  42940. +    return Qnil;
  42941. +}
  42942. +
  42943. +static int clip_protect(void)
  42944. +{
  42945. +    int count = specpdl_ptr - specpdl;
  42946. +
  42947. +    record_unwind_protect(clip_unwind, Qnil);
  42948. +
  42949. +    return count;
  42950. +}
  42951. +
  42952. +static long clip_check(long err)
  42953. +{
  42954. +    if(err) error ("Clipboard IO failed, error %ld: %s\n",
  42955. +           err, ifferrormsgs[-err - 1]);
  42956. +    return err;
  42957. +}
  42958. +
  42959. +
  42960. +static void cut(char *str, int size)
  42961. +{
  42962. +    int count;
  42963. +
  42964. +    if (!(iff->iff_Stream = (ULONG) OpenClipboard (0)))
  42965. +    error ("Clipboard open failed.");
  42966. +
  42967. +    count = clip_protect();
  42968. +
  42969. +    /* Open clipbaord */
  42970. +    InitIFFasClip (iff);
  42971. +    clip_check(OpenIFF (iff, IFFF_WRITE));
  42972. +
  42973. +    /* Write data */
  42974. +    clip_check(PushChunk(iff, ID_FTXT, ID_FORM, IFFSIZE_UNKNOWN));
  42975. +    clip_check(PushChunk(iff, 0, ID_CHRS, IFFSIZE_UNKNOWN));
  42976. +    if (WriteChunkBytes(iff, str, size) != size) clip_check(IFFERR_WRITE);
  42977. +    clip_check(PopChunk(iff));
  42978. +    clip_check(PopChunk(iff));
  42979. +
  42980. +    /* & close */
  42981. +    unbind_to (count, Qnil);
  42982. +}
  42983. +
  42984. +DEFUN ("amiga-cut", Famiga_cut, Samiga_cut,
  42985. +  1, 1, 0,
  42986. +  "Copy string into Amiga clipboard.")
  42987. +  (arg)
  42988. +     Lisp_Object arg;
  42989. +{
  42990. +    struct Lisp_String *p;
  42991. +
  42992. +    CHECK_STRING (arg, 0);
  42993. +
  42994. +    p = XSTRING (arg);
  42995. +    cut(p->data, p->size);
  42996. +
  42997. +    return Qnil;
  42998. +}
  42999. +
  43000. +DEFUN ("amiga-paste", Famiga_paste, Samiga_paste,
  43001. +  0, 0, 0,
  43002. +  "Returns text currently in the Amiga clipboard, or NIL if there is none.")
  43003. +  ()
  43004. +{
  43005. +    long err = 0;
  43006. +    Lisp_Object result = Qnil;
  43007. +    struct ContextNode  *cn;
  43008. +    int count;
  43009. +
  43010. +    if (!(iff->iff_Stream = (ULONG) OpenClipboard (0)))
  43011. +    error ("Clipboard open failed.");
  43012. +
  43013. +    count = clip_protect();
  43014. +
  43015. +    /* Open clipbaord */
  43016. +    InitIFFasClip (iff);
  43017. +    clip_check(OpenIFF (iff, IFFF_READ));
  43018. +    clip_check(StopChunk(iff, ID_FTXT, ID_CHRS));
  43019. +
  43020. +    /* Find the first FTXT CHRS chunks */
  43021. +    while (result == Qnil)
  43022. +    {
  43023. +    long err = ParseIFF(iff, IFFPARSE_SCAN);
  43024. +
  43025. +    if (err == IFFERR_EOC) continue; /* enter next context */
  43026. +    else if (err == IFFERR_EOF) break;
  43027. +    else clip_check(err);
  43028. +
  43029. +    /* We only asked to stop at FTXT CHRS chunks
  43030. +     * If no error we've hit a stop chunk
  43031. +     * Read the CHRS chunk data
  43032. +     */
  43033. +    cn = CurrentChunk(iff);
  43034. +
  43035. +    if ((cn) && (cn->cn_Type == ID_FTXT) && (cn->cn_ID == ID_CHRS))
  43036. +    {
  43037. +        int size = cn->cn_Size, rlen;
  43038. +
  43039. +        result = make_string("", size);
  43040. +
  43041. +        if ((rlen = ReadChunkBytes(iff, XSTRING (result)->data, size)) != size)
  43042. +        if (rlen < 0) clip_check(rlen);
  43043. +        else clip_check(IFFERR_EOC);
  43044. +    }
  43045. +    }
  43046. +    unbind_to (count, Qnil);
  43047. +
  43048. +    return result;
  43049. +}
  43050. +
  43051. +void syms_of_amiga_clipboard(void)
  43052. +{
  43053. +    DEFVAR_BOOL ("amiga-new-clip", &amiga_new_clip,
  43054. +         "Set to t every time a new clip is put in the Amiga clipboard");
  43055. +    amiga_new_clip = 0;
  43056. +
  43057. +    defsubr (&Samiga_cut);
  43058. +    defsubr (&Samiga_paste);
  43059. +}
  43060. +
  43061. +void early_clipboard(void)
  43062. +{
  43063. +    IFFParseBase = 0;
  43064. +}
  43065. +
  43066. +void init_clipboard(void)
  43067. +{
  43068. +    /* Initialise IFF for clipboard */
  43069. +    if (!(IFFParseBase = OpenLibrary("iffparse.library", 0)))
  43070. +      _fail("iffparse.library is required");
  43071. +    if (!(iff = AllocIFF())) no_memory();
  43072. +
  43073. +    ClipRequest = (struct IOClipReq *)
  43074. +    _device_open("clipboard.device", 0L, 0L, 0L, 0, sizeof(struct IOClipReq));
  43075. +    if (!ClipRequest) _fail("clipboard.device missing !?");
  43076. +
  43077. +    cliphook.h_Entry = (ULONG (*)())clip_change;
  43078. +    ClipRequest->io_Command = CBD_CHANGEHOOK;
  43079. +    ClipRequest->io_Length = 1; /* install */
  43080. +    ClipRequest->io_Data = (APTR)&cliphook;
  43081. +    DoIO((struct IORequest *)ClipRequest);
  43082. +}
  43083. +
  43084. +void cleanup_clipboard(void)
  43085. +{
  43086. +    if (ClipRequest)
  43087. +    {
  43088. +    cliphook.h_Entry = (ULONG (*)())clip_change;
  43089. +    ClipRequest->io_Command = CBD_CHANGEHOOK;
  43090. +    ClipRequest->io_Length = 0; /* remove */
  43091. +    ClipRequest->io_Data = (APTR)&cliphook;
  43092. +    DoIO((struct IORequest *)ClipRequest);
  43093. +    }
  43094. +    if (iff) FreeIFF(iff);
  43095. +    if (IFFParseBase) CloseLibrary(IFFParseBase);
  43096. +    _device_close((struct IORequest *)ClipRequest);
  43097. +}
  43098. diff -rup --new-file baseline/fsf/emacs/src/amiga_clipboard_protos.h amiga/fsf/emacs/src/amiga_clipboard_protos.h
  43099. --- baseline/fsf/emacs/src/amiga_clipboard_protos.h    Wed Dec 31 17:00:00 1969
  43100. +++ amiga/fsf/emacs/src/amiga_clipboard_protos.h    Sat Sep 28 00:00:00 1996
  43101. @@ -0,0 +1,42 @@
  43102. +/* Prototypes for functions defined in
  43103. +amiga_clipboard.c
  43104. + */
  43105. +
  43106. +extern char * __far ifferrormsgs[12];
  43107. +
  43108. +extern int amiga_new_clip;
  43109. +
  43110. +extern struct IFFHandle * __far iff;
  43111. +
  43112. +extern struct Library * IFFParseBase;
  43113. +
  43114. +extern struct IOClipReq * __far ClipRequest;
  43115. +
  43116. +extern struct Hook cliphook;
  43117. +
  43118. +unsigned long __asm __interrupt __saveds clip_change(register __a0 struct Hook * , register __a2 void * , register __a1 unsigned long * );
  43119. +
  43120. +int clip_unwind(int );
  43121. +
  43122. +int clip_protect(void);
  43123. +
  43124. +long clip_check(long );
  43125. +
  43126. +void cut(char * , int );
  43127. +
  43128. +extern struct Lisp_Subr Samiga_cut;
  43129. +
  43130. +int Famiga_cut(int );
  43131. +
  43132. +extern struct Lisp_Subr Samiga_paste;
  43133. +
  43134. +int Famiga_paste(void);
  43135. +
  43136. +void syms_of_amiga_clipboard(void);
  43137. +
  43138. +void early_clipboard(void);
  43139. +
  43140. +void init_clipboard(void);
  43141. +
  43142. +void cleanup_clipboard(void);
  43143. +
  43144. diff -rup --new-file baseline/fsf/emacs/src/amiga_data.c amiga/fsf/emacs/src/amiga_data.c
  43145. --- baseline/fsf/emacs/src/amiga_data.c    Wed Dec 31 17:00:00 1969
  43146. +++ amiga/fsf/emacs/src/amiga_data.c    Sat Sep 28 00:00:00 1996
  43147. @@ -0,0 +1 @@
  43148. +/* Declarations of data that should not be squashed by the dump routine */
  43149. diff -rup --new-file baseline/fsf/emacs/src/amiga_dump.c amiga/fsf/emacs/src/amiga_dump.c
  43150. --- baseline/fsf/emacs/src/amiga_dump.c    Wed Dec 31 17:00:00 1969
  43151. +++ amiga/fsf/emacs/src/amiga_dump.c    Sat Sep 28 00:00:00 1996
  43152. @@ -0,0 +1,1529 @@
  43153. +#include <exec/types.h>
  43154. +#include <fcntl.h>
  43155. +#include <stdio.h>
  43156. +#include <assert.h>
  43157. +#include <proto/dos.h>
  43158. +#include <setjmp.h>
  43159. +#include <internal/messages.h>
  43160. +#include "config.h"
  43161. +#include "lisp.h"
  43162. +#include "buffer.h"
  43163. +#include "regex.h"
  43164. +#include "amiga.h"
  43165. +#include "dispextern.h"
  43166. +#include "termchar.h"
  43167. +#include "paths.h"
  43168. +#include "frame.h"
  43169. +
  43170. +#ifdef USE_PROTOS
  43171. +#include "protos.h"
  43172. +#endif
  43173. +
  43174. +#define RANGE(ptr, s, e) ((char *)ptr >= (char *)s && (char *)ptr < (char *)e)
  43175. +#define HUNK_POS (VALBITS - 3)
  43176. +#define HUNK_MASK (7 << HUNK_POS)
  43177. +#define HUNK_CODE (0 << HUNK_POS)
  43178. +#define HUNK_DATA (1 << HUNK_POS)
  43179. +#define HUNK_BSS (2 << HUNK_POS)
  43180. +#define HUNK_MALLOC (3 << HUNK_POS)
  43181. +#define HUNK_PURE (4 << HUNK_POS)
  43182. +#define ARRAY_MARK_FLAG ((MARKBIT >> 1) & ~MARKBIT)
  43183. +
  43184. +void *far first_fn = first_function, *far last_fn = last_function;
  43185. +
  43186. +/* alloc.c */
  43187. +extern int *pure, puresize;
  43188. +extern struct gcpro *gcprolist;
  43189. +extern Lisp_Object *staticvec[];
  43190. +extern int staticidx;
  43191. +extern struct cons_block *cons_block;
  43192. +extern struct Lisp_Cons *cons_free_list;
  43193. +extern struct Lisp_Vector *all_vectors;
  43194. +extern struct symbol_block *symbol_block;
  43195. +extern struct Lisp_Symbol *symbol_free_list;
  43196. +extern struct marker_block *marker_block;
  43197. +extern struct Lisp_Marker *marker_free_list;
  43198. +extern struct interval_block *interval_block;
  43199. +extern INTERVAL interval_free_list;
  43200. +struct string_block_head
  43201. +  {
  43202. +    struct string_block_head *next, *prev;
  43203. +    int pos;
  43204. +  };
  43205. +struct string_block
  43206. +  {
  43207. +    struct string_block *next, *prev;
  43208. +#if 0 /* not needed */
  43209. +    int pos;
  43210. +    char chars[STRING_BLOCK_SIZE];
  43211. +#endif
  43212. +  };
  43213. +extern struct string_block *current_string_block;
  43214. +extern struct string_block *first_string_block;
  43215. +extern struct string_block *large_string_blocks;
  43216. +#ifdef LISP_FLOAT_TYPE
  43217. +extern struct float_block *float_block;
  43218. +extern struct Lisp_Float *float_free_list;
  43219. +#endif /* LISP_FLOAT_TYPE */
  43220. +
  43221. +struct backtrace /* see eval.c or alloc.c */
  43222. +  {
  43223. +    struct backtrace *next;
  43224. +    Lisp_Object *function;
  43225. +    Lisp_Object *args;    /* Points to vector of args. */
  43226. +    int nargs;        /* Length of vector.
  43227. +               If nargs is UNEVALLED, args points to slot holding
  43228. +               list of unevalled args */
  43229. +    char evalargs;
  43230. +    /* Nonzero means call value of debugger when done with this operation. */
  43231. +    char debug_on_exit;
  43232. +  };
  43233. +extern struct backtrace *backtrace_list;
  43234. +struct catchtag
  43235. +  {
  43236. +    Lisp_Object tag;
  43237. +    Lisp_Object val;
  43238. +    struct catchtag *next;
  43239. +    struct gcpro *gcpro;
  43240. +    jmp_buf jmp;
  43241. +    struct backtrace *backlist;
  43242. +    struct handler *handlerlist;
  43243. +    int lisp_eval_depth;
  43244. +    int pdlcount;
  43245. +    int poll_suppress_count;
  43246. +  };
  43247. +extern struct catchtag *catchlist;
  43248. +extern char *stack_copy;
  43249. +
  43250. +extern int *kbd_macro_buffer;
  43251. +extern char *read_buffer, *chars_wasted, *copybuf;
  43252. +#if 0
  43253. +extern struct minibuf_save_data *minibuf_save_vector;
  43254. +#endif
  43255. +extern struct re_pattern_buffer searchbuf;
  43256. +#if 0 /* CHFIXME */
  43257. +extern int *ILcost, *DLcost, *ILncost, *DLncost;
  43258. +#endif
  43259. +#if 0
  43260. +extern Lisp_Object MouseMap, global_map, Vglobal_map, Vesc_map, Vctl_x_map;
  43261. +#else
  43262. +extern Lisp_Object global_map, meta_map, control_x_map;
  43263. +#endif
  43264. +extern Lisp_Object selected_window;
  43265. +
  43266. +extern char *callint_argfuns[];
  43267. +
  43268. +/* lread.c/init_obarray variables */
  43269. +extern Lisp_Object Qvariable_documentation, Vpurify_flag;
  43270. +
  43271. +/* eval.c/init_eval_once variables */
  43272. +/* specpdl */
  43273. +
  43274. +/* syntax.c/init_syntax_once */
  43275. +/* */
  43276. +
  43277. +/* window.c variables */
  43278. +/* */
  43279. +
  43280. +
  43281. +/* buffer.c */
  43282. +/* -> buffer.h */
  43283. +
  43284. +/* dired.c */
  43285. +extern Lisp_Object Qdirectory_files, Qfile_name_completion,
  43286. +    Qfile_name_all_completions, Qfile_attributes;
  43287. +
  43288. +/* fileio.c */
  43289. +extern Lisp_Object Qset_visited_file_modtime;
  43290. +
  43291. +/* process.c */
  43292. +/* extern Lisp_Object stream_process; CHFIXME activate HAVE_SOCKETS ?*/
  43293. +
  43294. +/* editfns.c */
  43295. +extern char *message_text;
  43296. +
  43297. +/* regex variables */
  43298. +typedef unsigned char *fail_stack_elt_t;
  43299. +typedef struct
  43300. +{
  43301. +  fail_stack_elt_t *stack;
  43302. +  unsigned size;
  43303. +  unsigned avail;            /* Offset of next open position.  */
  43304. +} fail_stack_type;
  43305. +typedef short register_info_type;
  43306. +
  43307. +extern fail_stack_type fail_stack;
  43308. +extern const char **     regstart, **     regend;
  43309. +extern const char ** old_regstart, ** old_regend;
  43310. +extern const char **best_regstart, **best_regend;
  43311. +extern register_info_type *reg_info; 
  43312. +extern const char **reg_dummy;
  43313. +extern void *reg_info_dummy;
  43314. +
  43315. +/* keyboard.c/variables CHFIXME: need to be checked on version change */
  43316. +#define HEAD_TABLE_SIZE 3
  43317. +#define SCROLL_BAR_PARTS_SIZE 3
  43318. +struct event_head {
  43319. +  Lisp_Object *var;
  43320. +  char *name;
  43321. +  Lisp_Object *kind;
  43322. +};
  43323. +
  43324. +extern struct event_head head_table[];
  43325. +extern Lisp_Object *scroll_bar_parts[];
  43326. +extern struct input_event *kbd_fetch_ptr;
  43327. +extern struct input_event volatile *kbd_store_ptr;
  43328. +
  43329. +/* search.c */
  43330. +extern struct re_registers search_regs;
  43331. +
  43332. +#if 0
  43333. +#define DBUG /* dump debug */
  43334. +#endif
  43335. +
  43336. +static char *dump_error_example[] =
  43337. +{
  43338. +    "dump-error-example-1",
  43339. +    "dump-error-example-2"
  43340. +};
  43341. +
  43342. +static void cpr() {} /* CHFIXME */
  43343. +
  43344. +static void *dump_malloc(int size)
  43345. +{
  43346. +  void *new = malloc(size);
  43347. +
  43348. +  if (!new) no_memory();
  43349. +
  43350. +  return new;
  43351. +}
  43352. +
  43353. +static void bailout(char *fn)
  43354. +{
  43355. +  if (fn) _message("%s isn't a dump file for this version of Emacs, aborting", fn);
  43356. +  else _message("Dump file isn't for this version of Emacs, aborting");
  43357. +
  43358. +  /* We are in deep trouble, as all our variables are potentially corrupt */
  43359. +  /* Therefore, no cleanup is possible */
  43360. +  /* Remove cleanup routines */
  43361. +  onexit(0);
  43362. +  /* However, the library & the memory allocation should be ok, so
  43363. +     we can exit reasonably */
  43364. +  _fail("Some system resources may have been lost");
  43365. +}
  43366. +
  43367. +void print_ranges()
  43368. +{
  43369. +#if 0
  43370. +    _message("HUNK_CODE  : %08lx .. %08lx (%08lx)",
  43371. +         first_fn, last_fn, (char *) last_fn - (char *) first_fn);
  43372. +    _message("HUNK_DATA  : %08lx .. %08lx (%08lx)",
  43373. +         &first_data, &last_data, (char *) &last_data - (char *) &first_data);
  43374. +    _message("HUNK_BSS   : %08lx .. %08lx (%08lx)",
  43375. +         &first_bss, &last_bss, (char *) &last_bss - (char *) &first_bss);
  43376. +    _message("HUNK_PURE  : %08lx .. %08lx (%08lx)"
  43377. +         , pure, (char *)pure + puresize, puresize);
  43378. +    _message("HUNK_MALLOC: %08lx .. %08lx (%08lx)",
  43379. +         malloc_hunk, malloc_hunk + malloc_hunk_size, malloc_hunk_size);
  43380. +#endif
  43381. +}
  43382. +
  43383. +/*
  43384. + * ignore:
  43385. + *    stack_bottom, IconBase, last_marked (array), interval_block_index (int)
  43386. + *      gcprolist (currently?),
  43387. + *    pending (list), returned (list)
  43388. + */
  43389. +
  43390. +int
  43391. +check_ignore(void *x)
  43392. +{
  43393. +#ifndef USE_PROTOS
  43394. +    extern int IconBase, IFFParseBase, interval_block_index, instream, cliphook;
  43395. +#else
  43396. +    extern int interval_block_index;
  43397. +#endif
  43398. +    
  43399. +    int ign = 0;
  43400. +    if((x == (void *) &IconBase)
  43401. +       || (x == (void *) &stack_bottom)
  43402. +/*        || (x == (void *) &interval_block_index) */
  43403. +       || (x == (void *) &pure)
  43404. +       || (x == (void *) &gcprolist)
  43405. +       || (x == (void *) &malloc_hunk)
  43406. +       || (x == (void *) &IFFParseBase)
  43407. +       || (x == (void *) &instream)
  43408. +       || (x == (void *) &cbuffer_pos)
  43409. +       || (x == (void *) &cliphook)
  43410. +       || (x == (void *) ((int *)&cliphook+1))
  43411. +       || (x == (void *) ((int *)&cliphook+2))
  43412. +       || (x == (void *) &specpdl_ptr)
  43413. +       || (x == (void *) &handlerlist) /* CHFIXME: ok? */
  43414. +       || (x == (void *) &catchlist) /* CHFIXME: ok? */
  43415. +       || (x == (void *) &backtrace_list) /* CHFIXME: ok? */
  43416. +       )
  43417. +    ign = 1;
  43418. +    
  43419. +    return ign;
  43420. +}
  43421. +
  43422. +/*
  43423. + *  test for candidates which may need extra handling on dump
  43424. + */
  43425. +void
  43426. +check_cand(char *s, void *start, void *end)
  43427. +{
  43428. +    unsigned int *ip, *starthit = NULL, *lasthit = NULL;
  43429. +    unsigned short int *is;
  43430. +    int range = 0;
  43431. +    int de = ((unsigned)dump_error_example[0] >> 24);
  43432. +          
  43433. +#define FIRST ((char*) &first_data) /* first symbol in data hunk */
  43434. +
  43435. +    for(is = start; (char *)is < (char *)end; is++)
  43436. +    {
  43437. +    ip = (unsigned int *) is;
  43438. +    if((((*ip >> 24) == 0x08)
  43439. +        || (*ip >> 24) == de)
  43440. +       && ! check_ignore(ip))
  43441. +    {
  43442. +        if(lasthit+1 == ip)
  43443. +        {
  43444. +        lasthit++;
  43445. +        range = 1;
  43446. +        }
  43447. +        else
  43448. +        {
  43449. +        if(range)
  43450. +        {
  43451. +            fprintf(stderr,"%s: 0x%08lx .. 0x%08lx (0x%08lx)\n",
  43452. +                s,
  43453. +                (char *)starthit-FIRST,
  43454. +                (char *)lasthit-FIRST,
  43455. +                (char*)lasthit-(char*)starthit);
  43456. +            range = 0;
  43457. +        }
  43458. +        else
  43459. +        {
  43460. +            starthit = lasthit = ip;
  43461. +        }
  43462. +        }
  43463. +    }
  43464. +    else
  43465. +    {
  43466. +        if((unsigned short *) lasthit+1 != is)
  43467. +        {
  43468. +        if(range)
  43469. +        {
  43470. +            fprintf(stderr,"%s: 0x%08lx .. 0x%08lx (0x%08lx)\n",
  43471. +                s,
  43472. +                (char *)starthit-FIRST,
  43473. +                (char *)lasthit-FIRST,
  43474. +                (char*)lasthit-(char*)starthit);
  43475. +        }
  43476. +        else if(lasthit)
  43477. +        {
  43478. +            fprintf(stderr,"%s: 0x%08lx (0x%08lx)\n", s, (char *)lasthit-FIRST, *lasthit);
  43479. +        }
  43480. +        range = 0;
  43481. +        lasthit = NULL;
  43482. +        }
  43483. +    }
  43484. +        
  43485. +    }
  43486. +    if(range)
  43487. +    {
  43488. +    fprintf(stderr,"%s: 0x%08lx .. 0x%08lx (0x%08lx)\n",
  43489. +        s,
  43490. +        (char *)starthit-FIRST,
  43491. +        (char *)lasthit-FIRST,
  43492. +        (char*)lasthit-(char*)starthit);
  43493. +    }
  43494. +    else if(lasthit)
  43495. +    {
  43496. +    fprintf(stderr,"%s: 0x%08lx\n (0x%08ls)", s, (char *)lasthit-FIRST, *lasthit);
  43497. +    }
  43498. +}
  43499. +
  43500. +void
  43501. +check_cands(void)
  43502. +{
  43503. +    fprintf(stderr,"Possible candidates for FAR or amiga_dump\n");
  43504. +    check_cand("DATA", &first_data, &last_data);
  43505. +    check_cand("BSS ", &first_bss, &last_bss);
  43506. +}
  43507. +    
  43508. +
  43509. +#ifdef DBUG
  43510. +static int mcol = 0;
  43511. +static int mrow = 0;
  43512. +static FILE *mfile;
  43513. +static char spaces[] = "                                                                                                                                                                   ";
  43514. +static mtresh = 0;
  43515. +void MInit(char *s)
  43516. +{
  43517. +    mcol = 0;
  43518. +    mrow = 0;
  43519. +    mtresh = 0;
  43520. +    mfile = fopen(s,"a");
  43521. +    fprintf(mfile,"\n***START***\n");
  43522. +}
  43523. +void MClean()
  43524. +{
  43525. +    fprintf(mfile,"\n**END**\n");
  43526. +    fclose(mfile);
  43527. +}
  43528. +#define P(x)
  43529. +void MEnter(char *s)
  43530. +{
  43531. +    if(mtresh > 100) return;
  43532. +#if 0
  43533. +    fwrite(spaces, mcol, 1, mfile);
  43534. +#endif
  43535. +    fprintf(mfile, "(%d) %s\n", mcol, s);
  43536. +    mcol += 1;
  43537. +}
  43538. +void  M(char *s)
  43539. +{
  43540. +    if(mtresh > 100) return;
  43541. +    mtresh++;
  43542. +#if 0
  43543. +    if(mcol)
  43544. +    fwrite(spaces, mcol, 1, mfile);
  43545. +#endif
  43546. +    fprintf(mfile, "(%d) %s\n", mcol, s);
  43547. +}
  43548. +void MLeave(char *s)
  43549. +{
  43550. +    if(mtresh > 100) return;
  43551. +
  43552. +    mcol -= 1;
  43553. +#if 0
  43554. +    if(mcol)
  43555. +    fwrite(spaces, mcol, 1, mfile);
  43556. +#endif
  43557. +    fprintf(mfile, "(%d) %s\n", mcol, s);
  43558. +}
  43559. +#else
  43560. +#define MInit(x)
  43561. +#define MClean()
  43562. +#define MEnter(x)
  43563. +#define M(x)
  43564. +#define P(x)
  43565. +#define MLeave(x)
  43566. +#endif
  43567. +
  43568. +static void *hunk_pointer(void *ptr)
  43569. +{
  43570. +    if (!ptr)
  43571. +    {
  43572. +    P("P0");
  43573. +    return ptr;
  43574. +    }
  43575. +
  43576. +#if 1 /* CHFIXME */
  43577. +    if(RANGE(ptr, first_fn, last_fn) && ((char *)ptr - (char *)first_fn) == 0x21c)
  43578. +    cpr();
  43579. +#endif
  43580. +    
  43581. +    if (RANGE(ptr, first_fn, last_fn))
  43582. +    {
  43583. +    P("PC");
  43584. +    return (void *)(HUNK_CODE | (char *)ptr - (char *)first_fn);
  43585. +    }
  43586. +    else if (RANGE(ptr, &first_data, &last_data))
  43587. +    {
  43588. +    P("PD");
  43589. +    return (void *)(HUNK_DATA | (char *)ptr - (char *)&first_data);
  43590. +    }
  43591. +    else if (RANGE(ptr, &first_bss, &last_bss))
  43592. +    {
  43593. +    P("PB");
  43594. +    return (void *)(HUNK_BSS | (char *)ptr - (char *)&first_bss);
  43595. +    }
  43596. +    else if (RANGE(ptr, malloc_hunk, malloc_hunk + malloc_hunk_size))
  43597. +    {
  43598. +    P("PM");
  43599. +    return (void *)(HUNK_MALLOC | (char *)ptr - malloc_hunk);
  43600. +    }
  43601. +    else if (RANGE(ptr, pure, (char *)pure + puresize))
  43602. +    {
  43603. +    P("PP");
  43604. +    return (void *)(HUNK_PURE | (char *)ptr - (char *)pure);
  43605. +    }
  43606. +    else
  43607. +    {
  43608. +    _message("hunk_pointer: cannot locate pointer 0x%08lx", ptr);
  43609. +    print_ranges();
  43610. +    bailout(0);
  43611. +    }
  43612. +}
  43613. +
  43614. +static Lisp_Object hunk_lispptr(Lisp_Object *objptr, Lisp_Object val)
  43615. +{
  43616. +    int type = val & ~VALMASK;
  43617. +    void *ptr = (void *)XPNTR(val);
  43618. +
  43619. +#if 1 /* CHFIXME */
  43620. +    if(RANGE(ptr, first_fn, last_fn) && ((char *)ptr - (char *)first_fn) == 0x21c)
  43621. +    cpr();
  43622. +#endif
  43623. +    
  43624. +    if (RANGE(ptr, first_fn, last_fn))
  43625. +    {
  43626. +    M("LC");
  43627. +    return type | HUNK_CODE | (char *)ptr - (char *)first_fn;
  43628. +    }
  43629. +    else if (RANGE(ptr, &first_data, &last_data))
  43630. +    {
  43631. +    M("LD");
  43632. +    return type | HUNK_DATA | (char *)ptr - (char *)&first_data;
  43633. +    }
  43634. +    else if (RANGE(ptr, &first_bss, &last_bss))
  43635. +    {
  43636. +    M("LB");
  43637. +    return type | HUNK_BSS | (char *)ptr - (char *)&first_bss;
  43638. +    }
  43639. +    else if (RANGE(ptr, pure, (char *)pure + puresize))
  43640. +    {
  43641. +    M("LP");
  43642. +    return type | HUNK_PURE | (char *)ptr - (char *)pure;
  43643. +    }
  43644. +    else if (RANGE(ptr, malloc_hunk, malloc_hunk + malloc_hunk_size))
  43645. +    {
  43646. +    M("LM");
  43647. +    return type | HUNK_MALLOC | (char *)ptr - malloc_hunk;
  43648. +    }
  43649. +    else 
  43650. +    {
  43651. +    _message("hunk_pointer: cannot locate pointer 0x%08lx", ptr);
  43652. +    print_ranges();
  43653. +    bailout(0);
  43654. +    }
  43655. +}
  43656. +
  43657. +static void patch_pointers ();
  43658. +
  43659. +static void patch_buffer (buf)
  43660. +     Lisp_Object buf;
  43661. +{
  43662. +  Lisp_Object tem;
  43663. +  register struct buffer *buffer = XBUFFER (buf);
  43664. +  register Lisp_Object *ptr;
  43665. +
  43666. +  buffer->text.beg = hunk_pointer (buffer->text.beg);
  43667. +  patch_pointers (&buffer->markers);
  43668. +
  43669. +  /* This is the buffer's markbit */
  43670. +  patch_pointers (&buffer->name);
  43671. +  assert(!XMARKBIT(&buffer->name)); /* CHFIXME */
  43672. +  XMARK (buffer->name);
  43673. +
  43674. +  for (ptr = &buffer->name + 1;
  43675. +       (char *)ptr < (char *)buffer + sizeof (struct buffer);
  43676. +       ptr++)
  43677. +    patch_pointers (ptr);
  43678. +}
  43679. +
  43680. +static void patch_pointers (objptr)
  43681. +     Lisp_Object *objptr;
  43682. +{
  43683. +  register Lisp_Object obj;
  43684. +
  43685. +  MEnter("O+");
  43686. + loop:
  43687. +  obj = *objptr;
  43688. +
  43689. + loop2:
  43690. +  XUNMARK (obj);
  43691. +
  43692. +  switch (XGCTYPE (obj))
  43693. +    {
  43694. +    case Lisp_String:
  43695. +    M("O1");
  43696. +    /* CHIXME */
  43697. +      {
  43698. +    register struct Lisp_String *ptr = XSTRING (obj);
  43699. +
  43700. +    if (ptr->size & MARKBIT)
  43701. +      /* A large string. */
  43702. +        _message("Lisp_String case: large_string found!");
  43703. +      }
  43704. +      *objptr = hunk_lispptr(objptr, *objptr);
  43705. +      break;
  43706. +
  43707. +    case Lisp_Vector:
  43708. +    case Lisp_Window:
  43709. +    case Lisp_Process:
  43710. +    case Lisp_Window_Configuration:
  43711. +M("O2");
  43712. +      *objptr = hunk_lispptr(objptr, *objptr);
  43713. +      {
  43714. +    register struct Lisp_Vector *ptr = XVECTOR (obj);
  43715. +    register int size = ptr->size;
  43716. +    struct Lisp_Vector *volatile ptr1 = ptr; /* CHFIXME */
  43717. +    register int i;
  43718. +
  43719. +    if (size & ARRAY_MARK_FLAG) break;   /* Already marked */
  43720. +    ptr->size |= ARRAY_MARK_FLAG; /* Else mark it */
  43721. +    for (i = 0; i < size; i++)     /* and then mark its elements */
  43722. +      patch_pointers (&ptr1->contents[i]);
  43723. +      }
  43724. +      break;
  43725. +
  43726. +    case Lisp_Compiled: /* similar to vector but avoid some recursion */
  43727. +    M("O3");
  43728. +      *objptr = hunk_lispptr(objptr, *objptr);
  43729. +      {
  43730. +    register struct Lisp_Vector *ptr = XVECTOR (obj);
  43731. +    register int size = ptr->size;
  43732. +    struct Lisp_Vector *volatile ptr1 = ptr; /* CHFIXME */
  43733. +    register int i;
  43734. +
  43735. +    if (size & ARRAY_MARK_FLAG) break;   /* Already marked */
  43736. +    ptr->size |= ARRAY_MARK_FLAG; /* Else mark it */
  43737. +    for (i = 0; i < size; i++)     /* and then mark its elements */
  43738. +        if (i != COMPILED_CONSTANTS)
  43739. +        patch_pointers (&ptr1->contents[i]);
  43740. +    objptr = &ptr1->contents[COMPILED_CONSTANTS];
  43741. +
  43742. +    goto loop;
  43743. +      }
  43744. +      break;
  43745. +
  43746. +    case Lisp_Symbol:
  43747. +    M("O4");
  43748. +      *objptr = hunk_lispptr(objptr, *objptr);
  43749. +      {
  43750. +    register struct Lisp_Symbol * volatile ptr = XSYMBOL (obj);
  43751. +    struct Lisp_Symbol *ptrx;
  43752. +
  43753. +    if (XMARKBIT (ptr->plist)) break;
  43754. +    XMARK (ptr->plist);
  43755. +    patch_pointers ((Lisp_Object *) &ptr->value);
  43756. +    patch_pointers (&ptr->function);
  43757. +    patch_pointers (&ptr->plist);
  43758. +    XSETTYPE (*(Lisp_Object *) &ptr->name, Lisp_String);
  43759. +    patch_pointers ((Lisp_Object *) &ptr->name);
  43760. +    objptr = (Lisp_Object *)&ptr->next;
  43761. +    ptr = ptr->next;
  43762. +    if (ptr)
  43763. +      {
  43764. +        ptrx = ptr;        /* Use pf ptrx avoids compiler bug on Sun */
  43765. +        XSETSYMBOL (obj, ptrx);
  43766. +        /* We can't goto loop here because *objptr doesn't contain an
  43767. +           actual Lisp_Object with valid datatype field.  */
  43768. +
  43769. +        goto loop2;
  43770. +      }
  43771. +      }
  43772. +      break;
  43773. +
  43774. +    case Lisp_Marker:
  43775. +    M("O5");
  43776. +    {
  43777. +    struct Lisp_Marker *ptr = XMARKER (obj);
  43778. +
  43779. +    *objptr = hunk_lispptr(objptr, *objptr);
  43780. +    if (XMARKBIT (ptr->chain)) break;
  43781. +    XMARK (ptr->chain);
  43782. +    ptr->buffer = hunk_pointer (ptr->buffer);
  43783. +    patch_pointers (&ptr->chain);
  43784. +    break;
  43785. +    }
  43786. +
  43787. +    case Lisp_Cons:
  43788. +    case Lisp_Buffer_Local_Value:
  43789. +    case Lisp_Some_Buffer_Local_Value:
  43790. +    M("O6");
  43791. +      *objptr = hunk_lispptr(objptr, *objptr);
  43792. +      {
  43793. +    register struct Lisp_Cons *ptr = XCONS (obj);
  43794. +    if (XMARKBIT (ptr->car)) break;
  43795. +    XMARK (ptr->car);
  43796. +    patch_pointers (&ptr->car);
  43797. +    objptr = &XCONS (obj)->cdr;
  43798. +    goto loop;
  43799. +      }
  43800. +
  43801. +    case Lisp_Buffer:
  43802. +    M("O7");
  43803. +      *objptr = hunk_lispptr(objptr, *objptr);
  43804. +      if (!XMARKBIT (XBUFFER (obj)->name))
  43805. +    patch_buffer (obj);
  43806. +      break;
  43807. +
  43808. +    case Lisp_Subr: 
  43809. +    M("O8");
  43810. +    {
  43811. +    struct Lisp_Subr *subr = XSUBR(obj);
  43812. +
  43813. +    *objptr = hunk_lispptr(objptr, *objptr);
  43814. +    if (subr->min_args & 0x8000) break;
  43815. +    subr->min_args |= 0x8000;
  43816. +    subr->function = hunk_pointer(subr->function);
  43817. +    subr->symbol_name = hunk_pointer(subr->symbol_name);
  43818. +    subr->prompt = hunk_pointer(subr->prompt);
  43819. +    if ((long)subr->doc >= 0) /* Make sure that not a doc offset */
  43820. +        subr->doc = hunk_pointer(subr->doc);
  43821. +    break;
  43822. +    }
  43823. +
  43824. +    case Lisp_Int:
  43825. +    case Lisp_Void:
  43826. +    case Lisp_Buffer_Objfwd: break;
  43827. +
  43828. +    case Lisp_Intfwd:
  43829. +    case Lisp_Boolfwd:
  43830. +    case Lisp_Objfwd:
  43831. +    case Lisp_Internal_Stream:
  43832. +      M("O9");
  43833. +      *objptr = hunk_lispptr(objptr, *objptr);
  43834. +    /* Don't bother with Lisp_Buffer_Objfwd,
  43835. +       since all markable slots in current buffer marked anyway.  */
  43836. +    /* Don't need to do Lisp_Objfwd, since the places they point
  43837. +       are protected with staticpro.  */
  43838. +      break;
  43839. +
  43840. +#ifdef LISP_FLOAT_TYPE
  43841. +    case Lisp_Float:
  43842. +      M("OA");
  43843. +      *objptr = hunk_lispptr(objptr, *objptr);
  43844. +      XMARK (XFLOAT (obj)->type);
  43845. +      break;
  43846. +#endif /* LISP_FLOAT_TYPE */
  43847. +    
  43848. +    default:
  43849. +      _message("patch_pointers: unknown XGCTYPE (obj): %ld", XGCTYPE (obj));
  43850. +      abort ();
  43851. +    }
  43852. +  MLeave("O-");
  43853. +}
  43854. +
  43855. +static void patch_chain(void **ptr, int offset)
  43856. +{
  43857. +    while (*ptr)
  43858. +    {
  43859. +    void **next = (void **)((char *)*ptr + offset);
  43860. +
  43861. +    *ptr = hunk_pointer(*ptr);
  43862. +    ptr = next;
  43863. +    }
  43864. +}
  43865. +
  43866. +#define HUNK_LISPPTR(a) a = hunk_lispptr(&a,a)
  43867. +#define HUNK_PTR(a) a = hunk_pointer(a)
  43868. +
  43869. +static void patch(void)
  43870. +{
  43871. +    Lisp_Object LO;
  43872. +    int i;
  43873. +    struct string_block *sptr;
  43874. +    struct buffer *bptr;
  43875. +    struct mem_header *mem;
  43876. +    struct backtrace *backlist;
  43877. +    struct catchtag *catch;
  43878. +    
  43879. +    MInit("MLOG.patch");
  43880. +    print_ranges(); /* CHFIXME */
  43881. +
  43882. +#ifdef DBUG
  43883. +    i = 0;
  43884. +#else
  43885. +    for (i = 0; i < staticidx; i++)
  43886. +#endif
  43887. +    {
  43888. +    if (!XMARKBIT(*staticvec[i]))
  43889. +    {
  43890. +        patch_pointers(staticvec[i]);
  43891. +        XMARK(*staticvec[i]);
  43892. +    }
  43893. +    staticvec[i] = hunk_pointer(staticvec[i]);
  43894. +    }
  43895. +#ifndef DBUG
  43896. +    /* Patch all the pointers normally used before a dump ! */
  43897. +    patch_chain((void **)&cons_block, 0);
  43898. +    patch_chain((void **)&cons_free_list, 0);
  43899. +
  43900. +    patch_chain((void **)&all_vectors, 4);
  43901. +
  43902. +    patch_chain((void **)&symbol_block, 0);
  43903. +    patch_chain((void **)&symbol_free_list, 4);
  43904. +
  43905. +    patch_chain((void **)&marker_block, 0);
  43906. +    patch_chain((void **)&marker_free_list, 4);
  43907. +
  43908. +    patch_chain((void **)&interval_block, 0);
  43909. +    patch_chain((void **)&interval_free_list, 4*sizeof(long));
  43910. +        
  43911. +    /* Strings are lots of fun */
  43912. +    patch_chain((void **)&large_string_blocks, 0);
  43913. +    sptr = first_string_block;
  43914. +    while (sptr)
  43915. +    {
  43916. +    struct string_block *next = sptr->next;
  43917. +
  43918. +    if (sptr->next) HUNK_PTR(sptr->next);
  43919. +    if (sptr->prev) HUNK_PTR(sptr->prev);
  43920. +    sptr = next;
  43921. +    }
  43922. +    HUNK_PTR(first_string_block);
  43923. +    HUNK_PTR(current_string_block);
  43924. +
  43925. +    /* More fun with buffers */
  43926. +    bptr = all_buffers;
  43927. +    if (bptr)
  43928. +    {
  43929. +    while (bptr->next)
  43930. +    {
  43931. +        struct buffer *next = bptr->next;
  43932. +
  43933. +        HUNK_PTR(bptr->next);
  43934. +        bptr = next;
  43935. +    }
  43936. +    }
  43937. +    HUNK_PTR(all_buffers);
  43938. +    HUNK_PTR(current_buffer);
  43939. +
  43940. +#ifdef LISP_FLOAT_TYPE
  43941. +    patch_chain((void **) &float_block, 0);
  43942. +    patch_chain((void **) &float_free_list, 0);
  43943. +#endif /* LISP_FLOAT_TYPE */
  43944. +
  43945. +#if 0 /* CHFIXME needed ? */
  43946. +    /* even more fun with 19.28 backtrace */
  43947. +    for (backlist = backtrace_list; backlist; )
  43948. +    {
  43949. +      struct backtrace *next = backlist->next;
  43950. +      
  43951. +      if (!XMARKBIT (*backlist->function))
  43952. +    {
  43953. +      patch_pointers(backlist->function);
  43954. +      XMARK (*backlist->function);
  43955. +    }
  43956. +      if (backlist->nargs == UNEVALLED || backlist->nargs == MANY)
  43957. +    i = 0;
  43958. +      else
  43959. +    i = backlist->nargs - 1;
  43960. +      for (; i >= 0; i--)
  43961. +    if (!XMARKBIT (backlist->args[i]))
  43962. +      {
  43963. +        patch_pointers(&backlist->args[i]);
  43964. +        XMARK (backlist->args[i]);
  43965. +      }
  43966. +      if(backlist->next) HUNK_PTR(backlist->next);
  43967. +      backlist = next;
  43968. +    }  
  43969. +    HUNK_PTR(backtrace_list);
  43970. +
  43971. +    for (catch = catchlist; catch;)
  43972. +    {
  43973. +      struct catchtag *next = catch->next;
  43974. +    
  43975. +      patch_pointers (&catch->tag);
  43976. +      patch_pointers (&catch->val);
  43977. +      HUNK_PTR(catch->backlist);
  43978. +      HUNK_PTR(catch->handlerlist);
  43979. +
  43980. +      if(catch->next) HUNK_PTR(catch->next);
  43981. +      catch = next;
  43982. +    }
  43983. +    HUNK_PTR(catchlist);
  43984. +#endif
  43985. +    
  43986. +/*     HUNK_PTR(gcprolist); CHFIXME*/
  43987. +    HUNK_PTR(stack_copy);
  43988. +
  43989. +    HUNK_PTR(kbd_macro_buffer);
  43990. +#if 0
  43991. +    HUNK_PTR(minibuf_save_vector);
  43992. +#endif
  43993. +    HUNK_PTR(searchbuf.buffer);
  43994. +    HUNK_PTR(searchbuf.fastmap);
  43995. +    HUNK_PTR(specpdl);
  43996. +    HUNK_PTR(read_buffer);
  43997. +    
  43998. +#if 0 /* CHFIXME */
  43999. +    MouseMap = hunk_lispptr(&MouseMap, MouseMap);
  44000. +#endif
  44001. +    HUNK_LISPPTR( current_global_map );
  44002. +    HUNK_LISPPTR( global_map );
  44003. +    HUNK_LISPPTR( meta_map );
  44004. +    HUNK_LISPPTR( control_x_map );
  44005. +
  44006. +    HUNK_LISPPTR( selected_window );
  44007. +
  44008. +    HUNK_LISPPTR( Qvariable_documentation );
  44009. +
  44010. +#ifndef MULTI_FRAME
  44011. +    /* CHFIXME: use makro */
  44012. +    HUNK_LISPPTR( the_only_frame.root_window );
  44013. +#else
  44014. +    you lose;
  44015. +#endif
  44016. +    
  44017. +    mem = free_list;
  44018. +    HUNK_PTR( free_list );
  44019. +    while (mem)
  44020. +    {
  44021. +    struct mem_header *next = mem->next;
  44022. +
  44023. +    HUNK_PTR( mem->prev );
  44024. +    HUNK_PTR( mem->next );
  44025. +    mem = next;
  44026. +    }
  44027. +
  44028. +    for (i = 0; i <= 4; i++)
  44029. +    HUNK_PTR( callint_argfuns[i] );
  44030. +
  44031. +    HUNK_PTR( fail_stack.stack );
  44032. +    HUNK_PTR( regstart );
  44033. +    HUNK_PTR( regend );
  44034. +    HUNK_PTR( old_regstart );
  44035. +    HUNK_PTR( old_regend );
  44036. +    HUNK_PTR( best_regstart );
  44037. +    HUNK_PTR( best_regend );
  44038. +    HUNK_PTR( reg_info );
  44039. +    HUNK_PTR( reg_dummy );
  44040. +    HUNK_PTR( reg_info_dummy );
  44041. +    
  44042. +    for(i = 0; i < HEAD_TABLE_SIZE; i++)
  44043. +    {
  44044. +    HUNK_PTR( head_table[i].var  );
  44045. +    HUNK_PTR( head_table[i].name );
  44046. +    HUNK_PTR( head_table[i].kind );
  44047. +    }
  44048. +    for(i = 0; i < SCROLL_BAR_PARTS_SIZE; i++)
  44049. +    {
  44050. +    HUNK_PTR( scroll_bar_parts[i] );
  44051. +    }
  44052. +    HUNK_PTR(kbd_fetch_ptr);
  44053. +    HUNK_PTR(kbd_store_ptr);
  44054. +    XSET(LO, Lisp_Buffer, &buffer_local_types);
  44055. +    patch_buffer(LO);
  44056. +    
  44057. +    HUNK_LISPPTR(Qdirectory_files);
  44058. +    HUNK_LISPPTR(Qfile_name_completion);
  44059. +    HUNK_LISPPTR(Qfile_name_all_completions);
  44060. +    HUNK_LISPPTR(Qfile_attributes);
  44061. +    HUNK_LISPPTR(Qset_visited_file_modtime);
  44062. +/*    HUNK_LISPPTR(stream_process);*/
  44063. +
  44064. +    HUNK_PTR(message_text);
  44065. +
  44066. +    /* search.c */
  44067. +    HUNK_PTR(search_regs.start);
  44068. +    HUNK_PTR(search_regs.end);
  44069. +#endif
  44070. +    MClean();
  44071. +    check_cands();
  44072. +}
  44073. +
  44074. +static dump(char *fn)
  44075. +{
  44076. +    BPTR fd;
  44077. +    long size;
  44078. +
  44079. +    fd = Open(fn, MODE_NEWFILE);
  44080. +    if (!fd)
  44081. +      {
  44082. +        static void unpatch(void);
  44083. +
  44084. +        unpatch();
  44085. +        _fail("emacs hasn't been dumped (%s missing)", fn);
  44086. +      }
  44087. +
  44088. +    Write(fd, (char *)&puresize, sizeof puresize);
  44089. +    Write(fd, (char *)&malloc_hunk_size, sizeof malloc_hunk_size);
  44090. +    Write(fd, (char *)&first_data, (char *)&last_data - (char *)&first_data);
  44091. +    Write(fd, (char *)&first_bss, (char *)&last_bss - (char *)&first_bss);
  44092. +    Write(fd, (char *)pure, puresize);
  44093. +    Write(fd, (char *)malloc_hunk, malloc_hunk_size);
  44094. +    Write(fd, (char *)&staticidx, sizeof staticidx);
  44095. +    Write(fd, (char *)staticvec, staticidx * sizeof(Lisp_Object *));
  44096. +    size = (char *)last_fn - (char *)first_fn;
  44097. +    Write(fd, (char *)&size, sizeof size);
  44098. +
  44099. +    Close(fd);
  44100. +}
  44101. +
  44102. +static void *make_pointer(void *ptr)
  44103. +{
  44104. +    int hunk = (long)ptr & HUNK_MASK;
  44105. +    int offset = (long)ptr & (VALMASK & ~HUNK_MASK);
  44106. +
  44107. +    if (!ptr)
  44108. +    {
  44109. +    P("P0");
  44110. +    return 0;
  44111. +    }
  44112. +
  44113. +    if (hunk == HUNK_CODE)
  44114. +    {
  44115. +    P("PC");
  44116. +    return (char *)first_fn + offset;
  44117. +    }
  44118. +    if (hunk == HUNK_DATA)
  44119. +    {
  44120. +    P("PD");
  44121. +    return (char *)&first_data + offset;
  44122. +    }
  44123. +    if (hunk == HUNK_BSS)
  44124. +    {
  44125. +    P("PB");
  44126. +    return (char *)&first_bss + offset;
  44127. +    }
  44128. +    if (hunk == HUNK_PURE)
  44129. +    {
  44130. +    P("PP");
  44131. +    return (char *)pure + offset;
  44132. +    }
  44133. +    if (hunk == HUNK_MALLOC)
  44134. +    {
  44135. +    P("PM");
  44136. +    return malloc_hunk + offset;
  44137. +    }
  44138. +    assert(0);
  44139. +}
  44140. +
  44141. +static Lisp_Object make_lispptr(Lisp_Object *objptr, Lisp_Object obj)
  44142. +{
  44143. +    long val = XUINT(obj);
  44144. +    int hunk = val & HUNK_MASK;
  44145. +    int offset = val & ~HUNK_MASK;
  44146. +    char *ptr;
  44147. +
  44148. +    assert(obj); /* CHFIXME */
  44149. +    if (hunk == HUNK_CODE)
  44150. +    {
  44151. +    M("LC");
  44152. +    ptr = (char *)first_fn + offset;
  44153. +    }
  44154. +    else if (hunk == HUNK_DATA)
  44155. +    {
  44156. +    M("LD");
  44157. +    ptr = (char *)&first_data + offset;
  44158. +    }
  44159. +    else if (hunk == HUNK_BSS)
  44160. +    {
  44161. +    M("LB");
  44162. +    ptr = (char *)&first_bss + offset;
  44163. +    }
  44164. +    else if (hunk == HUNK_PURE)
  44165. +    {
  44166. +    M("LP");
  44167. +    ptr = (char *)pure + offset;
  44168. +    } 
  44169. +    else if (hunk == HUNK_MALLOC)
  44170. +    {
  44171. +    M("LM");
  44172. +    ptr = malloc_hunk + offset;
  44173. +    }
  44174. +    else assert(0);
  44175. +
  44176. +    assert((int) ptr > 0); /* CHFIXME */
  44177. +    OXSETPNTR(obj, (long)ptr); /* CHFIXME */
  44178. +    return obj;
  44179. +}
  44180. +
  44181. +static void unpatch_pointers ();
  44182. +
  44183. +static void unpatch_buffer (buf)
  44184. +     Lisp_Object buf;
  44185. +{
  44186. +  Lisp_Object tem;
  44187. +  register struct buffer *buffer = XBUFFER (buf);
  44188. +  register Lisp_Object *ptr;
  44189. +
  44190. +  buffer->text.beg = make_pointer (buffer->text.beg);
  44191. +  unpatch_pointers (&buffer->markers);
  44192. +
  44193. +  /* This is the buffer's markbit */
  44194. +  XUNMARK (buffer->name);
  44195. +  unpatch_pointers (&buffer->name);
  44196. +
  44197. +  for (ptr = &buffer->name + 1;
  44198. +       (char *)ptr < (char *)buffer + sizeof (struct buffer);
  44199. +       ptr++)
  44200. +    unpatch_pointers (ptr);
  44201. +}
  44202. +
  44203. +static void unpatch_pointers (objptr)
  44204. +     Lisp_Object *objptr;
  44205. +{
  44206. +  register Lisp_Object obj;
  44207. +  Lisp_Object obj2;
  44208. +
  44209. +  MEnter("O+");
  44210. + loop:
  44211. +  obj = *objptr;
  44212. +
  44213. + loop2:
  44214. +  XUNMARK (obj);
  44215. +
  44216. +  switch (XGCTYPE (obj))
  44217. +    {
  44218. +    case Lisp_String:
  44219. +    M("O1");
  44220. +      *objptr = make_lispptr(objptr, *objptr);
  44221. +      break;
  44222. +
  44223. +    case Lisp_Vector:
  44224. +    case Lisp_Window:
  44225. +    case Lisp_Process:
  44226. +    case Lisp_Window_Configuration:
  44227. +    M("O2");
  44228. +      obj = *objptr = make_lispptr(objptr, *objptr);
  44229. +      {
  44230. +    register struct Lisp_Vector *ptr = XVECTOR (obj);
  44231. +    register int size;
  44232. +    struct Lisp_Vector *volatile ptr1 = ptr; /* CHFIXME */
  44233. +    register int i;
  44234. +
  44235. +    if (!(ptr->size & ARRAY_MARK_FLAG)) break;   /* Already unmarked */
  44236. +    size = ptr->size &= ~ARRAY_MARK_FLAG; /* Else unmark it */
  44237. +    for (i = 0; i < size; i++)     /* and then unmark its elements */
  44238. +      unpatch_pointers (&ptr1->contents[i]);
  44239. +      }
  44240. +      break;
  44241. +
  44242. +    case Lisp_Compiled: /* similar to vector but avoid some recursion */
  44243. +    M("O3");
  44244. +      obj = *objptr = make_lispptr(objptr, *objptr);
  44245. +      {
  44246. +    register struct Lisp_Vector *ptr = XVECTOR (obj);
  44247. +    register int size = ptr->size;
  44248. +    struct Lisp_Vector *volatile ptr1 = ptr; /* CHFIXME */
  44249. +    register int i;
  44250. +
  44251. +    if (!(size & ARRAY_MARK_FLAG)) break;   /* Already unmarked */
  44252. +    size = ptr->size &= ~ARRAY_MARK_FLAG; /* Else unmark it */
  44253. +    for (i = 0; i < size; i++)     /* and then mark its elements */
  44254. +        if (i != COMPILED_CONSTANTS)
  44255. +        unpatch_pointers (&ptr1->contents[i]);
  44256. +    objptr = (Lisp_Object *) &ptr1->contents[COMPILED_CONSTANTS];
  44257. +
  44258. +    goto loop;
  44259. +      }
  44260. +      break;
  44261. +
  44262. +    case Lisp_Symbol:
  44263. +    M("O4");
  44264. +    /* due to goto below objptr may not point to object containing
  44265. +       SYMBOL type information so let obj care for symbol type */
  44266. +      obj2 = *objptr = make_lispptr(objptr, *objptr);
  44267. +      {
  44268. +    register struct Lisp_Symbol * volatile ptr = XSYMBOL (obj2);
  44269. +    struct Lisp_Symbol *ptrx;
  44270. +
  44271. +    if (!XMARKBIT (ptr->plist)) break;
  44272. +    XUNMARK (ptr->plist);
  44273. +    unpatch_pointers ((Lisp_Object *) &ptr->value);
  44274. +    unpatch_pointers (&ptr->function);
  44275. +    unpatch_pointers (&ptr->plist);
  44276. +    unpatch_pointers ((Lisp_Object *) &ptr->name);
  44277. +    ptr->name = XSTRING (*(Lisp_Object *)&ptr->name);
  44278. +    objptr = (Lisp_Object *)&ptr->next;
  44279. +    ptr = ptr->next;
  44280. +    if (ptr)
  44281. +      {
  44282. +        ptrx = ptr;        /* Use pf ptrx avoids compiler bug on Sun */
  44283. +        XSETSYMBOL (obj, ptrx);
  44284. +
  44285. +        /* We can't goto loop here because *objptr doesn't contain an
  44286. +           actual Lisp_Object with valid datatype field.  */
  44287. +
  44288. +        goto loop2;
  44289. +      }
  44290. +      }
  44291. +      break;
  44292. +
  44293. +    case Lisp_Marker:
  44294. +    M("O5");
  44295. +     obj = *objptr = make_lispptr(objptr, *objptr);
  44296. +      {
  44297. +    struct Lisp_Marker *ptr = XMARKER (obj);
  44298. +    
  44299. +    if (!XMARKBIT (ptr->chain)) break;
  44300. +    XUNMARK (ptr->chain);
  44301. +    ptr->buffer = make_pointer (ptr->buffer);
  44302. +    unpatch_pointers (&ptr->chain);
  44303. +      }
  44304. +      break;
  44305. +
  44306. +    case Lisp_Cons:
  44307. +    case Lisp_Buffer_Local_Value:
  44308. +    case Lisp_Some_Buffer_Local_Value:
  44309. +    M("O6");
  44310. +      obj = *objptr = make_lispptr(objptr, *objptr);
  44311. +      {
  44312. +    register struct Lisp_Cons *ptr = XCONS (obj);
  44313. +    if (!XMARKBIT (ptr->car)) break;
  44314. +    XUNMARK (ptr->car);
  44315. +    unpatch_pointers (&ptr->car);
  44316. +    objptr = &ptr->cdr;
  44317. +
  44318. +    goto loop;
  44319. +      }
  44320. +
  44321. +    case Lisp_Buffer:
  44322. +    M("O7");
  44323. +      obj = *objptr = make_lispptr(objptr, *objptr);
  44324. +      if (XMARKBIT (XBUFFER (obj)->name))
  44325. +    unpatch_buffer (obj);
  44326. +      break;
  44327. +
  44328. +    case Lisp_Subr:
  44329. +    M("O8");
  44330. +    obj = *objptr = make_lispptr(objptr, *objptr);
  44331. +    {
  44332. +    struct Lisp_Subr *subr = XSUBR(obj);
  44333. +    
  44334. +    if (!(subr->min_args & 0x8000)) break;
  44335. +    subr->min_args &= ~0x8000;
  44336. +    subr->function = make_pointer(subr->function);
  44337. +    subr->symbol_name = make_pointer(subr->symbol_name);
  44338. +    subr->prompt = make_pointer(subr->prompt);
  44339. +    if ((long)subr->doc >= 0) /* Make sure that not a doc offset */
  44340. +        subr->doc = make_pointer(subr->doc);
  44341. +    break;
  44342. +    }
  44343. +
  44344. +    case Lisp_Int:
  44345. +    case Lisp_Void:
  44346. +    case Lisp_Buffer_Objfwd: break;
  44347. +
  44348. +    case Lisp_Intfwd:
  44349. +    case Lisp_Boolfwd:
  44350. +    case Lisp_Objfwd:
  44351. +    case Lisp_Internal_Stream:
  44352. +    M("O9");
  44353. +      *objptr = make_lispptr(objptr, *objptr);
  44354. +    /* Don't bother with Lisp_Buffer_Objfwd,
  44355. +       since all markable slots in current buffer marked anyway.  */
  44356. +    /* Don't need to do Lisp_Objfwd, since the places they point
  44357. +       are protected with staticpro.  */
  44358. +      break;
  44359. +
  44360. +#ifdef LISP_FLOAT_TYPE
  44361. +    case Lisp_Float:
  44362. +      M("OA");
  44363. +      obj = *objptr = make_lispptr(objptr, *objptr);
  44364. +      XUNMARK (XFLOAT (obj)->type);
  44365. +      break;
  44366. +#endif /* LISP_FLOAT_TYPE */
  44367. +
  44368. +    default:
  44369. +      abort ();
  44370. +    }
  44371. +  MLeave("O-");
  44372. +}
  44373. +
  44374. +static void unpatch_chain(void **ptr, int offset)
  44375. +{
  44376. +    while (*ptr)
  44377. +    {
  44378. +    *ptr = make_pointer(*ptr);
  44379. +    ptr = (void **)((char *)*ptr + offset);
  44380. +    }
  44381. +}
  44382. +
  44383. +/* CHFIXME: for all! */
  44384. +#define MAKE_LISPPTR(a) a = make_lispptr(&a,a)
  44385. +#define MAKE_PTR(a) a = make_pointer(a)
  44386. +
  44387. +/* Reconstructs the addresses that were patched */
  44388. +static void unpatch(void)
  44389. +{
  44390. +    Lisp_Object LO;
  44391. +    int fd, i;
  44392. +    struct string_block *sptr;
  44393. +    struct buffer *bptr;
  44394. +    struct mem_header *mem;
  44395. +    struct backtrace *backlist;
  44396. +    struct catchtag *catch;
  44397. +
  44398. +    print_ranges(); /* CHFIXME */
  44399. +
  44400. +    MInit("MLOG.unpatch");
  44401. +#ifdef DBUG
  44402. +    i = 0;
  44403. +#else
  44404. +    for (i = 0; i < staticidx; i++)
  44405. +#endif
  44406. +    {
  44407. +    staticvec[i] = make_pointer(staticvec[i]);
  44408. +    if (XMARKBIT(*staticvec[i]))
  44409. +    {
  44410. +        XUNMARK(*staticvec[i]);
  44411. +        unpatch_pointers(staticvec[i]);
  44412. +    }
  44413. +    }
  44414. +
  44415. +#ifndef DBUG
  44416. +    /* Unpatch all the pointers normally used before a dump ! */
  44417. +    unpatch_chain((void **)&cons_block, 0);
  44418. +    unpatch_chain((void **)&cons_free_list, 0);
  44419. +
  44420. +    unpatch_chain((void **)&all_vectors, 4);
  44421. +
  44422. +    unpatch_chain((void **)&symbol_block, 0);
  44423. +    unpatch_chain((void **)&symbol_free_list, 4);
  44424. +
  44425. +    unpatch_chain((void **)&marker_block, 0);
  44426. +    unpatch_chain((void **)&marker_free_list, 4);
  44427. +
  44428. +    unpatch_chain((void **)&interval_block, 0);
  44429. +    unpatch_chain((void **)&interval_free_list, 4*sizeof(long));
  44430. +        
  44431. +    /* Strings are lots of fun */
  44432. +    unpatch_chain((void **)&large_string_blocks, 0);
  44433. +    sptr = MAKE_PTR(first_string_block);
  44434. +    MAKE_PTR(current_string_block);
  44435. +    while (sptr)
  44436. +    {
  44437. +    if (sptr->next) MAKE_PTR(sptr->next);
  44438. +    if (sptr->prev) MAKE_PTR(sptr->prev);
  44439. +    sptr = sptr->next;
  44440. +    }
  44441. +
  44442. +    /* More fun with buffers */
  44443. +    bptr = MAKE_PTR(all_buffers);
  44444. +    if (bptr)
  44445. +    {
  44446. +    while (bptr->next)
  44447. +    {
  44448. +        MAKE_PTR(bptr->next);
  44449. +        bptr = bptr->next;
  44450. +    }
  44451. +    }
  44452. +    MAKE_PTR(current_buffer);
  44453. +
  44454. +#ifdef LISP_FLOAT_TYPE
  44455. +    unpatch_chain((void **) &float_block, 0);
  44456. +    unpatch_chain((void **) &float_free_list, 0);
  44457. +#endif /* LISP_FLOAT_TYPE */
  44458. +    
  44459. +#if 0 /* CHFIXME needed ? */
  44460. +    /* even more fun with 19.28 backtrace */
  44461. +    MAKE_PTR(backtrace_list);
  44462. +    for (backlist = backtrace_list; backlist; backlist = backlist->next)
  44463. +    {
  44464. +      if(backlist->next) MAKE_PTR(backlist->next);
  44465. +      
  44466. +      if (XMARKBIT (*backlist->function))
  44467. +    {
  44468. +      XUNMARK (*backlist->function);
  44469. +      unpatch_pointers(backlist->function);
  44470. +    }
  44471. +      if (backlist->nargs == UNEVALLED || backlist->nargs == MANY)
  44472. +    i = 0;
  44473. +      else
  44474. +    i = backlist->nargs - 1;
  44475. +      for (; i >= 0; i--)
  44476. +    if (XMARKBIT (backlist->args[i]))
  44477. +      {
  44478. +        XUNMARK (backlist->args[i]);
  44479. +        unpatch_pointers(&backlist->args[i]);
  44480. +      }
  44481. +    }  
  44482. +
  44483. +    MAKE_PTR(catchlist);
  44484. +    for (catch = catchlist; catch; catch = catch->next)
  44485. +    {
  44486. +      if(catch->next) MAKE_PTR(catch->next);
  44487. +    
  44488. +      unpatch_pointers (&catch->tag);
  44489. +      unpatch_pointers (&catch->val);
  44490. +      MAKE_PTR(catch->backlist);
  44491. +      MAKE_PTR(catch->handlerlist);
  44492. +    }
  44493. +#endif
  44494. +    
  44495. +/*    MAKE_PTR(gcprolist); CHFIXME */
  44496. +    MAKE_PTR(stack_copy);
  44497. +
  44498. +    MAKE_PTR(kbd_macro_buffer);
  44499. +#if 0
  44500. +    MAKE_PTR(minibuf_save_vector);
  44501. +#endif
  44502. +    MAKE_PTR(searchbuf.buffer);
  44503. +    MAKE_PTR(searchbuf.fastmap);
  44504. +    MAKE_PTR(specpdl);
  44505. +    MAKE_PTR(read_buffer);
  44506. +
  44507. +#if 0 /* CHFIXME */
  44508. +    MouseMap = make_lispptr(&MouseMap, MouseMap);
  44509. +#endif
  44510. +    MAKE_LISPPTR(current_global_map);
  44511. +    MAKE_LISPPTR(global_map);
  44512. +    MAKE_LISPPTR(meta_map);
  44513. +    MAKE_LISPPTR(control_x_map);
  44514. +
  44515. +    MAKE_LISPPTR(selected_window);
  44516. +
  44517. +    MAKE_LISPPTR(Qvariable_documentation);
  44518. +
  44519. +#ifndef MULTI_FRAME
  44520. +    /* CHFIXME: use makro */
  44521. +    MAKE_LISPPTR(the_only_frame.root_window);
  44522. +#else
  44523. +    you lose;
  44524. +#endif
  44525. +
  44526. +    MAKE_PTR(free_list);
  44527. +    mem = free_list;
  44528. +    while (mem)
  44529. +    {
  44530. +    MAKE_PTR(mem->prev);
  44531. +    MAKE_PTR(mem->next);
  44532. +    mem = mem->next;
  44533. +    }
  44534. +
  44535. +    for (i = 0; i <= 4; i++)
  44536. +    MAKE_PTR(callint_argfuns[i]);
  44537. +
  44538. +    MAKE_PTR(fail_stack.stack);
  44539. +    MAKE_PTR(regstart);
  44540. +    MAKE_PTR(regend);
  44541. +    MAKE_PTR(old_regstart);
  44542. +    MAKE_PTR(old_regend);
  44543. +    MAKE_PTR(best_regstart);
  44544. +    MAKE_PTR(best_regend);
  44545. +    MAKE_PTR(reg_info);
  44546. +    MAKE_PTR(reg_dummy);
  44547. +    MAKE_PTR(reg_info_dummy);
  44548. +    
  44549. +    for(i = 0; i < HEAD_TABLE_SIZE; i++)
  44550. +    {
  44551. +    MAKE_PTR(head_table[i].var);
  44552. +    MAKE_PTR(head_table[i].name);
  44553. +    MAKE_PTR(head_table[i].kind);
  44554. +    }
  44555. +    for(i = 0; i < SCROLL_BAR_PARTS_SIZE; i++)
  44556. +    MAKE_PTR(scroll_bar_parts[i]);
  44557. +
  44558. +    MAKE_PTR(kbd_fetch_ptr);
  44559. +    MAKE_PTR(kbd_store_ptr);
  44560. +
  44561. +    XSET(LO, Lisp_Buffer, &buffer_local_types);
  44562. +    unpatch_buffer(LO);
  44563. +    
  44564. +    MAKE_LISPPTR(Qdirectory_files);
  44565. +    MAKE_LISPPTR(Qfile_name_completion);
  44566. +    MAKE_LISPPTR(Qfile_name_all_completions);
  44567. +    MAKE_LISPPTR(Qfile_attributes);
  44568. +    MAKE_LISPPTR(Qset_visited_file_modtime);
  44569. +/*    MAKE_LISPPTR(stream_process);*/
  44570. +
  44571. +    MAKE_PTR(message_text);
  44572. +
  44573. +    /* search.c */
  44574. +    MAKE_PTR(search_regs.start);
  44575. +    MAKE_PTR(search_regs.end);
  44576. +#endif
  44577. +    MClean();
  44578. +}
  44579. +
  44580. +static undump(char *fn)
  44581. +{
  44582. +  BPTR fd;
  44583. +  long code_size;
  44584. +  char *_malloc_hunk;
  44585. +  int *_pure;
  44586. +  /*extern struct Library *FifoBase;
  44587. +  struct Library *_FifoBase = FifoBase;*/
  44588. +
  44589. +  fd = Open(fn, MODE_OLDFILE);
  44590. +  if (!fd) return 0;
  44591. +
  44592. +  Read(fd, (char *)&puresize, sizeof puresize);
  44593. +  Read(fd, (char *)&malloc_hunk_size, sizeof malloc_hunk_size);
  44594. +  _pure = dump_malloc(puresize);
  44595. +  _malloc_hunk = dump_malloc(malloc_hunk_size + pre_alloc);
  44596. +  Read(fd, (char *)&first_data, (char *)&last_data - (char *)&first_data);
  44597. +  Read(fd, (char *)&first_bss, (char *)&last_bss - (char *)&first_bss);
  44598. +  Read(fd, (char *)_pure, puresize);
  44599. +  Read(fd, (char *)_malloc_hunk, malloc_hunk_size);
  44600. +  Read(fd, (char *)&staticidx, sizeof staticidx);
  44601. +  Read(fd, (char *)staticvec, staticidx * sizeof(Lisp_Object *));
  44602. +  /*FifoBase = _FifoBase;*/
  44603. +  if (Read(fd, (char *)&code_size, sizeof code_size) != sizeof code_size ||
  44604. +      code_size != (char *)last_fn - (char *)first_fn)
  44605. +  {
  44606. +      Close(fd);
  44607. +      bailout(fn);
  44608. +  }
  44609. +
  44610. +  Close(fd);
  44611. +  malloc_hunk = _malloc_hunk;
  44612. +  pure = _pure;
  44613. +  return 1;
  44614. +}
  44615. +
  44616. +void map_out_data(char *fn)
  44617. +{
  44618. +    if (amiga_initialized) error("You can only dump once !");
  44619. +    Fgarbage_collect();
  44620. +
  44621. +#if 0 /* CHFIXME */
  44622. +    dump("EMACS-DATA.pre");
  44623. +#endif
  44624. +    patch();
  44625. +    dump(fn);
  44626. +    unpatch();
  44627. +#if 0
  44628. +    dump("EMACS-DATA.post");
  44629. +#endif
  44630. +    amiga_initialized = 1;
  44631. +}
  44632. +
  44633. +#ifndef MULTI_FRAME
  44634. +static struct x_display A_Display;
  44635. +#else
  44636. +you lose */
  44637. +#endif
  44638. +
  44639. +void map_in_data(int load)
  44640. +{
  44641. +    if (load && undump(NAME_DATA))
  44642. +    {
  44643. +    unpatch();
  44644. +#if 0 /*CHFIXME */
  44645. +    current_screen = new_screen = temp_screen = 0;
  44646. +    message_buf = 0;
  44647. +#endif
  44648. +    chars_wasted = 0;
  44649. +    copybuf = 0;
  44650. +    initialized = amiga_initialized = 1;
  44651. +    
  44652. +    /* CHFIXME: force errors if used but not patched */
  44653. +    handlerlist = (void *) -1;
  44654. +    catchlist = (void *)-1;
  44655. +        backtrace_list = (void *)-1;
  44656. +#if 0
  44657. +    FRAME_EXTERNAL_MENU_BAR(selected_frame) = 1; /* CHFIXME where to put? */
  44658. +#endif
  44659. +    }
  44660. +    else
  44661. +      {
  44662. +    malloc_hunk = dump_malloc(malloc_hunk_size + pre_alloc);
  44663. +    pure = dump_malloc(puresize);
  44664. +      }
  44665. +#ifndef MULTI_FRAME
  44666. +    FRAME_DISPLAY(selected_frame) = &A_Display;
  44667. +#else
  44668. +    you lose again.
  44669. +#endif
  44670. +    amiga_undump_reinit();
  44671. +}
  44672. +
  44673. +void
  44674. +early_init_amiga_dump()
  44675. +{
  44676. +#ifndef MULTI_FRAME
  44677. +    FRAME_DISPLAY(selected_frame) = &A_Display;
  44678. +#else
  44679. +    you lose again.
  44680. +#endif
  44681. +}
  44682. diff -rup --new-file baseline/fsf/emacs/src/amiga_dump_protos.h amiga/fsf/emacs/src/amiga_dump_protos.h
  44683. --- baseline/fsf/emacs/src/amiga_dump_protos.h    Wed Dec 31 17:00:00 1969
  44684. +++ amiga/fsf/emacs/src/amiga_dump_protos.h    Sat Sep 28 00:00:00 1996
  44685. @@ -0,0 +1,48 @@
  44686. +/* Prototypes for functions defined in
  44687. +amiga_dump.c
  44688. + */
  44689. +
  44690. +extern void * __far first_fn;
  44691. +
  44692. +extern void * __far last_fn;
  44693. +
  44694. +void cpr(void);
  44695. +
  44696. +void * dump_malloc(int );
  44697. +
  44698. +void bailout(char * );
  44699. +
  44700. +void print_ranges(void);
  44701. +
  44702. +void * hunk_pointer(void * );
  44703. +
  44704. +int hunk_lispptr(int * , int );
  44705. +
  44706. +void patch_buffer(int buf);
  44707. +
  44708. +void patch_pointers(int * objptr);
  44709. +
  44710. +void patch_chain(void ** , int );
  44711. +
  44712. +void patch(void);
  44713. +
  44714. +int dump(char * );
  44715. +
  44716. +void * make_pointer(void * );
  44717. +
  44718. +int make_lispptr(int * , int );
  44719. +
  44720. +void unpatch_buffer(int buf);
  44721. +
  44722. +void unpatch_pointers(int * objptr);
  44723. +
  44724. +void unpatch_chain(void ** , int );
  44725. +
  44726. +void unpatch(void);
  44727. +
  44728. +int undump(char * );
  44729. +
  44730. +void map_out_data(char * );
  44731. +
  44732. +void map_in_data(int );
  44733. +
  44734. diff -rup --new-file baseline/fsf/emacs/src/amiga_fns.c amiga/fsf/emacs/src/amiga_fns.c
  44735. --- baseline/fsf/emacs/src/amiga_fns.c    Wed Dec 31 17:00:00 1969
  44736. +++ amiga/fsf/emacs/src/amiga_fns.c    Sat Sep 28 00:00:00 1996
  44737. @@ -0,0 +1,547 @@
  44738. +/* Functions for the Amiga Intuition Windows system.
  44739. +   Copyright (C) 1989, 1992, 1993, 1994 Free Software Foundation, Inc.
  44740. +
  44741. +This file is part of GNU Emacs.
  44742. +
  44743. +GNU Emacs is free software; you can redistribute it and/or modify
  44744. +it under the terms of the GNU General Public License as published by
  44745. +the Free Software Foundation; either version 2, or (at your option)
  44746. +any later version.
  44747. +
  44748. +GNU Emacs is distributed in the hope that it will be useful,
  44749. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  44750. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  44751. +GNU General Public License for more details.
  44752. +
  44753. +You should have received a copy of the GNU General Public License
  44754. +along with GNU Emacs; see the file COPYING.  If not, write to
  44755. +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  44756. +
  44757. +/* Adapted from xnfs.c, 08/27/94 Carsten Heyl,
  44758. +   some stuff moved from David Gays amiga_screen.c  */
  44759. +
  44760. +#include <exec/types.h>
  44761. +#include <libraries/gadtools.h>
  44762. +#include <intuition/intuition.h>
  44763. +#include <proto/exec.h>
  44764. +#include <proto/dos.h>
  44765. +#include <proto/gadtools.h>
  44766. +#include <proto/intuition.h>
  44767. +
  44768. +#include "config.h"
  44769. +#include "lisp.h"
  44770. +#include "frame.h"
  44771. +#include "amiga.h"
  44772. +
  44773. +#ifdef USE_PROTOS
  44774. +#include "protos.h"
  44775. +#endif
  44776. +
  44777. +/* CHFIXME: change more functions to amiga version */
  44778. +
  44779. +/* Evaluate this expression to rebuild the section of syms_of_xfns
  44780. +   that initializes and staticpros the symbols declared below.  Note
  44781. +   that Emacs 18 has a bug that keeps C-x C-e from being able to
  44782. +   evaluate this expression.
  44783. +
  44784. +(progn
  44785. +  ;; Accumulate a list of the symbols we want to initialize from the
  44786. +  ;; declarations at the top of the file.
  44787. +  (goto-char (point-min))
  44788. +  (search-forward "/\*&&& symbols declared here &&&*\/\n")
  44789. +  (let (symbol-list)
  44790. +    (while (looking-at "Lisp_Object \\(Q[a-z_]+\\)")
  44791. +      (setq symbol-list
  44792. +        (cons (buffer-substring (match-beginning 1) (match-end 1))
  44793. +          symbol-list))
  44794. +      (forward-line 1))
  44795. +    (setq symbol-list (nreverse symbol-list))
  44796. +    ;; Delete the section of syms_of_... where we initialize the symbols.
  44797. +    (search-forward "\n  /\*&&& init symbols here &&&*\/\n")
  44798. +    (let ((start (point)))
  44799. +      (while (looking-at "^  Q")
  44800. +    (forward-line 2))
  44801. +      (kill-region start (point)))
  44802. +    ;; Write a new symbol initialization section.
  44803. +    (while symbol-list
  44804. +      (insert (format "  %s = intern (\"" (car symbol-list)))
  44805. +      (let ((start (point)))
  44806. +    (insert (substring (car symbol-list) 1))
  44807. +    (subst-char-in-region start (point) ?_ ?-))
  44808. +      (insert (format "\");\n  staticpro (&%s);\n" (car symbol-list)))
  44809. +      (setq symbol-list (cdr symbol-list)))))
  44810. +
  44811. +  */        
  44812. +
  44813. +/*&&& symbols declared here &&&*/
  44814. +#if 0
  44815. +Lisp_Object Qauto_raise;
  44816. +Lisp_Object Qauto_lower;
  44817. +#endif
  44818. +Lisp_Object Qbackground_color;
  44819. +#if 0
  44820. +Lisp_Object Qbar;
  44821. +#endif
  44822. +Lisp_Object Qborder_color;
  44823. +Lisp_Object Qborder_width;
  44824. +#if 0
  44825. +Lisp_Object Qbox;
  44826. +Lisp_Object Qcursor_color;
  44827. +Lisp_Object Qcursor_type;
  44828. +Lisp_Object Qfont;
  44829. +#endif
  44830. +Lisp_Object Qforeground_color;
  44831. +#if 0
  44832. +Lisp_Object Qgeometry;
  44833. +Lisp_Object Qicon_left;
  44834. +Lisp_Object Qicon_top;
  44835. +Lisp_Object Qicon_type;
  44836. +Lisp_Object Qinternal_border_width;
  44837. +#endif
  44838. +Lisp_Object Qleft;
  44839. +#if 0
  44840. +Lisp_Object Qmouse_color;
  44841. +Lisp_Object Qnone;
  44842. +Lisp_Object Qparent_id;
  44843. +Lisp_Object Qsuppress_icon;
  44844. +#endif
  44845. +Lisp_Object Qtop;
  44846. +#if 0
  44847. +Lisp_Object Qundefined_color;
  44848. +Lisp_Object Qvertical_scroll_bars;
  44849. +Lisp_Object Qvisibility;
  44850. +Lisp_Object Qwindow_id;
  44851. +#endif
  44852. +Lisp_Object Qamiga_frame_parameter;
  44853. +#if 0
  44854. +Lisp_Object Quser_position;
  44855. +Lisp_Object Quser_size;
  44856. +#endif
  44857. +
  44858. +/* The below are defined in frame.c. */
  44859. +extern Lisp_Object Qheight, Qminibuffer, Qname, Qonly, Qwidth;
  44860. +extern Lisp_Object Qunsplittable, Qmenu_bar_lines;
  44861. +
  44862. +extern Lisp_Object Vwindow_system_version;
  44863. +
  44864. +
  44865. +/* Connect the frame-parameter names for X frames
  44866. +   to the ways of passing the parameter values to the window system.
  44867. +
  44868. +   The name of a parameter, as a Lisp symbol,
  44869. +   has an `amiga-frame-parameter' property which is an integer in Lisp
  44870. +   but can be interpreted as an `enum amiga_frame_parm' in C.  */
  44871. +
  44872. +enum amiga_frame_parm
  44873. +{
  44874. +  AMIGA_PARM_FOREGROUND_COLOR,
  44875. +  AMIGA_PARM_BACKGROUND_COLOR,
  44876. +  AMIGA_PARM_MOUSE_COLOR,
  44877. +  AMIGA_PARM_CURSOR_COLOR,
  44878. +  AMIGA_PARM_BORDER_COLOR,
  44879. +  AMIGA_PARM_ICON_TYPE,
  44880. +  AMIGA_PARM_FONT,
  44881. +  AMIGA_PARM_BORDER_WIDTH,
  44882. +  AMIGA_PARM_INTERNAL_BORDER_WIDTH,
  44883. +  AMIGA_PARM_NAME,
  44884. +  AMIGA_PARM_AUTORAISE,
  44885. +  AMIGA_PARM_AUTOLOWER,
  44886. +  AMIGA_PARM_VERT_SCROLL_BAR,
  44887. +  AMIGA_PARM_VISIBILITY,
  44888. +  AMIGA_PARM_MENU_BAR_LINES
  44889. +};
  44890. +
  44891. +
  44892. +struct amiga_frame_parm_table
  44893. +{
  44894. +  char *name;
  44895. +  void (*setter)( FRAME_PTR frame, Lisp_Object val, Lisp_Object oldval);
  44896. +};
  44897. +
  44898. +void amiga_set_foreground_color (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44899. +void amiga_set_background_color (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44900. +void amiga_set_mouse_color (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44901. +void amiga_set_cursor_color (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44902. +void amiga_set_border_color (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44903. +void amiga_set_cursor_type (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44904. +void amiga_set_icon_type (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44905. +void amiga_set_font (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44906. +void amiga_set_border_width (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44907. +void amiga_set_internal_border_width (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44908. +void amiga_explicitly_set_name (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44909. +void amiga_set_autoraise (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44910. +void amiga_set_autolower (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44911. +void amiga_set_vertical_scroll_bars (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44912. +void amiga_set_visibility (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44913. +void x_set_menu_bar_lines (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval);
  44914. +
  44915. +static struct amiga_frame_parm_table __far amiga_frame_parms[] =
  44916. +{
  44917. +  "foreground-color", amiga_set_foreground_color,
  44918. +  "background-color", amiga_set_background_color,
  44919. +  "mouse-color", amiga_set_mouse_color,
  44920. +  "cursor-color", amiga_set_cursor_color,
  44921. +  "border-color", amiga_set_border_color,
  44922. +  "cursor-type", amiga_set_cursor_type,
  44923. +  "icon-type", amiga_set_icon_type,
  44924. +  "font", amiga_set_font,
  44925. +  "border-width", amiga_set_border_width,
  44926. +  "internal-border-width", amiga_set_internal_border_width,
  44927. +  "name", amiga_explicitly_set_name,
  44928. +  "auto-raise", amiga_set_autoraise,
  44929. +  "auto-lower", amiga_set_autolower,
  44930. +  "vertical-scroll-bars", amiga_set_vertical_scroll_bars,
  44931. +  "visibility", amiga_set_visibility,
  44932. +  "menu-bar-lines", x_set_menu_bar_lines,
  44933. +};
  44934. +
  44935. +/* Attach the `amiga-frame-parameter' properties to
  44936. +   the Lisp symbol names of parameters relevant to X.  */
  44937. +
  44938. +init_amiga_parm_symbols ()
  44939. +{
  44940. +  int i;
  44941. +
  44942. +  for (i = 0; i < sizeof (amiga_frame_parms) / sizeof (amiga_frame_parms[0]); i++)
  44943. +    Fput (intern (amiga_frame_parms[i].name), Qamiga_frame_parameter,
  44944. +      make_number (i));
  44945. +}
  44946. +
  44947. +/* Change the parameters of FRAME as specified by ALIST.
  44948. +   If a parameter is not specially recognized, do nothing;
  44949. +   otherwise call the `amiga_set_...' function for that parameter.  */
  44950. +
  44951. +void
  44952. +x_set_frame_parameters (f, alist) /* CHFIXME: fix references in window.c */
  44953. +     FRAME_PTR f;
  44954. +     Lisp_Object alist;
  44955. +{
  44956. +  Lisp_Object tail;
  44957. +
  44958. +  /* If both of these parameters are present, it's more efficient to
  44959. +     set them both at once.  So we wait until we've looked at the
  44960. +     entire list before we set them.  */
  44961. +  Lisp_Object width, height;
  44962. +
  44963. +  /* Same here.  */
  44964. +  Lisp_Object left, top;
  44965. +
  44966. +  /* Record in these vectors all the parms specified.  */
  44967. +  Lisp_Object *parms;
  44968. +  Lisp_Object *values;
  44969. +  int i;
  44970. +  
  44971. +  i = 0;
  44972. +  for (tail = alist; CONSP (tail); tail = Fcdr (tail))
  44973. +    i++;
  44974. +
  44975. +  parms = (Lisp_Object *) alloca (i * sizeof (Lisp_Object));
  44976. +  values = (Lisp_Object *) alloca (i * sizeof (Lisp_Object));
  44977. +
  44978. +  /* Extract parm names and values into those vectors.  */
  44979. +
  44980. +  i = 0;
  44981. +  for (tail = alist; CONSP (tail); tail = Fcdr (tail))
  44982. +    {
  44983. +      Lisp_Object elt, prop, val;
  44984. +
  44985. +      elt = Fcar (tail);
  44986. +      parms[i] = Fcar (elt);
  44987. +      values[i] = Fcdr (elt);
  44988. +      i++;
  44989. +    }
  44990. +
  44991. +  width = height = top = left = Qunbound;
  44992. +
  44993. +  /* Now process them in reverse of specified order.  */
  44994. +  for (i--; i >= 0; i--)
  44995. +    {
  44996. +      Lisp_Object prop, val;
  44997. +
  44998. +      prop = parms[i];
  44999. +      val = values[i];
  45000. +
  45001. +      if (EQ (prop, Qwidth))
  45002. +    width = val;
  45003. +      else if (EQ (prop, Qheight))
  45004. +    height = val;
  45005. +      else if (EQ (prop, Qtop))
  45006. +    top = val;
  45007. +      else if (EQ (prop, Qleft))
  45008. +    left = val;
  45009. +      else
  45010. +    {
  45011. +      register Lisp_Object param_index, old_value;
  45012. +
  45013. +      param_index = Fget (prop, Qamiga_frame_parameter);
  45014. +      old_value = get_frame_param (f, prop);
  45015. +      store_frame_param (f, prop, val);
  45016. +      if (XTYPE (param_index) == Lisp_Int
  45017. +          && XINT (param_index) >= 0
  45018. +          && (XINT (param_index)
  45019. +          < sizeof (amiga_frame_parms)/sizeof (amiga_frame_parms[0])))
  45020. +        (*amiga_frame_parms[XINT (param_index)].setter)(f, val, old_value);
  45021. +    }
  45022. +    }
  45023. +
  45024. +  /* Don't die if just one of these was set.  */
  45025. +  if (EQ (left, Qunbound))
  45026. +    XSET (left, Lisp_Int, EMACS_WIN(f)->LeftEdge);
  45027. +  if (EQ (top, Qunbound))
  45028. +    XSET (top, Lisp_Int, EMACS_WIN(f)->TopEdge);
  45029. +
  45030. +  /* Don't die if just one of these was set.  */
  45031. +  if (EQ (width, Qunbound))
  45032. +    XSET (width, Lisp_Int, FRAME_WIDTH (f));
  45033. +  if (EQ (height, Qunbound))
  45034. +    XSET (height, Lisp_Int, FRAME_HEIGHT (f));
  45035. +
  45036. +#if 0 /* CHFIXME */
  45037. +  /* Don't set these parameters these unless they've been explicitly
  45038. +     specified.  The window might be mapped or resized while we're in
  45039. +     this function, and we don't want to override that unless the lisp
  45040. +     code has asked for it.
  45041. +
  45042. +     Don't set these parameters unless they actually differ from the
  45043. +     window's current parameters; the window may not actually exist
  45044. +     yet.  */
  45045. +  {
  45046. +    Lisp_Object frame;
  45047. +
  45048. +    check_frame_size (f, &height, &width);
  45049. +
  45050. +    XSET (frame, Lisp_Frame, f);
  45051. +
  45052. +    if ((NUMBERP (width) && XINT (width) != FRAME_WIDTH (f))
  45053. +    || (NUMBERP (height) && XINT (height) != FRAME_HEIGHT (f)))
  45054. +      Fset_frame_size (frame, width, height);
  45055. +    if ((NUMBERP (left) && XINT (left) != emacs_win->LeftEdge)
  45056. +    || (NUMBERP (top) && XINT (top) != emacs_win->TopEdge))
  45057. +      Fset_frame_position (frame, left, top);
  45058. +  }
  45059. +#endif
  45060. +}
  45061. +
  45062. +/* Insert a description of internally-recorded parameters of frame X
  45063. +   into the parameter alist *ALISTPTR that is to be given to the user.
  45064. +   Only parameters that are specific to the X window system
  45065. +   and whose values are not correctly recorded in the frame's
  45066. +   param_alist need to be considered here.  */
  45067. +
  45068. +x_report_frame_params (f, alistptr) /* CHFIXME: fix references in frame.c */
  45069. +     FRAME_PTR f;
  45070. +     Lisp_Object *alistptr;
  45071. +{
  45072. +  char buf[16];
  45073. +
  45074. +  store_in_alist (alistptr, Qleft, make_number (EMACS_WIN(f)->LeftEdge));
  45075. +  store_in_alist (alistptr, Qtop, make_number (EMACS_WIN(f)->TopEdge));
  45076. +#if 0 /* CHFIXME: available on the AMIGA ! */
  45077. +  store_in_alist (alistptr, Qborder_width,
  45078. +              make_number (f->display.x->border_width));
  45079. +  store_in_alist (alistptr, Qinternal_border_width,
  45080. +              make_number (f->display.x->internal_border_width));
  45081. +  sprintf (buf, "%d", FRAME_AMIGA_WINDOW (f));
  45082. +  store_in_alist (alistptr, Qwindow_id,
  45083. +              build_string (buf));
  45084. +  FRAME_SAMPLE_VISIBILITY (f);
  45085. +  store_in_alist (alistptr, Qvisibility,
  45086. +          (FRAME_VISIBLE_P (f) ? Qt
  45087. +           : FRAME_ICONIFIED_P (f) ? Qicon : Qnil));
  45088. +#endif
  45089. +}
  45090. +
  45091. +#define CHFIXMELINE() fprintf(stderr,"CHFIXME: %s %d\n", __FILE__, __LINE__)
  45092. +
  45093. +void amiga_set_foreground_color (FRAME_PTR f, Lisp_Object pen, Lisp_Object oldval)
  45094. +{
  45095. +    int fg;
  45096. +    extern int foreground; /* CHFIXME */
  45097. +    
  45098. +  check_intuition();
  45099. +  CHECK_NUMBER(pen, 0);
  45100. +
  45101. +  fg = XUINT (pen);
  45102. +  if (pen > 7) error("Pen colors must be between 0 & 7");
  45103. +  foreground = fg;
  45104. +  reset_window(f);
  45105. +}
  45106. +void amiga_set_background_color (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45107. +{
  45108. +  CHFIXMELINE();
  45109. +}
  45110. +void amiga_set_mouse_color (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45111. +{
  45112. +  CHFIXMELINE();
  45113. +}
  45114. +void amiga_set_cursor_color (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45115. +{
  45116. +  CHFIXMELINE();
  45117. +}
  45118. +void amiga_set_border_color (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45119. +{
  45120. +  CHFIXMELINE();
  45121. +}
  45122. +void amiga_set_cursor_type (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45123. +{
  45124. +  CHFIXMELINE();
  45125. +}
  45126. +void amiga_set_icon_type (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45127. +{
  45128. +  CHFIXMELINE();
  45129. +}
  45130. +void amiga_set_font (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45131. +{
  45132. +  CHFIXMELINE();
  45133. +}
  45134. +void amiga_set_border_width (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45135. +{
  45136. +  CHFIXMELINE();
  45137. +}
  45138. +void amiga_set_internal_border_width (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45139. +{
  45140. +  CHFIXMELINE();
  45141. +}
  45142. +void amiga_explicitly_set_name (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45143. +{
  45144. +  CHFIXMELINE();
  45145. +}
  45146. +void amiga_set_autoraise (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45147. +{
  45148. +  CHFIXMELINE();
  45149. +}
  45150. +void amiga_set_autolower (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45151. +{
  45152. +  CHFIXMELINE();
  45153. +}
  45154. +void amiga_set_vertical_scroll_bars (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45155. +{
  45156. +  CHFIXMELINE();
  45157. +}
  45158. +void amiga_set_visibility (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)
  45159. +{
  45160. +  CHFIXMELINE();
  45161. +}
  45162. +
  45163. +void
  45164. +x_set_menu_bar_lines (FRAME_PTR f, Lisp_Object value, Lisp_Object oldval)/* CHFIXME: fix references in frame.c */
  45165. +{
  45166. +  int nlines;
  45167. +  int olines = FRAME_MENU_BAR_LINES (f);
  45168. +
  45169. +  fprintf(stderr,"amiga_set_menu_bar_lines\n");
  45170. +
  45171. +  /* Right now, menu bars don't work properly in minibuf-only frames;
  45172. +     most of the commands try to apply themselves to the minibuffer
  45173. +     frame itslef, and get an error because you can't switch buffers
  45174. +     in or split the minibuffer window.  */
  45175. +  if (FRAME_MINIBUF_ONLY_P (f))
  45176. +    return;
  45177. +
  45178. +  if (XTYPE (value) == Lisp_Int)
  45179. +    nlines = XINT (value);
  45180. +  else
  45181. +    nlines = 0;
  45182. +
  45183. +  FRAME_MENU_BAR_LINES (f) = 0;
  45184. +  fprintf(stderr,"\tnlines = %d\n", nlines);
  45185. +  if (nlines)
  45186. +    FRAME_EXTERNAL_MENU_BAR (f) = 1;
  45187. +  else
  45188. +    {
  45189. +#if 0 /* CHFIXME */
  45190. +      if (FRAME_EXTERNAL_MENU_BAR (f) == 1)
  45191. +      free_frame_menubar (f);
  45192. +#endif
  45193. +      FRAME_EXTERNAL_MENU_BAR (f) = 0;
  45194. +#if 0
  45195. +      f->display.x->menubar_widget = 0;
  45196. +#endif
  45197. +    }
  45198. +}
  45199. +
  45200. +void syms_of_amiga_fns(void)
  45201. +{
  45202. +  /* The section below is built by the lisp expression at the top of the file,
  45203. +     just above where these variables are declared.  */
  45204. +  /*&&& init symbols here &&&*/
  45205. +#if 0
  45206. +  Qauto_raise = intern ("auto-raise");
  45207. +  staticpro (&Qauto_raise);
  45208. +  Qauto_lower = intern ("auto-lower");
  45209. +  staticpro (&Qauto_lower);
  45210. +#endif
  45211. +  Qbackground_color = intern ("background-color");
  45212. +  staticpro (&Qbackground_color);
  45213. +#if 0
  45214. +  Qbar = intern ("bar");
  45215. +  staticpro (&Qbar);
  45216. +#endif
  45217. +  Qborder_color = intern ("border-color");
  45218. +  staticpro (&Qborder_color);
  45219. +  Qborder_width = intern ("border-width");
  45220. +  staticpro (&Qborder_width);
  45221. +#if 0
  45222. +  Qbox = intern ("box");
  45223. +  staticpro (&Qbox);
  45224. +  Qcursor_color = intern ("cursor-color");
  45225. +  staticpro (&Qcursor_color);
  45226. +  Qcursor_type = intern ("cursor-type");
  45227. +  staticpro (&Qcursor_type);
  45228. +  Qfont = intern ("font");
  45229. +  staticpro (&Qfont);
  45230. +#endif
  45231. +  Qforeground_color = intern ("foreground-color");
  45232. +  staticpro (&Qforeground_color);
  45233. +#if 0
  45234. +  Qgeometry = intern ("geometry");
  45235. +  staticpro (&Qgeometry);
  45236. +  Qicon_left = intern ("icon-left");
  45237. +  staticpro (&Qicon_left);
  45238. +  Qicon_top = intern ("icon-top");
  45239. +  staticpro (&Qicon_top);
  45240. +  Qicon_type = intern ("icon-type");
  45241. +  staticpro (&Qicon_type);
  45242. +  Qinternal_border_width = intern ("internal-border-width");
  45243. +  staticpro (&Qinternal_border_width);
  45244. +#endif
  45245. +  Qleft = intern ("left");
  45246. +  staticpro (&Qleft);
  45247. +#if 0
  45248. +  Qmouse_color = intern ("mouse-color");
  45249. +  staticpro (&Qmouse_color);
  45250. +  Qnone = intern ("none");
  45251. +  staticpro (&Qnone);
  45252. +  Qparent_id = intern ("parent-id");
  45253. +  staticpro (&Qparent_id);
  45254. +  Qsuppress_icon = intern ("suppress-icon");
  45255. +  staticpro (&Qsuppress_icon);
  45256. +#endif
  45257. +  Qtop = intern ("top");
  45258. +  staticpro (&Qtop);
  45259. +#if 0
  45260. +  Qundefined_color = intern ("undefined-color");
  45261. +  staticpro (&Qundefined_color);
  45262. +  Qvertical_scroll_bars = intern ("vertical-scroll-bars");
  45263. +  staticpro (&Qvertical_scroll_bars);
  45264. +  Qvisibility = intern ("visibility");
  45265. +  staticpro (&Qvisibility);
  45266. +  Qwindow_id = intern ("window-id");
  45267. +  staticpro (&Qwindow_id);
  45268. +#endif
  45269. +  Qamiga_frame_parameter = intern ("x-frame-parameter");
  45270. +  staticpro (&Qamiga_frame_parameter);
  45271. +#if 0
  45272. +  Quser_position = intern ("user-position");
  45273. +  staticpro (&Quser_position);
  45274. +  Quser_size = intern ("user-size");
  45275. +  staticpro (&Quser_size);
  45276. +#endif
  45277. +  /* This is the end of symbol initialization.  */
  45278. +
  45279. +  init_amiga_parm_symbols ();
  45280. +}
  45281. +
  45282. +void init_amiga_fns(void)
  45283. +{
  45284. +}
  45285. diff -rup --new-file baseline/fsf/emacs/src/amiga_fns_protos.h amiga/fsf/emacs/src/amiga_fns_protos.h
  45286. --- baseline/fsf/emacs/src/amiga_fns_protos.h    Wed Dec 31 17:00:00 1969
  45287. +++ amiga/fsf/emacs/src/amiga_fns_protos.h    Sat Sep 28 00:00:00 1996
  45288. @@ -0,0 +1,64 @@
  45289. +/* Prototypes for functions defined in
  45290. +amiga_fns.c
  45291. + */
  45292. +
  45293. +extern int Qbackground_color;
  45294. +
  45295. +extern int Qborder_color;
  45296. +
  45297. +extern int Qborder_width;
  45298. +
  45299. +extern int Qforeground_color;
  45300. +
  45301. +extern int Qleft;
  45302. +
  45303. +extern int Qtop;
  45304. +
  45305. +extern int Qamiga_frame_parameter;
  45306. +
  45307. +extern struct amiga_frame_parm_table __far amiga_frame_parms[16];
  45308. +
  45309. +int init_amiga_parm_symbols(void);
  45310. +
  45311. +void x_set_frame_parameters(int f,
  45312. +                            int alist);
  45313. +
  45314. +int x_report_frame_params(int f,
  45315. +                          int * alistptr);
  45316. +
  45317. +void amiga_set_foreground_color(int , int , int );
  45318. +
  45319. +void amiga_set_background_color(int , int , int );
  45320. +
  45321. +void amiga_set_mouse_color(int , int , int );
  45322. +
  45323. +void amiga_set_cursor_color(int , int , int );
  45324. +
  45325. +void amiga_set_border_color(int , int , int );
  45326. +
  45327. +void amiga_set_cursor_type(int , int , int );
  45328. +
  45329. +void amiga_set_icon_type(int , int , int );
  45330. +
  45331. +void amiga_set_font(int , int , int );
  45332. +
  45333. +void amiga_set_border_width(int , int , int );
  45334. +
  45335. +void amiga_set_internal_border_width(int , int , int );
  45336. +
  45337. +void amiga_explicitly_set_name(int , int , int );
  45338. +
  45339. +void amiga_set_autoraise(int , int , int );
  45340. +
  45341. +void amiga_set_autolower(int , int , int );
  45342. +
  45343. +void amiga_set_vertical_scroll_bars(int , int , int );
  45344. +
  45345. +void amiga_set_visibility(int , int , int );
  45346. +
  45347. +void x_set_menu_bar_lines(int , int , int );
  45348. +
  45349. +void syms_of_amiga_fns(void);
  45350. +
  45351. +void init_amiga_fns(void);
  45352. +
  45353. diff -rup --new-file baseline/fsf/emacs/src/amiga_malloc.c amiga/fsf/emacs/src/amiga_malloc.c
  45354. --- baseline/fsf/emacs/src/amiga_malloc.c    Wed Dec 31 17:00:00 1969
  45355. +++ amiga/fsf/emacs/src/amiga_malloc.c    Sat Sep 28 00:00:00 1996
  45356. @@ -0,0 +1,327 @@
  45357. +/* Emulation of some unix functions for emacs.
  45358. +Copyright (C) 1985, 1986, 1987, 1988 Free Software Foundation, Inc.
  45359. +
  45360. +This file is part of GNU Emacs.
  45361. +
  45362. +GNU Emacs is distributed in the hope that it will be useful,
  45363. +but WITHOUT ANY WARRANTY.  No author or distributor
  45364. +accepts responsibility to anyone for the consequences of using it
  45365. +or for whether it serves any particular purpose or works at all,
  45366. +unless he says so in writing.  Refer to the GNU Emacs General Public
  45367. +License for full details.
  45368. +
  45369. +Everyone is granted permission to copy, modify and redistribute
  45370. +GNU Emacs, but only under the conditions described in the
  45371. +GNU Emacs General Public License.   A copy of this license is
  45372. +supposed to have been given to you along with GNU Emacs so you
  45373. +can know your rights and responsibilities.  It should be in a
  45374. +file named COPYING.  Among other things, the copyright notice
  45375. +and this notice must be preserved on all copies.  */
  45376. +
  45377. +#include <exec/types.h>
  45378. +#include <exec/memory.h>
  45379. +#include <proto/exec.h>
  45380. +#include <stdlib.h>      /* malloc prototypes */
  45381. +
  45382. +#undef LONGBITS
  45383. +#include "config.h"
  45384. +#include "lisp.h"
  45385. +#include "amiga.h"
  45386. +
  45387. +/* Memory stuff */
  45388. +long far DataSegBits;
  45389. +static int DataSegFound;
  45390. +static struct mem_header *far current;
  45391. +struct mem_header *free_list;
  45392. +extern int alloca_calling;
  45393. +extern int *pure;
  45394. +long far pre_alloc;    /* amount of memory to reserve for emacs */
  45395. +char *malloc_hunk;
  45396. +long malloc_hunk_size = MALLOC_HUNK_SIZE; /* Amount of memory malloc'ed by a
  45397. +                         to-be-dumped emacs */
  45398. +long malloc_bytes_used;    /* Amount of this hunk actually used */
  45399. +static int early_malloc = TRUE;    /* Before we undump, we want system allocations */
  45400. +
  45401. +#define ADDR_OK(x) (((long)x & ~VALMASK) == DataSegBits)
  45402. +
  45403. +/* Memory allocation code */
  45404. +/* ---------------------- */
  45405. +
  45406. +static void *alloc_sys(long memsize)
  45407. +/* Effect: Allocate from AmigaOS (via AllocMem). */
  45408. +{
  45409. +  /* Allocation rounded up to multiple of 4 */
  45410. +  long size = ((memsize + 3) & ~3) + sizeof(struct mem_header);
  45411. +  struct mem_header *mem;
  45412. +
  45413. +  if (!DataSegFound)
  45414. +    {
  45415. +      /* Find page containing Pure data. All data used by emacs must be
  45416. +     on the same page (As a page is 2^26 bytes, this shouldn't be too
  45417. +     unlikely). */
  45418. +      DataSegBits = (long)&first_data & ~VALMASK;
  45419. +      if (!(ADDR_OK(first_fn) && ADDR_OK(last_fn) &&
  45420. +        ADDR_OK(&first_data) && ADDR_OK(&last_data) &&
  45421. +        ADDR_OK(&first_bss) && ADDR_OK(&last_bss)))
  45422. +    _fail("I can't handle your memory configuration");
  45423. +      DataSegFound = TRUE;
  45424. +    }
  45425. +
  45426. +  mem = AllocMem(size, 0);
  45427. +  if (!mem) return 0;
  45428. +  /* All memory *must* be allocated on the same page ! */
  45429. +  if (!ADDR_OK(mem))
  45430. +    {
  45431. +      FreeMem(mem, size);
  45432. +      return 0;
  45433. +    }
  45434. +  if (current) current->prev = mem;
  45435. +  mem->next = current;
  45436. +  mem->prev = 0;
  45437. +  current = mem;
  45438. +  mem->size = size;
  45439. +
  45440. +  return mem + 1;
  45441. +}
  45442. +
  45443. +static void free_sys(char *p)
  45444. +{
  45445. +  struct mem_header *old = (struct mem_header *)p - 1;
  45446. +
  45447. +  if (old == current)
  45448. +    {
  45449. +      current = current->next;
  45450. +      if (current) current->prev = 0;
  45451. +    }
  45452. +  else
  45453. +    {
  45454. +      old->prev->next = old->next;
  45455. +      if (old->next) old->next->prev = old->prev;
  45456. +    }
  45457. +  FreeMem(old, old->size);
  45458. +}
  45459. +
  45460. +void __stdargs _MemCleanup(void)
  45461. +{
  45462. +  struct mem_header *next;
  45463. +
  45464. +  while (current)
  45465. +    {
  45466. +      next = current->next;
  45467. +      FreeMem(current, current->size);
  45468. +      current = next;
  45469. +    }
  45470. +}
  45471. +
  45472. +static void *alloc_hunk(long memsize)
  45473. +/* Effect: Allocates from the malloc hunk (which is dumped to disk).
  45474. +*/
  45475. +{
  45476. +  /* Allocation rounded up to multiple of 4 */
  45477. +  long size = ((memsize + 3) & ~3) + sizeof(struct mem_header);
  45478. +  /* Find a free block in the memory list */
  45479. +  struct mem_header *scan = free_list->next;
  45480. +
  45481. +  while (scan->size > 0)
  45482. +    {
  45483. +      if (size < scan->size)    /* Found ! */
  45484. +    {
  45485. +      long end;
  45486. +
  45487. +      /* Split block if big enough */
  45488. +      if (size + sizeof(struct mem_header) + 8 > scan->size)
  45489. +        {
  45490. +          /* Remove block from list */
  45491. +          scan->prev->next = scan->next;
  45492. +          scan->next->prev = scan->prev;
  45493. +        }
  45494. +      else
  45495. +        {
  45496. +          /* Split block */
  45497. +          struct mem_header *new = (struct mem_header *)((char *)scan + size);
  45498. +
  45499. +          new->prev = scan->prev;
  45500. +          new->next = scan->next;
  45501. +          scan->prev->next = new;
  45502. +          scan->next->prev = new;
  45503. +          new->size = scan->size - size;
  45504. +          scan->size = size;
  45505. +        }
  45506. +      if (!amiga_initialized)
  45507. +        {
  45508. +          end = (char *)scan - (char *)free_list + scan->size +
  45509. +        sizeof(long) + sizeof(struct mem_header);
  45510. +          if (end > malloc_bytes_used) malloc_bytes_used = end;
  45511. +        }
  45512. +      return scan + 1;
  45513. +    }
  45514. +      scan = scan->next;
  45515. +    }
  45516. +  return 0;
  45517. +}
  45518. +
  45519. +static void free_hunk(char *p)
  45520. +{
  45521. +  struct mem_header *old = (struct mem_header *)p - 1, *scan = free_list;
  45522. +
  45523. +  do scan = scan->next; while (scan < old);
  45524. +
  45525. +  /* Check for merges (potentially with both sides) */
  45526. +  if ((char *)scan->prev + scan->prev->size == (char *)old)
  45527. +    if ((char *)old + old->size == (char *)scan)
  45528. +      {
  45529. +    /* Merge all 3 blocks together */
  45530. +    scan->prev->size += old->size + scan->size;
  45531. +    scan->next->prev = scan->prev;
  45532. +    scan->prev->next = scan->next;
  45533. +      }
  45534. +    else            /* Merge with previous block */
  45535. +      scan->prev->size += old->size;
  45536. +  else if ((char *)old + old->size == (char *)scan)
  45537. +    {
  45538. +      /* Merge with next block */
  45539. +      old->size += scan->size;
  45540. +      scan->prev->next = old;
  45541. +      scan->next->prev = old;
  45542. +      old->prev = scan->prev;
  45543. +      old->next = scan->next;
  45544. +    }
  45545. +  else                /* Add a new block */
  45546. +    {
  45547. +      old->next = scan;
  45548. +      old->prev = scan->prev;
  45549. +      scan->prev->next = old;
  45550. +      scan->prev = old;
  45551. +    }
  45552. +}
  45553. +
  45554. +void *__halloc(unsigned long size)
  45555. +{
  45556. +  if (early_malloc) return alloc_sys(size);
  45557. +
  45558. +  if (!amiga_initialized)
  45559. +    if (alloca_calling)
  45560. +      {
  45561. +    alloca_calling = 0;
  45562. +    return alloc_sys(size);
  45563. +      }
  45564. +    else
  45565. +      {
  45566. +    void *mem = alloc_hunk(size);
  45567. +
  45568. +    if (!mem) 
  45569. +      {
  45570. +        char buf[128];
  45571. +        sprintf (buf, "Emacs dump: ran out of memory for malloc. \n"
  45572. +             "Can't alloc %ld bytes (%ld in use - out of %ld).\n"
  45573. +             "See the -malloc option for more information.\n",
  45574. +             size, malloc_bytes_used, malloc_hunk_size);
  45575. +        _fail(buf);
  45576. +      }
  45577. +    return mem;
  45578. +      }
  45579. +  else
  45580. +    {
  45581. +      alloca_calling = 0;
  45582. +      if (pre_alloc)
  45583. +    {
  45584. +      void *mem;
  45585. +
  45586. +      if (mem = alloc_hunk(size)) return mem;
  45587. +    }
  45588. +      return alloc_sys(size);
  45589. +    }
  45590. +}
  45591. +
  45592. +void *malloc(unsigned int size)
  45593. +{
  45594. +  return __halloc(size);
  45595. +}
  45596. +
  45597. +void free(void *p)
  45598. +{
  45599. +  struct mem_header *old = (struct mem_header *)p - 1;
  45600. +
  45601. +  if ((char *)p >= malloc_hunk &&
  45602. +      (char *)p <= malloc_hunk + malloc_hunk_size + pre_alloc)
  45603. +    {
  45604. +      if (!amiga_initialized || pre_alloc) free_hunk(p);
  45605. +    }
  45606. +  else free_sys(p);
  45607. +}
  45608. +
  45609. +void *calloc(unsigned int n, unsigned int size)
  45610. +{
  45611. +  char *t;
  45612. +  long rsize = n * size;
  45613. +
  45614. +  t = malloc(rsize);
  45615. +  if (t) memset (t, 0, rsize);
  45616. +
  45617. +  return t;
  45618. +}
  45619. +
  45620. +void *realloc(void *p, unsigned int size)
  45621. +{
  45622. +  char *new = malloc(size);
  45623. +  struct mem_header *old = (struct mem_header *)p - 1;
  45624. +
  45625. +  if (new)
  45626. +    {
  45627. +      long minsize;
  45628. +      long oldsize = old->size - sizeof(struct mem_header);
  45629. +
  45630. +      if (size < oldsize) minsize = size;
  45631. +      else minsize = oldsize;
  45632. +
  45633. +      memcpy(new, p, minsize);
  45634. +    }
  45635. +  free(p);
  45636. +  return new;
  45637. +}
  45638. +
  45639. +void emacs_malloc_init(void)
  45640. +{
  45641. +  struct mem_header *end_sentinel, *new_end, *new_block;
  45642. +
  45643. +  early_malloc = FALSE;        /* We now have a malloc hunk */
  45644. +
  45645. +  /* Set up the memory allocation in the malloc hunk */
  45646. +  free_list = (struct mem_header *)malloc_hunk;
  45647. +  end_sentinel = (struct mem_header *)((char *)free_list + malloc_hunk_size
  45648. +                       - sizeof(struct mem_header));
  45649. +  if (!amiga_initialized)
  45650. +    {
  45651. +      /* Before dumping */
  45652. +      free_list->next = free_list + 1;
  45653. +      free_list->prev = 0;
  45654. +      free_list->size = 0;    /* Prevents merges with this pseudo-block */
  45655. +      free_list[1].prev = free_list;
  45656. +      free_list[1].next = end_sentinel;
  45657. +      free_list[1].size =
  45658. +    malloc_hunk_size - 2 * sizeof(struct mem_header) - sizeof(long);
  45659. +      /* The - sizeof(long) prevents any merges with end_sentinel */
  45660. +
  45661. +      end_sentinel->size = 0;
  45662. +      end_sentinel->prev = free_list + 1;
  45663. +      end_sentinel->next = 0;
  45664. +
  45665. +      malloc_bytes_used = 0;
  45666. +    }
  45667. +  else if (pre_alloc)
  45668. +    {
  45669. +      /* After having undumped extend malloc block */
  45670. +      /* Move end_sentinel: */
  45671. +      new_end = (struct mem_header *)((char *)free_list + malloc_hunk_size +
  45672. +                      pre_alloc - sizeof(struct mem_header));
  45673. +      new_end->size = 0;
  45674. +      new_end->next = 0;
  45675. +      new_end->prev = end_sentinel->prev;
  45676. +      end_sentinel->prev->next = new_end;
  45677. +
  45678. +      /* Add extra memory (pre_alloc bytes) */
  45679. +      new_block = (struct mem_header *)((char *)end_sentinel - sizeof(long));
  45680. +      new_block->size = pre_alloc;
  45681. +      free_hunk((char *)(new_block + 1));
  45682. +    }
  45683. +}
  45684. diff -rup --new-file baseline/fsf/emacs/src/amiga_malloc_protos.h amiga/fsf/emacs/src/amiga_malloc_protos.h
  45685. --- baseline/fsf/emacs/src/amiga_malloc_protos.h    Wed Dec 31 17:00:00 1969
  45686. +++ amiga/fsf/emacs/src/amiga_malloc_protos.h    Sat Sep 28 00:00:00 1996
  45687. @@ -0,0 +1,44 @@
  45688. +/* Prototypes for functions defined in
  45689. +amiga_malloc.c
  45690. + */
  45691. +
  45692. +extern long __far DataSegBits;
  45693. +
  45694. +extern int DataSegFound;
  45695. +
  45696. +extern struct mem_header * __far current;
  45697. +
  45698. +extern struct mem_header * free_list;
  45699. +
  45700. +extern long __far pre_alloc;
  45701. +
  45702. +extern char * malloc_hunk;
  45703. +
  45704. +extern long malloc_hunk_size;
  45705. +
  45706. +extern long malloc_bytes_used;
  45707. +
  45708. +extern int early_malloc;
  45709. +
  45710. +void * alloc_sys(long );
  45711. +
  45712. +void free_sys(void * );
  45713. +
  45714. +void _MemCleanup(void);
  45715. +
  45716. +void * alloc_hunk(long );
  45717. +
  45718. +void free_hunk(void * );
  45719. +
  45720. +void * __halloc(unsigned long );
  45721. +
  45722. +void * malloc(unsigned int );
  45723. +
  45724. +void free(void * );
  45725. +
  45726. +void * calloc(unsigned int, unsigned int );
  45727. +
  45728. +void * realloc(void * , unsigned int );
  45729. +
  45730. +void emacs_malloc_init(void);
  45731. +
  45732. diff -rup --new-file baseline/fsf/emacs/src/amiga_menu.c amiga/fsf/emacs/src/amiga_menu.c
  45733. --- baseline/fsf/emacs/src/amiga_menu.c    Wed Dec 31 17:00:00 1969
  45734. +++ amiga/fsf/emacs/src/amiga_menu.c    Sat Sep 28 00:00:00 1996
  45735. @@ -0,0 +1,127 @@
  45736. +/* Amiga menu bar related stuff.
  45737. +   Copyright (C) 1986, 1988, 1993, 1994 Free Software Foundation, Inc.
  45738. +
  45739. +This file is part of GNU Emacs.
  45740. +
  45741. +GNU Emacs is free software; you can redistribute it and/or modify
  45742. +it under the terms of the GNU General Public License as published by
  45743. +the Free Software Foundation; either version 1, or (at your option)
  45744. +any later version.
  45745. +
  45746. +GNU Emacs is distributed in the hope that it will be useful,
  45747. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  45748. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  45749. +GNU General Public License for more details.
  45750. +
  45751. +You should have received a copy of the GNU General Public License
  45752. +along with GNU Emacs; see the file COPYING.  If not, write to
  45753. +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  45754. +
  45755. +/* Original Amiga version by David Gay, 
  45756. + * Emacs 19 version by Carsten Heyl,
  45757. + * took lot of code from xmenu.c
  45758. + */
  45759. +
  45760. +#include <exec/types.h>
  45761. +#include <libraries/gadtools.h>
  45762. +#include <intuition/intuition.h>
  45763. +#include <proto/exec.h>
  45764. +#include <proto/dos.h>
  45765. +#include <proto/gadtools.h>
  45766. +#include <proto/intuition.h>
  45767. +#include "config.h"
  45768. +#include "lisp.h"
  45769. +#include "frame.h"
  45770. +#include "amiga.h"
  45771. +
  45772. +#ifdef USE_PROTOS
  45773. +#include "protos.h"
  45774. +#endif
  45775. +
  45776. +#ifndef GTMN_NewLookMenus
  45777. +#define GTMN_NewLookMenus    GT_TagBase+67
  45778. +#endif
  45779. +
  45780. +#if 0
  45781. +static struct Menu *emacs_menu;
  45782. +static char *emacs_menu_strings;
  45783. +static APTR win_vi;
  45784. +#endif
  45785. +struct Library *GadToolsBase;
  45786. +
  45787. +static void Famiga_delete_menus(FRAME_PTR f);
  45788. +
  45789. +void suspend_menus(FRAME_PTR f)
  45790. +{
  45791. +  if (EMACS_WIN(f))
  45792. +    {
  45793. +      ClearMenuStrip(EMACS_WIN(f));
  45794. +      if (EMACS_VI(f))
  45795. +    {
  45796. +      FreeVisualInfo(EMACS_VI(f));
  45797. +      EMACS_VI(f) = 0;
  45798. +    }
  45799. +    }
  45800. +}
  45801. +
  45802. +int resume_menus(FRAME_PTR f)
  45803. +{
  45804. +  if (EMACS_WIN(f) && EMACS_MENU(f))
  45805. +    {
  45806. +      EMACS_VI(f) = GetVisualInfo(EMACS_WIN(f)->WScreen, TAG_END);
  45807. +
  45808. +      if (!EMACS_VI(f) || !LayoutMenus(EMACS_MENU(f), EMACS_VI(f),
  45809. +                  GTMN_NewLookMenus, 1L,
  45810. +                  TAG_END))
  45811. +    {
  45812. +      if (EMACS_VI(f)) FreeVisualInfo(EMACS_VI(f));
  45813. +      Famiga_delete_menus(f);
  45814. +
  45815. +      return FALSE;
  45816. +    }
  45817. +      SetMenuStrip(EMACS_WIN(f), EMACS_MENU(f));
  45818. +    }
  45819. +  return TRUE;
  45820. +}
  45821. +
  45822. +static 
  45823. +void Famiga_delete_menus(FRAME_PTR f)
  45824. +{
  45825. +    check_intuition();
  45826. +
  45827. +    suspend_menus(f);
  45828. +    if (EMACS_MENU(f)) FreeMenus(EMACS_MENU(f));
  45829. +    EMACS_MENU(f) = 0;
  45830. +    if (EMACS_MENU_STRINGS(f)) free(EMACS_MENU_STRINGS(f));
  45831. +    EMACS_MENU_STRINGS(f) = 0;
  45832. +}
  45833. +
  45834. +
  45835. +void syms_of_amiga_fns(void);
  45836. +void init_amiga_fns(void);
  45837. +void syms_of_amiga_xmenu(void);
  45838. +void init_amiga_xmenu(void);
  45839. +
  45840. +void syms_of_amiga_menu(void)
  45841. +{
  45842. +    syms_of_amiga_fns();
  45843. +    syms_of_amiga_xmenu();
  45844. +}
  45845. +
  45846. +void init_amiga_menu(void)
  45847. +{
  45848. +    GadToolsBase = OpenLibrary("gadtools.library", 0);
  45849. +    if (!GadToolsBase) _fail("gadtools.library required");
  45850. +    init_amiga_fns();
  45851. +}
  45852. +
  45853. +void cleanup_amiga_menu(void)
  45854. +{
  45855. +#ifdef MULTI_FRAME
  45856. +  you lose
  45857. +#endif
  45858. +  suspend_menus(selected_frame);
  45859. +  if (EMACS_MENU(f)) Famiga_delete_menus(selected_frame);
  45860. +  if (GadToolsBase) CloseLibrary(GadToolsBase);
  45861. +}
  45862. +
  45863. diff -rup --new-file baseline/fsf/emacs/src/amiga_menu_protos.h amiga/fsf/emacs/src/amiga_menu_protos.h
  45864. --- baseline/fsf/emacs/src/amiga_menu_protos.h    Wed Dec 31 17:00:00 1969
  45865. +++ amiga/fsf/emacs/src/amiga_menu_protos.h    Sat Sep 28 00:00:00 1996
  45866. @@ -0,0 +1,18 @@
  45867. +/* Prototypes for functions defined in
  45868. +amiga_menu.c
  45869. + */
  45870. +
  45871. +extern struct Library * GadToolsBase;
  45872. +
  45873. +void suspend_menus(int );
  45874. +
  45875. +int resume_menus(int );
  45876. +
  45877. +void Famiga_delete_menus(int );
  45878. +
  45879. +void syms_of_amiga_menu(void);
  45880. +
  45881. +void init_amiga_menu(void);
  45882. +
  45883. +void cleanup_amiga_menu(void);
  45884. +
  45885. diff -rup --new-file baseline/fsf/emacs/src/amiga_processes.c amiga/fsf/emacs/src/amiga_processes.c
  45886. --- baseline/fsf/emacs/src/amiga_processes.c    Wed Dec 31 17:00:00 1969
  45887. +++ amiga/fsf/emacs/src/amiga_processes.c    Sat Sep 28 00:00:00 1996
  45888. @@ -0,0 +1,98 @@
  45889. +#include <exec/types.h>
  45890. +#include <exec/execbase.h>
  45891. +#include <exec/memory.h>
  45892. +#include <dos/dos.h>
  45893. +#include <dos/dosextens.h>
  45894. +#include <dos/dostags.h>
  45895. +#include <proto/exec.h>
  45896. +#include <proto/dos.h>
  45897. +#include <clib/alib_protos.h>
  45898. +#include <signal.h>
  45899. +#undef signal
  45900. +#include <ios1.h>
  45901. +#include <string.h>
  45902. +#include <errno.h>
  45903. +#include <stdio.h>
  45904. +#include <internal/vars.h>
  45905. +
  45906. +#include "config.h"
  45907. +#include "lisp.h"
  45908. +#include "amiga.h"
  45909. +#include "emacssignal.h"
  45910. +
  45911. +#ifdef USE_PROTOS
  45912. +#include "protos.h"
  45913. +#endif
  45914. +
  45915. +extern struct ExecBase *SysBase;
  45916. +
  45917. +int amiga_process_stack_size;
  45918. +
  45919. +/* A few emacs support functions */
  45920. +/* ----------------------------- */
  45921. +
  45922. +wait_for_termination (pid)
  45923. +     int pid;
  45924. +{
  45925. +  while (1)
  45926. +    {
  45927. +      sigsetmask (sigmask (SIGCHLD));
  45928. +      if (0 > kill (pid, 0))
  45929. +        {
  45930. +      sigsetmask (SIGEMPTYMASK);
  45931. +      break;
  45932. +    }
  45933. +      sigpause (SIGEMPTYMASK);
  45934. +    }
  45935. +}
  45936. +
  45937. +char *amiga_path(void)
  45938. +{
  45939. +  char *path, *pp, name[128];
  45940. +  int pathsize;
  45941. +  struct CommandLineInterface *cli;
  45942. +  BPTR lock;
  45943. +  long l, *lp, nlen;
  45944. +
  45945. +  pathsize = 128;
  45946. +  path = (char *)xmalloc(pathsize);
  45947. +
  45948. +  strcpy(path, ".");
  45949. +  pp = path + 1;
  45950. +
  45951. +  if (!(cli = (struct CommandLineInterface *)((long)_us->pr_CLI << 2)))
  45952. +    return path;
  45953. +
  45954. +  l = (long)cli->cli_CommandDir;
  45955. +  while (l) {
  45956. +    *pp++ = ',';
  45957. +    l <<= 2;
  45958. +    lp = (long *)l;
  45959. +    lock = (BPTR)*(lp + 1);
  45960. +    NameFromLock(lock, name, 128);
  45961. +    nlen = strlen(name);
  45962. +    if (pp + nlen + 5 >= path + pathsize)
  45963. +      {
  45964. +    char *newpath;
  45965. +
  45966. +    pathsize = 2 * pathsize + nlen;
  45967. +    newpath = (char *)xrealloc(path);
  45968. +    pp = newpath + (pp - path);
  45969. +    path = newpath;
  45970. +      }
  45971. +    memcpy(pp, name, nlen);
  45972. +    pp += nlen;
  45973. +    l = *lp;
  45974. +  }
  45975. +  /* Use of +5 above guarantees that there is enough space for c: */
  45976. +  strcpy(pp, ",c:");
  45977. +
  45978. +  return path;
  45979. +}
  45980. +
  45981. +void syms_of_amiga_processes(void)
  45982. +{
  45983. +  amiga_process_stack_size = 0;
  45984. +  DEFVAR_INT("amiga-process-stack-size", &amiga_process_stack_size,
  45985. +     "Size of stack for called processes. 0 means same size as emacs stack.");
  45986. +}
  45987. diff -rup --new-file baseline/fsf/emacs/src/amiga_rexx.c amiga/fsf/emacs/src/amiga_rexx.c
  45988. --- baseline/fsf/emacs/src/amiga_rexx.c    Wed Dec 31 17:00:00 1969
  45989. +++ amiga/fsf/emacs/src/amiga_rexx.c    Sat Sep 28 00:00:00 1996
  45990. @@ -0,0 +1,463 @@
  45991. +/* low level ARexx code for use in amiga version of Emacs.
  45992. +   Copyright (C) 1993 Christian E. Hopps.
  45993. +
  45994. +This file is part of GNU Emacs.
  45995. +
  45996. +GNU Emacs is free software; you can redistribute it and/or modify
  45997. +it under the terms of the GNU General Public License as published by
  45998. +the Free Software Foundation; either version 1, or (at your option)
  45999. +any later version.
  46000. +
  46001. +GNU Emacs is distributed in the hope that it will be useful,
  46002. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  46003. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  46004. +GNU General Public License for more details.
  46005. +
  46006. +You should have received a copy of the GNU General Public License
  46007. +along with GNU Emacs; see the file COPYING.  If not, write to
  46008. +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  46009. +
  46010. +#include "SimpleRexx.h"
  46011. +#include <proto/exec.h>
  46012. +#include "config.h"
  46013. +#include "lisp.h"
  46014. +
  46015. +#include "amiga.h"
  46016. +
  46017. +#ifdef USE_PROTOS
  46018. +#include "protos.h"
  46019. +#endif
  46020. +
  46021. +#define XLRXMSG(x) ((struct LispRexxMsg *) XPNTR((x)))
  46022. +#define XSETLRXMSG(x,v) (XSET((x), Lisp_Int, v))
  46023. +
  46024. +static AREXXCONTEXT far handle;
  46025. +static int amiga_arexx_initialized;
  46026. +
  46027. +/* This structure should be allocated with emacs_malloc() its pointer will be */
  46028. +/* used as an msgid. (emacs XUINT())*/
  46029. +struct LispRexxMsg {
  46030. +  struct MinNode  lrm_Node;              /* A node for tracking messages. */
  46031. +  struct RexxMsg *lrm_Msg;              /* The actual Rexx Msg. */
  46032. +  ULONG  lrm_Flags;
  46033. +};
  46034. +/* Flags for LispRexxMessage indicating what to do with it. */
  46035. +#define LRMF_SENTCMD (1L << 0)              /* this msg originated here. */
  46036. +#define LRMF_DOERRORS (1L << 1)              /* handle error replies */
  46037. +#define LRMF_DORESULTS (1L << 2)          /* handle result strings */
  46038. +
  46039. +struct LispRexxList {
  46040. +    struct MinList lrl_List;
  46041. +    int    lrl_Count;
  46042. +};
  46043. +
  46044. +struct LispRexxList pending;              /* The list of pending */
  46045. +                          /* (outgoing) Rexx Messages. */
  46046. +struct LispRexxList returned;              /* The list of pending */
  46047. +                          /* (outgoing) Rexx Messages */
  46048. +                          /* that have been received. */
  46049. +struct LispRexxList incoming;              /* The message that are */
  46050. +                          /* incoming to Emacs (sent */
  46051. +                          /* from some other rexx host. */
  46052. +
  46053. +/* allocate a rexx message properly */
  46054. +Lisp_Object alloc_rexx_msg(ULONG flags)
  46055. +{
  46056. +    Lisp_Object rm = Qnil;
  46057. +    struct LispRexxMsg *lrm = (struct LispRexxMsg *)malloc(sizeof(*lrm));
  46058. +    if(lrm) {
  46059. +    lrm->lrm_Flags = flags;
  46060. +    XSETLRXMSG(rm,lrm);
  46061. +    return(rm);
  46062. +    }
  46063. +    return(Qnil);
  46064. +}
  46065. +
  46066. +/* free an arexx message allocated with alloc_arexx_msg() */
  46067. +void free_rexx_msg (Lisp_Object rm)
  46068. +{
  46069. +    if(!NILP(rm)) {
  46070. +    void *mem = XLRXMSG(rm);
  46071. +    free(mem);
  46072. +    }
  46073. +}
  46074. +
  46075. +/* The next 2 functions imlement FIFO lists. */
  46076. +
  46077. +/* add LispRexxMsg to a LispRexxLisp Tail. */
  46078. +void add_rexx_msg_to_tail(struct LispRexxList *rl, Lisp_Object rm)
  46079. +{
  46080. +    AddTail((struct List *)rl,(struct Node *)XPNTR(rm));
  46081. +    rl->lrl_Count++;
  46082. +}
  46083. +
  46084. +/* remove LispRexxMsg from head of a LispRexxLisp. */
  46085. +Lisp_Object remove_rexx_msg_from_head(struct LispRexxList *rl)
  46086. +{
  46087. +    Lisp_Object rm = (Lisp_Object)RemHead((struct List *)rl);
  46088. +    if(rm != 0) {
  46089. +    rl->lrl_Count--;
  46090. +    return(rm);
  46091. +    } else {
  46092. +        return Qnil;
  46093. +    }
  46094. +}
  46095. +
  46096. +void remove_rexx_msg(struct LispRexxList *rl, Lisp_Object rm)
  46097. +{
  46098. +    Remove((struct Node *)XPNTR(rm));
  46099. +    rl->lrl_Count--;
  46100. +}
  46101. +
  46102. +
  46103. +/* find a rexx message on a list given an msgid (ptr) */
  46104. +int is_rexx_msgid_on_list(struct LispRexxList *rl,
  46105. +                    Lisp_Object id)
  46106. +{
  46107. +    struct MinNode *mn = rl->lrl_List.mlh_Head;
  46108. +    for(mn; mn->mln_Succ; mn = mn->mln_Succ) {
  46109. +    Lisp_Object cmpid = Qnil;
  46110. +    XSETLRXMSG(cmpid,mn);
  46111. +    if( EQ(cmpid,id)) {
  46112. +        return(1);
  46113. +    }
  46114. +    }
  46115. +    return(0);
  46116. +}
  46117. +
  46118. +Lisp_Object find_rexx_msg_on_list(struct LispRexxList *rl,
  46119. +                  struct RexxMsg *msg)
  46120. +{
  46121. +    Lisp_Object pnt = Qnil;
  46122. +    struct MinNode *mn = rl->lrl_List.mlh_Head;
  46123. +    for(mn; mn->mln_Succ; mn = mn->mln_Succ) {
  46124. +    if( ((struct LispRexxMsg *)mn)->lrm_Msg == msg) {
  46125. +        XSETLRXMSG(pnt,mn);
  46126. +    }
  46127. +    }
  46128. +    return(pnt);
  46129. +}
  46130. +
  46131. +/* This function is given a RexxMsg and it goes and find (or doesn't) the */
  46132. +/* corisponding pending message, removes it from the list and sets up the lisp */
  46133. +/* list for return values.  if it is not found nil is returned. (it deals with */
  46134. +/* the errors for incoming messages properly.  Some thought is needed on how to */
  46135. +/* handle errors from replied sent commands that were not asking for results. */
  46136. +Lisp_Object handle_rexx_msg_replied(struct RexxMsg *msg)
  46137. +{
  46138. +    Lisp_Object rm = find_rexx_msg_on_list(&pending, msg);
  46139. +    if(!NILP(rm)) {
  46140. +    /* Process the command.  If it was requesting results strings handle */
  46141. +    /* them otherwise just delete. */
  46142. +    struct LispRexxMsg *lrm = XLRXMSG(rm);
  46143. +    remove_rexx_msg(&pending, rm);
  46144. +
  46145. +    if(msg->rm_Result1 == 0) {
  46146. +        if(lrm->lrm_Flags & LRMF_DORESULTS) {
  46147. +        /* add to returned so that result can be fetched. */
  46148. +        add_rexx_msg_to_tail(&returned,rm);
  46149. +        } else {
  46150. +        /* simply delete rexx message. */
  46151. +        DeleteARexxMsg(handle,msg);
  46152. +        free_rexx_msg(rm);
  46153. +        }
  46154. +    } else {
  46155. +        /* an error occured with our message. */
  46156. +        if(lrm->lrm_Flags & LRMF_DOERRORS) {
  46157. +        /* add to returned so that error can be fetched. */
  46158. +        add_rexx_msg_to_tail(&returned,rm);
  46159. +        } else {
  46160. +        /* simply delete rexx message. */
  46161. +        DeleteARexxMsg(handle,msg);
  46162. +        free_rexx_msg(rm);
  46163. +        }
  46164. +    }
  46165. +    } else {
  46166. +    /* This should never happen we received a rexx message reply */
  46167. +    /* that we never sent out. */
  46168. +    DeleteARexxMsg(handle,msg);
  46169. +    }
  46170. +}
  46171. +
  46172. +/* This function takes incoming messages and place them on the incoming msg */
  46173. +/* list.  */
  46174. +Lisp_Object handle_rexx_msg_received(struct RexxMsg *msg)
  46175. +{
  46176. +    Lisp_Object rm = alloc_rexx_msg(LRMF_DORESULTS|LRMF_DOERRORS);
  46177. +    if(!NILP(rm)) {
  46178. +    /* Add message to incoming list. */
  46179. +    struct LispRexxMsg *lrm = XLRXMSG(rm);
  46180. +    lrm->lrm_Msg = msg;              /* set msg pointer. */
  46181. +    add_rexx_msg_to_tail(&incoming,rm);
  46182. +    } else {
  46183. +    /* This should never happen we received a rexx message but ran out of */
  46184. +    /* memory.  Set last error msg. and reply with fail. */
  46185. +    SetARexxLastError(handle, msg, "Out of emacs memory.");
  46186. +    ReplyARexxMsg(handle, msg, 0, 20);
  46187. +    }
  46188. +}
  46189. +
  46190. +/* Almost the same as old one, but we now call handle_pending_arexx_reply() for */
  46191. +/* replied messages that we sent, so that we can setup result strings and such. */
  46192. +int check_arexx(int force, int kbd)
  46193. +{
  46194. +    struct RexxMsg *msg;
  46195. +    int msg_received = FALSE;
  46196. +    while (msg = GetARexxMsg(handle)) {
  46197. +    msg_received = TRUE;
  46198. +    if(msg->rm_Node.mn_Node.ln_Type == NT_REPLYMSG)    {
  46199. +        /* This is a reply to a rexx command we send out. */
  46200. +        handle_rexx_msg_replied(msg);
  46201. +    } else {
  46202. +        handle_rexx_msg_received(msg);
  46203. +    }
  46204. +    }
  46205. +    if ((kbd && amiga_arexx_initialized)) {
  46206. +    /* if we got a message or we have some out, or we have some waiting to */
  46207. +    /* be processes then enque the Key sequence that will call the rexx */
  46208. +    /* message handler.  We obviously don't do this for returned commands :^) */
  46209. +    if ((msg_received || force && incoming.lrl_Count > 0) &&
  46210. +        get_ttycount() == 0) {
  46211. +        enque(AMIGASEQ, FALSE, FALSE); enque('X', FALSE, FALSE);
  46212. +    }
  46213. +    }
  46214. +    return msg_received;
  46215. +}
  46216. +
  46217. +DEFUN ("amiga-arexx-wait", Famiga_arexx_wait, Samiga_arexx_wait, 0, 0, 0,
  46218. +       "Wait for an ARexx event (command or reply) before proceeding.")
  46219. +    ()
  46220. +{
  46221. +    while (!check_arexx(FALSE, FALSE)) Wait(ARexxSignal(handle));
  46222. +}
  46223. +
  46224. +DEFUN ("amiga-arexx-check-command",
  46225. +       Famiga_arexx_check_command, Samiga_arexx_check_command, 1, 1, 0,
  46226. +       "Return t if command ID has finished, nil otherwise.")
  46227. +    (id)
  46228. +Lisp_Object id;
  46229. +{
  46230. +    CHECK_NUMBER(id,0);
  46231. +
  46232. +    if(is_rexx_msgid_on_list(&pending,id)) {
  46233. +    /* still on pending return false. */
  46234. +    return Qnil;
  46235. +    } else if(is_rexx_msgid_on_list(&returned,id)) {
  46236. +    /* is waiting to be processed return true. */
  46237. +    return Qt;
  46238. +    }
  46239. +
  46240. +    /* is nowhere to be found. error. */
  46241. +    error("id not found.");
  46242. +    return Qnil;
  46243. +}
  46244. +
  46245. +DEFUN ("amiga-arexx-get-next-msg", Famiga_arexx_get_next_msg,
  46246. +       Samiga_get_next_msg, 0, 0, 0,
  46247. +"Returns the oldest arexx msg sent to emacs rexx port.\n\
  46248. +When you are through with this message call (amiga-arexx-reply).\n\
  46249. +if the msg is not replied this function will continue to\n\
  46250. +return that msg until it has been replied to.")
  46251. +  ()
  46252. +{
  46253. +    struct RexxMsg *rmsg;
  46254. +
  46255. +    check_arexx(FALSE, FALSE);
  46256. +    if (incoming.lrl_Count) {
  46257. +    struct RexxMsg *msg = ((struct LispRexxMsg *)
  46258. +                   incoming.lrl_List.mlh_Head)->lrm_Msg;
  46259. +    return build_string(ARG0(msg));
  46260. +    }
  46261. +    /* nothing to be gotten. */
  46262. +    return Qnil;
  46263. +}
  46264. +
  46265. +DEFUN("amiga-arexx-get-msg-results", Famiga_arexx_get_msg_results,
  46266. +      Samiga_arexx_get_msg_results, 1,1,0,
  46267. +"Returns the results from MSGID. will be a list of the form:\n\
  46268. +  (msgid resultcode secondary)\n\n\
  46269. +If resultcode is 0 then secondary will be a string or nil.\n\
  46270. +else resulcode will be greater than 0 and secondary will be\n\
  46271. +an error-code (int).\n\n\
  46272. +If MSGID has not yet completed nil is returned.\n\
  46273. +if MSGID has been dealt with or is invalid and error will occur.")
  46274. +    (msgid)
  46275. +Lisp_Object msgid;
  46276. +{
  46277. +    CHECK_NUMBER(msgid,0);
  46278. +
  46279. +    if(is_rexx_msgid_on_list(&returned,msgid)) {
  46280. +    /* msgid has completed build list and delete LispRexxMsg. */
  46281. +    struct LispRexxMsg *lrm = XLRXMSG(msgid);
  46282. +    Lisp_Object rc, error_or_string, ret;
  46283. +    struct RexxMsg *msg = lrm->lrm_Msg;
  46284. +
  46285. +    remove_rexx_msg(&returned,msgid);
  46286. +
  46287. +    rc = make_number(msg->rm_Result1);
  46288. +    if(msg->rm_Result1 == 0) {
  46289. +        error_or_string = msg->rm_Result2 ? build_string((char *) msg->rm_Result2) : 0;
  46290. +    } else {
  46291. +        /* error occurred */
  46292. +        error_or_string = make_number(msg->rm_Result2); /* save error code. */
  46293. +    }
  46294. +    free_rexx_msg(msgid);              /* free our rexx msg. */
  46295. +    DeleteARexxMsg(handle,msg);          /* free ARexx msg proper */
  46296. +
  46297. +    /* build lisp list. */
  46298. +    ret = Fcons( msgid, Fcons( rc, Fcons(error_or_string, Qnil)));
  46299. +    if(NILP(ret)) {
  46300. +        error("Couldn't get memory.");
  46301. +    }
  46302. +    return(ret);
  46303. +    } else if(is_rexx_msgid_on_list(&pending,msgid)) {
  46304. +    return Qnil;                  /* this msgid has not yet completed. */
  46305. +    } else {
  46306. +    error("Unknown MSGID.");
  46307. +    return Qnil;
  46308. +    }
  46309. +}
  46310. +
  46311. +DEFUN ("amiga-arexx-reply", Famiga_arexx_reply, Samiga_arexx_reply,
  46312. +       2, 2, 0,
  46313. +"Replies to the first arexx message (the one got via amiga-arexx-get-event)\n\
  46314. +with RC as return code.\n\
  46315. +If RC=0, TEXT is the result, otherwise it is the error text. It can be nil.")
  46316. +    (rc, text)
  46317. +Lisp_Object rc, text;
  46318. +{
  46319. +    int retcode, ok = TRUE;
  46320. +    char *result;
  46321. +    struct RexxMsg *rmsg;
  46322. +    Lisp_Object rm = remove_rexx_msg_from_head(&incoming);
  46323. +    struct LispRexxMsg *lrm = XLRXMSG(rm);
  46324. +
  46325. +    if (NILP(rm))
  46326. +    error("No ARexx message to reply to.");
  46327. +
  46328. +    rmsg = lrm->lrm_Msg;
  46329. +
  46330. +    CHECK_NUMBER(rc, 0);
  46331. +    retcode = XINT(rc);
  46332. +
  46333. +    if (!NILP (text)) {
  46334. +    CHECK_STRING(text, 0);
  46335. +    result = XSTRING (text)->data;
  46336. +    } else {
  46337. +    result = 0;
  46338. +    }
  46339. +    if (retcode && result)
  46340. +    ok = SetARexxLastError(handle, rmsg, result);
  46341. +    ReplyARexxMsg(handle, rmsg, result, retcode);
  46342. +
  46343. +    if (!ok)
  46344. +    error("Failed to set ARexx error message.");
  46345. +
  46346. +    return Qnil;
  46347. +}
  46348. +
  46349. +Lisp_Object send_rexx_command(Lisp_Object str, Lisp_Object as_file,
  46350. +                  ULONG flags)
  46351. +{
  46352. +    struct RexxMsg *rmsg;
  46353. +    int i;
  46354. +    Lisp_Object id, rm;
  46355. +    struct LispRexxMsg *lrm;
  46356. +
  46357. +    rm = alloc_rexx_msg(flags);
  46358. +    if(NILP(rm)) {
  46359. +    error("Failed to send command to ARexx.");
  46360. +    return Qnil;
  46361. +    }
  46362. +
  46363. +    CHECK_STRING (str, 0);
  46364. +    if (!(rmsg = SendARexxMsg(handle, XSTRING (str)->data,!NILP (as_file),
  46365. +                  (flags & LRMF_DORESULTS ? 1 : 0)))) {
  46366. +    free_rexx_msg(rm);
  46367. +    error("Failed to send command to ARexx.");
  46368. +    return Qnil;
  46369. +    }
  46370. +    lrm = XLRXMSG(rm);
  46371. +    lrm->lrm_Msg = rmsg;              /* set rexx message pointer. */
  46372. +    add_rexx_msg_to_tail(&pending,rm);          /* add to pending list. */
  46373. +
  46374. +    return(rm);
  46375. +}
  46376. +
  46377. +DEFUN ("amiga-arexx-send-command", Famiga_arexx_send_command,
  46378. +       Samiga_arexx_send_command, 1, 2, 0,
  46379. +"Sends a command to ARexx for execution.\n\
  46380. +If the second arg is non-nil, the command is directly interpreted.\n\
  46381. +Returns an integer that uniquely identifies this message.  This must\n\
  46382. +then be used to get the results from the command.\n\
  46383. +NOTE: this is very different from old way things worked.\n\
  46384. +      earlier versions of emacs discarded successful results\n\
  46385. +      and errors always got replied to becuase they caused failures\n\
  46386. +      Neither of these are true now.\
  46387. +This function is also no longer interactive.\n\
  46388. +Use (amiga-arexx-do-command)\n")
  46389. +    (str, as_file)
  46390. +Lisp_Object str, as_file;
  46391. +{
  46392. +    return(send_rexx_command(str,as_file,
  46393. +                 LRMF_DORESULTS|
  46394. +                 LRMF_DOERRORS|
  46395. +                 LRMF_SENTCMD));
  46396. +}
  46397. +
  46398. +void init_amiga_rexx(void)
  46399. +{
  46400. +    extern ULONG inputsig;
  46401. +    int i;
  46402. +
  46403. +    handle = InitARexx("Emacs", "elx");
  46404. +    inputsig |= ARexxSignal(handle);
  46405. +
  46406. +    /* init exec lists. */
  46407. +    NewList((struct List *)&incoming.lrl_List);
  46408. +    incoming.lrl_Count = 0;
  46409. +
  46410. +    NewList((struct List *)&pending.lrl_List);
  46411. +    pending.lrl_Count = 0;
  46412. +
  46413. +    NewList((struct List *)&returned.lrl_List);
  46414. +    returned.lrl_Count = 0;
  46415. +}
  46416. +
  46417. +void cleanup_amiga_rexx(void)
  46418. +{
  46419. +    /* Delete and reply all rexx messages we have gotten. */
  46420. +    Lisp_Object rm = remove_rexx_msg_from_head(&returned);
  46421. +    while(!NILP(rm)) {
  46422. +    struct LispRexxMsg *lrm = XLRXMSG(rm);
  46423. +    DeleteARexxMsg(handle,lrm->lrm_Msg);
  46424. +    free_rexx_msg(rm);
  46425. +    rm = remove_rexx_msg_from_head(&returned);
  46426. +    }
  46427. +
  46428. +    rm = remove_rexx_msg_from_head(&incoming);
  46429. +    while(!NILP(rm)) {
  46430. +    struct LispRexxMsg *lrm = XLRXMSG(rm);
  46431. +    ReplyARexxMsg(handle, lrm->lrm_Msg, 0, 20);
  46432. +    free_rexx_msg(rm);
  46433. +    rm = remove_rexx_msg_from_head(&incoming);
  46434. +    }
  46435. +
  46436. +    /* Free the rest of rexx, will wait for pending msgs to return */
  46437. +    FreeARexx(handle);
  46438. +}
  46439. +
  46440. +void syms_of_amiga_rexx(void)
  46441. +{
  46442. +    DEFVAR_BOOL ("amiga-arexx-initialized", &amiga_arexx_initialized,
  46443. +         "Set this to t when Emacs is ready to respond to ARexx messages.\n"
  46444. +         "(ie C-\ X causes all pending ARexx messages to be answered)");
  46445. +    amiga_arexx_initialized = 0;
  46446. +
  46447. +    defsubr(&Samiga_arexx_send_command);
  46448. +    defsubr(&Samiga_arexx_reply);
  46449. +    defsubr(&Samiga_get_next_msg);
  46450. +    defsubr(&Samiga_arexx_get_msg_results);
  46451. +    defsubr(&Samiga_arexx_check_command);
  46452. +    defsubr(&Samiga_arexx_wait);
  46453. +}
  46454. diff -rup --new-file baseline/fsf/emacs/src/amiga_rexx_protos.h amiga/fsf/emacs/src/amiga_rexx_protos.h
  46455. --- baseline/fsf/emacs/src/amiga_rexx_protos.h    Wed Dec 31 17:00:00 1969
  46456. +++ amiga/fsf/emacs/src/amiga_rexx_protos.h    Sat Sep 28 00:00:00 1996
  46457. @@ -0,0 +1,66 @@
  46458. +/* Prototypes for functions defined in
  46459. +amiga_rexx.c
  46460. + */
  46461. +
  46462. +extern void * __far handle;
  46463. +
  46464. +extern int amiga_arexx_initialized;
  46465. +
  46466. +extern struct LispRexxList pending;
  46467. +
  46468. +extern struct LispRexxList returned;
  46469. +
  46470. +extern struct LispRexxList incoming;
  46471. +
  46472. +int alloc_rexx_msg(unsigned long );
  46473. +
  46474. +void free_rexx_msg(int );
  46475. +
  46476. +void add_rexx_msg_to_tail(struct LispRexxList * , int );
  46477. +
  46478. +int remove_rexx_msg_from_head(struct LispRexxList * );
  46479. +
  46480. +void remove_rexx_msg(struct LispRexxList * , int );
  46481. +
  46482. +int is_rexx_msgid_on_list(struct LispRexxList * , int );
  46483. +
  46484. +int find_rexx_msg_on_list(struct LispRexxList * , struct RexxMsg * );
  46485. +
  46486. +int handle_rexx_msg_replied(struct RexxMsg * );
  46487. +
  46488. +int handle_rexx_msg_received(struct RexxMsg * );
  46489. +
  46490. +int check_arexx(int , int );
  46491. +
  46492. +extern struct Lisp_Subr Samiga_arexx_wait;
  46493. +
  46494. +int Famiga_arexx_wait(void);
  46495. +
  46496. +extern struct Lisp_Subr Samiga_arexx_check_command;
  46497. +
  46498. +int Famiga_arexx_check_command(int );
  46499. +
  46500. +extern struct Lisp_Subr Samiga_get_next_msg;
  46501. +
  46502. +int Famiga_arexx_get_next_msg(void);
  46503. +
  46504. +extern struct Lisp_Subr Samiga_arexx_get_msg_results;
  46505. +
  46506. +int Famiga_arexx_get_msg_results(int );
  46507. +
  46508. +extern struct Lisp_Subr Samiga_arexx_reply;
  46509. +
  46510. +int Famiga_arexx_reply(int , int );
  46511. +
  46512. +int send_rexx_command(int , int , unsigned long );
  46513. +
  46514. +extern struct Lisp_Subr Samiga_arexx_send_command;
  46515. +
  46516. +int Famiga_arexx_send_command(int , int );
  46517. +
  46518. +void init_amiga_rexx(void);
  46519. +
  46520. +void cleanup_amiga_rexx(void);
  46521. +
  46522. +void syms_of_amiga_rexx(void);
  46523. +
  46524. diff -rup --new-file baseline/fsf/emacs/src/amiga_screen.c amiga/fsf/emacs/src/amiga_screen.c
  46525. --- baseline/fsf/emacs/src/amiga_screen.c    Wed Dec 31 17:00:00 1969
  46526. +++ amiga/fsf/emacs/src/amiga_screen.c    Sat Sep 28 00:00:00 1996
  46527. @@ -0,0 +1,1854 @@
  46528. +#include "config.h"
  46529. +#include "lisp.h"
  46530. +#include "termchar.h"
  46531. +#include "dispextern.h"
  46532. +#include "termhooks.h"
  46533. +#include "frame.h"
  46534. +
  46535. +#include <stdio.h>
  46536. +#include <string.h>
  46537. +#include <stddef.h>
  46538. +#include <sys/time.h>
  46539. +#include <internal/devices.h>
  46540. +#include <internal/vars.h>
  46541. +
  46542. +#define min(x,y) ((x) > (y) ? (y) : (x))
  46543. +#define max(x,y) ((x) < (y) ? (y) : (x))
  46544. +
  46545. +#undef LONGBITS
  46546. +
  46547. +#include <exec/types.h>
  46548. +#include <exec/interrupts.h>
  46549. +#include <devices/input.h>
  46550. +#include <devices/inputevent.h>
  46551. +#include <intuition/intuitionbase.h>
  46552. +#include <intuition/intuition.h>
  46553. +#include <devices/conunit.h>
  46554. +#include <devices/inputevent.h>
  46555. +#include <graphics/gfxbase.h>
  46556. +#include <graphics/gfxmacros.h>
  46557. +#include <utility/hooks.h>
  46558. +#include <workbench/startup.h>
  46559. +#include <workbench/workbench.h>
  46560. +#include <libraries/asl.h>
  46561. +
  46562. +#include <proto/exec.h>
  46563. +#include <proto/dos.h>
  46564. +#include <proto/intuition.h>
  46565. +#include <proto/graphics.h>
  46566. +#include <proto/console.h>
  46567. +#include <proto/diskfont.h>
  46568. +#include <proto/wb.h>
  46569. +#include <proto/asl.h>
  46570. +
  46571. +/* this is defined for those unlucky enough
  46572. + * not to have the 3.0 headers  -ch3/16/93. */
  46573. +#ifndef WA_NewLookMenus
  46574. +#define WA_NewLookMenus (WA_Dummy + 0x30)
  46575. +#endif
  46576. +
  46577. +#include "amiga.h"
  46578. +
  46579. +#ifdef USE_PROTOS
  46580. +#include "protos.h"
  46581. +#endif
  46582. +
  46583. +void screen_puts(FRAME_PTR f, char *str, unsigned int len);
  46584. +
  46585. +/* CHFIXME: amiga.h */
  46586. +extern int map_menu_selection(int menu_num, int item_num, int subitem_num, Lisp_Object *subprefixes);
  46587. +
  46588. +#define SHIFT_MASK (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)
  46589. +#define CONTROL_MASK IEQUALIFIER_CONTROL
  46590. +/* CHFIXME: check other usages of META_MASK for need of NO_SNAP_MASK */
  46591. +#define META_MASK (IEQUALIFIER_LALT)
  46592. +/* CHFIXME: need input from others if using
  46593. + * IEQUALIFIER_RELATIVEMOUSE make something fail
  46594. + * IEQUALIFIER_RELATIVEMOUSE is set on normal typing but not
  46595. + * when snapped characters are inserted (e.g. via snap or powersnap)
  46596. + * these snappers use LALT as qualifier but don\'t want it to mean
  46597. + * META
  46598. + */
  46599. +#define NO_SNAP_MASK (IEQUALIFIER_RELATIVEMOUSE)
  46600. +
  46601. +struct GfxBase *GfxBase;
  46602. +struct IntuitionBase *IntuitionBase;
  46603. +struct Library *DiskfontBase, *KeymapBase, *WorkbenchBase;
  46604. +
  46605. +static char intkey_code, intkey_qualifier;
  46606. +static struct IOStdReq *input_req;
  46607. +static struct Interrupt int_handler_hook;
  46608. +static int hooked;
  46609. +
  46610. +static struct MsgPort *wbport;
  46611. +static struct AppWindow *emacs_app_win;
  46612. +static struct AppIcon *emacs_icon;
  46613. +
  46614. +struct Library *ConsoleDevice;
  46615. +static struct TextFont *font;
  46616. +static int font_opened;
  46617. +/* The reset string resets the console, turns off scrolling and sets up
  46618. +   the foreground & background colors. */
  46619. +#define CONSOLE_RESET "\x1b""c\x9b>1l\x9b""3%d;4%d;>%dm"
  46620. +static char reset_string[20]; /* Must be big enough for
  46621. +              printf(CONSOLE_RESET, foreground, background, background);
  46622. +              (0 <= foreground, background <= 7) */
  46623. +
  46624. +/* These are the pen numbers for emacs window's base colors */
  46625. +int foreground = 1, background = 0;
  46626. +
  46627. +/* Current window, and its main characteristics */
  46628. +#if 0
  46629. +struct Window *EMACS_WIN(f);
  46630. +#endif
  46631. +WORD emacs_x = 0, emacs_y = 0, emacs_w = 640, emacs_h = 200;
  46632. +char *emacs_screen_name;
  46633. +/* a storage area for the name of the screen last opened on */
  46634. +char emacs_screen_name_storage[MAXPUBSCREENNAME+1];
  46635. +int emacs_backdrop = 0;        /* Use backdrop window ? */
  46636. +
  46637. +/* Current window size: */
  46638. +#define EMACS_X(f) (EMACS_WIN(f) ? EMACS_WIN(f)->LeftEdge : emacs_x)
  46639. +#define EMACS_Y(f) (EMACS_WIN(f) ? EMACS_WIN(f)->TopEdge : emacs_y)
  46640. +#define EMACS_W(f) (EMACS_WIN(f) ? EMACS_WIN(f)->Width : emacs_w)
  46641. +#define EMACS_H(f) (EMACS_WIN(f) ? EMACS_WIN(f)->Height : emacs_h)
  46642. +
  46643. +/* used for setting the color of standout text  -ch3/16/93. */
  46644. +int inverse_fill_pen = 8, inverse_text_pen = 8;
  46645. +
  46646. +/* IO request for all console io. */
  46647. +#ifndef MULTI_FRAME
  46648. +static struct IOStdReq *emacs_console;
  46649. +#else
  46650. +you lose
  46651. +#endif
  46652. +
  46653. +#define emacs_icon_width 57
  46654. +#define emacs_icon_height 55
  46655. +#define emacs_icon_num_planes 1
  46656. +#define emacs_icon_words_per_plane 220
  46657. +
  46658. +UWORD chip emacs_icon_data[1][55][4] = {
  46659. +  {
  46660. +    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  46661. +    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  46662. +    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0fe0,0x6000,
  46663. +    0x0000,0x0000,0x0060,0x6000,0x0000,0x0000,0x0fff,0xe000,
  46664. +    0x0000,0x0000,0x1800,0x2000,0x0000,0x0000,0x13ff,0xa000,
  46665. +    0x0000,0x0000,0x1400,0xa000,0x0000,0x0000,0x3600,0xa000,
  46666. +    0x0000,0x0000,0x0000,0xa000,0x0000,0x0000,0x0c00,0xa000,
  46667. +    0x0000,0x0000,0x1e00,0xa000,0x0000,0x0000,0x0c00,0xa000,
  46668. +    0x0000,0x0000,0x0000,0xa000,0x0000,0x0000,0x2100,0xa000,
  46669. +    0x0000,0x0000,0x3300,0xa000,0x0000,0x0000,0x0c00,0xa000,
  46670. +    0x003f,0xffff,0xffff,0xb000,0x001f,0xffff,0xffff,0x8000,
  46671. +    0x004e,0x0000,0x0001,0xf000,0x00c6,0x00f0,0x0001,0x8000,
  46672. +    0x00c6,0x0100,0x0001,0x8000,0x0006,0x0103,0x9201,0x8000,
  46673. +    0x0006,0x013a,0x5201,0x8000,0x00c6,0x010a,0x5201,0x8000,
  46674. +    0x00c6,0x010a,0x5601,0x8000,0x0086,0x00f2,0x4a01,0x8000,
  46675. +    0x0006,0x0000,0x0001,0x8000,0x0046,0x0000,0x0001,0x8000,
  46676. +    0x00c6,0x7c00,0x0001,0x8000,0x00c6,0x4000,0x0001,0x8000,
  46677. +    0x0006,0x41d8,0xc319,0x8000,0x0006,0x7925,0x24a1,0x8000,
  46678. +    0x00c6,0x4125,0x2419,0x8000,0x01c6,0x4125,0x2485,0x8000,
  46679. +    0x0086,0x7d24,0xd319,0x8000,0x0007,0x0000,0x0003,0x8000,
  46680. +    0x0003,0xffe3,0xffff,0x0000,0x0081,0xfff7,0xfffe,0x0000,
  46681. +    0x01c0,0x0036,0x0000,0x0000,0x0180,0x0014,0x0f80,0x0000,
  46682. +    0x0000,0x0014,0x1040,0x0000,0x0000,0x0014,0x2720,0x0000,
  46683. +    0x0000,0x0012,0x28a0,0x0000,0x0080,0x000a,0x48a0,0x0000,
  46684. +    0x01c0,0x0009,0x90a0,0x0000,0x0180,0x0004,0x20a0,0x0000,
  46685. +    0x0000,0x0003,0xc0a0,0x0000,0x0000,0x0000,0x00a0,0x0000,
  46686. +    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  46687. +    0x0000,0x0000,0x0000,0x0000
  46688. +  },
  46689. +};
  46690. +
  46691. +struct Image far emacs_icon_image = {
  46692. +  0, 0,
  46693. +  emacs_icon_width, emacs_icon_height, emacs_icon_num_planes,
  46694. +  (UWORD *)emacs_icon_data,
  46695. +  3, 0,
  46696. +  0
  46697. +};
  46698. +
  46699. +static struct DiskObject far emacs_icon_object = {
  46700. +  0, 0,
  46701. +  { 0, 0, 0, emacs_icon_width, emacs_icon_height, 0, 0, 0, (APTR)&emacs_icon_image },
  46702. +  0, 0, 0,
  46703. +  NO_ICON_POSITION, NO_ICON_POSITION
  46704. +};
  46705. +
  46706. +static struct Hook background_hook;
  46707. +
  46708. +#define TRY_NEW_MOUSE /* CHFIXME */
  46709. +
  46710. +#define EVENTSIZE 32
  46711. +
  46712. +static struct event {
  46713. +  ULONG class;
  46714. +  UWORD code, qual;
  46715. +  WORD x, y;
  46716. +} events[EVENTSIZE];
  46717. +static int event_num, event_in, event_out;
  46718. +
  46719. +static struct wbevent {
  46720. +  struct wbevent *next;
  46721. +  char file[1];
  46722. +} *wbevents;
  46723. +
  46724. +Lisp_Object Vamiga_mouse_pos;
  46725. +Lisp_Object Vamiga_mouse_item;
  46726. +extern Lisp_Object MouseMap;
  46727. +int amiga_remap_bsdel;
  46728. +int amiga_remap_numeric_keypad;
  46729. +int amiga_mouse_initialized;
  46730. +int amiga_wb_initialized;
  46731. +int emacs_iconified;
  46732. +static int mouse_event; /* set if mouse_event happened */
  46733. +
  46734. +int
  46735. +mouse_event_pending()
  46736. +{
  46737. +    return mouse_event>0;
  46738. +}
  46739. +void
  46740. +reset_mouse_event_pending()
  46741. +{
  46742. +    mouse_event = 0;
  46743. +}
  46744. +
  46745. +void
  46746. +set_mouse_event_pending()
  46747. +{
  46748. +    mouse_event = 1;
  46749. +}
  46750. +
  46751. +static int amiga_pos_x(FRAME_PTR f, int x)
  46752. +{
  46753. +  return (x - EMACS_WIN(f)->BorderLeft) / EMACS_WIN(f)->RPort->Font->tf_XSize;
  46754. +}
  46755. +
  46756. +static int amiga_pos_y(FRAME_PTR f, int y)
  46757. +{
  46758. +  return (y - EMACS_WIN(f)->BorderTop) / EMACS_WIN(f)->RPort->Font->tf_YSize;
  46759. +}
  46760. +
  46761. +void
  46762. +glyph_to_pixel_coords(FRAME_PTR f, int col, int row, int *pixcol, int *pixrow)
  46763. +{
  46764. +    *pixcol = (col * EMACS_WIN(f)->RPort->Font->tf_XSize) + EMACS_WIN(f)->BorderLeft;
  46765. +    *pixrow = (row * EMACS_WIN(f)->RPort->Font->tf_YSize) + EMACS_WIN(f)->BorderTop;
  46766. +}
  46767. +
  46768. +/* Given a pixel position (PIX_X, PIX_Y) on the frame F, return
  46769. +   glyph co-ordinates in (*X, *Y).  Set *BOUNDS to the rectangle
  46770. +   that the glyph at X, Y occupies, if BOUNDS != 0.
  46771. +   If NOCLIP is nonzero, do not force the value into range.  */
  46772. +
  46773. +void
  46774. +pixel_to_glyph_coords(FRAME_PTR f, int pixcol, int pixrow, int *col, int *row,
  46775. +              void *bounds, int noclip)
  46776. +{
  46777. +    int acol, arow;
  46778. +
  46779. +    /* Arrange for the division in amiga_pos_x etc. to round down
  46780. +       even for negative valuse. */
  46781. +    if(pixcol < 0)
  46782. +    pixcol -= EMACS_WIN(f)->RPort->Font->tf_XSize -1; /* CHFIXME: use FONT_WIDTH */
  46783. +    if(pixrow < 0)
  46784. +    pixrow -= EMACS_WIN(f)->RPort->Font->tf_YSize -1; /* CHFIXME: use FONT_HEIGH */
  46785. +    acol = amiga_pos_x(f, pixcol);
  46786. +    arow = amiga_pos_y(f, pixrow);
  46787. +    /* no bounds if not MULTI_FRAME */
  46788. +    if(!noclip)
  46789. +    {
  46790. +    if(acol < 0) acol = 0;
  46791. +    if(arow < 0) arow = 0;
  46792. +    if(acol > FRAME_WIDTH(f)) acol = FRAME_WIDTH(f);
  46793. +    if(arow > FRAME_HEIGHT(f)) arow = FRAME_HEIGHT(f);
  46794. +    }
  46795. +    *col = acol;
  46796. +    *row = arow;
  46797. +}
  46798. +
  46799. +extern int waiting_for_input; /* CHFIXME */
  46800. +extern int frame_garbaged;
  46801. +
  46802. +static void amiga_change_size(FRAME_PTR f)
  46803. +{
  46804. +  int new_height = amiga_pos_y(f, EMACS_WIN(f)->Height - EMACS_WIN(f)->BorderBottom);
  46805. +  int new_width = amiga_pos_x(f, EMACS_WIN(f)->Width - EMACS_WIN(f)->BorderRight);
  46806. +
  46807. +  /* Is this true for Emacs 19.28?
  46808. +     I consider that refreshes are possible during a select, which is
  46809. +     true for the current state of emacs */
  46810. +  change_frame_size(selected_frame, new_height, new_width, 0,
  46811. +            !selecting && !waiting_for_input);
  46812. +
  46813. +  /* Force redisplay */
  46814. +  SET_FRAME_GARBAGED(selected_frame);
  46815. +}
  46816. +
  46817. +/* Get terminal size from system.
  46818. +   Store number of lines into *heightp and width into *widthp.
  46819. +   If zero is stored, the value is not valid.  */
  46820. +
  46821. +void amiga_get_window_size (FRAME_PTR f, int *widthp, int *heightp)
  46822. +{
  46823. +  if (EMACS_WIN(f))
  46824. +    {
  46825. +      *heightp = amiga_pos_y(f, EMACS_WIN(f)->Height - EMACS_WIN(f)->BorderBottom);
  46826. +      *widthp = amiga_pos_x(f, EMACS_WIN(f)->Width - EMACS_WIN(f)->BorderRight);
  46827. +    }
  46828. +  else
  46829. +    {
  46830. +      *heightp = 0;
  46831. +      *widthp = 0;
  46832. +    }
  46833. +}
  46834. +
  46835. +static int set_min_size(struct Window *win, struct TextFont *font,
  46836. +            WORD *minw, WORD *minh)
  46837. +{
  46838. +  *minw = 11 * font->tf_XSize + win->BorderLeft + win->BorderRight;
  46839. +  *minh = 4 * font->tf_YSize + win->BorderTop + win->BorderBottom;
  46840. +
  46841. +  return (int)WindowLimits(win, *minw, *minh, 0, 0);
  46842. +}
  46843. +
  46844. +struct fill
  46845. +{
  46846. +  struct Layer *layer;
  46847. +  struct Rectangle bounds;
  46848. +  WORD offsetx, offsety;
  46849. +};
  46850. +
  46851. +/* __interrupt disables stack checking.   -ch3/19/93. */
  46852. +static ULONG __asm __saveds __interrupt
  46853. +fill_background(register __a2 struct RastPort *obj,
  46854. +        register __a1 struct fill *msg)
  46855. +{
  46856. +  struct Layer *l;
  46857. +
  46858. +  SetAPen(obj, background);
  46859. +  SetDrMd(obj, JAM1);
  46860. +  SetAfPt(obj, 0, 0);
  46861. +  SetWrMsk(obj, 0xff);
  46862. +  /* Gross hack starts here */
  46863. +  l = obj->Layer;
  46864. +  obj->Layer = 0;
  46865. +  /* Stops */
  46866. +  RectFill(obj, msg->bounds.MinX, msg->bounds.MinY,
  46867. +       msg->bounds.MaxX, msg->bounds.MaxY);
  46868. +  /* Starts again */
  46869. +  obj->Layer = l;
  46870. +  /* And finally dies */
  46871. +
  46872. +  return 0;
  46873. +}
  46874. +
  46875. +static void clear_window(FRAME_PTR f)
  46876. +{
  46877. +  SetAPen(EMACS_WIN(f)->RPort, background);
  46878. +  RectFill(EMACS_WIN(f)->RPort, EMACS_WIN(f)->BorderLeft, EMACS_WIN(f)->BorderTop,
  46879. +       EMACS_WIN(f)->Width - EMACS_WIN(f)->BorderRight - 1,
  46880. +       EMACS_WIN(f)->Height - EMACS_WIN(f)->BorderBottom - 1);
  46881. +}
  46882. +
  46883. +static int make_reset_string(void)
  46884. +{
  46885. +  sprintf(reset_string, CONSOLE_RESET, foreground, background, background);
  46886. +}
  46887. +
  46888. +void reset_window(FRAME_PTR f)
  46889. +{
  46890. +  make_reset_string();
  46891. +  if (EMACS_WIN(f))
  46892. +    {
  46893. +      screen_puts (f, reset_string, strlen(reset_string));
  46894. +      clear_window(f);
  46895. +      amiga_change_size (f);
  46896. +    }
  46897. +}
  46898. +
  46899. +static void close_app_win(void)
  46900. +{
  46901. +  if (emacs_app_win)
  46902. +    {
  46903. +      struct AppMessage *msg;
  46904. +
  46905. +      RemoveAppWindow(emacs_app_win); /* What can I do if it fails ?! */
  46906. +      while (msg = (struct AppMessage *)GetMsg(wbport)) ReplyMsg(msg);
  46907. +    }
  46908. +}
  46909. +
  46910. +#ifdef MULTI_FRAME
  46911. +you lose!
  46912. +#endif
  46913. +
  46914. +static int close_emacs_window(FRAME_PTR f)
  46915. +{
  46916. +  close_app_win();
  46917. +  inputsig &= ~(1L << EMACS_WIN(f)->UserPort->mp_SigBit);
  46918. +  _device_close(emacs_console);
  46919. +  if(EMACS_WIN(f))
  46920. +    {
  46921. +      /* put title back the way it should be   -ch3/19/93. */
  46922. +      ShowTitle(EMACS_WIN(f)->WScreen, !emacs_backdrop);
  46923. +    }
  46924. +  CloseWindow(EMACS_WIN(f));
  46925. +  emacs_console = 0;
  46926. +  EMACS_WIN(f) = 0;
  46927. +  ConsoleDevice = 0;
  46928. +}
  46929. +
  46930. +/* We need this function because we do not always have the string
  46931. + * for the screen we opened on. for example LockPubScreen(NULL);
  46932. + * This function will get the name by looping through all public
  46933. + * screens looking for the one that matches ours. -ch3/20/93 */
  46934. +
  46935. +char *get_screen_name(struct Screen *this, char *namebuf)
  46936. +{
  46937. +  struct PubScreenNode *pubscreens =
  46938. +    (struct PubScreenNode *)LockPubScreenList()->lh_Head;
  46939. +
  46940. +  while (pubscreens->psn_Node.ln_Succ)
  46941. +    {
  46942. +      if (pubscreens->psn_Screen == this)
  46943. +    {
  46944. +      strcpy(namebuf, pubscreens->psn_Node.ln_Name);
  46945. +      UnlockPubScreenList();
  46946. +      return namebuf;
  46947. +    }
  46948. +      pubscreens = (struct PubScreenNode *)pubscreens->psn_Node.ln_Succ;
  46949. +    }
  46950. +  /* Failed to find screen */
  46951. +  namebuf[0] = '\0';
  46952. +  UnlockPubScreenList();
  46953. +
  46954. +  return 0;
  46955. +}
  46956. +
  46957. +enum open_emacs_win_ret { ok, no_screen, no_window };
  46958. +
  46959. +/* added two parameters to eliminate the need for the global
  46960. + * which was causing some unwanted effect (bugs). -ch3/19/93 */
  46961. +
  46962. +static enum open_emacs_win_ret
  46963. +open_emacs_window(FRAME_PTR f, UWORD x, UWORD y, UWORD w, UWORD h, int backdrop,
  46964. +          char *pubscreen_name)
  46965. +     /* Open or reopen emacs window */
  46966. +{
  46967. +  WORD minw, minh;
  46968. +  struct Screen *new_screen;
  46969. +  struct Window *new_win;
  46970. +  struct IOStdReq *new_console;
  46971. +  int no_backdrop = !backdrop;
  46972. +
  46973. +  new_screen = LockPubScreen(pubscreen_name);
  46974. +
  46975. +  if (!new_screen)
  46976. +    return no_screen;
  46977. +
  46978. +  /* removed newwindow structure, and added as tag
  46979. +   * items so that we can change them easier. -ch3/16/93. */
  46980. +
  46981. +  new_win = OpenWindowTags(0, WA_Left, x, WA_Top, y,
  46982. +                  WA_Width, w, WA_Height, h,    /* Static items */
  46983. +                  WA_AutoAdjust, 1, WA_NewLookMenus, 1,
  46984. +                  WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_RAWKEY |
  46985. +                            IDCMP_MOUSEBUTTONS| IDCMP_NEWSIZE |
  46986. +                            IDCMP_MENUPICK | IDCMP_MENUHELP,
  46987. +                  WA_PubScreen, new_screen,
  46988. +#if 0 /* CHFIXME: debugging aid */
  46989. +                  WA_BackFill, &background_hook,
  46990. +#endif
  46991. +                  WA_MenuHelp, 1, WA_Activate, 1,
  46992. +                  WA_SimpleRefresh, 1,
  46993. +                  WA_MaxWidth, -1, WA_MaxHeight, -1,
  46994. +                  WA_Backdrop, backdrop,    /* changing items */
  46995. +                  WA_Borderless, backdrop,
  46996. +                  WA_CloseGadget, no_backdrop,
  46997. +                  WA_SizeGadget, no_backdrop,
  46998. +                  WA_DragBar, no_backdrop,
  46999. +                  WA_DepthGadget, no_backdrop,
  47000. +                  WA_Title, no_backdrop ?
  47001. +                   "GNU Emacs 19.28, Amiga port "VERS : 0,
  47002. +                              TAG_END, 0);
  47003. +
  47004. +  UnlockPubScreen(0L, new_screen);
  47005. +
  47006. +  if (new_win)
  47007. +    {
  47008. +      /* if emacs_backdrop then the screen title will show BEHIND the window
  47009. +     -ch3/16/93. */
  47010. +      ShowTitle(new_screen, !emacs_backdrop);
  47011. +      SetFont(new_win->RPort, font);
  47012. +
  47013. +      if (set_min_size(new_win, font, &minw, &minh) &&
  47014. +      (new_console = (struct IOStdReq *)
  47015. +       _device_open("console.device", CONU_CHARMAP, CONFLAG_NODRAW_ON_NEWSIZE,
  47016. +            (APTR)new_win, sizeof(*new_win),
  47017. +            sizeof(struct IOStdReq))))
  47018. +    {
  47019. +      inputsig |= 1L << new_win->UserPort->mp_SigBit;
  47020. +      ConsoleDevice = (struct Library *)new_console->io_Device;
  47021. +#if 0 /* CHFIXME */
  47022. +      emacs_app_win = AddAppWindowA(0, 0, new_win, wbport, 0);
  47023. +#endif
  47024. +      /* Copy the info into permanent storage */
  47025. +      EMACS_WIN(f) = new_win;
  47026. +      emacs_console = new_console;
  47027. +
  47028. +      /* fetch the name of the current screen -ch3/19/93 */
  47029. +      emacs_screen_name = get_screen_name(EMACS_WIN(f)->WScreen,
  47030. +                          emacs_screen_name_storage);
  47031. +
  47032. +      emacs_backdrop = backdrop;
  47033. +
  47034. +      reset_window(f);
  47035. +
  47036. +      return ok;
  47037. +    }
  47038. +      CloseWindow(new_win);
  47039. +    }
  47040. +  return no_window;
  47041. +}
  47042. +
  47043. +void force_window(FRAME_PTR f)
  47044. +{
  47045. +  if (!EMACS_WIN(f) && !emacs_iconified)
  47046. +    {
  47047. +      if (open_emacs_window(f, emacs_x, emacs_y, emacs_w, emacs_h, emacs_backdrop,
  47048. +                emacs_screen_name) != ok)
  47049. +    {
  47050. +      /* Try to return to defaults (Workbench, etc) */
  47051. +      if (open_emacs_window(f, 0, 0, 640, 200, 0, 0) != ok)
  47052. +          _fail("I've lost my window ! Exiting.");
  47053. +    }
  47054. +      resume_menus(f);
  47055. +    }
  47056. +}
  47057. +
  47058. +
  47059. +#define X_left  0xff51
  47060. +#define X_up    0xff52
  47061. +#define X_right 0xff53
  47062. +#define X_down  0xff54
  47063. +#define X_help  0xff6a    /* X11 code of the help key */
  47064. +#define X_f1    0xffbe     /* X11 code of f1 (f2, ..., f35 follow) */
  47065. +
  47066. +/* returns:
  47067. + *    -2 if msg is not class RAWKEY
  47068. + *    same as RawKeyConvert otherwise:
  47069. + *    buffer length if <= kbsize
  47070. + *    -1 else
  47071. + *
  47072. + * fkeyflags[x] will be set to a function key if any
  47073. + * the decoding is done ala x (see keyboard.c)
  47074. + */
  47075. +static DeadKeyConvert(struct IntuiMessage *msg, UBYTE *kbuffer, USHORT *fkeyflags,
  47076. +              int kbsize,
  47077. +              struct KeyMap *kmap)
  47078. +{
  47079. +  static struct InputEvent ievent = {0, IECLASS_RAWKEY, 0, 0, 0};
  47080. +  int extra = 0, res;
  47081. +
  47082. +  if (msg->Class != RAWKEY)
  47083. +  {
  47084. +#if 0
  47085. +      fprintf(stderr,"msg->Class = %d\n", (int) msg->Class);
  47086. +#endif
  47087. +      return (-2);
  47088. +  }
  47089. +
  47090. +  /* Do some keymapping ourselves to make emacs users happy */
  47091. +
  47092. +  switch(msg->Code)
  47093. +  {
  47094. + case 0x40:
  47095. +      /* Ctrl-space becomes Ctrl-@ */
  47096. +      if (msg->Qualifier & CONTROL_MASK)
  47097. +      {
  47098. +      *kbuffer = 0;
  47099. +      *fkeyflags = 0;
  47100. +      return 1;
  47101. +      }
  47102. +      break;
  47103. + case 0x41:
  47104. +      /* Backspace becomes DEL */
  47105. +      if (amiga_remap_bsdel)
  47106. +      {
  47107. +      *kbuffer = 0177;
  47108. +      *fkeyflags = 0;
  47109. +      return 1;
  47110. +      }
  47111. +      break;
  47112. + case 0x46:
  47113. +      /* And DEL becomes CTRL-D */
  47114. +      if (amiga_remap_bsdel)
  47115. +      {
  47116. +      *kbuffer = 04;
  47117. +      *fkeyflags = 0;
  47118. +      return 1;
  47119. +      }
  47120. +      break;
  47121. + case 0x4C: /* Up arrow */
  47122. +      *kbuffer = 0;
  47123. +      *fkeyflags = X_up;
  47124. +      return 1;
  47125. + case 0x4D: /* Down arrow */
  47126. +      *kbuffer = 0;
  47127. +      *fkeyflags = X_down;
  47128. +      return 1;
  47129. + case 0x4E: /* Forward arrow */
  47130. +      *kbuffer = 0;
  47131. +      *fkeyflags = X_right;
  47132. +      return 1;
  47133. + case 0x4F: /* Backward arrow */
  47134. +      *kbuffer = 0;
  47135. +      *fkeyflags = X_left;
  47136. +      return 1;
  47137. + case 0x50:
  47138. + case 0x51:
  47139. + case 0x52:
  47140. + case 0x53:
  47141. + case 0x54:
  47142. + case 0x55:
  47143. + case 0x56:
  47144. + case 0x57:
  47145. + case 0x58:
  47146. + case 0x59:
  47147. +      /* Map function keys to X equivalent */
  47148. +      *kbuffer = 0;
  47149. +      *fkeyflags = msg->Code - 0x50 + X_f1;
  47150. +      return 1;
  47151. + case 0x5F:
  47152. +      /* Map help key */
  47153. +      *kbuffer = 0;
  47154. +      *fkeyflags = X_help;
  47155. +      return 1;
  47156. +default:
  47157. +      break;
  47158. +  }
  47159. +  /* CHFIXME: may be replaced with kp-XXX symbols */
  47160. +  /* Stick numeric pad prefix in front of numeric keypad chars */
  47161. +  if (msg->Qualifier & IEQUALIFIER_NUMERICPAD && amiga_remap_numeric_keypad)
  47162. +    {
  47163. +      *kbuffer++ = 'x' & 037;
  47164. +      *fkeyflags++=0;
  47165. +      *kbuffer++ = '^' & 037;
  47166. +      *fkeyflags++=0;
  47167. +      *kbuffer++ = 'K';
  47168. +      *fkeyflags++=0;
  47169. +      kbsize -= 3;
  47170. +      extra = 3;
  47171. +    }
  47172. +
  47173. +  /* pack input event */
  47174. +  ievent.ie_Code = msg->Code;
  47175. +
  47176. +  /* Ignore meta in decoding keys when not snapping */
  47177. +  /* CHFIXME: if() needed below, too? */
  47178. +  if(msg->Qualifier & NO_SNAP_MASK)
  47179. +    ievent.ie_Qualifier = msg->Qualifier & ~META_MASK;
  47180. +  else
  47181. +    ievent.ie_Qualifier = msg->Qualifier;
  47182. +
  47183. +  /* get previous codes from location pointed to by IAddress
  47184. +   *  this pointer is valid until IntuiMessage is replied.
  47185. +   */
  47186. +  ievent.ie_position.ie_addr = *((APTR *)msg->IAddress);
  47187. +  ievent.ie_position.ie_dead.ie_prev1DownQual &= ~META_MASK;
  47188. +  ievent.ie_position.ie_dead.ie_prev2DownQual &= ~META_MASK;
  47189. +
  47190. +  res = RawKeyConvert(&ievent, kbuffer, kbsize, kmap);
  47191. +  if(res > 0)
  47192. +  {
  47193. +      int i;
  47194. +      
  47195. +      for(i = 0; i < res; i++)
  47196. +      *fkeyflags++ = 0;
  47197. +  }
  47198. +  return res ? res + extra : 0;
  47199. +}
  47200. +
  47201. +void add_wbevent(struct WBArg *wbarg)
  47202. +{
  47203. +  char filename[256];
  47204. +
  47205. +  if (wbarg->wa_Lock && NameFromLock(wbarg->wa_Lock, filename, 256))
  47206. +    {
  47207. +      struct wbevent *event;
  47208. +
  47209. +      if (wbarg->wa_Name) AddPart(filename, wbarg->wa_Name, 256);
  47210. +      if (event = (struct wbevent *)malloc(offsetof(struct wbevent, file) +
  47211. +                       strlen(filename) + 1))
  47212. +    {
  47213. +      event->next = wbevents;
  47214. +      strcpy(event->file, filename);
  47215. +      wbevents = event;
  47216. +    }
  47217. +    }
  47218. +}
  47219. +
  47220. +void get_mouse_char_pos(FRAME_PTR f, int *last_x, int *last_y)
  47221. +{
  47222. +    int x, y;
  47223. +    
  47224. +    if(EMACS_WIN(f))
  47225. +    {
  47226. +    x = EMACS_WIN(f) -> MouseX;
  47227. +    y = EMACS_WIN(f) -> MouseY;
  47228. +    if((x < 0) ||
  47229. +       (x > EMACS_WIN(f)->Width) ||
  47230. +       (y < 0) ||
  47231. +       (y > EMACS_WIN(f)->Height))
  47232. +    {
  47233. +        x = -1;
  47234. +        y = -1;
  47235. +    }
  47236. +    else
  47237. +    {
  47238. +        x = amiga_pos_x(f,x);
  47239. +        y = amiga_pos_y(f,y);
  47240. +    }
  47241. +    *last_x = x;
  47242. +    *last_y = y;
  47243. +    }
  47244. +    else
  47245. +    {
  47246. +    *last_x = -1;
  47247. +    *last_y = -1;
  47248. +    }
  47249. +}
  47250. +    
  47251. +void check_window(FRAME_PTR f, int force)
  47252. +{
  47253. +#ifdef TRY_NEW_MOUSE
  47254. +  struct input_event event;
  47255. +  struct timeval tv;
  47256. +#endif
  47257. +  ULONG class;
  47258. +  USHORT code, qualifier;
  47259. +  UWORD mx, my;
  47260. +  unsigned char buf[32];
  47261. +  /* fkey will be set to a value != 0 if a function key event should be created */ 
  47262. +  /* fkey needs to hold X key symbols 0xffXX */
  47263. +  USHORT fkey[32]; 
  47264. +  int buflen, deiconify, i;
  47265. +  struct IntuiMessage *msg;
  47266. +  int mouse_event = FALSE, wb_event = FALSE;
  47267. +  struct AppMessage *amsg;
  47268. +
  47269. +  force_window(f);
  47270. +
  47271. +  if (EMACS_WIN(f))
  47272. +    while (msg = (struct IntuiMessage *)GetMsg(EMACS_WIN(f)->UserPort))
  47273. +      {
  47274. +    class = msg->Class;
  47275. +    code = msg->Code;
  47276. +    qualifier = msg->Qualifier;
  47277. +    mx = msg->MouseX; my = msg->MouseY;
  47278. +    buflen = DeadKeyConvert(msg, buf, fkey, 32, 0);
  47279. +    ReplyMsg(msg);
  47280. +#if 0
  47281. +    fprintf(stderr,"class: 0x%08lx, code: 0x%08lx, qual: 0x%04x\n",
  47282. +        (int) class,
  47283. +        (int) code,
  47284. +        (int) qualifier);
  47285. +#endif
  47286. +    switch (class)
  47287. +      {
  47288. +      case IDCMP_CLOSEWINDOW: {
  47289. +        enque(030, FALSE, FALSE); enque(03, FALSE, FALSE); /* ^X^C */ /* CHFIXME: map to delete_window */
  47290. +        break;
  47291. +      }
  47292. +      case IDCMP_RAWKEY: {
  47293. +        if (buflen > 0)
  47294. +          {
  47295. +        unsigned char *sbuf = buf;
  47296. +        USHORT *sfkey = fkey;
  47297. +        int meta = (qualifier & META_MASK) && (qualifier & NO_SNAP_MASK);
  47298. +        int qual = (qualifier & SHIFT_MASK) ? shift_modifier : 0 +
  47299. +                   (qualifier & CONTROL_MASK) ? ctrl_modifier : 0 +
  47300. +               (meta) ? meta_modifier : 0;
  47301. +        
  47302. +        do
  47303. +            if(*sfkey)
  47304. +            {
  47305. +            /* provide full emacs qualifier mask for function keys */
  47306. +            enque(*sfkey++, qual, 1);
  47307. +            sbuf++;
  47308. +            }
  47309. +            else
  47310. +            {
  47311. +            /* Don't set META on CSI */
  47312. +            enque(*sbuf++, meta, 0);
  47313. +            sfkey++;
  47314. +            }
  47315. +        while (--buflen);
  47316. +          }
  47317. +        break;
  47318. +      }
  47319. +      case IDCMP_NEWSIZE:
  47320. +        amiga_change_size(f);
  47321. +        set_mouse_event_pending(); /* signal "input available" to get display redrawn */
  47322. +        break;
  47323. +      case IDCMP_MENUHELP:
  47324. +        break; /* CHFIXME */
  47325. +      case IDCMP_MENUPICK: 
  47326. +        if (code == MENUNULL) break;
  47327. +        {
  47328. +          int i;
  47329. +          Lisp_Object prefixes[3];
  47330. +          int menu_num = MENUNUM(code);
  47331. +          int item_num = ITEMNUM(code);
  47332. +          int subitem_num = SUBNUM(code);
  47333. +
  47334. +          if((menu_num != NOMENU)
  47335. +         && (item_num != NOITEM)
  47336. +         && map_menu_selection(menu_num, item_num, subitem_num, prefixes))
  47337. +        {
  47338. +          
  47339. +          event.kind = menu_bar_event;
  47340. +          event.code = 0;
  47341. +          event.modifiers = 0;
  47342. +          event.x = 0;
  47343. +          event.y = 0;
  47344. +          event.frame_or_window = Qmenu_bar;
  47345. +          gettimeofday (&tv, NULL);
  47346. +          event.timestamp = tv.tv_usec;
  47347. +          kbd_buffer_store_event (&event);
  47348. +          for(i = 0; i < 3; i++)
  47349. +            {
  47350. +              if(NILP(prefixes[i]))
  47351. +            break;
  47352. +              /* CHFIXME: rethink validness of these values! */
  47353. +              event.frame_or_window = prefixes[i]; 
  47354. +              gettimeofday (&tv, NULL);
  47355. +              event.timestamp = tv.tv_usec;
  47356. +              kbd_buffer_store_event (&event);
  47357. +            }
  47358. +          set_mouse_event_pending(); /* get emacs to read the input queue */
  47359. +          }
  47360. +          
  47361. +        }
  47362. +        break; /* CHFIXME: add menu code */
  47363. +      case IDCMP_MOUSEBUTTONS: {
  47364. +#ifdef TRY_NEW_MOUSE
  47365. +          int but, down;
  47366. +          switch(code)
  47367. +          {
  47368. +      case SELECTDOWN: but = 0; down = 1; break;
  47369. +      case SELECTUP: but = 0; down = 0; break;
  47370. +      case MIDDLEDOWN: but = 1; down = 1; break;
  47371. +      case MIDDLEUP: but = 1; down = 0; break;
  47372. +      case MENUDOWN: but = 2; down = 1; break;
  47373. +      case MENUUP: but = 2; down = 0; break;
  47374. +      default: but = -1; break;
  47375. +          }
  47376. +#if 0
  47377. +          fprintf(stderr,"Mouse: button %d, down = %d\n", but, down);
  47378. +#endif
  47379. +          if(but >= 0)
  47380. +          {
  47381. +          event.kind = mouse_click;
  47382. +          event.code = but;
  47383. +          event.modifiers = ((qualifier & META_MASK) ? meta_modifier : 0)
  47384. +              + ((qualifier & SHIFT_MASK) ? shift_modifier : 0)
  47385. +              + ((qualifier & CONTROL_MASK) ? ctrl_modifier : 0)
  47386. +              + (down ? down_modifier : up_modifier);
  47387. +#if 1/* keyboard.c uses pixel_to_glyph, so we need original pos */
  47388. +          event.x = mx;
  47389. +          event.y = my;
  47390. +#else
  47391. +          event.x = amiga_pos_x(mx);
  47392. +          event.y = amiga_pos_y(my);
  47393. +#endif
  47394. +          event.frame_or_window = selected_frame;
  47395. +          gettimeofday (&tv, NULL);
  47396. +          event.timestamp = tv.tv_usec;
  47397. +          kbd_buffer_store_event (&event);
  47398. +          set_mouse_event_pending();
  47399. +          }
  47400. +#else
  47401. +        mouse_event = TRUE;
  47402. +        if (event_num == EVENTSIZE) break;
  47403. +
  47404. +        events[event_in].class = class;
  47405. +        events[event_in].code = code;
  47406. +        events[event_in].qual = qualifier;
  47407. +        events[event_in].x = mx;
  47408. +        events[event_in].y = my;
  47409. +        event_num++;
  47410. +        event_in = (event_in + 1) % EVENTSIZE;
  47411. +#endif
  47412. +        break;
  47413. +      }
  47414. +      }
  47415. +      }
  47416. +  /* Handle App requests */
  47417. +  while (amsg = (struct AppMessage *)GetMsg(wbport))
  47418. +      switch (amsg->am_Type)
  47419. +    {
  47420. +    case AMTYPE_APPICON: case AMTYPE_APPWINDOW:
  47421. +      /* Add an event for all these files */
  47422. +      for (i = 0; i < amsg->am_NumArgs; i++) add_wbevent(amsg->am_ArgList + i);
  47423. +      wb_event = TRUE;
  47424. +      /* Reply to the message, and deiconify if was icon */
  47425. +      deiconify = amsg->am_Type == AMTYPE_APPICON;
  47426. +      ReplyMsg(amsg);
  47427. +      if (deiconify && emacs_icon)
  47428. +        /* Reopen window */
  47429. +        if (open_emacs_window(f, emacs_x, emacs_y, emacs_w, emacs_h, emacs_backdrop,
  47430. +                  emacs_screen_name) == ok)
  47431. +          {
  47432. +        resume_menus(f);
  47433. +        RemoveAppIcon(emacs_icon);
  47434. +        emacs_icon = 0;
  47435. +        emacs_iconified = 0;
  47436. +          }
  47437. +      break;
  47438. +    default: ReplyMsg(amsg); break;
  47439. +    }
  47440. +
  47441. +  if (amiga_mouse_initialized && (force && event_num > 0 || mouse_event))
  47442. +    {
  47443. +      enque(AMIGASEQ, FALSE, FALSE); enque('M', FALSE, FALSE);
  47444. +    }
  47445. +  if (amiga_wb_initialized && (force && wbevents || wb_event))
  47446. +    {
  47447. +      enque(AMIGASEQ, FALSE, FALSE); enque('W', FALSE, FALSE);
  47448. +    }
  47449. +}
  47450. +
  47451. +void setup_intchar(char intchar)
  47452. +{
  47453. +  char cqbuf[2];
  47454. +
  47455. +  if (MapANSI(&intchar, 1, cqbuf, 1, 0) == 1)
  47456. +    {
  47457. +      intkey_code = cqbuf[0];
  47458. +      intkey_qualifier = cqbuf[1];
  47459. +    }
  47460. +  else
  47461. +    {
  47462. +      /* Default is CTRL-G in usa0 keymap */
  47463. +      intkey_code = 0x24;
  47464. +      intkey_qualifier = IEQUALIFIER_CONTROL;
  47465. +    }
  47466. +}
  47467. +
  47468. +/* Hack to detect interrupt char as soon as it is pressed */
  47469. +/* __interrupt disables stack checking.  -ch3/19/93.*/
  47470. +static long __saveds __interrupt __asm
  47471. +int_handler(register __a0 struct InputEvent *ev)
  47472. +{
  47473. +  struct InputEvent *ep, *laste;
  47474. +  static struct InputEvent retkey;
  47475. +  ULONG lock = LockIBase(0);
  47476. +#ifndef MULTI_FRAME
  47477. +  FRAME_PTR f;
  47478. +#else
  47479. +  you lose, make loop of frames? 
  47480. +#endif
  47481. +  
  47482. +  if (EMACS_WIN(f) && IntuitionBase->ActiveWindow == EMACS_WIN(f))
  47483. +    {
  47484. +      laste = 0;
  47485. +
  47486. +      /* run down the list of events to see if they pressed the magic key */
  47487. +      for (ep = ev; ep; laste = ep, ep = ep->ie_NextEvent)
  47488. +    if (ep->ie_Class == IECLASS_RAWKEY &&
  47489. +        (ep->ie_Qualifier & 0xff) == intkey_qualifier &&
  47490. +        ep->ie_Code == intkey_code)
  47491. +      {
  47492. +        /* Remove this key from input sequence */
  47493. +        if (laste) laste->ie_NextEvent = ep->ie_NextEvent;
  47494. +        else ev = ep->ie_NextEvent;
  47495. +
  47496. +        Vquit_flag = Qt;
  47497. +        Signal(_us, SIGBREAKF_CTRL_C);
  47498. +      }
  47499. +    }
  47500. +  UnlockIBase(lock);
  47501. +
  47502. +  /* pass on the pointer to the event */
  47503. +  return (long)ev;
  47504. +}
  47505. +
  47506. +#if 0
  47507. +DEFUN ("amiga-mouse-events", Famiga_mouse_events, Samiga_mouse_events, 0, 0, 0,
  47508. +       "Return number of pending mouse events from Intuition.")
  47509. +     ()
  47510. +{
  47511. +  register Lisp_Object tem;
  47512. +
  47513. +  check_intuition ();
  47514. +
  47515. +  XSET (tem, Lisp_Int, event_num);
  47516. +
  47517. +  return tem;
  47518. +}
  47519. +
  47520. +DEFUN ("amiga-proc-mouse-event", Famiga_proc_mouse_event, Samiga_proc_mouse_event,
  47521. +       0, 0, 0,
  47522. +       "Pulls a mouse event out of the mouse event buffer and dispatches\n\
  47523. +the appropriate function to act upon this event.")
  47524. +()
  47525. +{
  47526. +  register Lisp_Object mouse_cmd;
  47527. +  register char com_letter;
  47528. +  register char key_mask;
  47529. +  register Lisp_Object tempx;
  47530. +  register Lisp_Object tempy;
  47531. +  extern Lisp_Object get_keyelt ();
  47532. +  extern int meta_prefix_char;
  47533. +  struct event *ev;
  47534. +  int posx, posy;
  47535. +
  47536. +  check_intuition ();
  47537. +
  47538. +  if (event_num) {
  47539. +    ev = &events[event_out];
  47540. +    event_out = (event_out + 1) % EVENTSIZE;
  47541. +    event_num--;
  47542. +    if (ev->class == MOUSEBUTTONS)
  47543. +      {
  47544. +    switch (ev->code)
  47545. +      {
  47546. +      case SELECTDOWN: com_letter = 2; break;
  47547. +      case SELECTUP: com_letter = 6; break;
  47548. +      case MIDDLEDOWN: com_letter = 1; break;
  47549. +      case MIDDLEUP: com_letter = 5; break;
  47550. +      case MENUDOWN: com_letter = 0; break;
  47551. +      case MENUUP: com_letter = 4; break;
  47552. +      default: com_letter = 3; break;
  47553. +      }
  47554. +    posx = amiga_pos_x(f,ev->x);
  47555. +    posy = amiga_pos_y(f,ev->y);
  47556. +    XSET (tempx, Lisp_Int, min (FRAME_WIDTH (selected_frame)-1, max (0, posx)));
  47557. +    XSET (tempy, Lisp_Int, min (FRAME_HEIGHT (selected_frame)-1, max (0, posy)));
  47558. +      }
  47559. +    else
  47560. +      {
  47561. +    /* Must be Menu Pick or Help */
  47562. +    com_letter = ev->class == IDCMP_MENUPICK ? 3 : 7;
  47563. +
  47564. +    /* The parameters passed describe the selected item */
  47565. +    XSET (tempx, Lisp_Int, MENUNUM(ev->code));
  47566. +    XSET (tempy, Lisp_Int, ITEMNUM(ev->code));
  47567. +      }
  47568. +    if (ev->qual & META_MASK) com_letter |= 0x20;
  47569. +    if (ev->qual & SHIFT_MASK) com_letter |= 0x10;
  47570. +    if (ev->qual & CONTROL_MASK) com_letter |= 0x40;
  47571. +
  47572. +    Vamiga_mouse_pos = Fcons (tempx, Fcons (tempy, Qnil));
  47573. +    Vamiga_mouse_item = make_number (com_letter);
  47574. +#if 0 /* CHFIXME */
  47575. +    mouse_cmd = get_keyelt (access_keymap (MouseMap, com_letter));
  47576. +    if (NILP (mouse_cmd)) {
  47577. +      bitch_at_user ();
  47578. +      Vamiga_mouse_pos = Qnil;
  47579. +    }
  47580. +    else return call1 (mouse_cmd, Vamiga_mouse_pos);
  47581. +#else
  47582. +    return Qnil;
  47583. +#endif
  47584. +  }
  47585. +  return Qnil;
  47586. +}
  47587. +
  47588. +DEFUN ("amiga-get-mouse-event", Famiga_get_mouse_event, Samiga_get_mouse_event,
  47589. +       1, 1, 0,
  47590. +       "Get next mouse event out of mouse event buffer (com-letter (x y)).\n\
  47591. +ARG non-nil means return nil immediately if no pending event;\n\
  47592. +otherwise, wait for an event.")
  47593. +(arg)
  47594. +Lisp_Object arg;
  47595. +{
  47596. +  register char com_letter;
  47597. +  register char key_mask;
  47598. +
  47599. +  register Lisp_Object tempx;
  47600. +  register Lisp_Object tempy;
  47601. +  struct event *ev;
  47602. +  int posx, posy;
  47603. +
  47604. +  check_intuition ();
  47605. +
  47606. +  if (NILP (arg))
  47607. +    {
  47608. +      amiga_consume_input();
  47609. +      while (!event_num)
  47610. +    {
  47611. +      int rfds = 1;
  47612. +
  47613. +      select(1, &rfds, 0, 0, 0);
  47614. +      amiga_consume_input();
  47615. +    }
  47616. +    }
  47617. +  /*** ??? Surely you don't mean to busy wait??? */
  47618. +
  47619. +  if (event_num) {
  47620. +    ev = &events[event_out];
  47621. +    event_out = (event_out + 1) % EVENTSIZE;
  47622. +    event_num--;
  47623. +    switch (ev->code)
  47624. +      {
  47625. +      case SELECTDOWN: com_letter = 2; break;
  47626. +      case SELECTUP: com_letter = 6; break;
  47627. +      case MIDDLEDOWN: com_letter = 1; break;
  47628. +      case MIDDLEUP: com_letter = 5; break;
  47629. +      case MENUDOWN: com_letter = 0; break;
  47630. +      case MENUUP: com_letter = 4; break;
  47631. +      default: com_letter = 3; break;
  47632. +      }
  47633. +    if (ev->qual & META_MASK) com_letter |= 0x20;
  47634. +    if (ev->qual & SHIFT_MASK) com_letter |= 0x10;
  47635. +    if (ev->qual & CONTROL_MASK) com_letter |= 0x40;
  47636. +
  47637. +    posx = amiga_pos_x(f,ev->x);
  47638. +    posy = amiga_pos_y(f,ev->y);
  47639. +    XSET (tempx, Lisp_Int, min (FRAME_WIDTH (selected_frame)-1, max (0, posx)));
  47640. +    XSET (tempy, Lisp_Int, min (FRAME_HEIGHT (selected_frame)-1, max (0, posy)));
  47641. +
  47642. +    Vamiga_mouse_pos = Fcons (tempx, Fcons (tempy, Qnil));
  47643. +    Vamiga_mouse_item = make_number (com_letter);
  47644. +    return Fcons (com_letter, Fcons (Vamiga_mouse_pos, Qnil));
  47645. +  }
  47646. +  return Qnil;
  47647. +}
  47648. +#endif
  47649. +
  47650. +DEFUN ("amiga-get-wb-event", Famiga_get_wb_event, Samiga_get_wb_event,
  47651. +       1, 1, 0,
  47652. +       "Get next Workbench event out of workbench event buffer (a file name).\n\
  47653. +ARG non-nil means return nil immediately if no pending event;\n\
  47654. +otherwise, wait for an event.")
  47655. +(arg)
  47656. +Lisp_Object arg;
  47657. +{
  47658. +  Lisp_Object file;
  47659. +  struct wbevent *ev;
  47660. +
  47661. +  check_intuition ();
  47662. +
  47663. +  if (NILP (arg))
  47664. +    {
  47665. +      amiga_consume_input();
  47666. +      while (!wbevents)
  47667. +    {
  47668. +      int rfds = 1;
  47669. +
  47670. +      select(1, &rfds, 0, 0, 0);
  47671. +      amiga_consume_input();
  47672. +    }
  47673. +    }
  47674. +  /*** ??? Surely you don't mean to busy wait??? */
  47675. +
  47676. +  if (wbevents) {
  47677. +    file = build_string(wbevents->file);
  47678. +    ev = wbevents;
  47679. +    wbevents = wbevents->next;
  47680. +    free(ev);
  47681. +    return file;
  47682. +  }
  47683. +  return Qnil;
  47684. +}
  47685. +
  47686. +DEFUN("amiga-set-foreground-color", Famiga_set_foreground_color,
  47687. +      Samiga_set_foreground_color, 1, 1, "nPen number: ",
  47688. +      "Use PEN as foreground color")
  47689. +     (pen)
  47690. +{
  47691. +  int fg;
  47692. +
  47693. +  check_intuition();
  47694. +  CHECK_NUMBER(pen, 0);
  47695. +
  47696. +  fg = XUINT (pen);
  47697. +  if (pen > 7) error("Pen colors must be between 0 & 7");
  47698. +  foreground = fg;
  47699. +  reset_window(selected_frame);
  47700. +  return Qnil;
  47701. +}
  47702. +
  47703. +DEFUN("amiga-set-background-color", Famiga_set_background_color,
  47704. +      Samiga_set_background_color, 1, 1, "nPen number: ",
  47705. +      "Use PEN as background color")
  47706. +     (pen)
  47707. +{
  47708. +  int bg;
  47709. +
  47710. +  check_intuition();
  47711. +  CHECK_NUMBER(pen, 0);
  47712. +
  47713. +  bg = XUINT (pen);
  47714. +  if (pen > 7) error("Pen colors must be between 0 & 7");
  47715. +  background = bg;
  47716. +  reset_window(selected_frame);
  47717. +  return Qnil;
  47718. +}
  47719. +
  47720. +DEFUN("amiga-set-inverse-fill-pen", Famiga_set_inverse_fill_pen,
  47721. +      Samiga_set_inverse_fill_pen, 1, 1, "nPen number: ",
  47722. +      "Use PEN's color for inverse fills (0-7 or 8 for reverse)")
  47723. +     (pen)
  47724. +{
  47725. +  int ifp = 8;
  47726. +
  47727. +  check_intuition();
  47728. +  CHECK_NUMBER(pen, 0);
  47729. +
  47730. +  ifp = XUINT (pen);
  47731. +  if (pen > 8)
  47732. +    error("choices are from 0 to 8");
  47733. +  inverse_fill_pen = ifp;
  47734. +  reset_window(selected_frame);
  47735. +  return Qnil;
  47736. +}
  47737. +
  47738. +DEFUN("amiga-set-inverse-text-pen", Famiga_set_inverse_text_pen,
  47739. +      Samiga_set_inverse_text_pen, 1, 1, "nPen number: ",
  47740. +      "Use PEN's color for inverse fills (0-7 or 8 for reverse)")
  47741. +     (pen)
  47742. +{
  47743. +  int itp = 8;
  47744. +
  47745. +  check_intuition();
  47746. +  CHECK_NUMBER(pen, 0);
  47747. +
  47748. +  itp = XUINT (pen);
  47749. +  if (pen > 8)
  47750. +    error("choices are from 0 to 8");
  47751. +  inverse_text_pen = itp;
  47752. +  reset_window(selected_frame);
  47753. +  return Qnil;
  47754. +}
  47755. +
  47756. +DEFUN("amiga-set-font", Famiga_set_font, Samiga_set_font, 2, 2,
  47757. +      "sFont: \n\
  47758. +nSize: ",
  47759. +      "Set font used for window to FONT with given HEIGHT.\n\
  47760. +The font used must be non-proportional.")
  47761. +(wfont, height)
  47762. +{
  47763. +  struct TextAttr attr;
  47764. +  struct TextFont *newfont;
  47765. +  char *fname;
  47766. +  struct Lisp_String *fstr;
  47767. +  WORD minw, minh, oldmw, oldmh;
  47768. +  FRAME_PTR f = selected_frame; /* CHFIXME? */
  47769. +  
  47770. +  CHECK_STRING (wfont, 0);
  47771. +  CHECK_NUMBER (height, 0);
  47772. +
  47773. +  check_intuition();
  47774. +
  47775. +  fstr = XSTRING (wfont);
  47776. +  fname = (char *)alloca (fstr->size + 6);
  47777. +  strcpy (fname, fstr->data);
  47778. +  strcat (fname, ".font");
  47779. +  attr.ta_Name = fname;
  47780. +  attr.ta_YSize = XFASTINT (height);
  47781. +  attr.ta_Style = 0;
  47782. +  attr.ta_Flags = 0;
  47783. +  newfont = OpenDiskFont (&attr);
  47784. +
  47785. +  if (!newfont)
  47786. +    error ("Font %s %d not found", fstr->data, XFASTINT (height));
  47787. +  if (newfont->tf_Flags & FPF_PROPORTIONAL)
  47788. +    {
  47789. +      CloseFont(newfont);
  47790. +      error ("Font %s %d is proportional", fstr->data, XFASTINT (height));
  47791. +    }
  47792. +
  47793. +  if (EMACS_WIN(f))
  47794. +    {
  47795. +      if (!set_min_size(EMACS_WIN(f), newfont, &minw, &minh))
  47796. +    {
  47797. +      CloseFont(newfont);
  47798. +      if (!set_min_size(EMACS_WIN(f), font, &oldmw, &oldmh))
  47799. +        _fail("Failed to restore old font, exiting.");
  47800. +      error("Window is too small for this font, need at least %d(w) by %d(h)",
  47801. +        minw, minh);
  47802. +    }
  47803. +      SetFont(EMACS_WIN(f)->RPort, newfont);
  47804. +    }
  47805. +  if (font_opened) CloseFont(font);
  47806. +  font_opened = TRUE;
  47807. +  font = newfont;
  47808. +  reset_window(f);
  47809. +  return Qnil;
  47810. +}
  47811. +
  47812. +DEFUN("amiga-set-geometry", Famiga_set_geometry, Samiga_set_geometry, 4, MANY, 0,
  47813. +      "Set Emacs window geometry and screen.\n\
  47814. +First 4 parameters are the (X,Y) position of the top-left corner of the window\n\
  47815. +and its WIDTH and HEIGHT. These must be big enough for an 11x4 characters window.\n\
  47816. +If nil is given for any of these, that means to keep the same value as before.\n\
  47817. +The optional argument SCREEN specifies which screen to use, nil stands for the\n\
  47818. +same screen as the window is on, t stands for the default public screen (normally\n\
  47819. +the Workbench), a string specifies a given public screen.\n\
  47820. +If optional argument BACKDROP is t, a backdrop window is used.")
  47821. +  (nargs, args)
  47822. +    int nargs;
  47823. +    Lisp_Object *args;
  47824. +{
  47825. +  Lisp_Object x, y, w, h, scr = Qnil, backdrop = Qnil;
  47826. +  int opened;
  47827. +  WORD tempx, tempy, tempw, temph;
  47828. +  char *screen_name;
  47829. +  int use_backdrop;
  47830. +  FRAME_PTR f = selected_frame; /* CHFIXME */
  47831. +
  47832. +  if (nargs > 6) error("Too many arguments to amiga-set-geometry");
  47833. +  x = args[0]; y = args[1]; w = args[2]; h = args[3];
  47834. +  if (nargs > 4)
  47835. +    {
  47836. +      scr = args[4];
  47837. +      if (nargs > 5) backdrop = args[5];
  47838. +    }
  47839. +
  47840. +  check_intuition();
  47841. +
  47842. +  if (!NILP (x))
  47843. +    {
  47844. +      CHECK_NUMBER(x, 0);
  47845. +      tempx = XUINT(x);
  47846. +    }
  47847. +  else tempx = EMACS_X();
  47848. +  if (!NILP (y))
  47849. +    {
  47850. +      CHECK_NUMBER(y, 0);
  47851. +      tempy = XUINT(y);
  47852. +    }
  47853. +  else tempy = EMACS_Y();
  47854. +  if (!NILP (w))
  47855. +    {
  47856. +      CHECK_NUMBER(w, 0);
  47857. +      tempw = XUINT(w);
  47858. +    }
  47859. +  else tempw = EMACS_W();
  47860. +  if (!NILP (h))
  47861. +    {
  47862. +      CHECK_NUMBER(h, 0);
  47863. +      temph = XUINT(h);
  47864. +    }
  47865. +  else temph = EMACS_H();
  47866. +
  47867. +  use_backdrop = !NILP(backdrop);
  47868. +
  47869. +  if (scr == Qt) screen_name = 0; /* set to zero for def. */
  47870. +  else if (!NILP (scr))
  47871. +    {
  47872. +      CHECK_STRING (scr, 0);
  47873. +      screen_name = XSTRING (scr)->data;
  47874. +    }
  47875. +  else screen_name = emacs_screen_name;
  47876. +
  47877. +  if (EMACS_WIN(f))
  47878. +    {
  47879. +      struct Window *old_win = EMACS_WIN(f);
  47880. +      struct IOStdReq *old_console = emacs_console;
  47881. +
  47882. +      suspend_menus(f);
  47883. +      opened = open_emacs_window(f, tempx, tempy, tempw, temph, use_backdrop,
  47884. +                 screen_name);
  47885. +      if (opened != ok)
  47886. +    {
  47887. +      resume_menus(f);
  47888. +
  47889. +      if (opened == no_window) error("Failed to open desired window");
  47890. +      else if (screen_name)
  47891. +        error("Unknown public screen %s", screen_name);
  47892. +      else error("The default screen wasn't found !?");
  47893. +    }
  47894. +
  47895. +      _device_close(old_console);
  47896. +      CloseWindow(old_win);
  47897. +      if (!resume_menus(f)) error("Failed to recover menus (No memory?)");
  47898. +    }
  47899. +  else /* No window, set defaults */
  47900. +    {
  47901. +      emacs_screen_name = screen_name;
  47902. +      if (screen_name)
  47903. +    {
  47904. +      emacs_screen_name_storage[MAXPUBSCREENNAME] = '\0';
  47905. +      strncpy(emacs_screen_name_storage, screen_name, MAXPUBSCREENNAME);
  47906. +    }
  47907. +      emacs_x = tempx;
  47908. +      emacs_y = tempy;
  47909. +      emacs_w = tempw;
  47910. +      emacs_h = temph;
  47911. +      emacs_backdrop = use_backdrop;
  47912. +    }
  47913. +  return Qnil;
  47914. +}
  47915. +
  47916. +
  47917. +/* The next 2 functions are very usefull for writing
  47918. + * arexx/lisp functions that interact with other programs
  47919. + * that will be sharing the same screen.  -ch3/19/93. */
  47920. +
  47921. +DEFUN("amiga-get-window-geometry",
  47922. +      Famiga_get_window_geometry, Samiga_get_window_geometry, 0, 0, 0,
  47923. +      "Get Emacs window geometry.\n\
  47924. +a list returned is of the form:  (iconified x y width height backdrop)\n\
  47925. +where x, y, width, height are integers, backdrop is t or nil and iconified\n\
  47926. +is t if the window is iconified and nil otherwise")
  47927. +()
  47928. +{
  47929. +  Lisp_Object x, y, w, h, b, i;
  47930. +
  47931. +  XSET(x, Lisp_Int, EMACS_X());
  47932. +  XSET(y, Lisp_Int, EMACS_Y());
  47933. +  XSET(w, Lisp_Int, EMACS_W());
  47934. +  XSET(h, Lisp_Int, EMACS_H());
  47935. +  b = emacs_backdrop ? Qt : Qnil;
  47936. +  i = emacs_iconified ? Qt : Qnil;
  47937. +
  47938. +  return Fcons(i, Fcons(x, Fcons(y, Fcons(w, Fcons(h, Fcons(b, Qnil))))));
  47939. +}
  47940. +
  47941. +DEFUN("amiga-get-screen-geometry",
  47942. +      Famiga_get_screen_geometry, Samiga_get_screen_geometry, 0, 0, 0,
  47943. +      "Get geometry of the screen emacs window resides on.\n\
  47944. +a list returned is of the form:  (name x y width height)\n\
  47945. +where name is a string, x, y, width, height are integers.\n\
  47946. +Only the public screen name is returned if the window is not currently open.\n\
  47947. +In this last case, the name may be nil if the window will be opened on the\n\
  47948. +default public screen.")
  47949. +()
  47950. +{
  47951. +  Lisp_Object name;
  47952. +
  47953. +  if (emacs_screen_name) name = Qnil;
  47954. +  else name = build_string(emacs_screen_name);
  47955. +
  47956. +  if(EMACS_WIN(f))
  47957. +    {
  47958. +      struct Screen *s = EMACS_WIN(f)->WScreen;
  47959. +      Lisp_Object x, y, w, h;
  47960. +
  47961. +      XSET(x, Lisp_Int, s->LeftEdge);
  47962. +      XSET(y, Lisp_Int, s->TopEdge);
  47963. +      XSET(w, Lisp_Int, s->Width);
  47964. +      XSET(h, Lisp_Int, s->Height);
  47965. +
  47966. +      return Fcons(name, Fcons(x, Fcons(y, Fcons(w, Fcons(h, Qnil)))));
  47967. +    }
  47968. +  return Fcons(name, Qnil);
  47969. +}
  47970. +
  47971. +DEFUN("amiga-iconify", Famiga_iconify, Samiga_iconify, 0, 0, "",
  47972. +      "Toggle the emacs iconification state.")
  47973. +()
  47974. +{
  47975. +    FRAME_PTR f = selected_frame; /* CHFIXME */
  47976. +    
  47977. +  check_intuition();
  47978. +
  47979. +  if (emacs_iconified)
  47980. +    {
  47981. +      /* Deiconify */
  47982. +
  47983. +      /* Reopen window */
  47984. +      if (open_emacs_window(f, emacs_x, emacs_y, emacs_w, emacs_h, emacs_backdrop,
  47985. +                emacs_screen_name) != ok)
  47986. +    error("Failed to deiconify (No memory?)");
  47987. +      resume_menus(f);
  47988. +
  47989. +      RemoveAppIcon(emacs_icon);
  47990. +      emacs_icon = 0;
  47991. +      emacs_iconified = 0;
  47992. +    }
  47993. +  else
  47994. +    if (emacs_icon = AddAppIconA(0, 0, "Emacs", wbport, 0, &emacs_icon_object, 0))
  47995. +      {
  47996. +    if (EMACS_WIN(f))
  47997. +      {
  47998. +        /* Close window */
  47999. +        emacs_x = EMACS_X(); emacs_y = EMACS_Y();
  48000. +        emacs_w = EMACS_W(); emacs_h = EMACS_H();
  48001. +        suspend_menus(f);
  48002. +        close_emacs_window(f);
  48003. +      }
  48004. +    emacs_iconified = 1;
  48005. +      }
  48006. +    else error("Iconify attempt failed\n");
  48007. +
  48008. +  return Qnil;
  48009. +}
  48010. +
  48011. +DEFUN("amiga-set-icon-pos", Famiga_set_icon_pos, Samiga_set_icon_pos, 2, 2,
  48012. +"nX position: \n\
  48013. +nY position: ",
  48014. +      "Set the X Y position of the icon for emacs when iconified.")
  48015. +  (Lisp_Object x, Lisp_Object y)
  48016. +{
  48017. +  long xpos, ypos;
  48018. +
  48019. +  if (NILP (x)) emacs_icon_object.do_CurrentX = NO_ICON_POSITION;
  48020. +  else
  48021. +    {
  48022. +      CHECK_NUMBER (x, 0);
  48023. +      emacs_icon_object.do_CurrentX = XINT(x);
  48024. +    }
  48025. +  if (NILP (y)) emacs_icon_object.do_CurrentY = NO_ICON_POSITION;
  48026. +  else
  48027. +    {
  48028. +      CHECK_NUMBER (y, 0);
  48029. +      emacs_icon_object.do_CurrentY = XINT(y);
  48030. +    }
  48031. +
  48032. +  return Qnil;
  48033. +}
  48034. +
  48035. +struct EClockVal scount[16], ecount[16];
  48036. +long total[16], counting[16], nb[16], susp[16];
  48037. +
  48038. +void start_count(int n)
  48039. +{
  48040. +  nb[n]++;
  48041. +  if (counting[n]) printf("Restarted %d\n", n);
  48042. +  counting[n] = 1;
  48043. +  /*ReadEClock(&scount[n]);*/
  48044. +}
  48045. +
  48046. +void stop_count(int n)
  48047. +{
  48048. +  if (counting[n])
  48049. +    {
  48050. +      /*ReadEClock(&ecount[n]);*/
  48051. +      counting[n] = 0;
  48052. +
  48053. +      total[n] += ecount[n].ev_lo - scount[n].ev_lo;
  48054. +    }
  48055. +}
  48056. +
  48057. +void suspend_count(int n)
  48058. +{
  48059. +  if (counting[n] && susp[n]++ == 0)
  48060. +    {
  48061. +      /*ReadEClock(&ecount[n]);*/
  48062. +      total[n] += ecount[n].ev_lo - scount[n].ev_lo;
  48063. +    }
  48064. +}
  48065. +
  48066. +void resume_count(int n)
  48067. +{
  48068. +  if (counting[n] && --susp[n] == 0) /*ReadEClock(&scount[n])*/;
  48069. +}
  48070. +
  48071. +disp_counts(void)
  48072. +{
  48073. +  int i;
  48074. +
  48075. +  for (i = 0; i < 16; i++)
  48076. +    {
  48077. +      printf("%d(%d) ", total[i], nb[i]);
  48078. +      total[i] = nb[i] = 0;
  48079. +    }
  48080. +  printf("\n");
  48081. +}
  48082. +
  48083. +void screen_puts(FRAME_PTR f, char *str, unsigned int len)
  48084. +{
  48085. +  if (EMACS_WIN(f))
  48086. +    {
  48087. +      int i;
  48088. +
  48089. +      emacs_console->io_Command = CMD_WRITE;
  48090. +      emacs_console->io_Data    = (APTR)str;
  48091. +      emacs_console->io_Length  = len;
  48092. +
  48093. +      /*    start_count(0);
  48094. +        for (i = 1; i <= 6; i++) suspend_count(i);*/
  48095. +      DoIO(emacs_console); 
  48096. +      /*    for (i = 1; i <= 6; i++) resume_count(i);
  48097. +        stop_count(0);*/
  48098. +    }
  48099. +}
  48100. +
  48101. +DEFUN ("amiga-activate-window", Famiga_activate_window, Samiga_activate_window, 0, 0, 0,
  48102. +       "Makes emacs window the currently active one.")
  48103. +     ()
  48104. +{
  48105. +  if(EMACS_WIN(f)) {
  48106. +    ActivateWindow(EMACS_WIN(f));
  48107. +    return Qnil;
  48108. +  }
  48109. +  error("No window to make active.");
  48110. +  return Qnil;
  48111. +}
  48112. +
  48113. +void
  48114. +Aframe_raise_lower(FRAME_PTR f, int raise)
  48115. +{
  48116. +    if(raise)
  48117. +    {
  48118. +    if(EMACS_WIN(f))
  48119. +        WindowToFront(EMACS_WIN(f));
  48120. +    }
  48121. +    else
  48122. +    {
  48123. +    if(EMACS_WIN(f))
  48124. +        WindowToBack(EMACS_WIN(f));
  48125. +    }
  48126. +}
  48127. +
  48128. +DEFUN ("amiga-window-to-front", Famiga_window_to_front, Samiga_window_to_front, 0, 0, 0,
  48129. +       "Pulls the emacs window to the front (including screen)")
  48130. +     ()
  48131. +{
  48132. +  if(EMACS_WIN(f)) {
  48133. +    WindowToFront(EMACS_WIN(f));
  48134. +    ScreenToFront(EMACS_WIN(f)->WScreen);
  48135. +    return Qnil;
  48136. +  }
  48137. +  error("No window to pull to the front.");
  48138. +  return Qnil;
  48139. +}
  48140. +
  48141. +DEFUN ("amiga-window-to-back", Famiga_window_to_back, Samiga_window_to_back, 0, 0, 0,
  48142. +       "Pushes the emacs window to the back (including screen)")
  48143. +     ()
  48144. +{
  48145. +  if(EMACS_WIN(f)) {
  48146. +    WindowToBack(EMACS_WIN(f));
  48147. +    ScreenToBack(EMACS_WIN(f)->WScreen);
  48148. +    return Qnil;
  48149. +  }
  48150. +  error("No window to push back.");
  48151. +  return Qnil;
  48152. +}
  48153. +
  48154. +DEFUN ("amiga-popup-font-request", Famiga_popup_font_request, Samiga_popup_font_request, 0, 0, 0,
  48155. +       "Open an ASL Font Requester and return the value as cons of font name and font size.")
  48156. +     ()
  48157. +{
  48158. +    LONG Top = 0, Left = 0;
  48159. +    Lisp_Object RetVal = Qnil;
  48160. +    struct FontRequester *Req;
  48161. +
  48162. +    if(EMACS_WIN(f))
  48163. +    {
  48164. +    Top = EMACS_WIN(f)->TopEdge + EMACS_WIN(f)->MouseY - 75;
  48165. +    Left = EMACS_WIN(f)->LeftEdge + EMACS_WIN(f)->MouseX - 160;
  48166. +    AslBase = OpenLibrary("asl.library", 0);
  48167. +    if(AslBase)
  48168. +    {
  48169. +        Req = AllocAslRequestTags(ASL_FontRequest,
  48170. +                      ASL_Hail, "Emacs Font Request",
  48171. +                      ASL_FuncFlags, FONF_FIXEDWIDTH,
  48172. +                      TAG_DONE);
  48173. +        if(Req)
  48174. +        {
  48175. +        if(AslRequestTags(Req,
  48176. +                  ASL_TopEdge, Top,
  48177. +                  ASL_LeftEdge, Left,
  48178. +                  ASL_Height, 250, TAG_DONE))
  48179. +        {
  48180. +            char *s;
  48181. +
  48182. +            s = strstr(Req->fo_Attr.ta_Name, ".font");
  48183. +            if(s)
  48184. +            RetVal = Fcons(make_string(Req->fo_Attr.ta_Name,
  48185. +                           s - Req->fo_Attr.ta_Name),
  48186. +                       make_number(Req->fo_Attr.ta_YSize));
  48187. +        }
  48188. +        FreeAslRequest(Req);
  48189. +        }
  48190. +        CloseLibrary(AslBase);
  48191. +    }
  48192. +    }
  48193. +    return RetVal;
  48194. +}
  48195. +
  48196. +#ifdef USE_SCROLL_BARS
  48197. +/*
  48198. + * Lisp_ScrollBar is a Lisp_Vector
  48199. + */ 
  48200. +struct Lisp_ScrollBar
  48201. +{
  48202. +    int size;
  48203. +    struct Lisp_ScrollBar *next;
  48204. +    Lisp_Object window;
  48205. +    Lisp_Object 
  48206. +};
  48207. +
  48208. +/* Arrange for all scroll bars on FRAME to be removed at the next call
  48209. +   to `*judge_scroll_bars_hook'.  A scroll bar may be spared if
  48210. +   `*redeem_scroll_bar_hook' is applied to its window before the judgement. 
  48211. +
  48212. +   This should be applied to each frame each time its window tree is
  48213. +   redisplayed, even if it is not displaying scroll bars at the moment;
  48214. +   if the HAS_SCROLL_BARS flag has just been turned off, only calling
  48215. +   this and the judge_scroll_bars_hook will get rid of them.
  48216. +
  48217. +   If non-zero, this hook should be safe to apply to any frame,
  48218. +   whether or not it can support scroll bars, and whether or not it is
  48219. +   currently displaying them.  */
  48220. +
  48221. +void
  48222. +Acondemn_scroll_bars(FRAME_PTR f)
  48223. +{
  48224. +    FRAME_CONDEMNED_SCROLL_BARS(f) = FRAME_SCROLL_BARS(f);
  48225. +    FRAME_SCROLL_BARS(f) = Qnil;
  48226. +}
  48227. +
  48228. +/* Unmark WINDOW's scroll bar for deletion in this judgement cycle.
  48229. +   Note that it's okay to redeem a scroll bar that is not condemned.  */
  48230. +
  48231. +void
  48232. +Aredeem_scroll_bar(struct window *w)
  48233. +{
  48234. +    FRAME_PTR f = WINDOW_FRAME(w);
  48235. +
  48236. +    
  48237. +}
  48238. +
  48239. +/* Remove all scroll bars on FRAME that haven't been saved since the
  48240. +   last call to `*condemn_scroll_bars_hook'.  
  48241. +
  48242. +   This should be applied to each frame after each time its window
  48243. +   tree is redisplayed, even if it is not displaying scroll bars at the
  48244. +   moment; if the HAS_SCROLL_BARS flag has just been turned off, only
  48245. +   calling this and condemn_scroll_bars_hook will get rid of them.
  48246. +
  48247. +   If non-zero, this hook should be safe to apply to any frame,
  48248. +   whether or not it can support scroll bars, and whether or not it is
  48249. +   currently displaying them.  */
  48250. +void Ajudge_scroll_bars(FRAME_PTR f)
  48251. +{
  48252. +}
  48253. +#endif /* USE_SCROLL_BARS */
  48254. +
  48255. +void syms_of_amiga_screen(void)
  48256. +{
  48257. +  DEFVAR_LISP ("amiga-mouse-item", &Vamiga_mouse_item,
  48258. +           "Encoded representation of last mouse click, corresponding to\n\
  48259. +numerical entries in amiga-mouse-map.");
  48260. +  Vamiga_mouse_item = Qnil;
  48261. +  DEFVAR_LISP ("amiga-mouse-pos", &Vamiga_mouse_pos,
  48262. +           "Current x-y position of mouse by row, column as specified by font.");
  48263. +  Vamiga_mouse_pos = Qnil;
  48264. +
  48265. +  DEFVAR_BOOL ("amiga-remap-bsdel", &amiga_remap_bsdel,
  48266. +           "*If true, map DEL to Ctrl-D and Backspace to DEL. \n\
  48267. +This is the most convenient (and default) setting. If nil, don't remap.");
  48268. +  amiga_remap_bsdel = 1;
  48269. +
  48270. +  DEFVAR_BOOL ("amiga-remap-numeric-keypad", &amiga_remap_numeric_keypad,
  48271. +           "*If true, numeric keypad keys are prefixed with C-x C-^ K.\n\
  48272. +This enables you to remap them, but causes problems with functions like\n\
  48273. +isearch-forward-regexp on some keyboards. Default to true.");
  48274. +  amiga_remap_numeric_keypad = 1;
  48275. +
  48276. +  DEFVAR_BOOL ("amiga-mouse-initialized", &amiga_mouse_initialized,
  48277. +           "Set to true once lisp has been setup to process mouse commands.\n\
  48278. +No mouse processing request (C-X C-^ M) will be queued while this is nil.");
  48279. +  amiga_mouse_initialized = 0;
  48280. +
  48281. +  DEFVAR_BOOL ("amiga-wb-initialized", &amiga_wb_initialized,
  48282. +           "Set to true once lisp has been setup to process workbench commands.\n\
  48283. +No workbench processing request (C-X C-^ W) will be queued while this is nil.");
  48284. +  amiga_mouse_initialized = 0;
  48285. +
  48286. +#if 0
  48287. +  defsubr (&Samiga_mouse_events);
  48288. +  defsubr (&Samiga_proc_mouse_event);
  48289. +  defsubr (&Samiga_get_mouse_event);
  48290. +#endif
  48291. +  defsubr (&Samiga_get_wb_event);
  48292. +  defsubr (&Samiga_set_font);
  48293. +  defsubr (&Samiga_set_geometry);
  48294. +  defsubr (&Samiga_set_background_color);
  48295. +  defsubr (&Samiga_set_foreground_color);
  48296. +  defsubr (&Samiga_iconify);
  48297. +  defsubr (&Samiga_set_icon_pos);
  48298. +
  48299. +  /* New functions  -ch3/19/93. */
  48300. +  defsubr (&Samiga_set_inverse_text_pen);
  48301. +  defsubr (&Samiga_set_inverse_fill_pen);
  48302. +  defsubr (&Samiga_window_to_front);
  48303. +  defsubr (&Samiga_window_to_back);
  48304. +  defsubr (&Samiga_activate_window);
  48305. +  defsubr (&Samiga_get_window_geometry);
  48306. +  defsubr (&Samiga_get_screen_geometry);
  48307. +
  48308. +  /* New functions -Alph08/24/94 */
  48309. +  defsubr (&Samiga_popup_font_request);
  48310. +}
  48311. +
  48312. +void init_amiga_screen(void)
  48313. +{
  48314. +  event_num = event_in = event_out = 0;
  48315. +
  48316. +  if (!((IntuitionBase = (struct IntuitionBase *)
  48317. +     OpenLibrary("intuition.library", 37L)) &&
  48318. +    (GfxBase = (struct GfxBase *)OpenLibrary("graphics.library", 0L)) &&
  48319. +    (DiskfontBase = OpenLibrary("diskfont.library", 0L)) &&
  48320. +    (WorkbenchBase = OpenLibrary("workbench.library", 37)) &&
  48321. +    (KeymapBase = OpenLibrary("keymap.library", 36)) &&
  48322. +    (input_req = (struct IOStdReq *)_device_open("input.device", 0, 0, 0, 0,
  48323. +                             sizeof(struct IOStdReq)))))
  48324. +    _fail("Need version 2.04 and diskfont.library!");
  48325. +
  48326. +  if (!(wbport = CreateMsgPort())) no_memory();
  48327. +
  48328. +  /* Add Ctrl-G detector */
  48329. +  int_handler_hook.is_Data = 0;
  48330. +  int_handler_hook.is_Code = (void *)int_handler;
  48331. +  int_handler_hook.is_Node.ln_Pri = 100; /* 100 not 127 is the standard value
  48332. +                      * for input stream handlers.  -ch3/19/93. */
  48333. +  /* it is standard for interrupts to have names  -ch3/19/93.*/
  48334. +  int_handler_hook.is_Node.ln_Name = "GNU Emacs CTRL-G handler";
  48335. +  input_req->io_Command = IND_ADDHANDLER;
  48336. +  input_req->io_Data = (APTR)&int_handler_hook;
  48337. +
  48338. +  /* wasn't checking for error. -ch3/19/93. */
  48339. +#if 1 /* CHFIXME make debugging life a bit more easy */
  48340. +  hooked = FALSE;
  48341. +#else
  48342. +  if(0 == DoIO(input_req))
  48343. +    hooked = TRUE;
  48344. +  else
  48345. +    {
  48346. +      hooked = FALSE;
  48347. +      _fail("couldn't get input handler hook for CTRL-G");
  48348. +    }
  48349. +#endif
  48350. +  inputsig |= 1L << wbport->mp_SigBit;
  48351. +
  48352. +  background_hook.h_Entry = (ULONG (*)()) fill_background; /* added cast. */
  48353. +  font = GfxBase->DefaultFont;
  48354. +
  48355. +  init_amiga_menu();
  48356. +}
  48357. +
  48358. +void cleanup_amiga_screen(void)
  48359. +{
  48360. +  if (hooked)
  48361. +    {
  48362. +      input_req->io_Command = IND_REMHANDLER;
  48363. +      input_req->io_Data = (APTR)&int_handler_hook;
  48364. +      DoIO(input_req);
  48365. +    }
  48366. +  close_app_win();
  48367. +  if (wbport) DeleteMsgPort(wbport);
  48368. +  cleanup_amiga_menu();
  48369. +  _device_close(emacs_console);
  48370. +#ifdef MULTI_FRAME
  48371. +  you lose
  48372. +#endif
  48373. +  if (EMACS_WIN(f)) CloseWindow(EMACS_WIN(f));
  48374. +  if (font_opened) CloseFont(font);
  48375. +  if (IntuitionBase) CloseLibrary(IntuitionBase);
  48376. +  if (GfxBase) CloseLibrary(GfxBase);
  48377. +  if (DiskfontBase) CloseLibrary(DiskfontBase);
  48378. +  if (WorkbenchBase) CloseLibrary(WorkbenchBase);
  48379. +  if (KeymapBase) CloseLibrary(KeymapBase);
  48380. +  _device_close(input_req);
  48381. +}
  48382. diff -rup --new-file baseline/fsf/emacs/src/amiga_screen_protos.h amiga/fsf/emacs/src/amiga_screen_protos.h
  48383. --- baseline/fsf/emacs/src/amiga_screen_protos.h    Wed Dec 31 17:00:00 1969
  48384. +++ amiga/fsf/emacs/src/amiga_screen_protos.h    Sat Sep 28 00:00:00 1996
  48385. @@ -0,0 +1,238 @@
  48386. +/* Prototypes for functions defined in
  48387. +amiga_screen.c
  48388. + */
  48389. +
  48390. +extern struct GfxBase * GfxBase;
  48391. +
  48392. +extern struct IntuitionBase * IntuitionBase;
  48393. +
  48394. +extern struct Library * DiskfontBase;
  48395. +
  48396. +extern struct Library * KeymapBase;
  48397. +
  48398. +extern struct Library * WorkbenchBase;
  48399. +
  48400. +extern char intkey_code;
  48401. +
  48402. +extern char intkey_qualifier;
  48403. +
  48404. +extern struct IOStdReq * input_req;
  48405. +
  48406. +extern struct Interrupt int_handler_hook;
  48407. +
  48408. +extern int hooked;
  48409. +
  48410. +extern struct MsgPort * wbport;
  48411. +
  48412. +extern struct AppWindow * emacs_app_win;
  48413. +
  48414. +extern struct AppIcon * emacs_icon;
  48415. +
  48416. +extern struct Library * ConsoleDevice;
  48417. +
  48418. +extern struct TextFont * font;
  48419. +
  48420. +extern int font_opened;
  48421. +
  48422. +extern char reset_string[20];
  48423. +
  48424. +extern int foreground;
  48425. +
  48426. +extern int background;
  48427. +
  48428. +extern short emacs_x;
  48429. +
  48430. +extern short emacs_y;
  48431. +
  48432. +extern short emacs_w;
  48433. +
  48434. +extern short emacs_h;
  48435. +
  48436. +extern char * emacs_screen_name;
  48437. +
  48438. +extern char emacs_screen_name_storage[140];
  48439. +
  48440. +extern int emacs_backdrop;
  48441. +
  48442. +extern int inverse_fill_pen;
  48443. +
  48444. +extern int inverse_text_pen;
  48445. +
  48446. +extern struct IOStdReq * emacs_console;
  48447. +
  48448. +extern unsigned short __chip emacs_icon_data[1][55][4];
  48449. +
  48450. +extern struct Image __far emacs_icon_image;
  48451. +
  48452. +extern struct DiskObject __far emacs_icon_object;
  48453. +
  48454. +extern struct Hook background_hook;
  48455. +
  48456. +extern struct event events[32];
  48457. +
  48458. +extern int event_num;
  48459. +
  48460. +extern int event_in;
  48461. +
  48462. +extern int event_out;
  48463. +
  48464. +extern struct wbevent * wbevents;
  48465. +
  48466. +extern int Vamiga_mouse_pos;
  48467. +
  48468. +extern int Vamiga_mouse_item;
  48469. +
  48470. +extern int amiga_remap_bsdel;
  48471. +
  48472. +extern int amiga_remap_numeric_keypad;
  48473. +
  48474. +extern int amiga_mouse_initialized;
  48475. +
  48476. +extern int amiga_wb_initialized;
  48477. +
  48478. +extern int emacs_iconified;
  48479. +
  48480. +extern int mouse_event;
  48481. +
  48482. +int mouse_event_pending(void);
  48483. +
  48484. +void reset_mouse_event_pending(void);
  48485. +
  48486. +void set_mouse_event_pending(void);
  48487. +
  48488. +int amiga_pos_x(int , int );
  48489. +
  48490. +int amiga_pos_y(int , int );
  48491. +
  48492. +void glyph_to_pixel_coords(int , int , int , int * , int * );
  48493. +
  48494. +void pixel_to_glyph_coords(int , int , int , int * , int * , void * , int );
  48495. +
  48496. +void amiga_change_size(int );
  48497. +
  48498. +void amiga_get_window_size(int , int * , int * );
  48499. +
  48500. +int set_min_size(struct Window * , struct TextFont * , short * , short * );
  48501. +
  48502. +unsigned long __asm __interrupt __saveds fill_background(register __a2 struct RastPort * , register __a1 struct fill * );
  48503. +
  48504. +void clear_window(int );
  48505. +
  48506. +int make_reset_string(void);
  48507. +
  48508. +void reset_window(int );
  48509. +
  48510. +void close_app_win(void);
  48511. +
  48512. +int close_emacs_window(int );
  48513. +
  48514. +char * get_screen_name(struct Screen * , char * );
  48515. +
  48516. +enum open_emacs_win_ret open_emacs_window(int , unsigned short , unsigned short , unsigned short , unsigned short , int , char * );
  48517. +
  48518. +void force_window(int );
  48519. +
  48520. +int DeadKeyConvert(struct IntuiMessage * , unsigned char * , unsigned short * , int , struct KeyMap * );
  48521. +
  48522. +void add_wbevent(struct WBArg * );
  48523. +
  48524. +void get_mouse_char_pos(int , int * , int * );
  48525. +
  48526. +void check_window(int , int );
  48527. +
  48528. +void setup_intchar(char );
  48529. +
  48530. +long __asm __interrupt __saveds int_handler(register __a0 struct InputEvent * );
  48531. +
  48532. +extern struct Lisp_Subr Samiga_get_wb_event;
  48533. +
  48534. +int Famiga_get_wb_event(int );
  48535. +
  48536. +extern struct Lisp_Subr Samiga_set_foreground_color;
  48537. +
  48538. +int Famiga_set_foreground_color(int );
  48539. +
  48540. +extern struct Lisp_Subr Samiga_set_background_color;
  48541. +
  48542. +int Famiga_set_background_color(int );
  48543. +
  48544. +extern struct Lisp_Subr Samiga_set_inverse_fill_pen;
  48545. +
  48546. +int Famiga_set_inverse_fill_pen(int );
  48547. +
  48548. +extern struct Lisp_Subr Samiga_set_inverse_text_pen;
  48549. +
  48550. +int Famiga_set_inverse_text_pen(int );
  48551. +
  48552. +extern struct Lisp_Subr Samiga_set_font;
  48553. +
  48554. +int Famiga_set_font(int , int );
  48555. +
  48556. +extern struct Lisp_Subr Samiga_set_geometry;
  48557. +
  48558. +int Famiga_set_geometry(int , int * );
  48559. +
  48560. +extern struct Lisp_Subr Samiga_get_window_geometry;
  48561. +
  48562. +int Famiga_get_window_geometry(void);
  48563. +
  48564. +extern struct Lisp_Subr Samiga_get_screen_geometry;
  48565. +
  48566. +int Famiga_get_screen_geometry(void);
  48567. +
  48568. +extern struct Lisp_Subr Samiga_iconify;
  48569. +
  48570. +int Famiga_iconify(void);
  48571. +
  48572. +extern struct Lisp_Subr Samiga_set_icon_pos;
  48573. +
  48574. +int Famiga_set_icon_pos(int , int );
  48575. +
  48576. +extern struct EClockVal scount[16];
  48577. +
  48578. +extern struct EClockVal ecount[16];
  48579. +
  48580. +extern long total[16];
  48581. +
  48582. +extern long counting[16];
  48583. +
  48584. +extern long nb[16];
  48585. +
  48586. +extern long susp[16];
  48587. +
  48588. +void start_count(int );
  48589. +
  48590. +void stop_count(int );
  48591. +
  48592. +void suspend_count(int );
  48593. +
  48594. +void resume_count(int );
  48595. +
  48596. +int disp_counts(void);
  48597. +
  48598. +void screen_puts(int , char * , unsigned int );
  48599. +
  48600. +extern struct Lisp_Subr Samiga_activate_window;
  48601. +
  48602. +int Famiga_activate_window(void);
  48603. +
  48604. +void Aframe_raise_lower(int , int );
  48605. +
  48606. +extern struct Lisp_Subr Samiga_window_to_front;
  48607. +
  48608. +int Famiga_window_to_front(void);
  48609. +
  48610. +extern struct Lisp_Subr Samiga_window_to_back;
  48611. +
  48612. +int Famiga_window_to_back(void);
  48613. +
  48614. +extern struct Lisp_Subr Samiga_popup_font_request;
  48615. +
  48616. +int Famiga_popup_font_request(void);
  48617. +
  48618. +void syms_of_amiga_screen(void);
  48619. +
  48620. +void init_amiga_screen(void);
  48621. +
  48622. +void cleanup_amiga_screen(void);
  48623. +
  48624. diff -rup --new-file baseline/fsf/emacs/src/amiga_serial.c amiga/fsf/emacs/src/amiga_serial.c
  48625. --- baseline/fsf/emacs/src/amiga_serial.c    Wed Dec 31 17:00:00 1969
  48626. +++ amiga/fsf/emacs/src/amiga_serial.c    Sat Sep 28 00:00:00 1996
  48627. @@ -0,0 +1,78 @@
  48628. +#include <exec/types.h>
  48629. +#include <devices/serial.h>
  48630. +#include <stdio.h>
  48631. +#include <internal/devices.h>
  48632. +
  48633. +#include <proto/exec.h>
  48634. +#include <proto/dos.h>
  48635. +
  48636. +#include "amiga.h"
  48637. +
  48638. +#ifdef USE_PROTOS
  48639. +#include "config.h"
  48640. +#include "lisp.h"
  48641. +#include "protos.h"
  48642. +#endif
  48643. +
  48644. +static struct MsgPort  *SerReadPort;
  48645. +static struct IOExtSer *SerReadRequest, *SerWriteRequest;
  48646. +static char ser_inbuf[2];
  48647. +char *far serial_device = "serial.device";
  48648. +long far serial_unit;
  48649. +
  48650. +void init_amiga_serial(void)
  48651. +{
  48652. +    if ((SerWriteRequest = (struct IOExtSer *)
  48653. +     _device_open(serial_device, serial_unit, 0L,
  48654. +              0L, 0, sizeof(struct IOExtSer))) &&
  48655. +    (SerReadPort = CreateMsgPort()) &&
  48656. +    (SerReadRequest  = (struct IOExtSer *)CreateIORequest(SerReadPort, sizeof (struct IOExtSer))))
  48657. +    {
  48658. +    SerReadRequest->IOSer.io_Device = SerWriteRequest->IOSer.io_Device;
  48659. +    SerReadRequest->IOSer.io_Unit = SerWriteRequest->IOSer.io_Unit;
  48660. +    ser_inbuf[1]=0;
  48661. +    SerReadRequest->IOSer.io_Command = CMD_READ;
  48662. +    SerWriteRequest->IOSer.io_Command = CMD_WRITE;
  48663. +    SerReadRequest->IOSer.io_Length = 1;
  48664. +    SerReadRequest->IOSer.io_Data = &ser_inbuf[0];
  48665. +    SendIO(SerReadRequest);
  48666. +
  48667. +    inputsig |= 1L << SerReadPort->mp_SigBit;
  48668. +    }
  48669. +    else _fail("No memory or serial.device missing");
  48670. +}
  48671. +
  48672. +void cleanup_amiga_serial(void)
  48673. +{
  48674. +    if (SerReadRequest)
  48675. +    {
  48676. +    AbortIO(SerReadRequest);
  48677. +    WaitIO(SerReadRequest);
  48678. +    DeleteIORequest(SerReadRequest);
  48679. +    }
  48680. +    if (SerReadPort) DeletePort(SerReadPort);
  48681. +    _device_close(SerWriteRequest);
  48682. +}
  48683. +
  48684. +void check_serial(int force)
  48685. +{
  48686. +    while (CheckIO(SerReadRequest))
  48687. +    {
  48688. +    int c = ser_inbuf[0];
  48689. +    SendIO(SerReadRequest);
  48690. +    enque(c, FALSE, FALSE);
  48691. +    }
  48692. +}
  48693. +
  48694. +void serial_puts(char *str, int len)
  48695. +{
  48696. +
  48697. +    SerWriteRequest->IOSer.io_Length = len;
  48698. +    SerWriteRequest->IOSer.io_Data = str;
  48699. +    DoIO(SerWriteRequest);
  48700. +}
  48701. +
  48702. +unsigned long serial_baud_rate(void)
  48703. +{
  48704. +    return SerWriteRequest->io_Baud;
  48705. +}
  48706. diff -rup --new-file baseline/fsf/emacs/src/amiga_serial_protos.h amiga/fsf/emacs/src/amiga_serial_protos.h
  48707. --- baseline/fsf/emacs/src/amiga_serial_protos.h    Wed Dec 31 17:00:00 1969
  48708. +++ amiga/fsf/emacs/src/amiga_serial_protos.h    Sat Sep 28 00:00:00 1996
  48709. @@ -0,0 +1,26 @@
  48710. +/* Prototypes for functions defined in
  48711. +amiga_serial.c
  48712. + */
  48713. +
  48714. +extern struct MsgPort * SerReadPort;
  48715. +
  48716. +extern struct IOExtSer * SerReadRequest;
  48717. +
  48718. +extern struct IOExtSer * SerWriteRequest;
  48719. +
  48720. +extern char ser_inbuf[2];
  48721. +
  48722. +extern char * __far serial_device;
  48723. +
  48724. +extern long __far serial_unit;
  48725. +
  48726. +void init_amiga_serial(void);
  48727. +
  48728. +void cleanup_amiga_serial(void);
  48729. +
  48730. +void check_serial(int );
  48731. +
  48732. +void serial_puts(char * , int );
  48733. +
  48734. +unsigned long serial_baud_rate(void);
  48735. +
  48736. diff -rup --new-file baseline/fsf/emacs/src/amiga_sysdep.c amiga/fsf/emacs/src/amiga_sysdep.c
  48737. --- baseline/fsf/emacs/src/amiga_sysdep.c    Wed Dec 31 17:00:00 1969
  48738. +++ amiga/fsf/emacs/src/amiga_sysdep.c    Sat Sep 28 00:00:00 1996
  48739. @@ -0,0 +1,414 @@
  48740. +/* Interfaces to system-dependent kernel and library entries.
  48741. +Copyright (C) 1985, 1986, 1987, 1988 Free Software Foundation, Inc.
  48742. +
  48743. +This file is part of GNU Emacs.
  48744. +
  48745. +GNU Emacs is distributed in the hope that it will be useful,
  48746. +but WITHOUT ANY WARRANTY.  No author or distributor
  48747. +accepts responsibility to anyone for the consequences of using it
  48748. +or for whether it serves any particular purpose or works at all,
  48749. +unless he says so in writing.  Refer to the GNU Emacs General Public
  48750. +License for full details.
  48751. +
  48752. +Everyone is granted permission to copy, modify and redistribute
  48753. +GNU Emacs, but only under the conditions described in the
  48754. +GNU Emacs General Public License.   A copy of this license is
  48755. +supposed to have been given to you along with GNU Emacs so you
  48756. +can know your rights and responsibilities.  It should be in a
  48757. +file named COPYING.  Among other things, the copyright notice
  48758. +and this notice must be preserved on all copies.  */
  48759. +
  48760. +#include <exec/types.h>
  48761. +#include <dos/dos.h>
  48762. +#include <dos/dosextens.h>
  48763. +#include <dos/var.h>
  48764. +#include <exec/execbase.h>
  48765. +#include <exec/tasks.h>
  48766. +#include <utility/tagitem.h>
  48767. +#include <workbench/startup.h>
  48768. +#include <workbench/workbench.h>
  48769. +#include <proto/exec.h>
  48770. +#include <proto/dos.h>
  48771. +#include <proto/icon.h>
  48772. +
  48773. +#include <string.h>
  48774. +#include <ios1.h>
  48775. +#include <stdio.h>
  48776. +#include <sys/types.h>
  48777. +#include <sys/stat.h>
  48778. +#include <signal.h>
  48779. +#include <setjmp.h>
  48780. +#include <unistd.h>
  48781. +#include <internal/vars.h>
  48782. +
  48783. +#undef LONGBITS
  48784. +#include "config.h"
  48785. +#include "lisp.h"
  48786. +#include "emacssignal.h"
  48787. +
  48788. +#define min(x,y) ((x) > (y) ? (y) : (x))
  48789. +
  48790. +#include "termhooks.h"
  48791. +#include "termchar.h"
  48792. +#include "termopts.h"
  48793. +#include "dispextern.h"
  48794. +#include "amiga.h"
  48795. +
  48796. +#ifdef USE_PROTOS
  48797. +#include "protos.h"
  48798. +#endif
  48799. +
  48800. +#define EMACS_TOOL_SIZE 128    /* Room for path to emacs executable */
  48801. +
  48802. +struct Library *IconBase;
  48803. +extern struct ExecBase *SysBase;
  48804. +
  48805. +/*long __stack = 40000;*/        /* Minimum stack size, used by c.o */
  48806. +int amiga_process_stack_size;
  48807. +
  48808. +int amiga_initialized;
  48809. +int amiga_create_icons;        /* If true, we create icons when saving files */
  48810. +enum exit_method amiga_fail_exit = use_xcexit;
  48811. +int selecting;
  48812. +
  48813. +/* Emacs sysdep routines */
  48814. +/* --------------------- */
  48815. +
  48816. +set_exclusive_use(int fd) {}
  48817. +
  48818. +/* Suspend the Emacs process; give terminal to its superior.  */
  48819. +sys_suspend()
  48820. +{
  48821. +  /* This could have been iconify, but:
  48822. +     a) Not good for serial lines.
  48823. +     b) emacs stays active while iconified */
  48824. +}
  48825. +
  48826. +sys_subshell()
  48827. +{
  48828. +    /* CHFIXME: call to newshell? */
  48829. +}
  48830. +
  48831. +static char sysname[32];
  48832. +
  48833. +#if 0    /* collides with version in editfns.c */
  48834. +
  48835. +char *get_system_name()
  48836. +{
  48837. +  gethostname(sysname, sizeof sysname);
  48838. +  return sysname;
  48839. +}
  48840. +
  48841. +#else
  48842. +
  48843. +extern Lisp_Object Vsystem_name;
  48844. +
  48845. +void
  48846. +init_system_name ()
  48847. +{
  48848. +  unsigned char *p;
  48849. +
  48850. +  gethostname(sysname, sizeof sysname);
  48851. +  Vsystem_name = build_string (sysname);
  48852. +  for (p = XSTRING (Vsystem_name)->data; *p; p++)
  48853. +    if (*p == ' ' || *p == '\t')
  48854. +      *p = '-';
  48855. +}
  48856. +
  48857. +#endif
  48858. +
  48859. +/*
  48860. + *    flush any pending output
  48861. + *      (may flush input as well; it does not matter the way we use it)
  48862. + */
  48863. +
  48864. +flush_pending_output (channel)
  48865. +     int channel;
  48866. +{
  48867. +}
  48868. +
  48869. +wait_for_termination (pid)
  48870. +     int pid;
  48871. +{
  48872. +  while (1)
  48873. +    {
  48874. +      sigsetmask (sigmask (SIGCHLD));
  48875. +      if (0 > kill (pid, 0))
  48876. +        {
  48877. +      sigsetmask (SIGEMPTYMASK);
  48878. +      break;
  48879. +    }
  48880. +      sigpause (SIGEMPTYMASK);
  48881. +    }
  48882. +}
  48883. +
  48884. +/* A few general amiga support routines */
  48885. +/* ------------------------------------ */
  48886. +
  48887. +char *expand_path(char *path, char *buf, int len)
  48888. +{
  48889. +  BPTR dirlock;
  48890. +  APTR window;
  48891. +
  48892. +  window = _us->pr_WindowPtr;
  48893. +  _us->pr_WindowPtr = (APTR)-1;
  48894. +  dirlock = Lock(path, ACCESS_READ);
  48895. +  _us->pr_WindowPtr = window;
  48896. +  if (dirlock)            /* Expand lock name */
  48897. +    {
  48898. +      if (!NameFromLock(dirlock, buf, len)) buf = 0;
  48899. +      UnLock(dirlock);
  48900. +      return buf;
  48901. +    }
  48902. +  return 0;
  48903. +}
  48904. +
  48905. +#undef select
  48906. +int emacs_select(int nfds, int *rfds, int *wfds, int *efds, struct timeval *timeout)
  48907. +{
  48908. +  int ret;
  48909. +
  48910. +  selecting = TRUE;
  48911. +  ret = select(nfds, (fd_set *) rfds, (fd_set *) wfds, (fd_set *) efds, timeout);
  48912. +  selecting = FALSE;
  48913. +  return ret;
  48914. +}
  48915. +
  48916. +void no_memory(void)
  48917. +{
  48918. +  _fail("No memory");
  48919. +}
  48920. +
  48921. +char *amiga_path(void)
  48922. +{
  48923. +  char *path, *pp, name[128];
  48924. +  int pathsize;
  48925. +  struct CommandLineInterface *cli;
  48926. +  BPTR lock;
  48927. +  long l, *lp, nlen;
  48928. +
  48929. +  pathsize = 128;
  48930. +  path = (char *)xmalloc(pathsize);
  48931. +
  48932. +  strcpy(path, ".");
  48933. +  pp = path + 1;
  48934. +
  48935. +  if (!(cli = (struct CommandLineInterface *)((long)_us->pr_CLI << 2)))
  48936. +    return path;
  48937. +
  48938. +  l = (long)cli->cli_CommandDir;
  48939. +  while (l) {
  48940. +    *pp++ = ',';
  48941. +    l <<= 2;
  48942. +    lp = (long *)l;
  48943. +    lock = (BPTR)*(lp + 1);
  48944. +    NameFromLock(lock, name, 128);
  48945. +    nlen = strlen(name);
  48946. +    if (pp + nlen + 5 >= path + pathsize)
  48947. +      {
  48948. +    char *newpath;
  48949. +
  48950. +    pathsize = 2 * pathsize + nlen;
  48951. +    newpath = (char *)xrealloc(path, pathsize);
  48952. +    pp = newpath + (pp - path);
  48953. +    path = newpath;
  48954. +      }
  48955. +    memcpy(pp, name, nlen);
  48956. +    pp += nlen;
  48957. +    l = *lp;
  48958. +  }
  48959. +  /* Use of +5 above guarantees that there is enough space for c: */
  48960. +  strcpy(pp, ",c:");
  48961. +
  48962. +  return path;
  48963. +}
  48964. +
  48965. +/* Some general amiga commands */
  48966. +/* --------------------------- */
  48967. +
  48968. +#define emacs_file_icon_width 54
  48969. +#define emacs_file_icon_height 22
  48970. +#define emacs_file_icon_num_planes 2
  48971. +
  48972. +static UWORD chip emacs_file_icon_data[2][22][4] = {
  48973. +    {
  48974. +        0x0000,0x0000,0x0000,0x0400,0x0000,0x0000,0x0000,0x0c00,
  48975. +        0x0000,0x0000,0x0000,0x0c00,0x07ff,0xffff,0xffe0,0x0c00,
  48976. +        0x0400,0x0000,0x0030,0x0c00,0x0400,0x0000,0x0028,0x0c00,
  48977. +        0x04ff,0xffff,0xfe24,0x0c00,0x0400,0x0000,0x0022,0x0c00,
  48978. +        0x04ff,0xffff,0xfe3f,0x0c00,0x0400,0x0000,0x0000,0x8c00,
  48979. +        0x04ff,0xffc0,0x0000,0x8c00,0x0400,0x0000,0x0000,0x8c00,
  48980. +        0x0400,0x0000,0x0000,0x8c00,0x0400,0x0000,0x0000,0x8c00,
  48981. +        0x04ff,0xffff,0xfe00,0x8c00,0x0400,0x0000,0x0000,0x8c00,
  48982. +        0x04ff,0xffff,0xfe00,0x8c00,0x0400,0x0000,0x0000,0x8c00,
  48983. +        0x07ff,0xffff,0xffff,0x8c00,0x0000,0x0000,0x0000,0x0c00,
  48984. +        0x0000,0x0000,0x0000,0x0c00,0x7fff,0xffff,0xffff,0xfc00
  48985. +    },
  48986. +    {
  48987. +        0xffff,0xffff,0xffff,0xf800,0x8000,0x0000,0x0000,0x0000,
  48988. +        0x8000,0x0000,0x0000,0x0000,0x8000,0x0000,0x0000,0x0000,
  48989. +        0x83ff,0xffff,0xffc0,0x0000,0x83ff,0xffff,0xffd0,0x0000,
  48990. +        0x8300,0x0000,0x01d8,0x0000,0x83ff,0xffff,0xffdc,0x0000,
  48991. +        0x8300,0x0000,0x01c0,0x0000,0x83ff,0xffff,0xffff,0x0000,
  48992. +        0x8300,0x003f,0xffff,0x0000,0x83ff,0xffff,0xffff,0x0000,
  48993. +        0x83ff,0xffff,0xffff,0x0000,0x83ff,0xffff,0xffff,0x0000,
  48994. +        0x8300,0x0000,0x01ff,0x0000,0x83ff,0xffff,0xffff,0x0000,
  48995. +        0x8300,0x0000,0x01ff,0x0000,0x83ff,0xffff,0xffff,0x0000,
  48996. +        0x8000,0x0000,0x0000,0x0000,0x8000,0x0000,0x0000,0x0000,
  48997. +        0x8000,0x0000,0x0000,0x0000,0x8000,0x0000,0x0000,0x0000
  48998. +    },
  48999. +};
  49000. +struct Image far emacs_file_icon_image = {
  49001. +  0, 0,
  49002. +  emacs_file_icon_width, emacs_file_icon_height, emacs_file_icon_num_planes,
  49003. +  (UWORD *)emacs_file_icon_data,
  49004. +  3, 0,
  49005. +  0
  49006. +};
  49007. +
  49008. +static char *far emacs_file_tooltypes[] = {
  49009. +  "FILETYPE=TEXT",
  49010. +  0
  49011. +};
  49012. +
  49013. +static char far emacs_tool[EMACS_TOOL_SIZE];
  49014. +
  49015. +static struct DiskObject far emacs_file_icon_object = {
  49016. +  WB_DISKMAGIC, WB_DISKVERSION,
  49017. +  { 0, 0, 0, emacs_file_icon_width, emacs_file_icon_height,
  49018. +    GFLG_GADGIMAGE | GADGBACKFILL, GACT_IMMEDIATE | GACT_RELVERIFY, GTYP_BOOLGADGET,
  49019. +    (APTR)&emacs_file_icon_image },
  49020. +  WBPROJECT, emacs_tool, emacs_file_tooltypes,
  49021. +  NO_ICON_POSITION, NO_ICON_POSITION,
  49022. +  0, 0,
  49023. +  40000                /* Stack size for emacs */
  49024. +};
  49025. +
  49026. +DEFUN ("amiga-put-icon", Famiga_put_icon, Samiga_put_icon, 2, 2, 0,
  49027. +       "Create an icon for FILE.\n\
  49028. +If FORCE is non-nil create it unconditionally, otherwise only if one doesn't exist.\n\
  49029. +Returns t if an icon was created, nil otherwise.")
  49030. +     (file, force)
  49031. +Lisp_Object file, force;
  49032. +{
  49033. +  char *fname;
  49034. +  struct DiskObject *obj;
  49035. +
  49036. +  CHECK_STRING(file, 0);
  49037. +  fname = XSTRING(file)->data;
  49038. +
  49039. +  if (NILP (force) && (obj = GetDiskObject(fname)))
  49040. +    {
  49041. +      /* Icon exists, don't overwrite */
  49042. +      FreeDiskObject(obj);
  49043. +      return Qnil;
  49044. +    }
  49045. +  emacs_file_icon_object.do_StackSize = _stack_size;
  49046. +  if (PutDiskObject(fname, &emacs_file_icon_object)) return Qt;
  49047. +  error("Icon for %s couldn't be created", fname);
  49048. +}
  49049. +
  49050. +/* Amiga initialisation routines */
  49051. +/* ----------------------------- */
  49052. +
  49053. +syms_of_amiga ()
  49054. +{
  49055. +  DEFVAR_BOOL("amiga-initialized", &amiga_initialized, "");
  49056. +  DEFVAR_INT("amiga-malloc-bytes-used", &malloc_bytes_used,
  49057. +         "Number of malloc bytes used when emacs was dumped");
  49058. +  DEFVAR_BOOL("amiga-create-icons", &amiga_create_icons,
  49059. +         "If non-nil, create icons when saving files.");
  49060. +  defsubr(&Samiga_put_icon);
  49061. +  amiga_process_stack_size = 0;
  49062. +  DEFVAR_INT("amiga-process-stack-size", &amiga_process_stack_size,
  49063. +     "Size of stack for called processes. 0 means same size as emacs stack.");
  49064. +  syms_of_amiga_tty();
  49065. +  syms_of_amiga_menu();
  49066. +  syms_of_amiga_clipboard();
  49067. +}
  49068. +
  49069. +static void amiga_early_init(int *_argc, char ***_argv)
  49070. +{
  49071. +  int argc = *_argc;
  49072. +  char **argv = *_argv;
  49073. +
  49074. +  if (argc > 2 && !strcmp(argv[1], "-pure"))
  49075. +    {
  49076. +      puresize = atoi(argv[2]);
  49077. +      argc -= 2; argv += 2;
  49078. +    }
  49079. +  if (argc > 2 && !strcmp(argv[1], "-malloc"))
  49080. +    {
  49081. +      malloc_hunk_size = atoi(argv[2]);
  49082. +      argc -= 2; argv += 2;
  49083. +    }
  49084. +  if (argc > 2 && !strcmp(argv[1], "-prealloc"))
  49085. +    {
  49086. +      pre_alloc = atoi(argv[2]);
  49087. +      argc -= 2; argv += 2;
  49088. +    }
  49089. +  /* Handle the -dev switch, which specifies device & unit to use as terminal */
  49090. +  if (argc > 3 && !strcmp (argv[1], "-dev"))
  49091. +    {
  49092. +      extern char *far serial_device;
  49093. +      extern long far serial_unit;
  49094. +
  49095. +      serial_device = argv[2];
  49096. +      serial_unit = atoi(argv[3]);
  49097. +      fprintf (stderr, "Using %s (unit %d)\n", serial_device ,serial_unit);
  49098. +      inhibit_window_system = 1; /* -dev => -nw */
  49099. +      argc -= 3; argv += 3;
  49100. +    }
  49101. +  /* Patch real argc, argv to hide arguments we used */
  49102. +  argv[0] = (*_argv)[0];
  49103. +  *_argv = argv;
  49104. +  *_argc = argc;
  49105. +
  49106. +  early_init_amiga_dump();
  49107. +  expand_path(argv[0], emacs_tool, EMACS_TOOL_SIZE);
  49108. +}
  49109. +
  49110. +void cleanup_amiga(void)
  49111. +{
  49112. +    cleanup_clipboard();
  49113. +    cleanup_amiga_tty();
  49114. +    if (IconBase) CloseLibrary(IconBase);
  49115. +    _MemCleanup();
  49116. +}
  49117. +
  49118. +void amiga_undump_reinit(void)
  49119. +/* Post-undump initialisation */
  49120. +{
  49121. +  extern struct WBStartup *_WBenchMsg;
  49122. +
  49123. +  emacs_malloc_init();
  49124. +  early_amiga_tty();
  49125. +  early_clipboard();
  49126. +
  49127. +  if (!onexit(cleanup_amiga)) _fail("Internal problem with onexit");
  49128. +
  49129. +  make_environ();
  49130. +  IconBase = OpenLibrary("icon.library", 0);
  49131. +  if (!IconBase) _fail("Need icon.library");
  49132. +  amiga_create_icons = _WBenchMsg != 0;
  49133. +
  49134. +  init_amiga_tty(); init_clipboard();
  49135. +}
  49136. +
  49137. +#undef main
  49138. +int
  49139. +main(int argc, char **argv, char **environ)
  49140. +/* Effect: Call emacs_main after doing some early amiga initialisation for emacs.
  49141. +*/
  49142. +{
  49143. +  /* This initialisation may steal some command line options */
  49144. +  amiga_early_init(&argc, &argv);
  49145. +  emacs_main(argc, argv, environ);
  49146. +}
  49147. +#undef abort
  49148. +void
  49149. +amiga_abort(char *f, int line)
  49150. +{
  49151. +    fprintf(stderr,"aborting: %s:%d\n", f, line);
  49152. +    abort(1);
  49153. +}
  49154. diff -rup --new-file baseline/fsf/emacs/src/amiga_sysdep_protos.h amiga/fsf/emacs/src/amiga_sysdep_protos.h
  49155. --- baseline/fsf/emacs/src/amiga_sysdep_protos.h    Wed Dec 31 17:00:00 1969
  49156. +++ amiga/fsf/emacs/src/amiga_sysdep_protos.h    Sat Sep 28 00:00:00 1996
  49157. @@ -0,0 +1,60 @@
  49158. +/* Prototypes for functions defined in
  49159. +amiga_sysdep.c
  49160. + */
  49161. +
  49162. +extern struct Library * IconBase;
  49163. +
  49164. +extern int amiga_process_stack_size;
  49165. +
  49166. +extern int amiga_initialized;
  49167. +
  49168. +extern int amiga_create_icons;
  49169. +
  49170. +extern enum exit_method amiga_fail_exit;
  49171. +
  49172. +extern int selecting;
  49173. +
  49174. +int set_exclusive_use(int );
  49175. +
  49176. +int sys_suspend(void);
  49177. +
  49178. +char * get_system_name(void);
  49179. +
  49180. +int flush_pending_output(int channel);
  49181. +
  49182. +int wait_for_termination(int );
  49183. +
  49184. +char * expand_path(char * , char * , int );
  49185. +
  49186. +int emacs_select(int , int * , int * , int * , struct timeval * );
  49187. +
  49188. +void no_memory(void);
  49189. +
  49190. +char * amiga_path(void);
  49191. +
  49192. +extern unsigned short __chip emacs_file_icon_data[2][22][4];
  49193. +
  49194. +extern struct Image __far emacs_file_icon_image;
  49195. +
  49196. +extern char * __far emacs_file_tooltypes[2];
  49197. +
  49198. +extern char __far emacs_tool[128];
  49199. +
  49200. +extern struct DiskObject __far emacs_file_icon_object;
  49201. +
  49202. +extern struct Lisp_Subr Samiga_put_icon;
  49203. +
  49204. +int Famiga_put_icon(int , int );
  49205. +
  49206. +int syms_of_amiga(void);
  49207. +
  49208. +void amiga_early_init(int * , char *** );
  49209. +
  49210. +void cleanup_amiga(void);
  49211. +
  49212. +void amiga_undump_reinit(void);
  49213. +
  49214. +int main(int , char ** , char ** );
  49215. +
  49216. +void amiga_abort(char * , int );
  49217. +
  49218. diff -rup --new-file baseline/fsf/emacs/src/amiga_term.c amiga/fsf/emacs/src/amiga_term.c
  49219. --- baseline/fsf/emacs/src/amiga_term.c    Wed Dec 31 17:00:00 1969
  49220. +++ amiga/fsf/emacs/src/amiga_term.c    Sat Sep 28 00:00:00 1996
  49221. @@ -0,0 +1,529 @@
  49222. +/* Amiga terminal control routines.
  49223. +   Copyright (C) 1985, 1986, 1987 Free Software Foundation, Inc.
  49224. +
  49225. +This file is part of GNU Emacs.
  49226. +
  49227. +GNU Emacs is free software; you can redistribute it and/or modify
  49228. +it under the terms of the GNU General Public License as published by
  49229. +the Free Software Foundation; either version 1, or (at your option)
  49230. +any later version.
  49231. +
  49232. +GNU Emacs is distributed in the hope that it will be useful,
  49233. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  49234. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  49235. +GNU General Public License for more details.
  49236. +
  49237. +You should have received a copy of the GNU General Public License
  49238. +along with GNU Emacs; see the file COPYING.  If not, write to
  49239. +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  49240. +
  49241. +#include <stdio.h>
  49242. +#include <ctype.h>
  49243. +#include <sys/time.h>
  49244. +#include "config.h"
  49245. +#include "termhooks.h"
  49246. +#include "termchar.h"
  49247. +#include "termopts.h"
  49248. +#include "lisp.h"
  49249. +#include "frame.h"
  49250. +
  49251. +#ifdef USE_PROTOS
  49252. +#include "protos.h"
  49253. +#endif
  49254. +
  49255. +#ifdef GENPROTO
  49256. +extern void *Aframe_raise_lower; /* CHFIXME */
  49257. +#endif
  49258. +
  49259. +/* internal state */
  49260. +
  49261. +/* nonzero means supposed to write text in standout mode.  */
  49262. +static int Astandout_requested;
  49263. +
  49264. +static int Astandout_mode;    /* Nonzero when in standout mode.  */
  49265. +
  49266. +static char tens[100] = {
  49267. +    '0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
  49268. +    '1', '1', '1', '1', '1', '1', '1', '1', '1', '1',
  49269. +    '2', '2', '2', '2', '2', '2', '2', '2', '2', '2',
  49270. +    '3', '3', '3', '3', '3', '3', '3', '3', '3', '3',
  49271. +    '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',
  49272. +    '5', '5', '5', '5', '5', '5', '5', '5', '5', '5',
  49273. +    '6', '6', '6', '6', '6', '6', '6', '6', '6', '6',
  49274. +    '7', '7', '7', '7', '7', '7', '7', '7', '7', '7',
  49275. +    '8', '8', '8', '8', '8', '8', '8', '8', '8', '8',
  49276. +    '9', '9', '9', '9', '9', '9', '9', '9', '9', '9',
  49277. +};
  49278. +
  49279. +static char ones[100] = {
  49280. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  49281. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  49282. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  49283. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  49284. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  49285. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  49286. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  49287. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  49288. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  49289. +    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  49290. +};
  49291. +
  49292. +#define addnum(str, num) if (num < 100) \
  49293. +                             { *--str = ones[num]; *--str = tens[num]; } \
  49294. +                         else do { *--str = '0' + num % 10; num /= 10; } while (num != 0)
  49295. +
  49296. +static Abackground_highlight ();
  49297. +static Aturn_off_highlight ();
  49298. +
  49299. +
  49300. +/* Cursor motion stuff (from cm.c) */
  49301. +static int curX, curY;
  49302. +
  49303. +/* Move cursor to absolute position, specified origin 0 */
  49304. +
  49305. +static int
  49306. +Acursor_to (int row, int col)
  49307. +{
  49308. +  char buf[32], *pos = buf + 32;
  49309. +
  49310. +  if (curY == row && curX == col)
  49311. +    return;
  49312. +
  49313. +  curX = col; curY = row;
  49314. +  *--pos = 'H';
  49315. +  col = col + 1; row = row + 1;
  49316. +  addnum(pos, col);
  49317. +  *--pos = ';';
  49318. +  addnum(pos, row);
  49319. +  *--pos = (char) 0x9b;
  49320. +#ifdef MULTI_FRAME
  49321. +  CHFIXME check
  49322. +#endif
  49323. +  emacs_output(selected_frame, pos, buf + 32 - pos);
  49324. +  if (pos < buf) abort();
  49325. +}
  49326. +
  49327. +
  49328. +Aring_bell ()
  49329. +{
  49330. +#ifdef MULTI_FRAME
  49331. +  CHFIXME check
  49332. +#endif
  49333. +  emacs_output(selected_frame, "\07", 1);
  49334. +}
  49335. +
  49336. +Aset_terminal_modes ()
  49337. +{
  49338. +}
  49339. +
  49340. +Areset_terminal_modes ()
  49341. +{
  49342. +  Aturn_off_highlight ();
  49343. +}
  49344. +
  49345. +int
  49346. +Aupdate_begin (FRAME_PTR f)
  49347. +{
  49348. +  /* Hide cursor */
  49349. +  emacs_output(f, "\x9b\x30\x20\x70", 4);
  49350. +}
  49351. +
  49352. +int
  49353. +Aupdate_end (FRAME_PTR f)
  49354. +{
  49355. +  Abackground_highlight ();
  49356. +  Astandout_requested = 0;
  49357. +  emacs_output(f, "\x9b\x20\x70", 3); /* Show cursor */
  49358. +}
  49359. +
  49360. +
  49361. +/* Handle highlighting when TN_standout_width (termcap sg) is not specified.
  49362. +   In these terminals, output is affected by the value of standout
  49363. +   mode when the output is written.
  49364. +
  49365. +   These functions are called on all terminals, but do nothing
  49366. +   on terminals whose standout mode does not work that way.  */
  49367. +
  49368. +static Aturn_off_highlight ()
  49369. +{
  49370. +  if (Astandout_mode)
  49371. +    {
  49372. +      extern int background, foreground;      
  49373. +      extern int inverse_fill_pen, inverse_text_pen;
  49374. +      int b = background + 40, f = foreground + 30;
  49375. +      if(inverse_fill_pen < 8 && inverse_text_pen < 8)
  49376. +    {
  49377. +      char buf[32], *pos = buf + 32;
  49378. +      /* UnDo inverse fill */
  49379. +      *--pos = '\0';
  49380. +      *--pos = 'm';
  49381. +      addnum(pos, b);
  49382. +      *--pos = ';';
  49383. +      /* UnDo inverse text */
  49384. +      addnum(pos, f);
  49385. +      *--pos = (char) 0x9b;
  49386. +#ifdef MULTI_FRAME
  49387. +  CHFIXME check
  49388. +#endif
  49389. +      emacs_output(selected_frame, pos, buf + 32 - pos);
  49390. +    }
  49391. +      else
  49392. +    {
  49393. +      emacs_output(selected_frame, "\x9b""27m", 4);
  49394. +    }
  49395. +    }
  49396. +  Astandout_mode = 0;
  49397. +}
  49398. +
  49399. +static Aturn_on_highlight ()
  49400. +{
  49401. +  if (!Astandout_mode)
  49402. +    {
  49403. +      extern int inverse_fill_pen, inverse_text_pen;
  49404. +      int b = inverse_fill_pen + 40, f = inverse_text_pen + 30;
  49405. +      if(inverse_fill_pen < 8 && inverse_text_pen < 8)
  49406. +    {
  49407. +      char buf[32], *pos = buf + 32;
  49408. +      /* Do inverse fill */
  49409. +      *--pos = '\0';
  49410. +      *--pos = 'm';
  49411. +      addnum(pos, b);
  49412. +      *--pos = ';';
  49413. +
  49414. +      /* Do inverse text */
  49415. +      addnum(pos, f);
  49416. +      *--pos = (char) 0x9b;
  49417. +#ifdef MULTI_FRAME
  49418. +  CHFIXME check
  49419. +#endif
  49420. +      emacs_output(selected_frame, pos, buf + 32 - pos);
  49421. +    }
  49422. +      else
  49423. +    {
  49424. +      emacs_output(selected_frame, "\x9b\x37m", 3);
  49425. +    }
  49426. +    }
  49427. +  Astandout_mode = 1;
  49428. +}
  49429. +
  49430. +/* Set standout mode to the state it should be in for
  49431. +   empty space inside windows.  What this is,
  49432. +   depends on the user option inverse-video.  */
  49433. +
  49434. +static Abackground_highlight ()
  49435. +{
  49436. +  if (inverse_video)
  49437. +    Aturn_on_highlight ();
  49438. +  else
  49439. +    Aturn_off_highlight ();
  49440. +}
  49441. +
  49442. +/* Set standout mode to the mode specified for the text to be output.  */
  49443. +
  49444. +static
  49445. +Ahighlight_if_desired ()
  49446. +{
  49447. +  if (!inverse_video == !Astandout_requested)
  49448. +    Aturn_off_highlight ();
  49449. +  else
  49450. +    Aturn_on_highlight ();
  49451. +}
  49452. +
  49453. +/* External interface to control of standout mode.
  49454. +   Call this when about to modify line at position VPOS
  49455. +   and not change whether it is highlighted.  */
  49456. +
  49457. +Areassert_line_highlight (highlight, vpos)
  49458. +     int highlight;
  49459. +     int vpos;
  49460. +{
  49461. +  Astandout_requested = highlight;
  49462. +}
  49463. +
  49464. +/* Call this when about to modify line at position VPOS
  49465. +   and change whether it is highlighted.  */
  49466. +
  49467. +Achange_line_highlight (new_highlight, vpos, first_unused_hpos)
  49468. +     int new_highlight, vpos, first_unused_hpos;
  49469. +{
  49470. +  Astandout_requested = new_highlight;
  49471. +
  49472. +  cursor_to (vpos, 0);
  49473. +
  49474. +  Abackground_highlight ();
  49475. +  clear_end_of_line (first_unused_hpos);
  49476. +  reassert_line_highlight (new_highlight, curY);
  49477. +}
  49478. +
  49479. +/* Erase operations */
  49480. +
  49481. +/* clear from cursor to end of screen */
  49482. +Aclear_to_end ()
  49483. +{
  49484. +  Abackground_highlight ();
  49485. +#ifdef MULTI_FRAME
  49486. +  CHFIXME check
  49487. +#endif
  49488. +  emacs_output(selected_frame, "\x9bJ", 2);
  49489. +}
  49490. +
  49491. +/* Clear entire frame */
  49492. +
  49493. +static int
  49494. +Aclear_frame (FRAME_PTR f)
  49495. +{
  49496. +  Abackground_highlight ();
  49497. +  emacs_output(f, "\f", 1);
  49498. +  curX = curY = 0;
  49499. +}
  49500. +
  49501. +/* Clear to end of line, but do not clear any standout marker.
  49502. +   Assumes that the cursor is positioned at a character of real text,
  49503. +   which implies it cannot be before a standout marker
  49504. +   unless the marker has zero width.
  49505. +
  49506. +   Note that the cursor may be moved.  */
  49507. +
  49508. +Aclear_end_of_line (first_unused_hpos)
  49509. +     int first_unused_hpos;
  49510. +{
  49511. +  if (curX >= first_unused_hpos)
  49512. +    return;
  49513. +
  49514. +  Abackground_highlight ();
  49515. +#ifdef MULTI_FRAME
  49516. +  CHFIXME check
  49517. +#endif
  49518. +  emacs_output(selected_frame, "\x9bK", 2);
  49519. +}
  49520. +
  49521. +static int
  49522. +Aoutput_glyphs (string, len)
  49523. +     register GLYPH *string;
  49524. +     int len;
  49525. +{
  49526. +  Ahighlight_if_desired ();
  49527. +
  49528. +  curX += len;
  49529. +  emacs_output_glyphs(selected_frame, string, len);
  49530. +}
  49531. +
  49532. +/* If start is zero, insert blanks instead of a string at start */
  49533. +
  49534. +static int
  49535. +Ainsert_glyphs (start, len)
  49536. +     register GLYPH *start;
  49537. +     int len;
  49538. +{
  49539. +  char buf[32], *pos = buf + 32;
  49540. +
  49541. +  Ahighlight_if_desired ();
  49542. +
  49543. +  *--pos = '@';
  49544. +  addnum(pos, len);
  49545. +  *--pos = (char) 0x9b;
  49546. +#ifdef MULTI_FRAME
  49547. +  CHFIXME check
  49548. +#endif
  49549. +  emacs_output(selected_frame, pos, buf + 32 - pos);
  49550. +  if (pos < buf) abort();
  49551. +  if (start) emacs_output_glyphs(selected_frame, start, len);
  49552. +}
  49553. +
  49554. +static int
  49555. +Adelete_glyphs (n)
  49556. +     register int n;
  49557. +{
  49558. +  char buf[32], *pos = buf + 32;
  49559. +
  49560. +  *--pos = 'P';
  49561. +  addnum(pos, n);
  49562. +  *--pos = (char) 0x9b;
  49563. +  emacs_output(selected_frame, pos, buf + 32 - pos);
  49564. +  if (pos < buf) abort();
  49565. +}
  49566. +
  49567. +/* Insert N lines at vpos VPOS.  If N is negative, delete -N lines.  */
  49568. +
  49569. +Ains_del_lines (vpos, n)
  49570. +     int vpos, n;
  49571. +{
  49572. +  register int i = n > 0 ? n : -n;
  49573. +  char buf[32], *pos = buf + 32;
  49574. +
  49575. +  if (n > 0)
  49576. +    {
  49577. +      i = n;
  49578. +      *--pos = 'L';
  49579. +    }
  49580. +  else
  49581. +    {
  49582. +      i = -n;
  49583. +      *--pos = 'M';
  49584. +    }
  49585. +  if (vpos + i >= FRAME_HEIGHT (selected_frame)) return;
  49586. +
  49587. +  cursor_to (vpos, 0);
  49588. +  Abackground_highlight ();
  49589. +  addnum(pos, i);
  49590. +  *--pos = (char) 0x9b;
  49591. +#ifdef MULTI_FRAME
  49592. +  CHFIXME check
  49593. +#endif
  49594. +
  49595. +  emacs_output(selected_frame, pos, buf + 32 - pos);
  49596. +  if (pos < buf) abort();
  49597. +}
  49598. +
  49599. +#if 0 /* CHFIXME */
  49600. +Acalculate_costs (extra, costvec, ncostvec)
  49601. +     int extra;
  49602. +     int *costvec, *ncostvec;
  49603. +{
  49604. +  line_ins_del(selected_frame, 2, 40, extra, 0, costvec, ncostvec);
  49605. +}
  49606. +#endif
  49607. +
  49608. +Aset_terminal_window (int size)
  49609. +{
  49610. +}
  49611. +
  49612. +/* Return the current position of the mouse.
  49613. +
  49614. +   Set *f to the frame the mouse is in, or zero if the mouse is in no
  49615. +   Emacs frame.  If it is set to zero, all the other arguments are
  49616. +   garbage.
  49617. +
  49618. +   If the motion started in a scroll bar, set *bar_window to the
  49619. +   scroll bar's window, *part to the part the mouse is currently over,
  49620. +   *x to the position of the mouse along the scroll bar, and *y to the
  49621. +   overall length of the scroll bar.
  49622. +
  49623. +   Otherwise, set *bar_window to Qnil, and *x and *y to the column and
  49624. +   row of the character cell the mouse is over.
  49625. +
  49626. +   Set *time to the time the mouse was at the returned position.
  49627. +
  49628. +   This should clear mouse_moved until the next motion
  49629. +   event arrives.  */
  49630. +extern int mouse_moved;
  49631. +
  49632. +static void
  49633. +Amouse_position(FRAME_PTR *f,
  49634. +        Lisp_Object *bar_window,
  49635. +        enum scroll_bar_part *part,
  49636. +        Lisp_Object *x, Lisp_Object *y,
  49637. +        unsigned long *time)
  49638. +{
  49639. +    struct timeval tv;
  49640. +    int an_x, an_y;
  49641. +
  49642. +#ifdef MULTI_FRAME
  49643. +    CHFIXME
  49644. +#endif
  49645. +    get_mouse_char_pos(selected_frame, &an_x, &an_y);
  49646. +    if(x >= 0 && y >= 0) /* CHFIXME: always report ? */
  49647. +    {
  49648. +    *f = selected_frame; /* CHFIXME: ok for MULTI_FRAME ? */
  49649. +    *bar_window = Qnil;
  49650. +    *x = make_number (an_x);
  49651. +    *y = make_number (an_y);
  49652. +    gettimeofday (&tv, NULL);
  49653. +    *time = tv.tv_usec;
  49654. +    }
  49655. +    else
  49656. +    {
  49657. +    *f = NULL;
  49658. +    }
  49659. +    mouse_moved = 0;
  49660. +}
  49661. +/* Change from withdrawn state to mapped state,
  49662. +   or deiconify. */
  49663. +
  49664. +void
  49665. +x_make_frame_visible (FRAME_PTR f)
  49666. +{
  49667. +    /* CHFIXME: add deiconify call! */
  49668. +}
  49669. +
  49670. +amiga_term_init ()
  49671. +{
  49672. +  must_write_spaces = FALSE;
  49673. +  min_padding_speed = 0;
  49674. +  memory_below_frame = FALSE;     /* we don't remember what scrolls 
  49675. +                   off the bottom */
  49676. +  meta_key = 2; /* 1 if should obey 0200 bit in input chars as "Meta", 2 if should
  49677. +           keep 0200 bit in input chars.  0 to ignore the 0200 bit.  */
  49678. +
  49679. +  scroll_region_ok = TRUE; /* CHFIXME: test */         /* we'll scroll partial frames */
  49680. +  scroll_region_ok = FALSE;         /* we don\'t scroll partial frames */
  49681. +  line_ins_del_ok = TRUE;        /* CHFIXME: test */
  49682. +  line_ins_del_ok = FALSE;    /* much cleaner display when FALSE  -ch3/19/93. */
  49683. +  char_ins_del_ok = FALSE;
  49684. +  fast_clear_end_of_line = TRUE;
  49685. +  no_redraw_on_reenter = FALSE;
  49686. +
  49687. +  clear_frame_hook = Aclear_frame;
  49688. +  clear_end_of_line_hook = Aclear_end_of_line;
  49689. +  clear_to_end_hook = Aclear_to_end;
  49690. +  ins_del_lines_hook = Ains_del_lines;
  49691. +  change_line_highlight_hook = Achange_line_highlight;
  49692. +
  49693. +  insert_glyphs_hook = Ainsert_glyphs;
  49694. +  write_glyphs_hook = Aoutput_glyphs;
  49695. +  delete_glyphs_hook = Adelete_glyphs;
  49696. +
  49697. +  ring_bell_hook = Aring_bell;
  49698. +  reset_terminal_modes_hook = Areset_terminal_modes;
  49699. +  set_terminal_modes_hook = Aset_terminal_modes;
  49700. +  update_begin_hook = Aupdate_begin;
  49701. +  update_end_hook = Aupdate_end;
  49702. +  set_terminal_window_hook = Aset_terminal_window;
  49703. +  /* read_socket_hook ? */ /* CHFIXME */
  49704. +  /* frame_up_to_date_hook */
  49705. +  cursor_to_hook = Acursor_to;
  49706. +  reassert_line_highlight_hook = Areassert_line_highlight;
  49707. +  raw_cursor_to_hook = Acursor_to; /* CHFIXME, correct ? */
  49708. +  
  49709. +  mouse_position_hook = Amouse_position;
  49710. +  /*
  49711. +  frame_rehighlight_hook = XTframe_rehighlight;
  49712. +  */
  49713. +#ifdef GENPROTO
  49714. +  frame_raise_lower_hook = Aframe_raise_lower;
  49715. +#endif
  49716. +  /*
  49717. +  set_vertical_scroll_bar_hook = XTset_vertical_scroll_bar;
  49718. +  */
  49719. +#ifdef USE_SCROLL_BARS
  49720. +  condemn_scroll_bars_hook = Acondemn_scroll_bars;
  49721. +  redeem_scroll_bar_hook = Aredeem_scroll_bar;
  49722. +  judge_scroll_bars_hook = Ajudge_scroll_bars;
  49723. +#endif
  49724. +#if 0
  49725. +/*  dont_calculate_costs = 1; try to use it CHFIXME */
  49726. +#else
  49727. +  dont_calculate_costs = 0;
  49728. +#endif
  49729. +
  49730. +#if 0 /* CHFIXME */
  49731. +  calculate_costs_hook = Acalculate_costs;
  49732. +#endif
  49733. +  
  49734. +  /* Get screen size from system, or else from somewhere ...  */
  49735. +
  49736. +#ifdef MULTI_FRAME
  49737. +  you lose
  49738. +#endif
  49739. +  get_frame_size (&FRAME_WIDTH(selected_frame), &FRAME_HEIGHT(selected_frame));
  49740. +  /* Random defaults to avoid any problems */
  49741. +  if (FRAME_WIDTH(selected_frame) <= 0) FRAME_WIDTH(selected_frame) = 80;
  49742. +  if (FRAME_HEIGHT(selected_frame) <= 0) FRAME_HEIGHT(selected_frame) = 23;
  49743. +
  49744. +  init_baud_rate ();
  49745. +  FRAME_CAN_HAVE_SCROLL_BARS (selected_frame) = 0; /* CHFIXME */
  49746. +  FRAME_HAS_VERTICAL_SCROLL_BARS (selected_frame) = 0;
  49747. +
  49748. +
  49749. +  /* CHFIXME: move init glyphs stuff here ? */
  49750. +}
  49751. diff -rup --new-file baseline/fsf/emacs/src/amiga_term_protos.h amiga/fsf/emacs/src/amiga_term_protos.h
  49752. --- baseline/fsf/emacs/src/amiga_term_protos.h    Wed Dec 31 17:00:00 1969
  49753. +++ amiga/fsf/emacs/src/amiga_term_protos.h    Sat Sep 28 00:00:00 1996
  49754. @@ -0,0 +1,68 @@
  49755. +/* Prototypes for functions defined in
  49756. +amiga_term.c
  49757. + */
  49758. +
  49759. +extern int Astandout_requested;
  49760. +
  49761. +extern int Astandout_mode;
  49762. +
  49763. +extern char tens[100];
  49764. +
  49765. +extern char ones[100];
  49766. +
  49767. +extern int curX;
  49768. +
  49769. +extern int curY;
  49770. +
  49771. +int Acursor_to(int , int );
  49772. +
  49773. +int Aring_bell(void);
  49774. +
  49775. +int Aset_terminal_modes(void);
  49776. +
  49777. +int Areset_terminal_modes(void);
  49778. +
  49779. +int Aupdate_begin(int );
  49780. +
  49781. +int Aupdate_end(int );
  49782. +
  49783. +int Aturn_off_highlight(void);
  49784. +
  49785. +int Aturn_on_highlight(void);
  49786. +
  49787. +int Abackground_highlight(void);
  49788. +
  49789. +int Ahighlight_if_desired(void);
  49790. +
  49791. +int Areassert_line_highlight(int highlight,
  49792. +                             int vpos);
  49793. +
  49794. +int Achange_line_highlight(int new_highlight,
  49795. +                           int vpos,
  49796. +                           int first_unused_hpos);
  49797. +
  49798. +int Aclear_to_end(void);
  49799. +
  49800. +int Aclear_frame(int );
  49801. +
  49802. +int Aclear_end_of_line(int first_unused_hpos);
  49803. +
  49804. +int Aoutput_glyphs(register unsigned int * string,
  49805. +                   int len);
  49806. +
  49807. +int Ainsert_glyphs(register unsigned int * start,
  49808. +                   int len);
  49809. +
  49810. +int Adelete_glyphs(register int n);
  49811. +
  49812. +int Ains_del_lines(int vpos,
  49813. +                   int n);
  49814. +
  49815. +int Aset_terminal_window(int );
  49816. +
  49817. +void Amouse_position(int * , int * , enum scroll_bar_part * , int * , int * , unsigned long * );
  49818. +
  49819. +void x_make_frame_visible(int );
  49820. +
  49821. +int amiga_term_init(void);
  49822. +
  49823. diff -rup --new-file baseline/fsf/emacs/src/amiga_tty.c amiga/fsf/emacs/src/amiga_tty.c
  49824. --- baseline/fsf/emacs/src/amiga_tty.c    Wed Dec 31 17:00:00 1969
  49825. +++ amiga/fsf/emacs/src/amiga_tty.c    Sat Sep 28 00:00:00 1996
  49826. @@ -0,0 +1,425 @@
  49827. +#include "config.h"
  49828. +#include "lisp.h"
  49829. +#include "termchar.h"
  49830. +#include "frame.h"
  49831. +
  49832. +#include <stdio.h>
  49833. +#include <errno.h>
  49834. +#include <sys/time.h>
  49835. +#include <internal/files.h>
  49836. +#include <internal/vars.h>
  49837. +
  49838. +#undef LONGBITS
  49839. +
  49840. +#include <exec/types.h>
  49841. +#include <dos/dos.h>
  49842. +#include <proto/exec.h>
  49843. +
  49844. +#include "amiga.h"
  49845. +#include "termhooks.h"
  49846. +
  49847. +#ifdef USE_PROTOS
  49848. +#include "protos.h"
  49849. +#endif
  49850. +
  49851. +static int term_initialised;
  49852. +ULONG inputsig;
  49853. +
  49854. +/* A few tty system dependent routines unused on the Amiga */
  49855. +
  49856. +setpgrp_of_tty(int pid) {}
  49857. +init_sigio() {}
  49858. +reset_sigio() {}
  49859. +request_sigio() {}
  49860. +unrequest_sigio() {}
  49861. +
  49862. +/* Return nonzero if safe to use tabs in output.
  49863. +   At the time this is called, init_sys_modes has not been done yet.  */
  49864. +
  49865. +tabs_safe_p()
  49866. +{
  49867. +  if (noninteractive)
  49868. +    return 1;
  49869. +
  49870. +  return 0;            /* Not safe on Amiga !? */
  49871. +}
  49872. +
  49873. +/* Get terminal size from system.
  49874. +   Store number of lines into *heightp and width into *widthp.
  49875. +   If zero or a negative number is stored, the value is not valid.  */
  49876. +
  49877. +get_frame_size (widthp, heightp)
  49878. +     int *widthp, *heightp;
  49879. +{
  49880. +#ifdef MULTI_FRAME
  49881. +    CHFIXME selected_frame below ok?
  49882. +#endif
  49883. +    if (term_initialised && !inhibit_window_system)
  49884. +    amiga_get_window_size(selected_frame, widthp, heightp);
  49885. +    else /* We don't known what size the terminal is */
  49886. +    {
  49887. +    *widthp = 0;
  49888. +    *heightp = 0;
  49889. +    }
  49890. +}
  49891. +
  49892. +init_baud_rate ()
  49893. +{
  49894. +  if (noninteractive || !term_initialised) baud_rate = 1200;
  49895. +  else if (!inhibit_window_system) baud_rate = 38400;
  49896. +  else baud_rate = serial_baud_rate();
  49897. +}
  49898. +
  49899. +void check_intuition ()
  49900. +{
  49901. +    if (noninteractive || inhibit_window_system)
  49902. +        error ("You aren't using a window.");
  49903. +}
  49904. +
  49905. +#define TTYBUFSIZE 256        /* Same size as kbd_buffer */
  49906. +static char ttybuf[TTYBUFSIZE];
  49907. +
  49908. +#define NEW_KBD /* use event queue for sending key strokes to emacs */
  49909. +
  49910. +static int tty_count;
  49911. +#ifndef NEW_KBD
  49912. +#define TTYPUT(c) { if (tty_count < TTYBUFSIZE) ttybuf[tty_count++] = c; }
  49913. +#else
  49914. +#define TTYPUT(c) \
  49915. +{\
  49916. + event.kind = ascii_keystroke; \
  49917. + event.code = c; \
  49918. + event.modifiers = 0; \
  49919. + event.frame_or_window = selected_frame; \
  49920. + gettimeofday (&tv, NULL); \
  49921. + event.timestamp = tv.tv_usec; \
  49922. + kbd_buffer_store_event (&event); \
  49923. + set_mouse_event_pending(); /* wakeup emacs */ \
  49924. +}
  49925. +#define FTTYPUT(c, qual) \
  49926. +{\
  49927. + event.kind = non_ascii_keystroke; \
  49928. + event.code = c; \
  49929. + event.modifiers = qual; \
  49930. + event.frame_or_window = selected_frame; \
  49931. + gettimeofday (&tv, NULL); \
  49932. + event.timestamp = tv.tv_usec; \
  49933. + kbd_buffer_store_event (&event); \
  49934. + set_mouse_event_pending(); /* wakeup emacs */ \
  49935. +}
  49936. +#endif
  49937. +
  49938. +static int interrupt_char;
  49939. +
  49940. +/*
  49941. + * CHFIXME: will the event scheme break serial support? Add mode dependant code?
  49942. + */
  49943. +
  49944. +void enque(unsigned int c, int metaOrQual, int fkey)
  49945. +    
  49946. +/* place input keys in keyboard buffer
  49947. +
  49948. +was:
  49949. +   If high bit is set, precede character with ^Q (hack).
  49950. +   If meta is true, set high bit.
  49951. +   If both the high bit & meta are true, we have a problem. Ignore it.
  49952. +   If c == AMIGASEQ (256) enqueue the amiga sequence introducer (C-x C-^)
  49953. +now:
  49954. +   If meta is true, precede key with ESC if key isn\'t ESC.
  49955. +   Pass high bit as-is.
  49956. +   If c == AMIGASEQ (256) enqueue the amiga sequence introducer (C-x C-^)
  49957. +   if fkey is true meta contains full (emacs) qualifier mask and
  49958. +   c is a non_ascii_event
  49959. +*/
  49960. +{
  49961. +#ifdef NEW_KBD
  49962. +  struct input_event event;
  49963. +  struct timeval tv;
  49964. +#endif
  49965. +
  49966. +  if(fkey)
  49967. +  {
  49968. +      FTTYPUT(c, metaOrQual);
  49969. +  }
  49970. +  /* Hack CSI to be AMIGASEQ (to allow defining function keys, etc) */
  49971. +  else if (c == 0233 || c == AMIGASEQ)
  49972. +    {
  49973. +      TTYPUT('x' & 037);
  49974. +      TTYPUT('^' & 037);
  49975. +    }
  49976. +  else
  49977. +#if 0 /* test ordinary 8 bit */
  49978. +      if (c >= 0200)    /* Special character, precede with ^Q */
  49979. +    {
  49980. +      TTYPUT('q' & 037);
  49981. +      TTYPUT(c);
  49982. +    }
  49983. +  else
  49984. +#endif
  49985. +    {
  49986. +#if 0
  49987. +      if (meta) c |= 0200;
  49988. +#else
  49989. +      if(metaOrQual && c != 0x1B) TTYPUT(0x1B); /* ESC */
  49990. +#endif
  49991. +      if (c == interrupt_char) Signal((struct Task *)_us, SIGBREAKF_CTRL_C);
  49992. +      else TTYPUT(c);
  49993. +    }
  49994. +}
  49995. +
  49996. +int get_ttycount(void)
  49997. +{
  49998. +  return tty_count;
  49999. +}
  50000. +
  50001. +init_sys_modes ()
  50002. +{
  50003. +  extern int quit_char;
  50004. +
  50005. +  if (noninteractive)
  50006. +    return;
  50007. +
  50008. +  if (inhibit_window_system) clear_frame();
  50009. +
  50010. +  interrupt_char = quit_char;
  50011. +  if (!inhibit_window_system) setup_intchar(interrupt_char);
  50012. +}
  50013. +
  50014. +reset_sys_modes ()
  50015. +{
  50016. +  if (noninteractive)
  50017. +    {
  50018. +      fflush (stdout);
  50019. +      return;
  50020. +    }
  50021. +
  50022. +  cursor_to (FRAME_HEIGHT (selected_frame) - 1, 0);
  50023. +  clear_end_of_line (FRAME_WIDTH (selected_frame));
  50024. +  /* clear_end_of_line may move the cursor */
  50025. +  cursor_to (FRAME_HEIGHT (selected_frame) - 1, 0);
  50026. +}
  50027. +
  50028. +void amiga_consume_input(void)
  50029. +{
  50030. +  extern int this_command_key_count;
  50031. +  int force = this_command_key_count == 0;
  50032. +  /* If force is TRUE & some non-keyboard (eg mouse events) input is pending,
  50033. +     insert the appropriate magic sequence in the input stream */
  50034. +
  50035. +  if (term_initialised)
  50036. +    {
  50037. +#ifdef MULTI_FRAME
  50038. +    CHFIXME check
  50039. +#endif
  50040. +      if (!inhibit_window_system) check_window(selected_frame, force);
  50041. +      else check_serial(force);
  50042. +      check_arexx(force, TRUE);
  50043. +    }
  50044. +}
  50045. +
  50046. +discard_tty_input ()
  50047. +{
  50048. +  if (noninteractive)
  50049. +    return;
  50050. +
  50051. +  amiga_consume_input();
  50052. +  tty_count = 0;
  50053. +  chkabort();
  50054. +}
  50055. +
  50056. +/* Code for the fd describing the emacs input (terminal or window) */
  50057. +
  50058. +static ULONG __regargs ttyin_select_start(void *userinfo, int rd, int wr)
  50059. +{
  50060. +  if (!inhibit_window_system) force_window(selected_frame);
  50061. +
  50062. +  return (tty_count || mouse_event_pending()) ? -1 : inputsig;
  50063. +}
  50064. +
  50065. +static void __regargs ttyin_select_poll(void *userinfo, int *rd, int *wr)
  50066. +{
  50067. +  amiga_consume_input();
  50068. +  if (!tty_count && !mouse_event_pending()) *rd = 0;
  50069. +  /* CHFIXME: evt. change interface, select will signal read ok on rd but
  50070. +     that\'s no totally true (no chars) */
  50071. +}
  50072. +
  50073. +static int __regargs ttyin_read(void *userinfo, void *buffer, unsigned int length)
  50074. +{
  50075. +  amiga_consume_input();
  50076. +  if (length > tty_count) length = tty_count;
  50077. +  memcpy(buffer, ttybuf, length);
  50078. +  tty_count -= length;
  50079. +  if (tty_count) memmove(ttybuf, ttybuf + length, tty_count - length);
  50080. +  reset_mouse_event_pending();
  50081. +  
  50082. +  return (int)length;
  50083. +}
  50084. +
  50085. +static int __regargs ttyin_write(void *userinfo, void *buffer, unsigned int length)
  50086. +{
  50087. +  errno = EACCES;
  50088. +  return -1;
  50089. +}
  50090. +
  50091. +static int __regargs ttyin_lseek(void *userinfo, long rpos, int mode)
  50092. +{
  50093. +  errno = ESPIPE;
  50094. +  return -1;
  50095. +}
  50096. +
  50097. +static int __regargs ttyin_close(void *userinfo, int internal)
  50098. +{
  50099. +  return 0;
  50100. +}
  50101. +
  50102. +static int __regargs ttyin_ioctl(void *userinfo, int request, void *data)
  50103. +{
  50104. +  errno = EINVAL;
  50105. +  return -1;
  50106. +}
  50107. +
  50108. +#define CBUFSIZE 1024
  50109. +#undef fwrite
  50110. +#undef fflush
  50111. +
  50112. +char cbuffer[CBUFSIZE + 16], *cbuffer_pos;
  50113. +
  50114. +int emacs_fflush(FILE *f)
  50115. +{
  50116. +    if (noninteractive || f != stdout) return fflush(f);
  50117. +    else
  50118. +    {
  50119. +    int len;
  50120. +
  50121. +    len = cbuffer_pos - cbuffer;
  50122. +#ifdef MULTI_FRAME
  50123. +CHFIXME check
  50124. +#endif
  50125. +    if (term_initialised)
  50126. +        if (!inhibit_window_system) screen_puts(selected_frame, cbuffer, len);
  50127. +        else serial_puts(cbuffer, len);
  50128. +    if (termscript) fwrite (cbuffer, 1, len, termscript);
  50129. +    cbuffer_pos = cbuffer;
  50130. +
  50131. +    return 0;
  50132. +    }
  50133. +}
  50134. +
  50135. +void emacs_putchar(int c)
  50136. +{
  50137. +    if (cbuffer_pos >= cbuffer + CBUFSIZE) emacs_fflush(stdout);
  50138. +    *cbuffer_pos++ = c;
  50139. +}
  50140. +
  50141. +void emacs_output(FRAME_PTR f, char *str, int size)
  50142. +{
  50143. +    if (cbuffer_pos + size > cbuffer + CBUFSIZE) emacs_fflush(stdout);
  50144. +    if (size > CBUFSIZE)
  50145. +    {
  50146. +    if (term_initialised)
  50147. +        if (!inhibit_window_system) screen_puts(f, str, size);
  50148. +        else serial_puts(str, size);
  50149. +    }
  50150. +    else
  50151. +    {
  50152. +    memcpy(cbuffer_pos, str, size);
  50153. +    cbuffer_pos += size;
  50154. +    }
  50155. +}
  50156. +
  50157. +void emacs_output_glyphs(FRAME_PTR f, GLYPH *str, int size) /* CHFIXME: we ignore faces for now */
  50158. +{
  50159. +    if (cbuffer_pos + size > cbuffer + CBUFSIZE) emacs_fflush(stdout);
  50160. +    if (size > CBUFSIZE)
  50161. +    {
  50162. +    register int i = size, lsize;
  50163. +    register GLYPH *g = str;
  50164. +    
  50165. +    /* CHFIXME */
  50166. +    while(i)
  50167. +    {
  50168. +        if(i < CBUFSIZE)
  50169. +        lsize = i;
  50170. +        else
  50171. +        lsize = CBUFSIZE;
  50172. +        emacs_output_glyphs(f, g, lsize);
  50173. +        i -= lsize;
  50174. +        g += lsize;
  50175. +    }
  50176. +    }
  50177. +    else
  50178. +    {
  50179. +    register int i = size;
  50180. +    register char *s = cbuffer_pos;
  50181. +    register GLYPH *g = str;
  50182. +
  50183. +    while(i--)
  50184. +    {
  50185. +        *s++ = (*g++) & 0xff;
  50186. +    }
  50187. +    cbuffer_pos += size;
  50188. +    }
  50189. +}
  50190. +
  50191. +void emacs_fwrite(char *str, unsigned int nblocks, unsigned int len, FILE *f)
  50192. +{
  50193. +    if (noninteractive || f != stdout) fwrite (str, nblocks, len, f);
  50194. +    else
  50195. +    {
  50196. +    unsigned int size;
  50197. +
  50198. +    if (nblocks == 1) size = len; /* Emacs always uses 1 "block" */
  50199. +    else size = nblocks * len;
  50200. +#ifdef MULTI_FRAME
  50201. +    CHFIXME check
  50202. +#endif
  50203. +    emacs_output(selected_frame, str, size);
  50204. +    }
  50205. +}
  50206. +
  50207. +void syms_of_amiga_tty(void)
  50208. +{
  50209. +  syms_of_amiga_screen();
  50210. +  syms_of_amiga_rexx();
  50211. +}
  50212. +
  50213. +void init_amiga_tty()
  50214. +{
  50215. +  inputsig = 0;
  50216. +  term_initialised = FALSE;
  50217. +  init_amiga_rexx();
  50218. +}
  50219. +
  50220. +void cleanup_amiga_tty()
  50221. +{
  50222. +  cleanup_amiga_rexx();
  50223. +  cleanup_amiga_serial();
  50224. +  cleanup_amiga_screen();
  50225. +}
  50226. +
  50227. +void early_amiga_tty()
  50228. +{
  50229. +  cbuffer_pos = cbuffer;
  50230. +  tty_count = 0;
  50231. +}
  50232. +
  50233. +void amiga_term_open(void)
  50234. +{
  50235. +  inhibit_window_system ? init_amiga_serial() : init_amiga_screen();
  50236. +  close(0);
  50237. +  if (_alloc_fd((void *)1, FI_READ, ttyin_select_start, ttyin_select_poll, ttyin_read,
  50238. +        ttyin_write, ttyin_lseek, ttyin_close, ttyin_ioctl) == 0)
  50239. +    term_initialised = TRUE;
  50240. +  else _fail("Failed to initialise I/O, no memory ?");
  50241. +}
  50242. +
  50243. +/* Set the logical window size associated with descriptor FD
  50244. +   to HEIGHT and WIDTH.  This is used mainly with ptys.  */
  50245. +
  50246. +int
  50247. +set_window_size (fd, height, width)
  50248. +     int fd, height, width;
  50249. +{
  50250. +  return -1; /* CHFIXME: where used?, ok? */
  50251. +}
  50252. diff -rup --new-file baseline/fsf/emacs/src/amiga_tty_protos.h amiga/fsf/emacs/src/amiga_tty_protos.h
  50253. --- baseline/fsf/emacs/src/amiga_tty_protos.h    Wed Dec 31 17:00:00 1969
  50254. +++ amiga/fsf/emacs/src/amiga_tty_protos.h    Sat Sep 28 00:00:00 1996
  50255. @@ -0,0 +1,87 @@
  50256. +/* Prototypes for functions defined in
  50257. +amiga_tty.c
  50258. + */
  50259. +
  50260. +extern int term_initialised;
  50261. +
  50262. +extern unsigned long inputsig;
  50263. +
  50264. +int setpgrp_of_tty(int );
  50265. +
  50266. +int init_sigio(void);
  50267. +
  50268. +int reset_sigio(void);
  50269. +
  50270. +int request_sigio(void);
  50271. +
  50272. +int unrequest_sigio(void);
  50273. +
  50274. +int tabs_safe_p(void);
  50275. +
  50276. +int get_frame_size(int * widthp,
  50277. +                   int * heightp);
  50278. +
  50279. +int init_baud_rate(void);
  50280. +
  50281. +void check_intuition(void);
  50282. +
  50283. +extern char ttybuf[256];
  50284. +
  50285. +extern int tty_count;
  50286. +
  50287. +extern int interrupt_char;
  50288. +
  50289. +void enque(unsigned int , int , int );
  50290. +
  50291. +int get_ttycount(void);
  50292. +
  50293. +int init_sys_modes(void);
  50294. +
  50295. +int reset_sys_modes(void);
  50296. +
  50297. +void amiga_consume_input(void);
  50298. +
  50299. +int discard_tty_input(void);
  50300. +
  50301. +unsigned long __regargs ttyin_select_start(void * , int , int );
  50302. +
  50303. +void __regargs ttyin_select_poll(void * , int * , int * );
  50304. +
  50305. +int __regargs ttyin_read(void * , void * , unsigned int );
  50306. +
  50307. +int __regargs ttyin_write(void * , void * , unsigned int );
  50308. +
  50309. +int __regargs ttyin_lseek(void * , long , int );
  50310. +
  50311. +int __regargs ttyin_close(void * , int );
  50312. +
  50313. +int __regargs ttyin_ioctl(void * , int , void * );
  50314. +
  50315. +extern char cbuffer[1040];
  50316. +
  50317. +extern char * cbuffer_pos;
  50318. +
  50319. +int emacs_fflush(struct __iobuf * );
  50320. +
  50321. +void emacs_putchar(int );
  50322. +
  50323. +void emacs_output(int , char * , int );
  50324. +
  50325. +void emacs_output_glyphs(int , unsigned int * , int );
  50326. +
  50327. +void emacs_fwrite(char * , unsigned int , unsigned int , struct __iobuf * );
  50328. +
  50329. +void syms_of_amiga_tty(void);
  50330. +
  50331. +void init_amiga_tty(void);
  50332. +
  50333. +void cleanup_amiga_tty(void);
  50334. +
  50335. +void early_amiga_tty(void);
  50336. +
  50337. +void amiga_term_open(void);
  50338. +
  50339. +int set_window_size(int fd,
  50340. +                    int height,
  50341. +                    int width);
  50342. +
  50343. diff -rup --new-file baseline/fsf/emacs/src/amiga_xmenu.c amiga/fsf/emacs/src/amiga_xmenu.c
  50344. --- baseline/fsf/emacs/src/amiga_xmenu.c    Wed Dec 31 17:00:00 1969
  50345. +++ amiga/fsf/emacs/src/amiga_xmenu.c    Sat Sep 28 00:00:00 1996
  50346. @@ -0,0 +1,956 @@
  50347. +/* Additional Amiga Menu Bar stuff, should be moved to amiga_menu 
  50348. +   Copyright (C) 1986, 1988, 1993, 1994 Free Software Foundation, Inc.
  50349. +
  50350. +This file is part of GNU Emacs.
  50351. +
  50352. +GNU Emacs is free software; you can redistribute it and/or modify
  50353. +it under the terms of the GNU General Public License as published by
  50354. +the Free Software Foundation; either version 2, or (at your option)
  50355. +any later version.
  50356. +
  50357. +GNU Emacs is distributed in the hope that it will be useful,
  50358. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  50359. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  50360. +GNU General Public License for more details.
  50361. +
  50362. +You should have received a copy of the GNU General Public License
  50363. +along with GNU Emacs; see the file COPYING.  If not, write to
  50364. +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  50365. +
  50366. +#include <exec/types.h>
  50367. +#include <libraries/gadtools.h>
  50368. +#include <intuition/intuition.h>
  50369. +#include <proto/exec.h>
  50370. +#include <proto/dos.h>
  50371. +#include <proto/gadtools.h>
  50372. +#include <proto/intuition.h>
  50373. +#include "config.h"
  50374. +#include "lisp.h"
  50375. +#include "frame.h"
  50376. +#include "amiga.h"
  50377. +
  50378. +#ifdef USE_PROTOS
  50379. +#include "protos.h"
  50380. +#endif
  50381. +
  50382. +extern Lisp_Object Qmenu_enable;
  50383. +#if 0
  50384. +extern Lisp_Object Qmenu_bar;
  50385. +#endif
  50386. +
  50387. +/* This holds a Lisp vector that holds the results of decoding
  50388. +   the keymaps or alist-of-alists that specify a menu.
  50389. +
  50390. +   It describes the panes and items within the panes.
  50391. +
  50392. +   Each pane is described by 3 elements in the vector:
  50393. +   t, the pane name, the pane's prefix key.
  50394. +   Then follow the pane's items, with 4 elements per item:
  50395. +   the item string, the enable flag, the item's value,
  50396. +   and the equivalent keyboard key's description string.
  50397. +
  50398. +   In some cases, multiple levels of menus may be described.
  50399. +   A single vector slot containing nil indicates the start of a submenu.
  50400. +   A single vector slot containing lambda indicates the end of a submenu.
  50401. +   The submenu follows a menu item which is the way to reach the submenu.
  50402. +
  50403. +   A single vector slot containing quote indicates that the
  50404. +   following items should appear on the right of a dialog box.
  50405. +
  50406. +   Using a Lisp vector to hold this information while we decode it
  50407. +   takes care of protecting all the data from GC.  */
  50408. +
  50409. +#define MENU_ITEMS_PANE_NAME 1
  50410. +#define MENU_ITEMS_PANE_PREFIX 2
  50411. +#define MENU_ITEMS_PANE_LENGTH 3
  50412. +
  50413. +#define MENU_ITEMS_ITEM_NAME 0
  50414. +#define MENU_ITEMS_ITEM_ENABLE 1
  50415. +#define MENU_ITEMS_ITEM_VALUE 2
  50416. +#define MENU_ITEMS_ITEM_EQUIV_KEY 3
  50417. +#define MENU_ITEMS_ITEM_LENGTH 4
  50418. +
  50419. +#ifdef MULTI_FRAME
  50420. +you lose! /* each frame needs one of these or it must be copied */
  50421. +#else
  50422. +static Lisp_Object menu_items;
  50423. +#endif
  50424. +
  50425. +/* Number of slots currently allocated in menu_items.  */
  50426. +static int menu_items_allocated;
  50427. +
  50428. +/* This is (<number of menus> + <number of items> + <number of subitems>) */
  50429. +static int menu_items_num_items;
  50430. +
  50431. +/* This is the index in menu_items of the first empty slot.  */
  50432. +static int menu_items_used;
  50433. +
  50434. +/* The number of panes currently recorded in menu_items,
  50435. +   excluding those within submenus.  */
  50436. +static int menu_items_n_panes;
  50437. +
  50438. +/* Current depth within submenus.  */
  50439. +static int menu_items_submenu_depth;
  50440. +
  50441. +/* sum of length of strings used in the current menu */
  50442. +static int menu_items_string_len;
  50443. +
  50444. +/* Initialize the menu_items structure if we haven't already done so.
  50445. +   Also mark it as currently empty.  */
  50446. +
  50447. +static void
  50448. +init_menu_items ()
  50449. +{
  50450. +  if (NILP (menu_items))
  50451. +    {
  50452. +      menu_items_allocated = 60;
  50453. +      menu_items = Fmake_vector (make_number (menu_items_allocated), Qnil);
  50454. +    }
  50455. +
  50456. +  menu_items_used = 0;
  50457. +  menu_items_n_panes = 0;
  50458. +  menu_items_submenu_depth = 0;
  50459. +  menu_items_string_len = 0;
  50460. +  menu_items_num_items = 0;
  50461. +}
  50462. +
  50463. +/* Call at the end of generating the data in menu_items.
  50464. +   This fills in the number of items in the last pane.  */
  50465. +
  50466. +static void
  50467. +finish_menu_items ()
  50468. +{
  50469. +}
  50470. +
  50471. +/* Call when finished using the data for the current menu
  50472. +   in menu_items.  */
  50473. +
  50474. +static void
  50475. +discard_menu_items ()
  50476. +{
  50477. +  /* Free the structure if it is especially large.
  50478. +     Otherwise, hold on to it, to save time.  */
  50479. +  if (menu_items_allocated > 200)
  50480. +    {
  50481. +      menu_items = Qnil;
  50482. +      menu_items_allocated = 0;
  50483. +    }
  50484. +}
  50485. +
  50486. +/* Make the menu_items vector twice as large.  */
  50487. +
  50488. +static void
  50489. +grow_menu_items ()
  50490. +{
  50491. +  Lisp_Object old;
  50492. +  int old_size = menu_items_allocated;
  50493. +  old = menu_items;
  50494. +
  50495. +  menu_items_allocated *= 2;
  50496. +  menu_items = Fmake_vector (make_number (menu_items_allocated), Qnil);
  50497. +  bcopy (XVECTOR (old)->contents, XVECTOR (menu_items)->contents,
  50498. +     old_size * sizeof (Lisp_Object));
  50499. +}
  50500. +
  50501. +/* Begin a submenu.  */
  50502. +
  50503. +static void
  50504. +push_submenu_start ()
  50505. +{
  50506. +  if (menu_items_used + 1 > menu_items_allocated)
  50507. +    grow_menu_items ();
  50508. +
  50509. +  XVECTOR (menu_items)->contents[menu_items_used++] = Qnil;
  50510. +  menu_items_submenu_depth++;
  50511. +}
  50512. +
  50513. +/* End a submenu.  */
  50514. +
  50515. +static void
  50516. +push_submenu_end ()
  50517. +{
  50518. +  if (menu_items_used + 1 > menu_items_allocated)
  50519. +    grow_menu_items ();
  50520. +
  50521. +  XVECTOR (menu_items)->contents[menu_items_used++] = Qlambda;
  50522. +  menu_items_submenu_depth--;
  50523. +}
  50524. +
  50525. +/* Indicate boundary between left and right.  */
  50526. +
  50527. +static void
  50528. +push_left_right_boundary ()
  50529. +{
  50530. +  if (menu_items_used + 1 > menu_items_allocated)
  50531. +    grow_menu_items ();
  50532. +
  50533. +  XVECTOR (menu_items)->contents[menu_items_used++] = Qquote;
  50534. +}
  50535. +
  50536. +/* Start a new menu pane in menu_items..
  50537. +   NAME is the pane name.  PREFIX_VEC is a prefix key for this pane.
  50538. +   NAME_LEN is the length of the name in characters.
  50539. + */
  50540. +
  50541. +static void
  50542. +push_menu_pane (Lisp_Object name, Lisp_Object prefix_vec, int name_len)
  50543. +{
  50544. +  if (menu_items_used + MENU_ITEMS_PANE_LENGTH > menu_items_allocated)
  50545. +    grow_menu_items ();
  50546. +
  50547. +  if (menu_items_submenu_depth == 0)
  50548. +    menu_items_n_panes++;
  50549. +  XVECTOR (menu_items)->contents[menu_items_used++] = Qt;
  50550. +  XVECTOR (menu_items)->contents[menu_items_used++] = name;
  50551. +  XVECTOR (menu_items)->contents[menu_items_used++] = prefix_vec;
  50552. +  menu_items_string_len += name_len + 1;
  50553. +  menu_items_num_items++;
  50554. +}
  50555. +
  50556. +/* Push one menu item into the current pane.
  50557. +   NAME is the string to display.  ENABLE if non-nil means
  50558. +   this item can be selected.  KEY is the key generated by
  50559. +   choosing this item.  EQUIV is the textual description
  50560. +   of the keyboard equivalent for this item (or nil if none).
  50561. +   NAME_LEN is the length of the name in characters.
  50562. + */
  50563. +
  50564. +static void
  50565. +push_menu_item (Lisp_Object name, Lisp_Object enable,
  50566. +        Lisp_Object key, Lisp_Object equiv,
  50567. +        int name_len)
  50568. +{
  50569. +  if (menu_items_used + MENU_ITEMS_ITEM_LENGTH > menu_items_allocated)
  50570. +    grow_menu_items ();
  50571. +
  50572. +  XVECTOR (menu_items)->contents[menu_items_used++] = name;
  50573. +  XVECTOR (menu_items)->contents[menu_items_used++] = enable;
  50574. +  XVECTOR (menu_items)->contents[menu_items_used++] = key;
  50575. +  XVECTOR (menu_items)->contents[menu_items_used++] = equiv;
  50576. +  menu_items_string_len += name_len + 1;
  50577. +  menu_items_num_items++;
  50578. +}
  50579. +
  50580. +/* Figure out the current keyboard equivalent of a menu item ITEM1.
  50581. +   The item string for menu display should be ITEM_STRING.
  50582. +   Store the equivalent keyboard key sequence's
  50583. +   textual description into *DESCRIP_PTR.
  50584. +   Also cache them in the item itself.
  50585. +   Return the real definition to execute.  */
  50586. +
  50587. +static Lisp_Object
  50588. +menu_item_equiv_key (item_string, item1, descrip_ptr)
  50589. +     Lisp_Object item_string;
  50590. +     Lisp_Object item1;
  50591. +     Lisp_Object *descrip_ptr;
  50592. +{
  50593. +  /* This is the real definition--the function to run.  */
  50594. +  Lisp_Object def;
  50595. +  /* This is the sublist that records cached equiv key data
  50596. +     so we can save time.  */
  50597. +  Lisp_Object cachelist;
  50598. +  /* These are the saved equivalent keyboard key sequence
  50599. +     and its key-description.  */
  50600. +  Lisp_Object savedkey, descrip;
  50601. +  Lisp_Object def1;
  50602. +  int changed = 0;
  50603. +
  50604. +  /* If a help string follows the item string, skip it.  */
  50605. +  if (CONSP (XCONS (item1)->cdr)
  50606. +      && STRINGP (XCONS (XCONS (item1)->cdr)->car))
  50607. +    item1 = XCONS (item1)->cdr;
  50608. +
  50609. +  def = Fcdr (item1);
  50610. +
  50611. +  /* Get out the saved equivalent-keyboard-key info.  */
  50612. +  cachelist = savedkey = descrip = Qnil;
  50613. +  if (CONSP (def) && CONSP (XCONS (def)->car)
  50614. +      && (NILP (XCONS (XCONS (def)->car)->car)
  50615. +      || VECTORP (XCONS (XCONS (def)->car)->car)))
  50616. +    {
  50617. +      cachelist = XCONS (def)->car;
  50618. +      def = XCONS (def)->cdr;
  50619. +      savedkey = XCONS (cachelist)->car;
  50620. +      descrip = XCONS (cachelist)->cdr;
  50621. +    }
  50622. +
  50623. +  /* Is it still valid?  */
  50624. +  def1 = Qnil;
  50625. +  if (!NILP (savedkey))
  50626. +    def1 = Fkey_binding (savedkey, Qnil);
  50627. +  /* If not, update it.  */
  50628. +  if (! EQ (def1, def)
  50629. +      /* If something had no key binding before, don't recheck it--
  50630. +     doing that takes too much time and makes menus too slow.  */
  50631. +      && !(!NILP (cachelist) && NILP (savedkey)))
  50632. +    {
  50633. +      changed = 1;
  50634. +      descrip = Qnil;
  50635. +      savedkey = Fwhere_is_internal (def, Qnil, Qt, Qnil);
  50636. +      /* If the command is an alias for another
  50637. +     (such as easymenu.el and lmenu.el set it up),
  50638. +     see if the original command name has equivalent keys.  */
  50639. +      if (SYMBOLP (def) && SYMBOLP (XSYMBOL (def)->function))
  50640. +    savedkey = Fwhere_is_internal (XSYMBOL (def)->function,
  50641. +                       Qnil, Qt, Qnil);
  50642. +
  50643. +      if (VECTORP (savedkey)
  50644. +      && EQ (XVECTOR (savedkey)->contents[0], Qmenu_bar))
  50645. +    savedkey = Qnil;
  50646. +      if (!NILP (savedkey))
  50647. +    {
  50648. +      descrip = Fkey_description (savedkey);
  50649. +      descrip = concat2 (make_string ("  (", 3), descrip);
  50650. +      descrip = concat2 (descrip, make_string (")", 1));
  50651. +    }
  50652. +    }
  50653. +
  50654. +  /* Cache the data we just got in a sublist of the menu binding.  */
  50655. +  if (NILP (cachelist))
  50656. +    XCONS (item1)->cdr = Fcons (Fcons (savedkey, descrip), def);
  50657. +  else if (changed)
  50658. +    {
  50659. +      XCONS (cachelist)->car = savedkey;
  50660. +      XCONS (cachelist)->cdr = descrip;
  50661. +    }
  50662. +
  50663. +  *descrip_ptr = descrip;
  50664. +  return def;
  50665. +}
  50666. +
  50667. +/* This is used as the handler when calling internal_condition_case_1.  */
  50668. +
  50669. +static Lisp_Object
  50670. +menu_item_enabled_p_1 (arg)
  50671. +     Lisp_Object arg;
  50672. +{
  50673. +  return Qnil;
  50674. +}
  50675. +
  50676. +/* Return non-nil if the command DEF is enabled when used as a menu item.
  50677. +   This is based on looking for a menu-enable property.
  50678. +   If NOTREAL is set, don't bother really computing this.  */
  50679. +
  50680. +static Lisp_Object
  50681. +menu_item_enabled_p (def, notreal)
  50682. +     Lisp_Object def;
  50683. +{
  50684. +  Lisp_Object enabled, tem;
  50685. +
  50686. +  enabled = Qt;
  50687. +  if (notreal)
  50688. +    return enabled;
  50689. +  if (XTYPE (def) == Lisp_Symbol)
  50690. +    {
  50691. +      /* No property, or nil, means enable.
  50692. +     Otherwise, enable if value is not nil.  */
  50693. +      tem = Fget (def, Qmenu_enable);
  50694. +      if (!NILP (tem))
  50695. +    /* (condition-case nil (eval tem)
  50696. +       (error nil))  */
  50697. +    enabled = internal_condition_case_1 (Feval, tem, Qerror,
  50698. +                         menu_item_enabled_p_1);
  50699. +    }
  50700. +  return enabled;
  50701. +}
  50702. +
  50703. +
  50704. +void make_amiga_menu_1(FRAME_PTR f,int doprint);
  50705. +void make_menu_items(FRAME_PTR f, Lisp_Object menu);
  50706. +
  50707. +void
  50708. +make_amiga_menu(FRAME_PTR f, Lisp_Object menu)
  50709. +{
  50710. +    make_menu_items(f, menu);
  50711. +    if(menu_items_used)
  50712. +    {
  50713. +    make_amiga_menu_1(f, 0);
  50714. +    }
  50715. +}
  50716. +
  50717. +extern struct Library *GadToolsBase;
  50718. +
  50719. +void
  50720. +print_amiga_menu(FRAME_PTR f)
  50721. +{
  50722. +    make_amiga_menu_1(f,1);
  50723. +}
  50724. +
  50725. +void
  50726. +make_amiga_menu_1(FRAME_PTR f, int doprint)
  50727. +{
  50728. +    struct NewMenu *menudata, *mkm;
  50729. +    char *strdata;
  50730. +    int i, t, first_pane = 0, submenu_depth = 0;
  50731. +    int level = 0;
  50732. +
  50733. +    if(!doprint)
  50734. +    {
  50735. +    check_intuition();
  50736. +    suspend_menus(f);
  50737. +
  50738. +    if (EMACS_MENU(f)) Famiga_delete_menus(f);
  50739. +        /* Now create menu structure */
  50740. +    menudata = (struct NewMenu *)alloca(sizeof(struct NewMenu) * (menu_items_num_items + 1));
  50741. +    EMACS_MENU_STRINGS(f) = strdata = (char *)xmalloc(menu_items_string_len);
  50742. +    mkm = menudata;
  50743. +    }
  50744. +
  50745. +  /* Loop over all panes and items, print/creating menu structure.  */
  50746. +  i = 0;
  50747. +  while (i < menu_items_used)
  50748. +    {
  50749. +    /* CHFIXME */
  50750. +    if(mkm >= menudata+menu_items_num_items + 1)
  50751. +        abort();
  50752. +    
  50753. +      if (EQ (XVECTOR (menu_items)->contents[i], Qnil))
  50754. +    {
  50755. +        submenu_depth++;
  50756. +        first_pane = 1;
  50757. +        i++;
  50758. +    }
  50759. +      else if (EQ (XVECTOR (menu_items)->contents[i], Qlambda))
  50760. +    {
  50761. +        --submenu_depth;
  50762. +      first_pane = 0;
  50763. +      i++;
  50764. +    }
  50765. +      else if (EQ (XVECTOR (menu_items)->contents[i], Qt)
  50766. +           && submenu_depth != 0)
  50767. +    i += MENU_ITEMS_PANE_LENGTH;
  50768. +      /* Ignore a nil in the item list.
  50769. +     It\'s meaningful only for dialog boxes.  */
  50770. +      else if (EQ (XVECTOR (menu_items)->contents[i], Qquote))
  50771. +    i += 1;
  50772. +      else if (EQ (XVECTOR (menu_items)->contents[i], Qt))
  50773. +    {
  50774. +      /* Create a new pane.  */
  50775. +      Lisp_Object pane_name, prefix;
  50776. +      char *pane_string;
  50777. +      int len;
  50778. +      
  50779. +      pane_name = XVECTOR (menu_items)->contents[i + MENU_ITEMS_PANE_NAME];
  50780. +      prefix = XVECTOR (menu_items)->contents[i + MENU_ITEMS_PANE_PREFIX];
  50781. +      pane_string = (NILP (pane_name)
  50782. +             ? "" : (char *) XSTRING (pane_name)->data);
  50783. +      /* If there is just one top-level pane, put all its items directly
  50784. +         under the top-level menu.  */
  50785. +      if (menu_items_n_panes == 1)
  50786. +        pane_string = "";
  50787. +
  50788. +      /* If the pane has a meaningful name,
  50789. +         make the pane a top-level menu item
  50790. +         with its items as a submenu beneath it.  */
  50791. +      len = strlen(pane_string);
  50792. +      if (len)
  50793. +      {
  50794. +          if(doprint)
  50795. +          {
  50796. +          for(t = 0; t < submenu_depth; t++)
  50797. +            fprintf(stderr,"    ");
  50798. +        
  50799. +          fprintf(stderr,"pane = \"%s\"\n", pane_string);
  50800. +          }
  50801. +          else
  50802. +          {
  50803. +          mkm->nm_Type = NM_TITLE;
  50804. +          strncpy(strdata, pane_string, len+1);
  50805. +          mkm->nm_Label = strdata;
  50806. +          strdata += len + 1;
  50807. +          mkm->nm_CommKey = 0;
  50808. +          mkm->nm_Flags = 0;
  50809. +          mkm->nm_MutualExclude = 0;
  50810. +          mkm++;
  50811. +          }
  50812. +#if 0
  50813. +          if (keymaps && !NILP (prefix))
  50814. +        wv->name++;
  50815. +#endif
  50816. +#if 0
  50817. +          wv->value = 0;
  50818. +          wv->enabled = 1;
  50819. +#endif
  50820. +        }
  50821. +      else if (first_pane)
  50822. +        {
  50823. +        }
  50824. +      first_pane = 0;
  50825. +      i += MENU_ITEMS_PANE_LENGTH;
  50826. +    }
  50827. +      else
  50828. +    {
  50829. +      /* Create a new item within current pane.  */
  50830. +      Lisp_Object item_name, enable, descrip, key;
  50831. +      char *key_string;
  50832. +      int len;
  50833. +      
  50834. +      item_name = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_NAME];
  50835. +      enable = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_ENABLE];
  50836. +      /* The key generated by choosing this item */
  50837. +      key
  50838. +        = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_VALUE];
  50839. +      descrip
  50840. +        = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_EQUIV_KEY];
  50841. +
  50842. +      if(NILP(key))
  50843. +          key_string = "<nokey>";
  50844. +      else if(XTYPE(key) == Lisp_String)
  50845. +          key_string = (char *) XSTRING (key)->data;
  50846. +      else if(XTYPE(key) == Lisp_Symbol)
  50847. +          key_string = (char *) XSYMBOL (key)->name->data;
  50848. +      else
  50849. +          key_string = "<unknown type>";
  50850. +          
  50851. +      if(doprint)
  50852. +      {
  50853. +          for(t = 0; t < submenu_depth+1; t++)
  50854. +          fprintf(stderr,"    ");
  50855. +      
  50856. +
  50857. +          fprintf(stderr,"name = \"%s\", key = [%s] %s\n",
  50858. +              (char *) XSTRING (item_name)->data,
  50859. +              key_string,
  50860. +          (NILP(enable)) ? "<disabled>" : "<enabled>"
  50861. +              );
  50862. +      }
  50863. +      else
  50864. +      {
  50865. +          len = XSTRING (item_name)->size;
  50866. +          if(submenu_depth == 0)
  50867. +          {
  50868. +          mkm->nm_Type = NM_ITEM;
  50869. +          }
  50870. +          else if(submenu_depth == 1)
  50871. +          {
  50872. +          mkm->nm_Type = NM_SUB;
  50873. +          }
  50874. +          else
  50875. +          abort();
  50876. +          
  50877. +          strncpy(strdata, XSTRING (item_name)->data, len+1);
  50878. +          mkm->nm_Label = strdata;
  50879. +          strdata += len + 1;
  50880. +          mkm->nm_CommKey = 0;
  50881. +          mkm->nm_Flags = 0;
  50882. +          mkm->nm_MutualExclude = 0;
  50883. +          if(NILP(enable))
  50884. +          mkm->nm_Flags |= NM_ITEMDISABLED;
  50885. +          mkm++;
  50886. +      }
  50887. +#if 0
  50888. +      wv->value = 0;
  50889. +      wv->call_data = (void *) &XVECTOR (menu_items)->contents[i];
  50890. +#endif
  50891. +
  50892. +      i += MENU_ITEMS_ITEM_LENGTH;
  50893. +    }
  50894. +    }
  50895. +    mkm->nm_Type = NM_END;
  50896. +    mkm->nm_Label = 0;
  50897. +    mkm->nm_CommKey = 0;
  50898. +    mkm->nm_Flags = 0;
  50899. +    mkm->nm_MutualExclude = 0;
  50900. +    if (!(EMACS_MENU(f) = CreateMenus(menudata, TAG_END)))
  50901. +    {
  50902. +    free(EMACS_MENU_STRINGS(f));
  50903. +    EMACS_MENU_STRINGS(f) = 0;
  50904. +#if 0
  50905. +    error("Menu couldn't be created"); /* CHFIXME: how to do it for this kind of function? */
  50906. +#else
  50907. +    fprintf(stderr,"Menu couldn't be created");
  50908. +#endif
  50909. +    
  50910. +    }
  50911. +    if (!resume_menus(f))
  50912. +#if 0
  50913. +    error("Menu couldn't be layed out");
  50914. +#else
  50915. +    fprintf(stderr, "Menu couldn't be layed out");
  50916. +#endif
  50917. +}
  50918. +
  50919. +void
  50920. +make_menu_items(FRAME_PTR f, Lisp_Object menu)
  50921. +{
  50922. +  Lisp_Object Result;
  50923. +  int i;
  50924. +
  50925. +  init_menu_items(); /* CHFIXME */
  50926. +
  50927. +  for (i = 0; i < XVECTOR (menu)->size;i += 3)
  50928. +    {
  50929. +      Lisp_Object string;
  50930. +      Lisp_Object Key, enable, descrip;
  50931. +      Lisp_Object binding;
  50932. +
  50933. +      Key = XVECTOR (menu)->contents[i];
  50934. +      string = XVECTOR (menu)->contents[i + 1];
  50935. +      binding = XVECTOR (menu)->contents[i + 2];
  50936. +      if(NILP(string))
  50937. +    break;
  50938. +
  50939. +      make_menu_items_1(Key, string, binding);
  50940. +    }
  50941. +}
  50942. +
  50943. +/* CHFIXME */
  50944. +#define Check(obj, type) if(XTYPE(obj) != type)\
  50945. +{\
  50946. + fprintf(stderr,"make_menu_items_1: Unknown structure (line %d, type %d)\n", __LINE__,XTYPE(obj)); \
  50947. + break;\
  50948. +}
  50949. +
  50950. +Lisp_Object
  50951. +make_menu_items_1(Lisp_Object prefix, Lisp_Object pane_name, Lisp_Object binding)
  50952. +{
  50953. +  Lisp_Object Result;
  50954. +  int i;
  50955. +
  50956. +  Lisp_Object pending_maps;
  50957. +  struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
  50958. +  Lisp_Object litems, litem;
  50959. +  Lisp_Object lsubitems, lsubitem;
  50960. +  struct Lisp_Cons *item;
  50961. +  struct Lisp_Cons *subitem;
  50962. +
  50963. +  pending_maps = Qnil;
  50964. +
  50965. +  do
  50966. +  {
  50967. +      Check(prefix, Lisp_Symbol);
  50968. +      Check(pane_name, Lisp_String);
  50969. +      push_menu_pane (pane_name, prefix, XSTRING(pane_name)->size);
  50970. +
  50971. +      Check(binding, Lisp_Cons);
  50972. +      binding = XCONS(binding)->car;
  50973. +      if(EQ(XCONS(binding)->car, Qkeymap))
  50974. +    {
  50975. +      for(litems = XCONS(binding)->cdr; XTYPE(litems) == Lisp_Cons; litems = XCONS(litems)->cdr)
  50976. +        {
  50977. +          litem = XCONS(litems)->car;
  50978. +          if(XTYPE(litem) == Lisp_String)
  50979. +        {
  50980. +          /*
  50981. +             ((keymap 
  50982. +                 "Select Buffer" 
  50983. +                 ("*scratch*" "*scratch*      " (nil) . menu-bar-select-buffer) 
  50984. +                 (list-buffers "List All Buffers" . list-buffers)))
  50985. +             ((keymap 
  50986. +                 (open-file "Open File..." . find-file) 
  50987. +                 (dired "Open Directory..." . dired) 
  50988. +                 "File"))
  50989. +             */
  50990. +#if 0
  50991. +          /* CHFIXME: ignore this name. redundant? */
  50992. +          fprintf(stderr,"\tmenu = %s\n",
  50993. +              (char *) XSTRING (litem)->data);
  50994. +#endif
  50995. +        }
  50996. +          else
  50997. +        {
  50998. +          Lisp_Object Def;
  50999. +          /* These are the saved equivalent keyboard key sequence
  51000. +             and its key-description.  */
  51001. +          Lisp_Object descrip;
  51002. +          Lisp_Object tem, enabled;
  51003. +          Lisp_Object prefix,item_string;
  51004. +
  51005. +          Check(litem, Lisp_Cons);
  51006. +          item = XCONS(litem);
  51007. +          prefix = item->car;
  51008. +#if 0 /* test Buffers menu (strings) */
  51009. +          Check(prefix, Lisp_Symbol); /* CHFIXME */
  51010. +          if(XTYPE(prefix) == Lisp_String)
  51011. +          {
  51012. +              break; /* CHFIXME */
  51013. +          }
  51014. +          else if(XTYPE(prefix) == Lisp_Symbol)
  51015. +            ;
  51016. +          else
  51017. +            Check(prefix, Lisp_Symbol);
  51018. +#endif
  51019. +          Check(item->cdr, Lisp_Cons);
  51020. +          item = XCONS(item->cdr);
  51021. +          item_string = item->car;
  51022. +          Check(item_string, Lisp_String);
  51023. +          Def = item->cdr;
  51024. +          /* CHFIXME: Def may be (lambda ....) */
  51025. +#if 0
  51026. +          Check(Def, Lisp_Symbol);
  51027. +#endif
  51028. +#if 0
  51029. +          def = menu_item_equiv_key (item_string, item1, &descrip);
  51030. +#endif
  51031. +#if 0 /* currently not needed, all we have is protected */
  51032. +          /* GCPRO because we will call eval.
  51033. +             Protecting KEYMAP preserves everything we use;
  51034. +             aside from that, must protect whatever might be
  51035. +             a string.  Since there's no GCPRO5, we refetch
  51036. +             item_string instead of protecting it.  */
  51037. +          GCPRO4 (keymap, pending_maps, def, descrip);
  51038. +#endif
  51039. +#if 0
  51040. +          enabled = menu_item_enabled_p (def, notreal);
  51041. +#endif
  51042. +#if 0
  51043. +          UNGCPRO;
  51044. +#endif
  51045. +          push_menu_item(item_string, 
  51046. +                 /* enabled */ Qt, 
  51047. +                 prefix,
  51048. +                 /* descrip */ Qnil,
  51049. +                 XSTRING(item_string)->size);
  51050. +
  51051. +          if(XTYPE(Def) == Lisp_Symbol)
  51052. +            lsubitems = XSYMBOL(Def)->value;
  51053. +          else
  51054. +            lsubitems = Qnil;
  51055. +          if((XTYPE(lsubitems) == Lisp_Cons) 
  51056. +             && EQ(XCONS(lsubitems)->car, Qkeymap))
  51057. +          {
  51058. +              push_submenu_start ();
  51059. +
  51060. +              for(lsubitems = XCONS(lsubitems)->cdr; 
  51061. +              XTYPE(lsubitems) == Lisp_Cons;
  51062. +              lsubitems = XCONS(lsubitems)->cdr)
  51063. +            {
  51064. +              Check(lsubitems, Lisp_Cons);
  51065. +              lsubitem = XCONS(lsubitems)->car;
  51066. +
  51067. +              if(XTYPE(lsubitem) == Lisp_String)
  51068. +                {
  51069. +                  /* ignore this name */
  51070. +                }
  51071. +              else
  51072. +                {
  51073. +                  Check(lsubitem, Lisp_Cons);
  51074. +                  subitem = XCONS(lsubitem);
  51075. +                  prefix = subitem->car;
  51076. +
  51077. +                  Check(prefix, Lisp_Symbol); /* CHFIXME */
  51078. +
  51079. +                  Check(subitem->cdr, Lisp_Cons);
  51080. +                  subitem = XCONS(subitem->cdr);
  51081. +                  item_string = subitem->car;
  51082. +                  Check(item_string, Lisp_String);
  51083. +                  Def = subitem->cdr;
  51084. +
  51085. +                  push_menu_item(item_string, 
  51086. +                         /* enabled */ Qt, 
  51087. +                         prefix,
  51088. +                         /* descrip */ Qnil,
  51089. +                         XSTRING(item_string)->size);
  51090. +              }
  51091. +              }
  51092. +              push_submenu_end ();
  51093. +          }
  51094. +          }
  51095. +      }
  51096. +      }
  51097. +      else
  51098. +      {
  51099. +      fprintf(stderr,"make_menu_items_1: Unknown structure\n");
  51100. +      }
  51101. +  } while(0);
  51102. +}
  51103. +
  51104. +/*
  51105. + * Map actual menu selection to Lisp Symbol
  51106. + *
  51107. + * (Notes:
  51108. + *   prefixes must be an array of 3 elements,
  51109. + *   given numbers start with 0
  51110. + *   sub_item = NOSUB means: no subitem)
  51111. + */
  51112. +
  51113. +int
  51114. +map_menu_selection(int menu_num, int item_num, int subitem_num, Lisp_Object *prefixes)
  51115. +{
  51116. +  int i;
  51117. +  int act_menu_num = -1; 
  51118. +  int act_item_num = -1;
  51119. +  int act_subitem_num = -1;
  51120. +  int submenu_depth = 0;
  51121. +  Lisp_Object prefix;
  51122. +
  51123. +
  51124. +  prefixes[0] = Qnil;
  51125. +  prefixes[1] = Qnil;
  51126. +  prefixes[2] = Qnil;
  51127. +
  51128. +  prefix = Qnil;
  51129. +  i = 0;
  51130. +  while (i < menu_items_used)
  51131. +    {
  51132. +      Lisp_Object entry;
  51133. +
  51134. +
  51135. +      if (EQ (XVECTOR (menu_items)->contents[i], Qt))
  51136. +    {
  51137. +      act_menu_num++;
  51138. +      if(act_menu_num == menu_num)
  51139. +        {
  51140. +          prefixes[0] = XVECTOR (menu_items)->contents[i + MENU_ITEMS_PANE_PREFIX];
  51141. +        }
  51142. +      else if(act_menu_num >= menu_num)
  51143. +        {
  51144. +          break; /* not found */
  51145. +        }
  51146. +      act_item_num = -1;
  51147. +      act_subitem_num = -1;
  51148. +
  51149. +      i += MENU_ITEMS_PANE_LENGTH;
  51150. +    }
  51151. +      else if (EQ (XVECTOR (menu_items)->contents[i], Qquote))
  51152. +    i += 1;
  51153. +      else if (EQ (XVECTOR (menu_items)->contents[i], Qnil))
  51154. +    {
  51155. +      submenu_depth ++;
  51156. +      if(submenu_depth > 1)
  51157. +        abort();
  51158. +      i += 1;
  51159. +    }
  51160. +      else if (EQ (XVECTOR (menu_items)->contents[i], Qlambda))
  51161. +    {
  51162. +      submenu_depth --;
  51163. +      if(submenu_depth < 0)
  51164. +        abort();
  51165. +      i += 1;
  51166. +    }
  51167. +      else
  51168. +    {
  51169. +      if(submenu_depth == 0)
  51170. +      {
  51171. +          act_item_num ++;
  51172. +          act_subitem_num = -1;
  51173. +      }
  51174. +      else if(submenu_depth == 1)
  51175. +        act_subitem_num ++;
  51176. +      else
  51177. +          abort();
  51178. +      
  51179. +      if(act_menu_num < 0)
  51180. +          abort();
  51181. +      
  51182. +      prefixes[submenu_depth+1] = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_VALUE];
  51183. +
  51184. +      if((act_menu_num == menu_num) && 
  51185. +         (act_item_num == item_num) &&
  51186. +         ((subitem_num == NOSUB) || (act_subitem_num == subitem_num)))
  51187. +        {
  51188. +        if(subitem_num == NOSUB)
  51189. +            prefixes[2] = Qnil;
  51190. +          return 1;
  51191. +        }
  51192. +      i += MENU_ITEMS_ITEM_LENGTH;
  51193. +    }
  51194. +    }
  51195. +
  51196. +  return 0;
  51197. +}
  51198. +
  51199. +#if 0
  51200. +extern Lisp_Object Qexternal_debugging_output;
  51201. +void
  51202. +print_menu_items_vector(Lisp_Object items, int level)
  51203. +{
  51204. +    int i;
  51205. +    int submenu_depth = 0;
  51206. +
  51207. +#if 0
  51208. +    if(level)
  51209. +    {
  51210. +    for(i = 0; i < level; i++)
  51211. +        fprintf(stderr,"    ");
  51212. +    }
  51213. +#endif
  51214. +    for (i = 0; i < XVECTOR (items)->size;i += 3)
  51215. +    {
  51216. +      Lisp_Object string;
  51217. +      Lisp_Object key, enable, descrip;
  51218. +      Lisp_Object binding;
  51219. +
  51220. +      string = XVECTOR (items)->contents[i + 1];
  51221. +      binding = XVECTOR (items)->contents[i + 2];
  51222. +      if(NILP(string))
  51223. +    break;
  51224. +
  51225. +      fprintf(stderr,"\tname = %s\n",
  51226. +          (char *) XSTRING (string)->data);
  51227. +      fprintf(stderr,"binding type: %d\n", XTYPE(binding));
  51228. +      Fprin1(binding, Qexternal_debugging_output);
  51229. +    }
  51230. +}
  51231. +#endif
  51232. +
  51233. +/* from xmenu.c */
  51234. +
  51235. +void
  51236. +set_frame_menubar (FRAME_PTR f, int first_time)
  51237. +{
  51238. +  int id = (int) f;
  51239. +  Lisp_Object tail, items;
  51240. +  int i;
  51241. +
  51242. +#if 0 /* CHFIXME: needed ? */
  51243. +  BLOCK_INPUT;
  51244. +#endif
  51245. +#if 0
  51246. +  fprintf(stderr,"set_frame_menubar\n");
  51247. +#endif
  51248. +  if (NILP (items = FRAME_MENU_BAR_ITEMS (f)))
  51249. +    items = FRAME_MENU_BAR_ITEMS (f) = menu_bar_items (FRAME_MENU_BAR_ITEMS (f));
  51250. +
  51251. +#if 0
  51252. +    make_menu_items(f, items);
  51253. +    print_amiga_menu(f);
  51254. +#else
  51255. +    make_amiga_menu(f, items);
  51256. +#endif
  51257. +  
  51258. +#if 0
  51259. +  if (menubar_widget)
  51260. +    lw_modify_all_widgets (id, first_wv, False);
  51261. +  else
  51262. +    {
  51263. +      menubar_widget = lw_create_widget ("menubar", "menubar", 
  51264. +                     id, first_wv, 
  51265. +                     f->display.x->column_widget, 
  51266. +                     0, 0,
  51267. +                     0, 0);
  51268. +      f->display.x->menubar_widget = menubar_widget;
  51269. +      XtVaSetValues (menubar_widget,
  51270. +             XtNshowGrip, 0,
  51271. +             XtNresizeToPreferred, 1,
  51272. +             XtNallowResize, 1,
  51273. +             0);
  51274. +    }
  51275. +  
  51276. +  free_menubar_widget_value_tree (first_wv);
  51277. +
  51278. +  /* Don't update the menubar the first time it is created via x_window.  */
  51279. +  if (!first_time)
  51280. +    update_frame_menubar (f);
  51281. +#endif
  51282. +#if 0 /* CHFIXME: needed ? */
  51283. +  UNBLOCK_INPUT;
  51284. +#endif
  51285. +}
  51286. +
  51287. +/* CHFIXME */
  51288. +Lisp_Object 
  51289. +map_event_to_object (struct input_event *event, FRAME_PTR f)
  51290. +{
  51291. +  fprintf(stderr, "map_event_to_object () called !\n");
  51292. +
  51293. +  return Qnil;
  51294. +}
  51295. +
  51296. +
  51297. +void
  51298. +syms_of_amiga_xmenu (void)
  51299. +{
  51300. +  staticpro (&menu_items);
  51301. +  menu_items = Qnil;
  51302. +}
  51303. diff -rup --new-file baseline/fsf/emacs/src/amiga_xmenu_protos.h amiga/fsf/emacs/src/amiga_xmenu_protos.h
  51304. --- baseline/fsf/emacs/src/amiga_xmenu_protos.h    Wed Dec 31 17:00:00 1969
  51305. +++ amiga/fsf/emacs/src/amiga_xmenu_protos.h    Sat Sep 28 00:00:00 1996
  51306. @@ -0,0 +1,63 @@
  51307. +/* Prototypes for functions defined in
  51308. +amiga_xmenu.c
  51309. + */
  51310. +
  51311. +extern int menu_items;
  51312. +
  51313. +extern int menu_items_allocated;
  51314. +
  51315. +extern int menu_items_num_items;
  51316. +
  51317. +extern int menu_items_used;
  51318. +
  51319. +extern int menu_items_n_panes;
  51320. +
  51321. +extern int menu_items_submenu_depth;
  51322. +
  51323. +extern int menu_items_string_len;
  51324. +
  51325. +void init_menu_items(void);
  51326. +
  51327. +void finish_menu_items(void);
  51328. +
  51329. +void discard_menu_items(void);
  51330. +
  51331. +void grow_menu_items(void);
  51332. +
  51333. +void push_submenu_start(void);
  51334. +
  51335. +void push_submenu_end(void);
  51336. +
  51337. +void push_left_right_boundary(void);
  51338. +
  51339. +void push_menu_pane(int , int , int );
  51340. +
  51341. +void push_menu_item(int , int , int , int , int );
  51342. +
  51343. +int menu_item_equiv_key(int item_string,
  51344. +                        int item1,
  51345. +                        int * descrip_ptr);
  51346. +
  51347. +int menu_item_enabled_p_1(int arg);
  51348. +
  51349. +int menu_item_enabled_p(int def,
  51350. +                        int notreal);
  51351. +
  51352. +void make_amiga_menu(int , int );
  51353. +
  51354. +void print_amiga_menu(int );
  51355. +
  51356. +void make_amiga_menu_1(int , int );
  51357. +
  51358. +void make_menu_items(int , int );
  51359. +
  51360. +int make_menu_items_1(int , int , int );
  51361. +
  51362. +int map_menu_selection(int , int , int , int * );
  51363. +
  51364. +void set_frame_menubar(int , int );
  51365. +
  51366. +int map_event_to_object(struct input_event * , int );
  51367. +
  51368. +void syms_of_amiga_xmenu(void);
  51369. +
  51370. diff -rup --new-file baseline/fsf/emacs/src/buffer.c amiga/fsf/emacs/src/buffer.c
  51371. --- baseline/fsf/emacs/src/buffer.c    Sun Sep  4 16:56:11 1994
  51372. +++ amiga/fsf/emacs/src/buffer.c    Sat Sep 28 00:00:00 1996
  51373. @@ -37,6 +37,10 @@ the Free Software Foundation, 675 Mass A
  51374.  #include "indent.h"
  51375.  #include "blockinput.h"
  51376.  
  51377. +#ifdef USE_PROTOS
  51378. +#include "protos.h"
  51379. +#endif
  51380. +
  51381.  struct buffer *current_buffer;        /* the current buffer */
  51382.  
  51383.  /* First buffer in chain of all buffers (in reverse order of creation).
  51384. @@ -2456,8 +2460,12 @@ init_buffer ()
  51385.  #ifndef VMS
  51386.    /* Maybe this should really use some standard subroutine
  51387.       whose definition is filename syntax dependent.  */
  51388. -  if (buf[strlen (buf) - 1] != '/')
  51389. -    strcat (buf, "/");
  51390. +  if (buf[strlen (buf) - 1] != '/'
  51391. +#ifdef AMIGA
  51392. +      && buf[strlen (buf) -1] != ':'
  51393. +#endif /* AMIGA  */
  51394. +      )
  51395. +        strcat (buf, "/");
  51396.  #endif /* not VMS */
  51397.    current_buffer->directory = build_string (buf);
  51398.  
  51399. diff -rup --new-file baseline/fsf/emacs/src/buffer_protos.h amiga/fsf/emacs/src/buffer_protos.h
  51400. --- baseline/fsf/emacs/src/buffer_protos.h    Wed Dec 31 17:00:00 1969
  51401. +++ amiga/fsf/emacs/src/buffer_protos.h    Sat Sep 28 00:00:00 1996
  51402. @@ -0,0 +1,277 @@
  51403. +/* Prototypes for functions defined in
  51404. +buffer.c
  51405. + */
  51406. +
  51407. +extern struct buffer * current_buffer;
  51408. +
  51409. +extern struct buffer * all_buffers;
  51410. +
  51411. +extern struct buffer buffer_defaults;
  51412. +
  51413. +extern int Vbuffer_defaults;
  51414. +
  51415. +extern struct buffer buffer_local_flags;
  51416. +
  51417. +extern struct buffer buffer_local_symbols;
  51418. +
  51419. +extern int Vbuffer_local_symbols;
  51420. +
  51421. +extern struct buffer buffer_local_types;
  51422. +
  51423. +extern int Vbuffer_alist;
  51424. +
  51425. +extern int Vbefore_change_function;
  51426. +
  51427. +extern int Vafter_change_function;
  51428. +
  51429. +extern int Vbefore_change_functions;
  51430. +
  51431. +extern int Vafter_change_functions;
  51432. +
  51433. +extern int Vtransient_mark_mode;
  51434. +
  51435. +extern int Vinhibit_read_only;
  51436. +
  51437. +extern int Vkill_buffer_query_functions;
  51438. +
  51439. +extern int Vfirst_change_hook;
  51440. +
  51441. +extern int Qfirst_change_hook;
  51442. +
  51443. +extern int Qfundamental_mode;
  51444. +
  51445. +extern int Qmode_class;
  51446. +
  51447. +extern int Qpermanent_local;
  51448. +
  51449. +extern int Qprotected_field;
  51450. +
  51451. +extern int QSFundamental;
  51452. +
  51453. +extern int Qkill_buffer_hook;
  51454. +
  51455. +extern int Qget_file_buffer;
  51456. +
  51457. +extern int Qoverlayp;
  51458. +
  51459. +extern int Qpriority;
  51460. +
  51461. +extern int Qwindow;
  51462. +
  51463. +extern int Qmodification_hooks;
  51464. +
  51465. +extern int Qinsert_in_front_hooks;
  51466. +
  51467. +extern int Qinsert_behind_hooks;
  51468. +
  51469. +int nsberror(int spec);
  51470. +
  51471. +extern struct Lisp_Subr Sbuffer_list;
  51472. +
  51473. +int Fbuffer_list(void);
  51474. +
  51475. +extern struct Lisp_Subr Sget_buffer;
  51476. +
  51477. +int Fget_buffer(int );
  51478. +
  51479. +extern struct Lisp_Subr Sget_file_buffer;
  51480. +
  51481. +int Fget_file_buffer(int );
  51482. +
  51483. +extern int buffer_count;
  51484. +
  51485. +extern struct Lisp_Subr Sget_buffer_create;
  51486. +
  51487. +int Fget_buffer_create(int );
  51488. +
  51489. +void reset_buffer(register struct buffer * b);
  51490. +
  51491. +int reset_buffer_local_variables(register struct buffer * b);
  51492. +
  51493. +extern struct Lisp_Subr Sgenerate_new_buffer_name;
  51494. +
  51495. +int Fgenerate_new_buffer_name(int , int );
  51496. +
  51497. +extern struct Lisp_Subr Sbuffer_name;
  51498. +
  51499. +int Fbuffer_name(int );
  51500. +
  51501. +extern struct Lisp_Subr Sbuffer_file_name;
  51502. +
  51503. +int Fbuffer_file_name(int );
  51504. +
  51505. +extern struct Lisp_Subr Sbuffer_local_variables;
  51506. +
  51507. +int Fbuffer_local_variables(int );
  51508. +
  51509. +extern struct Lisp_Subr Sbuffer_modified_p;
  51510. +
  51511. +int Fbuffer_modified_p(int );
  51512. +
  51513. +extern struct Lisp_Subr Sset_buffer_modified_p;
  51514. +
  51515. +int Fset_buffer_modified_p(int );
  51516. +
  51517. +extern struct Lisp_Subr Sbuffer_modified_tick;
  51518. +
  51519. +int Fbuffer_modified_tick(int );
  51520. +
  51521. +extern struct Lisp_Subr Srename_buffer;
  51522. +
  51523. +int Frename_buffer(int , int );
  51524. +
  51525. +extern struct Lisp_Subr Sother_buffer;
  51526. +
  51527. +int Fother_buffer(int , int );
  51528. +
  51529. +extern struct Lisp_Subr Sbuffer_disable_undo;
  51530. +
  51531. +int Fbuffer_disable_undo(int );
  51532. +
  51533. +extern struct Lisp_Subr Sbuffer_enable_undo;
  51534. +
  51535. +int Fbuffer_enable_undo(int );
  51536. +
  51537. +extern struct Lisp_Subr Skill_buffer;
  51538. +
  51539. +int Fkill_buffer(int );
  51540. +
  51541. +int record_buffer(int buf);
  51542. +
  51543. +extern struct Lisp_Subr Sswitch_to_buffer;
  51544. +
  51545. +int Fswitch_to_buffer(int , int );
  51546. +
  51547. +extern struct Lisp_Subr Spop_to_buffer;
  51548. +
  51549. +int Fpop_to_buffer(int , int );
  51550. +
  51551. +extern struct Lisp_Subr Scurrent_buffer;
  51552. +
  51553. +int Fcurrent_buffer(void);
  51554. +
  51555. +void set_buffer_internal(register struct buffer * b);
  51556. +
  51557. +extern struct Lisp_Subr Sset_buffer;
  51558. +
  51559. +int Fset_buffer(int );
  51560. +
  51561. +extern struct Lisp_Subr Sbarf_if_buffer_read_only;
  51562. +
  51563. +int Fbarf_if_buffer_read_only(void);
  51564. +
  51565. +extern struct Lisp_Subr Sbury_buffer;
  51566. +
  51567. +int Fbury_buffer(int );
  51568. +
  51569. +extern struct Lisp_Subr Serase_buffer;
  51570. +
  51571. +int Ferase_buffer(void);
  51572. +
  51573. +int validate_region(register int * b,
  51574. +                    register int * e);
  51575. +
  51576. +int list_buffers_1(int files);
  51577. +
  51578. +extern struct Lisp_Subr Slist_buffers;
  51579. +
  51580. +int Flist_buffers(int );
  51581. +
  51582. +extern struct Lisp_Subr Skill_all_local_variables;
  51583. +
  51584. +int Fkill_all_local_variables(void);
  51585. +
  51586. +int overlays_at(int pos,
  51587. +                int extend,
  51588. +                int ** vec_ptr,
  51589. +                int * len_ptr,
  51590. +                int * next_ptr);
  51591. +
  51592. +int compare_overlays(struct sortvec * s1,
  51593. +                     struct sortvec * s2);
  51594. +
  51595. +int sort_overlays(int * overlay_vec,
  51596. +                  int noverlays,
  51597. +                  struct window * w);
  51598. +
  51599. +void recenter_overlay_lists(struct buffer * buf,
  51600. +                            int pos);
  51601. +
  51602. +void fix_overlays_in_range(register int start,
  51603. +                           register int end);
  51604. +
  51605. +extern struct Lisp_Subr Soverlayp;
  51606. +
  51607. +int Foverlayp(int );
  51608. +
  51609. +extern struct Lisp_Subr Smake_overlay;
  51610. +
  51611. +int Fmake_overlay(int , int , int );
  51612. +
  51613. +extern struct Lisp_Subr Smove_overlay;
  51614. +
  51615. +int Fmove_overlay(int , int , int , int );
  51616. +
  51617. +extern struct Lisp_Subr Sdelete_overlay;
  51618. +
  51619. +int Fdelete_overlay(int );
  51620. +
  51621. +extern struct Lisp_Subr Soverlay_start;
  51622. +
  51623. +int Foverlay_start(int );
  51624. +
  51625. +extern struct Lisp_Subr Soverlay_end;
  51626. +
  51627. +int Foverlay_end(int );
  51628. +
  51629. +extern struct Lisp_Subr Soverlay_buffer;
  51630. +
  51631. +int Foverlay_buffer(int );
  51632. +
  51633. +extern struct Lisp_Subr Soverlay_properties;
  51634. +
  51635. +int Foverlay_properties(int );
  51636. +
  51637. +extern struct Lisp_Subr Soverlays_at;
  51638. +
  51639. +int Foverlays_at(int );
  51640. +
  51641. +extern struct Lisp_Subr Snext_overlay_change;
  51642. +
  51643. +int Fnext_overlay_change(int );
  51644. +
  51645. +extern struct Lisp_Subr Soverlay_lists;
  51646. +
  51647. +int Foverlay_lists(void);
  51648. +
  51649. +extern struct Lisp_Subr Soverlay_recenter;
  51650. +
  51651. +int Foverlay_recenter(int );
  51652. +
  51653. +extern struct Lisp_Subr Soverlay_get;
  51654. +
  51655. +int Foverlay_get(int , int );
  51656. +
  51657. +extern struct Lisp_Subr Soverlay_put;
  51658. +
  51659. +int Foverlay_put(int , int , int );
  51660. +
  51661. +void verify_overlay_modification(int start,
  51662. +                                 int end);
  51663. +
  51664. +void call_overlay_mod_hooks(int list,
  51665. +                            int overlay,
  51666. +                            int start,
  51667. +                            int end);
  51668. +
  51669. +void buffer_slot_type_mismatch(int valcontents,
  51670. +                               int newval);
  51671. +
  51672. +int init_buffer_once(void);
  51673. +
  51674. +int init_buffer(void);
  51675. +
  51676. +int syms_of_buffer(void);
  51677. +
  51678. +int keys_of_buffer(void);
  51679. +
  51680. diff -rup --new-file baseline/fsf/emacs/src/bytecode_protos.h amiga/fsf/emacs/src/bytecode_protos.h
  51681. --- baseline/fsf/emacs/src/bytecode_protos.h    Wed Dec 31 17:00:00 1969
  51682. +++ amiga/fsf/emacs/src/bytecode_protos.h    Sat Sep 28 00:00:00 1996
  51683. @@ -0,0 +1,12 @@
  51684. +/* Prototypes for functions defined in
  51685. +bytecode.c
  51686. + */
  51687. +
  51688. +extern int Qbytecode;
  51689. +
  51690. +extern struct Lisp_Subr Sbyte_code;
  51691. +
  51692. +int Fbyte_code(int , int , int );
  51693. +
  51694. +int syms_of_bytecode(void);
  51695. +
  51696. diff -rup --new-file baseline/fsf/emacs/src/callint_protos.h amiga/fsf/emacs/src/callint_protos.h
  51697. --- baseline/fsf/emacs/src/callint_protos.h    Wed Dec 31 17:00:00 1969
  51698. +++ amiga/fsf/emacs/src/callint_protos.h    Sat Sep 28 00:00:00 1996
  51699. @@ -0,0 +1,48 @@
  51700. +/* Prototypes for functions defined in
  51701. +callint.c
  51702. + */
  51703. +
  51704. +extern int Vprefix_arg;
  51705. +
  51706. +extern int Vcurrent_prefix_arg;
  51707. +
  51708. +extern int Qminus;
  51709. +
  51710. +extern int Qcall_interactively;
  51711. +
  51712. +extern int Vcommand_history;
  51713. +
  51714. +extern int Vcommand_debug_status;
  51715. +
  51716. +extern int Qcommand_debug_status;
  51717. +
  51718. +extern int Qenable_recursive_minibuffers;
  51719. +
  51720. +extern int Vmark_even_if_inactive;
  51721. +
  51722. +extern int Qlist;
  51723. +
  51724. +extern int preserved_fns;
  51725. +
  51726. +extern struct Lisp_Subr Sinteractive;
  51727. +
  51728. +int Finteractive(int );
  51729. +
  51730. +int quotify_arg(register int exp);
  51731. +
  51732. +int quotify_args(int exp);
  51733. +
  51734. +extern char * callint_argfuns[5];
  51735. +
  51736. +void check_mark(void);
  51737. +
  51738. +extern struct Lisp_Subr Scall_interactively;
  51739. +
  51740. +int Fcall_interactively(int , int );
  51741. +
  51742. +extern struct Lisp_Subr Sprefix_numeric_value;
  51743. +
  51744. +int Fprefix_numeric_value(int );
  51745. +
  51746. +int syms_of_callint(void);
  51747. +
  51748. diff -rup --new-file baseline/fsf/emacs/src/callproc.c amiga/fsf/emacs/src/callproc.c
  51749. --- baseline/fsf/emacs/src/callproc.c    Wed Aug 17 14:42:19 1994
  51750. +++ amiga/fsf/emacs/src/callproc.c    Sat Sep 28 00:00:00 1996
  51751. @@ -24,6 +24,8 @@ the Free Software Foundation, 675 Mass A
  51752.  #include <config.h>
  51753.  #include <stdio.h>
  51754.  
  51755. +#include "paths.h"
  51756. +
  51757.  extern int errno;
  51758.  extern char *strerror ();
  51759.  
  51760. @@ -327,6 +329,22 @@ If you quit, the process is killed with 
  51761.  #endif
  51762.      }
  51763.  
  51764. +#ifdef AMIGA
  51765. +  {
  51766. +    register unsigned char *temp;
  51767. +
  51768. +    if (XTYPE (current_buffer->directory) == Lisp_String)
  51769. +      {
  51770. +    register int i;
  51771. +
  51772. +    i = XSTRING (current_buffer->directory)->size;
  51773. +    temp = (unsigned char *) alloca (i + 1);
  51774. +    bcopy (XSTRING (current_buffer->directory)->data, temp, i);
  51775. +    temp[i] = 0;
  51776. +      }
  51777. +    pid = exec(new_argv[0], new_argv, filefd, fd[1], temp, amiga_process_stack_size);
  51778. +  }
  51779. +#else  
  51780.    {
  51781.      /* child_setup must clobber environ in systems with true vfork.
  51782.         Protect it from permanent change.  */
  51783. @@ -383,6 +401,7 @@ If you quit, the process is killed with 
  51784.      if (fd1 >= 0)
  51785.        close (fd1);
  51786.    }
  51787. +#endif /* not AMIGA */
  51788.  
  51789.    if (pid < 0)
  51790.      {
  51791. @@ -511,11 +530,15 @@ If you quit, the process is killed with 
  51792.    strcat (tempfile, "detmp.XXX");
  51793.  #else /* not MSDOS */
  51794.  
  51795. +#ifdef PATH_TEMP
  51796. +  strcpy (tempfile, PATH_TEMP);
  51797. +#else /* not PATH_TEMP */
  51798.  #ifdef VMS
  51799.    strcpy (tempfile, "tmp:emacsXXXXXX.");
  51800.  #else
  51801.    strcpy (tempfile, "/tmp/emacsXXXXXX");
  51802.  #endif
  51803. +#endif /* not PATH_TEMP */
  51804.  #endif /* not MSDOS */
  51805.  
  51806.    mktemp (tempfile);
  51807. @@ -543,6 +566,7 @@ If you quit, the process is killed with 
  51808.  }
  51809.  
  51810.  #ifndef VMS /* VMS version is in vmsproc.c.  */
  51811. +#ifndef AMIGA
  51812.  
  51813.  /* This is the last thing run in a newly forked inferior
  51814.     either synchronous or asynchronous.
  51815. @@ -727,7 +751,9 @@ child_setup (in, out, err, new_argv, set
  51816.    _exit (1);
  51817.  #endif /* not MSDOS */
  51818.  }
  51819. +#endif /* not AMIGA */
  51820.  
  51821. +#ifndef AMIGA
  51822.  /* Move the file descriptor FD so that its number is not less than MIN.
  51823.     If the file descriptor is moved at all, the original is freed.  */
  51824.  int
  51825. @@ -756,6 +782,7 @@ relocate_fd (fd, min)
  51826.        return new;
  51827.      }
  51828.  }
  51829. +#endif /* not AMIGA */
  51830.  
  51831.  static int
  51832.  getenv_internal (var, varlen, value, valuelen)
  51833. @@ -815,7 +842,17 @@ egetenv (var)
  51834.    if (getenv_internal (var, strlen (var), &value, &valuelen))
  51835.      return value;
  51836.    else
  51837. +#ifdef AMIGA
  51838. +    /* a global env var on the Amiga does not appear in envp.  I don't
  51839. +     * think that there is a parallel for most other systems.
  51840. +     * Anyways, we get thing explicitly here.  Note that other
  51841. +     * processes can change global env vars out from under us --- so
  51842. +     * caching them isn't smart.  Local vars should be caught
  51843. +     * somwhere... either by this func, or before.  */
  51844. +    return(getenv(var));
  51845. +#else
  51846.      return 0;
  51847. +#endif
  51848.  }
  51849.  
  51850.  #endif /* not VMS */
  51851. @@ -838,7 +875,17 @@ init_callproc_1 ()
  51852.       PATH_EXEC path from paths.h.  */
  51853.    Vexec_path = decode_env_path ("EMACSPATH", PATH_EXEC);
  51854.    Vexec_directory = Ffile_name_as_directory (Fcar (Vexec_path));
  51855. +#ifndef AMIGA
  51856.    Vexec_path = nconc2 (decode_env_path ("PATH", ""), Vexec_path);
  51857. +#else
  51858. +  {
  51859. +    char *amiga_path(), *apath = amiga_path();
  51860. +
  51861. +    Vexec_path = nconc2 (decode_env_path (0, apath), Vexec_path);
  51862. +    Vexec_path = nconc2 (decode_env_path (0, PATH_BIN), Vexec_path);
  51863. +    free(apath);
  51864. +  }
  51865. +#endif  
  51866.  }
  51867.  
  51868.  /* This is run after init_cmdargs, so that Vinvocation_directory is valid.  */
  51869. @@ -890,8 +937,13 @@ init_callproc ()
  51870.        tem1 = Ffile_exists_p (tem);
  51871.        if (NILP (tem1))
  51872.      {
  51873. +#ifdef RELPATH_ETC        
  51874. +      newdir = Fexpand_file_name (build_string (RELPATH_ETC),
  51875. +                      build_string (PATH_DUMPLOADSEARCH));
  51876. +#else
  51877.        newdir = Fexpand_file_name (build_string ("../etc/"),
  51878.                        build_string (PATH_DUMPLOADSEARCH));
  51879. +#endif
  51880.        tem = Fexpand_file_name (build_string ("GNU"), newdir);
  51881.        tem1 = Ffile_exists_p (tem);
  51882.        if (!NILP (tem1))
  51883. @@ -921,7 +973,7 @@ init_callproc ()
  51884.    Vshell_file_name = build_string ("*dcl*");
  51885.  #else
  51886.    sh = (char *) getenv ("SHELL");
  51887. -  Vshell_file_name = build_string (sh ? sh : "/bin/sh");
  51888. +  Vshell_file_name = build_string (sh ? sh : NAME_SHELL);
  51889.  #endif
  51890.  }
  51891.  
  51892. diff -rup --new-file baseline/fsf/emacs/src/callproc_protos.h amiga/fsf/emacs/src/callproc_protos.h
  51893. --- baseline/fsf/emacs/src/callproc_protos.h    Wed Dec 31 17:00:00 1969
  51894. +++ amiga/fsf/emacs/src/callproc_protos.h    Sat Sep 28 00:00:00 1996
  51895. @@ -0,0 +1,59 @@
  51896. +/* Prototypes for functions defined in
  51897. +callproc.c
  51898. + */
  51899. +
  51900. +extern int Vexec_path;
  51901. +
  51902. +extern int Vexec_directory;
  51903. +
  51904. +extern int Vdata_directory;
  51905. +
  51906. +extern int Vdoc_directory;
  51907. +
  51908. +extern int Vconfigure_info_directory;
  51909. +
  51910. +extern int Vshell_file_name;
  51911. +
  51912. +extern int Vprocess_environment;
  51913. +
  51914. +extern int synch_process_alive;
  51915. +
  51916. +extern char * synch_process_death;
  51917. +
  51918. +extern int synch_process_retcode;
  51919. +
  51920. +extern int call_process_exited;
  51921. +
  51922. +int call_process_kill(int fdpid);
  51923. +
  51924. +int call_process_cleanup(int fdpid);
  51925. +
  51926. +extern struct Lisp_Subr Scall_process;
  51927. +
  51928. +int Fcall_process(int , int * );
  51929. +
  51930. +int delete_temp_file(int name);
  51931. +
  51932. +extern struct Lisp_Subr Scall_process_region;
  51933. +
  51934. +int Fcall_process_region(int , int * );
  51935. +
  51936. +int getenv_internal(char * var,
  51937. +                    int varlen,
  51938. +                    char ** value,
  51939. +                    int * valuelen);
  51940. +
  51941. +extern struct Lisp_Subr Sgetenv;
  51942. +
  51943. +int Fgetenv(int );
  51944. +
  51945. +char * egetenv(char * var);
  51946. +
  51947. +int init_callproc_1(void);
  51948. +
  51949. +int init_callproc(void);
  51950. +
  51951. +int set_process_environment(void);
  51952. +
  51953. +int syms_of_callproc(void);
  51954. +
  51955. diff -rup --new-file baseline/fsf/emacs/src/casefiddle_protos.h amiga/fsf/emacs/src/casefiddle_protos.h
  51956. --- baseline/fsf/emacs/src/casefiddle_protos.h    Wed Dec 31 17:00:00 1969
  51957. +++ amiga/fsf/emacs/src/casefiddle_protos.h    Sat Sep 28 00:00:00 1996
  51958. @@ -0,0 +1,57 @@
  51959. +/* Prototypes for functions defined in
  51960. +casefiddle.c
  51961. + */
  51962. +
  51963. +int casify_object(enum case_action flag,
  51964. +                  int obj);
  51965. +
  51966. +extern struct Lisp_Subr Supcase;
  51967. +
  51968. +int Fupcase(int );
  51969. +
  51970. +extern struct Lisp_Subr Sdowncase;
  51971. +
  51972. +int Fdowncase(int );
  51973. +
  51974. +extern struct Lisp_Subr Scapitalize;
  51975. +
  51976. +int Fcapitalize(int );
  51977. +
  51978. +int casify_region(enum case_action flag,
  51979. +                  int b,
  51980. +                  int e);
  51981. +
  51982. +extern struct Lisp_Subr Supcase_region;
  51983. +
  51984. +int Fupcase_region(int , int );
  51985. +
  51986. +extern struct Lisp_Subr Sdowncase_region;
  51987. +
  51988. +int Fdowncase_region(int , int );
  51989. +
  51990. +extern struct Lisp_Subr Scapitalize_region;
  51991. +
  51992. +int Fcapitalize_region(int , int );
  51993. +
  51994. +int upcase_initials_region(int b,
  51995. +                           int e);
  51996. +
  51997. +int operate_on_word(int arg,
  51998. +                    int * newpoint);
  51999. +
  52000. +extern struct Lisp_Subr Supcase_word;
  52001. +
  52002. +int Fupcase_word(int );
  52003. +
  52004. +extern struct Lisp_Subr Sdowncase_word;
  52005. +
  52006. +int Fdowncase_word(int );
  52007. +
  52008. +extern struct Lisp_Subr Scapitalize_word;
  52009. +
  52010. +int Fcapitalize_word(int );
  52011. +
  52012. +int syms_of_casefiddle(void);
  52013. +
  52014. +int keys_of_casefiddle(void);
  52015. +
  52016. diff -rup --new-file baseline/fsf/emacs/src/casetab_protos.h amiga/fsf/emacs/src/casetab_protos.h
  52017. --- baseline/fsf/emacs/src/casetab_protos.h    Wed Dec 31 17:00:00 1969
  52018. +++ amiga/fsf/emacs/src/casetab_protos.h    Sat Sep 28 00:00:00 1996
  52019. @@ -0,0 +1,46 @@
  52020. +/* Prototypes for functions defined in
  52021. +casetab.c
  52022. + */
  52023. +
  52024. +extern int Qcase_table_p;
  52025. +
  52026. +extern int Vascii_downcase_table;
  52027. +
  52028. +extern int Vascii_upcase_table;
  52029. +
  52030. +extern int Vascii_canon_table;
  52031. +
  52032. +extern int Vascii_eqv_table;
  52033. +
  52034. +extern struct Lisp_Subr Scase_table_p;
  52035. +
  52036. +int Fcase_table_p(int );
  52037. +
  52038. +int check_case_table(int obj);
  52039. +
  52040. +extern struct Lisp_Subr Scurrent_case_table;
  52041. +
  52042. +int Fcurrent_case_table(void);
  52043. +
  52044. +extern struct Lisp_Subr Sstandard_case_table;
  52045. +
  52046. +int Fstandard_case_table(void);
  52047. +
  52048. +extern struct Lisp_Subr Sset_case_table;
  52049. +
  52050. +int Fset_case_table(int );
  52051. +
  52052. +extern struct Lisp_Subr Sset_standard_case_table;
  52053. +
  52054. +int Fset_standard_case_table(int );
  52055. +
  52056. +int set_case_table(int table,
  52057. +                   int standard);
  52058. +
  52059. +void compute_trt_inverse(register unsigned char * trt,
  52060. +                         register unsigned char * inverse);
  52061. +
  52062. +int init_casetab_once(void);
  52063. +
  52064. +int syms_of_casetab(void);
  52065. +
  52066. diff -rup --new-file baseline/fsf/emacs/src/cdodump.sh amiga/fsf/emacs/src/cdodump.sh
  52067. --- baseline/fsf/emacs/src/cdodump.sh    Wed Dec 31 17:00:00 1969
  52068. +++ amiga/fsf/emacs/src/cdodump.sh    Sat Sep 28 00:00:00 1996
  52069. @@ -0,0 +1,5 @@
  52070. +semacs
  52071. +if -f GNUEmacs-19.28:etc/EMACS-DATA then ; rm GNUEmacs-19.28:etc/EMACS-DATA ; endif
  52072. +Stack 500000
  52073. +stack 500000
  52074. +cpr -w /src/temacs -batch -l loadup dump
  52075. diff -rup --new-file baseline/fsf/emacs/src/cm.c amiga/fsf/emacs/src/cm.c
  52076. --- baseline/fsf/emacs/src/cm.c    Mon Apr 25 18:31:05 1994
  52077. +++ amiga/fsf/emacs/src/cm.c    Sat Sep 28 00:00:00 1996
  52078. @@ -24,6 +24,10 @@ the Free Software Foundation, 675 Mass A
  52079.  #include "cm.h"
  52080.  #include "termhooks.h"
  52081.  
  52082. +#ifdef USE_PROTOS
  52083. +#include "protos.h"
  52084. +#endif
  52085. +
  52086.  #define    BIG    9999        /* 9999 good on VAXen.  For 16 bit machines
  52087.                     use about 2000.... */
  52088.  
  52089. diff -rup --new-file baseline/fsf/emacs/src/cm_protos.h amiga/fsf/emacs/src/cm_protos.h
  52090. --- baseline/fsf/emacs/src/cm_protos.h    Wed Dec 31 17:00:00 1969
  52091. +++ amiga/fsf/emacs/src/cm_protos.h    Sat Sep 28 00:00:00 1996
  52092. @@ -0,0 +1,25 @@
  52093. +/* Prototypes for functions defined in
  52094. +cm.c
  52095. + */
  52096. +
  52097. +extern int cost;
  52098. +
  52099. +int evalcost(int c);
  52100. +
  52101. +void cmputc(int c);
  52102. +
  52103. +int cmcostinit(void);
  52104. +
  52105. +int calccost(int srcy,
  52106. +             int srcx,
  52107. +             int dsty,
  52108. +             int dstx,
  52109. +             int doit);
  52110. +
  52111. +int cmgoto(int row,
  52112. +           int col);
  52113. +
  52114. +int Wcm_clear(void);
  52115. +
  52116. +int Wcm_init(void);
  52117. +
  52118. diff -rup --new-file baseline/fsf/emacs/src/cmds_protos.h amiga/fsf/emacs/src/cmds_protos.h
  52119. --- baseline/fsf/emacs/src/cmds_protos.h    Wed Dec 31 17:00:00 1969
  52120. +++ amiga/fsf/emacs/src/cmds_protos.h    Sat Sep 28 00:00:00 1996
  52121. @@ -0,0 +1,55 @@
  52122. +/* Prototypes for functions defined in
  52123. +cmds.c
  52124. + */
  52125. +
  52126. +extern int Qkill_forward_chars;
  52127. +
  52128. +extern int Qkill_backward_chars;
  52129. +
  52130. +extern int Vblink_paren_function;
  52131. +
  52132. +extern int Qoverwrite_mode_binary;
  52133. +
  52134. +extern struct Lisp_Subr Sforward_char;
  52135. +
  52136. +int Fforward_char(int );
  52137. +
  52138. +extern struct Lisp_Subr Sbackward_char;
  52139. +
  52140. +int Fbackward_char(int );
  52141. +
  52142. +extern struct Lisp_Subr Sforward_line;
  52143. +
  52144. +int Fforward_line(int );
  52145. +
  52146. +extern struct Lisp_Subr Sbeginning_of_line;
  52147. +
  52148. +int Fbeginning_of_line(int );
  52149. +
  52150. +extern struct Lisp_Subr Send_of_line;
  52151. +
  52152. +int Fend_of_line(int );
  52153. +
  52154. +extern struct Lisp_Subr Sdelete_char;
  52155. +
  52156. +int Fdelete_char(int , int );
  52157. +
  52158. +extern struct Lisp_Subr Sdelete_backward_char;
  52159. +
  52160. +int Fdelete_backward_char(int , int );
  52161. +
  52162. +extern struct Lisp_Subr Sself_insert_command;
  52163. +
  52164. +int Fself_insert_command(int );
  52165. +
  52166. +extern struct Lisp_Subr Snewline;
  52167. +
  52168. +int Fnewline(int );
  52169. +
  52170. +int internal_self_insert(int c1,
  52171. +                         int noautofill);
  52172. +
  52173. +int syms_of_cmds(void);
  52174. +
  52175. +int keys_of_cmds(void);
  52176. +
  52177. diff -rup --new-file baseline/fsf/emacs/src/config.h.in-sasc amiga/fsf/emacs/src/config.h.in-sasc
  52178. --- baseline/fsf/emacs/src/config.h.in-sasc    Wed Dec 31 17:00:00 1969
  52179. +++ amiga/fsf/emacs/src/config.h.in-sasc    Sat Sep 28 00:00:00 1996
  52180. @@ -0,0 +1,284 @@
  52181. +/* src/config.h.  Generated automatically by configure and HAND MODIFIED
  52182. +   for use with SAS/C on AmigaOS.  Must track any changes in automatically
  52183. +   generated config.h, preserved as config.h-gcc.  */
  52184. +
  52185. +/* GNU Emacs site configuration template file.  -*- C -*-
  52186. +   Copyright (C) 1988, 1993, 1994 Free Software Foundation, Inc.
  52187. +
  52188. +This file is part of GNU Emacs.
  52189. +
  52190. +GNU Emacs is distributed in the hope that it will be useful,
  52191. +but WITHOUT ANY WARRANTY.  No author or distributor
  52192. +accepts responsibility to anyone for the consequences of using it
  52193. +or for whether it serves any particular purpose or works at all,
  52194. +unless he says so in writing.  Refer to the GNU Emacs General Public
  52195. +License for full details.
  52196. +
  52197. +Everyone is granted permission to copy, modify and redistribute
  52198. +GNU Emacs, but only under the conditions described in the
  52199. +GNU Emacs General Public License.   A copy of this license is
  52200. +supposed to have been given to you along with GNU Emacs so you
  52201. +can know your rights and responsibilities.  It should be in a
  52202. +file named COPYING.  Among other things, the copyright notice
  52203. +and this notice must be preserved on all copies.  */
  52204. +
  52205. +
  52206. +/* No code in Emacs #includes config.h twice, but some of the code
  52207. +   intended to work with other packages as well (like gmalloc.c) 
  52208. +   think they can include it as many times as they like.  */
  52209. +#ifndef EMACS_CONFIG_H
  52210. +#define EMACS_CONFIG_H
  52211. +
  52212. +
  52213. +/* These are all defined in the top-level Makefile by configure.
  52214. +   They're here only for reference.  */
  52215. +
  52216. +/* Define LISP_FLOAT_TYPE if you want emacs to support floating-point
  52217. +   numbers. */
  52218. +/* #undef LISP_FLOAT_TYPE */
  52219. +
  52220. +/* Define GNU_MALLOC if you want to use the *new* GNU memory allocator. */
  52221. +/* #undef GNU_MALLOC */
  52222. +
  52223. +/* Define REL_ALLOC if you want to use the relocating allocator for
  52224. +   buffer space. */
  52225. +/* #undef REL_ALLOC */
  52226. +  
  52227. +/* Define HAVE_X_WINDOWS if you want to use the X window system.  */
  52228. +/* #undef HAVE_X_WINDOWS */
  52229. +
  52230. +/* Define HAVE_X11 if you want to use version 11 of X windows.
  52231. +   Otherwise, Emacs expects to use version 10.  */
  52232. +/* #undef HAVE_X11 */
  52233. +
  52234. +/* Define if we have the X11R6 or newer.  */
  52235. +/* #undef HAVE_X11R6 */
  52236. +
  52237. +/* Define if using an X toolkit.  */
  52238. +/* #undef USE_X_TOOLKIT */
  52239. +
  52240. +/* Define this if you're using XFree386.  */
  52241. +/* #undef HAVE_XFREE386 */
  52242. +
  52243. +/* Define HAVE_X_MENU if you want to use the X window menu system.
  52244. +   This appears to work on some machines that support X
  52245. +   and not on others.  */
  52246. +/* #undef HAVE_X_MENU */
  52247. +
  52248. +/* Define if we have the X11R6 or newer version of Xt.  */
  52249. +/* #undef HAVE_X11XTR6 */
  52250. +
  52251. +/* Define if netdb.h declares h_errno.  */
  52252. +/* #undef HAVE_H_ERRNO */
  52253. +
  52254. +/* If we're using any sort of window system, define MULTI_FRAME.  */
  52255. +#ifdef HAVE_X_WINDOWS
  52256. +#define MULTI_FRAME
  52257. +#endif
  52258. +
  52259. +/* Define USE_TEXT_PROPERTIES to support visual and other properties
  52260. +   on text. */
  52261. +#define USE_TEXT_PROPERTIES
  52262. +
  52263. +/* Define USER_FULL_NAME to return a string
  52264. +   that is the user's full name.
  52265. +   It can assume that the variable `pw'
  52266. +   points to the password file entry for this user.
  52267. +
  52268. +   At some sites, the pw_gecos field contains
  52269. +   the user's full name.  If neither this nor any other
  52270. +   field contains the right thing, use pw_name,
  52271. +   giving the user's login name, since that is better than nothing.  */
  52272. +#define USER_FULL_NAME pw->pw_gecos
  52273. +
  52274. +/* Define AMPERSAND_FULL_NAME if you use the convention
  52275. +   that & in the full name stands for the login id.  */
  52276. +/* #undef AMPERSAND_FULL_NAME */
  52277. +
  52278. +/* Some things figured out by the configure script, grouped as they are in
  52279. +   configure.in.  */
  52280. +/* #undef HAVE_SYS_TIMEB_H */
  52281. +/* #undef HAVE_SYS_TIME_H */
  52282. +/* #undef HAVE_UNISTD_H */
  52283. +/* #undef STDC_HEADERS */
  52284. +/* #undef TIME_WITH_SYS_TIME */
  52285. +
  52286. +/* #undef HAVE_LIBDNET */
  52287. +/* #undef HAVE_LIBRESOLV */
  52288. +
  52289. +/* #undef HAVE_ALLOCA_H */
  52290. +
  52291. +/* #undef HAVE_GETTIMEOFDAY */
  52292. +/* #undef HAVE_GETHOSTNAME */
  52293. +/* #undef HAVE_DUP2 */
  52294. +/* #undef HAVE_RENAME */
  52295. +/* #undef HAVE_CLOSEDIR */
  52296. +
  52297. +/* #undef TM_IN_SYS_TIME */
  52298. +/* #undef HAVE_TM_ZONE */
  52299. +/* #undef HAVE_TZNAME */
  52300. +
  52301. +/* #undef const */
  52302. +
  52303. +/* #undef HAVE_LONG_FILE_NAMES */
  52304. +
  52305. +/* #undef CRAY_STACKSEG_END */
  52306. +/* #undef STACK_DIRECTION */
  52307. +
  52308. +#define UNEXEC_SRC amiga_dump.c
  52309. +
  52310. +/* #undef HAVE_LIBXBSD */
  52311. +/* #undef HAVE_XRMSETDATABASE */
  52312. +/* #undef HAVE_XSCREENRESOURCESTRING */
  52313. +/* #undef HAVE_XSCREENNUMBEROFSCREEN */
  52314. +/* #undef HAVE_XSETWMPROTOCOLS */
  52315. +
  52316. +/* #undef HAVE_MKDIR */
  52317. +/* #undef HAVE_RMDIR */
  52318. +/* #undef HAVE_RANDOM */
  52319. +/* #undef HAVE_LRAND48 */
  52320. +/* #undef HAVE_BCOPY */
  52321. +/* #undef HAVE_BCMP */
  52322. +/* #undef HAVE_LOGB */
  52323. +/* #undef HAVE_FREXP */
  52324. +/* #undef HAVE_FMOD */
  52325. +/* #undef HAVE_FTIME */
  52326. +/* #undef HAVE_RES_INIT */ /* For -lresolv on Suns.  */
  52327. +/* #undef HAVE_SETSID */
  52328. +/* #undef HAVE_FPATHCONF */
  52329. +
  52330. +/* #undef HAVE_INET_SOCKETS */
  52331. +
  52332. +/* #undef HAVE_AIX_SMT_EXP */
  52333. +
  52334. +/* Define if you have the ANSI `strerror' function.
  52335. +   Otherwise you must have the variable `char *sys_errlist[]'.  */
  52336. +#define HAVE_STRERROR
  52337. +
  52338. +/* Define if `sys_siglist' is declared by <signal.h>.  */
  52339. +/* #undef SYS_SIGLIST_DECLARED */
  52340. +
  52341. +/* If using GNU, then support inline function declarations. */
  52342. +#ifdef __GNUC__
  52343. +#define INLINE __inline__
  52344. +#else
  52345. +#define INLINE
  52346. +#endif
  52347. +
  52348. +#define EMACS_CONFIGURATION "amigaos"
  52349. +
  52350. +/* The configuration script defines opsysfile to be the name of the
  52351. +   s/*.h file that describes the system type you are using.  The file
  52352. +   is chosen based on the configuration name you give.
  52353. +
  52354. +   See the file ../etc/MACHINES for a list of systems and the
  52355. +   configuration names to use for them.
  52356. +
  52357. +   See s/template.h for documentation on writing s/*.h files.  */
  52358. +#define config_opsysfile "s/amigaos.h" 
  52359. +#include config_opsysfile
  52360. +
  52361. +/* The configuration script defines machfile to be the name of the
  52362. +   m/*.h file that describes the machine you are using.  The file is
  52363. +   chosen based on the configuration name you give.
  52364. +
  52365. +   See the file ../etc/MACHINES for a list of machines and the
  52366. +   configuration names to use for them.
  52367. +
  52368. +   See m/template.h for documentation on writing m/*.h files.  */
  52369. +#define config_machfile "m/amiga.h"
  52370. +#include config_machfile
  52371. +
  52372. +/* These typedefs shouldn't appear when alloca.s or Makefile.in
  52373. +   includes config.h.  */
  52374. +#ifndef NOT_C_CODE
  52375. +#ifndef SPECIAL_EMACS_INT
  52376. +typedef long EMACS_INT;
  52377. +typedef unsigned long EMACS_UINT;
  52378. +#endif
  52379. +#endif
  52380. +
  52381. +/* Load in the conversion definitions if this system
  52382. +   needs them and the source file being compiled has not
  52383. +   said to inhibit this.  There should be no need for you
  52384. +   to alter these lines.  */
  52385. +
  52386. +#ifdef SHORTNAMES
  52387. +#ifndef NO_SHORTNAMES
  52388. +#include "../shortnames/remap.h"
  52389. +#endif /* not NO_SHORTNAMES */
  52390. +#endif /* SHORTNAMES */
  52391. +
  52392. +/* Define `subprocesses' should be defined if you want to
  52393. +   have code for asynchronous subprocesses
  52394. +   (as used in M-x compile and M-x shell).
  52395. +   These do not work for some USG systems yet;
  52396. +   for the ones where they work, the s/*.h file defines this flag.  */
  52397. +
  52398. +#ifndef VMS
  52399. +#ifndef USG
  52400. +/* #define subprocesses */
  52401. +#endif
  52402. +#endif
  52403. +
  52404. +/* Define LD_SWITCH_SITE to contain any special flags your loader may need.  */
  52405. +/* #undef LD_SWITCH_SITE */
  52406. +
  52407. +/* Define C_SWITCH_SITE to contain any special flags your compiler needs.  */
  52408. +/* #undef C_SWITCH_SITE */
  52409. +
  52410. +/* Define LD_SWITCH_X_SITE to contain any special flags your loader
  52411. +   may need to deal with X Windows.  For instance, if you've defined
  52412. +   HAVE_X_WINDOWS above and your X libraries aren't in a place that
  52413. +   your loader can find on its own, you might want to add "-L/..." or
  52414. +   something similar.  */
  52415. +/* #undef LD_SWITCH_X_SITE */
  52416. +
  52417. +/* Define LD_SWITCH_X_SITE_AUX with an -R option
  52418. +   in case it's needed (for Solaris, for example).  */
  52419. +/* #undef LD_SWITCH_X_SITE_AUX */
  52420. +
  52421. +/* Define C_SWITCH_X_SITE to contain any special flags your compiler
  52422. +   may need to deal with X Windows.  For instance, if you've defined
  52423. +   HAVE_X_WINDOWS above and your X include files aren't in a place
  52424. +   that your compiler can find on its own, you might want to add
  52425. +   "-I/..." or something similar.  */
  52426. +/* #undef C_SWITCH_X_SITE */
  52427. +
  52428. +/* Define the return type of signal handlers if the s-xxx file
  52429. +   did not already do so.  */
  52430. +#define RETSIGTYPE void
  52431. +
  52432. +/* SIGTYPE is the macro we actually use.  */
  52433. +#ifndef SIGTYPE
  52434. +#define SIGTYPE RETSIGTYPE
  52435. +#endif
  52436. +
  52437. +/* The rest of the code currently tests the CPP symbol BSTRING.
  52438. +   Override any claims made by the system-description files.
  52439. +   Note that on some SCO version it is possible to have bcopy and not bcmp.  */
  52440. +/* #undef BSTRING */
  52441. +#if defined (HAVE_BCOPY) && defined (HAVE_BCMP)
  52442. +#define BSTRING
  52443. +#endif
  52444. +
  52445. +#define HAVE_VOLATILE
  52446. +
  52447. +/* Non-ANSI C compilers usually don't have volatile.  */
  52448. +#ifndef HAVE_VOLATILE
  52449. +#ifndef __STDC__
  52450. +#define volatile
  52451. +#endif
  52452. +#endif
  52453. +
  52454. +/* Some of the files of Emacs which are intended for use with other
  52455. +   programs assume that if you have a config.h file, you must declare
  52456. +   the type of getenv.
  52457. +
  52458. +   This declaration shouldn't appear when alloca.s or Makefile.in
  52459. +   includes config.h.  */
  52460. +#ifndef NOT_C_CODE
  52461. +extern char *getenv ();
  52462. +#endif
  52463. +
  52464. +#endif /* EMACS_CONFIG_H */
  52465. Binary files baseline/fsf/emacs/src/cover.dat and amiga/fsf/emacs/src/cover.dat differ
  52466. diff -rup --new-file baseline/fsf/emacs/src/cprinit amiga/fsf/emacs/src/cprinit
  52467. --- baseline/fsf/emacs/src/cprinit    Wed Dec 31 17:00:00 1969
  52468. +++ amiga/fsf/emacs/src/cprinit    Sat Sep 28 00:00:00 1996
  52469. @@ -0,0 +1,9 @@
  52470. +b abort
  52471. +b cpr
  52472. +b bailout
  52473. +/* b Fsignal
  52474. +b error
  52475. +b amiga_abort
  52476. +/* b command_loop_1
  52477. +b x_set_menu_bar_lines
  52478. +b set_frame_menubar
  52479. \ No newline at end of file
  52480. diff -rup --new-file baseline/fsf/emacs/src/ct.sh amiga/fsf/emacs/src/ct.sh
  52481. --- baseline/fsf/emacs/src/ct.sh    Wed Dec 31 17:00:00 1969
  52482. +++ amiga/fsf/emacs/src/ct.sh    Sat Sep 28 00:00:00 1996
  52483. @@ -0,0 +1,6 @@
  52484. +semacs 
  52485. +Stack 600000
  52486. +stack 600000
  52487. +Path reset
  52488. +Path add sc:c
  52489. +cpr -w /src/temacs -pure 300000 -malloc 400000 -q
  52490. diff -rup --new-file baseline/fsf/emacs/src/data.c amiga/fsf/emacs/src/data.c
  52491. --- baseline/fsf/emacs/src/data.c    Thu Aug  4 15:54:00 1994
  52492. +++ amiga/fsf/emacs/src/data.c    Sat Sep 28 00:00:00 1996
  52493. @@ -40,6 +40,9 @@ the Free Software Foundation, 675 Mass A
  52494.  #ifdef LISP_FLOAT_TYPE
  52495.  
  52496.  #ifdef STDC_HEADERS
  52497. +#ifdef AMIGA /* CHFIXME */
  52498. +#undef abort
  52499. +#endif
  52500.  #include <stdlib.h>
  52501.  #endif
  52502.  
  52503. diff -rup --new-file baseline/fsf/emacs/src/data_protos.h amiga/fsf/emacs/src/data_protos.h
  52504. --- baseline/fsf/emacs/src/data_protos.h    Wed Dec 31 17:00:00 1969
  52505. +++ amiga/fsf/emacs/src/data_protos.h    Sat Sep 28 00:00:00 1996
  52506. @@ -0,0 +1,457 @@
  52507. +/* Prototypes for functions defined in
  52508. +data.c
  52509. + */
  52510. +
  52511. +extern int Qnil;
  52512. +
  52513. +extern int Qt;
  52514. +
  52515. +extern int Qquote;
  52516. +
  52517. +extern int Qlambda;
  52518. +
  52519. +extern int Qsubr;
  52520. +
  52521. +extern int Qunbound;
  52522. +
  52523. +extern int Qerror_conditions;
  52524. +
  52525. +extern int Qerror_message;
  52526. +
  52527. +extern int Qtop_level;
  52528. +
  52529. +extern int Qerror;
  52530. +
  52531. +extern int Qquit;
  52532. +
  52533. +extern int Qwrong_type_argument;
  52534. +
  52535. +extern int Qargs_out_of_range;
  52536. +
  52537. +extern int Qvoid_variable;
  52538. +
  52539. +extern int Qvoid_function;
  52540. +
  52541. +extern int Qcyclic_function_indirection;
  52542. +
  52543. +extern int Qsetting_constant;
  52544. +
  52545. +extern int Qinvalid_read_syntax;
  52546. +
  52547. +extern int Qinvalid_function;
  52548. +
  52549. +extern int Qwrong_number_of_arguments;
  52550. +
  52551. +extern int Qno_catch;
  52552. +
  52553. +extern int Qend_of_file;
  52554. +
  52555. +extern int Qarith_error;
  52556. +
  52557. +extern int Qmark_inactive;
  52558. +
  52559. +extern int Qbeginning_of_buffer;
  52560. +
  52561. +extern int Qend_of_buffer;
  52562. +
  52563. +extern int Qbuffer_read_only;
  52564. +
  52565. +extern int Qintegerp;
  52566. +
  52567. +extern int Qnatnump;
  52568. +
  52569. +extern int Qwholenump;
  52570. +
  52571. +extern int Qsymbolp;
  52572. +
  52573. +extern int Qlistp;
  52574. +
  52575. +extern int Qconsp;
  52576. +
  52577. +extern int Qstringp;
  52578. +
  52579. +extern int Qarrayp;
  52580. +
  52581. +extern int Qsequencep;
  52582. +
  52583. +extern int Qbufferp;
  52584. +
  52585. +extern int Qchar_or_string_p;
  52586. +
  52587. +extern int Qmarkerp;
  52588. +
  52589. +extern int Qinteger_or_marker_p;
  52590. +
  52591. +extern int Qvectorp;
  52592. +
  52593. +extern int Qbuffer_or_string_p;
  52594. +
  52595. +extern int Qboundp;
  52596. +
  52597. +extern int Qfboundp;
  52598. +
  52599. +extern int Qcdr;
  52600. +
  52601. +extern int Qrange_error;
  52602. +
  52603. +extern int Qdomain_error;
  52604. +
  52605. +extern int Qsingularity_error;
  52606. +
  52607. +extern int Qoverflow_error;
  52608. +
  52609. +extern int Qunderflow_error;
  52610. +
  52611. +int wrong_type_argument(register int predicate,
  52612. +                        register int value);
  52613. +
  52614. +int pure_write_error(void);
  52615. +
  52616. +void args_out_of_range(int a1,
  52617. +                       int a2);
  52618. +
  52619. +void args_out_of_range_3(int a1,
  52620. +                         int a2,
  52621. +                         int a3);
  52622. +
  52623. +int make_number(int num);
  52624. +
  52625. +extern int sign_extend_temp;
  52626. +
  52627. +int sign_extend_lisp_int(int num);
  52628. +
  52629. +extern struct Lisp_Subr Seq;
  52630. +
  52631. +int Feq(int , int );
  52632. +
  52633. +extern struct Lisp_Subr Snull;
  52634. +
  52635. +int Fnull(int );
  52636. +
  52637. +extern struct Lisp_Subr Sconsp;
  52638. +
  52639. +int Fconsp(int );
  52640. +
  52641. +extern struct Lisp_Subr Satom;
  52642. +
  52643. +int Fatom(int );
  52644. +
  52645. +extern struct Lisp_Subr Slistp;
  52646. +
  52647. +int Flistp(int );
  52648. +
  52649. +extern struct Lisp_Subr Snlistp;
  52650. +
  52651. +int Fnlistp(int );
  52652. +
  52653. +extern struct Lisp_Subr Ssymbolp;
  52654. +
  52655. +int Fsymbolp(int );
  52656. +
  52657. +extern struct Lisp_Subr Svectorp;
  52658. +
  52659. +int Fvectorp(int );
  52660. +
  52661. +extern struct Lisp_Subr Sstringp;
  52662. +
  52663. +int Fstringp(int );
  52664. +
  52665. +extern struct Lisp_Subr Sarrayp;
  52666. +
  52667. +int Farrayp(int );
  52668. +
  52669. +extern struct Lisp_Subr Ssequencep;
  52670. +
  52671. +int Fsequencep(int );
  52672. +
  52673. +extern struct Lisp_Subr Sbufferp;
  52674. +
  52675. +int Fbufferp(int );
  52676. +
  52677. +extern struct Lisp_Subr Smarkerp;
  52678. +
  52679. +int Fmarkerp(int );
  52680. +
  52681. +extern struct Lisp_Subr Ssubrp;
  52682. +
  52683. +int Fsubrp(int );
  52684. +
  52685. +extern struct Lisp_Subr Sbyte_code_function_p;
  52686. +
  52687. +int Fbyte_code_function_p(int );
  52688. +
  52689. +extern struct Lisp_Subr Schar_or_string_p;
  52690. +
  52691. +int Fchar_or_string_p(int );
  52692. +
  52693. +extern struct Lisp_Subr Sintegerp;
  52694. +
  52695. +int Fintegerp(int );
  52696. +
  52697. +extern struct Lisp_Subr Sinteger_or_marker_p;
  52698. +
  52699. +int Finteger_or_marker_p(int );
  52700. +
  52701. +extern struct Lisp_Subr Snatnump;
  52702. +
  52703. +int Fnatnump(int );
  52704. +
  52705. +extern struct Lisp_Subr Snumberp;
  52706. +
  52707. +int Fnumberp(int );
  52708. +
  52709. +extern struct Lisp_Subr Snumber_or_marker_p;
  52710. +
  52711. +int Fnumber_or_marker_p(int );
  52712. +
  52713. +extern struct Lisp_Subr Scar;
  52714. +
  52715. +int Fcar(int );
  52716. +
  52717. +extern struct Lisp_Subr Scar_safe;
  52718. +
  52719. +int Fcar_safe(int );
  52720. +
  52721. +extern struct Lisp_Subr Scdr;
  52722. +
  52723. +int Fcdr(int );
  52724. +
  52725. +extern struct Lisp_Subr Scdr_safe;
  52726. +
  52727. +int Fcdr_safe(int );
  52728. +
  52729. +extern struct Lisp_Subr Ssetcar;
  52730. +
  52731. +int Fsetcar(int , int );
  52732. +
  52733. +extern struct Lisp_Subr Ssetcdr;
  52734. +
  52735. +int Fsetcdr(int , int );
  52736. +
  52737. +extern struct Lisp_Subr Sboundp;
  52738. +
  52739. +int Fboundp(int );
  52740. +
  52741. +extern struct Lisp_Subr Sfboundp;
  52742. +
  52743. +int Ffboundp(int );
  52744. +
  52745. +extern struct Lisp_Subr Smakunbound;
  52746. +
  52747. +int Fmakunbound(int );
  52748. +
  52749. +extern struct Lisp_Subr Sfmakunbound;
  52750. +
  52751. +int Ffmakunbound(int );
  52752. +
  52753. +extern struct Lisp_Subr Ssymbol_function;
  52754. +
  52755. +int Fsymbol_function(int );
  52756. +
  52757. +extern struct Lisp_Subr Ssymbol_plist;
  52758. +
  52759. +int Fsymbol_plist(int );
  52760. +
  52761. +extern struct Lisp_Subr Ssymbol_name;
  52762. +
  52763. +int Fsymbol_name(int );
  52764. +
  52765. +extern struct Lisp_Subr Sfset;
  52766. +
  52767. +int Ffset(int , int );
  52768. +
  52769. +extern struct Lisp_Subr Sdefalias;
  52770. +
  52771. +int Fdefalias(int , int );
  52772. +
  52773. +extern struct Lisp_Subr Sdefine_function;
  52774. +
  52775. +int Fdefine_function(int , int );
  52776. +
  52777. +extern struct Lisp_Subr Ssetplist;
  52778. +
  52779. +int Fsetplist(int , int );
  52780. +
  52781. +int do_symval_forwarding(register int valcontents);
  52782. +
  52783. +void store_symval_forwarding(int sym,
  52784. +                             register int valcontents,
  52785. +                             register int newval);
  52786. +
  52787. +int swap_in_symval_forwarding(int sym,
  52788. +                              int valcontents);
  52789. +
  52790. +int find_symbol_value(int sym);
  52791. +
  52792. +extern struct Lisp_Subr Ssymbol_value;
  52793. +
  52794. +int Fsymbol_value(int );
  52795. +
  52796. +extern struct Lisp_Subr Sset;
  52797. +
  52798. +int Fset(int , int );
  52799. +
  52800. +int default_value(int sym);
  52801. +
  52802. +extern struct Lisp_Subr Sdefault_boundp;
  52803. +
  52804. +int Fdefault_boundp(int );
  52805. +
  52806. +extern struct Lisp_Subr Sdefault_value;
  52807. +
  52808. +int Fdefault_value(int );
  52809. +
  52810. +extern struct Lisp_Subr Sset_default;
  52811. +
  52812. +int Fset_default(int , int );
  52813. +
  52814. +extern struct Lisp_Subr Ssetq_default;
  52815. +
  52816. +int Fsetq_default(int );
  52817. +
  52818. +extern struct Lisp_Subr Smake_variable_buffer_local;
  52819. +
  52820. +int Fmake_variable_buffer_local(int );
  52821. +
  52822. +extern struct Lisp_Subr Smake_local_variable;
  52823. +
  52824. +int Fmake_local_variable(int );
  52825. +
  52826. +extern struct Lisp_Subr Skill_local_variable;
  52827. +
  52828. +int Fkill_local_variable(int );
  52829. +
  52830. +int indirect_function(register int object);
  52831. +
  52832. +extern struct Lisp_Subr Sindirect_function;
  52833. +
  52834. +int Findirect_function(int );
  52835. +
  52836. +extern struct Lisp_Subr Saref;
  52837. +
  52838. +int Faref(int , int );
  52839. +
  52840. +extern struct Lisp_Subr Saset;
  52841. +
  52842. +int Faset(int , int , int );
  52843. +
  52844. +int Farray_length(register int array);
  52845. +
  52846. +int arithcompare(int num1,
  52847. +                 int num2,
  52848. +                 enum comparison comparison);
  52849. +
  52850. +extern struct Lisp_Subr Seqlsign;
  52851. +
  52852. +int Feqlsign(int , int );
  52853. +
  52854. +extern struct Lisp_Subr Slss;
  52855. +
  52856. +int Flss(int , int );
  52857. +
  52858. +extern struct Lisp_Subr Sgtr;
  52859. +
  52860. +int Fgtr(int , int );
  52861. +
  52862. +extern struct Lisp_Subr Sleq;
  52863. +
  52864. +int Fleq(int , int );
  52865. +
  52866. +extern struct Lisp_Subr Sgeq;
  52867. +
  52868. +int Fgeq(int , int );
  52869. +
  52870. +extern struct Lisp_Subr Sneq;
  52871. +
  52872. +int Fneq(int , int );
  52873. +
  52874. +extern struct Lisp_Subr Szerop;
  52875. +
  52876. +int Fzerop(int );
  52877. +
  52878. +int long_to_cons(unsigned long i);
  52879. +
  52880. +unsigned long cons_to_long(int c);
  52881. +
  52882. +extern struct Lisp_Subr Snumber_to_string;
  52883. +
  52884. +int Fnumber_to_string(int );
  52885. +
  52886. +extern struct Lisp_Subr Sstring_to_number;
  52887. +
  52888. +int Fstring_to_number(int );
  52889. +
  52890. +int arith_driver(enum arithop code,
  52891. +                 int nargs,
  52892. +                 register int * args);
  52893. +
  52894. +extern struct Lisp_Subr Splus;
  52895. +
  52896. +int Fplus(int , int * );
  52897. +
  52898. +extern struct Lisp_Subr Sminus;
  52899. +
  52900. +int Fminus(int , int * );
  52901. +
  52902. +extern struct Lisp_Subr Stimes;
  52903. +
  52904. +int Ftimes(int , int * );
  52905. +
  52906. +extern struct Lisp_Subr Squo;
  52907. +
  52908. +int Fquo(int , int * );
  52909. +
  52910. +extern struct Lisp_Subr Srem;
  52911. +
  52912. +int Frem(int , int );
  52913. +
  52914. +extern struct Lisp_Subr Smod;
  52915. +
  52916. +int Fmod(int , int );
  52917. +
  52918. +extern struct Lisp_Subr Smax;
  52919. +
  52920. +int Fmax(int , int * );
  52921. +
  52922. +extern struct Lisp_Subr Smin;
  52923. +
  52924. +int Fmin(int , int * );
  52925. +
  52926. +extern struct Lisp_Subr Slogand;
  52927. +
  52928. +int Flogand(int , int * );
  52929. +
  52930. +extern struct Lisp_Subr Slogior;
  52931. +
  52932. +int Flogior(int , int * );
  52933. +
  52934. +extern struct Lisp_Subr Slogxor;
  52935. +
  52936. +int Flogxor(int , int * );
  52937. +
  52938. +extern struct Lisp_Subr Sash;
  52939. +
  52940. +int Fash(int , int );
  52941. +
  52942. +extern struct Lisp_Subr Slsh;
  52943. +
  52944. +int Flsh(int , int );
  52945. +
  52946. +extern struct Lisp_Subr Sadd1;
  52947. +
  52948. +int Fadd1(int );
  52949. +
  52950. +extern struct Lisp_Subr Ssub1;
  52951. +
  52952. +int Fsub1(int );
  52953. +
  52954. +extern struct Lisp_Subr Slognot;
  52955. +
  52956. +int Flognot(int );
  52957. +
  52958. +void syms_of_data(void);
  52959. +
  52960. +void arith_error(int signo);
  52961. +
  52962. +int init_data(void);
  52963. +
  52964. diff -rup --new-file baseline/fsf/emacs/src/dired.c amiga/fsf/emacs/src/dired.c
  52965. --- baseline/fsf/emacs/src/dired.c    Tue Jun 14 20:41:11 1994
  52966. +++ amiga/fsf/emacs/src/dired.c    Sat Sep 28 00:00:00 1996
  52967. @@ -496,7 +496,11 @@ file_name_completion_stat (dirname, dp, 
  52968.  
  52969.    bcopy (XSTRING (dirname)->data, fullname, pos);
  52970.  #ifndef VMS
  52971. +#ifdef AMIGA
  52972. +  if ((fullname[pos - 1] != '/')&&(fullname[pos - 1] != ':'))
  52973. +#else
  52974.    if (fullname[pos - 1] != '/')
  52975. +#endif
  52976.      fullname[pos++] = '/';
  52977.  #endif
  52978.  
  52979. diff -rup --new-file baseline/fsf/emacs/src/dired_protos.h amiga/fsf/emacs/src/dired_protos.h
  52980. --- baseline/fsf/emacs/src/dired_protos.h    Wed Dec 31 17:00:00 1969
  52981. +++ amiga/fsf/emacs/src/dired_protos.h    Sat Sep 28 00:00:00 1996
  52982. @@ -0,0 +1,45 @@
  52983. +/* Prototypes for functions defined in
  52984. +dired.c
  52985. + */
  52986. +
  52987. +extern int Vcompletion_ignored_extensions;
  52988. +
  52989. +extern int Qcompletion_ignore_case;
  52990. +
  52991. +extern int Qdirectory_files;
  52992. +
  52993. +extern int Qfile_name_completion;
  52994. +
  52995. +extern int Qfile_name_all_completions;
  52996. +
  52997. +extern int Qfile_attributes;
  52998. +
  52999. +extern struct Lisp_Subr Sdirectory_files;
  53000. +
  53001. +int Fdirectory_files(int , int , int , int );
  53002. +
  53003. +extern struct Lisp_Subr Sfile_name_completion;
  53004. +
  53005. +int Ffile_name_completion(int , int );
  53006. +
  53007. +extern struct Lisp_Subr Sfile_name_all_completions;
  53008. +
  53009. +int Ffile_name_all_completions(int , int );
  53010. +
  53011. +int file_name_completion(int file,
  53012. +                         int dirname,
  53013. +                         int all_flag,
  53014. +                         int ver_flag);
  53015. +
  53016. +int file_name_completion_stat(int dirname,
  53017. +                              struct dirent * dp,
  53018. +                              struct stat * st_addr);
  53019. +
  53020. +int make_time(int time);
  53021. +
  53022. +extern struct Lisp_Subr Sfile_attributes;
  53023. +
  53024. +int Ffile_attributes(int );
  53025. +
  53026. +int syms_of_dired(void);
  53027. +
  53028. diff -rup --new-file baseline/fsf/emacs/src/dispnew.c amiga/fsf/emacs/src/dispnew.c
  53029. --- baseline/fsf/emacs/src/dispnew.c    Sun Aug 28 17:24:24 1994
  53030. +++ amiga/fsf/emacs/src/dispnew.c    Sat Sep 28 00:00:00 1996
  53031. @@ -50,6 +50,10 @@ the Free Software Foundation, 675 Mass A
  53032.  
  53033.  #include <errno.h>
  53034.  
  53035. +#ifdef USE_PROTOS
  53036. +#include "protos.h"
  53037. +#endif
  53038. +
  53039.  #define max(a, b) ((a) > (b) ? (a) : (b))
  53040.  #define min(a, b) ((a) < (b) ? (a) : (b))
  53041.  
  53042. @@ -494,7 +498,8 @@ cancel_line (vpos, frame)
  53043.  clear_frame_records (frame)
  53044.       register FRAME_PTR frame;
  53045.  {
  53046. -  bzero (FRAME_CURRENT_GLYPHS (frame)->enable, FRAME_HEIGHT (frame));
  53047. +  if(FRAME_CURRENT_GLYPHS (frame))
  53048. +      bzero (FRAME_CURRENT_GLYPHS (frame)->enable, FRAME_HEIGHT (frame));
  53049.  }
  53050.  
  53051.  /* Prepare to display on line VPOS starting at HPOS within it.  */
  53052. @@ -1196,8 +1201,26 @@ update_frame (f, force, inhibit_hairy_id
  53053.    if (preempt_count <= 0)
  53054.      preempt_count = 1;
  53055.  
  53056. +#ifdef AMIGA
  53057. +  start_count(0); /* CHFIXME: check, evt. remove? define? */
  53058. +#endif
  53059. +
  53060.    if (FRAME_HEIGHT (f) == 0) abort (); /* Some bug zeros some core */
  53061.  
  53062. +#ifdef FAST_DISPLAY
  53063. +  /* Don't compute for i/d line if just want cursor motion. */
  53064. +  /* Don't allow preemption, etc either */
  53065. +  for (i = 0; i < FRAME_HEIGHT (f); i++)
  53066. +    if (desired_frame->enable[i])
  53067. +      break;
  53068. +
  53069. +  if (i >= FRAME_HEIGHT (f))
  53070. +    {
  53071. +      update_begin();
  53072. +      goto update_done;
  53073. +    }
  53074. +#endif
  53075. +
  53076.    detect_input_pending ();
  53077.    if (input_pending && !force)
  53078.      {
  53079. @@ -1214,12 +1237,14 @@ update_frame (f, force, inhibit_hairy_id
  53080.    current_frame = FRAME_CURRENT_GLYPHS (f);
  53081.    desired_frame = FRAME_DESIRED_GLYPHS (f);
  53082.  
  53083. +#ifndef FAST_DISPLAY
  53084.    /* See if any of the desired lines are enabled; don't compute for
  53085.       i/d line if just want cursor motion. */
  53086.    for (i = 0; i < FRAME_HEIGHT (f); i++)
  53087.      if (desired_frame->enable[i])
  53088.        break;
  53089. -
  53090. +#endif
  53091. +  
  53092.    /* Try doing i/d line, if not yet inhibited.  */
  53093.    if (!inhibit_hairy_id && i < FRAME_HEIGHT (f))
  53094.      force |= scrolling (f);
  53095. @@ -1293,6 +1318,9 @@ update_frame (f, force, inhibit_hairy_id
  53096.      downto += current_frame->pix_height[i];
  53097.  #endif
  53098.      }
  53099. +#ifdef FAST_DISPLAY
  53100. +update_done:
  53101. +#endif
  53102.    pause = (i < FRAME_HEIGHT (f) - 1) ? i : 0;
  53103.  
  53104.    /* Now just clean up termcap drivers and set cursor, etc.  */
  53105. @@ -1350,8 +1378,12 @@ update_frame (f, force, inhibit_hairy_id
  53106.  
  53107.    if (FRAME_HEIGHT (f) == 0) abort (); /* Some bug zeros some core */
  53108.    display_completed = !pause;
  53109. -
  53110. -  bzero (FRAME_DESIRED_GLYPHS (f)->enable, FRAME_HEIGHT (f));
  53111. +  
  53112. +  if(FRAME_DESIRED_GLYPHS (f))
  53113. +      bzero (FRAME_DESIRED_GLYPHS (f)->enable, FRAME_HEIGHT (f));
  53114. +#ifdef AMIGA
  53115. +  stop_count(0);
  53116. +#endif
  53117.    return pause;
  53118.  }
  53119.  
  53120. @@ -1544,6 +1576,57 @@ update_line (frame, vpos)
  53121.    else
  53122.      reassert_line_highlight (desired_frame->highlight[vpos], vpos);
  53123.  
  53124. +#ifdef FAST_DISPLAY
  53125. +  if (current_frame->enable[vpos])
  53126. +  {
  53127. +      obody = current_frame->contents[vpos];
  53128. +      olen = current_frame->used[vpos];
  53129. +  }
  53130. +  else olen = 0;
  53131. +
  53132. +  nbody = desired_frame->contents[vpos];
  53133. +  nlen = desired_frame->used[vpos];
  53134. +
  53135. +  /* Pretend trailing spaces are not there at all,
  53136. +     unless for one reason or another we must write all spaces.  */
  53137. +  /* We know that the previous character byte contains 0.  */
  53138. +  if (! new_screen->highlight[vpos])
  53139. +  {
  53140. +      if (!must_write_spaces)
  53141. +      while (nbody[nlen - 1] == ' ')
  53142. +          nlen--;
  53143. +  }
  53144. +  else
  53145. +  {
  53146. +      /* For an inverse-video line, give it extra trailing spaces
  53147. +     all the way to the screen edge
  53148. +     so that the reverse video extends all the way across.  */
  53149. +      while (nlen < FRAME_WIDTH(current_frame) - 1)
  53150. +      nbody[nlen++] = ' ';
  53151. +  }
  53152. +  
  53153. +  while (olen > 0 && nlen > 0 && *obody == *nbody)
  53154. +  {
  53155. +      olen--; nlen--; obody++; nbody++;
  53156. +  }
  53157. +  if (olen > 0 || nlen > 0)
  53158. +      move_cursor (vpos, nbody - new_screen->contents[vpos]);
  53159. +  if (nlen > 0) output_chars (nbody, nlen);
  53160. +  
  53161. +  if (olen > nlen && new_screen->used[vpos] != screen_width)
  53162. +      clear_end_of_line(current_screen->used[vpos]);
  53163. +  /* Exchange contents between current_screen and new_screen.  */
  53164. +  temp = new_screen->contents[vpos];
  53165. +  new_screen->contents[vpos] = current_screen->contents[vpos];
  53166. +  current_screen->contents[vpos] = temp;
  53167. +
  53168. +  /* One way or another, this will enable the line being updated.  */
  53169. +  current_screen->enable[vpos] = 1;
  53170. +  current_screen->used[vpos] = new_screen->used[vpos];
  53171. +  current_screen->highlight[vpos] = new_screen->highlight[vpos];
  53172. +
  53173. +#else /* not FAST_DISPLAY */
  53174.    if (! current_frame->enable[vpos])
  53175.      {
  53176.        olen = 0;
  53177. @@ -1788,7 +1871,7 @@ update_line (frame, vpos)
  53178.        olen = nlen - (nsp - osp);
  53179.      }
  53180.        cursor_to (vpos, osp);
  53181. -      insert_glyphs ((char *)0, nsp - osp);
  53182. +      insert_glyphs ((GLYPH *) 0, nsp - osp);
  53183.      }
  53184.    olen += nsp - osp;
  53185.  
  53186. @@ -1860,6 +1943,7 @@ update_line (frame, vpos)
  53187.    temp1 = desired_frame->charstarts[vpos];
  53188.    desired_frame->charstarts[vpos] = current_frame->charstarts[vpos];
  53189.    current_frame->charstarts[vpos] = temp1;
  53190. +#endif /* not FAST_DISPLAY */
  53191.  }
  53192.  
  53193.  /* A vector of size >= NFRAMES + 3 * NBUFFERS + 1, containing the session's
  53194. @@ -2374,6 +2458,28 @@ init_display ()
  53195.       If the DISPLAY environment variable is set, try to use X, and die
  53196.       with an error message if that doesn't work.  */
  53197.  
  53198. +#ifdef AMIGA
  53199. +  amiga_term_open();
  53200. +  if (!inhibit_window_system) 
  53201. +    {
  53202. +      amiga_term_init();
  53203. +      /* Using Intuition V2.04 */
  53204. +      Vwindow_system = intern ("intuition");
  53205. +      Vwindow_system_version = make_number (2);
  53206. +
  53207. +      /* CHFIXME: following ok?, move to amiga_term_init? */
  53208. +      
  53209. +      remake_frame_glyphs (selected_frame);
  53210. +      calculate_costs (selected_frame);
  53211. +
  53212. +      /* X and Y coordinates of the cursor between updates. */
  53213. +      FRAME_CURSOR_X (selected_frame) = 0;
  53214. +      FRAME_CURSOR_Y (selected_frame) = 0;
  53215. +
  53216. +      return;
  53217. +    }
  53218. +#endif /* AMIGA */
  53219. +
  53220.  #ifdef HAVE_X_WINDOWS
  53221.    if (! display_arg)
  53222.      {
  53223. @@ -2454,7 +2560,7 @@ For types not defined in VMS, use  defin
  53224.  
  53225.  syms_of_display ()
  53226.  {
  53227. -#ifdef MULTI_FRAME
  53228. +#if defined(MULTI_FRAME) || defined(AMIGA) /* CHFIXME: why disabled if non MULTI_FRAME? */
  53229.    defsubr (&Sredraw_frame);
  53230.  #endif
  53231.    defsubr (&Sredraw_display);
  53232. diff -rup --new-file baseline/fsf/emacs/src/dispnew_protos.h amiga/fsf/emacs/src/dispnew_protos.h
  53233. --- baseline/fsf/emacs/src/dispnew_protos.h    Wed Dec 31 17:00:00 1969
  53234. +++ amiga/fsf/emacs/src/dispnew_protos.h    Sat Sep 28 00:00:00 1996
  53235. @@ -0,0 +1,164 @@
  53236. +/* Prototypes for functions defined in
  53237. +dispnew.c
  53238. + */
  53239. +
  53240. +extern int frame_garbaged;
  53241. +
  53242. +extern int display_completed;
  53243. +
  53244. +extern int visible_bell;
  53245. +
  53246. +extern int inverse_video;
  53247. +
  53248. +extern int baud_rate;
  53249. +
  53250. +extern int Vwindow_system;
  53251. +
  53252. +extern int Vwindow_system_version;
  53253. +
  53254. +extern int Vglyph_table;
  53255. +
  53256. +extern int Vstandard_display_table;
  53257. +
  53258. +extern int cursor_in_echo_area;
  53259. +
  53260. +extern int selected_frame;
  53261. +
  53262. +extern int last_nonminibuf_frame;
  53263. +
  53264. +extern struct frame the_only_frame;
  53265. +
  53266. +extern struct frame_glyphs ** ophys_lines;
  53267. +
  53268. +extern int ophys_lines_length;
  53269. +
  53270. +extern struct __iobuf * termscript;
  53271. +
  53272. +extern struct cm Wcm;
  53273. +
  53274. +extern int delayed_size_change;
  53275. +
  53276. +extern struct Lisp_Subr Sredraw_frame;
  53277. +
  53278. +int Fredraw_frame(int );
  53279. +
  53280. +extern struct Lisp_Subr Sredraw_display;
  53281. +
  53282. +int Fredraw_display(void);
  53283. +
  53284. +void redraw_garbaged_frames(void);
  53285. +
  53286. +struct frame_glyphs * make_frame_glyphs(register int frame,
  53287. +                                        int empty);
  53288. +
  53289. +void free_frame_glyphs(int frame,
  53290. +                       struct frame_glyphs * glyphs);
  53291. +
  53292. +void remake_frame_glyphs(int frame);
  53293. +
  53294. +int line_hash_code(register struct frame_glyphs * m,
  53295. +                   int vpos);
  53296. +
  53297. +unsigned int line_draw_cost(struct frame_glyphs * m,
  53298. +                            int vpos);
  53299. +
  53300. +int cancel_line(int vpos,
  53301. +                register int frame);
  53302. +
  53303. +int clear_frame_records(register int frame);
  53304. +
  53305. +void get_display_line(register int frame,
  53306. +                      int vpos,
  53307. +                      register int hpos);
  53308. +
  53309. +void safe_bcopy(char * from,
  53310. +                char * to,
  53311. +                int size);
  53312. +
  53313. +void rotate_vector(char * vector,
  53314. +                   int size,
  53315. +                   int distance);
  53316. +
  53317. +int scroll_frame_lines(register int frame,
  53318. +                       int from,
  53319. +                       int end,
  53320. +                       int amount,
  53321. +                       int newpos);
  53322. +
  53323. +int preserve_other_columns(struct window * w);
  53324. +
  53325. +void adjust_window_charstarts(struct window * w,
  53326. +                              int vpos,
  53327. +                              int adjust);
  53328. +
  53329. +int verify_charstarts(struct window * w);
  53330. +
  53331. +int cancel_my_columns(struct window * w);
  53332. +
  53333. +int direct_output_for_insert(int g);
  53334. +
  53335. +int direct_output_forward_char(int n);
  53336. +
  53337. +int update_frame(int f,
  53338. +                 int force,
  53339. +                 int inhibit_hairy_id);
  53340. +
  53341. +void quit_error_check(void);
  53342. +
  53343. +int scrolling(int frame);
  53344. +
  53345. +int buffer_posn_from_coords(struct window * window,
  53346. +                            int col,
  53347. +                            int line);
  53348. +
  53349. +int count_blanks(register unsigned int * r);
  53350. +
  53351. +int count_match(unsigned int * str1,
  53352. +                unsigned int * str2);
  53353. +
  53354. +void update_line(register int frame,
  53355. +                 int vpos);
  53356. +
  53357. +extern struct Lisp_Subr Sopen_termscript;
  53358. +
  53359. +int Fopen_termscript(int );
  53360. +
  53361. +void window_change_signal(void);
  53362. +
  53363. +int do_pending_window_change(void);
  53364. +
  53365. +int change_frame_size(register int frame,
  53366. +                      int newheight,
  53367. +                      int newwidth,
  53368. +                      int pretend,
  53369. +                      int delay);
  53370. +
  53371. +extern struct Lisp_Subr Ssend_string_to_terminal;
  53372. +
  53373. +int Fsend_string_to_terminal(int );
  53374. +
  53375. +extern struct Lisp_Subr Sding;
  53376. +
  53377. +int Fding(int );
  53378. +
  53379. +int bitch_at_user(void);
  53380. +
  53381. +extern struct Lisp_Subr Ssleep_for;
  53382. +
  53383. +int Fsleep_for(int , int );
  53384. +
  53385. +int sit_for(int sec,
  53386. +            int usec,
  53387. +            int reading,
  53388. +            int display);
  53389. +
  53390. +extern struct Lisp_Subr Ssit_for;
  53391. +
  53392. +int Fsit_for(int , int , int );
  53393. +
  53394. +extern char * terminal_type;
  53395. +
  53396. +int init_display(void);
  53397. +
  53398. +int syms_of_display(void);
  53399. +
  53400. diff -rup --new-file baseline/fsf/emacs/src/doc.c amiga/fsf/emacs/src/doc.c
  53401. --- baseline/fsf/emacs/src/doc.c    Wed Aug 17 13:05:55 1994
  53402. +++ amiga/fsf/emacs/src/doc.c    Sat Sep 28 00:00:00 1996
  53403. @@ -36,6 +36,7 @@ the Free Software Foundation, 675 Mass A
  53404.  #endif
  53405.  
  53406.  #include "lisp.h"
  53407. +#include "paths.h"
  53408.  #include "buffer.h"
  53409.  #include "keyboard.h"
  53410.  
  53411. @@ -280,7 +281,11 @@ when doc strings are referred to later i
  53412.  
  53413.  #ifndef CANNOT_DUMP
  53414.    name = (char *) alloca (XSTRING (filename)->size + 14);
  53415. +#ifdef RELPATH_DOC
  53416. +  strcpy (name, RELPATH_DOC);
  53417. +#else
  53418.    strcpy (name, "../etc/");
  53419. +#endif
  53420.  #else /* CANNOT_DUMP */
  53421.    CHECK_STRING (Vdoc_directory, 0);
  53422.    name = (char *) alloca (XSTRING (filename)->size +
  53423. diff -rup --new-file baseline/fsf/emacs/src/doc_protos.h amiga/fsf/emacs/src/doc_protos.h
  53424. --- baseline/fsf/emacs/src/doc_protos.h    Wed Dec 31 17:00:00 1969
  53425. +++ amiga/fsf/emacs/src/doc_protos.h    Sat Sep 28 00:00:00 1996
  53426. @@ -0,0 +1,29 @@
  53427. +/* Prototypes for functions defined in
  53428. +doc.c
  53429. + */
  53430. +
  53431. +extern int Vdoc_file_name;
  53432. +
  53433. +int get_doc_string(long filepos);
  53434. +
  53435. +extern struct Lisp_Subr Sdocumentation;
  53436. +
  53437. +int Fdocumentation(int , int );
  53438. +
  53439. +extern struct Lisp_Subr Sdocumentation_property;
  53440. +
  53441. +int Fdocumentation_property(int , int , int );
  53442. +
  53443. +void store_function_docstring(int fun,
  53444. +                              int offset);
  53445. +
  53446. +extern struct Lisp_Subr Ssnarf_documentation;
  53447. +
  53448. +int Fsnarf_documentation(int );
  53449. +
  53450. +extern struct Lisp_Subr Ssubstitute_command_keys;
  53451. +
  53452. +int Fsubstitute_command_keys(int );
  53453. +
  53454. +int syms_of_doc(void);
  53455. +
  53456. diff -rup --new-file baseline/fsf/emacs/src/dodump.sh amiga/fsf/emacs/src/dodump.sh
  53457. --- baseline/fsf/emacs/src/dodump.sh    Wed Dec 31 17:00:00 1969
  53458. +++ amiga/fsf/emacs/src/dodump.sh    Sat Sep 28 00:00:00 1996
  53459. @@ -0,0 +1,5 @@
  53460. +semacs
  53461. +if -f GNUEmacs-19.28:etc/EMACS-DATA then ; rm GNUEmacs-19.28:etc/EMACS-DATA ; endif
  53462. +Stack 500000
  53463. +stack 500000
  53464. +/src/temacs -batch -l loadup dump
  53465. diff -rup --new-file baseline/fsf/emacs/src/doprnt_protos.h amiga/fsf/emacs/src/doprnt_protos.h
  53466. --- baseline/fsf/emacs/src/doprnt_protos.h    Wed Dec 31 17:00:00 1969
  53467. +++ amiga/fsf/emacs/src/doprnt_protos.h    Sat Sep 28 00:00:00 1996
  53468. @@ -0,0 +1,11 @@
  53469. +/* Prototypes for functions defined in
  53470. +doprnt.c
  53471. + */
  53472. +
  53473. +int doprnt(char * buffer,
  53474. +           register int bufsize,
  53475. +           char * format,
  53476. +           char * format_end,
  53477. +           int nargs,
  53478. +           char ** args);
  53479. +
  53480. diff -rup --new-file baseline/fsf/emacs/src/dostrip.c amiga/fsf/emacs/src/dostrip.c
  53481. --- baseline/fsf/emacs/src/dostrip.c    Wed Dec 31 17:00:00 1969
  53482. +++ amiga/fsf/emacs/src/dostrip.c    Sat Sep 28 00:00:00 1996
  53483. @@ -0,0 +1,23 @@
  53484. +#include <stdio.h>
  53485. +
  53486. +#define SIZE 2048
  53487. +
  53488. +main(int argc, char **argv)
  53489. +{
  53490. +    char buf[SIZE];
  53491. +
  53492. +    buf[SIZE - 1] = 0;
  53493. +    while (fgets(buf, SIZE - 1, stdin))
  53494. +    {
  53495. +    if (buf[0] != '#')
  53496. +    {
  53497. +        char *p = buf, *e;
  53498. +
  53499. +        while (*p && *p == ' ') p++;
  53500. +        e = p + strlen(p);
  53501. +        while (e > p && (e[-1] == ' ' || e[-1] == '\t' || e[-1] == '\n')) e--;
  53502. +        *e = '\0';
  53503. +        if (*p) puts(p);
  53504. +    }
  53505. +    }
  53506. +}
  53507. diff -rup --new-file baseline/fsf/emacs/src/dostrip.lnk amiga/fsf/emacs/src/dostrip.lnk
  53508. --- baseline/fsf/emacs/src/dostrip.lnk    Wed Dec 31 17:00:00 1969
  53509. +++ amiga/fsf/emacs/src/dostrip.lnk    Sat Sep 28 00:00:00 1996
  53510. @@ -0,0 +1,7 @@
  53511. +FROM LIB:c.o "dostrip.o"
  53512. +TO "dostrip"
  53513. +LIB LIB:scm881.lib
  53514. +    LIB:sc.lib LIB:amiga.lib
  53515. +ADDSYM
  53516. +QUIET
  53517. +
  53518. diff -rup --new-file baseline/fsf/emacs/src/editfns.c amiga/fsf/emacs/src/editfns.c
  53519. --- baseline/fsf/emacs/src/editfns.c    Tue Aug 30 00:18:50 1994
  53520. +++ amiga/fsf/emacs/src/editfns.c    Sat Sep 28 00:00:00 1996
  53521. @@ -920,10 +920,10 @@ make_buffer_string (start, end)
  53522.    result = make_uninit_string (end - start);
  53523.    bcopy (&FETCH_CHAR (start), XSTRING (result)->data, end - start);
  53524.  
  53525. +#ifdef USE_TEXT_PROPERTIES
  53526.    tem = Fnext_property_change (make_number (start), Qnil, make_number (end));
  53527.    tem1 = Ftext_properties_at (make_number (start), Qnil);
  53528.  
  53529. -#ifdef USE_TEXT_PROPERTIES
  53530.    if (XINT (tem) != end || !NILP (tem1))
  53531.      copy_intervals_to_string (result, current_buffer, start, end - start);
  53532.  #endif
  53533. @@ -1384,7 +1384,10 @@ use `save-excursion' outermost:\n\
  53534.  }
  53535.  
  53536.  /* Buffer for the most recent text displayed by Fmessage.  */
  53537. -static char *message_text;
  53538. +#ifndef AMIGA
  53539. +static
  53540. +#endif
  53541. +char *message_text;
  53542.  
  53543.  /* Allocated length of that buffer.  */
  53544.  static int message_length;
  53545. diff -rup --new-file baseline/fsf/emacs/src/editfns_protos.h amiga/fsf/emacs/src/editfns_protos.h
  53546. --- baseline/fsf/emacs/src/editfns_protos.h    Wed Dec 31 17:00:00 1969
  53547. +++ amiga/fsf/emacs/src/editfns_protos.h    Sat Sep 28 00:00:00 1996
  53548. @@ -0,0 +1,254 @@
  53549. +/* Prototypes for functions defined in
  53550. +editfns.c
  53551. + */
  53552. +
  53553. +extern int Vsystem_name;
  53554. +
  53555. +extern int Vuser_real_name;
  53556. +
  53557. +extern int Vuser_full_name;
  53558. +
  53559. +extern int Vuser_name;
  53560. +
  53561. +void init_editfns(void);
  53562. +
  53563. +extern struct Lisp_Subr Schar_to_string;
  53564. +
  53565. +int Fchar_to_string(int );
  53566. +
  53567. +extern struct Lisp_Subr Sstring_to_char;
  53568. +
  53569. +int Fstring_to_char(int );
  53570. +
  53571. +int buildmark(int val);
  53572. +
  53573. +extern struct Lisp_Subr Spoint;
  53574. +
  53575. +int Fpoint(void);
  53576. +
  53577. +extern struct Lisp_Subr Spoint_marker;
  53578. +
  53579. +int Fpoint_marker(void);
  53580. +
  53581. +int clip_to_bounds(int lower,
  53582. +                   int num,
  53583. +                   int upper);
  53584. +
  53585. +extern struct Lisp_Subr Sgoto_char;
  53586. +
  53587. +int Fgoto_char(int );
  53588. +
  53589. +int region_limit(int beginningp);
  53590. +
  53591. +extern struct Lisp_Subr Sregion_beginning;
  53592. +
  53593. +int Fregion_beginning(void);
  53594. +
  53595. +extern struct Lisp_Subr Sregion_end;
  53596. +
  53597. +int Fregion_end(void);
  53598. +
  53599. +extern struct Lisp_Subr Smark_marker;
  53600. +
  53601. +int Fmark_marker(void);
  53602. +
  53603. +int save_excursion_save(void);
  53604. +
  53605. +int save_excursion_restore(register int info);
  53606. +
  53607. +extern struct Lisp_Subr Ssave_excursion;
  53608. +
  53609. +int Fsave_excursion(int );
  53610. +
  53611. +extern struct Lisp_Subr Sbufsize;
  53612. +
  53613. +int Fbufsize(void);
  53614. +
  53615. +extern struct Lisp_Subr Spoint_min;
  53616. +
  53617. +int Fpoint_min(void);
  53618. +
  53619. +extern struct Lisp_Subr Spoint_min_marker;
  53620. +
  53621. +int Fpoint_min_marker(void);
  53622. +
  53623. +extern struct Lisp_Subr Spoint_max;
  53624. +
  53625. +int Fpoint_max(void);
  53626. +
  53627. +extern struct Lisp_Subr Spoint_max_marker;
  53628. +
  53629. +int Fpoint_max_marker(void);
  53630. +
  53631. +extern struct Lisp_Subr Sfollowing_char;
  53632. +
  53633. +int Ffollowing_char(void);
  53634. +
  53635. +extern struct Lisp_Subr Sprevious_char;
  53636. +
  53637. +int Fprevious_char(void);
  53638. +
  53639. +extern struct Lisp_Subr Sbobp;
  53640. +
  53641. +int Fbobp(void);
  53642. +
  53643. +extern struct Lisp_Subr Seobp;
  53644. +
  53645. +int Feobp(void);
  53646. +
  53647. +extern struct Lisp_Subr Sbolp;
  53648. +
  53649. +int Fbolp(void);
  53650. +
  53651. +extern struct Lisp_Subr Seolp;
  53652. +
  53653. +int Feolp(void);
  53654. +
  53655. +extern struct Lisp_Subr Schar_after;
  53656. +
  53657. +int Fchar_after(int );
  53658. +
  53659. +extern struct Lisp_Subr Suser_login_name;
  53660. +
  53661. +int Fuser_login_name(void);
  53662. +
  53663. +extern struct Lisp_Subr Suser_real_login_name;
  53664. +
  53665. +int Fuser_real_login_name(void);
  53666. +
  53667. +extern struct Lisp_Subr Suser_uid;
  53668. +
  53669. +int Fuser_uid(void);
  53670. +
  53671. +extern struct Lisp_Subr Suser_real_uid;
  53672. +
  53673. +int Fuser_real_uid(void);
  53674. +
  53675. +extern struct Lisp_Subr Suser_full_name;
  53676. +
  53677. +int Fuser_full_name(void);
  53678. +
  53679. +extern struct Lisp_Subr Ssystem_name;
  53680. +
  53681. +int Fsystem_name(void);
  53682. +
  53683. +extern struct Lisp_Subr Semacs_pid;
  53684. +
  53685. +int Femacs_pid(void);
  53686. +
  53687. +extern struct Lisp_Subr Scurrent_time;
  53688. +
  53689. +int Fcurrent_time(void);
  53690. +
  53691. +int lisp_time_argument(int specified_time,
  53692. +                       long * result);
  53693. +
  53694. +extern struct Lisp_Subr Scurrent_time_string;
  53695. +
  53696. +int Fcurrent_time_string(int );
  53697. +
  53698. +long difftm(struct tm * a,
  53699. +            struct tm * b);
  53700. +
  53701. +extern struct Lisp_Subr Scurrent_time_zone;
  53702. +
  53703. +int Fcurrent_time_zone(int );
  53704. +
  53705. +void insert1(int arg);
  53706. +
  53707. +extern struct Lisp_Subr Sinsert;
  53708. +
  53709. +int Finsert(int , int * );
  53710. +
  53711. +extern struct Lisp_Subr Sinsert_and_inherit;
  53712. +
  53713. +int Finsert_and_inherit(int , int * );
  53714. +
  53715. +extern struct Lisp_Subr Sinsert_before_markers;
  53716. +
  53717. +int Finsert_before_markers(int , int * );
  53718. +
  53719. +extern struct Lisp_Subr Sinsert_and_inherit_before_marke;
  53720. +
  53721. +int Finsert_and_inherit_before_marke(int , int * );
  53722. +
  53723. +extern struct Lisp_Subr Sinsert_char;
  53724. +
  53725. +int Finsert_char(int , int );
  53726. +
  53727. +int make_buffer_string(int start,
  53728. +                       int end);
  53729. +
  53730. +extern struct Lisp_Subr Sbuffer_substring;
  53731. +
  53732. +int Fbuffer_substring(int , int );
  53733. +
  53734. +extern struct Lisp_Subr Sbuffer_string;
  53735. +
  53736. +int Fbuffer_string(void);
  53737. +
  53738. +extern struct Lisp_Subr Sinsert_buffer_substring;
  53739. +
  53740. +int Finsert_buffer_substring(int , int , int );
  53741. +
  53742. +extern struct Lisp_Subr Scompare_buffer_substrings;
  53743. +
  53744. +int Fcompare_buffer_substrings(int , int , int , int , int , int );
  53745. +
  53746. +extern struct Lisp_Subr Ssubst_char_in_region;
  53747. +
  53748. +int Fsubst_char_in_region(int , int , int , int , int );
  53749. +
  53750. +extern struct Lisp_Subr Stranslate_region;
  53751. +
  53752. +int Ftranslate_region(int , int , int );
  53753. +
  53754. +extern struct Lisp_Subr Sdelete_region;
  53755. +
  53756. +int Fdelete_region(int , int );
  53757. +
  53758. +extern struct Lisp_Subr Swiden;
  53759. +
  53760. +int Fwiden(void);
  53761. +
  53762. +extern struct Lisp_Subr Snarrow_to_region;
  53763. +
  53764. +int Fnarrow_to_region(int , int );
  53765. +
  53766. +int save_restriction_save(void);
  53767. +
  53768. +int save_restriction_restore(int data);
  53769. +
  53770. +extern struct Lisp_Subr Ssave_restriction;
  53771. +
  53772. +int Fsave_restriction(int );
  53773. +
  53774. +extern char * message_text;
  53775. +
  53776. +extern int message_length;
  53777. +
  53778. +extern struct Lisp_Subr Smessage;
  53779. +
  53780. +int Fmessage(int , int * );
  53781. +
  53782. +extern struct Lisp_Subr Sformat;
  53783. +
  53784. +int Fformat(int , int * );
  53785. +
  53786. +int format1(char * string1, ...);
  53787. +
  53788. +extern struct Lisp_Subr Schar_equal;
  53789. +
  53790. +int Fchar_equal(int , int );
  53791. +
  53792. +void transpose_markers(register int start1,
  53793. +                       register int end1,
  53794. +                       register int start2,
  53795. +                       register int end2);
  53796. +
  53797. +extern struct Lisp_Subr Stranspose_regions;
  53798. +
  53799. +int Ftranspose_regions(int , int , int , int , int );
  53800. +
  53801. +void syms_of_editfns(void);
  53802. +
  53803. diff -rup --new-file baseline/fsf/emacs/src/emacs.c amiga/fsf/emacs/src/emacs.c
  53804. --- baseline/fsf/emacs/src/emacs.c    Wed Oct  5 22:07:12 1994
  53805. +++ amiga/fsf/emacs/src/emacs.c    Sat Sep 28 00:00:00 1996
  53806. @@ -42,6 +42,7 @@ the Free Software Foundation, 675 Mass A
  53807.  #endif
  53808.  
  53809.  #include "lisp.h"
  53810. +#include "paths.h"
  53811.  #include "commands.h"
  53812.  #include "intervals.h"
  53813.  
  53814. @@ -49,6 +50,10 @@ the Free Software Foundation, 675 Mass A
  53815.  #include "syssignal.h"
  53816.  #include "process.h"
  53817.  
  53818. +#ifdef AMIGA_DUMP
  53819. +#define HAVE_SHM        /* Simplifies the ifdefs */
  53820. +#endif
  53821. +
  53822.  #ifndef O_RDWR
  53823.  #define O_RDWR 2
  53824.  #endif
  53825. @@ -241,15 +246,27 @@ init_cmdargs (argc, argv, skip_args)
  53826.          }
  53827.  
  53828.        /* See if dir's parent contains those subdirs.  */
  53829. +#ifdef RELPATH_LIBSRC
  53830. +      tem = Fexpand_file_name (build_string (RELPATH_LIBSRC), dir);
  53831. +#else
  53832.        tem = Fexpand_file_name (build_string ("../lib-src"), dir);
  53833. +#endif
  53834.        lib_src_exists = Ffile_exists_p (tem);
  53835.        if (!NILP (lib_src_exists))
  53836.          {
  53837. +#ifdef RELPATH_ETC
  53838. +          tem = Fexpand_file_name (build_string (RELPATH_ETC), dir);
  53839. +#else
  53840.            tem = Fexpand_file_name (build_string ("../etc"), dir);
  53841. +#endif
  53842.            etc_exists = Ffile_exists_p (tem);
  53843.            if (!NILP (etc_exists))
  53844.          {
  53845. +#ifdef RELPATH_DOTDOT
  53846. +          tem = Fexpand_file_name (build_string (RELPATH_DOTDOT), dir);
  53847. +#else
  53848.            tem = Fexpand_file_name (build_string (".."), dir);
  53849. +#endif
  53850.            Vinstallation_directory
  53851.              = Ffile_name_as_directory (tem);
  53852.            break;
  53853. @@ -458,6 +475,7 @@ main (argc, argv, envp)
  53854.  
  53855.    inhibit_window_system = 0;
  53856.  
  53857. +#ifndef AMIGA
  53858.    /* Handle the -t switch, which specifies filename to use as terminal */
  53859.    if (skip_args + 2 < argc && !strcmp (argv[skip_args + 1], "-t"))
  53860.      {
  53861. @@ -483,7 +501,8 @@ main (argc, argv, envp)
  53862.        inhibit_window_system = 1;    /* -t => -nw */
  53863.  #endif
  53864.      }
  53865. -
  53866. +#endif /* not AMIGA */
  53867. +  
  53868.    if (skip_args + 1 < argc
  53869.        && (!strcmp (argv[skip_args + 1], "-nw")))
  53870.      {
  53871. diff -rup --new-file baseline/fsf/emacs/src/emacs.sh amiga/fsf/emacs/src/emacs.sh
  53872. --- baseline/fsf/emacs/src/emacs.sh    Wed Dec 31 17:00:00 1969
  53873. +++ amiga/fsf/emacs/src/emacs.sh    Sat Sep 28 00:00:00 1996
  53874. @@ -0,0 +1,29 @@
  53875. +.key a1,a2,a3,a4,a5,a6,a7,a8,a9
  53876. +.bra {                                       
  53877. +.ket }   
  53878. +; Startup script for GNU Emacs                                    
  53879. +; Make sure the FIFO handler is ready        
  53880. +assign >NIL: FIFO: exists                    
  53881. +if warn                                      
  53882. +  if exists L:fifo-handler                   
  53883. +    echo "Starting fifo-handler"             
  53884. +    run <NIL: >NIL: L:fifo-handler           
  53885. +  else                                       
  53886. +    echo "Cannot find L:fifo-handler."       
  53887. +    echo "External processes will not work." 
  53888. +  endif                                      
  53889. +endif                                        
  53890. +; Increase the stack size as needed          
  53891. +set stk=`stack`
  53892. +rx "fortytwo=42"
  53893. +set stack `rx "say subword($stk, 5, 1)"`
  53894. +unset stk
  53895. +if not $stack gt 40000 val
  53896. +  stack 40000
  53897. +endif
  53898. +; Invoke GNU Emacs
  53899. +run gnuemacs:temacs {a1} {a2} {a3} {a4} {a5} {a6} {a7} {a8} {a9}
  53900. +; Restore the previous stack size                                       
  53901. +stack $stack
  53902. +unset stack
  53903. +
  53904. diff -rup --new-file baseline/fsf/emacs/src/emacs_protos.h amiga/fsf/emacs/src/emacs_protos.h
  53905. --- baseline/fsf/emacs/src/emacs_protos.h    Wed Dec 31 17:00:00 1969
  53906. +++ amiga/fsf/emacs/src/emacs_protos.h    Sat Sep 28 00:00:00 1996
  53907. @@ -0,0 +1,69 @@
  53908. +/* Prototypes for functions defined in
  53909. +emacs.c
  53910. + */
  53911. +
  53912. +extern int Vcommand_line_args;
  53913. +
  53914. +extern int Vinvocation_name;
  53915. +
  53916. +extern int Vinvocation_directory;
  53917. +
  53918. +extern int Vinstallation_directory;
  53919. +
  53920. +extern int Vkill_emacs_hook;
  53921. +
  53922. +extern int initialized;
  53923. +
  53924. +extern int Vsystem_type;
  53925. +
  53926. +extern int Vsystem_configuration;
  53927. +
  53928. +extern int inhibit_window_system;
  53929. +
  53930. +extern int emacs_priority;
  53931. +
  53932. +extern char * stack_bottom;
  53933. +
  53934. +extern int noninteractive;
  53935. +
  53936. +extern int noninteractive1;
  53937. +
  53938. +extern int fatal_error_code;
  53939. +
  53940. +extern int fatal_error_in_progress;
  53941. +
  53942. +void fatal_error_signal(int sig);
  53943. +
  53944. +int init_cmdargs(int argc,
  53945. +                 char ** argv,
  53946. +                 int skip_args);
  53947. +
  53948. +extern struct Lisp_Subr Sinvocation_name;
  53949. +
  53950. +int Finvocation_name(void);
  53951. +
  53952. +extern struct Lisp_Subr Sinvocation_directory;
  53953. +
  53954. +int Finvocation_directory(void);
  53955. +
  53956. +int emacs_main(int argc,
  53957. +               char ** argv,
  53958. +               char ** envp);
  53959. +
  53960. +extern struct Lisp_Subr Skill_emacs;
  53961. +
  53962. +int Fkill_emacs(int );
  53963. +
  53964. +void shut_down_emacs(int sig,
  53965. +                     int no_x,
  53966. +                     int stuff);
  53967. +
  53968. +extern struct Lisp_Subr Sdump_emacs_data;
  53969. +
  53970. +int Fdump_emacs_data(int );
  53971. +
  53972. +int decode_env_path(char * evarname,
  53973. +                    char * defalt);
  53974. +
  53975. +int syms_of_emacs(void);
  53976. +
  53977. diff -rup --new-file baseline/fsf/emacs/src/emacssignal.h amiga/fsf/emacs/src/emacssignal.h
  53978. --- baseline/fsf/emacs/src/emacssignal.h    Wed Dec 31 17:00:00 1969
  53979. +++ amiga/fsf/emacs/src/emacssignal.h    Sat Sep 28 00:00:00 1996
  53980. @@ -0,0 +1,57 @@
  53981. +#ifdef POSIX_SIGNALS
  53982. +
  53983. +#define SIGMASKTYPE sigset_t
  53984. +#define SIGEMPTYMASK (signal_empty_mask)
  53985. +#define SIGFULLMASK (signal_full_mask)
  53986. +extern sigset_t signal_empty_mask, signal_full_mask;
  53987. +
  53988. +#ifdef sigmask
  53989. +#undef sigmask
  53990. +#endif
  53991. +#define sigmask(SIG) \
  53992. +(_mask = SIGEMPTYMASK, sigaddset (&_mask, SIG), _mask)
  53993. +
  53994. +/* Local mask is used to avoid problems if code using any of the macros 
  53995. +   below could be reentered due to a signal occurring.
  53996. +   This can't happen in Emacs 18.58, but just to be safe... - DJB
  53997. +   These macros require GCC.  */
  53998. +#define sigpause(SIG)    ({ sigset_t _mask; sys_sigpause(SIG); })
  53999. +#define sigblock(SIG)    ({ sigset_t _mask; sys_sigblock(SIG); })
  54000. +#define sigunblock(SIG)  ({ sigset_t _mask; sys_sigunblock(SIG); })
  54001. +#define sigsetmask(SIG)  ({ sigset_t _mask; sys_sigsetmask(SIG); })
  54002. +#define sighold(SIG)     ONLY_USED_IN_BSD_4_1
  54003. +#define sigrelse(SIG)    ONLY_USED_IN_BSD_4_1
  54004. +
  54005. +int (*sys_signal (int signal_number, int (*action)())) ();
  54006. +int sys_sigpause (sigset_t new_mask);
  54007. +sigset_t sys_sigblock (sigset_t new_mask);
  54008. +sigset_t sys_sigunblock (sigset_t new_mask);
  54009. +sigset_t sys_sigsetmask (sigset_t new_mask);
  54010. +
  54011. +#define sys_sigdel(MASK,SIG) sigdelset(&MASK,SIG)
  54012. +#endif /* POSIX_SIGNALS */
  54013. +
  54014. +#ifndef SIGMASKTYPE
  54015. +#define SIGMASKTYPE int
  54016. +#endif
  54017. +
  54018. +#ifndef SIGEMPTYMASK
  54019. +#define SIGEMPTYMASK 0
  54020. +#endif
  54021. +
  54022. +#ifndef SIGFULLMASK
  54023. +#define SIGFULLMASK 0xffffffff
  54024. +#endif
  54025. +
  54026. +#ifndef sigmask
  54027. +#define sigmask(no) (1L << ((no) - 1))
  54028. +#endif
  54029. +
  54030. +#ifndef sigunblock
  54031. +#define sigunblock(SIG) \
  54032. +{ SIGMASKTYPE omask = sigblock (SIGFULLMASK); sigsetmask (omask & ~SIG); }
  54033. +#endif
  54034. +
  54035. +#ifndef sys_sigdel
  54036. +#define sys_sigdel(MASK,SIG) MASK &= ~(1 << SIG)
  54037. +#endif
  54038. diff -rup --new-file baseline/fsf/emacs/src/eval_protos.h amiga/fsf/emacs/src/eval_protos.h
  54039. --- baseline/fsf/emacs/src/eval_protos.h    Wed Dec 31 17:00:00 1969
  54040. +++ amiga/fsf/emacs/src/eval_protos.h    Sat Sep 28 00:00:00 1996
  54041. @@ -0,0 +1,303 @@
  54042. +/* Prototypes for functions defined in
  54043. +eval.c
  54044. + */
  54045. +
  54046. +extern struct backtrace * backtrace_list;
  54047. +
  54048. +extern struct catchtag * catchlist;
  54049. +
  54050. +extern int Qautoload;
  54051. +
  54052. +extern int Qmacro;
  54053. +
  54054. +extern int Qexit;
  54055. +
  54056. +extern int Qinteractive;
  54057. +
  54058. +extern int Qcommandp;
  54059. +
  54060. +extern int Qdefun;
  54061. +
  54062. +extern int Qinhibit_quit;
  54063. +
  54064. +extern int Vinhibit_quit;
  54065. +
  54066. +extern int Vquit_flag;
  54067. +
  54068. +extern int Qmocklisp_arguments;
  54069. +
  54070. +extern int Vmocklisp_arguments;
  54071. +
  54072. +extern int Qmocklisp;
  54073. +
  54074. +extern int Qand_rest;
  54075. +
  54076. +extern int Qand_optional;
  54077. +
  54078. +extern int Qdebug_on_error;
  54079. +
  54080. +extern int Vrun_hooks;
  54081. +
  54082. +extern int Vautoload_queue;
  54083. +
  54084. +extern int specpdl_size;
  54085. +
  54086. +extern struct specbinding * specpdl;
  54087. +
  54088. +extern struct specbinding * specpdl_ptr;
  54089. +
  54090. +extern int max_specpdl_size;
  54091. +
  54092. +extern int lisp_eval_depth;
  54093. +
  54094. +extern int max_lisp_eval_depth;
  54095. +
  54096. +extern int debug_on_next_call;
  54097. +
  54098. +extern int Vstack_trace_on_error;
  54099. +
  54100. +extern int Vdebug_on_error;
  54101. +
  54102. +extern int debug_on_quit;
  54103. +
  54104. +extern int when_entered_debugger;
  54105. +
  54106. +extern int Vdebugger;
  54107. +
  54108. +int init_eval_once(void);
  54109. +
  54110. +int init_eval(void);
  54111. +
  54112. +int call_debugger(int arg);
  54113. +
  54114. +int do_debug_on_call(int code);
  54115. +
  54116. +extern struct Lisp_Subr Sor;
  54117. +
  54118. +int For(int );
  54119. +
  54120. +extern struct Lisp_Subr Sand;
  54121. +
  54122. +int Fand(int );
  54123. +
  54124. +extern struct Lisp_Subr Sif;
  54125. +
  54126. +int Fif(int );
  54127. +
  54128. +extern struct Lisp_Subr Scond;
  54129. +
  54130. +int Fcond(int );
  54131. +
  54132. +extern struct Lisp_Subr Sprogn;
  54133. +
  54134. +int Fprogn(int );
  54135. +
  54136. +extern struct Lisp_Subr Sprog1;
  54137. +
  54138. +int Fprog1(int );
  54139. +
  54140. +extern struct Lisp_Subr Sprog2;
  54141. +
  54142. +int Fprog2(int );
  54143. +
  54144. +extern struct Lisp_Subr Ssetq;
  54145. +
  54146. +int Fsetq(int );
  54147. +
  54148. +extern struct Lisp_Subr Squote;
  54149. +
  54150. +int Fquote(int );
  54151. +
  54152. +extern struct Lisp_Subr Sfunction;
  54153. +
  54154. +int Ffunction(int );
  54155. +
  54156. +extern struct Lisp_Subr Sinteractive_p;
  54157. +
  54158. +int Finteractive_p(void);
  54159. +
  54160. +extern struct Lisp_Subr Sdefun;
  54161. +
  54162. +int Fdefun(int );
  54163. +
  54164. +extern struct Lisp_Subr Sdefmacro;
  54165. +
  54166. +int Fdefmacro(int );
  54167. +
  54168. +extern struct Lisp_Subr Sdefvar;
  54169. +
  54170. +int Fdefvar(int );
  54171. +
  54172. +extern struct Lisp_Subr Sdefconst;
  54173. +
  54174. +int Fdefconst(int );
  54175. +
  54176. +extern struct Lisp_Subr Suser_variable_p;
  54177. +
  54178. +int Fuser_variable_p(int );
  54179. +
  54180. +extern struct Lisp_Subr SletX;
  54181. +
  54182. +int FletX(int );
  54183. +
  54184. +extern struct Lisp_Subr Slet;
  54185. +
  54186. +int Flet(int );
  54187. +
  54188. +extern struct Lisp_Subr Swhile;
  54189. +
  54190. +int Fwhile(int );
  54191. +
  54192. +extern struct Lisp_Subr Smacroexpand;
  54193. +
  54194. +int Fmacroexpand(int , int );
  54195. +
  54196. +extern struct Lisp_Subr Scatch;
  54197. +
  54198. +int Fcatch(int );
  54199. +
  54200. +int internal_catch(int tag,
  54201. +                   int (* func)(),
  54202. +                   int arg);
  54203. +
  54204. +void unwind_to_catch(struct catchtag * catch,
  54205. +                     int value);
  54206. +
  54207. +extern struct Lisp_Subr Sthrow;
  54208. +
  54209. +int Fthrow(int , int );
  54210. +
  54211. +extern struct Lisp_Subr Sunwind_protect;
  54212. +
  54213. +int Funwind_protect(int );
  54214. +
  54215. +extern struct handler * handlerlist;
  54216. +
  54217. +extern struct Lisp_Subr Scondition_case;
  54218. +
  54219. +int Fcondition_case(int );
  54220. +
  54221. +int internal_condition_case(int (* bfun)(),
  54222. +                            int handlers,
  54223. +                            int (* hfun)());
  54224. +
  54225. +int internal_condition_case_1(int (* bfun)(),
  54226. +                              int arg,
  54227. +                              int handlers,
  54228. +                              int (* hfun)());
  54229. +
  54230. +extern struct Lisp_Subr Ssignal;
  54231. +
  54232. +int Fsignal(int , int );
  54233. +
  54234. +int wants_debugger(int list,
  54235. +                   int conditions);
  54236. +
  54237. +int find_handler_clause(int handlers,
  54238. +                        int conditions,
  54239. +                        int sig,
  54240. +                        int data,
  54241. +                        int * debugger_value_ptr);
  54242. +
  54243. +void error(char * m, ...);
  54244. +/*           char * a1,
  54245. +           char * a2,
  54246. +           char * a3);
  54247. +       */
  54248. +
  54249. +extern struct Lisp_Subr Scommandp;
  54250. +
  54251. +int Fcommandp(int );
  54252. +
  54253. +extern struct Lisp_Subr Sautoload;
  54254. +
  54255. +int Fautoload(int , int , int , int , int );
  54256. +
  54257. +int un_autoload(int oldqueue);
  54258. +
  54259. +int do_autoload(int fundef,
  54260. +                int funname);
  54261. +
  54262. +extern struct Lisp_Subr Seval;
  54263. +
  54264. +int Feval(int );
  54265. +
  54266. +extern struct Lisp_Subr Sapply;
  54267. +
  54268. +int Fapply(int , int * );
  54269. +
  54270. +int apply1(int fn,
  54271. +           int arg);
  54272. +
  54273. +int call0(int fn);
  54274. +
  54275. +int call1(int fn,
  54276. +          int arg1);
  54277. +
  54278. +int call2(int fn,
  54279. +          int arg1,
  54280. +          int arg2);
  54281. +
  54282. +int call3(int fn,
  54283. +          int arg1,
  54284. +          int arg2,
  54285. +          int arg3);
  54286. +
  54287. +int call4(int fn,
  54288. +          int arg1,
  54289. +          int arg2,
  54290. +          int arg3,
  54291. +          int arg4);
  54292. +
  54293. +int call5(int fn,
  54294. +          int arg1,
  54295. +          int arg2,
  54296. +          int arg3,
  54297. +          int arg4,
  54298. +          int arg5);
  54299. +
  54300. +int call6(int fn,
  54301. +          int arg1,
  54302. +          int arg2,
  54303. +          int arg3,
  54304. +          int arg4,
  54305. +          int arg5,
  54306. +          int arg6);
  54307. +
  54308. +extern struct Lisp_Subr Sfuncall;
  54309. +
  54310. +int Ffuncall(int , int * );
  54311. +
  54312. +int apply_lambda(int fun,
  54313. +                 int args,
  54314. +                 int eval_flag);
  54315. +
  54316. +int funcall_lambda(int fun,
  54317. +                   int nargs,
  54318. +                   register int * arg_vector);
  54319. +
  54320. +void grow_specpdl(void);
  54321. +
  54322. +void specbind(int symbol,
  54323. +              int value);
  54324. +
  54325. +void record_unwind_protect(int (* function)(),
  54326. +                           int arg);
  54327. +
  54328. +int unbind_to(int count,
  54329. +              int value);
  54330. +
  54331. +extern struct Lisp_Subr Sbacktrace_debug;
  54332. +
  54333. +int Fbacktrace_debug(int , int );
  54334. +
  54335. +extern struct Lisp_Subr Sbacktrace;
  54336. +
  54337. +int Fbacktrace(void);
  54338. +
  54339. +extern struct Lisp_Subr Sbacktrace_frame;
  54340. +
  54341. +int Fbacktrace_frame(int );
  54342. +
  54343. +int syms_of_eval(void);
  54344. +
  54345. diff -rup --new-file baseline/fsf/emacs/src/fileio.c amiga/fsf/emacs/src/fileio.c
  54346. --- baseline/fsf/emacs/src/fileio.c    Sun Sep  4 18:10:14 1994
  54347. +++ amiga/fsf/emacs/src/fileio.c    Sat Sep 28 00:00:00 1996
  54348. @@ -294,6 +294,9 @@ on VMS, perhaps instead a string ending 
  54349.    p = beg + XSTRING (file)->size;
  54350.  
  54351.    while (p != beg && p[-1] != '/'
  54352. +#ifdef    AMIGA
  54353. +          && p[-1] != ':' /* CHFIXME: replace this call with AmigaOS function? */
  54354. +#endif    /* AMIGA */
  54355.  #ifdef VMS
  54356.       && p[-1] != ':' && p[-1] != ']' && p[-1] != '>'
  54357.  #endif /* VMS */
  54358. @@ -349,6 +352,9 @@ or the entire name if it contains no sla
  54359.    end = p = beg + XSTRING (file)->size;
  54360.  
  54361.    while (p != beg && p[-1] != '/'
  54362. +#ifdef    AMIGA
  54363. +         && p[-1] != ':' /* CHFIXME: dos.library call, also check this function and above */
  54364. +#endif    /* AMIGA */
  54365.  #ifdef VMS
  54366.       && p[-1] != ':' && p[-1] != ']' && p[-1] != '>'
  54367.  #endif /* VMS */
  54368. @@ -449,6 +455,11 @@ file_name_as_directory (out, in)
  54369.        out[size] = '\0';
  54370.      }
  54371.  #else /* not VMS */
  54372. +#ifdef    AMIGA /* CHFIXME: check */
  54373. +  /* AmigaOS syntax, append slash if the last char isn't a ':' or '/' */
  54374. +  if (out[size] != '/' && out[size] != ':' && size != 0)
  54375. +    strcat (out, "/");
  54376. +#else    /* not AMIGA */
  54377.    /* For Unix syntax, Append a slash if necessary */
  54378.  #ifdef MSDOS
  54379.    if (out[size] != ':' && out[size] != '/' && out[size] != '\\')
  54380. @@ -456,6 +467,7 @@ file_name_as_directory (out, in)
  54381.    if (out[size] != '/')
  54382.  #endif
  54383.      strcat (out, "/");
  54384. +#endif /* not AMIGA */
  54385.  #endif /* not VMS */
  54386.    return out;
  54387.  }
  54388. @@ -631,7 +643,7 @@ directory_file_name (src, dst)
  54389.       But leave "/" unchanged; do not change it to "".  */
  54390.    strcpy (dst, src);
  54391.    if (slen > 1 
  54392. -#ifdef MSDOS
  54393. +#if defined(MSDOS) || defined(AMIGA)
  54394.        && (dst[slen - 1] == '/' || dst[slen - 1] == '/')
  54395.        && dst[slen - 2] != ':'
  54396.  #else
  54397. @@ -708,6 +720,110 @@ See also the function `substitute-in-fil
  54398.       (name, defalt)
  54399.       Lisp_Object name, defalt;
  54400.  {
  54401. +#ifdef AMIGA
  54402. +  unsigned char *nm, *tilde, *newdir, *colon, *t_pos, *target;
  54403. +
  54404. +  CHECK_STRING (name, 0);
  54405. +
  54406. +  nm = XSTRING (name)->data;
  54407. +  /* Find base directory */
  54408. +  if (NILP (defalt))
  54409. +      defalt = current_buffer->directory;
  54410. +  CHECK_STRING (defalt, 1);
  54411. +  newdir = XSTRING (defalt)->data;
  54412. +
  54413. +  /* Concat newdir w/ nm and canonicalize */
  54414. +  /* newdir always contains at least the device name.
  54415. +     It is assumed canonical */
  54416. +  target = (unsigned char *)alloca(strlen(nm) + strlen(newdir) + 2);
  54417. +  file_name_as_directory (target, newdir);
  54418. +  t_pos = target + strlen(target);
  54419. +
  54420. +  while (*nm)
  54421. +  {
  54422. +      unsigned char *comp_end = nm;
  54423. +      int comp_len;
  54424. +
  54425. +      /* Find next component of path (everything upto the next /) */
  54426. +      do comp_end++; while (comp_end[0] && comp_end[-1] != '/' && comp_end[-1] != ':');
  54427. +      comp_len = comp_end - nm;
  54428. +
  54429. +      if (comp_len == 1 && nm[0] == '/' ||
  54430. +      nm[0] == '.' && nm[1] == '.' &&
  54431. +      (comp_len == 2 || comp_len == 3 && nm[2] == '/'))
  54432. +      {
  54433. +      /* Previous directory */
  54434. +      if (t_pos > target && t_pos[-1] != ':')
  54435. +      {
  54436. +          t_pos--; /* Back up over / */
  54437. +          while (t_pos > target &&
  54438. +             t_pos[-1] != ':' && t_pos[-1] != '/') t_pos--;
  54439. +      }
  54440. +      }
  54441. +      else if (comp_len == 2 && nm[0] == '.' && nm[1] == '/' ||
  54442. +           comp_len == 1 && nm[0] == '.') ; /* Ignore . */
  54443. +      else if (nm[0] == ':') /* Just keep disk name */
  54444. +      {
  54445. +      char *new_pos;
  54446. +
  54447. +      *t_pos = 0; /* Limit search for : */
  54448. +      t_pos = index(target, ':');
  54449. +      if (t_pos) t_pos++;
  54450. +      else t_pos = target;
  54451. +      }
  54452. +      else if (nm[0] == '~' || index(nm, ':'))
  54453. +      {
  54454. +      char *exp_name;
  54455. +
  54456. +      if (nm[0] == '~')
  54457. +          if (nm[1] == '/' || nm[1] == 0) /* Home directory */
  54458. +          {
  54459. +          newdir = (unsigned char *) egetenv ("HOME");
  54460. +          if (!newdir) newdir = (unsigned char *) "s:";
  54461. +          }
  54462. +          else
  54463. +          {
  54464. +          /* Handle ~ followed by user name.  */
  54465. +          char lastc = nm[comp_len - 1];
  54466. +          int len = comp_len - 1;
  54467. +
  54468. +          if (lastc == ':' || lastc == '/') len--;
  54469. +
  54470. +          /* ~name becomes name: */
  54471. +          newdir = (unsigned char *) alloca (len + 2);
  54472. +          bcopy((char *) nm + 1, newdir, len);
  54473. +          newdir[len] = ':';
  54474. +          newdir[len + 1] = 0;
  54475. +          }
  54476. +      else /* we have name: */
  54477. +      {
  54478. +          newdir = (char *)alloca(comp_len + 1);
  54479. +          bcopy(nm, newdir, comp_len);
  54480. +          newdir[comp_len] = 0;
  54481. +      }
  54482. +      exp_name = (char *)alloca(1024);
  54483. +      if (expand_path(newdir, exp_name, 1024))
  54484. +      {
  54485. +          char *colon = strchr(exp_name, ':');
  54486. +
  54487. +          /* Detect paths with multiple colons (eg from PATH:) and
  54488. +         leave them alone. They create confusion. */
  54489. +          if (!(colon && strchr(colon + 1, ':'))) newdir = exp_name;
  54490. +      }
  54491. +      target = (unsigned char *)alloca(strlen(nm) + strlen(newdir) + 2);
  54492. +      file_name_as_directory (target, newdir);
  54493. +      t_pos = target + strlen(target);
  54494. +      }
  54495. +      else /* Copy component */
  54496. +      {
  54497. +      bcopy(nm, t_pos, comp_len);
  54498. +       t_pos += comp_len;
  54499. +      }
  54500. +
  54501. +      nm = comp_end;
  54502. +  }
  54503. +  return make_string (target, t_pos - target);
  54504. +#else /* not AMIGA */
  54505.    unsigned char *nm;
  54506.    
  54507.    register unsigned char *newdir, *p, *o;
  54508. @@ -1151,6 +1267,7 @@ See also the function `substitute-in-fil
  54509.  #endif
  54510.  
  54511.    return make_string (target, o - target);
  54512. +#endif /* not AMIGA */
  54513.  }
  54514.  #if 0
  54515.  /* Changed this DEFUN to a DEAFUN, so as not to confuse `make-docfile'.
  54516. @@ -1510,6 +1627,23 @@ duplicates what `expand-file-name' does.
  54517.  
  54518.    for (p = nm; p != endp; p++)
  54519.      {
  54520. +#ifdef AMIGA /* CHFIXME: check */
  54521. +      if (p[0] == '~' && p != nm && p[-1] == '/')
  54522. +    {
  54523. +        nm = p;
  54524. +        substituted = 1;
  54525. +    }
  54526. +      else if (p[0] == ':')
  54527. +    {
  54528. +          char *p2 = p;
  54529. +      while (p2 > nm && p2[-1] != ':' && p2[-1] != '/') p2--;
  54530. +      if (p2 != nm)
  54531. +        {
  54532. +          nm = p2;
  54533. +          substituted = 1;
  54534. +        }
  54535. +    }
  54536. +#else /* not AMIGA */
  54537.        if ((p[0] == '~' ||
  54538.  #ifdef APOLLO
  54539.         /* // at start of file name is meaningful in Apollo system */
  54540. @@ -1537,6 +1671,7 @@ duplicates what `expand-file-name' does.
  54541.        substituted = 1;
  54542.      }
  54543.  #endif /* MSDOS */
  54544. +#endif /* not AMIGA */
  54545.      }
  54546.  
  54547.  #ifdef VMS
  54548. @@ -2153,6 +2288,13 @@ On Unix, this is a name starting with a 
  54549.  
  54550.    CHECK_STRING (filename, 0);
  54551.    ptr = XSTRING (filename)->data;
  54552. +#ifdef    AMIGA
  54553. +  /* An absolute filename has a non-leading ':' in it */
  54554. +  if (*ptr != ':')
  54555. +      while (*ptr)
  54556. +      if (*ptr++ == ':') return Qt;
  54557. +  return Qnil;
  54558. +#else    /* not AMIGA */
  54559.    if (*ptr == '/' || *ptr == '~'
  54560.  #ifdef VMS
  54561.  /* ??? This criterion is probably wrong for '<'.  */
  54562. @@ -2167,6 +2309,7 @@ On Unix, this is a name starting with a 
  54563.      return Qt;
  54564.    else
  54565.      return Qnil;
  54566. +#endif /* not AMIGA */
  54567.  }
  54568.  
  54569.  DEFUN ("file-exists-p", Ffile_exists_p, Sfile_exists_p, 1, 1, 0,
  54570. @@ -2273,7 +2416,15 @@ Otherwise returns nil.")
  54571.        xfree (buf);
  54572.        bufsize *= 2;
  54573.      }
  54574. +  /* OK.  This is required on the Amiga, but I suspect that it makes
  54575. +   * sense to not accept a NULL link.  This should probably be merged in,
  54576. +   * but that is someone else's decision.
  54577. +   */
  54578. +#ifndef AMIGA
  54579.    if (valsize == -1)
  54580. +#else
  54581. +  if (valsize <= 0)
  54582. +#endif
  54583.      {
  54584.        xfree (buf);
  54585.        return Qnil;
  54586. diff -rup --new-file baseline/fsf/emacs/src/fileio_protos.h amiga/fsf/emacs/src/fileio_protos.h
  54587. --- baseline/fsf/emacs/src/fileio_protos.h    Wed Dec 31 17:00:00 1969
  54588. +++ amiga/fsf/emacs/src/fileio_protos.h    Sat Sep 28 00:00:00 1996
  54589. @@ -0,0 +1,297 @@
  54590. +/* Prototypes for functions defined in
  54591. +fileio.c
  54592. + */
  54593. +
  54594. +extern int auto_saving;
  54595. +
  54596. +extern int auto_save_mode_bits;
  54597. +
  54598. +extern int Vfile_name_handler_alist;
  54599. +
  54600. +extern int Vafter_insert_file_functions;
  54601. +
  54602. +extern int Vwrite_region_annotate_functions;
  54603. +
  54604. +extern int Vauto_save_list_file_name;
  54605. +
  54606. +extern int insert_default_directory;
  54607. +
  54608. +extern int vms_stmlf_recfm;
  54609. +
  54610. +extern int Vinhibit_file_name_handlers;
  54611. +
  54612. +extern int Vinhibit_file_name_operation;
  54613. +
  54614. +extern int Qfile_error;
  54615. +
  54616. +extern int Qfile_already_exists;
  54617. +
  54618. +extern int Qfile_name_history;
  54619. +
  54620. +extern int Qcar_less_than_car;
  54621. +
  54622. +int report_file_error(char * string,
  54623. +                      int data);
  54624. +
  54625. +int close_file_unwind(int fd);
  54626. +
  54627. +int restore_point_unwind(int location);
  54628. +
  54629. +extern int Qexpand_file_name;
  54630. +
  54631. +extern int Qdirectory_file_name;
  54632. +
  54633. +extern int Qfile_name_directory;
  54634. +
  54635. +extern int Qfile_name_nondirectory;
  54636. +
  54637. +extern int Qunhandled_file_name_directory;
  54638. +
  54639. +extern int Qfile_name_as_directory;
  54640. +
  54641. +extern int Qcopy_file;
  54642. +
  54643. +extern int Qmake_directory;
  54644. +
  54645. +extern int Qdelete_directory;
  54646. +
  54647. +extern int Qdelete_file;
  54648. +
  54649. +extern int Qrename_file;
  54650. +
  54651. +extern int Qadd_name_to_file;
  54652. +
  54653. +extern int Qmake_symbolic_link;
  54654. +
  54655. +extern int Qfile_exists_p;
  54656. +
  54657. +extern int Qfile_executable_p;
  54658. +
  54659. +extern int Qfile_readable_p;
  54660. +
  54661. +extern int Qfile_symlink_p;
  54662. +
  54663. +extern int Qfile_writable_p;
  54664. +
  54665. +extern int Qfile_directory_p;
  54666. +
  54667. +extern int Qfile_accessible_directory_p;
  54668. +
  54669. +extern int Qfile_modes;
  54670. +
  54671. +extern int Qset_file_modes;
  54672. +
  54673. +extern int Qfile_newer_than_file_p;
  54674. +
  54675. +extern int Qinsert_file_contents;
  54676. +
  54677. +extern int Qwrite_region;
  54678. +
  54679. +extern int Qverify_visited_file_modtime;
  54680. +
  54681. +extern int Qset_visited_file_modtime;
  54682. +
  54683. +extern struct Lisp_Subr Sfind_file_name_handler;
  54684. +
  54685. +int Ffind_file_name_handler(int , int );
  54686. +
  54687. +extern struct Lisp_Subr Sfile_name_directory;
  54688. +
  54689. +int Ffile_name_directory(int );
  54690. +
  54691. +extern struct Lisp_Subr Sfile_name_nondirectory;
  54692. +
  54693. +int Ffile_name_nondirectory(int );
  54694. +
  54695. +extern struct Lisp_Subr Sunhandled_file_name_directory;
  54696. +
  54697. +int Funhandled_file_name_directory(int );
  54698. +
  54699. +char * file_name_as_directory(char * out,
  54700. +                              char * in);
  54701. +
  54702. +extern struct Lisp_Subr Sfile_name_as_directory;
  54703. +
  54704. +int Ffile_name_as_directory(int );
  54705. +
  54706. +int directory_file_name(char * src,
  54707. +                        char * dst);
  54708. +
  54709. +extern struct Lisp_Subr Sdirectory_file_name;
  54710. +
  54711. +int Fdirectory_file_name(int );
  54712. +
  54713. +extern struct Lisp_Subr Smake_temp_name;
  54714. +
  54715. +int Fmake_temp_name(int );
  54716. +
  54717. +extern struct Lisp_Subr Sexpand_file_name;
  54718. +
  54719. +int Fexpand_file_name(int , int );
  54720. +
  54721. +extern struct Lisp_Subr Ssubstitute_in_file_name;
  54722. +
  54723. +int Fsubstitute_in_file_name(int );
  54724. +
  54725. +int expand_and_dir_to_file(int filename,
  54726. +                           int defdir);
  54727. +
  54728. +int barf_or_query_if_file_exists(int absname,
  54729. +                                 unsigned char * querystring,
  54730. +                                 int interactive);
  54731. +
  54732. +extern struct Lisp_Subr Scopy_file;
  54733. +
  54734. +int Fcopy_file(int , int , int , int );
  54735. +
  54736. +extern struct Lisp_Subr Smake_directory_internal;
  54737. +
  54738. +int Fmake_directory_internal(int );
  54739. +
  54740. +extern struct Lisp_Subr Sdelete_directory;
  54741. +
  54742. +int Fdelete_directory(int );
  54743. +
  54744. +extern struct Lisp_Subr Sdelete_file;
  54745. +
  54746. +int Fdelete_file(int );
  54747. +
  54748. +extern struct Lisp_Subr Srename_file;
  54749. +
  54750. +int Frename_file(int , int , int );
  54751. +
  54752. +extern struct Lisp_Subr Sadd_name_to_file;
  54753. +
  54754. +int Fadd_name_to_file(int , int , int );
  54755. +
  54756. +extern struct Lisp_Subr Smake_symbolic_link;
  54757. +
  54758. +int Fmake_symbolic_link(int , int , int );
  54759. +
  54760. +extern struct Lisp_Subr Sfile_name_absolute_p;
  54761. +
  54762. +int Ffile_name_absolute_p(int );
  54763. +
  54764. +extern struct Lisp_Subr Sfile_exists_p;
  54765. +
  54766. +int Ffile_exists_p(int );
  54767. +
  54768. +extern struct Lisp_Subr Sfile_executable_p;
  54769. +
  54770. +int Ffile_executable_p(int );
  54771. +
  54772. +extern struct Lisp_Subr Sfile_readable_p;
  54773. +
  54774. +int Ffile_readable_p(int );
  54775. +
  54776. +extern struct Lisp_Subr Sfile_symlink_p;
  54777. +
  54778. +int Ffile_symlink_p(int );
  54779. +
  54780. +extern struct Lisp_Subr Sfile_writable_p;
  54781. +
  54782. +int Ffile_writable_p(int );
  54783. +
  54784. +extern struct Lisp_Subr Sfile_directory_p;
  54785. +
  54786. +int Ffile_directory_p(int );
  54787. +
  54788. +extern struct Lisp_Subr Sfile_accessible_directory_p;
  54789. +
  54790. +int Ffile_accessible_directory_p(int );
  54791. +
  54792. +extern struct Lisp_Subr Sfile_modes;
  54793. +
  54794. +int Ffile_modes(int );
  54795. +
  54796. +extern struct Lisp_Subr Sset_file_modes;
  54797. +
  54798. +int Fset_file_modes(int , int );
  54799. +
  54800. +extern struct Lisp_Subr Sset_default_file_modes;
  54801. +
  54802. +int Fset_default_file_modes(int );
  54803. +
  54804. +extern struct Lisp_Subr Sdefault_file_modes;
  54805. +
  54806. +int Fdefault_file_modes(void);
  54807. +
  54808. +extern struct Lisp_Subr Sfile_newer_than_file_p;
  54809. +
  54810. +int Ffile_newer_than_file_p(int , int );
  54811. +
  54812. +extern struct Lisp_Subr Sinsert_file_contents;
  54813. +
  54814. +int Finsert_file_contents(int , int , int , int , int );
  54815. +
  54816. +extern struct Lisp_Subr Swrite_region;
  54817. +
  54818. +int Fwrite_region(int , int , int , int , int );
  54819. +
  54820. +extern struct Lisp_Subr Scar_less_than_car;
  54821. +
  54822. +int Fcar_less_than_car(int , int );
  54823. +
  54824. +int build_annotations(int start,
  54825. +                      int end);
  54826. +
  54827. +int a_write(int desc,
  54828. +            register char * addr,
  54829. +            register int len,
  54830. +            int pos,
  54831. +            int * annot);
  54832. +
  54833. +int e_write(int desc,
  54834. +            register char * addr,
  54835. +            register int len);
  54836. +
  54837. +extern struct Lisp_Subr Sverify_visited_file_modtime;
  54838. +
  54839. +int Fverify_visited_file_modtime(int );
  54840. +
  54841. +extern struct Lisp_Subr Sclear_visited_file_modtime;
  54842. +
  54843. +int Fclear_visited_file_modtime(void);
  54844. +
  54845. +extern struct Lisp_Subr Svisited_file_modtime;
  54846. +
  54847. +int Fvisited_file_modtime(void);
  54848. +
  54849. +extern struct Lisp_Subr Sset_visited_file_modtime;
  54850. +
  54851. +int Fset_visited_file_modtime(int );
  54852. +
  54853. +int auto_save_error(void);
  54854. +
  54855. +int auto_save_1(void);
  54856. +
  54857. +int do_auto_save_unwind(int desc);
  54858. +
  54859. +extern struct Lisp_Subr Sdo_auto_save;
  54860. +
  54861. +int Fdo_auto_save(int , int );
  54862. +
  54863. +extern struct Lisp_Subr Sset_buffer_auto_saved;
  54864. +
  54865. +int Fset_buffer_auto_saved(void);
  54866. +
  54867. +extern struct Lisp_Subr Sclear_buffer_auto_save_failure;
  54868. +
  54869. +int Fclear_buffer_auto_save_failure(void);
  54870. +
  54871. +extern struct Lisp_Subr Srecent_auto_save_p;
  54872. +
  54873. +int Frecent_auto_save_p(void);
  54874. +
  54875. +int double_dollars(int val);
  54876. +
  54877. +extern struct Lisp_Subr Sread_file_name_internal;
  54878. +
  54879. +int Fread_file_name_internal(int , int , int );
  54880. +
  54881. +extern struct Lisp_Subr Sread_file_name;
  54882. +
  54883. +int Fread_file_name(int , int , int , int , int );
  54884. +
  54885. +int syms_of_fileio(void);
  54886. +
  54887. diff -rup --new-file baseline/fsf/emacs/src/filelock.c amiga/fsf/emacs/src/filelock.c
  54888. --- baseline/fsf/emacs/src/filelock.c    Wed Oct  5 22:02:41 1994
  54889. +++ amiga/fsf/emacs/src/filelock.c    Sat Sep 28 00:00:00 1996
  54890. @@ -57,7 +57,9 @@ extern DIR *opendir ();
  54891.  extern int errno;
  54892.  
  54893.  extern char *egetenv ();
  54894. +#ifndef AMIGA
  54895.  extern char *strcpy ();
  54896. +#endif
  54897.  
  54898.  #ifdef DECLARE_GETPWUID_WITH_UID_T
  54899.  extern struct passwd *getpwuid (uid_t);
  54900. diff -rup --new-file baseline/fsf/emacs/src/filelock_protos.h amiga/fsf/emacs/src/filelock_protos.h
  54901. --- baseline/fsf/emacs/src/filelock_protos.h    Wed Dec 31 17:00:00 1969
  54902. +++ amiga/fsf/emacs/src/filelock_protos.h    Sat Sep 28 00:00:00 1996
  54903. @@ -0,0 +1,4 @@
  54904. +/* Prototypes for functions defined in
  54905. +filelock.c
  54906. + */
  54907. +
  54908. diff -rup --new-file baseline/fsf/emacs/src/filemode_protos.h amiga/fsf/emacs/src/filemode_protos.h
  54909. --- baseline/fsf/emacs/src/filemode_protos.h    Wed Dec 31 17:00:00 1969
  54910. +++ amiga/fsf/emacs/src/filemode_protos.h    Sat Sep 28 00:00:00 1996
  54911. @@ -0,0 +1,18 @@
  54912. +/* Prototypes for functions defined in
  54913. +filemode.c
  54914. + */
  54915. +
  54916. +void filemodestring(struct stat * statp,
  54917. +                    char * str);
  54918. +
  54919. +void mode_string(int mode,
  54920. +                 char * str);
  54921. +
  54922. +char ftypelet(long bits);
  54923. +
  54924. +void rwx(int bits,
  54925. +         char * chars);
  54926. +
  54927. +void setst(int bits,
  54928. +           char * chars);
  54929. +
  54930. diff -rup --new-file baseline/fsf/emacs/src/firstfile.c amiga/fsf/emacs/src/firstfile.c
  54931. --- baseline/fsf/emacs/src/firstfile.c    Wed Dec 31 17:00:00 1969
  54932. +++ amiga/fsf/emacs/src/firstfile.c    Sat Sep 28 00:00:00 1996
  54933. @@ -0,0 +1,4 @@
  54934. +int first_data = 1;
  54935. +int first_bss;
  54936. +
  54937. +void first_function() { }
  54938. diff -rup --new-file baseline/fsf/emacs/src/floatfns.c amiga/fsf/emacs/src/floatfns.c
  54939. --- baseline/fsf/emacs/src/floatfns.c    Tue May 10 17:17:39 1994
  54940. +++ amiga/fsf/emacs/src/floatfns.c    Sat Sep 28 00:00:00 1996
  54941. @@ -49,7 +49,7 @@ the Free Software Foundation, 675 Mass A
  54942.  #include "lisp.h"
  54943.  #include "syssignal.h"
  54944.  
  54945. -Lisp_Object Qarith_error;
  54946. +extern Lisp_Object Qarith_error;
  54947.  
  54948.  #ifdef LISP_FLOAT_TYPE
  54949.  
  54950. @@ -911,9 +911,15 @@ float_error (signo)
  54951.  #endif /* FLOAT_CATCH_SIGILL */
  54952.  
  54953.  #ifdef HAVE_MATHERR
  54954. +#ifdef AMIGA
  54955. +int
  54956. +__matherr (x)
  54957. +     struct __exception *x;
  54958. +#else
  54959.  int 
  54960.  matherr (x)
  54961.       struct exception *x;
  54962. +#endif
  54963.  {
  54964.    Lisp_Object args;
  54965.    if (! in_float)
  54966. diff -rup --new-file baseline/fsf/emacs/src/floatfns_protos.h amiga/fsf/emacs/src/floatfns_protos.h
  54967. --- baseline/fsf/emacs/src/floatfns_protos.h    Wed Dec 31 17:00:00 1969
  54968. +++ amiga/fsf/emacs/src/floatfns_protos.h    Sat Sep 28 00:00:00 1996
  54969. @@ -0,0 +1,12 @@
  54970. +/* Prototypes for functions defined in
  54971. +floatfns.c
  54972. + */
  54973. +
  54974. +extern struct Lisp_Subr Sfloor;
  54975. +
  54976. +int Ffloor(int , int );
  54977. +
  54978. +int init_floatfns(void);
  54979. +
  54980. +int syms_of_floatfns(void);
  54981. +
  54982. diff -rup --new-file baseline/fsf/emacs/src/fns_protos.h amiga/fsf/emacs/src/fns_protos.h
  54983. --- baseline/fsf/emacs/src/fns_protos.h    Wed Dec 31 17:00:00 1969
  54984. +++ amiga/fsf/emacs/src/fns_protos.h    Sat Sep 28 00:00:00 1996
  54985. @@ -0,0 +1,193 @@
  54986. +/* Prototypes for functions defined in
  54987. +fns.c
  54988. + */
  54989. +
  54990. +extern int Qstring_lessp;
  54991. +
  54992. +extern int Qprovide;
  54993. +
  54994. +extern int Qrequire;
  54995. +
  54996. +extern int Qyes_or_no_p_history;
  54997. +
  54998. +extern struct Lisp_Subr Sidentity;
  54999. +
  55000. +int Fidentity(int );
  55001. +
  55002. +extern struct Lisp_Subr Srandom;
  55003. +
  55004. +int Frandom(int );
  55005. +
  55006. +extern struct Lisp_Subr Slength;
  55007. +
  55008. +int Flength(int );
  55009. +
  55010. +extern struct Lisp_Subr Sstring_equal;
  55011. +
  55012. +int Fstring_equal(int , int );
  55013. +
  55014. +extern struct Lisp_Subr Sstring_lessp;
  55015. +
  55016. +int Fstring_lessp(int , int );
  55017. +
  55018. +int concat2(int s1,
  55019. +            int s2);
  55020. +
  55021. +extern struct Lisp_Subr Sappend;
  55022. +
  55023. +int Fappend(int , int * );
  55024. +
  55025. +extern struct Lisp_Subr Sconcat;
  55026. +
  55027. +int Fconcat(int , int * );
  55028. +
  55029. +extern struct Lisp_Subr Svconcat;
  55030. +
  55031. +int Fvconcat(int , int * );
  55032. +
  55033. +extern struct Lisp_Subr Scopy_sequence;
  55034. +
  55035. +int Fcopy_sequence(int );
  55036. +
  55037. +int concat(int nargs,
  55038. +           int * args,
  55039. +           enum Lisp_Type target_type,
  55040. +           int last_special);
  55041. +
  55042. +extern struct Lisp_Subr Scopy_alist;
  55043. +
  55044. +int Fcopy_alist(int );
  55045. +
  55046. +extern struct Lisp_Subr Ssubstring;
  55047. +
  55048. +int Fsubstring(int , int , int );
  55049. +
  55050. +extern struct Lisp_Subr Snthcdr;
  55051. +
  55052. +int Fnthcdr(int , int );
  55053. +
  55054. +extern struct Lisp_Subr Snth;
  55055. +
  55056. +int Fnth(int , int );
  55057. +
  55058. +extern struct Lisp_Subr Selt;
  55059. +
  55060. +int Felt(int , int );
  55061. +
  55062. +extern struct Lisp_Subr Smember;
  55063. +
  55064. +int Fmember(int , int );
  55065. +
  55066. +extern struct Lisp_Subr Smemq;
  55067. +
  55068. +int Fmemq(int , int );
  55069. +
  55070. +extern struct Lisp_Subr Sassq;
  55071. +
  55072. +int Fassq(int , int );
  55073. +
  55074. +int assq_no_quit(register int key,
  55075. +                 int list);
  55076. +
  55077. +extern struct Lisp_Subr Sassoc;
  55078. +
  55079. +int Fassoc(int , int );
  55080. +
  55081. +extern struct Lisp_Subr Srassq;
  55082. +
  55083. +int Frassq(int , int );
  55084. +
  55085. +extern struct Lisp_Subr Sdelq;
  55086. +
  55087. +int Fdelq(int , int );
  55088. +
  55089. +extern struct Lisp_Subr Sdelete;
  55090. +
  55091. +int Fdelete(int , int );
  55092. +
  55093. +extern struct Lisp_Subr Snreverse;
  55094. +
  55095. +int Fnreverse(int );
  55096. +
  55097. +extern struct Lisp_Subr Sreverse;
  55098. +
  55099. +int Freverse(int );
  55100. +
  55101. +extern struct Lisp_Subr Ssort;
  55102. +
  55103. +int Fsort(int , int );
  55104. +
  55105. +int merge(int org_l1,
  55106. +          int org_l2,
  55107. +          int pred);
  55108. +
  55109. +extern struct Lisp_Subr Sget;
  55110. +
  55111. +int Fget(int , int );
  55112. +
  55113. +extern struct Lisp_Subr Sput;
  55114. +
  55115. +int Fput(int , int , int );
  55116. +
  55117. +extern struct Lisp_Subr Sequal;
  55118. +
  55119. +int Fequal(int , int );
  55120. +
  55121. +int internal_equal(register int o1,
  55122. +                   register int o2,
  55123. +                   int depth);
  55124. +
  55125. +extern struct Lisp_Subr Sfillarray;
  55126. +
  55127. +int Ffillarray(int , int );
  55128. +
  55129. +int nconc2(int s1,
  55130. +           int s2);
  55131. +
  55132. +extern struct Lisp_Subr Snconc;
  55133. +
  55134. +int Fnconc(int , int * );
  55135. +
  55136. +void mapcar1(int leni,
  55137. +             int * vals,
  55138. +             int fn,
  55139. +             int seq);
  55140. +
  55141. +extern struct Lisp_Subr Smapconcat;
  55142. +
  55143. +int Fmapconcat(int , int , int );
  55144. +
  55145. +extern struct Lisp_Subr Smapcar;
  55146. +
  55147. +int Fmapcar(int , int );
  55148. +
  55149. +extern struct Lisp_Subr Sy_or_n_p;
  55150. +
  55151. +int Fy_or_n_p(int );
  55152. +
  55153. +int do_yes_or_no_p(int prompt);
  55154. +
  55155. +extern struct Lisp_Subr Syes_or_no_p;
  55156. +
  55157. +int Fyes_or_no_p(int );
  55158. +
  55159. +extern struct Lisp_Subr Sload_average;
  55160. +
  55161. +int Fload_average(void);
  55162. +
  55163. +extern int Vfeatures;
  55164. +
  55165. +extern struct Lisp_Subr Sfeaturep;
  55166. +
  55167. +int Ffeaturep(int );
  55168. +
  55169. +extern struct Lisp_Subr Sprovide;
  55170. +
  55171. +int Fprovide(int );
  55172. +
  55173. +extern struct Lisp_Subr Srequire;
  55174. +
  55175. +int Frequire(int , int );
  55176. +
  55177. +int syms_of_fns(void);
  55178. +
  55179. diff -rup --new-file baseline/fsf/emacs/src/frame.c amiga/fsf/emacs/src/frame.c
  55180. --- baseline/fsf/emacs/src/frame.c    Fri Sep  9 21:01:36 1994
  55181. +++ amiga/fsf/emacs/src/frame.c    Sat Sep 28 00:00:00 1996
  55182. @@ -25,6 +25,15 @@ the Free Software Foundation, 675 Mass A
  55183.  #include "termhooks.h"
  55184.  #include "window.h"
  55185.  
  55186. +#ifdef USE_PROTOS
  55187. +#include "protos.h"
  55188. +#endif
  55189. +
  55190. +/* CHFIXME: cleanup HAVE_MOUSE changes, add staticpro, cleanup AMIGA changes (undo/change MULTI_FRAME changes) */
  55191. +#ifdef AMIGA /* CHFIXME */
  55192. +#include "amiga.h"
  55193. +#endif
  55194. +
  55195.  #ifdef MULTI_FRAME
  55196.  
  55197.  #include "buffer.h"
  55198. @@ -1082,7 +1091,9 @@ you should call `unfocus-frame' afterwar
  55199.  
  55200.    return Qnil;
  55201.  }
  55202. +#endif
  55203.  
  55204. +#ifdef AMIGA
  55205.  DEFUN ("make-frame-visible", Fmake_frame_visible, Smake_frame_visible,
  55206.         0, 1, "",
  55207.    "Make the frame FRAME visible (assuming it is an X-window).\n\
  55208. @@ -1090,13 +1101,15 @@ If omitted, FRAME defaults to the curren
  55209.    (frame)
  55210.       Lisp_Object frame;
  55211.  {
  55212. +#ifdef MULTI_FRAME
  55213.    if (NILP (frame))
  55214.      XSET (frame, Lisp_Frame, selected_frame);
  55215. -
  55216. +#endif
  55217. +  
  55218.    CHECK_LIVE_FRAME (frame, 0);
  55219.  
  55220.    /* I think this should be done with a hook.  */
  55221. -#ifdef HAVE_X_WINDOWS
  55222. +#if defined(HAVE_X_WINDOWS) || defined(AMIGA)
  55223.    if (FRAME_X_P (XFRAME (frame)))
  55224.      {
  55225.        FRAME_SAMPLE_VISIBILITY (XFRAME (frame));
  55226. @@ -1109,7 +1122,8 @@ If omitted, FRAME defaults to the curren
  55227.  
  55228.    return frame;
  55229.  }
  55230. -
  55231. +#endif
  55232. +#ifdef MULTI_FRAME
  55233.  DEFUN ("make-frame-invisible", Fmake_frame_invisible, Smake_frame_invisible,
  55234.         0, 2, "",
  55235.    "Make the frame FRAME invisible (assuming it is an X-window).\n\
  55236. @@ -1232,8 +1246,8 @@ DEFUN ("visible-frame-list", Fvisible_fr
  55237.      }
  55238.    return value;
  55239.  }
  55240. -
  55241. -
  55242. +#endif
  55243. +#ifdef AMIGA
  55244.  DEFUN ("raise-frame", Fraise_frame, Sraise_frame, 1, 1, 0,
  55245.    "Bring FRAME to the front, so it occludes any frames it overlaps.\n\
  55246.  If FRAME is invisible, make it visible.\n\
  55247. @@ -1268,7 +1282,7 @@ doesn't support multiple overlapping fra
  55248.  
  55249.    return Qnil;
  55250.  }
  55251. -
  55252. +#ifdef MULTI_FRAME
  55253.  
  55254.  DEFUN ("redirect-frame-focus", Fredirect_frame_focus, Sredirect_frame_focus,
  55255.         1, 2, 0,
  55256. @@ -1336,19 +1350,8 @@ See `redirect-frame-focus'.")
  55257.  
  55258.  
  55259.  
  55260. -Lisp_Object
  55261. -get_frame_param (frame, prop)
  55262. -     register struct frame *frame;
  55263. -     Lisp_Object prop;
  55264. -{
  55265. -  register Lisp_Object tem;
  55266. -
  55267. -  tem = Fassq (prop, frame->param_alist);
  55268. -  if (EQ (tem, Qnil))
  55269. -    return tem;
  55270. -  return Fcdr (tem);
  55271. -}
  55272. -
  55273. +#endif
  55274. +#ifdef AMIGA
  55275.  void
  55276.  store_in_alist (alistptr, prop, val)
  55277.       Lisp_Object *alistptr, val;
  55278. @@ -1362,20 +1365,48 @@ store_in_alist (alistptr, prop, val)
  55279.    else
  55280.      Fsetcdr (tem, val);
  55281.  }
  55282. +#endif
  55283. +#ifdef AMIGA /* CHFIXME */
  55284. +#ifndef MULTI_FRAME
  55285. +#ifdef USE_EXTERNAL_MENU_BAR
  55286. +Lisp_Object the_only_param_alist; /* can\'t store it in the_only_window, it\'s collectile */
  55287. +Lisp_Object the_only_menu_bar_items; /* can\'t store it in the_only_window, it\'s collectile */
  55288. +Lisp_Object the_only_menu_bar_vector; /* can\'t store it in the_only_window, it\'s collectile */
  55289. +#endif
  55290. +#ifdef USE_SCROLL_BARS
  55291. +Lisp_Object the_only_scroll_bars;
  55292. +Lisp_Object the_only_condemned_scroll_bars;
  55293. +#endif
  55294. +#endif
  55295. +Lisp_Object
  55296. +get_frame_param (frame, prop)
  55297. +     FRAME_PTR frame;
  55298. +     Lisp_Object prop;
  55299. +{
  55300. +  register Lisp_Object tem;
  55301. +
  55302. +  tem = Fassq (prop, FRAME_PARAM_ALIST(f));
  55303. +  if (EQ (tem, Qnil))
  55304. +    return tem;
  55305. +  return Fcdr (tem);
  55306. +}
  55307. +
  55308. +extern Lisp_Object Qminibuffer; /* comes at end of this file CHFIXME */
  55309.  
  55310.  void
  55311.  store_frame_param (f, prop, val)
  55312. -     struct frame *f;
  55313. +     FRAME_PTR f;
  55314.       Lisp_Object prop, val;
  55315.  {
  55316.    register Lisp_Object tem;
  55317.  
  55318. -  tem = Fassq (prop, f->param_alist);
  55319. +  tem = Fassq (prop, FRAME_PARAM_ALIST(f));
  55320.    if (EQ (tem, Qnil))
  55321. -    f->param_alist = Fcons (Fcons (prop, val), f->param_alist);
  55322. +    FRAME_PARAM_ALIST(f) = Fcons (Fcons (prop, val), FRAME_PARAM_ALIST(f));
  55323.    else
  55324.      Fsetcdr (tem, val);
  55325.  
  55326. +#ifndef AMIGA /* CHFIXME meaning ? */
  55327.    if (EQ (prop, Qminibuffer)
  55328.        && XTYPE (val) == Lisp_Window)
  55329.      {
  55330. @@ -1386,9 +1417,22 @@ store_frame_param (f, prop, val)
  55331.      error ("can't change the surrogate minibuffer of a frame with its own minibuffer");
  55332.  
  55333.        /* Install the chosen minibuffer window, with proper buffer.  */
  55334. -      f->minibuffer_window = val;
  55335. +      FRAME_MINIBUF_WINDOW(W) = val;
  55336.      }
  55337. +#endif
  55338.  }
  55339. +#endif /* AMIGA */
  55340. +
  55341. +#ifdef AMIGA
  55342. +/* CHFIXME: defined below */
  55343. +
  55344. +extern Lisp_Object Qname;
  55345. +extern Lisp_Object Qheight;
  55346. +extern Lisp_Object Qwidth;
  55347. +extern Lisp_Object Qmodeline;
  55348. +extern Lisp_Object Qminibuffer;
  55349. +extern Lisp_Object Qunsplittable;
  55350. +extern Lisp_Object Qmenu_bar_lines;
  55351.  
  55352.  DEFUN ("frame-parameters", Fframe_parameters, Sframe_parameters, 0, 1, 0,
  55353.    "Return the parameters-alist of frame FRAME.\n\
  55354. @@ -1412,14 +1456,21 @@ If FRAME is omitted, return information 
  55355.    if (!FRAME_LIVE_P (f))
  55356.      return Qnil;
  55357.  
  55358. -  alist = Fcopy_alist (f->param_alist);
  55359. +  alist = Fcopy_alist (FRAME_PARAM_ALIST(f));
  55360. +
  55361. +#ifdef AMIGA /* CHFIXME */
  55362. +  store_in_alist (&alist, Qname, build_string ("emacs"));
  55363. +#else
  55364.    store_in_alist (&alist, Qname, f->name);
  55365. +#endif
  55366.    store_in_alist (&alist, Qheight, make_number (FRAME_HEIGHT (f)));
  55367.    store_in_alist (&alist, Qwidth, make_number (FRAME_WIDTH (f)));
  55368.    store_in_alist (&alist, Qmodeline, (FRAME_WANTS_MODELINE_P (f) ? Qt : Qnil));
  55369.    store_in_alist (&alist, Qminibuffer,
  55370.            (! FRAME_HAS_MINIBUF_P (f) ? Qnil
  55371. +#ifndef AMIGA /* CHFIXME: meaning? */
  55372.             : FRAME_MINIBUF_ONLY_P (f) ? Qonly
  55373. +#endif
  55374.             : FRAME_MINIBUF_WINDOW (f)));
  55375.    store_in_alist (&alist, Qunsplittable, (FRAME_NO_SPLIT_P (f) ? Qt : Qnil));
  55376.  
  55377. @@ -1431,9 +1482,16 @@ If FRAME is omitted, return information 
  55378.  #endif
  55379.      /* This ought to be correct in f->param_alist for an X frame.  */
  55380.      store_in_alist (&alist, Qmenu_bar_lines, FRAME_MENU_BAR_LINES (f));
  55381. +#ifdef AMIGA /* CHFIXME */
  55382. +  {
  55383. +    if (EMACS_WIN(f))
  55384. +    x_report_frame_params (f, &alist);
  55385. +  }
  55386. +#endif
  55387.    return alist;
  55388.  }
  55389. -
  55390. +#endif
  55391. +#ifdef AMIGA
  55392.  DEFUN ("modify-frame-parameters", Fmodify_frame_parameters, 
  55393.         Smodify_frame_parameters, 2, 2, 0,
  55394.    "Modify the parameters of frame FRAME according to ALIST.\n\
  55395. @@ -1471,9 +1529,18 @@ The meaningful PARMs depend on the kind 
  55396.  #endif
  55397.  #endif
  55398.  
  55399. +#ifdef AMIGA /* CHFIXME */
  55400. +  {
  55401. +    if (EMACS_WIN(f))
  55402. +      x_set_frame_parameters (f, alist);
  55403. +  }
  55404. +#endif
  55405. +
  55406.    return Qnil;
  55407.  }
  55408. +#endif /* AMIGA */
  55409.  
  55410. +#ifdef MULTI_FRAME
  55411.  DEFUN ("frame-char-height", Fframe_char_height, Sframe_char_height,
  55412.    0, 1, 0,
  55413.    "Height in pixels of a line in the font in frame FRAME.\n\
  55414. @@ -1842,6 +1909,9 @@ Lisp_Object Qmenu_bar_lines;
  55415.  Lisp_Object Qwidth;
  55416.  
  55417.  Lisp_Object Vterminal_frame;
  55418. +#ifdef AMIGA
  55419. +Lisp_Object Vdefault_frame_alist;
  55420. +#endif
  55421.  
  55422.  /* Unless this function is defined, providing set-frame-height and
  55423.     set-frame-width doesn't help compatibility any, since they both
  55424. @@ -2025,10 +2095,73 @@ DEFUN ("mouse-position", Fmouse_position
  55425.       make-docfile does not pay attention to #if, for good reason!  */
  55426.    0)
  55427.    ()
  55428. +#ifndef HAVE_MOUSE
  55429.  {
  55430.    return Fcons (Qnil, Fcons (Qnil, Qnil));
  55431.  }
  55432. +#else
  55433. +{
  55434. +  FRAME_PTR f;
  55435. +  Lisp_Object lispy_dummy;
  55436. +  enum scroll_bar_part party_dummy;
  55437. +  Lisp_Object x, y;
  55438. +  int col, row;
  55439. +  unsigned long long_dummy;
  55440. +
  55441. +  f = selected_frame;
  55442. +  x = y = Qnil;
  55443. +
  55444. +  /* It's okay for the hook to refrain from storing anything.  */
  55445. +  if (mouse_position_hook)
  55446. +    (*mouse_position_hook) (&f,
  55447. +                &lispy_dummy, &party_dummy,
  55448. +                &x, &y,
  55449. +                &long_dummy);
  55450. +  if (! NILP (x))
  55451. +    {
  55452. +      col = XINT (x);
  55453. +      row = XINT (y);
  55454. +      pixel_to_glyph_coords (f, col, row, &col, &row, 0, 1);
  55455. +      XSETINT (x, col);
  55456. +      XSETINT (y, row);
  55457. +    }
  55458. +  lispy_dummy = Qnil;
  55459. +  return Fcons (lispy_dummy, Fcons (x, y));
  55460. +}
  55461. +
  55462. +DEFUN ("mouse-pixel-position", Fmouse_pixel_position,
  55463. +       Smouse_pixel_position, 0, 0, 0,
  55464. +  "Return a list (FRAME X . Y) giving the current mouse frame and position.\n\
  55465. +The position is given in pixel units, where (0, 0) is the\n\
  55466. +upper-left corner.\n\
  55467. +If Emacs is running on a mouseless terminal or hasn't been programmed\n\
  55468. +to read the mouse position, it returns the selected frame for FRAME\n\
  55469. +and nil for X and Y.")
  55470. +  ()
  55471. +{
  55472. +  FRAME_PTR f;
  55473. +  Lisp_Object lispy_dummy;
  55474. +  enum scroll_bar_part party_dummy;
  55475. +  Lisp_Object x, y;
  55476. +  int col, row;
  55477. +  unsigned long long_dummy;
  55478. +
  55479. +  f = selected_frame;
  55480. +  x = y = Qnil;
  55481. +
  55482. +  /* It's okay for the hook to refrain from storing anything.  */
  55483. +  if (mouse_position_hook)
  55484. +    (*mouse_position_hook) (&f,
  55485. +                &lispy_dummy, &party_dummy,
  55486. +                &x, &y,
  55487. +                &long_dummy);
  55488. +  lispy_dummy = Qnil;
  55489. +  return Fcons (lispy_dummy, Fcons (x, y));
  55490. +}
  55491. +#endif /* HAVE_MOUSE */
  55492. +
  55493.  
  55494. +#ifndef AMIGA
  55495.  void
  55496.  store_in_alist (alistptr, prop, val)
  55497.       Lisp_Object *alistptr, val;
  55498. @@ -2042,7 +2175,9 @@ store_in_alist (alistptr, prop, val)
  55499.    else
  55500.      Fsetcdr (tem, val);
  55501.  }
  55502. +#endif
  55503.  
  55504. +#ifndef AMIGA
  55505.  DEFUN ("frame-parameters", Fframe_parameters, Sframe_parameters, 0, 1, 0,
  55506.    /* Don't confuse make-docfile by having two doc strings for this function.
  55507.       make-docfile does not pay attention to #if, for good reason!  */
  55508. @@ -2075,7 +2210,9 @@ DEFUN ("frame-parameters", Fframe_parame
  55509.  
  55510.    return alist;
  55511.  }
  55512. +#endif
  55513.  
  55514. +#ifndef AMIGA
  55515.  DEFUN ("modify-frame-parameters", Fmodify_frame_parameters, 
  55516.         Smodify_frame_parameters, 2, 2, 0,
  55517.    /* Don't confuse make-docfile by having two doc strings for this function.
  55518. @@ -2086,6 +2223,7 @@ DEFUN ("modify-frame-parameters", Fmodif
  55519.  {
  55520.    return Qnil;
  55521.  }
  55522. +#endif
  55523.  
  55524.  DEFUN ("frame-live-p", Fframe_live_p, Sframe_live_p, 1, 1, 0,
  55525.    /* Don't confuse make-docfile by having two doc strings for this function.
  55526. @@ -2118,6 +2256,34 @@ syms_of_frame ()
  55527.      "The initial frame-object, which represents Emacs's stdout.");
  55528.    XFASTINT (Vterminal_frame) = 0;
  55529.  
  55530. +#ifdef AMIGA
  55531. +  DEFVAR_LISP ("default-frame-alist", &Vdefault_frame_alist,
  55532. +    "Alist of default values for frame creation.\n\
  55533. +These may be set in your init file, like this:\n\
  55534. +  (setq default-frame-alist '((width . 80) (height . 55)))\n\
  55535. +These override values given in window system configuration data, like\n\
  55536. +X Windows' defaults database.\n\
  55537. +For values specific to the first Emacs frame, see `initial-frame-alist'.\n\
  55538. +For values specific to the separate minibuffer frame, see\n\
  55539. +`minibuffer-frame-alist'.");
  55540. +  Vdefault_frame_alist = Qnil;
  55541. +#endif /* AMIGA */
  55542. +
  55543. +#ifdef USE_EXTERNAL_MENU_BAR
  55544. +  the_only_param_alist = Qnil;
  55545. +  staticpro(&the_only_param_alist);
  55546. +  the_only_menu_bar_items = Qnil;
  55547. +  staticpro(&the_only_menu_bar_items);
  55548. +  the_only_menu_bar_vector = Qnil;
  55549. +  staticpro(&the_only_menu_bar_vector);
  55550. +#endif /* USE_EXTERNAL_MENU_BAR */
  55551. +#ifdef USE_SCROLL_BARS
  55552. +  the_only_scroll_bars = Qnil;
  55553. +  staticpro(&the_only_scroll_bars);
  55554. +  the_only_condemned_scroll_bars = Qnil;
  55555. +  staticpro(&the_only_condemned_scroll_bars);
  55556. +#endif /* USE_SCROLL_BARS */
  55557. +
  55558.    defsubr (&Sselected_frame);
  55559.    defsubr (&Sframe_first_window);
  55560.    defsubr (&Sframep);
  55561. @@ -2135,6 +2301,15 @@ syms_of_frame ()
  55562.    defsubr (&Sframe_width);
  55563.    Ffset (intern ("screen-width"), intern ("frame-width"));
  55564.    defsubr (&Smouse_position);
  55565. +#ifdef AMIGA
  55566. +  defsubr (&Smouse_pixel_position);
  55567. +  defsubr (&Smake_frame_visible);
  55568. +#if 0
  55569. +  defsubr (&Smake_frame_invisible);
  55570. +#endif
  55571. +  defsubr (&Sraise_frame);
  55572. +  defsubr (&Slower_frame);
  55573. +#endif
  55574.    defsubr (&Sframe_parameters);
  55575.    defsubr (&Smodify_frame_parameters);
  55576.    defsubr (&Sframe_live_p);
  55577. diff -rup --new-file baseline/fsf/emacs/src/frame.h amiga/fsf/emacs/src/frame.h
  55578. --- baseline/fsf/emacs/src/frame.h    Tue Jul 12 21:15:24 1994
  55579. +++ amiga/fsf/emacs/src/frame.h    Sat Sep 28 00:00:00 1996
  55580. @@ -36,8 +36,13 @@ extern int message_buf_print;
  55581.     to represent the one frame we support.  This is cleaner than
  55582.     having miscellaneous random variables scattered about.  */
  55583.  
  55584. +#ifndef AMIGA
  55585.  enum output_method
  55586.  { output_termcap, output_x_window };
  55587. +#else
  55588. +enum output_method
  55589. +{ output_termcap, output_x_window, output_i_window }; /* intuition  CHFIXME, unused yet*/
  55590. +#endif
  55591.  
  55592.  struct frame
  55593.  {
  55594. @@ -84,8 +89,10 @@ struct frame
  55595.    /* New height and width for pending size change.  0 if no change pending.  */
  55596.    int new_height, new_width;
  55597.  
  55598. +#ifndef AMIGA /* no MULTIFRAME, CHFIXME */ /* these are undefined to catch erroneous references */
  55599.    /* Name of this frame: a Lisp string.  See also `explicit_name'.  */
  55600.    Lisp_Object name;
  55601. +#endif
  55602.  
  55603.    /* The frame which should receive keystrokes that occur in this
  55604.       frame, or nil if they should go to the frame itself.  This is
  55605. @@ -117,11 +124,13 @@ struct frame
  55606.       can actually appear to exist.  */
  55607.    Lisp_Object minibuffer_window;
  55608.  
  55609. +#ifndef AMIGA /* no MULTIFRAME, CHFIXME */
  55610.    /* Parameter alist of this frame.
  55611.       These are the parameters specified when creating the frame
  55612.       or modified with modify-frame-parameters.  */
  55613.    Lisp_Object param_alist;
  55614. -
  55615. +#endif
  55616. +  
  55617.    /* List of scroll bars on this frame.  
  55618.       Actually, we don't specify exactly what is stored here at all; the
  55619.       scroll bar implementation code can use it to store anything it likes.
  55620. @@ -129,17 +138,23 @@ struct frame
  55621.       instead of in the `display' structure so that the garbage
  55622.       collector doesn't need to look inside the window-system-dependent
  55623.       structure.  */
  55624. +#if defined(MULTI_FRAME) || !defined(USE_SCROLL_BARS) /* no MULTI_FRAME, CHFIXME */
  55625.    Lisp_Object scroll_bars;
  55626.    Lisp_Object condemned_scroll_bars;
  55627. +#endif
  55628.  
  55629. +#ifndef AMIGA /* no MULTIFRAME, CHFIXME */
  55630.    /* List of elements to display in the menu bar.
  55631.       The elements have the form (KEY STRING . nil) to start;
  55632.       when they are displayed, the hpos of the left edge goes in the cddr.  */
  55633.    Lisp_Object menu_bar_items;
  55634. +#endif
  55635.  
  55636. +#ifndef AMIGA /* no MULTIFRAME, CHFIXME */
  55637.    /* Alist of elements (FACE-NAME . FACE-VECTOR-DATA).  */
  55638.    Lisp_Object face_alist;
  55639. -
  55640. +#endif
  55641. +  
  55642.    /* The output method says how the contents of this frame
  55643.       are displayed.  It could be using termcap, or using an X window.  */
  55644.    enum output_method output_method;
  55645. @@ -152,7 +167,7 @@ struct frame
  55646.    /* Number of lines of menu bar.  */
  55647.    int menu_bar_lines;
  55648.  
  55649. -#ifdef USE_X_TOOLKIT
  55650. +#if defined(USE_X_TOOLKIT) || defined(USE_EXTERNAL_MENU_BAR) /* CHFIXME */
  55651.    /* Nonzero means using a menu bar that comes from the X toolkit.  */
  55652.    int external_menu_bar;
  55653.  #endif
  55654. @@ -234,10 +249,12 @@ struct frame
  55655.       for lines beyond a certain vpos.  This is the vpos.  */
  55656.    int scroll_bottom_vpos;
  55657.  
  55658. +#ifndef AMIGA
  55659.    /* A vector that records the entire structure of this frame's menu bar.
  55660.       For the format of the data, see extensive comments in xmenu.c.
  55661.       Only the X toolkit version uses this.  */
  55662.    Lisp_Object menu_bar_vector;
  55663. +#endif
  55664.    /* Number of elements in the vector that have meaningful data.  */
  55665.    int menu_bar_items_used;
  55666.  };
  55667. @@ -264,6 +281,7 @@ typedef struct frame *FRAME_PTR;
  55668.  #define FRAME_WIDTH(f) (f)->width
  55669.  #define FRAME_NEW_HEIGHT(f) (f)->new_height
  55670.  #define FRAME_NEW_WIDTH(f) (f)->new_width
  55671. +#define FRAME_DISPLAY(f) ((f)->display.x)
  55672.  #define FRAME_MENU_BAR_LINES(f) (f)->menu_bar_lines
  55673.  #ifdef USE_X_TOOLKIT
  55674.  #define FRAME_EXTERNAL_MENU_BAR(f) (f)->external_menu_bar
  55675. @@ -293,9 +311,11 @@ typedef struct frame *FRAME_PTR;
  55676.  #define FRAME_FOCUS_FRAME(f) (f)->focus_frame
  55677.  #define FRAME_CAN_HAVE_SCROLL_BARS(f) ((f)->can_have_scroll_bars)
  55678.  #define FRAME_HAS_VERTICAL_SCROLL_BARS(f) ((f)->has_vertical_scroll_bars)
  55679. +#define FRAME_PARAM_ALIST(f) ((f)->param_alist)
  55680.  #define FRAME_SCROLL_BARS(f) ((f)->scroll_bars)
  55681.  #define FRAME_CONDEMNED_SCROLL_BARS(f) ((f)->condemned_scroll_bars)
  55682.  #define FRAME_MENU_BAR_ITEMS(f) ((f)->menu_bar_items)
  55683. +#define FRAME_MENU_BAR_VECTOR(f) ((f)->menu_bar_vector)
  55684.  
  55685.  /* Emacs's redisplay code could become confused if a frame's
  55686.     visibility changes at arbitrary times.  For example, if a frame is
  55687. @@ -384,11 +404,25 @@ extern struct frame the_only_frame;
  55688.  extern int selected_frame;
  55689.  extern int last_nonminibuf_frame;
  55690.  
  55691. +#ifdef USE_EXTERNAL_MENU_BAR
  55692. +extern Lisp_Object the_only_param_alist; /* can\'t store it in the_only_window, it\'s collectile */
  55693. +extern Lisp_Object the_only_menu_bar_items; /* can\'t store it in the_only_window, it\'s collectile */
  55694. +extern Lisp_Object the_only_menu_bar_vector; /* can\'t store it in the_only_window, it\'s collectile */
  55695. +#endif /* USE_EXTERNAL_MENU_BAR */
  55696. +#ifdef USE_SCROLL_BARS
  55697. +Lisp_Object the_only_scroll_bars;
  55698. +Lisp_Object the_only_condemned_scroll_bars;
  55699. +#endif
  55700. +
  55701.  #define XFRAME(f) selected_frame
  55702.  #define WINDOW_FRAME(w) selected_frame
  55703.  
  55704.  #define FRAME_LIVE_P(f) 1
  55705. +#ifndef AMIGA
  55706.  #define FRAME_TERMCAP_P(f) 1
  55707. +#else
  55708. +#define FRAME_TERMCAP_P(f) 0
  55709. +#endif
  55710.  #define FRAME_X_P(f) 0
  55711.  #define FRAME_MINIBUF_ONLY_P(f) 0
  55712.  #define FRAME_HAS_MINIBUF_P(f) 1
  55713. @@ -400,6 +434,12 @@ extern int last_nonminibuf_frame;
  55714.  #define FRAME_NEW_HEIGHT(f) (the_only_frame.new_height)
  55715.  #define FRAME_NEW_WIDTH(f) (the_only_frame.new_width)
  55716.  #define FRAME_MENU_BAR_LINES(f) (the_only_frame.menu_bar_lines)
  55717. +#ifdef AMIGA
  55718. +#define FRAME_DISPLAY(f) (the_only_frame.display.x)
  55719. +#endif
  55720. +#ifdef USE_EXTERNAL_MENU_BAR
  55721. +#define FRAME_EXTERNAL_MENU_BAR(f) the_only_frame.external_menu_bar
  55722. +#endif /* USE_EXTERNAL_MENU_BAR */
  55723.  #define FRAME_CURSOR_X(f) (the_only_frame.cursor_x)
  55724.  #define FRAME_CURSOR_Y(f) (the_only_frame.cursor_y)
  55725.  #define FRAME_SET_VISIBLE(f,p) (p)
  55726. @@ -423,10 +463,20 @@ extern int last_nonminibuf_frame;
  55727.  #define FRAME_CAN_HAVE_SCROLL_BARS(f) (the_only_frame.can_have_scroll_bars)
  55728.  #define FRAME_HAS_VERTICAL_SCROLL_BARS(f) \
  55729.    (the_only_frame.has_vertical_scroll_bars)
  55730. +#ifdef USE_EXTERNAL_MENU_BAR
  55731. +#define FRAME_PARAM_ALIST(f) (the_only_param_alist)
  55732. +#define FRAME_MENU_BAR_ITEMS(f) (the_only_menu_bar_items)
  55733. +#define FRAME_MENU_BAR_VECTOR(f) (the_only_menu_bar_vector)
  55734. +#else
  55735. +#define FRAME_MENU_BAR_ITEMS(f) (the_only_frame.menu_bar_items)
  55736. +#endif
  55737. +#ifdef USE_SCROLL_BARS
  55738. +#define FRAME_SCROLL_BARS(f) (the_only_scroll_bars)
  55739. +#define FRAME_CONDEMNED_SCROLL_BARS(f) (the_only_condemned_scroll_bars)
  55740. +#else
  55741.  #define FRAME_SCROLL_BARS(f) (the_only_frame.scroll_bars)
  55742.  #define FRAME_CONDEMNED_SCROLL_BARS(f) (the_only_frame.condemned_scroll_bars)
  55743. -#define FRAME_MENU_BAR_ITEMS(f) (the_only_frame.menu_bar_items)
  55744. -
  55745. +#endif
  55746.  /* See comments in definition above.  */
  55747.  #define FRAME_SAMPLE_VISIBILITY(f) (0)
  55748.  
  55749. diff -rup --new-file baseline/fsf/emacs/src/frame_protos.h amiga/fsf/emacs/src/frame_protos.h
  55750. --- baseline/fsf/emacs/src/frame_protos.h    Wed Dec 31 17:00:00 1969
  55751. +++ amiga/fsf/emacs/src/frame_protos.h    Sat Sep 28 00:00:00 1996
  55752. @@ -0,0 +1,96 @@
  55753. +/* Prototypes for functions defined in
  55754. +frame.c
  55755. + */
  55756. +
  55757. +extern int Qheight;
  55758. +
  55759. +extern int Qminibuffer;
  55760. +
  55761. +extern int Qmodeline;
  55762. +
  55763. +extern int Qname;
  55764. +
  55765. +extern int Qunsplittable;
  55766. +
  55767. +extern int Qmenu_bar_lines;
  55768. +
  55769. +extern int Qwidth;
  55770. +
  55771. +extern int Vterminal_frame;
  55772. +
  55773. +extern struct Lisp_Subr Sselected_frame;
  55774. +
  55775. +int Fselected_frame(void);
  55776. +
  55777. +extern struct Lisp_Subr Sframep;
  55778. +
  55779. +int Fframep(int );
  55780. +
  55781. +extern struct Lisp_Subr Sset_frame_height;
  55782. +
  55783. +int Fset_frame_height(int , int , int );
  55784. +
  55785. +extern struct Lisp_Subr Sset_frame_width;
  55786. +
  55787. +int Fset_frame_width(int , int , int );
  55788. +
  55789. +extern struct Lisp_Subr Sset_frame_size;
  55790. +
  55791. +int Fset_frame_size(int , int , int );
  55792. +
  55793. +extern struct Lisp_Subr Sframe_height;
  55794. +
  55795. +int Fframe_height(int );
  55796. +
  55797. +extern struct Lisp_Subr Sframe_width;
  55798. +
  55799. +int Fframe_width(int );
  55800. +
  55801. +extern struct Lisp_Subr Sframe_char_height;
  55802. +
  55803. +int Fframe_char_height(int );
  55804. +
  55805. +extern struct Lisp_Subr Sframe_char_width;
  55806. +
  55807. +int Fframe_char_width(int );
  55808. +
  55809. +extern struct Lisp_Subr Sframe_pixel_height;
  55810. +
  55811. +int Fframe_pixel_height(int );
  55812. +
  55813. +extern struct Lisp_Subr Sframe_pixel_width;
  55814. +
  55815. +int Fframe_pixel_width(int );
  55816. +
  55817. +extern struct Lisp_Subr Sset_screen_height;
  55818. +
  55819. +int Fset_screen_height(int , int );
  55820. +
  55821. +extern struct Lisp_Subr Sset_screen_width;
  55822. +
  55823. +int Fset_screen_width(int , int );
  55824. +
  55825. +extern struct Lisp_Subr Smouse_position;
  55826. +
  55827. +int Fmouse_position(void);
  55828. +
  55829. +void store_in_alist(int * alistptr,
  55830. +                    int prop,
  55831. +                    int val);
  55832. +
  55833. +extern struct Lisp_Subr Sframe_parameters;
  55834. +
  55835. +int Fframe_parameters(int );
  55836. +
  55837. +extern struct Lisp_Subr Smodify_frame_parameters;
  55838. +
  55839. +int Fmodify_frame_parameters(int , int );
  55840. +
  55841. +extern struct Lisp_Subr Sframe_live_p;
  55842. +
  55843. +int Fframe_live_p(int );
  55844. +
  55845. +int syms_of_frame(void);
  55846. +
  55847. +int keys_of_frame(void);
  55848. +
  55849. diff -rup --new-file baseline/fsf/emacs/src/getloadavg_protos.h amiga/fsf/emacs/src/getloadavg_protos.h
  55850. --- baseline/fsf/emacs/src/getloadavg_protos.h    Wed Dec 31 17:00:00 1969
  55851. +++ amiga/fsf/emacs/src/getloadavg_protos.h    Sat Sep 28 00:00:00 1996
  55852. @@ -0,0 +1,7 @@
  55853. +/* Prototypes for functions defined in
  55854. +getloadavg.c
  55855. + */
  55856. +
  55857. +int getloadavg(double * loadavg,
  55858. +               int nelem);
  55859. +
  55860. diff -rup --new-file baseline/fsf/emacs/src/indent_protos.h amiga/fsf/emacs/src/indent_protos.h
  55861. --- baseline/fsf/emacs/src/indent_protos.h    Wed Dec 31 17:00:00 1969
  55862. +++ amiga/fsf/emacs/src/indent_protos.h    Sat Sep 28 00:00:00 1996
  55863. @@ -0,0 +1,74 @@
  55864. +/* Prototypes for functions defined in
  55865. +indent.c
  55866. + */
  55867. +
  55868. +extern int indent_tabs_mode;
  55869. +
  55870. +extern int last_known_column;
  55871. +
  55872. +extern int last_known_column_point;
  55873. +
  55874. +extern int last_known_column_modified;
  55875. +
  55876. +struct Lisp_Vector * buffer_display_table(void);
  55877. +
  55878. +extern struct Lisp_Subr Scurrent_column;
  55879. +
  55880. +int Fcurrent_column(void);
  55881. +
  55882. +int invalidate_current_column(void);
  55883. +
  55884. +int current_column(void);
  55885. +
  55886. +extern struct Lisp_Subr Sindent_to;
  55887. +
  55888. +int Findent_to(int , int );
  55889. +
  55890. +extern struct Lisp_Subr Scurrent_indentation;
  55891. +
  55892. +int Fcurrent_indentation(void);
  55893. +
  55894. +int position_indentation(register int pos);
  55895. +
  55896. +int indented_beyond_p(int pos,
  55897. +                      int column);
  55898. +
  55899. +extern struct Lisp_Subr Smove_to_column;
  55900. +
  55901. +int Fmove_to_column(int , int );
  55902. +
  55903. +extern struct position val_compute_motion;
  55904. +
  55905. +struct position * compute_motion(int from,
  55906. +                                 int fromvpos,
  55907. +                                 int fromhpos,
  55908. +                                 int to,
  55909. +                                 int tovpos,
  55910. +
  55911. + int tohpos,
  55912. +                                 register int width,
  55913. +                                 int hscroll,
  55914. +                                 int tab_offset,
  55915. +                                 struct window * win);
  55916. +
  55917. +extern struct Lisp_Subr Scompute_motion;
  55918. +
  55919. +int Fcompute_motion(int , int , int , int , int , int , int );
  55920. +
  55921. +int pos_tab_offset(struct window * w,
  55922. +                   register int pos);
  55923. +
  55924. +extern struct position val_vmotion;
  55925. +
  55926. +struct position * vmotion(register int from,
  55927. +                          register int vtarget,
  55928. +                          register int width,
  55929. +                          int hscroll,
  55930. +                          int window);
  55931. +
  55932. +extern struct Lisp_Subr Svertical_motion;
  55933. +
  55934. +int Fvertical_motion(int , int );
  55935. +
  55936. +int syms_of_indent(void);
  55937. +
  55938. diff -rup --new-file baseline/fsf/emacs/src/insdel_protos.h amiga/fsf/emacs/src/insdel_protos.h
  55939. --- baseline/fsf/emacs/src/insdel_protos.h    Wed Dec 31 17:00:00 1969
  55940. +++ amiga/fsf/emacs/src/insdel_protos.h    Sat Sep 28 00:00:00 1996
  55941. @@ -0,0 +1,76 @@
  55942. +/* Prototypes for functions defined in
  55943. +insdel.c
  55944. + */
  55945. +
  55946. +int move_gap(int pos);
  55947. +
  55948. +void gap_left(register int pos,
  55949. +              int newgap);
  55950. +
  55951. +void gap_right(register int pos);
  55952. +
  55953. +void adjust_markers(register int from,
  55954. +                    register int to,
  55955. +                    register int amount);
  55956. +
  55957. +void adjust_point(int amount);
  55958. +
  55959. +int make_gap(int increment);
  55960. +
  55961. +int insert(register unsigned char * string,
  55962. +           register int length);
  55963. +
  55964. +void insert_1(register unsigned char * string,
  55965. +              register int length);
  55966. +
  55967. +int insert_from_string(int string,
  55968. +                       register int pos,
  55969. +                       register int length,
  55970. +                       int inherit);
  55971. +
  55972. +void insert_from_string_1(int string,
  55973. +                          register int pos,
  55974. +                          register int length,
  55975. +                          int inherit);
  55976. +
  55977. +void insert_char(int c);
  55978. +
  55979. +void insert_string(char * s);
  55980. +
  55981. +int insert_before_markers(unsigned char * string,
  55982. +                          register int length);
  55983. +
  55984. +int insert_from_string_before_marker(int string,
  55985. +                                     register int pos,
  55986. +                                     register int length,
  55987. +                                     int inherit);
  55988. +
  55989. +int del_range(register int from,
  55990. +              register int to);
  55991. +
  55992. +int del_range_1(register int from,
  55993. +                register int to,
  55994. +                register int prepare);
  55995. +
  55996. +int modify_region(struct buffer * buffer,
  55997. +                  int start,
  55998. +                  int end);
  55999. +
  56000. +int prepare_to_modify_buffer(int start,
  56001. +                             int end);
  56002. +
  56003. +int before_change_function_restore(int value);
  56004. +
  56005. +int after_change_function_restore(int value);
  56006. +
  56007. +int before_change_functions_restore(int value);
  56008. +
  56009. +int after_change_functions_restore(int value);
  56010. +
  56011. +int signal_before_change(int start,
  56012. +                         int end);
  56013. +
  56014. +int signal_after_change(int pos,
  56015. +                        int lendel,
  56016. +                        int lenins);
  56017. +
  56018. diff -rup --new-file baseline/fsf/emacs/src/intervals.h amiga/fsf/emacs/src/intervals.h
  56019. --- baseline/fsf/emacs/src/intervals.h    Tue May  3 19:19:38 1994
  56020. +++ amiga/fsf/emacs/src/intervals.h    Sat Sep 28 00:00:00 1996
  56021. @@ -227,10 +227,10 @@ extern void syms_of_textprop ();
  56022.  #define copy_intervals_to_string(string,buffer,position,length)
  56023.  #define verify_interval_modification(buffer,start,end)
  56024.  #define insert_interval_copy(source,position,end,sink,at)
  56025. -#define graft_intervals_into_buffer(tree,position,bufferptr)
  56026. +#define graft_intervals_into_buffer(source, position, length, buffer, inherit)
  56027.  #define offset_intervals(buffer,position,length)
  56028.  #define copy_intervals(tree,start,length)
  56029. -
  56030. +#define copy_text_properties(start, end, src, pos, dest, prop)
  56031.  #define syms_of_textprop()
  56032.  
  56033.  #endif /* don't support text properties */
  56034. diff -rup --new-file baseline/fsf/emacs/src/keyboard.c amiga/fsf/emacs/src/keyboard.c
  56035. --- baseline/fsf/emacs/src/keyboard.c    Wed Oct  5 22:19:25 1994
  56036. +++ amiga/fsf/emacs/src/keyboard.c    Sat Sep 28 00:00:00 1996
  56037. @@ -60,6 +60,20 @@ the Free Software Foundation, 675 Mass A
  56038.  /* Include systime.h after xterm.h to avoid double inclusion of time.h. */
  56039.  #include "systime.h"
  56040.  
  56041. +#ifdef AMIGA
  56042. +#define FAR far
  56043. +#else
  56044. +#define FAR
  56045. +#endif
  56046. +
  56047. +#ifdef USE_PROTOS
  56048. +#include "protos.h"
  56049. +#endif
  56050. +
  56051. +#ifdef USE_X_TOOLKIT /* CHFIXME */
  56052. +#define USE_EXTERNAL_MENU_BAR
  56053. +#endif
  56054. +
  56055.  extern int errno;
  56056.  
  56057.  /* Variables for blockinput.h: */
  56058. @@ -352,7 +366,10 @@ static Lisp_Object kbd_buffer_frame_or_w
  56059.     If kbd_fetch_ptr == kbd_store_ptr, the buffer is empty.
  56060.     This may be kbd_buffer + KBD_BUFFER_SIZE, meaning that the the
  56061.     next available char is in kbd_buffer[0].  */
  56062. -static struct input_event *kbd_fetch_ptr;
  56063. +#ifndef AMIGA
  56064. +static
  56065. +#endif
  56066. +struct input_event *kbd_fetch_ptr;
  56067.  
  56068.  /* Pointer to next place to store character in kbd_buffer.  This
  56069.     may be kbd_buffer + KBD_BUFFER_SIZE, meaning that the next
  56070. @@ -360,7 +377,10 @@ static struct input_event *kbd_fetch_ptr
  56071.  #ifdef __STDC__
  56072.  volatile
  56073.  #endif
  56074. -static struct input_event *kbd_store_ptr;
  56075. +#ifndef AMIGA
  56076. +static
  56077. +#endif
  56078. +struct input_event *kbd_store_ptr;
  56079.  
  56080.  /* The above pair of variables forms a "queue empty" flag.  When we
  56081.     enqueue a non-hook event, we increment kbd_write_count.  When we
  56082. @@ -933,7 +953,7 @@ DEFUN ("abort-recursive-edit", Fabort_re
  56083.  
  56084.  Lisp_Object Fcommand_execute ();
  56085.  static int read_key_sequence ();
  56086. -static void safe_run_hooks ();
  56087. +static void safe_run_hooks (Lisp_Object);
  56088.  
  56089.  Lisp_Object
  56090.  command_loop_1 ()
  56091. @@ -2312,7 +2332,7 @@ Lisp_Object Vsystem_key_alist;
  56092.  /* This is a list of keysym codes for special "accent" characters.
  56093.     It parallels lispy_accent_keys.  */
  56094.  
  56095. -static int lispy_accent_codes[] =
  56096. +static int FAR lispy_accent_codes[] =
  56097.  {
  56098.  #ifdef XK_dead_circumflex
  56099.    XK_dead_circumflex,
  56100. @@ -2384,7 +2404,7 @@ static int lispy_accent_codes[] =
  56101.  /* This is a list of Lisp names for special "accent" characters.
  56102.     It parallels lispy_accent_codes.  */
  56103.  
  56104. -static char *lispy_accent_keys[] =
  56105. +static char * FAR lispy_accent_keys[] =
  56106.  {
  56107.    "dead-circumflex",
  56108.    "dead-grave",
  56109. @@ -2403,7 +2423,7 @@ static char *lispy_accent_keys[] =
  56110.  
  56111.  /* You'll notice that this table is arranged to be conveniently
  56112.     indexed by X Windows keysym values.  */
  56113. -static char *lispy_function_keys[] =
  56114. +static char * FAR lispy_function_keys[] =
  56115.    {
  56116.      /* X Keysym value */
  56117.  
  56118. @@ -2497,7 +2517,7 @@ static char *lispy_function_keys[] =
  56119.      0, 0, 0, 0, 0, 0, 0, "delete"
  56120.      };
  56121.  
  56122. -static char *lispy_mouse_names[] = 
  56123. +static char * FAR lispy_mouse_names[] = 
  56124.  {
  56125.    "mouse-1", "mouse-2", "mouse-3", "mouse-4", "mouse-5"
  56126.  };
  56127. @@ -2541,9 +2561,9 @@ Lisp_Object Vdouble_click_time;
  56128.  
  56129.  int double_click_count;
  56130.  
  56131. -#ifdef USE_X_TOOLKIT
  56132. +#ifdef USE_EXTERNAL_MENU_BAR
  56133.  extern Lisp_Object map_event_to_object ();
  56134. -#endif /* USE_X_TOOLKIT  */
  56135. +#endif /* USE_EXTERNAL_MENU_BAR  */
  56136.  
  56137.  /* Given a struct input_event, build the lisp event which represents
  56138.     it.  If EVENT is 0, build a mouse movement event from the mouse
  56139. @@ -2651,7 +2671,7 @@ make_lispy_event (event)
  56140.          pixel_to_glyph_coords (f, XINT (event->x), XINT (event->y),
  56141.                     &column, &row, 0, 0);
  56142.  
  56143. -#ifdef USE_X_TOOLKIT
  56144. +#ifdef USE_EXTERNAL_MENU_BAR
  56145.          if (FRAME_EXTERNAL_MENU_BAR (f) && XINT (event->y) == -1)
  56146.  #else
  56147.          if (row < FRAME_MENU_BAR_LINES (f))
  56148. @@ -2667,13 +2687,13 @@ make_lispy_event (event)
  56149.          if (! (event->modifiers & down_modifier))
  56150.            return Qnil;
  56151.  
  56152. -#ifdef USE_X_TOOLKIT
  56153. +#ifdef USE_EXTERNAL_MENU_BAR
  56154.          /* The click happened in the menubar.
  56155.             Look for the menu item selected.  */
  56156.          item = map_event_to_object (event, f);
  56157.  
  56158.          XFASTINT (event->y) = 1;
  56159. -#else /* not USE_X_TOOLKIT  */
  56160. +#else /* not USE_EXTERNAL_MENU_BAR  */
  56161.          item = Qnil;
  56162.          items = FRAME_MENU_BAR_ITEMS (f);
  56163.          for (i = 0; i < XVECTOR (items)->size; i += 3)
  56164. @@ -2690,7 +2710,7 @@ make_lispy_event (event)
  56165.              break;
  56166.                }
  56167.            }
  56168. -#endif /* not USE_X_TOOLKIT  */
  56169. +#endif /* not USE_EXTERNAL_MENU_BAR  */
  56170.  
  56171.          position
  56172.            = Fcons (event->frame_or_window,
  56173. @@ -3137,7 +3157,7 @@ apply_modifiers_uncached (modifiers, bas
  56174.  }
  56175.  
  56176.  
  56177. -static char *modifier_names[] =
  56178. +static char * FAR modifier_names[] =
  56179.  {
  56180.    "up", "down", "drag", "click", "double", "triple", 0, 0,
  56181.    0, 0, 0, 0, 0, 0, 0, 0,
  56182. @@ -3554,7 +3574,14 @@ read_avail_input (expected)
  56183.        n_to_read = sizeof cbuf;
  56184.        fcntl (fileno (stdin), F_SETFL, O_NDELAY);
  56185.  #else
  56186. +#ifdef    AMIGA    /* This is where the input work finally gets done */
  56187. +  /* Note, The nread != 0 case isn't handled as it doesn't arise on the Amiga.
  56188. +     (Look carefully at calls to read_avail_input) */
  56189. +      assert(expected == 0); /* CHFIXME */
  56190. +      n_to_read = sizeof(cbuf);
  56191. +#else  /* not AMIGA */
  56192.        you lose;
  56193. +#endif /* not AMIGA */
  56194.  #endif
  56195.  #endif
  56196.  #endif /* not MSDOS */
  56197. @@ -3808,7 +3835,7 @@ menu_bar_items (old)
  56198.    for (mapno = nmaps - 1; mapno >= 0; mapno--)
  56199.      {
  56200.        if (! NILP (maps[mapno]))
  56201. -    def = get_keyelt (access_keymap (maps[mapno], Qmenu_bar, 1, 0));
  56202. +    def = get_keyelt (access_keymap (maps[mapno], Qmenu_bar, 1, 0), 0);
  56203.        else
  56204.      def = Qnil;
  56205.  
  56206. @@ -4297,7 +4324,7 @@ follow_key (key, nmaps, current, defs, n
  56207.      if (! NILP (current[i]))
  56208.        {
  56209.          next[i] =
  56210. -          get_keyelt (access_keymap (current[i], meta_prefix_char, 1, 0));
  56211. +          get_keyelt (access_keymap (current[i], meta_prefix_char, 1, 0), 0);
  56212.  
  56213.          /* Note that since we pass the resulting bindings through
  56214.             get_keymap_1, non-prefix bindings for meta-prefix-char
  56215. @@ -4316,7 +4343,7 @@ follow_key (key, nmaps, current, defs, n
  56216.      {
  56217.        if (! NILP (current[i]))
  56218.      {
  56219. -      defs[i] = get_keyelt (access_keymap (current[i], key, 1, 0));
  56220. +      defs[i] = get_keyelt (access_keymap (current[i], key, 1, 0), 0);
  56221.        if (! NILP (defs[i]))
  56222.          first_binding = i;
  56223.      }
  56224. @@ -4944,7 +4971,7 @@ read_key_sequence (keybuf, bufsize, prom
  56225.            fkey_next
  56226.              = get_keymap_1
  56227.                (get_keyelt
  56228. -               (access_keymap (fkey_map, meta_prefix_char, 1, 0)),
  56229. +               (access_keymap (fkey_map, meta_prefix_char, 1, 0), 0),
  56230.                 0, 1);
  56231.            XFASTINT (key) = XFASTINT (key) & ~meta_modifier;
  56232.          }
  56233. @@ -4952,7 +4979,7 @@ read_key_sequence (keybuf, bufsize, prom
  56234.          fkey_next = fkey_map;
  56235.  
  56236.            fkey_next
  56237. -        = get_keyelt (access_keymap (fkey_next, key, 1, 0));
  56238. +        = get_keyelt (access_keymap (fkey_next, key, 1, 0), 0);
  56239.  
  56240.  #if 0 /* I didn't turn this on, because it might cause trouble
  56241.       for the mapping of return into C-m and tab into C-i.  */
  56242. @@ -5048,7 +5075,7 @@ read_key_sequence (keybuf, bufsize, prom
  56243.          keytran_next
  56244.            = get_keymap_1
  56245.              (get_keyelt
  56246. -             (access_keymap (keytran_map, meta_prefix_char, 1, 0)),
  56247. +             (access_keymap (keytran_map, meta_prefix_char, 1, 0), 0),
  56248.               0, 1);
  56249.          XFASTINT (key) = XFASTINT (key) & ~meta_modifier;
  56250.            }
  56251. @@ -5056,7 +5083,7 @@ read_key_sequence (keybuf, bufsize, prom
  56252.            keytran_next = keytran_map;
  56253.  
  56254.          keytran_next
  56255. -          = get_keyelt (access_keymap (keytran_next, key, 1, 0));
  56256. +          = get_keyelt (access_keymap (keytran_next, key, 1, 0), 0);
  56257.  
  56258.          /* If the key translation map gives a function, not an
  56259.             array, then call the function with no args and use
  56260. diff -rup --new-file baseline/fsf/emacs/src/keyboard_protos.h amiga/fsf/emacs/src/keyboard_protos.h
  56261. --- baseline/fsf/emacs/src/keyboard_protos.h    Wed Dec 31 17:00:00 1969
  56262. +++ amiga/fsf/emacs/src/keyboard_protos.h    Sat Sep 28 00:00:00 1996
  56263. @@ -0,0 +1,480 @@
  56264. +/* Prototypes for functions defined in
  56265. +keyboard.c
  56266. + */
  56267. +
  56268. +extern int interrupt_input_blocked;
  56269. +
  56270. +extern int interrupt_input_pending;
  56271. +
  56272. +extern int Qdisabled;
  56273. +
  56274. +extern int Qdisabled_command_hook;
  56275. +
  56276. +extern int recent_keys_index;
  56277. +
  56278. +extern int total_keys;
  56279. +
  56280. +extern int recent_keys;
  56281. +
  56282. +extern int this_command_keys;
  56283. +
  56284. +extern int this_command_key_count;
  56285. +
  56286. +extern int menu_prompting;
  56287. +
  56288. +extern int menu_prompt_more_char;
  56289. +
  56290. +extern int getcjmp[14];
  56291. +
  56292. +extern int waiting_for_input;
  56293. +
  56294. +extern int echoing;
  56295. +
  56296. +extern int immediate_quit;
  56297. +
  56298. +extern int Vhelp_char;
  56299. +
  56300. +extern int Vhelp_form;
  56301. +
  56302. +extern int Vprefix_help_command;
  56303. +
  56304. +extern int Vmenu_bar_final_items;
  56305. +
  56306. +extern int quit_char;
  56307. +
  56308. +extern int Voverriding_local_map;
  56309. +
  56310. +extern int command_loop_level;
  56311. +
  56312. +extern int num_input_keys;
  56313. +
  56314. +extern int last_command_char;
  56315. +
  56316. +extern int last_nonmenu_event;
  56317. +
  56318. +extern int last_input_char;
  56319. +
  56320. +extern int Vunread_command_events;
  56321. +
  56322. +extern int unread_command_char;
  56323. +
  56324. +extern int unread_switch_frame;
  56325. +
  56326. +extern int extra_keyboard_modifiers;
  56327. +
  56328. +extern int meta_prefix_char;
  56329. +
  56330. +extern int last_non_minibuf_size;
  56331. +
  56332. +extern int Vauto_save_timeout;
  56333. +
  56334. +extern int num_input_chars;
  56335. +
  56336. +extern int num_nonmacro_input_chars;
  56337. +
  56338. +extern int auto_save_interval;
  56339. +
  56340. +extern int last_auto_save;
  56341. +
  56342. +extern int last_command;
  56343. +
  56344. +extern int this_command;
  56345. +
  56346. +extern int last_point_position;
  56347. +
  56348. +extern int last_point_position_buffer;
  56349. +
  56350. +extern int Vlast_event_frame;
  56351. +
  56352. +extern unsigned long last_event_timestamp;
  56353. +
  56354. +extern int Qself_insert_command;
  56355. +
  56356. +extern int Qforward_char;
  56357. +
  56358. +extern int Qbackward_char;
  56359. +
  56360. +extern int Qundefined;
  56361. +
  56362. +extern int read_key_sequence_cmd;
  56363. +
  56364. +extern int Vtop_level;
  56365. +
  56366. +extern int Vkeyboard_translate_table;
  56367. +
  56368. +extern int Vkey_translation_map;
  56369. +
  56370. +extern int Vdeactivate_mark;
  56371. +
  56372. +extern int Vlucid_menu_bar_dirty_flag;
  56373. +
  56374. +extern int Qrecompute_lucid_menubar;
  56375. +
  56376. +extern int Qactivate_menubar_hook;
  56377. +
  56378. +extern int Qpre_command_hook;
  56379. +
  56380. +extern int Qpost_command_hook;
  56381. +
  56382. +extern int Vpre_command_hook;
  56383. +
  56384. +extern int Vpost_command_hook;
  56385. +
  56386. +extern int Qcommand_hook_internal;
  56387. +
  56388. +extern int Vcommand_hook_internal;
  56389. +
  56390. +extern struct __iobuf * dribble;
  56391. +
  56392. +extern int input_pending;
  56393. +
  56394. +extern int meta_key;
  56395. +
  56396. +extern struct input_event kbd_buffer[256];
  56397. +
  56398. +extern int kbd_buffer_frame_or_window;
  56399. +
  56400. +extern struct input_event * kbd_fetch_ptr;
  56401. +
  56402. +extern struct input_event volatile * kbd_store_ptr;
  56403. +
  56404. +extern int do_mouse_tracking;
  56405. +
  56406. +extern int mouse_moved;
  56407. +
  56408. +extern int Qmouse_movement;
  56409. +
  56410. +extern int Qscroll_bar_movement;
  56411. +
  56412. +extern int Qswitch_frame;
  56413. +
  56414. +extern int Qfunction_key;
  56415. +
  56416. +extern int Qmouse_click;
  56417. +
  56418. +extern int Qevent_kind;
  56419. +
  56420. +extern int Qevent_symbol_elements;
  56421. +
  56422. +extern int Qmenu_enable;
  56423. +
  56424. +extern int Qevent_symbol_element_mask;
  56425. +
  56426. +extern int Qmodifier_cache;
  56427. +
  56428. +extern int Qmode_line;
  56429. +
  56430. +extern int Qvertical_line;
  56431. +
  56432. +extern int Qvertical_scroll_bar;
  56433. +
  56434. +extern int Qmenu_bar;
  56435. +
  56436. +extern int Qmenu_enable;
  56437. +
  56438. +extern int Qextended_command_history;
  56439. +
  56440. +extern int Qpolling_period;
  56441. +
  56442. +extern struct timeval * input_available_clear_time;
  56443. +
  56444. +extern int interrupt_input;
  56445. +
  56446. +extern int interrupts_deferred;
  56447. +
  56448. +extern int flow_control;
  56449. +
  56450. +extern void (* keyboard_init_hook)(void);
  56451. +
  56452. +extern int echo_keystrokes;
  56453. +
  56454. +extern int immediate_echo;
  56455. +
  56456. +extern char echobuf[300];
  56457. +
  56458. +extern char * echoptr;
  56459. +
  56460. +extern int cannot_suspend;
  56461. +
  56462. +int echo_prompt(char * str);
  56463. +
  56464. +int echo_char(int c);
  56465. +
  56466. +int echo_dash(void);
  56467. +
  56468. +int echo(void);
  56469. +
  56470. +int cancel_echoing(void);
  56471. +
  56472. +int echo_length(void);
  56473. +
  56474. +void echo_truncate(int len);
  56475. +
  56476. +void add_command_key(int key);
  56477. +
  56478. +int recursive_edit_1(void);
  56479. +
  56480. +int record_auto_save(void);
  56481. +
  56482. +int force_auto_save_soon(void);
  56483. +
  56484. +extern struct Lisp_Subr Srecursive_edit;
  56485. +
  56486. +int Frecursive_edit(void);
  56487. +
  56488. +int recursive_edit_unwind(int buffer);
  56489. +
  56490. +int cmd_error(int data);
  56491. +
  56492. +int command_loop(void);
  56493. +
  56494. +int command_loop_2(void);
  56495. +
  56496. +int top_level_2(void);
  56497. +
  56498. +int top_level_1(void);
  56499. +
  56500. +extern struct Lisp_Subr Stop_level;
  56501. +
  56502. +int Ftop_level(void);
  56503. +
  56504. +extern struct Lisp_Subr Sexit_recursive_edit;
  56505. +
  56506. +int Fexit_recursive_edit(void);
  56507. +
  56508. +extern struct Lisp_Subr Sabort_recursive_edit;
  56509. +
  56510. +int Fabort_recursive_edit(void);
  56511. +
  56512. +int command_loop_1(void);
  56513. +
  56514. +extern int polling_period;
  56515. +
  56516. +extern int poll_suppress_count;
  56517. +
  56518. +int start_polling(void);
  56519. +
  56520. +int stop_polling(void);
  56521. +
  56522. +void set_poll_suppress_count(int count);
  56523. +
  56524. +int bind_polling_period(int n);
  56525. +
  56526. +int make_ctrl_char(int c);
  56527. +
  56528. +int read_char(int commandflag,
  56529. +              int nmaps,
  56530. +              int * maps,
  56531. +              int prev_event,
  56532. +              int * used_mouse_menu);
  56533. +
  56534. +int print_help(int object);
  56535. +
  56536. +int save_getcjmp(int * temp);
  56537. +
  56538. +int restore_getcjmp(int * temp);
  56539. +
  56540. +int tracking_off(int old_value);
  56541. +
  56542. +extern struct Lisp_Subr Strack_mouse;
  56543. +
  56544. +int Ftrack_mouse(int );
  56545. +
  56546. +int readable_events(void);
  56547. +
  56548. +extern int stop_character;
  56549. +
  56550. +void kbd_buffer_store_event(register struct input_event * event);
  56551. +
  56552. +int kbd_buffer_get_event(void);
  56553. +
  56554. +void swallow_events(void);
  56555. +
  56556. +extern int accent_key_syms;
  56557. +
  56558. +extern int system_key_syms;
  56559. +
  56560. +extern int func_key_syms;
  56561. +
  56562. +extern int mouse_syms;
  56563. +
  56564. +extern int Vsystem_key_alist;
  56565. +
  56566. +extern int __far lispy_accent_codes[13];
  56567. +
  56568. +extern char * __far lispy_accent_keys[13];
  56569. +
  56570. +extern char * __far lispy_function_keys[256];
  56571. +
  56572. +extern char * __far lispy_mouse_names[5];
  56573. +
  56574. +extern int Qabove_handle;
  56575. +
  56576. +extern int Qhandle;
  56577. +
  56578. +extern int Qbelow_handle;
  56579. +
  56580. +extern int * scroll_bar_parts[3];
  56581. +
  56582. +extern int button_down_location;
  56583. +
  56584. +extern int last_mouse_button;
  56585. +
  56586. +extern int last_mouse_x;
  56587. +
  56588. +extern int last_mouse_y;
  56589. +
  56590. +extern unsigned long button_down_time;
  56591. +
  56592. +extern int Vdouble_click_time;
  56593. +
  56594. +extern int double_click_count;
  56595. +
  56596. +int make_lispy_event(struct input_event * event);
  56597. +
  56598. +int make_lispy_switch_frame(int frame);
  56599. +
  56600. +int parse_modifiers_uncached(int symbol,
  56601. +                             int * modifier_end);
  56602. +
  56603. +int apply_modifiers_uncached(int modifiers,
  56604. +                             char * base,
  56605. +                             int base_len);
  56606. +
  56607. +extern char * __far modifier_names[24];
  56608. +
  56609. +extern int modifier_symbols;
  56610. +
  56611. +int lispy_modifier_list(int modifiers);
  56612. +
  56613. +int parse_modifiers(int symbol);
  56614. +
  56615. +int apply_modifiers(int modifiers,
  56616. +                    int base);
  56617. +
  56618. +int reorder_modifiers(int symbol);
  56619. +
  56620. +int modify_event_symbol(int symbol_num,
  56621. +                        unsigned int modifiers,
  56622. +                        int symbol_kind,
  56623. +                        int name_alist,
  56624. +                        char ** name_table,
  56625. +                        int * symbol_table
  56626. +,
  56627. +                        int table_size);
  56628. +
  56629. +void get_input_pending(int * addr);
  56630. +
  56631. +int gobble_input(int expected);
  56632. +
  56633. +int record_asynch_buffer_change(void);
  56634. +
  56635. +int read_avail_input(int expected);
  56636. +
  56637. +void reinvoke_input_signal(void);
  56638. +
  56639. +int map_prompt(int map);
  56640. +
  56641. +extern int menu_bar_items_vector;
  56642. +
  56643. +extern int menu_bar_items_index;
  56644. +
  56645. +int menu_bar_items(int old);
  56646. +
  56647. +void menu_bar_one_keymap(int keymap);
  56648. +
  56649. +int menu_bar_item_1(int arg);
  56650. +
  56651. +void menu_bar_item(int key,
  56652. +                   int item_string,
  56653. +                   int def);
  56654. +
  56655. +int read_char_x_menu_prompt(int nmaps,
  56656. +                            int * maps,
  56657. +                            int prev_event,
  56658. +                            int * used_mouse_menu);
  56659. +
  56660. +int read_char_minibuf_menu_prompt(int commandflag,
  56661. +                                  int nmaps,
  56662. +                                  int * maps);
  56663. +
  56664. +int follow_key(int key,
  56665. +               int nmaps,
  56666. +               int * current,
  56667. +               int * defs,
  56668. +               int * next);
  56669. +
  56670. +int read_key_sequence(int * keybuf,
  56671. +                      int bufsize,
  56672. +                      int prompt);
  56673. +
  56674. +extern struct Lisp_Subr Sread_key_sequence;
  56675. +
  56676. +int Fread_key_sequence(int , int );
  56677. +
  56678. +extern struct Lisp_Subr Scommand_execute;
  56679. +
  56680. +int Fcommand_execute(int , int );
  56681. +
  56682. +extern struct Lisp_Subr Sexecute_extended_command;
  56683. +
  56684. +int Fexecute_extended_command(int );
  56685. +
  56686. +int detect_input_pending(void);
  56687. +
  56688. +int clear_input_pending(void);
  56689. +
  56690. +extern struct Lisp_Subr Sinput_pending_p;
  56691. +
  56692. +int Finput_pending_p(void);
  56693. +
  56694. +extern struct Lisp_Subr Srecent_keys;
  56695. +
  56696. +int Frecent_keys(void);
  56697. +
  56698. +extern struct Lisp_Subr Sthis_command_keys;
  56699. +
  56700. +int Fthis_command_keys(void);
  56701. +
  56702. +extern struct Lisp_Subr Srecursion_depth;
  56703. +
  56704. +int Frecursion_depth(void);
  56705. +
  56706. +extern struct Lisp_Subr Sopen_dribble_file;
  56707. +
  56708. +int Fopen_dribble_file(int );
  56709. +
  56710. +extern struct Lisp_Subr Sdiscard_input;
  56711. +
  56712. +int Fdiscard_input(void);
  56713. +
  56714. +extern struct Lisp_Subr Ssuspend_emacs;
  56715. +
  56716. +int Fsuspend_emacs(int );
  56717. +
  56718. +int stuff_buffered_input(int stuffstring);
  56719. +
  56720. +int set_waiting_for_input(struct timeval * time_to_clear);
  56721. +
  56722. +int clear_waiting_for_input(void);
  56723. +
  56724. +void interrupt_signal(void);
  56725. +
  56726. +int quit_throw_to_read_char(void);
  56727. +
  56728. +extern struct Lisp_Subr Sset_input_mode;
  56729. +
  56730. +int Fset_input_mode(int , int , int , int );
  56731. +
  56732. +extern struct Lisp_Subr Scurrent_input_mode;
  56733. +
  56734. +int Fcurrent_input_mode(void);
  56735. +
  56736. +int init_keyboard(void);
  56737. +
  56738. +extern struct event_head head_table[3];
  56739. +
  56740. +int syms_of_keyboard(void);
  56741. +
  56742. +int keys_of_keyboard(void);
  56743. +
  56744. diff -rup --new-file baseline/fsf/emacs/src/keymap_protos.h amiga/fsf/emacs/src/keymap_protos.h
  56745. --- baseline/fsf/emacs/src/keymap_protos.h    Wed Dec 31 17:00:00 1969
  56746. +++ amiga/fsf/emacs/src/keymap_protos.h    Sat Sep 28 00:00:00 1996
  56747. @@ -0,0 +1,234 @@
  56748. +/* Prototypes for functions defined in
  56749. +keymap.c
  56750. + */
  56751. +
  56752. +extern int current_global_map;
  56753. +
  56754. +extern int global_map;
  56755. +
  56756. +extern int meta_map;
  56757. +
  56758. +extern int control_x_map;
  56759. +
  56760. +extern int Vminibuffer_local_map;
  56761. +
  56762. +extern int Vminibuffer_local_ns_map;
  56763. +
  56764. +extern int Vminibuffer_local_completion_map;
  56765. +
  56766. +extern int Vminibuffer_local_must_match_map;
  56767. +
  56768. +extern int Vminor_mode_map_alist;
  56769. +
  56770. +extern int Vfunction_key_map;
  56771. +
  56772. +extern int Qkeymapp;
  56773. +
  56774. +extern int Qkeymap;
  56775. +
  56776. +extern int Qnon_ascii;
  56777. +
  56778. +extern struct Lisp_Subr Smake_keymap;
  56779. +
  56780. +int Fmake_keymap(int );
  56781. +
  56782. +extern struct Lisp_Subr Smake_sparse_keymap;
  56783. +
  56784. +int Fmake_sparse_keymap(int );
  56785. +
  56786. +void initial_define_key(int keymap,
  56787. +                        int key,
  56788. +                        char * defname);
  56789. +
  56790. +void initial_define_lispy_key(int keymap,
  56791. +                              char * keyname,
  56792. +                              char * defname);
  56793. +
  56794. +extern struct Lisp_Subr Skeymapp;
  56795. +
  56796. +int Fkeymapp(int );
  56797. +
  56798. +int get_keymap_1(int , int , int);
  56799. +
  56800. +int get_keymap(int object);
  56801. +
  56802. +int access_keymap(int map,
  56803. +                  int idx,
  56804. +                  int t_ok,
  56805. +                  int noinherit);
  56806. +
  56807. +int get_keyelt(register int object,
  56808. +               int autoload);
  56809. +
  56810. +int store_in_keymap(int keymap,
  56811. +                    register int idx,
  56812. +                    register int def);
  56813. +
  56814. +extern struct Lisp_Subr Scopy_keymap;
  56815. +
  56816. +int Fcopy_keymap(int );
  56817. +
  56818. +extern struct Lisp_Subr Sdefine_key;
  56819. +
  56820. +int Fdefine_key(int , int , int );
  56821. +
  56822. +extern struct Lisp_Subr Slookup_key;
  56823. +
  56824. +int Flookup_key(int , int , int );
  56825. +
  56826. +int define_as_prefix(int keymap,
  56827. +                     int c);
  56828. +
  56829. +int append_key(int key_sequence,
  56830. +               int key);
  56831. +
  56832. +extern int * cmm_modes;
  56833. +
  56834. +extern int * cmm_maps;
  56835. +
  56836. +extern int cmm_size;
  56837. +
  56838. +int current_minor_maps(int ** modeptr,
  56839. +                       int ** mapptr);
  56840. +
  56841. +extern struct Lisp_Subr Skey_binding;
  56842. +
  56843. +int Fkey_binding(int , int );
  56844. +
  56845. +extern struct Lisp_Subr Slocal_key_binding;
  56846. +
  56847. +int Flocal_key_binding(int , int );
  56848. +
  56849. +extern struct Lisp_Subr Sglobal_key_binding;
  56850. +
  56851. +int Fglobal_key_binding(int , int );
  56852. +
  56853. +extern struct Lisp_Subr Sminor_mode_key_binding;
  56854. +
  56855. +int Fminor_mode_key_binding(int , int );
  56856. +
  56857. +extern struct Lisp_Subr Sglobal_set_key;
  56858. +
  56859. +int Fglobal_set_key(int , int );
  56860. +
  56861. +extern struct Lisp_Subr Slocal_set_key;
  56862. +
  56863. +int Flocal_set_key(int , int );
  56864. +
  56865. +extern struct Lisp_Subr Sglobal_unset_key;
  56866. +
  56867. +int Fglobal_unset_key(int );
  56868. +
  56869. +extern struct Lisp_Subr Slocal_unset_key;
  56870. +
  56871. +int Flocal_unset_key(int );
  56872. +
  56873. +extern struct Lisp_Subr Sdefine_prefix_command;
  56874. +
  56875. +int Fdefine_prefix_command(int , int );
  56876. +
  56877. +extern struct Lisp_Subr Suse_global_map;
  56878. +
  56879. +int Fuse_global_map(int );
  56880. +
  56881. +extern struct Lisp_Subr Suse_local_map;
  56882. +
  56883. +int Fuse_local_map(int );
  56884. +
  56885. +extern struct Lisp_Subr Scurrent_local_map;
  56886. +
  56887. +int Fcurrent_local_map(void);
  56888. +
  56889. +extern struct Lisp_Subr Scurrent_global_map;
  56890. +
  56891. +int Fcurrent_global_map(void);
  56892. +
  56893. +extern struct Lisp_Subr Scurrent_minor_mode_maps;
  56894. +
  56895. +int Fcurrent_minor_mode_maps(void);
  56896. +
  56897. +extern struct Lisp_Subr Saccessible_keymaps;
  56898. +
  56899. +int Faccessible_keymaps(int , int );
  56900. +
  56901. +extern int Qsingle_key_description;
  56902. +
  56903. +extern int Qkey_description;
  56904. +
  56905. +extern struct Lisp_Subr Skey_description;
  56906. +
  56907. +int Fkey_description(int );
  56908. +
  56909. +char * push_key_description(register unsigned int c,
  56910. +                            register char * p);
  56911. +
  56912. +extern struct Lisp_Subr Ssingle_key_description;
  56913. +
  56914. +int Fsingle_key_description(int );
  56915. +
  56916. +char * push_text_char_description(register unsigned int c,
  56917. +                                  register char * p);
  56918. +
  56919. +extern struct Lisp_Subr Stext_char_description;
  56920. +
  56921. +int Ftext_char_description(int );
  56922. +
  56923. +int ascii_sequence_p(int seq);
  56924. +
  56925. +extern struct Lisp_Subr Swhere_is_internal;
  56926. +
  56927. +int Fwhere_is_internal(int , int , int , int );
  56928. +
  56929. +extern struct Lisp_Subr Sdescribe_bindings;
  56930. +
  56931. +int Fdescribe_bindings(int );
  56932. +
  56933. +int describe_buffer_bindings(int arg);
  56934. +
  56935. +void describe_map_tree(int startmap,
  56936. +                       int partial,
  56937. +                       int shadow,
  56938. +                       int prefix,
  56939. +                       char * title,
  56940. +                       int nomenu);
  56941. +
  56942. +void describe_command(int definition);
  56943. +
  56944. +int shadow_lookup(int shadow,
  56945. +                  int key,
  56946. +                  int flag);
  56947. +
  56948. +void describe_map(register int map,
  56949. +                  int keys,
  56950. +                  int (* elt_describer)(),
  56951. +                  int partial,
  56952. +                  int shadow,
  56953. +                  int * seen);
  56954. +
  56955. +int describe_vector_princ(int elt);
  56956. +
  56957. +extern struct Lisp_Subr Sdescribe_vector;
  56958. +
  56959. +int Fdescribe_vector(int );
  56960. +
  56961. +int describe_vector(register int vector,
  56962. +                    int elt_prefix,
  56963. +                    int (* elt_describer)(),
  56964. +                    int partial,
  56965. +                    int shadow);
  56966. +
  56967. +extern int apropos_predicate;
  56968. +
  56969. +extern int apropos_accumulate;
  56970. +
  56971. +void apropos_accum(int symbol,
  56972. +                   int string);
  56973. +
  56974. +extern struct Lisp_Subr Sapropos_internal;
  56975. +
  56976. +int Fapropos_internal(int , int );
  56977. +
  56978. +int syms_of_keymap(void);
  56979. +
  56980. +int keys_of_keymap(void);
  56981. +
  56982. diff -rup --new-file baseline/fsf/emacs/src/lastfile.c amiga/fsf/emacs/src/lastfile.c
  56983. --- baseline/fsf/emacs/src/lastfile.c    Sat Sep 11 18:21:00 1993
  56984. +++ amiga/fsf/emacs/src/lastfile.c    Sat Sep 28 00:00:00 1996
  56985. @@ -35,4 +35,22 @@ the Free Software Foundation, 675 Mass A
  56986.   coming from libraries.
  56987.  */
  56988.  
  56989. +#ifndef AMIGA
  56990. +
  56991.  char my_edata = 0;
  56992. +
  56993. +#else
  56994. +
  56995. +/* I need to find the end of initialised and unitialised data, as well as of
  56996. +   executable code.
  56997. +*/
  56998. +int last_data = 1;
  56999. +int last_bss;
  57000. +
  57001. +void last_function() { }
  57002. +
  57003. +/* Some data that shouldn't be dumped */
  57004. +#include "amiga_data.c" 
  57005. +
  57006. +#endif /* not AMIGA */
  57007. +
  57008. diff -rup --new-file baseline/fsf/emacs/src/lisp.h amiga/fsf/emacs/src/lisp.h
  57009. --- baseline/fsf/emacs/src/lisp.h    Thu Aug 25 17:42:40 1994
  57010. +++ amiga/fsf/emacs/src/lisp.h    Sat Sep 28 00:00:00 1996
  57011. @@ -328,7 +328,7 @@ extern int pure_size;
  57012.    (XUINT (a) | (XUINT (a) > pure_size ? DATA_SEG_BITS : PURE_SEG_BITS))
  57013.  #else /* not HAVE_SHM */
  57014.  #ifdef DATA_SEG_BITS
  57015. -/* This case is used for the rt-pc.
  57016. +/* This case is used for the rt-pc and the Amiga.
  57017.     In the diffs I was given, it checked for ptr = 0
  57018.     and did not adjust it in that case.
  57019.     But I don't think that zero should ever be found
  57020. @@ -341,8 +341,55 @@ extern int pure_size;
  57021.  #endif /* no XPNTR */
  57022.  
  57023.  #ifndef XSETINT
  57024. +#ifdef AMIGA /* CHFIXME */
  57025. +#include <assert.h>
  57026. +#ifdef static
  57027. +#define xstatic
  57028. +#endif
  57029. +#undef static
  57030. +
  57031. +void exit(int);
  57032. +
  57033. +static unsigned int
  57034. +xsetint(unsigned a, unsigned b,char *s, int line)
  57035. +{
  57036. +    if((((unsigned) (a) & ~VALMASK) == DataSegBits) && DataSegBits != 0)
  57037. +    {
  57038. +    fprintf(stderr,"xsetint called from %s%d, assertion failure\n",
  57039. +        s, line);
  57040. +    fprintf(stderr,"a = %08lx, b = %08lx, DataSegBits = %08lx\n",
  57041. +        a, b, DataSegBits);
  57042. +    exit(1);
  57043. +    }
  57044. +    return (unsigned) ((a) & ~VALMASK) |  ((b) & VALMASK);
  57045. +}
  57046. +
  57047. +#define XSETINT(a, b)  (a) = (xsetint(a,b,__FILE__,__LINE__))
  57048. +    
  57049. +#if 0
  57050. +static unsigned int
  57051. +xsetint(unsigned a, unsigned b)
  57052. +{
  57053. +    assert(((unsigned) (a) & ~VALMASK) != DataSegBits);
  57054. +    return (unsigned) ((a) & ~VALMASK) |  ((b) & VALMASK);
  57055. +}
  57056. +#define XSETINT(a, b)  (a) = (xsetint(a,b))
  57057. +#endif
  57058. +
  57059. +static unsigned int
  57060. +xset(unsigned type, unsigned ptr)
  57061. +{
  57062. +    assert(!((type == Lisp_String) && (((unsigned) ptr & ~VALMASK) != DataSegBits)));
  57063. +    return (unsigned) ((int)(type) << VALBITS) + ((int) (ptr) & VALMASK);
  57064. +}
  57065. +#define OXSETINT(a, b)  ((a) = ((a) & ~VALMASK) |  ((b) & VALMASK))
  57066. +#ifdef xstatic
  57067. +#define static
  57068. +#endif
  57069. +#else
  57070.  #define XSETINT(a, b)  ((a) = ((a) & ~VALMASK) |  ((b) & VALMASK))
  57071.  #endif
  57072. +#endif
  57073.  
  57074.  #ifndef XSETUINT
  57075.  #define XSETUINT(a, b) XSETINT (a, b)
  57076. @@ -350,12 +397,17 @@ extern int pure_size;
  57077.  
  57078.  #ifndef XSETPNTR
  57079.  #define XSETPNTR(a, b) XSETINT (a, b)
  57080. +#define OXSETPNTR(a, b) OXSETINT (a, b) /* CHFIXME*/
  57081.  #endif
  57082.  
  57083.  #ifndef XSET
  57084. +#ifdef AMIGA /* CHFIXME */
  57085. +#define XSET(var, type, ptr) (var) = xset(type, (unsigned) ptr)
  57086. +#else
  57087.  #define XSET(var, type, ptr) \
  57088.     ((var) = ((int)(type) << VALBITS) + ((int) (ptr) & VALMASK))
  57089.  #endif
  57090. +#endif
  57091.  
  57092.  /* During garbage collection, XGCTYPE must be used for extracting types
  57093.   so that the mark bit is ignored.  XMARKBIT accesses the markbit.
  57094. @@ -450,7 +502,11 @@ extern int pure_size;
  57095.  #define XSETBUFFER(a, b) XSETPNTR(a, (int) (b))
  57096.  #define XSETVECTOR(a, b) XSETPNTR(a, (int) (b))
  57097.  #define XSETSUBR(a, b) XSETPNTR(a, (int) (b))
  57098. +#if 0
  57099. +#define XSETSTRING(a, b) (assert((((unsigned) (b) & ~VALMASK) != DataSegBits)), XSETPNTR(a, (int) (b)))
  57100. +#else
  57101.  #define XSETSTRING(a, b) XSETPNTR(a, (int) (b))
  57102. +#endif
  57103.  #define XSETSYMBOL(a, b) XSETPNTR(a, (int) (b))
  57104.  #define XSETFUNCTION(a, b) XSETPNTR(a, (int) (b))
  57105.  #define XSETMARKER(a, b) XSETPNTR(a, (int) (b))
  57106. diff -rup --new-file baseline/fsf/emacs/src/lread.c amiga/fsf/emacs/src/lread.c
  57107. --- baseline/fsf/emacs/src/lread.c    Tue Aug 23 15:28:45 1994
  57108. +++ amiga/fsf/emacs/src/lread.c    Sat Sep 28 00:00:00 1996
  57109. @@ -46,6 +46,9 @@ the Free Software Foundation, 675 Mass A
  57110.  
  57111.  #ifdef LISP_FLOAT_TYPE
  57112.  #ifdef STDC_HEADERS
  57113. +#ifdef AMIGA /* CHFIXME */
  57114. +#undef abort
  57115. +#endif
  57116.  #include <stdlib.h>
  57117.  #endif
  57118.  
  57119. @@ -66,6 +69,10 @@ the Free Software Foundation, 675 Mass A
  57120.  
  57121.  extern int errno;
  57122.  
  57123. +#ifdef USE_PROTOS
  57124. +#include "protos.h"
  57125. +#endif
  57126. +
  57127.  Lisp_Object Qread_char, Qget_file_char, Qstandard_input, Qcurrent_load_list;
  57128.  Lisp_Object Qvariable_documentation, Vvalues, Vstandard_input, Vafter_load_alist;
  57129.  Lisp_Object Qascii_character, Qload;
  57130. @@ -487,6 +494,9 @@ complete_filename_p (pathname)
  57131.       Lisp_Object pathname;
  57132.  {
  57133.    register unsigned char *s = XSTRING (pathname)->data;
  57134. +#ifdef AMIGA
  57135. +  return (*s && index(s + 1, ':')); /* Non-leading : */
  57136. +#else
  57137.    return (*s == '/'
  57138.  #ifdef ALTOS
  57139.        || *s == '@'
  57140. @@ -498,6 +508,7 @@ complete_filename_p (pathname)
  57141.        || (s[0] != '\0' && s[1] == ':' && s[2] == '/')
  57142.  #endif
  57143.        );
  57144. +#endif /* not AMIGA */
  57145.  }
  57146.  
  57147.  /* Search for a file whose name is STR, looking in directories
  57148. @@ -947,7 +958,7 @@ read0 (readcharfun)
  57149.  }
  57150.  
  57151.  static int read_buffer_size;
  57152. -static char *read_buffer;
  57153. +char *read_buffer; /* CHFIXME */
  57154.  
  57155.  static int
  57156.  read_escape (readcharfun)
  57157. diff -rup --new-file baseline/fsf/emacs/src/lread_protos.h amiga/fsf/emacs/src/lread_protos.h
  57158. --- baseline/fsf/emacs/src/lread_protos.h    Wed Dec 31 17:00:00 1969
  57159. +++ amiga/fsf/emacs/src/lread_protos.h    Sat Sep 28 00:00:00 1996
  57160. @@ -0,0 +1,186 @@
  57161. +/* Prototypes for functions defined in
  57162. +lread.c
  57163. + */
  57164. +
  57165. +extern int Qread_char;
  57166. +
  57167. +extern int Qget_file_char;
  57168. +
  57169. +extern int Qstandard_input;
  57170. +
  57171. +extern int Qcurrent_load_list;
  57172. +
  57173. +extern int Qvariable_documentation;
  57174. +
  57175. +extern int Vvalues;
  57176. +
  57177. +extern int Vstandard_input;
  57178. +
  57179. +extern int Vafter_load_alist;
  57180. +
  57181. +extern int Qascii_character;
  57182. +
  57183. +extern int Qload;
  57184. +
  57185. +extern int load_in_progress;
  57186. +
  57187. +extern int Vload_path;
  57188. +
  57189. +extern int Vload_history;
  57190. +
  57191. +extern int Vcurrent_load_list;
  57192. +
  57193. +extern int load_descriptor_list;
  57194. +
  57195. +extern struct __iobuf * instream;
  57196. +
  57197. +extern int read_pure;
  57198. +
  57199. +extern int read_from_string_index;
  57200. +
  57201. +extern int read_from_string_limit;
  57202. +
  57203. +int readchar(int readcharfun);
  57204. +
  57205. +void unreadchar(int readcharfun,
  57206. +                int c);
  57207. +
  57208. +int read_filtered_event(int no_switch_frame,
  57209. +                        int ascii_required,
  57210. +                        int error_nonascii);
  57211. +
  57212. +extern struct Lisp_Subr Sread_char;
  57213. +
  57214. +int Fread_char(void);
  57215. +
  57216. +extern struct Lisp_Subr Sread_event;
  57217. +
  57218. +int Fread_event(void);
  57219. +
  57220. +extern struct Lisp_Subr Sread_char_exclusive;
  57221. +
  57222. +int Fread_char_exclusive(void);
  57223. +
  57224. +extern struct Lisp_Subr Sget_file_char;
  57225. +
  57226. +int Fget_file_char(void);
  57227. +
  57228. +extern struct Lisp_Subr Sload;
  57229. +
  57230. +int Fload(int , int , int , int );
  57231. +
  57232. +int load_unwind(int stream);
  57233. +
  57234. +int load_descriptor_unwind(int oldlist);
  57235. +
  57236. +void close_load_descs(void);
  57237. +
  57238. +int complete_filename_p(int pathname);
  57239. +
  57240. +int openp(int path,
  57241. +          int str,
  57242. +          char * suffix,
  57243. +          int * storeptr,
  57244. +          int exec_only);
  57245. +
  57246. +void build_load_history(struct __iobuf * stream,
  57247. +                        int source);
  57248. +
  57249. +int unreadpure(void);
  57250. +
  57251. +void readevalloop(int readcharfun,
  57252. +                  struct __iobuf * stream,
  57253. +                  int sourcename,
  57254. +                  int (* evalfun)(),
  57255. +                  int printflag);
  57256. +
  57257. +extern struct Lisp_Subr Seval_buffer;
  57258. +
  57259. +int Feval_buffer(int , int );
  57260. +
  57261. +extern struct Lisp_Subr Seval_region;
  57262. +
  57263. +int Feval_region(int , int , int );
  57264. +
  57265. +extern struct Lisp_Subr Sread;
  57266. +
  57267. +int Fread(int );
  57268. +
  57269. +extern struct Lisp_Subr Sread_from_string;
  57270. +
  57271. +int Fread_from_string(int , int , int );
  57272. +
  57273. +int read0(int readcharfun);
  57274. +
  57275. +extern int read_buffer_size;
  57276. +
  57277. +extern char * read_buffer;
  57278. +
  57279. +int read_escape(int readcharfun);
  57280. +
  57281. +int read1(register int readcharfun);
  57282. +
  57283. +int read_vector(int readcharfun);
  57284. +
  57285. +int read_list(int flag,
  57286. +              register int readcharfun);
  57287. +
  57288. +extern int Vobarray;
  57289. +
  57290. +extern int initial_obarray;
  57291. +
  57292. +int check_obarray(int obarray);
  57293. +
  57294. +int intern(char * str);
  57295. +
  57296. +extern struct Lisp_Subr Sintern;
  57297. +
  57298. +int Fintern(int , int );
  57299. +
  57300. +extern struct Lisp_Subr Sintern_soft;
  57301. +
  57302. +int Fintern_soft(int , int );
  57303. +
  57304. +int oblookup(int obarray,
  57305. +             register char * ptr,
  57306. +             register int size);
  57307. +
  57308. +int hash_string(unsigned char * ptr,
  57309. +                int len);
  57310. +
  57311. +void map_obarray(int obarray,
  57312. +                 int (* fn)(),
  57313. +                 int arg);
  57314. +
  57315. +int mapatoms_1(int sym,
  57316. +               int function);
  57317. +
  57318. +extern struct Lisp_Subr Smapatoms;
  57319. +
  57320. +int Fmapatoms(int , int );
  57321. +
  57322. +void init_obarray(void);
  57323. +
  57324. +void defsubr(struct Lisp_Subr * sname);
  57325. +
  57326. +void defvar_int(char * namestring,
  57327. +                int * address);
  57328. +
  57329. +void defvar_bool(char * namestring,
  57330. +                 int * address);
  57331. +
  57332. +void defvar_lisp(char * namestring,
  57333. +                 int * address);
  57334. +
  57335. +void defvar_lisp_nopro(char * namestring,
  57336. +                       int * address);
  57337. +
  57338. +void defvar_per_buffer(char * namestring,
  57339. +                       int * address,
  57340. +                       int type,
  57341. +                       char * doc);
  57342. +
  57343. +int init_lread(void);
  57344. +
  57345. +void syms_of_lread(void);
  57346. +
  57347. diff -rup --new-file baseline/fsf/emacs/src/m/amiga.h amiga/fsf/emacs/src/m/amiga.h
  57348. --- baseline/fsf/emacs/src/m/amiga.h    Wed Dec 31 17:00:00 1969
  57349. +++ amiga/fsf/emacs/src/m/amiga.h    Sat Sep 28 00:00:00 1996
  57350. @@ -0,0 +1,132 @@
  57351. +/* machine description file for GNU Emacs running on
  57352. +
  57353. +   AmigaOS 2.04, SAS C compiler 6.3
  57354. +   
  57355. +   Copyright (C) 1985, 1986 Free Software Foundation, Inc.
  57356. +
  57357. +This file is part of GNU Emacs.
  57358. +
  57359. +GNU Emacs is distributed in the hope that it will be useful,
  57360. +but WITHOUT ANY WARRANTY.  No author or distributor
  57361. +accepts responsibility to anyone for the consequences of using it
  57362. +or for whether it serves any particular purpose or works at all,
  57363. +unless he says so in writing.  Refer to the GNU Emacs General Public
  57364. +License for full details.
  57365. +
  57366. +Everyone is granted permission to copy, modify and redistribute
  57367. +GNU Emacs, but only under the conditions described in the
  57368. +GNU Emacs General Public License.   A copy of this license is
  57369. +supposed to have been given to you along with GNU Emacs so you
  57370. +can know your rights and responsibilities.  It should be in a
  57371. +file named COPYING.  Among other things, the copyright notice
  57372. +and this notice must be preserved on all copies.  */
  57373. +
  57374. +
  57375. +/* The following three symbols give information on
  57376. + the size of various data types.  */
  57377. +/* lisp.h doesn't make any concessions for INTBITS = 16 and
  57378. +   NO_UNION_TYPE (use int as lisp object) defined.  The following is
  57379. +   assuming that the Manx 32 bit int. math package is faster than
  57380. +   bitfield implementation, overall.  If you want to use INTBITS = 16,
  57381. +   you *cannot* define NO_UNION_TYPE.    */
  57382. +
  57383. +#define SHORTBITS 16        /* Number of bits in a short */
  57384. +
  57385. +#define INTBITS 32        /* Number of bits in an int */
  57386. +
  57387. +#define LONGBITS 32        /* Number of bits in a long */
  57388. +
  57389. +#define VALBITS 26        /* Number of bits in an int or pointer offset */
  57390. +
  57391. +#define GCTYPEBITS 5        /* Number of bits in a type. */
  57392. +
  57393. +/* Define BIG_ENDIAN iff lowest-numbered byte in a word
  57394. +   is the most significant byte.  */
  57395. +
  57396. +#define BIG_ENDIAN
  57397. +
  57398. +/* Define NO_ARG_ARRAY if you cannot take the address of the first of a
  57399. + * group of arguments and treat it as an array of the arguments.  */
  57400. +
  57401. +/* #define NO_ARG_ARRAY */
  57402. +
  57403. +/* Define WORD_MACHINE if addresses and such have
  57404. + * to be corrected before they can be used as byte counts.  */
  57405. +
  57406. +#define WORD_MACHINE
  57407. +
  57408. +/* Define how to take a char and sign-extend into an int.
  57409. +   On machines where char is signed, this is a no-op.  */
  57410. +
  57411. +#define SIGN_EXTEND_CHAR(c) (c)
  57412. +
  57413. +/* Now define a symbol for the cpu type, if your compiler
  57414. +   does not define it automatically:
  57415. +   Ones defined so far include vax, m68000, ns16000, pyramid,
  57416. +   orion, tahoe, APOLLO and many others */
  57417. +
  57418. +#ifndef    m68000
  57419. +#define m68000
  57420. +#endif
  57421. +
  57422. +/* Use type int rather than a union, to represent Lisp_Object */
  57423. +/* This is desirable for most machines.  */
  57424. +
  57425. +#define NO_UNION_TYPE
  57426. +/* Use a struct rather than an int. */
  57427. +
  57428. +
  57429. +/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
  57430. +   the 24-bit bit field into an int.  In other words, if bit fields
  57431. +   are always unsigned.
  57432. +
  57433. +   If you use NO_UNION_TYPE, this flag does not matter.  */
  57434. +
  57435. +#define EXPLICIT_SIGN_EXTEND
  57436. +
  57437. +/* We don't have /dev/kmem, so LOAD_AVE_TYPE and LOAD_AVE_CVT are
  57438. +   not defined. */
  57439. +
  57440. +/* Define CANNOT_DUMP on machines where unexec does not work.
  57441. +   Then the function dump-emacs will not be defined
  57442. +   and temacs will do (load "loadup") automatically unless told otherwise.  */
  57443. +
  57444. +/* #define CANNOT_DUMP */
  57445. +
  57446. +/* Define VIRT_ADDR_VARIES if the virtual addresses of
  57447. +   pure and impure space as loaded can vary, and even their
  57448. +   relative order cannot be relied on.
  57449. +
  57450. +   Otherwise Emacs assumes that text space precedes data space,
  57451. +   numerically.  */
  57452. +
  57453. +/* #define VIRT_ADDR_VARIES */
  57454. +/* I now rely on AMIGA_DUMP to make appropriate patches in the source */
  57455. +
  57456. +/* Define C_ALLOCA if this machine does not support a true alloca
  57457. +   and the one written in C should be used instead.
  57458. +   Define HAVE_ALLOCA to say that the system provides a properly
  57459. +   working alloca function and it should be used.
  57460. +   Define neither one if an assembler-language alloca
  57461. +   in the file alloca.s should be used.  */
  57462. +
  57463. +#define C_ALLOCA
  57464. +/* #define HAVE_ALLOCA */
  57465. +
  57466. +/* Define STACK_DIRECTION for alloca.c */
  57467. +#define    STACK_DIRECTION    -1    /* Grows downward */
  57468. +
  57469. +/* Define NO_REMAP if memory segmentation makes it not work well
  57470. +   to change the boundary between the text section and data section
  57471. +   when Emacs is dumped.  If you define this, the preloaded Lisp
  57472. +   code will not be sharable; but that's better than failing completely.  */
  57473. +
  57474. +#define NO_REMAP
  57475. +
  57476. +/* Set high (32 - VALBITS) = 6 bits of every pointer to the same as those of
  57477. +   &pure[0].
  57478. +*/
  57479. +#ifdef emacs
  57480. +extern long far DataSegBits;
  57481. +#endif
  57482. +#define DATA_SEG_BITS DataSegBits
  57483. diff -rup --new-file baseline/fsf/emacs/src/macros_protos.h amiga/fsf/emacs/src/macros_protos.h
  57484. --- baseline/fsf/emacs/src/macros_protos.h    Wed Dec 31 17:00:00 1969
  57485. +++ amiga/fsf/emacs/src/macros_protos.h    Sat Sep 28 00:00:00 1996
  57486. @@ -0,0 +1,50 @@
  57487. +/* Prototypes for functions defined in
  57488. +macros.c
  57489. + */
  57490. +
  57491. +extern int Qexecute_kbd_macro;
  57492. +
  57493. +extern int defining_kbd_macro;
  57494. +
  57495. +extern int * kbd_macro_buffer;
  57496. +
  57497. +extern int kbd_macro_bufsize;
  57498. +
  57499. +extern int * kbd_macro_ptr;
  57500. +
  57501. +extern int * kbd_macro_end;
  57502. +
  57503. +extern int Vlast_kbd_macro;
  57504. +
  57505. +extern int Vexecuting_macro;
  57506. +
  57507. +extern int executing_macro_index;
  57508. +
  57509. +extern struct Lisp_Subr Sstart_kbd_macro;
  57510. +
  57511. +int Fstart_kbd_macro(int );
  57512. +
  57513. +extern struct Lisp_Subr Send_kbd_macro;
  57514. +
  57515. +int Fend_kbd_macro(int );
  57516. +
  57517. +int store_kbd_macro_char(int c);
  57518. +
  57519. +int finalize_kbd_macro_chars(void);
  57520. +
  57521. +extern struct Lisp_Subr Scall_last_kbd_macro;
  57522. +
  57523. +int Fcall_last_kbd_macro(int );
  57524. +
  57525. +int pop_kbd_macro(int info);
  57526. +
  57527. +extern struct Lisp_Subr Sexecute_kbd_macro;
  57528. +
  57529. +int Fexecute_kbd_macro(int , int );
  57530. +
  57531. +int init_macros(void);
  57532. +
  57533. +int syms_of_macros(void);
  57534. +
  57535. +int keys_of_macros(void);
  57536. +
  57537. diff -rup --new-file baseline/fsf/emacs/src/marker_protos.h amiga/fsf/emacs/src/marker_protos.h
  57538. --- baseline/fsf/emacs/src/marker_protos.h    Wed Dec 31 17:00:00 1969
  57539. +++ amiga/fsf/emacs/src/marker_protos.h    Sat Sep 28 00:00:00 1996
  57540. @@ -0,0 +1,30 @@
  57541. +/* Prototypes for functions defined in
  57542. +marker.c
  57543. + */
  57544. +
  57545. +extern struct Lisp_Subr Smarker_buffer;
  57546. +
  57547. +int Fmarker_buffer(int );
  57548. +
  57549. +extern struct Lisp_Subr Smarker_position;
  57550. +
  57551. +int Fmarker_position(int );
  57552. +
  57553. +extern struct Lisp_Subr Sset_marker;
  57554. +
  57555. +int Fset_marker(int , int , int );
  57556. +
  57557. +int set_marker_restricted(int marker,
  57558. +                          int pos,
  57559. +                          int buffer);
  57560. +
  57561. +int unchain_marker(register int marker);
  57562. +
  57563. +int marker_position(int marker);
  57564. +
  57565. +extern struct Lisp_Subr Scopy_marker;
  57566. +
  57567. +int Fcopy_marker(int );
  57568. +
  57569. +int syms_of_marker(void);
  57570. +
  57571. diff -rup --new-file baseline/fsf/emacs/src/minibuf_protos.h amiga/fsf/emacs/src/minibuf_protos.h
  57572. --- baseline/fsf/emacs/src/minibuf_protos.h    Wed Dec 31 17:00:00 1969
  57573. +++ amiga/fsf/emacs/src/minibuf_protos.h    Sat Sep 28 00:00:00 1996
  57574. @@ -0,0 +1,171 @@
  57575. +/* Prototypes for functions defined in
  57576. +minibuf.c
  57577. + */
  57578. +
  57579. +extern int Vminibuffer_list;
  57580. +
  57581. +extern int minibuf_save_vector_size;
  57582. +
  57583. +extern struct minibuf_save_data * minibuf_save_vector;
  57584. +
  57585. +extern int minibuf_level;
  57586. +
  57587. +extern int auto_help;
  57588. +
  57589. +extern int last_minibuf_string;
  57590. +
  57591. +extern int enable_recursive_minibuffers;
  57592. +
  57593. +extern int Vminibuffer_help_form;
  57594. +
  57595. +extern int Vminibuffer_history_variable;
  57596. +
  57597. +extern int Vminibuffer_history_position;
  57598. +
  57599. +extern int Qminibuffer_history;
  57600. +
  57601. +extern int Qread_file_name_internal;
  57602. +
  57603. +extern int Qminibuffer_setup_hook;
  57604. +
  57605. +extern int Vminibuffer_setup_hook;
  57606. +
  57607. +extern int Qminibuffer_exit_hook;
  57608. +
  57609. +extern int Vminibuffer_exit_hook;
  57610. +
  57611. +extern int completion_ignore_case;
  57612. +
  57613. +extern int Vcompletion_regexp_list;
  57614. +
  57615. +extern int minibuffer_auto_raise;
  57616. +
  57617. +extern int last_exact_completion;
  57618. +
  57619. +extern int Quser_variable_p;
  57620. +
  57621. +int read_minibuf(int map,
  57622. +                 int initial,
  57623. +                 int prompt,
  57624. +                 int backup_n,
  57625. +                 int expflag,
  57626. +                 int histvar,
  57627. +                 int histpos);
  57628. +
  57629. +int get_minibuffer(int depth);
  57630. +
  57631. +void read_minibuf_unwind(int data);
  57632. +
  57633. +extern struct Lisp_Subr Sread_from_minibuffer;
  57634. +
  57635. +int Fread_from_minibuffer(int , int , int , int , int );
  57636. +
  57637. +extern struct Lisp_Subr Sread_minibuffer;
  57638. +
  57639. +int Fread_minibuffer(int , int );
  57640. +
  57641. +extern struct Lisp_Subr Seval_minibuffer;
  57642. +
  57643. +int Feval_minibuffer(int , int );
  57644. +
  57645. +extern struct Lisp_Subr Sread_string;
  57646. +
  57647. +int Fread_string(int , int );
  57648. +
  57649. +extern struct Lisp_Subr Sread_no_blanks_input;
  57650. +
  57651. +int Fread_no_blanks_input(int , int );
  57652. +
  57653. +extern struct Lisp_Subr Sread_command;
  57654. +
  57655. +int Fread_command(int );
  57656. +
  57657. +extern struct Lisp_Subr Sread_variable;
  57658. +
  57659. +int Fread_variable(int );
  57660. +
  57661. +extern struct Lisp_Subr Sread_buffer;
  57662. +
  57663. +int Fread_buffer(int , int , int );
  57664. +
  57665. +extern struct Lisp_Subr Stry_completion;
  57666. +
  57667. +int Ftry_completion(int , int , int );
  57668. +
  57669. +int scmp(register char * s1,
  57670. +         register char * s2,
  57671. +         int len);
  57672. +
  57673. +extern struct Lisp_Subr Sall_completions;
  57674. +
  57675. +int Fall_completions(int , int , int );
  57676. +
  57677. +extern int Vminibuffer_completion_table;
  57678. +
  57679. +extern int Qminibuffer_completion_table;
  57680. +
  57681. +extern int Vminibuffer_completion_predicate;
  57682. +
  57683. +extern int Qminibuffer_completion_predicate;
  57684. +
  57685. +extern int Vminibuffer_completion_confirm;
  57686. +
  57687. +extern int Qminibuffer_completion_confirm;
  57688. +
  57689. +extern struct Lisp_Subr Scompleting_read;
  57690. +
  57691. +int Fcompleting_read(int , int , int , int , int , int );
  57692. +
  57693. +int temp_echo_area_glyphs(char * m);
  57694. +
  57695. +int do_completion(void);
  57696. +
  57697. +int assoc_for_completion(register int key,
  57698. +                         int list);
  57699. +
  57700. +extern struct Lisp_Subr Sminibuffer_complete;
  57701. +
  57702. +int Fminibuffer_complete(void);
  57703. +
  57704. +extern struct Lisp_Subr Sminibuffer_complete_and_exit;
  57705. +
  57706. +int Fminibuffer_complete_and_exit(void);
  57707. +
  57708. +extern struct Lisp_Subr Sminibuffer_complete_word;
  57709. +
  57710. +int Fminibuffer_complete_word(void);
  57711. +
  57712. +extern struct Lisp_Subr Sdisplay_completion_list;
  57713. +
  57714. +int Fdisplay_completion_list(int );
  57715. +
  57716. +extern struct Lisp_Subr Sminibuffer_completion_help;
  57717. +
  57718. +int Fminibuffer_completion_help(void);
  57719. +
  57720. +extern struct Lisp_Subr Sself_insert_and_exit;
  57721. +
  57722. +int Fself_insert_and_exit(void);
  57723. +
  57724. +extern struct Lisp_Subr Sexit_minibuffer;
  57725. +
  57726. +int Fexit_minibuffer(void);
  57727. +
  57728. +extern struct Lisp_Subr Sminibuffer_depth;
  57729. +
  57730. +int Fminibuffer_depth(void);
  57731. +
  57732. +extern struct Lisp_Subr Sminibuffer_prompt;
  57733. +
  57734. +int Fminibuffer_prompt(void);
  57735. +
  57736. +extern struct Lisp_Subr Sminibuffer_prompt_width;
  57737. +
  57738. +int Fminibuffer_prompt_width(void);
  57739. +
  57740. +int init_minibuf_once(void);
  57741. +
  57742. +int syms_of_minibuf(void);
  57743. +
  57744. +int keys_of_minibuf(void);
  57745. +
  57746. diff -rup --new-file baseline/fsf/emacs/src/mocklisp_protos.h amiga/fsf/emacs/src/mocklisp_protos.h
  57747. --- baseline/fsf/emacs/src/mocklisp_protos.h    Wed Dec 31 17:00:00 1969
  57748. +++ amiga/fsf/emacs/src/mocklisp_protos.h    Sat Sep 28 00:00:00 1996
  57749. @@ -0,0 +1,37 @@
  57750. +/* Prototypes for functions defined in
  57751. +mocklisp.c
  57752. + */
  57753. +
  57754. +extern struct Lisp_Subr Sml_if;
  57755. +
  57756. +int Fml_if(int );
  57757. +
  57758. +int ml_apply(int function,
  57759. +             int args);
  57760. +
  57761. +extern struct Lisp_Subr Sml_nargs;
  57762. +
  57763. +int Fml_nargs(void);
  57764. +
  57765. +extern struct Lisp_Subr Sml_arg;
  57766. +
  57767. +int Fml_arg(int , int );
  57768. +
  57769. +extern struct Lisp_Subr Sml_interactive;
  57770. +
  57771. +int Fml_interactive(void);
  57772. +
  57773. +extern struct Lisp_Subr Sml_provide_prefix_argument;
  57774. +
  57775. +int Fml_provide_prefix_argument(int );
  57776. +
  57777. +extern struct Lisp_Subr Sml_prefix_argument_loop;
  57778. +
  57779. +int Fml_prefix_argument_loop(int );
  57780. +
  57781. +extern struct Lisp_Subr Sinsert_string;
  57782. +
  57783. +int Finsert_string(int , int * );
  57784. +
  57785. +int syms_of_mocklisp(void);
  57786. +
  57787. diff -rup --new-file baseline/fsf/emacs/src/oldalloca.c amiga/fsf/emacs/src/oldalloca.c
  57788. --- baseline/fsf/emacs/src/oldalloca.c    Wed Dec 31 17:00:00 1969
  57789. +++ amiga/fsf/emacs/src/oldalloca.c    Sat Sep 28 00:00:00 1996
  57790. @@ -0,0 +1,199 @@
  57791. +/*
  57792. +    alloca -- (mostly) portable public-domain implementation -- D A Gwyn
  57793. +
  57794. +    last edit:    86/05/30    rms
  57795. +       include config.h, since on VMS it renames some symbols.
  57796. +       Use xmalloc instead of malloc.
  57797. +
  57798. +    This implementation of the PWB library alloca() function,
  57799. +    which is used to allocate space off the run-time stack so
  57800. +    that it is automatically reclaimed upon procedure exit, 
  57801. +    was inspired by discussions with J. Q. Johnson of Cornell.
  57802. +
  57803. +    It should work under any C implementation that uses an
  57804. +    actual procedure stack (as opposed to a linked list of
  57805. +    frames).  There are some preprocessor constants that can
  57806. +    be defined when compiling for your specific system, for
  57807. +    improved efficiency; however, the defaults should be okay.
  57808. +
  57809. +    The general concept of this implementation is to keep
  57810. +    track of all alloca()-allocated blocks, and reclaim any
  57811. +    that are found to be deeper in the stack than the current
  57812. +    invocation.  This heuristic does not reclaim storage as
  57813. +    soon as it becomes invalid, but it will do so eventually.
  57814. +
  57815. +    As a special case, alloca(0) reclaims storage without
  57816. +    allocating any.  It is a good idea to use alloca(0) in
  57817. +    your main control loop, etc. to force garbage collection.
  57818. +*/
  57819. +#ifndef lint
  57820. +static char    SCCSid[] = "@(#)alloca.c    1.1";    /* for the "what" utility */
  57821. +#endif
  57822. +
  57823. +#ifdef emacs
  57824. +#include "config.h"
  57825. +#ifdef static
  57826. +/* actually, only want this if static is defined as ""
  57827. +   -- this is for usg, in which emacs must undefine static
  57828. +   in order to make unexec workable
  57829. +   */
  57830. +#ifndef STACK_DIRECTION
  57831. +you
  57832. +lose
  57833. +-- must know STACK_DIRECTION at compile-time
  57834. +#endif /* STACK_DIRECTION undefined */
  57835. +#endif /* static */
  57836. +#endif /* emacs */
  57837. +
  57838. +#ifndef alloca  /* If compiling with GCC, this file's not needed.  */
  57839. +
  57840. +#ifdef __STDC__
  57841. +typedef void    *pointer;        /* generic pointer type */
  57842. +#else
  57843. +typedef char    *pointer;        /* generic pointer type */
  57844. +#endif
  57845. +
  57846. +#undef NULL
  57847. +#define    NULL    0            /* null pointer constant */
  57848. +
  57849. +extern void    free();
  57850. +extern pointer    xmalloc();
  57851. +
  57852. +/*
  57853. +    Define STACK_DIRECTION if you know the direction of stack
  57854. +    growth for your system; otherwise it will be automatically
  57855. +    deduced at run-time.
  57856. +
  57857. +    STACK_DIRECTION > 0 => grows toward higher addresses
  57858. +    STACK_DIRECTION < 0 => grows toward lower addresses
  57859. +    STACK_DIRECTION = 0 => direction of growth unknown
  57860. +*/
  57861. +
  57862. +#ifndef STACK_DIRECTION
  57863. +#define    STACK_DIRECTION    0        /* direction unknown */
  57864. +#endif
  57865. +
  57866. +#if (STACK_DIRECTION) != 0
  57867. +
  57868. +#define    STACK_DIR    STACK_DIRECTION    /* known at compile-time */
  57869. +
  57870. +#else    /* STACK_DIRECTION == 0; need run-time code */
  57871. +
  57872. +static int    stack_dir;        /* 1 or -1 once known */
  57873. +#define    STACK_DIR    stack_dir
  57874. +
  57875. +static void
  57876. +find_stack_direction (/* void */)
  57877. +{
  57878. +  static char    *addr = NULL;    /* address of first
  57879. +                   `dummy', once known */
  57880. +  auto char    dummy;        /* to get stack address */
  57881. +
  57882. +  if (addr == NULL)
  57883. +    {                /* initial entry */
  57884. +      addr = &dummy;
  57885. +
  57886. +      find_stack_direction ();    /* recurse once */
  57887. +    }
  57888. +  else                /* second entry */
  57889. +    if (&dummy > addr)
  57890. +      stack_dir = 1;        /* stack grew upward */
  57891. +    else
  57892. +      stack_dir = -1;        /* stack grew downward */
  57893. +}
  57894. +
  57895. +#endif    /* STACK_DIRECTION == 0 */
  57896. +
  57897. +/*
  57898. +    An "alloca header" is used to:
  57899. +    (a) chain together all alloca()ed blocks;
  57900. +    (b) keep track of stack depth.
  57901. +
  57902. +    It is very important that sizeof(header) agree with malloc()
  57903. +    alignment chunk size.  The following default should work okay.
  57904. +*/
  57905. +
  57906. +#ifndef    ALIGN_SIZE
  57907. +#define    ALIGN_SIZE    sizeof(double)
  57908. +#endif
  57909. +
  57910. +typedef union hdr
  57911. +{
  57912. +  char    align[ALIGN_SIZE];    /* to force sizeof(header) */
  57913. +  struct
  57914. +    {
  57915. +      union hdr *next;        /* for chaining headers */
  57916. +      char *deep;        /* for stack depth measure */
  57917. +    } h;
  57918. +} header;
  57919. +
  57920. +/*
  57921. +    alloca( size ) returns a pointer to at least `size' bytes of
  57922. +    storage which will be automatically reclaimed upon exit from
  57923. +    the procedure that called alloca().  Originally, this space
  57924. +    was supposed to be taken from the current stack frame of the
  57925. +    caller, but that method cannot be made to work for some
  57926. +    implementations of C, for example under Gould's UTX/32.
  57927. +*/
  57928. +
  57929. +static header *last_alloca_header = NULL; /* -> last alloca header */
  57930. +
  57931. +int alloca_calling;
  57932. +
  57933. +pointer
  57934. +alloca (size)            /* returns pointer to storage */
  57935. +     unsigned    size;        /* # bytes to allocate */
  57936. +{
  57937. +  auto char    probe;        /* probes stack depth: */
  57938. +  register char    *depth = &probe;
  57939. +
  57940. +#if STACK_DIRECTION == 0
  57941. +  if (STACK_DIR == 0)        /* unknown growth direction */
  57942. +    find_stack_direction ();
  57943. +#endif
  57944. +
  57945. +                /* Reclaim garbage, defined as all alloca()ed storage that
  57946. +                   was allocated from deeper in the stack than currently. */
  57947. +
  57948. +  {
  57949. +    register header    *hp;    /* traverses linked list */
  57950. +
  57951. +    for (hp = last_alloca_header; hp != NULL;)
  57952. +      if ((STACK_DIR > 0 && hp->h.deep > depth)
  57953. +      || (STACK_DIR < 0 && hp->h.deep < depth))
  57954. +    {
  57955. +      register header    *np = hp->h.next;
  57956. +
  57957. +      free ((pointer) hp);    /* collect garbage */
  57958. +
  57959. +      hp = np;        /* -> next header */
  57960. +    }
  57961. +      else
  57962. +    break;            /* rest are not deeper */
  57963. +
  57964. +    last_alloca_header = hp;    /* -> last valid storage */
  57965. +  }
  57966. +
  57967. +  if (size == 0)
  57968. +    return NULL;        /* no allocation required */
  57969. +
  57970. +  /* Allocate combined header + user data storage. */
  57971. +
  57972. +  alloca_calling = 1;
  57973. +  {
  57974. +    register pointer    new = xmalloc (sizeof (header) + size);
  57975. +    /* address of header */
  57976. +
  57977. +    alloca_calling = 0;
  57978. +    ((header *)new)->h.next = last_alloca_header;
  57979. +    ((header *)new)->h.deep = depth;
  57980. +
  57981. +    last_alloca_header = (header *)new;
  57982. +
  57983. +    /* User storage begins just after header. */
  57984. +
  57985. +    return (pointer)((char *)new + sizeof(header));
  57986. +  }
  57987. +}
  57988. +
  57989. +#endif /* no alloca */
  57990. diff -rup --new-file baseline/fsf/emacs/src/paths.h amiga/fsf/emacs/src/paths.h
  57991. --- baseline/fsf/emacs/src/paths.h    Wed Dec 31 17:00:00 1969
  57992. +++ amiga/fsf/emacs/src/paths.h    Sat Sep 28 00:00:00 1996
  57993. @@ -0,0 +1,69 @@
  57994. +/* Hey Emacs, this is -*- C -*- code!  */
  57995. +
  57996. +/* The default search path for Lisp function "load".
  57997. +   This sets load-path.  */
  57998. +#define PATH_LOADSEARCH "GNUEMACS-19.28:lisp"
  57999. +
  58000. +/* Like PATH_LOADSEARCH, but used only when Emacs is dumping.  This
  58001. +   path is usually identical to PATH_LOADSEARCH except that the entry
  58002. +   for the directory containing the installed lisp files has been
  58003. +   replaced with ../lisp.  */
  58004. +#define PATH_DUMPLOADSEARCH "/lisp"
  58005. +
  58006. +/* The extra search path for programs to invoke.  This is appended to
  58007. +   whatever the PATH environment variable says to set the Lisp
  58008. +   variable exec-path and the first file name in it sets the Lisp
  58009. +   variable exec-directory.  exec-directory is used for finding
  58010. +   executables and other architecture-dependent files.  */
  58011. +#define PATH_EXEC "GNUEMACS-19.28:etc"
  58012. +
  58013. +/* Where Emacs should look for its architecture-independent data
  58014. +   files, like the NEWS file.  The lisp variable data-directory
  58015. +   is set to this value.  */
  58016. +#define PATH_DATA "GNUEMACS-19.28:etc"
  58017. +
  58018. +/* Where Emacs should look for its docstring file.  The lisp variable
  58019. +   doc-directory is set to this value.  */
  58020. +#define PATH_DOC "GNUEMACS-19.28:etc"
  58021. +
  58022. +/* The name of the directory that contains lock files with which we
  58023. +   record what files are being modified in Emacs.  This directory
  58024. +   should be writable by everyone.  THE STRING MUST END WITH A
  58025. +   SLASH!!!  */
  58026. +#define PATH_LOCK "GNUEMACS-19.28:lock/"
  58027. +
  58028. +/* Where the configuration process believes the info tree lives.  The
  58029. +   lisp variable configure-info-directory gets its value from this
  58030. +   macro, and is then used to set the Info-default-directory-list.  */
  58031. +#define PATH_INFO "GNUEMACS-19.28:info"
  58032. +
  58033. +#define TERMCAP_NAME "GNUEMACS-19.28:etc/termcap"
  58034. +#define NAME_DATA "GNUEmacs-19.28:etc/EMACS-DATA"
  58035. +/*
  58036. + * extra search path for binaries from amiga emacs distribution
  58037. + */
  58038. +#define PATH_BIN "GNUEmacs-19.28:c"
  58039. +
  58040. +/*
  58041. + * where to store temporary files
  58042. + */
  58043. +#define PATH_TEMP "t:emacsXXXXXX"
  58044. +
  58045. +/*
  58046. + * which shell to use if env variable SHELL is unset
  58047. + */ 
  58048. +
  58049. +#ifndef NAME_SHELL
  58050. +#define NAME_SHELL "/bin/sh"
  58051. +#endif
  58052. +
  58053. +/*
  58054. + * where to find doc file (relative path)  
  58055. + */
  58056. +#define RELPATH_DOC "/etc/"
  58057. +
  58058. +#define RELPATH_ETC "/etc/"
  58059. +
  58060. +#define RELPATH_LIBSRC "/lib-src"
  58061. +
  58062. +#define RELPATH_DOTDOT "/"
  58063. Binary files baseline/fsf/emacs/src/prefix-args and amiga/fsf/emacs/src/prefix-args differ
  58064. Binary files baseline/fsf/emacs/src/prefix-args.o and amiga/fsf/emacs/src/prefix-args.o differ
  58065. diff -rup --new-file baseline/fsf/emacs/src/print_protos.h amiga/fsf/emacs/src/print_protos.h
  58066. --- baseline/fsf/emacs/src/print_protos.h    Wed Dec 31 17:00:00 1969
  58067. +++ amiga/fsf/emacs/src/print_protos.h    Sat Sep 28 00:00:00 1996
  58068. @@ -0,0 +1,89 @@
  58069. +/* Prototypes for functions defined in
  58070. +print.c
  58071. + */
  58072. +
  58073. +extern int Vstandard_output;
  58074. +
  58075. +extern int Qstandard_output;
  58076. +
  58077. +extern int print_depth;
  58078. +
  58079. +extern int being_printed[200];
  58080. +
  58081. +extern int Vprint_length;
  58082. +
  58083. +extern int Vprint_level;
  58084. +
  58085. +extern int print_escape_newlines;
  58086. +
  58087. +extern int Qprint_escape_newlines;
  58088. +
  58089. +extern int printbufidx;
  58090. +
  58091. +void printchar(int ch,
  58092. +               int fun);
  58093. +
  58094. +void strout(char * ptr,
  58095. +            int size,
  58096. +            int printcharfun);
  58097. +
  58098. +int print_string(int string,
  58099. +                 int printcharfun);
  58100. +
  58101. +extern struct Lisp_Subr Swrite_char;
  58102. +
  58103. +int Fwrite_char(int , int );
  58104. +
  58105. +int write_string(char * data,
  58106. +                 int size);
  58107. +
  58108. +int write_string_1(char * data,
  58109. +                   int size,
  58110. +                   int printcharfun);
  58111. +
  58112. +void temp_output_buffer_setup(char * bufname);
  58113. +
  58114. +int internal_with_output_to_temp_buf(char * bufname,
  58115. +                                     int (* function)(),
  58116. +                                     int args);
  58117. +
  58118. +extern struct Lisp_Subr Swith_output_to_temp_buffer;
  58119. +
  58120. +int Fwith_output_to_temp_buffer(int );
  58121. +
  58122. +extern struct Lisp_Subr Sterpri;
  58123. +
  58124. +int Fterpri(int );
  58125. +
  58126. +extern struct Lisp_Subr Sprin1;
  58127. +
  58128. +int Fprin1(int , int );
  58129. +
  58130. +extern int Vprin1_to_string_buffer;
  58131. +
  58132. +extern struct Lisp_Subr Sprin1_to_string;
  58133. +
  58134. +int Fprin1_to_string(int , int );
  58135. +
  58136. +extern struct Lisp_Subr Sprinc;
  58137. +
  58138. +int Fprinc(int , int );
  58139. +
  58140. +extern struct Lisp_Subr Sprint;
  58141. +
  58142. +int Fprint(int , int );
  58143. +
  58144. +extern int Qexternal_debugging_output;
  58145. +
  58146. +extern struct Lisp_Subr Sexternal_debugging_output;
  58147. +
  58148. +int Fexternal_debugging_output(int );
  58149. +
  58150. +void debug_print(int arg);
  58151. +
  58152. +void print(int obj,
  58153. +           register int printcharfun,
  58154. +           int escapeflag);
  58155. +
  58156. +void syms_of_print(void);
  58157. +
  58158. diff -rup --new-file baseline/fsf/emacs/src/process.c amiga/fsf/emacs/src/process.c
  58159. --- baseline/fsf/emacs/src/process.c    Sun Sep 11 13:23:45 1994
  58160. +++ amiga/fsf/emacs/src/process.c    Sat Sep 28 00:00:00 1996
  58161. @@ -1061,7 +1061,12 @@ Remaining arguments are strings to give 
  58162.    new_argv = (unsigned char **) alloca ((nargs - 1) * sizeof (char *));
  58163.  
  58164.    /* If program file name is not absolute, search our path for it */
  58165. +
  58166. +#ifdef AMIGA 
  58167. +  if(NILP(Ffile_name_absolute_p(program)))
  58168. +#else
  58169.    if (XSTRING (program)->data[0] != '/')
  58170. +#endif
  58171.      {
  58172.        struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
  58173.  
  58174. @@ -1277,6 +1282,23 @@ create_process (process, new_argv, curre
  58175.       processes to get their return values scrambled.  */
  58176.    XSETINT (XPROCESS (process)->pid, -1);
  58177.  
  58178. +#ifdef AMIGA
  58179. +  {
  58180. +    register unsigned char *temp;
  58181. +
  58182. +    if (XTYPE (current_buffer->directory) == Lisp_String)
  58183. +      {
  58184. +    register int i;
  58185. +
  58186. +    i = XSTRING (current_buffer->directory)->size;
  58187. +    temp = (unsigned char *) alloca (i + 1);
  58188. +    bcopy (XSTRING (current_buffer->directory)->data, temp, i);
  58189. +    temp[i] = 0;
  58190. +      }
  58191. +    pid = exec(new_argv[0], new_argv, forkin, forkout, temp,
  58192. +           amiga_process_stack_size);
  58193. +  }
  58194. +#else /* not AMIGA */
  58195.    {
  58196.      /* child_setup must clobber environ on systems with true vfork.
  58197.         Protect it from permanent change.  */
  58198. @@ -1419,7 +1441,9 @@ create_process (process, new_argv, curre
  58199.        }
  58200.      environ = save_environ;
  58201.    }
  58202. +#endif /* not AMIGA */
  58203.  
  58204. +  /* CHFIXME: correct ?*/
  58205.    if (pid < 0)
  58206.      {
  58207.        if (forkin >= 0)
  58208. @@ -1431,6 +1455,7 @@ create_process (process, new_argv, curre
  58209.    
  58210.    XFASTINT (XPROCESS (process)->pid) = pid;
  58211.  
  58212. +#ifndef AMIGA
  58213.    /* If the subfork execv fails, and it exits,
  58214.       this close hangs.  I don't know why.
  58215.       So have an interrupt jar it loose.  */
  58216. @@ -1444,7 +1469,8 @@ create_process (process, new_argv, curre
  58217.    start_polling ();
  58218.    if (forkin != forkout && forkout >= 0)
  58219.      close (forkout);
  58220. -
  58221. +#endif /* not AMIGA */
  58222. +  
  58223.  #ifdef SIGCHLD
  58224.  #ifdef BSD4_1
  58225.    sigrelse (SIGCHLD);
  58226. diff -rup --new-file baseline/fsf/emacs/src/process_protos.h amiga/fsf/emacs/src/process_protos.h
  58227. --- baseline/fsf/emacs/src/process_protos.h    Wed Dec 31 17:00:00 1969
  58228. +++ amiga/fsf/emacs/src/process_protos.h    Sat Sep 28 00:00:00 1996
  58229. @@ -0,0 +1,237 @@
  58230. +/* Prototypes for functions defined in
  58231. +process.c
  58232. + */
  58233. +
  58234. +extern int Qprocessp;
  58235. +
  58236. +extern int Qrun;
  58237. +
  58238. +extern int Qstop;
  58239. +
  58240. +extern int Qsignal;
  58241. +
  58242. +extern int Qopen;
  58243. +
  58244. +extern int Qclosed;
  58245. +
  58246. +extern int Vprocess_connection_type;
  58247. +
  58248. +extern int process_tick;
  58249. +
  58250. +extern int update_tick;
  58251. +
  58252. +extern long input_wait_mask;
  58253. +
  58254. +extern int max_process_desc;
  58255. +
  58256. +extern int keyboard_descriptor;
  58257. +
  58258. +extern int delete_exited_processes;
  58259. +
  58260. +extern int chan_process[32];
  58261. +
  58262. +extern int Vprocess_alist;
  58263. +
  58264. +extern int proc_buffered_char[32];
  58265. +
  58266. +extern int pty_max_bytes;
  58267. +
  58268. +int update_status(struct Lisp_Process * p);
  58269. +
  58270. +int status_convert(int w);
  58271. +
  58272. +void decode_status(int l,
  58273. +                   int * symbol,
  58274. +                   int * code,
  58275. +                   int * coredump);
  58276. +
  58277. +int status_message(int status);
  58278. +
  58279. +int make_process(int name);
  58280. +
  58281. +int remove_process(register int proc);
  58282. +
  58283. +extern struct Lisp_Subr Sprocessp;
  58284. +
  58285. +int Fprocessp(int );
  58286. +
  58287. +extern struct Lisp_Subr Sget_process;
  58288. +
  58289. +int Fget_process(int );
  58290. +
  58291. +extern struct Lisp_Subr Sget_buffer_process;
  58292. +
  58293. +int Fget_buffer_process(int );
  58294. +
  58295. +int get_process(register int name);
  58296. +
  58297. +extern struct Lisp_Subr Sdelete_process;
  58298. +
  58299. +int Fdelete_process(int );
  58300. +
  58301. +extern struct Lisp_Subr Sprocess_status;
  58302. +
  58303. +int Fprocess_status(int );
  58304. +
  58305. +extern struct Lisp_Subr Sprocess_exit_status;
  58306. +
  58307. +int Fprocess_exit_status(int );
  58308. +
  58309. +extern struct Lisp_Subr Sprocess_id;
  58310. +
  58311. +int Fprocess_id(int );
  58312. +
  58313. +extern struct Lisp_Subr Sprocess_name;
  58314. +
  58315. +int Fprocess_name(int );
  58316. +
  58317. +extern struct Lisp_Subr Sprocess_command;
  58318. +
  58319. +int Fprocess_command(int );
  58320. +
  58321. +extern struct Lisp_Subr Sset_process_buffer;
  58322. +
  58323. +int Fset_process_buffer(int , int );
  58324. +
  58325. +extern struct Lisp_Subr Sprocess_buffer;
  58326. +
  58327. +int Fprocess_buffer(int );
  58328. +
  58329. +extern struct Lisp_Subr Sprocess_mark;
  58330. +
  58331. +int Fprocess_mark(int );
  58332. +
  58333. +extern struct Lisp_Subr Sset_process_filter;
  58334. +
  58335. +int Fset_process_filter(int , int );
  58336. +
  58337. +extern struct Lisp_Subr Sprocess_filter;
  58338. +
  58339. +int Fprocess_filter(int );
  58340. +
  58341. +extern struct Lisp_Subr Sset_process_sentinel;
  58342. +
  58343. +int Fset_process_sentinel(int , int );
  58344. +
  58345. +extern struct Lisp_Subr Sprocess_sentinel;
  58346. +
  58347. +int Fprocess_sentinel(int );
  58348. +
  58349. +extern struct Lisp_Subr Sset_process_window_size;
  58350. +
  58351. +int Fset_process_window_size(int , int , int );
  58352. +
  58353. +extern struct Lisp_Subr Sprocess_kill_without_query;
  58354. +
  58355. +int Fprocess_kill_without_query(int , int );
  58356. +
  58357. +int list_processes_1(void);
  58358. +
  58359. +extern struct Lisp_Subr Slist_processes;
  58360. +
  58361. +int Flist_processes(void);
  58362. +
  58363. +extern struct Lisp_Subr Sprocess_list;
  58364. +
  58365. +int Fprocess_list(void);
  58366. +
  58367. +extern struct Lisp_Subr Sstart_process;
  58368. +
  58369. +int Fstart_process(int , int * );
  58370. +
  58371. +int start_process_unwind(int proc);
  58372. +
  58373. +void create_process_1(int signo);
  58374. +
  58375. +int create_process(int process,
  58376. +                   char ** new_argv,
  58377. +                   int current_dir);
  58378. +
  58379. +int deactivate_process(int proc);
  58380. +
  58381. +int close_process_descs(void);
  58382. +
  58383. +extern struct Lisp_Subr Saccept_process_output;
  58384. +
  58385. +int Faccept_process_output(int , int , int );
  58386. +
  58387. +extern int waiting_for_user_input_p;
  58388. +
  58389. +int wait_reading_process_input(int time_limit,
  58390. +                               int microsecs,
  58391. +                               int read_kbd,
  58392. +                               int do_display);
  58393. +
  58394. +int read_process_output(int proc,
  58395. +                        register int channel);
  58396. +
  58397. +extern struct Lisp_Subr Swaiting_for_user_input_p;
  58398. +
  58399. +int Fwaiting_for_user_input_p(void);
  58400. +
  58401. +extern int send_process_frame[14];
  58402. +
  58403. +void send_process_trap(void);
  58404. +
  58405. +int send_process(int proc,
  58406. +                 char * buf,
  58407. +                 int len);
  58408. +
  58409. +extern struct Lisp_Subr Sprocess_send_region;
  58410. +
  58411. +int Fprocess_send_region(int , int , int );
  58412. +
  58413. +extern struct Lisp_Subr Sprocess_send_string;
  58414. +
  58415. +int Fprocess_send_string(int , int );
  58416. +
  58417. +void process_send_signal(int process,
  58418. +                         int signo,
  58419. +                         int current_group,
  58420. +                         int nomsg);
  58421. +
  58422. +extern struct Lisp_Subr Sinterrupt_process;
  58423. +
  58424. +int Finterrupt_process(int , int );
  58425. +
  58426. +extern struct Lisp_Subr Skill_process;
  58427. +
  58428. +int Fkill_process(int , int );
  58429. +
  58430. +extern struct Lisp_Subr Squit_process;
  58431. +
  58432. +int Fquit_process(int , int );
  58433. +
  58434. +extern struct Lisp_Subr Sstop_process;
  58435. +
  58436. +int Fstop_process(int , int );
  58437. +
  58438. +extern struct Lisp_Subr Scontinue_process;
  58439. +
  58440. +int Fcontinue_process(int , int );
  58441. +
  58442. +extern struct Lisp_Subr Ssignal_process;
  58443. +
  58444. +int Fsignal_process(int , int );
  58445. +
  58446. +extern struct Lisp_Subr Sprocess_send_eof;
  58447. +
  58448. +int Fprocess_send_eof(int );
  58449. +
  58450. +int kill_buffer_processes(int buffer);
  58451. +
  58452. +void sigchld_handler(int signo);
  58453. +
  58454. +int exec_sentinel_unwind(int data);
  58455. +
  58456. +void exec_sentinel(int proc,
  58457. +                   int reason);
  58458. +
  58459. +int status_notify(void);
  58460. +
  58461. +int init_process(void);
  58462. +
  58463. +void change_keyboard_wait_descriptor(int desc);
  58464. +
  58465. +int syms_of_process(void);
  58466. +
  58467. diff -rup --new-file baseline/fsf/emacs/src/protos.c amiga/fsf/emacs/src/protos.c
  58468. --- baseline/fsf/emacs/src/protos.c    Wed Dec 31 17:00:00 1969
  58469. +++ amiga/fsf/emacs/src/protos.c    Sat Sep 28 00:00:00 1996
  58470. @@ -0,0 +1,4 @@
  58471. +#define emacs
  58472. +#define HAVE_CONFIG_H
  58473. +#include "config.h"
  58474. +#include "protos.h"
  58475. diff -rup --new-file baseline/fsf/emacs/src/protos.h amiga/fsf/emacs/src/protos.h
  58476. --- baseline/fsf/emacs/src/protos.h    Wed Dec 31 17:00:00 1969
  58477. +++ amiga/fsf/emacs/src/protos.h    Sat Sep 28 00:00:00 1996
  58478. @@ -0,0 +1,60 @@
  58479. +#ifndef GENPROTO
  58480. +#include "abbrev_protos.h"
  58481. +#include "alloc_protos.h"
  58482. +#include "amiga_clipboard_protos.h"
  58483. +#include "amiga_dump_protos.h"
  58484. +#include "amiga_fns_protos.h"
  58485. +#include "amiga_malloc_protos.h"
  58486. +#include "amiga_menu_protos.h"
  58487. +#include "amiga_rexx_protos.h"
  58488. +#include "amiga_screen_protos.h"
  58489. +#include "amiga_serial_protos.h"
  58490. +#include "amiga_sysdep_protos.h"
  58491. +#ifndef curX /* cm.h problems */
  58492. +#include "amiga_term_protos.h"
  58493. +#endif
  58494. +#include "amiga_tty_protos.h"
  58495. +#include "amiga_xmenu_protos.h"
  58496. +#include "buffer_protos.h"
  58497. +#include "bytecode_protos.h"
  58498. +#include "callint_protos.h"
  58499. +#include "callproc_protos.h"
  58500. +#include "casefiddle_protos.h"
  58501. +#include "casetab_protos.h"
  58502. +#include "cm_protos.h"
  58503. +#include "cmds_protos.h"
  58504. +#include "data_protos.h"
  58505. +#include "dired_protos.h"
  58506. +#include "dispnew_protos.h"
  58507. +#include "doc_protos.h"
  58508. +#include "doprnt_protos.h"
  58509. +#include "editfns_protos.h"
  58510. +#include "emacs_protos.h"
  58511. +#include "eval_protos.h"
  58512. +#include "fileio_protos.h"
  58513. +#include "filelock_protos.h"
  58514. +#include "filemode_protos.h"
  58515. +#include "floatfns_protos.h"
  58516. +#include "fns_protos.h"
  58517. +#include "frame_protos.h"
  58518. +#include "getloadavg_protos.h"
  58519. +#include "indent_protos.h"
  58520. +#include "insdel_protos.h"
  58521. +#include "keyboard_protos.h"
  58522. +#include "keymap_protos.h"
  58523. +#include "lread_protos.h"
  58524. +#include "macros_protos.h"
  58525. +#include "marker_protos.h"
  58526. +#include "minibuf_protos.h"
  58527. +#include "mocklisp_protos.h"
  58528. +#include "print_protos.h"
  58529. +#include "process_protos.h"
  58530. +#include "regex_protos.h"
  58531. +#include "scroll_protos.h"
  58532. +#include "search_protos.h"
  58533. +#include "syntax_protos.h"
  58534. +#include "term_protos.h"
  58535. +#include "undo_protos.h"
  58536. +#include "window_protos.h"
  58537. +#include "xdisp_protos.h"
  58538. +#endif
  58539. diff -rup --new-file baseline/fsf/emacs/src/puresize.h amiga/fsf/emacs/src/puresize.h
  58540. --- baseline/fsf/emacs/src/puresize.h    Mon Aug  8 20:56:48 1994
  58541. +++ amiga/fsf/emacs/src/puresize.h    Sat Sep 28 00:00:00 1996
  58542. @@ -35,6 +35,13 @@ the Free Software Foundation, 675 Mass A
  58543.  #endif
  58544.  #endif
  58545.  
  58546. +#ifdef AMIGA_DUMP
  58547. +#define CHECK_IMPURE(obj) \
  58548. +  { extern int *pure, puresize; \
  58549. +    if ((PNTR_COMPARISON_TYPE) XPNTR (obj) < (PNTR_COMPARISON_TYPE) ((char *) pure + puresize) \
  58550. +    && (PNTR_COMPARISON_TYPE) XPNTR (obj) >= (PNTR_COMPARISON_TYPE) pure) \
  58551. +      pure_write_error (); }
  58552. +#else /* not AMIGA_DUMP */
  58553.  #ifdef VIRT_ADDR_VARIES
  58554.  
  58555.  /* For machines like APOLLO where text and data can go anywhere
  58556. @@ -63,4 +70,5 @@ the Free Software Foundation, 675 Mass A
  58557.  
  58558.  #endif /* PNTR_COMPARISON_TYPE */
  58559.  #endif /* VIRT_ADDRESS_VARIES */
  58560. +#endif /* not AMIGA_DUMP */
  58561.  
  58562. diff -rup --new-file baseline/fsf/emacs/src/regex.c amiga/fsf/emacs/src/regex.c
  58563. --- baseline/fsf/emacs/src/regex.c    Fri Sep  2 13:02:24 1994
  58564. +++ amiga/fsf/emacs/src/regex.c    Sat Sep 28 00:00:00 1996
  58565. @@ -51,6 +51,12 @@
  58566.  /* Emacs uses `NULL' as a predicate.  */
  58567.  #undef NULL
  58568.  
  58569. +#ifdef AMIGA
  58570. +#define FAR far
  58571. +#else
  58572. +#define FAR
  58573. +#endif
  58574. +
  58575.  #else  /* not emacs */
  58576.  
  58577.  #ifdef STDC_HEADERS
  58578. @@ -868,7 +874,7 @@ re_set_syntax (syntax)
  58579.  /* This table gives an error message for each of the error codes listed
  58580.     in regex.h.  Obviously the order here has to be same as there.  */
  58581.  
  58582. -static const char *re_error_msg[] =
  58583. +static const char *FAR re_error_msg[] =
  58584.    { NULL,                    /* REG_NOERROR */
  58585.      "No match",                    /* REG_NOMATCH */
  58586.      "Invalid regular expression",        /* REG_BADPAT */
  58587. @@ -1259,6 +1265,7 @@ typedef union
  58588.     We make the fail stack a global thing, and then grow it to
  58589.     re_max_failures when we compile.  */
  58590.  #ifndef MATCH_MAY_ALLOCATE
  58591. +#ifndef AMIGA
  58592.  static fail_stack_type fail_stack;
  58593.  
  58594.  static const char **     regstart, **     regend;
  58595. @@ -1267,6 +1274,16 @@ static const char **best_regstart, **bes
  58596.  static register_info_type *reg_info; 
  58597.  static const char **reg_dummy;
  58598.  static register_info_type *reg_info_dummy;
  58599. +#else /* AMIGA */
  58600. +fail_stack_type fail_stack;
  58601. +
  58602. +const char **     regstart, **     regend;
  58603. +const char ** old_regstart, ** old_regend;
  58604. +const char **best_regstart, **best_regend;
  58605. +register_info_type *reg_info; 
  58606. +const char **reg_dummy;
  58607. +register_info_type *reg_info_dummy;
  58608. +#endif /* AMIGA */
  58609.  #endif
  58610.  
  58611.  
  58612. diff -rup --new-file baseline/fsf/emacs/src/regex_protos.h amiga/fsf/emacs/src/regex_protos.h
  58613. --- baseline/fsf/emacs/src/regex_protos.h    Wed Dec 31 17:00:00 1969
  58614. +++ amiga/fsf/emacs/src/regex_protos.h    Sat Sep 28 00:00:00 1996
  58615. @@ -0,0 +1,48 @@
  58616. +/* Prototypes for functions defined in
  58617. +regex.c
  58618. + */
  58619. +
  58620. +extern unsigned int re_syntax_options;
  58621. +
  58622. +unsigned int re_set_syntax(unsigned int );
  58623. +
  58624. +extern char const * __far re_error_msg[17];
  58625. +
  58626. +extern int re_max_failures;
  58627. +
  58628. +extern struct { unsigned char ** stack; unsigned int size; unsigned int avail;  }  fail_stack;
  58629. +
  58630. +extern char const ** regstart;
  58631. +
  58632. +extern char const ** regend;
  58633. +
  58634. +extern char const ** old_regstart;
  58635. +
  58636. +extern char const ** old_regend;
  58637. +
  58638. +extern char const ** best_regstart;
  58639. +
  58640. +extern char const ** best_regend;
  58641. +
  58642. +extern void * reg_info_dummy;
  58643. +
  58644. +int regex_compile(char const * pattern,
  58645. +                            int size,
  58646. +                            unsigned int syntax,
  58647. +                            struct re_pattern_buffer * bufp);
  58648. +
  58649. +char alt_match_null_string_p(unsigned char * p,
  58650. +                             unsigned char * end,
  58651. +                             void * reg_info);
  58652. +
  58653. +char common_op_match_null_string_p(unsigned char ** p,
  58654. +                                   unsigned char * end,
  58655. +                                   void * reg_info);
  58656. +
  58657. +int bcmp_translate(unsigned char * s1,
  58658. +                   unsigned char * s2,
  58659. +                   register int len,
  58660. +                   char * translate);
  58661. +
  58662. +char const * re_compile_pattern(char const * , int , struct re_pattern_buffer * );
  58663. +
  58664. diff -rup --new-file baseline/fsf/emacs/src/s/amigaos.h amiga/fsf/emacs/src/s/amigaos.h
  58665. --- baseline/fsf/emacs/src/s/amigaos.h    Wed Dec 31 17:00:00 1969
  58666. +++ amiga/fsf/emacs/src/s/amigaos.h    Sat Sep 28 00:00:00 1996
  58667. @@ -0,0 +1,272 @@
  58668. +/* file for GNU Emacs running on AmigaOS 2.04, SAS C compiler 6.51b
  58669. +   Copyright (C) 1985, 1986 Free Software Foundation, Inc.
  58670. +
  58671. +This file is part of GNU Emacs.
  58672. +
  58673. +GNU Emacs is distributed in the hope that it will be useful,
  58674. +but WITHOUT ANY WARRANTY.  No author or distributor
  58675. +accepts responsibility to anyone for the consequences of using it
  58676. +or for whether it serves any particular purpose or works at all,
  58677. +unless he says so in writing.  Refer to the GNU Emacs General Public
  58678. +License for full details.
  58679. +
  58680. +Everyone is granted permission to copy, modify and redistribute
  58681. +GNU Emacs, but only under the conditions described in the
  58682. +GNU Emacs General Public License.   A copy of this license is
  58683. +supposed to have been given to you along with GNU Emacs so you
  58684. +can know your rights and responsibilities.  It should be in a
  58685. +file named COPYING.  Among other things, the copyright notice
  58686. +and this notice must be preserved on all copies.  */
  58687. +
  58688. +
  58689. +/*
  58690. + *      Define symbols to identify the version of Unix this is.
  58691. + *      Define all the symbols that apply correctly.
  58692. + */
  58693. +
  58694. +#ifndef AMIGA
  58695. +#define AMIGA
  58696. +#endif /* AMIGA */
  58697. +
  58698. +/* SYSTEM_TYPE should indicate the kind of system you are using.
  58699. + It sets the Lisp variable system-type.  */
  58700. +
  58701. +#define SYSTEM_TYPE "amigaos" /* CHFIXME: to amigaos ? */
  58702. +
  58703. +/* Define this if you want a faster redisplay. This saves a lot of CPU
  58704. +   time at the expense of more characters to be redrawn.
  58705. +   On a bitmapped display you win, with a serial line you probably lose.
  58706. +*/
  58707. +/* #define FAST_DISPLAY */
  58708. +
  58709. +/* Define this to display eight bit characters. The actual characters
  58710. +   that are visible can be set in init_xdisp ().
  58711. +*/
  58712. +/* #define EIGHT_BIT should not be needed anymore CHFIXME */
  58713. +
  58714. +/* nomultiplejobs should be defined if your system's shell
  58715. + does not have "job control" (the ability to stop a program,
  58716. + run some other program, then continue the first one).  */
  58717. +
  58718. +#define NOMULTIPLEJOBS
  58719. +
  58720. +/* Define this to include various patches that allow the Amiga to dump.
  58721. +   This *must* be defined on the Amiga!
  58722. +*/
  58723. +#define AMIGA_DUMP
  58724. +
  58725. +/* Do not use interrupt_input = 1 by default, because in 4.3
  58726. +   we can make noninterrupt input work properly.  */
  58727. +
  58728. +/* #undef INTERRUPT_INPUT */    /* This file borrowed from s-bsd4-3.h */
  58729. +
  58730. +/* First pty name is /dev/ptyp0.  */
  58731. +
  58732. +/* #define FIRST_PTY_LETTER 'p' */
  58733. +/*
  58734. + *      Define HAVE_TIMEVAL if the system supports the BSD style clock values.
  58735. + *      Look in <sys/time.h> for a timeval structure.
  58736. + */
  58737. +
  58738. +#define HAVE_TIMEVAL
  58739. +#define USE_UTIME
  58740. +
  58741. +/*
  58742. + *      Define HAVE_SELECT if the system supports the `select' system call.
  58743. + */
  58744. +
  58745. +#define HAVE_SELECT
  58746. +
  58747. +/*
  58748. + *      Define HAVE_PTYS if the system supports pty devices.
  58749. + */
  58750. +
  58751. +/* #define HAVE_PTYS */
  58752. +
  58753. +/* Define HAVE_SOCKETS if system supports 4.2-compatible sockets.  */
  58754. +
  58755. +/* #define HAVE_SOCKETS */
  58756. +
  58757. +/* But we do have socket pairs for processes ... */
  58758. +#define SKTPAIR
  58759. +
  58760. +/*
  58761. + *      Define NONSYSTEM_DIR_LIBRARY to make Emacs emulate
  58762. + *      The 4.2 opendir, etc., library functions.
  58763. + */
  58764. +
  58765. +/* #define NONSYSTEM_DIR_LIBRARY */
  58766. +#define SYSV_SYSTEM_DIR
  58767. +
  58768. +/* Define this symbol if your system has the functions bcopy, etc. */
  58769. +
  58770. +#define BSTRING         /* #define'ed later on */
  58771. +
  58772. +/* subprocesses should be defined if you want to
  58773. +   have code for asynchronous subprocesses
  58774. +   (as used in M-x compile and M-x shell).
  58775. +   This is generally OS dependent, and not supported
  58776. +   under most USG systems. */
  58777. +
  58778. +#define subprocesses
  58779. +
  58780. +#define DID_REMOTE              /* Use 0 length write to send eof */
  58781. +
  58782. +/* If your system uses COFF (Common Object File Format) then define the
  58783. +   preprocessor symbol "COFF". */
  58784. +
  58785. +/* #define COFF */
  58786. +
  58787. +/* define MAIL_USE_FLOCK if the mailer uses flock
  58788. +   to interlock access to /usr/spool/mail/$USER.
  58789. +   The alternative is that a lock file named
  58790. +   /usr/spool/mail/$USER.lock.  */
  58791. +
  58792. +/* #define MAIL_USE_FLOCK */
  58793. +
  58794. +/* Define CLASH_DETECTION if you want lock files to be written
  58795. +   so that Emacs can tell instantly when you try to modify
  58796. +   a file that someone else has modified in his Emacs.  */
  58797. +
  58798. +/* #define CLASH_DETECTION */
  58799. +
  58800. +/* We use the Berkeley (and usg5.2.2) interface to nlist.  */
  58801. +
  58802. +/* #define NLIST_STRUCT */
  58803. +
  58804. +/* The file containing the kernel's symbol table is called /vmunix.  */
  58805. +
  58806. +/* #define KERNEL_FILE "/vmunix" */
  58807. +
  58808. +/* The symbol in the kernel where the load average is found
  58809. +   is named _avenrun.  */
  58810. +
  58811. +/* #define LDAV_SYMBOL "_avenrun" */
  58812. +
  58813. +/* We use our own malloc for 2 reasons:
  58814. +     - To check that the 6 (INTBITS - VALBITS) of allocated data are
  58815. +       the same as &pure[0].
  58816. +     - To release unused memory to the system (SAS's malloc keeps it
  58817. +       till you quit)
  58818. +*/
  58819. +
  58820. +#define SYMS_SYSTEM syms_of_amiga()
  58821. +
  58822. +#define SYSTEM_MALLOC           /* But I have replaced the system malloc ... */
  58823. +
  58824. +#define DEF_PURESIZE 280000             /* Leave space for extra code for Amiga */
  58825. +#ifdef emacs
  58826. +extern int puresize;
  58827. +#endif
  58828. +#define PURESIZE puresize       /* Puresize is variable ... */
  58829. +
  58830. +#ifdef emacs
  58831. +/* Stdio must be included before redefining putchar */
  58832. +#include <stdio.h>
  58833. +extern char cbuffer[], *cbuffer_pos;
  58834. +#define PENDING_OUTPUT_COUNT(x) (cbuffer_pos - cbuffer)
  58835. +#endif
  58836. +/* We divert some calls to our routines */
  58837. +#undef putchar
  58838. +#define putchar(c) do { extern int noninteractive; \
  58839. +                     if (noninteractive) putc (c, stdout); \
  58840. +                     else emacs_putchar(c); } while(0)
  58841. +#define fwrite emacs_fwrite
  58842. +#define fflush emacs_fflush
  58843. +#define random rand
  58844. +#define srandom srand
  58845. +#define main emacs_main
  58846. +#define select emacs_select
  58847. +
  58848. +#ifdef emacs
  58849. +#include <string.h>
  58850. +#undef index
  58851. +#undef rindex
  58852. +#define index strchr
  58853. +#define rindex strrchr
  58854. +#endif
  58855. +
  58856. +#define fsync(x) 0              /* Emulate fsync ... */
  58857. +
  58858. +#ifdef emacs
  58859. +#include <sys/wait.h>           /* process.c doesn't have appropriate #ifdef's */
  58860. +extern int amiga_process_stack_size;
  58861. +#endif
  58862. +
  58863. +#define LISP_FLOAT_TYPE
  58864. +
  58865. +/* Here are some symbols for ymakefile's benefit */
  58866. +
  58867. +#define START_FILES             lib:c.o firstfile.o
  58868. +#define C_DEBUG_SWITCH          /* debug s */
  58869. +#define C_OPTIMIZE_SWITCH       /* opt */
  58870. +#define LD_SWITCH_SYSTEM    addsym batch
  58871. +#define C_SWITCH_SYSTEM
  58872. +#define S_SWITCH_MACHINE        /* Nothing! */
  58873. +#define UNEXEC            amiga_dump.o
  58874. +/* Normally you might be tempted to use OBJECTS_SYSTEM here, but this would cause them
  58875. +   to be linked after lastfile.o, and thus not be dumped.  This doesn't work. */
  58876. +#define EXTRA_OBJECTS        amiga_clipboard.o amiga_tty.o amiga_serial.o \
  58877. +                amiga_screen.o amiga_menu.o amiga_malloc.o \
  58878. +                amiga_rexx.o simplerexx.o amiga_term.o \
  58879. +                amiga_sysdep.o amiga_xmenu.o amiga_fns.o
  58880. +
  58881. +/* Can't use : on Amiga */
  58882. +#define SEPCHAR ','
  58883. +
  58884. +#define abort() amiga_abort(__FILE__,__LINE__)
  58885. +
  58886. +#define NULL_DEVICE "NIL:"
  58887. +
  58888. +/* Define USE_TEXT_PROPERTIES to support visual and other properties
  58889. +   on text. */
  58890. +#ifndef USE_TEXT_PROPERTIES
  58891. +#define USE_TEXT_PROPERTIES
  58892. +#endif
  58893. +
  58894. +#undef USER_FULL_NAME
  58895. +#define USER_FULL_NAME "GNU Emacs Lover"
  58896. +
  58897. +#define HAVE_SYS_TIMEB_H
  58898. +#define HAVE_SYS_TIME_H
  58899. +#define HAVE_UNISTD_H
  58900. +#define STDC_HEADERS
  58901. +#define TIME_WITH_SYS_TIME
  58902. +
  58903. +#define HAVE_GETTIMEOFDAY
  58904. +#define HAVE_GETHOSTNAME
  58905. +#undef HAVE_DUP2
  58906. +#define HAVE_RENAME
  58907. +#define HAVE_CLOSEDIR
  58908. +
  58909. +#define HAVE_TM_ZONE
  58910. +#define HAVE_TZNAME
  58911. +
  58912. +#define HAVE_LONG_FILE_NAMES
  58913. +
  58914. +#define HAVE_MKDIR
  58915. +#define HAVE_RMDIR
  58916. +#define HAVE_RANDOM
  58917. +#define HAVE_BCOPY
  58918. +#define HAVE_BCMP
  58919. +#undef  HAVE_LOGB
  58920. +#define HAVE_FREXP
  58921. +#define HAVE_FMOD
  58922. +#define HAVE_FTIME
  58923. +
  58924. +#define NAME_SHELL "gnu:lib/emacs/19.28/etc/sh"        /* FIXME: Should not be hardcoded */
  58925. +
  58926. +/* Amiga window-specific stuff */
  58927. +
  58928. +#define VERS "2.0DCLG Beta"
  58929. +
  58930. +#define FALSE 0
  58931. +#define TRUE 1
  58932. +
  58933. +#define HAVE_MOUSE
  58934. +
  58935. +#define USE_EXTERNAL_MENU_BAR
  58936. +#if 0
  58937. +#define USE_SCROLL_BARS
  58938. +#endif
  58939. +
  58940. diff -rup --new-file baseline/fsf/emacs/src/scoptions amiga/fsf/emacs/src/scoptions
  58941. --- baseline/fsf/emacs/src/scoptions    Wed Dec 31 17:00:00 1969
  58942. +++ amiga/fsf/emacs/src/scoptions    Sat Sep 28 00:00:00 1996
  58943. @@ -0,0 +1,25 @@
  58944. +CODE=FAR
  58945. +MATH=IEEE
  58946. +STRINGMERGE
  58947. +STRUCTUREEQUIVALENCE
  58948. +OPTIMIZE
  58949. +NOWARNVOIDRETURN
  58950. +NOOPTIMIZERINLINE
  58951. +NOVERSION
  58952. +MEMORYSIZE=HUGE
  58953. +NOERRORHIGHLIGHT
  58954. +OPTIMIZERTIME
  58955. +INCLUDEDIR=//unix/include
  58956. +DEFINE USE_PROTOS
  58957. +DEFINE FAR=__far
  58958. +IGNORE=161
  58959. +IGNORE=154
  58960. +IGNORE=147
  58961. +IGNORE=132
  58962. +IGNORE=104
  58963. +IGNORE=100
  58964. +IGNORE=93
  58965. +WARN=84
  58966. +WARN=62
  58967. +IGNORE=116
  58968. +ERROR=87
  58969. diff -rup --new-file baseline/fsf/emacs/src/scroll.c amiga/fsf/emacs/src/scroll.c
  58970. --- baseline/fsf/emacs/src/scroll.c    Tue May  3 19:30:01 1994
  58971. +++ amiga/fsf/emacs/src/scroll.c    Sat Sep 28 00:00:00 1996
  58972. @@ -55,6 +55,64 @@ struct matrix_elt
  58973.    };
  58974.  
  58975.  
  58976. +#ifdef FAST_DISPLAY
  58977. +scrolling_1 (window_size, unchanged_at_top, unchanged_at_bottom,
  58978. +         draw_cost, old_hash, new_hash, free_at_end)
  58979. +     int window_size, unchanged_at_top, unchanged_at_bottom;
  58980. +     int *draw_cost;
  58981. +     int *old_hash;
  58982. +     int *new_hash;
  58983. +     int free_at_end;
  58984. +{
  58985. +  int lines, i;
  58986. +  int window_end = unchanged_at_top + window_size;
  58987. +
  58988. +  /* Rebase arrays at line 0 */
  58989. +  old_hash -= unchanged_at_top - 1;
  58990. +  new_hash -= unchanged_at_top - 1;
  58991. +  draw_cost -= unchanged_at_top - 1;
  58992. +
  58993. +  /* We can't allow un-enabled lines to be scrolled (they are not redrawable). 
  58994. +     Restrict window to the first set of contiguous enabled lines 
  58995. +     (an enabled line has draw_cost[x] != INFINITY) */
  58996. +  for (i = unchanged_at_top; i < window_end && draw_cost[i] != INFINITY; i++) ;
  58997. +  /*unchanged_at_bottom += window_size - i;*/
  58998. +  /*window_size = i - unchanged_at_top;*/
  58999. +  window_end = i;
  59000. +
  59001. +  if (lines = calc_scroll(old_hash, new_hash, unchanged_at_top, window_end))
  59002. +      scroll_frame_lines(selected_frame, unchanged_at_top, window_end - lines, lines, unchanged_at_top); /* CHFIXME: last param ok? */
  59003. +  else if (lines = calc_scroll(new_hash, old_hash, unchanged_at_top, window_end))
  59004. +      scroll_frame_lines(selected_frame, unchanged_at_top + lines , window_end , -lines, unchanged_at_top + lines); /* CHFIXME: last param ok? */
  59005. +}
  59006. +
  59007. +int calc_scroll(int *old_hash, int *new_hash, int from, int to)
  59008. +/* For insert attempt, the parameters are correct.
  59009. +   For delete attempt, swap the old & new hash parameters
  59010. +*/
  59011. +{
  59012. +    int try = from + 1, lines, i;
  59013. +    int hash1 = old_hash[from];
  59014. +
  59015. +    do
  59016. +    {
  59017. +    if (hash1 == new_hash[try])
  59018. +    {
  59019. +        /* Check if other lines match too */
  59020. +        lines = try - from; /* Amount to insert */
  59021. +        for (i = try + 1; i < to; i++)
  59022. +        if (old_hash[i - lines] != new_hash[i]) break;
  59023. +        if (i == to) /* It works ! */
  59024. +        return lines;
  59025. +    }
  59026. +    try++;
  59027. +    }
  59028. +    while (try < to);
  59029. +
  59030. +    return 0;
  59031. +}
  59032. +
  59033. +#else /* not FAST_DISPLAY */
  59034.  /* Determine, in matrix[i,j], the cost of updating the first j old lines
  59035.     into the first i new lines.
  59036.     This involves using insert or delete somewhere if i != j.
  59037. @@ -380,6 +438,7 @@ scrolling_1 (frame, window_size, unchang
  59038.                 free_at_end);
  59039.    do_scrolling (frame, matrix, window_size, unchanged_at_top);
  59040.  }
  59041. +#endif /* not FAST_DISPLAY */
  59042.  
  59043.  /* Return number of lines in common between current and desired frame contents
  59044.     described to us only as vectors of hash codes OLDHASH and NEWHASH.
  59045. diff -rup --new-file baseline/fsf/emacs/src/scroll_protos.h amiga/fsf/emacs/src/scroll_protos.h
  59046. --- baseline/fsf/emacs/src/scroll_protos.h    Wed Dec 31 17:00:00 1969
  59047. +++ amiga/fsf/emacs/src/scroll_protos.h    Sat Sep 28 00:00:00 1996
  59048. @@ -0,0 +1,68 @@
  59049. +/* Prototypes for functions defined in
  59050. +scroll.c
  59051. + */
  59052. +
  59053. +void calculate_scrolling(int frame,
  59054. +                         struct matrix_elt * matrix,
  59055. +                         int window_size,
  59056. +                         int lines_below,
  59057. +                         int * draw_cost,
  59058. +                         int * old_hash
  59059. +,
  59060. +                         int * new_hash,
  59061. +                         int free_at_end);
  59062. +
  59063. +void do_scrolling(int frame,
  59064. +                  struct matrix_elt * matrix,
  59065. +                  int window_size,
  59066. +                  int unchanged_at_top);
  59067. +
  59068. +void scrolling_1(int frame,
  59069. +                 int window_size,
  59070. +                 int unchanged_at_top,
  59071. +                 int unchanged_at_bottom,
  59072. +                 int * draw_cost,
  59073. +                 int * old_hash,
  59074. +                 int * new_hash,
  59075. +
  59076. +     int free_at_end);
  59077. +
  59078. +int scrolling_max_lines_saved(int start,
  59079. +                              int end,
  59080. +                              int * oldhash,
  59081. +                              int * newhash,
  59082. +                              int * cost);
  59083. +
  59084. +int scroll_cost(int frame,
  59085. +                int from,
  59086. +                int to,
  59087. +                int amount);
  59088. +
  59089. +void line_ins_del(int frame,
  59090. +                  int ov1,
  59091. +                  int pf1,
  59092. +                  int ovn,
  59093. +                  int pfn,
  59094. +                  register int * ov,
  59095. +                  register int * mf);
  59096. +
  59097. +void ins_del_costs(int frame,
  59098. +                   char * one_line_string,
  59099. +                   char * multi_string,
  59100. +                   char * setup_string,
  59101. +                   char * cleanup_string,
  59102. +                   int * costvec,
  59103. +                   int *
  59104. +ncostvec,
  59105. +                   int coefficient);
  59106. +
  59107. +int do_line_insertion_deletion_costs(int frame,
  59108. +                                     char * ins_line_string,
  59109. +                                     char * multi_ins_string,
  59110. +                                     char * del_line_string,
  59111. +
  59112. +              char * multi_del_string,
  59113. +                                     char * setup_string,
  59114. +                                     char * cleanup_string,
  59115. +                                     int coefficient);
  59116. +
  59117. diff -rup --new-file baseline/fsf/emacs/src/search.c amiga/fsf/emacs/src/search.c
  59118. --- baseline/fsf/emacs/src/search.c    Mon Aug 22 17:32:40 1994
  59119. +++ amiga/fsf/emacs/src/search.c    Sat Sep 28 00:00:00 1996
  59120. @@ -58,7 +58,10 @@ Lisp_Object last_regexp;
  59121.     to call re_set_registers after compiling a new pattern or after
  59122.     setting the match registers, so that the regex functions will be
  59123.     able to free or re-allocate it properly.  */
  59124. -static struct re_registers search_regs;
  59125. +#ifndef AMIGA
  59126. +static
  59127. +#endif
  59128. +struct re_registers search_regs;
  59129.  
  59130.  /* The buffer in which the last search was performed, or
  59131.     Qt if the last search was done in a string;
  59132. diff -rup --new-file baseline/fsf/emacs/src/search_protos.h amiga/fsf/emacs/src/search_protos.h
  59133. --- baseline/fsf/emacs/src/search_protos.h    Wed Dec 31 17:00:00 1969
  59134. +++ amiga/fsf/emacs/src/search_protos.h    Sat Sep 28 00:00:00 1996
  59135. @@ -0,0 +1,141 @@
  59136. +/* Prototypes for functions defined in
  59137. +search.c
  59138. + */
  59139. +
  59140. +extern struct re_pattern_buffer searchbuf;
  59141. +
  59142. +extern char search_fastmap[256];
  59143. +
  59144. +extern int last_regexp;
  59145. +
  59146. +extern struct re_registers search_regs;
  59147. +
  59148. +extern int last_thing_searched;
  59149. +
  59150. +extern int Qinvalid_regexp;
  59151. +
  59152. +void matcher_overflow(void);
  59153. +
  59154. +int compile_pattern(int pattern,
  59155. +                    struct re_pattern_buffer * bufp,
  59156. +                    struct re_registers * regp,
  59157. +                    char * translate);
  59158. +
  59159. +extern int Qsearch_failed;
  59160. +
  59161. +int signal_failure(int arg);
  59162. +
  59163. +extern struct Lisp_Subr Slooking_at;
  59164. +
  59165. +int Flooking_at(int );
  59166. +
  59167. +extern struct Lisp_Subr Sstring_match;
  59168. +
  59169. +int Fstring_match(int , int , int );
  59170. +
  59171. +int fast_string_match(int regexp,
  59172. +                      int string);
  59173. +
  59174. +int scan_buffer(register int target,
  59175. +                int start,
  59176. +                register int count,
  59177. +                int * shortage,
  59178. +                int allow_quit);
  59179. +
  59180. +int find_next_newline(register int from,
  59181. +                      register int cnt);
  59182. +
  59183. +extern struct Lisp_Subr Sskip_chars_forward;
  59184. +
  59185. +int Fskip_chars_forward(int , int );
  59186. +
  59187. +extern struct Lisp_Subr Sskip_chars_backward;
  59188. +
  59189. +int Fskip_chars_backward(int , int );
  59190. +
  59191. +extern struct Lisp_Subr Sskip_syntax_forward;
  59192. +
  59193. +int Fskip_syntax_forward(int , int );
  59194. +
  59195. +extern struct Lisp_Subr Sskip_syntax_backward;
  59196. +
  59197. +int Fskip_syntax_backward(int , int );
  59198. +
  59199. +int skip_chars(int forwardp,
  59200. +               int syntaxp,
  59201. +               int string,
  59202. +               int lim);
  59203. +
  59204. +int search_command(int string,
  59205. +                   int bound,
  59206. +                   int noerror,
  59207. +                   int count,
  59208. +                   int direction,
  59209. +                   int RE);
  59210. +
  59211. +int search_buffer(int string,
  59212. +                  int pos,
  59213. +                  int lim,
  59214. +                  int n,
  59215. +                  int RE,
  59216. +                  register unsigned char * trt,
  59217. +                  register unsigned char * inverse_trt);
  59218. +
  59219. +void set_search_regs(int beg,
  59220. +                     int len);
  59221. +
  59222. +int wordify(int string);
  59223. +
  59224. +extern struct Lisp_Subr Ssearch_backward;
  59225. +
  59226. +int Fsearch_backward(int , int , int , int );
  59227. +
  59228. +extern struct Lisp_Subr Ssearch_forward;
  59229. +
  59230. +int Fsearch_forward(int , int , int , int );
  59231. +
  59232. +extern struct Lisp_Subr Sword_search_backward;
  59233. +
  59234. +int Fword_search_backward(int , int , int , int );
  59235. +
  59236. +extern struct Lisp_Subr Sword_search_forward;
  59237. +
  59238. +int Fword_search_forward(int , int , int , int );
  59239. +
  59240. +extern struct Lisp_Subr Sre_search_backward;
  59241. +
  59242. +int Fre_search_backward(int , int , int , int );
  59243. +
  59244. +extern struct Lisp_Subr Sre_search_forward;
  59245. +
  59246. +int Fre_search_forward(int , int , int , int );
  59247. +
  59248. +extern struct Lisp_Subr Sreplace_match;
  59249. +
  59250. +int Freplace_match(int , int , int );
  59251. +
  59252. +int match_limit(int num,
  59253. +                int beginningp);
  59254. +
  59255. +extern struct Lisp_Subr Smatch_beginning;
  59256. +
  59257. +int Fmatch_beginning(int );
  59258. +
  59259. +extern struct Lisp_Subr Smatch_end;
  59260. +
  59261. +int Fmatch_end(int );
  59262. +
  59263. +extern struct Lisp_Subr Smatch_data;
  59264. +
  59265. +int Fmatch_data(void);
  59266. +
  59267. +extern struct Lisp_Subr Sstore_match_data;
  59268. +
  59269. +int Fstore_match_data(int );
  59270. +
  59271. +extern struct Lisp_Subr Sregexp_quote;
  59272. +
  59273. +int Fregexp_quote(int );
  59274. +
  59275. +int syms_of_search(void);
  59276. +
  59277. diff -rup --new-file baseline/fsf/emacs/src/semacs.sh amiga/fsf/emacs/src/semacs.sh
  59278. --- baseline/fsf/emacs/src/semacs.sh    Wed Dec 31 17:00:00 1969
  59279. +++ amiga/fsf/emacs/src/semacs.sh    Sat Sep 28 00:00:00 1996
  59280. @@ -0,0 +1,2 @@
  59281. +assign gnuemacs-19.28: work:c-src/emacs-19.28
  59282. +setenv termcap s:termcap
  59283. diff -rup --new-file baseline/fsf/emacs/src/setlisp.cpr amiga/fsf/emacs/src/setlisp.cpr
  59284. --- baseline/fsf/emacs/src/setlisp.cpr    Wed Dec 31 17:00:00 1969
  59285. +++ amiga/fsf/emacs/src/setlisp.cpr    Sat Sep 28 00:00:00 1996
  59286. @@ -0,0 +1,15 @@
  59287. +/* */
  59288. +"define VALBITS 26"
  59289. +"define INTBITS 32"
  59290. +"define XPNTR(a) ((a & 0x3ffffff) | 0x08000000)"
  59291. +"define XINT(a) (((a) << (INTBITS-VALBITS)) >> (INTBITS-VALBITS))"
  59292. +"define XCONS(a) ((struct Lisp_Cons*) XPNTR(a))"
  59293. +"define XSYMBOL(a) ((struct Lisp_Symbol*) XPNTR(a))"
  59294. +"define XSUBR(a) ((struct Lisp_Subr*) XPNTR(a))"
  59295. +"define XMARKER(a) ((struct Lisp_Marker*) XPNTR(a))"
  59296. +"define XWINDOW(a) ((struct window *) XPNTR(a))"
  59297. +"define XVECTOR(a) ((struct Lisp_Vector *) XPNTR(a))"
  59298. +"define XTYPE(a) ((enum Lisp_Type) ((a) >> VALBITS))"
  59299. +"define CONSP(x) (XTYPE ((x)) == 5)"
  59300. +"define EQ(x, y) ((x) == (y))"
  59301. +"alias dsymbol { d *XSYMBOL($1) ; du XSYMBOL($1)->name->data l XSYMBOL($1)->name->size a }"
  59302. diff -rup --new-file baseline/fsf/emacs/src/simplerexx.c amiga/fsf/emacs/src/simplerexx.c
  59303. --- baseline/fsf/emacs/src/simplerexx.c    Wed Dec 31 17:00:00 1969
  59304. +++ amiga/fsf/emacs/src/simplerexx.c    Sat Sep 28 00:00:00 1996
  59305. @@ -0,0 +1,416 @@
  59306. +/*
  59307. + * Simple ARexx interface by Michael Sinz
  59308. + *
  59309. + * This is a very "Simple" interface to the world of ARexx...
  59310. + * For more complex interfaces into ARexx, it is best that you
  59311. + * understand the functions that are provided by ARexx.
  59312. + * In many cases they are more powerful than what is presented
  59313. + * here.
  59314. + *
  59315. + * This code is fully re-entrant and self-contained other than
  59316. + * the use of SysBase/AbsExecBase and the ARexx RVI support
  59317. + * library which is also self-contained...
  59318. + */
  59319. +
  59320. +#include    <exec/types.h>
  59321. +#include    <exec/nodes.h>
  59322. +#include    <exec/lists.h>
  59323. +#include    <exec/ports.h>
  59324. +#include    <exec/memory.h>
  59325. +
  59326. +#include    <proto/exec.h>
  59327. +
  59328. +#include    <rexx/storage.h>
  59329. +#include    <rexx/rxslib.h>
  59330. +
  59331. +#include    <string.h>
  59332. +#include    <ctype.h>
  59333. +
  59334. +/*
  59335. + * The prototypes for the few ARexx functions we will call...
  59336. + */
  59337. +struct RexxMsg *CreateRexxMsg(struct MsgPort *,char *,char *);
  59338. +void *CreateArgstring(char *,long);
  59339. +void DeleteRexxMsg(struct RexxMsg *);
  59340. +void DeleteArgstring(char *);
  59341. +BOOL IsRexxMsg(struct Message *);
  59342. +
  59343. +/*
  59344. + * Pragmas for the above functions...  (To make this all self-contained...)
  59345. + * If you use RexxGlue.o, this is not needed...
  59346. + *
  59347. + * These are for Lattice C 5.x  (Note the use of RexxContext->RexxSysBase)
  59348. + */
  59349. +#pragma libcall RexxContext->RexxSysBase CreateRexxMsg 90 09803
  59350. +#pragma libcall RexxContext->RexxSysBase CreateArgstring 7E 0802
  59351. +#pragma libcall RexxContext->RexxSysBase DeleteRexxMsg 96 801
  59352. +#pragma libcall RexxContext->RexxSysBase DeleteArgstring 84 801
  59353. +#pragma libcall RexxContext->RexxSysBase IsRexxMsg A8 801
  59354. +
  59355. +/*
  59356. + * Now, we have made the pragmas needed, let's get to work...
  59357. + */
  59358. +
  59359. +/*
  59360. + * A structure for the ARexx handler context
  59361. + * This is *VERY* *PRIVATE* and should not be touched...
  59362. + */
  59363. +struct    ARexxContext
  59364. +{
  59365. +struct    MsgPort    *ARexxPort;    /* The port messages come in at... */
  59366. +struct    Library    *RexxSysBase;    /* We will hide the library pointer here... */
  59367. +    long    Outstanding;    /* The count of outstanding ARexx messages... */
  59368. +    char    PortName[24];    /* The port name goes here... */
  59369. +    char    ErrorName[28];    /* The name of the <base>.LASTERROR... */
  59370. +    char    Extension[8];    /* Default file name extension... */
  59371. +};
  59372. +
  59373. +#define    AREXXCONTEXT    struct ARexxContext *
  59374. +
  59375. +#include    "SimpleRexx.h"
  59376. +
  59377. +/*
  59378. + * This function returns the port name of your ARexx port.
  59379. + * It will return NULL if there is no ARexx port...
  59380. + *
  59381. + * This string is *READ ONLY*  You *MUST NOT* modify it...
  59382. + */
  59383. +char *ARexxName(AREXXCONTEXT RexxContext)
  59384. +{
  59385. +    register    char    *tmp=NULL;
  59386. +
  59387. +    if (RexxContext) tmp=RexxContext->PortName;
  59388. +    return(tmp);
  59389. +}
  59390. +
  59391. +/*
  59392. + * This function returns the signal mask that the Rexx port is
  59393. + * using.  It returns NULL if there is no signal...
  59394. + *
  59395. + * Use this signal bit in your Wait() loop...
  59396. + */
  59397. +ULONG ARexxSignal(AREXXCONTEXT RexxContext)
  59398. +{
  59399. +    register    ULONG    tmp=NULL;
  59400. +
  59401. +    if (RexxContext) tmp=1L << (RexxContext->ARexxPort->mp_SigBit);
  59402. +    return(tmp);
  59403. +}
  59404. +
  59405. +/*
  59406. + * This function returns a structure that contains the commands sent from
  59407. + * ARexx or the results of commands you sent.  You will need to parse it 
  59408. + * and return the structure back so that the memory can be freed.
  59409. + *
  59410. + * This returns NULL if there was no message.
  59411. + */
  59412. +struct RexxMsg *GetARexxMsg(AREXXCONTEXT RexxContext)
  59413. +{
  59414. +    register    struct    RexxMsg    *tmp=NULL;
  59415. +    register        short    flag;
  59416. +
  59417. +    if (RexxContext) tmp=(struct RexxMsg *)GetMsg(RexxContext->ARexxPort);
  59418. +    return(tmp);
  59419. +}
  59420. +
  59421. +/* Use this to delete a message sent via SendARexxMsg and that has now been
  59422. +   returned to you.
  59423. +*/
  59424. +void DeleteARexxMsg(AREXXCONTEXT RexxContext, struct RexxMsg *rmsg)
  59425. +{
  59426. +    /*
  59427. +     * Free the arguments and the message...
  59428. +     */
  59429. +    if(rmsg->rm_Action & RXFF_RESULT) {
  59430. +    if(rmsg->rm_Result1 == 0 && rmsg->rm_Result2) {
  59431. +        DeleteArgstring((STRPTR)rmsg->rm_Result2);
  59432. +    }
  59433. +    }
  59434. +    DeleteArgstring(rmsg->rm_Args[0]);
  59435. +    DeleteRexxMsg(rmsg);
  59436. +    RexxContext->Outstanding-=1;
  59437. +}
  59438. +
  59439. +/*
  59440. + * Use this to return a ARexx message...
  59441. + *
  59442. + * If you wish to return something, it must be in the RString.
  59443. + * If you wish to return an Error, it must be in the Error.
  59444. + * If there is an error, the RString is ignored.
  59445. + */
  59446. +void ReplyARexxMsg(AREXXCONTEXT RexxContext,struct RexxMsg *rmsg,
  59447. +           char *RString,LONG Error)
  59448. +{
  59449. +    if (RexxContext) if (rmsg) if (rmsg!=REXX_RETURN_ERROR)
  59450. +    {
  59451. +    rmsg->rm_Result2=0;
  59452. +    if (!(rmsg->rm_Result1=Error))
  59453. +    {
  59454. +        /*
  59455. +         * if you did not have an error we return the string
  59456. +         */
  59457. +        if (rmsg->rm_Action & (1L << RXFB_RESULT)) if (RString)
  59458. +        {
  59459. +        rmsg->rm_Result2=(LONG)CreateArgstring(RString,
  59460. +                               (LONG)strlen(RString));
  59461. +        }
  59462. +    }
  59463. +
  59464. +    /*
  59465. +     * Reply the message to ARexx...
  59466. +     */
  59467. +    ReplyMsg((struct Message *)rmsg);
  59468. +    }
  59469. +}
  59470. +
  59471. +/*
  59472. + * This function will set an error string for the ARexx
  59473. + * application in the variable defined as <appname>.LASTERROR
  59474. + *
  59475. + * Note that this can only happen if there is an ARexx message...
  59476. + *
  59477. + * This returns TRUE if it worked, FALSE if it did not...
  59478. + */
  59479. +short SetARexxLastError(AREXXCONTEXT RexxContext,struct RexxMsg *rmsg,
  59480. +            char *ErrorString)
  59481. +{
  59482. +    register    short    OkFlag=FALSE;
  59483. +
  59484. +    if (RexxContext) if (rmsg) if (CheckRexxMsg(rmsg))
  59485. +    {
  59486. +    /*
  59487. +     * Note that SetRexxVar() has more than just a TRUE/FALSE
  59488. +     * return code, but for this "basic" case, we just care if
  59489. +     * it works or not.
  59490. +     */
  59491. +    if (!SetRexxVar(rmsg,RexxContext->ErrorName,ErrorString,
  59492. +            (long)strlen(ErrorString)))
  59493. +    {
  59494. +        OkFlag=TRUE;
  59495. +    }
  59496. +    }
  59497. +    return(OkFlag);
  59498. +}
  59499. +
  59500. +/*
  59501. + * This function will send a string to ARexx...
  59502. + *
  59503. + * The default host port will be that of your task...
  59504. + *
  59505. + * If you set StringFile to TRUE, it will set that bit for the message...
  59506. + *
  59507. + * Returns the message sent, or NULL in case of error.
  59508. + */
  59509. +struct RexxMsg *SendARexxMsg(AREXXCONTEXT RexxContext,char *RString,
  59510. +                  short StringFile, short results)
  59511. +{
  59512. +    register    struct    MsgPort    *RexxPort;
  59513. +    register    struct    RexxMsg    *rmsg;
  59514. +    register        short    flag=FALSE;
  59515. +
  59516. +    if (RexxContext) if (RString)
  59517. +    {
  59518. +    if (rmsg=CreateRexxMsg(RexxContext->ARexxPort,
  59519. +                   RexxContext->Extension,
  59520. +                   RexxContext->PortName))
  59521. +    {
  59522. +        rmsg->rm_Action=RXCOMM | (StringFile ?
  59523. +                      (1L << RXFB_STRING):0);
  59524. +        rmsg->rm_Action |= (results ? RXFF_RESULT : 0);
  59525. +        if (rmsg->rm_Args[0]=CreateArgstring(RString,
  59526. +                         (LONG)strlen(RString)))
  59527. +        {
  59528. +        /*
  59529. +         * We need to find the RexxPort and this needs
  59530. +         * to be done in a Forbid()
  59531. +         */
  59532. +        Forbid();
  59533. +        if (RexxPort=FindPort(RXSDIR))
  59534. +        {
  59535. +            /*
  59536. +             * We found the port, so put the
  59537. +             * message to ARexx...
  59538. +             */
  59539. +            PutMsg(RexxPort,(struct Message *)rmsg);
  59540. +            RexxContext->Outstanding+=1;
  59541. +            flag=TRUE;
  59542. +        }
  59543. +        else
  59544. +        {
  59545. +            /*
  59546. +             * No port, so clean up...
  59547. +             */
  59548. +            DeleteArgstring(rmsg->rm_Args[0]);
  59549. +            DeleteRexxMsg(rmsg);
  59550. +        }
  59551. +        Permit();
  59552. +        }
  59553. +        else DeleteRexxMsg(rmsg);
  59554. +    }
  59555. +    }
  59556. +    return flag ? rmsg : NULL;
  59557. +}
  59558. +
  59559. +int PendingCommands(AREXXCONTEXT RexxContext)
  59560. +{
  59561. +    if (RexxContext) return RexxContext->Outstanding;
  59562. +    else return 0;
  59563. +}
  59564. +
  59565. +/*
  59566. + * This function closes down the ARexx context that was opened
  59567. + * with InitARexx...
  59568. + */
  59569. +void FreeARexx(AREXXCONTEXT RexxContext)
  59570. +{
  59571. +    register    struct    RexxMsg    *rmsg;
  59572. +
  59573. +    if (RexxContext)
  59574. +    {
  59575. +    /*
  59576. +     * Clear port name so it can't be found...
  59577. +     */
  59578. +    RexxContext->PortName[0]='\0';
  59579. +
  59580. +    /*
  59581. +     * Clean out any outstanding messages we had sent out...
  59582. +     */
  59583. +    while (RexxContext->Outstanding)
  59584. +    {
  59585. +        WaitPort(RexxContext->ARexxPort);
  59586. +        while (rmsg=GetARexxMsg(RexxContext))
  59587. +        {
  59588. +        if (rmsg!=REXX_RETURN_ERROR)
  59589. +        {
  59590. +            /*
  59591. +             * Any messages that come now are blown
  59592. +             * away...
  59593. +             */
  59594. +            SetARexxLastError(RexxContext,rmsg,
  59595. +                      "99: Port Closed!");
  59596. +            /* removed ReplyARexxMsg() this was a bug that would */
  59597. +            /* obviously cause a loop (we would continue to reply and */
  59598. +            /* then get the message.  It now deletes the message as */
  59599. +            /* should be done.  -ch5/10/93. */
  59600. +            DeleteARexxMsg(RexxContext,rmsg);
  59601. +        }
  59602. +        }
  59603. +    }
  59604. +
  59605. +    /*
  59606. +     * Clean up the port and delete it...
  59607. +     */
  59608. +    if (RexxContext->ARexxPort)
  59609. +    {
  59610. +        while (rmsg=GetARexxMsg(RexxContext))
  59611. +        {
  59612. +        /*
  59613. +         * Any messages that still are coming in are
  59614. +         * "dead"  We just set the LASTERROR and
  59615. +         * reply an error of 100...
  59616. +         */
  59617. +        SetARexxLastError(RexxContext,rmsg,
  59618. +                  "99: Port Closed!");
  59619. +        ReplyARexxMsg(RexxContext,rmsg,NULL,100);
  59620. +        }
  59621. +        RemPort(RexxContext->ARexxPort);
  59622. +        DeleteMsgPort(RexxContext->ARexxPort);
  59623. +    }
  59624. +
  59625. +    /*
  59626. +     * Make sure we close the library...
  59627. +     */
  59628. +    if (RexxContext->RexxSysBase)
  59629. +    {
  59630. +        CloseLibrary(RexxContext->RexxSysBase);
  59631. +    }
  59632. +
  59633. +    /*
  59634. +     * Free the memory of the RexxContext
  59635. +     */
  59636. +    FreeMem(RexxContext,sizeof(struct ARexxContext));
  59637. +    }
  59638. +}
  59639. +
  59640. +/*
  59641. + * This routine initializes an ARexx port for your process
  59642. + * This should only be done once per process.  You must call it
  59643. + * with a valid application name and you must use the handle it
  59644. + * returns in all other calls...
  59645. + *
  59646. + * NOTE:  The AppName should not have spaces in it...
  59647. + *        Example AppNames:  "MyWord" or "FastCalc" etc...
  59648. + *        The name *MUST* be less that 16 characters...
  59649. + *        If it is not, it will be trimmed...
  59650. + *        The name will also be UPPER-CASED...
  59651. + *
  59652. + * NOTE:  The Default file name extension, if NULL will be
  59653. + *        "rexx"  (the "." is automatic)
  59654. + */
  59655. +AREXXCONTEXT InitARexx(char *AppName,char *Extension)
  59656. +{
  59657. +    register    AREXXCONTEXT    RexxContext=NULL;
  59658. +    register    short        loop;
  59659. +    register    short        count;
  59660. +    register    char        *tmp;
  59661. +
  59662. +    if (RexxContext=AllocMem(sizeof(struct ARexxContext),
  59663. +                 MEMF_PUBLIC|MEMF_CLEAR))
  59664. +    {
  59665. +    if (RexxContext->RexxSysBase=OpenLibrary("rexxsyslib.library", NULL))
  59666. +    {
  59667. +        /*
  59668. +         * Set up the extension...
  59669. +         */
  59670. +        if (!Extension) Extension="rexx";
  59671. +        tmp=RexxContext->Extension;
  59672. +        for (loop=0;(loop<7)&&(Extension[loop]);loop++)
  59673. +        {
  59674. +        *tmp++=Extension[loop];
  59675. +        }
  59676. +        *tmp='\0';
  59677. +
  59678. +        /*
  59679. +         * Set up a port name...
  59680. +         */
  59681. +        tmp=RexxContext->PortName;
  59682. +        for (loop=0;(loop<16)&&(AppName[loop]);loop++)
  59683. +        {
  59684. +        *tmp++=toupper(AppName[loop]);
  59685. +        }
  59686. +        *tmp='\0';
  59687. +
  59688. +        /*
  59689. +         * Set up the last error RVI name...
  59690. +         *
  59691. +         * This is <appname>.LASTERROR
  59692. +         */
  59693. +        strcpy(RexxContext->ErrorName,RexxContext->PortName);
  59694. +        strcat(RexxContext->ErrorName,".LASTERROR");
  59695. +
  59696. +        /* We need to make a unique port name... */
  59697. +        Forbid();
  59698. +        for (count=1,RexxContext->ARexxPort=(VOID *)1;
  59699. +         RexxContext->ARexxPort;count++)
  59700. +        {
  59701. +        stci_d(tmp,count);
  59702. +        RexxContext->ARexxPort=
  59703. +            FindPort(RexxContext->PortName);
  59704. +        }
  59705. +
  59706. +        /*RexxContext->ARexxPort=CreatePort(RexxContext->PortName,NULL);*/
  59707. +        RexxContext->ARexxPort=CreateMsgPort();
  59708. +        RexxContext->ARexxPort->mp_Node.ln_Name = RexxContext->PortName;
  59709. +        RexxContext->ARexxPort->mp_Node.ln_Pri = 0;
  59710. +        AddPort(RexxContext->ARexxPort);
  59711. +        Permit();
  59712. +    }
  59713. +
  59714. +    if (!RexxContext->RexxSysBase || !RexxContext->ARexxPort)
  59715. +    {
  59716. +        FreeARexx(RexxContext);
  59717. +        RexxContext=NULL;
  59718. +    }
  59719. +    }
  59720. +    return(RexxContext);
  59721. +}
  59722. diff -rup --new-file baseline/fsf/emacs/src/simplerexx.h amiga/fsf/emacs/src/simplerexx.h
  59723. --- baseline/fsf/emacs/src/simplerexx.h    Wed Dec 31 17:00:00 1969
  59724. +++ amiga/fsf/emacs/src/simplerexx.h    Sat Sep 28 00:00:00 1996
  59725. @@ -0,0 +1,119 @@
  59726. +/*
  59727. + * Simple ARexx interface by Michael Sinz
  59728. + *
  59729. + * This is a very "Simple" interface...
  59730. + */
  59731. +
  59732. +#ifndef    SIMPLE_REXX_H
  59733. +#define    SIMPLE_REXX_H
  59734. +
  59735. +#include    <exec/types.h>
  59736. +#include    <exec/nodes.h>
  59737. +#include    <exec/lists.h>
  59738. +#include    <exec/ports.h>
  59739. +
  59740. +#include    <rexx/storage.h>
  59741. +#include    <rexx/rxslib.h>
  59742. +
  59743. +/*
  59744. + * This is the handle that SimpleRexx will give you
  59745. + * when you initialize an ARexx port...
  59746. + *
  59747. + * The conditional below is used to skip this if we have
  59748. + * defined it earlier...
  59749. + */
  59750. +#ifndef    AREXXCONTEXT
  59751. +
  59752. +typedef void *AREXXCONTEXT;
  59753. +
  59754. +#endif    /* AREXXCONTEXT */
  59755. +
  59756. +/*
  59757. + * The value of RexxMsg (from GetARexxMsg) if there was an error returned
  59758. + */
  59759. +#define    REXX_RETURN_ERROR    ((struct RexxMsg *)-1L)
  59760. +#define    REXX_RETURN_OK            ((struct RexxMsg *)-3L)
  59761. +
  59762. +/*
  59763. + * This function closes down the ARexx context that was opened
  59764. + * with InitARexx...
  59765. + */
  59766. +void FreeARexx(AREXXCONTEXT);
  59767. +
  59768. +/*
  59769. + * This routine initializes an ARexx port for your process
  59770. + * This should only be done once per process.  You must call it
  59771. + * with a valid application name and you must use the handle it
  59772. + * returns in all other calls...
  59773. + *
  59774. + * NOTE:  The AppName should not have spaces in it...
  59775. + *        Example AppNames:  "MyWord" or "FastCalc" etc...
  59776. + *        The name *MUST* be less that 16 characters...
  59777. + *        If it is not, it will be trimmed...
  59778. + *        The name will also be UPPER-CASED...
  59779. + *
  59780. + * NOTE:  The Default file name extension, if NULL will be
  59781. + *        "rexx"  (the "." is automatic)
  59782. + */
  59783. +AREXXCONTEXT InitARexx(char *,char *);
  59784. +
  59785. +/*
  59786. + * This function returns the port name of your ARexx port.
  59787. + * It will return NULL if there is no ARexx port...
  59788. + *
  59789. + * This string is *READ ONLY*  You *MUST NOT* modify it...
  59790. + */
  59791. +char *ARexxName(AREXXCONTEXT);
  59792. +
  59793. +/*
  59794. + * This function returns the signal mask that the Rexx port is
  59795. + * using.  It returns NULL if there is no signal...
  59796. + *
  59797. + * Use this signal bit in your Wait() loop...
  59798. + */
  59799. +ULONG ARexxSignal(AREXXCONTEXT);
  59800. +
  59801. +/*
  59802. + * This function returns a structure that contains the commands sent from
  59803. + * ARexx...  You will need to parse it and return the structure back
  59804. + * so that the memory can be freed...
  59805. + *
  59806. + * This returns NULL if there was no message...
  59807. + */
  59808. +struct RexxMsg *GetARexxMsg(AREXXCONTEXT);
  59809. +
  59810. +/* Use this to delete a message sent via SendARexxMsg and that has now been
  59811. +   returned to you.
  59812. +*/
  59813. +void DeleteARexxMsg(AREXXCONTEXT RexxContext, struct RexxMsg *rmsg);
  59814. +
  59815. +/*
  59816. + * Use this to return a ARexx message...
  59817. + *
  59818. + * If you wish to return something, it must be in the RString.
  59819. + * If you wish to return an Error, it must be in the Error.
  59820. + */
  59821. +void ReplyARexxMsg(AREXXCONTEXT,struct RexxMsg *,char *,LONG);
  59822. +
  59823. +/*
  59824. + * This function will send a string to ARexx...
  59825. + *
  59826. + * The default host port will be that of your task...
  59827. + *
  59828. + * If you set StringFile to TRUE, it will set that bit for the message...
  59829. + *
  59830. + * Returns the message sent, or NULL in case of error.
  59831. + */
  59832. +struct RexxMsg *SendARexxMsg(AREXXCONTEXT,char *,short,short);
  59833. +
  59834. +/*
  59835. + * This function will set an error string for the ARexx
  59836. + * application in the variable defined as <appname>.LASTERROR
  59837. + *
  59838. + * Note that this can only happen if there is an ARexx message...
  59839. + *
  59840. + * This returns TRUE if it worked, FALSE if it did not...
  59841. + */
  59842. +short SetARexxLastError(AREXXCONTEXT,struct RexxMsg *,char *);
  59843. +
  59844. +#endif    /* SIMPLE_REXX_H */
  59845. diff -rup --new-file baseline/fsf/emacs/src/smakefile amiga/fsf/emacs/src/smakefile
  59846. --- baseline/fsf/emacs/src/smakefile    Wed Dec 31 17:00:00 1969
  59847. +++ amiga/fsf/emacs/src/smakefile    Sat Sep 28 00:00:00 1996
  59848. @@ -0,0 +1,45 @@
  59849. +CPP = /cpp/cpp -DAMIGA
  59850. +MAKE = smake  # BSD doesn't have it as a default.
  59851. +#Note: an alternative is  CPP = /lib/cpp
  59852. +
  59853. +all: xmakefile doall
  59854. +
  59855. +doall:
  59856. +    $(MAKE) $(MAKEOVERRIDES) -f xmakefile ${MFLAGS} all
  59857. +
  59858. +#This is used in making a distribution.
  59859. +#Do not use it on development directories!
  59860. +distclean:
  59861. +    -delete force paths.h config.h emacs-* temacs xemacs xmakefile \
  59862. +   *! @* *.o
  59863. +
  59864. +clean:
  59865. +    -delete force temacs xemacs xmakefile @* *.o
  59866. +
  59867. +xemacs: xmakefile doxemacs
  59868. +
  59869. +doxemacs:
  59870. +    $(MAKE) $(MAKEOVERRIDES) -f xmakefile ${MFLAGS} xemacs
  59871. +
  59872. +temacs: xmakefile dotemacs
  59873. +
  59874. +dotemacs:
  59875. +    $(MAKE) $(MAKEOVERRIDES) -f xmakefile ${MFLAGS} temacs
  59876. +
  59877. +demacs: xmakefile dodemacs
  59878. +
  59879. +dodemacs:
  59880. +    $(MAKE) $(MAKEOVERRIDES) -f xmakefile ${MFLAGS} demacs
  59881. +
  59882. +# If you have a problem with cc -E here, changing
  59883. +# the definition of CPP above may fix it.
  59884. +xmakefile: ymakefile config.h dostrip
  59885. +#    -delete force xmakefile
  59886. +    ${CPP} ymakefile > t:ymkf
  59887. +    dostrip <t:ymkf >xmakefile.test
  59888. +
  59889. +dostrip: dostrip.c
  59890. +    sc link dostrip
  59891. +
  59892. +tags:
  59893. +    etags [a-z]*.h [a-z]*.c /lisp/[a-z]*.el
  59894. diff -rup --new-file baseline/fsf/emacs/src/st.sh amiga/fsf/emacs/src/st.sh
  59895. --- baseline/fsf/emacs/src/st.sh    Wed Dec 31 17:00:00 1969
  59896. +++ amiga/fsf/emacs/src/st.sh    Sat Sep 28 00:00:00 1996
  59897. @@ -0,0 +1,3 @@
  59898. +semacs 
  59899. +Stack 600000
  59900. +/src/temacs -pure 300000 -malloc 400000 -q
  59901. diff -rup --new-file baseline/fsf/emacs/src/syntax.c amiga/fsf/emacs/src/syntax.c
  59902. --- baseline/fsf/emacs/src/syntax.c    Fri Jun 24 14:50:40 1994
  59903. +++ amiga/fsf/emacs/src/syntax.c    Sat Sep 28 00:00:00 1996
  59904. @@ -185,6 +185,9 @@ One argument, a syntax table.")
  59905.   into the code it signifies.
  59906.   This is used by modify-syntax-entry, and other things. */
  59907.  
  59908. +#ifdef AMIGA
  59909. +const far
  59910. +#endif
  59911.  unsigned char syntax_spec_code[0400] =
  59912.    { 0377, 0377, 0377, 0377, 0377, 0377, 0377, 0377,
  59913.      0377, 0377, 0377, 0377, 0377, 0377, 0377, 0377,
  59914. @@ -208,7 +211,9 @@ unsigned char syntax_spec_code[0400] =
  59915.    };
  59916.  
  59917.  /* Indexed by syntax code, give the letter that describes it. */
  59918. -
  59919. +#ifdef AMIGA
  59920. +const far
  59921. +#endif
  59922.  char syntax_code_spec[14] =
  59923.    {
  59924.      ' ', '.', 'w', '_', '(', ')', '\'', '\"', '$', '\\', '/', '<', '>', '@'
  59925. diff -rup --new-file baseline/fsf/emacs/src/syntax.h amiga/fsf/emacs/src/syntax.h
  59926. --- baseline/fsf/emacs/src/syntax.h    Sun Jun 19 11:11:07 1994
  59927. +++ amiga/fsf/emacs/src/syntax.h    Sat Sep 28 00:00:00 1996
  59928. @@ -173,12 +173,18 @@ enum syntaxcode
  59929.  
  59930.  #endif
  59931.  
  59932. +#ifdef AMIGA
  59933. +#define FAR far
  59934. +#else
  59935. +#define FAR
  59936. +#endif
  59937. +
  59938.  /* This array, indexed by a character, contains the syntax code which that
  59939.   character signifies (as a char).  For example,
  59940.   (enum syntaxcode) syntax_spec_code['w'] is Sword. */
  59941.  
  59942. -extern unsigned char syntax_spec_code[0400];
  59943. +extern unsigned char FAR syntax_spec_code[0400];
  59944.  
  59945.  /* Indexed by syntax code, give the letter that describes it. */
  59946.  
  59947. -extern char syntax_code_spec[14];
  59948. +extern char FAR syntax_code_spec[14];
  59949. diff -rup --new-file baseline/fsf/emacs/src/syntax_protos.h amiga/fsf/emacs/src/syntax_protos.h
  59950. --- baseline/fsf/emacs/src/syntax_protos.h    Wed Dec 31 17:00:00 1969
  59951. +++ amiga/fsf/emacs/src/syntax_protos.h    Sat Sep 28 00:00:00 1996
  59952. @@ -0,0 +1,111 @@
  59953. +/* Prototypes for functions defined in
  59954. +syntax.c
  59955. + */
  59956. +
  59957. +extern int Qsyntax_table_p;
  59958. +
  59959. +extern int words_include_escapes;
  59960. +
  59961. +extern int find_start_pos;
  59962. +
  59963. +extern int find_start_value;
  59964. +
  59965. +extern struct buffer * find_start_buffer;
  59966. +
  59967. +extern int find_start_begv;
  59968. +
  59969. +extern int find_start_modiff;
  59970. +
  59971. +int find_defun_start(int pos);
  59972. +
  59973. +extern struct Lisp_Subr Ssyntax_table_p;
  59974. +
  59975. +int Fsyntax_table_p(int );
  59976. +
  59977. +int check_syntax_table(int obj);
  59978. +
  59979. +extern struct Lisp_Subr Ssyntax_table;
  59980. +
  59981. +int Fsyntax_table(void);
  59982. +
  59983. +extern struct Lisp_Subr Sstandard_syntax_table;
  59984. +
  59985. +int Fstandard_syntax_table(void);
  59986. +
  59987. +extern struct Lisp_Subr Scopy_syntax_table;
  59988. +
  59989. +int Fcopy_syntax_table(int );
  59990. +
  59991. +extern struct Lisp_Subr Sset_syntax_table;
  59992. +
  59993. +int Fset_syntax_table(int );
  59994. +
  59995. +extern unsigned char syntax_spec_code[256];
  59996. +
  59997. +extern char syntax_code_spec[14];
  59998. +
  59999. +extern struct Lisp_Subr Schar_syntax;
  60000. +
  60001. +int Fchar_syntax(int );
  60002. +
  60003. +extern struct Lisp_Subr Smodify_syntax_entry;
  60004. +
  60005. +int Fmodify_syntax_entry(int , int , int );
  60006. +
  60007. +void describe_syntax(int value);
  60008. +
  60009. +int describe_syntax_1(int vector);
  60010. +
  60011. +extern struct Lisp_Subr Sdescribe_syntax;
  60012. +
  60013. +int Fdescribe_syntax(void);
  60014. +
  60015. +int scan_words(register int from,
  60016. +               register int count);
  60017. +
  60018. +extern struct Lisp_Subr Sforward_word;
  60019. +
  60020. +int Fforward_word(int );
  60021. +
  60022. +extern struct Lisp_Subr Sforward_comment;
  60023. +
  60024. +int Fforward_comment(int );
  60025. +
  60026. +extern int parse_sexp_ignore_comments;
  60027. +
  60028. +int scan_lists(register int from,
  60029. +               int count,
  60030. +               int depth,
  60031. +               int sexpflag);
  60032. +
  60033. +int char_quoted(register int pos);
  60034. +
  60035. +extern struct Lisp_Subr Sscan_lists;
  60036. +
  60037. +int Fscan_lists(int , int , int );
  60038. +
  60039. +extern struct Lisp_Subr Sscan_sexps;
  60040. +
  60041. +int Fscan_sexps(int , int );
  60042. +
  60043. +extern struct Lisp_Subr Sbackward_prefix_chars;
  60044. +
  60045. +int Fbackward_prefix_chars(void);
  60046. +
  60047. +void scan_sexps_forward(struct lisp_parse_state * stateptr,
  60048. +                        register int from,
  60049. +                        int end,
  60050. +                        int targetdepth,
  60051. +                        int stopbefore,
  60052. +                        int oldstate,
  60053. +
  60054. +                        int commentstop);
  60055. +
  60056. +extern struct Lisp_Subr Sparse_partial_sexp;
  60057. +
  60058. +int Fparse_partial_sexp(int , int , int , int , int , int );
  60059. +
  60060. +int init_syntax_once(void);
  60061. +
  60062. +int syms_of_syntax(void);
  60063. +
  60064. diff -rup --new-file baseline/fsf/emacs/src/sysdep.c amiga/fsf/emacs/src/sysdep.c
  60065. --- baseline/fsf/emacs/src/sysdep.c    Sun Sep  4 17:12:05 1994
  60066. +++ amiga/fsf/emacs/src/sysdep.c    Sat Sep 28 00:00:00 1996
  60067. @@ -17,7 +17,7 @@ You should have received a copy of the G
  60068.  along with GNU Emacs; see the file COPYING.  If not, write to
  60069.  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  60070.  
  60071. -
  60072. +#ifndef AMIGA
  60073.  #include <signal.h>
  60074.  #include <setjmp.h>
  60075.  
  60076. @@ -263,7 +263,7 @@ init_baud_rate ()
  60077.      ospeed = 0;
  60078.    else
  60079.      {
  60080. -#ifdef MSDOS
  60081. +#if defined(MSDOS) || defined(__amigaos__)
  60082.      ospeed = 15;
  60083.  #else
  60084.  #ifdef VMS
  60085. @@ -457,7 +457,7 @@ flush_pending_output (channel)
  60086.  #endif
  60087.  }
  60088.  
  60089. -#ifndef VMS
  60090. +#if !defined(VMS) && !defined(__amigaos)
  60091.  /*  Set up the terminal at the other end of a pseudo-terminal that
  60092.      we will be controlling an inferior through.
  60093.      It should not echo or do line-editing, since that is done
  60094. @@ -4871,3 +4871,5 @@ hft_reset ()
  60095.  }
  60096.  
  60097.  #endif /* AIX */
  60098. +
  60099. +#endif /* not __amigaos__ */
  60100. diff -rup --new-file baseline/fsf/emacs/src/systty.h amiga/fsf/emacs/src/systty.h
  60101. --- baseline/fsf/emacs/src/systty.h    Wed May 11 15:15:06 1994
  60102. +++ amiga/fsf/emacs/src/systty.h    Sat Sep 28 00:00:00 1996
  60103. @@ -73,8 +73,10 @@ the Free Software Foundation, 675 Mass A
  60104.  #else /* neither HAVE_TERMIO nor HAVE_TERMIOS */
  60105.  #ifndef VMS
  60106.  #ifndef MSDOS
  60107. +#ifndef AMIGA
  60108.  #include <sgtty.h>
  60109.  #endif
  60110. +#endif
  60111.  #else /* VMS */
  60112.  #include <descrip.h>
  60113.  static struct iosb
  60114. @@ -356,7 +358,7 @@ struct emacs_tty {
  60115.  #ifdef VMS
  60116.    struct sensemode main;
  60117.  #else
  60118. -#ifdef MSDOS
  60119. +#if defined(MSDOS) || defined(AMIGA)
  60120.    int main;
  60121.  #else
  60122.    struct sgttyb main;
  60123. @@ -411,7 +413,7 @@ struct emacs_tty {
  60124.  
  60125.  #else
  60126.  
  60127. -#ifdef MSDOS
  60128. +#if defined(MSDOS) || defined(AMIGA)
  60129.  #define EMACS_TTY_TABS_OK(p) 0
  60130.  #else /* not MSDOS */
  60131.  #define EMACS_TTY_TABS_OK(p) (((p)->main.sg_flags & XTABS) != XTABS)
  60132. diff -rup --new-file baseline/fsf/emacs/src/syswait.h amiga/fsf/emacs/src/syswait.h
  60133. --- baseline/fsf/emacs/src/syswait.h    Sun Feb 20 12:33:18 1994
  60134. +++ amiga/fsf/emacs/src/syswait.h    Sat Sep 28 00:00:00 1996
  60135. @@ -23,14 +23,16 @@ the Free Software Foundation, 675 Mass A
  60136.  
  60137.  #ifndef VMS
  60138.  #ifndef WAITTYPE
  60139. -#if (!defined (BSD) && !defined (UNIPLUS) && !defined (STRIDE) && !(defined (HPUX) && !defined (NOMULTIPLEJOBS)) && !defined (HAVE_WAIT_HEADER)) || defined (LINUX)
  60140. +#if (!defined (BSD) && !defined (UNIPLUS) && !defined (STRIDE) && !(defined (HPUX) && !defined (NOMULTIPLEJOBS)) && !defined (HAVE_WAIT_HEADER))|| defined (LINUX) 
  60141.  #define WAITTYPE int
  60142. +#ifndef AMIGA
  60143.  #define WIFSTOPPED(w) ((w&0377) == 0177)
  60144.  #define WIFSIGNALED(w) ((w&0377) != 0177 && (w&~0377) == 0)
  60145.  #define WIFEXITED(w) ((w&0377) == 0)
  60146. -#define WRETCODE(w) (w >> 8)
  60147.  #define WSTOPSIG(w) (w >> 8)
  60148.  #define WTERMSIG(w) (w & 0377)
  60149. +#endif
  60150. +#define WRETCODE(w) (w >> 8)
  60151.  #ifndef WCOREDUMP
  60152.  #define WCOREDUMP(w) ((w&0200) != 0)
  60153.  #endif
  60154. diff -rup --new-file baseline/fsf/emacs/src/term.c amiga/fsf/emacs/src/term.c
  60155. --- baseline/fsf/emacs/src/term.c    Wed Aug 24 12:50:14 1994
  60156. +++ amiga/fsf/emacs/src/term.c    Sat Sep 28 00:00:00 1996
  60157. @@ -24,7 +24,6 @@ the Free Software Foundation, 675 Mass A
  60158.  #include "termchar.h"
  60159.  #include "termopts.h"
  60160.  #include "cm.h"
  60161. -#undef NULL
  60162.  #include "lisp.h"
  60163.  #include "frame.h"
  60164.  #include "disptab.h"
  60165. @@ -258,8 +257,15 @@ static int se_is_so;    /* 1 if same string
  60166.  
  60167.     Used IFF TN_standout_width >= 0. */
  60168.  
  60169. +#ifdef AMIGA /* CHFIXME: check */
  60170. +char *chars_wasted;
  60171. +char *copybuf;
  60172. +#define FAR far /* force object into pure section */
  60173. +#else
  60174.  static char *chars_wasted;
  60175.  static char *copybuf;
  60176. +#define FAR
  60177. +#endif
  60178.  
  60179.  /* nonzero means supposed to write text in standout mode.  */
  60180.  int standout_requested;
  60181. @@ -501,10 +507,16 @@ reassert_line_highlight (highlight, vpos
  60182.    if (TN_standout_width < 0)
  60183.      /* Handle terminals where standout takes affect at output time */
  60184.      standout_requested = highlight;
  60185. -  else if (chars_wasted[vpos] == 0)
  60186. +  else
  60187. +    {
  60188. +#ifdef AMIGA
  60189. +      assert(chars_wasted!=NULL);
  60190. +#endif
  60191. +      if (chars_wasted[vpos] == 0)
  60192.      /* For terminals with standout markers, write one on this line
  60193.         if there isn't one already.  */
  60194. -    write_standout_marker (highlight, vpos);
  60195. +      write_standout_marker (highlight, vpos);
  60196. +    }
  60197.  }
  60198.  
  60199.  /* Call this when about to modify line at position VPOS
  60200. @@ -558,6 +570,9 @@ cursor_to (row, col)
  60201.        return;
  60202.      }
  60203.  
  60204. +  if (chars_wasted == 0)
  60205. +    chars_wasted = (char *) xmalloc (FRAME_HEIGHT (frame));
  60206. +
  60207.    col += chars_wasted[row] & 077;
  60208.    if (curY == row && curX == col)
  60209.      return;
  60210. @@ -1092,7 +1107,12 @@ calculate_costs (frame)
  60211.        return;
  60212.      }
  60213.  #endif
  60214. -
  60215. +#ifdef AMIGA
  60216. +  /* CHFIXME: does not work for termcap !, should use predicate as X above */
  60217. +  do_line_insertion_deletion_costs (frame, 0, ".5*", 0, ".5*", 0, 0,
  60218. +                    1 /* x_screen_planes CHFIXME: get planes ?*/);
  60219. +  return;
  60220. +#else
  60221.    /* These variables are only used for terminal stuff.  They are allocated
  60222.       once for the terminal frame of X-windows emacs, but not used afterwards.
  60223.  
  60224. @@ -1147,6 +1167,7 @@ calculate_costs (frame)
  60225.      RPov = FRAME_WIDTH (frame) * 2;
  60226.  
  60227.    cmcostinit ();        /* set up cursor motion costs */
  60228. +#endif
  60229.  }
  60230.  
  60231.  struct fkey_table {
  60232. @@ -1160,7 +1181,7 @@ struct fkey_table {
  60233.       other keys (as on the IBM PC keyboard) they get overridden.
  60234.    */
  60235.  
  60236. -static struct fkey_table keys[] = {
  60237. +static struct fkey_table FAR keys[] = {
  60238.    "kh", "home",        /* termcap */
  60239.    "kl", "left",        /* termcap */
  60240.    "ku", "up",        /* termcap */
  60241. diff -rup --new-file baseline/fsf/emacs/src/term_protos.h amiga/fsf/emacs/src/term_protos.h
  60242. --- baseline/fsf/emacs/src/term_protos.h    Wed Dec 31 17:00:00 1969
  60243. +++ amiga/fsf/emacs/src/term_protos.h    Sat Sep 28 00:00:00 1996
  60244. @@ -0,0 +1,266 @@
  60245. +/* Prototypes for functions defined in
  60246. +term.c
  60247. + */
  60248. +
  60249. +extern int must_write_spaces;
  60250. +
  60251. +extern int min_padding_speed;
  60252. +
  60253. +extern int line_ins_del_ok;
  60254. +
  60255. +extern int char_ins_del_ok;
  60256. +
  60257. +extern int scroll_region_ok;
  60258. +
  60259. +extern int memory_below_frame;
  60260. +
  60261. +extern int fast_clear_end_of_line;
  60262. +
  60263. +extern int dont_calculate_costs;
  60264. +
  60265. +extern int no_redraw_on_reenter;
  60266. +
  60267. +extern int (* cursor_to_hook)(int , int);
  60268. +
  60269. +extern int (* raw_cursor_to_hook)(int, int);
  60270. +
  60271. +extern int (* clear_to_end_hook)(void);
  60272. +
  60273. +extern int (* clear_frame_hook)(int);
  60274. +
  60275. +extern int (* clear_end_of_line_hook)(int);
  60276. +
  60277. +extern int (* ins_del_lines_hook)(int, int);
  60278. +
  60279. +extern int (* change_line_highlight_hook)(int, int, int);
  60280. +
  60281. +extern int (* reassert_line_highlight_hook)(int, int);
  60282. +
  60283. +extern int (* insert_glyphs_hook)(unsigned int *, int);
  60284. +
  60285. +extern int (* write_glyphs_hook)(unsigned int*, int);
  60286. +
  60287. +extern int (* delete_glyphs_hook)(unsigned int*, int);
  60288. +
  60289. +extern int (* ring_bell_hook)(void);
  60290. +
  60291. +extern int (* reset_terminal_modes_hook)(void);
  60292. +
  60293. +extern int (* set_terminal_modes_hook)(void);
  60294. +
  60295. +extern int (* update_begin_hook)(void*);
  60296. +
  60297. +extern int (* update_end_hook)(void*);
  60298. +
  60299. +extern int (* set_terminal_window_hook)(int);
  60300. +
  60301. +extern int (* read_socket_hook)(int, void *, int, int, int);
  60302. +
  60303. +extern int (* frame_up_to_date_hook)(int);
  60304. +
  60305. +#if 0
  60306. +extern void (* mouse_position_hook)(void *, Lisp_Object *, void *, Lisp_Object *, Lisp_Object *, unsigned long *);
  60307. +#endif
  60308. +
  60309. +extern void (* frame_rehighlight_hook)(int);
  60310. +
  60311. +extern void (* frame_raise_lower_hook)(void* , int);
  60312. +
  60313. +extern void (* set_vertical_scroll_bar_hook)(struct window *, int, int, int);
  60314. +
  60315. +extern void (* condemn_scroll_bars_hook)(int);
  60316. +
  60317. +extern void (* redeem_scroll_bar_hook)(struct window *);
  60318. +
  60319. +extern void (* judge_scroll_bars_hook)(int);
  60320. +
  60321. +extern char * TS_ins_line;
  60322. +
  60323. +extern char * TS_ins_multi_lines;
  60324. +
  60325. +extern char * TS_bell;
  60326. +
  60327. +extern char * TS_clr_to_bottom;
  60328. +
  60329. +extern char * TS_clr_line;
  60330. +
  60331. +extern char * TS_clr_frame;
  60332. +
  60333. +extern char * TS_set_scroll_region;
  60334. +
  60335. +extern char * TS_set_scroll_region_1;
  60336. +
  60337. +extern char * TS_del_char;
  60338. +
  60339. +extern char * TS_del_multi_chars;
  60340. +
  60341. +extern char * TS_del_line;
  60342. +
  60343. +extern char * TS_del_multi_lines;
  60344. +
  60345. +extern char * TS_delete_mode;
  60346. +
  60347. +extern char * TS_end_delete_mode;
  60348. +
  60349. +extern char * TS_end_insert_mode;
  60350. +
  60351. +extern char * TS_ins_char;
  60352. +
  60353. +extern char * TS_ins_multi_chars;
  60354. +
  60355. +extern char * TS_insert_mode;
  60356. +
  60357. +extern char * TS_pad_inserted_char;
  60358. +
  60359. +extern char * TS_end_keypad_mode;
  60360. +
  60361. +extern char * TS_keypad_mode;
  60362. +
  60363. +extern char * TS_pad_char;
  60364. +
  60365. +extern char * TS_repeat;
  60366. +
  60367. +extern char * TS_end_standout_mode;
  60368. +
  60369. +extern char * TS_fwd_scroll;
  60370. +
  60371. +extern char * TS_standout_mode;
  60372. +
  60373. +extern char * TS_rev_scroll;
  60374. +
  60375. +extern char * TS_end_termcap_modes;
  60376. +
  60377. +extern char * TS_termcap_modes;
  60378. +
  60379. +extern char * TS_visible_bell;
  60380. +
  60381. +extern char * TS_end_visual_mode;
  60382. +
  60383. +extern char * TS_visual_mode;
  60384. +
  60385. +extern char * TS_set_window;
  60386. +
  60387. +extern int TF_hazeltine;
  60388. +
  60389. +extern int TF_insmode_motion;
  60390. +
  60391. +extern int TF_standout_motion;
  60392. +
  60393. +extern int TF_underscore;
  60394. +
  60395. +extern int TF_teleray;
  60396. +
  60397. +extern int TF_xs;
  60398. +
  60399. +extern int TN_standout_width;
  60400. +
  60401. +extern int RPov;
  60402. +
  60403. +extern int delete_in_insert_mode;
  60404. +
  60405. +extern int se_is_so;
  60406. +
  60407. +extern char * chars_wasted;
  60408. +
  60409. +extern char * copybuf;
  60410. +
  60411. +extern int standout_requested;
  60412. +
  60413. +extern int insert_mode;
  60414. +
  60415. +extern int standout_mode;
  60416. +
  60417. +extern int specified_window;
  60418. +
  60419. +extern int updating_frame;
  60420. +
  60421. +extern int system_uses_terminfo;
  60422. +
  60423. +int ring_bell(void);
  60424. +
  60425. +int set_terminal_modes(void);
  60426. +
  60427. +int reset_terminal_modes(void);
  60428. +
  60429. +int update_begin(int f);
  60430. +
  60431. +int update_end(int f);
  60432. +
  60433. +int set_terminal_window(int size);
  60434. +
  60435. +int set_scroll_region(int start,
  60436. +                      int stop);
  60437. +
  60438. +int turn_on_insert(void);
  60439. +
  60440. +int turn_off_insert(void);
  60441. +
  60442. +int turn_off_highlight(void);
  60443. +
  60444. +int turn_on_highlight(void);
  60445. +
  60446. +int background_highlight(void);
  60447. +
  60448. +int highlight_if_desired(void);
  60449. +
  60450. +int write_standout_marker(int flag,
  60451. +                          int vpos);
  60452. +
  60453. +int reassert_line_highlight(int highlight,
  60454. +                            int vpos);
  60455. +
  60456. +int change_line_highlight(int new_highlight,
  60457. +                          int vpos,
  60458. +                          int first_unused_hpos);
  60459. +
  60460. +int cursor_to(int row,
  60461. +              int col);
  60462. +
  60463. +int raw_cursor_to(int row,
  60464. +                  int col);
  60465. +
  60466. +int clear_to_end(void);
  60467. +
  60468. +int clear_frame(void);
  60469. +
  60470. +int clear_end_of_line(int first_unused_hpos);
  60471. +
  60472. +int clear_end_of_line_raw(int first_unused_hpos);
  60473. +
  60474. +int write_glyphs(register unsigned int * string,
  60475. +                 register int len);
  60476. +
  60477. +int insert_glyphs(register unsigned int * start,
  60478. +                  register int len);
  60479. +
  60480. +int delete_glyphs(register int n);
  60481. +
  60482. +int ins_del_lines(int vpos,
  60483. +                  int n);
  60484. +
  60485. +int string_cost(char * str);
  60486. +
  60487. +int string_cost_one_line(char * str);
  60488. +
  60489. +int per_line_cost(register char * str);
  60490. +
  60491. +extern int * char_ins_del_vector;
  60492. +
  60493. +void calculate_ins_del_char_costs(int frame);
  60494. +
  60495. +int calculate_costs(int frame);
  60496. +
  60497. +extern struct fkey_table __far keys[40];
  60498. +
  60499. +extern char ** term_get_fkeys_arg;
  60500. +
  60501. +void term_get_fkeys(char ** address);
  60502. +
  60503. +int term_get_fkeys_1(void);
  60504. +
  60505. +int term_init(char * terminal_type);
  60506. +
  60507. +int fatal(char * str, ...);
  60508. +
  60509. +int syms_of_term(void);
  60510. +
  60511. diff -rup --new-file baseline/fsf/emacs/src/termcap.c amiga/fsf/emacs/src/termcap.c
  60512. --- baseline/fsf/emacs/src/termcap.c    Wed Aug 31 08:18:10 1994
  60513. +++ amiga/fsf/emacs/src/termcap.c    Sat Sep 28 00:00:00 1996
  60514. @@ -19,6 +19,7 @@ the Free Software Foundation, 675 Mass A
  60515.  #ifdef HAVE_CONFIG_H
  60516.  
  60517.  #include <config.h>
  60518. +#include <paths.h>
  60519.  
  60520.  /* Get the O_* definitions for open et al.  */
  60521.  #include <sys/file.h>
  60522. @@ -381,9 +382,17 @@ valid_filename_p (fn)
  60523.    return *fn == '/' || fn[1] == ':';
  60524.  }
  60525.  #else
  60526. +#ifdef AMIGA
  60527. +static int
  60528. +valid_filename_p (fn)
  60529. +     char *fn;
  60530. +{
  60531. +  return (fn && (index(fn+1, ':')));
  60532. +}
  60533. +#else /* not AMIGA */
  60534.  #define valid_filename_p(fn) (*(fn) == '/')
  60535.  #endif
  60536. -
  60537. +#endif /* not AMIGA */
  60538.  #endif /* !VMS */
  60539.  
  60540.  /* Find the termcap entry data for terminal type NAME
  60541. @@ -439,8 +448,12 @@ tgetent (bp, name)
  60542.      dostounix_filename(termcap_name);
  60543.  #endif
  60544.  
  60545. +#ifdef AMIGA
  60546. +  filep = termcap_name != NULL; /* assume ok */
  60547. +#else
  60548.    filep = termcap_name && valid_filename_p (termcap_name);
  60549. -
  60550. +#endif
  60551. +  
  60552.    /* If termcap_name is non-null and starts with / (in the un*x case, that is),
  60553.       it is a file name to use instead of /etc/termcap.
  60554.       If it is non-null and does not start with /,
  60555. diff -rup --new-file baseline/fsf/emacs/src/undo_protos.h amiga/fsf/emacs/src/undo_protos.h
  60556. --- baseline/fsf/emacs/src/undo_protos.h    Wed Dec 31 17:00:00 1969
  60557. +++ amiga/fsf/emacs/src/undo_protos.h    Sat Sep 28 00:00:00 1996
  60558. @@ -0,0 +1,41 @@
  60559. +/* Prototypes for functions defined in
  60560. +undo.c
  60561. + */
  60562. +
  60563. +extern int last_undo_buffer;
  60564. +
  60565. +extern int Qinhibit_read_only;
  60566. +
  60567. +extern int pending_boundary;
  60568. +
  60569. +int record_insert(int beg,
  60570. +                  int length);
  60571. +
  60572. +int record_delete(int beg,
  60573. +                  int length);
  60574. +
  60575. +int record_change(int beg,
  60576. +                  int length);
  60577. +
  60578. +int record_first_change(void);
  60579. +
  60580. +int record_property_change(int beg,
  60581. +                           int length,
  60582. +                           int prop,
  60583. +                           int value,
  60584. +                           int buffer);
  60585. +
  60586. +extern struct Lisp_Subr Sundo_boundary;
  60587. +
  60588. +int Fundo_boundary(void);
  60589. +
  60590. +int truncate_undo_list(int list,
  60591. +                       int minsize,
  60592. +                       int maxsize);
  60593. +
  60594. +extern struct Lisp_Subr Sprimitive_undo;
  60595. +
  60596. +int Fprimitive_undo(int , int );
  60597. +
  60598. +int syms_of_undo(void);
  60599. +
  60600. diff -rup --new-file baseline/fsf/emacs/src/window.c amiga/fsf/emacs/src/window.c
  60601. --- baseline/fsf/emacs/src/window.c    Sat Aug 13 15:54:53 1994
  60602. +++ amiga/fsf/emacs/src/window.c    Sat Sep 28 00:00:00 1996
  60603. @@ -29,6 +29,11 @@ the Free Software Foundation, 675 Mass A
  60604.  #include "disptab.h"
  60605.  #include "keyboard.h"
  60606.  
  60607. +
  60608. +#ifdef AMIGA
  60609. +#include <assert.h> /* CHFIXME */
  60610. +#endif
  60611. +
  60612.  Lisp_Object Qwindowp, Qwindow_live_p;
  60613.  
  60614.  Lisp_Object Fnext_window (), Fdelete_window (), Fselect_window ();
  60615. @@ -617,6 +622,7 @@ window_display_table (w)
  60616.       struct window *w;
  60617.  {
  60618.    Lisp_Object tem;
  60619. +  assert(w!=NULL);
  60620.    tem = w->display_table;
  60621.    if (XTYPE (tem) == Lisp_Vector && XVECTOR (tem)->size == DISP_TABLE_SIZE)
  60622.      return XVECTOR (tem);
  60623. @@ -2788,7 +2794,7 @@ by `current-window-configuration' (which
  60624.        if (XFASTINT (data->frame_height) != previous_frame_height
  60625.        || XFASTINT (data->frame_width) != previous_frame_width)
  60626.      change_frame_size (f, data->frame_height, data->frame_width, 0, 0);
  60627. -#ifdef HAVE_X_WINDOWS
  60628. +#if defined(HAVE_X_WINDOWS) || defined(USE_EXTERNAL_MENU_BAR)
  60629.        if (XFASTINT (data->frame_menu_bar_lines)
  60630.        != previous_frame_menu_bar_lines)
  60631.      x_set_menu_bar_lines (f, data->frame_menu_bar_lines, 0);
  60632. @@ -2930,7 +2936,7 @@ by `current-window-configuration' (which
  60633.        || previous_frame_width != FRAME_WIDTH (f))
  60634.      change_frame_size (f, previous_frame_height, previous_frame_width,
  60635.                 0, 0);
  60636. -#ifdef HAVE_X_WINDOWS
  60637. +#ifdef defined(HAVE_X_WINDOWS) || defined(USE_EXTERNAL_MENU_BAR) /* CHFIXME */
  60638.        if (previous_frame_menu_bar_lines != FRAME_MENU_BAR_LINES (f))
  60639.      x_set_menu_bar_lines (f, previous_frame_menu_bar_lines, 0);
  60640.  #endif
  60641. diff -rup --new-file baseline/fsf/emacs/src/window_protos.h amiga/fsf/emacs/src/window_protos.h
  60642. --- baseline/fsf/emacs/src/window_protos.h    Wed Dec 31 17:00:00 1969
  60643. +++ amiga/fsf/emacs/src/window_protos.h    Sat Sep 28 00:00:00 1996
  60644. @@ -0,0 +1,319 @@
  60645. +/* Prototypes for functions defined in
  60646. +window.c
  60647. + */
  60648. +
  60649. +extern int Qwindowp;
  60650. +
  60651. +extern int Qwindow_live_p;
  60652. +
  60653. +extern int selected_window;
  60654. +
  60655. +extern int minibuf_window;
  60656. +
  60657. +extern int Vminibuf_scroll_window;
  60658. +
  60659. +extern int Vother_window_scroll_buffer;
  60660. +
  60661. +extern int Vtemp_buffer_show_function;
  60662. +
  60663. +extern int window_min_height;
  60664. +
  60665. +extern int window_min_width;
  60666. +
  60667. +extern int pop_up_windows;
  60668. +
  60669. +extern int pop_up_frames;
  60670. +
  60671. +extern int Vpop_up_frame_function;
  60672. +
  60673. +extern int Vdisplay_buffer_function;
  60674. +
  60675. +extern int Vspecial_display_buffer_names;
  60676. +
  60677. +extern int Vspecial_display_regexps;
  60678. +
  60679. +extern int Vspecial_display_function;
  60680. +
  60681. +extern int split_height_threshold;
  60682. +
  60683. +extern int next_screen_context_lines;
  60684. +
  60685. +extern int sequence_number;
  60686. +
  60687. +extern struct Lisp_Subr Swindowp;
  60688. +
  60689. +int Fwindowp(int );
  60690. +
  60691. +extern struct Lisp_Subr Swindow_live_p;
  60692. +
  60693. +int Fwindow_live_p(int );
  60694. +
  60695. +int make_window(void);
  60696. +
  60697. +extern struct Lisp_Subr Sselected_window;
  60698. +
  60699. +int Fselected_window(void);
  60700. +
  60701. +extern struct Lisp_Subr Sminibuffer_window;
  60702. +
  60703. +int Fminibuffer_window(int );
  60704. +
  60705. +extern struct Lisp_Subr Swindow_minibuffer_p;
  60706. +
  60707. +int Fwindow_minibuffer_p(int );
  60708. +
  60709. +extern struct Lisp_Subr Spos_visible_in_window_p;
  60710. +
  60711. +int Fpos_visible_in_window_p(int , int );
  60712. +
  60713. +struct window * decode_window(register int window);
  60714. +
  60715. +extern struct Lisp_Subr Swindow_buffer;
  60716. +
  60717. +int Fwindow_buffer(int );
  60718. +
  60719. +extern struct Lisp_Subr Swindow_height;
  60720. +
  60721. +int Fwindow_height(int );
  60722. +
  60723. +extern struct Lisp_Subr Swindow_width;
  60724. +
  60725. +int Fwindow_width(int );
  60726. +
  60727. +extern struct Lisp_Subr Swindow_hscroll;
  60728. +
  60729. +int Fwindow_hscroll(int );
  60730. +
  60731. +extern struct Lisp_Subr Sset_window_hscroll;
  60732. +
  60733. +int Fset_window_hscroll(int , int );
  60734. +
  60735. +extern struct Lisp_Subr Swindow_edges;
  60736. +
  60737. +int Fwindow_edges(int );
  60738. +
  60739. +int coordinates_in_window(register struct window * w,
  60740. +                          register int * x,
  60741. +                          register int * y);
  60742. +
  60743. +extern struct Lisp_Subr Scoordinates_in_window_p;
  60744. +
  60745. +int Fcoordinates_in_window_p(int , int );
  60746. +
  60747. +int window_from_coordinates(int frame,
  60748. +                            int x,
  60749. +                            int y,
  60750. +                            int * part);
  60751. +
  60752. +extern struct Lisp_Subr Swindow_at;
  60753. +
  60754. +int Fwindow_at(int , int , int );
  60755. +
  60756. +extern struct Lisp_Subr Swindow_point;
  60757. +
  60758. +int Fwindow_point(int );
  60759. +
  60760. +extern struct Lisp_Subr Swindow_start;
  60761. +
  60762. +int Fwindow_start(int );
  60763. +
  60764. +extern struct Lisp_Subr Swindow_end;
  60765. +
  60766. +int Fwindow_end(int );
  60767. +
  60768. +extern struct Lisp_Subr Sset_window_point;
  60769. +
  60770. +int Fset_window_point(int , int );
  60771. +
  60772. +extern struct Lisp_Subr Sset_window_start;
  60773. +
  60774. +int Fset_window_start(int , int , int );
  60775. +
  60776. +extern struct Lisp_Subr Swindow_dedicated_p;
  60777. +
  60778. +int Fwindow_dedicated_p(int );
  60779. +
  60780. +extern struct Lisp_Subr Sset_window_dedicated_p;
  60781. +
  60782. +int Fset_window_dedicated_p(int , int );
  60783. +
  60784. +extern struct Lisp_Subr Swindow_display_table;
  60785. +
  60786. +int Fwindow_display_table(int );
  60787. +
  60788. +struct Lisp_Vector * window_display_table(struct window * w);
  60789. +
  60790. +extern struct Lisp_Subr Sset_window_display_table;
  60791. +
  60792. +int Fset_window_display_table(int , int );
  60793. +
  60794. +int unshow_buffer(register struct window * w);
  60795. +
  60796. +int replace_window(int old,
  60797. +                   int replacement);
  60798. +
  60799. +extern struct Lisp_Subr Sdelete_window;
  60800. +
  60801. +int Fdelete_window(int );
  60802. +
  60803. +extern struct Lisp_Subr Snext_window;
  60804. +
  60805. +int Fnext_window(int , int , int );
  60806. +
  60807. +extern struct Lisp_Subr Sprevious_window;
  60808. +
  60809. +int Fprevious_window(int , int , int );
  60810. +
  60811. +extern struct Lisp_Subr Sother_window;
  60812. +
  60813. +int Fother_window(int , int );
  60814. +
  60815. +int window_loop(enum window_loop type,
  60816. +                register int obj,
  60817. +                int mini,
  60818. +                register int frames);
  60819. +
  60820. +extern struct Lisp_Subr Sget_lru_window;
  60821. +
  60822. +int Fget_lru_window(int );
  60823. +
  60824. +extern struct Lisp_Subr Sget_largest_window;
  60825. +
  60826. +int Fget_largest_window(int );
  60827. +
  60828. +extern struct Lisp_Subr Sget_buffer_window;
  60829. +
  60830. +int Fget_buffer_window(int , int );
  60831. +
  60832. +extern struct Lisp_Subr Sdelete_other_windows;
  60833. +
  60834. +int Fdelete_other_windows(int );
  60835. +
  60836. +extern struct Lisp_Subr Sdelete_windows_on;
  60837. +
  60838. +int Fdelete_windows_on(int , int );
  60839. +
  60840. +extern struct Lisp_Subr Sreplace_buffer_in_windows;
  60841. +
  60842. +int Freplace_buffer_in_windows(int );
  60843. +
  60844. +void check_min_window_sizes(void);
  60845. +
  60846. +void check_frame_size(int frame,
  60847. +                      int * rows,
  60848. +                      int * cols);
  60849. +
  60850. +int set_window_height(int window,
  60851. +                      int height,
  60852. +                      int nodelete);
  60853. +
  60854. +int set_window_width(int window,
  60855. +                     int width,
  60856. +                     int nodelete);
  60857. +
  60858. +extern int window_select_count;
  60859. +
  60860. +extern struct Lisp_Subr Sset_window_buffer;
  60861. +
  60862. +int Fset_window_buffer(int , int );
  60863. +
  60864. +extern struct Lisp_Subr Sselect_window;
  60865. +
  60866. +int Fselect_window(int );
  60867. +
  60868. +extern struct Lisp_Subr Sdisplay_buffer;
  60869. +
  60870. +int Fdisplay_buffer(int , int );
  60871. +
  60872. +void temp_output_buffer_show(register int buf);
  60873. +
  60874. +int make_dummy_parent(int window);
  60875. +
  60876. +extern struct Lisp_Subr Ssplit_window;
  60877. +
  60878. +int Fsplit_window(int , int , int );
  60879. +
  60880. +extern struct Lisp_Subr Senlarge_window;
  60881. +
  60882. +int Fenlarge_window(int , int );
  60883. +
  60884. +extern struct Lisp_Subr Sshrink_window;
  60885. +
  60886. +int Fshrink_window(int , int );
  60887. +
  60888. +int window_height(int window);
  60889. +
  60890. +int window_width(int window);
  60891. +
  60892. +int change_window_height(register int delta,
  60893. +                         int widthflag);
  60894. +
  60895. +int window_internal_height(struct window * w);
  60896. +
  60897. +int window_internal_width(struct window * w);
  60898. +
  60899. +void window_scroll(int window,
  60900. +                   int n,
  60901. +                   int noerror);
  60902. +
  60903. +void scroll_command(register int n,
  60904. +                    int direction);
  60905. +
  60906. +extern struct Lisp_Subr Sscroll_up;
  60907. +
  60908. +int Fscroll_up(int );
  60909. +
  60910. +extern struct Lisp_Subr Sscroll_down;
  60911. +
  60912. +int Fscroll_down(int );
  60913. +
  60914. +extern struct Lisp_Subr Sscroll_other_window;
  60915. +
  60916. +int Fscroll_other_window(int );
  60917. +
  60918. +extern struct Lisp_Subr Sscroll_left;
  60919. +
  60920. +int Fscroll_left(int );
  60921. +
  60922. +extern struct Lisp_Subr Sscroll_right;
  60923. +
  60924. +int Fscroll_right(int );
  60925. +
  60926. +extern struct Lisp_Subr Srecenter;
  60927. +
  60928. +int Frecenter(int );
  60929. +
  60930. +extern struct Lisp_Subr Smove_to_window_line;
  60931. +
  60932. +int Fmove_to_window_line(int );
  60933. +
  60934. +extern struct Lisp_Subr Swindow_configuration_p;
  60935. +
  60936. +int Fwindow_configuration_p(int );
  60937. +
  60938. +extern struct Lisp_Subr Sset_window_configuration;
  60939. +
  60940. +int Fset_window_configuration(int );
  60941. +
  60942. +void delete_all_subwindows(register struct window * w);
  60943. +
  60944. +int count_windows(register struct window * window);
  60945. +
  60946. +int save_window_save(int window,
  60947. +                     struct Lisp_Vector * vector,
  60948. +                     int i);
  60949. +
  60950. +extern struct Lisp_Subr Scurrent_window_configuration;
  60951. +
  60952. +int Fcurrent_window_configuration(int );
  60953. +
  60954. +extern struct Lisp_Subr Ssave_window_excursion;
  60955. +
  60956. +int Fsave_window_excursion(int );
  60957. +
  60958. +int init_window_once(void);
  60959. +
  60960. +int syms_of_window(void);
  60961. +
  60962. +int keys_of_window(void);
  60963. +
  60964. diff -rup --new-file baseline/fsf/emacs/src/xdisp.c amiga/fsf/emacs/src/xdisp.c
  60965. --- baseline/fsf/emacs/src/xdisp.c    Fri Sep  9 21:01:12 1994
  60966. +++ amiga/fsf/emacs/src/xdisp.c    Sat Sep 28 00:00:00 1996
  60967. @@ -35,7 +35,28 @@ the Free Software Foundation, 675 Mass A
  60968.  #include "termhooks.h"
  60969.  #include "intervals.h"
  60970.  
  60971. -#ifdef USE_X_TOOLKIT
  60972. +#ifdef USE_PROTOS
  60973. +#define _XDISP_C
  60974. +#include "protos.h"
  60975. +#endif
  60976. +
  60977. +#ifdef AMIGA
  60978. +#define MAX_WIN_LINE 64
  60979. +static int win_line_bufpos[MAX_WIN_LINE];
  60980. +static int win_line_modified;
  60981. +static struct buffer *win_line_buffer;
  60982. +#define CLEAR_WIN_LINE() (win_line_buffer = 0)
  60983. +#include <assert.h> /* CHFIXME */
  60984. +#define FAR far
  60985. +#else
  60986. +#define FAR
  60987. +#endif /* AMIGA */
  60988. +
  60989. +#ifdef USE_X_TOOLKIT /* CHFIXME: move to config somehow */
  60990. +#define USE_EXTERNAL_MENU_BAR  
  60991. +#endif
  60992. +
  60993. +#ifdef USE_EXTERNAL_MENU_BAR 
  60994.  extern void set_frame_menubar ();
  60995.  #endif
  60996.  
  60997. @@ -322,7 +343,7 @@ message (m, a1, a2, a3)
  60998.                  FRAME_WIDTH (echo_frame), m, 0, 3, a);
  60999.  #else
  61000.            len = doprnt (FRAME_MESSAGE_BUF (echo_frame),
  61001. -                FRAME_WIDTH (echo_frame), m, 0, 3, &a1);
  61002. +                FRAME_WIDTH (echo_frame), m, 0, 3, (char **) &a1);
  61003.  #endif /* NO_ARG_ARRAY */
  61004.  
  61005.            message2 (FRAME_MESSAGE_BUF (echo_frame), len);
  61006. @@ -388,8 +409,13 @@ echo_area_display ()
  61007.      windows_or_buffers_changed++;
  61008.  
  61009.    if (EQ (minibuf_window, selected_window))
  61010. -    this_line_bufpos = 0;
  61011. -
  61012. +    {
  61013. +      this_line_bufpos = 0;
  61014. +#ifdef AMIGA
  61015. +      CLEAR_WIN_LINE();
  61016. +    }
  61017. +#endif /* AMIGA */
  61018. +  
  61019.    previous_echo_glyphs = echo_area_glyphs;
  61020.  }
  61021.  
  61022. @@ -568,7 +594,10 @@ redisplay ()
  61023.        echo_area_display ();
  61024.        must_finish = 1;
  61025.      }
  61026. -
  61027. +#ifdef AMIGA
  61028. +    if (windows_or_buffers_changed) CLEAR_WIN_LINE();
  61029. +#endif
  61030. +  
  61031.    /* If showing region, and mark has changed, must redisplay whole window.  */
  61032.    if (((!NILP (Vtransient_mark_mode)
  61033.      && !NILP (XBUFFER (w->buffer)->mark_active))
  61034. @@ -788,6 +817,9 @@ update: 
  61035.       Also, don't forget to check every line to update the arrow.  */
  61036.    if (pause)
  61037.      {
  61038. +#ifdef AMIGA
  61039. +      CLEAR_WIN_LINE();
  61040. +#endif
  61041.        this_line_bufpos = 0;
  61042.        if (!NILP (last_arrow_position))
  61043.      {
  61044. @@ -944,7 +976,7 @@ update_menu_bar (f)
  61045.      w->update_mode_line = Qt;
  61046.  
  61047.    if (
  61048. -#ifdef USE_X_TOOLKIT
  61049. +#ifdef USE_EXTERNAL_MENU_BAR
  61050.        FRAME_EXTERNAL_MENU_BAR (f) 
  61051.  #else
  61052.        FRAME_MENU_BAR_LINES (f) > 0
  61053. @@ -969,9 +1001,9 @@ update_menu_bar (f)
  61054.        current_buffer = XBUFFER (w->buffer);
  61055.        FRAME_MENU_BAR_ITEMS (f) = menu_bar_items (FRAME_MENU_BAR_ITEMS (f));
  61056.        current_buffer = prev;
  61057. -#ifdef USE_X_TOOLKIT
  61058. +#ifdef USE_EXTERNAL_MENU_BAR
  61059.        set_frame_menubar (f, 0);
  61060. -#endif /* USE_X_TOOLKIT */
  61061. +#endif /* USE_EXTERNAL_MENU_BAR */
  61062.      }
  61063.      }
  61064.  }
  61065. @@ -1151,10 +1183,35 @@ redisplay_window (window, just_this_one)
  61066.        && XFASTINT (w->window_end_vpos) < XFASTINT (w->height)
  61067.        && !EQ (window, minibuf_window))
  61068.      {
  61069. +#ifdef XXXXAMIGA /* CHFIXME: check, mind. highlight case */
  61070. +       int *wlb;
  61071. +      int line, best_startp, best_vpos;
  61072. +
  61073. +      best_startp = startp; best_vpos = 0;
  61074. +      if (win_line_buffer && BUF_MODIFF(win_line_buffer) > win_line_modified)
  61075. +      CLEAR_WIN_LINE();
  61076. +      if (current_buffer == win_line_buffer && current_buffer == XBUFFER (w->buffer))
  61077. +        {
  61078. +      /* Try & find line to start from */
  61079. +      wlb = win_line_bufpos; line = 0;
  61080. +      while (line < MAX_WIN_LINE)
  61081. +        {
  61082. +          if (*wlb && point > *wlb && *wlb > best_startp)
  61083. +            {
  61084. +          best_startp = *wlb;
  61085. +          best_vpos = line;
  61086. +            }
  61087. +          line++; wlb++;
  61088. +        }
  61089. +        }
  61090. +      pos = *compute_motion (best_startp, best_vpos, (hscroll ? 1 - hscroll : 0),
  61091. +                  point, height + 1, 10000, width, hscroll,
  61092. +                pos_tab_offset (w, best_startp), w);
  61093. +#else /* not AMIGA */
  61094.        pos = *compute_motion (startp, 0, (hscroll ? 1 - hscroll : 0),
  61095.                  PT, height + 1, 10000, width, hscroll,
  61096.                  pos_tab_offset (w, startp), w);
  61097. -
  61098. +#endif /* not AMIGA */
  61099.        if (pos.vpos < height)
  61100.      {
  61101.        /* Ok, point is still on frame */
  61102. @@ -1292,7 +1349,7 @@ done:
  61103.  
  61104.    /* When we reach a frame's selected window, redo the frame's menu bar.  */
  61105.    if (!NILP (w->update_mode_line)
  61106. -#ifdef USE_X_TOOLKIT
  61107. +#ifdef USE_EXTERNAL_MENU_BAR
  61108.        && FRAME_EXTERNAL_MENU_BAR (f) 
  61109.  #else
  61110.        && FRAME_MENU_BAR_LINES (f) > 0
  61111. @@ -1356,6 +1413,10 @@ try_window (window, pos)
  61112.    int width = window_internal_width (w) - 1;
  61113.    struct position val;
  61114.  
  61115. +#ifdef AMIGA
  61116. +  if (XBUFFER(w->buffer) == win_line_buffer) CLEAR_WIN_LINE();
  61117. +#endif 
  61118. +
  61119.    Fset_marker (w->start, make_number (pos), Qnil);
  61120.    cursor_vpos = -1;
  61121.    overlay_arrow_seen = 0;
  61122. @@ -1431,6 +1492,10 @@ try_window_id (window)
  61123.    int delta;
  61124.    int tab_offset, epto;
  61125.  
  61126. +#ifdef AMIGA
  61127. +    if (XBUFFER(w->buffer) == win_line_buffer) CLEAR_WIN_LINE();
  61128. +#endif
  61129. +  
  61130.    if (GPT - BEG < beg_unchanged)
  61131.      beg_unchanged = GPT - BEG;
  61132.    if (Z - GPT < end_unchanged)
  61133. @@ -1996,7 +2061,11 @@ display_text_line (w, start, vpos, hpos,
  61134.        ? XINT (current_buffer->selective_display)
  61135.      : !NILP (current_buffer->selective_display) ? -1 : 0;
  61136.    register struct frame_glyphs *desired_glyphs = FRAME_DESIRED_GLYPHS (f);
  61137. +#ifdef AMIGA /* CHFIXME */
  61138. +  register struct Lisp_Vector *dp = (assert(w != 0), window_display_table (w));
  61139. +#else
  61140.    register struct Lisp_Vector *dp = window_display_table (w);
  61141. +#endif
  61142.  
  61143.    Lisp_Object default_invis_vector[3];
  61144.    /* Nonzero means display something where there are invisible lines.
  61145. @@ -2539,7 +2608,7 @@ display_menu_bar (w)
  61146.    int hpos = 0;
  61147.    int i;
  61148.  
  61149. -#ifndef USE_X_TOOLKIT
  61150. +#ifndef USE_EXTERNAL_MENU_BAR
  61151.    if (FRAME_MENU_BAR_LINES (f) <= 0)
  61152.      return;
  61153.  
  61154. @@ -2580,7 +2649,7 @@ display_menu_bar (w)
  61155.    vpos++;
  61156.    while (vpos < FRAME_MENU_BAR_LINES (f))
  61157.      get_display_line (f, vpos++, 0);
  61158. -#endif /* not USE_X_TOOLKIT */
  61159. +#endif /* not USE_EXTERNAL_MENU_BAR */
  61160.  }
  61161.  
  61162.  /* Display the mode line for window w */
  61163. @@ -2835,7 +2904,10 @@ display_mode_element (w, vpos, hpos, dep
  61164.  /* Return a string for the output of a mode line %-spec for window W,
  61165.     generated by character C and width MAXWIDTH.  */
  61166.  
  61167. -static char lots_of_dashes[] = "--------------------------------------------------------------------------------------------------------------------------------------------";
  61168. +#ifdef AMIGA
  61169. +const
  61170. +#endif
  61171. +static char FAR lots_of_dashes[] = "--------------------------------------------------------------------------------------------------------------------------------------------";
  61172.  
  61173.  static char *
  61174.  decode_mode_spec (w, c, maxwidth)
  61175. @@ -3488,7 +3560,11 @@ init_xdisp ()
  61176.  #ifndef COMPILER_REGISTER_BUG
  61177.    register
  61178.  #endif /* COMPILER_REGISTER_BUG */
  61179. -    struct window *mini_w;
  61180. +   struct window *mini_w;
  61181. +
  61182. +#ifdef AMIGA
  61183. +  CLEAR_WIN_LINE();
  61184. +#endif
  61185.  
  61186.    this_line_bufpos = 0;
  61187.  
  61188. diff -rup --new-file baseline/fsf/emacs/src/xdisp_protos.h amiga/fsf/emacs/src/xdisp_protos.h
  61189. --- baseline/fsf/emacs/src/xdisp_protos.h    Wed Dec 31 17:00:00 1969
  61190. +++ amiga/fsf/emacs/src/xdisp_protos.h    Sat Sep 28 00:00:00 1996
  61191. @@ -0,0 +1,193 @@
  61192. +/* Prototypes for functions defined in
  61193. +xdisp.c
  61194. + */
  61195. +
  61196. +extern int win_line_bufpos[64];
  61197. +
  61198. +extern int win_line_modified;
  61199. +
  61200. +extern struct buffer * win_line_buffer;
  61201. +
  61202. +extern char visible[256];
  61203. +
  61204. +extern int noninteractive_need_newline;
  61205. +
  61206. +extern int this_line_bufpos;
  61207. +
  61208. +extern int this_line_endpos;
  61209. +
  61210. +extern int this_line_vpos;
  61211. +
  61212. +extern int this_line_start_hpos;
  61213. +
  61214. +extern struct buffer * this_line_buffer;
  61215. +
  61216. +extern int scroll_bottom_vpos;
  61217. +
  61218. +extern char * previous_echo_glyphs;
  61219. +
  61220. +extern int truncate_partial_width_windows;
  61221. +
  61222. +extern int Vglobal_mode_string;
  61223. +
  61224. +extern int Voverlay_arrow_position;
  61225. +
  61226. +extern int Voverlay_arrow_string;
  61227. +
  61228. +extern int last_arrow_position;
  61229. +
  61230. +extern int last_arrow_string;
  61231. +
  61232. +extern int Qmenu_bar_update_hook;
  61233. +
  61234. +extern int overlay_arrow_seen;
  61235. +
  61236. +extern int highlight_nonselected_windows;
  61237. +
  61238. +extern int scroll_step;
  61239. +
  61240. +extern int blank_end_of_window;
  61241. +
  61242. +extern int buffer_shared;
  61243. +
  61244. +extern int cursor_vpos;
  61245. +
  61246. +extern int cursor_hpos;
  61247. +
  61248. +extern int debug_end_pos;
  61249. +
  61250. +extern int mode_line_inverse_video;
  61251. +
  61252. +#if 0
  61253. +extern char * minibuf_prompt;
  61254. +#endif
  61255. +
  61256. +extern int minibuf_prompt_width;
  61257. +
  61258. +extern char * echo_area_glyphs;
  61259. +
  61260. +extern int echo_area_glyphs_length;
  61261. +
  61262. +extern int update_mode_lines;
  61263. +
  61264. +extern int beg_unchanged;
  61265. +
  61266. +extern int end_unchanged;
  61267. +
  61268. +extern int unchanged_modified;
  61269. +
  61270. +extern int clip_changed;
  61271. +
  61272. +extern int windows_or_buffers_changed;
  61273. +
  61274. +extern int line_number_displayed;
  61275. +
  61276. +extern int line_number_display_limit;
  61277. +
  61278. +void message2(char * m,
  61279. +              int len);
  61280. +
  61281. +void message1(char * m);
  61282. +
  61283. +void truncate_echo_area(int len);
  61284. +
  61285. +extern int message_buf_print;
  61286. +
  61287. +#ifdef _XDISP_C
  61288. +void message(char * m,
  61289. +             int a1,
  61290. +             int a2,
  61291. +             int a3);
  61292. +#else
  61293. +void message(char * m, ...);
  61294. +#endif
  61295. +void echo_area_display(void);
  61296. +
  61297. +void prepare_menu_bars(void);
  61298. +
  61299. +extern int do_verify_charstarts;
  61300. +
  61301. +void redisplay(void);
  61302. +
  61303. +int redisplay_preserve_echo_area(void);
  61304. +
  61305. +void mark_window_display_accurate(int window,
  61306. +                                  int flag);
  61307. +
  61308. +void update_menu_bar(int f);
  61309. +
  61310. +extern int do_id;
  61311. +
  61312. +void redisplay_windows(int window);
  61313. +
  61314. +void redisplay_window(int window,
  61315. +                      int just_this_one);
  61316. +
  61317. +void try_window(int window,
  61318. +                register int pos);
  61319. +
  61320. +int try_window_id(int window);
  61321. +
  61322. +void redisplay_region(struct buffer * buf,
  61323. +                      int start,
  61324. +                      int end);
  61325. +
  61326. +unsigned int * copy_part_of_rope(int f,
  61327. +                                 register unsigned int * to,
  61328. +                                 register unsigned int * s,
  61329. +                                 int * from,
  61330. +                                 int len,
  61331. +
  61332. +                          int face);
  61333. +
  61334. +unsigned int fix_glyph(int f,
  61335. +                       unsigned int glyph,
  61336. +                       int cface);
  61337. +
  61338. +extern struct position val_display_text_line;
  61339. +
  61340. +struct position * display_text_line(struct window * w,
  61341. +                                    int start,
  61342. +                                    int vpos,
  61343. +                                    int hpos,
  61344. +                                    int taboffset);
  61345. +
  61346. +void display_menu_bar(struct window * w);
  61347. +
  61348. +void display_mode_line(struct window * w);
  61349. +
  61350. +int display_mode_element(struct window * w,
  61351. +                         register int vpos,
  61352. +                         register int hpos,
  61353. +                         int depth,
  61354. +                         int minendcol,
  61355. +                         register int maxendcol
  61356. +,
  61357. +                         register int elt);
  61358. +
  61359. +extern const char far lots_of_dashes[141];
  61360. +
  61361. +char * decode_mode_spec(struct window * w,
  61362. +                        register int c,
  61363. +                        register int maxwidth);
  61364. +
  61365. +int display_count_lines(int from,
  61366. +                        int limit,
  61367. +                        int n,
  61368. +                        int * pos_ptr);
  61369. +
  61370. +int display_string(struct window * w,
  61371. +                   int vpos,
  61372. +                   unsigned char * string,
  61373. +                   int length,
  61374. +                   int hpos,
  61375. +                   unsigned int truncate,
  61376. +                   int obey_window_width,
  61377. +
  61378. +                  int mincol,
  61379. +                   int maxcol);
  61380. +
  61381. +void syms_of_xdisp(void);
  61382. +
  61383. +int init_xdisp(void);
  61384. +
  61385. diff -rup --new-file baseline/fsf/emacs/src/xmakefile amiga/fsf/emacs/src/xmakefile
  61386. --- baseline/fsf/emacs/src/xmakefile    Wed Dec 31 17:00:00 1969
  61387. +++ amiga/fsf/emacs/src/xmakefile    Sat Sep 28 00:00:00 1996
  61388. @@ -0,0 +1,227 @@
  61389. +srcdir=/src
  61390. +VPATH=""
  61391. +CC=sc
  61392. +CPP=/cpp/cpp
  61393. +CFLAGS=
  61394. +LN_S=
  61395. +MAKE=gmake
  61396. +dot = .
  61397. +lispdir = /lisp/
  61398. +libsrc = /lib-src/
  61399. +etc = /etc/
  61400. +shortnamesdir = $(dot)$(dot)/shortnames/
  61401. +cppdir = /cpp/
  61402. +oldXMenudir = $(dot)$(dot)/oldXMenu/
  61403. +lwlibdir = $(dot)$(dot)/lwlib/
  61404. +M_FILE = ${srcdir}/m/amiga.h
  61405. +S_FILE = #${srcdir}/s/amigaos.h #CHFIXME: reactivate
  61406. +config_h = config.h $(M_FILE) $(S_FILE)
  61407. +
  61408. +MYCPPFLAGS=def static 
  61409. +LDFLAGS=
  61410. +C_SWITCH_SYSTEM=
  61411. +
  61412. +SHELL=/bin/sh
  61413. +STARTFILES = lib:c.o firstfile.o
  61414. +ALL_CFLAGS=def emacs def HAVE_CONFIG_H $(MYCPPFLAGS) idir ${srcdir}       ${CFLAGS}
  61415. +.c.o:
  61416. +    $(CC) $(CPPFLAGS) $(ALL_CFLAGS) $< OBJNAME=t:$*.o
  61417. +    @copy t:$*.o $*.o
  61418. +    @rm t:$*.o
  61419. +
  61420. +GNULIB_VAR =
  61421. +LD=ld
  61422. +ALL_LDFLAGS =    $(LDFLAGS)
  61423. +amigasrcs=amiga_clipboard.c amiga_tty.c amiga_serial.c \
  61424. +    amiga_screen.c amiga_menu.c amiga_malloc.c \
  61425. +        amiga_rexx.c simplerexx.c amiga_term.c amiga_fns.c #amiga_select.c
  61426. +srcs=    dispnew.c frame.c scroll.c xdisp.c window.c     term.c cm.c emacs.c keyboard.c macros.c keymap.c amiga_sysdep.c     buffer.c filelock.c insdel.c marker.c      minibuf.c fileio.c dired.c filemode.c     cmds.c casetab.c casefiddle.c indent.c search.c regex.c undo.c     alloc.c data.c doc.c editfns.c callint.c     eval.c floatfns.c fns.c print.c lread.c     abbrev.c syntax.c amiga_dump.c mocklisp.c bytecode.c     process.c callproc.c     doprnt.c getloadavg.c ${amigasrcs}
  61427. +amigaobj=amiga_clipboard.o amiga_tty.o amiga_serial.o \
  61428. +    amiga_screen.o amiga_menu.o amiga_malloc.o \
  61429. +        amiga_rexx.o simplerexx.o amiga_term.o amiga_xmenu.o amiga_fns.o
  61430. +obj=    dispnew.o frame.o scroll.o xdisp.o window.o     term.o cm.o $(XOBJ)     emacs.o keyboard.o macros.o keymap.o amiga_sysdep.o     buffer.o filelock.o insdel.o marker.o      minibuf.o fileio.o dired.o filemode.o     cmds.o casetab.o casefiddle.o indent.o search.o regex.o undo.o     alloc.o data.o doc.o editfns.o callint.o     eval.o floatfns.o fns.o print.o lread.o     abbrev.o syntax.o amiga_dump.o mocklisp.o bytecode.o     process.o callproc.o     doprnt.o getloadavg.o intervals.o textprop.o ${amigaobj}
  61431. +SOME_MACHINE_OBJECTS = #${amigaobj}
  61432. +termcapobj = termcap.o tparam.o
  61433. +mallocobj = #malloc.o
  61434. +allocaobj = oldalloca.o
  61435. +widgetobj=
  61436. +
  61437. +otherobj= $(termcapobj) lastfile.o $(mallocobj) $(allocaobj) $(widgetobj)
  61438. +lisp=     ${lispdir}abbrev.elc     ${lispdir}buff-menu.elc     ${lispdir}byte-run.elc     ${lispdir}c-mode.elc     ${lispdir}files.elc     ${lispdir}fill.elc                    ${lispdir}help.elc     ${lispdir}indent.elc     ${lispdir}isearch.elc     ${lispdir}lisp-mode.elc     ${lispdir}lisp.elc     ${lispdir}loaddefs.el     ${lispdir}map-ynp.elc     ${lispdir}page.elc     ${lispdir}paragraphs.elc     ${lispdir}paths.el     ${lispdir}register.elc     ${lispdir}replace.elc     ${lispdir}simple.elc     ${lispdir}startup.el     ${lispdir}subr.elc     ${lispdir}text-mode.elc     ${lispdir}vc-hooks.elc               ${lispdir}window.elc     ${lispdir}version.el
  61439. +LIBES = $(LIBX)       -lg $(GNULIB_VAR)  -lc $(GNULIB_VAR)
  61440. +
  61441. +all: emacs
  61442. +
  61443. +emacs: temacs ${etc}DOC ${lisp}
  61444. +    /src/temacs -batch -l loadup dump
  61445. +
  61446. +${etc}DOC: ${libsrc}make-docfile ${obj} ${lisp}
  61447. +    -rm -f ${etc}DOC
  61448. +    ${libsrc}make-docfile -o ${etc}DOC -f < <
  61449. +${obj}
  61450. +${SOME_MACHINE_OBJECTS}       
  61451. +${lisp} 
  61452. +${amigalisp}
  61453. +< 
  61454. +
  61455. +${libsrc}make-docfile:
  61456. +    sc link {libsrc}make-docfile.c
  61457. +
  61458. +temacs:  $(LOCALCPP) $(SHORT) $(STARTFILES) $(OLDXMENU) ${obj} ${otherobj}   prefix-args
  61459. +    slink <with <
  61460. +from ${STARTFILES} $(obj)
  61461. +$(otherobj)
  61462. +to t:temacs
  61463. +lib     //unix/src/unix.lib lib:scmieee.lib lib:sc.lib lib:amiga.lib
  61464. +addsym
  61465. +batch
  61466. +<
  61467. +    copy t:temacs temacs
  61468. +    rm t:temacs
  61469. +
  61470. +protos.h: amiga_fns_protos.h amiga_screen_protos.h amiga_menu_protos.h amiga_tty_protos.h \
  61471. +    amiga_term_protos.h amiga_xmenu_protos.h
  61472. +
  61473. +amiga_fns_protos.h: amiga_fns.c
  61474. +    $(CC) $(ALL_CFLAGS) DEF GENPROTO GENPROTO NOGenProtoTypeDEFs $<
  61475. +amiga_menu_protos.h: amiga_menu.c
  61476. +    $(CC) $(ALL_CFLAGS) DEF GENPROTO GENPROTO NOGenProtoTypeDEFs $<
  61477. +amiga_screen_protos.h: amiga_screen.c
  61478. +    $(CC) $(ALL_CFLAGS) DEF GENPROTO GENPROTO NOGenProtoTypeDEFs $<
  61479. +amiga_term_protos.h: amiga_term.c
  61480. +    $(CC) $(ALL_CFLAGS) DEF GENPROTO GENPROTO NOGenProtoTypeDEFs $<
  61481. +amiga_tty_protos.h: amiga_tty.c
  61482. +    $(CC) $(ALL_CFLAGS) DEF GENPROTO GENPROTO NOGenProtoTypeDEFs $<
  61483. +amiga_xmenu_protos.h: amiga_xmenu.c
  61484. +    $(CC) $(ALL_CFLAGS) DEF GENPROTO GENPROTO NOGenProtoTypeDEFs $<
  61485. +
  61486. +
  61487. +amiga_malloc.o: amiga_malloc.c amiga.h config.h  
  61488. +        $(CC) $(ALL_CFLAGS) parms=both amiga_malloc.c
  61489. +
  61490. +amiga_select.o: amiga_select.c 
  61491. +        $(CC) $(ALL_CFLAGS) parms=both amiga_select.c
  61492. +
  61493. +prefix-args: prefix-args.c $(config_h)
  61494. +    $(CC) $(ALL_CFLAGS) ${srcdir}/prefix-args.c LINK to prefix-args
  61495. +
  61496. +CPP = $(CC) -E
  61497. +paths.h: paths.h.in
  61498. +    @echo "The file paths.h needs to be set up from paths.h.in."
  61499. +    @echo "Consult the file \`INSTALL' for instructions for building Emacs."
  61500. +    exit 1
  61501. +config.h: config.h.in
  61502. +    @echo "The file config.h needs to be set up from config.h.in."
  61503. +    @echo "Consult the file \`INSTALL' for instructions for building Emacs."
  61504. +    exit 1
  61505. +alloca.o : alloca.s $(config_h)
  61506. +    cp ${srcdir}/alloca.s allocatem.c
  61507. +    $(CPP) $(CPPFLAGS) $(ALL_CFLAGS) allocatem.c |     sed -e 's/ //' -e 's/^#.*//' |     sed -n -e '/^..*$$/p' > allocax.s
  61508. +    -rm -f alloca.o
  61509. +    $(CC) -c allocax.s
  61510. +    mv allocax.o alloca.o
  61511. +    rm allocax.s allocatem.c
  61512. +abbrev.o : abbrev.c buffer.h commands.h $(config_h)
  61513. +buffer.o : buffer.c buffer.h commands.h window.h     blockinput.h $(config_h)
  61514. +callint.o : callint.c window.h commands.h buffer.h mocklisp.h    keyboard.h $(config_h)
  61515. +callproc.o : callproc.c paths.h buffer.h commands.h $(config_h)     process.h systty.h syssignal.h
  61516. +casefiddle.o : casefiddle.c syntax.h commands.h buffer.h $(config_h)
  61517. +casetab.o : casetab.c buffer.h $(config_h)
  61518. +cm.o : cm.c cm.h termhooks.h $(config_h)
  61519. +cmds.o : cmds.c syntax.h buffer.h commands.h $(config_h)
  61520. +pre-crt0.o : pre-crt0.c
  61521. +crt0.o : crt0.c $(config_h)
  61522. +    $(CC) -c $(ALL_CFLAGS)   ${srcdir}/crt0.c
  61523. +dired.o : dired.c commands.h buffer.h $(config_h) regex.h
  61524. +dispnew.o : dispnew.c commands.h frame.h window.h buffer.h dispextern.h    termchar.h termopts.h termhooks.h cm.h disptab.h systty.h systime.h $(config_h)
  61525. +doc.o : doc.c $(config_h) paths.h buffer.h keyboard.h
  61526. +doprnt.o : doprnt.c
  61527. +editfns.o : editfns.c window.h buffer.h systime.h  $(config_h)
  61528. +emacs.o : emacs.c commands.h systty.h syssignal.h process.h  $(config_h)
  61529. +fileio.o : fileio.c window.h buffer.h systime.h  $(config_h)
  61530. +filelock.o : filelock.c buffer.h paths.h $(config_h)
  61531. +filemode.o : filemode.c  $(config_h)
  61532. +getloadavg.o : getloadavg.c $(config_h)
  61533. +indent.o : indent.c frame.h window.h indent.h buffer.h $(config_h) termchar.h    termopts.h disptab.h
  61534. +insdel.o : insdel.c window.h buffer.h  blockinput.h $(config_h)
  61535. +keyboard.o : keyboard.c termchar.h termhooks.h termopts.h buffer.h    commands.h frame.h window.h macros.h disptab.h keyboard.h syssignal.h    systty.h systime.h dispextern.h intervals.h blockinput.h $(config_h)
  61536. +keymap.o : keymap.c buffer.h commands.h keyboard.h termhooks.h blockinput.h    $(config_h)
  61537. +lastfile.o : lastfile.c  $(config_h)
  61538. +macros.o : macros.c window.h buffer.h commands.h macros.h $(config_h)
  61539. +malloc.o : malloc.c $(config_h)
  61540. +gmalloc.o : gmalloc.c $(config_h)
  61541. +ralloc.o : ralloc.c $(config_h)
  61542. +vm-limit.o : vm-limit.c mem-limits.h $(config_h)
  61543. +marker.o : marker.c buffer.h $(config_h)
  61544. +minibuf.o : minibuf.c syntax.h dispextern.h frame.h window.h    buffer.h commands.h $(config_h)
  61545. +mocklisp.o : mocklisp.c buffer.h $(config_h)
  61546. +process.o : process.c process.h buffer.h window.h termhooks.h termopts.h    commands.h syssignal.h systime.h systty.h syswait.h frame.h $(config_h)
  61547. +regex.o : regex.c syntax.h buffer.h $(config_h) regex.h
  61548. +frame.o : frame.c xterm.h window.h frame.h termhooks.h commands.h keyboard.h    buffer.h $(config_h)
  61549. +scroll.o : scroll.c termchar.h $(config_h) dispextern.h frame.h
  61550. +search.o : search.c regex.h commands.h buffer.h syntax.h blockinput.h $(config_h)
  61551. +syntax.o : syntax.c syntax.h buffer.h commands.h $(config_h)
  61552. +sysdep.o : sysdep.c $(config_h) dispextern.h termhooks.h termchar.h termopts.h    frame.h syssignal.h systty.h systime.h syswait.h blockinput.h window.h
  61553. +term.o : term.c termchar.h termhooks.h termopts.h $(config_h) cm.h frame.h    disptab.h
  61554. +termcap.o : termcap.c $(config_h)
  61555. +terminfo.o : terminfo.c $(config_h)
  61556. +tparam.o : tparam.c $(config_h)
  61557. +undo.o : undo.c buffer.h commands.h $(config_h)
  61558. +UNEXEC_ALIAS=unexec.o
  61559. +$(UNEXEC_ALIAS) : unexec.c $(config_h)
  61560. +widget.o : widget.c xterm.h frame.h dispextern.h widgetprv.h $(config_h)
  61561. +window.o : window.c indent.h commands.h frame.h window.h buffer.h termchar.h    termhooks.h disptab.h keyboard.h $(config_h)
  61562. +xdisp.o : xdisp.c macros.h commands.h indent.h buffer.h dispextern.h    termchar.h frame.h window.h disptab.h termhooks.h $(config_h)
  61563. +xfaces.o : xfaces.c dispextern.h frame.h xterm.h buffer.h blockinput.h    window.h $(config_h)
  61564. +xfns.o : xfns.c buffer.h frame.h window.h keyboard.h xterm.h    blockinput.h $(config_h)
  61565. +xmenu.o : xmenu.c xterm.h window.h frame.h keyboard.h blockinput.h $(config_h)
  61566. +xterm.o : xterm.c xterm.h termhooks.h termopts.h termchar.h window.h   dispextern.h frame.h disptab.h blockinput.h systime.h syssignal.h   gnu.h sink.h sinkmask.h $(config_h)
  61567. +xselect.o : xselect.c dispextern.h frame.h xterm.h blockinput.h $(config_h)
  61568. +xrdb.o : xrdb.c $(config_h)
  61569. +hftctl.o : hftctl.c $(config_h)
  61570. +alloc.o : alloc.c frame.h window.h buffer.h  puresize.h syssignal.h
  61571. +alloc.o : blockinput.h $(config_h)
  61572. +bytecode.o : bytecode.c buffer.h $(config_h)
  61573. +data.o : data.c buffer.h puresize.h syssignal.h $(config_h)
  61574. +eval.o : eval.c commands.h keyboard.h blockinput.h $(config_h)
  61575. +floatfns.o : floatfns.c $(config_h)
  61576. +fns.o : fns.c commands.h $(config_h) frame.h buffer.h keyboard.h
  61577. +print.o : print.c process.h frame.h window.h buffer.h $(config_h)
  61578. +lread.o : lread.c commands.h keyboard.h buffer.h paths.h $(config_h)  termhooks.h
  61579. +textprop.o : textprop.c buffer.h intervals.h $(config_h)
  61580. +intervals.o : intervals.c buffer.h intervals.h puresize.h $(config_h)
  61581. +sunfns.o  : sunfns.c buffer.h $(config_h)
  61582. +amiga_dump.o: amiga_dump.c frame.h
  61583. +amiga_menu.o: amiga_menu.c frame.h
  61584. +amiga_screen.o: amiga_screen.c frame.h
  61585. +amiga_term.o: amiga_term.c frame.h
  61586. +amiga_tty.o: amiga_tty.c frame.h
  61587. +${libsrc}emacstool: ${libsrc}emacstool.c
  61588. +    cd ${libsrc}; ${MAKE} ${MFLAGS} emacstool
  61589. +mostlyclean:
  61590. +    rm -f temacs prefix-args core \#* *.o libXMenu11.a liblw.a
  61591. +    rm -f ../etc/DOC
  61592. +clean: mostlyclean
  61593. +    rm -f emacs-* emacs
  61594. +distclean: clean
  61595. +    rm -f paths.h config.h Makefile Makefile.in ../etc/DOC-*
  61596. +realclean: distclean
  61597. +    rm -f TAGS
  61598. +versionclean:
  61599. +    -rm -f emacs emacs-* ../etc/DOC*
  61600. +extraclean: distclean
  61601. +    -rm -f *~ \#* m/?*~ s/?*~
  61602. +SOURCES = *.[ch] [sm]/?* COPYING ymakefile     config.h.in README COPYING ChangeLog vms.pp-trans
  61603. +unlock:
  61604. +    chmod u+w $(SOURCES)
  61605. +relock:
  61606. +    chmod -w $(SOURCES)
  61607. +    chmod +w paths.h
  61608. +ctagsfiles = [a-zA-Z]*.h [a-zA-Z]*.c
  61609. +lisptagsfiles = ../lisp/[a-zA-Z]*.el ../lisp/term/[a-zA-Z]*.el
  61610. +TAGS: $(ctagsfiles)
  61611. +    ../lib-src/etags --include=../lisp/TAGS $(ctagsfiles)
  61612. +../lisp/TAGS: $(lisptagsfiles)
  61613. +    cd ../lisp; $(MAKE) TAGS
  61614. +tags: TAGS ../lisp/TAGS
  61615. +.PHONY: tags
  61616. diff -rup --new-file baseline/fsf/emacs/src/xmakefile.test amiga/fsf/emacs/src/xmakefile.test
  61617. --- baseline/fsf/emacs/src/xmakefile.test    Wed Dec 31 17:00:00 1969
  61618. +++ amiga/fsf/emacs/src/xmakefile.test    Sat Sep 28 00:00:00 1996
  61619. @@ -0,0 +1,172 @@
  61620. +srcdir=/src
  61621. +VPATH=""
  61622. +CC=sc
  61623. +CPP=/cpp/cpp
  61624. +CFLAGS=
  61625. +LN_S=
  61626. +MAKE=gmake
  61627. +dot = .
  61628. +lispdir = ${srcdir}/$(dot)$(dot)/lisp/
  61629. +libsrc = $(dot)$(dot)/lib-src/
  61630. +etc = $(dot)$(dot)/etc/
  61631. +shortnamesdir = $(dot)$(dot)/shortnames/
  61632. +cppdir = $(dot)$(dot)/cpp/
  61633. +oldXMenudir = $(dot)$(dot)/oldXMenu/
  61634. +lwlibdir = $(dot)$(dot)/lwlib/
  61635. +M_FILE = ${srcdir}/m/m-amiga.h
  61636. +S_FILE = ${srcdir}/s/s-amigaos.h
  61637. +config_h = config.h $(M_FILE) $(S_FILE)
  61638. +/* From here on, comments must be done in C syntax.  */
  61639. +CPPFLAGS=
  61640. +LDFLAGS=
  61641. +C_SWITCH_SYSTEM=
  61642. +/* just to be sure the sh is used */
  61643. +SHELL=/bin/sh
  61644. +/* Use HAVE_X11 as an alias for X11 in this file
  61645. +to avoid problems with X11 as a subdirectory name
  61646. +in -I and other such options which pass through this file. */
  61647. +/* On some machines #define register is done in config;
  61648. +don't let it interfere with this file.  */
  61649. +STARTFILES = crt0.o
  61650. +ALL_CFLAGS=-Demacs -DHAVE_CONFIG_H $(MYCPPFLAG) -I. -I${srcdir}       ${CFLAGS}
  61651. +.c.o:
  61652. +    $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
  61653. +GNULIB_VAR =
  61654. +LD=ld
  61655. +ALL_LDFLAGS =    $(LDFLAGS)
  61656. +obj=    dispnew.o frame.o scroll.o xdisp.o window.o     term.o cm.o $(XOBJ)     emacs.o keyboard.o macros.o keymap.o sysdep.o     buffer.o filelock.o insdel.o marker.o      minibuf.o fileio.o dired.o filemode.o     cmds.o casetab.o casefiddle.o indent.o search.o regex.o undo.o     alloc.o data.o doc.o editfns.o callint.o     eval.o floatfns.o fns.o print.o lread.o     abbrev.o syntax.o unexec.o mocklisp.o bytecode.o     process.o callproc.o     doprnt.o getloadavg.o
  61657. +SOME_MACHINE_OBJECTS = sunfns.o
  61658. +termcapobj = termcap.o tparam.o
  61659. +mallocobj = malloc.o
  61660. +allocaobj = alloca.o
  61661. +widgetobj=
  61662. +otherobj= $(termcapobj) lastfile.o $(mallocobj) $(allocaobj) $(widgetobj)
  61663. +lisp=     ${lispdir}abbrev.elc     ${lispdir}buff-menu.elc     ${lispdir}byte-run.elc     ${lispdir}c-mode.elc     ${lispdir}files.elc     ${lispdir}fill.elc                    ${lispdir}help.elc     ${lispdir}indent.elc     ${lispdir}isearch.elc     ${lispdir}lisp-mode.elc     ${lispdir}lisp.elc     ${lispdir}loaddefs.el     ${lispdir}map-ynp.elc     ${lispdir}page.elc     ${lispdir}paragraphs.elc     ${lispdir}paths.el     ${lispdir}register.elc     ${lispdir}replace.elc     ${lispdir}simple.elc     ${lispdir}startup.elc     ${lispdir}subr.elc     ${lispdir}text-mode.elc     ${lispdir}vc-hooks.elc               ${lispdir}window.elc     ${lispdir}version.el
  61664. +LIBES = $(LIBX)       -lg $(GNULIB_VAR)  -lc $(GNULIB_VAR)
  61665. +all: emacs
  61666. +emacs: temacs ${etc}DOC ${lisp}
  61667. +    ./temacs -batch -l loadup dump
  61668. +${etc}DOC: ${libsrc}make-docfile ${obj} ${lisp}
  61669. +    -rm -f ${etc}DOC
  61670. +    ${libsrc}make-docfile -d ${srcdir} ${obj} ${SOME_MACHINE_OBJECTS}       ${lisp} > ${etc}DOC
  61671. +${libsrc}make-docfile:
  61672. +    cd ${libsrc}; ${MAKE} ${MFLAGS} make-docfile
  61673. +temacs:  $(LOCALCPP) $(SHORT) $(STARTFILES) $(OLDXMENU) ${obj} ${otherobj}   prefix-args
  61674. +    $(LD) ${STARTFLAGS} ${ALL_LDFLAGS}     -o temacs ${STARTFILES} ${obj} ${otherobj}        ${LIBES}
  61675. +prefix-args: prefix-args.c $(config_h)
  61676. +    $(CC) $(ALL_CFLAGS) ${srcdir}/prefix-args.c -o prefix-args
  61677. +CPP = $(CC) -E
  61678. +paths.h: paths.h.in
  61679. +    @echo "The file paths.h needs to be set up from paths.h.in."
  61680. +    @echo "Consult the file \`INSTALL' for instructions for building Emacs."
  61681. +    exit 1
  61682. +config.h: config.h.in
  61683. +    @echo "The file config.h needs to be set up from config.h.in."
  61684. +    @echo "Consult the file \`INSTALL' for instructions for building Emacs."
  61685. +    exit 1
  61686. +alloca.o : alloca.s $(config_h)
  61687. +    cp ${srcdir}/alloca.s allocatem.c
  61688. +    $(CPP) $(CPPFLAGS) $(ALL_CFLAGS) allocatem.c |     sed -e 's/ //' -e 's/^#.*//' |     sed -n -e '/^..*$$/p' > allocax.s
  61689. +    -rm -f alloca.o
  61690. +    $(CC) -c allocax.s
  61691. +    mv allocax.o alloca.o
  61692. +    rm allocax.s allocatem.c
  61693. +abbrev.o : abbrev.c buffer.h commands.h $(config_h)
  61694. +buffer.o : buffer.c buffer.h commands.h window.h     blockinput.h $(config_h)
  61695. +callint.o : callint.c window.h commands.h buffer.h mocklisp.h    keyboard.h $(config_h)
  61696. +callproc.o : callproc.c paths.h buffer.h commands.h $(config_h)     process.h systty.h syssignal.h
  61697. +casefiddle.o : casefiddle.c syntax.h commands.h buffer.h $(config_h)
  61698. +casetab.o : casetab.c buffer.h $(config_h)
  61699. +cm.o : cm.c cm.h termhooks.h $(config_h)
  61700. +cmds.o : cmds.c syntax.h buffer.h commands.h $(config_h)
  61701. +pre-crt0.o : pre-crt0.c
  61702. +crt0.o : crt0.c $(config_h)
  61703. +    $(CC) -c $(ALL_CFLAGS)   ${srcdir}/crt0.c
  61704. +dired.o : dired.c commands.h buffer.h $(config_h) regex.h
  61705. +dispnew.o : dispnew.c commands.h frame.h window.h buffer.h dispextern.h    termchar.h termopts.h termhooks.h cm.h disptab.h systty.h systime.h $(config_h)
  61706. +doc.o : doc.c $(config_h) paths.h buffer.h keyboard.h
  61707. +doprnt.o : doprnt.c
  61708. +editfns.o : editfns.c window.h buffer.h systime.h  $(config_h)
  61709. +emacs.o : emacs.c commands.h systty.h syssignal.h process.h  $(config_h)
  61710. +fileio.o : fileio.c window.h buffer.h systime.h  $(config_h)
  61711. +filelock.o : filelock.c buffer.h paths.h $(config_h)
  61712. +filemode.o : filemode.c  $(config_h)
  61713. +getloadavg.o : getloadavg.c $(config_h)
  61714. +indent.o : indent.c frame.h window.h indent.h buffer.h $(config_h) termchar.h    termopts.h disptab.h
  61715. +insdel.o : insdel.c window.h buffer.h  blockinput.h $(config_h)
  61716. +keyboard.o : keyboard.c termchar.h termhooks.h termopts.h buffer.h    commands.h frame.h window.h macros.h disptab.h keyboard.h syssignal.h    systty.h systime.h dispextern.h intervals.h blockinput.h $(config_h)
  61717. +keymap.o : keymap.c buffer.h commands.h keyboard.h termhooks.h blockinput.h    $(config_h)
  61718. +lastfile.o : lastfile.c  $(config_h)
  61719. +macros.o : macros.c window.h buffer.h commands.h macros.h $(config_h)
  61720. +malloc.o : malloc.c $(config_h)
  61721. +gmalloc.o : gmalloc.c $(config_h)
  61722. +ralloc.o : ralloc.c $(config_h)
  61723. +vm-limit.o : vm-limit.c mem-limits.h $(config_h)
  61724. +marker.o : marker.c buffer.h $(config_h)
  61725. +minibuf.o : minibuf.c syntax.h dispextern.h frame.h window.h    buffer.h commands.h $(config_h)
  61726. +mocklisp.o : mocklisp.c buffer.h $(config_h)
  61727. +process.o : process.c process.h buffer.h window.h termhooks.h termopts.h    commands.h syssignal.h systime.h systty.h syswait.h frame.h $(config_h)
  61728. +regex.o : regex.c syntax.h buffer.h $(config_h) regex.h
  61729. +frame.o : frame.c xterm.h window.h frame.h termhooks.h commands.h keyboard.h    buffer.h $(config_h)
  61730. +scroll.o : scroll.c termchar.h $(config_h) dispextern.h frame.h
  61731. +search.o : search.c regex.h commands.h buffer.h syntax.h blockinput.h $(config_h)
  61732. +syntax.o : syntax.c syntax.h buffer.h commands.h $(config_h)
  61733. +sysdep.o : sysdep.c $(config_h) dispextern.h termhooks.h termchar.h termopts.h    frame.h syssignal.h systty.h systime.h syswait.h blockinput.h window.h
  61734. +term.o : term.c termchar.h termhooks.h termopts.h $(config_h) cm.h frame.h    disptab.h
  61735. +termcap.o : termcap.c $(config_h)
  61736. +terminfo.o : terminfo.c $(config_h)
  61737. +tparam.o : tparam.c $(config_h)
  61738. +undo.o : undo.c buffer.h commands.h $(config_h)
  61739. +UNEXEC_ALIAS=unexec.o
  61740. +$(UNEXEC_ALIAS) : unexec.c $(config_h)
  61741. +widget.o : widget.c xterm.h frame.h dispextern.h widgetprv.h $(config_h)
  61742. +window.o : window.c indent.h commands.h frame.h window.h buffer.h termchar.h    termhooks.h disptab.h keyboard.h $(config_h)
  61743. +xdisp.o : xdisp.c macros.h commands.h indent.h buffer.h dispextern.h    termchar.h frame.h window.h disptab.h termhooks.h $(config_h)
  61744. +xfaces.o : xfaces.c dispextern.h frame.h xterm.h buffer.h blockinput.h    window.h $(config_h)
  61745. +xfns.o : xfns.c buffer.h frame.h window.h keyboard.h xterm.h    blockinput.h $(config_h)
  61746. +xmenu.o : xmenu.c xterm.h window.h frame.h keyboard.h blockinput.h $(config_h)
  61747. +xterm.o : xterm.c xterm.h termhooks.h termopts.h termchar.h window.h   dispextern.h frame.h disptab.h blockinput.h systime.h syssignal.h   gnu.h sink.h sinkmask.h $(config_h)
  61748. +xselect.o : xselect.c dispextern.h frame.h xterm.h blockinput.h $(config_h)
  61749. +xrdb.o : xrdb.c $(config_h)
  61750. +hftctl.o : hftctl.c $(config_h)
  61751. +alloc.o : alloc.c frame.h window.h buffer.h  puresize.h syssignal.h
  61752. +alloc.o : blockinput.h $(config_h)
  61753. +bytecode.o : bytecode.c buffer.h $(config_h)
  61754. +data.o : data.c buffer.h puresize.h syssignal.h $(config_h)
  61755. +eval.o : eval.c commands.h keyboard.h blockinput.h $(config_h)
  61756. +floatfns.o : floatfns.c $(config_h)
  61757. +fns.o : fns.c commands.h $(config_h) frame.h buffer.h keyboard.h
  61758. +print.o : print.c process.h frame.h window.h buffer.h $(config_h)
  61759. +lread.o : lread.c commands.h keyboard.h buffer.h paths.h $(config_h)  termhooks.h
  61760. +textprop.o : textprop.c buffer.h intervals.h $(config_h)
  61761. +intervals.o : intervals.c buffer.h intervals.h puresize.h $(config_h)
  61762. +sunfns.o  : sunfns.c buffer.h $(config_h)
  61763. +${libsrc}emacstool: ${libsrc}emacstool.c
  61764. +    cd ${libsrc}; ${MAKE} ${MFLAGS} emacstool
  61765. +mostlyclean:
  61766. +    rm -f temacs prefix-args core \#* *.o libXMenu11.a liblw.a
  61767. +    rm -f ../etc/DOC
  61768. +clean: mostlyclean
  61769. +    rm -f emacs-* emacs
  61770. +distclean: clean
  61771. +    rm -f paths.h config.h Makefile Makefile.in ../etc/DOC-*
  61772. +realclean: distclean
  61773. +    rm -f TAGS
  61774. +versionclean:
  61775. +    -rm -f emacs emacs-* ../etc/DOC*
  61776. +extraclean: distclean
  61777. +    -rm -f *~ \#* m/?*~ s/?*~
  61778. +SOURCES = *.[ch] [sm]/?* COPYING ymakefile     config.h.in README COPYING ChangeLog vms.pp-trans
  61779. +unlock:
  61780. +    chmod u+w $(SOURCES)
  61781. +relock:
  61782. +    chmod -w $(SOURCES)
  61783. +    chmod +w paths.h
  61784. +ctagsfiles = [a-zA-Z]*.h [a-zA-Z]*.c
  61785. +lisptagsfiles = ../lisp/[a-zA-Z]*.el ../lisp/term/[a-zA-Z]*.el
  61786. +TAGS: $(ctagsfiles)
  61787. +    ../lib-src/etags --include=../lisp/TAGS $(ctagsfiles)
  61788. +../lisp/TAGS: $(lisptagsfiles)
  61789. +    cd ../lisp; $(MAKE) TAGS
  61790. +tags: TAGS ../lisp/TAGS
  61791. +.PHONY: tags
  61792. diff -rup --new-file baseline/fsf/emacs/src/ymakefile amiga/fsf/emacs/src/ymakefile
  61793. --- baseline/fsf/emacs/src/ymakefile    Wed Dec 31 17:00:00 1969
  61794. +++ amiga/fsf/emacs/src/ymakefile    Sat Sep 28 00:00:00 1996
  61795. @@ -0,0 +1,915 @@
  61796. +# Makefile for GNU Emacs.
  61797. +# Copyright (C) 1985, 1987, 1988, 1993, 1994 Free Software Foundation, Inc.
  61798. +
  61799. +# This file is part of GNU Emacs.
  61800. +
  61801. +# GNU Emacs is free software; you can redistribute it and/or modify
  61802. +# it under the terms of the GNU General Public License as published by
  61803. +# the Free Software Foundation; either version 2, or (at your option)
  61804. +# any later version.
  61805. +
  61806. +# GNU Emacs is distributed in the hope that it will be useful,
  61807. +# but WITHOUT ANY WARRANTY; without even the implied warranty of
  61808. +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  61809. +# GNU General Public License for more details.
  61810. +
  61811. +# You should have received a copy of the GNU General Public License
  61812. +# along with GNU Emacs; see the file COPYING.  If not, write to
  61813. +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  61814. +
  61815. +# Here are the things that we expect ../configure to edit.
  61816. +srcdir=/src
  61817. +VPATH=""
  61818. +CC=sc
  61819. +CPP=/cpp/cpp
  61820. +CFLAGS=
  61821. +LN_S=
  61822. +# Substitute an assignment for the MAKE variable, because
  61823. +# BSD doesn't have it as a default.
  61824. +MAKE=gmake
  61825. +
  61826. +# On Xenix and the IBM RS6000, double-dot gets screwed up.
  61827. +dot = .
  61828. +lispdir = ${srcdir}/$(dot)$(dot)/lisp/
  61829. +libsrc = $(dot)$(dot)/lib-src/
  61830. +etc = $(dot)$(dot)/etc/
  61831. +shortnamesdir = $(dot)$(dot)/shortnames/
  61832. +cppdir = $(dot)$(dot)/cpp/
  61833. +oldXMenudir = $(dot)$(dot)/oldXMenu/
  61834. +lwlibdir = $(dot)$(dot)/lwlib/
  61835. +
  61836. +# Configuration files for .o files to depend on.
  61837. +M_FILE = ${srcdir}/m/m-amiga.h
  61838. +S_FILE = ${srcdir}/s/s-amigaos.h
  61839. +config_h = config.h $(M_FILE) $(S_FILE)
  61840. +
  61841. +# ========================== start of cpp stuff ======================= */
  61842. +/* From here on, comments must be done in C syntax.  */
  61843. +
  61844. +CPPFLAGS=
  61845. +LDFLAGS=
  61846. +C_SWITCH_SYSTEM=
  61847. +
  61848. +/* just to be sure the sh is used */
  61849. +SHELL=/bin/sh
  61850. +
  61851. +#define NO_SHORTNAMES
  61852. +#define THIS_IS_YMAKEFILE
  61853. +#define NOT_C_CODE
  61854. +#include "config.h"
  61855. +
  61856. +/* Use HAVE_X11 as an alias for X11 in this file
  61857. +   to avoid problems with X11 as a subdirectory name
  61858. +   in -I and other such options which pass through this file. */
  61859. +
  61860. +#ifdef X11
  61861. +#define HAVE_X11
  61862. +#undef X11
  61863. +#endif
  61864. +
  61865. +/* On some machines #define register is done in config;
  61866. +   don't let it interfere with this file.  */
  61867. +#undef register
  61868. +
  61869. +/* On some systems we may not be able to use the system make command. */
  61870. +#ifdef MAKE_COMMAND
  61871. +MAKE = MAKE_COMMAND
  61872. +#endif
  61873. +
  61874. +#ifdef C_COMPILER
  61875. +CC = C_COMPILER
  61876. +#endif
  61877. +
  61878. +/* GNU libc requires ORDINARY_LINK so that its own crt0 is used.
  61879. +   Linux is an exception because it uses a funny variant of GNU libc.  */
  61880. +#ifdef __GNU_LIBRARY__
  61881. +#ifndef LINUX
  61882. +#define ORDINARY_LINK
  61883. +#endif
  61884. +#endif
  61885. +
  61886. +/* Some machines don't find the standard C libraries in the usual place.  */
  61887. +#ifndef ORDINARY_LINK
  61888. +#ifndef LIB_STANDARD
  61889. +#define LIB_STANDARD -lc
  61890. +#endif
  61891. +#else
  61892. +#ifndef LIB_STANDARD
  61893. +#define LIB_STANDARD
  61894. +#endif
  61895. +#endif
  61896. +
  61897. +/* Unless inhibited or changed, use -lg to link for debugging.  */
  61898. +#ifndef LIBS_DEBUG
  61899. +#define LIBS_DEBUG -lg
  61900. +#endif
  61901. +
  61902. +/* Some s/*.h files define this to request special libraries.  */
  61903. +#ifndef LIBS_SYSTEM
  61904. +#define LIBS_SYSTEM
  61905. +#endif
  61906. +
  61907. +/* Some m/*.h files define this to request special libraries.  */
  61908. +#ifndef LIBS_MACHINE
  61909. +#define LIBS_MACHINE
  61910. +#endif
  61911. +
  61912. +#ifndef LIB_MATH
  61913. +# ifdef LISP_FLOAT_TYPE
  61914. +#  define LIB_MATH -lm
  61915. +# else /* ! defined (LISP_FLOAT_TYPE) */
  61916. +#  define LIB_MATH
  61917. +# endif /* ! defined (LISP_FLOAT_TYPE) */
  61918. +#endif /* LIB_MATH */
  61919. +
  61920. +/* Some s/*.h files define this to request special switches in ld.  */
  61921. +#ifndef LD_SWITCH_SYSTEM
  61922. +#if !defined (__GNUC__) && (defined(COFF_ENCAPSULATE) || (defined (BSD) && !defined (COFF)))
  61923. +#define LD_SWITCH_SYSTEM -X
  61924. +#else /* ! defined(COFF_ENCAPSULATE) || (defined (BSD) && !defined (COFF)) */
  61925. +#define LD_SWITCH_SYSTEM
  61926. +#endif /* ! defined(COFF_ENCAPSULATE) || (defined (BSD) && !defined (COFF)) */
  61927. +#endif /* LD_SWITCH_SYSTEM */
  61928. +
  61929. +/* Some m/*.h files define this to request special switches in ld.  */
  61930. +#ifndef LD_SWITCH_MACHINE
  61931. +#define LD_SWITCH_MACHINE
  61932. +#endif
  61933. +
  61934. +/* Some m/*.h files define this to request special switches in cc.  */
  61935. +#ifndef C_SWITCH_MACHINE
  61936. +#define C_SWITCH_MACHINE
  61937. +#endif
  61938. +
  61939. +/* Some s/*.h files define this to request special switches in cc.  */
  61940. +#ifndef C_SWITCH_SYSTEM
  61941. +#define C_SWITCH_SYSTEM
  61942. +#endif
  61943. +
  61944. +/* These macros are for switches specifically related to X Windows.  */
  61945. +#ifndef C_SWITCH_X_MACHINE
  61946. +#define C_SWITCH_X_MACHINE
  61947. +#endif
  61948. +
  61949. +#ifndef C_SWITCH_X_SYSTEM
  61950. +#define C_SWITCH_X_SYSTEM
  61951. +#endif
  61952. +
  61953. +#ifndef C_SWITCH_X_SITE
  61954. +#define C_SWITCH_X_SITE
  61955. +#endif
  61956. +
  61957. +#ifndef LD_SWITCH_X_SITE
  61958. +#define LD_SWITCH_X_SITE
  61959. +#endif
  61960. +
  61961. +#ifndef LD_SWITCH_X_DEFAULT
  61962. +#define LD_SWITCH_X_DEFAULT
  61963. +#endif
  61964. +
  61965. +/* These can be passed in from config.h to define special load and
  61966. +   compile switches needed by individual sites */
  61967. +#ifndef LD_SWITCH_SITE
  61968. +#define LD_SWITCH_SITE
  61969. +#endif
  61970. +
  61971. +#ifndef C_SWITCH_SITE
  61972. +#define C_SWITCH_SITE
  61973. +#endif
  61974. +
  61975. +#ifndef ORDINARY_LINK
  61976. +
  61977. +#ifndef CRT0_COMPILE
  61978. +#define CRT0_COMPILE $(CC) -c $(ALL_CFLAGS) C_SWITCH_ASM 
  61979. +#endif
  61980. +
  61981. +#ifndef START_FILES
  61982. +#ifdef NO_REMAP
  61983. +#ifdef COFF_ENCAPSULATE
  61984. +#define START_FILES pre-crt0.o /usr/local/lib/gcc-crt0.o
  61985. +#else /* ! defined (COFF_ENCAPSULATE) */
  61986. +#define START_FILES pre-crt0.o /lib/crt0.o
  61987. +#endif /* ! defined (COFF_ENCAPSULATE) */
  61988. +#else /* ! defined (NO_REMAP) */
  61989. +#define START_FILES crt0.o
  61990. +#endif /* ! defined (NO_REMAP) */
  61991. +#endif /* START_FILES */
  61992. +STARTFILES = START_FILES
  61993. +
  61994. +#else /* ORDINARY_LINK */
  61995. +
  61996. +/* config.h might want to force START_FILES anyway */
  61997. +#ifdef START_FILES
  61998. +STARTFILES = START_FILES
  61999. +#endif /* START_FILES */
  62000. +
  62001. +#endif /* not ORDINARY_LINK */
  62002. +
  62003. +
  62004. +/* cc switches needed to make `asm' keyword work.
  62005. +   Nothing special needed on most machines.  */
  62006. +#ifndef C_SWITCH_ASM
  62007. +#define C_SWITCH_ASM
  62008. +#endif
  62009. +
  62010. +/* Figure out whether the system cpp can handle long names.
  62011. +   Do it by testing it right now.
  62012. +   If it loses, arrange to use the GNU cpp.  */
  62013. +
  62014. +#define LONGNAMEBBBFOOX
  62015. +#ifdef LONGNAMEBBBARFOOX
  62016. +/* Installed cpp fails to distinguish those names!  */
  62017. +/* Arrange to compile the GNU cpp later on */
  62018. +#define NEED_CPP
  62019. +/* Cause cc to invoke the cpp that comes with Emacs,
  62020. +   which will be in a file named localcpp.  */
  62021. +MYCPPFLAG= -Blocal
  62022. +/* LOCALCPP is the local one or nothing.
  62023. +   CPP is the local one or the standardone.  */
  62024. +LOCALCPP= localcpp
  62025. +#endif /* ! defined (LONGNAMEBBBARFOOX) */
  62026. +
  62027. +#ifdef SHORTNAMES
  62028. +SHORT= shortnames
  62029. +#endif
  62030. +
  62031. +/* DO NOT use -R.  There is a special hack described in lastfile.c
  62032. +   which is used instead.  Some initialized data areas are modified
  62033. +   at initial startup, then labeled as part of the text area when
  62034. +   Emacs is dumped for the first time, and never changed again. */
  62035. +
  62036. +/* -Demacs is needed to make some files produce the correct version
  62037. +   for use in Emacs.
  62038. +
  62039. +   -DHAVE_CONFIG_H is needed for some other files to take advantage of
  62040. +   the information in `config.h'.  */
  62041. +
  62042. +/* C_SWITCH_X_SITE must come before C_SWITCH_X_MACHINE and C_SWITCH_X_SYSTEM
  62043. +   since it may have -I options that should override those two.  */
  62044. +ALL_CFLAGS=-Demacs -DHAVE_CONFIG_H $(MYCPPFLAG) -I. -I${srcdir} C_SWITCH_MACHINE C_SWITCH_SYSTEM C_SWITCH_SITE C_SWITCH_X_SITE C_SWITCH_X_MACHINE C_SWITCH_X_SYSTEM ${CFLAGS}
  62045. +.c.o:
  62046. +    $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
  62047. +
  62048. +#ifndef LIBX10_MACHINE
  62049. +#define LIBX10_MACHINE
  62050. +#endif
  62051. +
  62052. +#ifndef LIBX11_MACHINE
  62053. +#define LIBX11_MACHINE
  62054. +#endif
  62055. +
  62056. +#ifndef LIBX10_SYSTEM
  62057. +#define LIBX10_SYSTEM
  62058. +#endif
  62059. +
  62060. +#ifndef LIBX11_SYSTEM
  62061. +#define LIBX11_SYSTEM
  62062. +#endif
  62063. +
  62064. +#ifndef LIB_X11_LIB
  62065. +#define LIB_X11_LIB -lX11
  62066. +#endif
  62067. +
  62068. +#ifdef HAVE_X_WINDOWS
  62069. +#ifdef HAVE_X_MENU
  62070. +
  62071. +/* Include xmenu.o in the list of X object files.  */
  62072. +XOBJ= xterm.o xfns.o xfaces.o xmenu.o xselect.o xrdb.o
  62073. +
  62074. +/* The X Menu stuff is present in the X10 distribution, but missing
  62075. +   from X11.  If we have X10, just use the installed library;
  62076. +   otherwise, use our own copy.  */
  62077. +#ifdef HAVE_X11
  62078. +#ifdef USE_X_TOOLKIT
  62079. +OLDXMENU=liblw.a
  62080. +LIBXMENU= $(OLDXMENU)
  62081. +#else /* not USE_X_TOOLKIT */
  62082. +OLDXMENU= libXMenu11.a
  62083. +LIBXMENU= $(OLDXMENU)
  62084. +#endif /* not USE_X_TOOLKIT */
  62085. +#else /* not HAVE_X11 */
  62086. +LIBXMENU= -lXMenu
  62087. +#endif /* not HAVE_X11 */
  62088. +
  62089. +#else /* not HAVE_X_MENU */
  62090. +
  62091. +/* Otherwise, omit xmenu.o from the list of X object files, and
  62092. +   don't worry about the menu library at all.  */
  62093. +XOBJ= xterm.o xfns.o xfaces.o xselect.o xrdb.o
  62094. +LIBXMENU=
  62095. +#endif /* not HAVE_X_MENU */
  62096. +
  62097. +#ifdef USE_X_TOOLKIT
  62098. +#define @X_TOOLKIT_TYPE@
  62099. +#if defined (LUCID) || defined (ATHENA)
  62100. +LIBW= -lXaw
  62101. +#endif
  62102. +#ifdef MOTIF
  62103. +#ifdef LIB_MOTIF
  62104. +LIBW= LIB_MOTIF
  62105. +#else
  62106. +LIBW= -lXm
  62107. +#endif
  62108. +#endif
  62109. +#ifdef OPEN_LOOK
  62110. +LIBW= -lXol
  62111. +#endif
  62112. +
  62113. +#ifdef HAVE_X11XTR6
  62114. +LIBXTR6 = -lSM -lICE
  62115. +#endif
  62116. +
  62117. +LIBXT= $(LIBW) -lXmu -lXt $(LIBXTR6) -lXext
  62118. +#else
  62119. +LIBXT=
  62120. +#endif
  62121. +
  62122. +#ifdef HAVE_X11
  62123. +/* LD_SWITCH_X_DEFAULT comes after everything else that specifies
  62124. +   options for where to find X libraries, but before those libraries.  */
  62125. +LIBX= $(LIBXMENU) LD_SWITCH_X_SITE LD_SWITCH_X_DEFAULT $(LIBXT) LIB_X11_LIB LIBX11_MACHINE LIBX11_SYSTEM
  62126. +#else /* not HAVE_X11 */
  62127. +LIBX= $(LIBXMENU) LD_SWITCH_X_SITE -lX10 LIBX10_MACHINE LIBX10_SYSTEM
  62128. +#endif /* not HAVE_X11 */
  62129. +#endif /* not HAVE_X_WINDOWS */
  62130. +
  62131. +#ifndef ORDINARY_LINK
  62132. +/* Fix linking if compiled with GCC.  */
  62133. +#ifdef __GNUC__
  62134. +
  62135. +#if __GNUC__ > 1
  62136. +
  62137. +#ifdef LINKER
  62138. +#define LINKER_WAS_SPECIFIED
  62139. +#endif
  62140. +
  62141. +/* Versions of GCC >= 2.0 put their library, libgcc.a, in obscure
  62142. +   places that are difficult to figure out at make time.  Fortunately,
  62143. +   these same versions allow you to pass arbitrary flags on to the
  62144. +   linker, so there's no reason not to use it as a linker.
  62145. +
  62146. +   Well, it's not quite perfect.  The `-nostdlib' keeps GCC from
  62147. +   searching for libraries in its internal directories, so we have to
  62148. +   ask GCC explicitly where to find libgcc.a.  */
  62149. +
  62150. +#ifndef LINKER
  62151. +#define LINKER $(CC) -nostdlib
  62152. +#endif
  62153. +
  62154. +#ifndef LIB_GCC
  62155. +/* Ask GCC where to find libgcc.a.  */
  62156. +#define LIB_GCC `$(CC) -print-libgcc-file-name`
  62157. +#endif /* not LIB_GCC */
  62158. +
  62159. +GNULIB_VAR = LIB_GCC
  62160. +
  62161. +#ifndef LINKER_WAS_SPECIFIED
  62162. +/* GCC passes any argument prefixed with -Xlinker directly to the
  62163. +   linker.  See prefix-args.c for an explanation of why we don't do
  62164. +   this with the shell's `for' construct.
  62165. +   Note that some people don't have '.'  in their paths, so we must
  62166. +   use ./prefix-args.  */
  62167. +#define YMF_PASS_LDFLAGS(flags) `./prefix-args -Xlinker flags`
  62168. +#else
  62169. +#define YMF_PASS_LDFLAGS(flags) flags
  62170. +#endif
  62171. +
  62172. +#else /* __GNUC__ < 2 */
  62173. +
  62174. +#ifndef LIB_GCC
  62175. +#define LIB_GCC /usr/local/lib/gcc-gnulib
  62176. +#endif /* not LIB_GCC */
  62177. +GNULIB_VAR = `if [ -f LIB_GCC ] ; then echo LIB_GCC; else echo; fi`
  62178. +#endif /* __GNUC__ < 2 */
  62179. +#else /* not __GNUC__ */
  62180. +GNULIB_VAR = 
  62181. +
  62182. +#endif /* not __GNUC__ */
  62183. +#endif /* not ORDINARY_LINK */
  62184. +
  62185. +/* Specify address for ld to start loading at,
  62186. +   if requested by configuration.  */
  62187. +#ifdef LD_TEXT_START_ADDR
  62188. +STARTFLAGS = -T LD_TEXT_START_ADDR -e __start
  62189. +#endif
  62190. +
  62191. +#ifdef ORDINARY_LINK
  62192. +LD = $(CC)
  62193. +#else
  62194. +#ifdef COFF_ENCAPSULATE
  62195. +LD=$(CC) -nostdlib
  62196. +#else /* not ORDINARY_LINK */
  62197. +#ifdef LINKER
  62198. +LD=LINKER
  62199. +#else /* not LINKER */
  62200. +LD=ld
  62201. +#endif /* not LINKER */
  62202. +#endif /* not COFF_ENCAPSULATE */
  62203. +#endif /* not ORDINARY_LINK */
  62204. +
  62205. +ALL_LDFLAGS = LD_SWITCH_SYSTEM LD_SWITCH_MACHINE LD_SWITCH_SITE $(LDFLAGS)
  62206. +
  62207. +/* A macro which other sections of ymakefile can redefine to munge the
  62208. +   flags before they're passed to LD.  This is helpful if you have
  62209. +   redefined LD to something odd, like "gcc".  */
  62210. +#ifndef YMF_PASS_LDFLAGS
  62211. +#define YMF_PASS_LDFLAGS(flags) flags
  62212. +#endif
  62213. +
  62214. +/* Allow config.h to specify a replacement file for unexec.c.  */
  62215. +#ifndef UNEXEC
  62216. +#define UNEXEC unexec.o
  62217. +#endif
  62218. +#ifndef UNEXEC_SRC
  62219. +#define UNEXEC_SRC unexec.c
  62220. +#endif
  62221. +
  62222. +#ifdef USE_TEXT_PROPERTIES
  62223. +#define INTERVAL_SRC intervals.h
  62224. +#define INTERVAL_OBJ intervals.o textprop.o
  62225. +#else
  62226. +#define INTERVAL_SRC
  62227. +#define INTERVAL_OBJ
  62228. +#endif
  62229. +
  62230. +#ifdef HAVE_GETLOADAVG
  62231. +#define GETLOADAVG_OBJ
  62232. +#else
  62233. +#define GETLOADAVG_OBJ getloadavg.o
  62234. +#endif
  62235. +
  62236. +/* lastfile must follow all files
  62237. +   whose initialized data areas should be dumped as pure by dump-emacs. */
  62238. +obj=    dispnew.o frame.o scroll.o xdisp.o window.o \
  62239. +    term.o cm.o $(XOBJ) \
  62240. +    emacs.o keyboard.o macros.o keymap.o sysdep.o \
  62241. +    buffer.o filelock.o insdel.o marker.o INTERVAL_OBJ \
  62242. +    minibuf.o fileio.o dired.o filemode.o \
  62243. +    cmds.o casetab.o casefiddle.o indent.o search.o regex.o undo.o \
  62244. +    alloc.o data.o doc.o editfns.o callint.o \
  62245. +    eval.o floatfns.o fns.o print.o lread.o \
  62246. +    abbrev.o syntax.o UNEXEC mocklisp.o bytecode.o \
  62247. +    process.o callproc.o \
  62248. +    doprnt.o GETLOADAVG_OBJ
  62249. +
  62250. +/* Object files used on some machine or other.
  62251. +   These go in the DOC file on all machines
  62252. +   in case they are needed there.  */
  62253. +SOME_MACHINE_OBJECTS = sunfns.o
  62254. +
  62255. +#ifdef TERMINFO
  62256. +/* Used to be -ltermcap here.  If your machine needs that,
  62257. +   define LIBS_TERMCAP in the m/*.h file.  */
  62258. +#ifndef LIBS_TERMCAP
  62259. +#define LIBS_TERMCAP -lcurses
  62260. +#endif /* LIBS_TERMCAP */
  62261. +termcapobj = terminfo.o
  62262. +#else /* ! defined (TERMINFO) */
  62263. +#ifndef LIBS_TERMCAP
  62264. +#define LIBS_TERMCAP
  62265. +termcapobj = termcap.o tparam.o
  62266. +#else /* LIBS_TERMCAP */
  62267. +termcapobj = tparam.o
  62268. +#endif /* LIBS_TERMCAP */
  62269. +#endif /* ! defined (TERMINFO) */
  62270. +
  62271. +
  62272. +#ifndef SYSTEM_MALLOC
  62273. +
  62274. +#ifdef GNU_MALLOC  /* New GNU malloc */
  62275. +#ifdef REL_ALLOC
  62276. +mallocobj = gmalloc.o ralloc.o vm-limit.o
  62277. +#else /* ! defined (REL_ALLOC) */
  62278. +mallocobj = gmalloc.o vm-limit.o
  62279. +#endif /* ! defined (REL_ALLOC) */
  62280. +#else /* Old GNU malloc */
  62281. +mallocobj = malloc.o
  62282. +#endif /* Old GNU malloc */
  62283. +
  62284. +#endif /* SYSTEM_MALLOC */
  62285. +
  62286. +
  62287. +#ifndef HAVE_ALLOCA
  62288. +allocaobj = alloca.o
  62289. +#else
  62290. +allocaobj =
  62291. +#endif
  62292. +
  62293. +#ifdef USE_X_TOOLKIT
  62294. +widgetobj= widget.o
  62295. +#else /* not USE_X_TOOLKIT */
  62296. +widgetobj=
  62297. +#endif /* not USE_X_TOOLKIT */
  62298. +
  62299. +
  62300. +/* define otherobj as list of object files that make-docfile
  62301. +   should not be told about.  */
  62302. +otherobj= $(termcapobj) lastfile.o $(mallocobj) $(allocaobj) $(widgetobj)
  62303. +
  62304. +#ifdef LISP_FLOAT_TYPE
  62305. +#define FLOAT_SUPPORT ${lispdir}float-sup.elc
  62306. +#else
  62307. +#define FLOAT_SUPPORT
  62308. +#endif
  62309. +
  62310. +#ifdef MULTI_FRAME
  62311. +#define FRAME_SUPPORT ${lispdir}frame.elc ${lispdir}menu-bar.elc \
  62312. +  ${lispdir}mouse.elc ${lispdir}select.elc ${lispdir}scroll-bar.elc
  62313. +#else
  62314. +#define FRAME_SUPPORT
  62315. +#endif
  62316. +
  62317. +#ifdef HAVE_X_WINDOWS
  62318. +#define X_WINDOWS_SUPPORT
  62319. +#else
  62320. +#define X_WINDOWS_SUPPORT
  62321. +#endif
  62322. +
  62323. +#ifdef VMS
  62324. +#define VMS_SUPPORT ${lispdir}vmsproc.elc ${lispdir}vms-patch
  62325. +#else
  62326. +#define VMS_SUPPORT
  62327. +#endif
  62328. +
  62329. +#ifdef MSDOS
  62330. +#define MSDOS_SUPPORT ${lispdir}ls-lisp.elc ${lispdir}disp-tab.elc ${lispdir}dos-fns.elc ${lispdir}mouse.elc
  62331. +#else
  62332. +#define MSDOS_SUPPORT
  62333. +#endif
  62334. +
  62335. +/* List of Lisp files loaded into the dumped Emacs.  It's arranged
  62336. +   like this because it's easier to generate it semi-mechanically from
  62337. +   loadup.el this way.
  62338. +
  62339. +   Note that this list should not include lisp files which might not
  62340. +   be present, like site-load.el and site-init.el; this makefile
  62341. +   expects them all to be either present or buildable.  */
  62342. +lisp= \
  62343. +    ${lispdir}abbrev.elc \
  62344. +    ${lispdir}buff-menu.elc \
  62345. +    ${lispdir}byte-run.elc \
  62346. +    ${lispdir}c-mode.elc \
  62347. +    ${lispdir}files.elc \
  62348. +    ${lispdir}fill.elc \
  62349. +    FLOAT_SUPPORT \
  62350. +    FRAME_SUPPORT \
  62351. +    X_WINDOWS_SUPPORT \
  62352. +    ${lispdir}help.elc \
  62353. +    ${lispdir}indent.elc \
  62354. +    ${lispdir}isearch.elc \
  62355. +    ${lispdir}lisp-mode.elc \
  62356. +    ${lispdir}lisp.elc \
  62357. +    ${lispdir}loaddefs.el \
  62358. +    ${lispdir}map-ynp.elc \
  62359. +    ${lispdir}page.elc \
  62360. +    ${lispdir}paragraphs.elc \
  62361. +    ${lispdir}paths.el \
  62362. +    ${lispdir}register.elc \
  62363. +    ${lispdir}replace.elc \
  62364. +    ${lispdir}simple.elc \
  62365. +    ${lispdir}startup.elc \
  62366. +    ${lispdir}subr.elc \
  62367. +    ${lispdir}text-mode.elc \
  62368. +    ${lispdir}vc-hooks.elc \
  62369. +    VMS_SUPPORT \
  62370. +    MSDOS_SUPPORT \
  62371. +    ${lispdir}window.elc \
  62372. +    ${lispdir}version.el
  62373. +
  62374. +/* Construct full set of libraries to be linked.
  62375. +   Note that SunOS needs -lm to come before -lc; otherwise, you get
  62376. +   duplicated symbols.  If the standard libraries were compiled
  62377. +   with GCC, we might need gnulib again after them.  */
  62378. +LIBES = $(LIBX) LIBS_SYSTEM LIBS_MACHINE LIBS_TERMCAP \
  62379. +   LIBS_DEBUG $(GNULIB_VAR) LIB_MATH LIB_STANDARD $(GNULIB_VAR)
  62380. +
  62381. +/* Enable recompilation of certain other files depending on system type.  */
  62382. +
  62383. +#ifndef OTHER_FILES
  62384. +#define OTHER_FILES
  62385. +#endif
  62386. +
  62387. +/* Enable inclusion of object files in temacs depending on system type.  */
  62388. +#ifndef OBJECTS_SYSTEM
  62389. +#define OBJECTS_SYSTEM
  62390. +#endif
  62391. +
  62392. +#ifndef OBJECTS_MACHINE
  62393. +#define OBJECTS_MACHINE
  62394. +#endif
  62395. +
  62396. +all: emacs OTHER_FILES
  62397. +
  62398. +emacs: temacs ${etc}DOC ${lisp}
  62399. +#ifdef CANNOT_DUMP
  62400. +    rm -f emacs
  62401. +    ln temacs emacs
  62402. +#else
  62403. +#ifdef HAVE_SHM
  62404. +    ./temacs -nl -batch -l loadup dump
  62405. +#else /* ! defined (HAVE_SHM) */
  62406. +    ./temacs -batch -l loadup dump
  62407. +#endif /* ! defined (HAVE_SHM) */
  62408. +#endif /* ! defined (CANNOT_DUMP) */
  62409. +
  62410. +${etc}DOC: ${libsrc}make-docfile ${obj} ${lisp}
  62411. +    -rm -f ${etc}DOC
  62412. +    ${libsrc}make-docfile -d ${srcdir} ${obj} ${SOME_MACHINE_OBJECTS} \
  62413. +      ${lisp} > ${etc}DOC
  62414. +
  62415. +${libsrc}make-docfile:
  62416. +    cd ${libsrc}; ${MAKE} ${MFLAGS} make-docfile
  62417. +
  62418. +/* Some systems define this to cause parallel Make-ing.  */
  62419. +#ifndef MAKE_PARALLEL
  62420. +#define MAKE_PARALLEL
  62421. +#endif
  62422. +
  62423. +temacs: MAKE_PARALLEL $(LOCALCPP) $(SHORT) $(STARTFILES) $(OLDXMENU) ${obj} ${otherobj} OBJECTS_SYSTEM OBJECTS_MACHINE prefix-args
  62424. +    $(LD) YMF_PASS_LDFLAGS (${STARTFLAGS} ${ALL_LDFLAGS}) \
  62425. +    -o temacs ${STARTFILES} ${obj} ${otherobj}  \
  62426. +    OBJECTS_SYSTEM OBJECTS_MACHINE ${LIBES}
  62427. +
  62428. +prefix-args: prefix-args.c $(config_h)
  62429. +    $(CC) $(ALL_CFLAGS) ${srcdir}/prefix-args.c -o prefix-args
  62430. +
  62431. +/* These are needed for C compilation, on the systems that need them */
  62432. +#ifdef NEED_CPP
  62433. +CPP = ./localcpp
  62434. +localcpp:
  62435. +    cd ${cppdir}; ${MAKE} ${MFLAGS} EMACS=-DEMACS
  62436. +    ln ${cppdir}cpp localcpp  /* Name where ALL_CFLAGS will refer to it */
  62437. +/* cc appears to be cretinous and require all of these to exist
  62438. +   if -B is specified -- we can't use one local pass and let the
  62439. +   others be the standard ones.  What a loser.
  62440. +   We can't even use ln, since they are probably
  62441. +   on different disks.  */
  62442. +    cp /lib/ccom localccom
  62443. +    -cp /lib/optim localoptim
  62444. +    -cp /lib/c2 localc2
  62445. +    cp /bin/as localas
  62446. +#else /* ! defined (NEED_CPP) */
  62447. +CPP = $(CC) -E
  62448. +#endif /* ! defined (NEED_CPP) */
  62449. +
  62450. +#ifdef SHORTNAMES
  62451. +shortnames:
  62452. +    cd ${shortnamesdir}; ${MAKE} ${MFLAGS}
  62453. +#endif
  62454. +
  62455. +/* Don't lose if this was not defined.  */
  62456. +#ifndef OLDXMENU_OPTIONS
  62457. +#define OLDXMENU_OPTIONS
  62458. +#endif
  62459. +
  62460. +/* Don't lose if this was not defined.  */
  62461. +#ifndef LWLIB_OPTIONS
  62462. +#define LWLIB_OPTIONS
  62463. +#endif
  62464. +
  62465. +#ifdef HAVE_X_WINDOWS
  62466. +#ifdef HAVE_X11
  62467. +#ifdef USE_X_TOOLKIT
  62468. +$(OLDXMENU): really-lwlib
  62469. +    -rm -f $(OLDXMENU) /* We might have a link to an old version.  */
  62470. +    ${LN_S} ${lwlibdir}liblw.a $(OLDXMENU)
  62471. +
  62472. +/* Encode the values of these two macros in Make variables,
  62473. +   so we can use $(...) to substitute their values within "...".  */
  62474. +C_SWITCH_MACHINE_1 = C_SWITCH_MACHINE
  62475. +C_SWITCH_SYSTEM_1 = C_SWITCH_SYSTEM
  62476. +C_SWITCH_SITE_1 = C_SWITCH_SITE
  62477. +C_SWITCH_X_SITE_1 = C_SWITCH_X_SITE
  62478. +C_SWITCH_X_MACHINE_1 = C_SWITCH_X_MACHINE
  62479. +C_SWITCH_X_SYSTEM_1 = C_SWITCH_X_SYSTEM
  62480. +really-lwlib:
  62481. +    cd ${lwlibdir}; ${MAKE} ${MFLAGS} LWLIB_OPTIONS \
  62482. +    CC='${CC}' CFLAGS='${CFLAGS}' MAKE='${MAKE}' \
  62483. +    "C_SWITCH_X_SITE=$(C_SWITCH_X_SITE_1)" \
  62484. +    "C_SWITCH_X_MACHINE=$(C_SWITCH_X_MACHINE_1)" \
  62485. +    "C_SWITCH_X_SYSTEM=$(C_SWITCH_X_SYSTEM_1)" \
  62486. +    "C_SWITCH_SITE=$(C_SWITCH_SITE_1)" \
  62487. +    "C_SWITCH_MACHINE=$(C_SWITCH_MACHINE_1)" \
  62488. +    "C_SWITCH_SYSTEM=$(C_SWITCH_SYSTEM_1)"
  62489. +    @true  /* make -t should not create really-lwlib.  */
  62490. +#else /* not USE_X_TOOLKIT */
  62491. +#ifdef HAVE_X_MENU
  62492. +$(OLDXMENU): really-oldXMenu
  62493. +    -rm -f $(OLDXMENU) /* We might have a link to an old version.  */
  62494. +    ${LN_S} ${oldXMenudir}libXMenu11.a $(OLDXMENU)
  62495. +
  62496. +/* Encode the values of these two macros in Make variables,
  62497. +   so we can use $(...) to substitute their values within "...".  */
  62498. +C_SWITCH_MACHINE_1 = C_SWITCH_MACHINE
  62499. +C_SWITCH_SYSTEM_1 = C_SWITCH_SYSTEM
  62500. +C_SWITCH_SITE_1 = C_SWITCH_SITE
  62501. +C_SWITCH_X_SITE_1 = C_SWITCH_X_SITE
  62502. +C_SWITCH_X_MACHINE_1 = C_SWITCH_X_MACHINE
  62503. +C_SWITCH_X_SYSTEM_1 = C_SWITCH_X_SYSTEM
  62504. +really-oldXMenu:
  62505. +    cd ${oldXMenudir}; ${MAKE} ${MFLAGS} OLDXMENU_OPTIONS \
  62506. +    CC='${CC}' CFLAGS='${CFLAGS}' MAKE='${MAKE}' \
  62507. +    "C_SWITCH_X_SITE=$(C_SWITCH_X_SITE_1)" \
  62508. +    "C_SWITCH_X_MACHINE=$(C_SWITCH_X_MACHINE_1)" \
  62509. +    "C_SWITCH_X_SYSTEM=$(C_SWITCH_X_SYSTEM_1)" \
  62510. +    "C_SWITCH_SITE=$(C_SWITCH_SITE_1)" \
  62511. +    "C_SWITCH_MACHINE=$(C_SWITCH_MACHINE_1)" \
  62512. +    "C_SWITCH_SYSTEM=$(C_SWITCH_SYSTEM_1)"
  62513. +    @true  /* make -t should not create really-oldXMenu.  */
  62514. +#endif /* HAVE_X_MENU */
  62515. +#endif /* not USE_X_TOOLKIT */
  62516. +#endif /* HAVE_X11 */
  62517. +#endif /* HAVE_X_WINDOWS */
  62518. +
  62519. +paths.h: paths.h.in
  62520. +    @echo "The file paths.h needs to be set up from paths.h.in."
  62521. +    @echo "Consult the file \`INSTALL' for instructions for building Emacs."
  62522. +    exit 1
  62523. +
  62524. +config.h: config.h.in
  62525. +    @echo "The file config.h needs to be set up from config.h.in."
  62526. +    @echo "Consult the file \`INSTALL' for instructions for building Emacs."
  62527. +    exit 1
  62528. +
  62529. +/* Some machines have alloca built-in.
  62530. +   They should define HAVE_ALLOCA, or may just let alloca.s
  62531. +   be used but generate no code.
  62532. +   Some have it written in assembler in alloca.s.
  62533. +   Some use the C version in alloca.c (these define C_ALLOCA in config.h).
  62534. +   */
  62535. +
  62536. +#ifdef C_ALLOCA
  62537. +/* We could put something in alloca.c to #define free and malloc
  62538. +   whenever emacs was #defined, but that's not appropriate for all
  62539. +   users of alloca in Emacs.  Check out ../lib-src/getopt.c.  */
  62540. +alloca.o : alloca.c
  62541. +    $(CC) -c $(CPPFLAGS) -Dfree=xfree -Dmalloc=xmalloc \
  62542. +    $(ALL_CFLAGS) ${srcdir}/alloca.c
  62543. +#else
  62544. +#ifndef HAVE_ALLOCA
  62545. +alloca.o : alloca.s $(config_h)
  62546. +/* $(CPP) is cc -E, which may get confused by filenames
  62547. +   that do not end in .c.  So copy file to a safe name.  */
  62548. +    cp ${srcdir}/alloca.s allocatem.c
  62549. +/* Remove any ^L, blank lines, and preprocessor comments,
  62550. +   since some assemblers barf on them.  Use a different basename for the
  62551. +   output file, since some stupid compilers (Green Hill's) use that
  62552. +   name for the intermediate assembler file. */
  62553. +    $(CPP) $(CPPFLAGS) $(ALL_CFLAGS) allocatem.c | \
  62554. +    sed -e 's/ //' -e 's/^#.*//' | \
  62555. +    sed -n -e '/^..*$$/p' > allocax.s
  62556. +    -rm -f alloca.o
  62557. +/* Xenix, in particular, needs to run assembler via cc.  */
  62558. +    $(CC) -c allocax.s
  62559. +    mv allocax.o alloca.o
  62560. +    rm allocax.s allocatem.c
  62561. +#endif /* HAVE_ALLOCA */
  62562. +#endif /* ! defined (C_ALLOCA) */
  62563. +
  62564. +/* Nearly all the following files depend on lisp.h,
  62565. +   but it is not included as a dependency because
  62566. +   it is so often changed in ways that do not require any recompilation
  62567. +   and so rarely changed in ways that do require any.  */
  62568. +
  62569. +abbrev.o : abbrev.c buffer.h commands.h $(config_h) 
  62570. +buffer.o : buffer.c buffer.h commands.h window.h \
  62571. +   INTERVAL_SRC blockinput.h $(config_h) 
  62572. +callint.o : callint.c window.h commands.h buffer.h mocklisp.h \
  62573. +   keyboard.h $(config_h)
  62574. +callproc.o : callproc.c paths.h buffer.h commands.h $(config_h) \
  62575. +    process.h systty.h syssignal.h
  62576. +casefiddle.o : casefiddle.c syntax.h commands.h buffer.h $(config_h) 
  62577. +casetab.o : casetab.c buffer.h $(config_h)
  62578. +cm.o : cm.c cm.h termhooks.h $(config_h)
  62579. +cmds.o : cmds.c syntax.h buffer.h commands.h $(config_h) 
  62580. +pre-crt0.o : pre-crt0.c
  62581. +crt0.o : crt0.c $(config_h)
  62582. +    CRT0_COMPILE ${srcdir}/crt0.c
  62583. +dired.o : dired.c commands.h buffer.h $(config_h) regex.h
  62584. +dispnew.o : dispnew.c commands.h frame.h window.h buffer.h dispextern.h \
  62585. +   termchar.h termopts.h termhooks.h cm.h disptab.h systty.h systime.h $(config_h)
  62586. +doc.o : doc.c $(config_h) paths.h buffer.h keyboard.h
  62587. +doprnt.o : doprnt.c
  62588. +editfns.o : editfns.c window.h buffer.h systime.h INTERVAL_SRC $(config_h) 
  62589. +emacs.o : emacs.c commands.h systty.h syssignal.h process.h INTERVAL_SRC $(config_h) 
  62590. +fileio.o : fileio.c window.h buffer.h systime.h INTERVAL_SRC $(config_h) 
  62591. +filelock.o : filelock.c buffer.h paths.h $(config_h)
  62592. +filemode.o : filemode.c  $(config_h)
  62593. +getloadavg.o : getloadavg.c $(config_h)
  62594. +indent.o : indent.c frame.h window.h indent.h buffer.h $(config_h) termchar.h \
  62595. +   termopts.h disptab.h
  62596. +insdel.o : insdel.c window.h buffer.h INTERVAL_SRC blockinput.h $(config_h)
  62597. +keyboard.o : keyboard.c termchar.h termhooks.h termopts.h buffer.h \
  62598. +   commands.h frame.h window.h macros.h disptab.h keyboard.h syssignal.h \
  62599. +   systty.h systime.h dispextern.h intervals.h blockinput.h $(config_h) 
  62600. +keymap.o : keymap.c buffer.h commands.h keyboard.h termhooks.h blockinput.h \
  62601. +   $(config_h) 
  62602. +lastfile.o : lastfile.c  $(config_h)
  62603. +macros.o : macros.c window.h buffer.h commands.h macros.h $(config_h)
  62604. +malloc.o : malloc.c $(config_h)
  62605. +gmalloc.o : gmalloc.c $(config_h)
  62606. +ralloc.o : ralloc.c $(config_h)
  62607. +vm-limit.o : vm-limit.c mem-limits.h $(config_h) 
  62608. +marker.o : marker.c buffer.h $(config_h) 
  62609. +minibuf.o : minibuf.c syntax.h dispextern.h frame.h window.h \
  62610. +   buffer.h commands.h $(config_h) 
  62611. +mocklisp.o : mocklisp.c buffer.h $(config_h)
  62612. +process.o : process.c process.h buffer.h window.h termhooks.h termopts.h \
  62613. +   commands.h syssignal.h systime.h systty.h syswait.h frame.h $(config_h) 
  62614. +regex.o : regex.c syntax.h buffer.h $(config_h) regex.h 
  62615. +frame.o : frame.c xterm.h window.h frame.h termhooks.h commands.h keyboard.h \
  62616. +   buffer.h $(config_h)
  62617. +scroll.o : scroll.c termchar.h $(config_h) dispextern.h frame.h
  62618. +search.o : search.c regex.h commands.h buffer.h syntax.h blockinput.h $(config_h) 
  62619. +syntax.o : syntax.c syntax.h buffer.h commands.h $(config_h) 
  62620. +sysdep.o : sysdep.c $(config_h) dispextern.h termhooks.h termchar.h termopts.h \
  62621. +   frame.h syssignal.h systty.h systime.h syswait.h blockinput.h window.h
  62622. +term.o : term.c termchar.h termhooks.h termopts.h $(config_h) cm.h frame.h \
  62623. +   disptab.h
  62624. +termcap.o : termcap.c $(config_h)
  62625. +terminfo.o : terminfo.c $(config_h)
  62626. +tparam.o : tparam.c $(config_h)
  62627. +undo.o : undo.c buffer.h commands.h $(config_h) 
  62628. +/* This hack is to discard any space that cpp might put at the beginning
  62629. +   of UNEXEC when substituting it in.  */
  62630. +UNEXEC_ALIAS=UNEXEC
  62631. +$(UNEXEC_ALIAS) : UNEXEC_SRC $(config_h)
  62632. +widget.o : widget.c xterm.h frame.h dispextern.h widgetprv.h $(config_h)
  62633. +window.o : window.c indent.h commands.h frame.h window.h buffer.h termchar.h \
  62634. +   termhooks.h disptab.h keyboard.h $(config_h)
  62635. +xdisp.o : xdisp.c macros.h commands.h indent.h buffer.h dispextern.h \
  62636. +   termchar.h frame.h window.h disptab.h termhooks.h $(config_h) 
  62637. +xfaces.o : xfaces.c dispextern.h frame.h xterm.h buffer.h blockinput.h \
  62638. +   window.h $(config_h) 
  62639. +xfns.o : xfns.c buffer.h frame.h window.h keyboard.h xterm.h \
  62640. +   blockinput.h $(config_h)
  62641. +xmenu.o : xmenu.c xterm.h window.h frame.h keyboard.h blockinput.h $(config_h)
  62642. +xterm.o : xterm.c xterm.h termhooks.h termopts.h termchar.h window.h \
  62643. +  dispextern.h frame.h disptab.h blockinput.h systime.h syssignal.h \
  62644. +  gnu.h sink.h sinkmask.h $(config_h)
  62645. +xselect.o : xselect.c dispextern.h frame.h xterm.h blockinput.h $(config_h) 
  62646. +xrdb.o : xrdb.c $(config_h)
  62647. +hftctl.o : hftctl.c $(config_h)
  62648. +
  62649. +/* The files of Lisp proper */
  62650. +
  62651. +alloc.o : alloc.c frame.h window.h buffer.h  puresize.h syssignal.h
  62652. +alloc.o : blockinput.h $(config_h) INTERVAL_SRC
  62653. +bytecode.o : bytecode.c buffer.h $(config_h)
  62654. +data.o : data.c buffer.h puresize.h syssignal.h $(config_h)
  62655. +eval.o : eval.c commands.h keyboard.h blockinput.h $(config_h)
  62656. +floatfns.o : floatfns.c $(config_h)
  62657. +fns.o : fns.c commands.h $(config_h) frame.h buffer.h keyboard.h INTERVAL_SRC
  62658. +print.o : print.c process.h frame.h window.h buffer.h $(config_h)
  62659. +lread.o : lread.c commands.h keyboard.h buffer.h paths.h $(config_h) \
  62660. + termhooks.h
  62661. +
  62662. +/* Text properties support */
  62663. +textprop.o : textprop.c buffer.h intervals.h $(config_h)
  62664. +intervals.o : intervals.c buffer.h intervals.h puresize.h $(config_h)
  62665. +
  62666. +/* System-specific programs to be made.
  62667. +   OTHER_FILES, OBJECTS_SYSTEM and OBJECTS_MACHINE
  62668. +   select which of these should be compiled.  */
  62669. +
  62670. +sunfns.o  : sunfns.c buffer.h $(config_h)
  62671. +
  62672. +${libsrc}emacstool: ${libsrc}emacstool.c
  62673. +    cd ${libsrc}; ${MAKE} ${MFLAGS} emacstool
  62674. +mostlyclean:
  62675. +    rm -f temacs prefix-args core \#* *.o libXMenu11.a liblw.a
  62676. +    rm -f ../etc/DOC
  62677. +clean: mostlyclean
  62678. +    rm -f emacs-* emacs
  62679. +/**/# This is used in making a distribution.
  62680. +/**/# Do not use it on development directories!
  62681. +distclean: clean
  62682. +    rm -f paths.h config.h Makefile Makefile.in ../etc/DOC-*
  62683. +realclean: distclean
  62684. +    rm -f TAGS
  62685. +versionclean:
  62686. +    -rm -f emacs emacs-* ../etc/DOC*
  62687. +extraclean: distclean
  62688. +    -rm -f *~ \#* m/?*~ s/?*~
  62689. +
  62690. +/* The rule for the [sm] files has to be written a little funny to
  62691. +   avoid looking like a C comment to CPP. */
  62692. +SOURCES = *.[ch] [sm]/?* COPYING ymakefile \
  62693. +    config.h.in README COPYING ChangeLog vms.pp-trans
  62694. +unlock:
  62695. +    chmod u+w $(SOURCES)
  62696. +
  62697. +relock:
  62698. +    chmod -w $(SOURCES)
  62699. +    chmod +w paths.h
  62700. +
  62701. +/* Arrange to make a tags table in ../lisp, and another in this dir
  62702. +   which includes ../lisp/TAGS by reference.  */
  62703. +ctagsfiles = [a-zA-Z]*.h [a-zA-Z]*.c
  62704. +lisptagsfiles = ../lisp/[a-zA-Z]*.el ../lisp/term/[a-zA-Z]*.el
  62705. +TAGS: $(ctagsfiles)
  62706. +    ../lib-src/etags --include=../lisp/TAGS $(ctagsfiles)
  62707. +../lisp/TAGS: $(lisptagsfiles)
  62708. +    cd ../lisp; $(MAKE) TAGS
  62709. +tags: TAGS ../lisp/TAGS
  62710. +.PHONY: tags
  62711. diff -rup --new-file baseline/fsf/emacs/unixlib/include/alloca.h amiga/fsf/emacs/unixlib/include/alloca.h
  62712. --- baseline/fsf/emacs/unixlib/include/alloca.h    Wed Dec 31 17:00:00 1969
  62713. +++ amiga/fsf/emacs/unixlib/include/alloca.h    Sat Sep 28 00:00:00 1996
  62714. @@ -0,0 +1,8 @@
  62715. +#ifndef ALLOCA_H
  62716. +#define ALLOCA_H
  62717. +
  62718. +#include <stddef.h>
  62719. +
  62720. +void *alloca(size_t size);
  62721. +
  62722. +#endif
  62723. diff -rup --new-file baseline/fsf/emacs/unixlib/include/amiga/ioctl.h amiga/fsf/emacs/unixlib/include/amiga/ioctl.h
  62724. --- baseline/fsf/emacs/unixlib/include/amiga/ioctl.h    Wed Dec 31 17:00:00 1969
  62725. +++ amiga/fsf/emacs/unixlib/include/amiga/ioctl.h    Sat Sep 28 00:00:00 1996
  62726. @@ -0,0 +1,15 @@
  62727. +#ifndef _AMIGA_H
  62728. +#define _AMIGA_H
  62729. +
  62730. +/* Amiga specific ioctl's */
  62731. +
  62732. +#define _AMIGA_IOCTL_BASE 2048
  62733. +
  62734. +#define _AMIGA_INTERACTIVE (_AMIGA_IOCTL_BASE + 0) /* Is file Interactive ? */
  62735. +#define _AMIGA_GET_FH (_AMIGA_IOCTL_BASE + 1) /* Get an AmigaOS fh for file */
  62736. +#define _AMIGA_FREE_FH (_AMIGA_IOCTL_BASE + 2) /* Free a fh obtained by GET_FH */
  62737. +#define _AMIGA_TRUNCATE (_AMIGA_IOCTL_BASE + 3) /* Truncate file to given size */
  62738. +#define _AMIGA_SETPROTECTION (_AMIGA_IOCTL_BASE + 4) /* Set (amiga) protection on file */
  62739. +#define _AMIGA_DELETE_IF_ME (_AMIGA_IOCTL_BASE + 5) /* Delete myself if I am the file whose lock is passed as parameter */
  62740. +
  62741. +#endif
  62742. diff -rup --new-file baseline/fsf/emacs/unixlib/include/errno.h amiga/fsf/emacs/unixlib/include/errno.h
  62743. --- baseline/fsf/emacs/unixlib/include/errno.h    Wed Dec 31 17:00:00 1969
  62744. +++ amiga/fsf/emacs/unixlib/include/errno.h    Sat Sep 28 00:00:00 1996
  62745. @@ -0,0 +1,51 @@
  62746. +/**
  62747. +*
  62748. +* The following symbols are the error codes returned by the UNIX system
  62749. +* functions.  Typically, a UNIX function returns -1 when an error occurs,
  62750. +* and the global integer named errno contains one of these values.
  62751. +*
  62752. +*/
  62753. +#define EOSERR -1    /* Operating system error */
  62754. +
  62755. +#define EPERM 1        /* User is not owner */
  62756. +#define ENOENT 2    /* No such file or directory */
  62757. +#define ESRCH 3        /* No such process */
  62758. +#define EINTR 4        /* Interrupted system call */
  62759. +#define EIO 5        /* I/O error */
  62760. +#define ENXIO 6        /* No such device or address */
  62761. +#define E2BIG 7        /* Arg list is too long */
  62762. +#define ENOEXEC 8    /* Exec format error */
  62763. +#define EBADF 9        /* Bad file number */
  62764. +#define ECHILD 10    /* No child process */
  62765. +#define EAGAIN 11    /* No more processes allowed */
  62766. +#define ENOMEM 12    /* No memory available */
  62767. +#define EACCES 13    /* Access denied */
  62768. +#define EFAULT 14    /* Bad address */
  62769. +#define ENOTBLK 15    /* Bulk device required */
  62770. +#define EBUSY 16    /* Resource is busy */
  62771. +#define EEXIST 17    /* File already exists */
  62772. +#define EXDEV 18    /* Cross-device link */
  62773. +#define ENODEV 19    /* No such device */
  62774. +#define ENOTDIR 20    /* Not a directory */
  62775. +#define EISDIR 21    /* Is a directory */
  62776. +#define EINVAL 22    /* Invalid argument */
  62777. +#define ENFILE 23    /* No more files (units) allowed */
  62778. +#define EMFILE 24    /* No more files (units) allowed for this process */
  62779. +#define ENOTTY 25    /* Not a terminal */
  62780. +#define ETXTBSY 26    /* Text file is busy */
  62781. +#define EFBIG 27    /* File is too large */
  62782. +#define ENOSPC 28    /* No space left */
  62783. +#define ESPIPE 29    /* Seek issued to pipe */
  62784. +#define EROFS 30    /* Read-only file system */
  62785. +#define EMLINK 31    /* Too many links */
  62786. +#define EPIPE 32    /* Broken pipe */
  62787. +#define EDOM 33        /* Math function argument error */
  62788. +#define ERANGE 34    /* Math function result is out of range */
  62789. +#define EWOULDBLOCK 35    /* Operation would block */
  62790. +#define ENAMETOOLONG 36 /* File name is too long */
  62791. +#define ENOTEMPTY 37    /* Directory is not empty */
  62792. +#define ELOOP 38    /* Too many soft links found */
  62793. +
  62794. +extern int errno, _OSERR;
  62795. +extern int sys_nerr;
  62796. +extern char *sys_errlist[];
  62797. diff -rup --new-file baseline/fsf/emacs/unixlib/include/fcntl.h amiga/fsf/emacs/unixlib/include/fcntl.h
  62798. --- baseline/fsf/emacs/unixlib/include/fcntl.h    Wed Dec 31 17:00:00 1969
  62799. +++ amiga/fsf/emacs/unixlib/include/fcntl.h    Sat Sep 28 00:00:00 1996
  62800. @@ -0,0 +1 @@
  62801. +#include <sys/fcntl.h>
  62802. diff -rup --new-file baseline/fsf/emacs/unixlib/include/grp.h amiga/fsf/emacs/unixlib/include/grp.h
  62803. --- baseline/fsf/emacs/unixlib/include/grp.h    Wed Dec 31 17:00:00 1969
  62804. +++ amiga/fsf/emacs/unixlib/include/grp.h    Sat Sep 28 00:00:00 1996
  62805. @@ -0,0 +1,12 @@
  62806. +#ifndef _GRP_H
  62807. +#define _GRP_H
  62808. +
  62809. +struct group {
  62810. +  char *gr_name;        /* name of the group */
  62811. +  char *gr_passwd;        /* encrypted password of the group */
  62812. +  gid_t gr_gid;            /* numerical group ID */
  62813. +  char **gr_mem;        /* null-terminated array of pointers to the
  62814. +                   individual member names */
  62815. +};
  62816. +
  62817. +#endif
  62818. diff -rup --new-file baseline/fsf/emacs/unixlib/include/internal/devices.h amiga/fsf/emacs/unixlib/include/internal/devices.h
  62819. --- baseline/fsf/emacs/unixlib/include/internal/devices.h    Wed Dec 31 17:00:00 1969
  62820. +++ amiga/fsf/emacs/unixlib/include/internal/devices.h    Sat Sep 28 00:00:00 1996
  62821. @@ -0,0 +1,9 @@
  62822. +#ifndef DEVICES_H
  62823. +#define DEVICES_H
  62824. +
  62825. +struct IORequest *_device_open(char *name, unsigned long unit, unsigned long flags,
  62826. +                   void *data, unsigned long data_len, int req_size);
  62827. +
  62828. +void _device_close(struct IORequest *ioreq);
  62829. +
  62830. +#endif
  62831. diff -rup --new-file baseline/fsf/emacs/unixlib/include/internal/files.h amiga/fsf/emacs/unixlib/include/internal/files.h
  62832. --- baseline/fsf/emacs/unixlib/include/internal/files.h    Wed Dec 31 17:00:00 1969
  62833. +++ amiga/fsf/emacs/unixlib/include/internal/files.h    Sat Sep 28 00:00:00 1996
  62834. @@ -0,0 +1,35 @@
  62835. +#ifndef FILES_H
  62836. +#define FILES_H
  62837. +
  62838. +struct fileinfo {
  62839. +  int flags;
  62840. +  void *userinfo;
  62841. +  unsigned long (*__regargs select_start)(void *userinfo, int rd, int wr);
  62842. +  void (*__regargs select_poll)(void *userinfo, int *rd, int *wr);
  62843. +  int (*__regargs read)(void *userinfo, void *buffer, unsigned int length);
  62844. +  int (*__regargs write)(void *userinfo, void *buffer, unsigned int length);
  62845. +  int (*__regargs lseek)(void *userinfo, long rpos, int mode);
  62846. +  int (*__regargs close)(void *userinfo, int internal);
  62847. +  int (*__regargs ioctl)(void *userinfo, int request, void *data);
  62848. +};
  62849. +
  62850. +/* FI_READ & WRITE replace O_RDONLY, WRONLY & RDWR. Other flags are left untouched */
  62851. +#define FI_READ 1
  62852. +#define FI_WRITE 2
  62853. +
  62854. +int _alloc_fd(void *userinfo, int flags,
  62855. +  unsigned long (*__regargs select_start)(void *userinfo, int rd, int wr),
  62856. +  void (*__regargs select_poll)(void *userinfo, int *rd, int *wr),
  62857. +  int (*__regargs read)(void *userinfo, void *buffer, unsigned int length),
  62858. +  int (*__regargs write)(void *userinfo, void *buffer, unsigned int length),
  62859. +  int (*__regargs lseek)(void *userinfo, long rpos, int mode),
  62860. +  int (*__regargs close)(void *userinfo, int internal),
  62861. +  int (*__regargs ioctl)(void *userinfo, int request, void *data)
  62862. +);
  62863. +
  62864. +void _free_fd(int fd);
  62865. +
  62866. +struct fileinfo *_find_fd(int fd);
  62867. +int _last_fd(void);
  62868. +
  62869. +#endif
  62870. diff -rup --new-file baseline/fsf/emacs/unixlib/include/internal/messages.h amiga/fsf/emacs/unixlib/include/internal/messages.h
  62871. --- baseline/fsf/emacs/unixlib/include/internal/messages.h    Wed Dec 31 17:00:00 1969
  62872. +++ amiga/fsf/emacs/unixlib/include/internal/messages.h    Sat Sep 28 00:00:00 1996
  62873. @@ -0,0 +1,9 @@
  62874. +void _message(char *format, ...);
  62875. +/* Display a message which is as visible as possible (either to the console
  62876. +   or to a requester).
  62877. +   Assume very little about library state */
  62878. +void _fail(char *format, ...);
  62879. +/* Display a message which is as visible as possible (either to the console
  62880. +   or to a requester).
  62881. +   Assume very little about library state.
  62882. +   Exit with error code RETURN_FAIL after that. */
  62883. diff -rup --new-file baseline/fsf/emacs/unixlib/include/internal/timers.h amiga/fsf/emacs/unixlib/include/internal/timers.h
  62884. --- baseline/fsf/emacs/unixlib/include/internal/timers.h    Wed Dec 31 17:00:00 1969
  62885. +++ amiga/fsf/emacs/unixlib/include/internal/timers.h    Sat Sep 28 00:00:00 1996
  62886. @@ -0,0 +1,20 @@
  62887. +#ifndef TIMERS_H
  62888. +#define TIMERS_H
  62889. +
  62890. +struct timeinfo {
  62891. +  struct timerequest *io;
  62892. +  int sent;
  62893. +};
  62894. +
  62895. +struct timeinfo *_alloc_timer(void);
  62896. +void _free_timer(struct timeinfo *timer);
  62897. +void _timer_abort(struct timeinfo *timer);
  62898. +ULONG _timer_sig(struct timeinfo *timer);
  62899. +
  62900. +void _timer_start(struct timeinfo *timer, int secs, int micros);
  62901. +/* _timer_start(timer, 0) stops a timer */
  62902. +
  62903. +int _timer_expired(struct timeinfo *timer);
  62904. +/* A non-started timer is defined to not have expired */
  62905. +
  62906. +#endif
  62907. diff -rup --new-file baseline/fsf/emacs/unixlib/include/internal/vars.h amiga/fsf/emacs/unixlib/include/internal/vars.h
  62908. --- baseline/fsf/emacs/unixlib/include/internal/vars.h    Wed Dec 31 17:00:00 1969
  62909. +++ amiga/fsf/emacs/unixlib/include/internal/vars.h    Sat Sep 28 00:00:00 1996
  62910. @@ -0,0 +1,11 @@
  62911. +#ifndef VARS_H
  62912. +#define VARS_H
  62913. +
  62914. +/* <_us, _startup_time> should be a pretty good unique identifier of
  62915. +   this process */
  62916. +extern struct Process *_us;
  62917. +extern long _stack_size;
  62918. +extern long _startup_time;
  62919. +extern int use_amiga_flags;
  62920. +
  62921. +#endif
  62922. diff -rup --new-file baseline/fsf/emacs/unixlib/include/pwd.h amiga/fsf/emacs/unixlib/include/pwd.h
  62923. --- baseline/fsf/emacs/unixlib/include/pwd.h    Wed Dec 31 17:00:00 1969
  62924. +++ amiga/fsf/emacs/unixlib/include/pwd.h    Sat Sep 28 00:00:00 1996
  62925. @@ -0,0 +1,19 @@
  62926. +#ifndef _PWD_H
  62927. +#define _PWD_H
  62928. +
  62929. +struct    passwd {
  62930. +  char *pw_name;
  62931. +  char *pw_passwd;
  62932. +  uid_t pw_uid;
  62933. +  gid_t pw_gid;
  62934. +  int  pw_quota;
  62935. +  char *pw_comment;
  62936. +  char *pw_gecos;
  62937. +  char *pw_dir;
  62938. +  char *pw_shell;
  62939. +};
  62940. +
  62941. +struct passwd *getpwuid(uid_t uid);
  62942. +struct passwd *getpwnam(char *name);
  62943. +
  62944. +#endif
  62945. diff -rup --new-file baseline/fsf/emacs/unixlib/include/setjmp.h amiga/fsf/emacs/unixlib/include/setjmp.h
  62946. --- baseline/fsf/emacs/unixlib/include/setjmp.h    Wed Dec 31 17:00:00 1969
  62947. +++ amiga/fsf/emacs/unixlib/include/setjmp.h    Sat Sep 28 00:00:00 1996
  62948. @@ -0,0 +1,55 @@
  62949. +/*-
  62950. + * Copyright (c) 1990 The Regents of the University of California.
  62951. + * All rights reserved.
  62952. + *
  62953. + * Redistribution and use in source and binary forms, with or without
  62954. + * modification, are permitted provided that the following conditions
  62955. + * are met:
  62956. + * 1. Redistributions of source code must retain the above copyright
  62957. + *    notice, this list of conditions and the following disclaimer.
  62958. + * 2. Redistributions in binary form must reproduce the above copyright
  62959. + *    notice, this list of conditions and the following disclaimer in the
  62960. + *    documentation and/or other materials provided with the distribution.
  62961. + * 3. All advertising materials mentioning features or use of this software
  62962. + *    must display the following acknowledgement:
  62963. + *    This product includes software developed by the University of
  62964. + *    California, Berkeley and its contributors.
  62965. + * 4. Neither the name of the University nor the names of its contributors
  62966. + *    may be used to endorse or promote products derived from this software
  62967. + *    without specific prior written permission.
  62968. + *
  62969. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  62970. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  62971. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  62972. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  62973. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  62974. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  62975. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  62976. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  62977. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  62978. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  62979. + * SUCH DAMAGE.
  62980. + *
  62981. + *    @(#)setjmp.h    5.5 (Berkeley) 6/8/91
  62982. + */
  62983. +
  62984. +#ifndef _SETJMP_H_
  62985. +#define _SETJMP_H_
  62986. +
  62987. +#define _JBLEN 14
  62988. +
  62989. +typedef int jmp_buf[_JBLEN];
  62990. +
  62991. +#include <sys/cdefs.h>
  62992. +
  62993. +__BEGIN_DECLS
  62994. +int    setjmp __P((jmp_buf));
  62995. +void    longjmp __P((jmp_buf, int));
  62996. +
  62997. +#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
  62998. +int    _setjmp __P((jmp_buf));
  62999. +void    _longjmp __P((jmp_buf, int));
  63000. +#endif /* neither ANSI nor POSIX */
  63001. +__END_DECLS
  63002. +
  63003. +#endif /* !_SETJMP_H_ */
  63004. diff -rup --new-file baseline/fsf/emacs/unixlib/include/signal.h amiga/fsf/emacs/unixlib/include/signal.h
  63005. --- baseline/fsf/emacs/unixlib/include/signal.h    Wed Dec 31 17:00:00 1969
  63006. +++ amiga/fsf/emacs/unixlib/include/signal.h    Sat Sep 28 00:00:00 1996
  63007. @@ -0,0 +1,59 @@
  63008. +#ifndef _SIGNAL_H
  63009. +#define _SIGNAL_H
  63010. +
  63011. +#define NSIG 32            /* We define lots of signals (though most are never
  63012. +                   generated) */
  63013. +
  63014. +/* Signal number definitions */
  63015. +/* Those which can be generated other than by kill are described with
  63016. +    <name>, amiga: <cause> */
  63017. +   
  63018. +
  63019. +#define SIGHUP 1        /* hangup */
  63020. +#define SIGINT 2        /* interrupt, amiga: ctrl-c */
  63021. +#define SIGQUIT 3        /* quit, amiga: ctrl-d */
  63022. +#define SIGILL 4        /* illegal instruction */
  63023. +#define SIGTRAP 5        /* trace trap */
  63024. +#define SIGIOT 6        /* abort, amiga: abort() called */
  63025. +#define SIGEMT 7        /* emulator trap */
  63026. +#define SIGFPE 8        /* arithmetic exception, amiga: arith op */
  63027. +#define SIGKILL 9        /* kill */
  63028. +#define SIGBUS 10        /* bus error */
  63029. +#define SIGSEGV 11        /* segmentation violation */
  63030. +#define SIGSYS 12        /* bad argument to system call */
  63031. +#define SIGPIPE 13        /* write on pipe or socket with no reader,
  63032. +                   amiga: generated for 'pipe's or 'sktpair's */
  63033. +#define SIGALRM 14        /* alarm clock, amiga: see alarm */
  63034. +#define SIGTERM 15        /* software termination */
  63035. +#define SIGURG 16        /* urgent condition on socket */
  63036. +/* SIGSTOP, SIGTSTP, SIGCONT, SIGTTIN, SIGTTOU undefined to avoid creating the
  63037. +   belief that we support stopped processes */
  63038. +#define SIGCHLD 20        /* child status has changed */
  63039. +#define SIGIO 23        /* I/O possible on a descriptor */
  63040. +/* Less usual signals: SIGXCPU, SIGXFSZ, SIGVTALARM, SIGPROF, SIGLOST not defined */
  63041. +#define SIGWINCH 28        /* window changed */
  63042. +#define SIGUSR1 30        /* user-defined signal 1 */
  63043. +#define SIGUSR2 31        /* user-defined signal 2 */
  63044. +
  63045. +#define SIG_IGN (void *)0
  63046. +#define SIG_DFL (void *)1
  63047. +
  63048. +struct sigvec {
  63049. +  void (*sv_handler)();
  63050. +  long sv_mask;
  63051. +  /*int sv_flags;*/ /* Not implemented */
  63052. +};
  63053. +
  63054. +void (*signal(int sig,void (*fn)(int)))(int);
  63055. +int sigvec(int sig, struct sigvec *vec, struct sigvec *ovec);
  63056. +long sigsetmask(long mask);
  63057. +long sigblock(long mask);
  63058. +
  63059. +#define sigmask(s) (1 << (s))
  63060. +
  63061. +/* Only kill(getpid(), sig) works */
  63062. +/* Also, getpid() is a unique number for this process */
  63063. +int getpid(void);
  63064. +int kill(int pid, int sig);
  63065. +
  63066. +#endif
  63067. diff -rup --new-file baseline/fsf/emacs/unixlib/include/stat.h amiga/fsf/emacs/unixlib/include/stat.h
  63068. --- baseline/fsf/emacs/unixlib/include/stat.h    Wed Dec 31 17:00:00 1969
  63069. +++ amiga/fsf/emacs/unixlib/include/stat.h    Sat Sep 28 00:00:00 1996
  63070. @@ -0,0 +1 @@
  63071. +#include <sys/stat.h>
  63072. diff -rup --new-file baseline/fsf/emacs/unixlib/include/stdio.h amiga/fsf/emacs/unixlib/include/stdio.h
  63073. --- baseline/fsf/emacs/unixlib/include/stdio.h    Wed Dec 31 17:00:00 1969
  63074. +++ amiga/fsf/emacs/unixlib/include/stdio.h    Sat Sep 28 00:00:00 1996
  63075. @@ -0,0 +1,7 @@
  63076. +/* Avoid problems with conflicting declarations for mkdir */
  63077. +#define mkdir __fake_mkdir
  63078. +#include "include:stdio.h"
  63079. +
  63080. +#define P_tmpdir "t:"
  63081. +
  63082. +#undef mkdir
  63083. diff -rup --new-file baseline/fsf/emacs/unixlib/include/stdlib.h amiga/fsf/emacs/unixlib/include/stdlib.h
  63084. --- baseline/fsf/emacs/unixlib/include/stdlib.h    Wed Dec 31 17:00:00 1969
  63085. +++ amiga/fsf/emacs/unixlib/include/stdlib.h    Sat Sep 28 00:00:00 1996
  63086. @@ -0,0 +1,4 @@
  63087. +/* Avoid problems with conflicting declarations for mkdir */
  63088. +#define mkdir __fake_mkdir
  63089. +#include "include:stdlib.h"
  63090. +#undef mkdir
  63091. diff -rup --new-file baseline/fsf/emacs/unixlib/include/strings.h amiga/fsf/emacs/unixlib/include/strings.h
  63092. --- baseline/fsf/emacs/unixlib/include/strings.h    Wed Dec 31 17:00:00 1969
  63093. +++ amiga/fsf/emacs/unixlib/include/strings.h    Sat Sep 28 00:00:00 1996
  63094. @@ -0,0 +1 @@
  63095. +#include <string.h>
  63096. diff -rup --new-file baseline/fsf/emacs/unixlib/include/sys/cdefs.h amiga/fsf/emacs/unixlib/include/sys/cdefs.h
  63097. --- baseline/fsf/emacs/unixlib/include/sys/cdefs.h    Wed Dec 31 17:00:00 1969
  63098. +++ amiga/fsf/emacs/unixlib/include/sys/cdefs.h    Sat Sep 28 00:00:00 1996
  63099. @@ -0,0 +1,78 @@
  63100. +/*
  63101. + * Copyright (c) 1991 The Regents of the University of California.
  63102. + * All rights reserved.
  63103. + *
  63104. + * Redistribution and use in source and binary forms, with or without
  63105. + * modification, are permitted provided that the following conditions
  63106. + * are met:
  63107. + * 1. Redistributions of source code must retain the above copyright
  63108. + *    notice, this list of conditions and the following disclaimer.
  63109. + * 2. Redistributions in binary form must reproduce the above copyright
  63110. + *    notice, this list of conditions and the following disclaimer in the
  63111. + *    documentation and/or other materials provided with the distribution.
  63112. + * 3. All advertising materials mentioning features or use of this software
  63113. + *    must display the following acknowledgement:
  63114. + *    This product includes software developed by the University of
  63115. + *    California, Berkeley and its contributors.
  63116. + * 4. Neither the name of the University nor the names of its contributors
  63117. + *    may be used to endorse or promote products derived from this software
  63118. + *    without specific prior written permission.
  63119. + *
  63120. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  63121. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  63122. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  63123. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  63124. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  63125. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  63126. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  63127. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  63128. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  63129. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  63130. + * SUCH DAMAGE.
  63131. + *
  63132. + *    @(#)cdefs.h    7.6 (Berkeley) 5/4/91
  63133. + */
  63134. +
  63135. +#ifndef    _CDEFS_H_
  63136. +#define    _CDEFS_H_
  63137. +
  63138. +#if defined(__cplusplus)
  63139. +#define    __BEGIN_DECLS    extern "C" {
  63140. +#define    __END_DECLS    };
  63141. +#else
  63142. +#define    __BEGIN_DECLS
  63143. +#define    __END_DECLS
  63144. +#endif
  63145. +
  63146. +/*
  63147. + * The __CONCAT macro is used to concatenate parts of symbol names, e.g.
  63148. + * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo.
  63149. + * The __CONCAT macro is a bit tricky -- make sure you don't put spaces
  63150. + * in between its arguments.  __CONCAT can also concatenate double-quoted
  63151. + * strings produced by the __STRING macro, but this only works with ANSI C.
  63152. + */
  63153. +#if defined(__STDC__) || defined(__cplusplus)
  63154. +#define    __P(protos)    protos        /* full-blown ANSI C */
  63155. +#define    __CONCAT(x,y)    x ## y
  63156. +#define    __STRING(x)    #x
  63157. +
  63158. +#else    /* !(__STDC__ || __cplusplus) */
  63159. +#define    __P(protos)    ()        /* traditional C preprocessor */
  63160. +#define    __CONCAT(x,y)    x/**/y
  63161. +#define    __STRING(x)    "x"
  63162. +
  63163. +#ifdef __GNUC__
  63164. +#define    const        __const        /* GCC: ANSI C with -traditional */
  63165. +#define    inline        __inline
  63166. +#define    signed        __signed
  63167. +#define    volatile    __volatile
  63168. +
  63169. +#else    /* !__GNUC__ */
  63170. +#define    const                /* delete ANSI C keywords */
  63171. +#define    inline
  63172. +#define    signed
  63173. +#define    volatile
  63174. +#endif    /* !__GNUC__ */
  63175. +#endif    /* !(__STDC__ || __cplusplus) */
  63176. +
  63177. +#endif /* !_CDEFS_H_ */
  63178. diff -rup --new-file baseline/fsf/emacs/unixlib/include/sys/fcntl.h amiga/fsf/emacs/unixlib/include/sys/fcntl.h
  63179. --- baseline/fsf/emacs/unixlib/include/sys/fcntl.h    Wed Dec 31 17:00:00 1969
  63180. +++ amiga/fsf/emacs/unixlib/include/sys/fcntl.h    Sat Sep 28 00:00:00 1996
  63181. @@ -0,0 +1,193 @@
  63182. +/*-
  63183. + * Copyright (c) 1983, 1990 The Regents of the University of California.
  63184. + * All rights reserved.
  63185. + *
  63186. + * Redistribution and use in source and binary forms, with or without
  63187. + * modification, are permitted provided that the following conditions
  63188. + * are met:
  63189. + * 1. Redistributions of source code must retain the above copyright
  63190. + *    notice, this list of conditions and the following disclaimer.
  63191. + * 2. Redistributions in binary form must reproduce the above copyright
  63192. + *    notice, this list of conditions and the following disclaimer in the
  63193. + *    documentation and/or other materials provided with the distribution.
  63194. + * 3. All advertising materials mentioning features or use of this software
  63195. + *    must display the following acknowledgement:
  63196. + *    This product includes software developed by the University of
  63197. + *    California, Berkeley and its contributors.
  63198. + * 4. Neither the name of the University nor the names of its contributors
  63199. + *    may be used to endorse or promote products derived from this software
  63200. + *    without specific prior written permission.
  63201. + *
  63202. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  63203. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  63204. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  63205. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  63206. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  63207. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  63208. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  63209. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  63210. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  63211. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  63212. + * SUCH DAMAGE.
  63213. + *
  63214. + *    @(#)fcntl.h    5.14 (Berkeley) 7/1/91
  63215. + */
  63216. +
  63217. +#ifndef _FCNTL_H_
  63218. +#define    _FCNTL_H_
  63219. +
  63220. +/*
  63221. + * This file includes the definitions for open and fcntl
  63222. + * described by POSIX for <fcntl.h>; it also includes
  63223. + * related kernel definitions.
  63224. + */
  63225. +
  63226. +#ifndef KERNEL
  63227. +#include <sys/types.h>
  63228. +#endif
  63229. +
  63230. +/*
  63231. + * File status flags: these are used by open(2), fcntl(2).
  63232. + * They are also used (indirectly) in the kernel file structure f_flags,
  63233. + * which is a superset of the open/fcntl flags.  Open flags and f_flags
  63234. + * are inter-convertible using OFLAGS(fflags) and FFLAGS(oflags).
  63235. + * Open/fcntl flags begin with O_; kernel-internal flags begin with F.
  63236. + */
  63237. +/* open-only flags */
  63238. +#define    O_RDONLY    0x0000        /* open for reading only */
  63239. +#define    O_WRONLY    0x0001        /* open for writing only */
  63240. +#define    O_RDWR        0x0002        /* open for reading and writing */
  63241. +#define    O_ACCMODE    0x0003        /* mask for above modes */
  63242. +
  63243. +#ifdef KERNEL
  63244. +/*
  63245. + * Kernel encoding of open mode; separate read and write bits
  63246. + * that are independently testable: 1 greater than the above.
  63247. + */
  63248. +#define    FREAD        0x0001
  63249. +#define    FWRITE        0x0002
  63250. +#endif
  63251. +#define    O_NONBLOCK    0x0004        /* no delay */
  63252. +#define    O_APPEND    0x0008        /* set append mode */
  63253. +#ifndef _POSIX_SOURCE
  63254. +#define    O_SHLOCK    0x0010        /* open with shared file lock */
  63255. +#define    O_EXLOCK    0x0020        /* open with exclusive file lock */
  63256. +#define    O_ASYNC        0x0040        /* signal pgrp when data ready */
  63257. +#define    O_FSYNC        0x0080        /* synchronous writes */
  63258. +#endif
  63259. +#define    O_CREAT        0x0100        /* create if nonexistant */
  63260. +#define    O_TRUNC        0x0200        /* truncate to zero length */
  63261. +#define    O_EXCL        0x0400        /* error if already exists */
  63262. +#ifdef KERNEL
  63263. +#define    FMARK        0x1000        /* mark during gc() */
  63264. +#define    FDEFER        0x2000        /* defer for next gc pass */
  63265. +#define    FHASLOCK    0x4000        /* descriptor holds advisory lock */
  63266. +#endif
  63267. +
  63268. +/* defined by POSIX 1003.1; BSD default, so no bit required */
  63269. +#define    O_NOCTTY    0        /* don't assign controlling terminal */
  63270. +
  63271. +#ifdef KERNEL
  63272. +/* convert from open() flags to/from fflags; convert O_RD/WR to FREAD/FWRITE */
  63273. +#define    FFLAGS(oflags)    ((oflags) + 1)
  63274. +#define    OFLAGS(fflags)    ((fflags) - 1)
  63275. +
  63276. +/* bits to save after open */
  63277. +#define    FMASK        (FREAD|FWRITE|FAPPEND|FASYNC|FFSYNC|FNONBLOCK)
  63278. +/* bits settable by fcntl(F_SETFL, ...) */
  63279. +#define    FCNTLFLAGS    (FAPPEND|FASYNC|FFSYNC|FNONBLOCK)
  63280. +#endif
  63281. +
  63282. +/*
  63283. + * The O_* flags used to have only F* names, which were used in the kernel
  63284. + * and by fcntl.  We retain the F* names for the kernel f_flags field
  63285. + * and for backward compatibility for fcntl.
  63286. + */
  63287. +#ifndef _POSIX_SOURCE
  63288. +#define    FAPPEND        O_APPEND    /* kernel/compat */
  63289. +#define    FASYNC        O_ASYNC        /* kernel/compat */
  63290. +#define    FFSYNC        O_FSYNC        /* kernel */
  63291. +#define    FNONBLOCK    O_NONBLOCK    /* kernel */
  63292. +#define    FNDELAY        O_NONBLOCK    /* compat */
  63293. +#define    O_NDELAY    O_NONBLOCK    /* compat */
  63294. +#endif
  63295. +
  63296. +/*
  63297. + * Constants used for fcntl(2)
  63298. + */
  63299. +
  63300. +/* command values */
  63301. +#define    F_DUPFD        0        /* duplicate file descriptor */
  63302. +#define    F_GETFD        1        /* get file descriptor flags */
  63303. +#define    F_SETFD        2        /* set file descriptor flags */
  63304. +#define    F_GETFL        3        /* get file status flags */
  63305. +#define    F_SETFL        4        /* set file status flags */
  63306. +#ifndef _POSIX_SOURCE
  63307. +#define    F_GETOWN    5        /* get SIGIO/SIGURG proc/pgrp */
  63308. +#define F_SETOWN    6        /* set SIGIO/SIGURG proc/pgrp */
  63309. +#endif
  63310. +#define    F_GETLK        7        /* get record locking information */
  63311. +#define    F_SETLK        8        /* set record locking information */
  63312. +#define    F_SETLKW    9        /* F_SETLK; wait if blocked */
  63313. +
  63314. +/* file descriptor flags (F_GETFD, F_SETFD) */
  63315. +#define    FD_CLOEXEC    1        /* close-on-exec flag */
  63316. +
  63317. +/* record locking flags (F_GETLK, F_SETLK, F_SETLKW) */
  63318. +#define    F_RDLCK        1        /* shared or read lock */
  63319. +#define    F_UNLCK        2        /* unlock */
  63320. +#define    F_WRLCK        3        /* exclusive or write lock */
  63321. +#ifdef KERNEL
  63322. +#define    F_WAIT        0x010        /* Wait until lock is granted */
  63323. +#define    F_FLOCK        0x020         /* Use flock(2) semantics for lock */
  63324. +#define    F_POSIX        0x040         /* Use POSIX semantics for lock */
  63325. +#endif
  63326. +
  63327. +/*
  63328. + * Advisory file segment locking data type -
  63329. + * information passed to system by user
  63330. + */
  63331. +struct flock {
  63332. +    short    l_type;        /* lock type: read/write, etc. */
  63333. +    short    l_whence;    /* type of l_start */
  63334. +    off_t    l_start;    /* starting offset */
  63335. +    off_t    l_len;        /* len = 0 means until end of file */
  63336. +    pid_t    l_pid;        /* lock owner */
  63337. +};
  63338. +
  63339. +
  63340. +#ifndef _POSIX_SOURCE
  63341. +/* lock operations for flock(2) */
  63342. +#define    LOCK_SH        0x01        /* shared file lock */
  63343. +#define    LOCK_EX        0x02        /* exclusive file lock */
  63344. +#define    LOCK_NB        0x04        /* don't block when locking */
  63345. +#define    LOCK_UN        0x08        /* unlock file */
  63346. +#endif
  63347. +
  63348. +
  63349. +#ifndef KERNEL
  63350. +#include <sys/cdefs.h>
  63351. +
  63352. +__BEGIN_DECLS
  63353. +int    open __P((const char *, int, ...));
  63354. +int    creat __P((const char *, mode_t));
  63355. +int    fcntl __P((int, int, ...));
  63356. +#ifndef _POSIX_SOURCE
  63357. +int    flock __P((int, int));
  63358. +#endif /* !_POSIX_SOURCE */
  63359. +__END_DECLS
  63360. +#endif
  63361. +
  63362. +#ifdef AMIGA
  63363. +#define O_NO_CLOSE 0x100    /* An available value, means don't close
  63364. +                   underlying resource */
  63365. +/* Note: S_ISVTX (sticky) is mapped to the pure bit.
  63366. +         The amiga script bit is mapped to world execute ...
  63367. +     user S_IWRITE is the and of the amiga write & delete bits.
  63368. +     group S_IWRITE is the amiga write bit.
  63369. +     world S_IWRITE is the amiga delete bit.
  63370. +     We always set the archive bit off.
  63371. +*/
  63372. +#endif
  63373. +
  63374. +#endif /* !_FCNTL_H_ */
  63375. diff -rup --new-file baseline/fsf/emacs/unixlib/include/sys/file.h amiga/fsf/emacs/unixlib/include/sys/file.h
  63376. --- baseline/fsf/emacs/unixlib/include/sys/file.h    Wed Dec 31 17:00:00 1969
  63377. +++ amiga/fsf/emacs/unixlib/include/sys/file.h    Sat Sep 28 00:00:00 1996
  63378. @@ -0,0 +1,2 @@
  63379. +#include <fcntl.h>
  63380. +#include <sys/unistd.h>
  63381. diff -rup --new-file baseline/fsf/emacs/unixlib/include/sys/filio.h amiga/fsf/emacs/unixlib/include/sys/filio.h
  63382. --- baseline/fsf/emacs/unixlib/include/sys/filio.h    Wed Dec 31 17:00:00 1969
  63383. +++ amiga/fsf/emacs/unixlib/include/sys/filio.h    Sat Sep 28 00:00:00 1996
  63384. @@ -0,0 +1,3 @@
  63385. +#define FIONBIO 0        /* ioctl to change non blocking mode
  63386. +                   data (an int *) is a pointer a boolean,
  63387. +                   TRUE for non-blocking io */
  63388. diff -rup --new-file baseline/fsf/emacs/unixlib/include/sys/ioctl.h amiga/fsf/emacs/unixlib/include/sys/ioctl.h
  63389. --- baseline/fsf/emacs/unixlib/include/sys/ioctl.h    Wed Dec 31 17:00:00 1969
  63390. +++ amiga/fsf/emacs/unixlib/include/sys/ioctl.h    Sat Sep 28 00:00:00 1996
  63391. @@ -0,0 +1 @@
  63392. +#include <sys/termios.h>
  63393. diff -rup --new-file baseline/fsf/emacs/unixlib/include/sys/param.h amiga/fsf/emacs/unixlib/include/sys/param.h
  63394. --- baseline/fsf/emacs/unixlib/include/sys/param.h    Wed Dec 31 17:00:00 1969
  63395. +++ amiga/fsf/emacs/unixlib/include/sys/param.h    Sat Sep 28 00:00:00 1996
  63396. @@ -0,0 +1,11 @@
  63397. +#ifndef _PARAM_H
  63398. +#define _PARAM_H
  63399. +
  63400. +#define MAXPATHLEN 1024
  63401. +#define DEV_BSIZE 512
  63402. +
  63403. +#ifndef NULL
  63404. +#define NULL (0)
  63405. +#endif
  63406. +
  63407. +#endif
  63408. diff -rup --new-file baseline/fsf/emacs/unixlib/include/sys/socket.h amiga/fsf/emacs/unixlib/include/sys/socket.h
  63409. --- baseline/fsf/emacs/unixlib/include/sys/socket.h    Wed Dec 31 17:00:00 1969
  63410. +++ amiga/fsf/emacs/unixlib/include/sys/socket.h    Sat Sep 28 00:00:00 1996
  63411. @@ -0,0 +1,4 @@
  63412. +/* Support for socket pairs only */
  63413. +
  63414. +#define AF_UNIX 0
  63415. +#define SOCK_STREAM 0
  63416. diff -rup --new-file baseline/fsf/emacs/unixlib/include/sys/stat.h amiga/fsf/emacs/unixlib/include/sys/stat.h
  63417. --- baseline/fsf/emacs/unixlib/include/sys/stat.h    Wed Dec 31 17:00:00 1969
  63418. +++ amiga/fsf/emacs/unixlib/include/sys/stat.h    Sat Sep 28 00:00:00 1996
  63419. @@ -0,0 +1,133 @@
  63420. +#ifndef _STAT_H
  63421. +#define _STAT_H
  63422. +
  63423. +/*-
  63424. + * Copyright (c) 1982, 1986, 1989 The Regents of the University of California.
  63425. + * All rights reserved.
  63426. + *
  63427. + * Redistribution and use in source and binary forms, with or without
  63428. + * modification, are permitted provided that the following conditions
  63429. + * are met:
  63430. + * 1. Redistributions of source code must retain the above copyright
  63431. + *    notice, this list of conditions and the following disclaimer.
  63432. + * 2. Redistributions in binary form must reproduce the above copyright
  63433. + *    notice, this list of conditions and the following disclaimer in the
  63434. + *    documentation and/or other materials provided with the distribution.
  63435. + * 3. All advertising materials mentioning features or use of this software
  63436. + *    must display the following acknowledgement:
  63437. + *    This product includes software developed by the University of
  63438. + *    California, Berkeley and its contributors.
  63439. + * 4. Neither the name of the University nor the names of its contributors
  63440. + *    may be used to endorse or promote products derived from this software
  63441. + *    without specific prior written permission.
  63442. + *
  63443. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  63444. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  63445. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  63446. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  63447. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  63448. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  63449. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  63450. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  63451. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  63452. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  63453. + * SUCH DAMAGE.
  63454. + *
  63455. + *    @(#)stat.h    7.11 (Berkeley) 3/3/91
  63456. + */
  63457. +
  63458. +struct stat
  63459. +{
  63460. +    dev_t    st_dev;            /* inode's device */
  63461. +    ino_t    st_ino;            /* inode's number */
  63462. +    mode_t    st_mode;        /* inode protection mode */
  63463. +    nlink_t    st_nlink;        /* number of hard links */
  63464. +    uid_t    st_uid;            /* user ID of the file's owner */
  63465. +    gid_t    st_gid;            /* group ID of the file's group */
  63466. +    dev_t    st_rdev;        /* device type */
  63467. +    off_t    st_size;        /* file size, in bytes */
  63468. +    time_t    st_atime;        /* time of last access */
  63469. +    long    st_spare1;
  63470. +    time_t    st_mtime;        /* time of last data modification */
  63471. +    long    st_spare2;
  63472. +    time_t    st_ctime;        /* time of last file status change */
  63473. +    long    st_spare3;
  63474. +    long    st_blksize;        /* optimal blocksize for I/O */
  63475. +    long    st_blocks;        /* blocks allocated for file */
  63476. +    u_long    st_flags;        /* user defined flags for file */
  63477. +    u_long    st_gen;            /* file generation number */
  63478. +};
  63479. +
  63480. +#define    S_ISUID    0004000            /* set user id on execution */
  63481. +#define    S_ISGID    0002000            /* set group id on execution */
  63482. +#ifndef _POSIX_SOURCE
  63483. +#define    S_ISTXT    0001000            /* sticky bit */
  63484. +#endif
  63485. +
  63486. +#define    S_IRWXU    0000700            /* RWX mask for owner */
  63487. +#define    S_IRUSR    0000400            /* R for owner */
  63488. +#define    S_IWUSR    0000200            /* W for owner */
  63489. +#define    S_IXUSR    0000100            /* X for owner */
  63490. +
  63491. +#ifndef _POSIX_SOURCE
  63492. +#define    S_IREAD        S_IRUSR
  63493. +#define    S_IWRITE    S_IWUSR
  63494. +#define    S_IEXEC        S_IXUSR
  63495. +#endif
  63496. +
  63497. +#define    S_IRWXG    0000070            /* RWX mask for group */
  63498. +#define    S_IRGRP    0000040            /* R for group */
  63499. +#define    S_IWGRP    0000020            /* W for group */
  63500. +#define    S_IXGRP    0000010            /* X for group */
  63501. +
  63502. +#define    S_IRWXO    0000007            /* RWX mask for other */
  63503. +#define    S_IROTH    0000004            /* R for other */
  63504. +#define    S_IWOTH    0000002            /* W for other */
  63505. +#define    S_IXOTH    0000001            /* X for other */
  63506. +
  63507. +#ifndef _POSIX_SOURCE
  63508. +#define    S_IFMT     0170000        /* type of file */
  63509. +#define    S_IFIFO     0010000        /* named pipe (fifo) */
  63510. +#define    S_IFCHR     0020000        /* character special */
  63511. +#define    S_IFDIR     0040000        /* directory */
  63512. +#define    S_IFBLK     0060000        /* block special */
  63513. +#define    S_IFREG     0100000        /* regular */
  63514. +#define    S_IFLNK     0120000        /* symbolic link */
  63515. +#define    S_IFSOCK 0140000        /* socket */
  63516. +
  63517. +#define    S_ISVTX     0001000        /* save swapped text even after use */
  63518. +
  63519. +#define S_BLKSIZE    512        /* block size used in the stat struct */
  63520. +
  63521. +                    /* 0666 */
  63522. +#define    DEFFILEMODE    (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
  63523. +#endif
  63524. +
  63525. +#define    S_ISDIR(m)    ((m & 0170000) == 0040000)    /* directory */
  63526. +#define    S_ISCHR(m)    ((m & 0170000) == 0020000)    /* char special */
  63527. +#define    S_ISBLK(m)    ((m & 0170000) == 0060000)    /* block special */
  63528. +#define    S_ISREG(m)    ((m & 0170000) == 0100000)    /* regular file */
  63529. +#define    S_ISFIFO(m)    ((m & 0170000) == 0010000)    /* fifo */
  63530. +#ifndef _POSIX_SOURCE
  63531. +#define    S_ISLNK(m)    ((m & 0170000) == 0120000)    /* symbolic link */
  63532. +#define    S_ISSOCK(m)    ((m & 0170000) == 0140000)    /* socket */
  63533. +#endif
  63534. +
  63535. +#ifndef KERNEL
  63536. +#include <sys/cdefs.h>
  63537. +
  63538. +__BEGIN_DECLS
  63539. +mode_t    umask __P((mode_t));
  63540. +int    chmod __P((const char *, mode_t));
  63541. +int    fstat __P((int, struct stat *));
  63542. +int    mkdir __P((char *, mode_t));
  63543. +int    mkfifo __P((char *, mode_t));
  63544. +int    stat __P((char *, struct stat *));
  63545. +#ifndef _POSIX_SOURCE
  63546. +int    fchmod __P((int, mode_t));
  63547. +int    lstat __P((char *, struct stat *));
  63548. +#endif /* not POSIX */
  63549. +__END_DECLS
  63550. +#endif
  63551. +
  63552. +#endif
  63553. diff -rup --new-file baseline/fsf/emacs/unixlib/include/sys/termios.h amiga/fsf/emacs/unixlib/include/sys/termios.h
  63554. --- baseline/fsf/emacs/unixlib/include/sys/termios.h    Wed Dec 31 17:00:00 1969
  63555. +++ amiga/fsf/emacs/unixlib/include/sys/termios.h    Sat Sep 28 00:00:00 1996
  63556. @@ -0,0 +1,15 @@
  63557. +#ifndef _TERMIOS_H
  63558. +#define _TERMIOS_H
  63559. +
  63560. +struct winsize {
  63561. +  unsigned short ws_row;    /* rows, in characters */
  63562. +  unsigned short ws_col;    /* columns, in characters */
  63563. +  unsigned short ws_xpixel;    /* horizontal size, pixels - not used */
  63564. +  unsigned short ws_ypixel;    /* vertical size, pixels - not used */
  63565. +};
  63566. +
  63567. +#define _TERMIO_IOCTL_BASE 1024
  63568. +
  63569. +#define TIOCGWINSZ (_TERMIO_IOCTL_BASE + 0)
  63570. +
  63571. +#endif
  63572. diff -rup --new-file baseline/fsf/emacs/unixlib/include/sys/time.h amiga/fsf/emacs/unixlib/include/sys/time.h
  63573. --- baseline/fsf/emacs/unixlib/include/sys/time.h    Wed Dec 31 17:00:00 1969
  63574. +++ amiga/fsf/emacs/unixlib/include/sys/time.h    Sat Sep 28 00:00:00 1996
  63575. @@ -0,0 +1,90 @@
  63576. +/*
  63577. + * Copyright (c) 1982, 1986 The Regents of the University of California.
  63578. + * All rights reserved.
  63579. + *
  63580. + * Redistribution and use in source and binary forms, with or without
  63581. + * modification, are permitted provided that the following conditions
  63582. + * are met:
  63583. + * 1. Redistributions of source code must retain the above copyright
  63584. + *    notice, this list of conditions and the following disclaimer.
  63585. + * 2. Redistributions in binary form must reproduce the above copyright
  63586. + *    notice, this list of conditions and the following disclaimer in the
  63587. + *    documentation and/or other materials provided with the distribution.
  63588. + * 3. All advertising materials mentioning features or use of this software
  63589. + *    must display the following acknowledgement:
  63590. + *    This product includes software developed by the University of
  63591. + *    California, Berkeley and its contributors.
  63592. + * 4. Neither the name of the University nor the names of its contributors
  63593. + *    may be used to endorse or promote products derived from this software
  63594. + *    without specific prior written permission.
  63595. + *
  63596. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  63597. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  63598. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  63599. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  63600. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  63601. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  63602. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  63603. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  63604. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  63605. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  63606. + * SUCH DAMAGE.
  63607. + *
  63608. + *    @(#)time.h    7.6 (Berkeley) 2/22/91
  63609. + */
  63610. +
  63611. +#ifndef _SYS_TIME_H_
  63612. +#define _SYS_TIME_H_
  63613. +
  63614. +/*
  63615. + * Structure returned by gettimeofday(2) system call,
  63616. + * and used in other calls.
  63617. + */
  63618. +/* This defines a struct timeval, with basically equivalent fields. So we use it */
  63619. +#undef LONGBITS            /* This is for emacs's sake */
  63620. +#include <devices/timer.h>
  63621. +#undef LONGBITS
  63622. +/* But we need these defines */
  63623. +#define tv_sec tv_secs
  63624. +#define tv_usec tv_micro
  63625. +
  63626. +struct timezone {
  63627. +    int    tz_minuteswest;    /* minutes west of Greenwich */
  63628. +    int    tz_dsttime;    /* type of dst correction */
  63629. +};
  63630. +#define    DST_NONE    0    /* not on dst */
  63631. +#define    DST_USA        1    /* USA style dst */
  63632. +#define    DST_AUST    2    /* Australian style dst */
  63633. +#define    DST_WET        3    /* Western European dst */
  63634. +#define    DST_MET        4    /* Middle European dst */
  63635. +#define    DST_EET        5    /* Eastern European dst */
  63636. +#define    DST_CAN        6    /* Canada */
  63637. +
  63638. +/*
  63639. + * Operations on timevals.
  63640. + *
  63641. + * NB: timercmp does not work for >= or <=.
  63642. + */
  63643. +#define    timerisset(tvp)        ((tvp)->tv_sec || (tvp)->tv_usec)
  63644. +#define    timercmp(tvp, uvp, cmp)    \
  63645. +    ((tvp)->tv_sec cmp (uvp)->tv_sec || \
  63646. +     (tvp)->tv_sec == (uvp)->tv_sec && (tvp)->tv_usec cmp (uvp)->tv_usec)
  63647. +#define    timerclear(tvp)        (tvp)->tv_sec = (tvp)->tv_usec = 0
  63648. +
  63649. +#ifndef KERNEL
  63650. +#include <time.h>
  63651. +
  63652. +#ifndef _POSIX_SOURCE
  63653. +#include <sys/cdefs.h>
  63654. +
  63655. +__BEGIN_DECLS
  63656. +int    adjtime __P((const struct timeval *, struct timeval *));
  63657. +int    gettimeofday __P((struct timeval *, struct timezone *));
  63658. +int    settimeofday __P((const struct timeval *, const struct timezone *));
  63659. +int    utimes __P((const char *, const struct timeval *));
  63660. +__END_DECLS
  63661. +#endif /* !POSIX */
  63662. +
  63663. +#endif /* !KERNEL */
  63664. +
  63665. +#endif /* !_SYS_TIME_H_ */
  63666. diff -rup --new-file baseline/fsf/emacs/unixlib/include/sys/timeb.h amiga/fsf/emacs/unixlib/include/sys/timeb.h
  63667. --- baseline/fsf/emacs/unixlib/include/sys/timeb.h    Wed Dec 31 17:00:00 1969
  63668. +++ amiga/fsf/emacs/unixlib/include/sys/timeb.h    Sat Sep 28 00:00:00 1996
  63669. @@ -0,0 +1,12 @@
  63670. +#ifndef _TIMEB_H
  63671. +#define _TIMEB_H
  63672. +
  63673. +struct timeb
  63674. +{
  63675. +  time_t   time;
  63676. +  unsigned short millitm;
  63677. +  short    timezone;
  63678. +  short    dstflag;
  63679. +};
  63680. +
  63681. +#endif
  63682. diff -rup --new-file baseline/fsf/emacs/unixlib/include/sys/types.h amiga/fsf/emacs/unixlib/include/sys/types.h
  63683. --- baseline/fsf/emacs/unixlib/include/sys/types.h    Wed Dec 31 17:00:00 1969
  63684. +++ amiga/fsf/emacs/unixlib/include/sys/types.h    Sat Sep 28 00:00:00 1996
  63685. @@ -0,0 +1,90 @@
  63686. +/*-
  63687. + * Copyright (c) 1982, 1986, 1991 The Regents of the University of California.
  63688. + * All rights reserved.
  63689. + *
  63690. + * Redistribution and use in source and binary forms, with or without
  63691. + * modification, are permitted provided that the following conditions
  63692. + * are met:
  63693. + * 1. Redistributions of source code must retain the above copyright
  63694. + *    notice, this list of conditions and the following disclaimer.
  63695. + * 2. Redistributions in binary form must reproduce the above copyright
  63696. + *    notice, this list of conditions and the following disclaimer in the
  63697. + *    documentation and/or other materials provided with the distribution.
  63698. + * 3. All advertising materials mentioning features or use of this software
  63699. + *    must display the following acknowledgement:
  63700. + *    This product includes software developed by the University of
  63701. + *    California, Berkeley and its contributors.
  63702. + * 4. Neither the name of the University nor the names of its contributors
  63703. + *    may be used to endorse or promote products derived from this software
  63704. + *    without specific prior written permission.
  63705. + *
  63706. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  63707. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  63708. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  63709. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  63710. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  63711. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  63712. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  63713. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  63714. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  63715. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  63716. + * SUCH DAMAGE.
  63717. + *
  63718. + *    @(#)types.h    7.17 (Berkeley) 5/6/91
  63719. + */
  63720. +
  63721. +#ifndef _TYPES_H_
  63722. +#define    _TYPES_H_
  63723. +
  63724. +typedef    unsigned char    u_char;
  63725. +typedef    unsigned short    u_short;
  63726. +typedef    unsigned int    u_int;
  63727. +typedef    unsigned long    u_long;
  63728. +typedef    unsigned short    ushort;        /* Sys V compatibility */
  63729. +
  63730. +typedef    char *    caddr_t;        /* core address */
  63731. +typedef    long    daddr_t;        /* disk address */
  63732. +typedef    long    dev_t;            /* device number */
  63733. +typedef    u_long    ino_t;            /* inode number */
  63734. +typedef    long    off_t;            /* file offset (should be a quad) */
  63735. +typedef    u_short    nlink_t;        /* link count */
  63736. +typedef    long    swblk_t;        /* swap offset */
  63737. +typedef    long    segsz_t;        /* segment size */
  63738. +typedef    u_short    uid_t;            /* user id */
  63739. +typedef    u_short    gid_t;            /* group id */
  63740. +typedef    int    pid_t;            /* process id */
  63741. +typedef    int    mode_t;            /* permissions */
  63742. +typedef u_long    fixpt_t;        /* fixed point number */
  63743. +
  63744. +#ifndef _POSIX_SOURCE
  63745. +typedef    struct    _uquad    { u_long val[2]; } u_quad;
  63746. +typedef    struct    _quad    {   long val[2]; } quad;
  63747. +typedef    long *    qaddr_t;    /* should be typedef quad * qaddr_t; */
  63748. +
  63749. +#define    major(x)    ((int)(((u_int)(x) >> 8)&0xff))    /* major number */
  63750. +#define    minor(x)    ((int)((x)&0xff))        /* minor number */
  63751. +#define    makedev(x,y)    ((dev_t)(((x)<<8) | (y)))    /* create dev_t */
  63752. +#endif
  63753. +
  63754. +typedef    long clock_t;
  63755. +typedef long time_t;
  63756. +#ifndef _SIZE_T
  63757. +#define _SIZE_T
  63758. +typedef    unsigned int size_t;
  63759. +#endif
  63760. +
  63761. +#ifndef _POSIX_SOURCE
  63762. +/*
  63763. + * My implementation only allows 32 fds in select.
  63764. + */
  63765. +#define    FD_SETSIZE    32
  63766. +
  63767. +typedef    long fd_set;
  63768. +
  63769. +#define    FD_SET(n, p)    (*(p) |= (1 << (n)))
  63770. +#define    FD_CLR(n, p)    (*(p) &= ~(1 << (n)))
  63771. +#define    FD_ISSET(n, p)    (*(p) & (1 << (n)))
  63772. +#define    FD_ZERO(p)    bzero((char *)(p), sizeof(*(p)))
  63773. +
  63774. +#endif /* !_POSIX_SOURCE */
  63775. +#endif /* !_TYPES_H_ */
  63776. diff -rup --new-file baseline/fsf/emacs/unixlib/include/sys/unistd.h amiga/fsf/emacs/unixlib/include/sys/unistd.h
  63777. --- baseline/fsf/emacs/unixlib/include/sys/unistd.h    Wed Dec 31 17:00:00 1969
  63778. +++ amiga/fsf/emacs/unixlib/include/sys/unistd.h    Sat Sep 28 00:00:00 1996
  63779. @@ -0,0 +1,61 @@
  63780. +/*
  63781. + * Copyright (c) 1989 The Regents of the University of California.
  63782. + * All rights reserved.
  63783. + *
  63784. + * Redistribution and use in source and binary forms, with or without
  63785. + * modification, are permitted provided that the following conditions
  63786. + * are met:
  63787. + * 1. Redistributions of source code must retain the above copyright
  63788. + *    notice, this list of conditions and the following disclaimer.
  63789. + * 2. Redistributions in binary form must reproduce the above copyright
  63790. + *    notice, this list of conditions and the following disclaimer in the
  63791. + *    documentation and/or other materials provided with the distribution.
  63792. + * 3. All advertising materials mentioning features or use of this software
  63793. + *    must display the following acknowledgement:
  63794. + *    This product includes software developed by the University of
  63795. + *    California, Berkeley and its contributors.
  63796. + * 4. Neither the name of the University nor the names of its contributors
  63797. + *    may be used to endorse or promote products derived from this software
  63798. + *    without specific prior written permission.
  63799. + *
  63800. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  63801. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  63802. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  63803. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  63804. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  63805. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  63806. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  63807. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  63808. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  63809. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  63810. + * SUCH DAMAGE.
  63811. + *
  63812. + *    @(#)unistd.h    5.14 (Berkeley) 4/1/91
  63813. + */
  63814. +
  63815. +#ifndef _SYS_UNISTD_H_
  63816. +#define    _SYS_UNISTD_H_
  63817. +
  63818. +/* compile-time symbolic constants */
  63819. +
  63820. +/* access function */
  63821. +#ifndef F_OK
  63822. +#define    F_OK        0    /* test for existence of file */
  63823. +#define    X_OK        0x01    /* test for execute or search permission */
  63824. +#define    W_OK        0x02    /* test for write permission */
  63825. +#define    R_OK        0x04    /* test for read permission */
  63826. +#endif
  63827. +
  63828. +/* whence values for lseek(2) */
  63829. +#define    SEEK_SET    0    /* set file offset to offset */
  63830. +#define    SEEK_CUR    1    /* set file offset to current plus offset */
  63831. +#define    SEEK_END    2    /* set file offset to EOF plus offset */
  63832. +
  63833. +#ifndef _POSIX_SOURCE
  63834. +/* whence values for lseek(2); renamed by POSIX 1003.1 */
  63835. +#define    L_SET        SEEK_SET
  63836. +#define    L_INCR        SEEK_CUR
  63837. +#define    L_XTND        SEEK_END
  63838. +#endif
  63839. +
  63840. +#endif /* !_SYS_UNISTD_H_ */
  63841. diff -rup --new-file baseline/fsf/emacs/unixlib/include/sys/vlimit.h amiga/fsf/emacs/unixlib/include/sys/vlimit.h
  63842. --- baseline/fsf/emacs/unixlib/include/sys/vlimit.h    Wed Dec 31 17:00:00 1969
  63843. +++ amiga/fsf/emacs/unixlib/include/sys/vlimit.h    Sat Sep 28 00:00:00 1996
  63844. @@ -0,0 +1,2 @@
  63845. +/* Dummy for Emacs so that we can run on VMS... */
  63846. +#define LIM_DATA 0
  63847. diff -rup --new-file baseline/fsf/emacs/unixlib/include/sys/wait.h amiga/fsf/emacs/unixlib/include/sys/wait.h
  63848. --- baseline/fsf/emacs/unixlib/include/sys/wait.h    Wed Dec 31 17:00:00 1969
  63849. +++ amiga/fsf/emacs/unixlib/include/sys/wait.h    Sat Sep 28 00:00:00 1996
  63850. @@ -0,0 +1,82 @@
  63851. +/*
  63852. + * Copyright (c) 1982, 1986, 1989 The Regents of the University of California.
  63853. + * All rights reserved.
  63854. + *
  63855. + * Redistribution and use in source and binary forms, with or without
  63856. + * modification, are permitted provided that the following conditions
  63857. + * are met:
  63858. + * 1. Redistributions of source code must retain the above copyright
  63859. + *    notice, this list of conditions and the following disclaimer.
  63860. + * 2. Redistributions in binary form must reproduce the above copyright
  63861. + *    notice, this list of conditions and the following disclaimer in the
  63862. + *    documentation and/or other materials provided with the distribution.
  63863. + * 3. All advertising materials mentioning features or use of this software
  63864. + *    must display the following acknowledgement:
  63865. + *    This product includes software developed by the University of
  63866. + *    California, Berkeley and its contributors.
  63867. + * 4. Neither the name of the University nor the names of its contributors
  63868. + *    may be used to endorse or promote products derived from this software
  63869. + *    without specific prior written permission.
  63870. + *
  63871. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  63872. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  63873. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  63874. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  63875. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  63876. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  63877. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  63878. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  63879. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  63880. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  63881. + * SUCH DAMAGE.
  63882. + *
  63883. + *    @(#)wait.h    7.17 (Berkeley) 6/19/91
  63884. + */
  63885. +
  63886. +/*
  63887. + * This file holds definitions relevent to the wait4 system call
  63888. + * and the alternate interfaces that use it (wait, wait3, waitpid).
  63889. + */
  63890. +
  63891. +/*
  63892. + * Macros to test the exit status returned by wait
  63893. + * and extract the relevant values.
  63894. + */
  63895. +#define    _W_INT(i)    (i)
  63896. +
  63897. +#define    _WSTATUS(x)    (_W_INT(x) & 0177)
  63898. +#define    _WSTOPPED    0177        /* _WSTATUS if process is stopped */
  63899. +#define WIFSTOPPED(x)    (_WSTATUS(x) == _WSTOPPED)
  63900. +#define WSTOPSIG(x)    (_W_INT(x) >> 8)
  63901. +#define WIFSIGNALED(x)    (_WSTATUS(x) != _WSTOPPED && _WSTATUS(x) != 0)
  63902. +#define WTERMSIG(x)    (_WSTATUS(x))
  63903. +#define WIFEXITED(x)    (_WSTATUS(x) == 0)
  63904. +#define WEXITSTATUS(x)    (_W_INT(x) >> 8)
  63905. +#define    W_EXITCODE(ret, sig)    ((ret) << 8 | (sig))
  63906. +#define    W_STOPCODE(sig)        ((sig) << 8 | _WSTOPPED)
  63907. +
  63908. +/*
  63909. + * Option bits for the second argument of wait4.  WNOHANG causes the
  63910. + * wait to not hang if there are no stopped or terminated processes, rather
  63911. + * returning an error indication in this case (pid==0).  WUNTRACED
  63912. + * indicates that the caller should receive status about untraced children
  63913. + * which stop due to signals.  If children are stopped and a wait without
  63914. + * this option is done, it is as though they were still running... nothing
  63915. + * about them is returned.
  63916. + */
  63917. +#define WNOHANG        1    /* dont hang in wait */
  63918. +#define WUNTRACED    2    /* tell about stopped, untraced children */
  63919. +
  63920. +#ifndef KERNEL
  63921. +#include <sys/types.h>
  63922. +#include <sys/cdefs.h>
  63923. +
  63924. +__BEGIN_DECLS
  63925. +struct rusage;    /* forward declaration */
  63926. +
  63927. +pid_t    wait __P((int *));
  63928. +pid_t    waitpid __P((pid_t, int *, int));
  63929. +pid_t    wait3 __P((int *, int, struct rusage *));
  63930. +pid_t    wait4 __P((pid_t, int *, int, struct rusage *));
  63931. +__END_DECLS
  63932. +#endif
  63933. diff -rup --new-file baseline/fsf/emacs/unixlib/include/time.h amiga/fsf/emacs/unixlib/include/time.h
  63934. --- baseline/fsf/emacs/unixlib/include/time.h    Wed Dec 31 17:00:00 1969
  63935. +++ amiga/fsf/emacs/unixlib/include/time.h    Sat Sep 28 00:00:00 1996
  63936. @@ -0,0 +1,78 @@
  63937. +/*
  63938. + * Copyright (c) 1989 The Regents of the University of California.
  63939. + * All rights reserved.
  63940. + *
  63941. + * Redistribution and use in source and binary forms, with or without
  63942. + * modification, are permitted provided that the following conditions
  63943. + * are met:
  63944. + * 1. Redistributions of source code must retain the above copyright
  63945. + *    notice, this list of conditions and the following disclaimer.
  63946. + * 2. Redistributions in binary form must reproduce the above copyright
  63947. + *    notice, this list of conditions and the following disclaimer in the
  63948. + *    documentation and/or other materials provided with the distribution.
  63949. + * 3. All advertising materials mentioning features or use of this software
  63950. + *    must display the following acknowledgement:
  63951. + *    This product includes software developed by the University of
  63952. + *    California, Berkeley and its contributors.
  63953. + * 4. Neither the name of the University nor the names of its contributors
  63954. + *    may be used to endorse or promote products derived from this software
  63955. + *    without specific prior written permission.
  63956. + *
  63957. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  63958. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  63959. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  63960. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  63961. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  63962. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  63963. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  63964. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  63965. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  63966. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  63967. + * SUCH DAMAGE.
  63968. + *
  63969. + *    @(#)time.h    5.12 (Berkeley) 3/9/91
  63970. + */
  63971. +
  63972. +#ifndef _TIME_H_
  63973. +#define    _TIME_H_
  63974. +
  63975. +#include <sys/types.h>
  63976. +
  63977. +struct tm {
  63978. +    int    tm_sec;        /* seconds after the minute [0-60] */
  63979. +    int    tm_min;        /* minutes after the hour [0-59] */
  63980. +    int    tm_hour;    /* hours since midnight [0-23] */
  63981. +    int    tm_mday;    /* day of the month [1-31] */
  63982. +    int    tm_mon;        /* months since January [0-11] */
  63983. +    int    tm_year;    /* years since 1900 */
  63984. +    int    tm_wday;    /* days since Sunday [0-6] */
  63985. +    int    tm_yday;    /* days since January 1 [0-365] */
  63986. +    int    tm_isdst;    /* Daylight Savings Time flag */
  63987. +    long    tm_gmtoff;    /* offset from CUT in seconds */
  63988. +    char    *tm_zone;    /* timezone abbreviation */
  63989. +};
  63990. +
  63991. +#include <sys/cdefs.h>
  63992. +
  63993. +__BEGIN_DECLS
  63994. +char *asctime __P((const struct tm *));
  63995. +clock_t clock __P((void));
  63996. +char *ctime __P((const time_t *));
  63997. +double difftime __P((time_t, time_t));
  63998. +struct tm *gmtime __P((const time_t *));
  63999. +struct tm *localtime __P((const time_t *));
  64000. +time_t mktime __P((struct tm *));
  64001. +size_t strftime __P((char *, size_t, const char *, const struct tm *));
  64002. +time_t time __P((time_t *));
  64003. +
  64004. +#ifndef _ANSI_SOURCE
  64005. +void tzset __P((void));
  64006. +#endif /* not ANSI */
  64007. +
  64008. +#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
  64009. +/*char *timezone __P((int, int));*/
  64010. +void tzsetwall __P((void));
  64011. +#endif /* neither ANSI nor POSIX */
  64012. +__END_DECLS
  64013. +
  64014. +#endif /* !_TIME_H_ */
  64015. diff -rup --new-file baseline/fsf/emacs/unixlib/include/tzfile.h amiga/fsf/emacs/unixlib/include/tzfile.h
  64016. --- baseline/fsf/emacs/unixlib/include/tzfile.h    Wed Dec 31 17:00:00 1969
  64017. +++ amiga/fsf/emacs/unixlib/include/tzfile.h    Sat Sep 28 00:00:00 1996
  64018. @@ -0,0 +1,151 @@
  64019. +/*
  64020. + * Copyright (c) 1988 Regents of the University of California.
  64021. + * All rights reserved.
  64022. + *
  64023. + * This code is derived from software contributed to Berkeley by
  64024. + * Arthur David Olson of the National Cancer Institute.
  64025. + *
  64026. + * Redistribution and use in source and binary forms, with or without
  64027. + * modification, are permitted provided that the following conditions
  64028. + * are met:
  64029. + * 1. Redistributions of source code must retain the above copyright
  64030. + *    notice, this list of conditions and the following disclaimer.
  64031. + * 2. Redistributions in binary form must reproduce the above copyright
  64032. + *    notice, this list of conditions and the following disclaimer in the
  64033. + *    documentation and/or other materials provided with the distribution.
  64034. + * 3. All advertising materials mentioning features or use of this software
  64035. + *    must display the following acknowledgement:
  64036. + *    This product includes software developed by the University of
  64037. + *    California, Berkeley and its contributors.
  64038. + * 4. Neither the name of the University nor the names of its contributors
  64039. + *    may be used to endorse or promote products derived from this software
  64040. + *    without specific prior written permission.
  64041. + *
  64042. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  64043. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  64044. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  64045. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  64046. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  64047. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  64048. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  64049. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  64050. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  64051. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  64052. + * SUCH DAMAGE.
  64053. + *
  64054. + *    @(#)tzfile.h    5.10 (Berkeley) 4/3/91
  64055. + */
  64056. +
  64057. +#ifndef _TZFILE_H_
  64058. +#define    _TZFILE_H_
  64059. +
  64060. +/*
  64061. + * Information about time zone files.
  64062. + */
  64063. +            /* Time zone object file directory */
  64064. +#define TZDIR        "s:zoneinfo"
  64065. +#define TZDEFAULT    "s:localtime"
  64066. +#define TZDEFRULES    "posixrules"
  64067. +
  64068. +/*
  64069. +** Each file begins with. . .
  64070. +*/
  64071. +
  64072. +struct tzhead {
  64073. +    char    tzh_reserved[24];    /* reserved for future use */
  64074. +    char    tzh_ttisstdcnt[4];    /* coded number of trans. time flags */
  64075. +    char    tzh_leapcnt[4];        /* coded number of leap seconds */
  64076. +    char    tzh_timecnt[4];        /* coded number of transition times */
  64077. +    char    tzh_typecnt[4];        /* coded number of local time types */
  64078. +    char    tzh_charcnt[4];        /* coded number of abbr. chars */
  64079. +};
  64080. +
  64081. +/*
  64082. +** . . .followed by. . .
  64083. +**
  64084. +**    tzh_timecnt (char [4])s        coded transition times a la time(2)
  64085. +**    tzh_timecnt (unsigned char)s    types of local time starting at above
  64086. +**    tzh_typecnt repetitions of
  64087. +**        one (char [4])        coded GMT offset in seconds
  64088. +**        one (unsigned char)    used to set tm_isdst
  64089. +**        one (unsigned char)    that's an abbreviation list index
  64090. +**    tzh_charcnt (char)s        '\0'-terminated zone abbreviations
  64091. +**    tzh_leapcnt repetitions of
  64092. +**        one (char [4])        coded leap second transition times
  64093. +**        one (char [4])        total correction after above
  64094. +**    tzh_ttisstdcnt (char)s        indexed by type; if TRUE, transition
  64095. +**                    time is standard time, if FALSE,
  64096. +**                    transition time is wall clock time
  64097. +**                    if absent, transition times are
  64098. +**                    assumed to be wall clock time
  64099. +*/
  64100. +
  64101. +/*
  64102. +** In the current implementation, "tzset()" refuses to deal with files that
  64103. +** exceed any of the limits below.
  64104. +*/
  64105. +
  64106. +/*
  64107. +** The TZ_MAX_TIMES value below is enough to handle a bit more than a
  64108. +** year's worth of solar time (corrected daily to the nearest second) or
  64109. +** 138 years of Pacific Presidential Election time
  64110. +** (where there are three time zone transitions every fourth year).
  64111. +*/
  64112. +#define TZ_MAX_TIMES    370
  64113. +
  64114. +#define NOSOLAR            /* 4BSD doesn't currently handle solar time */
  64115. +
  64116. +#ifndef NOSOLAR
  64117. +#define TZ_MAX_TYPES    256    /* Limited by what (unsigned char)'s can hold */
  64118. +#else
  64119. +#define TZ_MAX_TYPES    10    /* Maximum number of local time types */
  64120. +#endif
  64121. +
  64122. +#define TZ_MAX_CHARS    50    /* Maximum number of abbreviation characters */
  64123. +
  64124. +#define    TZ_MAX_LEAPS    50    /* Maximum number of leap second corrections */
  64125. +
  64126. +#define SECSPERMIN    60
  64127. +#define MINSPERHOUR    60
  64128. +#define HOURSPERDAY    24
  64129. +#define DAYSPERWEEK    7
  64130. +#define DAYSPERNYEAR    365
  64131. +#define DAYSPERLYEAR    366
  64132. +#define SECSPERHOUR    (SECSPERMIN * MINSPERHOUR)
  64133. +#define SECSPERDAY    ((long) SECSPERHOUR * HOURSPERDAY)
  64134. +#define MONSPERYEAR    12
  64135. +
  64136. +#define TM_SUNDAY    0
  64137. +#define TM_MONDAY    1
  64138. +#define TM_TUESDAY    2
  64139. +#define TM_WEDNESDAY    3
  64140. +#define TM_THURSDAY    4
  64141. +#define TM_FRIDAY    5
  64142. +#define TM_SATURDAY    6
  64143. +
  64144. +#define TM_JANUARY    0
  64145. +#define TM_FEBRUARY    1
  64146. +#define TM_MARCH    2
  64147. +#define TM_APRIL    3
  64148. +#define TM_MAY        4
  64149. +#define TM_JUNE        5
  64150. +#define TM_JULY        6
  64151. +#define TM_AUGUST    7
  64152. +#define TM_SEPTEMBER    8
  64153. +#define TM_OCTOBER    9
  64154. +#define TM_NOVEMBER    10
  64155. +#define TM_DECEMBER    11
  64156. +
  64157. +#define TM_YEAR_BASE    1900
  64158. +
  64159. +#define EPOCH_YEAR    1970
  64160. +#define EPOCH_WDAY    TM_THURSDAY
  64161. +
  64162. +/*
  64163. +** Accurate only for the past couple of centuries;
  64164. +** that will probably do.
  64165. +*/
  64166. +
  64167. +#define isleap(y) (((y) % 4) == 0 && ((y) % 100) != 0 || ((y) % 400) == 0)
  64168. +
  64169. +#endif /* !_TZFILE_H_ */
  64170. diff -rup --new-file baseline/fsf/emacs/unixlib/include/unistd.h amiga/fsf/emacs/unixlib/include/unistd.h
  64171. --- baseline/fsf/emacs/unixlib/include/unistd.h    Wed Dec 31 17:00:00 1969
  64172. +++ amiga/fsf/emacs/unixlib/include/unistd.h    Sat Sep 28 00:00:00 1996
  64173. @@ -0,0 +1,178 @@
  64174. +/*-
  64175. + * Copyright (c) 1991 The Regents of the University of California.
  64176. + * All rights reserved.
  64177. + *
  64178. + * Redistribution and use in source and binary forms, with or without
  64179. + * modification, are permitted provided that the following conditions
  64180. + * are met:
  64181. + * 1. Redistributions of source code must retain the above copyright
  64182. + *    notice, this list of conditions and the following disclaimer.
  64183. + * 2. Redistributions in binary form must reproduce the above copyright
  64184. + *    notice, this list of conditions and the following disclaimer in the
  64185. + *    documentation and/or other materials provided with the distribution.
  64186. + * 3. All advertising materials mentioning features or use of this software
  64187. + *    must display the following acknowledgement:
  64188. + *    This product includes software developed by the University of
  64189. + *    California, Berkeley and its contributors.
  64190. + * 4. Neither the name of the University nor the names of its contributors
  64191. + *    may be used to endorse or promote products derived from this software
  64192. + *    without specific prior written permission.
  64193. + *
  64194. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  64195. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  64196. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  64197. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  64198. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  64199. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  64200. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  64201. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  64202. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  64203. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  64204. + * SUCH DAMAGE.
  64205. + *
  64206. + *    @(#)unistd.h    5.13 (Berkeley) 6/17/91
  64207. + */
  64208. +
  64209. +#ifndef _UNISTD_H_
  64210. +#define    _UNISTD_H_
  64211. +
  64212. +#include <sys/cdefs.h>
  64213. +#include <sys/types.h>
  64214. +#include <sys/unistd.h>
  64215. +
  64216. +#define     STDIN_FILENO    0    /* standard input file descriptor */
  64217. +#define    STDOUT_FILENO    1    /* standard output file descriptor */
  64218. +#define    STDERR_FILENO    2    /* standard error file descriptor */
  64219. +
  64220. +#ifndef NULL
  64221. +#define    NULL        0    /* null pointer constant */
  64222. +#endif
  64223. +
  64224. +typedef    int ssize_t;        /* count of bytes or error indication */
  64225. +
  64226. +__BEGIN_DECLS
  64227. +void     _exit __P((int));
  64228. +int     access __P((const char *, int));
  64229. +u_int     alarm __P((u_int));
  64230. +int     chdir __P((const char *));
  64231. +int     chown __P((const char *, uid_t, gid_t));
  64232. +int     close __P((int));
  64233. +char    *cuserid __P((char *));
  64234. +int     dup __P((int));
  64235. +int     dup2 __P((int, int));
  64236. +int     execl __P((const char *, const char *, ...));
  64237. +int     execle __P((const char *, const char *, ...));
  64238. +int     execlp __P((const char *, const char *, ...));
  64239. +int     execv __P((const char *, char * const *));
  64240. +int     execve __P((const char *, char * const *, char * const *));
  64241. +int     execvp __P((const char *, char * const *));
  64242. +pid_t     fork __P((void));
  64243. +long     fpathconf __P((int, int));        /* not yet */
  64244. +char    *getcwd __P((const char *, int));
  64245. +gid_t     getegid __P((void));
  64246. +uid_t     geteuid __P((void));
  64247. +gid_t     getgid __P((void));
  64248. +int     getgroups __P((int, int *));        /* XXX (gid_t *) */
  64249. +char    *getlogin __P((void));
  64250. +pid_t     getpgrp __P((void));
  64251. +pid_t     getpid __P((void));
  64252. +pid_t     getppid __P((void));
  64253. +uid_t     getuid __P((void));
  64254. +int     isatty __P((int));
  64255. +int     link __P((const char *, const char *));
  64256. +off_t     lseek __P((int, off_t, int));
  64257. +long     pathconf __P((const char *, int));    /* not yet */
  64258. +int     pause __P((void));
  64259. +int     pipe __P((int *));
  64260. +ssize_t     read __P((int, void *, size_t));
  64261. +int     rmdir __P((const char *));
  64262. +int     setgid __P((gid_t));
  64263. +int     setpgid __P((pid_t, pid_t));
  64264. +pid_t     setsid __P((void));
  64265. +int     setuid __P((uid_t));
  64266. +u_int     sleep __P((u_int));
  64267. +long     sysconf __P((int));            /* not yet */
  64268. +pid_t     tcgetpgrp __P((int));
  64269. +int     tcsetpgrp __P((int, pid_t));
  64270. +char    *ttyname __P((int));
  64271. +int     unlink __P((const char *));
  64272. +ssize_t     write __P((int, const void *, size_t));
  64273. +
  64274. +#ifndef    _POSIX_SOURCE
  64275. +
  64276. +/* structure timeval required for select() */
  64277. +#include <sys/time.h>
  64278. +
  64279. +int     acct __P((const char *));
  64280. +int     async_daemon __P((void));
  64281. +char    *brk __P((const char *));
  64282. +int     chflags __P((const char *, long));
  64283. +int     chroot __P((const char *));
  64284. +char    *crypt __P((const char *, const char *));
  64285. +int     des_cipher __P((const char *, char *, long, int));
  64286. +int     des_setkey __P((const char *key));
  64287. +int     encrypt __P((char *, int));
  64288. +void     endusershell __P((void));
  64289. +int     exect __P((const char *, char * const *, char * const *));
  64290. +int     fchdir __P((int));
  64291. +int     fchflags __P((int, long));
  64292. +int     fchown __P((int, int, int));
  64293. +int     fnmatch __P((const char *, const char *, int));
  64294. +int     fsync __P((int));
  64295. +int     ftruncate __P((int, off_t));
  64296. +int     getdtablesize __P((void));
  64297. +long     gethostid __P((void));
  64298. +int     gethostname __P((char *, int));
  64299. +mode_t     getmode __P((const void *, mode_t));
  64300. +int     getpagesize __P((void));
  64301. +char    *getpass __P((const char *));
  64302. +char    *getusershell __P((void));
  64303. +char    *getwd __P((char *));            /* obsoleted by getcwd() */
  64304. +int     initgroups __P((const char *, int));
  64305. +int     mknod __P((const char *, mode_t, dev_t));
  64306. +int     mkstemp __P((char *));
  64307. +char    *mktemp __P((char *));
  64308. +int     nfssvc __P((int));
  64309. +int     nice __P((int));
  64310. +void     psignal __P((u_int, const char *));
  64311. +extern char *sys_siglist[];
  64312. +int     profil __P((char *, int, int, int));
  64313. +int     rcmd __P((char **, int, const char *,
  64314. +        const char *, const char *, int *));
  64315. +char    *re_comp __P((const char *));
  64316. +int     re_exec __P((const char *));
  64317. +int     readlink __P((const char *, char *, int));
  64318. +int     reboot __P((int));
  64319. +int     revoke __P((const char *));
  64320. +int     rresvport __P((int *));
  64321. +int     ruserok __P((const char *, int, const char *, const char *));
  64322. +void    *sbrk __P((unsigned));
  64323. +int     select __P((int, fd_set *, fd_set *, fd_set *, struct timeval *));
  64324. +int     setegid __P((gid_t));
  64325. +int     seteuid __P((uid_t));
  64326. +int     setgroups __P((int, const int *));
  64327. +void     sethostid __P((long));
  64328. +int     sethostname __P((const char *, int));
  64329. +int     setkey __P((const char *));
  64330. +int     setlogin __P((const char *));
  64331. +void    *setmode __P((const char *));
  64332. +int     setpgrp __P((pid_t pid, pid_t pgrp));    /* obsoleted by setpgid() */
  64333. +int     setregid __P((int, int));
  64334. +int     setreuid __P((int, int));
  64335. +int     setrgid __P((gid_t));
  64336. +int     setruid __P((uid_t));
  64337. +void     setusershell __P((void));
  64338. +int     swapon __P((const char *));
  64339. +int     symlink __P((const char *, const char *));
  64340. +void     sync __P((void));
  64341. +int     syscall __P((int, ...));
  64342. +int     truncate __P((const char *, off_t));
  64343. +int     ttyslot __P((void));
  64344. +u_int     ualarm __P((u_int, u_int));
  64345. +void     usleep __P((u_int));
  64346. +int     vfork __P((void));
  64347. +
  64348. +#endif /* !_POSIX_SOURCE */
  64349. +__END_DECLS
  64350. +
  64351. +#endif /* !_UNISTD_H_ */
  64352. diff -rup --new-file baseline/fsf/emacs/unixlib/include/utime.h amiga/fsf/emacs/unixlib/include/utime.h
  64353. --- baseline/fsf/emacs/unixlib/include/utime.h    Wed Dec 31 17:00:00 1969
  64354. +++ amiga/fsf/emacs/unixlib/include/utime.h    Sat Sep 28 00:00:00 1996
  64355. @@ -0,0 +1,3 @@
  64356. +struct utimbuf { time_t actime, modtime; };
  64357. +
  64358. +int utime(char *path, struct utimbuf *times);
  64359. diff -rup --new-file baseline/fsf/emacs/unixlib/intro.doc amiga/fsf/emacs/unixlib/intro.doc
  64360. --- baseline/fsf/emacs/unixlib/intro.doc    Wed Dec 31 17:00:00 1969
  64361. +++ amiga/fsf/emacs/unixlib/intro.doc    Sat Sep 28 00:00:00 1996
  64362. @@ -0,0 +1,44 @@
  64363. +A quick guide to programs compiled with the unix library
  64364. +--------------------------------------------------------
  64365. +
  64366. +If you are using programs compiled with my unix library, you should note
  64367. +the following points:
  64368. +
  64369. +a) The following environment variables are taken into account by the unix library,
  64370. +and therefore by any program compiled with it:
  64371. +
  64372. +USER - A user name for the sole Amiga user (default "user").
  64373. +USERNAME - The full name of the sole Amiga user (default $USER).
  64374. +HOME - A "home" directory (default "s:") for programs that want one. Configuration
  64375. +       files will probably end up here ...
  64376. +SHELL - A program which behaves reasonably like a Unix shell (default "bin:sh").
  64377. +    You should copy the sh executable there if you don't have a Unix-like shell.
  64378. +HOSTNAME - The name of your machine (default "amiga").
  64379. +
  64380. +b) Command line parsing is a mixture of AmigaOS and Unix conventions (this
  64381. +explanation assumes familiarity with Unix terminology ...) :
  64382. +
  64383. +- Arguments in single quotes (') are left as is.
  64384. +
  64385. +- Within arguments in double quotes ("), * acts as an escape character. Arguments
  64386. +cotaining wildcards are expanded into several arguments (note that this is a
  64387. +different from the Unix behaviour). ' must be used to escape wildcards (this is the
  64388. +standard AmigaOS convention).
  64389. +
  64390. +- Within unquoted arguments, \ acts as an escape character for wildcards, spaces, 
  64391. +etc. Arguments containing wildcards are expanded into several arguments.
  64392. +
  64393. +As an example, assume that uecho is an unix-like echo command compiled with the
  64394. +unix library, and that the current directory contains one file, echo.c. Then
  64395. +
  64396. +  uecho 'f*un\' "#?.c" "*.c" "\mad" \*.c \\ \n
  64397. +
  64398. +displays
  64399. +
  64400. +  f*un\ echo.c .c \mad *.c \ n
  64401. +
  64402. +c) Timezones. If you install the timezone information (provided with the
  64403. +unix library), you must set your system clock to GMT. Otherwise the times
  64404. +displayed or set by the unix library will be incorrect. To compensate, you
  64405. +won't have to adjust your system clock for daylight savings time (the local
  64406. +time calculated from GMT will always be correct).
  64407. diff -rup --new-file baseline/fsf/emacs/unixlib/mkmkf amiga/fsf/emacs/unixlib/mkmkf
  64408. --- baseline/fsf/emacs/unixlib/mkmkf    Wed Dec 31 17:00:00 1969
  64409. +++ amiga/fsf/emacs/unixlib/mkmkf    Sat Sep 28 00:00:00 1996
  64410. @@ -0,0 +1,2 @@
  64411. +copy smakefile smakefile!
  64412. +perl src:unix/mkmkf.perl `glob *.c` >smakefile
  64413. diff -rup --new-file baseline/fsf/emacs/unixlib/mkmkf.perl amiga/fsf/emacs/unixlib/mkmkf.perl
  64414. --- baseline/fsf/emacs/unixlib/mkmkf.perl    Wed Dec 31 17:00:00 1969
  64415. +++ amiga/fsf/emacs/unixlib/mkmkf.perl    Sat Sep 28 00:00:00 1996
  64416. @@ -0,0 +1,72 @@
  64417. +print "OBJS= ";
  64418. +for ($i = $#ARGV; $i >= 0; $i--)
  64419. +{
  64420. +    ($objs[$i] = $ARGV[$i]) =~ s/\.\w*$/\.o/;
  64421. +}
  64422. +&colprint(6, " ", @objs);
  64423. +print "\n\n";
  64424. +
  64425. +if (-f "smakefile.base")
  64426. +{
  64427. +    open(BASE, "smakefile.base");
  64428. +    print while (<BASE>);
  64429. +    close(BASE);
  64430. +}
  64431. +
  64432. +foreach $file (@ARGV)
  64433. +{
  64434. +    $dest = $file;
  64435. +    $dest =~ s/\.\w*$/\.o/;
  64436. +    if ($file =~ /\.c$/)
  64437. +    {
  64438. +    printf("%s: %s", $dest, $file);
  64439. +    $colto = length($dest) + length($file) + 2;
  64440. +    # Search for included files
  64441. +    %seen = ();
  64442. +    &included($file, 0);
  64443. +    &colprint($colto, " ", keys(%seen));
  64444. +    print "\n";
  64445. +    }
  64446. +    else
  64447. +    {
  64448. +    printf("%s: %s\n\n", $dest, $file);
  64449. +    }
  64450. +}
  64451. +
  64452. +sub colprint
  64453. +{
  64454. +    local($colto, $sep, @names) = @_;
  64455. +    $col = $colto;
  64456. +    $sl = length($sep);
  64457. +    foreach $name (@names)
  64458. +    {
  64459. +    $nl = length($name);
  64460. +    if ($col + $nl + $sl > 78)
  64461. +    {
  64462. +        print " \\\n", " " x $colto;
  64463. +        $col = $colto;
  64464. +    }
  64465. +    print $sep, $name;
  64466. +    $col += $sl + $nl;
  64467. +    }
  64468. +}
  64469. +
  64470. +sub included
  64471. +{
  64472. +    local($file, $input) = @_;
  64473. +    $input++;
  64474. +    if (!open($input, $file))
  64475. +    {
  64476. +    print STDERR "Can't open $file: $!\n";
  64477. +    return;
  64478. +    }
  64479. +    while (<$input>)
  64480. +    {
  64481. +    if (/^#\s*include\s*"([^"]*)"/ && !$seen{$1} && -e $1)
  64482. +        {
  64483. +        $seen{$1} = 1;
  64484. +        &included($1, $input);
  64485. +    }
  64486. +    }
  64487. +    close($input);
  64488. +}
  64489. diff -rup --new-file baseline/fsf/emacs/unixlib/src/SCOPTIONS amiga/fsf/emacs/unixlib/src/SCOPTIONS
  64490. --- baseline/fsf/emacs/unixlib/src/SCOPTIONS    Wed Dec 31 17:00:00 1969
  64491. +++ amiga/fsf/emacs/unixlib/src/SCOPTIONS    Sat Sep 28 00:00:00 1996
  64492. @@ -0,0 +1,9 @@
  64493. +PARAMETERS=BOTH
  64494. +NOSTACKCHECK
  64495. +STRUCTUREEQUIVALENCE
  64496. +NOVERSION
  64497. +NOICONS
  64498. +INCLUDEDIR=/include/internal/
  64499. +INCLUDEDIR=/include/
  64500. +IGNORE=104
  64501. +IGNORE=74
  64502. diff -rup --new-file baseline/fsf/emacs/unixlib/src/_exit.c amiga/fsf/emacs/unixlib/src/_exit.c
  64503. --- baseline/fsf/emacs/unixlib/src/_exit.c    Wed Dec 31 17:00:00 1969
  64504. +++ amiga/fsf/emacs/unixlib/src/_exit.c    Sat Sep 28 00:00:00 1996
  64505. @@ -0,0 +1,30 @@
  64506. +#include "amiga.h"
  64507. +#include "files.h"
  64508. +#include "fifofd.h"
  64509. +#include "signals.h"
  64510. +#include "timers.h"
  64511. +#include <fcntl.h>
  64512. +
  64513. +void _close_all(void)
  64514. +{
  64515. +  int fd, lfd = _last_fd();
  64516. +
  64517. +  for (fd = 0; fd < lfd; fd++) close(fd);
  64518. +}
  64519. +
  64520. +#undef _exit
  64521. +
  64522. +void __exit(int rc)
  64523. +{
  64524. +  _close_all();
  64525. +  _cleanup_fifo();
  64526. +  _cleanup_signals();
  64527. +  _free_timer(_odd_timer);
  64528. +  XCEXIT(rc);
  64529. +}
  64530. +
  64531. +void _exit(int rc)
  64532. +{
  64533. +  return __exit(rc);
  64534. +}
  64535. +
  64536. diff -rup --new-file baseline/fsf/emacs/unixlib/src/_main.c amiga/fsf/emacs/unixlib/src/_main.c
  64537. --- baseline/fsf/emacs/unixlib/src/_main.c    Wed Dec 31 17:00:00 1969
  64538. +++ amiga/fsf/emacs/unixlib/src/_main.c    Sat Sep 28 00:00:00 1996
  64539. @@ -0,0 +1,471 @@
  64540. +#include "amiga.h"
  64541. +#include "signals.h"
  64542. +#include "fifofd.h"
  64543. +#include "timers.h"
  64544. +#include "amigaos.h"
  64545. +#include <exec/execbase.h>
  64546. +#include <dos/var.h>
  64547. +#include <workbench/startup.h>
  64548. +#include <proto/timer.h>
  64549. +#include <stdlib.h>
  64550. +#include <string.h>
  64551. +#include <ctype.h>
  64552. +#include <sys/time.h>
  64553. +#include <pwd.h>
  64554. +
  64555. +struct Process *_us;
  64556. +struct timeinfo *_odd_timer;
  64557. +ULONG _odd_sig;
  64558. +long _startup_time;
  64559. +long _stack_size;
  64560. +struct Library *TimerBase;
  64561. +
  64562. +static char *empty_env = 0;    /* A default empty environment */
  64563. +char **environ;            /* Unix style environment variable list */
  64564. +char *_system_name;
  64565. +
  64566. +extern struct ExecBase *SysBase;
  64567. +extern struct passwd _amiga_user;
  64568. +extern main(int argc, char **argv, char **envp);
  64569. +
  64570. +static void nomem(void)
  64571. +{
  64572. +  _fail("No memory");
  64573. +}
  64574. +
  64575. +static void *_xmalloc(unsigned n)
  64576. +{
  64577. +    void *p = malloc(n);
  64578. +
  64579. +    if (!p) nomem();
  64580. +
  64581. +    return p;
  64582. +}
  64583. +
  64584. +static void *_xrealloc(void *p, unsigned n)
  64585. +{
  64586. +    void *p2 = realloc(p, n);
  64587. +
  64588. +    if (!p2) nomem();
  64589. +
  64590. +    return p2;
  64591. +}
  64592. +
  64593. +static char *safe_copystr(char *str)
  64594. +{
  64595. +    char *new;
  64596. +
  64597. +    if (!str) str = "";
  64598. +    new = malloc(strlen(str) + 1);
  64599. +    if (!new) return 0;
  64600. +    return strcpy(new, str);
  64601. +}
  64602. +
  64603. +static char *copystr(char *str)
  64604. +{
  64605. +    char *new = safe_copystr(str);
  64606. +
  64607. +    if (!new) nomem();
  64608. +
  64609. +    return new;
  64610. +}
  64611. +
  64612. +void make_environ(void)
  64613. +/* Effect: Builds a UNIX style environ variable from the AmigaOS environment.
  64614. +*/
  64615. +{
  64616. +    int env_count = 0;
  64617. +    long env_len = 0;
  64618. +    struct LocalVar *scan_env;
  64619. +    char **new_environ, *env_text;
  64620. +
  64621. +    for (scan_env = (struct LocalVar *)_us->pr_LocalVars.mlh_Head;
  64622. +     scan_env->lv_Node.ln_Succ;
  64623. +     scan_env = (struct LocalVar *)scan_env->lv_Node.ln_Succ)
  64624. +    if (scan_env->lv_Node.ln_Type == LV_VAR &&
  64625. +        !(scan_env->lv_Flags & (GVF_GLOBAL_ONLY | GVF_BINARY_VAR)))
  64626. +    {
  64627. +        /* We only handle local text variables */
  64628. +        env_count++;
  64629. +        env_len += 2 + strlen(scan_env->lv_Node.ln_Name) + scan_env->lv_Len;
  64630. +    }
  64631. +
  64632. +    new_environ = environ = (char **)_xmalloc(sizeof(char *) * (1 + env_count) +
  64633. +                          env_len);
  64634. +    env_text = (char *)(environ + (1 + env_count));
  64635. +    if (!environ) environ = &empty_env;
  64636. +    else
  64637. +    {
  64638. +    for (scan_env = (struct LocalVar *)_us->pr_LocalVars.mlh_Head;
  64639. +         scan_env->lv_Node.ln_Succ;
  64640. +         scan_env = (struct LocalVar *)scan_env->lv_Node.ln_Succ)
  64641. +        if (scan_env->lv_Node.ln_Type == LV_VAR &&
  64642. +        !(scan_env->lv_Flags & (GVF_GLOBAL_ONLY | GVF_BINARY_VAR)))
  64643. +        {
  64644. +        /* We only handle local text variables */
  64645. +        char *env_name = scan_env->lv_Node.ln_Name;
  64646. +        int env_len = scan_env->lv_Len;
  64647. +
  64648. +        *new_environ++ = env_text;
  64649. +        while (*env_name) *env_text++ = *env_name++;
  64650. +        *env_text++ = '=';
  64651. +        env_name = scan_env->lv_Value;
  64652. +        while (env_len--) *env_text++ = *env_name++;
  64653. +        *env_text++ = '\0';
  64654. +        }
  64655. +    *new_environ = 0;
  64656. +    }
  64657. +}
  64658. +
  64659. +/* _main routine.
  64660. +   Hides the differences between wb & cli.
  64661. +   Provides a unix-like environment (including coomand-line parsing &
  64662. +   wildcard expansion)
  64663. +*/
  64664. +
  64665. +#define DEFPATLEN 256
  64666. +#define NAMELEN 1024
  64667. +
  64668. +struct args
  64669. +{
  64670. +    int size;
  64671. +    int argc;
  64672. +    char **argv;
  64673. +};
  64674. +
  64675. +static void make_argv(struct args *args, int argc)
  64676. +{
  64677. +    args->size = argc;
  64678. +    args->argc = 0;
  64679. +    args->argv = _xmalloc(sizeof(char *) * argc);
  64680. +}
  64681. +
  64682. +static int safe_add_arg(struct args *args, char *argument, int copy)
  64683. +{
  64684. +    char *arg_copy;
  64685. +
  64686. +    if (copy) arg_copy = safe_copystr(argument);
  64687. +    else arg_copy = argument;
  64688. +    if (!arg_copy) return 0;
  64689. +
  64690. +    if (args->argc >= args->size)
  64691. +    {
  64692. +    /* Make argv bigger */
  64693. +    if (args->size * 2 < args->size + 16) args->size += 16;
  64694. +    else args->size *= 2;
  64695. +    args->argv = realloc(args->argv, sizeof(char *) * args->size);
  64696. +    if (!args->argv) return 0;
  64697. +    }
  64698. +    args->argv[args->argc++] = arg_copy;
  64699. +    return 1;
  64700. +}
  64701. +
  64702. +static void add_arg(struct args *args, char *argument, int copy)
  64703. +{
  64704. +    if (!safe_add_arg(args, argument, copy)) nomem();
  64705. +}
  64706. +
  64707. +static void concat_args(struct args *args, struct args *add)
  64708. +{
  64709. +    if (args->argc + add->argc > args->size)
  64710. +    {
  64711. +    args->size = (args->argc + add->argc) * 2;
  64712. +    args->argv = _xrealloc(args->argv, sizeof(char *) * args->size);
  64713. +    }
  64714. +    memcpy(args->argv + args->argc, add->argv, add->argc * sizeof(char *));
  64715. +    args->argc += add->argc;
  64716. +    free(add->argv);
  64717. +}
  64718. +
  64719. +typedef enum { quote_none, quote_single, quote_double } quote_type;
  64720. +typedef enum { extract_normal, extract_test, extract_pattern } extract_type;
  64721. +
  64722. +static void extract(char *buf, char *start, char *end,
  64723. +            quote_type type, extract_type extract)
  64724. +{
  64725. +  char *res = buf;
  64726. +
  64727. +  switch (type)
  64728. +    {
  64729. +    case quote_single:
  64730. +      if (extract != extract_test)
  64731. +    {
  64732. +      buf[end - start] = '\0';
  64733. +      memcpy(buf, start, end - start);
  64734. +    }
  64735. +      else strcpy(buf, "a");    /* Things in quotes are never patterns */
  64736. +      break;
  64737. +
  64738. +    case quote_none:
  64739. +      while (start < end)
  64740. +    {
  64741. +      if (start[0] == '\\' && start[1])
  64742. +        {
  64743. +          start += 2;
  64744. +          /* Wildcard are escaped */
  64745. +          if (extract == extract_test) *res++ = 'a';
  64746. +          else if (extract == extract_pattern)
  64747. +        switch (start[-1])
  64748. +          {
  64749. +          case '?': case '#': case '(': case ')': case '|': case '[':
  64750. +          case ']': case '~': case '%': case '*': case '\'':
  64751. +            *res++ = '\'';
  64752. +          default:
  64753. +            *res++ = start[-1];
  64754. +            break;
  64755. +          }
  64756. +          else *res++ = start[-1];
  64757. +        }
  64758. +      else *res++ = *start++;
  64759. +    }
  64760. +      *res++ = '\0';
  64761. +      break;
  64762. +
  64763. +    case quote_double:
  64764. +      while (start < end)
  64765. +    {
  64766. +      if (start[0] == '*' && start[1])
  64767. +        {
  64768. +          start += 2;
  64769. +          switch (start[-1])
  64770. +        {
  64771. +        case 'n': *res++ = '\n'; break;
  64772. +        case 'e': *res++ = '\x1b'; break;
  64773. +        default: *res++ = start[-1]; break;
  64774. +        }
  64775. +        }
  64776. +      else *res++ = *start++;
  64777. +    }
  64778. +      *res++ = '\0';
  64779. +      break;
  64780. +    }
  64781. +}
  64782. +
  64783. +void __stdargs _main(char *line)
  64784. +/* Effect: Call unix_main with wildcards in argc & argv expanded (like unix)
  64785. +     Also, do some early amiga initialisation for emacs.
  64786. +*/
  64787. +{
  64788. +  struct args args, wildargs;
  64789. +  char *pattern, *arg_start, *arg_end, *arg;
  64790. +  quote_type arg_quoted;
  64791. +  long patlen = DEFPATLEN;
  64792. +  struct AnchorPath *anchor;
  64793. +  struct timeval now;
  64794. +
  64795. +  if (SysBase->LibNode.lib_Version < 37) XCEXIT(20);
  64796. +
  64797. +  stdin->_file = 0;
  64798. +  stdin->_flag = _IOREAD;
  64799. +  stdout->_file = 1;
  64800. +  stdout->_flag = _IOWRT;
  64801. +  stderr->_file = 2;
  64802. +  stderr->_flag = _IORW | _IONBF;
  64803. +
  64804. +  _us = (struct Process *)FindTask(0);
  64805. +  _odd_timer = _alloc_timer();
  64806. +  if (!_odd_timer) _fail("Failed to create timer");
  64807. +  _odd_sig = _timer_sig(_odd_timer);
  64808. +  TimerBase = _odd_timer->io->tr_node.io_Device;
  64809. +  GetSysTime(&now);
  64810. +  _startup_time = now.tv_secs;
  64811. +
  64812. +  /* These use _startup_time, so must be here */
  64813. +  _init_fifo();
  64814. +  _init_signals();
  64815. +
  64816. +  if (_us->pr_CLI) _stack_size = ((struct CommandLineInterface *)BADDR(_us->pr_CLI))->cli_DefaultStack << 2;
  64817. +  else _stack_size = _us->pr_StackSize;
  64818. +
  64819. +  /* Make unix-like argc, argv (expand wildcards) */
  64820. +  if (!line[0])            /* Workbench, create argc & argv from files passed */
  64821. +    {
  64822. +      extern struct WBStartup *_WBenchMsg;
  64823. +      int i;
  64824. +      BPTR nilin = Open("NIL:",MODE_NEWFILE);
  64825. +      BPTR nilout = Open("NIL:",MODE_NEWFILE);
  64826. +      BPTR nilerr = Open("NIL:",MODE_NEWFILE);
  64827. +
  64828. +      /* Initialise I/O. Nothing is available */
  64829. +      if (!nilin || !nilout || !nilerr)
  64830. +    {
  64831. +      if (nilin) Close(nilin);
  64832. +      if (nilout) Close(nilout);
  64833. +      if (nilerr) Close(nilerr);
  64834. +      nomem();
  64835. +    }
  64836. +      _init_unixio(nilin, TRUE, nilout, TRUE, nilerr, TRUE);
  64837. +
  64838. +      /* Make argc, argv from Workbench parameters */
  64839. +      make_argv(&args, _WBenchMsg->sm_NumArgs);
  64840. +
  64841. +      for (i = 0; i < _WBenchMsg->sm_NumArgs; i++)
  64842. +    {
  64843. +      char filename[256];
  64844. +
  64845. +      if (_WBenchMsg->sm_ArgList[i].wa_Lock &&
  64846. +          NameFromLock(_WBenchMsg->sm_ArgList[i].wa_Lock, filename, 256))
  64847. +        {
  64848. +          if (_WBenchMsg->sm_ArgList[i].wa_Name)
  64849. +        AddPart(filename, _WBenchMsg->sm_ArgList[i].wa_Name, 256);
  64850. +          add_arg(&args, filename, TRUE);
  64851. +        }
  64852. +      /* else A parameter was lost, cry, cry, cry */
  64853. +    }
  64854. +    }
  64855. +  else                /* From CLI expand wildcards (with unix-like command line parsing) */
  64856. +    {
  64857. +      int close_error;
  64858. +      BPTR in, out, error;
  64859. +
  64860. +      /* Initialise I/O. Copy CLI info */
  64861. +      in = Input();
  64862. +      out = Output();
  64863. +      close_error = FALSE;
  64864. +      if ((error = _us->pr_CES) == 0)
  64865. +    {
  64866. +      close_error = TRUE;
  64867. +      if ((error = Open("*", MODE_OLDFILE)) == 0)
  64868. +        if ((error = Open("NIL:", MODE_OLDFILE)) == 0) nomem();
  64869. +    }
  64870. +      _init_unixio(in, FALSE, out, FALSE, error, close_error);
  64871. +
  64872. +      make_argv(&args, 1);
  64873. +
  64874. +      anchor = _xmalloc(sizeof(struct AnchorPath) + NAMELEN);
  64875. +      anchor->ap_Strlen = NAMELEN;
  64876. +      pattern = _xmalloc(DEFPATLEN);
  64877. +      while (1)
  64878. +    {
  64879. +      long new_patlen;
  64880. +      int wild;
  64881. +
  64882. +      /* Skip white space */
  64883. +      while (isspace(*line)) line++;
  64884. +      if (!*line) break;    /* End of command line */
  64885. +
  64886. +      /* Extract next word */
  64887. +      /* Words in double quotes are handled AmigaOS style
  64888. +         (+ filename expansion) */
  64889. +      if (*line == '"')
  64890. +        {
  64891. +          line++;
  64892. +          arg_start = line;
  64893. +          /* Find end of word */
  64894. +          while (*line && *line != '"')
  64895. +        {
  64896. +          /* * is an escape character inside double quotes
  64897. +             (AmigaOS compatibility) */
  64898. +          if ((*line == '*') && line[1]) line++;
  64899. +          line++;
  64900. +        }
  64901. +          arg_end = line;
  64902. +          if (*line == '"') line++;
  64903. +          arg_quoted = quote_double;
  64904. +        }
  64905. +      /* Words in single quotes are handled unix style */
  64906. +      else if (*line == '\'')
  64907. +        {
  64908. +          line++;
  64909. +          arg_start = line;
  64910. +          /* Find end of word */
  64911. +          while (*line && *line != '\'') line++;
  64912. +          arg_end = line;
  64913. +          if (*line == '\'') line++;
  64914. +          arg_quoted = quote_single;
  64915. +        }
  64916. +      /* Unquoted words are handled unix style */
  64917. +      else            /* Plain word */
  64918. +        {
  64919. +          arg_start = line;
  64920. +          /* Find end of word */
  64921. +          while (*line && *line != ' ' && *line != '\n' && *line != '\t')
  64922. +        {
  64923. +          if (*line == '\\' && line[1]) line++;
  64924. +          line++;
  64925. +        }
  64926. +          arg_end = line;
  64927. +          arg_quoted = quote_none;
  64928. +        }
  64929. +      arg = _xmalloc(arg_end - arg_start + 1);
  64930. +      if (args.argc == 0)    /* Command name is left untouched */
  64931. +        {
  64932. +          strncpy(arg, arg_start, arg_end - arg_start);
  64933. +          arg[arg_end - arg_start] = 0;
  64934. +          add_arg(&args, arg, FALSE);
  64935. +        }
  64936. +      else
  64937. +        {
  64938. +          new_patlen = (arg_end - arg_start) * 2 + 16;
  64939. +          if (new_patlen > patlen)
  64940. +        {
  64941. +          free(pattern);
  64942. +          pattern = _xmalloc(new_patlen);
  64943. +          patlen = new_patlen;
  64944. +        }
  64945. +          extract(arg, arg_start, arg_end, arg_quoted, extract_test);
  64946. +          wild = ParsePattern(arg, pattern, patlen);
  64947. +          if (wild < 0)
  64948. +        {
  64949. +          *arg_end = 0;
  64950. +          _fail("Invalid wildcard %s", arg_start);
  64951. +        }
  64952. +          if (!wild)
  64953. +        {
  64954. +          extract(arg, arg_start, arg_end, arg_quoted, extract_normal);
  64955. +          add_arg(&args, arg, FALSE);
  64956. +        }
  64957. +          else
  64958. +        {
  64959. +          int none = TRUE;
  64960. +          long error;
  64961. +
  64962. +          anchor->ap_Flags = anchor->ap_Reserved = anchor->ap_BreakBits = 0;
  64963. +          extract(arg, arg_start, arg_end, arg_quoted, extract_pattern);
  64964. +          make_argv(&wildargs, 16);
  64965. +          if (!(error = MatchFirst(arg, anchor)))
  64966. +            {
  64967. +              while (!error)
  64968. +            {
  64969. +              none = FALSE;
  64970. +              if (!safe_add_arg(&wildargs, anchor->ap_Buf, TRUE))
  64971. +                {
  64972. +                  error = ERROR_NO_FREE_STORE;
  64973. +                  break;
  64974. +                }
  64975. +              error = MatchNext(anchor);
  64976. +            }
  64977. +              MatchEnd(anchor);
  64978. +            }
  64979. +          if (error != ERROR_NO_MORE_ENTRIES)
  64980. +              _fail("Error expanding arguments");
  64981. +          if (none)
  64982. +            {
  64983. +              extract(arg, arg_start, arg_end, arg_quoted, extract_normal);
  64984. +              add_arg(&args, arg, FALSE);
  64985. +            }
  64986. +          else
  64987. +            {
  64988. +              tqsort(wildargs.argv, wildargs.argc);
  64989. +              concat_args(&args, &wildargs);
  64990. +              free(arg);
  64991. +            }
  64992. +        }
  64993. +        }
  64994. +    }
  64995. +      free(pattern);
  64996. +      free(anchor);
  64997. +    }
  64998. +
  64999. +  make_environ();
  65000. +
  65001. +  if (!(_amiga_user.pw_name = getenv("USER"))) _amiga_user.pw_name = "user";
  65002. +  if (!(_amiga_user.pw_gecos = getenv("USERNAME")))
  65003. +    _amiga_user.pw_gecos = _amiga_user.pw_name;
  65004. +  if (!(_amiga_user.pw_dir = getenv("HOME"))) _amiga_user.pw_dir = "s:";
  65005. +  if (!(_amiga_user.pw_shell = getenv("SHELL"))) _amiga_user.pw_shell = "bin:sh";
  65006. +  if (!(_system_name = getenv("HOSTNAME"))) _system_name = "amiga";
  65007. +    
  65008. +  main(args.argc, args.argv, environ);
  65009. +  exit(0);
  65010. +}
  65011. diff -rup --new-file baseline/fsf/emacs/unixlib/src/_setjmp.asm amiga/fsf/emacs/unixlib/src/_setjmp.asm
  65012. --- baseline/fsf/emacs/unixlib/src/_setjmp.asm    Wed Dec 31 17:00:00 1969
  65013. +++ amiga/fsf/emacs/unixlib/src/_setjmp.asm    Sat Sep 28 00:00:00 1996
  65014. @@ -0,0 +1,27 @@
  65015. +    XDEF    __setjmp
  65016. +    XDEF    __longjmp
  65017. +    XDEF    @_setjmp
  65018. +    XDEF    @_longjmp
  65019. +    
  65020. +    csect    text,0,,2,2
  65021. +
  65022. +__setjmp:
  65023. +    move.l    4(a7),a0        ; Get jmp_buf
  65024. +@_setjmp
  65025. +    move.l    (a7),(a0)+        ; Save return address
  65026. +    movem.l    a2-a7/d2-d7,(a0)    ; Save registers
  65027. +    moveq    #0,d0
  65028. +    rts
  65029. +
  65030. +__longjmp:
  65031. +    move.l    4(a7),a0        ; Get jmp_buf
  65032. +    move.l    8(a7),d0        ; Get result
  65033. +@_longjmp
  65034. +    bne.s    ok
  65035. +    moveq    #1,d0            ; Return must be != 0
  65036. +ok    move.l    (a0)+,a1        ; Get return address
  65037. +    movem.l    (a0),a2-a7/d2-d7    ; Get registers
  65038. +    addq.l    #4,a7            ; Pop return address
  65039. +    jmp    (a1)            ; And return to setjmp call
  65040. +
  65041. +    end
  65042. diff -rup --new-file baseline/fsf/emacs/unixlib/src/abort.c amiga/fsf/emacs/unixlib/src/abort.c
  65043. --- baseline/fsf/emacs/unixlib/src/abort.c    Wed Dec 31 17:00:00 1969
  65044. +++ amiga/fsf/emacs/unixlib/src/abort.c    Sat Sep 28 00:00:00 1996
  65045. @@ -0,0 +1,11 @@
  65046. +#include "amiga.h"
  65047. +#include <signal.h>
  65048. +
  65049. +extern void _close_all(void);
  65050. +
  65051. +void abort(void)
  65052. +{
  65053. +  chkabort();
  65054. +  _close_all();
  65055. +  kill(getpid(), SIGIOT);
  65056. +}
  65057. diff -rup --new-file baseline/fsf/emacs/unixlib/src/access.c amiga/fsf/emacs/unixlib/src/access.c
  65058. --- baseline/fsf/emacs/unixlib/src/access.c    Wed Dec 31 17:00:00 1969
  65059. +++ amiga/fsf/emacs/unixlib/src/access.c    Sat Sep 28 00:00:00 1996
  65060. @@ -0,0 +1,29 @@
  65061. +#include "amiga.h"
  65062. +#include "fibstat.h"
  65063. +#include <sys/types.h>
  65064. +#include <sys/stat.h>
  65065. +
  65066. +#undef access
  65067. +
  65068. +int __access(const char *name, int mode)
  65069. +{
  65070. +  int ret = -1;
  65071. +  struct stat sbuf;
  65072. +
  65073. +  chkabort();
  65074. +  if (_fibstat(name, &sbuf) == 0)
  65075. +    {
  65076. +      int fmode = (sbuf.st_mode & (S_IREAD | S_IEXEC)) >> 6 |
  65077. +    (sbuf.st_mode & (S_IWRITE >> 3)) >> 3;
  65078. +
  65079. +      if ((fmode & mode) == mode) ret = 0;
  65080. +      else errno = EACCES;
  65081. +    }
  65082. +  return ret;
  65083. +}
  65084. +
  65085. +int access(const char *name, int mode)
  65086. +{
  65087. +  return __access(name, mode);
  65088. +}
  65089. +
  65090. diff -rup --new-file baseline/fsf/emacs/unixlib/src/alloca.c amiga/fsf/emacs/unixlib/src/alloca.c
  65091. --- baseline/fsf/emacs/unixlib/src/alloca.c    Wed Dec 31 17:00:00 1969
  65092. +++ amiga/fsf/emacs/unixlib/src/alloca.c    Sat Sep 28 00:00:00 1996
  65093. @@ -0,0 +1,194 @@
  65094. +/*
  65095. +    alloca -- (mostly) portable public-domain implementation -- D A Gwyn
  65096. +
  65097. +    last edit:    86/05/30    rms
  65098. +       include config.h, since on VMS it renames some symbols.
  65099. +       Use xmalloc instead of malloc.
  65100. +
  65101. +    This implementation of the PWB library alloca() function,
  65102. +    which is used to allocate space off the run-time stack so
  65103. +    that it is automatically reclaimed upon procedure exit, 
  65104. +    was inspired by discussions with J. Q. Johnson of Cornell.
  65105. +
  65106. +    It should work under any C implementation that uses an
  65107. +    actual procedure stack (as opposed to a linked list of
  65108. +    frames).  There are some preprocessor constants that can
  65109. +    be defined when compiling for your specific system, for
  65110. +    improved efficiency; however, the defaults should be okay.
  65111. +
  65112. +    The general concept of this implementation is to keep
  65113. +    track of all alloca()-allocated blocks, and reclaim any
  65114. +    that are found to be deeper in the stack than the current
  65115. +    invocation.  This heuristic does not reclaim storage as
  65116. +    soon as it becomes invalid, but it will do so eventually.
  65117. +
  65118. +    As a special case, alloca(0) reclaims storage without
  65119. +    allocating any.  It is a good idea to use alloca(0) in
  65120. +    your main control loop, etc. to force garbage collection.
  65121. +*/
  65122. +#ifndef lint
  65123. +static char    SCCSid[] = "@(#)alloca.c    1.1";    /* for the "what" utility */
  65124. +#endif
  65125. +
  65126. +#ifdef emacs
  65127. +#include "config.h"
  65128. +#ifdef static
  65129. +/* actually, only want this if static is defined as ""
  65130. +   -- this is for usg, in which emacs must undefine static
  65131. +   in order to make unexec workable
  65132. +   */
  65133. +#ifndef STACK_DIRECTION
  65134. +you
  65135. +lose
  65136. +-- must know STACK_DIRECTION at compile-time
  65137. +#endif /* STACK_DIRECTION undefined */
  65138. +#endif static
  65139. +#endif emacs
  65140. +
  65141. +#ifndef alloca  /* If compiling with GCC, this file's not needed.  */
  65142. +
  65143. +#ifdef __STDC__
  65144. +typedef void    *pointer;        /* generic pointer type */
  65145. +#else
  65146. +typedef char    *pointer;        /* generic pointer type */
  65147. +#endif
  65148. +
  65149. +#define    NULL    0            /* null pointer constant */
  65150. +
  65151. +extern void    free();
  65152. +extern pointer    malloc();
  65153. +
  65154. +/*
  65155. +    Define STACK_DIRECTION if you know the direction of stack
  65156. +    growth for your system; otherwise it will be automatically
  65157. +    deduced at run-time.
  65158. +
  65159. +    STACK_DIRECTION > 0 => grows toward higher addresses
  65160. +    STACK_DIRECTION < 0 => grows toward lower addresses
  65161. +    STACK_DIRECTION = 0 => direction of growth unknown
  65162. +*/
  65163. +
  65164. +#ifndef STACK_DIRECTION
  65165. +#define    STACK_DIRECTION    0        /* direction unknown */
  65166. +#endif
  65167. +
  65168. +#if (STACK_DIRECTION) != 0
  65169. +
  65170. +#define    STACK_DIR    STACK_DIRECTION    /* known at compile-time */
  65171. +
  65172. +#else    /* STACK_DIRECTION == 0; need run-time code */
  65173. +
  65174. +static int    stack_dir;        /* 1 or -1 once known */
  65175. +#define    STACK_DIR    stack_dir
  65176. +
  65177. +static void
  65178. +find_stack_direction (/* void */)
  65179. +{
  65180. +  static char    *addr = NULL;    /* address of first
  65181. +                   `dummy', once known */
  65182. +  auto char    dummy;        /* to get stack address */
  65183. +
  65184. +  if (addr == NULL)
  65185. +    {                /* initial entry */
  65186. +      addr = &dummy;
  65187. +
  65188. +      find_stack_direction ();    /* recurse once */
  65189. +    }
  65190. +  else                /* second entry */
  65191. +    if (&dummy > addr)
  65192. +      stack_dir = 1;        /* stack grew upward */
  65193. +    else
  65194. +      stack_dir = -1;        /* stack grew downward */
  65195. +}
  65196. +
  65197. +#endif    /* STACK_DIRECTION == 0 */
  65198. +
  65199. +/*
  65200. +    An "alloca header" is used to:
  65201. +    (a) chain together all alloca()ed blocks;
  65202. +    (b) keep track of stack depth.
  65203. +
  65204. +    It is very important that sizeof(header) agree with malloc()
  65205. +    alignment chunk size.  The following default should work okay.
  65206. +*/
  65207. +
  65208. +#ifndef    ALIGN_SIZE
  65209. +#define    ALIGN_SIZE    sizeof(double)
  65210. +#endif
  65211. +
  65212. +typedef union hdr
  65213. +{
  65214. +  char    align[ALIGN_SIZE];    /* to force sizeof(header) */
  65215. +  struct
  65216. +    {
  65217. +      union hdr *next;        /* for chaining headers */
  65218. +      char *deep;        /* for stack depth measure */
  65219. +    } h;
  65220. +} header;
  65221. +
  65222. +/*
  65223. +    alloca( size ) returns a pointer to at least `size' bytes of
  65224. +    storage which will be automatically reclaimed upon exit from
  65225. +    the procedure that called alloca().  Originally, this space
  65226. +    was supposed to be taken from the current stack frame of the
  65227. +    caller, but that method cannot be made to work for some
  65228. +    implementations of C, for example under Gould's UTX/32.
  65229. +*/
  65230. +
  65231. +static header *last_alloca_header = NULL; /* -> last alloca header */
  65232. +
  65233. +pointer
  65234. +alloca (size)            /* returns pointer to storage */
  65235. +     unsigned    size;        /* # bytes to allocate */
  65236. +{
  65237. +  auto char    probe;        /* probes stack depth: */
  65238. +  register char    *depth = &probe;
  65239. +
  65240. +#if STACK_DIRECTION == 0
  65241. +  if (STACK_DIR == 0)        /* unknown growth direction */
  65242. +    find_stack_direction ();
  65243. +#endif
  65244. +
  65245. +                /* Reclaim garbage, defined as all alloca()ed storage that
  65246. +                   was allocated from deeper in the stack than currently. */
  65247. +
  65248. +  {
  65249. +    register header    *hp;    /* traverses linked list */
  65250. +
  65251. +    for (hp = last_alloca_header; hp != NULL;)
  65252. +      if (STACK_DIR > 0 && hp->h.deep > depth
  65253. +      || STACK_DIR < 0 && hp->h.deep < depth)
  65254. +    {
  65255. +      register header    *np = hp->h.next;
  65256. +
  65257. +      free ((pointer) hp);    /* collect garbage */
  65258. +
  65259. +      hp = np;        /* -> next header */
  65260. +    }
  65261. +      else
  65262. +    break;            /* rest are not deeper */
  65263. +
  65264. +    last_alloca_header = hp;    /* -> last valid storage */
  65265. +  }
  65266. +
  65267. +  if (size == 0)
  65268. +    return NULL;        /* no allocation required */
  65269. +
  65270. +  /* Allocate combined header + user data storage. */
  65271. +
  65272. +  {
  65273. +    register pointer    new = malloc (sizeof (header) + size);
  65274. +    /* address of header */
  65275. +
  65276. +    ((header *)new)->h.next = last_alloca_header;
  65277. +    ((header *)new)->h.deep = depth;
  65278. +
  65279. +    last_alloca_header = (header *)new;
  65280. +
  65281. +    /* User storage begins just after header. */
  65282. +
  65283. +    return (pointer)((char *)new + sizeof(header));
  65284. +  }
  65285. +}
  65286. +
  65287. +#endif /* no alloca */
  65288. diff -rup --new-file baseline/fsf/emacs/unixlib/src/allocdos.c amiga/fsf/emacs/unixlib/src/allocdos.c
  65289. --- baseline/fsf/emacs/unixlib/src/allocdos.c    Wed Dec 31 17:00:00 1969
  65290. +++ amiga/fsf/emacs/unixlib/src/allocdos.c    Sat Sep 28 00:00:00 1996
  65291. @@ -0,0 +1,6 @@
  65292. +#include <proto/dos.h>
  65293. +
  65294. +void *AllocDosObjectTags(ULONG type, ULONG tag1, ...)
  65295. +{
  65296. +  return AllocDosObject(type, &tag1);
  65297. +}
  65298. diff -rup --new-file baseline/fsf/emacs/unixlib/src/amiga.h amiga/fsf/emacs/unixlib/src/amiga.h
  65299. --- baseline/fsf/emacs/unixlib/src/amiga.h    Wed Dec 31 17:00:00 1969
  65300. +++ amiga/fsf/emacs/unixlib/src/amiga.h    Sat Sep 28 00:00:00 1996
  65301. @@ -0,0 +1,39 @@
  65302. +#include <exec/types.h>
  65303. +#include <dos/dos.h>
  65304. +#include <proto/dos.h>
  65305. +#include <proto/exec.h>
  65306. +
  65307. +#include <errno.h>
  65308. +#include <stddef.h>
  65309. +#include <stdlib.h>
  65310. +#include <stdio.h>
  65311. +#include <sys/types.h>
  65312. +#include <internal/vars.h>
  65313. +
  65314. +extern struct timeinfo *_odd_timer;
  65315. +extern ULONG _odd_sig;
  65316. +extern struct Library *TimerBase;
  65317. +
  65318. +int convert_oserr(int ioerr);
  65319. +void _seterr(void);
  65320. +void chkabort(void);
  65321. +
  65322. +#define ERROR do { _seterr(); return -1; } while(0)
  65323. +#define AMIGA_UID 1
  65324. +#define AMIGA_GID 0
  65325. +
  65326. +int _make_protection(int mode);
  65327. +int _make_mode(int protection);
  65328. +
  65329. +void _message(char *format, ...);
  65330. +/* Display a message which is as visible as possible (either to the console
  65331. +   or to as a requester).
  65332. +   Assume very little about library state */
  65333. +
  65334. +void _fail(char *format, ...);
  65335. +/* Display a message which is as visible as possible (either to the console
  65336. +   or to as a requester).
  65337. +   Assume very little about library state.
  65338. +   Exit with error code RETURN_FAIL after that. */
  65339. +
  65340. +void _sprintf(char *dest, char *format, ...);
  65341. diff -rup --new-file baseline/fsf/emacs/unixlib/src/amigaos.c amiga/fsf/emacs/unixlib/src/amigaos.c
  65342. --- baseline/fsf/emacs/unixlib/src/amigaos.c    Wed Dec 31 17:00:00 1969
  65343. +++ amiga/fsf/emacs/unixlib/src/amigaos.c    Sat Sep 28 00:00:00 1996
  65344. @@ -0,0 +1,299 @@
  65345. +#include "amiga.h"
  65346. +#include "files.h"
  65347. +#include "signals.h"
  65348. +#include <exec/memory.h>
  65349. +#include <fcntl.h>
  65350. +#include <sys/termios.h>
  65351. +#include <amiga/ioctl.h>
  65352. +#include <string.h>
  65353. +
  65354. +/* Code for fd's describing AmigaOS files */
  65355. +
  65356. +struct amigainfo
  65357. +{
  65358. +    BPTR fh;
  65359. +    BPTR lock;            /* A lock on the file (may be null) */
  65360. +    long protection;        /* To be set when file is closed, -1 for none */
  65361. +    char interactive;        /* True if file was interactive */
  65362. +    char deleted;        /* True if file has been deleted but not closed */
  65363. +};
  65364. +
  65365. +static ULONG __regargs file_select_start(void *userinfo, int rd, int wr)
  65366. +{
  65367. +  /* Input always immediately available, gniark */
  65368. +  return (ULONG)-1;
  65369. +}
  65370. +
  65371. +static void __regargs file_select_poll(void *userinfo, int *rd, int *wr)
  65372. +{
  65373. +  /* Input always immediately available, gniark */
  65374. +}
  65375. +
  65376. +static int __regargs file_read(void *userinfo, void *buffer, unsigned int length)
  65377. +{
  65378. +  struct amigainfo *info = userinfo;
  65379. +  BPTR fh = info->fh;
  65380. +  LONG cnt;
  65381. +
  65382. +  if (info->deleted) return 0;
  65383. +  if ((cnt = Read(fh, buffer, length)) == -1) ERROR;
  65384. +  return (int)cnt;
  65385. +}
  65386. +
  65387. +static int __regargs file_write(void *userinfo, void *buffer, unsigned int length)
  65388. +{
  65389. +  struct amigainfo *info = userinfo;
  65390. +  BPTR fh = info->fh;
  65391. +  int cnt;
  65392. +
  65393. +  if (info->deleted) return 0;
  65394. +  if (info->interactive)
  65395. +    {
  65396. +      char *bufend = (char *)buffer + length;
  65397. +
  65398. +      /* Write by lines, more pleasant for user */
  65399. +      cnt = 0;
  65400. +      while (length)
  65401. +    {
  65402. +      char *end = buffer;
  65403. +      long nb;
  65404. +      unsigned len;
  65405. +
  65406. +      while (end < bufend && *end != '\n') end++;
  65407. +      if (end == bufend) len = end - (char *)buffer;
  65408. +      else len = end + 1 - (char *)buffer;
  65409. +
  65410. +      if ((nb = Write(fh, buffer, len)) == -1) ERROR;
  65411. +      cnt += nb;
  65412. +      if (nb != len) break;
  65413. +
  65414. +      buffer = end + 1;
  65415. +      length -= nb;
  65416. +      /* Interrupt write ? */
  65417. +      if (_handle_signals(_check_signals(0))) break;
  65418. +    }
  65419. +    }
  65420. +  else if ((cnt = Write(fh, buffer, length)) == -1) ERROR;
  65421. +  return cnt;
  65422. +}
  65423. +
  65424. +static int __regargs file_lseek(void *userinfo, long rpos, int mode)
  65425. +{
  65426. +  struct amigainfo *info = userinfo;
  65427. +  BPTR fh = info->fh;
  65428. +  LONG pos, err;
  65429. +
  65430. +  if (info->deleted) return 0;
  65431. +  pos = Seek(fh, rpos, mode - 1);
  65432. +  err = IoErr();
  65433. +  if (pos == -1 || err)
  65434. +    {
  65435. +      errno = convert_oserr(err);
  65436. +      return -1;
  65437. +    }
  65438. +  pos = Seek(fh, 0, OFFSET_CURRENT);
  65439. +  if (pos == -1 || err)
  65440. +    {
  65441. +      errno = convert_oserr(err);
  65442. +      return -1;
  65443. +    }
  65444. +  return pos;
  65445. +}
  65446. +
  65447. +static int __regargs file_close(void *userinfo, int internal)
  65448. +{
  65449. +  struct amigainfo *info = userinfo;
  65450. +  BPTR fh = info->fh;
  65451. +  long protection = info->protection;
  65452. +  char name[256];
  65453. +  int ok, deleted;
  65454. +
  65455. +  if (info->lock) UnLock(info->lock);
  65456. +  deleted = info->deleted;
  65457. +  free(info);
  65458. +  if (deleted) return 0;
  65459. +
  65460. +  ok = NameFromFH(fh, name, 256);
  65461. +  if (internal || Close(fh))
  65462. +    if (!ok || protection == -1 || SetProtection(name, protection)) return 0;
  65463. +  ERROR;
  65464. +}
  65465. +
  65466. +static int isfifo(BPTR fh)
  65467. +/* Requires: IsInteractive(fh) */
  65468. +/* Try & find out if fh is a fifo: file */
  65469. +{
  65470. +    WaitForChar(fh, 0);
  65471. +
  65472. +    return IoErr() == ERROR_ACTION_NOT_KNOWN;
  65473. +}
  65474. +
  65475. +static int GetWinBounds (BPTR fh, long *width, long *height)
  65476. +{
  65477. +  char buffer[16];
  65478. +  int ok = 0;
  65479. +
  65480. +  if (!isfifo(fh) && SetMode (fh, 1))
  65481. +    {
  65482. +      if ((Write (fh, "\x9b" "0 q", 4) == 4) &&
  65483. +      WaitForChar (fh, 10000L) &&
  65484. +      (Read (fh, buffer, sizeof (buffer)) > 9) &&
  65485. +      (buffer[0] == '\x9b'))
  65486. +    {
  65487. +      int y = StrToLong (buffer+5, height);
  65488. +      int x = StrToLong (buffer+5+y+1, width);
  65489. +      if ((x != -1) && (y != -1)) ok = 1;
  65490. +    }
  65491. +      SetMode (fh, 0);
  65492. +    }
  65493. +  return ok;
  65494. +}
  65495. +
  65496. +int _do_truncate(BPTR fh, off_t length)
  65497. +{
  65498. +  int err, ret = -1;
  65499. +  long oldsize, oldpos;
  65500. +
  65501. +  oldpos = Seek(fh, 0, OFFSET_END);
  65502. +  oldsize = Seek(fh, 0, OFFSET_END);
  65503. +
  65504. +  if (!(err = IoErr()) &&
  65505. +      SetFileSize(fh, length, OFFSET_BEGINNING) == length)
  65506. +    {
  65507. +      if (oldsize < length)
  65508. +    {
  65509. +      /* Zero extra bytes */
  65510. +      off_t bufsize = length - oldsize, left = bufsize;
  65511. +      char *buf;
  65512. +      char reserve[512];
  65513. +
  65514. +      if (!(buf = AllocMem(bufsize, MEMF_CLEAR)))
  65515. +        {
  65516. +          bufsize = AvailMem(MEMF_LARGEST) / 2;
  65517. +
  65518. +          if (bufsize < 512 || !(buf = AllocMem(bufsize, MEMF_CLEAR)))
  65519. +        {
  65520. +          bufsize = 512;
  65521. +          buf = reserve;
  65522. +          memset(reserve, 0, 512);
  65523. +        }
  65524. +        }
  65525. +      while (left > 0)
  65526. +        {
  65527. +          long count = left > bufsize ? bufsize : left;
  65528. +
  65529. +          chkabort();
  65530. +          if (Write(fh, buf, count) != count)
  65531. +        {
  65532. +          err = IoErr();
  65533. +          break;
  65534. +        }
  65535. +          left -= count;
  65536. +        }
  65537. +      if (buf != reserve) FreeMem(buf, bufsize);
  65538. +    }
  65539. +      if (!err) ret = 0;
  65540. +    }
  65541. +  if (oldpos < length) Seek(fh, oldpos, OFFSET_BEGINNING);
  65542. +
  65543. +  if (ret) errno = convert_oserr(err);
  65544. +  return ret;
  65545. +}
  65546. +
  65547. +static int __regargs file_ioctl(void *userinfo, int request, void *data)
  65548. +{
  65549. +  struct amigainfo *info = userinfo;
  65550. +  BPTR fh = info->fh;
  65551. +
  65552. +  if (!info->deleted)
  65553. +    switch (request)
  65554. +      {
  65555. +      case TIOCGWINSZ: {
  65556. +    struct winsize *ws = data;
  65557. +    long col, row;
  65558. +
  65559. +    if (info->interactive && GetWinBounds(fh, &col, &row))
  65560. +      {
  65561. +        ws->ws_col = col; ws->ws_row = row;
  65562. +        return 0;
  65563. +      }
  65564. +    errno = ENOTTY;
  65565. +    return -1;
  65566. +      }
  65567. +      case _AMIGA_INTERACTIVE: {
  65568. +    int *inter = data;
  65569. +
  65570. +    *inter = IsInteractive(fh);
  65571. +    return 0;
  65572. +      }
  65573. +      case _AMIGA_GET_FH: {
  65574. +    BPTR *gotfh = data;
  65575. +
  65576. +    *gotfh = fh;
  65577. +    return 0;
  65578. +      }
  65579. +      case _AMIGA_FREE_FH: return 0;
  65580. +      case _AMIGA_TRUNCATE: {
  65581. +    off_t length = *(off_t *)data;
  65582. +
  65583. +    return _do_truncate(fh, length);
  65584. +      }
  65585. +      case _AMIGA_SETPROTECTION:
  65586. +    info->protection = *(long *)data;
  65587. +    return 0;
  65588. +      case _AMIGA_DELETE_IF_ME: {
  65589. +    BPTR nlock = *(BPTR *)data;
  65590. +
  65591. +    if (!info->lock) info->lock = DupLockFromFH(info->fh);
  65592. +    if (info->lock && SameLock(nlock, info->lock) == LOCK_SAME)
  65593. +      {
  65594. +        char name[256];
  65595. +
  65596. +        if (NameFromFH(fh, name, 256))
  65597. +          {
  65598. +        UnLock(nlock);
  65599. +        UnLock(info->lock);
  65600. +        Close(fh);
  65601. +        SetProtection(name, 0);
  65602. +        info->deleted = TRUE;
  65603. +        info->lock = info->fh = 0;
  65604. +        if (DeleteFile(name)) return 0;
  65605. +          }
  65606. +      }
  65607. +    ERROR;
  65608. +      }
  65609. +      }
  65610. +  errno = EINVAL;
  65611. +  return -1;
  65612. +}
  65613. +
  65614. +int _alloc_amigafd(BPTR fh, long protection, long flags)
  65615. +{
  65616. +  struct amigainfo *new = (struct amigainfo *)malloc(sizeof(struct amigainfo));
  65617. +  int fd;
  65618. +
  65619. +  if (!new) { errno = ENOMEM; return -1; }
  65620. +  new->fh = fh;
  65621. +  new->lock = NULL;
  65622. +  new->protection = protection;
  65623. +  new->deleted = FALSE;
  65624. +  new->interactive = IsInteractive(fh);
  65625. +
  65626. +  fd = _alloc_fd(new, flags,
  65627. +         file_select_start, file_select_poll, file_read, file_write,
  65628. +         file_lseek, file_close, file_ioctl);
  65629. +  if (fd < 0) free(new);
  65630. +
  65631. +  return fd;
  65632. +}
  65633. +
  65634. +void _init_unixio(BPTR in, int close_in, BPTR out, int close_out,
  65635. +          BPTR error, int close_error)
  65636. +{
  65637. +  if (_alloc_amigafd(in, -1, FI_READ | (close_in ? 0 : O_NO_CLOSE)) == 0 &&
  65638. +      _alloc_amigafd(out, -1, FI_WRITE | (close_out ? 0 : O_NO_CLOSE)) == 1 &&
  65639. +      _alloc_amigafd(error, -1, FI_WRITE | (close_error ? 0 : O_NO_CLOSE)) == 2)
  65640. +      return;
  65641. +
  65642. +  _fail("Failed to initialise I/O");
  65643. +}
  65644. diff -rup --new-file baseline/fsf/emacs/unixlib/src/amigaos.h amiga/fsf/emacs/unixlib/src/amigaos.h
  65645. --- baseline/fsf/emacs/unixlib/src/amigaos.h    Wed Dec 31 17:00:00 1969
  65646. +++ amiga/fsf/emacs/unixlib/src/amigaos.h    Sat Sep 28 00:00:00 1996
  65647. @@ -0,0 +1,10 @@
  65648. +#ifndef AMIGAOS_H
  65649. +#define AMIGAOS_H
  65650. +
  65651. +int _alloc_amigafd(BPTR fh, long protection, long flags);
  65652. +
  65653. +void _init_unixio(BPTR in, int close_in, BPTR out, int close_out,
  65654. +          BPTR error, int close_error);
  65655. +int _do_truncate(BPTR fh, off_t length);
  65656. +
  65657. +#endif
  65658. diff -rup --new-file baseline/fsf/emacs/unixlib/src/amigatime.c amiga/fsf/emacs/unixlib/src/amigatime.c
  65659. --- baseline/fsf/emacs/unixlib/src/amigatime.c    Wed Dec 31 17:00:00 1969
  65660. +++ amiga/fsf/emacs/unixlib/src/amigatime.c    Sat Sep 28 00:00:00 1996
  65661. @@ -0,0 +1,55 @@
  65662. +#include "amiga.h"
  65663. +#include "timeconvert.h"
  65664. +#include <sys/time.h>
  65665. +#include <sys/timeb.h>
  65666. +#include <string.h>
  65667. +
  65668. +extern char *tzname[2];
  65669. +extern int daylight;
  65670. +
  65671. +int gettimeofday(struct timeval *tp, struct timezone *tzp)
  65672. +{
  65673. +  struct timeval now;
  65674. +
  65675. +  chkabort();
  65676. +
  65677. +  _gettime(&now);
  65678. +  if (tp) *tp = now;
  65679. +
  65680. +  if (tzp)
  65681. +    {
  65682. +      int dst;
  65683. +      struct tm *local;
  65684. +
  65685. +      local = localtime(&now.tv_secs);
  65686. +      
  65687. +      tzp->tz_minuteswest = -local->tm_gmtoff / 60;
  65688. +      /* Guess a value for tz_dsttime, based on tzname[1] */
  65689. +      /* These guesses are not very good. */
  65690. +      dst = DST_NONE;
  65691. +      if (!strcmp(tzname[1], "MET DST")) dst = DST_MET;
  65692. +      else if (!strcmp(tzname[1], "WET DST")) dst = DST_WET;
  65693. +      else if (!strcmp(tzname[1], "EET DST")) dst = DST_EET;
  65694. +      else if (!strcmp(tzname[1], "EDT")) dst = DST_USA;
  65695. +      else if (!strcmp(tzname[1], "CDT")) dst = DST_USA;
  65696. +      else if (!strcmp(tzname[1], "MDT")) dst = DST_USA;
  65697. +      else if (!strcmp(tzname[1], "PDT")) dst = DST_USA;
  65698. +      else if (!strcmp(tzname[1], "AKDT")) dst = DST_USA;
  65699. +      tzp->tz_dsttime = dst;
  65700. +    }
  65701. +  return 0;
  65702. +}
  65703. +
  65704. +int ftime(struct timeb *ft)
  65705. +{
  65706. +  struct timeval now;
  65707. +  struct timezone zone;
  65708. +
  65709. +  gettimeofday(&now, &zone);
  65710. +  ft->time = now.tv_sec;
  65711. +  ft->millitm = now.tv_usec;
  65712. +  ft->timezone = zone.tz_minuteswest;
  65713. +  ft->dstflag = daylight;
  65714. +
  65715. +  return 0;
  65716. +}
  65717. diff -rup --new-file baseline/fsf/emacs/unixlib/src/bcmp.c amiga/fsf/emacs/unixlib/src/bcmp.c
  65718. --- baseline/fsf/emacs/unixlib/src/bcmp.c    Wed Dec 31 17:00:00 1969
  65719. +++ amiga/fsf/emacs/unixlib/src/bcmp.c    Sat Sep 28 00:00:00 1996
  65720. @@ -0,0 +1,9 @@
  65721. +#include "amiga.h"
  65722. +#include <string.h>
  65723. +
  65724. +#undef bcmp
  65725. +
  65726. +int bcmp(char *b1, char *b2, int length)
  65727. +{
  65728. +  return length == 0 ? 0 : memcmp(b2, b1, length);
  65729. +}
  65730. diff -rup --new-file baseline/fsf/emacs/unixlib/src/bcopy.c amiga/fsf/emacs/unixlib/src/bcopy.c
  65731. --- baseline/fsf/emacs/unixlib/src/bcopy.c    Wed Dec 31 17:00:00 1969
  65732. +++ amiga/fsf/emacs/unixlib/src/bcopy.c    Sat Sep 28 00:00:00 1996
  65733. @@ -0,0 +1,10 @@
  65734. +#include "amiga.h"
  65735. +#include <string.h>
  65736. +
  65737. +#undef bcopy
  65738. +
  65739. +void bcopy(char *b1, char *b2, int length)
  65740. +{
  65741. +  /* Unoptimised version */
  65742. +  memmove(b2, b1, length);
  65743. +}
  65744. diff -rup --new-file baseline/fsf/emacs/unixlib/src/bzero.c amiga/fsf/emacs/unixlib/src/bzero.c
  65745. --- baseline/fsf/emacs/unixlib/src/bzero.c    Wed Dec 31 17:00:00 1969
  65746. +++ amiga/fsf/emacs/unixlib/src/bzero.c    Sat Sep 28 00:00:00 1996
  65747. @@ -0,0 +1,9 @@
  65748. +#include "amiga.h"
  65749. +#include <string.h>
  65750. +
  65751. +#undef bzero
  65752. +
  65753. +void bzero(char *b, int length)
  65754. +{
  65755. +  memset(b, 0, length);
  65756. +}
  65757. diff -rup --new-file baseline/fsf/emacs/unixlib/src/chmod.c amiga/fsf/emacs/unixlib/src/chmod.c
  65758. --- baseline/fsf/emacs/unixlib/src/chmod.c    Wed Dec 31 17:00:00 1969
  65759. +++ amiga/fsf/emacs/unixlib/src/chmod.c    Sat Sep 28 00:00:00 1996
  65760. @@ -0,0 +1,8 @@
  65761. +#include "amiga.h"
  65762. +
  65763. +int chmod(const char *name, int mode)
  65764. +{
  65765. +  chkabort();
  65766. +  if (SetProtection(name, _make_protection(mode))) return 0;
  65767. +  ERROR;
  65768. +}
  65769. diff -rup --new-file baseline/fsf/emacs/unixlib/src/chown.c amiga/fsf/emacs/unixlib/src/chown.c
  65770. --- baseline/fsf/emacs/unixlib/src/chown.c    Wed Dec 31 17:00:00 1969
  65771. +++ amiga/fsf/emacs/unixlib/src/chown.c    Sat Sep 28 00:00:00 1996
  65772. @@ -0,0 +1,4 @@
  65773. +#include "amiga.h"
  65774. +
  65775. +int chown(char *path, int owner, int group) { return 0; }
  65776. +int fchown(int fd, int owner, int group) { return 0; }
  65777. diff -rup --new-file baseline/fsf/emacs/unixlib/src/close.c amiga/fsf/emacs/unixlib/src/close.c
  65778. --- baseline/fsf/emacs/unixlib/src/close.c    Wed Dec 31 17:00:00 1969
  65779. +++ amiga/fsf/emacs/unixlib/src/close.c    Sat Sep 28 00:00:00 1996
  65780. @@ -0,0 +1,26 @@
  65781. +#include "amiga.h"
  65782. +#include "files.h"
  65783. +#include <fcntl.h>
  65784. +
  65785. +#undef close
  65786. +
  65787. +int __close(int fd)
  65788. +{
  65789. +  struct fileinfo *fi;
  65790. +
  65791. +  chkabort();
  65792. +  if (fi = _find_fd(fd))
  65793. +    {
  65794. +      int err = fi->close(fi->userinfo, fi->flags & O_NO_CLOSE);
  65795. +
  65796. +      _free_fd(fd);
  65797. +      return err;
  65798. +    }
  65799. +  return -1;
  65800. +}
  65801. +
  65802. +int close(int fd)
  65803. +{
  65804. +  return __close(fd);
  65805. +}
  65806. +
  65807. diff -rup --new-file baseline/fsf/emacs/unixlib/src/creat.c amiga/fsf/emacs/unixlib/src/creat.c
  65808. --- baseline/fsf/emacs/unixlib/src/creat.c    Wed Dec 31 17:00:00 1969
  65809. +++ amiga/fsf/emacs/unixlib/src/creat.c    Sat Sep 28 00:00:00 1996
  65810. @@ -0,0 +1,17 @@
  65811. +#include "amiga.h"
  65812. +#include "files.h"
  65813. +#include <fcntl.h>
  65814. +
  65815. +#undef creat
  65816. +
  65817. +int __creat(const char *file, int prot)
  65818. +{
  65819. +  chkabort();
  65820. +  return open(file, O_WRONLY | O_CREAT | O_TRUNC, prot);
  65821. +}
  65822. +
  65823. +int creat(const char *file, int prot)
  65824. +{
  65825. +  return __creat(file, prot);
  65826. +}
  65827. +
  65828. diff -rup --new-file baseline/fsf/emacs/unixlib/src/ctime.c amiga/fsf/emacs/unixlib/src/ctime.c
  65829. --- baseline/fsf/emacs/unixlib/src/ctime.c    Wed Dec 31 17:00:00 1969
  65830. +++ amiga/fsf/emacs/unixlib/src/ctime.c    Sat Sep 28 00:00:00 1996
  65831. @@ -0,0 +1,1381 @@
  65832. +/*
  65833. + * Copyright (c) 1987, 1989 Regents of the University of California.
  65834. + * All rights reserved.
  65835. + *
  65836. + * This code is derived from software contributed to Berkeley by
  65837. + * Arthur David Olson of the National Cancer Institute.
  65838. + *
  65839. + * Redistribution and use in source and binary forms, with or without
  65840. + * modification, are permitted provided that the following conditions
  65841. + * are met:
  65842. + * 1. Redistributions of source code must retain the above copyright
  65843. + *    notice, this list of conditions and the following disclaimer.
  65844. + * 2. Redistributions in binary form must reproduce the above copyright
  65845. + *    notice, this list of conditions and the following disclaimer in the
  65846. + *    documentation and/or other materials provided with the distribution.
  65847. + * 3. All advertising materials mentioning features or use of this software
  65848. + *    must display the following acknowledgement:
  65849. + *    This product includes software developed by the University of
  65850. + *    California, Berkeley and its contributors.
  65851. + * 4. Neither the name of the University nor the names of its contributors
  65852. + *    may be used to endorse or promote products derived from this software
  65853. + *    without specific prior written permission.
  65854. + *
  65855. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  65856. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  65857. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  65858. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  65859. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  65860. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  65861. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  65862. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  65863. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  65864. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  65865. + * SUCH DAMAGE.
  65866. + */
  65867. +
  65868. +#if defined(LIBC_SCCS) && !defined(lint)
  65869. +static char sccsid[] = "@(#)ctime.c    5.26 (Berkeley) 2/23/91";
  65870. +#endif /* LIBC_SCCS and not lint */
  65871. +
  65872. +/*
  65873. +** Leap second handling from Bradley White (bww@k.gp.cs.cmu.edu).
  65874. +** POSIX-style TZ environment variable handling from Guy Harris
  65875. +** (guy@auspex.com).
  65876. +*/
  65877. +
  65878. +/*LINTLIBRARY*/
  65879. +
  65880. +#include <sys/param.h>
  65881. +#include <fcntl.h>
  65882. +#include <time.h>
  65883. +#include <tzfile.h>
  65884. +#include <string.h>
  65885. +#include <ctype.h>
  65886. +#include <stdio.h>
  65887. +#include <unistd.h>
  65888. +
  65889. +#ifdef __STDC__
  65890. +#include <stdlib.h>
  65891. +
  65892. +#define P(s)        s
  65893. +#define alloc_size_t    size_t
  65894. +#define qsort_size_t    size_t
  65895. +#define fread_size_t    size_t
  65896. +#define fwrite_size_t    size_t
  65897. +
  65898. +#else /* !defined __STDC__ */
  65899. +
  65900. +#define P(s)        ()
  65901. +
  65902. +typedef char *        genericptr_t;
  65903. +typedef unsigned    alloc_size_t;
  65904. +typedef int        qsort_size_t;
  65905. +typedef int        fread_size_t;
  65906. +typedef int        fwrite_size_t;
  65907. +
  65908. +extern char *    calloc();
  65909. +extern char *    malloc();
  65910. +extern char *    realloc();
  65911. +extern char *    getenv();
  65912. +
  65913. +#endif /* !defined __STDC__ */
  65914. +
  65915. +extern time_t    time();
  65916. +
  65917. +#define ACCESS_MODE    O_RDONLY
  65918. +#define OPEN_MODE    O_RDONLY
  65919. +
  65920. +#ifndef WILDABBR
  65921. +/*
  65922. +** Someone might make incorrect use of a time zone abbreviation:
  65923. +**    1.    They might reference tzname[0] before calling tzset (explicitly
  65924. +**         or implicitly).
  65925. +**    2.    They might reference tzname[1] before calling tzset (explicitly
  65926. +**         or implicitly).
  65927. +**    3.    They might reference tzname[1] after setting to a time zone
  65928. +**        in which Daylight Saving Time is never observed.
  65929. +**    4.    They might reference tzname[0] after setting to a time zone
  65930. +**        in which Standard Time is never observed.
  65931. +**    5.    They might reference tm.TM_ZONE after calling offtime.
  65932. +** What's best to do in the above cases is open to debate;
  65933. +** for now, we just set things up so that in any of the five cases
  65934. +** WILDABBR is used.  Another possibility:  initialize tzname[0] to the
  65935. +** string "tzname[0] used before set", and similarly for the other cases.
  65936. +** And another:  initialize tzname[0] to "ERA", with an explanation in the
  65937. +** manual page of what this "time zone abbreviation" means (doing this so
  65938. +** that tzname[0] has the "normal" length of three characters).
  65939. +*/
  65940. +#define WILDABBR    "   "
  65941. +#endif /* !defined WILDABBR */
  65942. +
  65943. +#ifndef TRUE
  65944. +#define TRUE        1
  65945. +#define FALSE        0
  65946. +#endif /* !defined TRUE */
  65947. +
  65948. +static const char GMT[] = "GMT";
  65949. +
  65950. +struct ttinfo {                /* time type information */
  65951. +    long        tt_gmtoff;    /* GMT offset in seconds */
  65952. +    int        tt_isdst;    /* used to set tm_isdst */
  65953. +    int        tt_abbrind;    /* abbreviation list index */
  65954. +    int        tt_ttisstd;    /* TRUE if transition is std time */
  65955. +};
  65956. +
  65957. +struct lsinfo {                /* leap second information */
  65958. +    time_t        ls_trans;    /* transition time */
  65959. +    long        ls_corr;    /* correction to apply */
  65960. +};
  65961. +
  65962. +struct state {
  65963. +    int        leapcnt;
  65964. +    int        timecnt;
  65965. +    int        typecnt;
  65966. +    int        charcnt;
  65967. +    time_t        ats[TZ_MAX_TIMES];
  65968. +    unsigned char    types[TZ_MAX_TIMES];
  65969. +    struct ttinfo    ttis[TZ_MAX_TYPES];
  65970. +    char        chars[(TZ_MAX_CHARS + 1 > sizeof GMT) ?
  65971. +                TZ_MAX_CHARS + 1 : sizeof GMT];
  65972. +    struct lsinfo    lsis[TZ_MAX_LEAPS];
  65973. +};
  65974. +
  65975. +struct rule {
  65976. +    int        r_type;        /* type of rule--see below */
  65977. +    int        r_day;        /* day number of rule */
  65978. +    int        r_week;        /* week number of rule */
  65979. +    int        r_mon;        /* month number of rule */
  65980. +    long        r_time;        /* transition time of rule */
  65981. +};
  65982. +
  65983. +#define    JULIAN_DAY        0    /* Jn - Julian day */
  65984. +#define    DAY_OF_YEAR        1    /* n - day of year */
  65985. +#define    MONTH_NTH_DAY_OF_WEEK    2    /* Mm.n.d - month, week, day of week */
  65986. +
  65987. +/*
  65988. +** Prototypes for static functions.
  65989. +*/
  65990. +
  65991. +static long        detzcode P((const char * codep));
  65992. +static const char *    getzname P((const char * strp));
  65993. +static const char *    getnum P((const char * strp, int * nump, int min,
  65994. +                int max));
  65995. +static const char *    getsecs P((const char * strp, long * secsp));
  65996. +static const char *    getoffset P((const char * strp, long * offsetp));
  65997. +static const char *    getrule P((const char * strp, struct rule * rulep));
  65998. +static void        gmtload P((struct state * sp));
  65999. +static void        gmtsub P((const time_t * timep, long offset,
  66000. +                struct tm * tmp));
  66001. +static void        localsub P((const time_t * timep, long offset,
  66002. +                struct tm * tmp));
  66003. +static void        normalize P((int * tensptr, int * unitsptr, int base));
  66004. +static void        settzname P((void));
  66005. +static time_t        time1 P((struct tm * tmp, void (* funcp)(),
  66006. +                long offset));
  66007. +static time_t        time2 P((struct tm *tmp, void (* funcp)(),
  66008. +                long offset, int * okayp));
  66009. +static void        timesub P((const time_t * timep, long offset,
  66010. +                const struct state * sp, struct tm * tmp));
  66011. +static int        tmcomp P((const struct tm * atmp,
  66012. +                const struct tm * btmp));
  66013. +static time_t        transtime P((time_t janfirst, int year,
  66014. +                const struct rule * rulep, long offset));
  66015. +static int        tzload P((const char * name, struct state * sp));
  66016. +static int        tzparse P((const char * name, struct state * sp,
  66017. +                int lastditch));
  66018. +
  66019. +#ifdef ALL_STATE
  66020. +static struct state *    lclptr;
  66021. +static struct state *    gmtptr;
  66022. +#endif /* defined ALL_STATE */
  66023. +
  66024. +#ifndef ALL_STATE
  66025. +static struct state    lclmem;
  66026. +static struct state    gmtmem;
  66027. +#define lclptr        (&lclmem)
  66028. +#define gmtptr        (&gmtmem)
  66029. +#endif /* State Farm */
  66030. +
  66031. +static int        lcl_is_set;
  66032. +static int        gmt_is_set;
  66033. +
  66034. +char *            tzname[2] = {
  66035. +    WILDABBR,
  66036. +    WILDABBR
  66037. +};
  66038. +
  66039. +time_t            timezone = 0;
  66040. +int            daylight = 0;
  66041. +
  66042. +#ifdef ALTZONE
  66043. +time_t            altzone = 0;
  66044. +#endif /* defined ALTZONE */
  66045. +
  66046. +static long
  66047. +detzcode(codep)
  66048. +const char * const    codep;
  66049. +{
  66050. +    register long    result;
  66051. +    register int    i;
  66052. +
  66053. +    result = 0;
  66054. +    for (i = 0; i < 4; ++i)
  66055. +        result = (result << 8) | (codep[i] & 0xff);
  66056. +    return result;
  66057. +}
  66058. +
  66059. +static void
  66060. +settzname()
  66061. +{
  66062. +    register const struct state * const    sp = lclptr;
  66063. +    register int                i;
  66064. +
  66065. +    tzname[0] = WILDABBR;
  66066. +    tzname[1] = WILDABBR;
  66067. +    daylight = 0;
  66068. +    timezone = 0;
  66069. +#ifdef ALTZONE
  66070. +    altzone = 0;
  66071. +#endif /* defined ALTZONE */
  66072. +#ifdef ALL_STATE
  66073. +    if (sp == NULL) {
  66074. +        tzname[0] = tzname[1] = GMT;
  66075. +        return;
  66076. +    }
  66077. +#endif /* defined ALL_STATE */
  66078. +    for (i = 0; i < sp->typecnt; ++i) {
  66079. +        register const struct ttinfo * const    ttisp = &sp->ttis[i];
  66080. +
  66081. +        tzname[ttisp->tt_isdst] =
  66082. +            (char *) &sp->chars[ttisp->tt_abbrind];
  66083. +        if (ttisp->tt_isdst)
  66084. +            daylight = 1;
  66085. +        if (i == 0 || !ttisp->tt_isdst)
  66086. +            timezone = -(ttisp->tt_gmtoff);
  66087. +#ifdef ALTZONE
  66088. +        if (i == 0 || ttisp->tt_isdst)
  66089. +            altzone = -(ttisp->tt_gmtoff);
  66090. +#endif /* defined ALTZONE */
  66091. +    }
  66092. +    /*
  66093. +    ** And to get the latest zone names into tzname. . .
  66094. +    */
  66095. +    for (i = 0; i < sp->timecnt; ++i) {
  66096. +        register const struct ttinfo * const    ttisp =
  66097. +                            &sp->ttis[sp->types[i]];
  66098. +
  66099. +        tzname[ttisp->tt_isdst] =
  66100. +            (char *) &sp->chars[ttisp->tt_abbrind];
  66101. +    }
  66102. +}
  66103. +
  66104. +static int
  66105. +tzload(name, sp)
  66106. +register const char *        name;
  66107. +register struct state * const    sp;
  66108. +{
  66109. +    register const char *    p;
  66110. +    register int        i;
  66111. +    register int        fid;
  66112. +
  66113. +    if (name == NULL && (name = TZDEFAULT) == NULL)
  66114. +        return -1;
  66115. +    {
  66116. +        char        fullname[FILENAME_MAX + 1];
  66117. +
  66118. +        if (name[0] == ':')
  66119. +            ++name;
  66120. +        if (!strchr(name, ':')) {
  66121. +            if ((p = TZDIR) == NULL)
  66122. +                return -1;
  66123. +            if ((strlen(p) + strlen(name) + 1) >= sizeof fullname)
  66124. +                return -1;
  66125. +            (void) strcpy(fullname, p);
  66126. +            (void) strcat(fullname, "/");
  66127. +            (void) strcat(fullname, name);
  66128. +            name = fullname;
  66129. +        }
  66130. +        if ((fid = open(name, OPEN_MODE)) == -1)
  66131. +            return -1;
  66132. +    }
  66133. +    {
  66134. +        register const struct tzhead *    tzhp;
  66135. +        char                buf[sizeof *sp + sizeof *tzhp];
  66136. +        int                ttisstdcnt;
  66137. +
  66138. +        i = read(fid, buf, sizeof buf);
  66139. +        if (close(fid) != 0 || i < sizeof *tzhp)
  66140. +            return -1;
  66141. +        tzhp = (struct tzhead *) buf;
  66142. +        ttisstdcnt = (int) detzcode(tzhp->tzh_ttisstdcnt);
  66143. +        sp->leapcnt = (int) detzcode(tzhp->tzh_leapcnt);
  66144. +        sp->timecnt = (int) detzcode(tzhp->tzh_timecnt);
  66145. +        sp->typecnt = (int) detzcode(tzhp->tzh_typecnt);
  66146. +        sp->charcnt = (int) detzcode(tzhp->tzh_charcnt);
  66147. +        if (sp->leapcnt < 0 || sp->leapcnt > TZ_MAX_LEAPS ||
  66148. +            sp->typecnt <= 0 || sp->typecnt > TZ_MAX_TYPES ||
  66149. +            sp->timecnt < 0 || sp->timecnt > TZ_MAX_TIMES ||
  66150. +            sp->charcnt < 0 || sp->charcnt > TZ_MAX_CHARS ||
  66151. +            (ttisstdcnt != sp->typecnt && ttisstdcnt != 0))
  66152. +                return -1;
  66153. +        if (i < sizeof *tzhp +
  66154. +            sp->timecnt * (4 + sizeof (char)) +
  66155. +            sp->typecnt * (4 + 2 * sizeof (char)) +
  66156. +            sp->charcnt * sizeof (char) +
  66157. +            sp->leapcnt * 2 * 4 +
  66158. +            ttisstdcnt * sizeof (char))
  66159. +                return -1;
  66160. +        p = buf + sizeof *tzhp;
  66161. +        for (i = 0; i < sp->timecnt; ++i) {
  66162. +            sp->ats[i] = detzcode(p);
  66163. +            p += 4;
  66164. +        }
  66165. +        for (i = 0; i < sp->timecnt; ++i) {
  66166. +            sp->types[i] = (unsigned char) *p++;
  66167. +            if (sp->types[i] >= sp->typecnt)
  66168. +                return -1;
  66169. +        }
  66170. +        for (i = 0; i < sp->typecnt; ++i) {
  66171. +            register struct ttinfo *    ttisp;
  66172. +
  66173. +            ttisp = &sp->ttis[i];
  66174. +            ttisp->tt_gmtoff = detzcode(p);
  66175. +            p += 4;
  66176. +            ttisp->tt_isdst = (unsigned char) *p++;
  66177. +            if (ttisp->tt_isdst != 0 && ttisp->tt_isdst != 1)
  66178. +                return -1;
  66179. +            ttisp->tt_abbrind = (unsigned char) *p++;
  66180. +            if (ttisp->tt_abbrind < 0 ||
  66181. +                ttisp->tt_abbrind > sp->charcnt)
  66182. +                    return -1;
  66183. +        }
  66184. +        for (i = 0; i < sp->charcnt; ++i)
  66185. +            sp->chars[i] = *p++;
  66186. +        sp->chars[i] = '\0';    /* ensure '\0' at end */
  66187. +        for (i = 0; i < sp->leapcnt; ++i) {
  66188. +            register struct lsinfo *    lsisp;
  66189. +
  66190. +            lsisp = &sp->lsis[i];
  66191. +            lsisp->ls_trans = detzcode(p);
  66192. +            p += 4;
  66193. +            lsisp->ls_corr = detzcode(p);
  66194. +            p += 4;
  66195. +        }
  66196. +        for (i = 0; i < sp->typecnt; ++i) {
  66197. +            register struct ttinfo *    ttisp;
  66198. +
  66199. +            ttisp = &sp->ttis[i];
  66200. +            if (ttisstdcnt == 0)
  66201. +                ttisp->tt_ttisstd = FALSE;
  66202. +            else {
  66203. +                ttisp->tt_ttisstd = *p++;
  66204. +                if (ttisp->tt_ttisstd != TRUE &&
  66205. +                    ttisp->tt_ttisstd != FALSE)
  66206. +                        return -1;
  66207. +            }
  66208. +        }
  66209. +    }
  66210. +    return 0;
  66211. +}
  66212. +
  66213. +static const int    mon_lengths[2][MONSPERYEAR] = {
  66214. +    31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,
  66215. +    31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
  66216. +};
  66217. +
  66218. +static const int    year_lengths[2] = {
  66219. +    DAYSPERNYEAR, DAYSPERLYEAR
  66220. +};
  66221. +
  66222. +/*
  66223. +** Given a pointer into a time zone string, scan until a character that is not
  66224. +** a valid character in a zone name is found.  Return a pointer to that
  66225. +** character.
  66226. +*/
  66227. +
  66228. +static const char *
  66229. +getzname(strp)
  66230. +register const char *    strp;
  66231. +{
  66232. +    register char    c;
  66233. +
  66234. +    while ((c = *strp) != '\0' && !isdigit(c) && c != ',' && c != '-' &&
  66235. +        c != '+')
  66236. +            ++strp;
  66237. +    return strp;
  66238. +}
  66239. +
  66240. +/*
  66241. +** Given a pointer into a time zone string, extract a number from that string.
  66242. +** Check that the number is within a specified range; if it is not, return
  66243. +** NULL.
  66244. +** Otherwise, return a pointer to the first character not part of the number.
  66245. +*/
  66246. +
  66247. +static const char *
  66248. +getnum(strp, nump, min, max)
  66249. +register const char *    strp;
  66250. +int * const        nump;
  66251. +const int        min;
  66252. +const int        max;
  66253. +{
  66254. +    register char    c;
  66255. +    register int    num;
  66256. +
  66257. +    if (strp == NULL || !isdigit(*strp))
  66258. +        return NULL;
  66259. +    num = 0;
  66260. +    while ((c = *strp) != '\0' && isdigit(c)) {
  66261. +        num = num * 10 + (c - '0');
  66262. +        if (num > max)
  66263. +            return NULL;    /* illegal value */
  66264. +        ++strp;
  66265. +    }
  66266. +    if (num < min)
  66267. +        return NULL;        /* illegal value */
  66268. +    *nump = num;
  66269. +    return strp;
  66270. +}
  66271. +
  66272. +/*
  66273. +** Given a pointer into a time zone string, extract a number of seconds,
  66274. +** in hh[:mm[:ss]] form, from the string.
  66275. +** If any error occurs, return NULL.
  66276. +** Otherwise, return a pointer to the first character not part of the number
  66277. +** of seconds.
  66278. +*/
  66279. +
  66280. +static const char *
  66281. +getsecs(strp, secsp)
  66282. +register const char *    strp;
  66283. +long * const        secsp;
  66284. +{
  66285. +    int    num;
  66286. +
  66287. +    strp = getnum(strp, &num, 0, HOURSPERDAY);
  66288. +    if (strp == NULL)
  66289. +        return NULL;
  66290. +    *secsp = num * SECSPERHOUR;
  66291. +    if (*strp == ':') {
  66292. +        ++strp;
  66293. +        strp = getnum(strp, &num, 0, MINSPERHOUR - 1);
  66294. +        if (strp == NULL)
  66295. +            return NULL;
  66296. +        *secsp += num * SECSPERMIN;
  66297. +        if (*strp == ':') {
  66298. +            ++strp;
  66299. +            strp = getnum(strp, &num, 0, SECSPERMIN - 1);
  66300. +            if (strp == NULL)
  66301. +                return NULL;
  66302. +            *secsp += num;
  66303. +        }
  66304. +    }
  66305. +    return strp;
  66306. +}
  66307. +
  66308. +/*
  66309. +** Given a pointer into a time zone string, extract an offset, in
  66310. +** [+-]hh[:mm[:ss]] form, from the string.
  66311. +** If any error occurs, return NULL.
  66312. +** Otherwise, return a pointer to the first character not part of the time.
  66313. +*/
  66314. +
  66315. +static const char *
  66316. +getoffset(strp, offsetp)
  66317. +register const char *    strp;
  66318. +long * const        offsetp;
  66319. +{
  66320. +    register int    neg;
  66321. +
  66322. +    if (*strp == '-') {
  66323. +        neg = 1;
  66324. +        ++strp;
  66325. +    } else if (isdigit(*strp) || *strp++ == '+')
  66326. +        neg = 0;
  66327. +    else    return NULL;        /* illegal offset */
  66328. +    strp = getsecs(strp, offsetp);
  66329. +    if (strp == NULL)
  66330. +        return NULL;        /* illegal time */
  66331. +    if (neg)
  66332. +        *offsetp = -*offsetp;
  66333. +    return strp;
  66334. +}
  66335. +
  66336. +/*
  66337. +** Given a pointer into a time zone string, extract a rule in the form
  66338. +** date[/time].  See POSIX section 8 for the format of "date" and "time".
  66339. +** If a valid rule is not found, return NULL.
  66340. +** Otherwise, return a pointer to the first character not part of the rule.
  66341. +*/
  66342. +
  66343. +static const char *
  66344. +getrule(strp, rulep)
  66345. +const char *            strp;
  66346. +register struct rule * const    rulep;
  66347. +{
  66348. +    if (*strp == 'J') {
  66349. +        /*
  66350. +        ** Julian day.
  66351. +        */
  66352. +        rulep->r_type = JULIAN_DAY;
  66353. +        ++strp;
  66354. +        strp = getnum(strp, &rulep->r_day, 1, DAYSPERNYEAR);
  66355. +    } else if (*strp == 'M') {
  66356. +        /*
  66357. +        ** Month, week, day.
  66358. +        */
  66359. +        rulep->r_type = MONTH_NTH_DAY_OF_WEEK;
  66360. +        ++strp;
  66361. +        strp = getnum(strp, &rulep->r_mon, 1, MONSPERYEAR);
  66362. +        if (strp == NULL)
  66363. +            return NULL;
  66364. +        if (*strp++ != '.')
  66365. +            return NULL;
  66366. +        strp = getnum(strp, &rulep->r_week, 1, 5);
  66367. +        if (strp == NULL)
  66368. +            return NULL;
  66369. +        if (*strp++ != '.')
  66370. +            return NULL;
  66371. +        strp = getnum(strp, &rulep->r_day, 0, DAYSPERWEEK - 1);
  66372. +    } else if (isdigit(*strp)) {
  66373. +        /*
  66374. +        ** Day of year.
  66375. +        */
  66376. +        rulep->r_type = DAY_OF_YEAR;
  66377. +        strp = getnum(strp, &rulep->r_day, 0, DAYSPERLYEAR - 1);
  66378. +    } else    return NULL;        /* invalid format */
  66379. +    if (strp == NULL)
  66380. +        return NULL;
  66381. +    if (*strp == '/') {
  66382. +        /*
  66383. +        ** Time specified.
  66384. +        */
  66385. +        ++strp;
  66386. +        strp = getsecs(strp, &rulep->r_time);
  66387. +    } else    rulep->r_time = 2 * SECSPERHOUR;    /* default = 2:00:00 */
  66388. +    return strp;
  66389. +}
  66390. +
  66391. +/*
  66392. +** Given the Epoch-relative time of January 1, 00:00:00 GMT, in a year, the
  66393. +** year, a rule, and the offset from GMT at the time that rule takes effect,
  66394. +** calculate the Epoch-relative time that rule takes effect.
  66395. +*/
  66396. +
  66397. +static time_t
  66398. +transtime(janfirst, year, rulep, offset)
  66399. +const time_t                janfirst;
  66400. +const int                year;
  66401. +register const struct rule * const    rulep;
  66402. +const long                offset;
  66403. +{
  66404. +    register int    leapyear;
  66405. +    register time_t    value;
  66406. +    register int    i;
  66407. +    int        d, m1, yy0, yy1, yy2, dow;
  66408. +
  66409. +    leapyear = isleap(year);
  66410. +    switch (rulep->r_type) {
  66411. +
  66412. +    case JULIAN_DAY:
  66413. +        /*
  66414. +        ** Jn - Julian day, 1 == January 1, 60 == March 1 even in leap
  66415. +        ** years.
  66416. +        ** In non-leap years, or if the day number is 59 or less, just
  66417. +        ** add SECSPERDAY times the day number-1 to the time of
  66418. +        ** January 1, midnight, to get the day.
  66419. +        */
  66420. +        value = janfirst + (rulep->r_day - 1) * SECSPERDAY;
  66421. +        if (leapyear && rulep->r_day >= 60)
  66422. +            value += SECSPERDAY;
  66423. +        break;
  66424. +
  66425. +    case DAY_OF_YEAR:
  66426. +        /*
  66427. +        ** n - day of year.
  66428. +        ** Just add SECSPERDAY times the day number to the time of
  66429. +        ** January 1, midnight, to get the day.
  66430. +        */
  66431. +        value = janfirst + rulep->r_day * SECSPERDAY;
  66432. +        break;
  66433. +
  66434. +    case MONTH_NTH_DAY_OF_WEEK:
  66435. +        /*
  66436. +        ** Mm.n.d - nth "dth day" of month m.
  66437. +        */
  66438. +        value = janfirst;
  66439. +        for (i = 0; i < rulep->r_mon - 1; ++i)
  66440. +            value += mon_lengths[leapyear][i] * SECSPERDAY;
  66441. +
  66442. +        /*
  66443. +        ** Use Zeller's Congruence to get day-of-week of first day of
  66444. +        ** month.
  66445. +        */
  66446. +        m1 = (rulep->r_mon + 9) % 12 + 1;
  66447. +        yy0 = (rulep->r_mon <= 2) ? (year - 1) : year;
  66448. +        yy1 = yy0 / 100;
  66449. +        yy2 = yy0 % 100;
  66450. +        dow = ((26 * m1 - 2) / 10 +
  66451. +            1 + yy2 + yy2 / 4 + yy1 / 4 - 2 * yy1) % 7;
  66452. +        if (dow < 0)
  66453. +            dow += DAYSPERWEEK;
  66454. +
  66455. +        /*
  66456. +        ** "dow" is the day-of-week of the first day of the month.  Get
  66457. +        ** the day-of-month (zero-origin) of the first "dow" day of the
  66458. +        ** month.
  66459. +        */
  66460. +        d = rulep->r_day - dow;
  66461. +        if (d < 0)
  66462. +            d += DAYSPERWEEK;
  66463. +        for (i = 1; i < rulep->r_week; ++i) {
  66464. +            if (d + DAYSPERWEEK >=
  66465. +                mon_lengths[leapyear][rulep->r_mon - 1])
  66466. +                    break;
  66467. +            d += DAYSPERWEEK;
  66468. +        }
  66469. +
  66470. +        /*
  66471. +        ** "d" is the day-of-month (zero-origin) of the day we want.
  66472. +        */
  66473. +        value += d * SECSPERDAY;
  66474. +        break;
  66475. +    }
  66476. +
  66477. +    /*
  66478. +    ** "value" is the Epoch-relative time of 00:00:00 GMT on the day in
  66479. +    ** question.  To get the Epoch-relative time of the specified local
  66480. +    ** time on that day, add the transition time and the current offset
  66481. +    ** from GMT.
  66482. +    */
  66483. +    return value + rulep->r_time + offset;
  66484. +}
  66485. +
  66486. +/*
  66487. +** Given a POSIX section 8-style TZ string, fill in the rule tables as
  66488. +** appropriate.
  66489. +*/
  66490. +
  66491. +static int
  66492. +tzparse(name, sp, lastditch)
  66493. +const char *            name;
  66494. +register struct state * const    sp;
  66495. +const int            lastditch;
  66496. +{
  66497. +    const char *            stdname;
  66498. +    const char *            dstname;
  66499. +    int                stdlen;
  66500. +    int                dstlen;
  66501. +    long                stdoffset;
  66502. +    long                dstoffset;
  66503. +    register time_t *        atp;
  66504. +    register unsigned char *    typep;
  66505. +    register char *            cp;
  66506. +    register int            load_result;
  66507. +
  66508. +    stdname = name;
  66509. +    if (lastditch) {
  66510. +        stdlen = strlen(name);    /* length of standard zone name */
  66511. +        name += stdlen;
  66512. +        if (stdlen >= sizeof sp->chars)
  66513. +            stdlen = (sizeof sp->chars) - 1;
  66514. +    } else {
  66515. +        name = getzname(name);
  66516. +        stdlen = name - stdname;
  66517. +        if (stdlen < 3)
  66518. +            return -1;
  66519. +    }
  66520. +    if (*name == '\0')
  66521. +        return -1;
  66522. +    else {
  66523. +        name = getoffset(name, &stdoffset);
  66524. +        if (name == NULL)
  66525. +            return -1;
  66526. +    }
  66527. +    load_result = tzload(TZDEFRULES, sp);
  66528. +    if (load_result != 0)
  66529. +        sp->leapcnt = 0;        /* so, we're off a little */
  66530. +    if (*name != '\0') {
  66531. +        dstname = name;
  66532. +        name = getzname(name);
  66533. +        dstlen = name - dstname;    /* length of DST zone name */
  66534. +        if (dstlen < 3)
  66535. +            return -1;
  66536. +        if (*name != '\0' && *name != ',' && *name != ';') {
  66537. +            name = getoffset(name, &dstoffset);
  66538. +            if (name == NULL)
  66539. +                return -1;
  66540. +        } else    dstoffset = stdoffset - SECSPERHOUR;
  66541. +        if (*name == ',' || *name == ';') {
  66542. +            struct rule    start;
  66543. +            struct rule    end;
  66544. +            register int    year;
  66545. +            register time_t    janfirst;
  66546. +            time_t        starttime;
  66547. +            time_t        endtime;
  66548. +
  66549. +            ++name;
  66550. +            if ((name = getrule(name, &start)) == NULL)
  66551. +                return -1;
  66552. +            if (*name++ != ',')
  66553. +                return -1;
  66554. +            if ((name = getrule(name, &end)) == NULL)
  66555. +                return -1;
  66556. +            if (*name != '\0')
  66557. +                return -1;
  66558. +            sp->typecnt = 2;    /* standard time and DST */
  66559. +            /*
  66560. +            ** Two transitions per year, from EPOCH_YEAR to 2037.
  66561. +            */
  66562. +            sp->timecnt = 2 * (2037 - EPOCH_YEAR + 1);
  66563. +            if (sp->timecnt > TZ_MAX_TIMES)
  66564. +                return -1;
  66565. +            sp->ttis[0].tt_gmtoff = -dstoffset;
  66566. +            sp->ttis[0].tt_isdst = 1;
  66567. +            sp->ttis[0].tt_abbrind = stdlen + 1;
  66568. +            sp->ttis[1].tt_gmtoff = -stdoffset;
  66569. +            sp->ttis[1].tt_isdst = 0;
  66570. +            sp->ttis[1].tt_abbrind = 0;
  66571. +            atp = sp->ats;
  66572. +            typep = sp->types;
  66573. +            janfirst = 0;
  66574. +            for (year = EPOCH_YEAR; year <= 2037; ++year) {
  66575. +                starttime = transtime(janfirst, year, &start,
  66576. +                    stdoffset);
  66577. +                endtime = transtime(janfirst, year, &end,
  66578. +                    dstoffset);
  66579. +                if (starttime > endtime) {
  66580. +                    *atp++ = endtime;
  66581. +                    *typep++ = 1;    /* DST ends */
  66582. +                    *atp++ = starttime;
  66583. +                    *typep++ = 0;    /* DST begins */
  66584. +                } else {
  66585. +                    *atp++ = starttime;
  66586. +                    *typep++ = 0;    /* DST begins */
  66587. +                    *atp++ = endtime;
  66588. +                    *typep++ = 1;    /* DST ends */
  66589. +                }
  66590. +                janfirst +=
  66591. +                    year_lengths[isleap(year)] * SECSPERDAY;
  66592. +            }
  66593. +        } else {
  66594. +            int        sawstd;
  66595. +            int        sawdst;
  66596. +            long        stdfix;
  66597. +            long        dstfix;
  66598. +            long        oldfix;
  66599. +            int        isdst;
  66600. +            register int    i;
  66601. +
  66602. +            if (*name != '\0')
  66603. +                return -1;
  66604. +            if (load_result != 0)
  66605. +                return -1;
  66606. +            /*
  66607. +            ** Compute the difference between the real and
  66608. +            ** prototype standard and summer time offsets
  66609. +            ** from GMT, and put the real standard and summer
  66610. +            ** time offsets into the rules in place of the
  66611. +            ** prototype offsets.
  66612. +            */
  66613. +            sawstd = FALSE;
  66614. +            sawdst = FALSE;
  66615. +            stdfix = 0;
  66616. +            dstfix = 0;
  66617. +            for (i = 0; i < sp->typecnt; ++i) {
  66618. +                if (sp->ttis[i].tt_isdst) {
  66619. +                    oldfix = dstfix;
  66620. +                    dstfix =
  66621. +                        sp->ttis[i].tt_gmtoff + dstoffset;
  66622. +                    if (sawdst && (oldfix != dstfix))
  66623. +                        return -1;
  66624. +                    sp->ttis[i].tt_gmtoff = -dstoffset;
  66625. +                    sp->ttis[i].tt_abbrind = stdlen + 1;
  66626. +                    sawdst = TRUE;
  66627. +                } else {
  66628. +                    oldfix = stdfix;
  66629. +                    stdfix =
  66630. +                        sp->ttis[i].tt_gmtoff + stdoffset;
  66631. +                    if (sawstd && (oldfix != stdfix))
  66632. +                        return -1;
  66633. +                    sp->ttis[i].tt_gmtoff = -stdoffset;
  66634. +                    sp->ttis[i].tt_abbrind = 0;
  66635. +                    sawstd = TRUE;
  66636. +                }
  66637. +            }
  66638. +            /*
  66639. +            ** Make sure we have both standard and summer time.
  66640. +            */
  66641. +            if (!sawdst || !sawstd)
  66642. +                return -1;
  66643. +            /*
  66644. +            ** Now correct the transition times by shifting
  66645. +            ** them by the difference between the real and
  66646. +            ** prototype offsets.  Note that this difference
  66647. +            ** can be different in standard and summer time;
  66648. +            ** the prototype probably has a 1-hour difference
  66649. +            ** between standard and summer time, but a different
  66650. +            ** difference can be specified in TZ.
  66651. +            */
  66652. +            isdst = FALSE;    /* we start in standard time */
  66653. +            for (i = 0; i < sp->timecnt; ++i) {
  66654. +                register const struct ttinfo *    ttisp;
  66655. +
  66656. +                /*
  66657. +                ** If summer time is in effect, and the
  66658. +                ** transition time was not specified as
  66659. +                ** standard time, add the summer time
  66660. +                ** offset to the transition time;
  66661. +                ** otherwise, add the standard time offset
  66662. +                ** to the transition time.
  66663. +                */
  66664. +                ttisp = &sp->ttis[sp->types[i]];
  66665. +                sp->ats[i] +=
  66666. +                    (isdst && !ttisp->tt_ttisstd) ?
  66667. +                        dstfix : stdfix;
  66668. +                isdst = ttisp->tt_isdst;
  66669. +            }
  66670. +        }
  66671. +    } else {
  66672. +        dstlen = 0;
  66673. +        sp->typecnt = 1;        /* only standard time */
  66674. +        sp->timecnt = 0;
  66675. +        sp->ttis[0].tt_gmtoff = -stdoffset;
  66676. +        sp->ttis[0].tt_isdst = 0;
  66677. +        sp->ttis[0].tt_abbrind = 0;
  66678. +    }
  66679. +    sp->charcnt = stdlen + 1;
  66680. +    if (dstlen != 0)
  66681. +        sp->charcnt += dstlen + 1;
  66682. +    if (sp->charcnt > sizeof sp->chars)
  66683. +        return -1;
  66684. +    cp = sp->chars;
  66685. +    (void) strncpy(cp, stdname, stdlen);
  66686. +    cp += stdlen;
  66687. +    *cp++ = '\0';
  66688. +    if (dstlen != 0) {
  66689. +        (void) strncpy(cp, dstname, dstlen);
  66690. +        *(cp + dstlen) = '\0';
  66691. +    }
  66692. +    return 0;
  66693. +}
  66694. +
  66695. +static void
  66696. +gmtload(sp)
  66697. +struct state * const    sp;
  66698. +{
  66699. +    if (tzload(GMT, sp) != 0)
  66700. +        (void) tzparse(GMT, sp, TRUE);
  66701. +}
  66702. +
  66703. +void
  66704. +tzset()
  66705. +{
  66706. +    register const char *    name;
  66707. +    void tzsetwall();
  66708. +
  66709. +    name = getenv("UNIXTZ");
  66710. +    if (name == NULL) {
  66711. +        tzsetwall();
  66712. +        return;
  66713. +    }
  66714. +    lcl_is_set = TRUE;
  66715. +#ifdef ALL_STATE
  66716. +    if (lclptr == NULL) {
  66717. +        lclptr = (struct state *) malloc(sizeof *lclptr);
  66718. +        if (lclptr == NULL) {
  66719. +            settzname();    /* all we can do */
  66720. +            return;
  66721. +        }
  66722. +    }
  66723. +#endif /* defined ALL_STATE */
  66724. +    if (*name == '\0') {
  66725. +        /*
  66726. +        ** User wants it fast rather than right.
  66727. +        */
  66728. +        lclptr->leapcnt = 0;        /* so, we're off a little */
  66729. +        lclptr->timecnt = 0;
  66730. +        lclptr->ttis[0].tt_gmtoff = 0;
  66731. +        lclptr->ttis[0].tt_abbrind = 0;
  66732. +        (void) strcpy(lclptr->chars, GMT);
  66733. +    } else if (tzload(name, lclptr) != 0)
  66734. +        if (name[0] == ':' || tzparse(name, lclptr, FALSE) != 0)
  66735. +            (void) gmtload(lclptr);
  66736. +    settzname();
  66737. +}
  66738. +
  66739. +void
  66740. +tzsetwall()
  66741. +{
  66742. +    lcl_is_set = TRUE;
  66743. +#ifdef ALL_STATE
  66744. +    if (lclptr == NULL) {
  66745. +        lclptr = (struct state *) malloc(sizeof *lclptr);
  66746. +        if (lclptr == NULL) {
  66747. +            settzname();    /* all we can do */
  66748. +            return;
  66749. +        }
  66750. +    }
  66751. +#endif /* defined ALL_STATE */
  66752. +    if (tzload((char *) NULL, lclptr) != 0)
  66753. +        gmtload(lclptr);
  66754. +    settzname();
  66755. +}
  66756. +
  66757. +/*
  66758. +** The easy way to behave "as if no library function calls" localtime
  66759. +** is to not call it--so we drop its guts into "localsub", which can be
  66760. +** freely called.  (And no, the PANS doesn't require the above behavior--
  66761. +** but it *is* desirable.)
  66762. +**
  66763. +** The unused offset argument is for the benefit of mktime variants.
  66764. +*/
  66765. +
  66766. +/*ARGSUSED*/
  66767. +static void
  66768. +localsub(timep, offset, tmp)
  66769. +const time_t * const    timep;
  66770. +const long        offset;
  66771. +struct tm * const    tmp;
  66772. +{
  66773. +    register struct state *    sp;
  66774. +    register const struct ttinfo *    ttisp;
  66775. +    register int            i;
  66776. +    const time_t            t = *timep;
  66777. +
  66778. +    if (!lcl_is_set)
  66779. +        tzset();
  66780. +    sp = lclptr;
  66781. +#ifdef ALL_STATE
  66782. +    if (sp == NULL) {
  66783. +        gmtsub(timep, offset, tmp);
  66784. +        return;
  66785. +    }
  66786. +#endif /* defined ALL_STATE */
  66787. +    if (sp->timecnt == 0 || t < sp->ats[0]) {
  66788. +        i = 0;
  66789. +        while (sp->ttis[i].tt_isdst)
  66790. +            if (++i >= sp->typecnt) {
  66791. +                i = 0;
  66792. +                break;
  66793. +            }
  66794. +    } else {
  66795. +        for (i = 1; i < sp->timecnt; ++i)
  66796. +            if (t < sp->ats[i])
  66797. +                break;
  66798. +        i = sp->types[i - 1];
  66799. +    }
  66800. +    ttisp = &sp->ttis[i];
  66801. +    /*
  66802. +    ** To get (wrong) behavior that's compatible with System V Release 2.0
  66803. +    ** you'd replace the statement below with
  66804. +    **    t += ttisp->tt_gmtoff;
  66805. +    **    timesub(&t, 0L, sp, tmp);
  66806. +    */
  66807. +    timesub(&t, ttisp->tt_gmtoff, sp, tmp);
  66808. +    tmp->tm_isdst = ttisp->tt_isdst;
  66809. +    tzname[tmp->tm_isdst] = (char *) &sp->chars[ttisp->tt_abbrind];
  66810. +    tmp->tm_zone = &sp->chars[ttisp->tt_abbrind];
  66811. +}
  66812. +
  66813. +struct tm *
  66814. +localtime(timep)
  66815. +const time_t * const    timep;
  66816. +{
  66817. +    static struct tm    tm;
  66818. +
  66819. +    localsub(timep, 0L, &tm);
  66820. +    return &tm;
  66821. +}
  66822. +
  66823. +/*
  66824. +** gmtsub is to gmtime as localsub is to localtime.
  66825. +*/
  66826. +
  66827. +static void
  66828. +gmtsub(timep, offset, tmp)
  66829. +const time_t * const    timep;
  66830. +const long        offset;
  66831. +struct tm * const    tmp;
  66832. +{
  66833. +    if (!gmt_is_set) {
  66834. +        gmt_is_set = TRUE;
  66835. +#ifdef ALL_STATE
  66836. +        gmtptr = (struct state *) malloc(sizeof *gmtptr);
  66837. +        if (gmtptr != NULL)
  66838. +#endif /* defined ALL_STATE */
  66839. +            gmtload(gmtptr);
  66840. +    }
  66841. +    timesub(timep, offset, gmtptr, tmp);
  66842. +    /*
  66843. +    ** Could get fancy here and deliver something such as
  66844. +    ** "GMT+xxxx" or "GMT-xxxx" if offset is non-zero,
  66845. +    ** but this is no time for a treasure hunt.
  66846. +    */
  66847. +    if (offset != 0)
  66848. +        tmp->tm_zone = WILDABBR;
  66849. +    else {
  66850. +#ifdef ALL_STATE
  66851. +        if (gmtptr == NULL)
  66852. +            tmp->TM_ZONE = GMT;
  66853. +        else    tmp->TM_ZONE = gmtptr->chars;
  66854. +#endif /* defined ALL_STATE */
  66855. +#ifndef ALL_STATE
  66856. +        tmp->tm_zone = gmtptr->chars;
  66857. +#endif /* State Farm */
  66858. +    }
  66859. +}
  66860. +
  66861. +struct tm *
  66862. +gmtime(timep)
  66863. +const time_t * const    timep;
  66864. +{
  66865. +    static struct tm    tm;
  66866. +
  66867. +    gmtsub(timep, 0L, &tm);
  66868. +    return &tm;
  66869. +}
  66870. +
  66871. +static void
  66872. +timesub(timep, offset, sp, tmp)
  66873. +const time_t * const            timep;
  66874. +const long                offset;
  66875. +register const struct state * const    sp;
  66876. +register struct tm * const        tmp;
  66877. +{
  66878. +    register const struct lsinfo *    lp;
  66879. +    register long            days;
  66880. +    register long            rem;
  66881. +    register int            y;
  66882. +    register int            yleap;
  66883. +    register const int *        ip;
  66884. +    register long            corr;
  66885. +    register int            hit;
  66886. +    register int            i;
  66887. +
  66888. +    corr = 0;
  66889. +    hit = FALSE;
  66890. +#ifdef ALL_STATE
  66891. +    i = (sp == NULL) ? 0 : sp->leapcnt;
  66892. +#endif /* defined ALL_STATE */
  66893. +#ifndef ALL_STATE
  66894. +    i = sp->leapcnt;
  66895. +#endif /* State Farm */
  66896. +    while (--i >= 0) {
  66897. +        lp = &sp->lsis[i];
  66898. +        if (*timep >= lp->ls_trans) {
  66899. +            if (*timep == lp->ls_trans)
  66900. +                hit = ((i == 0 && lp->ls_corr > 0) ||
  66901. +                    lp->ls_corr > sp->lsis[i - 1].ls_corr);
  66902. +            corr = lp->ls_corr;
  66903. +            break;
  66904. +        }
  66905. +    }
  66906. +    days = *timep / SECSPERDAY;
  66907. +    rem = *timep % SECSPERDAY;
  66908. +#ifdef mc68k
  66909. +    if (*timep == 0x80000000) {
  66910. +        /*
  66911. +        ** A 3B1 muffs the division on the most negative number.
  66912. +        */
  66913. +        days = -24855;
  66914. +        rem = -11648;
  66915. +    }
  66916. +#endif /* mc68k */
  66917. +    rem += (offset - corr);
  66918. +    while (rem < 0) {
  66919. +        rem += SECSPERDAY;
  66920. +        --days;
  66921. +    }
  66922. +    while (rem >= SECSPERDAY) {
  66923. +        rem -= SECSPERDAY;
  66924. +        ++days;
  66925. +    }
  66926. +    tmp->tm_hour = (int) (rem / SECSPERHOUR);
  66927. +    rem = rem % SECSPERHOUR;
  66928. +    tmp->tm_min = (int) (rem / SECSPERMIN);
  66929. +    tmp->tm_sec = (int) (rem % SECSPERMIN);
  66930. +    if (hit)
  66931. +        /*
  66932. +        ** A positive leap second requires a special
  66933. +        ** representation.  This uses "... ??:59:60".
  66934. +        */
  66935. +        ++(tmp->tm_sec);
  66936. +    tmp->tm_wday = (int) ((EPOCH_WDAY + days) % DAYSPERWEEK);
  66937. +    if (tmp->tm_wday < 0)
  66938. +        tmp->tm_wday += DAYSPERWEEK;
  66939. +    y = EPOCH_YEAR;
  66940. +    if (days >= 0)
  66941. +        for ( ; ; ) {
  66942. +            yleap = isleap(y);
  66943. +            if (days < (long) year_lengths[yleap])
  66944. +                break;
  66945. +            ++y;
  66946. +            days = days - (long) year_lengths[yleap];
  66947. +        }
  66948. +    else do {
  66949. +        --y;
  66950. +        yleap = isleap(y);
  66951. +        days = days + (long) year_lengths[yleap];
  66952. +    } while (days < 0);
  66953. +    tmp->tm_year = y - TM_YEAR_BASE;
  66954. +    tmp->tm_yday = (int) days;
  66955. +    ip = mon_lengths[yleap];
  66956. +    for (tmp->tm_mon = 0; days >= (long) ip[tmp->tm_mon]; ++(tmp->tm_mon))
  66957. +        days = days - (long) ip[tmp->tm_mon];
  66958. +    tmp->tm_mday = (int) (days + 1);
  66959. +    tmp->tm_isdst = 0;
  66960. +    tmp->tm_gmtoff = offset;
  66961. +}
  66962. +
  66963. +/*
  66964. +** A la X3J11
  66965. +*/
  66966. +
  66967. +char *
  66968. +asctime(timeptr)
  66969. +register const struct tm *    timeptr;
  66970. +{
  66971. +    static const char    wday_name[DAYSPERWEEK][3] = {
  66972. +        "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
  66973. +    };
  66974. +    static const char    mon_name[MONSPERYEAR][3] = {
  66975. +        "Jan", "Feb", "Mar", "Apr", "May", "Jun",
  66976. +        "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
  66977. +    };
  66978. +    static char    result[26];
  66979. +
  66980. +    (void) sprintf(result, "%.3s %.3s%3d %02.2d:%02.2d:%02.2d %d\n",
  66981. +        wday_name[timeptr->tm_wday],
  66982. +        mon_name[timeptr->tm_mon],
  66983. +        timeptr->tm_mday, timeptr->tm_hour,
  66984. +        timeptr->tm_min, timeptr->tm_sec,
  66985. +        TM_YEAR_BASE + timeptr->tm_year);
  66986. +    return result;
  66987. +}
  66988. +
  66989. +char *
  66990. +ctime(timep)
  66991. +const time_t * const    timep;
  66992. +{
  66993. +    return asctime(localtime(timep));
  66994. +}
  66995. +
  66996. +/*
  66997. +** Adapted from code provided by Robert Elz, who writes:
  66998. +**    The "best" way to do mktime I think is based on an idea of Bob
  66999. +**    Kridle's (so its said...) from a long time ago. (mtxinu!kridle now).
  67000. +**    It does a binary search of the time_t space.  Since time_t's are
  67001. +**    just 32 bits, its a max of 32 iterations (even at 64 bits it
  67002. +**    would still be very reasonable).
  67003. +*/
  67004. +
  67005. +#ifndef WRONG
  67006. +#define WRONG    (-1)
  67007. +#endif /* !defined WRONG */
  67008. +
  67009. +static void
  67010. +normalize(tensptr, unitsptr, base)
  67011. +int * const    tensptr;
  67012. +int * const    unitsptr;
  67013. +const int    base;
  67014. +{
  67015. +    if (*unitsptr >= base) {
  67016. +        *tensptr += *unitsptr / base;
  67017. +        *unitsptr %= base;
  67018. +    } else if (*unitsptr < 0) {
  67019. +        --*tensptr;
  67020. +        *unitsptr += base;
  67021. +        if (*unitsptr < 0) {
  67022. +            *tensptr -= 1 + (-*unitsptr) / base;
  67023. +            *unitsptr = base - (-*unitsptr) % base;
  67024. +        }
  67025. +    }
  67026. +}
  67027. +
  67028. +static int
  67029. +tmcomp(atmp, btmp)
  67030. +register const struct tm * const atmp;
  67031. +register const struct tm * const btmp;
  67032. +{
  67033. +    register int    result;
  67034. +
  67035. +    if ((result = (atmp->tm_year - btmp->tm_year)) == 0 &&
  67036. +        (result = (atmp->tm_mon - btmp->tm_mon)) == 0 &&
  67037. +        (result = (atmp->tm_mday - btmp->tm_mday)) == 0 &&
  67038. +        (result = (atmp->tm_hour - btmp->tm_hour)) == 0 &&
  67039. +        (result = (atmp->tm_min - btmp->tm_min)) == 0)
  67040. +            result = atmp->tm_sec - btmp->tm_sec;
  67041. +    return result;
  67042. +}
  67043. +
  67044. +static time_t
  67045. +time2(tmp, funcp, offset, okayp)
  67046. +struct tm * const    tmp;
  67047. +void (* const        funcp)();
  67048. +const long        offset;
  67049. +int * const        okayp;
  67050. +{
  67051. +    register const struct state *    sp;
  67052. +    register int            dir;
  67053. +    register int            bits;
  67054. +    register int            i, j ;
  67055. +    register int            saved_seconds;
  67056. +    time_t                newt;
  67057. +    time_t                t;
  67058. +    struct tm            yourtm, mytm;
  67059. +
  67060. +    *okayp = FALSE;
  67061. +    yourtm = *tmp;
  67062. +    if (yourtm.tm_sec >= SECSPERMIN + 2 || yourtm.tm_sec < 0)
  67063. +        normalize(&yourtm.tm_min, &yourtm.tm_sec, SECSPERMIN);
  67064. +    normalize(&yourtm.tm_hour, &yourtm.tm_min, MINSPERHOUR);
  67065. +    normalize(&yourtm.tm_mday, &yourtm.tm_hour, HOURSPERDAY);
  67066. +    normalize(&yourtm.tm_year, &yourtm.tm_mon, MONSPERYEAR);
  67067. +    while (yourtm.tm_mday <= 0) {
  67068. +        --yourtm.tm_year;
  67069. +        yourtm.tm_mday +=
  67070. +            year_lengths[isleap(yourtm.tm_year + TM_YEAR_BASE)];
  67071. +    }
  67072. +    for ( ; ; ) {
  67073. +        i = mon_lengths[isleap(yourtm.tm_year +
  67074. +            TM_YEAR_BASE)][yourtm.tm_mon];
  67075. +        if (yourtm.tm_mday <= i)
  67076. +            break;
  67077. +        yourtm.tm_mday -= i;
  67078. +        if (++yourtm.tm_mon >= MONSPERYEAR) {
  67079. +            yourtm.tm_mon = 0;
  67080. +            ++yourtm.tm_year;
  67081. +        }
  67082. +    }
  67083. +    saved_seconds = yourtm.tm_sec;
  67084. +    yourtm.tm_sec = 0;
  67085. +    /*
  67086. +    ** Calculate the number of magnitude bits in a time_t
  67087. +    ** (this works regardless of whether time_t is
  67088. +    ** signed or unsigned, though lint complains if unsigned).
  67089. +    */
  67090. +    for (bits = 0, t = 1; t > 0; ++bits, t <<= 1)
  67091. +        ;
  67092. +    /*
  67093. +    ** If time_t is signed, then 0 is the median value,
  67094. +    ** if time_t is unsigned, then 1 << bits is median.
  67095. +    */
  67096. +    t = (t < 0) ? 0 : ((time_t) 1 << bits);
  67097. +    for ( ; ; ) {
  67098. +        (*funcp)(&t, offset, &mytm);
  67099. +        dir = tmcomp(&mytm, &yourtm);
  67100. +        if (dir != 0) {
  67101. +            if (bits-- < 0)
  67102. +                return WRONG;
  67103. +            if (bits < 0)
  67104. +                --t;
  67105. +            else if (dir > 0)
  67106. +                t -= (time_t) 1 << bits;
  67107. +            else    t += (time_t) 1 << bits;
  67108. +            continue;
  67109. +        }
  67110. +        if (yourtm.tm_isdst < 0 || mytm.tm_isdst == yourtm.tm_isdst)
  67111. +            break;
  67112. +        /*
  67113. +        ** Right time, wrong type.
  67114. +        ** Hunt for right time, right type.
  67115. +        ** It's okay to guess wrong since the guess
  67116. +        ** gets checked.
  67117. +        */
  67118. +        sp = (const struct state *)
  67119. +            ((funcp == localsub) ? lclptr : gmtptr);
  67120. +#ifdef ALL_STATE
  67121. +        if (sp == NULL)
  67122. +            return WRONG;
  67123. +#endif /* defined ALL_STATE */
  67124. +        for (i = 0; i < sp->typecnt; ++i) {
  67125. +            if (sp->ttis[i].tt_isdst != yourtm.tm_isdst)
  67126. +                continue;
  67127. +            for (j = 0; j < sp->typecnt; ++j) {
  67128. +                if (sp->ttis[j].tt_isdst == yourtm.tm_isdst)
  67129. +                    continue;
  67130. +                newt = t + sp->ttis[j].tt_gmtoff -
  67131. +                    sp->ttis[i].tt_gmtoff;
  67132. +                (*funcp)(&newt, offset, &mytm);
  67133. +                if (tmcomp(&mytm, &yourtm) != 0)
  67134. +                    continue;
  67135. +                if (mytm.tm_isdst != yourtm.tm_isdst)
  67136. +                    continue;
  67137. +                /*
  67138. +                ** We have a match.
  67139. +                */
  67140. +                t = newt;
  67141. +                goto label;
  67142. +            }
  67143. +        }
  67144. +        return WRONG;
  67145. +    }
  67146. +label:
  67147. +    t += saved_seconds;
  67148. +    (*funcp)(&t, offset, tmp);
  67149. +    *okayp = TRUE;
  67150. +    return t;
  67151. +}
  67152. +
  67153. +static time_t
  67154. +time1(tmp, funcp, offset)
  67155. +struct tm * const    tmp;
  67156. +void (* const        funcp)();
  67157. +const long        offset;
  67158. +{
  67159. +    register time_t            t;
  67160. +    register const struct state *    sp;
  67161. +    register int            samei, otheri;
  67162. +    int                okay;
  67163. +
  67164. +    if (tmp->tm_isdst > 1)
  67165. +        tmp->tm_isdst = 1;
  67166. +    t = time2(tmp, funcp, offset, &okay);
  67167. +    if (okay || tmp->tm_isdst < 0)
  67168. +        return t;
  67169. +    /*
  67170. +    ** We're supposed to assume that somebody took a time of one type
  67171. +    ** and did some math on it that yielded a "struct tm" that's bad.
  67172. +    ** We try to divine the type they started from and adjust to the
  67173. +    ** type they need.
  67174. +    */
  67175. +    sp = (const struct state *) ((funcp == localsub) ? lclptr : gmtptr);
  67176. +#ifdef ALL_STATE
  67177. +    if (sp == NULL)
  67178. +        return WRONG;
  67179. +#endif /* defined ALL_STATE */
  67180. +    for (samei = 0; samei < sp->typecnt; ++samei) {
  67181. +        if (sp->ttis[samei].tt_isdst != tmp->tm_isdst)
  67182. +            continue;
  67183. +        for (otheri = 0; otheri < sp->typecnt; ++otheri) {
  67184. +            if (sp->ttis[otheri].tt_isdst == tmp->tm_isdst)
  67185. +                continue;
  67186. +            tmp->tm_sec += sp->ttis[otheri].tt_gmtoff -
  67187. +                    sp->ttis[samei].tt_gmtoff;
  67188. +            tmp->tm_isdst = !tmp->tm_isdst;
  67189. +            t = time2(tmp, funcp, offset, &okay);
  67190. +            if (okay)
  67191. +                return t;
  67192. +            tmp->tm_sec -= sp->ttis[otheri].tt_gmtoff -
  67193. +                    sp->ttis[samei].tt_gmtoff;
  67194. +            tmp->tm_isdst = !tmp->tm_isdst;
  67195. +        }
  67196. +    }
  67197. +    return WRONG;
  67198. +}
  67199. +
  67200. +time_t
  67201. +mktime(tmp)
  67202. +struct tm * const    tmp;
  67203. +{
  67204. +    return time1(tmp, localsub, 0L);
  67205. +}
  67206. +
  67207. +/* Call tzset() if necessary */
  67208. +void _tzset(void)
  67209. +{
  67210. +  if (!lcl_is_set) tzset();
  67211. +}
  67212. +
  67213. diff -rup --new-file baseline/fsf/emacs/unixlib/src/devices.c amiga/fsf/emacs/unixlib/src/devices.c
  67214. --- baseline/fsf/emacs/unixlib/src/devices.c    Wed Dec 31 17:00:00 1969
  67215. +++ amiga/fsf/emacs/unixlib/src/devices.c    Sat Sep 28 00:00:00 1996
  67216. @@ -0,0 +1,33 @@
  67217. +#include "amiga.h"
  67218. +#include "devices.h"
  67219. +
  67220. +struct IORequest *_device_open(char *name, ULONG unit, ULONG flags,
  67221. +                   APTR data, ULONG data_len, int req_size)
  67222. +{
  67223. +    struct MsgPort *port;
  67224. +    struct IORequest *ioreq;
  67225. +
  67226. +    if ((port = CreateMsgPort()) && (ioreq = CreateIORequest(port, req_size)))
  67227. +    {
  67228. +    if (data)
  67229. +    {
  67230. +        struct IOStdReq *io2 = (struct IOStdReq *)ioreq;
  67231. +        io2->io_Data = data;
  67232. +        io2->io_Length = data_len;
  67233. +    }
  67234. +    if (OpenDevice(name, unit, ioreq, flags) == 0) return ioreq;
  67235. +    }
  67236. +    if (ioreq) DeleteIORequest(ioreq);
  67237. +    if (port) DeletePort(port);
  67238. +    return 0;
  67239. +}
  67240. +
  67241. +void _device_close(struct IORequest *ioreq)
  67242. +{
  67243. +    if (ioreq)
  67244. +    {
  67245. +    CloseDevice(ioreq);
  67246. +    DeletePort(ioreq->io_Message.mn_ReplyPort);
  67247. +    DeleteIORequest(ioreq);
  67248. +    }
  67249. +}
  67250. diff -rup --new-file baseline/fsf/emacs/unixlib/src/dir.c amiga/fsf/emacs/unixlib/src/dir.c
  67251. --- baseline/fsf/emacs/unixlib/src/dir.c    Wed Dec 31 17:00:00 1969
  67252. +++ amiga/fsf/emacs/unixlib/src/dir.c    Sat Sep 28 00:00:00 1996
  67253. @@ -0,0 +1,177 @@
  67254. +#include "amiga.h"
  67255. +#include "dir_data.h"
  67256. +#include <string.h>
  67257. +
  67258. +/* opendir/readdir/etc ... emulation w/ stat support hack */
  67259. +
  67260. +static void free_entries(iDIR *info)
  67261. +{
  67262. +  struct idirent *scan = info->files;
  67263. +  
  67264. +  while (scan)
  67265. +    {
  67266. +      struct idirent *next = scan->next;
  67267. +      
  67268. +      free(scan);
  67269. +      scan = next;
  67270. +    }
  67271. +}
  67272. +
  67273. +static int gobble_dir(DIR *dir)
  67274. +{
  67275. +  iDIR *info = (iDIR *)dir->dd_buf;
  67276. +  long ioerr;
  67277. +  struct idirent **last = &info->files;
  67278. +  struct FileLock *dirlock;
  67279. +  
  67280. +  free_entries(info);
  67281. +  last_dir = 0;
  67282. +  info->files = 0;
  67283. +  dir->dd_loc = 0;
  67284. +  /* Find a value for st_dev of stat() calls */
  67285. +  dirlock = BADDR(dir->dd_fd);
  67286. +  info->task = dirlock->fl_Task;
  67287. +  while (ExNext(dir->dd_fd, &info->fib))
  67288. +    {
  67289. +      u_short namlen = strlen(info->fib.fib_FileName);
  67290. +      u_short reclen = namlen + 1 + offsetof(struct idirent, entry.d_name);
  67291. +      struct idirent *newentry = (struct idirent *)malloc(reclen);
  67292. +      struct dirent *entry;
  67293. +      
  67294. +      if (!newentry)
  67295. +    {
  67296. +      errno = ENOMEM;
  67297. +      return 0;
  67298. +    }
  67299. +      newentry->next = 0;
  67300. +      *last = newentry;
  67301. +      last = &newentry->next;
  67302. +      
  67303. +      newentry->numblocks = info->fib.fib_NumBlocks;
  67304. +      newentry->size = info->fib.fib_Size;
  67305. +      newentry->date = info->fib.fib_Date;
  67306. +      newentry->type = info->fib.fib_DirEntryType;
  67307. +      newentry->protection = info->fib.fib_Protection;
  67308. +      
  67309. +      entry = &newentry->entry;
  67310. +      entry->d_reclen = reclen;
  67311. +      entry->d_namlen = namlen;
  67312. +      entry->d_off = dir->dd_loc++;
  67313. +      strcpy(entry->d_name, info->fib.fib_FileName);
  67314. +      entry->d_ino = info->fib.fib_DiskKey;
  67315. +    }
  67316. +  info->pos = info->files;
  67317. +  dir->dd_loc = 0;
  67318. +  ioerr = IoErr();
  67319. +  if (ioerr == ERROR_NO_MORE_ENTRIES) return 1;
  67320. +  
  67321. +  errno = convert_oserr(ioerr);
  67322. +  return 0;
  67323. +}
  67324. +
  67325. +DIR *opendir(char *dirname)
  67326. +{
  67327. +  DIR *new = (DIR *)malloc(sizeof *new);
  67328. +  iDIR *info = (iDIR *)malloc(sizeof *info);
  67329. +  char *dircopy = malloc(strlen(dirname) + 1);
  67330. +
  67331. +  chkabort();
  67332. +  if (new && dircopy && info)
  67333. +    {
  67334. +      new->dd_buf = (char *)info;
  67335. +      new->dd_size = sizeof *info;
  67336. +      
  67337. +      info->files = info->pos = 0;
  67338. +      info->seeked = 0;
  67339. +      info->dirname = dircopy;
  67340. +      strcpy(dircopy, dirname);
  67341. +      info->cdir = _get_cd();
  67342. +      
  67343. +      if ((new->dd_fd = Lock(dirname, ACCESS_READ)) &&
  67344. +      Examine(new->dd_fd, &info->fib))
  67345. +    {
  67346. +      if (gobble_dir(new)) return new;
  67347. +    }
  67348. +      else errno = convert_oserr(IoErr());
  67349. +      closedir(new);
  67350. +      return 0;
  67351. +    }
  67352. +  
  67353. +  errno = ENOMEM;
  67354. +  if (new) free(new);
  67355. +  if (dircopy) free(dircopy);
  67356. +  if (info) free(info);
  67357. +  
  67358. +  return 0;
  67359. +}
  67360. +
  67361. +void closedir(DIR *dir)
  67362. +{
  67363. +  iDIR *info = (iDIR *)dir->dd_buf;
  67364. +  
  67365. +  chkabort();
  67366. +  last_dir = 0;
  67367. +  free_entries(info);
  67368. +  free(info->dirname);
  67369. +  if (dir->dd_fd) UnLock(dir->dd_fd);
  67370. +  free(dir->dd_buf);
  67371. +  free(dir);
  67372. +}
  67373. +
  67374. +struct dirent *readdir(DIR *dir)
  67375. +{
  67376. +  iDIR *info = (iDIR *)dir->dd_buf;
  67377. +  struct dirent *entry = 0;
  67378. +  
  67379. +  chkabort();
  67380. +  if (info->seeked)
  67381. +    {
  67382. +      long cloc = 0;
  67383. +      struct idirent *pos;
  67384. +      
  67385. +      pos = info->files;
  67386. +      
  67387. +      while (cloc < dir->dd_loc && pos)
  67388. +    {
  67389. +      cloc++; pos = pos->next;
  67390. +    }
  67391. +      /*if (cloc != dir->dd_loc) error ...
  67392. +    This doesn't seem to be defined very precisely */
  67393. +      info->pos = pos;
  67394. +      info->seeked = 0;
  67395. +    }
  67396. +  if (info->pos)
  67397. +    {
  67398. +      entry = &info->pos->entry;
  67399. +      
  67400. +      last_dir = dir;
  67401. +      last_entry = info->pos;
  67402. +      
  67403. +      info->pos = info->pos->next;
  67404. +      dir->dd_loc++;
  67405. +    }
  67406. +  return entry;
  67407. +}
  67408. +
  67409. +long telldir(DIR *dir)
  67410. +{
  67411. +  chkabort();
  67412. +  return dir->dd_loc;
  67413. +}
  67414. +
  67415. +void seekdir(DIR *dir, long loc)
  67416. +{
  67417. +  iDIR *info = (iDIR *)dir->dd_buf;
  67418. +  
  67419. +  chkabort();
  67420. +  info->seeked = 1;
  67421. +  dir->dd_loc = loc;
  67422. +}
  67423. +
  67424. +#if 0
  67425. +void rewwinddir(DIR *dir)
  67426. +{
  67427. +  chkabort();
  67428. +  gobble_dir(dir);
  67429. +}
  67430. +#endif
  67431. diff -rup --new-file baseline/fsf/emacs/unixlib/src/dir_data.c amiga/fsf/emacs/unixlib/src/dir_data.c
  67432. --- baseline/fsf/emacs/unixlib/src/dir_data.c    Wed Dec 31 17:00:00 1969
  67433. +++ amiga/fsf/emacs/unixlib/src/dir_data.c    Sat Sep 28 00:00:00 1996
  67434. @@ -0,0 +1,15 @@
  67435. +#include "amiga.h"
  67436. +#include "dir_data.h"
  67437. +
  67438. +DIR *last_dir;
  67439. +struct idirent *last_entry;
  67440. +
  67441. +BPTR _get_cd(void)
  67442. +{
  67443. +  BPTR dir = CurrentDir(0);
  67444. +  
  67445. +  CurrentDir(dir);
  67446. +  
  67447. +  return dir;
  67448. +}
  67449. +
  67450. diff -rup --new-file baseline/fsf/emacs/unixlib/src/dir_data.h amiga/fsf/emacs/unixlib/src/dir_data.h
  67451. --- baseline/fsf/emacs/unixlib/src/dir_data.h    Wed Dec 31 17:00:00 1969
  67452. +++ amiga/fsf/emacs/unixlib/src/dir_data.h    Sat Sep 28 00:00:00 1996
  67453. @@ -0,0 +1,33 @@
  67454. +#ifndef DIR_DATA_H
  67455. +#define DIR_DATA_H
  67456. +
  67457. +#include <sys/dir.h>
  67458. +
  67459. +typedef struct
  67460. +{
  67461. +  char *dirname;
  67462. +  BPTR cdir;
  67463. +  struct FileInfoBlock fib;
  67464. +  struct idirent *files, *pos;
  67465. +  int seeked;
  67466. +  struct MsgPort *task;        /* Used to fake a value for st_dev */
  67467. +} iDIR;
  67468. +
  67469. +struct idirent
  67470. +{
  67471. +  struct idirent *next;
  67472. +  /* Info needed for stat */
  67473. +  long numblocks;
  67474. +  long size;
  67475. +  struct DateStamp date;
  67476. +  long type;
  67477. +  long protection;
  67478. +  struct dirent entry;
  67479. +};
  67480. +
  67481. +extern DIR *last_dir;
  67482. +extern struct idirent *last_entry;
  67483. +
  67484. +BPTR _get_cd(void);
  67485. +
  67486. +#endif
  67487. diff -rup --new-file baseline/fsf/emacs/unixlib/src/error.c amiga/fsf/emacs/unixlib/src/error.c
  67488. --- baseline/fsf/emacs/unixlib/src/error.c    Wed Dec 31 17:00:00 1969
  67489. +++ amiga/fsf/emacs/unixlib/src/error.c    Sat Sep 28 00:00:00 1996
  67490. @@ -0,0 +1,47 @@
  67491. +#include "amiga.h"
  67492. +
  67493. +int errno;
  67494. +
  67495. +int convert_oserr(int ioerr)
  67496. +{
  67497. +  extern int _OSERR;
  67498. +
  67499. +  _OSERR = ioerr;
  67500. +  switch (ioerr)
  67501. +    {
  67502. +    case 0: return 0;
  67503. +    case ERROR_NO_FREE_STORE: return ENOMEM;
  67504. +    case ERROR_TASK_TABLE_FULL: return EAGAIN;
  67505. +    case ERROR_BAD_TEMPLATE: case ERROR_REQUIRED_ARG_MISSING: case ERROR_BAD_NUMBER:
  67506. +    case ERROR_KEY_NEEDS_ARG: case ERROR_TOO_MANY_ARGS:
  67507. +    case ERROR_UNMATCHED_QUOTES: return EINVAL;
  67508. +    case ERROR_LINE_TOO_LONG: return E2BIG;
  67509. +    case ERROR_FILE_NOT_OBJECT: return ENOEXEC;
  67510. +    case ERROR_OBJECT_IN_USE: return EBUSY;
  67511. +    case ERROR_OBJECT_EXISTS: return EEXIST;
  67512. +    case ERROR_DIR_NOT_FOUND: return ENOENT;
  67513. +    case ERROR_OBJECT_NOT_FOUND: return ENOENT;
  67514. +    case ERROR_BAD_STREAM_NAME: return EINVAL;
  67515. +    case ERROR_OBJECT_TOO_LARGE: return E2BIG;
  67516. +    case ERROR_ACTION_NOT_KNOWN: return EINVAL;
  67517. +    case ERROR_INVALID_COMPONENT_NAME: return ENAMETOOLONG;
  67518. +    case ERROR_INVALID_LOCK: return EINVAL;
  67519. +    case ERROR_OBJECT_WRONG_TYPE: return EINVAL;
  67520. +    case ERROR_DISK_WRITE_PROTECTED: return EROFS;
  67521. +    case ERROR_RENAME_ACROSS_DEVICES: return EXDEV;
  67522. +    case ERROR_DIRECTORY_NOT_EMPTY: return ENOTEMPTY;
  67523. +    case ERROR_TOO_MANY_LEVELS: return ELOOP;
  67524. +    case ERROR_DEVICE_NOT_MOUNTED: return ENODEV;
  67525. +    case ERROR_SEEK_ERROR: return EINVAL;
  67526. +    case ERROR_DISK_FULL: return ENOSPC;
  67527. +    case ERROR_DELETE_PROTECTED: return EACCES;
  67528. +    case ERROR_WRITE_PROTECTED: return EACCES;
  67529. +    case ERROR_READ_PROTECTED: return EACCES;
  67530. +    default: return EOSERR;
  67531. +    }
  67532. +}
  67533. +
  67534. +void _seterr(void)
  67535. +{
  67536. +    errno = convert_oserr(IoErr());
  67537. +}
  67538. diff -rup --new-file baseline/fsf/emacs/unixlib/src/error_msg.c amiga/fsf/emacs/unixlib/src/error_msg.c
  67539. --- baseline/fsf/emacs/unixlib/src/error_msg.c    Wed Dec 31 17:00:00 1969
  67540. +++ amiga/fsf/emacs/unixlib/src/error_msg.c    Sat Sep 28 00:00:00 1996
  67541. @@ -0,0 +1,48 @@
  67542. +#include "amiga.h"
  67543. +
  67544. +/* Gross hack because EOSERR is -1. */
  67545. +static char *sys_amiga_error = "amiga specific error";
  67546. +char *sys_errlist[] =
  67547. +  {
  67548. +    "Unknown error",
  67549. +    "not owner",
  67550. +    "no such file or directory",
  67551. +    "no such process",
  67552. +    "interrupted system call",
  67553. +    "i/o error",
  67554. +    "no such device or address",
  67555. +    "argument list too long",
  67556. +    "exec format error",
  67557. +    "bad file number",
  67558. +    "no child process",
  67559. +    "no more processes",
  67560. +    "not enough memory",
  67561. +    "permission denied",
  67562. +    "bad address",
  67563. +    "block device required",
  67564. +    "mount devices busy",
  67565. +    "file exists",
  67566. +    "cross-device link",
  67567. +    "no such device",
  67568. +    "not a directory",
  67569. +    "is a directory",
  67570. +    "invalid argument",
  67571. +    "file table overflow",
  67572. +    "too many open files",
  67573. +    "not a typewriter",
  67574. +    "text file busy",
  67575. +    "file too big",
  67576. +    "no space left on device",
  67577. +    "illegal seek",
  67578. +    "read-only file system",
  67579. +    "too many links",
  67580. +    "broken pipe",
  67581. +    "math argument",
  67582. +    "result too large",
  67583. +    "I/O stream empty",
  67584. +    "file name too long",
  67585. +    "directory not empty",
  67586. +    "too many soft links (loop?)"
  67587. +};
  67588. +
  67589. +int sys_nerr = ELOOP;
  67590. diff -rup --new-file baseline/fsf/emacs/unixlib/src/exec.c amiga/fsf/emacs/unixlib/src/exec.c
  67591. --- baseline/fsf/emacs/unixlib/src/exec.c    Wed Dec 31 17:00:00 1969
  67592. +++ amiga/fsf/emacs/unixlib/src/exec.c    Sat Sep 28 00:00:00 1996
  67593. @@ -0,0 +1,143 @@
  67594. +#include "amiga.h"
  67595. +#include "processes.h"
  67596. +#include <amiga/ioctl.h>
  67597. +#include <exec/memory.h>
  67598. +#include <dos/dosextens.h>
  67599. +#include <dos/dostags.h>
  67600. +#include <string.h>
  67601. +
  67602. +int eexec(char *program, char **argv, int input, int output, int error,
  67603. +      char *dir, int stacksize)
  67604. +/* input = -1 -> inherit Input()
  67605. +   output = -1 -> inherit Output()
  67606. +   error = -1 -> inherit pr_CES
  67607. +   error = -2 -> stderr = stdout */
  67608. +{
  67609. +  int index, comsize, close_input, close_output, close_error;
  67610. +  char *combuf, *bp;
  67611. +  BPTR in, out, err, dirlock;
  67612. +  int _pseudo_close(int fd);
  67613. +
  67614. +  comsize = 256;
  67615. +  combuf = malloc(comsize);
  67616. +
  67617. +  if (input == -1)
  67618. +    {
  67619. +      in = Input();
  67620. +      close_input = FALSE;
  67621. +    }
  67622. +  else
  67623. +    {
  67624. +      if (ioctl(input, _AMIGA_GET_FH, &in) == -1) in = 0;
  67625. +      close_input = TRUE;
  67626. +      _pseudo_close(input);
  67627. +    }
  67628. +
  67629. +  if (output == -1)
  67630. +    {
  67631. +      out = Output();
  67632. +      close_output = FALSE;
  67633. +    }
  67634. +  else if (input == output)
  67635. +    {
  67636. +      out = in;
  67637. +      close_output = FALSE;
  67638. +    }
  67639. +  else
  67640. +    {
  67641. +      if (ioctl(output, _AMIGA_GET_FH, &out) == -1) out = 0;
  67642. +      close_output = out != in;
  67643. +      _pseudo_close(output);
  67644. +    }
  67645. +
  67646. +  if (error == -1)
  67647. +    {
  67648. +      err = _us->pr_CES;
  67649. +      close_error = FALSE;
  67650. +    }
  67651. +  else if (error == -2)
  67652. +    {
  67653. +      err = out;
  67654. +      close_error = FALSE;
  67655. +    }
  67656. +  else
  67657. +    {
  67658. +      if (ioctl(error, _AMIGA_GET_FH, &err) == -1) err = 0;
  67659. +      close_error = err != out && err != in;
  67660. +      _pseudo_close(error);
  67661. +    }
  67662. +
  67663. +  /* pr_CES is not always defined */
  67664. +  if (in && out && (err || error == -1))
  67665. +    if (combuf)
  67666. +      {
  67667. +    bp = combuf;
  67668. +    for (index = 0; argv[index] != 0; index++)
  67669. +      {
  67670. +        /* Use program as argv[0]. This loses some information, but ... */
  67671. +        char *arg = index == 0 ? program : argv[index];
  67672. +        char *s;
  67673. +        int len;
  67674. +
  67675. +        len = 3;
  67676. +        s = arg;
  67677. +        while (*s)
  67678. +          {
  67679. +        len++;
  67680. +        if (*s == '*' || *s == '"' || *s == '\n') len++;
  67681. +        s++;
  67682. +          }
  67683. +        if (bp + len + 1 >= combuf + comsize)
  67684. +          {
  67685. +        char *newbuf;
  67686. +
  67687. +        comsize += comsize + len;
  67688. +        newbuf = realloc(combuf, comsize);
  67689. +        if (!newbuf) { errno = ENOMEM; goto error; }
  67690. +        bp = newbuf + (bp - combuf);
  67691. +        combuf = newbuf;
  67692. +          }
  67693. +        *bp++ = ' ';
  67694. +        *bp++ = '"';
  67695. +        s = arg;
  67696. +        while (*s)
  67697. +          {
  67698. +        if (*s == '"' || *s == '*') *bp++ = '*';
  67699. +        else if (*s == '\n') *bp++ = '+';
  67700. +        *bp++ = *s++;
  67701. +          }
  67702. +        *bp++ = '"';
  67703. +      }
  67704. +    *bp = '\0';
  67705. +    if (dir) dirlock = Lock(dir, SHARED_LOCK);
  67706. +    else dirlock = 0;
  67707. +
  67708. +    if (dirlock || !dir)
  67709. +      {
  67710. +        int pid = _start_process(combuf, in, close_input, out, close_output,
  67711. +                     err, close_error, dirlock, stacksize);
  67712. +
  67713. +        if (pid != -1)
  67714. +          {
  67715. +        free(combuf);
  67716. +        return pid;
  67717. +          }
  67718. +      }
  67719. +    else errno = convert_oserr(IoErr());
  67720. +    if (dirlock) UnLock(dirlock);
  67721. +      }
  67722. +    else errno = ENOMEM;
  67723. +
  67724. + error:
  67725. +  if (in && close_input) Close(in);
  67726. +  if (out && close_output) Close(out);
  67727. +  if (err && close_error) Close(err);
  67728. +  if (combuf) free(combuf);
  67729. +  return -1;
  67730. +}
  67731. +
  67732. +int exec(char *program, char **argv, int input, int output, 
  67733. +      char *dir, int stacksize)
  67734. +{
  67735. +  return eexec(program, argv, input, output, -1, dir, stacksize);
  67736. +}
  67737. diff -rup --new-file baseline/fsf/emacs/unixlib/src/fchmod.c amiga/fsf/emacs/unixlib/src/fchmod.c
  67738. --- baseline/fsf/emacs/unixlib/src/fchmod.c    Wed Dec 31 17:00:00 1969
  67739. +++ amiga/fsf/emacs/unixlib/src/fchmod.c    Sat Sep 28 00:00:00 1996
  67740. @@ -0,0 +1,10 @@
  67741. +#include "amiga.h"
  67742. +#include <amiga/ioctl.h>
  67743. +
  67744. +int fchmod(int fd, int mode)
  67745. +{
  67746. +  long amode = _make_protection(mode);
  67747. +
  67748. +  chkabort();
  67749. +  return ioctl(fd, _AMIGA_SETPROTECTION, &amode);
  67750. +}
  67751. diff -rup --new-file baseline/fsf/emacs/unixlib/src/fcntl.c amiga/fsf/emacs/unixlib/src/fcntl.c
  67752. --- baseline/fsf/emacs/unixlib/src/fcntl.c    Wed Dec 31 17:00:00 1969
  67753. +++ amiga/fsf/emacs/unixlib/src/fcntl.c    Sat Sep 28 00:00:00 1996
  67754. @@ -0,0 +1,43 @@
  67755. +#include "amiga.h"
  67756. +#include "files.h"
  67757. +#include <fcntl.h>
  67758. +#include <sys/filio.h>
  67759. +#include <stdarg.h>
  67760. +
  67761. +/* Flags that can be changed with fcntl */
  67762. +#define FCNTL_FLAGS (O_NDELAY | O_APPEND)
  67763. +
  67764. +int fcntl(int fd, int cmd, ...)
  67765. +{
  67766. +  struct fileinfo *fi;
  67767. +  va_list args;
  67768. +  int arg;
  67769. +
  67770. +  chkabort();
  67771. +  va_start(args, cmd);
  67772. +  arg = va_arg(args, int);
  67773. +  va_end(args);
  67774. +
  67775. +  if (fi = _find_fd(fd))
  67776. +    {
  67777. +      switch (cmd)
  67778. +    {
  67779. +    default: errno = EINVAL; break;
  67780. +    case F_GETFL: return fi->flags & FCNTL_FLAGS;
  67781. +    case F_SETFL:
  67782. +      {
  67783. +        int oldfl = fi->flags;
  67784. +
  67785. +        fi->flags = (fi->flags & ~FCNTL_FLAGS) | (arg & FCNTL_FLAGS);
  67786. +        if ((oldfl & O_NDELAY) != (fi->flags & O_NDELAY))
  67787. +          {
  67788. +        int ndelay = fi->flags & O_NDELAY;
  67789. +
  67790. +        return fi->ioctl(fi->userinfo, FIONBIO, &ndelay);
  67791. +          }
  67792. +        return 0;
  67793. +      }
  67794. +    }
  67795. +    }
  67796. +  return -1;
  67797. +}
  67798. diff -rup --new-file baseline/fsf/emacs/unixlib/src/fibstat.c amiga/fsf/emacs/unixlib/src/fibstat.c
  67799. --- baseline/fsf/emacs/unixlib/src/fibstat.c    Wed Dec 31 17:00:00 1969
  67800. +++ amiga/fsf/emacs/unixlib/src/fibstat.c    Sat Sep 28 00:00:00 1996
  67801. @@ -0,0 +1,90 @@
  67802. +#include "amiga.h"
  67803. +#include "fibstat.h"
  67804. +#include "timeconvert.h"
  67805. +#include <fcntl.h>
  67806. +#include <time.h>
  67807. +#include <sys/stat.h>
  67808. +#include <utility/tagitem.h>
  67809. +
  67810. +char _temp_fname[FNAMESIZE];
  67811. +
  67812. +void _lfibstat(char *name, struct FileInfoBlock *fib, struct MsgPort *task,
  67813. +           int isroot, struct stat *sbuf)
  67814. +{
  67815. +  long protection = fib->fib_Protection;
  67816. +  
  67817. +  sbuf->st_dev = (long)task;
  67818. +  sbuf->st_rdev = 0;
  67819. +  sbuf->st_uid = AMIGA_UID; sbuf->st_gid = AMIGA_GID;
  67820. +  sbuf->st_blksize = 512;
  67821. +#ifdef PRETEND_LINKED
  67822. +  /* This forces programs (tar) to consider potential hard links */
  67823. +  sbuf->st_nlink = 2;
  67824. +#else
  67825. +  sbuf->st_nlink = 1;
  67826. +#endif
  67827. +  sbuf->st_blocks = fib->fib_NumBlocks;
  67828. +  /* Give directories an arbitrary size */
  67829. +  if (fib->fib_Size == 0 && fib->fib_DirEntryType > 0) sbuf->st_size = 2048;
  67830. +  else sbuf->st_size = fib->fib_Size;
  67831. +  sbuf->st_ino = fib->fib_DiskKey;
  67832. +  sbuf->st_ctime = sbuf->st_atime = sbuf->st_mtime = _amiga2gmt(&fib->fib_Date);
  67833. +  
  67834. +  switch (fib->fib_DirEntryType)
  67835. +    {
  67836. +    case ST_SOFTLINK:
  67837. +      {
  67838. +    int len;
  67839. +
  67840. +    if (name && (len = readlink(name, _temp_fname, FNAMESIZE - 1)) > 0)
  67841. +      sbuf->st_size = len;
  67842. +    else sbuf->st_size = 256; /* A random safish value */
  67843. +    sbuf->st_mode = S_IFLNK;
  67844. +    break;
  67845. +      }
  67846. +    case ST_PIPEFILE: sbuf->st_mode = S_IFIFO; break;
  67847. +      /* If Examine wasn't braindead this would be the right test */
  67848. +    case ST_ROOT: sbuf->st_mode = S_IFDIR; protection = 0; break;
  67849. +    case ST_FILE: /* Try & detect special files (eg windows) */
  67850. +      if (fib->fib_DiskKey == 0 && !fib->fib_FileName[0])
  67851. +    sbuf->st_mode = S_IFCHR;
  67852. +      else sbuf->st_mode = S_IFREG;
  67853. +      break;
  67854. +    default: sbuf->st_mode = fib->fib_DirEntryType > 0 ? S_IFDIR : S_IFREG; break;
  67855. +    }
  67856. +  /* Examine is braindead. You can't tell if you've examined a root directory
  67857. +     (for which the protection flags are invalid) or not. */
  67858. +  if (isroot) protection = 0;
  67859. +
  67860. +  sbuf->st_mode |= _make_mode(protection);
  67861. +}
  67862. +
  67863. +int _fibstat(char *name, struct stat *sbuf)
  67864. +{
  67865. +  int ret;
  67866. +  struct FileInfoBlock *fib;
  67867. +  BPTR lock = 0;
  67868. +
  67869. +  if ((fib = AllocDosObjectTags(DOS_FIB, TAG_END)) &&
  67870. +      (lock = Lock(name, ACCESS_READ)) &&
  67871. +      Examine(lock, fib))
  67872. +    {
  67873. +      BPTR parent = ParentDir(lock);
  67874. +      int isroot = !parent;
  67875. +      struct FileLock *flock = BADDR(lock);
  67876. +      
  67877. +      if (parent) UnLock(parent);
  67878. +      _lfibstat(name, fib, flock->fl_Task, isroot, sbuf);
  67879. +      ret = 0;
  67880. +    }
  67881. +  else
  67882. +    {
  67883. +      ret = -1;
  67884. +      errno = convert_oserr(IoErr());
  67885. +    }
  67886. +  if (lock) UnLock(lock);
  67887. +  if (fib) FreeDosObject(DOS_FIB, fib);
  67888. +  return ret;
  67889. +}
  67890. +
  67891. +      
  67892. diff -rup --new-file baseline/fsf/emacs/unixlib/src/fibstat.h amiga/fsf/emacs/unixlib/src/fibstat.h
  67893. --- baseline/fsf/emacs/unixlib/src/fibstat.h    Wed Dec 31 17:00:00 1969
  67894. +++ amiga/fsf/emacs/unixlib/src/fibstat.h    Sat Sep 28 00:00:00 1996
  67895. @@ -0,0 +1,12 @@
  67896. +#ifndef FIBSTAT_H
  67897. +
  67898. +#define FNAMESIZE 256
  67899. +
  67900. +extern char _temp_fname[FNAMESIZE];
  67901. +
  67902. +void _lfibstat(char *name, struct FileInfoBlock *fib, struct MsgPort *task,
  67903. +           int isroot, struct stat *sbuf);
  67904. +
  67905. +int _fibstat(char *name, struct stat *sbuf);
  67906. +
  67907. +#endif
  67908. diff -rup --new-file baseline/fsf/emacs/unixlib/src/fifo.h amiga/fsf/emacs/unixlib/src/fifo.h
  67909. --- baseline/fsf/emacs/unixlib/src/fifo.h    Wed Dec 31 17:00:00 1969
  67910. +++ amiga/fsf/emacs/unixlib/src/fifo.h    Sat Sep 28 00:00:00 1996
  67911. @@ -0,0 +1,41 @@
  67912. +
  67913. +/*
  67914. + *  FIFO.H
  67915. + *
  67916. + *  PUBLIC FIFO STRUCTURES AND DEFINES
  67917. + */
  67918. +
  67919. +#ifndef LIBRARIES_FIFO_H
  67920. +#define LIBRARIES_FIFO_H
  67921. +
  67922. +#define FIFONAME    "fifo.library"
  67923. +
  67924. +#define FIFOF_READ      0x00000100L      /*  intend to read from fifo      */
  67925. +#define FIFOF_WRITE      0x00000200L      /*  intend to write to fifo      */
  67926. +#define FIFOF_RESERVED      0xFFFF0000L      /*  reserved for internal use   */
  67927. +#define FIFOF_NORMAL      0x00000400L      /*  request blocking/sig support*/
  67928. +#define FIFOF_NBIO      0x00000800L      /*  non-blocking IO          */
  67929. +
  67930. +#define FIFOF_KEEPIFD      0x00002000L      /*  keep fifo alive if data pending */
  67931. +#define FIFOF_EOF      0x00004000L      /*  EOF on close              */
  67932. +#define FIFOF_RREQUIRED   0x00008000L      /*  reader required to exist      */
  67933. +
  67934. +#define FREQ_RPEND    1
  67935. +#define FREQ_WAVAIL    2
  67936. +#define FREQ_ABORT    3
  67937. +
  67938. +typedef void *FifoHan;              /*  returned by OpenFifo()  */
  67939. +
  67940. +#ifndef IN_LIBRARY
  67941. +
  67942. +FifoHan OpenFifo(char *, long, long);
  67943. +void CloseFifo(FifoHan, long);
  67944. +long ReadFifo(FifoHan, char **, long);
  67945. +long WriteFifo(FifoHan, char *, long);
  67946. +void RequestFifo(FifoHan, struct Message *, long);
  67947. +long BufSizeFifo(FifoHan);
  67948. +
  67949. +#endif
  67950. +
  67951. +#endif
  67952. +
  67953. diff -rup --new-file baseline/fsf/emacs/unixlib/src/fifo_pragmas.h amiga/fsf/emacs/unixlib/src/fifo_pragmas.h
  67954. --- baseline/fsf/emacs/unixlib/src/fifo_pragmas.h    Wed Dec 31 17:00:00 1969
  67955. +++ amiga/fsf/emacs/unixlib/src/fifo_pragmas.h    Sat Sep 28 00:00:00 1996
  67956. @@ -0,0 +1,7 @@
  67957. +/* "fifo.library"*/
  67958. +#pragma libcall _FifoBase OpenFifo 1E 81003
  67959. +#pragma libcall _FifoBase CloseFifo 24 1002
  67960. +#pragma libcall _FifoBase ReadFifo 2A 81003
  67961. +#pragma libcall _FifoBase WriteFifo 30 81003
  67962. +#pragma libcall _FifoBase RequestFifo 36 81003
  67963. +#pragma libcall _FifoBase BufSizeFifo 3C 001
  67964. diff -rup --new-file baseline/fsf/emacs/unixlib/src/fifofd.c amiga/fsf/emacs/unixlib/src/fifofd.c
  67965. --- baseline/fsf/emacs/unixlib/src/fifofd.c    Wed Dec 31 17:00:00 1969
  67966. +++ amiga/fsf/emacs/unixlib/src/fifofd.c    Sat Sep 28 00:00:00 1996
  67967. @@ -0,0 +1,25 @@
  67968. +#include "amiga.h"
  67969. +#include "files.h"
  67970. +#include "fifofd.h"
  67971. +#include <time.h>
  67972. +
  67973. +struct Library *_FifoBase;
  67974. +int _fifo_sig = -1;
  67975. +long _fifo_base;
  67976. +long _fifo_offset;
  67977. +int _fifo_ok;
  67978. +
  67979. +void _init_fifo(void)
  67980. +{
  67981. +  _fifo_base = (int)_us ^ _startup_time * 65537;
  67982. +  _fifo_offset = 0;
  67983. +  _FifoBase = OpenLibrary("fifo.library", 0);
  67984. +  _fifo_sig = AllocSignal(-1);
  67985. +  _fifo_ok = _FifoBase != 0 && _fifo_sig >= 0;
  67986. +}
  67987. +
  67988. +void _cleanup_fifo(void)
  67989. +{
  67990. +  if (_fifo_sig >= 0) FreeSignal(_fifo_sig);
  67991. +  if (_FifoBase) CloseLibrary(_FifoBase);
  67992. +}
  67993. diff -rup --new-file baseline/fsf/emacs/unixlib/src/fifofd.h amiga/fsf/emacs/unixlib/src/fifofd.h
  67994. --- baseline/fsf/emacs/unixlib/src/fifofd.h    Wed Dec 31 17:00:00 1969
  67995. +++ amiga/fsf/emacs/unixlib/src/fifofd.h    Sat Sep 28 00:00:00 1996
  67996. @@ -0,0 +1,31 @@
  67997. +#ifndef FIFO_H
  67998. +#define FIFO_H
  67999. +
  68000. +#include "fifo.h"
  68001. +#include "fifo_pragmas.h"
  68002. +
  68003. +#define FIFO_BUFSIZE 1024
  68004. +#define FIFO_NAMELEN 32
  68005. +
  68006. +struct fifoinfo
  68007. +{
  68008. +  char name[FIFO_NAMELEN];
  68009. +  void *rfifo, *wfifo;
  68010. +  long maxsend, skip;
  68011. +  int flags;
  68012. +  struct Message *rmsg, *wmsg;
  68013. +  struct MsgPort *reply;
  68014. +};
  68015. +
  68016. +#define FIFO_MASTER 0x8000
  68017. +
  68018. +extern struct Library *_FifoBase;
  68019. +extern int _fifo_sig;
  68020. +extern long _fifo_base;
  68021. +extern long _fifo_offset;
  68022. +extern int _fifo_ok;
  68023. +
  68024. +void _init_fifo(void);
  68025. +void _cleanup_fifo(void);
  68026. +
  68027. +#endif
  68028. diff -rup --new-file baseline/fsf/emacs/unixlib/src/files.c amiga/fsf/emacs/unixlib/src/files.c
  68029. --- baseline/fsf/emacs/unixlib/src/files.c    Wed Dec 31 17:00:00 1969
  68030. +++ amiga/fsf/emacs/unixlib/src/files.c    Sat Sep 28 00:00:00 1996
  68031. @@ -0,0 +1,74 @@
  68032. +#include "amiga.h"
  68033. +#include "files.h"
  68034. +#include <string.h>
  68035. +
  68036. +/* Unix low-level IO emulation */
  68037. +/* --------------------------- */
  68038. +
  68039. +/* First, fd definition & allocation */
  68040. +
  68041. +static struct fileinfo *files;
  68042. +static int max_files;
  68043. +#define FILE_STEP 10        /* Nb of file descriptors to allocate at once */
  68044. +
  68045. +int _alloc_fd(void *userinfo, int flags,
  68046. +  ULONG (*__regargs select_start)(void *userinfo, int rd, int wr),
  68047. +  void (*__regargs select_poll)(void *userinfo, int *rd, int *wr),
  68048. +  int (*__regargs read)(void *userinfo, void *buffer, unsigned int length),
  68049. +  int (*__regargs write)(void *userinfo, void *buffer, unsigned int length),
  68050. +  int (*__regargs lseek)(void *userinfo, long rpos, int mode),
  68051. +  int (*__regargs close)(void *userinfo, int internal),
  68052. +  int (*__regargs ioctl)(void *userinfo, int request, void *data)
  68053. +)
  68054. +{
  68055. +  int fd;
  68056. +
  68057. +  for (fd = 0; fd < max_files; fd++)
  68058. +      if (!files[fd].userinfo)
  68059. +    {
  68060. +      files[fd].userinfo = (void *)1;
  68061. +      break;
  68062. +    }
  68063. +  if (fd == max_files)
  68064. +    {
  68065. +      struct fileinfo *newfiles;
  68066. +      int i;
  68067. +
  68068. +      /* Increase files array by FILE_STEP */
  68069. +      max_files += FILE_STEP;
  68070. +      newfiles = (struct fileinfo *)malloc(max_files * sizeof(struct fileinfo));
  68071. +      if (!newfiles)
  68072. +    {
  68073. +      errno = ENOMEM;
  68074. +      return -1;
  68075. +    }
  68076. +      memcpy(newfiles, files, (max_files - FILE_STEP) * sizeof(struct fileinfo));
  68077. +      if (files) free(files);
  68078. +      files = newfiles;
  68079. +      for (i = max_files - FILE_STEP; i < max_files; i++) files[i].userinfo = 0;
  68080. +    }
  68081. +  files[fd].userinfo = userinfo;
  68082. +  files[fd].flags = flags;
  68083. +  files[fd].select_start = select_start;
  68084. +  files[fd].select_poll = select_poll;
  68085. +  files[fd].read = read;
  68086. +  files[fd].write = write;
  68087. +  files[fd].lseek = lseek;
  68088. +  files[fd].close = close;
  68089. +  files[fd].ioctl = ioctl;
  68090. +  return fd;
  68091. +}
  68092. +
  68093. +void _free_fd(int fd)
  68094. +{
  68095. +  if (0 <= fd && fd < max_files) files[fd].userinfo = 0;
  68096. +}
  68097. +
  68098. +struct fileinfo *_find_fd(int fd)
  68099. +{
  68100. +  if (0 <= fd && fd < max_files && files[fd].userinfo) return &files[fd];
  68101. +  errno = EBADF;
  68102. +  return 0;
  68103. +}
  68104. +
  68105. +int _last_fd(void) { return max_files; }
  68106. diff -rup --new-file baseline/fsf/emacs/unixlib/src/fstat.c amiga/fsf/emacs/unixlib/src/fstat.c
  68107. --- baseline/fsf/emacs/unixlib/src/fstat.c    Wed Dec 31 17:00:00 1969
  68108. +++ amiga/fsf/emacs/unixlib/src/fstat.c    Sat Sep 28 00:00:00 1996
  68109. @@ -0,0 +1,52 @@
  68110. +#include "amiga.h"
  68111. +#include "fibstat.h"
  68112. +#include <dos/dosextens.h>
  68113. +#include <utility/tagitem.h>
  68114. +#include <sys/types.h>
  68115. +#include <sys/stat.h>
  68116. +#include <amiga/ioctl.h>
  68117. +
  68118. +int fstat(int fd, struct stat *sbuf)
  68119. +{
  68120. +  BPTR fh;
  68121. +  struct FileInfoBlock *fib;
  68122. +  int ret;
  68123. +
  68124. +  chkabort();
  68125. +  if (ioctl(fd, _AMIGA_GET_FH, &fh) == -1) return -1;
  68126. +  if ((fib = AllocDosObjectTags(DOS_FIB, TAG_END)) && ExamineFH(fh, fib))
  68127. +    {
  68128. +      struct FileHandle *handle = BADDR(fh);
  68129. +
  68130. +      _lfibstat(NULL, fib, handle->fh_Type, 0, sbuf);
  68131. +      ret = 0;
  68132. +    }
  68133. +  else
  68134. +    {
  68135. +      int err = IoErr();
  68136. +
  68137. +      if (err == ERROR_ACTION_NOT_KNOWN)
  68138. +    /* Fake a stat result */
  68139. +    {
  68140. +      ret = 0;
  68141. +      sbuf->st_dev = (long)(((struct FileHandle *)BADDR(fh))->fh_Type);
  68142. +      sbuf->st_ino = 0;
  68143. +      sbuf->st_mode = 0777 | S_IFCHR;
  68144. +      sbuf->st_nlink = 1;
  68145. +      sbuf->st_uid = AMIGA_UID; sbuf->st_gid = AMIGA_GID;
  68146. +      sbuf->st_blksize = 512;
  68147. +      sbuf->st_blocks = 0;
  68148. +      sbuf->st_size = 0;
  68149. +      /* 1-Jan-1978 */
  68150. +      sbuf->st_ctime = sbuf->st_atime = sbuf->st_mtime = 252460800;
  68151. +    }
  68152. +      else
  68153. +    {
  68154. +      ret = -1;
  68155. +      errno = convert_oserr(err);
  68156. +    }
  68157. +    }
  68158. +  if (fib) FreeDosObject(DOS_FIB, fib);
  68159. +  ioctl(fd, _AMIGA_FREE_FH, &fh);
  68160. +  return ret;
  68161. +}
  68162. diff -rup --new-file baseline/fsf/emacs/unixlib/src/ftruncate.c amiga/fsf/emacs/unixlib/src/ftruncate.c
  68163. --- baseline/fsf/emacs/unixlib/src/ftruncate.c    Wed Dec 31 17:00:00 1969
  68164. +++ amiga/fsf/emacs/unixlib/src/ftruncate.c    Sat Sep 28 00:00:00 1996
  68165. @@ -0,0 +1,8 @@
  68166. +#include "amiga.h"
  68167. +#include <amiga/ioctl.h>
  68168. +
  68169. +int ftruncate(int fd, off_t length)
  68170. +{
  68171. +  chkabort();
  68172. +  return ioctl(fd, _AMIGA_TRUNCATE, &length);
  68173. +}
  68174. diff -rup --new-file baseline/fsf/emacs/unixlib/src/getenv.c amiga/fsf/emacs/unixlib/src/getenv.c
  68175. --- baseline/fsf/emacs/unixlib/src/getenv.c    Wed Dec 31 17:00:00 1969
  68176. +++ amiga/fsf/emacs/unixlib/src/getenv.c    Sat Sep 28 00:00:00 1996
  68177. @@ -0,0 +1,31 @@
  68178. +#include "amiga.h"
  68179. +#include <string.h>
  68180. +
  68181. +/* This getenv removes trailing newlines & multiple calls don't
  68182. +   destroy results */
  68183. +char *getenv (const char *varname)
  68184. +{
  68185. +  char *return_string;
  68186. +  char buf[64];
  68187. +
  68188. +  chkabort();
  68189. +  if (varname && varname[0])
  68190. +    {
  68191. +      int len, size;
  68192. +
  68193. +      len = GetVar(varname, buf, 64, LV_VAR);
  68194. +      if (len >= 0)
  68195. +    {
  68196. +      size = IoErr();
  68197. +      return_string = malloc(size + 1);
  68198. +      if (!return_string) return 0;
  68199. +      if (size != len)
  68200. +        {
  68201. +          if (GetVar(varname, return_string, size + 1, LV_VAR) > 0)
  68202. +        return return_string;
  68203. +        }
  68204. +      else return strcpy(return_string, buf);
  68205. +    }
  68206. +    }
  68207. +  return 0;
  68208. +}
  68209. diff -rup --new-file baseline/fsf/emacs/unixlib/src/gethostname.c amiga/fsf/emacs/unixlib/src/gethostname.c
  68210. --- baseline/fsf/emacs/unixlib/src/gethostname.c    Wed Dec 31 17:00:00 1969
  68211. +++ amiga/fsf/emacs/unixlib/src/gethostname.c    Sat Sep 28 00:00:00 1996
  68212. @@ -0,0 +1,11 @@
  68213. +#include "amiga.h"
  68214. +#include <unistd.h>
  68215. +
  68216. +extern char *_system_name;
  68217. +
  68218. +int gethostname(char *buf, int len)
  68219. +{
  68220. +  strncpy(buf, _system_name, len);
  68221. +
  68222. +  return 0;
  68223. +}
  68224. diff -rup --new-file baseline/fsf/emacs/unixlib/src/getpid.c amiga/fsf/emacs/unixlib/src/getpid.c
  68225. --- baseline/fsf/emacs/unixlib/src/getpid.c    Wed Dec 31 17:00:00 1969
  68226. +++ amiga/fsf/emacs/unixlib/src/getpid.c    Sat Sep 28 00:00:00 1996
  68227. @@ -0,0 +1,8 @@
  68228. +#include "amiga.h"
  68229. +#include "processes.h"
  68230. +
  68231. +int getpid(void)
  68232. +{
  68233. +  chkabort();
  68234. +  return _our_pid;
  68235. +}
  68236. diff -rup --new-file baseline/fsf/emacs/unixlib/src/getwd.c amiga/fsf/emacs/unixlib/src/getwd.c
  68237. --- baseline/fsf/emacs/unixlib/src/getwd.c    Wed Dec 31 17:00:00 1969
  68238. +++ amiga/fsf/emacs/unixlib/src/getwd.c    Sat Sep 28 00:00:00 1996
  68239. @@ -0,0 +1,8 @@
  68240. +#include "amiga.h"
  68241. +#include <sys/param.h>
  68242. +
  68243. +char *getwd (char *pathname)
  68244. +{
  68245. +  chkabort();
  68246. +  return getcwd(pathname, MAXPATHLEN);
  68247. +}
  68248. diff -rup --new-file baseline/fsf/emacs/unixlib/src/gid.c amiga/fsf/emacs/unixlib/src/gid.c
  68249. --- baseline/fsf/emacs/unixlib/src/gid.c    Wed Dec 31 17:00:00 1969
  68250. +++ amiga/fsf/emacs/unixlib/src/gid.c    Sat Sep 28 00:00:00 1996
  68251. @@ -0,0 +1,4 @@
  68252. +#include "amiga.h"
  68253. +
  68254. +gid_t getgid(void) { return AMIGA_GID; }
  68255. +gid_t getegid(void) { return AMIGA_GID; }
  68256. diff -rup --new-file baseline/fsf/emacs/unixlib/src/grp.c amiga/fsf/emacs/unixlib/src/grp.c
  68257. --- baseline/fsf/emacs/unixlib/src/grp.c    Wed Dec 31 17:00:00 1969
  68258. +++ amiga/fsf/emacs/unixlib/src/grp.c    Sat Sep 28 00:00:00 1996
  68259. @@ -0,0 +1,14 @@
  68260. +#include "amiga.h"
  68261. +#include <grp.h>
  68262. +
  68263. +static char *wheel_members[] = { "user", 0 };
  68264. +
  68265. +static struct group wheel = {
  68266. +  "wheel",
  68267. +  "",
  68268. +  AMIGA_GID,
  68269. +  wheel_members
  68270. +};
  68271. +
  68272. +struct group *getgrgid(gid_t gid) { return &wheel; }
  68273. +struct group *getgrnam(char *name) { return &wheel; }
  68274. diff -rup --new-file baseline/fsf/emacs/unixlib/src/index.c amiga/fsf/emacs/unixlib/src/index.c
  68275. --- baseline/fsf/emacs/unixlib/src/index.c    Wed Dec 31 17:00:00 1969
  68276. +++ amiga/fsf/emacs/unixlib/src/index.c    Sat Sep 28 00:00:00 1996
  68277. @@ -0,0 +1,8 @@
  68278. +#include <string.h>
  68279. +
  68280. +#undef index
  68281. +
  68282. +char *index(char *str, int c)
  68283. +{
  68284. +  return strchr(str, c);
  68285. +}
  68286. diff -rup --new-file baseline/fsf/emacs/unixlib/src/ioctl.c amiga/fsf/emacs/unixlib/src/ioctl.c
  68287. --- baseline/fsf/emacs/unixlib/src/ioctl.c    Wed Dec 31 17:00:00 1969
  68288. +++ amiga/fsf/emacs/unixlib/src/ioctl.c    Sat Sep 28 00:00:00 1996
  68289. @@ -0,0 +1,14 @@
  68290. +#include "amiga.h"
  68291. +#include "files.h"
  68292. +
  68293. +int ioctl(int fd, int request, caddr_t arg)
  68294. +{
  68295. +  struct fileinfo *fi;
  68296. +
  68297. +  chkabort();
  68298. +  if (fi = _find_fd(fd))
  68299. +    {
  68300. +      return fi->ioctl(fi->userinfo, request, arg);
  68301. +    }
  68302. +  return -1;
  68303. +}
  68304. diff -rup --new-file baseline/fsf/emacs/unixlib/src/isatty.c amiga/fsf/emacs/unixlib/src/isatty.c
  68305. --- baseline/fsf/emacs/unixlib/src/isatty.c    Wed Dec 31 17:00:00 1969
  68306. +++ amiga/fsf/emacs/unixlib/src/isatty.c    Sat Sep 28 00:00:00 1996
  68307. @@ -0,0 +1,11 @@
  68308. +#include "amiga.h"
  68309. +#include <amiga/ioctl.h>
  68310. +
  68311. +int isatty(int fd)
  68312. +{
  68313. +  int istty;
  68314. +
  68315. +  chkabort();
  68316. +  if (ioctl(fd, _AMIGA_INTERACTIVE, &istty) != 0) return 0;
  68317. +  return istty;
  68318. +}
  68319. diff -rup --new-file baseline/fsf/emacs/unixlib/src/kill.c amiga/fsf/emacs/unixlib/src/kill.c
  68320. --- baseline/fsf/emacs/unixlib/src/kill.c    Wed Dec 31 17:00:00 1969
  68321. +++ amiga/fsf/emacs/unixlib/src/kill.c    Sat Sep 28 00:00:00 1996
  68322. @@ -0,0 +1,74 @@
  68323. +#include "amiga.h"
  68324. +#include "signals.h"
  68325. +#include "processes.h"
  68326. +#include <exec/execbase.h>
  68327. +
  68328. +extern struct ExecBase *SysBase;
  68329. +
  68330. +static void break_list(struct List *tasks, BPTR fh)
  68331. +{
  68332. +  struct Process *p;
  68333. +
  68334. +  for (p = (struct Process *)tasks->lh_Head; p->pr_Task.tc_Node.ln_Succ;
  68335. +       p = (struct Process *)p->pr_Task.tc_Node.ln_Succ)
  68336. +    {
  68337. +      if (p->pr_Task.tc_Node.ln_Type == NT_PROCESS)
  68338. +    {
  68339. +      struct CommandLineInterface *cli = p->pr_CLI ? BADDR(p->pr_CLI) : 0;
  68340. +
  68341. +      if (p->pr_CIS == fh || p->pr_COS == fh || p->pr_CES == fh ||
  68342. +          cli && (cli->cli_StandardInput == fh || cli->cli_CurrentInput == fh ||
  68343. +              cli->cli_StandardOutput == fh || cli->cli_CurrentOutput == fh))
  68344. +        Signal(p, SIGBREAKF_CTRL_C | SIGBREAKF_CTRL_D);
  68345. +    }
  68346. +    }
  68347. +}
  68348. +
  68349. +static int magickill(BPTR fh, int signo)
  68350. +{
  68351. +  switch (signo)
  68352. +    {
  68353. +    case SIGINT: case SIGQUIT: case SIGKILL: case SIGHUP:
  68354. +      Forbid();
  68355. +      break_list(&SysBase->TaskReady, fh);
  68356. +      break_list(&SysBase->TaskWait, fh);
  68357. +      Permit();
  68358. +      return 0;
  68359. +    default: errno = EINVAL; return -1;
  68360. +    }
  68361. +}
  68362. +
  68363. +int kill(int pid, int signal)
  68364. +{
  68365. +  chkabort();
  68366. +  /* Our process list is now reasonably upto date */
  68367. +  if (pid < 0) pid = -pid;    /* Consider that each process is a pg unto itself */
  68368. +  if (pid == _our_pid) 
  68369. +    {
  68370. +      if (signal) _sig_dispatch(signal);
  68371. +      return 0;
  68372. +    }
  68373. +  else 
  68374. +    {
  68375. +      struct process *entry;
  68376. +      int killrc;
  68377. +
  68378. +      entry = _find_pid(pid);
  68379. +      if (!entry || entry->status != alive)
  68380. +    {
  68381. +      errno = ESRCH;
  68382. +      return -1;
  68383. +    }
  68384. +      if (!signal) return 0;
  68385. +      killrc = magickill(entry->input, signal);
  68386. +      if (signal == SIGKILL)
  68387. +    {
  68388. +      /* Fake the kill from emacs point of view */
  68389. +      entry->status = exited;
  68390. +      entry->rc = SIGKILL;
  68391. +      _sig_dispatch(SIGCHLD);
  68392. +      return 0;
  68393. +    }
  68394. +      return killrc;
  68395. +    }
  68396. +}
  68397. diff -rup --new-file baseline/fsf/emacs/unixlib/src/link.c amiga/fsf/emacs/unixlib/src/link.c
  68398. --- baseline/fsf/emacs/unixlib/src/link.c    Wed Dec 31 17:00:00 1969
  68399. +++ amiga/fsf/emacs/unixlib/src/link.c    Sat Sep 28 00:00:00 1996
  68400. @@ -0,0 +1,16 @@
  68401. +#include "amiga.h"
  68402. +
  68403. +int link(char *from, char *to)
  68404. +{
  68405. +  BPTR from_lock = Lock(from, ACCESS_READ);
  68406. +
  68407. +  chkabort();
  68408. +  if (from_lock)
  68409. +    {
  68410. +      int ok = MakeLink(to, from_lock, 0);
  68411. +
  68412. +      UnLock(from_lock);
  68413. +      if (ok) return 0;
  68414. +    }
  68415. +  ERROR;
  68416. +}
  68417. diff -rup --new-file baseline/fsf/emacs/unixlib/src/lseek.c amiga/fsf/emacs/unixlib/src/lseek.c
  68418. --- baseline/fsf/emacs/unixlib/src/lseek.c    Wed Dec 31 17:00:00 1969
  68419. +++ amiga/fsf/emacs/unixlib/src/lseek.c    Sat Sep 28 00:00:00 1996
  68420. @@ -0,0 +1,23 @@
  68421. +#include "amiga.h"
  68422. +#include "files.h"
  68423. +#include <fcntl.h>
  68424. +
  68425. +#undef lseek
  68426. +
  68427. +int __lseek(int fd, long rpos, int mode)
  68428. +{
  68429. +  struct fileinfo *fi;
  68430. +
  68431. +  chkabort();
  68432. +  if (fi = _find_fd(fd))
  68433. +    {
  68434. +      return fi->lseek(fi->userinfo, rpos, mode);
  68435. +    }
  68436. +  return -1;
  68437. +}
  68438. +
  68439. +int lseek(int fd, long rpos, int mode)
  68440. +{
  68441. +  return __lseek(fd, rpos, mode);
  68442. +}
  68443. +
  68444. diff -rup --new-file baseline/fsf/emacs/unixlib/src/message.c amiga/fsf/emacs/unixlib/src/message.c
  68445. --- baseline/fsf/emacs/unixlib/src/message.c    Wed Dec 31 17:00:00 1969
  68446. +++ amiga/fsf/emacs/unixlib/src/message.c    Sat Sep 28 00:00:00 1996
  68447. @@ -0,0 +1,78 @@
  68448. +#include "amiga.h"
  68449. +#include <intuition/intuition.h>
  68450. +#include <stdarg.h>
  68451. +
  68452. +static struct EasyStruct msg = {
  68453. +    sizeof (struct EasyStruct),
  68454. +    0,
  68455. +    NULL,
  68456. +    NULL,
  68457. +    "Ok",
  68458. +};
  68459. +
  68460. +static void message(char *format, long *args)
  68461. +/* Display a message which is as visible as possible (either to the console
  68462. +   or to as a requester).
  68463. +   Assume very little about library state */
  68464. +{
  68465. +  LONG msg_EasyRequestArgs(struct Window *window, struct EasyStruct *easyStruct,
  68466. +               ULONG *idcmpPtr, APTR args );
  68467. +#pragma libcall msg_IntuitionBase msg_EasyRequestArgs 24C BA9804
  68468. +  BPTR fh;
  68469. +  int close = FALSE;
  68470. +  extern char *_ProgramName;
  68471. +  extern struct WBStartup *_WBenchMsg;
  68472. +
  68473. +  fh = _us->pr_CES;
  68474. +  if (!fh)
  68475. +    if (!_WBenchMsg && (fh = Open("console:", MODE_OLDFILE))) close = TRUE;
  68476. +
  68477. +  if (fh)
  68478. +    {
  68479. +      VFPrintf(fh, "%s: ", &_ProgramName);
  68480. +      VFPrintf(fh, format, (long *)args);
  68481. +      FPutC(fh, '\n');
  68482. +      if (close) Close(fh);
  68483. +    }
  68484. +  else
  68485. +    {
  68486. +      struct Window *win = (struct Window *)_us->pr_WindowPtr;
  68487. +      if (win != (struct Window *)-1)
  68488. +    {
  68489. +      struct Library *msg_IntuitionBase = OpenLibrary("intuition.library", 37);
  68490. +
  68491. +      if (msg_IntuitionBase)
  68492. +        {
  68493. +          msg.es_Title = _ProgramName;
  68494. +          msg.es_TextFormat = format;
  68495. +          msg_EasyRequestArgs(win, &msg, 0, args);
  68496. +          CloseLibrary(msg_IntuitionBase);
  68497. +        }
  68498. +    }
  68499. +    }
  68500. +}
  68501. +
  68502. +void _message(char *format, ...)
  68503. +/* Display a message which is as visible as possible (either to the console
  68504. +   or to as a requester).
  68505. +   Assume very little about library state */
  68506. +{
  68507. +  va_list args;
  68508. +
  68509. +  va_start(args, format);
  68510. +  message(format, (long *)args);
  68511. +}
  68512. +
  68513. +void _fail(char *format, ...)
  68514. +/* Display a message which is as visible as possible (either to the console
  68515. +   or to as a requester).
  68516. +   Assume very little about library state.
  68517. +   Exit with error code RETURN_FAIL after that. */
  68518. +{
  68519. +  va_list args;
  68520. +
  68521. +  va_start(args, format);
  68522. +  message(format, (long *)args);
  68523. +
  68524. +  exit(RETURN_FAIL);        /* The library should always be cleanup-able */
  68525. +}
  68526. diff -rup --new-file baseline/fsf/emacs/unixlib/src/mkdir.c amiga/fsf/emacs/unixlib/src/mkdir.c
  68527. --- baseline/fsf/emacs/unixlib/src/mkdir.c    Wed Dec 31 17:00:00 1969
  68528. +++ amiga/fsf/emacs/unixlib/src/mkdir.c    Sat Sep 28 00:00:00 1996
  68529. @@ -0,0 +1,20 @@
  68530. +#include "amiga.h"
  68531. +#include <stdarg.h>
  68532. +
  68533. +int mkdir(char *name, mode_t mode)
  68534. +{
  68535. +  BPTR lock;
  68536. +  long amode;
  68537. +
  68538. +  chkabort();
  68539. +
  68540. +  if (lock = CreateDir(name))
  68541. +    {
  68542. +      UnLock(lock);
  68543. +      /* We remove script because mode 777 contains it by def, but it is
  68544. +         meaningless for directories */
  68545. +      amode = _make_protection(mode) & ~(FIBF_SCRIPT);
  68546. +      if (SetProtection(name, _make_protection(mode))) return 0;
  68547. +    }
  68548. +  ERROR;
  68549. +}
  68550. diff -rup --new-file baseline/fsf/emacs/unixlib/src/mkfifo.c amiga/fsf/emacs/unixlib/src/mkfifo.c
  68551. --- baseline/fsf/emacs/unixlib/src/mkfifo.c    Wed Dec 31 17:00:00 1969
  68552. +++ amiga/fsf/emacs/unixlib/src/mkfifo.c    Sat Sep 28 00:00:00 1996
  68553. @@ -0,0 +1,4 @@
  68554. +#include "amiga.h"
  68555. +
  68556. +int mkfifo(char *path, int mode, int dev) { errno = EOSERR; return -1; }
  68557. +int mknod(char *path, int mode, int dev) { errno = EOSERR; return -1; }
  68558. diff -rup --new-file baseline/fsf/emacs/unixlib/src/mktemp.c amiga/fsf/emacs/unixlib/src/mktemp.c
  68559. --- baseline/fsf/emacs/unixlib/src/mktemp.c    Wed Dec 31 17:00:00 1969
  68560. +++ amiga/fsf/emacs/unixlib/src/mktemp.c    Sat Sep 28 00:00:00 1996
  68561. @@ -0,0 +1,26 @@
  68562. +#include "amiga.h"
  68563. +#include <string.h>
  68564. +#include <stdio.h>
  68565. +
  68566. +char *mktemp(char *name)
  68567. +{
  68568. +  int l;
  68569. +  char *change = name + strlen(name) - 6;
  68570. +  char letter = 'a';
  68571. +  char id[9], *end_id;
  68572. +
  68573. +  chkabort();
  68574. +  _sprintf(id, "%lx", _us);
  68575. +  l = strlen(id);
  68576. +  end_id = l > 5 ? id + l - 5 : id;
  68577. +  _sprintf(change, "a%s", end_id);
  68578. +
  68579. +  while (letter <= 'z')
  68580. +    {
  68581. +      *change = letter;
  68582. +      if (access(name, 0)) return name;
  68583. +      letter++;
  68584. +    }
  68585. +  name[0] = '\0';
  68586. +  return name;
  68587. +}
  68588. diff -rup --new-file baseline/fsf/emacs/unixlib/src/open.c amiga/fsf/emacs/unixlib/src/open.c
  68589. --- baseline/fsf/emacs/unixlib/src/open.c    Wed Dec 31 17:00:00 1969
  68590. +++ amiga/fsf/emacs/unixlib/src/open.c    Sat Sep 28 00:00:00 1996
  68591. @@ -0,0 +1,141 @@
  68592. +#include "amiga.h"
  68593. +#include "files.h"
  68594. +#include "amigaos.h"
  68595. +#include <utility/tagitem.h>
  68596. +#include <stdarg.h>
  68597. +#include <fcntl.h>
  68598. +#include <string.h>
  68599. +
  68600. +
  68601. +#undef open
  68602. +
  68603. +int __open(const char *path, int flags, ...)
  68604. +{
  68605. +  int fd, acc = flags & 3, rd, wr, exists = TRUE, amode;
  68606. +  struct FileInfoBlock *fib;
  68607. +  BPTR plock, fh;
  68608. +  long fdflags, protection;
  68609. +  APTR pwindow = _us->pr_WindowPtr;
  68610. +  ULONG create = MODE_READWRITE; /* Mode to use when creating files. */
  68611. +
  68612. +  chkabort();
  68613. +
  68614. +  rd = acc == O_RDONLY || acc == O_RDWR;
  68615. +  wr = acc == O_WRONLY || acc == O_RDWR;
  68616. +
  68617. +  if (stricmp(path, "NIL:") == 0) amode = -1;
  68618. +  else
  68619. +    {
  68620. +      _us->pr_WindowPtr = (APTR)-1;
  68621. +      plock = Lock(path, ACCESS_READ);
  68622. +      _us->pr_WindowPtr = pwindow;
  68623. +      if (!plock)
  68624. +    {
  68625. +      int err = convert_oserr(IoErr()), ok;
  68626. +
  68627. +      /* Devices like pipe: don't like Lock ... */
  68628. +      if (_OSERR == ERROR_ACTION_NOT_KNOWN ||
  68629. +          _OSERR == 0) /* Some devices (tape:) don't set IoErr() ... */
  68630. +        {
  68631. +          ok = TRUE;
  68632. +          /* Most non-lockable devices don't like MODE_READWRITE.
  68633. +         So we have to throw shareable files out the window */
  68634. +          create = MODE_NEWFILE;
  68635. +        }
  68636. +      else /* Missing file ok if we are creating. */ 
  68637. +        ok = err == ENOENT && (flags & O_CREAT);
  68638. +
  68639. +      if (ok)
  68640. +        {
  68641. +          va_list vmode;
  68642. +
  68643. +          exists = FALSE;
  68644. +          if (flags & O_CREAT)
  68645. +        {
  68646. +          if (flags & 0x8000) /* SAS C runtime called us, no mode */
  68647. +            amode = FIBF_EXECUTE; /* Maybe 0 ? */
  68648. +          else
  68649. +            {
  68650. +              va_start(vmode, flags);
  68651. +              amode = _make_protection(va_arg(vmode, int));
  68652. +              va_end(vmode);
  68653. +            }
  68654. +        }
  68655. +          else amode = -1;    /* Assume complete access */
  68656. +        }
  68657. +      else
  68658. +        {
  68659. +          errno = err;
  68660. +          return -1;
  68661. +        }
  68662. +    }
  68663. +      else /* File already exists, play with it */
  68664. +    {
  68665. +      /* Get protection */
  68666. +      if (!((fib = AllocDosObjectTags(DOS_FIB, TAG_END)) &&
  68667. +        Examine(plock, fib)))
  68668. +        {
  68669. +          if (fib) FreeDosObject(DOS_FIB, fib);
  68670. +          ERROR;
  68671. +        }
  68672. +      amode = fib->fib_Protection;
  68673. +      FreeDosObject(DOS_FIB, fib);
  68674. +      UnLock(plock);
  68675. +
  68676. +      /* Check access */
  68677. +      if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
  68678. +        {
  68679. +          errno = EEXIST;
  68680. +          return -1;
  68681. +        }
  68682. +      if ((rd && (amode & FIBF_READ) || wr && (amode & FIBF_WRITE)))
  68683. +        {
  68684. +          errno = EACCES;
  68685. +          return -1;
  68686. +        }
  68687. +
  68688. +      /* Truncate files, by opening in MODE_NEWFILE, then closing it.
  68689. +         This allows the file to be opened in shared mode after that (READWRITE or
  68690. +         OLDFILE), which is consistent with the unix semantics. */
  68691. +      if (flags & O_TRUNC)
  68692. +        {
  68693. +          BPTR tfh;
  68694. +
  68695. +          if (tfh = Open(path, MODE_NEWFILE)) Close(tfh);
  68696. +          else ERROR;
  68697. +        }
  68698. +    }
  68699. +    }
  68700. +  if (!(fh = Open(path, flags & O_CREAT ? create : MODE_OLDFILE)))
  68701. +    ERROR;
  68702. +
  68703. +  
  68704. +  /* Protection is set when file is closed because OFS & FFS
  68705. +     don't appreciate it being done on MODE_NEWFILE files. */
  68706. +  if ((flags & O_TRUNC) || !exists) protection = amode;
  68707. +  else protection = -1;
  68708. +
  68709. +  fdflags = 0;
  68710. +  if (rd) fdflags |= FI_READ;
  68711. +  if (wr) fdflags |= FI_WRITE;
  68712. +  if (flags & O_APPEND) fdflags |= O_APPEND;
  68713. +
  68714. +  fd = _alloc_amigafd(fh, protection, fdflags);
  68715. +  if (fd < 0)
  68716. +    {
  68717. +      _us->pr_WindowPtr = (APTR)-1;
  68718. +      Close(fh);
  68719. +      _us->pr_WindowPtr = pwindow;
  68720. +    }
  68721. +  return fd;
  68722. +}
  68723. +
  68724. +int open(const char *path, int flags, ...)
  68725. +{
  68726. +  va_list vmode;
  68727. +
  68728. +  va_start(vmode, flags);
  68729. +  return __open(path, flags, va_arg(vmode, int));
  68730. +  va_end(vmode);
  68731. +}
  68732. +
  68733. diff -rup --new-file baseline/fsf/emacs/unixlib/src/perror.c amiga/fsf/emacs/unixlib/src/perror.c
  68734. --- baseline/fsf/emacs/unixlib/src/perror.c    Wed Dec 31 17:00:00 1969
  68735. +++ amiga/fsf/emacs/unixlib/src/perror.c    Sat Sep 28 00:00:00 1996
  68736. @@ -0,0 +1,26 @@
  68737. +#include "amiga.h"
  68738. +#include <errno.h>
  68739. +#include <string.h>
  68740. +#include <unistd.h>
  68741. +
  68742. +void perror(const char *s)
  68743. +{
  68744. +  char *err;
  68745. +  char amiga_err[81];
  68746. +
  68747. +  if (s && *s) 
  68748. +    {
  68749. +      write(2, s, strlen(s));
  68750. +      write(2, ": ", 2);
  68751. +    }
  68752. +  if (errno > 0 && errno <= sys_nerr) err = sys_errlist[errno];
  68753. +  else if (errno == -1) 
  68754. +    {
  68755. +      if (Fault(_OSERR, NULL, amiga_err, 81)) err = amiga_err;
  68756. +      else err = "42";        /* Shouldn't appear ... */
  68757. +    }
  68758. +  else err = "Unknown error code";
  68759. +
  68760. +  write(2, err, strlen(err));
  68761. +  write(2, "\n", 1);
  68762. +}
  68763. diff -rup --new-file baseline/fsf/emacs/unixlib/src/pipe.c amiga/fsf/emacs/unixlib/src/pipe.c
  68764. --- baseline/fsf/emacs/unixlib/src/pipe.c    Wed Dec 31 17:00:00 1969
  68765. +++ amiga/fsf/emacs/unixlib/src/pipe.c    Sat Sep 28 00:00:00 1996
  68766. @@ -0,0 +1,354 @@
  68767. +#include "amiga.h"
  68768. +#include "files.h"
  68769. +#include "fifofd.h"
  68770. +#include "signals.h"
  68771. +#include <sys/filio.h>
  68772. +#include <fcntl.h>
  68773. +#include <signal.h>
  68774. +#include <string.h>
  68775. +#include <stdio.h>
  68776. +#include <exec/memory.h>
  68777. +#include <amiga/ioctl.h>
  68778. +
  68779. +/* The pipe system call, using fifo: */
  68780. +
  68781. +static struct MsgPort *create_fifo_port(void)
  68782. +{
  68783. +  struct MsgPort *port = AllocMem(sizeof(*port), MEMF_CLEAR | MEMF_PUBLIC);
  68784. +
  68785. +  if (!port) return 0;
  68786. +  port->mp_Node.ln_Type = NT_MSGPORT;
  68787. +  port->mp_Flags = PA_SIGNAL;
  68788. +  port->mp_SigBit = _fifo_sig;
  68789. +  port->mp_SigTask = _us;
  68790. +  NewList(&port->mp_MsgList);
  68791. +
  68792. +  return port;
  68793. +}
  68794. +
  68795. +static void delete_fifo_port(struct MsgPort *port)
  68796. +{
  68797. +  FreeMem(port, sizeof(*port));
  68798. +}
  68799. +
  68800. +static void free_fifo(struct fifoinfo *fi)
  68801. +{
  68802. +  if (fi->rfifo) CloseFifo(fi->rfifo, 0);
  68803. +  if (fi->wfifo) CloseFifo(fi->wfifo, FIFOF_EOF);
  68804. +  if (fi->rmsg) free(fi->rmsg);
  68805. +  if (fi->wmsg) free(fi->wmsg);
  68806. +  delete_fifo_port(fi->reply);
  68807. +  free(fi);
  68808. +}
  68809. +
  68810. +/* Code for fd's describing fifos */
  68811. +
  68812. +static ULONG __regargs fifo_select_start(void *userinfo, int rd, int wr)
  68813. +{
  68814. +  struct fifoinfo *fi = userinfo;
  68815. +
  68816. +  if (rd) RequestFifo(fi->rfifo, fi->rmsg, FREQ_RPEND);
  68817. +  if (wr) RequestFifo(fi->wfifo, fi->wmsg, FREQ_WAVAIL);
  68818. +  return 1UL << _fifo_sig;
  68819. +}
  68820. +
  68821. +static void __regargs fifo_select_poll(void *userinfo, int *rd, int *wr)
  68822. +{
  68823. +  struct fifoinfo *fi = userinfo;
  68824. +  int rabort = *rd, wabort = *wr;
  68825. +  struct Message *msg;
  68826. +
  68827. +  while (msg = GetMsg(fi->reply))
  68828. +    {
  68829. +      if (msg == fi->rmsg) rabort = 0;
  68830. +      else if (msg == fi->wmsg) wabort = 0;
  68831. +    }
  68832. +  if (rabort)
  68833. +    {
  68834. +      *rd = 0;
  68835. +      RequestFifo(fi->rfifo, fi->rmsg, FREQ_ABORT);
  68836. +    }
  68837. +  if (wabort)
  68838. +    {
  68839. +      *wr = 0;
  68840. +      RequestFifo(fi->wfifo, fi->wmsg, FREQ_ABORT);
  68841. +    }
  68842. +  while (rabort || wabort)
  68843. +    {
  68844. +      while (!(msg = GetMsg(fi->reply))) Wait(1UL << _fifo_sig);
  68845. +      if (msg == fi->rmsg) rabort = 0;
  68846. +      else if (msg == fi->wmsg) wabort = 0;
  68847. +    }
  68848. +  /* Clear any signals we may have left behind */
  68849. +  SetSignal(0, 1UL << _fifo_sig);
  68850. +}
  68851. +
  68852. +/* Using 4.2BSD style semantics, with reads from fifo's returning immediately when
  68853. +   data is available, and blocking for empty fifo's only when O_NDELAY was not
  68854. +   specified on open */
  68855. +
  68856. +static int __regargs fifo_read(void *userinfo, void *buffer, unsigned int length)
  68857. +{
  68858. +  struct fifoinfo *fi = userinfo;
  68859. +  char *chars;
  68860. +  long ready;
  68861. +
  68862. +  while (!(ready = ReadFifo(fi->rfifo, &chars, fi->skip)))
  68863. +    {
  68864. +      ULONG sigs;
  68865. +
  68866. +      fi->skip = 0;
  68867. +      if (fi->flags & O_NDELAY)
  68868. +    {
  68869. +      errno = EWOULDBLOCK;
  68870. +      return -1;
  68871. +    }
  68872. +      Delay(1);            /* Perversely, this improves the performance */
  68873. +      RequestFifo(fi->rfifo, fi->rmsg, FREQ_RPEND);
  68874. +      sigs = _wait_signals(1L << fi->reply->mp_SigBit);
  68875. +      RequestFifo(fi->rfifo, fi->rmsg, FREQ_ABORT);
  68876. +      while (!GetMsg(fi->reply)) Wait(1UL << _fifo_sig);
  68877. +
  68878. +      _handle_signals(sigs);
  68879. +    }
  68880. +  if (ready == -1) ready = 0;
  68881. +  if (ready > length) ready = length;
  68882. +  memcpy(buffer, chars, ready);
  68883. +  fi->skip = ready;
  68884. +
  68885. +  return (int)ready;
  68886. +}
  68887. +
  68888. +static int __regargs fifo_write(void *userinfo, void *_buffer, unsigned int length)
  68889. +{
  68890. +  struct fifoinfo *fi = userinfo;
  68891. +  long cansend, written;
  68892. +  char *buffer = _buffer;
  68893. +
  68894. +  if (length == 0)        /* Send EOF */
  68895. +    {
  68896. +      char *fname, sname[FIFO_NAMELEN + 2], mname[FIFO_NAMELEN + 2];
  68897. +
  68898. +      /* Send EOF */
  68899. +      CloseFifo(fi->wfifo, FIFOF_EOF);
  68900. +      /* And reopen fifo */
  68901. +      /* Docs say that this clears EOF flag, maybe we should wait a bit ? */
  68902. +      /* The writer is the "master" in fifo: terms */
  68903. +      strcpy(mname, fi->name); strcat(mname, "_m");
  68904. +      strcpy(sname, fi->name); strcat(sname, "_s");
  68905. +
  68906. +      fname = !(fi->flags & FI_READ) || (fi->flags & FIFO_MASTER) ? mname : sname;
  68907. +      fi->wfifo = OpenFifo(fname, FIFO_BUFSIZE, FIFOF_NORMAL | FIFOF_NBIO |
  68908. +               FIFOF_WRITE | FIFOF_RREQUIRED);
  68909. +      if (fi->wfifo)
  68910. +    {
  68911. +      fi->maxsend = BufSizeFifo(fi->wfifo) / 2;
  68912. +      return 0;
  68913. +    }
  68914. +      /* We're in trouble. From now on, all writes will fail */
  68915. +    }
  68916. +  else if (fi->wfifo)
  68917. +    {
  68918. +      cansend = fi->maxsend;
  68919. +      written = 0;
  68920. +      while (length > 0)
  68921. +    {
  68922. +      long sent;
  68923. +
  68924. +      if (cansend > length) cansend = length;
  68925. +      while ((sent = WriteFifo(fi->wfifo, buffer, cansend)) == 0)
  68926. +        {
  68927. +          ULONG sigs;
  68928. +          int signaled;
  68929. +
  68930. +          if (fi->flags & O_NDELAY)
  68931. +        {
  68932. +          if (written != 0) return (int)written;
  68933. +          errno = EWOULDBLOCK;
  68934. +          return -1;
  68935. +        }
  68936. +          RequestFifo(fi->wfifo, fi->wmsg, FREQ_WAVAIL);
  68937. +          sigs = _wait_signals(1L << fi->reply->mp_SigBit);
  68938. +          RequestFifo(fi->wfifo, fi->wmsg, FREQ_ABORT);
  68939. +          while (!GetMsg(fi->reply)) Wait(1UL << _fifo_sig);
  68940. +          signaled = _handle_signals(sigs);
  68941. +          if (signaled && written != 0) return (int)written;
  68942. +        }
  68943. +      if (sent < 0) /* Some problem has occured */ goto fail;
  68944. +      written += sent;
  68945. +      length -= sent;
  68946. +      buffer += sent;
  68947. +    }
  68948. +      return (int)written;
  68949. +    }
  68950. + fail:
  68951. +  /* Some problem has occured */
  68952. +  _sig_dispatch(SIGPIPE);
  68953. +  errno = EPIPE;
  68954. +  return -1;
  68955. +}
  68956. +
  68957. +static int __regargs fifo_lseek(void *userinfo, long rpos, int mode)
  68958. +{
  68959. +  errno = ESPIPE;
  68960. +  return -1;
  68961. +}
  68962. +
  68963. +static int __regargs fifo_close(void *userinfo, int internal)
  68964. +{
  68965. +  struct fifoinfo *fi = userinfo;
  68966. +
  68967. +  free_fifo(fi);
  68968. +  return 0;
  68969. +}
  68970. +
  68971. +static int __regargs fifo_ioctl(void *userinfo, int request, void *data)
  68972. +{
  68973. +  struct fifoinfo *fi = userinfo;
  68974. +
  68975. +  switch (request)
  68976. +    {
  68977. +    case FIONBIO:
  68978. +      if (*(int *)data) fi->flags |= O_NDELAY;
  68979. +      else fi->flags &= ~O_NDELAY;
  68980. +      return 0;
  68981. +    case _AMIGA_GET_FH: {
  68982. +      BPTR *fh = data;
  68983. +      char name[FIFO_NAMELEN + 12];
  68984. +
  68985. +      /* Get an AmigaOS fifo: onto the same fifo in the same role */
  68986. +      if ((fi->flags & (FI_READ | FI_WRITE)) == (FI_READ | FI_WRITE))
  68987. +    _sprintf(name, "fifo:%s/rwesK%s",
  68988. +         fi->name, fi->flags & FIFO_MASTER ? "m" : "");
  68989. +      else if (fi->flags & FI_READ) _sprintf(name, "fifo:%s/r", fi->name);
  68990. +      else _sprintf(name, "fifo:%s/mweK", fi->name);
  68991. +      *fh = Open(name, MODE_OLDFILE);
  68992. +
  68993. +      if (*fh) return 0;
  68994. +      ERROR;
  68995. +    }
  68996. +    case _AMIGA_FREE_FH: {
  68997. +      BPTR *fh = data;
  68998. +
  68999. +      if (*fh) Close(*fh);
  69000. +      return 0;
  69001. +    }
  69002. +    default: errno = EINVAL; return -1;
  69003. +    }
  69004. +}
  69005. +
  69006. +static int alloc_fifo(char *name, int reader, int writer, int master)
  69007. +{
  69008. +  struct fifoinfo *fi;
  69009. +  int fd;
  69010. +  struct MsgPort *reply = 0;
  69011. +  struct Message *rmsg = 0, *wmsg = 0;
  69012. +
  69013. +  if ((fi = (struct fifoinfo *)malloc(sizeof(struct fifoinfo))) &&
  69014. +      (reply = create_fifo_port()) &&
  69015. +      (rmsg = (struct Message *)malloc(sizeof(struct Message))) &&
  69016. +      (wmsg = (struct Message *)malloc(sizeof(struct Message))))
  69017. +    {
  69018. +      rmsg->mn_Node.ln_Type = NT_MESSAGE;
  69019. +      rmsg->mn_ReplyPort = reply;
  69020. +      rmsg->mn_Length = sizeof(*rmsg);
  69021. +      wmsg->mn_Node.ln_Type = NT_MESSAGE;
  69022. +      wmsg->mn_ReplyPort = reply;
  69023. +      wmsg->mn_Length = sizeof(*wmsg);
  69024. +      fi->reply = reply;
  69025. +      fi->rmsg = rmsg;
  69026. +      fi->wmsg = wmsg;
  69027. +      fi->rfifo = fi->wfifo = 0;
  69028. +
  69029. +      fi->flags = 0;
  69030. +      if (reader) fi->flags |= FI_READ;
  69031. +      if (writer) fi->flags |= FI_WRITE;
  69032. +      fd = _alloc_fd(fi, fi->flags, fifo_select_start, fifo_select_poll, fifo_read,
  69033. +             fifo_write, fifo_lseek, fifo_close, fifo_ioctl);
  69034. +      if (fd)
  69035. +    {
  69036. +      char *fname, sname[FIFO_NAMELEN + 2], mname[FIFO_NAMELEN + 2];
  69037. +
  69038. +      if (master) fi->flags |= FIFO_MASTER;
  69039. +      strcpy(fi->name, name);
  69040. +      /* The writer is the "master" in fifo: terms */
  69041. +      strcpy(mname, fi->name); strcat(mname, "_m");
  69042. +      strcpy(sname, fi->name); strcat(sname, "_s");
  69043. +
  69044. +      if (reader)
  69045. +        {
  69046. +          fname = !writer || !master ? mname : sname;
  69047. +          fi->rfifo = OpenFifo(fname, FIFO_BUFSIZE, FIFOF_NORMAL | FIFOF_NBIO |
  69048. +                   FIFOF_READ);
  69049. +        }
  69050. +      if (writer)
  69051. +        {
  69052. +          fname = !reader || master ? mname : sname;
  69053. +          fi->wfifo = OpenFifo(fname, FIFO_BUFSIZE, FIFOF_NORMAL | FIFOF_NBIO |
  69054. +                   FIFOF_WRITE | FIFOF_RREQUIRED);
  69055. +        }
  69056. +      if ((fi->rfifo || !reader) && (fi->wfifo || !writer))
  69057. +        {
  69058. +          if (fi->wfifo) fi->maxsend = BufSizeFifo(fi->wfifo) / 2;
  69059. +          fi->skip = 0;
  69060. +          return fd;
  69061. +        }
  69062. +      if (fi->rfifo) CloseFifo(fi->rfifo, 0);
  69063. +      if (fi->wfifo) CloseFifo(fi->wfifo, 0);
  69064. +    }
  69065. +      if (fd >= 0) _free_fd(fd);
  69066. +    }
  69067. +  if (rmsg) free(rmsg);
  69068. +  if (wmsg) free(wmsg);
  69069. +  if (reply) delete_fifo_port(reply);
  69070. +  if (fi) free(fi);
  69071. +  return -1;
  69072. +}
  69073. +
  69074. +int pipe(int fd[2])
  69075. +{
  69076. +  char name[FIFO_NAMELEN];
  69077. +  struct fileinfo *f0;
  69078. +
  69079. +  chkabort();
  69080. +  if (!_fifo_ok)
  69081. +    {
  69082. +      errno = ENXIO;
  69083. +      return -1;
  69084. +    }
  69085. +
  69086. +  _sprintf(name, "uxfifo.%lx", _fifo_base + _fifo_offset++);
  69087. +
  69088. +  if ((fd[0] = alloc_fifo(name, TRUE, FALSE, FALSE)) >= 0)
  69089. +    if ((fd[1] = alloc_fifo(name, FALSE, TRUE, FALSE)) >= 0) return 0;
  69090. +    else
  69091. +      {
  69092. +    if (f0 = _find_fd(fd[0])) free_fifo(f0->userinfo);
  69093. +    _free_fd(fd[0]);
  69094. +      }
  69095. +  return -1;
  69096. +}
  69097. +
  69098. +int socketpair(int domain, int type, int protocol, int sv[2])
  69099. +{
  69100. +  char name[FIFO_NAMELEN];
  69101. +  struct fileinfo *f0;
  69102. +
  69103. +  chkabort();
  69104. +  if (!_fifo_ok)
  69105. +    {
  69106. +      errno = ENXIO;
  69107. +      return -1;
  69108. +    }
  69109. +
  69110. +  _sprintf(name, "uxfifo.%lx", _fifo_base + _fifo_offset++);
  69111. +
  69112. +  if ((sv[0] = alloc_fifo(name, TRUE, TRUE, TRUE)) >= 0)
  69113. +    if ((sv[1] = alloc_fifo(name, TRUE, TRUE, FALSE)) >= 0) return 0;
  69114. +    else
  69115. +      {
  69116. +    if (f0 = _find_fd(sv[0])) free_fifo(f0->userinfo);
  69117. +    _free_fd(sv[0]);
  69118. +      }
  69119. +  return -1;
  69120. +}
  69121. diff -rup --new-file baseline/fsf/emacs/unixlib/src/popen.c amiga/fsf/emacs/unixlib/src/popen.c
  69122. --- baseline/fsf/emacs/unixlib/src/popen.c    Wed Dec 31 17:00:00 1969
  69123. +++ amiga/fsf/emacs/unixlib/src/popen.c    Sat Sep 28 00:00:00 1996
  69124. @@ -0,0 +1,93 @@
  69125. +#include "amiga.h"
  69126. +#include "processes.h"
  69127. +#include "fifofd.h"
  69128. +#include <amiga/ioctl.h>
  69129. +#include <exec/memory.h>
  69130. +#include <dos/dosextens.h>
  69131. +#include <dos/dostags.h>
  69132. +#include <string.h>
  69133. +
  69134. +struct pprocess
  69135. +{
  69136. +  struct pprocess *next;
  69137. +  FILE *f;
  69138. +  int pid;
  69139. +};
  69140. +
  69141. +static struct pprocess *_pplist;
  69142. +
  69143. +FILE *popen(char *command, char *type)
  69144. +{
  69145. +  FILE *pipe;
  69146. +  BPTR in, out;
  69147. +  int close_in, close_out;
  69148. +  char pname[24];
  69149. +  struct pprocess *pp = (struct pprocess *)malloc(sizeof(struct pprocess));
  69150. +
  69151. +  _sprintf(pname, "pipe:uxopen.%lx", _fifo_base + _fifo_offset++);
  69152. +
  69153. +  if (type[0] == 'w' && type[1] == '\0')
  69154. +    {
  69155. +      pipe = fopen(pname, "w");
  69156. +      out = Output(); close_out = FALSE;
  69157. +      in = Open(pname, MODE_OLDFILE); close_in = TRUE;
  69158. +    }
  69159. +  else if (type[0] == 'r' && type[1] == '\0')
  69160. +    {
  69161. +      pipe = fopen(pname, "r");
  69162. +      in = Input(); close_in = FALSE;
  69163. +      out = Open(pname, MODE_NEWFILE); close_out = TRUE;
  69164. +    }
  69165. +  else
  69166. +    {
  69167. +      errno = EINVAL;
  69168. +      return NULL;
  69169. +    }
  69170. +
  69171. +  if (!in || !out) _seterr();
  69172. +  if (pipe && in && out && pp)
  69173. +    {
  69174. +      pp->pid = _start_process(command, in, close_in, out, close_out,
  69175. +                   -1, FALSE, 0, 0);
  69176. +      
  69177. +      if (pp->pid)
  69178. +    {
  69179. +      pp->next = _pplist;
  69180. +      _pplist = pp;
  69181. +      pp->f = pipe;
  69182. +
  69183. +      return pipe;
  69184. +    }
  69185. +    }
  69186. +  if (pp) free(pp);
  69187. +  if (in && close_in) Close(in);
  69188. +  if (out && close_out) Close(out);
  69189. +  if (pipe) fclose(pipe);
  69190. +
  69191. +  return NULL;
  69192. +}
  69193. +
  69194. +int pclose(FILE *f)
  69195. +{
  69196. +  struct pprocess **scan = &_pplist;
  69197. +
  69198. +  while (*scan)
  69199. +    {
  69200. +      if ((*scan)->f == f) /* found */
  69201. +    {
  69202. +      struct pprocess *son = *scan;
  69203. +      int status;
  69204. +      int pid = son->pid;
  69205. +
  69206. +      *scan = son->next;    /* Remove process from list */
  69207. +
  69208. +      fclose(son->f);
  69209. +      free(son);
  69210. +      /* Wait for process to terminate */
  69211. +      if (waitpid(pid, &status, NULL) >= 0) return status;
  69212. +      return -1;
  69213. +    }
  69214. +      scan = &(*scan)->next;
  69215. +    }
  69216. +  return -1;
  69217. +}
  69218. diff -rup --new-file baseline/fsf/emacs/unixlib/src/processes.c amiga/fsf/emacs/unixlib/src/processes.c
  69219. --- baseline/fsf/emacs/unixlib/src/processes.c    Wed Dec 31 17:00:00 1969
  69220. +++ amiga/fsf/emacs/unixlib/src/processes.c    Sat Sep 28 00:00:00 1996
  69221. @@ -0,0 +1,56 @@
  69222. +#include "amiga.h"
  69223. +#include <clib/alib_protos.h>
  69224. +
  69225. +#include "processes.h"
  69226. +
  69227. +int _next_pid, _our_pid;
  69228. +struct MinList _processes;
  69229. +char _door_name[DOOR_LEN];
  69230. +struct MsgPort *_children_exit;
  69231. +struct MsgPort *_startup_port;
  69232. +
  69233. +void _free_entry(struct process *p)
  69234. +{
  69235. +  Remove((struct Node *)p);
  69236. +  free(p);
  69237. +}
  69238. +
  69239. +struct process *_find_pid(int pid)
  69240. +{
  69241. +  struct process *entry;
  69242. +
  69243. +  scan_processes (entry) if (entry->pid == pid) return entry;
  69244. +
  69245. +  return 0;
  69246. +}
  69247. +
  69248. +void _init_processes(void)
  69249. +{
  69250. +  NewList((struct List *)&_processes);
  69251. +  /* Choose a fairly unique pid for ourselves, but keep it within a range
  69252. +     which guarantees positive pid's for all created processes.
  69253. +     This range is further restricted to 23 bits so that a pid fits within the
  69254. +     range of an emacs number (generally 24 bits, though it is 26 on the Amiga) */
  69255. +  _our_pid = ((int)_us ^ _startup_time) & 0x7fffff;
  69256. +  _next_pid = _our_pid + 1;
  69257. +  _sprintf(_door_name, "door.%lx.%lx", _us, _startup_time);
  69258. +  if ((_startup_port = CreateMsgPort()) &&
  69259. +      (_children_exit = CreatePort(_door_name, 0))) return;
  69260. +
  69261. +  _fail("No memory");
  69262. +}
  69263. +
  69264. +void _cleanup_processes(void)
  69265. +{
  69266. +  if (_startup_port) DeleteMsgPort(_startup_port);
  69267. +  if (_children_exit)
  69268. +    {
  69269. +      struct exit_message *msg;
  69270. +
  69271. +      Forbid();
  69272. +      while (msg = (struct exit_message *)GetMsg(_children_exit))
  69273. +    FreeMem(msg, sizeof(struct exit_message));
  69274. +      DeletePort(_children_exit);
  69275. +      Permit();
  69276. +    }
  69277. +}
  69278. diff -rup --new-file baseline/fsf/emacs/unixlib/src/processes.h amiga/fsf/emacs/unixlib/src/processes.h
  69279. --- baseline/fsf/emacs/unixlib/src/processes.h    Wed Dec 31 17:00:00 1969
  69280. +++ amiga/fsf/emacs/unixlib/src/processes.h    Sat Sep 28 00:00:00 1996
  69281. @@ -0,0 +1,46 @@
  69282. +#ifndef _PROCESSES_H
  69283. +#define _PROCESSES_H_
  69284. +
  69285. +struct process
  69286. +{
  69287. +    struct MinNode node;
  69288. +    struct Task *process;
  69289. +    int pid;
  69290. +    BPTR input;
  69291. +    enum { alive, exited } status;
  69292. +    int rc;
  69293. +};
  69294. +
  69295. +struct exit_message        /* Sent by children when exiting */
  69296. +{
  69297. +  struct Message m;
  69298. +  int pid;
  69299. +  int rc;
  69300. +};
  69301. +
  69302. +extern int _next_pid, _our_pid;
  69303. +extern struct MinList _processes;
  69304. +#define DOOR_LEN 32
  69305. +extern char _door_name[DOOR_LEN];
  69306. +extern struct MsgPort *_children_exit;
  69307. +extern struct MsgPort *_startup_port;
  69308. +
  69309. +#define scan_processes(p) for (p = (struct process *)_processes.mlh_Head; \
  69310. +                   p->node.mln_Succ; \
  69311. +                   p = (struct process *)p->node.mln_Succ)
  69312. +
  69313. +#define no_processes() (_processes.mlh_Head->mln_Succ == 0)
  69314. +
  69315. +void _free_entry(struct process *p);
  69316. +struct process *_find_pid(int pid);
  69317. +void _init_processes(void);
  69318. +void _cleanup_processes(void);
  69319. +
  69320. +int _start_process(char *command,
  69321. +           BPTR input, int close_input,
  69322. +           BPTR output, int close_output,
  69323. +           BPTR error, int close_error,
  69324. +           BPTR dir,
  69325. +           long stacksize);
  69326. +
  69327. +#endif
  69328. diff -rup --new-file baseline/fsf/emacs/unixlib/src/protection.c amiga/fsf/emacs/unixlib/src/protection.c
  69329. --- baseline/fsf/emacs/unixlib/src/protection.c    Wed Dec 31 17:00:00 1969
  69330. +++ amiga/fsf/emacs/unixlib/src/protection.c    Sat Sep 28 00:00:00 1996
  69331. @@ -0,0 +1,73 @@
  69332. +#include "amiga.h"
  69333. +#include <sys/stat.h>
  69334. +
  69335. +int use_amiga_flags;
  69336. +
  69337. +int _make_protection(int mode)
  69338. +{
  69339. +  int amode;
  69340. +
  69341. +  if (use_amiga_flags) return mode;
  69342. +
  69343. +  /* We always turn archive off */
  69344. +  amode = 0;
  69345. +
  69346. +  /* Read: if any unix read */
  69347. +  if (mode & (S_IRUSR | S_IRGRP | S_IROTH)) amode |= FIBF_READ;
  69348. +
  69349. +  /* Write: if user write or group write
  69350. +     Delete: if user write or world write */
  69351. +  if (mode & S_IWUSR) amode |= FIBF_WRITE | FIBF_DELETE;
  69352. +  if (mode & S_IWGRP) amode |= FIBF_WRITE;
  69353. +  if (mode & S_IWOTH) amode |= FIBF_DELETE;
  69354. +
  69355. +  /* Execute: if group execute or user execute and not world execute
  69356. +     Script: if world execute or user execute ant not group execute */
  69357. +  if (mode & S_IXGRP) amode |= FIBF_EXECUTE;
  69358. +  if (mode & S_IXOTH) amode |= FIBF_SCRIPT;
  69359. +  if ((mode & (S_IXUSR | S_IXGRP | S_IXOTH)) == S_IXUSR)
  69360. +    amode |= FIBF_EXECUTE | FIBF_SCRIPT;
  69361. +
  69362. +  /* Pure: if sticky */
  69363. +  if (mode & S_ISVTX) amode |= FIBF_PURE;
  69364. +
  69365. +  /* Make correct bits active 0 */
  69366. +  amode ^= FIBF_READ | FIBF_WRITE | FIBF_EXECUTE | FIBF_DELETE;
  69367. +  return amode;
  69368. +}
  69369. +
  69370. +int _make_mode(int protection)
  69371. +{
  69372. +    int mode;
  69373. +
  69374. +    if (use_amiga_flags) return protection & ~S_IFMT;
  69375. +
  69376. +    mode = 0;
  69377. +    /* make all bits active 1 */
  69378. +    protection ^= FIBF_READ | FIBF_WRITE | FIBF_EXECUTE | FIBF_DELETE;
  69379. +
  69380. +    /* Read user, group, world if amiga read */
  69381. +    if (protection & FIBF_READ) mode |= S_IRUSR | S_IRGRP | S_IROTH;
  69382. +
  69383. +    /* Write:
  69384. +         user if amiga write & delete
  69385. +     group if amiga write
  69386. +     other if amiga delete */
  69387. +    if ((protection & (FIBF_WRITE | FIBF_DELETE)) == (FIBF_WRITE | FIBF_DELETE))
  69388. +      mode |= S_IWUSR;
  69389. +    if (protection & FIBF_WRITE) mode |= S_IWGRP;
  69390. +    if (protection & FIBF_DELETE) mode |= S_IWOTH;
  69391. +
  69392. +    /* Execute:
  69393. +         user if amiga execute or script
  69394. +     group if amiga execute
  69395. +     world if amiga script */
  69396. +    if (protection & (FIBF_EXECUTE | FIBF_SCRIPT)) mode |= S_IXUSR;
  69397. +    if (protection & FIBF_EXECUTE) mode |= S_IXGRP;
  69398. +    if (protection & FIBF_SCRIPT) mode |= S_IXOTH;
  69399. +
  69400. +    /* Sticky: if pure */
  69401. +    if (protection & FIBF_PURE) mode |= S_ISVTX;
  69402. +
  69403. +    return mode;
  69404. +}
  69405. diff -rup --new-file baseline/fsf/emacs/unixlib/src/pseudo_c.c amiga/fsf/emacs/unixlib/src/pseudo_c.c
  69406. --- baseline/fsf/emacs/unixlib/src/pseudo_c.c    Wed Dec 31 17:00:00 1969
  69407. +++ amiga/fsf/emacs/unixlib/src/pseudo_c.c    Sat Sep 28 00:00:00 1996
  69408. @@ -0,0 +1,18 @@
  69409. +#include "amiga.h"
  69410. +#include "files.h"
  69411. +#include <fcntl.h>
  69412. +
  69413. +int _pseudo_close(int fd)
  69414. +{
  69415. +  struct fileinfo *fi;
  69416. +
  69417. +  chkabort();
  69418. +  if (fi = _find_fd(fd))
  69419. +    {
  69420. +      int err = fi->close(fi->userinfo, TRUE);
  69421. +
  69422. +      _free_fd(fd);
  69423. +      return err;
  69424. +    }
  69425. +  return -1;
  69426. +}
  69427. diff -rup --new-file baseline/fsf/emacs/unixlib/src/pwd.c amiga/fsf/emacs/unixlib/src/pwd.c
  69428. --- baseline/fsf/emacs/unixlib/src/pwd.c    Wed Dec 31 17:00:00 1969
  69429. +++ amiga/fsf/emacs/unixlib/src/pwd.c    Sat Sep 28 00:00:00 1996
  69430. @@ -0,0 +1,13 @@
  69431. +#include "amiga.h"
  69432. +#include <pwd.h>
  69433. +
  69434. +struct passwd _amiga_user = {
  69435. +  NULL, "",
  69436. +  AMIGA_UID, AMIGA_GID,
  69437. +  0, "", NULL,
  69438. +  NULL, NULL
  69439. +  };
  69440. +
  69441. +struct passwd *getpwuid(uid_t uid) { return &_amiga_user; }
  69442. +struct passwd *getpwnam(char *name) { return &_amiga_user; }
  69443. +char *getlogin(void) { return _amiga_user.pw_name; }
  69444. diff -rup --new-file baseline/fsf/emacs/unixlib/src/read.c amiga/fsf/emacs/unixlib/src/read.c
  69445. --- baseline/fsf/emacs/unixlib/src/read.c    Wed Dec 31 17:00:00 1969
  69446. +++ amiga/fsf/emacs/unixlib/src/read.c    Sat Sep 28 00:00:00 1996
  69447. @@ -0,0 +1,24 @@
  69448. +#include "amiga.h"
  69449. +#include "files.h"
  69450. +#include <fcntl.h>
  69451. +
  69452. +#undef read
  69453. +
  69454. +int __read(int fd, void *buffer, unsigned int length)
  69455. +{
  69456. +  struct fileinfo *fi;
  69457. +
  69458. +  chkabort();
  69459. +  if (fi = _find_fd(fd))
  69460. +    {
  69461. +      if (fi->flags & FI_READ) return fi->read(fi->userinfo, buffer, length);
  69462. +      errno = EACCES;
  69463. +    }
  69464. +  return -1;
  69465. +}
  69466. +
  69467. +int read(int fd, void *buffer, unsigned int length)
  69468. +{
  69469. +  return __read(fd, buffer, length);
  69470. +}
  69471. +
  69472. diff -rup --new-file baseline/fsf/emacs/unixlib/src/readlink.c amiga/fsf/emacs/unixlib/src/readlink.c
  69473. --- baseline/fsf/emacs/unixlib/src/readlink.c    Wed Dec 31 17:00:00 1969
  69474. +++ amiga/fsf/emacs/unixlib/src/readlink.c    Sat Sep 28 00:00:00 1996
  69475. @@ -0,0 +1,38 @@
  69476. +#include "amiga.h"
  69477. +#include <string.h>
  69478. +
  69479. +int readlink(char *path, char *buf, int bufsiz)
  69480. +{
  69481. +  struct DevProc *dev = NULL;
  69482. +
  69483. +  chkabort();
  69484. +
  69485. +  while (1)
  69486. +    {
  69487. +      struct DevProc *newdev = GetDeviceProc(path, dev);
  69488. +      long err;
  69489. +      
  69490. +      FreeDeviceProc(dev);
  69491. +      if (!(dev = newdev)) ERROR;
  69492. +
  69493. +      buf[0] = '\0';
  69494. +      if (ReadLink(dev->dvp_Port, dev->dvp_Lock, path, buf, bufsiz + 1))
  69495. +    {
  69496. +      FreeDeviceProc(dev);
  69497. +      if (!buf[0])
  69498. +        {
  69499. +          /* Play games with apparent 2.x ram: bug */
  69500. +          errno = ENOENT;
  69501. +          return -1;
  69502. +        }
  69503. +      return strlen(buf);
  69504. +    }
  69505. +      err = IoErr();
  69506. +      if (!(err == ERROR_OBJECT_NOT_FOUND && (dev->dvp_Flags & DVPF_ASSIGN)))
  69507. +    {
  69508. +      FreeDeviceProc(dev);
  69509. +      errno = convert_oserr(err);
  69510. +      return -1;
  69511. +    }
  69512. +    }
  69513. +}
  69514. diff -rup --new-file baseline/fsf/emacs/unixlib/src/rename.c amiga/fsf/emacs/unixlib/src/rename.c
  69515. --- baseline/fsf/emacs/unixlib/src/rename.c    Wed Dec 31 17:00:00 1969
  69516. +++ amiga/fsf/emacs/unixlib/src/rename.c    Sat Sep 28 00:00:00 1996
  69517. @@ -0,0 +1,24 @@
  69518. +#include "amiga.h"
  69519. +
  69520. +int rename(const char *from, const char *to)
  69521. +{
  69522. +  long err;
  69523. +
  69524. +  chkabort();
  69525. +  if (Rename(from, to)) return 0;
  69526. +  err = IoErr();
  69527. +  if (err == ERROR_OBJECT_EXISTS)
  69528. +    {
  69529. +      if (DeleteFile(to) && Rename(from, to)) return 0;
  69530. +      err = IoErr();
  69531. +
  69532. +      if (err == ERROR_DELETE_PROTECTED)
  69533. +    {
  69534. +      if (SetProtection(to, 0) && DeleteFile(to) && Rename(from, to))
  69535. +        return 0;
  69536. +      err = IoErr();
  69537. +    }
  69538. +    }
  69539. +  errno = convert_oserr(err);
  69540. +  return -1;
  69541. +}
  69542. diff -rup --new-file baseline/fsf/emacs/unixlib/src/rindex.c amiga/fsf/emacs/unixlib/src/rindex.c
  69543. --- baseline/fsf/emacs/unixlib/src/rindex.c    Wed Dec 31 17:00:00 1969
  69544. +++ amiga/fsf/emacs/unixlib/src/rindex.c    Sat Sep 28 00:00:00 1996
  69545. @@ -0,0 +1,8 @@
  69546. +#include <string.h>
  69547. +
  69548. +#undef rindex
  69549. +
  69550. +char *rindex(char *str, int c)
  69551. +{
  69552. +  return strrchr(str, c);
  69553. +}
  69554. diff -rup --new-file baseline/fsf/emacs/unixlib/src/rmdir.c amiga/fsf/emacs/unixlib/src/rmdir.c
  69555. --- baseline/fsf/emacs/unixlib/src/rmdir.c    Wed Dec 31 17:00:00 1969
  69556. +++ amiga/fsf/emacs/unixlib/src/rmdir.c    Sat Sep 28 00:00:00 1996
  69557. @@ -0,0 +1,31 @@
  69558. +#include "amiga.h"
  69559. +#include <utility/tagitem.h>
  69560. +
  69561. +int rmdir(char *name)
  69562. +{
  69563. +  struct FileInfoBlock *fib = 0;
  69564. +  BPTR lock = 0;
  69565. +
  69566. +  if ((fib = AllocDosObjectTags(DOS_FIB, TAG_END)) &&
  69567. +      (lock = Lock(name, ACCESS_READ)) &&
  69568. +      Examine(lock, fib))
  69569. +    {
  69570. +      int isdir = fib->fib_DirEntryType > 0;
  69571. +
  69572. +      UnLock(lock);
  69573. +      FreeDosObject(DOS_FIB, fib);
  69574. +
  69575. +      if (isdir)
  69576. +    {
  69577. +      if (DeleteFile(name)) return 0;
  69578. +      ERROR;
  69579. +    }
  69580. +      errno = ENOTDIR;
  69581. +      return -1;
  69582. +    }
  69583. +  errno = convert_oserr(IoErr());
  69584. +
  69585. +  if (lock) UnLock(lock);
  69586. +  if (fib) FreeDosObject(DOS_FIB, fib);
  69587. +  return -1;
  69588. +}
  69589. diff -rup --new-file baseline/fsf/emacs/unixlib/src/select.c amiga/fsf/emacs/unixlib/src/select.c
  69590. --- baseline/fsf/emacs/unixlib/src/select.c    Wed Dec 31 17:00:00 1969
  69591. +++ amiga/fsf/emacs/unixlib/src/select.c    Sat Sep 28 00:00:00 1996
  69592. @@ -0,0 +1,72 @@
  69593. +#include "amiga.h"
  69594. +#include "files.h"
  69595. +#include "signals.h"
  69596. +#include "timers.h"
  69597. +#include <sys/time.h>
  69598. +
  69599. +int select(int nfds, int *rfds, int *wfds, int *efds, struct timeval *timeout)
  69600. +{
  69601. +  int fdmask, i, fdcount;
  69602. +  int poll = timeout && timeout->tv_sec == 0 && timeout->tv_usec == 0;
  69603. +  ULONG eventmask, sigs;
  69604. +  int orfds = rfds ? *rfds : 0, owfds = wfds ? *wfds : 0, oefds = efds ? *efds : 0;
  69605. +  
  69606. +  for (i = 0, fdmask = 1; i < nfds; i++, fdmask <<= 1)
  69607. +    {
  69608. +      int rd = orfds & fdmask, wr = owfds & fdmask;
  69609. +
  69610. +  chkabort();
  69611. +      if (rd || wr)
  69612. +    {
  69613. +      struct fileinfo *fi = _find_fd(i);
  69614. +
  69615. +      if (!fi) return -1;
  69616. +      if (rd && !(fi->flags & FI_READ) || wr && !(fi->flags & FI_WRITE))
  69617. +        {
  69618. +          errno = EACCES;
  69619. +          return -1;
  69620. +        }
  69621. +    }
  69622. +    }
  69623. +
  69624. +  if (timeout) _timer_start(_odd_timer, timeout->tv_sec, timeout->tv_usec);
  69625. +  else _timer_abort(_odd_timer);
  69626. +  fdcount = 0;
  69627. +  do
  69628. +    {
  69629. +      eventmask = 0;
  69630. +      for (i = 0, fdmask = 1; i < nfds; i++, fdmask <<= 1)
  69631. +    {
  69632. +      int rd = orfds & fdmask, wr = owfds & fdmask;
  69633. +
  69634. +      if (rd || wr)
  69635. +        {
  69636. +          struct fileinfo *fi = _find_fd(i);
  69637. +
  69638. +          eventmask |= fi->select_start(fi->userinfo, rd, wr);
  69639. +        }
  69640. +    }
  69641. +
  69642. +      if (eventmask == -1 || poll) /* Don't wait */ sigs = _check_signals(0);
  69643. +      else /* Wait*/ sigs = _wait_signals(_odd_sig | eventmask);
  69644. +
  69645. +      for (i = 0, fdmask = 1; i < nfds; i++, fdmask <<= 1)
  69646. +    {
  69647. +      int rd = orfds & fdmask, wr = owfds & fdmask;
  69648. +
  69649. +      if (rd || wr)
  69650. +        {
  69651. +          struct fileinfo *fi = _find_fd(i);
  69652. +
  69653. +          fi->select_poll(fi->userinfo, &rd, &wr);
  69654. +          if (!rd && rfds) *rfds &= ~fdmask;
  69655. +          if (!wr && wfds) *wfds &= ~fdmask;
  69656. +          if (rd || wr) fdcount++;
  69657. +        }
  69658. +    }
  69659. +      _handle_signals(sigs);
  69660. +    }
  69661. +  while (fdcount == 0 && !_timer_expired(_odd_timer) && !poll);
  69662. +
  69663. +  return fdcount;
  69664. +}
  69665. diff -rup --new-file baseline/fsf/emacs/unixlib/src/setjmp.c amiga/fsf/emacs/unixlib/src/setjmp.c
  69666. --- baseline/fsf/emacs/unixlib/src/setjmp.c    Wed Dec 31 17:00:00 1969
  69667. +++ amiga/fsf/emacs/unixlib/src/setjmp.c    Sat Sep 28 00:00:00 1996
  69668. @@ -0,0 +1,15 @@
  69669. +#include "amiga.h"
  69670. +#include "signals.h"
  69671. +#include <setjmp.h>
  69672. +
  69673. +int setjmp(jmp_buf jb)
  69674. +{
  69675. +  jb[0] = _sig_mask;
  69676. +  return _setjmp(jb + 1);
  69677. +}
  69678. +
  69679. +void longjmp(jmp_buf jb, int val)
  69680. +{
  69681. +  sigsetmask(jb[0]);
  69682. +  _longjmp(jb + 1, val);
  69683. +}
  69684. diff -rup --new-file baseline/fsf/emacs/unixlib/src/siglist.c amiga/fsf/emacs/unixlib/src/siglist.c
  69685. --- baseline/fsf/emacs/unixlib/src/siglist.c    Wed Dec 31 17:00:00 1969
  69686. +++ amiga/fsf/emacs/unixlib/src/siglist.c    Sat Sep 28 00:00:00 1996
  69687. @@ -0,0 +1,35 @@
  69688. +char *sys_siglist[] =
  69689. +{
  69690. +    "no signal",
  69691. +    "hangup",
  69692. +    "interrupt",
  69693. +    "quit",
  69694. +    "illegal instruction",
  69695. +    "trace trap",
  69696. +    "abort",
  69697. +    "emt instruction",
  69698. +    "floating point exception",
  69699. +    "kill",
  69700. +    "bus error",
  69701. +    "segmentation violation",
  69702. +    "bad argument to system call",
  69703. +    "write on a pipe with no one to read it",
  69704. +    "alarm clock",
  69705. +    "software termination signal from kill",
  69706. +    "status signal",
  69707. +    "sendable stop signal not from tty",
  69708. +    "stop signal from tty",
  69709. +    "continue a stopped process",
  69710. +    "child status has changed",
  69711. +    "background read attempted from control tty",
  69712. +    "background write attempted from control tty",
  69713. +    "input record available at control tty",
  69714. +    "exceeded CPU time limit",
  69715. +    "exceeded file size limit",
  69716. +    "unknown signal",
  69717. +    "unknown signal",
  69718. +    "window changed",
  69719. +    "unknown signal",
  69720. +    "user signal 1",
  69721. +    "user signal 2",
  69722. +};
  69723. diff -rup --new-file baseline/fsf/emacs/unixlib/src/signal.c amiga/fsf/emacs/unixlib/src/signal.c
  69724. --- baseline/fsf/emacs/unixlib/src/signal.c    Wed Dec 31 17:00:00 1969
  69725. +++ amiga/fsf/emacs/unixlib/src/signal.c    Sat Sep 28 00:00:00 1996
  69726. @@ -0,0 +1,26 @@
  69727. +#include "amiga.h"
  69728. +#include "signals.h"
  69729. +
  69730. +int sigvec(int sig, struct sigvec *vec, struct sigvec *ovec)
  69731. +{
  69732. +  chkabort();
  69733. +  if (sig >= 1 && sig < NSIG)
  69734. +    {
  69735. +      if (ovec) *ovec = _sig_handlers[sig];
  69736. +      if (vec) _sig_handlers[sig] = *vec;
  69737. +      return 0;
  69738. +    }
  69739. +  errno = EINVAL;
  69740. +  return -1;
  69741. +}
  69742. +
  69743. +void (*signal(int sig,void (*fn)(int)))(int)
  69744. +{
  69745. +  struct sigvec vec, ovec;
  69746. +
  69747. +  vec.sv_handler = fn;
  69748. +  vec.sv_mask = 0;
  69749. +  /*vec.sv_flags = 0;*/
  69750. +  if (sigvec(sig, &vec, &ovec)) return -1;
  69751. +  return ovec.sv_handler;
  69752. +}
  69753. diff -rup --new-file baseline/fsf/emacs/unixlib/src/signals.c amiga/fsf/emacs/unixlib/src/signals.c
  69754. --- baseline/fsf/emacs/unixlib/src/signals.c    Wed Dec 31 17:00:00 1969
  69755. +++ amiga/fsf/emacs/unixlib/src/signals.c    Sat Sep 28 00:00:00 1996
  69756. @@ -0,0 +1,211 @@
  69757. +#include "amiga.h"
  69758. +#include "timers.h"
  69759. +#include "signals.h"
  69760. +#include "processes.h"
  69761. +
  69762. +static ULONG signalsigs;    /* When one of these occur, call handle_signals */
  69763. +struct sigvec _sig_handlers[NSIG];
  69764. +long _sig_mask, _sig_pending;
  69765. +
  69766. +/* Alarm signal */
  69767. +/* ------------ */
  69768. +
  69769. +static struct timeinfo *alarm_timer;
  69770. +
  69771. +static int check_alarm(ULONG sigs)
  69772. +{
  69773. +  return alarm_timer && _timer_expired(alarm_timer);
  69774. +}
  69775. +
  69776. +void alarm(int secs)
  69777. +/* Effect: Schedule a SIGALRM after secs seconds
  69778. +*/
  69779. +{
  69780. +  _timer_start(alarm_timer, secs, 0);
  69781. +}
  69782. +
  69783. +static void init_alarm(void)
  69784. +{
  69785. +  if (!(alarm_timer = _alloc_timer())) _fail("Failed to create timer");
  69786. +  signalsigs |= _timer_sig(alarm_timer);
  69787. +}
  69788. +
  69789. +static void cleanup_alarm(void)
  69790. +{
  69791. +  _free_timer(alarm_timer);
  69792. +}
  69793. +
  69794. +/* SIGINT definition */
  69795. +/* ----------------- */
  69796. +
  69797. +static void init_sigint(void)
  69798. +{
  69799. +  signalsigs |= SIGBREAKF_CTRL_C;
  69800. +}
  69801. +
  69802. +/*static void cleanup_sigint(void) { }*/
  69803. +
  69804. +static int check_sigint(ULONG sigs)
  69805. +{
  69806. +  return (sigs & SIGBREAKF_CTRL_C) != 0;
  69807. +}
  69808. +
  69809. +/* SIGQUIT definition */
  69810. +/* ------------------ */
  69811. +
  69812. +static void init_sigquit(void)
  69813. +{
  69814. +  signalsigs |= SIGBREAKF_CTRL_D;
  69815. +}
  69816. +
  69817. +/*static void cleanup_sigquit(void) { }*/
  69818. +
  69819. +static int check_sigquit(ULONG sigs)
  69820. +{
  69821. +  return (sigs & SIGBREAKF_CTRL_D) != 0;
  69822. +}
  69823. +
  69824. +/* SIGCHLD definition */
  69825. +/* ------------------ */
  69826. +
  69827. +static void init_children(void)
  69828. +{
  69829. +  _init_processes();
  69830. +  signalsigs |= 1L << _children_exit->mp_SigBit;
  69831. +}
  69832. +
  69833. +static void cleanup_children(void)
  69834. +{
  69835. +  _cleanup_processes();
  69836. +}
  69837. +
  69838. +static int check_children(ULONG sigs)
  69839. +{
  69840. +  struct exit_message *msg;
  69841. +  int change = FALSE;
  69842. +  
  69843. +  while (msg = (struct exit_message *)GetMsg(_children_exit))
  69844. +    {
  69845. +      struct process *p;
  69846. +
  69847. +      if ((p = _find_pid(msg->pid)) && p->status == alive)
  69848. +    {
  69849. +      change = TRUE;
  69850. +      p->status = exited;
  69851. +      p->rc = msg->rc;
  69852. +    }
  69853. +      FreeMem(msg, sizeof(struct exit_message));
  69854. +    }
  69855. +  return change;
  69856. +}
  69857. +
  69858. +/* Signal dispatching */
  69859. +/* ------------------ */
  69860. +
  69861. +void _sig_dispatch(int sig)
  69862. +/* Effect: Do the action associated with signal sig it it isn't masked
  69863. +     Mask it for the duration of the signal exec
  69864. +*/
  69865. +{
  69866. +  void (*fn)(int);
  69867. +  long smask = 1 << sig;
  69868. +
  69869. +  if (sig == SIGKILL) _exit(0);
  69870. +
  69871. +  if (_sig_mask & smask) _sig_pending |= smask;
  69872. +  else
  69873. +    do
  69874. +      {
  69875. +    _sig_pending &= ~smask;
  69876. +    if (sig >= 0 && sig < NSIG)
  69877. +      {
  69878. +        fn = _sig_handlers[sig].sv_handler;
  69879. +
  69880. +        if (fn == SIG_DFL)
  69881. +          switch (sig)
  69882. +        {
  69883. +        case SIGCHLD: case SIGURG: case SIGWINCH: break;
  69884. +        case SIGINT: case SIGQUIT: _message("user interrupt");
  69885. +        default: _exit(0);
  69886. +        }
  69887. +        else if (fn != SIG_IGN)
  69888. +          {
  69889. +        int mask = smask | _sig_handlers[sig].sv_mask;
  69890. +
  69891. +        _sig_mask |= mask;
  69892. +        fn(sig);
  69893. +        _sig_mask &= ~mask;
  69894. +          }
  69895. +      }
  69896. +      }
  69897. +    while (_sig_pending & smask); /* Signal may have been generated during the
  69898. +                     signal handling function. */
  69899. +}
  69900. +
  69901. +ULONG _check_signals(ULONG extra_sigs)
  69902. +{
  69903. +  return SetSignal(0, signalsigs | extra_sigs);
  69904. +}
  69905. +
  69906. +ULONG _wait_signals(ULONG extra_sigs)
  69907. +{
  69908. +  return Wait(signalsigs | extra_sigs);
  69909. +}
  69910. +
  69911. +int _handle_signals(ULONG sigs)
  69912. +{
  69913. +  int signaled = 0;
  69914. +
  69915. +  if (check_alarm(sigs)) { signaled = 1; _sig_dispatch(SIGALRM); }
  69916. +  if (check_sigint(sigs)) { signaled = 1; _sig_dispatch(SIGINT); }
  69917. +  if (check_sigquit(sigs)) { signaled = 1; _sig_dispatch(SIGQUIT); }
  69918. +  if (check_children(sigs)) { signaled = 1; _sig_dispatch(SIGCHLD); }
  69919. +
  69920. +  return signaled;
  69921. +}
  69922. +
  69923. +/* Patch into SAS signal stuff so as to replace it */
  69924. +
  69925. +void CXFERR(int code)
  69926. +{
  69927. +    extern int _FPERR;
  69928. +
  69929. +    _FPERR = code;
  69930. +    _sig_dispatch(SIGFPE);
  69931. +}
  69932. +
  69933. +void chkabort(void)
  69934. +/* Checks all signals */
  69935. +{
  69936. +  _handle_signals(_check_signals(0));
  69937. +}
  69938. +
  69939. +void Chk_Abort(void) { chkabort(); }
  69940. +
  69941. +/* Initialisation */
  69942. +/* -------------- */
  69943. +
  69944. +void _init_signals(void)
  69945. +{
  69946. +  int i;
  69947. +
  69948. +  for (i = 0; i < NSIG; i++)
  69949. +    {
  69950. +      _sig_handlers[i].sv_handler = SIG_DFL;
  69951. +      _sig_handlers[i].sv_mask = 0;
  69952. +      /*_sig_handlers[i].sv_flags = 0;*/
  69953. +    }
  69954. +      
  69955. +  _sig_mask = _sig_pending = 0;
  69956. +  signalsigs = 0;
  69957. +
  69958. +  init_sigint(); init_sigquit(); init_alarm(); init_children();
  69959. +}
  69960. +
  69961. +void _cleanup_signals(void)
  69962. +{
  69963. +  cleanup_alarm();
  69964. +  /*cleanup_sigquit();*/
  69965. +  /*cleanup_sigint();*/
  69966. +  cleanup_children();
  69967. +}
  69968. diff -rup --new-file baseline/fsf/emacs/unixlib/src/signals.h amiga/fsf/emacs/unixlib/src/signals.h
  69969. --- baseline/fsf/emacs/unixlib/src/signals.h    Wed Dec 31 17:00:00 1969
  69970. +++ amiga/fsf/emacs/unixlib/src/signals.h    Sat Sep 28 00:00:00 1996
  69971. @@ -0,0 +1,21 @@
  69972. +#ifndef SIGNALS_H
  69973. +#define SIGNALS_H
  69974. +
  69975. +#include <signal.h>
  69976. +
  69977. +extern struct sigvec _sig_handlers[NSIG];
  69978. +extern long _sig_mask, _sig_pending;
  69979. +
  69980. +void _sig_dispatch(int sig);
  69981. +/* Effect: Do the action associated with signal sig it it isn't masked
  69982. +     Mask it for the duration of the signal exec
  69983. +*/
  69984. +
  69985. +ULONG _check_signals(ULONG extra_sigs);
  69986. +ULONG _wait_signals(ULONG extra_sigs);
  69987. +int _handle_signals(ULONG sigs);
  69988. +
  69989. +void _init_signals(void);
  69990. +void _cleanup_signals(void);
  69991. +
  69992. +#endif
  69993. diff -rup --new-file baseline/fsf/emacs/unixlib/src/sigpause.c amiga/fsf/emacs/unixlib/src/sigpause.c
  69994. --- baseline/fsf/emacs/unixlib/src/sigpause.c    Wed Dec 31 17:00:00 1969
  69995. +++ amiga/fsf/emacs/unixlib/src/sigpause.c    Sat Sep 28 00:00:00 1996
  69996. @@ -0,0 +1,16 @@
  69997. +#include "amiga.h"
  69998. +#include "signals.h"
  69999. +
  70000. +int sigpause(long mask)
  70001. +{
  70002. +  long oldmask = sigsetmask(mask);
  70003. +  ULONG sigs;
  70004. +
  70005. +  sigs = _check_signals(0);
  70006. +  while (!_handle_signals(sigs)) sigs = _wait_signals(0);
  70007. +  
  70008. +  sigsetmask(oldmask);
  70009. +
  70010. +  errno = EINTR;
  70011. +  return -1;
  70012. +}
  70013. diff -rup --new-file baseline/fsf/emacs/unixlib/src/sigsetmask.c amiga/fsf/emacs/unixlib/src/sigsetmask.c
  70014. --- baseline/fsf/emacs/unixlib/src/sigsetmask.c    Wed Dec 31 17:00:00 1969
  70015. +++ amiga/fsf/emacs/unixlib/src/sigsetmask.c    Sat Sep 28 00:00:00 1996
  70016. @@ -0,0 +1,22 @@
  70017. +#include "amiga.h"
  70018. +#include "signals.h"
  70019. +
  70020. +long sigsetmask(long mask)
  70021. +{
  70022. +  int oldmask = _sig_mask, i, imask;
  70023. +
  70024. +  chkabort();
  70025. +  _sig_mask = mask;
  70026. +
  70027. +  /* Check all pending signals */
  70028. +  for (i = 0, imask = 1; i < NSIG; i++, imask <<= 1)
  70029. +    if ((_sig_pending & imask) && !(_sig_mask & imask))
  70030. +      _sig_dispatch(i);
  70031. +
  70032. +  return oldmask;
  70033. +}
  70034. +
  70035. +long sigblock(long mask)
  70036. +{
  70037. +  return sigsetmask(_sig_mask | mask);
  70038. +}
  70039. diff -rup --new-file baseline/fsf/emacs/unixlib/src/sleep.c amiga/fsf/emacs/unixlib/src/sleep.c
  70040. --- baseline/fsf/emacs/unixlib/src/sleep.c    Wed Dec 31 17:00:00 1969
  70041. +++ amiga/fsf/emacs/unixlib/src/sleep.c    Sat Sep 28 00:00:00 1996
  70042. @@ -0,0 +1,13 @@
  70043. +#include "amiga.h"
  70044. +#include "timers.h"
  70045. +#include "signals.h"
  70046. +
  70047. +int sleep(unsigned seconds)
  70048. +{
  70049. +  chkabort();
  70050. +  _timer_start(_odd_timer, seconds, 0);
  70051. +
  70052. +  while (!_timer_expired(_odd_timer)) _handle_signals(_wait_signals(_odd_sig));
  70053. +
  70054. +  return 0;
  70055. +}
  70056. diff -rup --new-file baseline/fsf/emacs/unixlib/src/smakefile amiga/fsf/emacs/unixlib/src/smakefile
  70057. --- baseline/fsf/emacs/unixlib/src/smakefile    Wed Dec 31 17:00:00 1969
  70058. +++ amiga/fsf/emacs/unixlib/src/smakefile    Sat Sep 28 00:00:00 1996
  70059. @@ -0,0 +1,128 @@
  70060. +OBJS=  mkdir.o devices.o processes.o kill.o abort.o error.o error_msg.o \
  70061. +       fcntl.o select.o read.o lseek.o chmod.o getwd.o mktemp.o link.o \
  70062. +       getenv.o time.o write.o creat.o sleep.o uid.o exec.o truncate.o \
  70063. +       strftime.o rmdir.o sigpause.o isatty.o mkfifo.o fchmod.o ftruncate.o \
  70064. +       bzero.o fibstat.o bcmp.o chown.o rename.o amigaos.o ctime.o open.o \
  70065. +       ioctl.o _exit.o gid.o protection.o umask.o _main.o signals.o grp.o \
  70066. +       pipe.o unlink.o alloca.o readlink.o pwd.o timeconvert.o amigatime.o \
  70067. +       bcopy.o utime.o files.o close.o fifofd.o timers.o index.o rindex.o \
  70068. +       pseudo_c.o wait4.o siglist.o perror.o gethostname.o setjmp.o allocdos.o \
  70069. +       message.o symlink.o fstat.o access.o dir_data.o dir.o stat.o \
  70070. +       sigsetmask.o signal.o getpid.o start.o popen.o tmpnam.o
  70071. +
  70072. +DEFS = define=SOFTLINK
  70073. +OPTIMIZE = opt
  70074. +CFLAGS = $(OPTS) $(DEFS) gst=amiga.sym $(OPTIMIZE)
  70075. +
  70076. +all: amiga.sym unix.lib unix-hard.lib
  70077. +
  70078. +ALLOBJS = $(OBJS) sprintf.o _setjmp.o
  70079. +
  70080. +unix.lib: $(ALLOBJS)
  70081. +    -delete unix.lib ram:unix.lib
  70082. +    oml ram:unix.lib <@<
  70083. +r $(ALLOBJS)
  70084. +<
  70085. +    copy ram:unix.lib ""
  70086. +
  70087. +unix-hard.lib: unix.lib fibstat-hard.o
  70088. +    copy unix.lib ram:
  70089. +    oml ram:unix.lib d fibstat.c
  70090. +    oml ram:unix.lib r fibstat-hard.o
  70091. +    copy ram:unix.lib unix-hard.lib
  70092. +
  70093. +sprintf.o: sprintf.asm
  70094. +    asm -osprintf.o -iINCLUDE: sprintf.asm
  70095. +
  70096. +_setjmp.o: _setjmp.asm
  70097. +    asm -o_setjmp.o -iINCLUDE: _setjmp.asm
  70098. +
  70099. +amiga.sym: amiga.h
  70100. +    copy amiga.h am.c
  70101. +    sc makegst=amiga.sym $(OPTS) am.c
  70102. +    delete am.c
  70103. +
  70104. +fibstat-hard.o: fibstat.c
  70105. +    $(CC) $(CFLAGS) DEF PRETEND_LINKED objname $@ fibstat.c
  70106. +
  70107. +mkdir.o: mkdir.c amiga.h
  70108. +devices.o: devices.c amiga.h
  70109. +processes.o: processes.c processes.h amiga.h
  70110. +kill.o: kill.c processes.h signals.h amiga.h
  70111. +abort.o: abort.c amiga.h
  70112. +error.o: error.c amiga.h
  70113. +error_msg.o: error_msg.c amiga.h
  70114. +fcntl.o: fcntl.c amiga.h
  70115. +select.o: select.c signals.h amiga.h
  70116. +read.o: read.c amiga.h
  70117. +lseek.o: lseek.c amiga.h
  70118. +chmod.o: chmod.c amiga.h
  70119. +getwd.o: getwd.c amiga.h
  70120. +mktemp.o: mktemp.c amiga.h
  70121. +link.o: link.c amiga.h
  70122. +getenv.o: getenv.c amiga.h
  70123. +time.o: time.c timeconvert.h amiga.h
  70124. +write.o: write.c amiga.h
  70125. +creat.o: creat.c amiga.h
  70126. +sleep.o: sleep.c signals.h amiga.h
  70127. +uid.o: uid.c amiga.h
  70128. +exec.o: exec.c processes.h amiga.h
  70129. +truncate.o: truncate.c amigaos.h amiga.h
  70130. +strftime.o: strftime.c
  70131. +rmdir.o: rmdir.c amiga.h
  70132. +sigpause.o: sigpause.c signals.h amiga.h
  70133. +isatty.o: isatty.c amiga.h
  70134. +mkfifo.o: mkfifo.c amiga.h
  70135. +fchmod.o: fchmod.c amiga.h
  70136. +ftruncate.o: ftruncate.c amiga.h
  70137. +bzero.o: bzero.c amiga.h
  70138. +fibstat.o: fibstat.c timeconvert.h fibstat.h amiga.h
  70139. +bcmp.o: bcmp.c amiga.h
  70140. +chown.o: chown.c amiga.h
  70141. +rename.o: rename.c amiga.h
  70142. +amigaos.o: amigaos.c signals.h amiga.h
  70143. +ctime.o: ctime.c
  70144. +open.o: open.c amigaos.h amiga.h
  70145. +ioctl.o: ioctl.c amiga.h
  70146. +_exit.o: _exit.c fifo_pragmas.h fifo.h fifofd.h signals.h amiga.h
  70147. +gid.o: gid.c amiga.h
  70148. +protection.o: protection.c amiga.h
  70149. +umask.o: umask.c amiga.h
  70150. +_main.o: _main.c fifo_pragmas.h fifo.h amigaos.h fifofd.h signals.h amiga.h
  70151. +signals.o: signals.c processes.h signals.h amiga.h
  70152. +grp.o: grp.c amiga.h
  70153. +pipe.o: pipe.c fifo_pragmas.h fifo.h fifofd.h signals.h amiga.h
  70154. +unlink.o: unlink.c amiga.h
  70155. +alloca.o: alloca.c
  70156. +readlink.o: readlink.c amiga.h
  70157. +pwd.o: pwd.c amiga.h
  70158. +timeconvert.o: timeconvert.c timeconvert.h amiga.h
  70159. +amigatime.o: amigatime.c timeconvert.h amiga.h
  70160. +bcopy.o: bcopy.c amiga.h
  70161. +utime.o: utime.c timeconvert.h amiga.h
  70162. +files.o: files.c amiga.h
  70163. +close.o: close.c amiga.h
  70164. +fifofd.o: fifofd.c fifo_pragmas.h fifo.h fifofd.h amiga.h
  70165. +timers.o: timers.c amiga.h
  70166. +index.o: index.c
  70167. +rindex.o: rindex.c
  70168. +pseudo_c.o: pseudo_c.c amiga.h
  70169. +wait4.o: wait4.c processes.h signals.h amiga.h
  70170. +siglist.o: siglist.c
  70171. +perror.o: perror.c amiga.h
  70172. +gethostname.o: gethostname.c amiga.h
  70173. +setjmp.o: setjmp.c signals.h amiga.h
  70174. +allocdos.o: allocdos.c
  70175. +message.o: message.c amiga.h
  70176. +symlink.o: symlink.c amiga.h
  70177. +fstat.o: fstat.c fibstat.h amiga.h
  70178. +access.o: access.c fibstat.h amiga.h
  70179. +dir_data.o: dir_data.c dir_data.h amiga.h
  70180. +dir.o: dir.c dir_data.h amiga.h
  70181. +stat.o: stat.c dir_data.h fibstat.h amiga.h
  70182. +sigsetmask.o: sigsetmask.c signals.h amiga.h
  70183. +signal.o: signal.c signals.h amiga.h
  70184. +getpid.o: getpid.c processes.h amiga.h
  70185. +start.o: start.c processes.h amiga.h
  70186. +popen.o: popen.c fifo_pragmas.h fifo.h processes.h fifofd.h amiga.h
  70187. +tmpnam.o: tmpnam.c amiga.h
  70188. diff -rup --new-file baseline/fsf/emacs/unixlib/src/smakefile.base amiga/fsf/emacs/unixlib/src/smakefile.base
  70189. --- baseline/fsf/emacs/unixlib/src/smakefile.base    Wed Dec 31 17:00:00 1969
  70190. +++ amiga/fsf/emacs/unixlib/src/smakefile.base    Sat Sep 28 00:00:00 1996
  70191. @@ -0,0 +1,26 @@
  70192. +DEFS = define=SOFTLINK
  70193. +OPTIMIZE = debug=sf
  70194. +CFLAGS = $(OPTS) $(DEFS) gst=amiga.sym $(OPTIMIZE)
  70195. +
  70196. +all: amiga.sym unix.lib
  70197. +
  70198. +ALLOBJS = $(OBJS) sprintf.o _setjmp.o
  70199. +
  70200. +unix.lib: $(ALLOBJS)
  70201. +    -delete unix.lib ram:unix.lib
  70202. +    oml ram:unix.lib <@<
  70203. +r $(ALLOBJS)
  70204. +<
  70205. +    copy ram:unix.lib ""
  70206. +
  70207. +sprintf.o: sprintf.asm
  70208. +    asm -osprintf.o -iINCLUDE: sprintf.asm
  70209. +
  70210. +_setjmp.o: _setjmp.asm
  70211. +    asm -o_setjmp.o -iINCLUDE: _setjmp.asm
  70212. +
  70213. +amiga.sym: amiga.h
  70214. +    copy amiga.h am.c
  70215. +    sc makegst=amiga.sym $(OPTS) am.c
  70216. +    delete am.c
  70217. +
  70218. diff -rup --new-file baseline/fsf/emacs/unixlib/src/sprintf.asm amiga/fsf/emacs/unixlib/src/sprintf.asm
  70219. --- baseline/fsf/emacs/unixlib/src/sprintf.asm    Wed Dec 31 17:00:00 1969
  70220. +++ amiga/fsf/emacs/unixlib/src/sprintf.asm    Sat Sep 28 00:00:00 1996
  70221. @@ -0,0 +1,29 @@
  70222. +    XDEF __sprintf
  70223. +    XREF _AbsExecBase
  70224. +    XREF _LVORawDoFmt
  70225. +
  70226. +    csect    text,0,,2,2
  70227. +
  70228. +__sprintf
  70229. +save    equ    16
  70230. +    movem.l    a2/a3/a6/d2,-(a7)    ; save bytes copied to stack
  70231. +
  70232. +    move.l    save+8(a7),a0
  70233. +    lea    save+12(a7),a1
  70234. +    lea    copychar(pc),a2
  70235. +    move.l    save+4(a7),a3
  70236. +    move.l    a3,d2
  70237. +
  70238. +    move.l    _AbsExecBase,a6
  70239. +    jsr    _LVORawDoFmt(a6)
  70240. +    move.l    a3,d0            ; # of characters printed
  70241. +    sub.l    d2,d0
  70242. +
  70243. +    movem.l    (a7)+,a2/a3/a6/d2
  70244. +    rts
  70245. +    
  70246. +copychar
  70247. +    move.b    d0,(a3)+
  70248. +    rts
  70249. +
  70250. +    end
  70251. diff -rup --new-file baseline/fsf/emacs/unixlib/src/start.c amiga/fsf/emacs/unixlib/src/start.c
  70252. --- baseline/fsf/emacs/unixlib/src/start.c    Wed Dec 31 17:00:00 1969
  70253. +++ amiga/fsf/emacs/unixlib/src/start.c    Sat Sep 28 00:00:00 1996
  70254. @@ -0,0 +1,118 @@
  70255. +#include "amiga.h"
  70256. +#include "processes.h"
  70257. +#include <amiga/ioctl.h>
  70258. +#include <exec/memory.h>
  70259. +#include <dos/dosextens.h>
  70260. +#include <dos/dostags.h>
  70261. +#include <string.h>
  70262. +
  70263. +/* Variables used by a child that is starting up */
  70264. +struct MemList *_child_entry;    /* Memory used for child's code */
  70265. +static struct Message startup_message;
  70266. +struct exit_message *_child_exit;
  70267. +char *_child_command;
  70268. +int _child_command_len;
  70269. +char *_child_door_name;
  70270. +
  70271. +static void __saveds __interrupt _child_startup(void)
  70272. +{
  70273. +  struct exit_message *exit = _child_exit;
  70274. +  char *command = _child_command;
  70275. +  int command_len = _child_command_len;
  70276. +  char *door_name = _child_door_name;
  70277. +  struct Process *us = (struct Process *)FindTask(0);
  70278. +  struct DOSBase *local_DOSBase = DOSBase;
  70279. +#pragma libcall local_DOSBase local_SystemTagList 25E 2102
  70280. +  struct TagItem stags[2];
  70281. +  struct MsgPort *parent;
  70282. +
  70283. +  AddTail(&us->pr_Task.tc_MemEntry, _child_entry);
  70284. +
  70285. +  PutMsg(_startup_port, &startup_message);
  70286. +
  70287. +  /* From now on parent may disappear */
  70288. +  stags[0].ti_Tag = SYS_UserShell; stags[0].ti_Data = TRUE;
  70289. +  stags[1].ti_Tag = TAG_END;
  70290. +  exit->rc = local_SystemTagList(command, stags) << 8;
  70291. +
  70292. +  /* Send result to parent if he is around */
  70293. +  Forbid();
  70294. +  if (parent = FindPort(door_name)) PutMsg(parent, exit);
  70295. +  else FreeMem(exit, sizeof(struct exit_message));
  70296. +  Permit();
  70297. +
  70298. +  FreeMem(door_name, DOOR_LEN);
  70299. +  FreeMem(command, command_len);
  70300. +}
  70301. +
  70302. +int _start_process(char *command,
  70303. +           BPTR input, int close_input,
  70304. +           BPTR output, int close_output,
  70305. +           BPTR error, int close_error,
  70306. +           BPTR dir,
  70307. +           long stacksize)
  70308. +{
  70309. +  struct process *entry = (struct process *)malloc(sizeof(struct process));
  70310. +  static struct MemList alloc_child = { { 0 }, 1 };
  70311. +
  70312. +  _child_command_len = strlen(command) + 1;
  70313. +  _child_command = AllocMem(_child_command_len, MEMF_PUBLIC);
  70314. +  strcpy(_child_command, command);
  70315. +
  70316. +  _child_exit = AllocMem(sizeof(struct exit_message), MEMF_PUBLIC);
  70317. +  _child_door_name = AllocMem(DOOR_LEN, MEMF_PUBLIC);
  70318. +
  70319. +  alloc_child.ml_ME[0].me_Reqs = MEMF_PUBLIC;
  70320. +  alloc_child.ml_ME[0].me_Length = (char *)&_start_process - (char *)&_child_startup;
  70321. +  _child_entry = AllocEntry(&alloc_child);
  70322. +
  70323. +  if (entry && _child_command && _child_exit && _child_door_name &&
  70324. +      (long)_child_entry > 0)
  70325. +    {
  70326. +      memcpy(_child_entry->ml_ME[0].me_Addr, &_child_startup,
  70327. +         _child_entry->ml_ME[0].me_Length);
  70328. +      strcpy(_child_door_name, _door_name);
  70329. +
  70330. +      entry->pid = _next_pid++;
  70331. +      entry->input = input;
  70332. +
  70333. +      /* This message is sent by the child when it has started */
  70334. +      startup_message.mn_Length = sizeof(startup_message);
  70335. +      startup_message.mn_Node.ln_Type = NT_MESSAGE;
  70336. +
  70337. +      /* This message is sent by the child when it exits */
  70338. +      _child_exit->m.mn_Length = sizeof(*_child_exit);
  70339. +      _child_exit->m.mn_Node.ln_Type = NT_MESSAGE;
  70340. +      _child_exit->pid = entry->pid;
  70341. +
  70342. +      entry->process = CreateNewProcTags(NP_Entry, _child_entry->ml_ME[0].me_Addr,
  70343. +                     NP_Input, input,
  70344. +                     NP_CloseInput, (long)close_input,
  70345. +                     NP_Output, output,
  70346. +                     NP_CloseOutput, (long)close_output,
  70347. +                     NP_Error, error,
  70348. +                     NP_CloseError, (long)close_error,
  70349. +                     dir ? NP_CurrentDir : TAG_IGNORE, dir,
  70350. +                     NP_StackSize,
  70351. +                     stacksize > 0 ? stacksize : _stack_size,
  70352. +                     NP_Cli, TRUE,
  70353. +                     TAG_END);
  70354. +      if (entry->process)
  70355. +    {
  70356. +      do WaitPort(_startup_port); while (!GetMsg(_startup_port));
  70357. +      entry->status = alive;
  70358. +      AddHead((struct List *)&_processes, (struct Node *)entry);
  70359. +      return entry->pid;
  70360. +    }
  70361. +      errno = convert_oserr(IoErr());
  70362. +    }
  70363. +  else errno = ENOMEM;
  70364. +
  70365. +  if (entry) free(entry);
  70366. +  if (_child_command) FreeMem(_child_command, _child_command_len);
  70367. +  if (_child_exit) FreeMem(_child_exit, sizeof(struct exit_message));
  70368. +  if (_child_door_name) FreeMem(_child_door_name, DOOR_LEN);
  70369. +  if ((long)_child_entry > 0) FreeEntry(_child_entry);
  70370. +
  70371. +  return -1;
  70372. +}
  70373. diff -rup --new-file baseline/fsf/emacs/unixlib/src/stat.c amiga/fsf/emacs/unixlib/src/stat.c
  70374. --- baseline/fsf/emacs/unixlib/src/stat.c    Wed Dec 31 17:00:00 1969
  70375. +++ amiga/fsf/emacs/unixlib/src/stat.c    Sat Sep 28 00:00:00 1996
  70376. @@ -0,0 +1,96 @@
  70377. +#include "amiga.h"
  70378. +#include "fibstat.h"
  70379. +#include "dir_data.h"
  70380. +#include <sys/stat.h>
  70381. +#include <string.h>
  70382. +
  70383. +static int attach (char *dest, int dlen, char *dirname, char *name)
  70384. +{
  70385. +  char *dirnamep = dirname;
  70386. +  
  70387. +  while (*dirnamep && --dlen > 0)
  70388. +    *dest++ = *dirnamep++;
  70389. +  /* Add '/' if `dirname' doesn't already end with it. */
  70390. +  if (dirnamep > dirname && dirnamep[-1] != '/' && dirnamep[-1] != ':' && --dlen > 0)
  70391. +    *dest++ = '/';
  70392. +  
  70393. +  while (*name && --dlen > 0)
  70394. +    *dest++ = *name++;
  70395. +  *dest = 0;
  70396. +  
  70397. +  return dlen > 0;
  70398. +}
  70399. +
  70400. +static struct FileInfoBlock fakefib;
  70401. +
  70402. +static int fakestat(int soft, char *name, struct stat *sbuf)
  70403. +{
  70404. +  /* See if we want information on the last file returned from readdir */
  70405. +  if (last_dir)
  70406. +    {
  70407. +      iDIR *last_info = (iDIR *)last_dir->dd_buf;
  70408. +  
  70409. +      if (last_info->cdir == _get_cd() &&
  70410. +      attach(_temp_fname, FNAMESIZE - 1, last_info->dirname,
  70411. +         last_entry->entry.d_name) &&
  70412. +      strcmp(_temp_fname, name) == 0 &&
  70413. +      (soft || last_entry->type != ST_SOFTLINK))
  70414. +    {
  70415. +      if (last_entry->type == ST_LINKFILE || last_entry->type == ST_LINKDIR)
  70416. +        {
  70417. +          /* Find real block, this allows tar to detect hard links */
  70418. +          BPTR cd = CurrentDir(last_dir->dd_fd);
  70419. +          BPTR l = Lock(last_entry->entry.d_name, ACCESS_READ);
  70420. +
  70421. +          if (l)
  70422. +        {
  70423. +          Examine(l, &fakefib);
  70424. +          UnLock(l);
  70425. +        }
  70426. +          CurrentDir(cd);
  70427. +        }
  70428. +      else
  70429. +        fakefib.fib_DiskKey = last_entry->entry.d_ino;
  70430. +
  70431. +      fakefib.fib_NumBlocks = last_entry->numblocks;
  70432. +      fakefib.fib_Size = last_entry->size;
  70433. +      fakefib.fib_Date = last_entry->date;
  70434. +      fakefib.fib_DirEntryType = last_entry->type;
  70435. +      fakefib.fib_Protection = last_entry->protection;
  70436. +      
  70437. +      _lfibstat(name, &fakefib, last_info->task, 0, sbuf);
  70438. +
  70439. +      return 1;
  70440. +    }
  70441. +    }
  70442. +  return 0;
  70443. +}
  70444. +
  70445. +int stat(char *name, struct stat *sbuf)
  70446. +{
  70447. +  chkabort();
  70448. +  if (fakestat(0, name, sbuf)) return 0;
  70449. +  return _fibstat(name, sbuf);
  70450. +}
  70451. +
  70452. +int lstat(char *name, struct stat *sbuf)
  70453. +{
  70454. +  chkabort();
  70455. +  if (fakestat(1, name, sbuf)) return 0;
  70456. +  if (readlink(name, _temp_fname, FNAMESIZE - 1) < 0) return _fibstat(name, sbuf);
  70457. +
  70458. +  /* Symbolic link, fake a stat block */
  70459. +  sbuf->st_dev = 0;
  70460. +  sbuf->st_rdev = 0;
  70461. +  sbuf->st_uid = AMIGA_UID; sbuf->st_gid = AMIGA_GID;
  70462. +  sbuf->st_blksize = 512;
  70463. +  sbuf->st_nlink = 1;        
  70464. +  sbuf->st_blocks = 0;
  70465. +  sbuf->st_size = strlen(_temp_fname);
  70466. +  sbuf->st_ino = 0;
  70467. +  /* 1-Jan-1978 */
  70468. +  sbuf->st_ctime = sbuf->st_atime = sbuf->st_mtime = 252460800;
  70469. +  sbuf->st_mode = S_IFLNK | 0777;
  70470. +
  70471. +  return 0;
  70472. +}
  70473. diff -rup --new-file baseline/fsf/emacs/unixlib/src/strftime.c amiga/fsf/emacs/unixlib/src/strftime.c
  70474. --- baseline/fsf/emacs/unixlib/src/strftime.c    Wed Dec 31 17:00:00 1969
  70475. +++ amiga/fsf/emacs/unixlib/src/strftime.c    Sat Sep 28 00:00:00 1996
  70476. @@ -0,0 +1,291 @@
  70477. +/*
  70478. + * Copyright (c) 1989 The Regents of the University of California.
  70479. + * All rights reserved.
  70480. + *
  70481. + * Redistribution and use in source and binary forms, with or without
  70482. + * modification, are permitted provided that the following conditions
  70483. + * are met:
  70484. + * 1. Redistributions of source code must retain the above copyright
  70485. + *    notice, this list of conditions and the following disclaimer.
  70486. + * 2. Redistributions in binary form must reproduce the above copyright
  70487. + *    notice, this list of conditions and the following disclaimer in the
  70488. + *    documentation and/or other materials provided with the distribution.
  70489. + * 3. All advertising materials mentioning features or use of this software
  70490. + *    must display the following acknowledgement:
  70491. + *    This product includes software developed by the University of
  70492. + *    California, Berkeley and its contributors.
  70493. + * 4. Neither the name of the University nor the names of its contributors
  70494. + *    may be used to endorse or promote products derived from this software
  70495. + *    without specific prior written permission.
  70496. + *
  70497. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  70498. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  70499. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  70500. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  70501. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  70502. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  70503. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  70504. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  70505. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  70506. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  70507. + * SUCH DAMAGE.
  70508. + */
  70509. +
  70510. +#if defined(LIBC_SCCS) && !defined(lint)
  70511. +static char sccsid[] = "@(#)strftime.c    5.11 (Berkeley) 2/24/91";
  70512. +#endif /* LIBC_SCCS and not lint */
  70513. +
  70514. +#include <sys/types.h>
  70515. +#include <sys/time.h>
  70516. +#include <tzfile.h>
  70517. +#include <string.h>
  70518. +
  70519. +static char *afmt[] = {
  70520. +    "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
  70521. +};
  70522. +static char *Afmt[] = {
  70523. +    "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
  70524. +    "Saturday",
  70525. +};
  70526. +static char *bfmt[] = {
  70527. +    "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep",
  70528. +    "Oct", "Nov", "Dec",
  70529. +};
  70530. +static char *Bfmt[] = {
  70531. +    "January", "February", "March", "April", "May", "June", "July",
  70532. +    "August", "September", "October", "November", "December",
  70533. +};
  70534. +
  70535. +static size_t gsize;
  70536. +static char *pt;
  70537. +static int _add(), _conv(), _secs();
  70538. +
  70539. +size_t
  70540. +strftime(s, maxsize, format, t)
  70541. +    char *s;
  70542. +    size_t maxsize;
  70543. +    const char *format;
  70544. +    const struct tm *t;
  70545. +{
  70546. +    static size_t _fmt();
  70547. +
  70548. +    pt = s;
  70549. +    if ((gsize = maxsize) < 1)
  70550. +        return(0);
  70551. +    if (_fmt(format, t)) {
  70552. +        *pt = '\0';
  70553. +        return(maxsize - gsize);
  70554. +    }
  70555. +    return(0);
  70556. +}
  70557. +
  70558. +static size_t
  70559. +_fmt(format, t)
  70560. +    register char *format;
  70561. +    struct tm *t;
  70562. +{
  70563. +    for (; *format; ++format) {
  70564. +        if (*format == '%')
  70565. +            switch(*++format) {
  70566. +            case '\0':
  70567. +                --format;
  70568. +                break;
  70569. +            case 'A':
  70570. +                if (t->tm_wday < 0 || t->tm_wday > 6)
  70571. +                    return(0);
  70572. +                if (!_add(Afmt[t->tm_wday]))
  70573. +                    return(0);
  70574. +                continue;
  70575. +            case 'a':
  70576. +                if (t->tm_wday < 0 || t->tm_wday > 6)
  70577. +                    return(0);
  70578. +                if (!_add(afmt[t->tm_wday]))
  70579. +                    return(0);
  70580. +                continue;
  70581. +            case 'B':
  70582. +                if (t->tm_mon < 0 || t->tm_mon > 11)
  70583. +                    return(0);
  70584. +                if (!_add(Bfmt[t->tm_mon]))
  70585. +                    return(0);
  70586. +                continue;
  70587. +            case 'b':
  70588. +            case 'h':
  70589. +                if (t->tm_mon < 0 || t->tm_mon > 11)
  70590. +                    return(0);
  70591. +                if (!_add(bfmt[t->tm_mon]))
  70592. +                    return(0);
  70593. +                continue;
  70594. +            case 'C':
  70595. +                if (!_fmt("%a %b %e %H:%M:%S %Y", t))
  70596. +                    return(0);
  70597. +                continue;
  70598. +            case 'c':
  70599. +                if (!_fmt("%m/%d/%y %H:%M:%S", t))
  70600. +                    return(0);
  70601. +                continue;
  70602. +            case 'D':
  70603. +                if (!_fmt("%m/%d/%y", t))
  70604. +                    return(0);
  70605. +                continue;
  70606. +            case 'd':
  70607. +                if (!_conv(t->tm_mday, 2, '0'))
  70608. +                    return(0);
  70609. +                continue;
  70610. +            case 'e':
  70611. +                if (!_conv(t->tm_mday, 2, ' '))
  70612. +                    return(0);
  70613. +                continue;
  70614. +            case 'H':
  70615. +                if (!_conv(t->tm_hour, 2, '0'))
  70616. +                    return(0);
  70617. +                continue;
  70618. +            case 'I':
  70619. +                if (!_conv(t->tm_hour % 12 ?
  70620. +                    t->tm_hour % 12 : 12, 2, '0'))
  70621. +                    return(0);
  70622. +                continue;
  70623. +            case 'j':
  70624. +                if (!_conv(t->tm_yday + 1, 3, '0'))
  70625. +                    return(0);
  70626. +                continue;
  70627. +            case 'k':
  70628. +                if (!_conv(t->tm_hour, 2, ' '))
  70629. +                    return(0);
  70630. +                continue;
  70631. +            case 'l':
  70632. +                if (!_conv(t->tm_hour % 12 ?
  70633. +                    t->tm_hour % 12 : 12, 2, ' '))
  70634. +                    return(0);
  70635. +                continue;
  70636. +            case 'M':
  70637. +                if (!_conv(t->tm_min, 2, '0'))
  70638. +                    return(0);
  70639. +                continue;
  70640. +            case 'm':
  70641. +                if (!_conv(t->tm_mon + 1, 2, '0'))
  70642. +                    return(0);
  70643. +                continue;
  70644. +            case 'n':
  70645. +                if (!_add("\n"))
  70646. +                    return(0);
  70647. +                continue;
  70648. +            case 'p':
  70649. +                if (!_add(t->tm_hour >= 12 ? "PM" : "AM"))
  70650. +                    return(0);
  70651. +                continue;
  70652. +            case 'R':
  70653. +                if (!_fmt("%H:%M", t))
  70654. +                    return(0);
  70655. +                continue;
  70656. +            case 'r':
  70657. +                if (!_fmt("%I:%M:%S %p", t))
  70658. +                    return(0);
  70659. +                continue;
  70660. +            case 'S':
  70661. +                if (!_conv(t->tm_sec, 2, '0'))
  70662. +                    return(0);
  70663. +                continue;
  70664. +            case 's':
  70665. +                if (!_secs(t))
  70666. +                    return(0);
  70667. +                continue;
  70668. +            case 'T':
  70669. +            case 'X':
  70670. +                if (!_fmt("%H:%M:%S", t))
  70671. +                    return(0);
  70672. +                continue;
  70673. +            case 't':
  70674. +                if (!_add("\t"))
  70675. +                    return(0);
  70676. +                continue;
  70677. +            case 'U':
  70678. +                if (!_conv((t->tm_yday + 7 - t->tm_wday) / 7,
  70679. +                    2, '0'))
  70680. +                    return(0);
  70681. +                continue;
  70682. +            case 'W':
  70683. +                if (!_conv((t->tm_yday + 7 -
  70684. +                    (t->tm_wday ? (t->tm_wday - 1) : 6))
  70685. +                    / 7, 2, '0'))
  70686. +                    return(0);
  70687. +                continue;
  70688. +            case 'w':
  70689. +                if (!_conv(t->tm_wday, 1, '0'))
  70690. +                    return(0);
  70691. +                continue;
  70692. +            case 'x':
  70693. +                if (!_fmt("%m/%d/%y", t))
  70694. +                    return(0);
  70695. +                continue;
  70696. +            case 'y':
  70697. +                if (!_conv((t->tm_year + TM_YEAR_BASE)
  70698. +                    % 100, 2, '0'))
  70699. +                    return(0);
  70700. +                continue;
  70701. +            case 'Y':
  70702. +                if (!_conv(t->tm_year + TM_YEAR_BASE, 4, '0'))
  70703. +                    return(0);
  70704. +                continue;
  70705. +            case 'Z':
  70706. +                if (!t->tm_zone || !_add(t->tm_zone))
  70707. +                    return(0);
  70708. +                continue;
  70709. +            case '%':
  70710. +            /*
  70711. +             * X311J/88-090 (4.12.3.5): if conversion char is
  70712. +             * undefined, behavior is undefined.  Print out the
  70713. +             * character itself as printf(3) does.
  70714. +             */
  70715. +            default:
  70716. +                break;
  70717. +        }
  70718. +        if (!gsize--)
  70719. +            return(0);
  70720. +        *pt++ = *format;
  70721. +    }
  70722. +    return(gsize);
  70723. +}
  70724. +
  70725. +static
  70726. +_secs(t)
  70727. +    struct tm *t;
  70728. +{
  70729. +    static char buf[15];
  70730. +    register time_t s;
  70731. +    register char *p;
  70732. +    struct tm tmp;
  70733. +
  70734. +    /* Make a copy, mktime(3) modifies the tm struct. */
  70735. +    tmp = *t;
  70736. +    s = mktime(&tmp);
  70737. +    for (p = buf + sizeof(buf) - 2; s > 0 && p > buf; s /= 10)
  70738. +        *p-- = s % 10 + '0';
  70739. +    return(_add(++p));
  70740. +}
  70741. +
  70742. +static
  70743. +_conv(n, digits, pad)
  70744. +    int n, digits;
  70745. +    char pad;
  70746. +{
  70747. +    static char buf[10];
  70748. +    register char *p;
  70749. +
  70750. +    for (p = buf + sizeof(buf) - 2; n > 0 && p > buf; n /= 10, --digits)
  70751. +        *p-- = n % 10 + '0';
  70752. +    while (p > buf && digits-- > 0)
  70753. +        *p-- = pad;
  70754. +    return(_add(++p));
  70755. +}
  70756. +
  70757. +static
  70758. +_add(str)
  70759. +    register char *str;
  70760. +{
  70761. +    for (;; ++pt, --gsize) {
  70762. +        if (!gsize)
  70763. +            return(0);
  70764. +        if (!(*pt = *str++))
  70765. +            return(1);
  70766. +    }
  70767. +}
  70768. diff -rup --new-file baseline/fsf/emacs/unixlib/src/symlink.c amiga/fsf/emacs/unixlib/src/symlink.c
  70769. --- baseline/fsf/emacs/unixlib/src/symlink.c    Wed Dec 31 17:00:00 1969
  70770. +++ amiga/fsf/emacs/unixlib/src/symlink.c    Sat Sep 28 00:00:00 1996
  70771. @@ -0,0 +1,14 @@
  70772. +#include "amiga.h"
  70773. +
  70774. +int symlink(char *from, char *to)
  70775. +{
  70776. +#ifdef SOFTLINK
  70777. +  chkabort();
  70778. +  if (MakeLink(to, from, 1)) return 0;
  70779. +  ERROR;
  70780. +#else
  70781. +  _OSERR = ERROR_NOT_IMPLEMENTED;
  70782. +  errno = EOSERR;
  70783. +  return -1;
  70784. +#endif
  70785. +}
  70786. diff -rup --new-file baseline/fsf/emacs/unixlib/src/time.c amiga/fsf/emacs/unixlib/src/time.c
  70787. --- baseline/fsf/emacs/unixlib/src/time.c    Wed Dec 31 17:00:00 1969
  70788. +++ amiga/fsf/emacs/unixlib/src/time.c    Sat Sep 28 00:00:00 1996
  70789. @@ -0,0 +1,12 @@
  70790. +#include "amiga.h"
  70791. +#include "timeconvert.h"
  70792. +
  70793. +time_t time(time_t *clock)
  70794. +{
  70795. +  struct timeval now;
  70796. +
  70797. +  if (_gettime(&now) < 0) return -1;
  70798. +  if (clock) *clock = now.tv_secs;
  70799. +
  70800. +  return (time_t)now.tv_secs;
  70801. +}
  70802. diff -rup --new-file baseline/fsf/emacs/unixlib/src/timeconvert.c amiga/fsf/emacs/unixlib/src/timeconvert.c
  70803. --- baseline/fsf/emacs/unixlib/src/timeconvert.c    Wed Dec 31 17:00:00 1969
  70804. +++ amiga/fsf/emacs/unixlib/src/timeconvert.c    Sat Sep 28 00:00:00 1996
  70805. @@ -0,0 +1,94 @@
  70806. +#include "amiga.h"
  70807. +#include "timeconvert.h"
  70808. +#include <time.h>
  70809. +#include <proto/timer.h>
  70810. +
  70811. +int _gettime(struct timeval *tp)
  70812. +{
  70813. +  struct tm *local;
  70814. +  time_t gmt;
  70815. +
  70816. +  GetSysTime(tp);
  70817. +  /* Correct for different epoch (78 vs 70) */
  70818. +  tp->tv_secs += 252460800;    
  70819. +
  70820. +#ifdef USE_LOCAL
  70821. +  /* correct for timezone */
  70822. +  local = gmtime(&tp->tv_secs);
  70823. +  local->tm_isdst = -1;        /* We don't know about dst */
  70824. +  gmt = mktime(local);
  70825. +
  70826. +  if (gmt == -1)
  70827. +    {
  70828. +      errno = EINVAL;
  70829. +      return -1;
  70830. +    }
  70831. +  tp->tv_secs = gmt;
  70832. +#endif
  70833. +  return 0;
  70834. +}
  70835. +
  70836. +#ifdef USE_LOCAL
  70837. +
  70838. +/* System is storing local time */
  70839. +
  70840. +void _gmt2amiga(time_t time, struct DateStamp *date)
  70841. +{
  70842. +  struct tm *local, *gmt;
  70843. +
  70844. +  local = localtime(&time);
  70845. +  gmt = gmtime(&time);
  70846. +  date->ds_Tick = 50 * local->tm_sec;
  70847. +  date->ds_Minute = local->tm_min + local->tm_hour * 60;
  70848. +
  70849. +  /* Now calculate the day assuming we are in GMT */
  70850. +  date->ds_Days = (time - 252460800) / 86400;
  70851. +  /* And correct by comparing local with GMT */
  70852. +  if (local->tm_year < gmt->tm_year ||
  70853. +      local->tm_year == gmt->tm_year && local->tm_yday < gmt->tm_yday)
  70854. +    date->ds_Days--;
  70855. +  if (local->tm_year > gmt->tm_year ||
  70856. +      local->tm_year == gmt->tm_year && local->tm_yday > gmt->tm_yday)
  70857. +    date->ds_Days++;
  70858. +}
  70859. +
  70860. +time_t _amiga2gmt(struct DateStamp *date)
  70861. +{
  70862. +  struct tm *local;
  70863. +  time_t secs;
  70864. +
  70865. +  secs = date->ds_Tick / 50 + date->ds_Minute * 60 + date->ds_Days * 86400 +
  70866. +    252460800;
  70867. +  local = gmtime(&secs);
  70868. +  local->tm_isdst = -1;        /* We don't know about dst */
  70869. +
  70870. +  return mktime(local);
  70871. +}
  70872. +
  70873. +#else
  70874. +
  70875. +/* System is storing GMT */
  70876. +/* Leap seconds are not handled !! */
  70877. +
  70878. +void _gmt2amiga(time_t time, struct DateStamp *date)
  70879. +{
  70880. +  time_t time78, day_secs;
  70881. +
  70882. +  time78 = time - 252460800;    /* Change Epoch */
  70883. +  date->ds_Days = time78 / 86400;
  70884. +  day_secs = time78 % 86400;
  70885. +  date->ds_Minute = day_secs / 60;
  70886. +  date->ds_Tick = 50 * (day_secs % 60);
  70887. +}
  70888. +
  70889. +time_t _amiga2gmt(struct DateStamp *date)
  70890. +{
  70891. +  time_t secs;
  70892. +
  70893. +  secs = date->ds_Tick / 50 + date->ds_Minute * 60 + date->ds_Days * 86400 +
  70894. +    252460800;
  70895. +
  70896. +  return secs;
  70897. +}
  70898. +
  70899. +#endif
  70900. diff -rup --new-file baseline/fsf/emacs/unixlib/src/timeconvert.h amiga/fsf/emacs/unixlib/src/timeconvert.h
  70901. --- baseline/fsf/emacs/unixlib/src/timeconvert.h    Wed Dec 31 17:00:00 1969
  70902. +++ amiga/fsf/emacs/unixlib/src/timeconvert.h    Sat Sep 28 00:00:00 1996
  70903. @@ -0,0 +1,27 @@
  70904. +#ifndef TIMECONVERT_H
  70905. +#define TIMECONVERT_H
  70906. +
  70907. +#include <time.h>
  70908. +
  70909. +int _gettime(struct timeval *tp);
  70910. +/* Effect: Store GMT time into tp.
  70911. +     If USE_LOCAL is defined, assume system stores local time,
  70912. +     otherwise it stores GMT.
  70913. +*/
  70914. +
  70915. +void _gmt2amiga(time_t time, struct DateStamp *date);
  70916. +/* Effect: Converts a time expressed in seconds since
  70917. +     the 1 January 1970 0:00:00 GMT, to an Amiga time.
  70918. +     If USE_LOCAL is defined, Amiga time is assumed to
  70919. +     be stored as local time, otherwise as GMT.
  70920. +   Modifies: date, to contain the time in Amiga format
  70921. +*/
  70922. +
  70923. +time_t _amiga2gmt(struct DateStamp *date);
  70924. +/* Effect: Convert a date expressed in Amiga format (as a 
  70925. +     local time if USE_LOCAL is defined, as GMT otherwise)
  70926. +     to a number of seconds since 1 January 1970 0:00:00 GMT.
  70927. +   Returns: this latter time
  70928. +*/
  70929. +
  70930. +#endif
  70931. diff -rup --new-file baseline/fsf/emacs/unixlib/src/timers.c amiga/fsf/emacs/unixlib/src/timers.c
  70932. --- baseline/fsf/emacs/unixlib/src/timers.c    Wed Dec 31 17:00:00 1969
  70933. +++ amiga/fsf/emacs/unixlib/src/timers.c    Sat Sep 28 00:00:00 1996
  70934. @@ -0,0 +1,72 @@
  70935. +#include "amiga.h"
  70936. +#include "devices.h"
  70937. +#include "timers.h"
  70938. +
  70939. +struct timeinfo *_alloc_timer(void)
  70940. +{
  70941. +  struct timeinfo *timer = AllocMem(sizeof(struct timeinfo), 0);
  70942. +
  70943. +  if (!timer) return 0;
  70944. +  timer->sent = FALSE;
  70945. +  timer->io = (struct timerequest *)
  70946. +    _device_open("timer.device", UNIT_VBLANK, 0L, 0L, 0, sizeof(struct timerequest));
  70947. +  if (!timer->io)
  70948. +    {
  70949. +      FreeMem(timer, sizeof(struct timeinfo));
  70950. +      return 0;
  70951. +    }
  70952. +  return timer;
  70953. +}
  70954. +
  70955. +void _free_timer(struct timeinfo *timer)
  70956. +{
  70957. +  if (timer)
  70958. +    {
  70959. +      _timer_abort(timer);
  70960. +      _device_close(timer->io);
  70961. +      FreeMem(timer, sizeof(struct timeinfo));
  70962. +    }
  70963. +}
  70964. +
  70965. +void _timer_abort(struct timeinfo *timer)
  70966. +{
  70967. +  if (timer->sent)
  70968. +    {
  70969. +      AbortIO(timer->io);
  70970. +      WaitIO(timer->io);
  70971. +      /* Clear timer io signal */
  70972. +      /*SetSignal(0, timer_sig(timer));*/
  70973. +      timer->sent = FALSE;
  70974. +    }
  70975. +}
  70976. +
  70977. +ULONG _timer_sig(struct timeinfo *timer)
  70978. +{
  70979. +  return 1UL << timer->io->tr_node.io_Message.mn_ReplyPort->mp_SigBit;
  70980. +}
  70981. +
  70982. +void _timer_start(struct timeinfo *timer, int secs, int micros)
  70983. +/* _timer_start(timer, 0) stops a timer */
  70984. +{
  70985. +  _timer_abort(timer);
  70986. +  if (secs || micros)
  70987. +    {
  70988. +      timer->io->tr_time.tv_secs = secs;
  70989. +      timer->io->tr_time.tv_micro = micros;
  70990. +      timer->io->tr_node.io_Command = TR_ADDREQUEST;
  70991. +      SendIO(timer->io);
  70992. +      timer->sent = TRUE;
  70993. +    }
  70994. +}
  70995. +
  70996. +int _timer_expired(struct timeinfo *timer)
  70997. +/* A non-started timer is defined to not have expired */
  70998. +{
  70999. +  if (timer->sent && CheckIO(timer->io))
  71000. +    {
  71001. +      WaitIO(timer->io);
  71002. +      timer->sent = FALSE;
  71003. +      return TRUE;
  71004. +    }
  71005. +  return FALSE;
  71006. +}
  71007. diff -rup --new-file baseline/fsf/emacs/unixlib/src/tmpnam.c amiga/fsf/emacs/unixlib/src/tmpnam.c
  71008. --- baseline/fsf/emacs/unixlib/src/tmpnam.c    Wed Dec 31 17:00:00 1969
  71009. +++ amiga/fsf/emacs/unixlib/src/tmpnam.c    Sat Sep 28 00:00:00 1996
  71010. @@ -0,0 +1,13 @@
  71011. +#include "amiga.h"
  71012. +#include <string.h>
  71013. +#include <stdio.h>
  71014. +
  71015. +char *tmpnam(char *s)
  71016. +{
  71017. +  static char tmpbuf[L_tmpnam];
  71018. +
  71019. +  if (!s) s = tmpbuf;
  71020. +
  71021. +  strcpy(s, P_tmpdir "tmp_XXXXXX");
  71022. +  return mktemp(s);
  71023. +}
  71024. diff -rup --new-file baseline/fsf/emacs/unixlib/src/truncate.c amiga/fsf/emacs/unixlib/src/truncate.c
  71025. --- baseline/fsf/emacs/unixlib/src/truncate.c    Wed Dec 31 17:00:00 1969
  71026. +++ amiga/fsf/emacs/unixlib/src/truncate.c    Sat Sep 28 00:00:00 1996
  71027. @@ -0,0 +1,21 @@
  71028. +#include "amiga.h"
  71029. +#include "amigaos.h"
  71030. +
  71031. +int truncate(char *path, off_t length)
  71032. +{
  71033. +  BPTR fh = Open(path, MODE_OLDFILE);
  71034. +  int err;
  71035. +
  71036. +  chkabort();
  71037. +  if (fh)
  71038. +    {
  71039. +      int ret = _do_truncate(fh, length);
  71040. +
  71041. +      if (Close(fh) || ret) return ret;
  71042. +      err = IoErr();
  71043. +    }
  71044. +  else err = IoErr();
  71045. +
  71046. +  errno = convert_oserr(err);
  71047. +  return -1;
  71048. +}
  71049. diff -rup --new-file baseline/fsf/emacs/unixlib/src/uid.c amiga/fsf/emacs/unixlib/src/uid.c
  71050. --- baseline/fsf/emacs/unixlib/src/uid.c    Wed Dec 31 17:00:00 1969
  71051. +++ amiga/fsf/emacs/unixlib/src/uid.c    Sat Sep 28 00:00:00 1996
  71052. @@ -0,0 +1,4 @@
  71053. +#include "amiga.h"
  71054. +
  71055. +uid_t getuid(void) { return AMIGA_UID; }
  71056. +uid_t geteuid(void) { return AMIGA_UID; }
  71057. diff -rup --new-file baseline/fsf/emacs/unixlib/src/umask.c amiga/fsf/emacs/unixlib/src/umask.c
  71058. --- baseline/fsf/emacs/unixlib/src/umask.c    Wed Dec 31 17:00:00 1969
  71059. +++ amiga/fsf/emacs/unixlib/src/umask.c    Sat Sep 28 00:00:00 1996
  71060. @@ -0,0 +1,3 @@
  71061. +#include "amiga.h"
  71062. +
  71063. +int umask(int mask) { return 0; }
  71064. diff -rup --new-file baseline/fsf/emacs/unixlib/src/unix-hard.lib.uue amiga/fsf/emacs/unixlib/src/unix-hard.lib.uue
  71065. --- baseline/fsf/emacs/unixlib/src/unix-hard.lib.uue    Wed Dec 31 17:00:00 1969
  71066. +++ amiga/fsf/emacs/unixlib/src/unix-hard.lib.uue    Sat Sep 28 00:00:00 1996
  71067. @@ -0,0 +1,1186 @@
  71068. +begin 666 unix-hard.lib
  71069. +M```#^@``*UH```/I````"2!O``0@UTC0_/QP`$YU(&\`!"`O``AF`G`!(EA,
  71070. +MT/S\6(].T0```_(```/I````#$CG(#(@;P`80^\`'$7Z`!PF;P`4)`LL>0``
  71071. +M``!.K@``(`N0@DS?3`1.=1;`3G4``````^^!```#7T%B<T5X96-"87-E````
  71072. +M`0```!B&```#7TQ63U)A=T1O1FUT`````0```!X````````#\@```^D````*
  71073. +M(&\`!"\-*D@@#68$2^P``$'L```B31+89OPO#4ZZ``!83RI?3G4``````_@`
  71074. +M```!`````0```!(````!`````@````X````````#[X,```)?;6MT96UP````
  71075. +M``$````>`````````_$````#`````$]05%,`!`!````#\@```^H````$=#IT
  71076. +M;7!?6%A86%A8`````````_(```/K````"0```_(```/I````;R!O``0B;P`(
  71077. +MGOP`($CG+Q8F22](`"`O20`D<`Q.N@``*D`@+```4JP``"(L``#2@"\!2&P`
  71078. +M`$AO`#!.N@``3^\`#'!WL!-F-DHK``%F,$'O`"A#[``03KH``"9`+&P``$ZN
  71079. +M_\0N`'P`0>\`*"(()#P```/M3J[_XBH`>`%@1G!RL!-F-DHK``%F,$'O`"A#
  71080. +M[``23KH``"9`+&P``$ZN_\HJ`'@`0>\`*"(()#P```/N3J[_XBX`?`%@"G`6
  71081. +M*4```&```(Q*A6<$2H=F!$ZZ```@"V="2H5G/DJ'9SH@#6<V<``O`"\`+P!(
  71082. +M>/__+P8O!R`%(@0@;P`X3KH``$_O`!@K0``(9Q`JK```*4T``"M+``0@"V`Z
  71083. +M(`UG!B!-3KH``$J%9PY*A&<*(@4L;```3J[_W$J'9PY*AF<*(@<L;```3J[_
  71084. +MW"`+9P8@2TZZ``!P`$S?:/3>_``@3G4@;P`$44](YP$T)DA+[```+T@`$&`Z
  71085. +M(&H`!+'+9C`F52XK``@JDR!K``1.N@``($M.N@``0J=(;P`8+P=.N@``3^\`
  71086. +M#$J`:PX@+P`48`HJ2B15(`IFP'#_3-\L@%!/3G4``````_@````#`````0``
  71087. +M`)````!4````-`````,````"```!:````0P```$(`````````^^#```"0&UA
  71088. +M;&QO8P`````!````'H8```1?7V9I9F]?;V9F<V5T`````````@```"@````D
  71089. +MA@```U]?9FEF;U]B87-E``````$````L@P```U]?<W!R:6YT9@````````$`
  71090. +M```\@P```D!F;W!E;@```````@```)0```!8A@```E]$3U-"87-E````!```
  71091. +M`3X```$L````F@```%Z&```"7V5R<FYO```````!````OH,```)`7W-E=&5R
  71092. +M<@````$```#.@P``!$!?<W1A<G1?<')O8V5S<P`````!````^H,```)`9G)E
  71093. +M90````````(```&,```!'H,```)`9F-L;W-E``````(```&&```!3(,```)?
  71094. +M=V%I='!I9`````$```&8`````````_$````#`````$]05%,`!`!````#\@``
  71095. +M`^H````%<&EP93IU>&]P96XN)6QX`'<`<@````/R```#ZP````$```/R```#
  71096. +MZ0```,6>_``82.<A/DGY`````$7L`!@J6B!:+AHF;``D+T@`()/)+'@`!$ZN
  71097. +M_MHD;```($!#Z`!*($DB;```3J[_"B!L``!#[``$3J[^DD/O`"0B_(```"1P
  71098. +M`2+`0IDB+P`@0>\`)"0(+$I.KOVBX8`K0``8+'@`!$ZN_WPB2TZN_GI*@&<*
  71099. +M($`B34ZN_I)@"")-<!Q.KO\N3J[_=B)+<"!.KO\N(F\`("`'3J[_+DS??(3>
  71100. +M_``82H!.=2!O``0@+P`((B\`#"]O`!``!"]O`!0`""]O`!@`#"]O`!P`$"]O
  71101. +M`"``%"]O`"0`&%E/2.</%BHO`#@L+P`T+@`J2"]!`!QP'$ZZ```F0"!-2AAF
  71102. +M_%.(D<T@"%*`*4``('(!+'@`!$ZN_SHI0``<(D`2W6;\<!QR`4ZN_SHI0``8
  71103. +M<"!R`4ZN_SHI0``D<`$I0``00?K_G"`(0_K^L)")*4``%$'L``!.KO\B*4``
  71104. +M`"(+9P`!2DJL`!QG``%"2JP`&&<``3I*K``D9P`!,DJ`;P`!+"!L```@*``4
  71105. +M0?K^;B)L```B:0`08`(2V%.`9/I![```(FP`)!+89OP@+```4JP``"=```PG
  71106. +M1P`03>P`%CS\`!1P!1E```P@5C%\`!P`$A%```@@7B%K``P`%"`\@``#\DJ&
  71107. +M9@)P`2@`2H5O!"`%8`0@+```0J=(>``!+SR```/Z+P`O/(```_,O!B\$+R\`
  71108. +M3"\\@``#\2\O`%`O/(```_`O+P!4+SR```/O+R\`6"\\@``#[2\O`%@O/(``
  71109. +M`^XO!R\\@``#["!L```O*``0+SR```/K+&P``"(/3J[^#D_O`%0G0``(9S0@
  71110. +M;```+'@`!$ZN_H`@;```+'@`!$ZN_HQ*@&?D0JL`%$'L```B2RQX``1.KO\0
  71111. +M("L`#&!H+&P``$ZN_WQ.N@``8`)P#"E````@"V<&($M.N@``("P`'&<.(D`@
  71112. +M+``@+'@`!$ZN_RX@+``89PPB0'`<+'@`!$ZN_RX@+``D9PPB0'`@+'@`!$ZN
  71113. +M_RX@+```;PH@0"QX``1.KO\<</],WVCP6$].=0```_@````#`````0```5H`
  71114. +M``%6```!1@```!<````"```"_````NH```+8```"S````L0```)0```!S```
  71115. +M`<(```&J```!E@```8H```%\```!=````6P```%B```!0````30```$B```!
  71116. +M%````$0````X````&@```!`````````#[X$```-?3&EN:V5R1$(````````!
  71117. +M````"H8```)?1$]30F%S90````,```*F```"7@```"R&```$7U]S=&%R='5P
  71118. +M7W!O<G0```````,```)^```"<@```$"#```"0&UA;&QO8P`````!```!`(8`
  71119. +M``-?7V1O;W)?;F%M90`````!```!IH8```-?7VYE>'1?<&ED```````"```!
  71120. +MM@```;*&```#7U]S=&%C:U]S:7IE`````0```?J&```#7U]P<F]C97-S97,`
  71121. +M`````0```I*#```$0&-O;G9E<G1?;W-E<G(```````$```*NA@```E]E<G)N
  71122. +M;P```````0```K:#```"0&9R964````````!```"P`````````/Q`````P``
  71123. +M``!/4%13``0`0````_(```/J````!@````````````````````$`````````
  71124. +M`````_(```/K````"@```_(```/I`````TZZ```@+```3G4``````^^#```#
  71125. +M0&-H:V%B;W)T`````````0````*&```#7U]O=7)?<&ED`````````0````8`
  71126. +M```````#\0````,`````3U!44P`$`$````/R```#Z0```",@+P`$(&\`"")O
  71127. +M``Q(YP$4+@`F22I(3KH``'`!OH!M+'`@OH!L)B`+9PX@!^>`0^P``-/`)MDF
  71128. +MV2`-9PSGAT'L``#1QR#=(-UP`&`(<!8I0```</],WRB`3G4@+P`$(&\`")[\
  71129. +M`!`O2``(0J\`#$'O``A#UV&62H!G"#!\__\@"&`"(!?>_``03G4``````^^#
  71130. +M```#0&-H:V%B;W)T`````````0```!B&```$7U]S:6=?:&%N9&QE<G,`````
  71131. +M``(```!`````,(8```)?97)R;F\```````$```!0`````````_$````#````
  71132. +M`$]05%,`!`!````#\@```^D````5("\`!$CG#P`N`"PL``!.N@``*4<``'H`
  71133. +M>`$@+```P(1G#B`L``#`A&8&(`5.N@``4H78A'`@NH!MX"`&3-\`\$YU("\`
  71134. +M!"\'(@`@+```@($N'V"P```#[X8```-?7W-I9U]M87-K```````$````3```
  71135. +M`"0````4````#(,```-`8VAK86)O<G0````````!````$(8```1?7W-I9U]P
  71136. +M96YD:6YG`````````0```!R#```$0%]S:6=?9&ES<&%T8V@```````$````N
  71137. +M`````````_$````#`````$]05%,`!`!````#\@```^D```":(&\`!"`O``@B
  71138. +M;P`,+V\`$``$64](YR$T+@`F;P`<*D@D22])`!1@`AK:2A)G!%.';O:U[P`4
  71139. +M8QH0*O__<B^P`6<0=#JP`F<*4X=O!AK!8`(:VTH39P13AV[V0A5*AU[`1`!(
  71140. +M@$C`3-\LA%A/3G4@+P`$(&\`"")O``Q93TCG)S8N`"I(+TD`($JL``!G``#^
  71141. +M(&P``"9H``Q.N@``(BL`!+*`9@``Z"!L``!(:``L0>P``")3<`!&`&$`_UA8
  71142. +M3TJ`9P``RD'L```B31`8L!EF``"\2@!F]&8``+1*AV80(&P``"`H`!AR`["!
  71143. +M9P``H"!L```@*``8<ORP@6<$68!F/B)L```B$2QL``!.KO^"+``@;```T/P`
  71144. +M+"((=/Y.KO^L*@!G$B(%0>P``"0(3J[_FB(%3J[_IB(&3J[_@F`&*6@`(```
  71145. +M(&P``"EH``0`@"EH``@`?$/H``Q%[`"$)-DDV239(&P``"EH`!@`!"EH`!P`
  71146. +M="\O`"`O*P$8($U#[```<`!.N@``4$]P`6`"<`!,WVSD6$].=2!O``0B;P`(
  71147. +M2.<`%"9)*DA.N@``($TB2W``80#^R$J`9P1P`&`,($TB2TS?*`!.^@``3-\H
  71148. +M`$YU(&\`!")O``A(YP`4)DDJ2$ZZ```@32)+<`%A`/Z02H!F<$AX`/](;```
  71149. +M+PU.N@``3^\`#$J`:@P@32)+3-\H`$[Z``!+TT*=0JL`$G`!-T``#D)K`!`G
  71150. +M?````@``,C=```Q"JP`V0>P``")(2AEF_%.)D\@G20`60IT@/`\,/P`G0``B
  71151. +M)T``&B=``"HJ_```H?]P`$S?*`!.=0```_@````(`````0```7X```%P```!
  71152. +M:@```5H```%2```!3````4(```$H`````````^^&```#7VQA<W1?9&ER````
  71153. +M`````P```0(```"2````BH,```)`7V=E=%]C9`````$```":A@```U]L87-T
  71154. +M7V5N=')Y``````8```%D```!1@```1(```#P````X````*B&```#7U]T96UP
  71155. +M7V9N86UE````!````C8```'V````Q@```+"&```"7T1/4T)A<V4````!```!
  71156. +M"(,```-`7VQF:6)S=&%T```````!```!A(,```-`8VAK86)O<G0````````"
  71157. +M```!X````:B#```#0%]F:6)S=&%T`````````@```A````'&@P```U]R96%D
  71158. +M;&EN:P````````$```'\`````````_$````#`````$]05%,`!`!````#\@``
  71159. +M`^L```!!```#\@```^D```#0(&\`!%E/2.<`%"](``@@;P`(*F@!#&`*)E4@
  71160. +M34ZZ```J2R`-9O),WR@`6$].=2!O``2>_``02.<@-BI()FT`#$/K`0PO2``<
  71161. +M+TD`("!+8;1"K```0JL!#$*M``0@%>6`($`G:``,`1A!ZP`(+T@`&&```)Y!
  71162. +MZP`0(DA*&6;\4XF3R"`)D<C0_``L<@`R`-*(4H%T`#0!/T``%C]!`!0@`DZZ
  71163. +M```D0$J`9@9P#&```)Q-TD*>(&\`(""*+U``("SK`(@LZP"$0>L`C$/J``PB
  71164. +MV"+8(M@E:P`,`!@E:P!\`!Q+Z@`@.V\`%``$.V\`%@`&(&\`'"`H``12J``$
  71165. +M*T``"$'J`"Q#ZP`0$-EF_"JK``@J;P`<(A4D+P`8+&P``$ZN_Y1*@&8`_TXG
  71166. +M:P$,`1!"K0`$+&P``$ZN_WQR=-*!L(%F!'`!8`I.N@``*4```'``3-]L!-[\
  71167. +M`!!.=2!O``193TCG(#8O2``4<!!.N@``*D!P1^6(3KH``"9`(&\`%"`(2AAF
  71168. +M_%.(D<`@"%*`3KH``"1`3KH``"`-9P``@B`*9WP@"V=X*TL`#"M\```!'``(
  71169. +MD<@G2`$0)T@!#"=(`10FBB!O`!04V&;\3KH``"=```0B+P`4+&P``'3^3J[_
  71170. +MK"J`9R)!ZP`((@`D""QL``!.KO^:2H!G#B!-80#^.$J`9Q0@#6`^+&P``$ZN
  71171. +M_WQ.N@``*4```"!-80``-F`D<`PI0```(`UG!B!-3KH``"`*9P8@2DZZ```@
  71172. +M"V<&($M.N@``<`!,WVP$6$].=2!O``1(YP`6*D@F;0`,3KH``$*L```@2V$`
  71173. +M_:`@4TZZ```@%6<*(@`L;```3J[_IB!M``Q.N@``($U,WV@`3OH``"!O``19
  71174. +M3TCG`S0O2``4(&\`%"IH``R7RTZZ``!*K0$49R1^`"1M`0P@;P`4+"@`!&`$
  71175. +M4H<D4KZ&;`0@"F;T*TH!$$*M`10@+0$09R(F0-;\`"`I;P`4``!%[0$0(%(I
  71176. +M2```(%(DT"!O`!12J``$(`M,WRS`6$].=2!O``0O#2I(3KH``"`M``0J7TYU
  71177. +M(&\`!"`O``A(YP$4+@`J2"9M``Q.N@``<`$G0`$4*T<`!$S?*(!.=0```^^#
  71178. +M```"0&9R964````````'```"B@```H````)J```"/@```C0```(J````'H8`
  71179. +M``-?;&%S=%]D:7(````````#```"X@```EX```!2@P```D!M86QL;V,`````
  71180. +M!````8X```%V```!;````**&```"7T1/4T)A<V4````&```"=````@8```'L
  71181. +M```!U@```30```$<@P``!$!C;VYV97)T7V]S97)R```````"```"#@```4B&
  71182. +M```"7V5R<FYO```````#```"(````A(```%,@P```T!C:&MA8F]R=```````
  71183. +M``4```,N```##@```J8```):```!E(,```)`7V=E=%]C9`````$```'*A@``
  71184. +M`U]L87-T7V5N=')Y``````$```+L`````````_$````#`````$]05%,`!`!`
  71185. +M```#\@```^D````(2.<!`BQL``!R`$ZN_X(N`"(`3J[_@B`'3-]`@$YU````
  71186. +M``/OA@```E]$3U-"87-E`````0````8````````#\0````,`````3U!44P`$
  71187. +M`$````/R```#ZP````(```/R```#Z0```!L@;P`$("\`")[\`$1(YP,$+@`J
  71188. +M2'S_3KH``"!-0^\`#DZZ``!*@&8D<!#`KP`6YH!R4.6)PJ\`%NR!@H#"A[*'
  71189. +M9@1\`&`&<`TI0```(`9,WR#`WOP`1$YU(&\`!"`O``A(YP$$3-\@@&">````
  71190. +M``/O@P```T!C:&MA8F]R=`````````$````8@P```T!?9FEB<W1A=```````
  71191. +M``$````BA@```E]E<G)N;P```````0```$H````````#\0````,`````3U!4
  71192. +M4P`$`$````/R```#Z0```$$@+P`$(&\`"%E/2.<G%BX`*DA.N@``2&\`'$AX
  71193. +M"`$O!TZZ``!/[P`,4H!F!G#_8```RD*G+&P``'(")`].KO\<3^\`!"9`2H!G
  71194. +M+"(O`!PD"TZN_GI*0&<>("\`'.6`+PT@0"\H``@B0G``D<A.N@``4$]\`&!@
  71195. +M3J[_?"H`<BY&`;"!9D9\`"`O`!SE@"!`*J@`"$WM``1"GBS\```A_W`!/,`\
  71196. +MP$)>*WP```(``#)"K0`V0JT`%B`\#PP_`"M``"(K0``:*T``*F`,?/\@!4ZZ
  71197. +M```I0```(`MG#"0++&P``'("3J[_%DAO`!Q(>`@"+P=.N@``3^\`#"`&3-]H
  71198. +MY%A/3G4``````^^#```#0&-H:V%B;W)T`````````0```!2#```"7VEO8W1L
  71199. +M```````"````\@```"*&```"7T1/4T)A<V4````"````W@```#:#```#0%]L
  71200. +M9FEB<W1A=````````0```&Z#```$0&-O;G9E<G1?;W-E<G(```````$```#0
  71201. +MA@```E]E<G)N;P```````0```-0````````#\0````,`````3U!44P`$`$``
  71202. +M``/R```#Z0````X@;P`$(F\`"$CG,!8F22I(3KH``"(+)`TL;```=@%.KOY$
  71203. +M2H!G!'``8`9.N@``</],WV@,3G4``````^^#```#0&-H:V%B;W)T````````
  71204. +M`0```!*&```"7T1/4T)A<V4````!````&H,```)`7W-E=&5R<@````$````L
  71205. +M`````````_$````#`````$]05%,`!`!````#\@```^D````^(&\`!")O``A9
  71206. +M3TCG,S8J2'X`(&P``"PH`.`O20`@2H9F($JL``!F&D'L`!@B""QL```D/```
  71207. +M`^U.KO_B+`!G`GX!2H9G-B(&0>P`(B0(0>P``"8(+&P``$ZN_IXB!B0-)B\`
  71208. +M($ZN_IXB!G0*3J[^R$J'9U@B!DZN_]Q@4"!L```F:`"X,'S__[?(9T!#[``H
  71209. +M<"4L>``$3J[]V"1`2H!G+"EL````#"E-`!`O"B!++$I#[``$E<HF;P`D3J[]
  71210. +MM$S?!``B2BQX``1.KOYB3-]LS%A/3G4@;P`$0^\`"&$`_RI.=2!O``1#[P`(
  71211. +M80#_''`43KH``$YU``````/X````!@````$```"R````J````*0```".````
  71212. +M2@```"H````````#[X8```%?7W5S`````@```'X````4A@```U]?5T)E;F-H
  71213. +M37-G``````$````DA@```E]$3U-"87-E`````@```%8````PA@``!%]?4')O
  71214. +M9W)A;4YA;64````````"````H@```%"#```"0&5X:70````````!````\@``
  71215. +M``````/Q`````P````!/4%13``0`0````_(```/J````#T]K```````4````
  71216. +M`````````````````&-O;G-O;&4Z```E<SH@``!I;G1U:71I;VXN;&EB<F%R
  71217. +M>0```````^P````!`````0```!0````````#\@```^D````'2.<@`B(O``Q!
  71218. +M[P`0)`@L;```3J[_'$S?0`1.=0```^^&```"7T1/4T)A<V4````!````$```
  71219. +M``````/Q`````P````!/4%13``0`0````_(```/I````#R!O``0O#2I(*JP`
  71220. +M`$'M``0J7T[Z```@;P`$("\`"$CG`00N`"I((!5.N@``0>T`!"`'3-\@@$[Z
  71221. +M`````````^^&```#7U]S:6=?;6%S:P```````0````J#```"0%]S971J;7``
  71222. +M```!````%(,```-`<VEG<V5T;6%S:P`````!````*H,```-`7VQO;F=J;7``
  71223. +M```````!````.`````````/Q`````P````!/4%13``0`0````_(```/I````
  71224. +M!R!O``0@+P`(+P`O+```+PA.N@``3^\`#'``3G4```/OA@``!%]?<WES=&5M
  71225. +M7VYA;64````````!````#(,```)?<W1R;F-P>0````$````2`````````_$`
  71226. +M```#`````$]05%,`!`!````#\@```^D````I(&\`!)[\`%1(YS@6*D@@#6<D
  71227. +M2A5G("!-2AAF_%.(D<TB""!-<`).N@``0>P``'`"(@!.N@``("P``&\2L*P`
  71228. +M`&X,Y8!![```)G`(`&`L4H!F)"(L``!![P`;)@@L;```=`!X44ZN_BQ*0&<$
  71229. +M)D-@"D?L``1@!$?L``@@2TH89OQ3B)'+(@@@2W`"3KH``$'L`!QP`G(!3KH`
  71230. +M`$S?:!S>_`!43G4```/X````!`````$```"0````>````'(````L````````
  71231. +M`^^#```"0'=R:71E```````$````F````(P````T````*(8```)?97)R;F\`
  71232. +M``````$````XA@```U]S>7-?;F5R<@````````$````^A@```U]S>7-?97)R
  71233. +M;&ES=`````$```!&A@```E]?3U-%4E(``````0```%2&```"7T1/4T)A<V4`
  71234. +M```!````7@````````/Q`````P````!/4%13``0`0````_(```/J````"#H@
  71235. +M```T,@``56YK;F]W;B!E<G)O<B!C;V1E```*```````#\@```^D````````#
  71236. +M\0````,`````3U!44P`$``````/R```#Z@```,9N;R!S:6=N86P`:&%N9W5P
  71237. +M``!I;G1E<G)U<'0`<75I=```:6QL96=A;"!I;G-T<G5C=&EO;@!T<F%C92!T
  71238. +M<F%P``!A8F]R=`!E;70@:6YS=')U8W1I;VX`9FQO871I;F<@<&]I;G0@97AC
  71239. +M97!T:6]N``!K:6QL``!B=7,@97)R;W(`<V5G;65N=&%T:6]N('9I;VQA=&EO
  71240. +M;@``8F%D(&%R9W5M96YT('1O('-Y<W1E;2!C86QL`'=R:71E(&]N(&$@<&EP
  71241. +M92!W:71H(&YO(&]N92!T;R!R96%D(&ET``!A;&%R;2!C;&]C:P!S;V9T=V%R
  71242. +M92!T97)M:6YA=&EO;B!S:6=N86P@9G)O;2!K:6QL`'-T871U<R!S:6=N86P`
  71243. +M<V5N9&%B;&4@<W1O<"!S:6=N86P@;F]T(&9R;VT@='1Y`'-T;W`@<VEG;F%L
  71244. +M(&9R;VT@='1Y``!C;VYT:6YU92!A('-T;W!P960@<')O8V5S<P``8VAI;&0@
  71245. +M<W1A='5S(&AA<R!C:&%N9V5D``!B86-K9W)O=6YD(')E860@871T96UP=&5D
  71246. +M(&9R;VT@8V]N=')O;"!T='D``&)A8VMG<F]U;F0@=W)I=&4@871T96UP=&5D
  71247. +M(&9R;VT@8V]N=')O;"!T='D`:6YP=70@<F5C;W)D(&%V86EL86)L92!A="!C
  71248. +M;VYT<F]L('1T>0!E>&-E961E9"!#4%4@=&EM92!L:6UI=`!E>&-E961E9"!F
  71249. +M:6QE('-I>F4@;&EM:70``'5N:VYO=VX@<VEG;F%L``!U;FMN;W=N('-I9VYA
  71250. +M;```=VEN9&]W(&-H86YG960``'5N:VYO=VX@<VEG;F%L``!U<V5R('-I9VYA
  71251. +M;"`Q`'5S97(@<VEG;F%L(#(```````````H````2````'````"(````V````
  71252. +M0@```$@```!8````<@```'@```""````F@```+8```#>````Z@```1````$>
  71253. +M```!0````58```%R```!C````;@```'D```""@```B(```(\```"3````EP`
  71254. +M``)L```"?````HH```/L````(`````$```,4```#$````PP```,(```#!```
  71255. +M`P````+\```"^````O0```+P```"[````N@```+D```"X````MP```+8```"
  71256. +MU````M````+,```"R````L0```+````"O````K@```*T```"L````JP```*H
  71257. +M```"I````J````*<```"F`````````/R```#Z0```#H@+P`$(&\`""(O``PB
  71258. +M;P`064](YP<4+`$N`"I(+TD`%'H`)FP``&`N2H=G""`K``R^@&8@>@%P`;"K
  71259. +M`!1F%BHK``P@#6<$*JL`&"!+3KH``"`%8"HF4TJ39LX(!@``9P1P`&`:2H5F
  71260. +M"G`**4```'#_8`QP`$ZZ``!.N@``8*),WRC@6$].=2!O``0@+P`((F\`#$CG
  71261. +M`10B`'``3-\H@&``_W`@;P`$+PUP`"(`D\DJ7V``_UX@+P`$(&\`""(O``Q(
  71262. +MYP,$+`$N`"I(4H!F`GX`2H=J`D2'(`<B!B!-D\E,WR#`8`#_+``````#[X8`
  71263. +M``-?7W!R;V-E<W-E<P`````!````)(,```-`7V9R965?96YT<GD````!````
  71264. +M3H8```)?97)R;F\```````$```!L@P``!$!?=V%I=%]S:6=N86QS```````!
  71265. +M````=H,```1`7VAA;F1L95]S:6=N86QS`````0```'H````````#\0````,`
  71266. +M````3U!44P`$`$````/R```#Z0```!(@+P`$44](YP,`+@!.N@``(`=.N@``
  71267. +M2H!G(B)`(&D`'"](``P@:0`$<`$B;P`,3I$L`"`'3KH``"`&8`)P_TS?`,!0
  71268. +M3TYU``````/O@P```T!C:&MA8F]R=`````````$````.@P```T!?9FEN9%]F
  71269. +M9`````````$````4@P```T!?9G)E95]F9`````````$````V`````````_$`
  71270. +M```#`````$]05%,`!``````#\@```^D````#(&\`!"`O``A.^@`````#[X,`
  71271. +M``)`<W1R<F-H<@````$````*`````````_$````#`````$]05%,`!``````#
  71272. +M\@```^D````#(&\`!"`O``A.^@`````#[X,```)`<W1R8VAR``````$````*
  71273. +M`````````_$````#`````$]05%,`!``````#\@```^D```!-2.<`!G`(<@`L
  71274. +M>``$3J[_.BI`2H!F!'``8"Y"K0`$2'@`*'``+P!![```<@&3R<%!3KH``%!/
  71275. +M*H!F#")-<`A.KO\N<`!@`B`-3-]@`$YU(&\`!$CG``8J2"`-9Q@@36$``!X@
  71276. +M54ZZ```B37`(+'@`!$ZN_RY,WV``3G4@;P`$2.<`!BI(2JT`!&<4(E4L>``$
  71277. +M3J[^(")53J[^)D*M``1,WV``3G4@;P`$(%`B:``.<``0*0`/<@'AH2`!3G4@
  71278. +M;P`$("\`""(O``Q(YP,&+`$N`"I(8:I*AV8$2H9G'B)5(T<`("-&`"0S?``)
  71279. +M`!PL>``$3J[^,G`!*T``!$S?8,!.=2!O``1(YP`&*DA*K0`$9QPB52QX``1.
  71280. +MKOXL2D!G#B)53J[^)D*M``1P`6`"<`!,WV``3G4```/X`````0````$````H
  71281. +M`````````^^#```$0%]D979I8V5?;W!E;@````````$````R@P``!$!?9&5V
  71282. +M:6-E7V-L;W-E```````!````9@````````/Q`````P````!/4%13``0`0```
  71283. +M`_(```/J````!'1I;65R+F1E=FEC90````````/R```#Z0```!XO#B`L```B
  71284. +M`$A!0D'2@"`L``"S@"E```1"K``(0^P`!'``+'@`!$ZN_=@I0```</].KOZV
  71285. +M2(!(P"E```!*K```9PA*@&L$<`%@`G``*4``#"Q?3G4O#B`L``!K""QX``1.
  71286. +MKOZP("P``&<*(D`L>``$3J[^8BQ?3G4```/X`````P````$```!8````.@``
  71287. +M`!X````&`````@```&8```!.````/@```"P````:````%@````````/OA@``
  71288. +M!%]?<W1A<G1U<%]T:6UE```````!````!(8```%?7W5S`````0```!``````
  71289. +M```#\0````,`````3U!44P`$`$````/R```#Z@````7_____9FEF;RYL:6)R
  71290. +M87)Y`````````_(```/K````!````_(```/I````%B`O``113TCG`P`N`$ZZ
  71291. +M```@!TZZ``!*@&<H(D`@:0`<<D#EB<*1+T@`#"`!(&D`!")O``Q.D2P`(`=.
  71292. +MN@``(`9@`G#_3-\`P%!/3G4@+P`$+P<N'V"N``````/O@P```T!C:&MA8F]R
  71293. +M=`````````$````.@P```T!?9FEN9%]F9`````````$````4@P```T!?9G)E
  71294. +M95]F9`````````$````\`````````_$````#`````$]05%,`!``````#\@``
  71295. +M`^D```!B(&\`!"`O``@B;P`,+V\`$``$+V\`%``(+V\`&``,+V\`'``0+V\`
  71296. +M(``4+V\`)``844](YP<4+@!([P,``!1\`"IL``!@%DJM``1F"C!\``$K2``$
  71297. +M8`Q2AMK\`"2\K``$;>0@+``$O(!F>'(*TZP`!"`L``0B`.>!TH#E@2`!3KH`
  71298. +M`"I`2H!F#'`,*4```'#_8```CG#VT*P`!"(`YX'2@.6!(&P``")-8`(2V%.!
  71299. +M9/H@+```9P8@0$ZZ```I30``>O;:K``$(`7G@-"%Y8#;P)?+*TL`!%*%VOP`
  71300. +M)+JL``1M\"`&YX#0AN6`(&P``"&O`!0(!"&'"``AKP`8"`A+[P`@(9T(#"&=
  71301. +M"!`AG0@42^\`+"&="!@AG0@<(9T(("`&3-\HX%!/3G4@+P`$(@!K%K*L``1L
  71302. +M$"`!YX#0@>6`(&P``$*P"`1.=2`O``1(YP$$+@!K'KZL``1L&"`'YX#0A^6`
  71303. +M*FP``-O`2JT`!&<$(`U@"'`)*4```'``3-\@@$YU("P`!$YU``````/X````
  71304. +M$0````$```&"```!9````58```%````!,@```.P```#>````Q````+X```"R
  71305. +M````I````)@```!R````;@```&0```!>````0@````````/O@P```D!M86QL
  71306. +M;V,``````0```("&```"7V5R<FYO```````"```!=@```(R#```"0&9R964`
  71307. +M```````!````N@````````/Q`````P````!/4%13``0`0````_(```/K````
  71308. +M`@```_(```/I````&B!O``0B;P`(GOP`#$CG(18F22I(3KH``"`+9P8N*P`$
  71309. +M8`B1R$ZZ```N`'#_OH!F!'``8"@@!T'O`!1.N@``(@U![P`4)`@L;```3J[^
  71310. +M=$J`9P1P`&`&3KH``'#_3-]HA-[\``Q.=0`````#[X,```-`8VAK86)O<G0`
  71311. +M```````!````%H,```)`=&EM90````````$````F@P```T!?9VUT,F%M:6=A
  71312. +M``````$````\A@```E]$3U-"87-E`````0```$B#```"0%]S971E<G(````!
  71313. +M````6`````````/Q`````P````!/4%13``0`0````_(```/I````!R!O``0B
  71314. +M;P`(("\`#"\+)DDB2"!+)E].^@````````/O@P```D!M96UM;W9E`````0``
  71315. +M`!@````````#\0````,`````3U!44P`$``````/R```#Z0```%(@;P`$(F\`
  71316. +M"%%/2.<!%"9)*DA.N@``0>\`#$ZZ```@#6<(0>\`#"K8*M@@"V<``-)![P`,
  71317. +M3KH``"!`("@`)$2`<CQ.N@``)H!^`"!L``1#[```$!BP&68,2@!F]F8&?@1@
  71318. +M``":(&P`!$/L``@0&+`99@Q*`&;V9@9^`V```(`@;``$0^P`$!`8L!EF"DH`
  71319. +M9O9F!'X%8&8@;``$0^P`&!`8L!EF!DH`9O9G4"!L``1#[``<$!BP&68&2@!F
  71320. +M]F<\(&P`!$/L`"`0&+`99@9*`&;V9R@@;``$0^P`)!`8L!EF!DH`9O9G%"!L
  71321. +M``1#[``H$!BP&68(2@!F]F8"?@$G1P`$<`!,WRB`4$].=2!O``2>_``0+PTJ
  71322. +M2$'O``Q#[P`$80#^Z"JO``P@+P`00^T`!#+`("\`!#+`("P``#+`<``J7][\
  71323. +M`!!.=0`````#^`````@````!````[````-@```#$````L````)P```"$````
  71324. +M:@```%`````````#[X,```-`8VAK86)O<G0````````!````%(,```-`7V=E
  71325. +M='1I;64````````!````'(,```-`;&]C86QT:6UE```````!````-H,```)?
  71326. +M7T-81#,S``````$```!$A@```E]T>FYA;64`````"````.@```#4````P```
  71327. +M`*P```"8````@````&8```!,A@```U]D87EL:6=H=`````````$```$X````
  71328. +M`````_$````#`````$]05%,`!`!````#\@```^H````,3454($135`!7150@
  71329. +M1%-4`$5%5"!$4U0`1414`$-$5`!-1%0`4$14`$%+1%0````````#\@```^D`
  71330. +M```P(&\`!$CG``8J2"QL``!.KO^^!I4/##\`<`!,WV``3G4@+P`$(&\`"%E/
  71331. +M!(`/##\`(CP``5&`+H!.N@``((`@%R(\``%1@$ZZ```@`2Z!<CQ.N@``(4``
  71332. +M!"`7<CQ.N@``(`'E@)"!YX#0@="`(4``"%A/3G4@;P`$64](YR`$2]`@'2(`
  71333. +MZ8&2@"`!YX#0@2(`Y8'2@.^!(!TD`.F"E(#E@B`=+T$`"'(R3KH``-""T*\`
  71334. +M"`:`#PP_`$S?(`183TYU```#[X8```-?5&EM97)"87-E```````!````#(,`
  71335. +M``)?7T-81#,S``````4```"J````7@```%(```!(````.@````````/Q````
  71336. +M`P````!/4%13``0`0````_(```/I````"R`O``193RZ`0>P`!"`(6$].=2!O
  71337. +M``193RZ(0>P`!"`(6$].=2`L``1.=0`````#^`````,````!````)@```!P`
  71338. +M```*`````````_$````#`````$]05%,`!`!````#\@```^H````)````````
  71339. +M``````````$````````````"```````````````````#[`````(````!````
  71340. +M%`````@````````#\@```^D````J(&\`!")O``@@+P`,64](YS\V+@`J2"])
  71341. +M`"B7RTZZ```B#20++&P``$ZN_7XF0"("3J[]>"`+9@9.N@``8%XD;P`H0A(J
  71342. +M!U*%(A,D*P`$)@TH"BQL``!.KOY*2H!G&"(+3J[]>$H29@1P`F`L+P1.N@``
  71343. +M6$]@*$ZN_WPL`'(R1@&P@68(""L``0`+9I0B"TZN_7@@!DZZ```I0```</],
  71344. +MWVS\6$].=0`````#[X,```-`8VAK86)O<G0````````!````'H8```)?1$]3
  71345. +M0F%S90````(```!4````)H,```)`7W-E=&5R<@````$````Z@P```E]S=')L
  71346. +M96X``````0```'"#```$0&-O;G9E<G1?;W-E<G(```````$```"6A@```E]E
  71347. +M<G)N;P```````0```)H````````#\0````,`````3U!44P`$`$````/R```#
  71348. +MZ0```"Q93TJL`!)F#$'O``,I2``28>Y@%D'O``,B;``2L\AD!'`!8`)P_RE`
  71349. +M``!83TYU64](YP$4+B\`%$JL``!F`F'`*FP`%F`N("P``&\,0>\`#R)M``2S
  71350. +MR&(02H!J'$'O``\B;0`$L\AD$"95+PU.N@``6$\J2R`-9LXI30`62H=F!'``
  71351. +M8")0AR\'3KH``"!`(*P`%D/O`!,A20`$0^@`"%A/*4``%B`)3-\H@%A/3G4`
  71352. +M`````_@````'`````0```*(```"0````>@```$(````:````#@````0````#
  71353. +M`````@```$@````Z````*`````````/O@P```E]F<F5E`````````0```&Z#
  71354. +M```"7VUA;&QO8P`````!````B@````````/Q`````P````!/4%13``0`0```
  71355. +M`_(```/J````!T`H(REA;&QO8V$N8PDQ+C$```````````````````/R```#
  71356. +MZP````$```/R```#Z0```#8@;P`$64](YR,"(@@L;```=/Y.KO^L+T``$&<Z
  71357. +M+BP``$ZZ```L`&`>2&\`$$AX"`4O!DZZ``!/[P`,2H!F""E'``!P`&`24X9L
  71358. +MWB(O`!`L;```3J[_IG#_3-]`Q%A/3G4@;P`$2.<A!BI(3KH``"(-+&P``$ZN
  71359. +M_[A*@&<$<`!@4$ZN_WPN`')OTH&P@68@(@UT`$ZN_T9*@&<.(@U.KO^X2H!G
  71360. +M!"`"8"A.KO]\+@!P9="`OH!F#B!-80#_2DJ`9@1P`&`,(`=.N@``*4```'#_
  71361. +M3-]@A$YU``````/OA@```E]$3U-"87-E`````P```'(```!0````#H8```)?
  71362. +M97)R;F\```````,```#,````0````!Z#```#0%]L87-T7V9D`````````0``
  71363. +M`"*#```"7VEO8W1L```````!````-(,```-`8VAK86)O<G0````````!````
  71364. +M;(,```1`8V]N=F5R=%]O<V5R<@```````0```,@````````#\0````,`````
  71365. +M3U!44P`$`$````/R```#Z0```AI(YP`&<"(B/``!``$L>``$3J[_.BI`2H!F
  71366. +M!'``8"`;?``$``A-[0`.0AX@+```',`L[```0>T`%$ZZ```@#4S?8`!.=2!O
  71367. +M``0O#B)(<"(L>``$3J[_+BQ?3G4@;P`$2.<`!BI(("T`(&<*+&P``'(`3J[_
  71368. +MW"`M`"1G#"QL``!R0.&)3J[_W"`M`#1G!B!`3KH``"`M`#AG!B!`3KH``"!M
  71369. +M`#QAI"!-3-]@`$[Z``!(YP(&+`$J2$J`9Q0@+0`@(BT`-"QL```P?``!3J[_
  71370. +MRDJ&9Q0@+0`D(BT`."QL```P?``"3J[_RG`!(BP``..@3-]@0$YU2.<#-B9)
  71371. +M*D@N$R!O`!PL$&`4(&T`-+'*9@1^`&`(M>T`.&8"?``@;0`\+'@`!$ZN_HPD
  71372. +M0$J`9MI*AV<60I,@+0`@(BT`-"QL```P?``#3J[_RDJ&9U(@;P`<0I`@+0`D
  71373. +M(BT`."QL```P?``#3J[_RF`V<`$B+```XZ`L>``$3J[^PB!M`#PL>``$3J[^
  71374. +MC"1`2H!GWB!M`#2QRF8$?@!@"+7M`#AF`GP`2H=FUDJ&9M)P`2(L``#CH"(`
  71375. +M<``L>``$3J[^SDS?;,!.=5E/2.<#%BX`)DDJ2&```(9"K0`L""T``@`S9PQP
  71376. +M(RE```!P_V```*PL;```<@%.KO\Z("T`("(M`#0L;```,'P``4ZN_\H@;0`\
  71377. +M<``0*``/<@'AH2`!3KH``"P`("T`("(M`#0P?``#3J[_RF`0<`$B+```XZ`L
  71378. +M>``$3J[^PB!M`#PL>``$3J[^C$J`9^`@!DZZ```@+0`@0>\`%"(((&T`+"QL
  71379. +M``!.KO_6+`!G`/]B(`92@&8"?`"\AV,"+`<@!B!O`!1@`A;84X!D^B`&*T``
  71380. +M+$S?:,!83TYUGOP`2$CG#Q8N`"I()DDO20`<2H=F``"*("T`)"QL``!R0.&)
  71381. +M3J[_W"!-0^\`(!+89OQ![P`@0^P``$ZZ```@34/O`$(2V&;\0>\`0D/L``1.
  71382. +MN@``""T````S9P@(+0`/`#)G!D'O`"!@!$'O`$(@"')`Z8D@?```C@!.KO_B
  71383. +M*T``)&<``.PL;```3J[_Q$J`:@)2@.*`*T``*'``8```X$JM`"1G``#*+"T`
  71384. +M*'H`8```M+R'8P``CBP'8```B`@M``(`,V<02H5G!B`%8```L'`C8```I"`M
  71385. +M`"0B+0`X+&P``#!\``).KO_*(&T`/'``$"@`#W(!X:$@`4ZZ```H`"`M`"0B
  71386. +M+0`X,'P``TZN_\I@$'`!(BP``..@+'@`!$ZN_L(@;0`\+'@`!$ZN_HQ*@&?@
  71387. +M(`1.N@``2H!G"$J%9P0@!6`Z("T`)"(+($8L;```3J[_T"@`9P#_9DJ$:Q+:
  71388. +MA)Z$U\1P`+Z`8@#_2"`%8`YP#4ZZ``!P("E```!P_TS?:/#>_`!(3G6>_``,
  71389. +M2-<!`W`=*4```'#_WOP`#$YU64\N@&$`_")P`%A/3G6>_``L2.<@%B9)*DA*
  71390. +M@&<2!(````@!9R)3@&<``)Q@``"J2I-G"`CM``(`,V`&"*T``@`S<`!@``":
  71391. +M<`/`K0`P5X!F*`@M``\`,F<&0>P`&&`$0>P`&B\(+PU(;``(2&\`'$ZZ``!/
  71392. +M[P`08"H(+0```#-G$"\-2&P`'$AO`!A.N@``8`XO#4AL`"9(;P`83KH``$_O
  71393. +M``Q![P`0(@@L;```)#P```/M3J[_XB:`9P1P`&`@3KH``&`8(!-G"B(`+&P`
  71394. +M`$ZN_]QP`&`(<!8I0```</],WV@$WOP`+$YU(&\`!"`O``@B+P`,+V\`$``$
  71395. +MGOP`3$CG#S8J+P!P+`$N`$*O`&B;S9?++T@`('!`3KH``"1`2H!G``&@80#Z
  71396. +MHB]``&AG``&4<!1.N@``*D!*@&<``89P%$ZZ```F0$J`9P`!>'`%&T``""!O
  71397. +M`&@K2``.<A0[00`2%T``""=(``XW00`2)4@`/"5-`#0E2P`XD<@E2``D)4@`
  71398. +M("5(`#!*AV<&".H````S2H9G!@CJ``$`,TAZ_G!(>OY>2'K^1$AZ_+A(>OO:
  71399. +M2'K[#"`J`#`@2D/Z^KQ.N@``3^\`&"@`9P``\$J%9P8(Z@`/`#(@;P`@(DH2
  71400. +MV&;\($I#[P`D$MAF_$'O`"1#[``T3KH``"!*0^\`1A+89OQ![P!&0^P`.$ZZ
  71401. +M``!*AV<H2H9G!$J%9@9![P`D8`1![P!&(`@L;```<D#IB3!\#0!.KO_B)4``
  71402. +M($J&9RI*AV<$2H5G!D'O`"1@!$'O`$8@""QL``!R0.F)('P``(X`3J[_XB5`
  71403. +M`"1*J@`@9@1*AV8J("H`)&8$2H9F($J`9Q0L;```3J[_Q$J`:@)2@.*`)4``
  71404. +M*$*J`"P@!&!8("H`(&<*+&P``'(`3J[_W"`J`"1G"BQL``!R`$ZN_]Q*A&L&
  71405. +M(`1.N@``(`UG!B!-3KH``"`+9P8@2TZZ```J;P!H(`UG!B!-80#Y+B`*9P8@
  71406. +M2DZZ``!P_TS?;/#>_`!,3G4@;P`$GOP`("\-*DA.N@``2JP``&8(<`8I0```
  71407. +M8&@@+```4JP``"(L``#2@"\!2&P`/$AO``Q.N@``<``N@$'O`!!R`<%!80#]
  71408. +MN$_O``PJ@<<``O`$'O``AR`6$`_:)83RM```1K!'``8!P@%4ZZ``!*@&<*
  71409. +M($`@:``$80#XKB`53KH``'#_*E_>_``@3G4@+P`$(B\`""]O``P`!"!O`!">
  71410. +M_``H+PTJ2$CO``,`!$ZZ``!*K```9@AP!BE```!@:"`L``!2K```(BP``-*`
  71411. +M+P%(;`!(2&\`%$ZZ``!P`2Z`(@!![P`8P4%A`/T43^\`#"J`:S1"IT'O`!!P
  71412. +M`2(`80#\_EA/*T``!&L$<`!@'"`53KH``$J`9PH@0"!H``1A`/@*(!5.N@``
  71413. +M</\J7][\`"A.=0`````#^`````L````!```(!@``!V(```8\```&)@``!,P`
  71414. +M``2\```$H```!)@```22```"Y@```M`````````#[X8```-?7V9I9F]?<VEG
  71415. +M```````&```#K@```C````&H```!:@```.H````LA@```5]?=7,````!````
  71416. +M,H,```)`3F5W3&ES=`````$````ZA@```U]?1FEF;T)A<V4``````!$```;H
  71417. +M```&V```!K8```:(```&7````^8```-X```#(````K8```)B```!^@```5H`
  71418. +M``$\````W````,0```!\````;(,```)`9G)E90````````8```<D```'#```
  71419. +M!P(```"L````G````)"&```"7V5R<FYO```````&```'\```!TP```42```$
  71420. +M+```!!(```'>A@```E]$3U-"87-E`````P``!00```3B```!Z(,```1`7W=A
  71421. +M:71?<VEG;F%L<P```````@```Y0```(6@P``!$!?:&%N9&QE7W-I9VYA;',`
  71422. +M```"```#S@```E"#```"0'-T<F-A=``````$```&0```!BH```+J```"U(,`
  71423. +M``1`7W-I9U]D:7-P871C:````````0``!`R#```#7U]S<')I;G1F````````
  71424. +M!0``"`X```=J```$U```!,0```2H@P```D!?<V5T97)R`````0``!/B#```"
  71425. +M0&UA;&QO8P`````#```%>@``!6P```52@P```T!?86QL;V-?9F0```````$`
  71426. +M``7V@P```T!?9G)E95]F9`````````,```A:```'M@``!OB#```#0&-H:V%B
  71427. +M;W)T`````````@``!^0```=`A@```U]?9FEF;U]O:P````````(```?H```'
  71428. +M1(8```1?7V9I9F]?;V9F<V5T````````!```!_H```?V```'5@``!U*&```#
  71429. +M7U]F:69O7V)A<V4``````@``!_X```=:@P```T!?9FEN9%]F9`````````(`
  71430. +M``A&```'H@````````/Q`````P````!/4%13``0`0````_(```/J````%5]M
  71431. +M``!?<P``9FEF;SHE<R]R=V5S2R5S`&T```!F:69O.B5S+W(`9FEF;SHE<R]M
  71432. +M=V5+``!?;0``7W,``'5X9FEF;RXE;'@``'5X9FEF;RXE;'@``````_(```/I
  71433. +M````"2`O``193RZ`0>P`%B`(6$].=2!O``193RZ(0>P`%B`(6$].=0```_@`
  71434. +M```"`````0```!P````*`````````_$````#`````$]05%,`!`!````#\@``
  71435. +M`^H````)=7-E<@````````````!W:&5E;`````````X````4```````&```#
  71436. +M[`````0````!````(````!H````6````!@````````/R```#Z0```*D@+P`$
  71437. +M64\N@"`L`0QG#B!`3KH``$J`9P1R`6`"<@`@`5A/3G4@+P`$(&P!#'(`3OH`
  71438. +M`$ZZ```I0`$,9@I(;```3KH``%A/(&P!#$ZZ``"!K```3G4@;`$,3OH```CL
  71439. +M``P``DYU("\`!`@```Q6P$0`2(!(P$YU".P`#0`"3G4@+P`$"```#5;`1`!(
  71440. +M@$C`3G5.N@``<``@;```$"@`#W(!X:&#K```3G5.^@``("\`!%E/2.<!%B]`
  71441. +M`!!^`&`N("T`%$ZZ```F0$J`9Q1*JP`49@Y^`7`!)T``%"=M`!@`&")-<!PL
  71442. +M>``$3J[_+B!L```L>``$3J[^C"I`2H!FP"`'3-]H@%A/3G4@+P`$2.</!"X`
  71443. +M<`'OH"P`<`F^@&8&<`!.N@``("P!!,"&9P:-K`$(8'HJ!D:%RZP!"$J':V9P
  71444. +M(+Z`;&`@!^>`0>P`!"IP"``P?``!N\AF+"`'58!G%%.`9Q!R#9"!9SQ9@&<X
  71445. +M48!G-&`*2&P`&$ZZ``!83W``3KH``&`@(`UG'"`'YX`H!D'L``2(L`@$B:P!
  71446. +M!"`'3I5&A,FL`00@+`$(P(9FBDS?(/!.=2`O``0O#B(L``""@'``+'@`!$ZN
  71447. +M_LXL7TYU("\`!"\.(@`@+```@($L>``$3J[^PBQ?3G4@+P`$2.<#`"X`?`!A
  71448. +M`/X02H!G"'P!<`YA`/\,(`=A`/YB2H!G"'P!<`)A`/[Z(`=A`/YJ2H!G"'P!
  71449. +M<`-A`/[H(`=A`/Z&2H!G"'P!<!1A`/[6(`9,WP#`3G4@+P`$+P<I0```<`@N
  71450. +M'V``_KQP`&$`_V!@D&#V2.<!%'X`2^P`!#9\``$JBT*M``12AU"-<""^@&WP
  71451. +M0JP!"$*L`01"K```80#]U&$`_>IA`/VB3-\H@&``_?AA`/VX8`#^"``````#
  71452. +M^`````(````!```!=````#X````7`````@```H0```*````"?````F0```'6
  71453. +M```!N@```:8```&B```!F````9````%*```!.````2X```$F````I````'H`
  71454. +M``!@````5@```%````!(````.````"H````*`````````^^#```$0%]T:6UE
  71455. +M<E]E>'!I<F5D``````$````2@P``!$!?=&EM97)?<W1A<G0````````!````
  71456. +M,(,```1`7V%L;&]C7W1I;65R`````````0```#2#```"7U]F86EL```````!
  71457. +M````0H,```-`7W1I;65R7W-I9P`````!````3(,```-`7V9R965?=&EM97(`
  71458. +M```!````6H,```1`7VEN:71?<')O8V5S<V5S`````0```)*&```$7U]C:&EL
  71459. +M9')E;E]E>&ET``````(```#N````F(,```5`7V-L96%N=7!?<')O8V5S<V5S
  71460. +M``````$```"J@P```T!?9FEN9%]P:60```````$```#$@P```D!?7V5X:70`
  71461. +M`````@```8````$B@P```U]?;65S<V%G90````````$```%XA@```E]?1E!%
  71462. +M4E(``````0```D@````````#\0````,`````3U!44P`$`$````/R```#Z@``
  71463. +M``I&86EL960@=&\@8W)E871E('1I;65R``!U<V5R(&EN=&5R<G5P=``````#
  71464. +M\@```^L```!$```#\@```^D```(=2&P`!$ZZ``!83TYU("\`!"\-3KH``"I`
  71465. +M2H!F`F'B(`TJ7TYU(&\`!"`O``@O"TZZ```F0$J`9@)AQB`+)E].=2!O``0O
  71466. +M#2I((`UF!$OL``X@34H89OQ3B)'-(`A2@$ZZ```@0$J`9@1P`&`((D@2W6;\
  71467. +M(`@J7TYU64](YP,T?@!\`"!L```F:`#08"Q**P`(9B0P/`4`P&L`#F8:4H<@
  71468. +M:P`*(`A*&&;\4XB1P"`(W(#<JP`45(8F4TJ39M`@!U*`Y8#0AF$`_THI0``8
  71469. +MY8<@0")`T\=%Z0`$+T``%&8*0>P``"E(`!A@5B!L```J:`#08$)*+0`(9CHP
  71470. +M/`4`P&T`#F8P)FT`"BXM`!0@;P`4(,HO2``48`(4VTH39OH4_``])FT`$&`"
  71471. +M%-L@!U.'2H!F]D(:*E5*E6:Z(&\`%$*03-\LP%A/3G4@;P`$("\`""\-*D@J
  71472. +M@$*M``3E@&$`_K0K0``(*E].=2!O``0B;P`(("\`#$CG(C0F22I(2H!G"B!+
  71473. +M80#^PB1`8`(D2R`*9SXB%20M``2T@6TB+`'<AG00TH*\@6T"(@8J@2`!Y8`@
  71474. +M;0`(3KH``"M```AG$D?M``0B$U*;Y8$@6R&*&`!P`4S?+$1.=2!O``0B;P`(
  71475. +M("\`#&&22H!F!&$`_AI.=2!O``0B;P`(2.<`%"9)*D@@+0`$T*L`!+"5;Q+0
  71476. +M@"J`Y8`@;0`(80#^&BM```@B+0`$Y8$@;0`(T<$@*P`$(@#E@2)K``A@`A#9
  71477. +M4X%D^M&M``0@:P`(3-\H`$[Z```@;P`$(F\`""]O``P`!"`O`!`B+P`464](
  71478. +MYP(T+`$J221(+T@`$$J`9T13@&<*4X!G``"V8```]%.&9R(@+P`8(@V0@2!O
  71479. +M`!!",`@`($$B;P`08`(2V%.`9/I@``#.0>P`$")O`!`2V&;\8```OB9O`!A@
  71480. +M;G!<L!5F9DHM``%G8%2-<`&\@&8&%/P`86!4(`95@&9&$"W__TB`2,!R(Y"!
  71481. +M9RY5@&<J58!G)E.`9R)3@&<>4X!G&G(5D(%G%'(<D(%G#E6`9PIR'Y"!9P15
  71482. +M@&8$%/P`)Q3M__]@"!3M__]@`A3=N\MECF!`)F\`&&`V<"JP%68N2BT``6<H
  71483. +M5(T0+?__2(!(P')ED(%G#'()D(%F#!3\``I@#A3\`!M@"!3M__]@`A3=N\ME
  71484. +MQD(23-\L0%A/3G6>_`$L2.<_-BIO`5@@;```#&@`)0`49`I(>``43KH``%A/
  71485. +M0JP`''`!*4``&"E``#YP`BE``#HI0`!@*7P```"$`%R3R2QX``1.KO[:*4``
  71486. +M`$ZZ```I0``$9@I(;``23KH``%A/(&P`!$ZZ```I0``(+&P`!"!6+&@`%"E.
  71487. +M`!1![P$P3J[_OBEO`3``#$ZZ``!.N@``(&P``"`H`*QG$.6`(D`B*0`TY8$I
  71488. +M00`08`8I:`"$`!!*%68``.A![``J(@@L;```)#P```/N3J[_XBP`0>P`,"((
  71489. +M3J[_XBX`0>P`-B((3J[_XBH`2H9G"$J'9P1*A68B2H9G!B(&3J[_W$J'9P8B
  71490. +M!TZN_]Q*A6<&(@5.KO_<80#[<G`!+P`O!2\`+P<B!L%!3KH``"!L```@*``<
  71491. +M0>\!6&$`_)Y/[P`0?`!^`&!0(FP``"!I`"0@,'@`9SXB`$/O`#`D"2QL``!V
  71492. +M0.6+3J[^;DJ`9R8B;```(&D`)-''("@`!&<((@(D`$ZN_(Y![P%(0^\`,'`!
  71493. +M80#\V%*&4(<@;```O*@`'&VF8``"S"QL``!.KO_**`!.KO_$*@!^`"!L```L
  71494. +M*`#@9BA^`4'L`#PB""0\```#[4ZN_^(L`&820>P`/B((3J[_XBP`9@1A`/JD
  71495. +M+P<O!G``+P`O!2($P4%.N@``0>\!6'`!80#[UB`\```%&F$`^HX@0#%\!```
  71496. +M$B]``#QP0.6(80#Z>D_O`!!^0.6/+T`!.&`"4HT0%4B`2,!![``!"#```P@`
  71497. +M9NP0%6<``A9R(K`!9C!2C29-8!!P*K`59@A*+0`!9P)2C5*-$!5G!G(BL`%F
  71498. +MYB1-$!5R(K`!9@)2C7P"8%1P)[`59B!2C29-8`)2C1`59P9R)[`!9O0D37`G
  71499. +ML!5F`E*-?`%@+B9-8!!P7+`59@A*+0`!9P)2C5*-$!5G$G(@L`%G#'(*L`%G
  71500. +M!G()L`%FVB1-?``@2RH*FHL@!5*`+T@`*&$`^;8F0$JO`4QF("`%($LB;P`H
  71501. +M3KH``$(S6`!![P%((DMP`&$`^V!@`/\FVH5R$-J!NH=O%"!O`3A.N@``(`5A
  71502. +M`/EV+@4O0`$X+PH@!B!+(F\`+'(!80#[KEA/(@LD+P$X)@<L;```3J[\N"H`
  71503. +M;!!"$B\O`"A(;`!$3KH``%!/2H5F(B\*(`8@2R)O`"QR`&$`^W1![P%,(DMP
  71504. +M`&$`^NA83V``_JQZ`2!O`"Q"J``(0B@`$4(H`!`O"B`&($LB;P`L<@)A`/M`
  71505. +M0>\!0'`080#Z)EA/(@LD+P`L+&P``$ZN_,HH`&8\8"IZ`")O`"S2_`$80>\!
  71506. +M/'`!80#Z($J`9@1X9V`2(B\`+"QL``!.KOS$*`!*A&?2(B\`+"QL``!.KOR^
  71507. +M<'30@+B`9PI(;`!83KH``%A/2H5G(B\*(`8@2R)O`"QR`&$`^L!![P%,(DMP
  71508. +M`&$`^C183V``_?@@+P%`(&\!1$ZZ``!![P%(0^\!/&$`^BH@2TZZ``!@`/W6
  71509. +M(&\!.$ZZ```@;P`L3KH``&$`^))![`!R3KH``"E```!F"$'L`'@I2```0>P`
  71510. +M?DZZ```I0``49@8I;````!1![`"(3KH``"E``!AF"$'L`(XI2``80>P`DDZZ
  71511. +M```I0``<9@A![`"8*4@`'$'L`*!.N@``*4``'&8(0>P`JBE(`!P@+P%,(&\!
  71512. +M4")L`!A.N@``<`!.N@``3-]L_-[\`2Q.=0```_@````5`````0``"$X```A`
  71513. +M```(.```""H```@B```(%```"`````?X```'Z@``!X0```;0```%3@``!3H`
  71514. +M``18```$3```!#8```/6```"J````.````!.`````@```!(````"```(7@``
  71515. +M"%(```A(```%+@``!"P```0D```$$```!`0```/V```#[````^@```/@```#
  71516. +MT````\@```#J````Y````,H```"$`````````^^#```"7U]F86EL```````$
  71517. +M```'B```!M0```/:````!H,```)`;6%L;&]C``````(```!@````%(,```)`
  71518. +M<F5A;&QO8P````(```&R````,(,```)`9G)E90````````4```?B```'V@``
  71519. +M!\X```:4```"1H8```)?4WES0F%S90````$```.(@P```E]?6$-%6$E4````
  71520. +M`0```YB&```"7U]?:6]B```````&```#N@```[(```.N```#J````Z0```.>
  71521. +M@P``!$!?86QL;V-?=&EM97(````````!```#S(,```-`7W1I;65R7W-I9P``
  71522. +M```!```#Y(,```-`7VEN:71?9FEF;P`````!```$"(,```1`7VEN:71?<VEG
  71523. +M;F%L<P```````0``!`R&```"7T1/4T)A<V4````'```'=```!V(```<T```&
  71524. +MO@``!1P```34```$/(,```1`7VEN:71?=6YI>&EO`````````@``!6X```2@
  71525. +MA@```U]?5T)E;F-H37-G``````0```4.```$Y```!+X```2DA@```E]?7V-T
  71526. +M>7!E`````0``!;"#```"0'-T<FYC<'D````!```&;H,```)`='%S;W)T````
  71527. +M``$```>\@P```T!?7V=E=&5N=@````````4```A$```(+@``"!@```@$```'
  71528. +M[H8```-?7V%M:6=A7W5S97(````)```(/```"#(```@F```('```"!````@.
  71529. +M```("```!_P```?R@P```D!M86EN`````````0``"&*#```"0&5X:70`````
  71530. +M```!```(:`````````/Q`````P````!/4%13``0`0````_(```/J````+```
  71531. +M``!.;R!M96UO<GD```!A`$9A:6QE9"!T;R!C<F5A=&4@=&EM97(``$Y)3#H`
  71532. +M`$Y)3#H``$Y)3#H``"H`3DE,.@``26YV86QI9"!W:6QD8V%R9"`E<P!%<G)O
  71533. +M<B!E>'!A;F1I;F<@87)G=6UE;G1S`%5315(``'5S97(``%5315).04U%``!(
  71534. +M3TU%``!S.@``4TA%3$P`8FEN.G-H``!(3U-43D%-10``86UI9V$````#\@``
  71535. +M`^L````(```#\@```^D````$("\`!%E/+H!P`%A/3G4``````_$````#````
  71536. +M`$]05%,`!``````#\@```^D````^("\`!$CG`P`N`$JL``!G!"`'8&!\`"`'
  71537. +M`H````$D9P)\"`@'``=G!`!&``4(!P`$9P0(Q@`""`<``6<$",8```@'``-G
  71538. +M!`C&``$(!P``9P0(Q@`&(`=R2<"!<D"P@68$`$8`0@@'``EG!`C&``4@!@I`
  71539. +M``],WP#`3G4@+P`$2.<&`"P`2JP``&<((`8"0`__8%YZ``I&``\(!@`#9P1Z
  71540. +M2>6-(`9R!<"!6X!F!`C%``<(!@`"9P0(Q0`$"`8``&<$",4``2`&<D+`@6<$
  71541. +M",4`!@@&``%G!`C%``,(!@`&9P0(Q0``"`8`!6<$",4`"2`%3-\`8$YU````
  71542. +M``/X`````@````$```"&````#`````````/Q`````P````!/4%13``0`0```
  71543. +M`_(```/K`````0```_(```/I`````G``3G5P`$YU```#\0````,`````3U!4
  71544. +M4P`$``````/R```#Z0```!5(YP,`3KH``"X`?`!@"B\&3KH``%A/4H:\AVWR
  71545. +M3-\`P$YU("\`!"\'+@!AU$ZZ``!.N@``(&P``$ZZ```O!TZZ``!83RX?3G4@
  71546. +M+P`$+P<N'V#4``````/O@P```T!?;&%S=%]F9`````````$````&@P```E]C
  71547. +M;&]S90```````0```!*#```$0%]C;&5A;G5P7V9I9F\```````$````N@P``
  71548. +M!4!?8VQE86YU<%]S:6=N86QS`````````0```#*&```#7U]O9&1?=&EM97(`
  71549. +M`````0```#:#```#0%]F<F5E7W1I;65R`````0```#J#```"7U]80T58250`
  71550. +M```!````0`````````/Q`````P````!/4%13``0`0````_(```/I````$R`O
  71551. +M``0B+P`((&\`#%%/2.<#)"P!+@`J2$ZZ```@!TZZ``!*@&<:(D`@:0`@+T@`
  71552. +M%"`&(&D`!")-)&\`%$Z28`)P_TS?),!03TYU``````/O@P```T!C:&MA8F]R
  71553. +M=`````````$````:@P```T!?9FEN9%]F9`````````$````@`````````_$`
  71554. +M```#`````$]05%,`!``````#\@```^D```"8GOP`#$CG+S8J;P`T?@/.KP`X
  71555. +M?`$@;```)F@`N"H\```#[$ZZ``!*AV<*<`*^@&<$<@!@`G(!+T$`*'`!OH!G
  71556. +M"%6'9P1P`&`"<`$O0``L($U#[```3KH``$J`9@9X_V```51P_R!L```A0`"X
  71557. +M(@TL;```=/Y.KO^L+@`@;```(4L`N$J`9G@L;```3J[_?$ZZ```L`"`L``!R
  71558. +M+D8!L(%G!$J`9@I^`2H\```#[F`6(`95@&8,""\`"``Z9P1P`6`"<``N`$J'
  71559. +M9RQ\``@O``@`.F<<""\`#P`Z9P9X`F```-8@+P`\3KH``"@`8```R'C_8```
  71560. +MPBE&``!P_V```4)"IRQL``!R`B0/3J[_'$_O``0D0$J`9PPB!R0*3J[_FDJ`
  71561. +M9A8@"F<()`IR`DZN_Q9.N@``</]@``$(*"H`="0*<@).KO\6(@=.KO^F<%#I
  71562. +MB,"O`#@,@```!0!F#'`1*4```'#_8```VDJO`"AG!@@$``-F#$JO`"QG$@@$
  71563. +M``)G#'`-*4```'#_8```M@@O``D`.F<B(@TD/````^Y.KO_B2H!G""(`3J[_
  71564. +MW&`*3KH``'#_8```C`@O``@`.F<$(`5@!B`\```#[20`(@TL;```3J[_XBH`
  71565. +M9@A.N@``</]@8`@O``D`.F8$2H9F!"P$8`)\_WX`2J\`*&<"?@%*KP`L9P0(
  71566. +MQP`!""\``P`[9P0(QP`#+P<@!2(&3KH``%A/+@!L''#_(&P``"%``+@B!2QL
  71567. +M``!.KO_<(&P``"%+`+@@!TS?;/3>_``,3G4@;P`$+R\`#"\O``PO"&$`_:A/
  71568. +M[P`,3G4```/X`````0````$```!2`````````^^&```!7U]U<P````4```(V
  71569. +M```")````'P```!F````%H,```-`8VAK86)O<G0````````!````)(,```)`
  71570. +M<W1R:6-M<`````$```!6A@```E]$3U-"87-E````!0```BX```',```!`@``
  71571. +M`(@```!P@P``!$!C;VYV97)T7V]S97)R```````!````D(8```)?7T]315)2
  71572. +M``````$```"6@P``!4!?;6%K95]P<F]T96-T:6]N`````````0```.:&```"
  71573. +M7V5R<FYO```````#```!@@```5X```#V@P```D!?<V5T97)R`````P```=@`
  71574. +M``&L```!,(,```1`7V%L;&]C7V%M:6=A9F0``````0```A@````````#\0``
  71575. +M``,`````3U!44P`$`$````/R```#Z@````).24PZ`````````_(```/I```%
  71576. +M:"!O``1(YS@`</_`*``#<@`2`'#_P"@``G0`%`!P_\`H``%V`!8`</_`$'@`
  71577. +M&`#AA(B#X82(@N&$B($@!$S?`!Q.=4CG(S1+[`!R0>P`'$7L``PDR$'L`"`D
  71578. +MR$*L`!A"FGX`+"P`>D?L![Q@/"`K``0B`.6!($W1ZP`(0^@'ZD7L``PEB1@`
  71579. +M2H!G!G`!*4``&$J'9P9*JP`$9@@@$T2`*4``%%*'UOP`$+Z&;<!^`"PL`'9@
  71580. +M.G``(@<&@0``!=@0-1@`2,#I@"!-(@`&@0``!U+1]1@`!H````=.)#4(`.6"
  71581. +M0^@'ZD7L``PEB2@`4H>^AFW"3-\LQ$YU(&\`!")O``B>_`HH2.<[-B](`"@O
  71582. +M20`L(`AF"$WL`"0O3@`H<#H@;P`HL!!F!%*O`"@@;P`H<#I.N@``2H!F3G`*
  71583. +M(@`@;P`H(`A*&&;\4XB1P-*(4H%P0;*`909P_V```DQ![``P0^\`,1+89OQ!
  71584. +M[P`Q0^P`/$ZZ``!![P`Q(F\`*$ZZ``!![P`Q+T@`*$*G+R\`+$ZZ``!03RX`
  71585. +M4H!F!G#_8``"""`'0>\`<B(\```)VDZZ```L`"`'3KH``$J`9@9P++R`9`9P
  71586. +M_V```>!![P"*80#^."X`0>\`CF$`_BXJ;P`L*H!![P"280#^("M```1![P"6
  71587. +M80#^%"M```A![P":80#^""M```PB%6LP=#*R@FXJ)BT`"&\D>`JVA&X>*"T`
  71588. +M!&L8#(0```%R;A!*@&L,L()N"+:'9PI*AV<&</]@``%JTH'E@2`M``@D`-2"
  71589. +MU(#4@B`M``0F`.6#UH#6@M:M``S6@=:'<"S6@+R#9`9P_V```3A'[P">?``D
  71590. +M36`0($MA`/V()4``$%B+4H98BKRM``1MZGP`8"`0&R(&!H$```78&X`8`'(`
  71591. +M$@"RK0`(;09P_V```/92AKRM``1MVGP`0>T'2B1(+T@`)&!*($MA`/TZ)(!+
  71592. +MZP`%$"L`!'(`$@`E00`$9PI3@6<&</]@``"\1^T``1`5<@`2`"5!``AM"BIO
  71593. +M`"RRK0`,;P9P_V```)Q2AM3\`!"\K0`(;;!\`&`.(`8&@```!^H;FP@`4H:\
  71594. +MK0`,;>P@!@:````'ZD(U"`!\`-K\"!Y@'B!+80#\OBJ`1>L`!"!*80#\LBM`
  71595. +M``1'Z@`$4H90C2!O`"R\D&W:?``D;P`D*F\`+&`H2H=F!D*J``Q@&!`;2(!(
  71596. +MP"5```QR`;"!9PA*@&<$</]@#E*&U/P`$+RM``AMTG``3-]LW-[\"BA.=2!O
  71597. +M``193R\-*DA@`E*-$!4?0``$9R9(@$C`0>P``0@P``((`&86$"\`!'(LL`%G
  71598. +M#'(ML`%G!G(KL`%FT"`-*E]83TYU(&\`!")O``@@+P`,(B\`$%E/2.<'%"P!
  71599. +M+@`F22I((`UG$A`52(!(P$'L``$(,``""`!F!'``8$IZ`&`B$"\`%$B`2,`B
  71600. +M!>6!TH72@=*`*@%P,)J`NH9O!'``8"92C1`5'T``%&<02(!(P$'L``$(,``"
  71601. +M"`!FQKJ';`1P`&`$)H4@#4S?*.!83TYU(&\`!")O``A93TCG`!0F24/O``AP
  71602. +M`'(880#_;"I`2H!F!'``8&H@+P`((@#I@9*`(`'I@)"!Z8`F@'`ZL!5F3D'M
  71603. +M``%#[P`(<`!R.V$`_S@J0$J`9@1P`&`V("\`""(`Z8&2@.6!TY-P.K`59B!!
  71604. +M[0`!0^\`"'``<CMA`/\**D!*@&8$<`!@""`O``C1DR`-3-\H`%A/3G4@;P`$
  71605. +M(F\`"%E/2.<!%"I)+T@`#!`0<BVP`68(?@%2KP`,8#!(@$C`0>P``0@P``((
  71606. +M`&88<BL@;P`,LAA7P$0`2(!(P"](``Q*@&<$?@!@!'``8!P@;P`,(DUA`/\4
  71607. +M)D!*@&8$<`!@"$J'9P)$E2`+3-\H@%A/3G4@;P`$(F\`")[\``Q(YP`D*DDO
  71608. +M2``0<$JP$&8H0I5#Z``!0>T`!"](``P@22)O``QP`2(\```!;6$`_CPO0``0
  71609. +M8```M'!-L!!F?'`"*H!#Z``!0>T`#"](``P@22)O``QP`7(,80#^$")`2H!F
  71610. +M!G``8```P$7I``%P+K`19P9P`&```+!![0`((D@@2G`!<@5A`/WD(D!*@&8&
  71611. +M<`!@``"41>D``7`NL!%G!G``8```A$'M``0B2"!*<`!R!F$`_;@O0``08#`0
  71612. +M$$B`2,!#[``!"#$``@@`9QIP`2J`0^T`!'``(CP```%M80#]C"]``!!@!'``
  71613. +M8#P@+P`09@1P`&`R<"\@;P`0L!!F'$/H``%![0`0+T@`#"!)(F\`#&$`_=HO
  71614. +M0``08`@K?```'"``$"`O`!!,WR0`WOP`#$YU("\`!"(O``@@;P`,+V\`$``$
  71615. +MGOP`)$CG/Q0J2"H`+@$D!W8#Q(,O0``X+T$`/$J"9@P@!W)D3KH``$J!9A(@
  71616. +M!W)DY8E.N@``2H%G!'``8`)P`2P`(!5*@&<,4X!G2%.`9V9@``%^("T`!"(`
  71617. +M4X$D`=2"U($F`NF#EH(D`^F"E(/O@BX%WH(O1P!`2H9G``%4<CRP@6T``4P&
  71618. +MAP`!48`O1P!`8``!/B`M``0B`-*!TH`D`>F"E($B`NF!DH+O@=J!+T4`0&``
  71619. +M`1PH!7X`*BT`#%.%(`;0@-"&Z8!'[``^U\`O0``@8!H@&R(`TH'2@"0!Z8*4
  71620. +M@2("Z8&2@N^!V(%2A[Z%;>(N+P`\+T0`)"(M``QT`K*";@8F!U.#8`(F!R`#
  71621. +M<F1.N@``(@#2@4J`:@)6@.2`+T``+"`#+T$`,')D3KH``"`!:@)6@.2`=@G6
  71622. +MK0`,+T``-"`#+T$`*'(,3KH``%*!(`'G@)"!T("0@="`58!R"DZZ``!'[P`H
  71623. +MT)O0KP`TT)N0FU*`<@=.N@``+@%J`EZ'+"T`!)R':@)>AGH!*"T`"&`<+@9>
  71624. +MAR(M``SE@4'L`#K1[P`@OK`8`&P(+`=2A;J$;>`@!M"`T(8B`.F!DH`@`>F`
  71625. +MD('O@"(O`"32@"]!`$`@+P!`T*T`$-"O`$A,WRC\WOP`)$YU(&\`!")O``@@
  71626. +M+P`,GOP`6$CG/S8J2"Q-1^\`-";`)L@FR2].`#!*@&<<(`A*&&;\4XB1P"P(
  71627. +M(@C3KP`X<#.R@&4<?#)@&&$`^JHL`)R-+T``.'(#O(%L!G#_8``#>B]&`"P@
  71628. +M;P`X2A!F!G#_8``#:$/O`'1A`/OF+T``.&8&</]@``-4)F\`/$'L`*8B2V$`
  71629. +M][`N`&<"0I,@;P`X2A!G``*^*D@O2`!\80#Z2"(`DHTO0``X+T$`>'8#LH-L
  71630. +M!G#_8``#%"!O`#@0$&<@<BRP`6<:<CNP`6<40^\`<&$`^WXO0``X9A1P_V``
  71631. +M`NP@//__\?#0KP!T+T``<"!O`#@0$'(LL`%G"'([L`%F``%80^@``2!)0^\`
  71632. +M7&$`^[HJ0$J`9@9P_V```K!%[0`!<"RP%6<&</]@``*@($I#[P!(80#[E"]`
  71633. +M`#AF!G#_8``"BB!O`#A*$&<&</]@``)\($MP`B%```@A?````(@`!"`O`'!$
  71634. +M@$WH!THLP'`!+,!2ABS&("\`=$2`3>@'6BS`0IY"GM;\`!!%Z`78>@`L/```
  71635. +M![(@2B\O`'0O2``L(`4B!D'O`&!A`/QF+@`NKP!T(`4B!D'O`$QA`/Q46$\H
  71636. +M`$OJ``)%ZP`(OH!O&B!+((1P`2)O`"@2@"9*(4<`!"1-0BD``6`8($L@AR)O
  71637. +M`"A"$29*(40`!"1-$WP``0`!(`9R`\"!9@P@!G)D3KH``$J!9A(@!G)DY8E.
  71638. +MN@``2H%G!'``8`)P`2(`Y8%![`">(#`8`"(`TH'2@"8!Z8.6@20#Z8*4@^^"
  71639. +MVH)2A@R&```']6\`_T)@``$<(&\`.$H09P9P_V```69*AV<&</]@``%<>`!\
  71640. +M`'H`0J\`1'X`*DM@<$JM!TYG/B`O`$0B!^F!)"\`<`:!```'2B8S&`#6@B]#
  71641. +M`$1*AF<*L(-G!G#_8``!'$2"*T('2B`O`"Q2@"M`!U)\`6`F(`4B+P!T*BT'
  71642. +M2MJ!2H1G"K"%9P9P_V```.Y$@2M!!TI"K0=2>`%2A]K\`!"^JP`(;8I*AF<$
  71643. +M2H1F!G#_8```R'P`?@`J2R@O`$1@.G``(@<&@0``!=@0,Q@`2,#I@"!+T<!#
  71644. +MZ`=*+TD`0$J&9PI*J0`,9@0@!&`"(`71K0`0+"D`!%*'6(V^JP`$;<!@('``
  71645. +M<@$G00`()T``!"0O`'1$@DWK!THLPBS`+,`O0`!X*F\`/"XO`"P@!U*`*T``
  71646. +M#"PO`'AG"-"&4H`K0``,<C.P@6,$</]@,-K\!^H@!R!-(F\`,$ZZ```@3=''
  71647. +M2^@``4(02H9G$"`&($TB;P!\3KH``$(U:`!P`$S?;/S>_`!83G4@;P`$+PTJ
  71648. +M2$'L```B36$`]%!*@&<,0>P``")-<`%A`/P,*E].=2\-0>P`LDZZ```J0$J`
  71649. +M9@8J7V```%QP`2E`$\Y*%68>0JP`<D*L`'9"K`>\0JP'Q$'L``!#[`A<$MAF
  71650. +M_&`L($U#[`!R80#S]$J`9QYP.K`59Q`@34/L`')P`&$`^ZI*@&<(0>P`<F$`
  71651. +M_W8J7V``\PYP`2E`$\Y#[`!RD<AA`/.\2H!G"$'L`')A`/]48`#R[B!O``0@
  71652. +M+P`((F\`#)[\`!!(YP,4*DE([P$!`!`@;P`4+U``&$JL$\YF!&$`_T1*K`!V
  71653. +M9PH@+P`8L*P`@FP@?@!'[`!R8!!2A];\`!"^K`!Z;01^`&`R2JL'3F;J8"I^
  71654. +M`4?L`'8L+`!V8`X@+P`8L*L`$&T(4H=8B[Z&;>Y#[`!RT\=^`!XI!=?IAT'L
  71655. +M![S1QR\-+T@`("`00>\`'$/L`')A``#"(&\`("(H``0K00`@Y8%![`A<(F\`
  71656. +M(-'I``A#[``,(X@8`"M(`"A83TS?*,#>_``03G4@;P`$0^P``'``80#_*D'L
  71657. +M```@"$YU(&\`!"`O``@B;P`,2.<!%"X`)DDJ2$JL$])F#G`!*4`3TD'L"B!A
  71658. +M`/XZ+PL@!R!-0^P*(&$``$)83TJ'9P9![`"Z8`1![!(*)T@`*$S?*(!.=2!O
  71659. +M``1#[``L<`!AKD'L`"P@"$YU(&\`!"`O``@B;P`,+V\`$``$GOP`#$CG#S0N
  71660. +M`"9O`"PJ2'P`>@`H$2`$YX`O20`@T\!%Z0@>8$`O2@`D(!6PDFTV(&\`)+"0
  71661. +M9BA*A&8&("@`!&X:YX0B*``$(F\`(`:$```(&K*Q2`!N!'``8`)P`2H`+"@`
  71662. +M!&`&4X11BFRZ(!4B/``!48!.N@``*``@%2(\``%1@$ZZ``#2AY*&+`%@"`:&
  71663. +M``%1@%.$2H9K]&`(!(8``5&`4H0,A@`!48!L\"`&(CP```X03KH``"=```@@
  71664. +M!B(\```.$$ZZ```@`2]!`!QR/$ZZ```G0``$("\`''(\3KH``":!2H5G`E*3
  71665. +M(`18@'('3KH``"=!`!AL!%ZK`!@L/```![)*A&M`(`9R`\"!9@P@!G)D3KH`
  71666. +M`$J!9A(@!G)DY8E.N@``2H%G!'``8`)P`2H`(@#E@47L`)X@,A@`N(!M0%*&
  71667. +MF(!@P%.&(`9R`\"!9@P@!G)D3KH``$J!9A(@!G)DY8E.N@``2H%G!'``8`)P
  71668. +M`2H`Y8!![`">V+`(`$J$:\8$A@``!VPG1@`4)T0`'"`%T(#0A>F`1>P`/M7`
  71669. +M0JL`$&`.(BL`$.6!F+(8`%*K`!`B*P`0Y8&XLA@`;.92A"=$``Q"JP`@)T<`
  71670. +M)$S?+/#>_``,3G4@;P`$+PTJ2"`M`!@B`-*!TH!![`"^T<$@+0`0(@#2@=*`
  71671. +M0^P`T]/!(#P```=LT*T`%"\`+Q4O+0`$+RT`""\M``PO"2\(2&P`^$AL`%A.
  71672. +MN@``3^\`)$'L`%@@""I?3G4@;P`$+PUA`/TX($`J7V"4(&\`!")O``@@+P`,
  71673. +M+P<N`"`1L(=M%"('3KH``-&0(!$B!TZZ```B@6`J2H!J)E.0WY%L("`11(`B
  71674. +M!TZZ```B$)*`4X$@@2`11(`B!TZZ``">@2*'+A].=2!O``0B;P`(2.<!%"9)
  71675. +M*D@N+0`4GJL`%&8L+BT`$)ZK`!!F(BXM``R>JP`,9A@N+0`(GJL`"&8.+BT`
  71676. +M!)ZK``1F!"X5GI,@!TS?*(!.=2!O``0B;P`(("\`#"]O`!``!)[\`'!(YS\T
  71677. +M+@`J;P"8+TD`+$*5+T@`*$/O`%QP"B+84<C__"`O`%QR/K"!;`1*@&H.0>\`
  71678. +M8$/O`%QP/&$`_Q9![P!D0^\`8'`\80#_"$'O`&A#[P!D<!AA`/[Z0>\`<$/O
  71679. +M`&QP#&$`_NQ@3"`O`'!3KP!P!H````=K(@!T`\*"9@IR9$ZZ``!*@68:(#P`
  71680. +M``=LT*\`<')DY8E.N@``2H%G!'``8`)P`2(`Y8%![`">(#`8`-&O`&@@+P!H
  71681. +M;ZXL/```!VS<KP!P(`9R`\"!9@P@!G)D3KH``$J!9A(@!G)DY8E.N@``2H%G
  71682. +M!'``8`)P`20O`&SE@B8`UH/6@.F#0>P`/M'#+#`H`"`O`&BPAF\:1^\`:)V;
  71683. +M4I,,FP````QMGD*O`&Q2KP!P8)0@+P!<0J\`7'H`<@$O00"(+T``)%*%("\`
  71684. +MB-"`+T``B"`O`(AN[B`O`(AJ!'``8`1P`>N@+T``B$AO`#`O!TAO`)`@;P`X
  71685. +M3I!![P`\0^\`:&$`_BQ/[P`,*`!G+B`%4X5*@&H&</]@``$02H5J!E.O`(A@
  71686. +MQ'`!ZZ`L`$J$;P:=KP"(8+3=KP"(8*X@+P!\:P``Q"(O`%"R@&<``+I!^OGB
  71687. +M(F\`++/(9@9![`!R8`1![`H@?``F2"](`)!@``"(("L'3K"O`'QF=GH`)&\`
  71688. +MD&!D("H'3K"O`'QG5"`%Z8`B+P"((&\`D`:````'2M*P"`"2JP=*+T$`C$AO
  71689. +M`#`O!TAO`)0@;P`X3I!![P`\0^\`:&$`_6Q/[P`,2H!F$B`O`%"PKP!\9@@O
  71690. +M;P",`(A@)E*%U/P`$"!O`)"ZJ``(;9)2AM;\`!`@;P"0O*@`"&T`_W!P_V`D
  71691. +M("\`)-&O`(@O+P`H+P=(;P"0(&\`.$Z0<`$J@$_O``P@+P"(3-\L_-[\`'!.
  71692. +M=2!O``0B;P`(("\`#)[\``Q(YP<T+@`J2"])`!@,K0````$`(&\&<`$K0``@
  71693. +M2&\`'"`'($UA`/T>6$\L`$JO`!QF!B`M`"!J!B`&8```QD'Z^*XB;P`8L\AF
  71694. +M!D'L`')@!$'L"B!\`"9(+T@`(&```)8@*P=.L*T`(&8``(1Z`"1O`"!@<"`M
  71695. +M`"`B*@=.LH!G7B`%Z8`B%2!O`"`&@```!TK2L`@`DJL'2BJ!2JT`(%?`1`!(
  71696. +M@$C`*T``($AO`!P@!R!-(F\`'&$`_(Q83TJO`!QF0"`5D*H'2M"K!THJ@$JM
  71697. +M`"!7P$0`2(!(P"M``"!2A=3\`!`@;P`@NJ@`"&V&4H;6_``0(&\`(+RH``AM
  71698. +M`/]B</],WRS@WOP`#$YU(&\`!"\-0_KWVG``*E]@`/[@2JP3SF8$80#W+$YU
  71699. +M``````/X````'0````$``!*X```29@``$-@``!"T```0I```$%0``!`R```/
  71700. +M\@``#H(```X6```,^```#,H```RX```,J@``"O@```E*```(>```!Z0```%L
  71701. +M```!7````18```#F````H````(X```"`````7````%8```!0````3````"L`
  71702. +M```"```5E```%,8``!3````3D@``$XP``!#H```0W```#J(```Z:```.B```
  71703. +M#G0```YF```.8@``#EH```X\```.,@``#@H```WT```-X@``#=0```V\```-
  71704. +MN```#:0```V8```-D```#88```U\```-3```#3X```TZ```-*@``#1P```T(
  71705. +M```,_```#/0```SP```,[```#.@```S@````L````&@```!D````2```````
  71706. +M``/O@P```D!S=')C:'(``````0```3*#```"0'-T<F-A=``````"```!?```
  71707. +M`7"#```"7V]P96X````````!```!CH,```)`<F5A9`````````$```&L@P``
  71708. +M`D!C;&]S90```````0```;2&```"7U]?8W1Y<&4````%```&6@``!3X```1>
  71709. +M```$'````\J#```"7U]#6$0S,P`````<```2G```$HX``!)4```2/@``$4X`
  71710. +M`!$\```1)```$1H``!`@```0$@``#]X```_0```/K```#YH```^,```/@```
  71711. +M#W````\^```/,```"N8```K8```(4@``"#P```@F```("```!^P```<.```'
  71712. +M`(,```)`<W1R;F-P>0````(```R.```,=(,```-`7U]G971E;G8````````!
  71713. +M```,SH,```)?<W!R:6YT9@````$``!#@`````````_$````#`````$]05%,`
  71714. +M!`!````#\@```^H```!(1TU4`"`@(``@("``````!`````@``````````"`@
  71715. +M(``@("``<SIL;V-A;'1I;64`<SIZ;VYE:6YF;P``+P`````?````'````!\`
  71716. +M```>````'P```!X````?````'P```!X````?````'@```!\````?````'0``
  71717. +M`!\````>````'P```!X````?````'P```!X````?````'@```!\```%M```!
  71718. +M;G!O<VEX<G5L97,``%5.25A46@``("`@`%-U;DUO;E1U95=E9%1H=49R:5-A
  71719. +M=$IA;D9E8DUA<D%P<DUA>4IU;DIU;$%U9U-E<$]C=$YO=D1E8P`E+C-S("4N
  71720. +M,W,E,V0@)3`R+C)D.B4P,BXR9#HE,#(N,F0@)60*```````#[`````(````!
  71721. +M````$`````P````````#\@```^L```3V```#\@```^D```&<GOP`#$C7`0-P
  71722. +M_][\``Q.=5%/2-<#`%!/3G5(YS`"(A!**``-9P1P`&`<)`DF`"QL``!.KO_6
  71723. +M(@!2@&8(3KH``'#_8`(@`4S?0`Q.=5%/2.<_-BX`*DDF2"P3+T8`*"](`"Q*
  71724. +M*P`-9P9P`&```(Q**P`,9V8F3=?'>@!@6"1-8`)2BK7+9`9P"K`29O2WRF8$
  71725. +M*`I@!D'J``$H")B-(B\`*"0-)@0L;```3J[_T"P`4H!F"$ZZ``!P_V`^VH:V
  71726. +MAF8V2^H``9Z&<`!.N@``3KH``$J`9B)*AV:D8!PB!B0-)@<L;```3J[_T"H`
  71727. +M4H!F"$ZZ``!P_V`"(`5,WVS\4$].=5E/2.<_`BX`+!`O00`<2B@`#6<$<`!@
  71728. +M4E.!)@$B!B0'+&P``$ZN_[XJ`$ZN_WPH`%*%9P1*A&<.(`1.N@``*4```'#_
  71729. +M8"0B!G0`)@).KO^^+`!2@&<$2H1G#B`$3KH``"E```!P_V`"(`9,WT#\6$].
  71730. +M=9[\`0!(YS\&+@`J2"P5*BT`""`M``1G"B(`+&P``$ZN_Z88+0`-2(1(Q"!-
  71731. +M3KH``$J$9P1P`&!$(@9![P`@)`@L;```=D#EBTZN_F@H`$J'9@HB!DZN_]Q*
  71732. +M@&<:2H1G$G#_NH!G#"(")`5.KO]&2H!G!'``8`9.N@``</],WV#\WOP!`$YU
  71733. +M("\`!$CG(`(B`"QL``!T`$ZN_S1.KO]\="Y&`K""5\%$`4B!2,$@`4S?0`1.
  71734. +M=2`O``0@;P`((F\`#)[\`!!(YS<6+@`F22I(?`!AN$J`9GPB!RQL``!T`4ZN
  71735. +M_E9*@&=L(@=![```)`AV!$ZN_]!9@&92(@<D/```)Q!.KO\T2H!G0B('0>\`
  71736. +M("0(=A!.KO_6<@FP@6\N<)NP+P`@9B9![P`E(@@D"TZN_-`J`$'O`";1P"((
  71737. +M)`U.KOS04H!G!E*%9P)\`2('=`!.KOY6(`9,WVCLWOP`$$YU("\`!"(O``B>
  71738. +M_`(02.<_!BX`</\O0`(H+T$`)"('+&P``'0`=@%.KO^^+T``("('3J[_OBP`
  71739. +M3J[_?"H`+T`"+&8``,(H+P`D(@<D!';_3J[^.+""9@``KKR";```GBH$FH8H
  71740. +M!2`$<@%(02QX``1.KO\Z*D!*@&9J<@)(04ZN_RCBB"H`#(4```(`;1`@!7(!
  71741. +M2$%.KO\Z*D!*@&9&>D#GC4OO`"@P/`'_<@!![P`H$,%1R/_\8"RXA6\$(`5@
  71742. +M`B`$)@!.N@``(@<D#2QL``!.KO_0L(-G"DZN_WPO0`(L8`:8@TJ$;M!![P`H
  71743. +ML<UG#")-(`4L>``$3J[_+BHO`BQF!$*O`B@L+P`@O*\`)&P.(@<D!BQL``!V
  71744. +M_TZN_[XL+P(H9PH@!4ZZ```I0```(`9,WV#\WOP"$$YUGOP!"$CG-Q8N`"9)
  71745. +M*D@L%4HM``UF``$8(`<$@```!`!G(`2````$`&=*4X!G6%.`9UQ3@&=>4X!G
  71746. +M9E.`9VQ@``#N2BT`#&<F(`9![P$D0^\!(&$`_=9*@&<4("\!)#=```(@+P$@
  71747. +M-H!P`&```,IP&6```+XB!BQL``!.KO\H)H!P`&```+(FAG``8```JG``8```
  71748. +MI"`&(A-A`/XV8```F"M3``AP`&```(XJ$TJM``1F#B(5+&P``$ZN_HPK0``$
  71749. +M("T`!&=B)``B!2QL``!.KOY<2H!F4B(&0>\`("0(=D#EBTZN_FA*@&<^(@5.
  71750. +MKO^F(BT`!$ZN_Z8B!DZN_]PB`G0`3J[_1AM\``$`#2J"*T(`!$'O`"`B""QL
  71751. +M``!.KO^X2H!G!"`"8`Y.N@``8`9P%BE```!P_TS?:.S>_`$(3G4@+P`$(B\`
  71752. +M""]O``P`!$CG#P8J+P`<+`$N`'`.3KH``"I`2H!F"G`,*4```'#_8$Y#U2+'
  71753. +M0IDBQD(M``TB!RQL``!.KO\H&T``#$AZ_G1(>OO:2'K[9$AZ^JQ(>OIV2'KZ
  71754. +M:"`%($U#^OI03KH``$_O`!@H`&P&($U.N@``(`1,WV#P3G4@+P`$(B\`""]O
  71755. +M``P`!"]O`!``""]O`!0`#"]O`!@`$$CG#0`H+P`4*B\`$"X`<`!*@68$<$#E
  71756. +MB`!```$O`"`'<O]A`/]&6$]*@&9`<`!*A&8$<$#EB`!```(O`"`%<O]A`/\H
  71757. +M6$]3@&8B<`!*KP`<9@1P0.6(`$```B\`("\`''+_80#_!EA/58!G$$'L``8O
  71758. +M2``03-\`L$[Z``!,WP"P3G4``````_@````"`````0``!EH```)<````````
  71759. +M`^^&```"7T1/4T)A<V4````0```%B```!2(```34```$O@``!(````/D```#
  71760. +MG````O````),```"!````;0```&.```!(@```.(```"F````,(,```)`7W-E
  71761. +M=&5R<@````4```4R```!Z@```/````"T````/H,```1`7V-H96-K7W-I9VYA
  71762. +M;',``````0```,J#```$0%]H86YD;&5?<VEG;F%L<P````$```#.@P``!$!C
  71763. +M;VYV97)T7V]S97)R```````#```#]@```5X```$\A@```E]E<G)N;P``````
  71764. +M!0``!7(```4Z```#^@```6(```%`@P```D!F<F5E`````````@``!<(```&@
  71765. +M@P```T!C:&MA8F]R=`````````$```.4@P```D!M86QL;V,``````0``!6:#
  71766. +M```#0%]A;&QO8U]F9````````0``!;2#```"7U]F86EL```````!```&9@``
  71767. +M``````/Q`````P````!/4%13``0`0````_(```/J````")LP('$``$9A:6QE
  71768. +M9"!T;R!I;FET:6%L:7-E($DO3P`````#\@```^D````G(&\`!")O``A(YR$6
  71769. +M)DDJ2$ZZ```B#20++&P``$ZN_[)*@&<$<`!@;$ZN_WPN`'(T1@&P@692(@).
  71770. +MKO^X2H!G#B(-3J[_LDJ`9P1P`&!&3J[_?"X`<F_2@;"!9BPB`G0`3J[_1DJ`
  71771. +M9QHB"TZN_[A*@&<0(@TD"TZN_[)*@&<$<`!@$DZN_WPN`"`'3KH``"E```!P
  71772. +M_TS?:(1.=0`````#[X,```-`8VAK86)O<G0````````!````$H8```)?1$]3
  71773. +M0F%S90````$````:@P``!$!C;VYV97)T7V]S97)R```````!````C(8```)?
  71774. +M97)R;F\```````$```"0`````````_$````#`````$]05%,`!`!````#\@``
  71775. +M`^D````.(&\`!"`O``@B+P`,GOP`#$C7`0-P`-[\``Q.=2`O``0B+P`(+V\`
  71776. +M#``$44](UP`#<`!03TYU``````/Q`````P````!/4%13``0``````_(```/I
  71777. +M````$"!O``0B;P`(("\`#$CG`10N`"9)*DAF!'``8!P@!R!+(DUR`$J`9PX2
  71778. +M&)(99@13@&;V2(%(P2`!3-\H@$YU``````/Q`````P````!/4%13``0`````
  71779. +M`_(```/I````!2!O``0@+P`(<@!@`A#!4X!D^DYU```#\0````,`````3U!4
  71780. +M4P`$``````/R```#Z0````P@+P`$(B\`"%E/+P<N`"]!``1.N@``2&\`!$AX
  71781. +M"`,O!TZZ``!/[P`,+A]83TYU``````/O@P```T!C:&MA8F]R=`````````$`
  71782. +M```4@P```E]I;V-T;````````0```"(````````#\0````,`````3U!44P`$
  71783. +M``````/R```#Z0````T@+P`$(B\`"%E/+P<N`"`!3KH``"]```1.N@``2&\`
  71784. +M!$AX"`0O!TZZ``!/[P`,+A]83TYU```#[X,```5`7VUA:V5?<')O=&5C=&EO
  71785. +M;@````````$````2@P```T!C:&MA8F]R=`````````$````:@P```E]I;V-T
  71786. +M;````````0```"@````````#\0````,`````3U!44P`$``````/R```#Z0``
  71787. +M`!`@;P`$("\`""(O``R>_``,2-<!`W#_*4```-[\``Q.=2!O``0@+P`((B\`
  71788. +M#)[\``Q(UP$#</\I0```WOP`#$YU```#[X8```)?97)R;F\```````(````X
  71789. +M````&`````````/Q`````P````!/4%13``0`0````_(```/I````#2`O``19
  71790. +M3R\'+@!.N@``2&\`!$AX"``O!TZZ``!/[P`,2H!G!'``8`0@+P`$+A]83TYU
  71791. +M``````/O@P```T!C:&MA8F]R=`````````$````,@P```E]I;V-T;```````
  71792. +M`0```!H````````#\0````,`````3U!44P`$``````/R```#Z0````\@+P`$
  71793. +M2.<&`$ZZ```L`'``3KH``&`&<`!.N@``*@`@!4ZZ``!*@&?N(`9.N@``<`0I
  71794. +M0```</],WP!@3G4```/O@P```T!S:6=S971M87-K``````(````L````"H,`
  71795. +M``1`7V-H96-K7W-I9VYA;',``````0```!*#```$0%]W86ET7W-I9VYA;',`
  71796. +M``````$````:@P``!$!?:&%N9&QE7W-I9VYA;',````!````(H8```)?97)R
  71797. +M;F\```````$````R`````````_$````#`````$]05%,`!`!````#\@```^D`
  71798. +M```H(&\`!$CG(Q8J2'X`0J<L;```<@(D#TZN_QQ/[P`$)D!*@&=2(@UT_DZN
  71799. +M_ZPN`&=&(@<D"TZN_YI*@&<Z(BL`!%[`1`!(@$C`+``B!TZN_Z9R`DZN_Q9*
  71800. +MAF<4(@U.KO^X2H!G!'``8#).N@``8"IP%"E```!@(DZN_WQ.N@``*4```$J'
  71801. +M9P8B!TZN_Z8@"V<()`MR`DZN_Q9P_TS?:,1.=0```^^&```"7T1/4T)A<V4`
  71802. +M```!````$(,```)`7W-E=&5R<@````$```!JA@```E]E<G)N;P```````@``
  71803. +M`(````!R@P``!$!C;VYV97)T7V]S97)R```````!````?`````````/Q````
  71804. +M`P````!/4%13``0`0````_(```/I```!ER!O``0@+P`((F\`#"]O`!``!"\'
  71805. +M+@`I2``>*4``&G(!L(%E'B\O``@O"6$``"103TJ`9PX@;``>0A`@!Y"L`!I@
  71806. +M`G``+A].=2!O``0B;P`(2.<`%"9)*DA@``3X$!5R);`!9@`$RE*-$!5(@$C`
  71807. +M2H!G``#6<B60@6<`!+1R')"!9P``S%.`9P`!)E.`9P`!@%.`9P`!HEF`9P`!
  71808. +M[%.`9P`"!%F`9P`"FEN`9P`##E.`9P`#,%.`9P`#6%.`9P`#>E6`9P`#H%.`
  71809. +M9P`#1E.`9P`$)E.`9P`$0E^`9P``HE.`9P``_%.`9P`!.E.`9P`!7%.`9P`!
  71810. +M=%>`9P``Y%6`9P`!TE.`9P`![E.`9P`"!E.`9P`"3%.`9P`":%6`9P`"=E6`
  71811. +M9P`"JE.`9P`"U%.`9P`"]%>`9P`#9E.`9P`#?E.`9P`#C&```^A3C6```^(@
  71812. +M*P`8:P9R!K"!;P9P`&```_XB*P`8Y8%![`!V+S`8`&$`!,983TJ`9@`#V&``
  71813. +M`^`@*P`8:P9R!K"!;P9P`&```\XB*P`8Y8%![``<+S`8`&$`!)983TJ`9@`#
  71814. +MJ&```[`@*P`0:P9R"["!;P9P`&```YXB*P`0Y8%![`%.+S`8`&$`!&983TJ`
  71815. +M9@`#>&```X`@*P`0:P9R"["!;P9P`&```VXB*P`0Y8%![`#"+S`8`&$`!#98
  71816. +M3TJ`9@`#2&```U!![`%^(DMA`/XZ2H!F``,T8``#/$'L`90B2V$`_B9*@&8`
  71817. +M`R!@``,H0>P!IB)+80#^$DJ`9@`##&```Q1(>``P2'@``B\K``QA``-Z3^\`
  71818. +M#$J`9@`"[F```O9(>``@2'@``B\K``QA``-<3^\`#$J`9@`"T&```MA(>``P
  71819. +M2'@``B\K``AA``,^3^\`#$J`9@`"LF```KH@*P`(<@Q.N@``<`Q*@6<"(`%(
  71820. +M>``P2'@``B\`80`#$$_O``Q*@&8``H1@``*,("L`'%*`2'@`,$AX``,O`&$`
  71821. +M`NY/[P`,2H!F``)B8``":DAX`"!(>``"+RL`"&$``M!/[P`,2H!F``)$8``"
  71822. +M3"`K``AR#$ZZ``!P#$J!9P(@`4AX`"!(>``"+P!A``*B3^\`#$J`9@`"%F``
  71823. +M`AY(>``P2'@``B\K``1A``*$3^\`#$J`9@`!^&```@`@*P`04H!(>``P2'@`
  71824. +M`B\`80`"8D_O``Q*@&8``=9@``'>2&P!L&$``K!83TJ`9@`!PF```<H,JP``
  71825. +M``P`"&T&0>P!LF`$0>P!MB\(80`"BEA/2H!F``&<8``!I$'L`;HB2V$`_(Y*
  71826. +M@&8``8A@``&00>P!P")+80#\>DJ`9@`!=&```7Q(>``P2'@``B\380`!Y$_O
  71827. +M``Q*@&8``5A@``%@+PMA``%D6$]*@&8``49@``%.0>P!S")+80#\.$J`9@`!
  71828. +M,F```3I(;`'680`"#%A/2H!F``$>8``!)B`K`!Q>@)"K`!AR!TZZ``!(>``P
  71829. +M2'@``B\`80`!?D_O``Q*@&8``/)@``#Z("L`&&<$4X!@`G`&(BL`'%Z!DH`@
  71830. +M`7('3KH``$AX`#!(>``"+P!A``%&3^\`#$J`9@``NF```,)(>``P2'@``2\K
  71831. +M`!AA``$H3^\`#$J`9@``G&```*1![`'8(DMA`/N.2H!F``"(8```D"`\```'
  71832. +M;-"K`!1R9$ZZ``!(>``P2'@``B\!80``Z$_O``Q*@&9<8&8@/```!VS0JP`4
  71833. +M2'@`,$AX``0O`&$``,9/[P`,2H!F.F!$("L`*&<,+P!A``$46$]*@&8F<`!@
  71834. +M+DJL`!I7P$0`2(!(P%.L`!I*@&<$<`!@%B!L`!X0U2E(`!Y2C4H59@#[!B`L
  71835. +M`!I,WR@`3G4@;P`$GOP`+$CG`1!#[P`(<`HBV%'(__Q![P`(3KH``"X`1^P`
  71836. +M#6`:(`=R"DZZ``!P,-*`%H%3BR`'<@I.N@``+@!*AV\(0>P``+?(8MI(:P`!
  71837. +M80``@%A/3-\(@-[\`"Q.=2`O``0B+P`(+V\`#``$2.<'!!HO`!<L`2X`2^P`
  71838. +M%V`<(`=R"DZZ``!P,-*`&H%3C2`'<@I.N@``+@!3ADJ';PY![``/N\ABV&`$
  71839. +M&H53C4'L``^[R&,((`93ADJ`;NQ(;0`!80``#EA/3-\@X$YU(&\`!"\-*D@@
  71840. +M+``:9Q@2'2!L`!X0@68$<`%@"E*L`!Y3K``:8.(J7TYU```#^`````\````!
  71841. +M```$O```!"8```02```#T````[P```.F```#H````X(```(X```")````A``
  71842. +M``'X```!R````9@```%H````$@````(```94```&4```!D0```8\```&%```
  71843. +M!@8```7@```%J@``!88```5:```%3@``!4@```4\```%,````#X````V````
  71844. +M'````!@````````#[X,```)?7T-81#,S``````D```7Z```%Z@``!:````60
  71845. +M```$W```!'X```1&```#&@```JR#```"0&UK=&EM90`````!```%@```````
  71846. +M``/Q`````P````!/4%13``0`0````_(```/J````>5-U;@!-;VX`5'5E`%=E
  71847. +M9`!4:'4`1G)I`%-A=```````````!`````@````,````$````!0````84W5N
  71848. +M9&%Y``!-;VYD87D``%1U97-D87D`5V5D;F5S9&%Y`%1H=7)S9&%Y``!&<FED
  71849. +M87D``%-A='5R9&%Y```````X````0````$@```!0````6@```&0```!L2F%N
  71850. +M`$9E8@!-87(`07!R`$UA>0!*=6X`2G5L`$%U9P!397``3V-T`$YO=@!$96,`
  71851. +M````D@```)8```":````G@```*(```"F````J@```*X```"R````M@```+H`
  71852. +M``"^2F%N=6%R>0!&96)R=6%R>0``36%R8V@`07!R:6P`36%Y`$IU;F4``$IU
  71853. +M;'D``$%U9W5S=```4V5P=&5M8F5R`$]C=&]B97(`3F]V96UB97(``$1E8V5M
  71854. +M8F5R``````#R````^@```00```$*```!$````10```$:```!(````2@```$R
  71855. +M```!.@```40E82`E8B`E92`E2#HE33HE4R`E60``)6TO)60O)7D@)4@Z)4TZ
  71856. +M)5,`)6TO)60O)7D```H`4$T``$%-```E2#HE30`E23HE33HE4R`E<``E2#HE
  71857. +M33HE4P``"0`E;2\E9"\E>0````````/L````)@````$```%Z```!=@```7(`
  71858. +M``%N```!:@```68```%B```!7@```5H```%6```!4@```4X```#N````Z@``
  71859. +M`.8```#B````W@```-H```#6````T@```,X```#*````Q@```,(```".````
  71860. +MB@```(8```""````?@```'H```!V````-````#`````L````*````"0````@
  71861. +M````'`````````/R```#ZP````D```/R```#Z0```!8@;P`$("\`"$CG)P(N
  71862. +M`"((+&P``"0\```#[4ZN_^(L`$ZZ``!*AF<<(`8B!TZZ```J`"(&3J[_W$J`
  71863. +M9@1*A6<$(`5@#DZN_WQ.N@``*4```'#_3-]`Y$YU```#[X8```)?1$]30F%S
  71864. +M90````$````2@P```T!C:&MA8F]R=`````````$````B@P``!$!?9&]?=')U
  71865. +M;F-A=&4````````!````+H,```1`8V]N=F5R=%]O<V5R<@```````0```$J&
  71866. +M```"7V5R<FYO```````!````3@````````/Q`````P````!/4%13``0`0```
  71867. +M`_(```/I````U2!O``0B;P`(("\`#"(O`!`O;P`4``0O;P`8``@O;P`<``R>
  71868. +M_``P2.<O-BXO`%@O2``L*@`H`7Q`Y8XO0``D+T$`*"])`#!P0.6(3KH``"I`
  71869. +M+T``1"`%4H!F$BQL``!.KO_*+T``0$*O`%!@)DAO`$!(>`@!+P5.N@``3^\`
  71870. +M#%*`9@1"KP!`<`$O0`!0(`5.N@``(`12@&82+&P``$ZN_\0O0``\0J\`3&!&
  71871. +MNH1F#"]O`$``/$*O`$Q@-DAO`#Q(>`@!+P1.N@``3^\`#%*`9@9P`"]``#PB
  71872. +M+P`\LJ\`0%;`1`!(@$C`+T``3"`$3KH``'#_OH!F$"!L```O:`#@`#A"KP!(
  71873. +M8%!P_KZ`9@PO;P`\`#A"KP!(8#Y(;P`X2'@(`2\'3KH``$_O``Q2@&8&<``O
  71874. +M0``X("\`."(O`#RR@&<*L*\`0&<$<`%@`G``+T``2"`'3KH``$JO`$!G``%D
  71875. +M2J\`/&<``5Q*KP`X9@92AV8``5`@#6<``40F37@`+V\`,``T8```K$J$9@8@
  71876. +M;P`L8`(@521(>@,J2&`:4H40%7(JL`%G#'(BL`%G!G(*L`%F`E*%4HU*%6;B
  71877. +M*F\`1"!-T<8B2]/%3>D``;W(920@!M"&T(4L`"!-3KH``"I`2H!G``#:(`N0
  71878. +MKP!$)DW7P"]-`$0@2Q"\`"!4BQ%\`"(``2I*8"`0%7(BL`%G!G(JL`%F!A;\
  71879. +M`"I@"G(*L`%F!!;\`"L6W4H59MP6_``B4H18KP`T*F\`-$J59@#_3D(3*F\`
  71880. +M7"`-9Q`B#2QL``!T_DZN_ZPH`&`">`!*A&8$(`UF/"IO`$0O+P!@+P0O+P!0
  71881. +M+R\`1"\O`%PO+P!0("\`6"(O`&@@34ZZ``!/[P`8*@!2@&<:($U.N@``(`5@
  71882. +M>"QL``!.KO]\3KH``"E```!*A&<2(@0L;```3J[_IF`&<`PI0```("\`0&<0
  71883. +M2J\`4&<*(@`L;```3J[_W"`O`#QG$$JO`$QG"B(`+&P``$ZN_]P@+P`X9Q!*
  71884. +MKP!(9PHB`"QL``!.KO_<*F\`1"`-9P8@34ZZ``!P_TS?;/3>_``P3G4@;P`$
  71885. +M(F\`""`O``PB+P`0+V\`%``$+V\`&``(+P4J+P`,+P4O+P`,2'C__V$`_-A/
  71886. +M[P`,*A].=0```^^#```"0&UA;&QO8P`````!````3(8```)?1$]30F%S90``
  71887. +M``@```+\```"Y@```M````*R```"G````D@```":````7(,```)?:6]C=&P`
  71888. +M``````,```$D````Q@```'B#```$0%]P<V5U9&]?8VQO<V4```````,```%4
  71889. +M````[@```)"&```!7U]U<P````$```#X@P```D!R96%L;&]C`````0```=B#
  71890. +M```$0%]S=&%R=%]P<F]C97-S``````$```*$@P```D!F<F5E`````````@``
  71891. +M`PX```*4@P``!$!C;VYV97)T7V]S97)R```````!```"I(8```)?97)R;F\`
  71892. +M``````(```*^```"J`````````/Q`````P````!/4%13``0`0````_(```/I
  71893. +M`````G`!3G5P`4YU```#\0````,`````3U!44P`$``````/R```#Z0````X@
  71894. +M+P`$+P<N`$ZZ```@!R!L``!R`$ZZ``!@#"`L``!.N@``3KH``"!L``!.N@``
  71895. +M2H!GZ'``+A].=0```^^#```#0&-H:V%B;W)T`````````0````J&```#7U]O
  71896. +M9&1?=&EM97(``````@```"@````0@P``!$!?=&EM97)?<W1A<G0````````!
  71897. +M````%H8```-?7V]D9%]S:6<````````!````'(,```1`7W=A:71?<VEG;F%L
  71898. +M<P```````0```""#```$0%]H86YD;&5?<VEG;F%L<P````$````D@P``!$!?
  71899. +M=&EM97)?97AP:7)E9``````!````+`````````/Q`````P````!/4%13``0`
  71900. +M0````_(```/I````#R!O``0@+P`(2.<!!"X`*DA.N@``+P=(>`,!+PU.N@``
  71901. +M3^\`#$S?((!.=2!O``0@+P`(2.<!!$S?((!@S````^^#```#0&-H:V%B;W)T
  71902. +M`````````0```!*#```"7V]P96X````````!````'@````````/Q`````P``
  71903. +M``!/4%13``0``````_(```/I````(R`O``0@;P`((B\`#%E/2.<#-"P!+@`J
  71904. +M2$ZZ```@!TZZ```F0$J`9T0(*P`!``-G-@@K``,``V<6(&L`&"](`!0@:P`$
  71905. +M<`!R`B)O`!1.D2!K`!0O2``4(`8@:P`$(DTD;P`43I)@"'`-*4```'#_3-\L
  71906. +MP%A/3G4@+P`$(&\`""(O``Q(YP,$3-\@P&"````#[X,```-`8VAK86)O<G0`
  71907. +M```````!````&H,```-`7V9I;F1?9F0````````!````((8```)?97)R;F\`
  71908. +M``````$```!J`````````_$````#`````$]05%,`!`!````#\@```^D````,
  71909. +M(&\`!%%/+PTJ2$'O``1.N@``2H!J!'#_8`X@#6<&("\`!"J`("\`!"I?4$].
  71910. +M=0`````#[X,```-`7V=E='1I;64````````!````$`````````/Q`````P``
  71911. +M``!/4%13``0``````_(```/I````'2!O``2>_`!`2.<[%BI(3KH``"`-9U)*
  71912. +M%6=.(@U![P`@)`@L;```=D!X`$ZN_'8N`&TV3J[_?"P`4H!.N@``)D!*@&<D
  71913. +MOH9G%"8&4H,B#20+3J[\=DJ`;Q`@`F`.($(B2Q+89OP@"V`"<`!,WVC<WOP`
  71914. +M0$YU```#[X,```-`8VAK86)O<G0````````!````$(8```)?1$]30F%S90``
  71915. +M``$````D@P```D!M86QL;V,``````0```#P````````#\0````,`````3U!4
  71916. +M4P`$`$````/R```#Z0```!,@;P`$(F\`"$CG,Q(F22((+&P``'3^3J[_K"X`
  71917. +M3KH``$J'9QHB"R0'=@!.KOY$+``B`DZN_Z9*AF<$(`-@!DZZ``!P_TS?2,Q.
  71918. +M=0`````#[X8```)?1$]30F%S90````$````2@P```T!C:&MA8F]R=```````
  71919. +M``$````>@P```D!?<V5T97)R`````0```$`````````#\0````,`````3U!4
  71920. +M4P`$`$````/R```#Z0```"0@;P`$GOP`#$CG`10J2$H89OQ3B)'-(`@F3=?`
  71921. +M78M^84ZZ```O+```2&P``$AO`!=.N@``3^\`#$'O``\B2$H99OQ3B9/((`ER
  71922. +M!;"!;PA![P`*T<!@!$'O``\O"$AL``0O"TZZ``!/[P`,%H<@37``3KH``$J`
  71923. +M9@I2!W!ZO@!OZD(5(`U,WRB`WOP`#$YU``````/X`````@````$```!>````
  71924. +M*@````````/O@P```T!C:&MA8F]R=`````````$````BA@```5]?=7,````!
  71925. +M````)H,```-?7W-P<FEN=&8````````"````9````#*#```#0%]?86-C97-S
  71926. +M`````````0```'(````````#\0````,`````3U!44P`$`$````/R```#Z@``
  71927. +M``(E;'@`825S`````_(```/I````!B!O``0O#2I(3KH``"!-<$#IB"I?3OH`
  71928. +M`````^^#```#0&-H:V%B;W)T`````````0````J#```"0&=E=&-W9``````!
  71929. +M````%@````````/Q`````P````!/4%13``0``````_(```/I````#R!O``0@
  71930. +M+P`(2.<A!BX`*DA.N@``(`=.N@``)``B#2QL``!.KO]&2H!G!'``8`9.N@``
  71931. +M</],WV"$3G4``````^^#```#0&-H:V%B;W)T`````````0```!*#```%0%]M
  71932. +M86ME7W!R;W1E8W1I;VX````````!````&(8```)?1$]30F%S90````$````@
  71933. +M@P```D!?<V5T97)R`````0```#`````````#\0````,`````3U!44P`$`$``
  71934. +M``/R```#Z0```!P@+P`$(B\`""]O``P`!%%/2.<'`"HO`!@L`2X`3KH``"`'
  71935. +M3KH``$J`9QHB0"!I`!@O2``0(`8B!2!I``0B;P`03I%@`G#_3-\`X%!/3G4@
  71936. +M+P`$(B\`""]O``P`!$CG!P`J+P`0+T4`$$S?`.!@H``````#[X,```-`8VAK
  71937. +M86)O<G0````````!````'H,```-`7V9I;F1?9F0````````!````)```````
  71938. +M``/Q`````P````!/4%13``0``````_(```/I````'"`O``0@;P`((B\`#%E/
  71939. +M2.<#-"P!+@`J2$ZZ```@!TZZ```F0$J`9R8(*P````-G&"!K`!`O2``4(`8@
  71940. +M:P`$(DTD;P`43I)@"'`-*4```'#_3-\LP%A/3G4@+P`$(&\`""(O``Q(YP,$
  71941. +M3-\@P&">``````/O@P```T!C:&MA8F]R=`````````$````:@P```T!?9FEN
  71942. +M9%]F9`````````$````@A@```E]E<G)N;P```````0```$P````````#\0``
  71943. +M``,`````3U!44P`$`$````/R```#Z0```($@+P`$(&\`"")O``PO;P`0``0O
  71944. +M;P`4``B>_``L2.<_-B9)*D@O0`!`)&\`7"`*9PY*DF8*2JH`!&8$<`%@`G``
  71945. +M<@`O0``T)`UG`B(5=``O00`L)@MG`B03>@!^`2]"`#!@4B@O`"S(ARPO`##,
  71946. +MATZZ``!*A&8$2H9G-B`%3KH``"1`2H!F!G#_8``!;DJ$9P@(*@````-G#$J&
  71947. +M9Q0(*@`!``-F#'`-*4```'#_8``!2E*%WH>ZKP!`;:@D;P!<(`IG$"`2(BH`
  71948. +M!"!L``!.N@``8`@@;```3KH``'H`(`5"KP!0>@!^`2]``"A@.B@O`"S(ARPO
  71949. +M`##,ATJ$9@1*AF<B(`5.N@``(D`@:0`(+T@`/"`$(@8@:0`$(F\`/$Z1@:\`
  71950. +M4%*%WH>ZKP!`;<`H+P!0(`12@&<&2J\`-&<(<`!.N@``8`H@+```@(1.N@``
  71951. +M+T``3'P`>`$N+P`P*B\`*&!P("\`+,"$+T``2"('PH0O00!$2H!F!$J!9U(@
  71952. +M!DZZ```B0"!I``Q(;P!$+T@`/"!I``1#[P!,+&\`/$Z66$\@+P!(9@HB#6<&
  71953. +M(@1&@<.5("\`1&8*(@MG!B($1H'#DTJO`$AF!DJO`$1G`E*%4H;8A+RO`$!M
  71954. +MBB`O`$Q.N@``2H5F%"!L``!.N@``2H!F"$JO`#1G`/[H(`5,WVS\WOP`+$YU
  71955. +M``````/O@P```T!C:&MA8F]R=`````````$```!P@P```T!?9FEN9%]F9```
  71956. +M``````,```%^```!!````'Z&```"7V5R<FYO```````!````J(8```-?7V]D
  71957. +M9%]T:6UE<@`````#```!Y````-0```#*@P``!$!?=&EM97)?<W1A<G0`````
  71958. +M```!````SH,```1`7W1I;65R7V%B;W)T`````````0```-B#```$0%]C:&5C
  71959. +M:U]S:6=N86QS``````$```%`A@```U]?;V1D7W-I9P````````$```%&@P``
  71960. +M!$!?=V%I=%]S:6=N86QS```````!```!3(,```1`7VAA;F1L95]S:6=N86QS
  71961. +M`````0```=R#```$0%]T:6UE<E]E>'!I<F5D``````$```'H`````````_$`
  71962. +M```#`````$]05%,`!`!````#\@```^D````@44](YR,D+B\`($ZZ```L+P`H
  71963. +M(`=.N@``*D!*@&=8("\`)%>`9PQ3@&<.<!8I0```8$1P#,"58$`@%70,S((D
  71964. +M``)"__.$ABJ"<@3"@G0$P(*P@6<>+T$`&"!M`"`O2``4(&T`!$/O`!AP`"1O
  71965. +M`!1.DF`&<`!@`G#_3-\DQ%!/3G4```/O@P```T!C:&MA8F]R=`````````$`
  71966. +M```,@P```T!?9FEN9%]F9`````````$````6A@```E]E<G)N;P```````0``
  71967. +M`"X````````#\0````,`````3U!44P`$`$````/R```#Z0````````/Q````
  71968. +M`P````!/4%13``0``````_(```/J````WF%M:6=A('-P96-I9FEC(&5R<F]R
  71969. +M````````56YK;F]W;B!E<G)O<@!N;W0@;W=N97(`;F\@<W5C:"!F:6QE(&]R
  71970. +M(&1I<F5C=&]R>0!N;R!S=6-H('!R;V-E<W,`:6YT97)R=7!T960@<WES=&5M
  71971. +M(&-A;&P`:2]O(&5R<F]R`&YO('-U8V@@9&5V:6-E(&]R(&%D9')E<W,`87)G
  71972. +M=6UE;G0@;&ES="!T;V\@;&]N9P``97AE8R!F;W)M870@97)R;W(`8F%D(&9I
  71973. +M;&4@;G5M8F5R`&YO(&-H:6QD('!R;V-E<W,``&YO(&UO<F4@<')O8V5S<V5S
  71974. +M`&YO="!E;F]U9V@@;65M;W)Y`'!E<FUI<W-I;VX@9&5N:65D`&)A9"!A9&1R
  71975. +M97-S`&)L;V-K(&1E=FEC92!R97%U:7)E9`!M;W5N="!D979I8V5S(&)U<WD`
  71976. +M`&9I;&4@97AI<W1S`&-R;W-S+61E=FEC92!L:6YK`&YO('-U8V@@9&5V:6-E
  71977. +M``!N;W0@82!D:7)E8W1O<GD`:7,@82!D:7)E8W1O<GD``&EN=F%L:60@87)G
  71978. +M=6UE;G0``&9I;&4@=&%B;&4@;W9E<F9L;W<`=&]O(&UA;GD@;W!E;B!F:6QE
  71979. +M<P!N;W0@82!T>7!E=W)I=&5R``!T97AT(&9I;&4@8G5S>0``9FEL92!T;V\@
  71980. +M8FEG``!N;R!S<&%C92!L969T(&]N(&1E=FEC90!I;&QE9V%L('-E96L``')E
  71981. +M860M;VYL>2!F:6QE('-Y<W1E;0!T;V\@;6%N>2!L:6YK<P``8G)O:V5N('!I
  71982. +M<&4`;6%T:"!A<F=U;65N=`!R97-U;'0@=&]O(&QA<F=E``!)+T\@<W1R96%M
  71983. +M(&5M<'1Y``!F:6QE(&YA;64@=&]O(&QO;F<``&1I<F5C=&]R>2!N;W0@96UP
  71984. +M='D`=&]O(&UA;GD@<V]F="!L:6YK<R`H;&]O<#\I`````!H````H````,@``
  71985. +M`$P```!<````=````'X```"8````L````,(```#2````Y````/8```$(```!
  71986. +M&@```28```$\```!4````5P```%N```!?@```8X```&>```!L````<0```'8
  71987. +M```!Z@```?H```((```"(````BX```)$```"5````F````)N```"@````I(`
  71988. +M``*F```"N@```"8``````^P````H`````0```VX```-J```#9@```V(```->
  71989. +M```#6@```U8```-2```#3@```TH```-&```#0@```SX```,Z```#-@```S(`
  71990. +M``,N```#*@```R8```,B```#'@```QH```,6```#$@```PX```,*```#!@``
  71991. +M`P(```+^```"^@```O8```+R```"[@```NH```+F```"X@```MX```+:```"
  71992. +MU@```!8````````#\@```^D```!%("\`!"E```!*@&<``(9R9Y"!9P``@E6`
  71993. +M9P``@'()D(%G?%.`9WA3@&=T4X!G<%.`9VQ3@&=H4X!G:%.`9VAR49"!9V93
  71994. +M@&=F4X!G9E.`9V93@&=F4X!G9E6`9V93@&=F4X!G9E.`9V95@&=F4X!G9E.`
  71995. +M9V93@&=F4X!G9E.`9V95@&=F4X!G9E.`9V93@&=F8&AP`&!F<`Q@8G`+8%YP
  71996. +M%F!:<`=@5G`(8%)P$&!.<!%@2G`"8$9P`F!"<!9@/G`'8#IP%F`V<"1@,G`6
  71997. +M8"YP%F`J<!Y@)G`28")P)6`><"9@&G`38!9P%F`2<!Q@#G`-8`IP#6`&<`U@
  71998. +M`G#_3G4O#BQL``!.KO]\80#^^BE````L7TYU```#^`````$````!```!#@``
  71999. +M``````/OA@```E]?3U-%4E(``````0````:&```"7T1/4T)A<V4````!```!
  72000. +M`@````````/Q`````P````!/4%13``0`0````_(```/K`````0```_(```/I
  72001. +M````!4ZZ``!.N@``3KH``'(&3OH````````#[X,```-`8VAK86)O<G0`````
  72002. +M```!`````H,```-`7V-L;W-E7V%L;``````!````!H,```)`9V5T<&ED````
  72003. +M``$````*@P```D!K:6QL`````````0```!`````````#\0````,`````3U!4
  72004. +M4P`$``````/R```#Z0```%D@;P`$("\`"%E/2.<!%BX`+T@`$"!O`!`J4&!D
  72005. +M<`VP+0`(9EH@+0"L9P;E@"!`8`*1R"9(("T`G+"'9S0@+0"@L(=G+"`M`."P
  72006. +MAV<D(`MG+B`K`!RPAV<8("L`(+"'9Q`@*P`XL(=G""`K`#"PAV8.(DUP8.^(
  72007. +M+'@`!$ZN_KPJ54J59IA,WVB`6$].=2`O``0B+P`(2.<!`BX`(`%3@&<,4X!G
  72008. +M"%.`9P1=@&8L+'@`!$ZN_WP@;```T/P!EB`'80#_2"!L``#0_`&D(`=A`/\Z
  72009. +M3J[_=G``8`AP%BE```!P_TS?0(!.=2`O``0B+P`(2.<&!"P!*@!.N@``2H5J
  72010. +M`D2%NJP``&8.2H9G!B`&3KH``'``8$@@!4ZZ```J0$J`9P9*K0`49PIP`RE`
  72011. +M``!P_V`L(`9G*"(M`!#!06$`_U@B`'`)O(!F%'(!*T$`%"M``!AP%$ZZ``!P
  72012. +M`&`"(`%,WR!@3G4``````^^&```"7U-Y<T)A<V4````"````Q````+:&```"
  72013. +M7V5R<FYO```````"```!*@```-R#```#0&-H:V%B;W)T`````````0```/B&
  72014. +M```#7U]O=7)?<&ED`````````0```0*#```$0%]S:6=?9&ES<&%T8V@`````
  72015. +M``(```%4```!#H,```-`7V9I;F1?<&ED```````!```!&`````````/Q````
  72016. +M`P````!/4%13``0`0````_(```/I````0R!O``1(YP`&*D@B32QX``1.KO\$
  72017. +M($U,WV``3OH``"`O``1(YP$$+@`J;``(8`X@+0`,L(=F!"`-8`@J54J59NYP
  72018. +M`$S?((!.=4CG(`)![``(3KH``"`L```B+```)`"S@@*"`'___RE"``12@BE"
  72019. +M```O`2\`2&P``$AL`!1.N@``3^\`$"QX``1.KOUF*4``.&<00>P`%'``3KH`
  72020. +M`"E``#1F"DAL``Y.N@``6$],WT`$3G5(YP`&("P`.&<*($`L>``$3J[]8$JL
  72021. +M`#1G."QX``1.KO]\8`PB37`<+'@`!$ZN_RX@;``T+'@`!$ZN_HPJ0$J`9N(@
  72022. +M;``T3KH``"QX``1.KO]V3-]@`$YU``````/X`````@````$```"D````=@``
  72023. +M``P````"````]@```.0```#(````N````)X```"4````C@```'H```!N````
  72024. +M:````$X````J`````````^^#```"0&9R964````````!````'(,```)`3F5W
  72025. +M3&ES=`````$```!2A@```5]?=7,````!````5H8```1?7W-T87)T=7!?=&EM
  72026. +M90```````0```%J#```#7U]S<')I;G1F`````````0```'Z#```#0$-R96%T
  72027. +M95!O<G0``````0```)J#```"7U]F86EL```````!````J(,```-`1&5L971E
  72028. +M4&]R=``````!````^@````````/Q`````P````!/4%13``0`0````_(```/J
  72029. +M````!F1O;W(N)6QX+B5L>```3F\@;65M;W)Y`````_(```/K````#P```_(`
  72030. +M``/I````+R!O``0@+P`((B\`#")O`!`O;P`4``0O;P`8``A93TCG#S8H+P`L
  72031. +M*B\`*"P!+@`J22](`"`L>``$3J[]9B9`2H!G,"!+(`1.KOUR)$!*@&<B(`UG
  72032. +M""5-`"@E10`D(&\`("`'(DHB!DZN_D1*`&8$(`I@%B`*9P8@2DZN_6P@"V<&
  72033. +M($M.N@``<`!,WVSP6$].=2!O``1(YP`&*D@@#6<8(DTL>``$3J[^/B!M``Y.
  72034. +MN@``($U.KOUL3-]@`$YU```#[X,```-`1&5L971E4&]R=``````"````K@``
  72035. +M`(0````````#\0````,`````3U!44P`$``````/R```#Z0```!0@;P`$("\`
  72036. +M"$CG(08N`"I(3KH``"(-+&P``$ZN_XA*@&<B(@!.KO^F(`=.N@``(`=.N@``
  72037. +M)``B#4ZN_T9*@&<$<`!@!DZZ``!P_TS?8(1.=0```^^#```#0&-H:V%B;W)T
  72038. +M`````````0```!*&```"7T1/4T)A<V4````!````&(,```5`7VUA:V5?<')O
  72039. +M=&5C=&EO;@````````(````R````+(,```)`7W-E=&5R<@````$```!&````
  72040. +M`````_$````#`````$]05%,`!`!````#\@```^D```!U(&\`!")O``@O;P`,
  72041. +M``0@+P`0+V\`%``(2.<'-"X`)&\`("9)*D@L*P!T)*\`'$*J`!(U?``!``Y"
  72042. +M:@`0)7P```(``#(U?``"``PE:P"``#8@*P!\9A`B*P`$;PHE?```"```%F`$
  72043. +M)4``%B53``1!ZP"$3KH``"5``"(E0``:)4``*B`K``1:@&<^58!G4%F`9T!5
  72044. +M@&9F(`UG'$AX`/](;```+PU.N@``3^\`#"H`;P8E10`68`@E?````0``%B5\
  72045. +M``"@```(8$HE?```$```"&!`)7P``$````A\`&`T2I-F$$HK``AF"B5\```@
  72046. +M```(8"`E?```@```"&`6("L`!&\&<$#AB&`&(#P``(``)4``"$J'9P)\`"`&
  72047. +M3KH``(&J``A,WRS@3G4@;P`$(F\`"%E/2.<C%BI(?@`O20`80J<L;```<@(D
  72048. +M#TZN_QQ/[P`$)D!*@&=0(@UT_DZN_ZPN`&=$(@<D"TZN_YI*@&<X(@=.KO\N
  72049. +M2H!7QD0&2(9(QDJ`9P8B`$ZN_Z8@!^6`+R\`&"!`+R@`#")"(`8@36$`_GI0
  72050. +M3WP`8`Y\_TZN_WQ.N@``*4```$J'9P8B!TZN_Z8@"V<()`MR`DZN_Q8@!DS?
  72051. +M:,183TYU```#^`````$````!````H`````````/O@P```T!?86UI9V$R9VUT
  72052. +M``````$```!T@P```U]R96%D;&EN:P````````$```"F@P```T!?;6%K95]M
  72053. +M;V1E``````$```$<A@```E]$3U-"87-E`````0```4*#```$0&-O;G9E<G1?
  72054. +M;W-E<G(```````$```&NA@```E]E<G)N;P```````0```;(````````#\0``
  72055. +M``,`````3U!44P`$`$````/R```#ZP```$````/R```#^P``")L11`!?<V5T
  72056. +M:FUP`'1E>'0`0%]L;VYG:FUP`$!?<V5T:FUP`%]?;&]N9VIM<`!?7W-E=&IM
  72057. +M<`!S<')I;G1F`%],5D]287=$;T9M=`!?06)S17AE8T)A<V4`7U]S<')I;G1F
  72058. +M`'1M<&YA;2YC`%]M:W1E;7``0'1M<&YA;0!?=&UP;F%M`%]?34521T5$`'!O
  72059. +M<&5N+F,`7W=A:71P:60`0&9C;&]S90!`9G)E90!`7W-T87)T7W!R;V-E<W,`
  72060. +M0%]S971E<G(`7V5R<FYO`%]$3U-"87-E`$!F;W!E;@!?7V9I9F]?8F%S90!?
  72061. +M7V9I9F]?;V9F<V5T`$!M86QL;V,`0'!C;&]S90!?<&-L;W-E`$!P;W!E;@!?
  72062. +M<&]P96X`<W1A<G0N8P!`8V]N=F5R=%]O<V5R<@!?7W!R;V-E<W-E<P!?7W-T
  72063. +M86-K7W-I>F4`7U]N97AT7W!I9`!?7V1O;W)?;F%M90!?7W-T87)T=7!?<&]R
  72064. +M=`!?3&EN:V5R1$(`7U]S=&%R=%]P<F]C97-S`%]?8VAI;&1?9&]O<E]N86UE
  72065. +M`%]?8VAI;&1?8V]M;6%N9%]L96X`7U]C:&EL9%]C;VUM86YD`%]?8VAI;&1?
  72066. +M97AI=`!?7V-H:6QD7V5N=')Y`&=E='!I9"YC`%]?;W5R7W!I9`!`8VAK86)O
  72067. +M<G0`0&=E='!I9`!?9V5T<&ED`'-I9VYA;"YC`%]?<VEG7VAA;F1L97)S`$!S
  72068. +M:6=N86P`7W-I9VYA;`!`<VEG=F5C`%]S:6=V96,`<VEG<V5T;6%S:RYC`$!?
  72069. +M<VEG7V1I<W!A=&-H`%]?<VEG7W!E;F1I;F<`7U]S:6=?;6%S:P!`<VEG8FQO
  72070. +M8VL`7W-I9V)L;V-K`$!S:6=S971M87-K`%]S:6=S971M87-K`'-T870N8P!?
  72071. +M<F5A9&QI;FL`0%]F:6)S=&%T`$!?;&9I8G-T870`7U]T96UP7V9N86UE`%]L
  72072. +M87-T7V5N=')Y`$!?9V5T7V-D`%]L87-T7V1I<@!`;'-T870`7VQS=&%T`$!S
  72073. +M=&%T`%]S=&%T`&1I<BYC`$!S965K9&ER`%]S965K9&ER`$!T96QL9&ER`%]T
  72074. +M96QL9&ER`$!R96%D9&ER`%]R96%D9&ER`$!C;&]S961I<@!?8VQO<V5D:7(`
  72075. +M0&]P96YD:7(`7V]P96YD:7(`9&ER7V1A=&$N8P!?7V=E=%]C9`!A8V-E<W,N
  72076. +M8P!`86-C97-S`%]A8V-E<W,`0%]?86-C97-S`%]?7V%C8V5S<P!F<W1A="YC
  72077. +M`%]I;V-T;`!`9G-T870`7V9S=&%T`'-Y;6QI;FLN8P!`<WEM;&EN:P!?<WEM
  72078. +M;&EN:P!M97-S86=E+F,`0&5X:70`7U]0<F]G<F%M3F%M90!?7U="96YC:$US
  72079. +M9P!?7W5S`%]?9F%I;`!?7VUE<W-A9V4`86QL;V-D;W,N8P!?06QL;V-$;W-/
  72080. +M8FIE8W1486=S`'-E=&IM<"YC`$!L;VYG:FUP`%]L;VYG:FUP`$!S971J;7``
  72081. +M9V5T:&]S=&YA;64N8P!?<W1R;F-P>0!?7W-Y<W1E;5]N86UE`$!G971H;W-T
  72082. +M;F%M90!?9V5T:&]S=&YA;64`<&5R<F]R+F,`7U]/4T524@!?<WES7V5R<FQI
  72083. +M<W0`7W-Y<U]N97)R`$!W<FET90!`<&5R<F]R`%]P97)R;W(`<VEG;&ES="YC
  72084. +M`%]S>7-?<VEG;&ES=`!W86ET-"YC`$!?:&%N9&QE7W-I9VYA;',`0%]W86ET
  72085. +M7W-I9VYA;',`0%]F<F5E7V5N=')Y`$!W86ET<&ED`$!W86ET`%]W86ET`$!W
  72086. +M86ET,P!?=V%I=#,`0'=A:70T`%]W86ET-`!P<V5U9&]?8RYC`$!?9G)E95]F
  72087. +M9`!`7V9I;F1?9F0`0%]P<V5U9&]?8VQO<V4`7U]P<V5U9&]?8VQO<V4`<FEN
  72088. +M9&5X+F,`0'-T<G)C:'(`0')I;F1E>`!?<FEN9&5X`&EN9&5X+F,`0'-T<F-H
  72089. +M<@!`:6YD97@`7VEN9&5X`'1I;65R<RYC`$!?9&5V:6-E7V-L;W-E`$!?9&5V
  72090. +M:6-E7V]P96X`0%]T:6UE<E]E>'!I<F5D`%]?=&EM97)?97AP:7)E9`!`7W1I
  72091. +M;65R7W-T87)T`%]?=&EM97)?<W1A<G0`0%]T:6UE<E]S:6<`7U]T:6UE<E]S
  72092. +M:6<`0%]T:6UE<E]A8F]R=`!?7W1I;65R7V%B;W)T`$!?9G)E95]T:6UE<@!?
  72093. +M7V9R965?=&EM97(`0%]A;&QO8U]T:6UE<@!?7V%L;&]C7W1I;65R`&9I9F]F
  72094. +M9"YC`%]?<W1A<G1U<%]T:6UE`$!?8VQE86YU<%]F:69O`%]?8VQE86YU<%]F
  72095. +M:69O`$!?:6YI=%]F:69O`%]?:6YI=%]F:69O`%]?9FEF;U]S:6<`7U]F:69O
  72096. +M7V]K`%]?1FEF;T)A<V4`8VQO<V4N8P!`8VQO<V4`7V-L;W-E`$!?7V-L;W-E
  72097. +M`%]?7V-L;W-E`&9I;&5S+F,`0%]L87-T7V9D`%]?;&%S=%]F9`!?7V9I;F1?
  72098. +M9F0`7U]F<F5E7V9D`$!?86QL;V-?9F0`7U]A;&QO8U]F9`!U=&EM92YC`$!?
  72099. +M9VUT,F%M:6=A`$!T:6UE`$!U=&EM90!?=71I;64`8F-O<'DN8P!`;65M;6]V
  72100. +M90!`8F-O<'D`7V)C;W!Y`&%M:6=A=&EM92YC`%]D87EL:6=H=`!?='IN86UE
  72101. +M`%]?0UA$,S,`0&QO8V%L=&EM90!`7V=E='1I;64`0&9T:6UE`%]F=&EM90!`
  72102. +M9V5T=&EM96]F9&%Y`%]G971T:6UE;V9D87D`=&EM96-O;G9E<G0N8P!?5&EM
  72103. +M97)"87-E`$!?86UI9V$R9VUT`%]?86UI9V$R9VUT`%]?9VUT,F%M:6=A`%]?
  72104. +M9V5T=&EM90!P=V0N8P!`9V5T;&]G:6X`7V=E=&QO9VEN`$!G971P=VYA;0!?
  72105. +M9V5T<'=N86T`0&=E='!W=6ED`%]G971P=W5I9`!?7V%M:6=A7W5S97(`<F5A
  72106. +M9&QI;FLN8P!?<W1R;&5N`$!R96%D;&EN:P!A;&QO8V$N8P!?;6%L;&]C`%]F
  72107. +M<F5E`%]A;&QO8V$`=6YL:6YK+F,`0'5N;&EN:P!?=6YL:6YK`'!I<&4N8P!`
  72108. +M<W1R8V%T`$!.97=,:7-T`$!S;V-K971P86ER`%]S;V-K971P86ER`$!P:7!E
  72109. +M`%]P:7!E`&=R<"YC`$!G971G<FYA;0!?9V5T9W)N86T`0&=E=&=R9VED`%]G
  72110. +M971G<F=I9`!S:6=N86QS+F,`7U]&4$524@!`7U]E>&ET`$!?9FEN9%]P:60`
  72111. +M0%]C;&5A;G5P7W!R;V-E<W-E<P!?7V-H:6QD<F5N7V5X:70`0%]I;FET7W!R
  72112. +M;V-E<W-E<P!`7V-L96%N=7!?<VEG;F%L<P!?7V-L96%N=7!?<VEG;F%L<P!`
  72113. +M7VEN:71?<VEG;F%L<P!?7VEN:71?<VEG;F%L<P!`0VAK7T%B;W)T`%]#:&M?
  72114. +M06)O<G0`7V-H:V%B;W)T`$!#6$9%4E(`7T-81D524@!?7VAA;F1L95]S:6=N
  72115. +M86QS`%]?=V%I=%]S:6=N86QS`$!?8VAE8VM?<VEG;F%L<P!?7V-H96-K7W-I
  72116. +M9VYA;',`7U]S:6=?9&ES<&%T8V@`0&%L87)M`%]A;&%R;0!?;6%I;BYC`$!M
  72117. +M86EN`$!?7V=E=&5N=@!`='%S;W)T`$!S=')N8W!Y`%]?7V-T>7!E`$!?:6YI
  72118. +M=%]U;FEX:6\`7U]?:6]B`%]?6$-%6$E4`%]3>7-"87-E`$!R96%L;&]C`%]?
  72119. +M7VUA:6X`0&UA:V5?96YV:7)O;@!?;6%K95]E;G9I<F]N`%]E;G9I<F]N`%]?
  72120. +M;V1D7W-I9P!?7V]D9%]T:6UE<@!U;6%S:RYC`$!U;6%S:P!?=6UA<VL`<')O
  72121. +M=&5C=&EO;BYC`$!?;6%K95]M;V1E`%]?;6%K95]M;V1E`$!?;6%K95]P<F]T
  72122. +M96-T:6]N`%]?;6%K95]P<F]T96-T:6]N`%]U<V5?86UI9V%?9FQA9W,`9VED
  72123. +M+F,`0&=E=&5G:60`7V=E=&5G:60`0&=E=&=I9`!?9V5T9VED`%]E>&ET+F,`
  72124. +M0%]E>&ET`%]?97AI=`!?7U]E>&ET`$!?8VQO<V5?86QL`%]?8VQO<V5?86QL
  72125. +M`&EO8W1L+F,`0&EO8W1L`&]P96XN8P!`7V%L;&]C7V%M:6=A9F0`0'-T<FEC
  72126. +M;7``7V]P96X`7U]?;W!E;@!C=&EM92YC`%]S<')I;G1F`$!R96%D`$!?='IS
  72127. +M970`7U]T>G-E=`!`;6MT:6UE`%]M:W1I;64`0&-T:6UE`%]C=&EM90!`87-C
  72128. +M=&EM90!?87-C=&EM90!`9VUT:6UE`%]G;71I;64`7VQO8V%L=&EM90!`='IS
  72129. +M971W86QL`%]T>G-E='=A;&P`0'1Z<V5T`%]T>G-E=`!?=&EM97IO;F4`86UI
  72130. +M9V%D;W,N8P!?7VEN:71?=6YI>&EO`%]?86QL;V-?86UI9V%F9`!`7V1O7W1R
  72131. +M=6YC871E`%]?9&]?=')U;F-A=&4`<F5N86UE+F,`0')E;F%M90!?<F5N86UE
  72132. +M`&-H;W=N+F,`0&9C:&]W;@!?9F-H;W=N`$!C:&]W;@!?8VAO=VX`8F-M<"YC
  72133. +M`$!B8VUP`%]B8VUP`&)Z97)O+F,`0&)Z97)O`%]B>F5R;P!F=')U;F-A=&4N
  72134. +M8P!`9G1R=6YC871E`%]F=')U;F-A=&4`9F-H;6]D+F,`0&9C:&UO9`!?9F-H
  72135. +M;6]D`&UK9FEF;RYC`$!M:VYO9`!?;6MN;V0`0&UK9FEF;P!?;6MF:69O`&ES
  72136. +M871T>2YC`$!I<V%T='D`7VES871T>0!S:6=P875S92YC`$!S:6=P875S90!?
  72137. +M<VEG<&%U<V4`<FUD:7(N8P!`<FUD:7(`7W)M9&ER`'-T<F9T:6UE+F,`0'-T
  72138. +M<F9T:6UE`%]S=')F=&EM90!T<G5N8V%T92YC`$!T<G5N8V%T90!?=')U;F-A
  72139. +M=&4`97AE8RYC`$!E>&5C`%]E>&5C`$!E97AE8P!?965X96,`=6ED+F,`0&=E
  72140. +M=&5U:60`7V=E=&5U:60`0&=E='5I9`!?9V5T=6ED`'-L965P+F,`0'-L965P
  72141. +M`%]S;&5E<`!C<F5A="YC`$!C<F5A=`!?8W)E870`0%]?8W)E870`7U]?8W)E
  72142. +M870`=W)I=&4N8P!?=W)I=&4`0%]?=W)I=&4`7U]?=W)I=&4`=&EM92YC`%]T
  72143. +M:6UE`&=E=&5N=BYC`%]?7V=E=&5N=@!L:6YK+F,`0&QI;FL`7VQI;FL`;6MT
  72144. +M96UP+F,`0&UK=&5M<`!G971W9"YC`$!G971C=V0`0&=E='=D`%]G971W9`!C
  72145. +M:&UO9"YC`$!C:&UO9`!?8VAM;V0`;'-E96LN8P!`;'-E96L`7VQS965K`$!?
  72146. +M7VQS965K`%]?7VQS965K`')E860N8P!?<F5A9`!`7U]R96%D`%]?7W)E860`
  72147. +M<V5L96-T+F,`0'-E;&5C=`!?<V5L96-T`&9C;G1L+F,`7V9C;G1L`&5R<F]R
  72148. +M7VUS9RYC`&5R<F]R+F,`7U]S971E<G(`7V-O;G9E<G1?;W-E<G(`86)O<G0N
  72149. +M8P!`:VEL;`!`86)O<G0`7V%B;W)T`&MI;&PN8P!?:VEL;`!P<F]C97-S97,N
  72150. +M8P!`1&5L971E4&]R=`!`0W)E871E4&]R=`!?7V-L96%N=7!?<')O8V5S<V5S
  72151. +M`%]?:6YI=%]P<F]C97-S97,`7U]F:6YD7W!I9`!?7V9R965?96YT<GD`9&5V
  72152. +M:6-E<RYC`%]?9&5V:6-E7V-L;W-E`%]?9&5V:6-E7V]P96X`;6MD:7(N8P!`
  72153. +M;6MD:7(`7VUK9&ER`&9I8G-T870M:&%R9"YC`%]?9FEB<W1A=`!?7VQF:6)S
  72154. +M=&%T`````0````$`"0`)`^D````$``X`%@`!`!@`!``!`"$`#@`!`"L````!
  72155. +M`#0`#``!``D`#`/I``(`/`!)``$`5@````$`8``I``,`"0`*`^D``0!H``(`
  72156. +M<0`$``$`>0````$`@0`$`^H``````($`"0/K``````"*`%0``P`)`&\#Z0`,
  72157. +M`)$`F@"B`*@`N`#"`,D`T0!5`-D`Y0#R``0`^P%>``$!`P%:``$!"P`(``$!
  72158. +M$@````$`@0`%`^H``````($``0/K``````$9`2T``P`)`,4#Z0`+`*(`P@$@
  72159. +M`3`!/`%)`50`\@%@`,D!;P`"`*D`Y@`!`7D`M@`!`($`!@/J``````"!``H#
  72160. +MZP````4!B0`D``$!FP`@``$!KP`<``$!OP`8``$!S`````$!V@)M``$`"0`#
  72161. +M`^D``@'C`>P``@'W`````0'_`````0('`H8``0`)`",#Z0`#`,("$`'L``0"
  72162. +M'P!B``$")P!:``$"+P`,``$"-P````$"/P+&``$`"0`5`^D`!`)+`EL![`)I
  72163. +M``0"=`!&``$"?@!"``$"B``$``$"E`````$"H`,"``(`"0":`^D`"0*F`K`!
  72164. +M[`*Z`,D"Q@+3`MX"Z``$`O(!U@`!`OD!S@`!`P`!G@`!`P8!E@`!`($`00/K
  72165. +M``````,,`_4``0`)`-`#Z0`)`M,"W@'L`,(!(`#)`/("Z`"B``H#$@,@``$#
  72166. +M&P,8``$#)`,(``$#+0,$``$#-@*0``$#/P*,``$#2`).``$#4@)*``$#7`%>
  72167. +M``$#90%:``$#;@48``(`"0`(`^D``0#)``("WP````$#>0````$`@0`"`^L`
  72168. +M```"`M,`!``!`N@````!`X(%,@`!``D`&P/I``,`P@*P`>P`!`.+`&```0.3
  72169. +M`%@``0.;``@``0.E`````0.O!6@``0`)`$$#Z0`&`,(!(`*Z`,D#M@'L``(#
  72170. +MO@`(``$#Q0````$#S`77``$`"0`.`^D``P"X`,D![``"`]8`"``!`]\````!
  72171. +M`^@%_P`"``D`/@/I``4#\0/X`,D$!@02``($%P#B``$$'@#4``$`@0`/`^H`
  72172. +M````!"@&A@`!``D`!P/I``$`R0`!!#,````!!$<&G``!``D`#P/I``0`#0*'
  72173. +M`!<":0`$!%``'@`!!%D`%@`!!&(`!``!``$````!!&H&S``!``D`!P/I``($
  72174. +M=P2!``($CP`(``$$G`````$$J0;I``(`"0`I`^D`!@#)!+($N@3'`,($T``"
  72175. +M!-@`!``!!.`````!`($`"`/J``````3H!U(``@`)```#Z0``````@0#&`^H`
  72176. +M```!!/("F``!!/\(1P`!``D`.@/I``4%!@47`,(%)@$P``@%-`#```$`D@"T
  72177. +M``$%/0"F``$%0P"B``$%20"2``$%4`"&``$%5P`0``$%7@````$%90BJ``$`
  72178. +M"0`2`^D``P5O!7D![``"!80`!``!!9,````!!:((V``!``D``P/I``$%J@`"
  72179. +M!;0`"``!!;P````!!<0(Z@`!``D``P/I``$%RP`"!=0`"``!!=L````!!>((
  72180. +M_``"``D`30/I``(%Z@7Y``P&"`$$``$&&`$```$&*`#(``$&-@"\``$&1`"H
  72181. +M``$&4`"D``$&7`!^``$&:@!Z``$&>`!2``$&A0!.``$&D@````$&H`````$`
  72182. +M@0`$`^H`````!JX);0`#``D`'@/I``($$@:W``0&Q@!4``$&U0!4``$&Y```
  72183. +M``$&\`````$`@0`%`^H````!!OP````!`($`!`/K````!`<'``P``0#E``@`
  72184. +M`0#9``0``0<1`````0<<";H``0`)`!8#Z0`#!6\%>0'L``0')`!0``$'*P!,
  72185. +M``$',@`$``$'.P````$'1`GL``(`"0!B`^D``P"B`,(`\@`(!TP!@``!!U8!
  72186. +M@``!!7H!3``!!V`!2``!!7`!+``!!VH!*``!!W0`,``!!W\````!`($``@/K
  72187. +M``````>*"H```0`)`!H#Z0`%`+@`R0>1!YT![``"!Z0`"``!!ZL````!![(*
  72188. +MOP`!``D`!P/I``$'N0`"!\,`#``!!\H````!!]$*U0`"``D`4@/I``8'W0?G
  72189. +M!^X']@@!`>P`!`@,`0X``0@3`0H``0@:``@``0@H`````0"!``P#Z@`````(
  72190. +M-@MU``$`"0`P`^D``@?N"$0`!@A/`'@``0A;`'0``0>2`"@``0AG`"```0@"
  72191. +M``0``0AS`````0A]"[X``@`)``L#Z0````8(@P`D``$(C0`D``$(EP`6``$(
  72192. +MH0`2``$(JP`$``$(M0````$`@0`)`^H````!"+\`!``!",P+Z@`!``D`*@/I
  72193. +M``8`P@$@"-8`N`#)`>P``@C?``P``0*G`````0CI#$```P`)`"P#Z0`""/$(
  72194. +M^0`!"0``+@`!`($`!P/J``````"!``$#ZP`````)"`R=``$`"0`V`^D`!@$@
  72195. +M`>P#M@=+`,(`R0`""1$`9``!"1D`8``!"2$-`P`"``D"&@/I`!4%>0#9`.4'
  72196. +M!P'L!6\'<P#R`+@`50)+"2<%!@47`,D`P@"B!Q$)+P02!OP`!`DY!]0``0E%
  72197. +M!\(``0E1!S8``0E7!S(``0"!`!4#Z@`````)70_\``(`"0`)`^D````$"6,`
  72198. +M%@`!"6T`$@`!"7<`!``!"8$````!`($`"0/J``````F+$"<``P`)`*D#Z0`-
  72199. +M"94$'0F<":0)KPG$"=,&=P9#!!8&D08G!@<`%`GE`IH``0GW`IH``0H)`EP`
  72200. +M`0H8`EP``0HG`EH``0HR`EH``0'M`E(``0H]`E(``0I'`D0``0I/`D```04'
  72201. +M`>H``0I7`>8``048`=```0IH`<P``0IW`;8``0J'`;(``0),`0P``0J7`0@`
  72202. +M`0JF`"@``0JM`"0``0"!``H#Z@``````@0!$`^L````#`EL!"``!`FD!!``!
  72203. +M`A``!``!"K0170`#``D"'0/I`!4#\0J["+\*P0K+"M,*W00&"N4`R0H(!N,&
  72204. +M0P:1"O0*^@L$`*(+#`#R!!8``PL6`WH``0L>`'@``0LL`'@``0"!`"P#Z@``
  72205. +M````@0`(`^L````(!($`'``!"SH`&``!"$0`%``!`3P`$``!!K<`#``!"T,`
  72206. +M"``!"TT`!``!!!(````!"UD4>P`!``D`!`/I`````@MA``0``0MH`````0MO
  72207. +M%(<``@`)`#X#Z0````0+?`!^``$+B`!Z``$+E``$``$+I@````$`@0`!`^L`
  72208. +M```!"[@````!"\D4U@`!``D``@/I````!`O/``0``0O8``0``0OA`````0OI
  72209. +M`````0OQ%.```0`)`!4#Z0`'"OH&=PM-">0&Q0<J!TL`!@OY`$P``0P``$@`
  72210. +M`0F=`"8``0P'`"(``0P/`````0P;`````0PG%2H``0`)`!,#Z0`"!7D![``"
  72211. +M#"\`#``!`[<````!##854P`"``D`F`/I``H,/`"X`,(+DP2R`2``R0Q,`>P$
  72212. +M$@`"#%8"2``!#%P````!`($``@/J``````QD%D0``P`)!6@#Z0`*#&L*P0K3
  72213. +M!^X*W0<C#'0,50DG!<L`$`Q[%9(``0R#%9(``0R+%80``0R3%8```0R;$/0`
  72214. +M`0RB$/```0RI$)0``0RR$)```0R[#I@``0S##I0``0?W#C```0S+#BP``0S6
  72215. +M#38``0SA#38``0SL#,8``0SS#,8``0"!`$@#Z@````,'W0`8``$,^@`4``$'
  72216. +MYP`,``$`@03V`^L`````#00<K``"``D!G`/I``L$%@=S`/(![`"B`,(!(`4&
  72217. +M"G8`N`#)``8*Y@7L``$-#P7,``$,/056``$-'05(``$-+0+8``$-.P+0``$`
  72218. +M@0`(`^H`````#4D>O``!``D`)P/I``0`P@$@`,D![``"#5(`"``!#5H````!
  72219. +M#6(?!``!``D`#@/I````!`UJ`"H``0UR`!P``0UZ``P``0V!`````0V('QH`
  72220. +M`0`)`!`#Z0````(-CP`,``$-E0````$-FQ\R``$`"0`%`^D````"#:,`"``!
  72221. +M#:H````!#;$?/P`!``D`#`/I``(#M@'L``(-O0`(``$-R`````$-TQ]@``$`
  72222. +M"0`-`^D``P.V`>P+DP`"#=P`"``!#>0````!#>P?B@`!``D`$`/I``$`P@`$
  72223. +M#?4`+``!#?P`(``!#@,`#``!#@L````!#A,?J@`!``D`#0/I``(#M@'L``(.
  72224. +M'``$``$.)`````$.+!_,``$`"0`/`^D`!0#"!08%%PIV`H<``@XW``0``0Y!
  72225. +M`````0Y+(`8``0`)`"@#Z0`$`2``P@"X`,D``@Y3``0``0Y:`````0YA($\`
  72226. +M`P`)`9<#Z0`"#(H'[@`"#FP`$@`!#G8````!`($`>0/J``````"!``D#ZP``
  72227. +M```.@"+2``$`"0`6`^D`!0#"`2`-+`'L`,D``@Z+``@``0Z5`````0Z?(Q``
  72228. +M`0`)`-4#Z0`*`,(!(`"B`*@+#`02!8,#M@#)`/(`!`ZF`S@``0ZL`QP``0ZR
  72229. +M`"(``0ZY`````0[`)#,``0`)``(#Z0````0.Q@`$``$.SP`$``$.V`````$.
  72230. +MX`````$.Z"0]``$`"0`.`^D`!P8'!08%%PM#!B<+30'L``(.\``$``$.]P``
  72231. +M``$._B2$``$`"0`/`^D``@Q5`>P`!`\&`#(``0\-`"H``0\4``@``0\=````
  72232. +M`0\F)*@``0`)`",#Z0`#`,(%>0'L``0$T0""``$/+@!V``$/-0`,``$//@``
  72233. +M``$/1R3F``$`"0`,`^D``0@!``('G@`$``$/3@````$/5"4"``$`"0`=`^D`
  72234. +M`P#R`,D![``""L(`!``!#UT````!#V<E.0`!``D`$P/I``,`N`'L`,D``@]N
  72235. +M``@``0]T`````0]Z)68``@`)`"0#Z0`$`YH`5002`>P``@^#``0``0!I````
  72236. +M`0"!``(#Z@`````/BR6V``$`"0`&`^D``@^2`>P``@^;``0``0^B`````0^I
  72237. +M)=$``0`)``\#Z0`$`+@`R0N3`>P``@^Q``@``0^X`````0^_)@(``0`)`!P#
  72238. +MZ0`"!7D![``$#\<`7``!#\X`3@`!#]4`#@`!#]X````!#^<F-``!``D`'`/I
  72239. +M``,`P@5Y`>P`!`QU`&0``0_N`%@``0_T``P``0_\`````1`$)FL``0`)`($#
  72240. +MZ0`+!@<%!@47"T,*=@9;!B<+30#"!7D![``"$`T`&``!$!4````!$!TG00`!
  72241. +M``D`(`/I``,`P@5Y`>P``1`E`````1`L)WP``@`)```#Z0``````@0#>`^H`
  72242. +M```"!,<#<@`!!+H"U@`!$#@HD0`"``D`10/I``(`R02R``0`N0#^``$00`#^
  72243. +M``$!(0`$``$020````$`@0`!`^L````!`,(````!$%@H\@`!``D`!0/I``00
  72244. +M7P'V#`X![``"$&8````!$&T````!$'0I%P`!``D`60/I``8)I`)+`>,![`#"
  72245. +M"P0``A!@`.X``1![`.8``1"!*:```P`)`$,#Z0`($(P$%A"8`%4&MP02"2\`
  72246. +MH@`(";``L@`!$*4`L@`!"=0`2``!$+D`2``!":4`(@`!$,H`'@`!!2<`!``!
  72247. +M$-4````!`($`!@/J``````"!``\#ZP````8!8``X``$)Q``T``$!5``4``$!
  72248. +M,``(``$!XP`$``$!20````$0XBHY``$`"0`O`^D``1",``0%ZP"4``$0[`"0
  72249. +M``$%^@`<``$0^P````$1"2IY``$`"0`4`^D`!`"X"Y,`R0'L``(1$0`(``$1
  72250. +M&`````$1'RJP``(`"0!U`^D`!@#"`2``R0M[`J8(3@`$`K$!,``!$2X!*``!
  72251. +>`KL`&``!$3@````!`($`0`/K`````0+&`````0``
  72252. +`
  72253. +end
  72254. diff -rup --new-file baseline/fsf/emacs/unixlib/src/unix.lib.uue amiga/fsf/emacs/unixlib/src/unix.lib.uue
  72255. --- baseline/fsf/emacs/unixlib/src/unix.lib.uue    Wed Dec 31 17:00:00 1969
  72256. +++ amiga/fsf/emacs/unixlib/src/unix.lib.uue    Sat Sep 28 00:00:00 1996
  72257. @@ -0,0 +1,1186 @@
  72258. +begin 666 unix.lib
  72259. +M```#^@``*UH```/I````"2!O``0@UTC0_/QP`$YU(&\`!"`O``AF`G`!(EA,
  72260. +MT/S\6(].T0```_(```/I````#$CG(#(@;P`80^\`'$7Z`!PF;P`4)`LL>0``
  72261. +M``!.K@``(`N0@DS?3`1.=1;`3G4``````^^!```#7T%B<T5X96-"87-E````
  72262. +M`0```!B&```#7TQ63U)A=T1O1FUT`````0```!X````````#\@```^D````*
  72263. +M(&\`!"\-*D@@#68$2^P``$'L```B31+89OPO#4ZZ``!83RI?3G4``````_@`
  72264. +M```!`````0```!(````!`````@````X````````#[X,```)?;6MT96UP````
  72265. +M``$````>`````````_$````#`````$]05%,`!`!````#\@```^H````$=#IT
  72266. +M;7!?6%A86%A8`````````_(```/K````"0```_(```/I````;R!O``0B;P`(
  72267. +MGOP`($CG+Q8F22](`"`O20`D<`Q.N@``*D`@+```4JP``"(L``#2@"\!2&P`
  72268. +M`$AO`#!.N@``3^\`#'!WL!-F-DHK``%F,$'O`"A#[``03KH``"9`+&P``$ZN
  72269. +M_\0N`'P`0>\`*"(()#P```/M3J[_XBH`>`%@1G!RL!-F-DHK``%F,$'O`"A#
  72270. +M[``23KH``"9`+&P``$ZN_\HJ`'@`0>\`*"(()#P```/N3J[_XBX`?`%@"G`6
  72271. +M*4```&```(Q*A6<$2H=F!$ZZ```@"V="2H5G/DJ'9SH@#6<V<``O`"\`+P!(
  72272. +M>/__+P8O!R`%(@0@;P`X3KH``$_O`!@K0``(9Q`JK```*4T``"M+``0@"V`Z
  72273. +M(`UG!B!-3KH``$J%9PY*A&<*(@4L;```3J[_W$J'9PY*AF<*(@<L;```3J[_
  72274. +MW"`+9P8@2TZZ``!P`$S?:/3>_``@3G4@;P`$44](YP$T)DA+[```+T@`$&`Z
  72275. +M(&H`!+'+9C`F52XK``@JDR!K``1.N@``($M.N@``0J=(;P`8+P=.N@``3^\`
  72276. +M#$J`:PX@+P`48`HJ2B15(`IFP'#_3-\L@%!/3G4``````_@````#`````0``
  72277. +M`)````!4````-`````,````"```!:````0P```$(`````````^^#```"0&UA
  72278. +M;&QO8P`````!````'H8```1?7V9I9F]?;V9F<V5T`````````@```"@````D
  72279. +MA@```U]?9FEF;U]B87-E``````$````L@P```U]?<W!R:6YT9@````````$`
  72280. +M```\@P```D!F;W!E;@```````@```)0```!8A@```E]$3U-"87-E````!```
  72281. +M`3X```$L````F@```%Z&```"7V5R<FYO```````!````OH,```)`7W-E=&5R
  72282. +M<@````$```#.@P``!$!?<W1A<G1?<')O8V5S<P`````!````^H,```)`9G)E
  72283. +M90````````(```&,```!'H,```)`9F-L;W-E``````(```&&```!3(,```)?
  72284. +M=V%I='!I9`````$```&8`````````_$````#`````$]05%,`!`!````#\@``
  72285. +M`^H````%<&EP93IU>&]P96XN)6QX`'<`<@````/R```#ZP````$```/R```#
  72286. +MZ0```,6>_``82.<A/DGY`````$7L`!@J6B!:+AHF;``D+T@`()/)+'@`!$ZN
  72287. +M_MHD;```($!#Z`!*($DB;```3J[_"B!L``!#[``$3J[^DD/O`"0B_(```"1P
  72288. +M`2+`0IDB+P`@0>\`)"0(+$I.KOVBX8`K0``8+'@`!$ZN_WPB2TZN_GI*@&<*
  72289. +M($`B34ZN_I)@"")-<!Q.KO\N3J[_=B)+<"!.KO\N(F\`("`'3J[_+DS??(3>
  72290. +M_``82H!.=2!O``0@+P`((B\`#"]O`!``!"]O`!0`""]O`!@`#"]O`!P`$"]O
  72291. +M`"``%"]O`"0`&%E/2.</%BHO`#@L+P`T+@`J2"]!`!QP'$ZZ```F0"!-2AAF
  72292. +M_%.(D<T@"%*`*4``('(!+'@`!$ZN_SHI0``<(D`2W6;\<!QR`4ZN_SHI0``8
  72293. +M<"!R`4ZN_SHI0``D<`$I0``00?K_G"`(0_K^L)")*4``%$'L``!.KO\B*4``
  72294. +M`"(+9P`!2DJL`!QG``%"2JP`&&<``3I*K``D9P`!,DJ`;P`!+"!L```@*``4
  72295. +M0?K^;B)L```B:0`08`(2V%.`9/I![```(FP`)!+89OP@+```4JP``"=```PG
  72296. +M1P`03>P`%CS\`!1P!1E```P@5C%\`!P`$A%```@@7B%K``P`%"`\@``#\DJ&
  72297. +M9@)P`2@`2H5O!"`%8`0@+```0J=(>``!+SR```/Z+P`O/(```_,O!B\$+R\`
  72298. +M3"\\@``#\2\O`%`O/(```_`O+P!4+SR```/O+R\`6"\\@``#[2\O`%@O/(``
  72299. +M`^XO!R\\@``#["!L```O*``0+SR```/K+&P``"(/3J[^#D_O`%0G0``(9S0@
  72300. +M;```+'@`!$ZN_H`@;```+'@`!$ZN_HQ*@&?D0JL`%$'L```B2RQX``1.KO\0
  72301. +M("L`#&!H+&P``$ZN_WQ.N@``8`)P#"E````@"V<&($M.N@``("P`'&<.(D`@
  72302. +M+``@+'@`!$ZN_RX@+``89PPB0'`<+'@`!$ZN_RX@+``D9PPB0'`@+'@`!$ZN
  72303. +M_RX@+```;PH@0"QX``1.KO\<</],WVCP6$].=0```_@````#`````0```5H`
  72304. +M``%6```!1@```!<````"```"_````NH```+8```"S````L0```)0```!S```
  72305. +M`<(```&J```!E@```8H```%\```!=````6P```%B```!0````30```$B```!
  72306. +M%````$0````X````&@```!`````````#[X$```-?3&EN:V5R1$(````````!
  72307. +M````"H8```)?1$]30F%S90````,```*F```"7@```"R&```$7U]S=&%R='5P
  72308. +M7W!O<G0```````,```)^```"<@```$"#```"0&UA;&QO8P`````!```!`(8`
  72309. +M``-?7V1O;W)?;F%M90`````!```!IH8```-?7VYE>'1?<&ED```````"```!
  72310. +MM@```;*&```#7U]S=&%C:U]S:7IE`````0```?J&```#7U]P<F]C97-S97,`
  72311. +M`````0```I*#```$0&-O;G9E<G1?;W-E<G(```````$```*NA@```E]E<G)N
  72312. +M;P```````0```K:#```"0&9R964````````!```"P`````````/Q`````P``
  72313. +M``!/4%13``0`0````_(```/J````!@````````````````````$`````````
  72314. +M`````_(```/K````"@```_(```/I`````TZZ```@+```3G4``````^^#```#
  72315. +M0&-H:V%B;W)T`````````0````*&```#7U]O=7)?<&ED`````````0````8`
  72316. +M```````#\0````,`````3U!44P`$`$````/R```#Z0```",@+P`$(&\`"")O
  72317. +M``Q(YP$4+@`F22I(3KH``'`!OH!M+'`@OH!L)B`+9PX@!^>`0^P``-/`)MDF
  72318. +MV2`-9PSGAT'L``#1QR#=(-UP`&`(<!8I0```</],WRB`3G4@+P`$(&\`")[\
  72319. +M`!`O2``(0J\`#$'O``A#UV&62H!G"#!\__\@"&`"(!?>_``03G4``````^^#
  72320. +M```#0&-H:V%B;W)T`````````0```!B&```$7U]S:6=?:&%N9&QE<G,`````
  72321. +M``(```!`````,(8```)?97)R;F\```````$```!0`````````_$````#````
  72322. +M`$]05%,`!`!````#\@```^D````5("\`!$CG#P`N`"PL``!.N@``*4<``'H`
  72323. +M>`$@+```P(1G#B`L``#`A&8&(`5.N@``4H78A'`@NH!MX"`&3-\`\$YU("\`
  72324. +M!"\'(@`@+```@($N'V"P```#[X8```-?7W-I9U]M87-K```````$````3```
  72325. +M`"0````4````#(,```-`8VAK86)O<G0````````!````$(8```1?7W-I9U]P
  72326. +M96YD:6YG`````````0```!R#```$0%]S:6=?9&ES<&%T8V@```````$````N
  72327. +M`````````_$````#`````$]05%,`!`!````#\@```^D```":(&\`!"`O``@B
  72328. +M;P`,+V\`$``$64](YR$T+@`F;P`<*D@D22])`!1@`AK:2A)G!%.';O:U[P`4
  72329. +M8QH0*O__<B^P`6<0=#JP`F<*4X=O!AK!8`(:VTH39P13AV[V0A5*AU[`1`!(
  72330. +M@$C`3-\LA%A/3G4@+P`$(&\`"")O``Q93TCG)S8N`"I(+TD`($JL``!G``#^
  72331. +M(&P``"9H``Q.N@``(BL`!+*`9@``Z"!L``!(:``L0>P``")3<`!&`&$`_UA8
  72332. +M3TJ`9P``RD'L```B31`8L!EF``"\2@!F]&8``+1*AV80(&P``"`H`!AR`["!
  72333. +M9P``H"!L```@*``8<ORP@6<$68!F/B)L```B$2QL``!.KO^"+``@;```T/P`
  72334. +M+"((=/Y.KO^L*@!G$B(%0>P``"0(3J[_FB(%3J[_IB(&3J[_@F`&*6@`(```
  72335. +M(&P``"EH``0`@"EH``@`?$/H``Q%[`"$)-DDV239(&P``"EH`!@`!"EH`!P`
  72336. +M="\O`"`O*P$8($U#[```<`!.N@``4$]P`6`"<`!,WVSD6$].=2!O``0B;P`(
  72337. +M2.<`%"9)*DA.N@``($TB2W``80#^R$J`9P1P`&`,($TB2TS?*`!.^@``3-\H
  72338. +M`$YU(&\`!")O``A(YP`4)DDJ2$ZZ```@32)+<`%A`/Z02H!F<$AX`/](;```
  72339. +M+PU.N@``3^\`#$J`:@P@32)+3-\H`$[Z``!+TT*=0JL`$G`!-T``#D)K`!`G
  72340. +M?````@``,C=```Q"JP`V0>P``")(2AEF_%.)D\@G20`60IT@/`\,/P`G0``B
  72341. +M)T``&B=``"HJ_```H?]P`$S?*`!.=0```_@````(`````0```7X```%P```!
  72342. +M:@```5H```%2```!3````4(```$H`````````^^&```#7VQA<W1?9&ER````
  72343. +M`````P```0(```"2````BH,```)`7V=E=%]C9`````$```":A@```U]L87-T
  72344. +M7V5N=')Y``````8```%D```!1@```1(```#P````X````*B&```#7U]T96UP
  72345. +M7V9N86UE````!````C8```'V````Q@```+"&```"7T1/4T)A<V4````!```!
  72346. +M"(,```-`7VQF:6)S=&%T```````!```!A(,```-`8VAK86)O<G0````````"
  72347. +M```!X````:B#```#0%]F:6)S=&%T`````````@```A````'&@P```U]R96%D
  72348. +M;&EN:P````````$```'\`````````_$````#`````$]05%,`!`!````#\@``
  72349. +M`^L```!!```#\@```^D```#0(&\`!%E/2.<`%"](``@@;P`(*F@!#&`*)E4@
  72350. +M34ZZ```J2R`-9O),WR@`6$].=2!O``2>_``02.<@-BI()FT`#$/K`0PO2``<
  72351. +M+TD`("!+8;1"K```0JL!#$*M``0@%>6`($`G:``,`1A!ZP`(+T@`&&```)Y!
  72352. +MZP`0(DA*&6;\4XF3R"`)D<C0_``L<@`R`-*(4H%T`#0!/T``%C]!`!0@`DZZ
  72353. +M```D0$J`9@9P#&```)Q-TD*>(&\`(""*+U``("SK`(@LZP"$0>L`C$/J``PB
  72354. +MV"+8(M@E:P`,`!@E:P!\`!Q+Z@`@.V\`%``$.V\`%@`&(&\`'"`H``12J``$
  72355. +M*T``"$'J`"Q#ZP`0$-EF_"JK``@J;P`<(A4D+P`8+&P``$ZN_Y1*@&8`_TXG
  72356. +M:P$,`1!"K0`$+&P``$ZN_WQR=-*!L(%F!'`!8`I.N@``*4```'``3-]L!-[\
  72357. +M`!!.=2!O``193TCG(#8O2``4<!!.N@``*D!P1^6(3KH``"9`(&\`%"`(2AAF
  72358. +M_%.(D<`@"%*`3KH``"1`3KH``"`-9P``@B`*9WP@"V=X*TL`#"M\```!'``(
  72359. +MD<@G2`$0)T@!#"=(`10FBB!O`!04V&;\3KH``"=```0B+P`4+&P``'3^3J[_
  72360. +MK"J`9R)!ZP`((@`D""QL``!.KO^:2H!G#B!-80#^.$J`9Q0@#6`^+&P``$ZN
  72361. +M_WQ.N@``*4```"!-80``-F`D<`PI0```(`UG!B!-3KH``"`*9P8@2DZZ```@
  72362. +M"V<&($M.N@``<`!,WVP$6$].=2!O``1(YP`6*D@F;0`,3KH``$*L```@2V$`
  72363. +M_:`@4TZZ```@%6<*(@`L;```3J[_IB!M``Q.N@``($U,WV@`3OH``"!O``19
  72364. +M3TCG`S0O2``4(&\`%"IH``R7RTZZ``!*K0$49R1^`"1M`0P@;P`4+"@`!&`$
  72365. +M4H<D4KZ&;`0@"F;T*TH!$$*M`10@+0$09R(F0-;\`"`I;P`4``!%[0$0(%(I
  72366. +M2```(%(DT"!O`!12J``$(`M,WRS`6$].=2!O``0O#2I(3KH``"`M``0J7TYU
  72367. +M(&\`!"`O``A(YP$4+@`J2"9M``Q.N@``<`$G0`$4*T<`!$S?*(!.=0```^^#
  72368. +M```"0&9R964````````'```"B@```H````)J```"/@```C0```(J````'H8`
  72369. +M``-?;&%S=%]D:7(````````#```"X@```EX```!2@P```D!M86QL;V,`````
  72370. +M!````8X```%V```!;````**&```"7T1/4T)A<V4````&```"=````@8```'L
  72371. +M```!U@```30```$<@P``!$!C;VYV97)T7V]S97)R```````"```"#@```4B&
  72372. +M```"7V5R<FYO```````#```"(````A(```%,@P```T!C:&MA8F]R=```````
  72373. +M``4```,N```##@```J8```):```!E(,```)`7V=E=%]C9`````$```'*A@``
  72374. +M`U]L87-T7V5N=')Y``````$```+L`````````_$````#`````$]05%,`!`!`
  72375. +M```#\@```^D````(2.<!`BQL``!R`$ZN_X(N`"(`3J[_@B`'3-]`@$YU````
  72376. +M``/OA@```E]$3U-"87-E`````0````8````````#\0````,`````3U!44P`$
  72377. +M`$````/R```#ZP````(```/R```#Z0```!L@;P`$("\`")[\`$1(YP,$+@`J
  72378. +M2'S_3KH``"!-0^\`#DZZ``!*@&8D<!#`KP`6YH!R4.6)PJ\`%NR!@H#"A[*'
  72379. +M9@1\`&`&<`TI0```(`9,WR#`WOP`1$YU(&\`!"`O``A(YP$$3-\@@&">````
  72380. +M``/O@P```T!C:&MA8F]R=`````````$````8@P```T!?9FEB<W1A=```````
  72381. +M``$````BA@```E]E<G)N;P```````0```$H````````#\0````,`````3U!4
  72382. +M4P`$`$````/R```#Z0```$$@+P`$(&\`"%E/2.<G%BX`*DA.N@``2&\`'$AX
  72383. +M"`$O!TZZ``!/[P`,4H!F!G#_8```RD*G+&P``'(")`].KO\<3^\`!"9`2H!G
  72384. +M+"(O`!PD"TZN_GI*0&<>("\`'.6`+PT@0"\H``@B0G``D<A.N@``4$]\`&!@
  72385. +M3J[_?"H`<BY&`;"!9D9\`"`O`!SE@"!`*J@`"$WM``1"GBS\```A_W`!/,`\
  72386. +MP$)>*WP```(``#)"K0`V0JT`%B`\#PP_`"M``"(K0``:*T``*F`,?/\@!4ZZ
  72387. +M```I0```(`MG#"0++&P``'("3J[_%DAO`!Q(>`@"+P=.N@``3^\`#"`&3-]H
  72388. +MY%A/3G4``````^^#```#0&-H:V%B;W)T`````````0```!2#```"7VEO8W1L
  72389. +M```````"````\@```"*&```"7T1/4T)A<V4````"````W@```#:#```#0%]L
  72390. +M9FEB<W1A=````````0```&Z#```$0&-O;G9E<G1?;W-E<G(```````$```#0
  72391. +MA@```E]E<G)N;P```````0```-0````````#\0````,`````3U!44P`$`$``
  72392. +M``/R```#Z0````X@;P`$(F\`"$CG,!8F22I(3KH``"(+)`TL;```=@%.KOY$
  72393. +M2H!G!'``8`9.N@``</],WV@,3G4``````^^#```#0&-H:V%B;W)T````````
  72394. +M`0```!*&```"7T1/4T)A<V4````!````&H,```)`7W-E=&5R<@````$````L
  72395. +M`````````_$````#`````$]05%,`!`!````#\@```^D````^(&\`!")O``A9
  72396. +M3TCG,S8J2'X`(&P``"PH`.`O20`@2H9F($JL``!F&D'L`!@B""QL```D/```
  72397. +M`^U.KO_B+`!G`GX!2H9G-B(&0>P`(B0(0>P``"8(+&P``$ZN_IXB!B0-)B\`
  72398. +M($ZN_IXB!G0*3J[^R$J'9U@B!DZN_]Q@4"!L```F:`"X,'S__[?(9T!#[``H
  72399. +M<"4L>``$3J[]V"1`2H!G+"EL````#"E-`!`O"B!++$I#[``$E<HF;P`D3J[]
  72400. +MM$S?!``B2BQX``1.KOYB3-]LS%A/3G4@;P`$0^\`"&$`_RI.=2!O``1#[P`(
  72401. +M80#_''`43KH``$YU``````/X````!@````$```"R````J````*0```".````
  72402. +M2@```"H````````#[X8```%?7W5S`````@```'X````4A@```U]?5T)E;F-H
  72403. +M37-G``````$````DA@```E]$3U-"87-E`````@```%8````PA@``!%]?4')O
  72404. +M9W)A;4YA;64````````"````H@```%"#```"0&5X:70````````!````\@``
  72405. +M``````/Q`````P````!/4%13``0`0````_(```/J````#T]K```````4````
  72406. +M`````````````````&-O;G-O;&4Z```E<SH@``!I;G1U:71I;VXN;&EB<F%R
  72407. +M>0```````^P````!`````0```!0````````#\@```^D````'2.<@`B(O``Q!
  72408. +M[P`0)`@L;```3J[_'$S?0`1.=0```^^&```"7T1/4T)A<V4````!````$```
  72409. +M``````/Q`````P````!/4%13``0`0````_(```/I````#R!O``0O#2I(*JP`
  72410. +M`$'M``0J7T[Z```@;P`$("\`"$CG`00N`"I((!5.N@``0>T`!"`'3-\@@$[Z
  72411. +M`````````^^&```#7U]S:6=?;6%S:P```````0````J#```"0%]S971J;7``
  72412. +M```!````%(,```-`<VEG<V5T;6%S:P`````!````*H,```-`7VQO;F=J;7``
  72413. +M```````!````.`````````/Q`````P````!/4%13``0`0````_(```/I````
  72414. +M!R!O``0@+P`(+P`O+```+PA.N@``3^\`#'``3G4```/OA@``!%]?<WES=&5M
  72415. +M7VYA;64````````!````#(,```)?<W1R;F-P>0````$````2`````````_$`
  72416. +M```#`````$]05%,`!`!````#\@```^D````I(&\`!)[\`%1(YS@6*D@@#6<D
  72417. +M2A5G("!-2AAF_%.(D<TB""!-<`).N@``0>P``'`"(@!.N@``("P``&\2L*P`
  72418. +M`&X,Y8!![```)G`(`&`L4H!F)"(L``!![P`;)@@L;```=`!X44ZN_BQ*0&<$
  72419. +M)D-@"D?L``1@!$?L``@@2TH89OQ3B)'+(@@@2W`"3KH``$'L`!QP`G(!3KH`
  72420. +M`$S?:!S>_`!43G4```/X````!`````$```"0````>````'(````L````````
  72421. +M`^^#```"0'=R:71E```````$````F````(P````T````*(8```)?97)R;F\`
  72422. +M``````$````XA@```U]S>7-?;F5R<@````````$````^A@```U]S>7-?97)R
  72423. +M;&ES=`````$```!&A@```E]?3U-%4E(``````0```%2&```"7T1/4T)A<V4`
  72424. +M```!````7@````````/Q`````P````!/4%13``0`0````_(```/J````"#H@
  72425. +M```T,@``56YK;F]W;B!E<G)O<B!C;V1E```*```````#\@```^D````````#
  72426. +M\0````,`````3U!44P`$``````/R```#Z@```,9N;R!S:6=N86P`:&%N9W5P
  72427. +M``!I;G1E<G)U<'0`<75I=```:6QL96=A;"!I;G-T<G5C=&EO;@!T<F%C92!T
  72428. +M<F%P``!A8F]R=`!E;70@:6YS=')U8W1I;VX`9FQO871I;F<@<&]I;G0@97AC
  72429. +M97!T:6]N``!K:6QL``!B=7,@97)R;W(`<V5G;65N=&%T:6]N('9I;VQA=&EO
  72430. +M;@``8F%D(&%R9W5M96YT('1O('-Y<W1E;2!C86QL`'=R:71E(&]N(&$@<&EP
  72431. +M92!W:71H(&YO(&]N92!T;R!R96%D(&ET``!A;&%R;2!C;&]C:P!S;V9T=V%R
  72432. +M92!T97)M:6YA=&EO;B!S:6=N86P@9G)O;2!K:6QL`'-T871U<R!S:6=N86P`
  72433. +M<V5N9&%B;&4@<W1O<"!S:6=N86P@;F]T(&9R;VT@='1Y`'-T;W`@<VEG;F%L
  72434. +M(&9R;VT@='1Y``!C;VYT:6YU92!A('-T;W!P960@<')O8V5S<P``8VAI;&0@
  72435. +M<W1A='5S(&AA<R!C:&%N9V5D``!B86-K9W)O=6YD(')E860@871T96UP=&5D
  72436. +M(&9R;VT@8V]N=')O;"!T='D``&)A8VMG<F]U;F0@=W)I=&4@871T96UP=&5D
  72437. +M(&9R;VT@8V]N=')O;"!T='D`:6YP=70@<F5C;W)D(&%V86EL86)L92!A="!C
  72438. +M;VYT<F]L('1T>0!E>&-E961E9"!#4%4@=&EM92!L:6UI=`!E>&-E961E9"!F
  72439. +M:6QE('-I>F4@;&EM:70``'5N:VYO=VX@<VEG;F%L``!U;FMN;W=N('-I9VYA
  72440. +M;```=VEN9&]W(&-H86YG960``'5N:VYO=VX@<VEG;F%L``!U<V5R('-I9VYA
  72441. +M;"`Q`'5S97(@<VEG;F%L(#(```````````H````2````'````"(````V````
  72442. +M0@```$@```!8````<@```'@```""````F@```+8```#>````Z@```1````$>
  72443. +M```!0````58```%R```!C````;@```'D```""@```B(```(\```"3````EP`
  72444. +M``)L```"?````HH```/L````(`````$```,4```#$````PP```,(```#!```
  72445. +M`P````+\```"^````O0```+P```"[````N@```+D```"X````MP```+8```"
  72446. +MU````M````+,```"R````L0```+````"O````K@```*T```"L````JP```*H
  72447. +M```"I````J````*<```"F`````````/R```#Z0```#H@+P`$(&\`""(O``PB
  72448. +M;P`064](YP<4+`$N`"I(+TD`%'H`)FP``&`N2H=G""`K``R^@&8@>@%P`;"K
  72449. +M`!1F%BHK``P@#6<$*JL`&"!+3KH``"`%8"HF4TJ39LX(!@``9P1P`&`:2H5F
  72450. +M"G`**4```'#_8`QP`$ZZ``!.N@``8*),WRC@6$].=2!O``0@+P`((F\`#$CG
  72451. +M`10B`'``3-\H@&``_W`@;P`$+PUP`"(`D\DJ7V``_UX@+P`$(&\`""(O``Q(
  72452. +MYP,$+`$N`"I(4H!F`GX`2H=J`D2'(`<B!B!-D\E,WR#`8`#_+``````#[X8`
  72453. +M``-?7W!R;V-E<W-E<P`````!````)(,```-`7V9R965?96YT<GD````!````
  72454. +M3H8```)?97)R;F\```````$```!L@P``!$!?=V%I=%]S:6=N86QS```````!
  72455. +M````=H,```1`7VAA;F1L95]S:6=N86QS`````0```'H````````#\0````,`
  72456. +M````3U!44P`$`$````/R```#Z0```!(@+P`$44](YP,`+@!.N@``(`=.N@``
  72457. +M2H!G(B)`(&D`'"](``P@:0`$<`$B;P`,3I$L`"`'3KH``"`&8`)P_TS?`,!0
  72458. +M3TYU``````/O@P```T!C:&MA8F]R=`````````$````.@P```T!?9FEN9%]F
  72459. +M9`````````$````4@P```T!?9G)E95]F9`````````$````V`````````_$`
  72460. +M```#`````$]05%,`!``````#\@```^D````#(&\`!"`O``A.^@`````#[X,`
  72461. +M``)`<W1R<F-H<@````$````*`````````_$````#`````$]05%,`!``````#
  72462. +M\@```^D````#(&\`!"`O``A.^@`````#[X,```)`<W1R8VAR``````$````*
  72463. +M`````````_$````#`````$]05%,`!``````#\@```^D```!-2.<`!G`(<@`L
  72464. +M>``$3J[_.BI`2H!F!'``8"Y"K0`$2'@`*'``+P!![```<@&3R<%!3KH``%!/
  72465. +M*H!F#")-<`A.KO\N<`!@`B`-3-]@`$YU(&\`!$CG``8J2"`-9Q@@36$``!X@
  72466. +M54ZZ```B37`(+'@`!$ZN_RY,WV``3G4@;P`$2.<`!BI(2JT`!&<4(E4L>``$
  72467. +M3J[^(")53J[^)D*M``1,WV``3G4@;P`$(%`B:``.<``0*0`/<@'AH2`!3G4@
  72468. +M;P`$("\`""(O``Q(YP,&+`$N`"I(8:I*AV8$2H9G'B)5(T<`("-&`"0S?``)
  72469. +M`!PL>``$3J[^,G`!*T``!$S?8,!.=2!O``1(YP`&*DA*K0`$9QPB52QX``1.
  72470. +MKOXL2D!G#B)53J[^)D*M``1P`6`"<`!,WV``3G4```/X`````0````$````H
  72471. +M`````````^^#```$0%]D979I8V5?;W!E;@````````$````R@P``!$!?9&5V
  72472. +M:6-E7V-L;W-E```````!````9@````````/Q`````P````!/4%13``0`0```
  72473. +M`_(```/J````!'1I;65R+F1E=FEC90````````/R```#Z0```!XO#B`L```B
  72474. +M`$A!0D'2@"`L``"S@"E```1"K``(0^P`!'``+'@`!$ZN_=@I0```</].KOZV
  72475. +M2(!(P"E```!*K```9PA*@&L$<`%@`G``*4``#"Q?3G4O#B`L``!K""QX``1.
  72476. +MKOZP("P``&<*(D`L>``$3J[^8BQ?3G4```/X`````P````$```!8````.@``
  72477. +M`!X````&`````@```&8```!.````/@```"P````:````%@````````/OA@``
  72478. +M!%]?<W1A<G1U<%]T:6UE```````!````!(8```%?7W5S`````0```!``````
  72479. +M```#\0````,`````3U!44P`$`$````/R```#Z@````7_____9FEF;RYL:6)R
  72480. +M87)Y`````````_(```/K````!````_(```/I````%B`O``113TCG`P`N`$ZZ
  72481. +M```@!TZZ``!*@&<H(D`@:0`<<D#EB<*1+T@`#"`!(&D`!")O``Q.D2P`(`=.
  72482. +MN@``(`9@`G#_3-\`P%!/3G4@+P`$+P<N'V"N``````/O@P```T!C:&MA8F]R
  72483. +M=`````````$````.@P```T!?9FEN9%]F9`````````$````4@P```T!?9G)E
  72484. +M95]F9`````````$````\`````````_$````#`````$]05%,`!``````#\@``
  72485. +M`^D```!B(&\`!"`O``@B;P`,+V\`$``$+V\`%``(+V\`&``,+V\`'``0+V\`
  72486. +M(``4+V\`)``844](YP<4+@!([P,``!1\`"IL``!@%DJM``1F"C!\``$K2``$
  72487. +M8`Q2AMK\`"2\K``$;>0@+``$O(!F>'(*TZP`!"`L``0B`.>!TH#E@2`!3KH`
  72488. +M`"I`2H!F#'`,*4```'#_8```CG#VT*P`!"(`YX'2@.6!(&P``")-8`(2V%.!
  72489. +M9/H@+```9P8@0$ZZ```I30``>O;:K``$(`7G@-"%Y8#;P)?+*TL`!%*%VOP`
  72490. +M)+JL``1M\"`&YX#0AN6`(&P``"&O`!0(!"&'"``AKP`8"`A+[P`@(9T(#"&=
  72491. +M"!`AG0@42^\`+"&="!@AG0@<(9T(("`&3-\HX%!/3G4@+P`$(@!K%K*L``1L
  72492. +M$"`!YX#0@>6`(&P``$*P"`1.=2`O``1(YP$$+@!K'KZL``1L&"`'YX#0A^6`
  72493. +M*FP``-O`2JT`!&<$(`U@"'`)*4```'``3-\@@$YU("P`!$YU``````/X````
  72494. +M$0````$```&"```!9````58```%````!,@```.P```#>````Q````+X```"R
  72495. +M````I````)@```!R````;@```&0```!>````0@````````/O@P```D!M86QL
  72496. +M;V,``````0```("&```"7V5R<FYO```````"```!=@```(R#```"0&9R964`
  72497. +M```````!````N@````````/Q`````P````!/4%13``0`0````_(```/K````
  72498. +M`@```_(```/I````&B!O``0B;P`(GOP`#$CG(18F22I(3KH``"`+9P8N*P`$
  72499. +M8`B1R$ZZ```N`'#_OH!F!'``8"@@!T'O`!1.N@``(@U![P`4)`@L;```3J[^
  72500. +M=$J`9P1P`&`&3KH``'#_3-]HA-[\``Q.=0`````#[X,```-`8VAK86)O<G0`
  72501. +M```````!````%H,```)`=&EM90````````$````F@P```T!?9VUT,F%M:6=A
  72502. +M``````$````\A@```E]$3U-"87-E`````0```$B#```"0%]S971E<G(````!
  72503. +M````6`````````/Q`````P````!/4%13``0`0````_(```/I````!R!O``0B
  72504. +M;P`(("\`#"\+)DDB2"!+)E].^@````````/O@P```D!M96UM;W9E`````0``
  72505. +M`!@````````#\0````,`````3U!44P`$``````/R```#Z0```%(@;P`$(F\`
  72506. +M"%%/2.<!%"9)*DA.N@``0>\`#$ZZ```@#6<(0>\`#"K8*M@@"V<``-)![P`,
  72507. +M3KH``"!`("@`)$2`<CQ.N@``)H!^`"!L``1#[```$!BP&68,2@!F]F8&?@1@
  72508. +M``":(&P`!$/L``@0&+`99@Q*`&;V9@9^`V```(`@;``$0^P`$!`8L!EF"DH`
  72509. +M9O9F!'X%8&8@;``$0^P`&!`8L!EF!DH`9O9G4"!L``1#[``<$!BP&68&2@!F
  72510. +M]F<\(&P`!$/L`"`0&+`99@9*`&;V9R@@;``$0^P`)!`8L!EF!DH`9O9G%"!L
  72511. +M``1#[``H$!BP&68(2@!F]F8"?@$G1P`$<`!,WRB`4$].=2!O``2>_``0+PTJ
  72512. +M2$'O``Q#[P`$80#^Z"JO``P@+P`00^T`!#+`("\`!#+`("P``#+`<``J7][\
  72513. +M`!!.=0`````#^`````@````!````[````-@```#$````L````)P```"$````
  72514. +M:@```%`````````#[X,```-`8VAK86)O<G0````````!````%(,```-`7V=E
  72515. +M='1I;64````````!````'(,```-`;&]C86QT:6UE```````!````-H,```)?
  72516. +M7T-81#,S``````$```!$A@```E]T>FYA;64`````"````.@```#4````P```
  72517. +M`*P```"8````@````&8```!,A@```U]D87EL:6=H=`````````$```$X````
  72518. +M`````_$````#`````$]05%,`!`!````#\@```^H````,3454($135`!7150@
  72519. +M1%-4`$5%5"!$4U0`1414`$-$5`!-1%0`4$14`$%+1%0````````#\@```^D`
  72520. +M```P(&\`!$CG``8J2"QL``!.KO^^!I4/##\`<`!,WV``3G4@+P`$(&\`"%E/
  72521. +M!(`/##\`(CP``5&`+H!.N@``((`@%R(\``%1@$ZZ```@`2Z!<CQ.N@``(4``
  72522. +M!"`7<CQ.N@``(`'E@)"!YX#0@="`(4``"%A/3G4@;P`$64](YR`$2]`@'2(`
  72523. +MZ8&2@"`!YX#0@2(`Y8'2@.^!(!TD`.F"E(#E@B`=+T$`"'(R3KH``-""T*\`
  72524. +M"`:`#PP_`$S?(`183TYU```#[X8```-?5&EM97)"87-E```````!````#(,`
  72525. +M``)?7T-81#,S``````4```"J````7@```%(```!(````.@````````/Q````
  72526. +M`P````!/4%13``0`0````_(```/I````"R`O``193RZ`0>P`!"`(6$].=2!O
  72527. +M``193RZ(0>P`!"`(6$].=2`L``1.=0`````#^`````,````!````)@```!P`
  72528. +M```*`````````_$````#`````$]05%,`!`!````#\@```^H````)````````
  72529. +M``````````$````````````"```````````````````#[`````(````!````
  72530. +M%`````@````````#\@```^D````J(&\`!")O``@@+P`,64](YS\V+@`J2"])
  72531. +M`"B7RTZZ```B#20++&P``$ZN_7XF0"("3J[]>"`+9@9.N@``8%XD;P`H0A(J
  72532. +M!U*%(A,D*P`$)@TH"BQL``!.KOY*2H!G&"(+3J[]>$H29@1P`F`L+P1.N@``
  72533. +M6$]@*$ZN_WPL`'(R1@&P@68(""L``0`+9I0B"TZN_7@@!DZZ```I0```</],
  72534. +MWVS\6$].=0`````#[X,```-`8VAK86)O<G0````````!````'H8```)?1$]3
  72535. +M0F%S90````(```!4````)H,```)`7W-E=&5R<@````$````Z@P```E]S=')L
  72536. +M96X``````0```'"#```$0&-O;G9E<G1?;W-E<G(```````$```"6A@```E]E
  72537. +M<G)N;P```````0```)H````````#\0````,`````3U!44P`$`$````/R```#
  72538. +MZ0```"Q93TJL`!)F#$'O``,I2``28>Y@%D'O``,B;``2L\AD!'`!8`)P_RE`
  72539. +M``!83TYU64](YP$4+B\`%$JL``!F`F'`*FP`%F`N("P``&\,0>\`#R)M``2S
  72540. +MR&(02H!J'$'O``\B;0`$L\AD$"95+PU.N@``6$\J2R`-9LXI30`62H=F!'``
  72541. +M8")0AR\'3KH``"!`(*P`%D/O`!,A20`$0^@`"%A/*4``%B`)3-\H@%A/3G4`
  72542. +M`````_@````'`````0```*(```"0````>@```$(````:````#@````0````#
  72543. +M`````@```$@````Z````*`````````/O@P```E]F<F5E`````````0```&Z#
  72544. +M```"7VUA;&QO8P`````!````B@````````/Q`````P````!/4%13``0`0```
  72545. +M`_(```/J````!T`H(REA;&QO8V$N8PDQ+C$```````````````````/R```#
  72546. +MZP````$```/R```#Z0```#8@;P`$64](YR,"(@@L;```=/Y.KO^L+T``$&<Z
  72547. +M+BP``$ZZ```L`&`>2&\`$$AX"`4O!DZZ``!/[P`,2H!F""E'``!P`&`24X9L
  72548. +MWB(O`!`L;```3J[_IG#_3-]`Q%A/3G4@;P`$2.<A!BI(3KH``"(-+&P``$ZN
  72549. +M_[A*@&<$<`!@4$ZN_WPN`')OTH&P@68@(@UT`$ZN_T9*@&<.(@U.KO^X2H!G
  72550. +M!"`"8"A.KO]\+@!P9="`OH!F#B!-80#_2DJ`9@1P`&`,(`=.N@``*4```'#_
  72551. +M3-]@A$YU``````/OA@```E]$3U-"87-E`````P```'(```!0````#H8```)?
  72552. +M97)R;F\```````,```#,````0````!Z#```#0%]L87-T7V9D`````````0``
  72553. +M`"*#```"7VEO8W1L```````!````-(,```-`8VAK86)O<G0````````!````
  72554. +M;(,```1`8V]N=F5R=%]O<V5R<@```````0```,@````````#\0````,`````
  72555. +M3U!44P`$`$````/R```#Z0```AI(YP`&<"(B/``!``$L>``$3J[_.BI`2H!F
  72556. +M!'``8"`;?``$``A-[0`.0AX@+```',`L[```0>T`%$ZZ```@#4S?8`!.=2!O
  72557. +M``0O#B)(<"(L>``$3J[_+BQ?3G4@;P`$2.<`!BI(("T`(&<*+&P``'(`3J[_
  72558. +MW"`M`"1G#"QL``!R0.&)3J[_W"`M`#1G!B!`3KH``"`M`#AG!B!`3KH``"!M
  72559. +M`#QAI"!-3-]@`$[Z``!(YP(&+`$J2$J`9Q0@+0`@(BT`-"QL```P?``!3J[_
  72560. +MRDJ&9Q0@+0`D(BT`."QL```P?``"3J[_RG`!(BP``..@3-]@0$YU2.<#-B9)
  72561. +M*D@N$R!O`!PL$&`4(&T`-+'*9@1^`&`(M>T`.&8"?``@;0`\+'@`!$ZN_HPD
  72562. +M0$J`9MI*AV<60I,@+0`@(BT`-"QL```P?``#3J[_RDJ&9U(@;P`<0I`@+0`D
  72563. +M(BT`."QL```P?``#3J[_RF`V<`$B+```XZ`L>``$3J[^PB!M`#PL>``$3J[^
  72564. +MC"1`2H!GWB!M`#2QRF8$?@!@"+7M`#AF`GP`2H=FUDJ&9M)P`2(L``#CH"(`
  72565. +M<``L>``$3J[^SDS?;,!.=5E/2.<#%BX`)DDJ2&```(9"K0`L""T``@`S9PQP
  72566. +M(RE```!P_V```*PL;```<@%.KO\Z("T`("(M`#0L;```,'P``4ZN_\H@;0`\
  72567. +M<``0*``/<@'AH2`!3KH``"P`("T`("(M`#0P?``#3J[_RF`0<`$B+```XZ`L
  72568. +M>``$3J[^PB!M`#PL>``$3J[^C$J`9^`@!DZZ```@+0`@0>\`%"(((&T`+"QL
  72569. +M``!.KO_6+`!G`/]B(`92@&8"?`"\AV,"+`<@!B!O`!1@`A;84X!D^B`&*T``
  72570. +M+$S?:,!83TYUGOP`2$CG#Q8N`"I()DDO20`<2H=F``"*("T`)"QL``!R0.&)
  72571. +M3J[_W"!-0^\`(!+89OQ![P`@0^P``$ZZ```@34/O`$(2V&;\0>\`0D/L``1.
  72572. +MN@``""T````S9P@(+0`/`#)G!D'O`"!@!$'O`$(@"')`Z8D@?```C@!.KO_B
  72573. +M*T``)&<``.PL;```3J[_Q$J`:@)2@.*`*T``*'``8```X$JM`"1G``#*+"T`
  72574. +M*'H`8```M+R'8P``CBP'8```B`@M``(`,V<02H5G!B`%8```L'`C8```I"`M
  72575. +M`"0B+0`X+&P``#!\``).KO_*(&T`/'``$"@`#W(!X:$@`4ZZ```H`"`M`"0B
  72576. +M+0`X,'P``TZN_\I@$'`!(BP``..@+'@`!$ZN_L(@;0`\+'@`!$ZN_HQ*@&?@
  72577. +M(`1.N@``2H!G"$J%9P0@!6`Z("T`)"(+($8L;```3J[_T"@`9P#_9DJ$:Q+:
  72578. +MA)Z$U\1P`+Z`8@#_2"`%8`YP#4ZZ``!P("E```!P_TS?:/#>_`!(3G6>_``,
  72579. +M2-<!`W`=*4```'#_WOP`#$YU64\N@&$`_")P`%A/3G6>_``L2.<@%B9)*DA*
  72580. +M@&<2!(````@!9R)3@&<``)Q@``"J2I-G"`CM``(`,V`&"*T``@`S<`!@``":
  72581. +M<`/`K0`P5X!F*`@M``\`,F<&0>P`&&`$0>P`&B\(+PU(;``(2&\`'$ZZ``!/
  72582. +M[P`08"H(+0```#-G$"\-2&P`'$AO`!A.N@``8`XO#4AL`"9(;P`83KH``$_O
  72583. +M``Q![P`0(@@L;```)#P```/M3J[_XB:`9P1P`&`@3KH``&`8(!-G"B(`+&P`
  72584. +M`$ZN_]QP`&`(<!8I0```</],WV@$WOP`+$YU(&\`!"`O``@B+P`,+V\`$``$
  72585. +MGOP`3$CG#S8J+P!P+`$N`$*O`&B;S9?++T@`('!`3KH``"1`2H!G``&@80#Z
  72586. +MHB]``&AG``&4<!1.N@``*D!*@&<``89P%$ZZ```F0$J`9P`!>'`%&T``""!O
  72587. +M`&@K2``.<A0[00`2%T``""=(``XW00`2)4@`/"5-`#0E2P`XD<@E2``D)4@`
  72588. +M("5(`#!*AV<&".H````S2H9G!@CJ``$`,TAZ_G!(>OY>2'K^1$AZ_+A(>OO:
  72589. +M2'K[#"`J`#`@2D/Z^KQ.N@``3^\`&"@`9P``\$J%9P8(Z@`/`#(@;P`@(DH2
  72590. +MV&;\($I#[P`D$MAF_$'O`"1#[``T3KH``"!*0^\`1A+89OQ![P!&0^P`.$ZZ
  72591. +M``!*AV<H2H9G!$J%9@9![P`D8`1![P!&(`@L;```<D#IB3!\#0!.KO_B)4``
  72592. +M($J&9RI*AV<$2H5G!D'O`"1@!$'O`$8@""QL``!R0.F)('P``(X`3J[_XB5`
  72593. +M`"1*J@`@9@1*AV8J("H`)&8$2H9F($J`9Q0L;```3J[_Q$J`:@)2@.*`)4``
  72594. +M*$*J`"P@!&!8("H`(&<*+&P``'(`3J[_W"`J`"1G"BQL``!R`$ZN_]Q*A&L&
  72595. +M(`1.N@``(`UG!B!-3KH``"`+9P8@2TZZ```J;P!H(`UG!B!-80#Y+B`*9P8@
  72596. +M2DZZ``!P_TS?;/#>_`!,3G4@;P`$GOP`("\-*DA.N@``2JP``&8(<`8I0```
  72597. +M8&@@+```4JP``"(L``#2@"\!2&P`/$AO``Q.N@``<``N@$'O`!!R`<%!80#]
  72598. +MN$_O``PJ@<<``O`$'O``AR`6$`_:)83RM```1K!'``8!P@%4ZZ``!*@&<*
  72599. +M($`@:``$80#XKB`53KH``'#_*E_>_``@3G4@+P`$(B\`""]O``P`!"!O`!">
  72600. +M_``H+PTJ2$CO``,`!$ZZ``!*K```9@AP!BE```!@:"`L``!2K```(BP``-*`
  72601. +M+P%(;`!(2&\`%$ZZ``!P`2Z`(@!![P`8P4%A`/T43^\`#"J`:S1"IT'O`!!P
  72602. +M`2(`80#\_EA/*T``!&L$<`!@'"`53KH``$J`9PH@0"!H``1A`/@*(!5.N@``
  72603. +M</\J7][\`"A.=0`````#^`````L````!```(!@``!V(```8\```&)@``!,P`
  72604. +M``2\```$H```!)@```22```"Y@```M`````````#[X8```-?7V9I9F]?<VEG
  72605. +M```````&```#K@```C````&H```!:@```.H````LA@```5]?=7,````!````
  72606. +M,H,```)`3F5W3&ES=`````$````ZA@```U]?1FEF;T)A<V4``````!$```;H
  72607. +M```&V```!K8```:(```&7````^8```-X```#(````K8```)B```!^@```5H`
  72608. +M``$\````W````,0```!\````;(,```)`9G)E90````````8```<D```'#```
  72609. +M!P(```"L````G````)"&```"7V5R<FYO```````&```'\```!TP```42```$
  72610. +M+```!!(```'>A@```E]$3U-"87-E`````P``!00```3B```!Z(,```1`7W=A
  72611. +M:71?<VEG;F%L<P```````@```Y0```(6@P``!$!?:&%N9&QE7W-I9VYA;',`
  72612. +M```"```#S@```E"#```"0'-T<F-A=``````$```&0```!BH```+J```"U(,`
  72613. +M``1`7W-I9U]D:7-P871C:````````0``!`R#```#7U]S<')I;G1F````````
  72614. +M!0``"`X```=J```$U```!,0```2H@P```D!?<V5T97)R`````0``!/B#```"
  72615. +M0&UA;&QO8P`````#```%>@``!6P```52@P```T!?86QL;V-?9F0```````$`
  72616. +M``7V@P```T!?9G)E95]F9`````````,```A:```'M@``!OB#```#0&-H:V%B
  72617. +M;W)T`````````@``!^0```=`A@```U]?9FEF;U]O:P````````(```?H```'
  72618. +M1(8```1?7V9I9F]?;V9F<V5T````````!```!_H```?V```'5@``!U*&```#
  72619. +M7U]F:69O7V)A<V4``````@``!_X```=:@P```T!?9FEN9%]F9`````````(`
  72620. +M``A&```'H@````````/Q`````P````!/4%13``0`0````_(```/J````%5]M
  72621. +M``!?<P``9FEF;SHE<R]R=V5S2R5S`&T```!F:69O.B5S+W(`9FEF;SHE<R]M
  72622. +M=V5+``!?;0``7W,``'5X9FEF;RXE;'@``'5X9FEF;RXE;'@``````_(```/I
  72623. +M````"2`O``193RZ`0>P`%B`(6$].=2!O``193RZ(0>P`%B`(6$].=0```_@`
  72624. +M```"`````0```!P````*`````````_$````#`````$]05%,`!`!````#\@``
  72625. +M`^H````)=7-E<@````````````!W:&5E;`````````X````4```````&```#
  72626. +M[`````0````!````(````!H````6````!@````````/R```#Z0```*D@+P`$
  72627. +M64\N@"`L`0QG#B!`3KH``$J`9P1R`6`"<@`@`5A/3G4@+P`$(&P!#'(`3OH`
  72628. +M`$ZZ```I0`$,9@I(;```3KH``%A/(&P!#$ZZ``"!K```3G4@;`$,3OH```CL
  72629. +M``P``DYU("\`!`@```Q6P$0`2(!(P$YU".P`#0`"3G4@+P`$"```#5;`1`!(
  72630. +M@$C`3G5.N@``<``@;```$"@`#W(!X:&#K```3G5.^@``("\`!%E/2.<!%B]`
  72631. +M`!!^`&`N("T`%$ZZ```F0$J`9Q1*JP`49@Y^`7`!)T``%"=M`!@`&")-<!PL
  72632. +M>``$3J[_+B!L```L>``$3J[^C"I`2H!FP"`'3-]H@%A/3G4@+P`$2.</!"X`
  72633. +M<`'OH"P`<`F^@&8&<`!.N@``("P!!,"&9P:-K`$(8'HJ!D:%RZP!"$J':V9P
  72634. +M(+Z`;&`@!^>`0>P`!"IP"``P?``!N\AF+"`'58!G%%.`9Q!R#9"!9SQ9@&<X
  72635. +M48!G-&`*2&P`&$ZZ``!83W``3KH``&`@(`UG'"`'YX`H!D'L``2(L`@$B:P!
  72636. +M!"`'3I5&A,FL`00@+`$(P(9FBDS?(/!.=2`O``0O#B(L``""@'``+'@`!$ZN
  72637. +M_LXL7TYU("\`!"\.(@`@+```@($L>``$3J[^PBQ?3G4@+P`$2.<#`"X`?`!A
  72638. +M`/X02H!G"'P!<`YA`/\,(`=A`/YB2H!G"'P!<`)A`/[Z(`=A`/YJ2H!G"'P!
  72639. +M<`-A`/[H(`=A`/Z&2H!G"'P!<!1A`/[6(`9,WP#`3G4@+P`$+P<I0```<`@N
  72640. +M'V``_KQP`&$`_V!@D&#V2.<!%'X`2^P`!#9\``$JBT*M``12AU"-<""^@&WP
  72641. +M0JP!"$*L`01"K```80#]U&$`_>IA`/VB3-\H@&``_?AA`/VX8`#^"``````#
  72642. +M^`````(````!```!=````#X````7`````@```H0```*````"?````F0```'6
  72643. +M```!N@```:8```&B```!F````9````%*```!.````2X```$F````I````'H`
  72644. +M``!@````5@```%````!(````.````"H````*`````````^^#```$0%]T:6UE
  72645. +M<E]E>'!I<F5D``````$````2@P``!$!?=&EM97)?<W1A<G0````````!````
  72646. +M,(,```1`7V%L;&]C7W1I;65R`````````0```#2#```"7U]F86EL```````!
  72647. +M````0H,```-`7W1I;65R7W-I9P`````!````3(,```-`7V9R965?=&EM97(`
  72648. +M```!````6H,```1`7VEN:71?<')O8V5S<V5S`````0```)*&```$7U]C:&EL
  72649. +M9')E;E]E>&ET``````(```#N````F(,```5`7V-L96%N=7!?<')O8V5S<V5S
  72650. +M``````$```"J@P```T!?9FEN9%]P:60```````$```#$@P```D!?7V5X:70`
  72651. +M`````@```8````$B@P```U]?;65S<V%G90````````$```%XA@```E]?1E!%
  72652. +M4E(``````0```D@````````#\0````,`````3U!44P`$`$````/R```#Z@``
  72653. +M``I&86EL960@=&\@8W)E871E('1I;65R``!U<V5R(&EN=&5R<G5P=``````#
  72654. +M\@```^L```!$```#\@```^D```(=2&P`!$ZZ``!83TYU("\`!"\-3KH``"I`
  72655. +M2H!F`F'B(`TJ7TYU(&\`!"`O``@O"TZZ```F0$J`9@)AQB`+)E].=2!O``0O
  72656. +M#2I((`UF!$OL``X@34H89OQ3B)'-(`A2@$ZZ```@0$J`9@1P`&`((D@2W6;\
  72657. +M(`@J7TYU64](YP,T?@!\`"!L```F:`#08"Q**P`(9B0P/`4`P&L`#F8:4H<@
  72658. +M:P`*(`A*&&;\4XB1P"`(W(#<JP`45(8F4TJ39M`@!U*`Y8#0AF$`_THI0``8
  72659. +MY8<@0")`T\=%Z0`$+T``%&8*0>P``"E(`!A@5B!L```J:`#08$)*+0`(9CHP
  72660. +M/`4`P&T`#F8P)FT`"BXM`!0@;P`4(,HO2``48`(4VTH39OH4_``])FT`$&`"
  72661. +M%-L@!U.'2H!F]D(:*E5*E6:Z(&\`%$*03-\LP%A/3G4@;P`$("\`""\-*D@J
  72662. +M@$*M``3E@&$`_K0K0``(*E].=2!O``0B;P`(("\`#$CG(C0F22I(2H!G"B!+
  72663. +M80#^PB1`8`(D2R`*9SXB%20M``2T@6TB+`'<AG00TH*\@6T"(@8J@2`!Y8`@
  72664. +M;0`(3KH``"M```AG$D?M``0B$U*;Y8$@6R&*&`!P`4S?+$1.=2!O``0B;P`(
  72665. +M("\`#&&22H!F!&$`_AI.=2!O``0B;P`(2.<`%"9)*D@@+0`$T*L`!+"5;Q+0
  72666. +M@"J`Y8`@;0`(80#^&BM```@B+0`$Y8$@;0`(T<$@*P`$(@#E@2)K``A@`A#9
  72667. +M4X%D^M&M``0@:P`(3-\H`$[Z```@;P`$(F\`""]O``P`!"`O`!`B+P`464](
  72668. +MYP(T+`$J221(+T@`$$J`9T13@&<*4X!G``"V8```]%.&9R(@+P`8(@V0@2!O
  72669. +M`!!",`@`($$B;P`08`(2V%.`9/I@``#.0>P`$")O`!`2V&;\8```OB9O`!A@
  72670. +M;G!<L!5F9DHM``%G8%2-<`&\@&8&%/P`86!4(`95@&9&$"W__TB`2,!R(Y"!
  72671. +M9RY5@&<J58!G)E.`9R)3@&<>4X!G&G(5D(%G%'(<D(%G#E6`9PIR'Y"!9P15
  72672. +M@&8$%/P`)Q3M__]@"!3M__]@`A3=N\MECF!`)F\`&&`V<"JP%68N2BT``6<H
  72673. +M5(T0+?__2(!(P')ED(%G#'()D(%F#!3\``I@#A3\`!M@"!3M__]@`A3=N\ME
  72674. +MQD(23-\L0%A/3G6>_`$L2.<_-BIO`5@@;```#&@`)0`49`I(>``43KH``%A/
  72675. +M0JP`''`!*4``&"E``#YP`BE``#HI0`!@*7P```"$`%R3R2QX``1.KO[:*4``
  72676. +M`$ZZ```I0``$9@I(;``23KH``%A/(&P`!$ZZ```I0``(+&P`!"!6+&@`%"E.
  72677. +M`!1![P$P3J[_OBEO`3``#$ZZ``!.N@``(&P``"`H`*QG$.6`(D`B*0`TY8$I
  72678. +M00`08`8I:`"$`!!*%68``.A![``J(@@L;```)#P```/N3J[_XBP`0>P`,"((
  72679. +M3J[_XBX`0>P`-B((3J[_XBH`2H9G"$J'9P1*A68B2H9G!B(&3J[_W$J'9P8B
  72680. +M!TZN_]Q*A6<&(@5.KO_<80#[<G`!+P`O!2\`+P<B!L%!3KH``"!L```@*``<
  72681. +M0>\!6&$`_)Y/[P`0?`!^`&!0(FP``"!I`"0@,'@`9SXB`$/O`#`D"2QL``!V
  72682. +M0.6+3J[^;DJ`9R8B;```(&D`)-''("@`!&<((@(D`$ZN_(Y![P%(0^\`,'`!
  72683. +M80#\V%*&4(<@;```O*@`'&VF8``"S"QL``!.KO_**`!.KO_$*@!^`"!L```L
  72684. +M*`#@9BA^`4'L`#PB""0\```#[4ZN_^(L`&820>P`/B((3J[_XBP`9@1A`/JD
  72685. +M+P<O!G``+P`O!2($P4%.N@``0>\!6'`!80#[UB`\```%&F$`^HX@0#%\!```
  72686. +M$B]``#QP0.6(80#Z>D_O`!!^0.6/+T`!.&`"4HT0%4B`2,!![``!"#```P@`
  72687. +M9NP0%6<``A9R(K`!9C!2C29-8!!P*K`59@A*+0`!9P)2C5*-$!5G!G(BL`%F
  72688. +MYB1-$!5R(K`!9@)2C7P"8%1P)[`59B!2C29-8`)2C1`59P9R)[`!9O0D37`G
  72689. +ML!5F`E*-?`%@+B9-8!!P7+`59@A*+0`!9P)2C5*-$!5G$G(@L`%G#'(*L`%G
  72690. +M!G()L`%FVB1-?``@2RH*FHL@!5*`+T@`*&$`^;8F0$JO`4QF("`%($LB;P`H
  72691. +M3KH``$(S6`!![P%((DMP`&$`^V!@`/\FVH5R$-J!NH=O%"!O`3A.N@``(`5A
  72692. +M`/EV+@4O0`$X+PH@!B!+(F\`+'(!80#[KEA/(@LD+P$X)@<L;```3J[\N"H`
  72693. +M;!!"$B\O`"A(;`!$3KH``%!/2H5F(B\*(`8@2R)O`"QR`&$`^W1![P%,(DMP
  72694. +M`&$`^NA83V``_JQZ`2!O`"Q"J``(0B@`$4(H`!`O"B`&($LB;P`L<@)A`/M`
  72695. +M0>\!0'`080#Z)EA/(@LD+P`L+&P``$ZN_,HH`&8\8"IZ`")O`"S2_`$80>\!
  72696. +M/'`!80#Z($J`9@1X9V`2(B\`+"QL``!.KOS$*`!*A&?2(B\`+"QL``!.KOR^
  72697. +M<'30@+B`9PI(;`!83KH``%A/2H5G(B\*(`8@2R)O`"QR`&$`^L!![P%,(DMP
  72698. +M`&$`^C183V``_?@@+P%`(&\!1$ZZ``!![P%(0^\!/&$`^BH@2TZZ``!@`/W6
  72699. +M(&\!.$ZZ```@;P`L3KH``&$`^))![`!R3KH``"E```!F"$'L`'@I2```0>P`
  72700. +M?DZZ```I0``49@8I;````!1![`"(3KH``"E``!AF"$'L`(XI2``80>P`DDZZ
  72701. +M```I0``<9@A![`"8*4@`'$'L`*!.N@``*4``'&8(0>P`JBE(`!P@+P%,(&\!
  72702. +M4")L`!A.N@``<`!.N@``3-]L_-[\`2Q.=0```_@````5`````0``"$X```A`
  72703. +M```(.```""H```@B```(%```"`````?X```'Z@``!X0```;0```%3@``!3H`
  72704. +M``18```$3```!#8```/6```"J````.````!.`````@```!(````"```(7@``
  72705. +M"%(```A(```%+@``!"P```0D```$$```!`0```/V```#[````^@```/@```#
  72706. +MT````\@```#J````Y````,H```"$`````````^^#```"7U]F86EL```````$
  72707. +M```'B```!M0```/:````!H,```)`;6%L;&]C``````(```!@````%(,```)`
  72708. +M<F5A;&QO8P````(```&R````,(,```)`9G)E90````````4```?B```'V@``
  72709. +M!\X```:4```"1H8```)?4WES0F%S90````$```.(@P```E]?6$-%6$E4````
  72710. +M`0```YB&```"7U]?:6]B```````&```#N@```[(```.N```#J````Z0```.>
  72711. +M@P``!$!?86QL;V-?=&EM97(````````!```#S(,```-`7W1I;65R7W-I9P``
  72712. +M```!```#Y(,```-`7VEN:71?9FEF;P`````!```$"(,```1`7VEN:71?<VEG
  72713. +M;F%L<P```````0``!`R&```"7T1/4T)A<V4````'```'=```!V(```<T```&
  72714. +MO@``!1P```34```$/(,```1`7VEN:71?=6YI>&EO`````````@``!6X```2@
  72715. +MA@```U]?5T)E;F-H37-G``````0```4.```$Y```!+X```2DA@```E]?7V-T
  72716. +M>7!E`````0``!;"#```"0'-T<FYC<'D````!```&;H,```)`='%S;W)T````
  72717. +M``$```>\@P```T!?7V=E=&5N=@````````4```A$```(+@``"!@```@$```'
  72718. +M[H8```-?7V%M:6=A7W5S97(````)```(/```"#(```@F```('```"!````@.
  72719. +M```("```!_P```?R@P```D!M86EN`````````0``"&*#```"0&5X:70`````
  72720. +M```!```(:`````````/Q`````P````!/4%13``0`0````_(```/J````+```
  72721. +M``!.;R!M96UO<GD```!A`$9A:6QE9"!T;R!C<F5A=&4@=&EM97(``$Y)3#H`
  72722. +M`$Y)3#H``$Y)3#H``"H`3DE,.@``26YV86QI9"!W:6QD8V%R9"`E<P!%<G)O
  72723. +M<B!E>'!A;F1I;F<@87)G=6UE;G1S`%5315(``'5S97(``%5315).04U%``!(
  72724. +M3TU%``!S.@``4TA%3$P`8FEN.G-H``!(3U-43D%-10``86UI9V$````#\@``
  72725. +M`^L````(```#\@```^D````$("\`!%E/+H!P`%A/3G4``````_$````#````
  72726. +M`$]05%,`!``````#\@```^D````^("\`!$CG`P`N`$JL``!G!"`'8&!\`"`'
  72727. +M`H````$D9P)\"`@'``=G!`!&``4(!P`$9P0(Q@`""`<``6<$",8```@'``-G
  72728. +M!`C&``$(!P``9P0(Q@`&(`=R2<"!<D"P@68$`$8`0@@'``EG!`C&``4@!@I`
  72729. +M``],WP#`3G4@+P`$2.<&`"P`2JP``&<((`8"0`__8%YZ``I&``\(!@`#9P1Z
  72730. +M2>6-(`9R!<"!6X!F!`C%``<(!@`"9P0(Q0`$"`8``&<$",4``2`&<D+`@6<$
  72731. +M",4`!@@&``%G!`C%``,(!@`&9P0(Q0``"`8`!6<$",4`"2`%3-\`8$YU````
  72732. +M``/X`````@````$```"&````#`````````/Q`````P````!/4%13``0`0```
  72733. +M`_(```/K`````0```_(```/I`````G``3G5P`$YU```#\0````,`````3U!4
  72734. +M4P`$``````/R```#Z0```!5(YP,`3KH``"X`?`!@"B\&3KH``%A/4H:\AVWR
  72735. +M3-\`P$YU("\`!"\'+@!AU$ZZ``!.N@``(&P``$ZZ```O!TZZ``!83RX?3G4@
  72736. +M+P`$+P<N'V#4``````/O@P```T!?;&%S=%]F9`````````$````&@P```E]C
  72737. +M;&]S90```````0```!*#```$0%]C;&5A;G5P7V9I9F\```````$````N@P``
  72738. +M!4!?8VQE86YU<%]S:6=N86QS`````````0```#*&```#7U]O9&1?=&EM97(`
  72739. +M`````0```#:#```#0%]F<F5E7W1I;65R`````0```#J#```"7U]80T58250`
  72740. +M```!````0`````````/Q`````P````!/4%13``0`0````_(```/I````$R`O
  72741. +M``0B+P`((&\`#%%/2.<#)"P!+@`J2$ZZ```@!TZZ``!*@&<:(D`@:0`@+T@`
  72742. +M%"`&(&D`!")-)&\`%$Z28`)P_TS?),!03TYU``````/O@P```T!C:&MA8F]R
  72743. +M=`````````$````:@P```T!?9FEN9%]F9`````````$````@`````````_$`
  72744. +M```#`````$]05%,`!``````#\@```^D```"8GOP`#$CG+S8J;P`T?@/.KP`X
  72745. +M?`$@;```)F@`N"H\```#[$ZZ``!*AV<*<`*^@&<$<@!@`G(!+T$`*'`!OH!G
  72746. +M"%6'9P1P`&`"<`$O0``L($U#[```3KH``$J`9@9X_V```51P_R!L```A0`"X
  72747. +M(@TL;```=/Y.KO^L+@`@;```(4L`N$J`9G@L;```3J[_?$ZZ```L`"`L``!R
  72748. +M+D8!L(%G!$J`9@I^`2H\```#[F`6(`95@&8,""\`"``Z9P1P`6`"<``N`$J'
  72749. +M9RQ\``@O``@`.F<<""\`#P`Z9P9X`F```-8@+P`\3KH``"@`8```R'C_8```
  72750. +MPBE&``!P_V```4)"IRQL``!R`B0/3J[_'$_O``0D0$J`9PPB!R0*3J[_FDJ`
  72751. +M9A8@"F<()`IR`DZN_Q9.N@``</]@``$(*"H`="0*<@).KO\6(@=.KO^F<%#I
  72752. +MB,"O`#@,@```!0!F#'`1*4```'#_8```VDJO`"AG!@@$``-F#$JO`"QG$@@$
  72753. +M``)G#'`-*4```'#_8```M@@O``D`.F<B(@TD/````^Y.KO_B2H!G""(`3J[_
  72754. +MW&`*3KH``'#_8```C`@O``@`.F<$(`5@!B`\```#[20`(@TL;```3J[_XBH`
  72755. +M9@A.N@``</]@8`@O``D`.F8$2H9F!"P$8`)\_WX`2J\`*&<"?@%*KP`L9P0(
  72756. +MQP`!""\``P`[9P0(QP`#+P<@!2(&3KH``%A/+@!L''#_(&P``"%``+@B!2QL
  72757. +M``!.KO_<(&P``"%+`+@@!TS?;/3>_``,3G4@;P`$+R\`#"\O``PO"&$`_:A/
  72758. +M[P`,3G4```/X`````0````$```!2`````````^^&```!7U]U<P````4```(V
  72759. +M```")````'P```!F````%H,```-`8VAK86)O<G0````````!````)(,```)`
  72760. +M<W1R:6-M<`````$```!6A@```E]$3U-"87-E````!0```BX```',```!`@``
  72761. +M`(@```!P@P``!$!C;VYV97)T7V]S97)R```````!````D(8```)?7T]315)2
  72762. +M``````$```"6@P``!4!?;6%K95]P<F]T96-T:6]N`````````0```.:&```"
  72763. +M7V5R<FYO```````#```!@@```5X```#V@P```D!?<V5T97)R`````P```=@`
  72764. +M``&L```!,(,```1`7V%L;&]C7V%M:6=A9F0``````0```A@````````#\0``
  72765. +M``,`````3U!44P`$`$````/R```#Z@````).24PZ`````````_(```/I```%
  72766. +M:"!O``1(YS@`</_`*``#<@`2`'#_P"@``G0`%`!P_\`H``%V`!8`</_`$'@`
  72767. +M&`#AA(B#X82(@N&$B($@!$S?`!Q.=4CG(S1+[`!R0>P`'$7L``PDR$'L`"`D
  72768. +MR$*L`!A"FGX`+"P`>D?L![Q@/"`K``0B`.6!($W1ZP`(0^@'ZD7L``PEB1@`
  72769. +M2H!G!G`!*4``&$J'9P9*JP`$9@@@$T2`*4``%%*'UOP`$+Z&;<!^`"PL`'9@
  72770. +M.G``(@<&@0``!=@0-1@`2,#I@"!-(@`&@0``!U+1]1@`!H````=.)#4(`.6"
  72771. +M0^@'ZD7L``PEB2@`4H>^AFW"3-\LQ$YU(&\`!")O``B>_`HH2.<[-B](`"@O
  72772. +M20`L(`AF"$WL`"0O3@`H<#H@;P`HL!!F!%*O`"@@;P`H<#I.N@``2H!F3G`*
  72773. +M(@`@;P`H(`A*&&;\4XB1P-*(4H%P0;*`909P_V```DQ![``P0^\`,1+89OQ!
  72774. +M[P`Q0^P`/$ZZ``!![P`Q(F\`*$ZZ``!![P`Q+T@`*$*G+R\`+$ZZ``!03RX`
  72775. +M4H!F!G#_8``"""`'0>\`<B(\```)VDZZ```L`"`'3KH``$J`9@9P++R`9`9P
  72776. +M_V```>!![P"*80#^."X`0>\`CF$`_BXJ;P`L*H!![P"280#^("M```1![P"6
  72777. +M80#^%"M```A![P":80#^""M```PB%6LP=#*R@FXJ)BT`"&\D>`JVA&X>*"T`
  72778. +M!&L8#(0```%R;A!*@&L,L()N"+:'9PI*AV<&</]@``%JTH'E@2`M``@D`-2"
  72779. +MU(#4@B`M``0F`.6#UH#6@M:M``S6@=:'<"S6@+R#9`9P_V```3A'[P">?``D
  72780. +M36`0($MA`/V()4``$%B+4H98BKRM``1MZGP`8"`0&R(&!H$```78&X`8`'(`
  72781. +M$@"RK0`(;09P_V```/92AKRM``1MVGP`0>T'2B1(+T@`)&!*($MA`/TZ)(!+
  72782. +MZP`%$"L`!'(`$@`E00`$9PI3@6<&</]@``"\1^T``1`5<@`2`"5!``AM"BIO
  72783. +M`"RRK0`,;P9P_V```)Q2AM3\`!"\K0`(;;!\`&`.(`8&@```!^H;FP@`4H:\
  72784. +MK0`,;>P@!@:````'ZD(U"`!\`-K\"!Y@'B!+80#\OBJ`1>L`!"!*80#\LBM`
  72785. +M``1'Z@`$4H90C2!O`"R\D&W:?``D;P`D*F\`+&`H2H=F!D*J``Q@&!`;2(!(
  72786. +MP"5```QR`;"!9PA*@&<$</]@#E*&U/P`$+RM``AMTG``3-]LW-[\"BA.=2!O
  72787. +M``193R\-*DA@`E*-$!4?0``$9R9(@$C`0>P``0@P``((`&86$"\`!'(LL`%G
  72788. +M#'(ML`%G!G(KL`%FT"`-*E]83TYU(&\`!")O``@@+P`,(B\`$%E/2.<'%"P!
  72789. +M+@`F22I((`UG$A`52(!(P$'L``$(,``""`!F!'``8$IZ`&`B$"\`%$B`2,`B
  72790. +M!>6!TH72@=*`*@%P,)J`NH9O!'``8"92C1`5'T``%&<02(!(P$'L``$(,``"
  72791. +M"`!FQKJ';`1P`&`$)H4@#4S?*.!83TYU(&\`!")O``A93TCG`!0F24/O``AP
  72792. +M`'(880#_;"I`2H!F!'``8&H@+P`((@#I@9*`(`'I@)"!Z8`F@'`ZL!5F3D'M
  72793. +M``%#[P`(<`!R.V$`_S@J0$J`9@1P`&`V("\`""(`Z8&2@.6!TY-P.K`59B!!
  72794. +M[0`!0^\`"'``<CMA`/\**D!*@&8$<`!@""`O``C1DR`-3-\H`%A/3G4@;P`$
  72795. +M(F\`"%E/2.<!%"I)+T@`#!`0<BVP`68(?@%2KP`,8#!(@$C`0>P``0@P``((
  72796. +M`&88<BL@;P`,LAA7P$0`2(!(P"](``Q*@&<$?@!@!'``8!P@;P`,(DUA`/\4
  72797. +M)D!*@&8$<`!@"$J'9P)$E2`+3-\H@%A/3G4@;P`$(F\`")[\``Q(YP`D*DDO
  72798. +M2``0<$JP$&8H0I5#Z``!0>T`!"](``P@22)O``QP`2(\```!;6$`_CPO0``0
  72799. +M8```M'!-L!!F?'`"*H!#Z``!0>T`#"](``P@22)O``QP`7(,80#^$")`2H!F
  72800. +M!G``8```P$7I``%P+K`19P9P`&```+!![0`((D@@2G`!<@5A`/WD(D!*@&8&
  72801. +M<`!@``"41>D``7`NL!%G!G``8```A$'M``0B2"!*<`!R!F$`_;@O0``08#`0
  72802. +M$$B`2,!#[``!"#$``@@`9QIP`2J`0^T`!'``(CP```%M80#]C"]``!!@!'``
  72803. +M8#P@+P`09@1P`&`R<"\@;P`0L!!F'$/H``%![0`0+T@`#"!)(F\`#&$`_=HO
  72804. +M0``08`@K?```'"``$"`O`!!,WR0`WOP`#$YU("\`!"(O``@@;P`,+V\`$``$
  72805. +MGOP`)$CG/Q0J2"H`+@$D!W8#Q(,O0``X+T$`/$J"9@P@!W)D3KH``$J!9A(@
  72806. +M!W)DY8E.N@``2H%G!'``8`)P`2P`(!5*@&<,4X!G2%.`9V9@``%^("T`!"(`
  72807. +M4X$D`=2"U($F`NF#EH(D`^F"E(/O@BX%WH(O1P!`2H9G``%4<CRP@6T``4P&
  72808. +MAP`!48`O1P!`8``!/B`M``0B`-*!TH`D`>F"E($B`NF!DH+O@=J!+T4`0&``
  72809. +M`1PH!7X`*BT`#%.%(`;0@-"&Z8!'[``^U\`O0``@8!H@&R(`TH'2@"0!Z8*4
  72810. +M@2("Z8&2@N^!V(%2A[Z%;>(N+P`\+T0`)"(M``QT`K*";@8F!U.#8`(F!R`#
  72811. +M<F1.N@``(@#2@4J`:@)6@.2`+T``+"`#+T$`,')D3KH``"`!:@)6@.2`=@G6
  72812. +MK0`,+T``-"`#+T$`*'(,3KH``%*!(`'G@)"!T("0@="`58!R"DZZ``!'[P`H
  72813. +MT)O0KP`TT)N0FU*`<@=.N@``+@%J`EZ'+"T`!)R':@)>AGH!*"T`"&`<+@9>
  72814. +MAR(M``SE@4'L`#K1[P`@OK`8`&P(+`=2A;J$;>`@!M"`T(8B`.F!DH`@`>F`
  72815. +MD('O@"(O`"32@"]!`$`@+P!`T*T`$-"O`$A,WRC\WOP`)$YU(&\`!")O``@@
  72816. +M+P`,GOP`6$CG/S8J2"Q-1^\`-";`)L@FR2].`#!*@&<<(`A*&&;\4XB1P"P(
  72817. +M(@C3KP`X<#.R@&4<?#)@&&$`^JHL`)R-+T``.'(#O(%L!G#_8``#>B]&`"P@
  72818. +M;P`X2A!F!G#_8``#:$/O`'1A`/OF+T``.&8&</]@``-4)F\`/$'L`*8B2V$`
  72819. +M][`N`&<"0I,@;P`X2A!G``*^*D@O2`!\80#Z2"(`DHTO0``X+T$`>'8#LH-L
  72820. +M!G#_8``#%"!O`#@0$&<@<BRP`6<:<CNP`6<40^\`<&$`^WXO0``X9A1P_V``
  72821. +M`NP@//__\?#0KP!T+T``<"!O`#@0$'(LL`%G"'([L`%F``%80^@``2!)0^\`
  72822. +M7&$`^[HJ0$J`9@9P_V```K!%[0`!<"RP%6<&</]@``*@($I#[P!(80#[E"]`
  72823. +M`#AF!G#_8``"BB!O`#A*$&<&</]@``)\($MP`B%```@A?````(@`!"`O`'!$
  72824. +M@$WH!THLP'`!+,!2ABS&("\`=$2`3>@'6BS`0IY"GM;\`!!%Z`78>@`L/```
  72825. +M![(@2B\O`'0O2``L(`4B!D'O`&!A`/QF+@`NKP!T(`4B!D'O`$QA`/Q46$\H
  72826. +M`$OJ``)%ZP`(OH!O&B!+((1P`2)O`"@2@"9*(4<`!"1-0BD``6`8($L@AR)O
  72827. +M`"A"$29*(40`!"1-$WP``0`!(`9R`\"!9@P@!G)D3KH``$J!9A(@!G)DY8E.
  72828. +MN@``2H%G!'``8`)P`2(`Y8%![`">(#`8`"(`TH'2@"8!Z8.6@20#Z8*4@^^"
  72829. +MVH)2A@R&```']6\`_T)@``$<(&\`.$H09P9P_V```69*AV<&</]@``%<>`!\
  72830. +M`'H`0J\`1'X`*DM@<$JM!TYG/B`O`$0B!^F!)"\`<`:!```'2B8S&`#6@B]#
  72831. +M`$1*AF<*L(-G!G#_8``!'$2"*T('2B`O`"Q2@"M`!U)\`6`F(`4B+P!T*BT'
  72832. +M2MJ!2H1G"K"%9P9P_V```.Y$@2M!!TI"K0=2>`%2A]K\`!"^JP`(;8I*AF<$
  72833. +M2H1F!G#_8```R'P`?@`J2R@O`$1@.G``(@<&@0``!=@0,Q@`2,#I@"!+T<!#
  72834. +MZ`=*+TD`0$J&9PI*J0`,9@0@!&`"(`71K0`0+"D`!%*'6(V^JP`$;<!@('``
  72835. +M<@$G00`()T``!"0O`'1$@DWK!THLPBS`+,`O0`!X*F\`/"XO`"P@!U*`*T``
  72836. +M#"PO`'AG"-"&4H`K0``,<C.P@6,$</]@,-K\!^H@!R!-(F\`,$ZZ```@3=''
  72837. +M2^@``4(02H9G$"`&($TB;P!\3KH``$(U:`!P`$S?;/S>_`!83G4@;P`$+PTJ
  72838. +M2$'L```B36$`]%!*@&<,0>P``")-<`%A`/P,*E].=2\-0>P`LDZZ```J0$J`
  72839. +M9@8J7V```%QP`2E`$\Y*%68>0JP`<D*L`'9"K`>\0JP'Q$'L``!#[`A<$MAF
  72840. +M_&`L($U#[`!R80#S]$J`9QYP.K`59Q`@34/L`')P`&$`^ZI*@&<(0>P`<F$`
  72841. +M_W8J7V``\PYP`2E`$\Y#[`!RD<AA`/.\2H!G"$'L`')A`/]48`#R[B!O``0@
  72842. +M+P`((F\`#)[\`!!(YP,4*DE([P$!`!`@;P`4+U``&$JL$\YF!&$`_T1*K`!V
  72843. +M9PH@+P`8L*P`@FP@?@!'[`!R8!!2A];\`!"^K`!Z;01^`&`R2JL'3F;J8"I^
  72844. +M`4?L`'8L+`!V8`X@+P`8L*L`$&T(4H=8B[Z&;>Y#[`!RT\=^`!XI!=?IAT'L
  72845. +M![S1QR\-+T@`("`00>\`'$/L`')A``#"(&\`("(H``0K00`@Y8%![`A<(F\`
  72846. +M(-'I``A#[``,(X@8`"M(`"A83TS?*,#>_``03G4@;P`$0^P``'``80#_*D'L
  72847. +M```@"$YU(&\`!"`O``@B;P`,2.<!%"X`)DDJ2$JL$])F#G`!*4`3TD'L"B!A
  72848. +M`/XZ+PL@!R!-0^P*(&$``$)83TJ'9P9![`"Z8`1![!(*)T@`*$S?*(!.=2!O
  72849. +M``1#[``L<`!AKD'L`"P@"$YU(&\`!"`O``@B;P`,+V\`$``$GOP`#$CG#S0N
  72850. +M`"9O`"PJ2'P`>@`H$2`$YX`O20`@T\!%Z0@>8$`O2@`D(!6PDFTV(&\`)+"0
  72851. +M9BA*A&8&("@`!&X:YX0B*``$(F\`(`:$```(&K*Q2`!N!'``8`)P`2H`+"@`
  72852. +M!&`&4X11BFRZ(!4B/``!48!.N@``*``@%2(\``%1@$ZZ``#2AY*&+`%@"`:&
  72853. +M``%1@%.$2H9K]&`(!(8``5&`4H0,A@`!48!L\"`&(CP```X03KH``"=```@@
  72854. +M!B(\```.$$ZZ```@`2]!`!QR/$ZZ```G0``$("\`''(\3KH``":!2H5G`E*3
  72855. +M(`18@'('3KH``"=!`!AL!%ZK`!@L/```![)*A&M`(`9R`\"!9@P@!G)D3KH`
  72856. +M`$J!9A(@!G)DY8E.N@``2H%G!'``8`)P`2H`(@#E@47L`)X@,A@`N(!M0%*&
  72857. +MF(!@P%.&(`9R`\"!9@P@!G)D3KH``$J!9A(@!G)DY8E.N@``2H%G!'``8`)P
  72858. +M`2H`Y8!![`">V+`(`$J$:\8$A@``!VPG1@`4)T0`'"`%T(#0A>F`1>P`/M7`
  72859. +M0JL`$&`.(BL`$.6!F+(8`%*K`!`B*P`0Y8&XLA@`;.92A"=$``Q"JP`@)T<`
  72860. +M)$S?+/#>_``,3G4@;P`$+PTJ2"`M`!@B`-*!TH!![`"^T<$@+0`0(@#2@=*`
  72861. +M0^P`T]/!(#P```=LT*T`%"\`+Q4O+0`$+RT`""\M``PO"2\(2&P`^$AL`%A.
  72862. +MN@``3^\`)$'L`%@@""I?3G4@;P`$+PUA`/TX($`J7V"4(&\`!")O``@@+P`,
  72863. +M+P<N`"`1L(=M%"('3KH``-&0(!$B!TZZ```B@6`J2H!J)E.0WY%L("`11(`B
  72864. +M!TZZ```B$)*`4X$@@2`11(`B!TZZ``">@2*'+A].=2!O``0B;P`(2.<!%"9)
  72865. +M*D@N+0`4GJL`%&8L+BT`$)ZK`!!F(BXM``R>JP`,9A@N+0`(GJL`"&8.+BT`
  72866. +M!)ZK``1F!"X5GI,@!TS?*(!.=2!O``0B;P`(("\`#"]O`!``!)[\`'!(YS\T
  72867. +M+@`J;P"8+TD`+$*5+T@`*$/O`%QP"B+84<C__"`O`%QR/K"!;`1*@&H.0>\`
  72868. +M8$/O`%QP/&$`_Q9![P!D0^\`8'`\80#_"$'O`&A#[P!D<!AA`/[Z0>\`<$/O
  72869. +M`&QP#&$`_NQ@3"`O`'!3KP!P!H````=K(@!T`\*"9@IR9$ZZ``!*@68:(#P`
  72870. +M``=LT*\`<')DY8E.N@``2H%G!'``8`)P`2(`Y8%![`">(#`8`-&O`&@@+P!H
  72871. +M;ZXL/```!VS<KP!P(`9R`\"!9@P@!G)D3KH``$J!9A(@!G)DY8E.N@``2H%G
  72872. +M!'``8`)P`20O`&SE@B8`UH/6@.F#0>P`/M'#+#`H`"`O`&BPAF\:1^\`:)V;
  72873. +M4I,,FP````QMGD*O`&Q2KP!P8)0@+P!<0J\`7'H`<@$O00"(+T``)%*%("\`
  72874. +MB-"`+T``B"`O`(AN[B`O`(AJ!'``8`1P`>N@+T``B$AO`#`O!TAO`)`@;P`X
  72875. +M3I!![P`\0^\`:&$`_BQ/[P`,*`!G+B`%4X5*@&H&</]@``$02H5J!E.O`(A@
  72876. +MQ'`!ZZ`L`$J$;P:=KP"(8+3=KP"(8*X@+P!\:P``Q"(O`%"R@&<``+I!^OGB
  72877. +M(F\`++/(9@9![`!R8`1![`H@?``F2"](`)!@``"(("L'3K"O`'QF=GH`)&\`
  72878. +MD&!D("H'3K"O`'QG5"`%Z8`B+P"((&\`D`:````'2M*P"`"2JP=*+T$`C$AO
  72879. +M`#`O!TAO`)0@;P`X3I!![P`\0^\`:&$`_6Q/[P`,2H!F$B`O`%"PKP!\9@@O
  72880. +M;P",`(A@)E*%U/P`$"!O`)"ZJ``(;9)2AM;\`!`@;P"0O*@`"&T`_W!P_V`D
  72881. +M("\`)-&O`(@O+P`H+P=(;P"0(&\`.$Z0<`$J@$_O``P@+P"(3-\L_-[\`'!.
  72882. +M=2!O``0B;P`(("\`#)[\``Q(YP<T+@`J2"])`!@,K0````$`(&\&<`$K0``@
  72883. +M2&\`'"`'($UA`/T>6$\L`$JO`!QF!B`M`"!J!B`&8```QD'Z^*XB;P`8L\AF
  72884. +M!D'L`')@!$'L"B!\`"9(+T@`(&```)8@*P=.L*T`(&8``(1Z`"1O`"!@<"`M
  72885. +M`"`B*@=.LH!G7B`%Z8`B%2!O`"`&@```!TK2L`@`DJL'2BJ!2JT`(%?`1`!(
  72886. +M@$C`*T``($AO`!P@!R!-(F\`'&$`_(Q83TJO`!QF0"`5D*H'2M"K!THJ@$JM
  72887. +M`"!7P$0`2(!(P"M``"!2A=3\`!`@;P`@NJ@`"&V&4H;6_``0(&\`(+RH``AM
  72888. +M`/]B</],WRS@WOP`#$YU(&\`!"\-0_KWVG``*E]@`/[@2JP3SF8$80#W+$YU
  72889. +M``````/X````'0````$``!*X```29@``$-@``!"T```0I```$%0``!`R```/
  72890. +M\@``#H(```X6```,^```#,H```RX```,J@``"O@```E*```(>```!Z0```%L
  72891. +M```!7````18```#F````H````(X```"`````7````%8```!0````3````"L`
  72892. +M```"```5E```%,8``!3````3D@``$XP``!#H```0W```#J(```Z:```.B```
  72893. +M#G0```YF```.8@``#EH```X\```.,@``#@H```WT```-X@``#=0```V\```-
  72894. +MN```#:0```V8```-D```#88```U\```-3```#3X```TZ```-*@``#1P```T(
  72895. +M```,_```#/0```SP```,[```#.@```S@````L````&@```!D````2```````
  72896. +M``/O@P```D!S=')C:'(``````0```3*#```"0'-T<F-A=``````"```!?```
  72897. +M`7"#```"7V]P96X````````!```!CH,```)`<F5A9`````````$```&L@P``
  72898. +M`D!C;&]S90```````0```;2&```"7U]?8W1Y<&4````%```&6@``!3X```1>
  72899. +M```$'````\J#```"7U]#6$0S,P`````<```2G```$HX``!)4```2/@``$4X`
  72900. +M`!$\```1)```$1H``!`@```0$@``#]X```_0```/K```#YH```^,```/@```
  72901. +M#W````\^```/,```"N8```K8```(4@``"#P```@F```("```!^P```<.```'
  72902. +M`(,```)`<W1R;F-P>0````(```R.```,=(,```-`7U]G971E;G8````````!
  72903. +M```,SH,```)?<W!R:6YT9@````$``!#@`````````_$````#`````$]05%,`
  72904. +M!`!````#\@```^H```!(1TU4`"`@(``@("``````!`````@``````````"`@
  72905. +M(``@("``<SIL;V-A;'1I;64`<SIZ;VYE:6YF;P``+P`````?````'````!\`
  72906. +M```>````'P```!X````?````'P```!X````?````'@```!\````?````'0``
  72907. +M`!\````>````'P```!X````?````'P```!X````?````'@```!\```%M```!
  72908. +M;G!O<VEX<G5L97,``%5.25A46@``("`@`%-U;DUO;E1U95=E9%1H=49R:5-A
  72909. +M=$IA;D9E8DUA<D%P<DUA>4IU;DIU;$%U9U-E<$]C=$YO=D1E8P`E+C-S("4N
  72910. +M,W,E,V0@)3`R+C)D.B4P,BXR9#HE,#(N,F0@)60*```````#[`````(````!
  72911. +M````$`````P````````#\@```^L```3V```#\@```^D```&<GOP`#$C7`0-P
  72912. +M_][\``Q.=5%/2-<#`%!/3G5(YS`"(A!**``-9P1P`&`<)`DF`"QL``!.KO_6
  72913. +M(@!2@&8(3KH``'#_8`(@`4S?0`Q.=5%/2.<_-BX`*DDF2"P3+T8`*"](`"Q*
  72914. +M*P`-9P9P`&```(Q**P`,9V8F3=?'>@!@6"1-8`)2BK7+9`9P"K`29O2WRF8$
  72915. +M*`I@!D'J``$H")B-(B\`*"0-)@0L;```3J[_T"P`4H!F"$ZZ``!P_V`^VH:V
  72916. +MAF8V2^H``9Z&<`!.N@``3KH``$J`9B)*AV:D8!PB!B0-)@<L;```3J[_T"H`
  72917. +M4H!F"$ZZ``!P_V`"(`5,WVS\4$].=5E/2.<_`BX`+!`O00`<2B@`#6<$<`!@
  72918. +M4E.!)@$B!B0'+&P``$ZN_[XJ`$ZN_WPH`%*%9P1*A&<.(`1.N@``*4```'#_
  72919. +M8"0B!G0`)@).KO^^+`!2@&<$2H1G#B`$3KH``"E```!P_V`"(`9,WT#\6$].
  72920. +M=9[\`0!(YS\&+@`J2"P5*BT`""`M``1G"B(`+&P``$ZN_Z88+0`-2(1(Q"!-
  72921. +M3KH``$J$9P1P`&!$(@9![P`@)`@L;```=D#EBTZN_F@H`$J'9@HB!DZN_]Q*
  72922. +M@&<:2H1G$G#_NH!G#"(")`5.KO]&2H!G!'``8`9.N@``</],WV#\WOP!`$YU
  72923. +M("\`!$CG(`(B`"QL``!T`$ZN_S1.KO]\="Y&`K""5\%$`4B!2,$@`4S?0`1.
  72924. +M=2`O``0@;P`((F\`#)[\`!!(YS<6+@`F22I(?`!AN$J`9GPB!RQL``!T`4ZN
  72925. +M_E9*@&=L(@=![```)`AV!$ZN_]!9@&92(@<D/```)Q!.KO\T2H!G0B('0>\`
  72926. +M("0(=A!.KO_6<@FP@6\N<)NP+P`@9B9![P`E(@@D"TZN_-`J`$'O`";1P"((
  72927. +M)`U.KOS04H!G!E*%9P)\`2('=`!.KOY6(`9,WVCLWOP`$$YU("\`!"(O``B>
  72928. +M_`(02.<_!BX`</\O0`(H+T$`)"('+&P``'0`=@%.KO^^+T``("('3J[_OBP`
  72929. +M3J[_?"H`+T`"+&8``,(H+P`D(@<D!';_3J[^.+""9@``KKR";```GBH$FH8H
  72930. +M!2`$<@%(02QX``1.KO\Z*D!*@&9J<@)(04ZN_RCBB"H`#(4```(`;1`@!7(!
  72931. +M2$%.KO\Z*D!*@&9&>D#GC4OO`"@P/`'_<@!![P`H$,%1R/_\8"RXA6\$(`5@
  72932. +M`B`$)@!.N@``(@<D#2QL``!.KO_0L(-G"DZN_WPO0`(L8`:8@TJ$;M!![P`H
  72933. +ML<UG#")-(`4L>``$3J[_+BHO`BQF!$*O`B@L+P`@O*\`)&P.(@<D!BQL``!V
  72934. +M_TZN_[XL+P(H9PH@!4ZZ```I0```(`9,WV#\WOP"$$YUGOP!"$CG-Q8N`"9)
  72935. +M*D@L%4HM``UF``$8(`<$@```!`!G(`2````$`&=*4X!G6%.`9UQ3@&=>4X!G
  72936. +M9E.`9VQ@``#N2BT`#&<F(`9![P$D0^\!(&$`_=9*@&<4("\!)#=```(@+P$@
  72937. +M-H!P`&```,IP&6```+XB!BQL``!.KO\H)H!P`&```+(FAG``8```JG``8```
  72938. +MI"`&(A-A`/XV8```F"M3``AP`&```(XJ$TJM``1F#B(5+&P``$ZN_HPK0``$
  72939. +M("T`!&=B)``B!2QL``!.KOY<2H!F4B(&0>\`("0(=D#EBTZN_FA*@&<^(@5.
  72940. +MKO^F(BT`!$ZN_Z8B!DZN_]PB`G0`3J[_1AM\``$`#2J"*T(`!$'O`"`B""QL
  72941. +M``!.KO^X2H!G!"`"8`Y.N@``8`9P%BE```!P_TS?:.S>_`$(3G4@+P`$(B\`
  72942. +M""]O``P`!$CG#P8J+P`<+`$N`'`.3KH``"I`2H!F"G`,*4```'#_8$Y#U2+'
  72943. +M0IDBQD(M``TB!RQL``!.KO\H&T``#$AZ_G1(>OO:2'K[9$AZ^JQ(>OIV2'KZ
  72944. +M:"`%($U#^OI03KH``$_O`!@H`&P&($U.N@``(`1,WV#P3G4@+P`$(B\`""]O
  72945. +M``P`!"]O`!``""]O`!0`#"]O`!@`$$CG#0`H+P`4*B\`$"X`<`!*@68$<$#E
  72946. +MB`!```$O`"`'<O]A`/]&6$]*@&9`<`!*A&8$<$#EB`!```(O`"`%<O]A`/\H
  72947. +M6$]3@&8B<`!*KP`<9@1P0.6(`$```B\`("\`''+_80#_!EA/58!G$$'L``8O
  72948. +M2``03-\`L$[Z``!,WP"P3G4``````_@````"`````0``!EH```)<````````
  72949. +M`^^&```"7T1/4T)A<V4````0```%B```!2(```34```$O@``!(````/D```#
  72950. +MG````O````),```"!````;0```&.```!(@```.(```"F````,(,```)`7W-E
  72951. +M=&5R<@````4```4R```!Z@```/````"T````/H,```1`7V-H96-K7W-I9VYA
  72952. +M;',``````0```,J#```$0%]H86YD;&5?<VEG;F%L<P````$```#.@P``!$!C
  72953. +M;VYV97)T7V]S97)R```````#```#]@```5X```$\A@```E]E<G)N;P``````
  72954. +M!0``!7(```4Z```#^@```6(```%`@P```D!F<F5E`````````@``!<(```&@
  72955. +M@P```T!C:&MA8F]R=`````````$```.4@P```D!M86QL;V,``````0``!6:#
  72956. +M```#0%]A;&QO8U]F9````````0``!;2#```"7U]F86EL```````!```&9@``
  72957. +M``````/Q`````P````!/4%13``0`0````_(```/J````")LP('$``$9A:6QE
  72958. +M9"!T;R!I;FET:6%L:7-E($DO3P`````#\@```^D````G(&\`!")O``A(YR$6
  72959. +M)DDJ2$ZZ```B#20++&P``$ZN_[)*@&<$<`!@;$ZN_WPN`'(T1@&P@692(@).
  72960. +MKO^X2H!G#B(-3J[_LDJ`9P1P`&!&3J[_?"X`<F_2@;"!9BPB`G0`3J[_1DJ`
  72961. +M9QHB"TZN_[A*@&<0(@TD"TZN_[)*@&<$<`!@$DZN_WPN`"`'3KH``"E```!P
  72962. +M_TS?:(1.=0`````#[X,```-`8VAK86)O<G0````````!````$H8```)?1$]3
  72963. +M0F%S90````$````:@P``!$!C;VYV97)T7V]S97)R```````!````C(8```)?
  72964. +M97)R;F\```````$```"0`````````_$````#`````$]05%,`!`!````#\@``
  72965. +M`^D````.(&\`!"`O``@B+P`,GOP`#$C7`0-P`-[\``Q.=2`O``0B+P`(+V\`
  72966. +M#``$44](UP`#<`!03TYU``````/Q`````P````!/4%13``0``````_(```/I
  72967. +M````$"!O``0B;P`(("\`#$CG`10N`"9)*DAF!'``8!P@!R!+(DUR`$J`9PX2
  72968. +M&)(99@13@&;V2(%(P2`!3-\H@$YU``````/Q`````P````!/4%13``0`````
  72969. +M`_(```/I````=2!O``0B;P`(+V\`#``$("\`$"]O`!0`"$CG!S0N`"1O`"`F
  72970. +M22I(+"L`="2O`!Q"J@`2<`$U0``.0FH`$"5\```"```R-4``#"5K`(``-B`K
  72971. +M`'QF$"(K``1O"B5\```(```68`0E0``6)5,`!$'K`(1.N@``)4``(B5``!HE
  72972. +M0``J("L`!%J`9SY5@&=068!G0%6`9F8@#6<<2'@`_TAL```O#4ZZ``!/[P`,
  72973. +M*@!O!B5%`!9@""5\```!```6)7P``*````A@2B5\```0```(8$`E?```0```
  72974. +M"'P`8#1*DV802BL`"&8*)7P``"````A@("5\``"````(8!8@*P`$;P9P0.&(
  72975. +M8`8@/```@``E0``(2H=G`GP`(`9.N@``@:H`"$S?+.!.=2!O``0B;P`(64](
  72976. +MYR,6*DA^`"])`!A"IRQL``!R`B0/3J[_'$_O``0F0$J`9U`B#73^3J[_K"X`
  72977. +M9T0B!R0+3J[_FDJ`9S@B!TZN_RY*@%?&1`9(ADC&2H!G!B(`3J[_IB`'Y8`O
  72978. +M+P`8($`O*``,(D(@!B!-80#^?%!/?`!@#GS_3J[_?$ZZ```I0```2H=G!B('
  72979. +M3J[_IB`+9P@D"W("3J[_%B`&3-]HQ%A/3G4``````_@````!`````0```)X`
  72980. +M```````#[X,```-`7V%M:6=A,F=M=``````!````<H,```-?<F5A9&QI;FL`
  72981. +M```````!````I(,```-`7VUA:V5?;6]D90`````!```!&H8```)?1$]30F%S
  72982. +M90````$```%`@P``!$!C;VYV97)T7V]S97)R```````!```!K(8```)?97)R
  72983. +M;F\```````$```&P`````````_$````#`````$]05%,`!`!````#\@```^L`
  72984. +M``!````#\@```^D````%(&\`!"`O``AR`&`"$,%3@&3Z3G4```/Q`````P``
  72985. +M``!/4%13``0``````_(```/I````#"`O``0B+P`(64\O!RX`+T$`!$ZZ``!(
  72986. +M;P`$2'@(`R\'3KH``$_O``PN'UA/3G4``````^^#```#0&-H:V%B;W)T````
  72987. +M`````0```!2#```"7VEO8W1L```````!````(@````````/Q`````P````!/
  72988. +M4%13``0``````_(```/I````#2`O``0B+P`(64\O!RX`(`%.N@``+T``!$ZZ
  72989. +M``!(;P`$2'@(!"\'3KH``$_O``PN'UA/3G4```/O@P``!4!?;6%K95]P<F]T
  72990. +M96-T:6]N`````````0```!*#```#0&-H:V%B;W)T`````````0```!J#```"
  72991. +M7VEO8W1L```````!````*`````````/Q`````P````!/4%13``0``````_(`
  72992. +M``/I````$"!O``0@+P`((B\`#)[\``Q(UP$#</\I0```WOP`#$YU(&\`!"`O
  72993. +M``@B+P`,GOP`#$C7`0-P_RE```#>_``,3G4```/OA@```E]E<G)N;P``````
  72994. +M`@```#@````8`````````_$````#`````$]05%,`!`!````#\@```^D````-
  72995. +M("\`!%E/+P<N`$ZZ``!(;P`$2'@(`"\'3KH``$_O``Q*@&<$<`!@!"`O``0N
  72996. +M'UA/3G4``````^^#```#0&-H:V%B;W)T`````````0````R#```"7VEO8W1L
  72997. +M```````!````&@````````/Q`````P````!/4%13``0``````_(```/I````
  72998. +M#R`O``1(YP8`3KH``"P`<`!.N@``8`9P`$ZZ```J`"`%3KH``$J`9^X@!DZZ
  72999. +M``!P!"E```!P_TS?`&!.=0```^^#```#0'-I9W-E=&UA<VL``````@```"P`
  73000. +M```*@P``!$!?8VAE8VM?<VEG;F%L<P`````!````$H,```1`7W=A:71?<VEG
  73001. +M;F%L<P```````0```!J#```$0%]H86YD;&5?<VEG;F%L<P````$````BA@``
  73002. +M`E]E<G)N;P```````0```#(````````#\0````,`````3U!44P`$`$````/R
  73003. +M```#Z0```"@@;P`$2.<C%BI(?@!"IRQL``!R`B0/3J[_'$_O``0F0$J`9U(B
  73004. +M#73^3J[_K"X`9T8B!R0+3J[_FDJ`9SHB*P`$7L!$`$B`2,`L`"('3J[_IG("
  73005. +M3J[_%DJ&9Q0B#4ZN_[A*@&<$<`!@,DZZ``!@*G`4*4```&`B3J[_?$ZZ```I
  73006. +M0```2H=G!B('3J[_IB`+9P@D"W("3J[_%G#_3-]HQ$YU```#[X8```)?1$]3
  73007. +M0F%S90````$````0@P```D!?<V5T97)R`````0```&J&```"7V5R<FYO````
  73008. +M```"````@````'*#```$0&-O;G9E<G1?;W-E<G(```````$```!\````````
  73009. +M`_$````#`````$]05%,`!`!````#\@```^D```&7(&\`!"`O``@B;P`,+V\`
  73010. +M$``$+P<N`"E(`!XI0``:<@&P@64>+R\`""\)80``)%!/2H!G#B!L`!Y"$"`'
  73011. +MD*P`&F`"<``N'TYU(&\`!")O``A(YP`4)DDJ2&``!/@0%7(EL`%F``3*4HT0
  73012. +M%4B`2,!*@&<``-9R)9"!9P`$M'(<D(%G``#,4X!G``$F4X!G``&`4X!G``&B
  73013. +M68!G``'L4X!G``($68!G``*:6X!G``,.4X!G``,P4X!G``-84X!G``-Z58!G
  73014. +M``.@4X!G``-&4X!G``0F4X!G``1"7X!G``"B4X!G``#\4X!G``$Z4X!G``%<
  73015. +M4X!G``%T5X!G``#D58!G``'24X!G``'N4X!G``(&4X!G``),4X!G``)H58!G
  73016. +M``)V58!G``*J4X!G``+44X!G``+T5X!G``-F4X!G``-^4X!G``.,8``#Z%.-
  73017. +M8``#XB`K`!AK!G(&L(%O!G``8``#_B(K`!CE@4'L`'8O,!@`80`$QEA/2H!F
  73018. +M``/88``#X"`K`!AK!G(&L(%O!G``8``#SB(K`!CE@4'L`!PO,!@`80`$EEA/
  73019. +M2H!F``.H8``#L"`K`!!K!G(+L(%O!G``8``#GB(K`!#E@4'L`4XO,!@`80`$
  73020. +M9EA/2H!F``-X8``#@"`K`!!K!G(+L(%O!G``8``#;B(K`!#E@4'L`,(O,!@`
  73021. +M80`$-EA/2H!F``-(8``#4$'L`7XB2V$`_CI*@&8``S1@``,\0>P!E")+80#^
  73022. +M)DJ`9@`#(&```RA![`&F(DMA`/X22H!F``,,8``#%$AX`#!(>``"+RL`#&$`
  73023. +M`WI/[P`,2H!F``+N8``"]DAX`"!(>``"+RL`#&$``UQ/[P`,2H!F``+08``"
  73024. +MV$AX`#!(>``"+RL`"&$``SY/[P`,2H!F``*R8``"NB`K``AR#$ZZ``!P#$J!
  73025. +M9P(@`4AX`#!(>``"+P!A``,03^\`#$J`9@`"A&```HP@*P`<4H!(>``P2'@`
  73026. +M`R\`80`"[D_O``Q*@&8``F)@``)J2'@`($AX``(O*P`(80`"T$_O``Q*@&8`
  73027. +M`D1@``),("L`"'(,3KH``'`,2H%G`B`!2'@`($AX``(O`&$``J)/[P`,2H!F
  73028. +M``(68``"'DAX`#!(>``"+RL`!&$``H1/[P`,2H!F``'X8``"`"`K`!!2@$AX
  73029. +M`#!(>``"+P!A``)B3^\`#$J`9@`!UF```=Y(;`&P80`"L%A/2H!F``'"8``!
  73030. +MR@RK````#``(;09![`&R8`1![`&V+PAA``**6$]*@&8``9Q@``&D0>P!NB)+
  73031. +M80#\CDJ`9@`!B&```9!![`'`(DMA`/QZ2H!F``%T8``!?$AX`#!(>``"+Q-A
  73032. +M``'D3^\`#$J`9@`!6&```6`O"V$``6183TJ`9@`!1F```4Y![`',(DMA`/PX
  73033. +M2H!F``$R8``!.DAL`=9A``(,6$]*@&8``1Y@``$F("L`'%Z`D*L`&'('3KH`
  73034. +M`$AX`#!(>``"+P!A``%^3^\`#$J`9@``\F```/H@*P`89P13@&`"<`8B*P`<
  73035. +M7H&2@"`!<@=.N@``2'@`,$AX``(O`&$``49/[P`,2H!F``"Z8```PDAX`#!(
  73036. +M>``!+RL`&&$``2A/[P`,2H!F``"<8```I$'L`=@B2V$`^XY*@&8``(A@``"0
  73037. +M(#P```=LT*L`%')D3KH``$AX`#!(>``"+P%A``#H3^\`#$J`9EQ@9B`\```'
  73038. +M;-"K`!1(>``P2'@`!"\`80``QD_O``Q*@&8Z8$0@*P`H9PPO`&$``1183TJ`
  73039. +M9B9P`&`N2JP`&E?`1`!(@$C`4ZP`&DJ`9P1P`&`6(&P`'A#5*4@`'E*-2A5F
  73040. +M`/L&("P`&DS?*`!.=2!O``2>_``L2.<!$$/O``AP"B+84<C__$'O``A.N@``
  73041. +M+@!'[``-8!H@!W(*3KH``'`PTH`6@5.+(`=R"DZZ```N`$J';PA![```M\AB
  73042. +MVDAK``%A``"`6$],WPB`WOP`+$YU("\`!"(O``@O;P`,``1(YP<$&B\`%RP!
  73043. +M+@!+[``78!P@!W(*3KH``'`PTH`:@5.-(`=R"DZZ```N`%.&2H=O#D'L``^[
  73044. +MR&+88`0:A5.-0>P`#[O(8P@@!E.&2H!N[$AM``%A```.6$],WR#@3G4@;P`$
  73045. +M+PTJ2"`L`!IG&!(=(&P`'A"!9@1P`6`*4JP`'E.L`!I@XBI?3G4```/X````
  73046. +M#P````$```2\```$)@``!!(```/0```#O````Z8```.@```#@@```C@```(D
  73047. +M```"$````?@```'(```!F````6@````2`````@``!E0```90```&1```!CP`
  73048. +M``84```&!@``!>````6J```%A@``!5H```5.```%2```!3P```4P````/@``
  73049. +M`#8````<````&`````````/O@P```E]?0UA$,S,`````"0``!?H```7J```%
  73050. +MH```!9````3<```$?@``!$8```,:```"K(,```)`;6MT:6UE``````$```6`
  73051. +M`````````_$````#`````$]05%,`!`!````#\@```^H```!Y4W5N`$UO;@!4
  73052. +M=64`5V5D`%1H=0!&<FD`4V%T```````````$````"`````P````0````%```
  73053. +M`!A3=6YD87D``$UO;F1A>0``5'5E<V1A>0!7961N97-D87D`5&AU<G-D87D`
  73054. +M`$9R:61A>0``4V%T=7)D87D``````#@```!`````2````%````!:````9```
  73055. +M`&Q*86X`1F5B`$UA<@!!<'(`36%Y`$IU;@!*=6P`075G`%-E<`!/8W0`3F]V
  73056. +M`$1E8P````"2````E@```)H```">````H@```*8```"J````K@```+(```"V
  73057. +M````N@```+Y*86YU87)Y`$9E8G)U87)Y``!-87)C:`!!<')I;`!-87D`2G5N
  73058. +M90``2G5L>0``075G=7-T``!397!T96UB97(`3V-T;V)E<@!.;W9E;6)E<@``
  73059. +M1&5C96UB97(``````/(```#Z```!!````0H```$0```!%````1H```$@```!
  73060. +M*````3(```$Z```!1"5A("5B("5E("5(.B5-.B53("59```E;2\E9"\E>2`E
  73061. +M2#HE33HE4P`E;2\E9"\E>0``"@!030``04T``"5(.B5-`"5).B5-.B53("5P
  73062. +M`"5(.B5-.B53```)`"5M+R5D+R5Y`````````^P````F`````0```7H```%V
  73063. +M```!<@```6X```%J```!9@```6(```%>```!6@```58```%2```!3@```.X`
  73064. +M``#J````Y@```.(```#>````V@```-8```#2````S@```,H```#&````P@``
  73065. +M`(X```"*````A@```((```!^````>@```'8````T````,````"P````H````
  73066. +M)````"`````<`````````_(```/K````"0```_(```/I````%B!O``0@+P`(
  73067. +M2.<G`BX`(@@L;```)#P```/M3J[_XBP`3KH``$J&9QP@!B('3KH``"H`(@9.
  73068. +MKO_<2H!F!$J%9P0@!6`.3J[_?$ZZ```I0```</],WT#D3G4```/OA@```E]$
  73069. +M3U-"87-E`````0```!*#```#0&-H:V%B;W)T`````````0```"*#```$0%]D
  73070. +M;U]T<G5N8V%T90````````$````N@P``!$!C;VYV97)T7V]S97)R```````!
  73071. +M````2H8```)?97)R;F\```````$```!.`````````_$````#`````$]05%,`
  73072. +M!`!````#\@```^D```#5(&\`!")O``@@+P`,(B\`$"]O`!0`!"]O`!@`""]O
  73073. +M`!P`#)[\`#!(YR\V+B\`6"](`"PJ`"@!?$#ECB]``"0O00`H+TD`,'!`Y8A.
  73074. +MN@``*D`O0`!$(`52@&82+&P``$ZN_\HO0`!`0J\`4&`F2&\`0$AX"`$O!4ZZ
  73075. +M``!/[P`,4H!F!$*O`$!P`2]``%`@!4ZZ```@!%*`9A(L;```3J[_Q"]``#Q"
  73076. +MKP!,8$:ZA&8,+V\`0``\0J\`3&`V2&\`/$AX"`$O!$ZZ``!/[P`,4H!F!G``
  73077. +M+T``/"(O`#RRKP!`5L!$`$B`2,`O0`!,(`1.N@``</^^@&80(&P``"]H`.``
  73078. +M.$*O`$A@4'#^OH!F#"]O`#P`.$*O`$A@/DAO`#A(>`@!+P=.N@``3^\`#%*`
  73079. +M9@9P`"]``#@@+P`X(B\`/+*`9PJPKP!`9P1P`6`"<``O0`!((`=.N@``2J\`
  73080. +M0&<``61*KP`\9P`!7$JO`#AF!E*'9@`!4"`-9P`!1"9->``O;P`P`#1@``"L
  73081. +M2H1F!B!O`"Q@`B!5)$AZ`RI(8!I2A1`5<BJP`6<,<B*P`6<&<@JP`68"4H52
  73082. +MC4H59N(J;P!$($W1QB)+T\5-Z0`!O<AE)"`&T(;0A2P`($U.N@``*D!*@&<`
  73083. +M`-H@"Y"O`$0F3=?`+TT`1"!+$+P`(%2+$7P`(@`!*DI@(!`5<B*P`6<&<BJP
  73084. +M`68&%OP`*F`*<@JP`68$%OP`*Q;=2A5FW!;\`")2A%BO`#0J;P`T2I5F`/].
  73085. +M0A,J;P!<(`UG$"(-+&P``'3^3J[_K"@`8`)X`$J$9@0@#68\*F\`1"\O`&`O
  73086. +M!"\O`%`O+P!$+R\`7"\O`%`@+P!8(B\`:"!-3KH``$_O`!@J`%*`9QH@34ZZ
  73087. +M```@!6!X+&P``$ZN_WQ.N@``*4```$J$9Q(B!"QL``!.KO^F8`9P#"E````@
  73088. +M+P!`9Q!*KP!09PHB`"QL``!.KO_<("\`/&<02J\`3&<*(@`L;```3J[_W"`O
  73089. +M`#AG$$JO`$AG"B(`+&P``$ZN_]PJ;P!$(`UG!B!-3KH``'#_3-]L]-[\`#!.
  73090. +M=2!O``0B;P`(("\`#"(O`!`O;P`4``0O;P`8``@O!2HO``PO!2\O``Q(>/__
  73091. +M80#\V$_O``PJ'TYU```#[X,```)`;6%L;&]C``````$```!,A@```E]$3U-"
  73092. +M87-E````"````OP```+F```"T````K(```*<```"2````)H```!<@P```E]I
  73093. +M;V-T;````````P```20```#&````>(,```1`7W!S975D;U]C;&]S90``````
  73094. +M`P```50```#N````D(8```%?7W5S`````0```/B#```"0')E86QL;V,````!
  73095. +M```!V(,```1`7W-T87)T7W!R;V-E<W,``````0```H2#```"0&9R964`````
  73096. +M```"```##@```I2#```$0&-O;G9E<G1?;W-E<G(```````$```*DA@```E]E
  73097. +M<G)N;P```````@```KX```*H`````````_$````#`````$]05%,`!`!````#
  73098. +M\@```^D````"<`%.=7`!3G4```/Q`````P````!/4%13``0``````_(```/I
  73099. +M````#B`O``0O!RX`3KH``"`'(&P``'(`3KH``&`,("P``$ZZ``!.N@``(&P`
  73100. +M`$ZZ``!*@&?H<``N'TYU```#[X,```-`8VAK86)O<G0````````!````"H8`
  73101. +M``-?7V]D9%]T:6UE<@`````"````*````!"#```$0%]T:6UE<E]S=&%R=```
  73102. +M``````$````6A@```U]?;V1D7W-I9P````````$````<@P``!$!?=V%I=%]S
  73103. +M:6=N86QS```````!````((,```1`7VAA;F1L95]S:6=N86QS`````0```"2#
  73104. +M```$0%]T:6UE<E]E>'!I<F5D``````$````L`````````_$````#`````$]0
  73105. +M5%,`!`!````#\@```^D````/(&\`!"`O``A(YP$$+@`J2$ZZ```O!TAX`P$O
  73106. +M#4ZZ``!/[P`,3-\@@$YU(&\`!"`O``A(YP$$3-\@@&#,```#[X,```-`8VAK
  73107. +M86)O<G0````````!````$H,```)?;W!E;@````````$````>`````````_$`
  73108. +M```#`````$]05%,`!``````#\@```^D````C("\`!"!O``@B+P`,64](YP,T
  73109. +M+`$N`"I(3KH``"`'3KH``"9`2H!G1`@K``$``V<V""L``P`#9Q8@:P`8+T@`
  73110. +M%"!K``1P`'("(F\`%$Z1(&L`%"](`!0@!B!K``0B321O`!1.DF`(<`TI0```
  73111. +M</],WRS`6$].=2`O``0@;P`((B\`#$CG`P1,WR#`8(````/O@P```T!C:&MA
  73112. +M8F]R=`````````$````:@P```T!?9FEN9%]F9`````````$````@A@```E]E
  73113. +M<G)N;P```````0```&H````````#\0````,`````3U!44P`$`$````/R```#
  73114. +MZ0````P@;P`$44\O#2I(0>\`!$ZZ``!*@&H$</]@#B`-9P8@+P`$*H`@+P`$
  73115. +M*E]03TYU``````/O@P```T!?9V5T=&EM90````````$````0`````````_$`
  73116. +M```#`````$]05%,`!``````#\@```^D````=(&\`!)[\`$!(YSL6*DA.N@``
  73117. +M(`UG4DH59TXB#4'O`"`D""QL``!V0'@`3J[\=BX`;39.KO]\+`!2@$ZZ```F
  73118. +M0$J`9R2^AF<4)@92@R(-)`M.KOQV2H!O$"`"8`X@0B)+$MAF_"`+8`)P`$S?
  73119. +M:-S>_`!`3G4```/O@P```T!C:&MA8F]R=`````````$````0A@```E]$3U-"
  73120. +M87-E`````0```"2#```"0&UA;&QO8P`````!````/`````````/Q`````P``
  73121. +M``!/4%13``0`0````_(```/I````$R!O``0B;P`(2.<S$B9)(@@L;```=/Y.
  73122. +MKO^L+@!.N@``2H=G&B(+)`=V`$ZN_D0L`"("3J[_IDJ&9P0@`V`&3KH``'#_
  73123. +M3-](S$YU``````/OA@```E]$3U-"87-E`````0```!*#```#0&-H:V%B;W)T
  73124. +M`````````0```!Z#```"0%]S971E<G(````!````0`````````/Q`````P``
  73125. +M``!/4%13``0`0````_(```/I````)"!O``2>_``,2.<!%"I(2AAF_%.(D<T@
  73126. +M""9-U\!=BWYA3KH``"\L``!(;```2&\`%TZZ``!/[P`,0>\`#R)(2AEF_%.)
  73127. +MD\@@"7(%L(%O"$'O``K1P&`$0>\`#R\(2&P`!"\+3KH``$_O``P6AR!-<`!.
  73128. +MN@``2H!F"E('<'J^`&_J0A4@#4S?*(#>_``,3G4``````_@````"`````0``
  73129. +M`%X````J`````````^^#```#0&-H:V%B;W)T`````````0```"*&```!7U]U
  73130. +M<P````$````F@P```U]?<W!R:6YT9@````````(```!D````,H,```-`7U]A
  73131. +M8V-E<W,````````!````<@````````/Q`````P````!/4%13``0`0````_(`
  73132. +M``/J`````B5L>`!A)7,````#\@```^D````&(&\`!"\-*DA.N@``($UP0.F(
  73133. +M*E].^@`````#[X,```-`8VAK86)O<G0````````!````"H,```)`9V5T8W=D
  73134. +M``````$````6`````````_$````#`````$]05%,`!``````#\@```^D````/
  73135. +M(&\`!"`O``A(YR$&+@`J2$ZZ```@!TZZ```D`"(-+&P``$ZN_T9*@&<$<`!@
  73136. +M!DZZ``!P_TS?8(1.=0`````#[X,```-`8VAK86)O<G0````````!````$H,`
  73137. +M``5`7VUA:V5?<')O=&5C=&EO;@````````$````8A@```E]$3U-"87-E````
  73138. +M`0```""#```"0%]S971E<G(````!````,`````````/Q`````P````!/4%13
  73139. +M``0`0````_(```/I````'"`O``0B+P`(+V\`#``$44](YP<`*B\`&"P!+@!.
  73140. +MN@``(`=.N@``2H!G&B)`(&D`&"](`!`@!B(%(&D`!")O`!!.D6`"</],WP#@
  73141. +M4$].=2`O``0B+P`(+V\`#``$2.<'`"HO`!`O10`03-\`X&"@``````/O@P``
  73142. +M`T!C:&MA8F]R=`````````$````>@P```T!?9FEN9%]F9`````````$````D
  73143. +M`````````_$````#`````$]05%,`!``````#\@```^D````<("\`!"!O``@B
  73144. +M+P`,64](YP,T+`$N`"I(3KH``"`'3KH``"9`2H!G)@@K`````V<8(&L`$"](
  73145. +M`!0@!B!K``0B321O`!1.DF`(<`TI0```</],WRS`6$].=2`O``0@;P`((B\`
  73146. +M#$CG`P1,WR#`8)X``````^^#```#0&-H:V%B;W)T`````````0```!J#```#
  73147. +M0%]F:6YD7V9D`````````0```""&```"7V5R<FYO```````!````3```````
  73148. +M``/Q`````P````!/4%13``0`0````_(```/I````@2`O``0@;P`((F\`#"]O
  73149. +M`!``!"]O`!0`")[\`"Q(YS\V)DDJ2"]``$`D;P!<(`IG#DJ29@I*J@`$9@1P
  73150. +M`6`"<`!R`"]``#0D#6<"(A5T`"]!`"PF"V<")!-Z`'X!+T(`,&!2*"\`+,B'
  73151. +M+"\`,,R'3KH``$J$9@1*AF<V(`5.N@``)$!*@&8&</]@``%N2H1G"`@J````
  73152. +M`V<,2H9G%`@J``$``V8,<`TI0```</]@``%*4H7>A[JO`$!MJ"1O`%P@"F<0
  73153. +M(!(B*@`$(&P``$ZZ``!@""!L``!.N@``>@`@!4*O`%!Z`'X!+T``*&`Z*"\`
  73154. +M+,B'+"\`,,R'2H1F!$J&9R(@!4ZZ```B0"!I``@O2``\(`0B!B!I``0B;P`\
  73155. +M3I&!KP!04H7>A[JO`$!MP"@O`%`@!%*`9P9*KP`T9PAP`$ZZ``!@"B`L``"`
  73156. +MA$ZZ```O0`!,?`!X`2XO`#`J+P`H8'`@+P`LP(0O0`!((@?"A"]!`$1*@&8$
  73157. +M2H%G4B`&3KH``")`(&D`#$AO`$0O2``\(&D`!$/O`$PL;P`\3I983R`O`$AF
  73158. +M"B(-9P8B!$:!PY4@+P!$9@HB"V<&(@1&@<.32J\`2&8&2J\`1&<"4H52AMB$
  73159. +MO*\`0&V*("\`3$ZZ``!*A684(&P``$ZZ``!*@&8(2J\`-&<`_N@@!4S?;/S>
  73160. +M_``L3G4``````^^#```#0&-H:V%B;W)T`````````0```'"#```#0%]F:6YD
  73161. +M7V9D`````````P```7X```$$````?H8```)?97)R;F\```````$```"HA@``
  73162. +M`U]?;V1D7W1I;65R``````,```'D````U````,J#```$0%]T:6UE<E]S=&%R
  73163. +M=`````````$```#.@P``!$!?=&EM97)?86)O<G0````````!````V(,```1`
  73164. +M7V-H96-K7W-I9VYA;',``````0```4"&```#7U]O9&1?<VEG`````````0``
  73165. +M`4:#```$0%]W86ET7W-I9VYA;',```````$```%,@P``!$!?:&%N9&QE7W-I
  73166. +M9VYA;',````!```!W(,```1`7W1I;65R7V5X<&ER960``````0```>@`````
  73167. +M```#\0````,`````3U!44P`$`$````/R```#Z0```"!13TCG(R0N+P`@3KH`
  73168. +M`"PO`"@@!TZZ```J0$J`9U@@+P`D5X!G#%.`9PYP%BE```!@1'`,P)5@0"`5
  73169. +M=`S,@B0``D+_\X2&*H)R!,*"=`3`@K"!9QXO00`8(&T`("](`!0@;0`$0^\`
  73170. +M&'``)&\`%$Z28`9P`&`"</],WR3$4$].=0```^^#```#0&-H:V%B;W)T````
  73171. +M`````0````R#```#0%]F:6YD7V9D`````````0```!:&```"7V5R<FYO````
  73172. +M```!````+@````````/Q`````P````!/4%13``0`0````_(```/I````````
  73173. +M`_$````#`````$]05%,`!``````#\@```^H```#>86UI9V$@<W!E8VEF:6,@
  73174. +M97)R;W(```````!5;FMN;W=N(&5R<F]R`&YO="!O=VYE<@!N;R!S=6-H(&9I
  73175. +M;&4@;W(@9&ER96-T;W)Y`&YO('-U8V@@<')O8V5S<P!I;G1E<G)U<'1E9"!S
  73176. +M>7-T96T@8V%L;`!I+V\@97)R;W(`;F\@<W5C:"!D979I8V4@;W(@861D<F5S
  73177. +M<P!A<F=U;65N="!L:7-T('1O;R!L;VYG``!E>&5C(&9O<FUA="!E<G)O<@!B
  73178. +M860@9FEL92!N=6UB97(`;F\@8VAI;&0@<')O8V5S<P``;F\@;6]R92!P<F]C
  73179. +M97-S97,`;F]T(&5N;W5G:"!M96UO<GD`<&5R;6ES<VEO;B!D96YI960`8F%D
  73180. +M(&%D9')E<W,`8FQO8VL@9&5V:6-E(')E<75I<F5D`&UO=6YT(&1E=FEC97,@
  73181. +M8G5S>0``9FEL92!E>&ES=',`8W)O<W,M9&5V:6-E(&QI;FL`;F\@<W5C:"!D
  73182. +M979I8V4``&YO="!A(&1I<F5C=&]R>0!I<R!A(&1I<F5C=&]R>0``:6YV86QI
  73183. +M9"!A<F=U;65N=```9FEL92!T86)L92!O=F5R9FQO=P!T;V\@;6%N>2!O<&5N
  73184. +M(&9I;&5S`&YO="!A('1Y<&5W<FET97(``'1E>'0@9FEL92!B=7-Y``!F:6QE
  73185. +M('1O;R!B:6<``&YO('-P86-E(&QE9G0@;VX@9&5V:6-E`&EL;&5G86P@<V5E
  73186. +M:P``<F5A9"UO;FQY(&9I;&4@<WES=&5M`'1O;R!M86YY(&QI;FMS``!B<F]K
  73187. +M96X@<&EP90!M871H(&%R9W5M96YT`')E<W5L="!T;V\@;&%R9V4``$DO3R!S
  73188. +M=')E86T@96UP='D``&9I;&4@;F%M92!T;V\@;&]N9P``9&ER96-T;W)Y(&YO
  73189. +M="!E;7!T>0!T;V\@;6%N>2!S;V9T(&QI;FMS("AL;V]P/RD`````&@```"@`
  73190. +M```R````3````%P```!T````?@```)@```"P````P@```-(```#D````]@``
  73191. +M`0@```$:```!)@```3P```%0```!7````6X```%^```!C@```9X```&P```!
  73192. +MQ````=@```'J```!^@```@@```(@```"+@```D0```)4```"8````FX```*`
  73193. +M```"D@```J8```*Z````)@`````#[````"@````!```#;@```VH```-F```#
  73194. +M8@```UX```-:```#5@```U(```-.```#2@```T8```-"```#/@```SH```,V
  73195. +M```#,@```RX```,J```#)@```R(```,>```#&@```Q8```,2```##@```PH`
  73196. +M``,&```#`@```OX```+Z```"]@```O(```+N```"Z@```N8```+B```"W@``
  73197. +M`MH```+6````%@````````/R```#Z0```$4@+P`$*4```$J`9P``AG)GD(%G
  73198. +M``""58!G``"`<@F0@6=\4X!G>%.`9W13@&=P4X!G;%.`9VA3@&=H4X!G:')1
  73199. +MD(%G9E.`9V93@&=F4X!G9E.`9V93@&=F58!G9E.`9V93@&=F4X!G9E6`9V93
  73200. +M@&=F4X!G9E.`9V93@&=F4X!G9E6`9V93@&=F4X!G9E.`9V9@:'``8&9P#&!B
  73201. +M<`M@7G`68%IP!V!6<`A@4G`08$YP$6!*<`)@1G`"8$)P%F`^<`=@.G`68#9P
  73202. +M)&`R<!9@+G`68"IP'F`F<!)@(G`E8!YP)F`:<!-@%G`68!)P'&`.<`U@"G`-
  73203. +M8`9P#6`"</].=2\.+&P``$ZN_WQA`/[Z*4```"Q?3G4```/X`````0````$`
  73204. +M``$.`````````^^&```"7U]/4T524@`````!````!H8```)?1$]30F%S90``
  73205. +M``$```$"`````````_$````#`````$]05%,`!`!````#\@```^L````!```#
  73206. +M\@```^D````%3KH``$ZZ``!.N@``<@9.^@````````/O@P```T!C:&MA8F]R
  73207. +M=`````````$````"@P```T!?8VQO<V5?86QL``````$````&@P```D!G971P
  73208. +M:60``````0````J#```"0&MI;&P````````!````$`````````/Q`````P``
  73209. +M``!/4%13``0``````_(```/I````62!O``0@+P`(64](YP$6+@`O2``0(&\`
  73210. +M$"I08&1P#;`M``AF6B`M`*QG!N6`($!@`I'()D@@+0"<L(=G-"`M`*"PAV<L
  73211. +M("T`X+"'9R0@"V<N("L`'+"'9Q@@*P`@L(=G$"`K`#BPAV<(("L`,+"'9@XB
  73212. +M37!@[X@L>``$3J[^O"I52I5FF$S?:(!83TYU("\`!"(O``A(YP$"+@`@`5.`
  73213. +M9PQ3@&<(4X!G!%V`9BPL>``$3J[_?"!L``#0_`&6(`=A`/]((&P``-#\`:0@
  73214. +M!V$`_SI.KO]V<`!@"'`6*4```'#_3-]`@$YU("\`!"(O``A(YP8$+`$J`$ZZ
  73215. +M``!*A6H"1(6ZK```9@Y*AF<&(`9.N@``<`!@2"`%3KH``"I`2H!G!DJM`!1G
  73216. +M"G`#*4```'#_8"P@!F<H(BT`$,%!80#_6"(`<`F\@&84<@$K00`4*T``&'`4
  73217. +M3KH``'``8`(@`4S?(&!.=0`````#[X8```)?4WES0F%S90````(```#$````
  73218. +MMH8```)?97)R;F\```````(```$J````W(,```-`8VAK86)O<G0````````!
  73219. +M````^(8```-?7V]U<E]P:60````````!```!`H,```1`7W-I9U]D:7-P871C
  73220. +M:````````@```50```$.@P```T!?9FEN9%]P:60```````$```$8````````
  73221. +M`_$````#`````$]05%,`!`!````#\@```^D```!#(&\`!$CG``8J2")-+'@`
  73222. +M!$ZN_P0@34S?8`!.^@``("\`!$CG`00N`"IL``A@#B`M``RPAV8$(`U@""I5
  73223. +M2I5F[G``3-\@@$YU2.<@`D'L``A.N@``("P``"(L```D`+."`H(`?___*4(`
  73224. +M!%*"*4(``"\!+P!(;```2&P`%$ZZ``!/[P`0+'@`!$ZN_68I0``X9Q!![``4
  73225. +M<`!.N@``*4``-&8*2&P`#DZZ``!83TS?0`1.=4CG``8@+``X9PH@0"QX``1.
  73226. +MKOU@2JP`-&<X+'@`!$ZN_WQ@#")-<!PL>``$3J[_+B!L`#0L>``$3J[^C"I`
  73227. +M2H!FXB!L`#1.N@``+'@`!$ZN_W9,WV``3G4``````_@````"`````0```*0`
  73228. +M``!V````#`````(```#V````Y````,@```"X````G@```)0```".````>@``
  73229. +M`&X```!H````3@```"H````````#[X,```)`9G)E90````````$````<@P``
  73230. +M`D!.97=,:7-T`````0```%*&```!7U]U<P````$```!6A@``!%]?<W1A<G1U
  73231. +M<%]T:6UE```````!````6H,```-?7W-P<FEN=&8````````!````?H,```-`
  73232. +M0W)E871E4&]R=``````!````FH,```)?7V9A:6P```````$```"H@P```T!$
  73233. +M96QE=&50;W)T``````$```#Z`````````_$````#`````$]05%,`!`!````#
  73234. +M\@```^H````&9&]O<BXE;'@N)6QX``!.;R!M96UO<GD````#\@```^L````/
  73235. +M```#\@```^D````O(&\`!"`O``@B+P`,(F\`$"]O`!0`!"]O`!@`"%E/2.</
  73236. +M-B@O`"PJ+P`H+`$N`"I)+T@`("QX``1.KOUF)D!*@&<P($L@!$ZN_7(D0$J`
  73237. +M9R(@#6<()4T`*"5%`"0@;P`@(`<B2B(&3J[^1$H`9@0@"F`6(`IG!B!*3J[]
  73238. +M;"`+9P8@2TZZ``!P`$S?;/!83TYU(&\`!$CG``8J2"`-9Q@B32QX``1.KOX^
  73239. +M(&T`#DZZ```@34ZN_6Q,WV``3G4```/O@P```T!$96QE=&50;W)T``````(`
  73240. +M``"N````A`````````/Q`````P````!/4%13``0``````_(```/I````%"!O
  73241. +M``0@+P`(2.<A!BX`*DA.N@``(@TL;```3J[_B$J`9R(B`$ZN_Z8@!TZZ```@
  73242. +M!TZZ```D`"(-3J[_1DJ`9P1P`&`&3KH``'#_3-]@A$YU```#[X,```-`8VAK
  73243. +M86)O<G0````````!````$H8```)?1$]30F%S90````$````8@P``!4!?;6%K
  73244. +M95]P<F]T96-T:6]N`````````@```#(````L@P```D!?<V5T97)R`````0``
  73245. +M`$8````````#\0````,`````3U!44P`$`$````/R```#^P``")D1/@!?<V5T
  73246. +M:FUP`'1E>'0`0%]L;VYG:FUP`$!?<V5T:FUP`%]?;&]N9VIM<`!?7W-E=&IM
  73247. +M<`!S<')I;G1F`%],5D]287=$;T9M=`!?06)S17AE8T)A<V4`7U]S<')I;G1F
  73248. +M`'1M<&YA;2YC`%]M:W1E;7``0'1M<&YA;0!?=&UP;F%M`%]?34521T5$`'!O
  73249. +M<&5N+F,`7W=A:71P:60`0&9C;&]S90!`9G)E90!`7W-T87)T7W!R;V-E<W,`
  73250. +M0%]S971E<G(`7V5R<FYO`%]$3U-"87-E`$!F;W!E;@!?7V9I9F]?8F%S90!?
  73251. +M7V9I9F]?;V9F<V5T`$!M86QL;V,`0'!C;&]S90!?<&-L;W-E`$!P;W!E;@!?
  73252. +M<&]P96X`<W1A<G0N8P!`8V]N=F5R=%]O<V5R<@!?7W!R;V-E<W-E<P!?7W-T
  73253. +M86-K7W-I>F4`7U]N97AT7W!I9`!?7V1O;W)?;F%M90!?7W-T87)T=7!?<&]R
  73254. +M=`!?3&EN:V5R1$(`7U]S=&%R=%]P<F]C97-S`%]?8VAI;&1?9&]O<E]N86UE
  73255. +M`%]?8VAI;&1?8V]M;6%N9%]L96X`7U]C:&EL9%]C;VUM86YD`%]?8VAI;&1?
  73256. +M97AI=`!?7V-H:6QD7V5N=')Y`&=E='!I9"YC`%]?;W5R7W!I9`!`8VAK86)O
  73257. +M<G0`0&=E='!I9`!?9V5T<&ED`'-I9VYA;"YC`%]?<VEG7VAA;F1L97)S`$!S
  73258. +M:6=N86P`7W-I9VYA;`!`<VEG=F5C`%]S:6=V96,`<VEG<V5T;6%S:RYC`$!?
  73259. +M<VEG7V1I<W!A=&-H`%]?<VEG7W!E;F1I;F<`7U]S:6=?;6%S:P!`<VEG8FQO
  73260. +M8VL`7W-I9V)L;V-K`$!S:6=S971M87-K`%]S:6=S971M87-K`'-T870N8P!?
  73261. +M<F5A9&QI;FL`0%]F:6)S=&%T`$!?;&9I8G-T870`7U]T96UP7V9N86UE`%]L
  73262. +M87-T7V5N=')Y`$!?9V5T7V-D`%]L87-T7V1I<@!`;'-T870`7VQS=&%T`$!S
  73263. +M=&%T`%]S=&%T`&1I<BYC`$!S965K9&ER`%]S965K9&ER`$!T96QL9&ER`%]T
  73264. +M96QL9&ER`$!R96%D9&ER`%]R96%D9&ER`$!C;&]S961I<@!?8VQO<V5D:7(`
  73265. +M0&]P96YD:7(`7V]P96YD:7(`9&ER7V1A=&$N8P!?7V=E=%]C9`!A8V-E<W,N
  73266. +M8P!`86-C97-S`%]A8V-E<W,`0%]?86-C97-S`%]?7V%C8V5S<P!F<W1A="YC
  73267. +M`%]I;V-T;`!`9G-T870`7V9S=&%T`'-Y;6QI;FLN8P!`<WEM;&EN:P!?<WEM
  73268. +M;&EN:P!M97-S86=E+F,`0&5X:70`7U]0<F]G<F%M3F%M90!?7U="96YC:$US
  73269. +M9P!?7W5S`%]?9F%I;`!?7VUE<W-A9V4`86QL;V-D;W,N8P!?06QL;V-$;W-/
  73270. +M8FIE8W1486=S`'-E=&IM<"YC`$!L;VYG:FUP`%]L;VYG:FUP`$!S971J;7``
  73271. +M9V5T:&]S=&YA;64N8P!?<W1R;F-P>0!?7W-Y<W1E;5]N86UE`$!G971H;W-T
  73272. +M;F%M90!?9V5T:&]S=&YA;64`<&5R<F]R+F,`7U]/4T524@!?<WES7V5R<FQI
  73273. +M<W0`7W-Y<U]N97)R`$!W<FET90!`<&5R<F]R`%]P97)R;W(`<VEG;&ES="YC
  73274. +M`%]S>7-?<VEG;&ES=`!W86ET-"YC`$!?:&%N9&QE7W-I9VYA;',`0%]W86ET
  73275. +M7W-I9VYA;',`0%]F<F5E7V5N=')Y`$!W86ET<&ED`$!W86ET`%]W86ET`$!W
  73276. +M86ET,P!?=V%I=#,`0'=A:70T`%]W86ET-`!P<V5U9&]?8RYC`$!?9G)E95]F
  73277. +M9`!`7V9I;F1?9F0`0%]P<V5U9&]?8VQO<V4`7U]P<V5U9&]?8VQO<V4`<FEN
  73278. +M9&5X+F,`0'-T<G)C:'(`0')I;F1E>`!?<FEN9&5X`&EN9&5X+F,`0'-T<F-H
  73279. +M<@!`:6YD97@`7VEN9&5X`'1I;65R<RYC`$!?9&5V:6-E7V-L;W-E`$!?9&5V
  73280. +M:6-E7V]P96X`0%]T:6UE<E]E>'!I<F5D`%]?=&EM97)?97AP:7)E9`!`7W1I
  73281. +M;65R7W-T87)T`%]?=&EM97)?<W1A<G0`0%]T:6UE<E]S:6<`7U]T:6UE<E]S
  73282. +M:6<`0%]T:6UE<E]A8F]R=`!?7W1I;65R7V%B;W)T`$!?9G)E95]T:6UE<@!?
  73283. +M7V9R965?=&EM97(`0%]A;&QO8U]T:6UE<@!?7V%L;&]C7W1I;65R`&9I9F]F
  73284. +M9"YC`%]?<W1A<G1U<%]T:6UE`$!?8VQE86YU<%]F:69O`%]?8VQE86YU<%]F
  73285. +M:69O`$!?:6YI=%]F:69O`%]?:6YI=%]F:69O`%]?9FEF;U]S:6<`7U]F:69O
  73286. +M7V]K`%]?1FEF;T)A<V4`8VQO<V4N8P!`8VQO<V4`7V-L;W-E`$!?7V-L;W-E
  73287. +M`%]?7V-L;W-E`&9I;&5S+F,`0%]L87-T7V9D`%]?;&%S=%]F9`!?7V9I;F1?
  73288. +M9F0`7U]F<F5E7V9D`$!?86QL;V-?9F0`7U]A;&QO8U]F9`!U=&EM92YC`$!?
  73289. +M9VUT,F%M:6=A`$!T:6UE`$!U=&EM90!?=71I;64`8F-O<'DN8P!`;65M;6]V
  73290. +M90!`8F-O<'D`7V)C;W!Y`&%M:6=A=&EM92YC`%]D87EL:6=H=`!?='IN86UE
  73291. +M`%]?0UA$,S,`0&QO8V%L=&EM90!`7V=E='1I;64`0&9T:6UE`%]F=&EM90!`
  73292. +M9V5T=&EM96]F9&%Y`%]G971T:6UE;V9D87D`=&EM96-O;G9E<G0N8P!?5&EM
  73293. +M97)"87-E`$!?86UI9V$R9VUT`%]?86UI9V$R9VUT`%]?9VUT,F%M:6=A`%]?
  73294. +M9V5T=&EM90!P=V0N8P!`9V5T;&]G:6X`7V=E=&QO9VEN`$!G971P=VYA;0!?
  73295. +M9V5T<'=N86T`0&=E='!W=6ED`%]G971P=W5I9`!?7V%M:6=A7W5S97(`<F5A
  73296. +M9&QI;FLN8P!?<W1R;&5N`$!R96%D;&EN:P!A;&QO8V$N8P!?;6%L;&]C`%]F
  73297. +M<F5E`%]A;&QO8V$`=6YL:6YK+F,`0'5N;&EN:P!?=6YL:6YK`'!I<&4N8P!`
  73298. +M<W1R8V%T`$!.97=,:7-T`$!S;V-K971P86ER`%]S;V-K971P86ER`$!P:7!E
  73299. +M`%]P:7!E`&=R<"YC`$!G971G<FYA;0!?9V5T9W)N86T`0&=E=&=R9VED`%]G
  73300. +M971G<F=I9`!S:6=N86QS+F,`7U]&4$524@!`7U]E>&ET`$!?9FEN9%]P:60`
  73301. +M0%]C;&5A;G5P7W!R;V-E<W-E<P!?7V-H:6QD<F5N7V5X:70`0%]I;FET7W!R
  73302. +M;V-E<W-E<P!`7V-L96%N=7!?<VEG;F%L<P!?7V-L96%N=7!?<VEG;F%L<P!`
  73303. +M7VEN:71?<VEG;F%L<P!?7VEN:71?<VEG;F%L<P!`0VAK7T%B;W)T`%]#:&M?
  73304. +M06)O<G0`7V-H:V%B;W)T`$!#6$9%4E(`7T-81D524@!?7VAA;F1L95]S:6=N
  73305. +M86QS`%]?=V%I=%]S:6=N86QS`$!?8VAE8VM?<VEG;F%L<P!?7V-H96-K7W-I
  73306. +M9VYA;',`7U]S:6=?9&ES<&%T8V@`0&%L87)M`%]A;&%R;0!?;6%I;BYC`$!M
  73307. +M86EN`$!?7V=E=&5N=@!`='%S;W)T`$!S=')N8W!Y`%]?7V-T>7!E`$!?:6YI
  73308. +M=%]U;FEX:6\`7U]?:6]B`%]?6$-%6$E4`%]3>7-"87-E`$!R96%L;&]C`%]?
  73309. +M7VUA:6X`0&UA:V5?96YV:7)O;@!?;6%K95]E;G9I<F]N`%]E;G9I<F]N`%]?
  73310. +M;V1D7W-I9P!?7V]D9%]T:6UE<@!U;6%S:RYC`$!U;6%S:P!?=6UA<VL`<')O
  73311. +M=&5C=&EO;BYC`$!?;6%K95]M;V1E`%]?;6%K95]M;V1E`$!?;6%K95]P<F]T
  73312. +M96-T:6]N`%]?;6%K95]P<F]T96-T:6]N`%]U<V5?86UI9V%?9FQA9W,`9VED
  73313. +M+F,`0&=E=&5G:60`7V=E=&5G:60`0&=E=&=I9`!?9V5T9VED`%]E>&ET+F,`
  73314. +M0%]E>&ET`%]?97AI=`!?7U]E>&ET`$!?8VQO<V5?86QL`%]?8VQO<V5?86QL
  73315. +M`&EO8W1L+F,`0&EO8W1L`&]P96XN8P!`7V%L;&]C7V%M:6=A9F0`0'-T<FEC
  73316. +M;7``7V]P96X`7U]?;W!E;@!C=&EM92YC`%]S<')I;G1F`$!R96%D`$!?='IS
  73317. +M970`7U]T>G-E=`!`;6MT:6UE`%]M:W1I;64`0&-T:6UE`%]C=&EM90!`87-C
  73318. +M=&EM90!?87-C=&EM90!`9VUT:6UE`%]G;71I;64`7VQO8V%L=&EM90!`='IS
  73319. +M971W86QL`%]T>G-E='=A;&P`0'1Z<V5T`%]T>G-E=`!?=&EM97IO;F4`86UI
  73320. +M9V%D;W,N8P!?7VEN:71?=6YI>&EO`%]?86QL;V-?86UI9V%F9`!`7V1O7W1R
  73321. +M=6YC871E`%]?9&]?=')U;F-A=&4`<F5N86UE+F,`0')E;F%M90!?<F5N86UE
  73322. +M`&-H;W=N+F,`0&9C:&]W;@!?9F-H;W=N`$!C:&]W;@!?8VAO=VX`8F-M<"YC
  73323. +M`$!B8VUP`%]B8VUP`&9I8G-T870N8P!?7V9I8G-T870`7U]L9FEB<W1A=`!B
  73324. +M>F5R;RYC`$!B>F5R;P!?8GIE<F\`9G1R=6YC871E+F,`0&9T<G5N8V%T90!?
  73325. +M9G1R=6YC871E`&9C:&UO9"YC`$!F8VAM;V0`7V9C:&UO9`!M:V9I9F\N8P!`
  73326. +M;6MN;V0`7VUK;F]D`$!M:V9I9F\`7VUK9FEF;P!I<V%T='DN8P!`:7-A='1Y
  73327. +M`%]I<V%T='D`<VEG<&%U<V4N8P!`<VEG<&%U<V4`7W-I9W!A=7-E`')M9&ER
  73328. +M+F,`0')M9&ER`%]R;61I<@!S=')F=&EM92YC`$!S=')F=&EM90!?<W1R9G1I
  73329. +M;64`=')U;F-A=&4N8P!`=')U;F-A=&4`7W1R=6YC871E`&5X96,N8P!`97AE
  73330. +M8P!?97AE8P!`965X96,`7V5E>&5C`'5I9"YC`$!G971E=6ED`%]G971E=6ED
  73331. +M`$!G971U:60`7V=E='5I9`!S;&5E<"YC`$!S;&5E<`!?<VQE97``8W)E870N
  73332. +M8P!`8W)E870`7V-R96%T`$!?7V-R96%T`%]?7V-R96%T`'=R:71E+F,`7W=R
  73333. +M:71E`$!?7W=R:71E`%]?7W=R:71E`'1I;64N8P!?=&EM90!G971E;G8N8P!?
  73334. +M7U]G971E;G8`;&EN:RYC`$!L:6YK`%]L:6YK`&UK=&5M<"YC`$!M:W1E;7``
  73335. +M9V5T=V0N8P!`9V5T8W=D`$!G971W9`!?9V5T=V0`8VAM;V0N8P!`8VAM;V0`
  73336. +M7V-H;6]D`&QS965K+F,`0&QS965K`%]L<V5E:P!`7U]L<V5E:P!?7U]L<V5E
  73337. +M:P!R96%D+F,`7W)E860`0%]?<F5A9`!?7U]R96%D`'-E;&5C="YC`$!S96QE
  73338. +M8W0`7W-E;&5C=`!F8VYT;"YC`%]F8VYT;`!E<G)O<E]M<V<N8P!E<G)O<BYC
  73339. +M`%]?<V5T97)R`%]C;VYV97)T7V]S97)R`&%B;W)T+F,`0&MI;&P`0&%B;W)T
  73340. +M`%]A8F]R=`!K:6QL+F,`7VMI;&P`<')O8V5S<V5S+F,`0$1E;&5T95!O<G0`
  73341. +M0$-R96%T95!O<G0`7U]C;&5A;G5P7W!R;V-E<W-E<P!?7VEN:71?<')O8V5S
  73342. +M<V5S`%]?9FEN9%]P:60`7U]F<F5E7V5N=')Y`&1E=FEC97,N8P!?7V1E=FEC
  73343. +M95]C;&]S90!?7V1E=FEC95]O<&5N`&UK9&ER+F,`0&UK9&ER`%]M:V1I<@``
  73344. +M`0````$`"0`)`^D````$``X`%@`!`!@`!``!`"$`#@`!`"L````!`#0`#``!
  73345. +M``D`#`/I``(`/`!)``$`5@````$`8``I``,`"0`*`^D``0!H``(`<0`$``$`
  73346. +M>0````$`@0`$`^H``````($`"0/K``````"*`%0``P`)`&\#Z0`,`)$`F@"B
  73347. +M`*@`N`#"`,D`T0!5`-D`Y0#R``0`^P%>``$!`P%:``$!"P`(``$!$@````$`
  73348. +M@0`%`^H``````($``0/K``````$9`2T``P`)`,4#Z0`+`*(`P@$@`3`!/`%)
  73349. +M`50`\@%@`,D!;P`"`*D`Y@`!`7D`M@`!`($`!@/J``````"!``H#ZP````4!
  73350. +MB0`D``$!FP`@``$!KP`<``$!OP`8``$!S`````$!V@)M``$`"0`#`^D``@'C
  73351. +M`>P``@'W`````0'_`````0('`H8``0`)`",#Z0`#`,("$`'L``0"'P!B``$"
  73352. +M)P!:``$"+P`,``$"-P````$"/P+&``$`"0`5`^D`!`)+`EL![`)I``0"=`!&
  73353. +M``$"?@!"``$"B``$``$"E`````$"H`,"``(`"0":`^D`"0*F`K`![`*Z`,D"
  73354. +MQ@+3`MX"Z``$`O(!U@`!`OD!S@`!`P`!G@`!`P8!E@`!`($`00/K``````,,
  73355. +M`_4``0`)`-`#Z0`)`M,"W@'L`,(!(`#)`/("Z`"B``H#$@,@``$#&P,8``$#
  73356. +M)`,(``$#+0,$``$#-@*0``$#/P*,``$#2`).``$#4@)*``$#7`%>``$#90%:
  73357. +M``$#;@48``(`"0`(`^D``0#)``("WP````$#>0````$`@0`"`^L````"`M,`
  73358. +M!``!`N@````!`X(%,@`!``D`&P/I``,`P@*P`>P`!`.+`&```0.3`%@``0.;
  73359. +M``@``0.E`````0.O!6@``0`)`$$#Z0`&`,(!(`*Z`,D#M@'L``(#O@`(``$#
  73360. +MQ0````$#S`77``$`"0`.`^D``P"X`,D![``"`]8`"``!`]\````!`^@%_P`"
  73361. +M``D`/@/I``4#\0/X`,D$!@02``($%P#B``$$'@#4``$`@0`/`^H`````!"@&
  73362. +MA@`!``D`!P/I``$`R0`!!#,````!!$<&G``!``D`#P/I``0`#0*'`!<":0`$
  73363. +M!%``'@`!!%D`%@`!!&(`!``!``$````!!&H&S``!``D`!P/I``($=P2!``($
  73364. +MCP`(``$$G`````$$J0;I``(`"0`I`^D`!@#)!+($N@3'`,($T``"!-@`!``!
  73365. +M!.`````!`($`"`/J``````3H!U(``@`)```#Z0``````@0#&`^H````!!/("
  73366. +MF``!!/\(1P`!``D`.@/I``4%!@47`,(%)@$P``@%-`#```$`D@"T``$%/0"F
  73367. +M``$%0P"B``$%20"2``$%4`"&``$%5P`0``$%7@````$%90BJ``$`"0`2`^D`
  73368. +M`P5O!7D![``"!80`!``!!9,````!!:((V``!``D``P/I``$%J@`"!;0`"``!
  73369. +M!;P````!!<0(Z@`!``D``P/I``$%RP`"!=0`"``!!=L````!!>((_``"``D`
  73370. +M30/I``(%Z@7Y``P&"`$$``$&&`$```$&*`#(``$&-@"\``$&1`"H``$&4`"D
  73371. +M``$&7`!^``$&:@!Z``$&>`!2``$&A0!.``$&D@````$&H`````$`@0`$`^H`
  73372. +M````!JX);0`#``D`'@/I``($$@:W``0&Q@!4``$&U0!4``$&Y`````$&\```
  73373. +M``$`@0`%`^H````!!OP````!`($`!`/K````!`<'``P``0#E``@``0#9``0`
  73374. +M`0<1`````0<<";H``0`)`!8#Z0`#!6\%>0'L``0')`!0``$'*P!,``$',@`$
  73375. +M``$'.P````$'1`GL``(`"0!B`^D``P"B`,(`\@`(!TP!@``!!U8!@``!!7H!
  73376. +M3``!!V`!2``!!7`!+``!!VH!*``!!W0`,``!!W\````!`($``@/K``````>*
  73377. +M"H```0`)`!H#Z0`%`+@`R0>1!YT![``"!Z0`"``!!ZL````!![(*OP`!``D`
  73378. +M!P/I``$'N0`"!\,`#``!!\H````!!]$*U0`"``D`4@/I``8'W0?G!^X']@@!
  73379. +M`>P`!`@,`0X``0@3`0H``0@:``@``0@H`````0"!``P#Z@`````(-@MU``$`
  73380. +M"0`P`^D``@?N"$0`!@A/`'@``0A;`'0``0>2`"@``0AG`"```0@"``0``0AS
  73381. +M`````0A]"[X``@`)``L#Z0````8(@P`D``$(C0`D``$(EP`6``$(H0`2``$(
  73382. +MJP`$``$(M0````$`@0`)`^H````!"+\`!``!",P+Z@`!``D`*@/I``8`P@$@
  73383. +M"-8`N`#)`>P``@C?``P``0*G`````0CI#$```P`)`"P#Z0`""/$(^0`!"0``
  73384. +M+@`!`($`!P/J``````"!``$#ZP`````)"`R=``$`"0`V`^D`!@$@`>P#M@=+
  73385. +M`,(`R0`""1$`9``!"1D`8``!"2$-`P`"``D"&@/I`!4%>0#9`.4'!P'L!6\'
  73386. +M<P#R`+@`50)+"2<%!@47`,D`P@"B!Q$)+P02!OP`!`DY!]0``0E%!\(``0E1
  73387. +M!S8``0E7!S(``0"!`!4#Z@`````)70_\``(`"0`)`^D````$"6,`%@`!"6T`
  73388. +M$@`!"7<`!``!"8$````!`($`"0/J``````F+$"<``P`)`*D#Z0`-"94$'0F<
  73389. +M":0)KPG$"=,&=P9#!!8&D08G!@<`%`GE`IH``0GW`IH``0H)`EP``0H8`EP`
  73390. +M`0HG`EH``0HR`EH``0'M`E(``0H]`E(``0I'`D0``0I/`D```04'`>H``0I7
  73391. +M`>8``048`=```0IH`<P``0IW`;8``0J'`;(``0),`0P``0J7`0@``0JF`"@`
  73392. +M`0JM`"0``0"!``H#Z@``````@0!$`^L````#`EL!"``!`FD!!``!`A``!``!
  73393. +M"K0170`#``D"'0/I`!4#\0J["+\*P0K+"M,*W00&"N4`R0H(!N,&0P:1"O0*
  73394. +M^@L$`*(+#`#R!!8``PL6`WH``0L>`'@``0LL`'@``0"!`"P#Z@``````@0`(
  73395. +M`^L````(!($`'``!"SH`&``!"$0`%``!`3P`$``!!K<`#``!"T,`"``!"TT`
  73396. +M!``!!!(````!"UD4>P`!``D`!`/I`````@MA``0``0MH`````0MO%(<``@`)
  73397. +M`#X#Z0````0+?`!^``$+B`!Z``$+E``$``$+I@````$`@0`!`^L````!"[@`
  73398. +M```!"\D4U@`!``D``@/I````!`O/``0``0O8``0``0OA`````0OI`````0OQ
  73399. +M%.```0`)`!4#Z0`'"OH&=PM-">0&Q0<J!TL`!@OY`$P``0P``$@``0F=`"8`
  73400. +M`0P'`"(``0P/`````0P;`````0PG%2H``0`)`!,#Z0`"!7D![``"#"\`#``!
  73401. +M`[<````!##854P`"``D`F`/I``H,/`"X`,(+DP2R`2``R0Q,`>P$$@`"#%8"
  73402. +M2``!#%P````!`($``@/J``````QD%D0``P`)!6@#Z0`*#&L*P0K3!^X*W0<C
  73403. +M#'0,50DG!<L`$`Q[%9(``0R#%9(``0R+%80``0R3%8```0R;$/0``0RB$/``
  73404. +M`0RI$)0``0RR$)```0R[#I@``0S##I0``0?W#C```0S+#BP``0S6#38``0SA
  73405. +M#38``0SL#,8``0SS#,8``0"!`$@#Z@````,'W0`8``$,^@`4``$'YP`,``$`
  73406. +M@03V`^L`````#00<K``"``D!G`/I``L$%@=S`/(![`"B`,(!(`4&"G8`N`#)
  73407. +M``8*Y@7L``$-#P7,``$,/056``$-'05(``$-+0+8``$-.P+0``$`@0`(`^H`
  73408. +M````#4D>O``!``D`)P/I``0`P@$@`,D![``"#5(`"``!#5H````!#6(?!``!
  73409. +M``D`#@/I````!`UJ`"H``0UR`!P``0UZ``P``0V!`````0V('QH``0`)`!`#
  73410. +MZ0````(-CP`,``$-E0````$-FQ\R``(`"0!U`^D`!@#"`2``R0M[`J8(3@`$
  73411. +M`K$!+@`!#:4!)@`!`KL`&``!#:\````!`($`0`/K`````0+&`````0VZ']P`
  73412. +M`0`)``4#Z0````(-P@`(``$-R0````$-T!_I``$`"0`,`^D``@.V`>P``@W<
  73413. +M``@``0WG`````0WR(`H``0`)``T#Z0`#`[8![`N3``(-^P`(``$.`P````$.
  73414. +M"R`T``$`"0`0`^D``0#"``0.%``L``$.&P`@``$.(@`,``$.*@````$.,B!4
  73415. +M``$`"0`-`^D``@.V`>P``@X[``0``0Y#`````0Y+('8``0`)``\#Z0`%`,(%
  73416. +M!@47"G8"AP`"#E8`!``!#F`````!#FH@L``!``D`*`/I``0!(`#"`+@`R0`"
  73417. +M#G(`!``!#GD````!#H`@^0`#``D!EP/I``(,B@?N``(.BP`2``$.E0````$`
  73418. +M@0!Y`^H``````($`"0/K``````Z?(WP``0`)`!8#Z0`%`,(!(`TL`>P`R0`"
  73419. +M#JH`"``!#K0````!#KXCN@`!``D`U0/I``H`P@$@`*(`J`L,!!(%@P.V`,D`
  73420. +M\@`$#L4#.``!#LL#'``!#M$`(@`!#M@````!#M\DW0`!``D``@/I````!`[E
  73421. +M``0``0[N``0``0[W`````0[_`````0\').<``0`)``X#Z0`'!@<%!@47"T,&
  73422. +M)PM-`>P``@\/``0``0\6`````0\=)2X``0`)``\#Z0`"#%4![``$#R4`,@`!
  73423. +M#RP`*@`!#S,`"``!#SP````!#T4E4@`!``D`(P/I``,`P@5Y`>P`!`31`((`
  73424. +M`0]-`'8``0]4``P``0]=`````0]F)9```0`)``P#Z0`!"`$``@>>``0``0]M
  73425. +M`````0]S):P``0`)`!T#Z0`#`/(`R0'L``(*P@`$``$/?`````$/AB7C``$`
  73426. +M"0`3`^D``P"X`>P`R0`"#XT`"``!#Y,````!#YDF$``"``D`)`/I``0#F@!5
  73427. +M!!(![``"#Z(`!``!`&D````!`($``@/J``````^J)F```0`)``8#Z0`"#[$!
  73428. +M[``"#[H`!``!#\$````!#\@F>P`!``D`#P/I``0`N`#)"Y,![``"#]``"``!
  73429. +M#]<````!#]XFK``!``D`'`/I``(%>0'L``0/Y@!<``$/[0!.``$/]``.``$/
  73430. +M_0````$0!B;>``$`"0`<`^D``P#"!7D![``$#'4`9``!$`T`6``!$!,`#``!
  73431. +M$!L````!$",G%0`!``D`@0/I``L&!P4&!1<+0PIV!EL&)PM-`,(%>0'L``(0
  73432. +M+``8``$0-`````$0/"?K``$`"0`@`^D``P#"!7D![``!$$0````!$$LH)@`"
  73433. +M``D```/I``````"!`-X#Z@````($QP-R``$$N@+6``$05RD[``(`"0!%`^D`
  73434. +M`@#)!+(`!`"Y`/X``1!?`/X``0$A``0``1!H`````0"!``$#ZP````$`P@``
  73435. +M``$0=RF<``$`"0`%`^D`!!!^`?8,#@'L``(0A0````$0C`````$0DRG!``$`
  73436. +M"0!9`^D`!@FD`DL!XP'L`,(+!``"$'\`[@`!$)H`Y@`!$*`J2@`#``D`0P/I
  73437. +M``@0JP06$+<`50:W!!()+P"B``@)L`"R``$0Q`"R``$)U`!(``$0V`!(``$)
  73438. +MI0`B``$0Z0`>``$%)P`$``$0]`````$`@0`&`^H``````($`#P/K````!@%@
  73439. +M`#@``0G$`#0``0%4`!0``0$P``@``0'C``0``0%)`````1$!*N,``0`)`"\#
  73440. +MZ0`!$*L`!`7K`)0``1$+`)```07Z`!P``1$:`````1$H*R,``0`)`!0#Z0`$
  73441. +6`+@+DP#)`>P``A$P``@``1$W`````1P`
  73442. +`
  73443. +end
  73444. diff -rup --new-file baseline/fsf/emacs/unixlib/src/unlink.c amiga/fsf/emacs/unixlib/src/unlink.c
  73445. --- baseline/fsf/emacs/unixlib/src/unlink.c    Wed Dec 31 17:00:00 1969
  73446. +++ amiga/fsf/emacs/unixlib/src/unlink.c    Sat Sep 28 00:00:00 1996
  73447. @@ -0,0 +1,40 @@
  73448. +#include "amiga.h"
  73449. +#include "files.h"
  73450. +#include <amiga/ioctl.h>
  73451. +
  73452. +static int delete_open_file(char *name)
  73453. +{
  73454. +  BPTR nlock = Lock(name, SHARED_LOCK);
  73455. +
  73456. +  if (nlock)
  73457. +    {
  73458. +      int err = errno, i;
  73459. +
  73460. +      i = _last_fd();
  73461. +      while (--i >= 0)
  73462. +    if (ioctl(i, _AMIGA_DELETE_IF_ME, &nlock) == 0)
  73463. +      {
  73464. +        errno = err;
  73465. +        return 0;
  73466. +      } 
  73467. +      UnLock(nlock);
  73468. +   }
  73469. +  return -1;
  73470. +}
  73471. +
  73472. +int unlink(const char *file)
  73473. +{
  73474. +  long err;
  73475. +
  73476. +  chkabort();
  73477. +  if (DeleteFile(file)) return 0;
  73478. +  err = IoErr();
  73479. +  if (err == ERROR_DELETE_PROTECTED)
  73480. +    {
  73481. +      if (SetProtection(file, 0) && DeleteFile(file)) return 0;
  73482. +      err = IoErr();
  73483. +    }
  73484. +  if (err == ERROR_OBJECT_IN_USE && delete_open_file(file) == 0) return 0;
  73485. +  errno = convert_oserr(err);
  73486. +  return -1;
  73487. +}
  73488. diff -rup --new-file baseline/fsf/emacs/unixlib/src/utime.c amiga/fsf/emacs/unixlib/src/utime.c
  73489. --- baseline/fsf/emacs/unixlib/src/utime.c    Wed Dec 31 17:00:00 1969
  73490. +++ amiga/fsf/emacs/unixlib/src/utime.c    Sat Sep 28 00:00:00 1996
  73491. @@ -0,0 +1,22 @@
  73492. +#include "amiga.h"
  73493. +#include "timeconvert.h"
  73494. +#include <stdlib.h>
  73495. +#include <time.h>
  73496. +#include <utime.h>
  73497. +
  73498. +int utime(char *file, struct utimbuf *times)
  73499. +{
  73500. +  struct DateStamp date;
  73501. +  time_t mtime;
  73502. +
  73503. +  chkabort();
  73504. +  if (times) mtime = times->modtime;
  73505. +  else mtime = time(0);
  73506. +
  73507. +  if (mtime == -1) return 0;
  73508. +
  73509. +  _gmt2amiga(mtime, &date);
  73510. +
  73511. +  if (SetFileDate(file, &date)) return 0;
  73512. +  ERROR;
  73513. +}
  73514. diff -rup --new-file baseline/fsf/emacs/unixlib/src/wait4.c amiga/fsf/emacs/unixlib/src/wait4.c
  73515. --- baseline/fsf/emacs/unixlib/src/wait4.c    Wed Dec 31 17:00:00 1969
  73516. +++ amiga/fsf/emacs/unixlib/src/wait4.c    Sat Sep 28 00:00:00 1996
  73517. @@ -0,0 +1,57 @@
  73518. +#include "amiga.h"
  73519. +#include "signals.h"
  73520. +#include "processes.h"
  73521. +#include <sys/wait.h>
  73522. +
  73523. +int wait4(int pid, int *statusp, int options, struct rusage *rusage)
  73524. +{
  73525. +  struct process *p;
  73526. +
  73527. +  do {
  73528. +    int seen = FALSE;
  73529. +
  73530. +    scan_processes(p)
  73531. +      if (pid == 0 || p->pid == pid)
  73532. +    {
  73533. +      seen = TRUE;
  73534. +
  73535. +      if (p->status == exited)
  73536. +        {
  73537. +          int pid = p->pid;
  73538. +
  73539. +          if (statusp) *statusp = p->rc;
  73540. +          _free_entry(p);
  73541. +
  73542. +          return pid;
  73543. +        }
  73544. +    }
  73545. +    if (options & WNOHANG) return 0;
  73546. +    if (!seen)
  73547. +      {
  73548. +    errno = ECHILD;
  73549. +    return -1;
  73550. +      }
  73551. +    _handle_signals(_wait_signals(0));
  73552. +  } while (1);
  73553. +}
  73554. +
  73555. +int wait3(int *statusp, int options, struct rusage *rusage)
  73556. +{
  73557. +  return wait4(0, statusp, options, rusage);
  73558. +}
  73559. +
  73560. +int wait(int *statusp)
  73561. +{
  73562. +  return wait4(0, statusp, 0, NULL);
  73563. +}
  73564. +
  73565. +int waitpid(int pid, int *statusp, int options)
  73566. +{
  73567. +  /* We have no process groups, so : 
  73568. +       Our process group encompasses all our children
  73569. +       Each child is a process group unto itself
  73570. +     This is somewhat contradictory ... Should this be changed ? */
  73571. +  if (pid == -1) pid = 0;
  73572. +  if (pid < 0) pid = -pid;
  73573. +  return wait4(pid, statusp, options, NULL);
  73574. +}
  73575. diff -rup --new-file baseline/fsf/emacs/unixlib/src/write.c amiga/fsf/emacs/unixlib/src/write.c
  73576. --- baseline/fsf/emacs/unixlib/src/write.c    Wed Dec 31 17:00:00 1969
  73577. +++ amiga/fsf/emacs/unixlib/src/write.c    Sat Sep 28 00:00:00 1996
  73578. @@ -0,0 +1,29 @@
  73579. +#include "amiga.h"
  73580. +#include "files.h"
  73581. +#include <fcntl.h>
  73582. +#include <unistd.h>
  73583. +
  73584. +#undef write
  73585. +
  73586. +int __write(int fd, const void *buffer, unsigned int length)
  73587. +{
  73588. +  struct fileinfo *fi;
  73589. +
  73590. +  chkabort();
  73591. +  if (fi = _find_fd(fd))
  73592. +    {
  73593. +      if (fi->flags & FI_WRITE)
  73594. +    {
  73595. +      if (fi->flags & O_APPEND) fi->lseek(fi->userinfo, 0, SEEK_END);
  73596. +      return fi->write(fi->userinfo, buffer, length);
  73597. +    }
  73598. +      errno = EACCES;
  73599. +    }
  73600. +  return -1;
  73601. +}
  73602. +
  73603. +int write(int fd, const void *buffer, unsigned int length)
  73604. +{
  73605. +  return __write(fd, buffer, length);
  73606. +}
  73607. +
  73608. diff -rup --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/africa amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/africa
  73609. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/africa    Wed Dec 31 17:00:00 1969
  73610. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/africa    Sat Sep 28 00:00:00 1996
  73611. @@ -0,0 +1,43 @@
  73612. +# @(#)africa    4.3
  73613. +
  73614. +###############################################################################
  73615. +
  73616. +# Egypt
  73617. +
  73618. +# From Bob Devine (January 28, 1988):
  73619. +# Egypt: DST from first day of May to first of October (ending may
  73620. +# also be on Sept 30th not 31st -- you might want to ask one of the
  73621. +# soc.* groups, you might hit someone who could ask an embassy).
  73622. +# DST since 1960 except for 1981-82.
  73623. +
  73624. +# From U. S. Naval Observatory (January 19, 1989):
  73625. +# EGYPT               2 H  AHEAD OF UTC
  73626. +# EGYPT               3 H  AHEAD OF UTC  MAY 17 - SEP 30 (AFTER
  73627. +# EGYPT                                  RAMADAN)
  73628. +
  73629. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  73630. +Rule    Egypt    1960    max    -    May    1    2:00    1:00    " DST"
  73631. +Rule    Egypt    1960    max    -    Oct    1    2:00    0    -
  73632. +
  73633. +# Zone    NAME    GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  73634. +Zone    Egypt    2:00    Egypt        EET%s    1981
  73635. +        2:00    -        EET    1983
  73636. +        2:00    Egypt        EET%s
  73637. +
  73638. +###############################################################################
  73639. +
  73640. +# Libya
  73641. +
  73642. +# From Bob Devine (January 28 1988):
  73643. +# Libya: Since 1982 April 1st to September 30th (?)
  73644. +
  73645. +# From U. S. Naval Observatory (January 19, 1989):
  73646. +# LIBYAN ARAB         1 H  AHEAD OF UTC  JAMAHIRIYA/LIBYA
  73647. +# LIBYAN ARAB         2 H  AHEAD OF UTC  APR 1 - SEP 30 JAMAHIRIYA/LIBYA
  73648. +
  73649. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  73650. +Rule    Libya    1982    max    -    Apr    1    2:00    1:00    " DST"
  73651. +Rule    Libya    1982    max    -    Sep    30    2:00    0    -
  73652. +
  73653. +# Zone    NAME    GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  73654. +Zone    Libya    2:00    Libya        EET%s
  73655. diff -rup --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/antarctica amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/antarctica
  73656. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/antarctica    Wed Dec 31 17:00:00 1969
  73657. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/antarctica    Sat Sep 28 00:00:00 1996
  73658. @@ -0,0 +1,4 @@
  73659. +# @(#)antarctica    4.1
  73660. +
  73661. +# From Arthur David Olson (February 13, 1988):
  73662. +# No data available.
  73663. diff -rup --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/asia amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/asia
  73664. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/asia    Wed Dec 31 17:00:00 1969
  73665. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/asia    Sat Sep 28 00:00:00 1996
  73666. @@ -0,0 +1,262 @@
  73667. +# @(#)asia    7.1
  73668. +
  73669. +# From Guy Harris:
  73670. +# Incorporates data for Singapore from Robert Elz' asia 1.1, as well as
  73671. +# additional information from Tom Yap, Sun Microsystems Intercontinental
  73672. +# Technical Support (including a page from the Official Airline Guide -
  73673. +# Worldwide Edition).  The names for time zones are guesses.
  73674. +
  73675. +###############################################################################
  73676. +
  73677. +# People's Republic of China
  73678. +
  73679. +# From Guy Harris:
  73680. +# People's Republic of China.  Yes, they really have only one time zone.
  73681. +
  73682. +# From Bob Devine (January 28, 1988):
  73683. +# No they don't.  See TIME mag, February 17, 1986 p.52.  Even though
  73684. +# China is across 4 physical time zones, before Feb 1, 1986 only the
  73685. +# Peking (Bejing) time zone was recognized.  Since that date, China
  73686. +# has two of 'em -- Peking's and Urumqi (named after the capital of
  73687. +# the Xinjiang Uighur Autonomous Region).  I don't know about DST for it.
  73688. +#
  73689. +# . . .I just deleted the DST table and this editor makes it too
  73690. +# painful to suck in another copy..  So, here is what I have for
  73691. +# DST start/end dates for Peking's time zone (info from AP):
  73692. +#
  73693. +#     1986 May 4 - Sept 14
  73694. +#     1987 mid-April - ??
  73695. +
  73696. +# From U. S. Naval Observatory (January 19, 1989):
  73697. +# CHINA               8 H  AHEAD OF UTC  ALL OF CHINA, INCL TAIWAN
  73698. +# CHINA               9 H  AHEAD OF UTC  APR 17 - SEP 10
  73699. +
  73700. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  73701. +Rule    PRC    1970    max    -    Apr    Sun<=14    2:00    1:00    D
  73702. +Rule    PRC    1970    max    -    Sep    Sun<=14    3:00    0    S
  73703. +
  73704. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  73705. +Zone    PRC        8:00    PRC        C%sT
  73706. +
  73707. +###############################################################################
  73708. +
  73709. +# Republic of China
  73710. +
  73711. +# From Guy Harris
  73712. +
  73713. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  73714. +Zone    ROC        8:00    -        CST
  73715. +
  73716. +###############################################################################
  73717. +
  73718. +# Hongkong
  73719. +
  73720. +# From Guy Harris
  73721. +
  73722. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  73723. +Zone    Hongkong    8:00    -        HKT
  73724. +
  73725. +###############################################################################
  73726. +
  73727. +# Iran
  73728. +
  73729. +# From Bob Devine (January 28, 1988):
  73730. +# Iran: Last Sunday in March to third (?) Sunday in
  73731. +# September.  Since the revolution, the official calendar is Monarchic
  73732. +# calendar; I have no idea what the correspondence between dates are.
  73733. +
  73734. +# From U. S. Naval Observatory (January 19, 1989):
  73735. +# IRAN                3.5H AHEAD OF UTC
  73736. +
  73737. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  73738. +Rule    Iran    1988    max    -    Mar    lastSun    2:00    1:00    D
  73739. +Rule    Iran    1988    max    -    Sep    Sun>=15    2:00    0    S
  73740. +
  73741. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  73742. +Zone    Iran        3:30    Iran        I%sT
  73743. +
  73744. +###############################################################################
  73745. +
  73746. +# Israel
  73747. +
  73748. +# From U. S. Naval Observatory (January 19, 1989):
  73749. +# ISRAEL              2 H  AHEAD OF UTC
  73750. +# ISRAEL              3 H  AHEAD OF UTC  APR 10 - SEP 3
  73751. +
  73752. +# From Ephraim Silverberg (April 18, 1989):
  73753. +
  73754. +# Prior to 1989, the rules concerning Daylight Savings Time changed every
  73755. +# year; as information, regarding exact times and dates during this period,
  73756. +# is not readily available at the present time, the rules commence starting
  73757. +# with the year 1989.
  73758. +
  73759. +# From 1989 onwards the rules are as follows:
  73760. +#
  73761. +# 1. Daylight Savings Time commences midnight of the first Saturday night
  73762. +#    following the seven-day festival of Pesach (Passover).  The transition
  73763. +#    is from midnight Israel Standard Time to 1 a.m. Israel Daylight Savings
  73764. +#    time.  As the Pesach festival is dependent on the Lunar calendar (the
  73765. +#    first day is always on the 15th day of the month of Nisan), the rule
  73766. +#    changes every year on the Gregorian calendar.
  73767. +#
  73768. +# 2. Standard Time is reinstated on the Saturday night whereupon Jews
  73769. +#    following the Ashkenazi (European) rite begin to recite the Selichot
  73770. +#    (forgiveness) prayers prior to the Jewish Lunar New Year.  The transition
  73771. +#    is from midnight Israel Daylight Savings time to 11 p.m. Israel Standard
  73772. +#    Time.  The law (according to the Ashkenazi custom) concerning the
  73773. +#    commencement of the Selichot prayers is described in chapter 128, section
  73774. +#    5 of the "Code of Jewish Law," by Rabbi Shlomo Ganzfried (translated by
  73775. +#    Hyman E. Goldin):
  73776. +#
  73777. +#       Beginning with the Sunday [**] before Rosh Hashanah [***],
  73778. +#       we rise early for the service of Selichot (supplications for
  73779. +#       forgiveness).  If Rosh Hashanah occurs on Monday or Tuesday, we
  73780. +#       begin saying the Selichot from the Sunday of the preceding week.
  73781. +#
  73782. +#    This, too, varies from year to year on the Gregorian calendar and, thus,
  73783. +#    two explicit timezone rules are required for each Gregorian year.
  73784. +#
  73785. +#    [**] actually Saturday night as the Jewish day commences at nightfall.
  73786. +#    [***] the Jewish Lunar New Year.
  73787. +
  73788. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  73789. +Rule    Zion    1989    only    -    Apr    30    0:00    1:00    D
  73790. +Rule    Zion    1989    only    -    Sep    24    0:00    0:00    S
  73791. +Rule    Zion    1990    only    -    Apr    22    0:00    1:00    D
  73792. +Rule    Zion    1990    only    -    Sep    16    0:00    0:00    S
  73793. +Rule    Zion    1991    only    -    Apr     7    0:00    1:00    D
  73794. +Rule    Zion    1991    only    -    Sep     1    0:00    0:00    S
  73795. +Rule    Zion    1992    only    -    Apr    26    0:00    1:00    D
  73796. +Rule    Zion    1992    only    -    Sep    20    0:00    0:00    S
  73797. +Rule    Zion    1993    only    -    Apr    18    0:00    1:00    D
  73798. +Rule    Zion    1993    only    -    Sep    12    0:00    0:00    S
  73799. +Rule    Zion    1994    only    -    Apr     3    0:00    1:00    D
  73800. +Rule    Zion    1994    only    -    Aug    28    0:00    0:00    S
  73801. +Rule    Zion    1995    only    -    Apr    23    0:00    1:00    D
  73802. +Rule    Zion    1995    only    -    Sep    17    0:00    0:00    S
  73803. +Rule    Zion    1996    only    -    Apr    14    0:00    1:00    D
  73804. +Rule    Zion    1996    only    -    Sep     8    0:00    0:00    S
  73805. +Rule    Zion    1997    only    -    May     4    0:00    1:00    D
  73806. +Rule    Zion    1997    only    -    Sep    28    0:00    0:00    S
  73807. +Rule    Zion    1998    only    -    Apr    19    0:00    1:00    D
  73808. +Rule    Zion    1998    only    -    Sep    13    0:00    0:00    S
  73809. +Rule    Zion    1999    only    -    Apr    11    0:00    1:00    D
  73810. +Rule    Zion    1999    only    -    Sep     5    0:00    0:00    S
  73811. +Rule    Zion    2000    only    -    Apr    30    0:00    1:00    D
  73812. +Rule    Zion    2000    only    -    Sep    24    0:00    0:00    S
  73813. +Rule    Zion    2001    only    -    Apr    15    0:00    1:00    D
  73814. +Rule    Zion    2001    only    -    Sep     9    0:00    0:00    S
  73815. +Rule    Zion    2002    only    -    Apr     7    0:00    1:00    D
  73816. +Rule    Zion    2002    only    -    Sep     1    0:00    0:00    S
  73817. +Rule    Zion    2003    only    -    Apr    27    0:00    1:00    D
  73818. +Rule    Zion    2003    only    -    Sep    21    0:00    0:00    S
  73819. +Rule    Zion    2004    only    -    Apr    18    0:00    1:00    D
  73820. +Rule    Zion    2004    only    -    Sep    12    0:00    0:00    S
  73821. +Rule    Zion    2005    only    -    May     1    0:00    1:00    D
  73822. +Rule    Zion    2005    only    -    Sep    25    0:00    0:00    S
  73823. +Rule    Zion    2006    only    -    Apr    23    0:00    1:00    D
  73824. +Rule    Zion    2006    only    -    Sep    17    0:00    0:00    S
  73825. +Rule    Zion    2007    only    -    Apr    15    0:00    1:00    D
  73826. +Rule    Zion    2007    only    -    Sep     9    0:00    0:00    S
  73827. +Rule    Zion    2008    only    -    Apr    27    0:00    1:00    D
  73828. +Rule    Zion    2008    only    -    Sep    21    0:00    0:00    S
  73829. +Rule    Zion    2009    only    -    Apr    19    0:00    1:00    D
  73830. +Rule    Zion    2009    only    -    Sep    13    0:00    0:00    S
  73831. +
  73832. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  73833. +Zone    Israel        2:00    Zion        I%sT
  73834. +
  73835. +# The following is a chart of the day of the week and Gregorian date of
  73836. +# the first day of Pesach and the first day of Rosh Hashanah for the years
  73837. +# 1989 through 2009 inclusive.
  73838. +#
  73839. +# First Day of Passover
  73840. +# ---------------------
  73841. +# Gregorian Year    Day of Week    Month        Day
  73842. +# --------------    -----------    -----        ---
  73843. +#    1989        Thursday    April        20
  73844. +#    1990        Tuesday        April        10
  73845. +#    1991        Saturday    March        30
  73846. +#    1992        Saturday    April        18
  73847. +#    1993        Tuesday        April         6
  73848. +#    1994        Sunday        March        27
  73849. +#    1995        Saturday    April        15
  73850. +#    1996        Thursday    April         4
  73851. +#    1997        Tuesday        April        22
  73852. +#    1998        Saturday    April        11
  73853. +#    1999        Thursday    April         1
  73854. +#    2000        Thursday    April        20
  73855. +#    2001        Sunday        April         8
  73856. +#    2002        Thursday    March        28
  73857. +#    2003        Thursday    April        17
  73858. +#    2004        Tuesday        April         6
  73859. +#    2005        Sunday        April        24
  73860. +#    2006        Thursday    April        13
  73861. +#    2007        Tuesday        April         3
  73862. +#    2008        Sunday        April        20
  73863. +#    2009        Thursday    April         9
  73864. +#
  73865. +# First Day of Rosh Hashanah
  73866. +# --------------------------
  73867. +# Gregorian Year    Day of Week    Month        Day
  73868. +# --------------    -----------    -----        ---
  73869. +#    1989        Saturday    September    30
  73870. +#    1990        Thursday    September    20
  73871. +#    1991        Monday        September     9
  73872. +#    1992        Monday        September    28
  73873. +#    1993        Thursday    September    16
  73874. +#    1994        Tuesday        September     6
  73875. +#    1995        Monday        September    25
  73876. +#    1996        Saturday    September    14
  73877. +#    1997        Thursday    October         2
  73878. +#    1998        Monday        September    21
  73879. +#    1999        Saturday    September    11
  73880. +#    2000        Saturday    September    30
  73881. +#    2001        Tuesday        September    18
  73882. +#    2002        Saturday    September     7
  73883. +#    2003        Saturday    September    27
  73884. +#    2004        Thursday    September    16
  73885. +#    2005        Tuesday        October         4
  73886. +#    2006        Saturday    September    23
  73887. +#    2007        Thursday    September    13
  73888. +#    2008        Tuesday        September    30
  73889. +#    2009        Saturday    September    19
  73890. +
  73891. +###############################################################################
  73892. +
  73893. +# Japan
  73894. +
  73895. +# From Guy Harris
  73896. +
  73897. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  73898. +Zone    Japan        9:00    -        JST
  73899. +
  73900. +###############################################################################
  73901. +
  73902. +# Republic of Korea
  73903. +
  73904. +# From Guy Harris:
  73905. +# According to someone at the Korean Times in San Francisco,
  73906. +# Daylight Savings Time was not observed until 1987.  He did not know
  73907. +# at what time of day DST starts or ends.
  73908. +
  73909. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  73910. +Rule    ROK    1987    max    -    May    Sun<=14    2:00    1:00    D
  73911. +Rule    ROK    1987    max    -    Oct    Sun<=14    3:00    0    S
  73912. +
  73913. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  73914. +Zone    ROK        9:00    ROK        K%sT
  73915. +
  73916. +###############################################################################
  73917. +
  73918. +# Lebanon
  73919. +
  73920. +# From Bob Devine (January 28, 1988):
  73921. +# Lebanon: They do have DST but I don't know the dates.
  73922. +
  73923. +###############################################################################
  73924. +
  73925. +# Singapore
  73926. +
  73927. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  73928. +Zone    Singapore    8:00    -        SST
  73929. diff -rup --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/australasia amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/australasia
  73930. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/australasia    Wed Dec 31 17:00:00 1969
  73931. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/australasia    Sat Sep 28 00:00:00 1996
  73932. @@ -0,0 +1,113 @@
  73933. +# @(#)australasia    4.4
  73934. +
  73935. +# Incorporates updates for Australia from Robert Elz' australia 1.1
  73936. +# and further updates from the Australian consulate.
  73937. +
  73938. +###############################################################################
  73939. +
  73940. +# Australia
  73941. +
  73942. +# Australian Data (for states with DST), standard rules
  73943. +# Includes shift in 1987 to follow Vic/NSW rules for ending DST,
  73944. +# and shift in 1986 to start DST earlier.
  73945. +
  73946. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  73947. +Rule    Oz    1971    1985    -    Oct    lastSun    2:00    1:00    -
  73948. +Rule    Oz    1986    max    -    Oct    Sun<=24    2:00    1:00    -
  73949. +Rule    Oz    1972    only    -    Feb    27    3:00    0    -
  73950. +Rule    Oz    1973    1986    -    Mar    Sun>=1    3:00    0    -
  73951. +Rule    Oz    1987    max    -    Mar    Sun<=21    3:00    0    -
  73952. +
  73953. +# Zone    NAME            GMTOFF    RULES    FORMAT    [UNTIL]
  73954. +Zone    Australia/Tasmania    10:00    Oz    EST
  73955. +Zone    Australia/Queensland    10:00    -    EST    # No DST here
  73956. +Zone    Australia/North        9:30    -    CST    # No DST here
  73957. +Zone    Australia/West        8:00    -    WST    # No DST here
  73958. +Zone    Australia/South        9:30    Oz    CST
  73959. +
  73960. +# Victoria jumped to a later ending date for DST in 1986 rather than 1987.
  73961. +
  73962. +Zone    Australia/Victoria    10:00    Oz    EST    1985 Oct lastSun 2:00
  73963. +                10:00    1:00    EST    1986 Mar Sun<=21 3:00
  73964. +                10:00    Oz    EST
  73965. +
  73966. +# New South Wales and subjurisdictions have their own ideas of a fun time.
  73967. +# Based on law library research by John Mackin (john@basser.cs.su.oz),
  73968. +# who notes:
  73969. +#    In Australia, time is not legislated federally, but rather by the
  73970. +#    individual states.  Thus, while such terms as ``Eastern Standard Time''
  73971. +#    [I mean, of course, Australian EST, not any other kind] are in common
  73972. +#    use, _they have NO REAL MEANING_, as they are not defined in the
  73973. +#    legislation.  This is very important to understand. 
  73974. +#    I have researched New South Wales time only; . . .I hope that perhaps a
  73975. +#    resident of each state could be found to do it for their own state. 
  73976. +#    (And I can guarantee that Victoria and NSW are different, so the link
  73977. +#    between them in the current australasia file must be broken.)
  73978. +
  73979. +# From Robert Elz (May 5, 1989):
  73980. +#
  73981. +# From next year (1990) NSW will revert to ending DST on the 1st
  73982. +# Sunday in March (rather than the third, which it appears will
  73983. +# continue to be what everyone else uses).
  73984. +
  73985. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  73986. +Rule    NSW    1971    1985    -    Oct    lastSun    2:00    1:00    -
  73987. +Rule    NSW    1972    only    -    Feb    lastSun    3:00    0    -
  73988. +Rule    NSW    1973    1981    -    Mar    Sun>=1    3:00    0    -
  73989. +Rule    NSW    1982    only    -    Apr    4    3:00    0    -
  73990. +Rule    NSW    1983    1985    -    Mar    Sun>=1    3:00    0    -
  73991. +Rule    NSW    1986    only    -    Mar    16    3:00    0    -
  73992. +Rule    NSW    1986    only    -    Oct    19    2:00    1:00    -
  73993. +Rule    NSW    1987    only    -    Mar    15    3:00    0    -
  73994. +Rule    NSW    1987    max    -    Oct    lastSun    2:00    1:00    -
  73995. +Rule    NSW    1988    1989    -    Mar    Sun<=21    3:00    0    -
  73996. +Rule    NSW    1990    max    -    Mar    Sun>=1    3:00    0    -
  73997. +
  73998. +# Zone    NAME            GMTOFF    RULES    FORMAT    [UNTIL]
  73999. +Zone    Australia/NSW        10:00    NSW    EST
  74000. +# `Broken Hill' means the County of Yancowinna. [john@basser.cs.su.oz.au,1/4/89]
  74001. +Zone    Australia/Yancowinna    9:30    NSW    ???
  74002. +Zone    Australia/LHI        10:30    NSW    ???
  74003. +
  74004. +# A footnote here:
  74005. +#
  74006. +#    . . .
  74007. +#    Date: Thu, j19 Feb 87 12:02:17 EST
  74008. +#    From: Bradley White <seismo!k.cs.cmu.edu!bww>
  74009. +#    . . .
  74010. +#    I am including a description of Australian time zones. . .
  74011. +#    this stuff is definitely accurate.
  74012. +#    . . .
  74013. +#    a) Australian Eastern Time: (EST = GMT+10:00, EDT = GMT+11:00)
  74014. +#    . . .
  74015. +#    Summer of 86/87 - present (current legislation):
  74016. +#        third Sun Oct 02:00 EST -> third [S]un Mar 02:00 EST
  74017. +#
  74018. +# If this turns out to be true, substitute Sun<=21 (third Sunday in October)
  74019. +# for Sun<=24 (next-to-last Sunday in October) above. . .some time before
  74020. +# October 1988, the first time it makes a difference.
  74021. +
  74022. +###############################################################################
  74023. +
  74024. +# New Zealand
  74025. +
  74026. +# New Zealand, from Elz' asia 1.1
  74027. +# Elz says "no guarantees"
  74028. +# The 1989/90 rule may only last a year.  It is a trial that is
  74029. +# subject to Ministerial approval to be made permanent.
  74030. +# The termination of "daylight saving" may actually be second
  74031. +# to last Sunday in March.  Noone spoken to was very sure.
  74032. +
  74033. +# From U. S. Naval Observatory (January 19, 1989):
  74034. +# NEW ZEALAND        12 H  AHEAD OF UTC  (EXCLUDING CHATHAM ISLAND)
  74035. +# NEW ZEALAND        13 H  AHEAD OF UTC  OCT 30, '88-MAR 4, '89
  74036. +# NEW ZEALAND       12H45M AHEAD OF UTC  CHATHAM ISLAND
  74037. +
  74038. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  74039. +Rule    NZ    1974    1988    -    Oct    lastSun    2:00    1:00    D
  74040. +Rule    NZ    1989    max    -    Oct    Sun>=8    2:00    1:00    D
  74041. +Rule    NZ    1975    1989    -    Mar    Sun>=1    3:00    0    S
  74042. +Rule    NZ    1990    max    -    Mar    Sun>=15    3:00    0    S
  74043. +
  74044. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  74045. +Zone    NZ            12:00    NZ        NZ%sT    # New Zealand
  74046. diff -rup --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/etcetera amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/etcetera
  74047. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/etcetera    Wed Dec 31 17:00:00 1969
  74048. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/etcetera    Sat Sep 28 00:00:00 1996
  74049. @@ -0,0 +1,55 @@
  74050. +# @(#)etcetera    4.4
  74051. +
  74052. +# All of these are set up just so people can "zic -l" to a timezone
  74053. +# that's right for their area, even if it doesn't have a name or dst rules
  74054. +# (half hour zones are too much to bother with -- when someone asks!)
  74055. +
  74056. +Zone    GMT        0    -    GMT
  74057. +
  74058. +Zone    GMT-12        -12    -    GMT-1200
  74059. +Zone    GMT-11        -11    -    GMT-1100
  74060. +Zone    GMT-10        -10    -    GMT-1000
  74061. +Zone    GMT-9        -9    -    GMT-0900
  74062. +Zone    GMT-8        -8    -    GMT-0800
  74063. +Zone    GMT-7        -7    -    GMT-0700
  74064. +Zone    GMT-6        -6    -    GMT-0600
  74065. +Zone    GMT-5        -5    -    GMT-0500
  74066. +Zone    GMT-4        -4    -    GMT-0400
  74067. +Zone    GMT-3        -3    -    GMT-0300
  74068. +Zone    GMT-2        -2    -    GMT-0200
  74069. +Zone    GMT-1        -1    -    GMT-0100
  74070. +Zone    GMT+1        1    -    GMT+0100
  74071. +Zone    GMT+2        2    -    GMT+0200
  74072. +Zone    GMT+3        3    -    GMT+0300
  74073. +Zone    GMT+4        4    -    GMT+0400
  74074. +Zone    GMT+5        5    -    GMT+0500
  74075. +Zone    GMT+6        6    -    GMT+0600
  74076. +Zone    GMT+7        7    -    GMT+0700
  74077. +Zone    GMT+8        8    -    GMT+0800
  74078. +Zone    GMT+9        9    -    GMT+0900
  74079. +Zone    GMT+10        10    -    GMT+1000
  74080. +Zone    GMT+11        11    -    GMT+1100
  74081. +Zone    GMT+12        12    -    GMT+1200
  74082. +Zone    GMT+13        13    -    GMT+1300    # GMT+12 with DST
  74083. +
  74084. +Link    GMT        UTC
  74085. +Link    GMT        UCT
  74086. +Link    GMT        Universal
  74087. +Link    GMT        Greenwich
  74088. +Link    GMT        Zulu
  74089. +Link    GMT        GMT-0
  74090. +Link    GMT        GMT+0
  74091. +Link    GMT        GMT0
  74092. +Link    GMT+1        GMT1
  74093. +Link    GMT+2        GMT2
  74094. +Link    GMT+3        GMT3
  74095. +Link    GMT+4        GMT4
  74096. +Link    GMT+5        GMT5
  74097. +Link    GMT+6        GMT6
  74098. +Link    GMT+7        GMT7
  74099. +Link    GMT+8        GMT8
  74100. +Link    GMT+9        GMT9
  74101. +Link    GMT+10        GMT10
  74102. +Link    GMT+11        GMT11
  74103. +Link    GMT+12        GMT12
  74104. +Link    GMT+13        GMT13
  74105. diff -rup --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/europe amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/europe
  74106. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/europe    Wed Dec 31 17:00:00 1969
  74107. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/europe    Sat Sep 28 00:00:00 1996
  74108. @@ -0,0 +1,224 @@
  74109. +# @(#)europe    4.10
  74110. +
  74111. +# International country codes are used to identify countries' rules and
  74112. +# zones
  74113. +#
  74114. +# This data is by no means authoritative; if you think you know better, go
  74115. +# ahead and edit the file (and please send any changes to
  74116. +# ado@ncifcrf.gov for general use in the future).
  74117. +
  74118. +###############################################################################
  74119. +
  74120. +# United Kingdom
  74121. +
  74122. +# From Arthur David Olson (January 19, 1989):
  74123. +#
  74124. +# The starting and ending dates below (from which the rules are derived)
  74125. +# are from Whitaker's Almanack for 1987, page 146.
  74126. +# 1960 is the earliest year for which dates are given;
  74127. +# Whitaker's notes that British Summer Time (and, in some years, Double Summer
  74128. +# Time) was observed in earlier years but does not give start and end dates.
  74129. +#
  74130. +# A source at the British Information Office in New York avers that it's
  74131. +# known as "British" Summer Time in all parts of the United Kingdom.
  74132. +#    1960    April 10    October 2 (yes, 2, according to the almanac)
  74133. +#    1961    March 26    October 29
  74134. +#    1962    March 25    October 28
  74135. +#    1963    March 31    October 27
  74136. +#    1964    March 22    October 25
  74137. +#    1965    March 21    October 24
  74138. +#    1966    March 20    October 23
  74139. +#    1967    March 19    October 29
  74140. +#    1968    February 18    October 27
  74141. +# "British Standard Time, also one hour ahead of G. M. T., was kept between
  74142. +# 1968 Oct. 27-1971 Oct. 31."
  74143. +#    1972    March 19    October 29
  74144. +#    1973    March 18    October 28
  74145. +#    1974    March 17    October 27
  74146. +#    1975    March 16    October 26
  74147. +#    1976    March 21    October 24
  74148. +#    1977    March 20    October 23
  74149. +#    1978    March 19    October 29
  74150. +#    1979    March 18    October 28
  74151. +#    1980    March 16    October 26
  74152. +#    1981    March 29    October 25
  74153. +#    1982    March 28    October 24
  74154. +#    1983    March 27    October 23
  74155. +#    1984    March 25    October 28
  74156. +#    1985    March 31    October 27
  74157. +#    1986    March 30    October 26
  74158. +#    1987    March 29    October 25
  74159. +
  74160. +# From an Anonymous U. K. Donor (January 4, 1989):
  74161. +#
  74162. +# It is NOT possible to predict when [British Summer Time] will change
  74163. +# in a future year.
  74164. +# 
  74165. +# (The admiralty calculate when they think it should be (no more that a couple
  74166. +# of years in advance) and advise the government who then decide whether or 
  74167. +# not they will take the admiralty's advice)
  74168. +# 
  74169. +# ...the Gre[e]nwich...observatory...[was] very helpful.
  74170. +# 
  74171. +# I was not able to track down the Admiralty formula (I tried hard but failed)
  74172. +
  74173. +# ...
  74174. +# Date: 4 Jan 89 08:57:25 GMT (Wed)
  74175. +# From: Jonathan Leffler <nih-csl!uunet!mcvax!sphinx.co.uk!john>
  74176. +# ...
  74177. +# [British Summer Time] is fixed annually by Act of Parliament.
  74178. +# If you can predict what Parliament will do, you should be in
  74179. +# politics making a fortune, not computing.
  74180. +#
  74181. +# Summer time ends on Sunday 29 October 1989.
  74182. +
  74183. +# ...
  74184. +# Date: 5 Jan 89 09:50:38 GMT (Thu)
  74185. +# From: Peter Kendell <nih-csl!uunet!mcvax!tcom.stc.co.uk!pete>
  74186. +# ...
  74187. +# 
  74188. +# From my Collins Diary for 1989 - 
  74189. +# 
  74190. +# "At the time of going to press the Home Office was unable to confirm
  74191. +# the 1989 starting and finishing dates for BST*, but expressed the 
  74192. +# view that 26 March and 29 October were the likeliest dates to be
  74193. +# adopted"
  74194. +# 
  74195. +# *British Summer Time.
  74196. +
  74197. +# From an Anonymous U. K. Donor (January 5, 1989):
  74198. +#
  74199. +# . . .our government is seriously considering applying Double Summer Time -
  74200. +# putting the clocks forwards and back TWO hours for daylight saving time.
  74201. +# This is advocated to standardise time in the EEC - we're all supposed to
  74202. +# keep the same time and to change the clocks on the same dates in the future.
  74203. +
  74204. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  74205. +# Historic starting rules
  74206. +Rule    GB-Eire    1960    only    -    Apr    10    1:00s    1:00    BST
  74207. +Rule    GB-Eire    1961    1963    -    Mar    lastSun    1:00s    1:00    BST
  74208. +Rule    GB-Eire    1964    1967    -    Mar    Sun>=19    1:00s    1:00    BST
  74209. +Rule    GB-Eire    1968    only    -    Feb    18    1:00s    1:00    BST
  74210. +Rule    GB-Eire    1972    1980    -    Mar    Sun>=16    1:00s    1:00    BST
  74211. +# Historic ending rules
  74212. +Rule    GB-Eire    1960    only    -    Oct    2    1:00s    0    GMT
  74213. +Rule    GB-Eire    1961    1967    -    Oct    Sun>=23    1:00s    0    GMT
  74214. +Rule    GB-Eire    1971    only    -    Oct    31    1:00s    0    GMT
  74215. +# Current rules
  74216. +Rule    GB-Eire    1981    max    -    Mar    lastSun    1:00s    1:00    BST
  74217. +Rule    GB-Eire    1972    max    -    Oct    Sun>=23    1:00s    0    GMT
  74218. +
  74219. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  74220. +Zone    GB-Eire        0:00    GB-Eire        %s    1968 Oct 27 1:00s
  74221. +            1:00    -        BST    1971 Oct 31 1:00s
  74222. +            0:00    GB-Eire        %s
  74223. +
  74224. +###############################################################################
  74225. +
  74226. +# Continental Europe
  74227. +
  74228. +# The use of 1986 as starting years below is conservative.
  74229. +
  74230. +Rule    W-Eur    1986    max    -    Mar    lastSun    1:00s    1:00    " DST"
  74231. +Rule    W-Eur    1986    max    -    Sep    lastSun    1:00s    0    -
  74232. +
  74233. +Rule    M-Eur    1986    max    -    Mar    lastSun    2:00s    1:00    " DST"
  74234. +Rule    M-Eur    1986    max    -    Sep    lastSun    2:00s    0    -
  74235. +
  74236. +Rule    E-Eur    1986    max    -    Mar    lastSun    3:00s    1:00    " DST"
  74237. +Rule    E-Eur    1986    max    -    Sep    lastSun    3:00s    0    -
  74238. +
  74239. +Rule    Turkey    1986    max    -    Mar    lastSun    1:00    1:00    " DST"
  74240. +Rule    Turkey    1986    max    -    Sep    lastSun    1:00    0    -
  74241. +
  74242. +Rule    W-SU    1986    max    -    Mar    lastSun    2:00s    1:00    " DST"
  74243. +Rule    W-SU    1986    max    -    Sep    lastSun    2:00s    0    -
  74244. +
  74245. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  74246. +Zone    WET        0:00    W-Eur        WET%s
  74247. +Zone    Iceland        0:00    -        WET
  74248. +Zone    MET        1:00    M-Eur        MET%s
  74249. +Zone    Poland        1:00    W-Eur        MET%s
  74250. +Zone    EET        2:00    E-Eur        EET%s
  74251. +Zone    Turkey        3:00    Turkey        EET%s
  74252. +Zone    W-SU        3:00    M-Eur        ????
  74253. +
  74254. +# Tom Hoffman says that MET is also known as Central European Time
  74255. +
  74256. +Link    MET    CET
  74257. +
  74258. +###############################################################################
  74259. +
  74260. +# One source shows that Bulgaria, Cyprus, Finland, and Greece observe DST from
  74261. +# the last Sunday in March to the last Sunday in September in 1986.
  74262. +# The source shows Romania changing a day later than everybody else.
  74263. +#
  74264. +# According to Bernard Sieloff's source, Poland is in the MET time zone but
  74265. +# uses the WE DST rules.  The Western USSR uses EET+1 and ME DST rules.
  74266. +# Bernard Sieloff's source claims Romania switches on the same day, but at
  74267. +# 00:00 standard time (i.e., 01:00 DST).  It also claims that Turkey
  74268. +# switches on the same day, but switches on at 01:00 standard time
  74269. +# and off at 00:00 standard time (i.e., 01:00 DST)
  74270. +
  74271. +# ...
  74272. +# Date: Wed, 28 Jan 87 16:56:27 -0100
  74273. +# From: seismo!mcvax!cgcha!wtho (Tom Hofmann)
  74274. +# Message-Id: <8701281556.AA22174@cgcha.uucp>
  74275. +# ...
  74276. +# 
  74277. +# ...the European time rules are...standardized since 1981, when
  74278. +# most European coun[tr]ies started DST.  Before that year, only
  74279. +# a few countries (UK, France, Italy) had DST, each according
  74280. +# to own national rules.  In 1981, however, DST started on
  74281. +# 'Apr firstSun', and not on 'Mar lastSun' as in the following
  74282. +# years...
  74283. +# But also since 1981 there are some more national exceptions 
  74284. +# than listed in 'europe': Switzerland, for example, joined DST 
  74285. +# one year later, Denmark ended DST on 'Oct 1' instead of 'Sep 
  74286. +# lastSun' in 1981---I don't know how they handle now.
  74287. +# 
  74288. +# Finally, DST ist always from 'Apr 1' to 'Oct 1' in the
  74289. +# Soviet Union (as far as I know).  
  74290. +# 
  74291. +# Tom Hofmann, Scientific Computer Center, CIBA-GEIGY AG,
  74292. +# 4002 Basle, Switzerland
  74293. +# UUCP: ...!mcvax!cernvax!cgcha!wtho
  74294. +
  74295. +# ...
  74296. +# Date: Wed, 4 Feb 87 22:35:22 +0100
  74297. +# From: seismo!mcvax!cwi.nl!dik (Dik T. Winter)
  74298. +# ...
  74299. +# 
  74300. +# The information from Tom Hofmann is (as far as I know) not entirely correct.
  74301. +# After a request from chongo at amdahl I tried to retrieve all information
  74302. +# about DST in Europe.  I was able to find all from about 1969.
  74303. +# 
  74304. +# ...standardization on DST in Europe started in about 1977 with switches on
  74305. +# first Sunday in April and last Sunday in September...
  74306. +# In 1981 UK joined Europe insofar that
  74307. +# the starting day for both shifted to last Sunday in March.  And from 1982
  74308. +# the whole of Europe used DST, with switch dates April 1 and October 1 in
  74309. +# the Sov[i]et Union.  In 1985 the SU reverted to standard Europe[a]n switch
  74310. +# dates...
  74311. +# 
  74312. +# It should also be remembered that time-zones are not constants; e.g.
  74313. +# Portugal switched in 1976 from MET (or CET) to WET with DST...
  74314. +# Note also that though there were rules for switch dates not
  74315. +# all countries abided to these dates, and many individual deviations
  74316. +# occurred, though not since 1982 I believe.  Another note: it is always
  74317. +# assumed that DST is 1 hour ahead of normal time, this need not be the
  74318. +# case; at least in the Netherlands there have been times when DST was 2 hours
  74319. +# in advance of normal time.
  74320. +# 
  74321. +# ...
  74322. +# dik t. winter, cwi, amsterdam, nederland
  74323. +# INTERNET   : dik@cwi.nl
  74324. +# BITNET/EARN: dik@mcvax
  74325. +
  74326. +# From Bob Devine (January 28, 1988):
  74327. +# ...
  74328. +# Greece: Last Sunday in April to last Sunday in September (iffy on dates).
  74329. +# Since 1978.  Change at midnight.
  74330. +# ...
  74331. +# Monaco: has same DST as France.
  74332. +# ...
  74333. diff -rup --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/factory amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/factory
  74334. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/factory    Wed Dec 31 17:00:00 1969
  74335. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/factory    Sat Sep 28 00:00:00 1996
  74336. @@ -0,0 +1,8 @@
  74337. +# @(#)factory    1.1
  74338. +
  74339. +# For companies who don't want to put time zone specification in
  74340. +# their installation procedures.  When users run date, they'll get the message.
  74341. +# Also useful for the "comp.sources" version.
  74342. +
  74343. +# Zone    NAME    GMTOFF    RULES    FORMAT
  74344. +Zone    Factory    0    - "Local time zone must be set--see zic manual page"
  74345. diff -rup --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/leapseconds amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/leapseconds
  74346. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/leapseconds    Wed Dec 31 17:00:00 1969
  74347. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/leapseconds    Sat Sep 28 00:00:00 1996
  74348. @@ -0,0 +1,28 @@
  74349. +# @(#)leapseconds    4.1
  74350. +
  74351. +# Allowance for leapseconds added to each timezone file.
  74352. +
  74353. +# The correction (+ or -) is made at the given time, so lines
  74354. +# will typically look like:
  74355. +#    Leap    YEAR    MON    DAY    23:59:60    +    R/S
  74356. +# or
  74357. +#    Leap    YEAR    MON    DAY    23:59:59    -    R/S
  74358. +
  74359. +# If the leapsecond is Rolling (R) the given time is local time
  74360. +# If the leapsecond is Stationary (S) the given time is GMT
  74361. +
  74362. +# Leap    YEAR    MONTH    DAY    HH:MM:SS    CORR    R/S
  74363. +Leap    1972    Jun    30    23:59:60    +    S
  74364. +Leap    1972    Dec    31    23:59:60    +    S
  74365. +Leap    1973    Dec    31    23:59:60    +    S
  74366. +Leap    1974    Dec    31    23:59:60    +    S
  74367. +Leap    1975    Dec    31    23:59:60    +    S
  74368. +Leap    1976    Dec    31    23:59:60    +    S
  74369. +Leap    1977    Dec    31    23:59:60    +    S
  74370. +Leap    1978    Dec    31    23:59:60    +    S
  74371. +Leap    1979    Dec    31    23:59:60    +    S
  74372. +Leap    1981    Jun    30    23:59:60    +    S
  74373. +Leap    1982    Jun    30    23:59:60    +    S
  74374. +Leap    1983    Jun    30    23:59:60    +    S
  74375. +Leap    1985    Jun    30    23:59:60    +    S
  74376. +Leap    1987    Dec    31    23:59:60    +    S
  74377. diff -rup --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/northamerica amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/northamerica
  74378. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/northamerica    Wed Dec 31 17:00:00 1969
  74379. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/northamerica    Sat Sep 28 00:00:00 1996
  74380. @@ -0,0 +1,321 @@
  74381. +# @(#)northamerica    4.8
  74382. +
  74383. +###############################################################################
  74384. +
  74385. +# United States
  74386. +
  74387. +# From Arthur David Olson:
  74388. +# US Daylight Saving Time ended on the last Sunday of *October* in 1974.
  74389. +# See, for example, the front page of the Saturday, October 26, 1974
  74390. +# and Sunday, October 27, 1974 editions of the Washington Post.
  74391. +
  74392. +# From seismo!munnari!kre:
  74393. +# I recall also being told by someone once that Canada didn't have
  74394. +# the DST variations in 74/75 that the US did, but I am not nearly
  74395. +# sure enough of this to add anything.
  74396. +
  74397. +# From Arthur David Olson:
  74398. +# The above has been confirmed by Bob Devine; we'll go with it here.
  74399. +
  74400. +# From Arthur David Olson:
  74401. +# Before the Uniform Time Act of 1966 took effect in 1967, observance of
  74402. +# Daylight Saving Time in the US was by local option, except during wartime.
  74403. +
  74404. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  74405. +Rule    US    1918    1919    -    Mar    lastSun    2:00    1:00    D
  74406. +Rule    US    1918    1919    -    Oct    lastSun    2:00    0    S
  74407. +Rule    US    1942    only    -    Feb    9    2:00    1:00    W # War
  74408. +Rule    US    1945    only    -    Sep    30    2:00    0    S
  74409. +Rule    US    1967    max    -    Oct    lastSun    2:00    0    S
  74410. +Rule    US    1967    1973    -    Apr    lastSun    2:00    1:00    D
  74411. +Rule    US    1974    only    -    Jan    6    2:00    1:00    D
  74412. +Rule    US    1975    only    -    Feb    23    2:00    1:00    D
  74413. +Rule    US    1976    1986    -    Apr    lastSun    2:00    1:00    D
  74414. +Rule    US    1987    max    -    Apr    Sun>=1    2:00    1:00    D
  74415. +
  74416. +# From Bob Devine (January 28, 1988):
  74417. +# ...Alaska (and Hawaii) had the timezone names changed in 1967.
  74418. +#    old                         new
  74419. +#    Pacific Standard Time(PST)  -same-
  74420. +#    Yukon Standard Time(YST)    -same-
  74421. +#    Central Alaska S.T. (CAT)   Alaska-Hawaii St[an]dard Time (AHST)
  74422. +#    Nome Standard Time (NT)     Bering Standard Time (BST)
  74423. +# 
  74424. +# ...Alaska's timezone lines were redrawn in 1983 to give only 2 tz.
  74425. +#    The YST zone now covers nearly all of the state, AHST just part
  74426. +#    of the Aleutian islands.   No DST.
  74427. +
  74428. +# From U. S. Naval Observatory (January 19, 1989):
  74429. +# USA  EASTERN       5 H  BEHIND UTC    NEW YORK, WASHINGTON
  74430. +# USA  EASTERN       4 H  BEHIND UTC    APR 3 - OCT 30
  74431. +# USA  CENTRAL       6 H  BEHIND UTC    CHICAGO, HOUSTON
  74432. +# USA  CENTRAL       5 H  BEHIND UTC    APR 3 - OCT 30
  74433. +# USA  MOUNTAIN      7 H  BEHIND UTC    DENVER
  74434. +# USA  MOUNTAIN      6 H  BEHIND UTC    APR 3 - OCT 30
  74435. +# USA  PACIFIC       8 H  BEHIND UTC    L.A., SAN FRANCISCO
  74436. +# USA  PACIFIC       7 H  BEHIND UTC    APR 3 - OCT 30
  74437. +# USA  ALASKA STD    9 H  BEHIND UTC    MOST OF ALASKA     (AKST)
  74438. +# USA  ALASKA STD    8 H  BEHIND UTC    APR 3 - OCT 30 (AKDT)
  74439. +# USA  ALEUTIAN     10 H  BEHIND UTC    ISLANDS WEST OF 170W
  74440. +# USA  - " -         9 H  BEHIND UTC    APR 3 - OCT 30
  74441. +# USA  HAWAII       10 H  BEHIND UTC
  74442. +# USA  BERING       11 H  BEHIND UTC    SAMOA, MIDWAY
  74443. +
  74444. +# From Arthur David Olson (January 21, 1989):
  74445. +# The above dates are for 1988.
  74446. +# Note the "AKST" and "AKDT" abbreviations, the claim that there's
  74447. +# no DST in Samoa, and the claim that there is DST in Alaska and the
  74448. +# Aleutians.
  74449. +
  74450. +# From Arthur David Olson (February 13, 1988):
  74451. +# Legal standard time zone names, from United States Code (1982 Edition and
  74452. +# Supplement III), Title 15, Chapter 6, Section 260 and forward.  First, names
  74453. +# up to April 1, 1967 (when most provisions of the Uniform Time Act of 1966
  74454. +# took effect), as explained in sections 263 and 261:
  74455. +#    (none)
  74456. +#    United States standard eastern time
  74457. +#    United States standard mountain time
  74458. +#    United States standard central time
  74459. +#    United States standard Pacific time
  74460. +#    (none)
  74461. +#    United States standard Alaska time
  74462. +#    (none)
  74463. +# Next, names from April 1, 1967 until November 30, 1983 (the date for
  74464. +# public law 98-181):
  74465. +#    Atlantic standard time
  74466. +#    eastern standard time
  74467. +#    central standard time
  74468. +#    mountain standard time
  74469. +#    Pacific standard time
  74470. +#    Yukon standard time
  74471. +#    Alaska-Hawaii standard time
  74472. +#    Bering standard time
  74473. +# And after November 30, 1983:
  74474. +#    Atlantic standard time
  74475. +#    eastern standard time
  74476. +#    central standard time
  74477. +#    mountain standard time
  74478. +#    Pacific standard time
  74479. +#    Alaska standard time
  74480. +#    Hawaii-Aleutian standard time
  74481. +#    Samoa standard time
  74482. +# The law doesn't give abbreviations.
  74483. +
  74484. +# Easy stuff first--including Alaska, where we ignore history (since we
  74485. +# can't tell if we should give Yukon time or Alaska-Hawaii time for "old"
  74486. +# times).
  74487. +
  74488. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  74489. +Zone    US/Eastern    -5:00    US        E%sT
  74490. +Zone    US/Central    -6:00    US        C%sT
  74491. +Zone    US/Mountain    -7:00    US        M%sT
  74492. +Zone    US/Pacific    -8:00    US        P%sT
  74493. +Zone    US/Alaska    -9:00    US        AK%sT    # Abbreviation per USNO
  74494. +
  74495. +# Mainland US areas that are always Standard as of 1986.
  74496. +
  74497. +Zone    US/East-Indiana    -5:00    US        E%sT    1946
  74498. +            -5:00    -        EST    # Always EST as of 1986
  74499. +Zone    US/Arizona    -7:00    US        M%sT    1946
  74500. +            -7:00    -        MST    # Always MST as of 1986
  74501. +
  74502. +# From Arthur David Olson (February 13, 1988):
  74503. +# However. . .a writer from the Inter Tribal Council of Arizona, Inc.,
  74504. +# notes in private correspondence dated 12/28/87 that "Presently, only the
  74505. +# Navajo Nation participates in the Daylight Saving Time policy, due to its
  74506. +# large size and location in three states."  (The "only" means that other
  74507. +# tribal nations don't use DST.)
  74508. +
  74509. +Link    US/Mountain    Navajo
  74510. +
  74511. +# From Bob Devine (January 28, 1988):
  74512. +# Michigan didn't observe DST from 1968 to 1973.
  74513. +
  74514. +Zone    US/Michigan    -5:00    US        E%sT    1968
  74515. +            -5:00    -        EST    1973
  74516. +            -5:00    US        E%sT
  74517. +
  74518. +# Samoa just changes names.  No DST, per Naval Observatory.
  74519. +
  74520. +Zone    US/Samoa    -11:00    -        NST    1967 Apr 1  # N=Nome
  74521. +            -11:00    -        BST    1983 Nov 30 # B=Bering
  74522. +            -11:00    -        SST            # S=Samoa
  74523. +
  74524. +# Aleutian has a name change.  DST, per Naval Observatory.
  74525. +
  74526. +Zone    US/Aleutian    -10:00    US        AH%sT    1983 Nov 30
  74527. +            -10:00    US        HA%sT
  74528. +
  74529. +# From Arthur David Olson:
  74530. +# And then there's Hawaii.
  74531. +# DST was observed for one day in 1933;
  74532. +# Standard time was change by half an hour in 1947;
  74533. +# it's always standard as of 1986.
  74534. +
  74535. +Zone    US/Hawaii    -10:30    US    H%sT    1933 Apr 30 2:00
  74536. +            -10:30    1:00    HDT    1933 May 1 2:00
  74537. +            -10:30    US    H%sT    1947 Jun 8 2:00
  74538. +            -10:00    -    HST
  74539. +
  74540. +# Old names, for S5 users
  74541. +
  74542. +# Link    LINK-FROM    LINK-TO
  74543. +# Link    US/Eastern    EST5EDT
  74544. +# Link    US/Central    CST6CDT
  74545. +# Link    US/Mountain    MST7MDT
  74546. +# Link    US/Pacific    PST8PDT
  74547. +# Link    US/East-Indiana    EST
  74548. +# Link    US/Arizona    MST
  74549. +# Link    US/Hawaii    HST
  74550. +
  74551. +################################################################################
  74552. +
  74553. +# Canada
  74554. +
  74555. +# Canada is reportedly lots easier than the US--leastways since 1951.
  74556. +# I don't know what they did before then.
  74557. +# 4.3BSD claims that it's perfectly regular.
  74558. +# According to a posting in "comp.bugs.misc", "comp.unix.wizards", etc.
  74559. +# on February 8, 1987, by Dave Sherman of the Law Society of Upper Canada,
  74560. +# "...Canada (well, Ontario and at least some of the other provinces) are
  74561. +# adopting the new daylight savings time rules...".  We assume all of
  74562. +# Canada is doing so.
  74563. +
  74564. +# From Bob Devine (January 28, 1988):
  74565. +# All of Canada did have DST from your first rule except Saskatchewan.
  74566. +# Which parts did not observe DST is hard to pinpoint but most of the
  74567. +# province follows the rules.
  74568. +# NOTE: those that didn't have DST for that rule, also
  74569. +# probably did not have it for several years previous.
  74570. +
  74571. +# From U. S. Naval Observatory (January 19, 1989):
  74572. +# CANADA   NEW FDL    3.5H BEHIND UTC    ST.JOHN'S
  74573. +# CANADA   NEW FDL    1.5H BEHIND UTC    APR 3 - OCT 29
  74574. +# CANADA   ATLANTIC   4 H  BEHIND UTC    HALIFAX
  74575. +# CANADA   ATLANTIC   3 H  BEHIND UTC    APR 3 - OCT 29
  74576. +# CANADA   EASTERN    5 H  BEHIND UTC    TORONTO, MONTREAL, OTTAWA
  74577. +# CANADA   EASTERN    4 H  BEHIND UTC    APR 3 - OCT 29
  74578. +# CANADA   CENTRAL    6 H  BEHIND UTC    REGINA, WINNIPEG
  74579. +# CANADA   CENTRAL    5 H  BEHIND UTC    APR 3 - OCT 29
  74580. +# CANADA   MOUNTAIN   7 H  BEHIND UTC    CALGARY, EDMONTON
  74581. +# CANADA   MOUNTAIN   6 H  BEHIND UTC    APR 3 - OCT 29
  74582. +# CANADA   PACIFIC    8 H  BEHIND UTC    VANCOUVER
  74583. +# CANADA   PACIFIC    7 H  BEHIND UTC    APR 3 - OCT 29
  74584. +# CANADA   YUKON      SAME AS PACIFIC    DAWSON
  74585. +
  74586. +# From Arthur David Olson (January 21, 1989):
  74587. +# April 3 fell on a Sunday in 1988; October 29 fell on a Sunday in 1989.  Ahem.
  74588. +# Note claim that there's double DST in Newfoundland and that Yukon should
  74589. +# be same as Pacific.  Stick with rules posted in 1988 until more authoritative
  74590. +# information is available.
  74591. +
  74592. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  74593. +Rule    Canada    1969    max    -    Oct    lastSun    2:00    0    S
  74594. +Rule    Canada    1969    1986    -    Apr    lastSun    2:00    1:00    D
  74595. +Rule    Canada    1987    max    -    Apr    Sun>=1    2:00    1:00    D
  74596. +
  74597. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  74598. +# Bob Devine says that DST *is* observed in Newfoundland
  74599. +Zone    Canada/Newfoundland    -3:30    Canada        N%sT
  74600. +Zone    Canada/Atlantic        -4:00    Canada        A%sT
  74601. +Zone    Canada/Eastern        -5:00    Canada        E%sT
  74602. +Zone    Canada/Central        -6:00    Canada        C%sT
  74603. +Zone    Canada/East-Saskatchewan    -6:00    -    CST # No DST as of 1987
  74604. +Zone    Canada/Mountain        -7:00    Canada        M%sT
  74605. +Zone    Canada/Pacific        -8:00    Canada        P%sT
  74606. +Zone    Canada/Yukon        -9:00    Canada        Y%sT
  74607. +
  74608. +###############################################################################
  74609. +
  74610. +# Mexico
  74611. +
  74612. +# From Guy Harris:
  74613. +# Rules are from the Official Airline Guide, Worldwide Edition, for 1987.
  74614. +# Rules prior to 1987 are unknown.
  74615. +# The comments in the OAG say "Only Ensenada, Mexicale, San Felipe and Tijuana
  74616. +# observe DST."  This is presumably Baja California Norte, above 28th parallel,
  74617. +# as listed there; Mexico/BajaSur is for "Baja California Sur and N. Pacific
  74618. +# Coast (States of Sinaloa and Sonora)."
  74619. +
  74620. +# From Bob Devine (January 28, 1988):
  74621. +# The Federal District (where Mexico City is) has observed [DST] several
  74622. +# times but not recently.
  74623. +# 
  74624. +# I don't where to drawn the line in the North Baja area.  28th latitude
  74625. +# sounds good -- but it may be higher (how far [d]o radio stations from
  74626. +# San Diego affect culture?).
  74627. +# 
  74628. +# The dates of DST probably go back to 1981.  The rules are the same as
  74629. +# US's.  This is going to be a headache for US presidential electi[o]n years!
  74630. +
  74631. +# From Arthur David Olson (February 13, 1988)
  74632. +# Since the 1981 starting date is only "probable," we'll keep the 1987
  74633. +# starting date below.
  74634. +
  74635. +# From U. S. Naval Observatory (January 19, 1989):
  74636. +# MEXICO BAJA CAL N   7 H  BEHIND UTC    BAJA CALIFORNIA SUR AND
  74637. +# MEXICO BAJA CAL N                      N. PACIFIC COAST (STATES
  74638. +# MEXICO BAJA CAL N                      OF SINALOA AND SONORA)
  74639. +# MEXICO BAJA CAL N   8 H  BEHIND UTC    ABOVE 28TH PARALLAL APR 3
  74640. +# MEXICO BAJA CAL N                      - OCT 29
  74641. +# MEXICO BAJA CAL N   7 H  BEHIND UTC    ABOVE 28TH PARALLAL APR 3
  74642. +# MEXICO BAJA CAL N                      - 0CT 29
  74643. +# MEXICO              6 H  BEHIND UTC    STATES OF DURANGO,
  74644. +# MEXICO                                 COAHUILA, NUEVO LEON,
  74645. +# MEXICO                                 TAMAULIPAS
  74646. +# MEXICO              5 H  BEHIND UTC    STATES OF DURANGO,
  74647. +# MEXICO                                 COAHUILA, NUEVO LEON,
  74648. +# MEXICO                                 TAMAULIPAS  APR 3 - OCT 29
  74649. +# MEXICO              6 H  BEHIND UTC    GENERAL MEXICO, STATES OF
  74650. +# MEXICO                                 CAMPECHE, QUINTANA ROO AND
  74651. +# MEXICO                                 YUCATAN
  74652. +
  74653. +# From Arthur David Olson (January 21, 1989):
  74654. +# April 3 fell on a Sunday in 1988; October 29 fell on a Sunday in 1989.  Ahem.
  74655. +# USNO claims there should be four Mexican zones rather than three:
  74656. +# a zone that's GMT-8 with DST; a zone that's always GMT-7;
  74657. +# a zone that's GMT-6 with DST; and a zone that's always GMT-6.
  74658. +# Wait for more authoritative information before changing.
  74659. +
  74660. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  74661. +Rule    Mexico    1987    max    -    Oct    lastSun    2:00    0    S
  74662. +Rule    Mexico    1987    max    -    Apr    Sun>=1    2:00    1:00    D
  74663. +
  74664. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  74665. +Zone    Mexico/BajaNorte    -8:00    Mexico        P%sT
  74666. +Zone    Mexico/BajaSur        -7:00    -        MST
  74667. +Zone    Mexico/General        -6:00    -        CST
  74668. +
  74669. +###############################################################################
  74670. +
  74671. +# Jamaica
  74672. +
  74673. +# From Bob Devine (January 28, 1988):
  74674. +# Follows US rules.
  74675. +
  74676. +# From U. S. Naval Observatory (January 19, 1989):
  74677. +# JAMAICA             5 H  BEHIND UTC
  74678. +
  74679. +Link    US/Eastern    Jamaica
  74680. +
  74681. +###############################################################################
  74682. +
  74683. +# Cuba
  74684. +
  74685. +# From Bob Devine (January 28, 1988):
  74686. +# . . .DST is from 2nd Sunday in May to 2nd Sunday in October since 1981.
  74687. +# Change at midnight.  In 1979 & 1980, started at 3rd Sunday in March
  74688. +# (I think).
  74689. +
  74690. +# From U. S. Naval Observatory (January 19, 1989):
  74691. +# CUBA                5 H  BEHIND UTC
  74692. +# CUBA                4 H  BEHIND UTC    MAR 20 - OCT 8
  74693. +
  74694. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  74695. +Rule    Cuba    1979    1980    -    Mar    Sun>=15    0:00    1:00    D
  74696. +Rule    Cuba    1979    1980    -    Oct    Sun>=8    0:00    0    S
  74697. +Rule    Cuba    1981    max    -    May    Sun>=8    0:00    1:00    D
  74698. +Rule    Cuba    1981    max    -    Oct    Sun>=8    0:00    0    S
  74699. +
  74700. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT
  74701. +Zone    Cuba            -5:00    Cuba        C%sT
  74702. diff -rup --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/pacificnew amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/pacificnew
  74703. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/pacificnew    Wed Dec 31 17:00:00 1969
  74704. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/pacificnew    Sat Sep 28 00:00:00 1996
  74705. @@ -0,0 +1,21 @@
  74706. +# @(#)pacificnew    4.4
  74707. +
  74708. +# From Arthur David Olson (January 18, 1989):
  74709. +# On November 10, 1987, the U. S. House of Representatives passed a bill
  74710. +# (H.R. 435), the "Uniform Poll Closing Time Act", establishing
  74711. +# "Pacific Presidential Election Time"; it was not acted on by the Senate
  74712. +# before the end of the 100th Congress and so died.
  74713. +# The bill has been reintroduced in the 101st Congress as H. R. 18;
  74714. +# H. R. 96 also deals with poll closing time.  Either bill would have to be
  74715. +# passed by both the House and Senate and signed by the President (or have
  74716. +# the President's veto overridden by the House and Senate) before becoming law.
  74717. +
  74718. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  74719. +Rule    Twilite    1989    max    -    Apr    Sun>=1    2:00    1:00    D
  74720. +Rule    Twilite    1989    max    uspres    Oct    lastSun    2:00    1:00    PE
  74721. +Rule    Twilite    1989    max    uspres    Nov    Sun>=7    2:00    0    S
  74722. +Rule    Twilite    1989    max    nonpres    Oct    lastSun    2:00    0    S
  74723. +
  74724. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  74725. +Zone    US/Pacific-New    -8:00    US        P%sT    1989
  74726. +            -8:00    Twilite        P%sT
  74727. diff -rup --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/smakefile amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/smakefile
  74728. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/smakefile    Wed Dec 31 17:00:00 1969
  74729. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/smakefile    Sat Sep 28 00:00:00 1996
  74730. @@ -0,0 +1,67 @@
  74731. +#    @(#)Makefile    5.9 (Berkeley) 2/28/91
  74732. +
  74733. +# Change the line below for your time zone (after finding the zone you want in
  74734. +# the time zone files, or adding it to a time zone file).
  74735. +# Alternately, if you discover you've got the wrong time zone, you can just
  74736. +#    zic -l rightzone
  74737. +
  74738. +LOCALTIME=    MET
  74739. +
  74740. +# If you want something other than Eastern United States time as a template
  74741. +# for handling POSIX-style time zone environment variables,
  74742. +# change the line below (after finding the zone you want in the
  74743. +# time zone files, or adding it to a time zone file).
  74744. +# Alternately, if you discover you've got the wrong time zone, you can just
  74745. +#    zic -p rightzone
  74746. +
  74747. +POSIXRULES=    MET
  74748. +
  74749. +# Use an absolute path name for TZDIR unless you're just testing the software.
  74750. +
  74751. +TZDIR=    s:zoneinfo
  74752. +
  74753. +# If you always want time values interpreted as "seconds since the epoch
  74754. +# (not counting leap seconds)", use
  74755. +#     REDO=        posix_only
  74756. +# below.  If you always want right time values interpreted as "seconds since
  74757. +# the epoch" (counting leap seconds)", use
  74758. +#    REDO=        right_only
  74759. +# below.  If you want both sets of data available, with leap seconds not
  74760. +# counted normally, use
  74761. +#    REDO=        posix_right
  74762. +# below.  If you want both sets of data available, with leap seconds counted
  74763. +# normally, use
  74764. +#    REDO=        right_posix
  74765. +# below.
  74766. +
  74767. +# This should be left as is for the Amiga
  74768. +
  74769. +REDO=        posix_only
  74770. +
  74771. +YDATA=    africa antarctica asia australasia europe northamerica \
  74772. +    southamerica pacificnew etcetera factory
  74773. +NDATA=    systemv
  74774. +#SDATA=    solar87 solar88 solar89
  74775. +TDATA=    ${YDATA} ${NDATA} ${SDATA}
  74776. +DATA=    ${YDATA} ${NDATA} ${SDATA} leapseconds
  74777. +USNO=    usno1988 usno1989
  74778. +
  74779. +all: $(REDO)
  74780. +
  74781. +posix_only: ${TDATA}
  74782. +        /zic -d ${TZDIR} -L nil: ${TDATA}
  74783. +
  74784. +right_only: leapseconds ${TDATA}
  74785. +        /zic -d ${TZDIR} -L leapseconds ${TDATA}
  74786. +
  74787. +other_two: leapseconds ${TDATA}
  74788. +        /zic -d ${TZDIR} -L leapseconds ${TDATA}
  74789. +        /zic -d ${TZDIR} -L nil: ${TDATA}
  74790. +
  74791. +posix_right: posix_only other_two
  74792. +
  74793. +right_posix: right_only other_two
  74794. +
  74795. +install: ${TDATA} ${REDO}
  74796. +    /zic -d ${TZDIR} -p ${POSIXRULES}
  74797. +    /zic -d ${TZDIR} -l ${LOCALTIME}
  74798. diff -rup --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/solar87 amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/solar87
  74799. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/solar87    Wed Dec 31 17:00:00 1969
  74800. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/solar87    Sat Sep 28 00:00:00 1996
  74801. @@ -0,0 +1,386 @@
  74802. +# @(#)solar87    4.1
  74803. +
  74804. +# So much for footnotes about Saudi Arabia.
  74805. +# Apparent noon times below are for Riyadh; your mileage will vary.
  74806. +# Times were computed using formulas in the U.S. Naval Observatory's
  74807. +# Almanac for Computers 1987; the formulas "will give EqT to an accuracy of
  74808. +# [plus or minus two] seconds during the current year."
  74809. +#
  74810. +# Rounding to the nearest five seconds results in fewer than
  74811. +# 256 different "time types"--a limit that's faced because time types are
  74812. +# stored on disk as unsigned chars.
  74813. +
  74814. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  74815. +Rule    sol87    1987    only    -    Jan    1    12:03:20s -0:03:20 -
  74816. +Rule    sol87    1987    only    -    Jan    2    12:03:50s -0:03:50 -
  74817. +Rule    sol87    1987    only    -    Jan    3    12:04:15s -0:04:15 -
  74818. +Rule    sol87    1987    only    -    Jan    4    12:04:45s -0:04:45 -
  74819. +Rule    sol87    1987    only    -    Jan    5    12:05:10s -0:05:10 -
  74820. +Rule    sol87    1987    only    -    Jan    6    12:05:40s -0:05:40 -
  74821. +Rule    sol87    1987    only    -    Jan    7    12:06:05s -0:06:05 -
  74822. +Rule    sol87    1987    only    -    Jan    8    12:06:30s -0:06:30 -
  74823. +Rule    sol87    1987    only    -    Jan    9    12:06:55s -0:06:55 -
  74824. +Rule    sol87    1987    only    -    Jan    10    12:07:20s -0:07:20 -
  74825. +Rule    sol87    1987    only    -    Jan    11    12:07:45s -0:07:45 -
  74826. +Rule    sol87    1987    only    -    Jan    12    12:08:10s -0:08:10 -
  74827. +Rule    sol87    1987    only    -    Jan    13    12:08:30s -0:08:30 -
  74828. +Rule    sol87    1987    only    -    Jan    14    12:08:55s -0:08:55 -
  74829. +Rule    sol87    1987    only    -    Jan    15    12:09:15s -0:09:15 -
  74830. +Rule    sol87    1987    only    -    Jan    16    12:09:35s -0:09:35 -
  74831. +Rule    sol87    1987    only    -    Jan    17    12:09:55s -0:09:55 -
  74832. +Rule    sol87    1987    only    -    Jan    18    12:10:15s -0:10:15 -
  74833. +Rule    sol87    1987    only    -    Jan    19    12:10:35s -0:10:35 -
  74834. +Rule    sol87    1987    only    -    Jan    20    12:10:55s -0:10:55 -
  74835. +Rule    sol87    1987    only    -    Jan    21    12:11:10s -0:11:10 -
  74836. +Rule    sol87    1987    only    -    Jan    22    12:11:30s -0:11:30 -
  74837. +Rule    sol87    1987    only    -    Jan    23    12:11:45s -0:11:45 -
  74838. +Rule    sol87    1987    only    -    Jan    24    12:12:00s -0:12:00 -
  74839. +Rule    sol87    1987    only    -    Jan    25    12:12:15s -0:12:15 -
  74840. +Rule    sol87    1987    only    -    Jan    26    12:12:30s -0:12:30 -
  74841. +Rule    sol87    1987    only    -    Jan    27    12:12:40s -0:12:40 -
  74842. +Rule    sol87    1987    only    -    Jan    28    12:12:55s -0:12:55 -
  74843. +Rule    sol87    1987    only    -    Jan    29    12:13:05s -0:13:05 -
  74844. +Rule    sol87    1987    only    -    Jan    30    12:13:15s -0:13:15 -
  74845. +Rule    sol87    1987    only    -    Jan    31    12:13:25s -0:13:25 -
  74846. +Rule    sol87    1987    only    -    Feb    1    12:13:35s -0:13:35 -
  74847. +Rule    sol87    1987    only    -    Feb    2    12:13:40s -0:13:40 -
  74848. +Rule    sol87    1987    only    -    Feb    3    12:13:50s -0:13:50 -
  74849. +Rule    sol87    1987    only    -    Feb    4    12:13:55s -0:13:55 -
  74850. +Rule    sol87    1987    only    -    Feb    5    12:14:00s -0:14:00 -
  74851. +Rule    sol87    1987    only    -    Feb    6    12:14:05s -0:14:05 -
  74852. +Rule    sol87    1987    only    -    Feb    7    12:14:10s -0:14:10 -
  74853. +Rule    sol87    1987    only    -    Feb    8    12:14:10s -0:14:10 -
  74854. +Rule    sol87    1987    only    -    Feb    9    12:14:15s -0:14:15 -
  74855. +Rule    sol87    1987    only    -    Feb    10    12:14:15s -0:14:15 -
  74856. +Rule    sol87    1987    only    -    Feb    11    12:14:15s -0:14:15 -
  74857. +Rule    sol87    1987    only    -    Feb    12    12:14:15s -0:14:15 -
  74858. +Rule    sol87    1987    only    -    Feb    13    12:14:15s -0:14:15 -
  74859. +Rule    sol87    1987    only    -    Feb    14    12:14:15s -0:14:15 -
  74860. +Rule    sol87    1987    only    -    Feb    15    12:14:10s -0:14:10 -
  74861. +Rule    sol87    1987    only    -    Feb    16    12:14:10s -0:14:10 -
  74862. +Rule    sol87    1987    only    -    Feb    17    12:14:05s -0:14:05 -
  74863. +Rule    sol87    1987    only    -    Feb    18    12:14:00s -0:14:00 -
  74864. +Rule    sol87    1987    only    -    Feb    19    12:13:55s -0:13:55 -
  74865. +Rule    sol87    1987    only    -    Feb    20    12:13:50s -0:13:50 -
  74866. +Rule    sol87    1987    only    -    Feb    21    12:13:45s -0:13:45 -
  74867. +Rule    sol87    1987    only    -    Feb    22    12:13:35s -0:13:35 -
  74868. +Rule    sol87    1987    only    -    Feb    23    12:13:30s -0:13:30 -
  74869. +Rule    sol87    1987    only    -    Feb    24    12:13:20s -0:13:20 -
  74870. +Rule    sol87    1987    only    -    Feb    25    12:13:10s -0:13:10 -
  74871. +Rule    sol87    1987    only    -    Feb    26    12:13:00s -0:13:00 -
  74872. +Rule    sol87    1987    only    -    Feb    27    12:12:50s -0:12:50 -
  74873. +Rule    sol87    1987    only    -    Feb    28    12:12:40s -0:12:40 -
  74874. +Rule    sol87    1987    only    -    Mar    1    12:12:30s -0:12:30 -
  74875. +Rule    sol87    1987    only    -    Mar    2    12:12:20s -0:12:20 -
  74876. +Rule    sol87    1987    only    -    Mar    3    12:12:05s -0:12:05 -
  74877. +Rule    sol87    1987    only    -    Mar    4    12:11:55s -0:11:55 -
  74878. +Rule    sol87    1987    only    -    Mar    5    12:11:40s -0:11:40 -
  74879. +Rule    sol87    1987    only    -    Mar    6    12:11:25s -0:11:25 -
  74880. +Rule    sol87    1987    only    -    Mar    7    12:11:15s -0:11:15 -
  74881. +Rule    sol87    1987    only    -    Mar    8    12:11:00s -0:11:00 -
  74882. +Rule    sol87    1987    only    -    Mar    9    12:10:45s -0:10:45 -
  74883. +Rule    sol87    1987    only    -    Mar    10    12:10:30s -0:10:30 -
  74884. +Rule    sol87    1987    only    -    Mar    11    12:10:15s -0:10:15 -
  74885. +Rule    sol87    1987    only    -    Mar    12    12:09:55s -0:09:55 -
  74886. +Rule    sol87    1987    only    -    Mar    13    12:09:40s -0:09:40 -
  74887. +Rule    sol87    1987    only    -    Mar    14    12:09:25s -0:09:25 -
  74888. +Rule    sol87    1987    only    -    Mar    15    12:09:10s -0:09:10 -
  74889. +Rule    sol87    1987    only    -    Mar    16    12:08:50s -0:08:50 -
  74890. +Rule    sol87    1987    only    -    Mar    17    12:08:35s -0:08:35 -
  74891. +Rule    sol87    1987    only    -    Mar    18    12:08:15s -0:08:15 -
  74892. +Rule    sol87    1987    only    -    Mar    19    12:08:00s -0:08:00 -
  74893. +Rule    sol87    1987    only    -    Mar    20    12:07:40s -0:07:40 -
  74894. +Rule    sol87    1987    only    -    Mar    21    12:07:25s -0:07:25 -
  74895. +Rule    sol87    1987    only    -    Mar    22    12:07:05s -0:07:05 -
  74896. +Rule    sol87    1987    only    -    Mar    23    12:06:50s -0:06:50 -
  74897. +Rule    sol87    1987    only    -    Mar    24    12:06:30s -0:06:30 -
  74898. +Rule    sol87    1987    only    -    Mar    25    12:06:10s -0:06:10 -
  74899. +Rule    sol87    1987    only    -    Mar    26    12:05:55s -0:05:55 -
  74900. +Rule    sol87    1987    only    -    Mar    27    12:05:35s -0:05:35 -
  74901. +Rule    sol87    1987    only    -    Mar    28    12:05:15s -0:05:15 -
  74902. +Rule    sol87    1987    only    -    Mar    29    12:05:00s -0:05:00 -
  74903. +Rule    sol87    1987    only    -    Mar    30    12:04:40s -0:04:40 -
  74904. +Rule    sol87    1987    only    -    Mar    31    12:04:25s -0:04:25 -
  74905. +Rule    sol87    1987    only    -    Apr    1    12:04:05s -0:04:05 -
  74906. +Rule    sol87    1987    only    -    Apr    2    12:03:45s -0:03:45 -
  74907. +Rule    sol87    1987    only    -    Apr    3    12:03:30s -0:03:30 -
  74908. +Rule    sol87    1987    only    -    Apr    4    12:03:10s -0:03:10 -
  74909. +Rule    sol87    1987    only    -    Apr    5    12:02:55s -0:02:55 -
  74910. +Rule    sol87    1987    only    -    Apr    6    12:02:35s -0:02:35 -
  74911. +Rule    sol87    1987    only    -    Apr    7    12:02:20s -0:02:20 -
  74912. +Rule    sol87    1987    only    -    Apr    8    12:02:05s -0:02:05 -
  74913. +Rule    sol87    1987    only    -    Apr    9    12:01:45s -0:01:45 -
  74914. +Rule    sol87    1987    only    -    Apr    10    12:01:30s -0:01:30 -
  74915. +Rule    sol87    1987    only    -    Apr    11    12:01:15s -0:01:15 -
  74916. +Rule    sol87    1987    only    -    Apr    12    12:00:55s -0:00:55 -
  74917. +Rule    sol87    1987    only    -    Apr    13    12:00:40s -0:00:40 -
  74918. +Rule    sol87    1987    only    -    Apr    14    12:00:25s -0:00:25 -
  74919. +Rule    sol87    1987    only    -    Apr    15    12:00:10s -0:00:10 -
  74920. +Rule    sol87    1987    only    -    Apr    16    11:59:55s 0:00:05 -
  74921. +Rule    sol87    1987    only    -    Apr    17    11:59:45s 0:00:15 -
  74922. +Rule    sol87    1987    only    -    Apr    18    11:59:30s 0:00:30 -
  74923. +Rule    sol87    1987    only    -    Apr    19    11:59:15s 0:00:45 -
  74924. +Rule    sol87    1987    only    -    Apr    20    11:59:05s 0:00:55 -
  74925. +Rule    sol87    1987    only    -    Apr    21    11:58:50s 0:01:10 -
  74926. +Rule    sol87    1987    only    -    Apr    22    11:58:40s 0:01:20 -
  74927. +Rule    sol87    1987    only    -    Apr    23    11:58:25s 0:01:35 -
  74928. +Rule    sol87    1987    only    -    Apr    24    11:58:15s 0:01:45 -
  74929. +Rule    sol87    1987    only    -    Apr    25    11:58:05s 0:01:55 -
  74930. +Rule    sol87    1987    only    -    Apr    26    11:57:55s 0:02:05 -
  74931. +Rule    sol87    1987    only    -    Apr    27    11:57:45s 0:02:15 -
  74932. +Rule    sol87    1987    only    -    Apr    28    11:57:35s 0:02:25 -
  74933. +Rule    sol87    1987    only    -    Apr    29    11:57:25s 0:02:35 -
  74934. +Rule    sol87    1987    only    -    Apr    30    11:57:15s 0:02:45 -
  74935. +Rule    sol87    1987    only    -    May    1    11:57:10s 0:02:50 -
  74936. +Rule    sol87    1987    only    -    May    2    11:57:00s 0:03:00 -
  74937. +Rule    sol87    1987    only    -    May    3    11:56:55s 0:03:05 -
  74938. +Rule    sol87    1987    only    -    May    4    11:56:50s 0:03:10 -
  74939. +Rule    sol87    1987    only    -    May    5    11:56:45s 0:03:15 -
  74940. +Rule    sol87    1987    only    -    May    6    11:56:40s 0:03:20 -
  74941. +Rule    sol87    1987    only    -    May    7    11:56:35s 0:03:25 -
  74942. +Rule    sol87    1987    only    -    May    8    11:56:30s 0:03:30 -
  74943. +Rule    sol87    1987    only    -    May    9    11:56:25s 0:03:35 -
  74944. +Rule    sol87    1987    only    -    May    10    11:56:25s 0:03:35 -
  74945. +Rule    sol87    1987    only    -    May    11    11:56:20s 0:03:40 -
  74946. +Rule    sol87    1987    only    -    May    12    11:56:20s 0:03:40 -
  74947. +Rule    sol87    1987    only    -    May    13    11:56:20s 0:03:40 -
  74948. +Rule    sol87    1987    only    -    May    14    11:56:20s 0:03:40 -
  74949. +Rule    sol87    1987    only    -    May    15    11:56:20s 0:03:40 -
  74950. +Rule    sol87    1987    only    -    May    16    11:56:20s 0:03:40 -
  74951. +Rule    sol87    1987    only    -    May    17    11:56:20s 0:03:40 -
  74952. +Rule    sol87    1987    only    -    May    18    11:56:20s 0:03:40 -
  74953. +Rule    sol87    1987    only    -    May    19    11:56:25s 0:03:35 -
  74954. +Rule    sol87    1987    only    -    May    20    11:56:25s 0:03:35 -
  74955. +Rule    sol87    1987    only    -    May    21    11:56:30s 0:03:30 -
  74956. +Rule    sol87    1987    only    -    May    22    11:56:35s 0:03:25 -
  74957. +Rule    sol87    1987    only    -    May    23    11:56:40s 0:03:20 -
  74958. +Rule    sol87    1987    only    -    May    24    11:56:45s 0:03:15 -
  74959. +Rule    sol87    1987    only    -    May    25    11:56:50s 0:03:10 -
  74960. +Rule    sol87    1987    only    -    May    26    11:56:55s 0:03:05 -
  74961. +Rule    sol87    1987    only    -    May    27    11:57:00s 0:03:00 -
  74962. +Rule    sol87    1987    only    -    May    28    11:57:10s 0:02:50 -
  74963. +Rule    sol87    1987    only    -    May    29    11:57:15s 0:02:45 -
  74964. +Rule    sol87    1987    only    -    May    30    11:57:25s 0:02:35 -
  74965. +Rule    sol87    1987    only    -    May    31    11:57:30s 0:02:30 -
  74966. +Rule    sol87    1987    only    -    Jun    1    11:57:40s 0:02:20 -
  74967. +Rule    sol87    1987    only    -    Jun    2    11:57:50s 0:02:10 -
  74968. +Rule    sol87    1987    only    -    Jun    3    11:58:00s 0:02:00 -
  74969. +Rule    sol87    1987    only    -    Jun    4    11:58:10s 0:01:50 -
  74970. +Rule    sol87    1987    only    -    Jun    5    11:58:20s 0:01:40 -
  74971. +Rule    sol87    1987    only    -    Jun    6    11:58:30s 0:01:30 -
  74972. +Rule    sol87    1987    only    -    Jun    7    11:58:40s 0:01:20 -
  74973. +Rule    sol87    1987    only    -    Jun    8    11:58:50s 0:01:10 -
  74974. +Rule    sol87    1987    only    -    Jun    9    11:59:05s 0:00:55 -
  74975. +Rule    sol87    1987    only    -    Jun    10    11:59:15s 0:00:45 -
  74976. +Rule    sol87    1987    only    -    Jun    11    11:59:30s 0:00:30 -
  74977. +Rule    sol87    1987    only    -    Jun    12    11:59:40s 0:00:20 -
  74978. +Rule    sol87    1987    only    -    Jun    13    11:59:50s 0:00:10 -
  74979. +Rule    sol87    1987    only    -    Jun    14    12:00:05s -0:00:05 -
  74980. +Rule    sol87    1987    only    -    Jun    15    12:00:15s -0:00:15 -
  74981. +Rule    sol87    1987    only    -    Jun    16    12:00:30s -0:00:30 -
  74982. +Rule    sol87    1987    only    -    Jun    17    12:00:45s -0:00:45 -
  74983. +Rule    sol87    1987    only    -    Jun    18    12:00:55s -0:00:55 -
  74984. +Rule    sol87    1987    only    -    Jun    19    12:01:10s -0:01:10 -
  74985. +Rule    sol87    1987    only    -    Jun    20    12:01:20s -0:01:20 -
  74986. +Rule    sol87    1987    only    -    Jun    21    12:01:35s -0:01:35 -
  74987. +Rule    sol87    1987    only    -    Jun    22    12:01:50s -0:01:50 -
  74988. +Rule    sol87    1987    only    -    Jun    23    12:02:00s -0:02:00 -
  74989. +Rule    sol87    1987    only    -    Jun    24    12:02:15s -0:02:15 -
  74990. +Rule    sol87    1987    only    -    Jun    25    12:02:25s -0:02:25 -
  74991. +Rule    sol87    1987    only    -    Jun    26    12:02:40s -0:02:40 -
  74992. +Rule    sol87    1987    only    -    Jun    27    12:02:50s -0:02:50 -
  74993. +Rule    sol87    1987    only    -    Jun    28    12:03:05s -0:03:05 -
  74994. +Rule    sol87    1987    only    -    Jun    29    12:03:15s -0:03:15 -
  74995. +Rule    sol87    1987    only    -    Jun    30    12:03:30s -0:03:30 -
  74996. +Rule    sol87    1987    only    -    Jul    1    12:03:40s -0:03:40 -
  74997. +Rule    sol87    1987    only    -    Jul    2    12:03:50s -0:03:50 -
  74998. +Rule    sol87    1987    only    -    Jul    3    12:04:05s -0:04:05 -
  74999. +Rule    sol87    1987    only    -    Jul    4    12:04:15s -0:04:15 -
  75000. +Rule    sol87    1987    only    -    Jul    5    12:04:25s -0:04:25 -
  75001. +Rule    sol87    1987    only    -    Jul    6    12:04:35s -0:04:35 -
  75002. +Rule    sol87    1987    only    -    Jul    7    12:04:45s -0:04:45 -
  75003. +Rule    sol87    1987    only    -    Jul    8    12:04:55s -0:04:55 -
  75004. +Rule    sol87    1987    only    -    Jul    9    12:05:05s -0:05:05 -
  75005. +Rule    sol87    1987    only    -    Jul    10    12:05:15s -0:05:15 -
  75006. +Rule    sol87    1987    only    -    Jul    11    12:05:20s -0:05:20 -
  75007. +Rule    sol87    1987    only    -    Jul    12    12:05:30s -0:05:30 -
  75008. +Rule    sol87    1987    only    -    Jul    13    12:05:40s -0:05:40 -
  75009. +Rule    sol87    1987    only    -    Jul    14    12:05:45s -0:05:45 -
  75010. +Rule    sol87    1987    only    -    Jul    15    12:05:50s -0:05:50 -
  75011. +Rule    sol87    1987    only    -    Jul    16    12:06:00s -0:06:00 -
  75012. +Rule    sol87    1987    only    -    Jul    17    12:06:05s -0:06:05 -
  75013. +Rule    sol87    1987    only    -    Jul    18    12:06:10s -0:06:10 -
  75014. +Rule    sol87    1987    only    -    Jul    19    12:06:15s -0:06:15 -
  75015. +Rule    sol87    1987    only    -    Jul    20    12:06:15s -0:06:15 -
  75016. +Rule    sol87    1987    only    -    Jul    21    12:06:20s -0:06:20 -
  75017. +Rule    sol87    1987    only    -    Jul    22    12:06:25s -0:06:25 -
  75018. +Rule    sol87    1987    only    -    Jul    23    12:06:25s -0:06:25 -
  75019. +Rule    sol87    1987    only    -    Jul    24    12:06:25s -0:06:25 -
  75020. +Rule    sol87    1987    only    -    Jul    25    12:06:30s -0:06:30 -
  75021. +Rule    sol87    1987    only    -    Jul    26    12:06:30s -0:06:30 -
  75022. +Rule    sol87    1987    only    -    Jul    27    12:06:30s -0:06:30 -
  75023. +Rule    sol87    1987    only    -    Jul    28    12:06:30s -0:06:30 -
  75024. +Rule    sol87    1987    only    -    Jul    29    12:06:25s -0:06:25 -
  75025. +Rule    sol87    1987    only    -    Jul    30    12:06:25s -0:06:25 -
  75026. +Rule    sol87    1987    only    -    Jul    31    12:06:25s -0:06:25 -
  75027. +Rule    sol87    1987    only    -    Aug    1    12:06:20s -0:06:20 -
  75028. +Rule    sol87    1987    only    -    Aug    2    12:06:15s -0:06:15 -
  75029. +Rule    sol87    1987    only    -    Aug    3    12:06:10s -0:06:10 -
  75030. +Rule    sol87    1987    only    -    Aug    4    12:06:05s -0:06:05 -
  75031. +Rule    sol87    1987    only    -    Aug    5    12:06:00s -0:06:00 -
  75032. +Rule    sol87    1987    only    -    Aug    6    12:05:55s -0:05:55 -
  75033. +Rule    sol87    1987    only    -    Aug    7    12:05:50s -0:05:50 -
  75034. +Rule    sol87    1987    only    -    Aug    8    12:05:40s -0:05:40 -
  75035. +Rule    sol87    1987    only    -    Aug    9    12:05:35s -0:05:35 -
  75036. +Rule    sol87    1987    only    -    Aug    10    12:05:25s -0:05:25 -
  75037. +Rule    sol87    1987    only    -    Aug    11    12:05:15s -0:05:15 -
  75038. +Rule    sol87    1987    only    -    Aug    12    12:05:05s -0:05:05 -
  75039. +Rule    sol87    1987    only    -    Aug    13    12:04:55s -0:04:55 -
  75040. +Rule    sol87    1987    only    -    Aug    14    12:04:45s -0:04:45 -
  75041. +Rule    sol87    1987    only    -    Aug    15    12:04:35s -0:04:35 -
  75042. +Rule    sol87    1987    only    -    Aug    16    12:04:25s -0:04:25 -
  75043. +Rule    sol87    1987    only    -    Aug    17    12:04:10s -0:04:10 -
  75044. +Rule    sol87    1987    only    -    Aug    18    12:04:00s -0:04:00 -
  75045. +Rule    sol87    1987    only    -    Aug    19    12:03:45s -0:03:45 -
  75046. +Rule    sol87    1987    only    -    Aug    20    12:03:30s -0:03:30 -
  75047. +Rule    sol87    1987    only    -    Aug    21    12:03:15s -0:03:15 -
  75048. +Rule    sol87    1987    only    -    Aug    22    12:03:00s -0:03:00 -
  75049. +Rule    sol87    1987    only    -    Aug    23    12:02:45s -0:02:45 -
  75050. +Rule    sol87    1987    only    -    Aug    24    12:02:30s -0:02:30 -
  75051. +Rule    sol87    1987    only    -    Aug    25    12:02:15s -0:02:15 -
  75052. +Rule    sol87    1987    only    -    Aug    26    12:02:00s -0:02:00 -
  75053. +Rule    sol87    1987    only    -    Aug    27    12:01:40s -0:01:40 -
  75054. +Rule    sol87    1987    only    -    Aug    28    12:01:25s -0:01:25 -
  75055. +Rule    sol87    1987    only    -    Aug    29    12:01:05s -0:01:05 -
  75056. +Rule    sol87    1987    only    -    Aug    30    12:00:50s -0:00:50 -
  75057. +Rule    sol87    1987    only    -    Aug    31    12:00:30s -0:00:30 -
  75058. +Rule    sol87    1987    only    -    Sep    1    12:00:10s -0:00:10 -
  75059. +Rule    sol87    1987    only    -    Sep    2    11:59:50s 0:00:10 -
  75060. +Rule    sol87    1987    only    -    Sep    3    11:59:35s 0:00:25 -
  75061. +Rule    sol87    1987    only    -    Sep    4    11:59:15s 0:00:45 -
  75062. +Rule    sol87    1987    only    -    Sep    5    11:58:55s 0:01:05 -
  75063. +Rule    sol87    1987    only    -    Sep    6    11:58:35s 0:01:25 -
  75064. +Rule    sol87    1987    only    -    Sep    7    11:58:15s 0:01:45 -
  75065. +Rule    sol87    1987    only    -    Sep    8    11:57:55s 0:02:05 -
  75066. +Rule    sol87    1987    only    -    Sep    9    11:57:30s 0:02:30 -
  75067. +Rule    sol87    1987    only    -    Sep    10    11:57:10s 0:02:50 -
  75068. +Rule    sol87    1987    only    -    Sep    11    11:56:50s 0:03:10 -
  75069. +Rule    sol87    1987    only    -    Sep    12    11:56:30s 0:03:30 -
  75070. +Rule    sol87    1987    only    -    Sep    13    11:56:10s 0:03:50 -
  75071. +Rule    sol87    1987    only    -    Sep    14    11:55:45s 0:04:15 -
  75072. +Rule    sol87    1987    only    -    Sep    15    11:55:25s 0:04:35 -
  75073. +Rule    sol87    1987    only    -    Sep    16    11:55:05s 0:04:55 -
  75074. +Rule    sol87    1987    only    -    Sep    17    11:54:45s 0:05:15 -
  75075. +Rule    sol87    1987    only    -    Sep    18    11:54:20s 0:05:40 -
  75076. +Rule    sol87    1987    only    -    Sep    19    11:54:00s 0:06:00 -
  75077. +Rule    sol87    1987    only    -    Sep    20    11:53:40s 0:06:20 -
  75078. +Rule    sol87    1987    only    -    Sep    21    11:53:15s 0:06:45 -
  75079. +Rule    sol87    1987    only    -    Sep    22    11:52:55s 0:07:05 -
  75080. +Rule    sol87    1987    only    -    Sep    23    11:52:35s 0:07:25 -
  75081. +Rule    sol87    1987    only    -    Sep    24    11:52:15s 0:07:45 -
  75082. +Rule    sol87    1987    only    -    Sep    25    11:51:55s 0:08:05 -
  75083. +Rule    sol87    1987    only    -    Sep    26    11:51:35s 0:08:25 -
  75084. +Rule    sol87    1987    only    -    Sep    27    11:51:10s 0:08:50 -
  75085. +Rule    sol87    1987    only    -    Sep    28    11:50:50s 0:09:10 -
  75086. +Rule    sol87    1987    only    -    Sep    29    11:50:30s 0:09:30 -
  75087. +Rule    sol87    1987    only    -    Sep    30    11:50:10s 0:09:50 -
  75088. +Rule    sol87    1987    only    -    Oct    1    11:49:50s 0:10:10 -
  75089. +Rule    sol87    1987    only    -    Oct    2    11:49:35s 0:10:25 -
  75090. +Rule    sol87    1987    only    -    Oct    3    11:49:15s 0:10:45 -
  75091. +Rule    sol87    1987    only    -    Oct    4    11:48:55s 0:11:05 -
  75092. +Rule    sol87    1987    only    -    Oct    5    11:48:35s 0:11:25 -
  75093. +Rule    sol87    1987    only    -    Oct    6    11:48:20s 0:11:40 -
  75094. +Rule    sol87    1987    only    -    Oct    7    11:48:00s 0:12:00 -
  75095. +Rule    sol87    1987    only    -    Oct    8    11:47:45s 0:12:15 -
  75096. +Rule    sol87    1987    only    -    Oct    9    11:47:25s 0:12:35 -
  75097. +Rule    sol87    1987    only    -    Oct    10    11:47:10s 0:12:50 -
  75098. +Rule    sol87    1987    only    -    Oct    11    11:46:55s 0:13:05 -
  75099. +Rule    sol87    1987    only    -    Oct    12    11:46:40s 0:13:20 -
  75100. +Rule    sol87    1987    only    -    Oct    13    11:46:25s 0:13:35 -
  75101. +Rule    sol87    1987    only    -    Oct    14    11:46:10s 0:13:50 -
  75102. +Rule    sol87    1987    only    -    Oct    15    11:45:55s 0:14:05 -
  75103. +Rule    sol87    1987    only    -    Oct    16    11:45:45s 0:14:15 -
  75104. +Rule    sol87    1987    only    -    Oct    17    11:45:30s 0:14:30 -
  75105. +Rule    sol87    1987    only    -    Oct    18    11:45:20s 0:14:40 -
  75106. +Rule    sol87    1987    only    -    Oct    19    11:45:05s 0:14:55 -
  75107. +Rule    sol87    1987    only    -    Oct    20    11:44:55s 0:15:05 -
  75108. +Rule    sol87    1987    only    -    Oct    21    11:44:45s 0:15:15 -
  75109. +Rule    sol87    1987    only    -    Oct    22    11:44:35s 0:15:25 -
  75110. +Rule    sol87    1987    only    -    Oct    23    11:44:25s 0:15:35 -
  75111. +Rule    sol87    1987    only    -    Oct    24    11:44:20s 0:15:40 -
  75112. +Rule    sol87    1987    only    -    Oct    25    11:44:10s 0:15:50 -
  75113. +Rule    sol87    1987    only    -    Oct    26    11:44:05s 0:15:55 -
  75114. +Rule    sol87    1987    only    -    Oct    27    11:43:55s 0:16:05 -
  75115. +Rule    sol87    1987    only    -    Oct    28    11:43:50s 0:16:10 -
  75116. +Rule    sol87    1987    only    -    Oct    29    11:43:45s 0:16:15 -
  75117. +Rule    sol87    1987    only    -    Oct    30    11:43:45s 0:16:15 -
  75118. +Rule    sol87    1987    only    -    Oct    31    11:43:40s 0:16:20 -
  75119. +Rule    sol87    1987    only    -    Nov    1    11:43:40s 0:16:20 -
  75120. +Rule    sol87    1987    only    -    Nov    2    11:43:35s 0:16:25 -
  75121. +Rule    sol87    1987    only    -    Nov    3    11:43:35s 0:16:25 -
  75122. +Rule    sol87    1987    only    -    Nov    4    11:43:35s 0:16:25 -
  75123. +Rule    sol87    1987    only    -    Nov    5    11:43:35s 0:16:25 -
  75124. +Rule    sol87    1987    only    -    Nov    6    11:43:40s 0:16:20 -
  75125. +Rule    sol87    1987    only    -    Nov    7    11:43:40s 0:16:20 -
  75126. +Rule    sol87    1987    only    -    Nov    8    11:43:45s 0:16:15 -
  75127. +Rule    sol87    1987    only    -    Nov    9    11:43:50s 0:16:10 -
  75128. +Rule    sol87    1987    only    -    Nov    10    11:43:55s 0:16:05 -
  75129. +Rule    sol87    1987    only    -    Nov    11    11:44:00s 0:16:00 -
  75130. +Rule    sol87    1987    only    -    Nov    12    11:44:05s 0:15:55 -
  75131. +Rule    sol87    1987    only    -    Nov    13    11:44:15s 0:15:45 -
  75132. +Rule    sol87    1987    only    -    Nov    14    11:44:20s 0:15:40 -
  75133. +Rule    sol87    1987    only    -    Nov    15    11:44:30s 0:15:30 -
  75134. +Rule    sol87    1987    only    -    Nov    16    11:44:40s 0:15:20 -
  75135. +Rule    sol87    1987    only    -    Nov    17    11:44:50s 0:15:10 -
  75136. +Rule    sol87    1987    only    -    Nov    18    11:45:05s 0:14:55 -
  75137. +Rule    sol87    1987    only    -    Nov    19    11:45:15s 0:14:45 -
  75138. +Rule    sol87    1987    only    -    Nov    20    11:45:30s 0:14:30 -
  75139. +Rule    sol87    1987    only    -    Nov    21    11:45:45s 0:14:15 -
  75140. +Rule    sol87    1987    only    -    Nov    22    11:46:00s 0:14:00 -
  75141. +Rule    sol87    1987    only    -    Nov    23    11:46:15s 0:13:45 -
  75142. +Rule    sol87    1987    only    -    Nov    24    11:46:30s 0:13:30 -
  75143. +Rule    sol87    1987    only    -    Nov    25    11:46:50s 0:13:10 -
  75144. +Rule    sol87    1987    only    -    Nov    26    11:47:10s 0:12:50 -
  75145. +Rule    sol87    1987    only    -    Nov    27    11:47:25s 0:12:35 -
  75146. +Rule    sol87    1987    only    -    Nov    28    11:47:45s 0:12:15 -
  75147. +Rule    sol87    1987    only    -    Nov    29    11:48:05s 0:11:55 -
  75148. +Rule    sol87    1987    only    -    Nov    30    11:48:30s 0:11:30 -
  75149. +Rule    sol87    1987    only    -    Dec    1    11:48:50s 0:11:10 -
  75150. +Rule    sol87    1987    only    -    Dec    2    11:49:10s 0:10:50 -
  75151. +Rule    sol87    1987    only    -    Dec    3    11:49:35s 0:10:25 -
  75152. +Rule    sol87    1987    only    -    Dec    4    11:50:00s 0:10:00 -
  75153. +Rule    sol87    1987    only    -    Dec    5    11:50:25s 0:09:35 -
  75154. +Rule    sol87    1987    only    -    Dec    6    11:50:50s 0:09:10 -
  75155. +Rule    sol87    1987    only    -    Dec    7    11:51:15s 0:08:45 -
  75156. +Rule    sol87    1987    only    -    Dec    8    11:51:40s 0:08:20 -
  75157. +Rule    sol87    1987    only    -    Dec    9    11:52:05s 0:07:55 -
  75158. +Rule    sol87    1987    only    -    Dec    10    11:52:30s 0:07:30 -
  75159. +Rule    sol87    1987    only    -    Dec    11    11:53:00s 0:07:00 -
  75160. +Rule    sol87    1987    only    -    Dec    12    11:53:25s 0:06:35 -
  75161. +Rule    sol87    1987    only    -    Dec    13    11:53:55s 0:06:05 -
  75162. +Rule    sol87    1987    only    -    Dec    14    11:54:25s 0:05:35 -
  75163. +Rule    sol87    1987    only    -    Dec    15    11:54:50s 0:05:10 -
  75164. +Rule    sol87    1987    only    -    Dec    16    11:55:20s 0:04:40 -
  75165. +Rule    sol87    1987    only    -    Dec    17    11:55:50s 0:04:10 -
  75166. +Rule    sol87    1987    only    -    Dec    18    11:56:20s 0:03:40 -
  75167. +Rule    sol87    1987    only    -    Dec    19    11:56:50s 0:03:10 -
  75168. +Rule    sol87    1987    only    -    Dec    20    11:57:20s 0:02:40 -
  75169. +Rule    sol87    1987    only    -    Dec    21    11:57:50s 0:02:10 -
  75170. +Rule    sol87    1987    only    -    Dec    22    11:58:20s 0:01:40 -
  75171. +Rule    sol87    1987    only    -    Dec    23    11:58:50s 0:01:10 -
  75172. +Rule    sol87    1987    only    -    Dec    24    11:59:20s 0:00:40 -
  75173. +Rule    sol87    1987    only    -    Dec    25    11:59:50s 0:00:10 -
  75174. +Rule    sol87    1987    only    -    Dec    26    12:00:20s -0:00:20 -
  75175. +Rule    sol87    1987    only    -    Dec    27    12:00:45s -0:00:45 -
  75176. +Rule    sol87    1987    only    -    Dec    28    12:01:15s -0:01:15 -
  75177. +Rule    sol87    1987    only    -    Dec    29    12:01:45s -0:01:45 -
  75178. +Rule    sol87    1987    only    -    Dec    30    12:02:15s -0:02:15 -
  75179. +Rule    sol87    1987    only    -    Dec    31    12:02:45s -0:02:45 -
  75180. +
  75181. +# Riyadh is at about 46 degrees 46 minutes East:  3 hrs, 7 mins, 4 secs
  75182. +# Before and after 1987, we'll operate on local mean solar time.
  75183. +
  75184. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  75185. +Zone    Mideast/Riyadh87    3:07:04    -        ??    1987
  75186. +                3:07:04    sol87        ??    1988
  75187. +                3:07:04    -        ??
  75188. diff -rup --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/solar88 amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/solar88
  75189. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/solar88    Wed Dec 31 17:00:00 1969
  75190. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/solar88    Sat Sep 28 00:00:00 1996
  75191. @@ -0,0 +1,386 @@
  75192. +# @(#)solar88    4.2
  75193. +
  75194. +# Apparent noon times below are for Riyadh; they're a bit off for other places.
  75195. +# Times were computed using formulas in the U.S. Naval Observatory's
  75196. +# Almanac for Computers 1988; the formulas "will give EqT to an accuracy of
  75197. +# [plus or minus two] seconds during the current year."
  75198. +#
  75199. +# Rounding to the nearest five seconds results in fewer than
  75200. +# 256 different "time types"--a limit that's faced because time types are
  75201. +# stored on disk as unsigned chars.
  75202. +
  75203. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  75204. +Rule    sol88    1988    only    -    Jan    1    12:03:15s -0:03:15 -
  75205. +Rule    sol88    1988    only    -    Jan    2    12:03:40s -0:03:40 -
  75206. +Rule    sol88    1988    only    -    Jan    3    12:04:10s -0:04:10 -
  75207. +Rule    sol88    1988    only    -    Jan    4    12:04:40s -0:04:40 -
  75208. +Rule    sol88    1988    only    -    Jan    5    12:05:05s -0:05:05 -
  75209. +Rule    sol88    1988    only    -    Jan    6    12:05:30s -0:05:30 -
  75210. +Rule    sol88    1988    only    -    Jan    7    12:06:00s -0:06:00 -
  75211. +Rule    sol88    1988    only    -    Jan    8    12:06:25s -0:06:25 -
  75212. +Rule    sol88    1988    only    -    Jan    9    12:06:50s -0:06:50 -
  75213. +Rule    sol88    1988    only    -    Jan    10    12:07:15s -0:07:15 -
  75214. +Rule    sol88    1988    only    -    Jan    11    12:07:40s -0:07:40 -
  75215. +Rule    sol88    1988    only    -    Jan    12    12:08:05s -0:08:05 -
  75216. +Rule    sol88    1988    only    -    Jan    13    12:08:25s -0:08:25 -
  75217. +Rule    sol88    1988    only    -    Jan    14    12:08:50s -0:08:50 -
  75218. +Rule    sol88    1988    only    -    Jan    15    12:09:10s -0:09:10 -
  75219. +Rule    sol88    1988    only    -    Jan    16    12:09:30s -0:09:30 -
  75220. +Rule    sol88    1988    only    -    Jan    17    12:09:50s -0:09:50 -
  75221. +Rule    sol88    1988    only    -    Jan    18    12:10:10s -0:10:10 -
  75222. +Rule    sol88    1988    only    -    Jan    19    12:10:30s -0:10:30 -
  75223. +Rule    sol88    1988    only    -    Jan    20    12:10:50s -0:10:50 -
  75224. +Rule    sol88    1988    only    -    Jan    21    12:11:05s -0:11:05 -
  75225. +Rule    sol88    1988    only    -    Jan    22    12:11:25s -0:11:25 -
  75226. +Rule    sol88    1988    only    -    Jan    23    12:11:40s -0:11:40 -
  75227. +Rule    sol88    1988    only    -    Jan    24    12:11:55s -0:11:55 -
  75228. +Rule    sol88    1988    only    -    Jan    25    12:12:10s -0:12:10 -
  75229. +Rule    sol88    1988    only    -    Jan    26    12:12:25s -0:12:25 -
  75230. +Rule    sol88    1988    only    -    Jan    27    12:12:40s -0:12:40 -
  75231. +Rule    sol88    1988    only    -    Jan    28    12:12:50s -0:12:50 -
  75232. +Rule    sol88    1988    only    -    Jan    29    12:13:00s -0:13:00 -
  75233. +Rule    sol88    1988    only    -    Jan    30    12:13:10s -0:13:10 -
  75234. +Rule    sol88    1988    only    -    Jan    31    12:13:20s -0:13:20 -
  75235. +Rule    sol88    1988    only    -    Feb    1    12:13:30s -0:13:30 -
  75236. +Rule    sol88    1988    only    -    Feb    2    12:13:40s -0:13:40 -
  75237. +Rule    sol88    1988    only    -    Feb    3    12:13:45s -0:13:45 -
  75238. +Rule    sol88    1988    only    -    Feb    4    12:13:55s -0:13:55 -
  75239. +Rule    sol88    1988    only    -    Feb    5    12:14:00s -0:14:00 -
  75240. +Rule    sol88    1988    only    -    Feb    6    12:14:05s -0:14:05 -
  75241. +Rule    sol88    1988    only    -    Feb    7    12:14:10s -0:14:10 -
  75242. +Rule    sol88    1988    only    -    Feb    8    12:14:10s -0:14:10 -
  75243. +Rule    sol88    1988    only    -    Feb    9    12:14:15s -0:14:15 -
  75244. +Rule    sol88    1988    only    -    Feb    10    12:14:15s -0:14:15 -
  75245. +Rule    sol88    1988    only    -    Feb    11    12:14:15s -0:14:15 -
  75246. +Rule    sol88    1988    only    -    Feb    12    12:14:15s -0:14:15 -
  75247. +Rule    sol88    1988    only    -    Feb    13    12:14:15s -0:14:15 -
  75248. +Rule    sol88    1988    only    -    Feb    14    12:14:15s -0:14:15 -
  75249. +Rule    sol88    1988    only    -    Feb    15    12:14:10s -0:14:10 -
  75250. +Rule    sol88    1988    only    -    Feb    16    12:14:10s -0:14:10 -
  75251. +Rule    sol88    1988    only    -    Feb    17    12:14:05s -0:14:05 -
  75252. +Rule    sol88    1988    only    -    Feb    18    12:14:00s -0:14:00 -
  75253. +Rule    sol88    1988    only    -    Feb    19    12:13:55s -0:13:55 -
  75254. +Rule    sol88    1988    only    -    Feb    20    12:13:50s -0:13:50 -
  75255. +Rule    sol88    1988    only    -    Feb    21    12:13:45s -0:13:45 -
  75256. +Rule    sol88    1988    only    -    Feb    22    12:13:40s -0:13:40 -
  75257. +Rule    sol88    1988    only    -    Feb    23    12:13:30s -0:13:30 -
  75258. +Rule    sol88    1988    only    -    Feb    24    12:13:20s -0:13:20 -
  75259. +Rule    sol88    1988    only    -    Feb    25    12:13:15s -0:13:15 -
  75260. +Rule    sol88    1988    only    -    Feb    26    12:13:05s -0:13:05 -
  75261. +Rule    sol88    1988    only    -    Feb    27    12:12:55s -0:12:55 -
  75262. +Rule    sol88    1988    only    -    Feb    28    12:12:45s -0:12:45 -
  75263. +Rule    sol88    1988    only    -    Feb    29    12:12:30s -0:12:30 -
  75264. +Rule    sol88    1988    only    -    Mar    1    12:12:20s -0:12:20 -
  75265. +Rule    sol88    1988    only    -    Mar    2    12:12:10s -0:12:10 -
  75266. +Rule    sol88    1988    only    -    Mar    3    12:11:55s -0:11:55 -
  75267. +Rule    sol88    1988    only    -    Mar    4    12:11:45s -0:11:45 -
  75268. +Rule    sol88    1988    only    -    Mar    5    12:11:30s -0:11:30 -
  75269. +Rule    sol88    1988    only    -    Mar    6    12:11:15s -0:11:15 -
  75270. +Rule    sol88    1988    only    -    Mar    7    12:11:00s -0:11:00 -
  75271. +Rule    sol88    1988    only    -    Mar    8    12:10:45s -0:10:45 -
  75272. +Rule    sol88    1988    only    -    Mar    9    12:10:30s -0:10:30 -
  75273. +Rule    sol88    1988    only    -    Mar    10    12:10:15s -0:10:15 -
  75274. +Rule    sol88    1988    only    -    Mar    11    12:10:00s -0:10:00 -
  75275. +Rule    sol88    1988    only    -    Mar    12    12:09:45s -0:09:45 -
  75276. +Rule    sol88    1988    only    -    Mar    13    12:09:30s -0:09:30 -
  75277. +Rule    sol88    1988    only    -    Mar    14    12:09:10s -0:09:10 -
  75278. +Rule    sol88    1988    only    -    Mar    15    12:08:55s -0:08:55 -
  75279. +Rule    sol88    1988    only    -    Mar    16    12:08:40s -0:08:40 -
  75280. +Rule    sol88    1988    only    -    Mar    17    12:08:20s -0:08:20 -
  75281. +Rule    sol88    1988    only    -    Mar    18    12:08:05s -0:08:05 -
  75282. +Rule    sol88    1988    only    -    Mar    19    12:07:45s -0:07:45 -
  75283. +Rule    sol88    1988    only    -    Mar    20    12:07:30s -0:07:30 -
  75284. +Rule    sol88    1988    only    -    Mar    21    12:07:10s -0:07:10 -
  75285. +Rule    sol88    1988    only    -    Mar    22    12:06:50s -0:06:50 -
  75286. +Rule    sol88    1988    only    -    Mar    23    12:06:35s -0:06:35 -
  75287. +Rule    sol88    1988    only    -    Mar    24    12:06:15s -0:06:15 -
  75288. +Rule    sol88    1988    only    -    Mar    25    12:06:00s -0:06:00 -
  75289. +Rule    sol88    1988    only    -    Mar    26    12:05:40s -0:05:40 -
  75290. +Rule    sol88    1988    only    -    Mar    27    12:05:20s -0:05:20 -
  75291. +Rule    sol88    1988    only    -    Mar    28    12:05:05s -0:05:05 -
  75292. +Rule    sol88    1988    only    -    Mar    29    12:04:45s -0:04:45 -
  75293. +Rule    sol88    1988    only    -    Mar    30    12:04:25s -0:04:25 -
  75294. +Rule    sol88    1988    only    -    Mar    31    12:04:10s -0:04:10 -
  75295. +Rule    sol88    1988    only    -    Apr    1    12:03:50s -0:03:50 -
  75296. +Rule    sol88    1988    only    -    Apr    2    12:03:35s -0:03:35 -
  75297. +Rule    sol88    1988    only    -    Apr    3    12:03:15s -0:03:15 -
  75298. +Rule    sol88    1988    only    -    Apr    4    12:03:00s -0:03:00 -
  75299. +Rule    sol88    1988    only    -    Apr    5    12:02:40s -0:02:40 -
  75300. +Rule    sol88    1988    only    -    Apr    6    12:02:25s -0:02:25 -
  75301. +Rule    sol88    1988    only    -    Apr    7    12:02:05s -0:02:05 -
  75302. +Rule    sol88    1988    only    -    Apr    8    12:01:50s -0:01:50 -
  75303. +Rule    sol88    1988    only    -    Apr    9    12:01:35s -0:01:35 -
  75304. +Rule    sol88    1988    only    -    Apr    10    12:01:15s -0:01:15 -
  75305. +Rule    sol88    1988    only    -    Apr    11    12:01:00s -0:01:00 -
  75306. +Rule    sol88    1988    only    -    Apr    12    12:00:45s -0:00:45 -
  75307. +Rule    sol88    1988    only    -    Apr    13    12:00:30s -0:00:30 -
  75308. +Rule    sol88    1988    only    -    Apr    14    12:00:15s -0:00:15 -
  75309. +Rule    sol88    1988    only    -    Apr    15    12:00:00s 0:00:00 -
  75310. +Rule    sol88    1988    only    -    Apr    16    11:59:45s 0:00:15 -
  75311. +Rule    sol88    1988    only    -    Apr    17    11:59:30s 0:00:30 -
  75312. +Rule    sol88    1988    only    -    Apr    18    11:59:20s 0:00:40 -
  75313. +Rule    sol88    1988    only    -    Apr    19    11:59:05s 0:00:55 -
  75314. +Rule    sol88    1988    only    -    Apr    20    11:58:55s 0:01:05 -
  75315. +Rule    sol88    1988    only    -    Apr    21    11:58:40s 0:01:20 -
  75316. +Rule    sol88    1988    only    -    Apr    22    11:58:30s 0:01:30 -
  75317. +Rule    sol88    1988    only    -    Apr    23    11:58:15s 0:01:45 -
  75318. +Rule    sol88    1988    only    -    Apr    24    11:58:05s 0:01:55 -
  75319. +Rule    sol88    1988    only    -    Apr    25    11:57:55s 0:02:05 -
  75320. +Rule    sol88    1988    only    -    Apr    26    11:57:45s 0:02:15 -
  75321. +Rule    sol88    1988    only    -    Apr    27    11:57:35s 0:02:25 -
  75322. +Rule    sol88    1988    only    -    Apr    28    11:57:30s 0:02:30 -
  75323. +Rule    sol88    1988    only    -    Apr    29    11:57:20s 0:02:40 -
  75324. +Rule    sol88    1988    only    -    Apr    30    11:57:10s 0:02:50 -
  75325. +Rule    sol88    1988    only    -    May    1    11:57:05s 0:02:55 -
  75326. +Rule    sol88    1988    only    -    May    2    11:56:55s 0:03:05 -
  75327. +Rule    sol88    1988    only    -    May    3    11:56:50s 0:03:10 -
  75328. +Rule    sol88    1988    only    -    May    4    11:56:45s 0:03:15 -
  75329. +Rule    sol88    1988    only    -    May    5    11:56:40s 0:03:20 -
  75330. +Rule    sol88    1988    only    -    May    6    11:56:35s 0:03:25 -
  75331. +Rule    sol88    1988    only    -    May    7    11:56:30s 0:03:30 -
  75332. +Rule    sol88    1988    only    -    May    8    11:56:25s 0:03:35 -
  75333. +Rule    sol88    1988    only    -    May    9    11:56:25s 0:03:35 -
  75334. +Rule    sol88    1988    only    -    May    10    11:56:20s 0:03:40 -
  75335. +Rule    sol88    1988    only    -    May    11    11:56:20s 0:03:40 -
  75336. +Rule    sol88    1988    only    -    May    12    11:56:20s 0:03:40 -
  75337. +Rule    sol88    1988    only    -    May    13    11:56:20s 0:03:40 -
  75338. +Rule    sol88    1988    only    -    May    14    11:56:20s 0:03:40 -
  75339. +Rule    sol88    1988    only    -    May    15    11:56:20s 0:03:40 -
  75340. +Rule    sol88    1988    only    -    May    16    11:56:20s 0:03:40 -
  75341. +Rule    sol88    1988    only    -    May    17    11:56:20s 0:03:40 -
  75342. +Rule    sol88    1988    only    -    May    18    11:56:25s 0:03:35 -
  75343. +Rule    sol88    1988    only    -    May    19    11:56:25s 0:03:35 -
  75344. +Rule    sol88    1988    only    -    May    20    11:56:30s 0:03:30 -
  75345. +Rule    sol88    1988    only    -    May    21    11:56:35s 0:03:25 -
  75346. +Rule    sol88    1988    only    -    May    22    11:56:40s 0:03:20 -
  75347. +Rule    sol88    1988    only    -    May    23    11:56:45s 0:03:15 -
  75348. +Rule    sol88    1988    only    -    May    24    11:56:50s 0:03:10 -
  75349. +Rule    sol88    1988    only    -    May    25    11:56:55s 0:03:05 -
  75350. +Rule    sol88    1988    only    -    May    26    11:57:00s 0:03:00 -
  75351. +Rule    sol88    1988    only    -    May    27    11:57:05s 0:02:55 -
  75352. +Rule    sol88    1988    only    -    May    28    11:57:15s 0:02:45 -
  75353. +Rule    sol88    1988    only    -    May    29    11:57:20s 0:02:40 -
  75354. +Rule    sol88    1988    only    -    May    30    11:57:30s 0:02:30 -
  75355. +Rule    sol88    1988    only    -    May    31    11:57:40s 0:02:20 -
  75356. +Rule    sol88    1988    only    -    Jun    1    11:57:50s 0:02:10 -
  75357. +Rule    sol88    1988    only    -    Jun    2    11:57:55s 0:02:05 -
  75358. +Rule    sol88    1988    only    -    Jun    3    11:58:05s 0:01:55 -
  75359. +Rule    sol88    1988    only    -    Jun    4    11:58:15s 0:01:45 -
  75360. +Rule    sol88    1988    only    -    Jun    5    11:58:30s 0:01:30 -
  75361. +Rule    sol88    1988    only    -    Jun    6    11:58:40s 0:01:20 -
  75362. +Rule    sol88    1988    only    -    Jun    7    11:58:50s 0:01:10 -
  75363. +Rule    sol88    1988    only    -    Jun    8    11:59:00s 0:01:00 -
  75364. +Rule    sol88    1988    only    -    Jun    9    11:59:15s 0:00:45 -
  75365. +Rule    sol88    1988    only    -    Jun    10    11:59:25s 0:00:35 -
  75366. +Rule    sol88    1988    only    -    Jun    11    11:59:35s 0:00:25 -
  75367. +Rule    sol88    1988    only    -    Jun    12    11:59:50s 0:00:10 -
  75368. +Rule    sol88    1988    only    -    Jun    13    12:00:00s 0:00:00 -
  75369. +Rule    sol88    1988    only    -    Jun    14    12:00:15s -0:00:15 -
  75370. +Rule    sol88    1988    only    -    Jun    15    12:00:25s -0:00:25 -
  75371. +Rule    sol88    1988    only    -    Jun    16    12:00:40s -0:00:40 -
  75372. +Rule    sol88    1988    only    -    Jun    17    12:00:55s -0:00:55 -
  75373. +Rule    sol88    1988    only    -    Jun    18    12:01:05s -0:01:05 -
  75374. +Rule    sol88    1988    only    -    Jun    19    12:01:20s -0:01:20 -
  75375. +Rule    sol88    1988    only    -    Jun    20    12:01:30s -0:01:30 -
  75376. +Rule    sol88    1988    only    -    Jun    21    12:01:45s -0:01:45 -
  75377. +Rule    sol88    1988    only    -    Jun    22    12:02:00s -0:02:00 -
  75378. +Rule    sol88    1988    only    -    Jun    23    12:02:10s -0:02:10 -
  75379. +Rule    sol88    1988    only    -    Jun    24    12:02:25s -0:02:25 -
  75380. +Rule    sol88    1988    only    -    Jun    25    12:02:35s -0:02:35 -
  75381. +Rule    sol88    1988    only    -    Jun    26    12:02:50s -0:02:50 -
  75382. +Rule    sol88    1988    only    -    Jun    27    12:03:00s -0:03:00 -
  75383. +Rule    sol88    1988    only    -    Jun    28    12:03:15s -0:03:15 -
  75384. +Rule    sol88    1988    only    -    Jun    29    12:03:25s -0:03:25 -
  75385. +Rule    sol88    1988    only    -    Jun    30    12:03:40s -0:03:40 -
  75386. +Rule    sol88    1988    only    -    Jul    1    12:03:50s -0:03:50 -
  75387. +Rule    sol88    1988    only    -    Jul    2    12:04:00s -0:04:00 -
  75388. +Rule    sol88    1988    only    -    Jul    3    12:04:10s -0:04:10 -
  75389. +Rule    sol88    1988    only    -    Jul    4    12:04:25s -0:04:25 -
  75390. +Rule    sol88    1988    only    -    Jul    5    12:04:35s -0:04:35 -
  75391. +Rule    sol88    1988    only    -    Jul    6    12:04:45s -0:04:45 -
  75392. +Rule    sol88    1988    only    -    Jul    7    12:04:55s -0:04:55 -
  75393. +Rule    sol88    1988    only    -    Jul    8    12:05:05s -0:05:05 -
  75394. +Rule    sol88    1988    only    -    Jul    9    12:05:10s -0:05:10 -
  75395. +Rule    sol88    1988    only    -    Jul    10    12:05:20s -0:05:20 -
  75396. +Rule    sol88    1988    only    -    Jul    11    12:05:30s -0:05:30 -
  75397. +Rule    sol88    1988    only    -    Jul    12    12:05:35s -0:05:35 -
  75398. +Rule    sol88    1988    only    -    Jul    13    12:05:45s -0:05:45 -
  75399. +Rule    sol88    1988    only    -    Jul    14    12:05:50s -0:05:50 -
  75400. +Rule    sol88    1988    only    -    Jul    15    12:05:55s -0:05:55 -
  75401. +Rule    sol88    1988    only    -    Jul    16    12:06:00s -0:06:00 -
  75402. +Rule    sol88    1988    only    -    Jul    17    12:06:05s -0:06:05 -
  75403. +Rule    sol88    1988    only    -    Jul    18    12:06:10s -0:06:10 -
  75404. +Rule    sol88    1988    only    -    Jul    19    12:06:15s -0:06:15 -
  75405. +Rule    sol88    1988    only    -    Jul    20    12:06:20s -0:06:20 -
  75406. +Rule    sol88    1988    only    -    Jul    21    12:06:25s -0:06:25 -
  75407. +Rule    sol88    1988    only    -    Jul    22    12:06:25s -0:06:25 -
  75408. +Rule    sol88    1988    only    -    Jul    23    12:06:25s -0:06:25 -
  75409. +Rule    sol88    1988    only    -    Jul    24    12:06:30s -0:06:30 -
  75410. +Rule    sol88    1988    only    -    Jul    25    12:06:30s -0:06:30 -
  75411. +Rule    sol88    1988    only    -    Jul    26    12:06:30s -0:06:30 -
  75412. +Rule    sol88    1988    only    -    Jul    27    12:06:30s -0:06:30 -
  75413. +Rule    sol88    1988    only    -    Jul    28    12:06:30s -0:06:30 -
  75414. +Rule    sol88    1988    only    -    Jul    29    12:06:25s -0:06:25 -
  75415. +Rule    sol88    1988    only    -    Jul    30    12:06:25s -0:06:25 -
  75416. +Rule    sol88    1988    only    -    Jul    31    12:06:20s -0:06:20 -
  75417. +Rule    sol88    1988    only    -    Aug    1    12:06:15s -0:06:15 -
  75418. +Rule    sol88    1988    only    -    Aug    2    12:06:15s -0:06:15 -
  75419. +Rule    sol88    1988    only    -    Aug    3    12:06:10s -0:06:10 -
  75420. +Rule    sol88    1988    only    -    Aug    4    12:06:05s -0:06:05 -
  75421. +Rule    sol88    1988    only    -    Aug    5    12:05:55s -0:05:55 -
  75422. +Rule    sol88    1988    only    -    Aug    6    12:05:50s -0:05:50 -
  75423. +Rule    sol88    1988    only    -    Aug    7    12:05:45s -0:05:45 -
  75424. +Rule    sol88    1988    only    -    Aug    8    12:05:35s -0:05:35 -
  75425. +Rule    sol88    1988    only    -    Aug    9    12:05:25s -0:05:25 -
  75426. +Rule    sol88    1988    only    -    Aug    10    12:05:20s -0:05:20 -
  75427. +Rule    sol88    1988    only    -    Aug    11    12:05:10s -0:05:10 -
  75428. +Rule    sol88    1988    only    -    Aug    12    12:05:00s -0:05:00 -
  75429. +Rule    sol88    1988    only    -    Aug    13    12:04:50s -0:04:50 -
  75430. +Rule    sol88    1988    only    -    Aug    14    12:04:35s -0:04:35 -
  75431. +Rule    sol88    1988    only    -    Aug    15    12:04:25s -0:04:25 -
  75432. +Rule    sol88    1988    only    -    Aug    16    12:04:15s -0:04:15 -
  75433. +Rule    sol88    1988    only    -    Aug    17    12:04:00s -0:04:00 -
  75434. +Rule    sol88    1988    only    -    Aug    18    12:03:50s -0:03:50 -
  75435. +Rule    sol88    1988    only    -    Aug    19    12:03:35s -0:03:35 -
  75436. +Rule    sol88    1988    only    -    Aug    20    12:03:20s -0:03:20 -
  75437. +Rule    sol88    1988    only    -    Aug    21    12:03:05s -0:03:05 -
  75438. +Rule    sol88    1988    only    -    Aug    22    12:02:50s -0:02:50 -
  75439. +Rule    sol88    1988    only    -    Aug    23    12:02:35s -0:02:35 -
  75440. +Rule    sol88    1988    only    -    Aug    24    12:02:20s -0:02:20 -
  75441. +Rule    sol88    1988    only    -    Aug    25    12:02:00s -0:02:00 -
  75442. +Rule    sol88    1988    only    -    Aug    26    12:01:45s -0:01:45 -
  75443. +Rule    sol88    1988    only    -    Aug    27    12:01:30s -0:01:30 -
  75444. +Rule    sol88    1988    only    -    Aug    28    12:01:10s -0:01:10 -
  75445. +Rule    sol88    1988    only    -    Aug    29    12:00:50s -0:00:50 -
  75446. +Rule    sol88    1988    only    -    Aug    30    12:00:35s -0:00:35 -
  75447. +Rule    sol88    1988    only    -    Aug    31    12:00:15s -0:00:15 -
  75448. +Rule    sol88    1988    only    -    Sep    1    11:59:55s 0:00:05 -
  75449. +Rule    sol88    1988    only    -    Sep    2    11:59:35s 0:00:25 -
  75450. +Rule    sol88    1988    only    -    Sep    3    11:59:20s 0:00:40 -
  75451. +Rule    sol88    1988    only    -    Sep    4    11:59:00s 0:01:00 -
  75452. +Rule    sol88    1988    only    -    Sep    5    11:58:40s 0:01:20 -
  75453. +Rule    sol88    1988    only    -    Sep    6    11:58:20s 0:01:40 -
  75454. +Rule    sol88    1988    only    -    Sep    7    11:58:00s 0:02:00 -
  75455. +Rule    sol88    1988    only    -    Sep    8    11:57:35s 0:02:25 -
  75456. +Rule    sol88    1988    only    -    Sep    9    11:57:15s 0:02:45 -
  75457. +Rule    sol88    1988    only    -    Sep    10    11:56:55s 0:03:05 -
  75458. +Rule    sol88    1988    only    -    Sep    11    11:56:35s 0:03:25 -
  75459. +Rule    sol88    1988    only    -    Sep    12    11:56:15s 0:03:45 -
  75460. +Rule    sol88    1988    only    -    Sep    13    11:55:50s 0:04:10 -
  75461. +Rule    sol88    1988    only    -    Sep    14    11:55:30s 0:04:30 -
  75462. +Rule    sol88    1988    only    -    Sep    15    11:55:10s 0:04:50 -
  75463. +Rule    sol88    1988    only    -    Sep    16    11:54:50s 0:05:10 -
  75464. +Rule    sol88    1988    only    -    Sep    17    11:54:25s 0:05:35 -
  75465. +Rule    sol88    1988    only    -    Sep    18    11:54:05s 0:05:55 -
  75466. +Rule    sol88    1988    only    -    Sep    19    11:53:45s 0:06:15 -
  75467. +Rule    sol88    1988    only    -    Sep    20    11:53:25s 0:06:35 -
  75468. +Rule    sol88    1988    only    -    Sep    21    11:53:00s 0:07:00 -
  75469. +Rule    sol88    1988    only    -    Sep    22    11:52:40s 0:07:20 -
  75470. +Rule    sol88    1988    only    -    Sep    23    11:52:20s 0:07:40 -
  75471. +Rule    sol88    1988    only    -    Sep    24    11:52:00s 0:08:00 -
  75472. +Rule    sol88    1988    only    -    Sep    25    11:51:40s 0:08:20 -
  75473. +Rule    sol88    1988    only    -    Sep    26    11:51:15s 0:08:45 -
  75474. +Rule    sol88    1988    only    -    Sep    27    11:50:55s 0:09:05 -
  75475. +Rule    sol88    1988    only    -    Sep    28    11:50:35s 0:09:25 -
  75476. +Rule    sol88    1988    only    -    Sep    29    11:50:15s 0:09:45 -
  75477. +Rule    sol88    1988    only    -    Sep    30    11:49:55s 0:10:05 -
  75478. +Rule    sol88    1988    only    -    Oct    1    11:49:35s 0:10:25 -
  75479. +Rule    sol88    1988    only    -    Oct    2    11:49:20s 0:10:40 -
  75480. +Rule    sol88    1988    only    -    Oct    3    11:49:00s 0:11:00 -
  75481. +Rule    sol88    1988    only    -    Oct    4    11:48:40s 0:11:20 -
  75482. +Rule    sol88    1988    only    -    Oct    5    11:48:25s 0:11:35 -
  75483. +Rule    sol88    1988    only    -    Oct    6    11:48:05s 0:11:55 -
  75484. +Rule    sol88    1988    only    -    Oct    7    11:47:50s 0:12:10 -
  75485. +Rule    sol88    1988    only    -    Oct    8    11:47:30s 0:12:30 -
  75486. +Rule    sol88    1988    only    -    Oct    9    11:47:15s 0:12:45 -
  75487. +Rule    sol88    1988    only    -    Oct    10    11:47:00s 0:13:00 -
  75488. +Rule    sol88    1988    only    -    Oct    11    11:46:45s 0:13:15 -
  75489. +Rule    sol88    1988    only    -    Oct    12    11:46:30s 0:13:30 -
  75490. +Rule    sol88    1988    only    -    Oct    13    11:46:15s 0:13:45 -
  75491. +Rule    sol88    1988    only    -    Oct    14    11:46:00s 0:14:00 -
  75492. +Rule    sol88    1988    only    -    Oct    15    11:45:45s 0:14:15 -
  75493. +Rule    sol88    1988    only    -    Oct    16    11:45:35s 0:14:25 -
  75494. +Rule    sol88    1988    only    -    Oct    17    11:45:20s 0:14:40 -
  75495. +Rule    sol88    1988    only    -    Oct    18    11:45:10s 0:14:50 -
  75496. +Rule    sol88    1988    only    -    Oct    19    11:45:00s 0:15:00 -
  75497. +Rule    sol88    1988    only    -    Oct    20    11:44:45s 0:15:15 -
  75498. +Rule    sol88    1988    only    -    Oct    21    11:44:40s 0:15:20 -
  75499. +Rule    sol88    1988    only    -    Oct    22    11:44:30s 0:15:30 -
  75500. +Rule    sol88    1988    only    -    Oct    23    11:44:20s 0:15:40 -
  75501. +Rule    sol88    1988    only    -    Oct    24    11:44:10s 0:15:50 -
  75502. +Rule    sol88    1988    only    -    Oct    25    11:44:05s 0:15:55 -
  75503. +Rule    sol88    1988    only    -    Oct    26    11:44:00s 0:16:00 -
  75504. +Rule    sol88    1988    only    -    Oct    27    11:43:55s 0:16:05 -
  75505. +Rule    sol88    1988    only    -    Oct    28    11:43:50s 0:16:10 -
  75506. +Rule    sol88    1988    only    -    Oct    29    11:43:45s 0:16:15 -
  75507. +Rule    sol88    1988    only    -    Oct    30    11:43:40s 0:16:20 -
  75508. +Rule    sol88    1988    only    -    Oct    31    11:43:40s 0:16:20 -
  75509. +Rule    sol88    1988    only    -    Nov    1    11:43:35s 0:16:25 -
  75510. +Rule    sol88    1988    only    -    Nov    2    11:43:35s 0:16:25 -
  75511. +Rule    sol88    1988    only    -    Nov    3    11:43:35s 0:16:25 -
  75512. +Rule    sol88    1988    only    -    Nov    4    11:43:35s 0:16:25 -
  75513. +Rule    sol88    1988    only    -    Nov    5    11:43:40s 0:16:20 -
  75514. +Rule    sol88    1988    only    -    Nov    6    11:43:40s 0:16:20 -
  75515. +Rule    sol88    1988    only    -    Nov    7    11:43:45s 0:16:15 -
  75516. +Rule    sol88    1988    only    -    Nov    8    11:43:45s 0:16:15 -
  75517. +Rule    sol88    1988    only    -    Nov    9    11:43:50s 0:16:10 -
  75518. +Rule    sol88    1988    only    -    Nov    10    11:44:00s 0:16:00 -
  75519. +Rule    sol88    1988    only    -    Nov    11    11:44:05s 0:15:55 -
  75520. +Rule    sol88    1988    only    -    Nov    12    11:44:10s 0:15:50 -
  75521. +Rule    sol88    1988    only    -    Nov    13    11:44:20s 0:15:40 -
  75522. +Rule    sol88    1988    only    -    Nov    14    11:44:30s 0:15:30 -
  75523. +Rule    sol88    1988    only    -    Nov    15    11:44:40s 0:15:20 -
  75524. +Rule    sol88    1988    only    -    Nov    16    11:44:50s 0:15:10 -
  75525. +Rule    sol88    1988    only    -    Nov    17    11:45:00s 0:15:00 -
  75526. +Rule    sol88    1988    only    -    Nov    18    11:45:15s 0:14:45 -
  75527. +Rule    sol88    1988    only    -    Nov    19    11:45:25s 0:14:35 -
  75528. +Rule    sol88    1988    only    -    Nov    20    11:45:40s 0:14:20 -
  75529. +Rule    sol88    1988    only    -    Nov    21    11:45:55s 0:14:05 -
  75530. +Rule    sol88    1988    only    -    Nov    22    11:46:10s 0:13:50 -
  75531. +Rule    sol88    1988    only    -    Nov    23    11:46:30s 0:13:30 -
  75532. +Rule    sol88    1988    only    -    Nov    24    11:46:45s 0:13:15 -
  75533. +Rule    sol88    1988    only    -    Nov    25    11:47:05s 0:12:55 -
  75534. +Rule    sol88    1988    only    -    Nov    26    11:47:20s 0:12:40 -
  75535. +Rule    sol88    1988    only    -    Nov    27    11:47:40s 0:12:20 -
  75536. +Rule    sol88    1988    only    -    Nov    28    11:48:00s 0:12:00 -
  75537. +Rule    sol88    1988    only    -    Nov    29    11:48:25s 0:11:35 -
  75538. +Rule    sol88    1988    only    -    Nov    30    11:48:45s 0:11:15 -
  75539. +Rule    sol88    1988    only    -    Dec    1    11:49:05s 0:10:55 -
  75540. +Rule    sol88    1988    only    -    Dec    2    11:49:30s 0:10:30 -
  75541. +Rule    sol88    1988    only    -    Dec    3    11:49:55s 0:10:05 -
  75542. +Rule    sol88    1988    only    -    Dec    4    11:50:15s 0:09:45 -
  75543. +Rule    sol88    1988    only    -    Dec    5    11:50:40s 0:09:20 -
  75544. +Rule    sol88    1988    only    -    Dec    6    11:51:05s 0:08:55 -
  75545. +Rule    sol88    1988    only    -    Dec    7    11:51:35s 0:08:25 -
  75546. +Rule    sol88    1988    only    -    Dec    8    11:52:00s 0:08:00 -
  75547. +Rule    sol88    1988    only    -    Dec    9    11:52:25s 0:07:35 -
  75548. +Rule    sol88    1988    only    -    Dec    10    11:52:55s 0:07:05 -
  75549. +Rule    sol88    1988    only    -    Dec    11    11:53:20s 0:06:40 -
  75550. +Rule    sol88    1988    only    -    Dec    12    11:53:50s 0:06:10 -
  75551. +Rule    sol88    1988    only    -    Dec    13    11:54:15s 0:05:45 -
  75552. +Rule    sol88    1988    only    -    Dec    14    11:54:45s 0:05:15 -
  75553. +Rule    sol88    1988    only    -    Dec    15    11:55:15s 0:04:45 -
  75554. +Rule    sol88    1988    only    -    Dec    16    11:55:45s 0:04:15 -
  75555. +Rule    sol88    1988    only    -    Dec    17    11:56:15s 0:03:45 -
  75556. +Rule    sol88    1988    only    -    Dec    18    11:56:40s 0:03:20 -
  75557. +Rule    sol88    1988    only    -    Dec    19    11:57:10s 0:02:50 -
  75558. +Rule    sol88    1988    only    -    Dec    20    11:57:40s 0:02:20 -
  75559. +Rule    sol88    1988    only    -    Dec    21    11:58:10s 0:01:50 -
  75560. +Rule    sol88    1988    only    -    Dec    22    11:58:40s 0:01:20 -
  75561. +Rule    sol88    1988    only    -    Dec    23    11:59:10s 0:00:50 -
  75562. +Rule    sol88    1988    only    -    Dec    24    11:59:40s 0:00:20 -
  75563. +Rule    sol88    1988    only    -    Dec    25    12:00:10s -0:00:10 -
  75564. +Rule    sol88    1988    only    -    Dec    26    12:00:40s -0:00:40 -
  75565. +Rule    sol88    1988    only    -    Dec    27    12:01:10s -0:01:10 -
  75566. +Rule    sol88    1988    only    -    Dec    28    12:01:40s -0:01:40 -
  75567. +Rule    sol88    1988    only    -    Dec    29    12:02:10s -0:02:10 -
  75568. +Rule    sol88    1988    only    -    Dec    30    12:02:35s -0:02:35 -
  75569. +Rule    sol88    1988    only    -    Dec    31    12:03:05s -0:03:05 -
  75570. +
  75571. +# Riyadh is at about 46 degrees 46 minutes East:  3 hrs, 7 mins, 4 secs
  75572. +# Before and after 1988, we'll operate on local mean solar time.
  75573. +
  75574. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  75575. +Zone    Mideast/Riyadh88    3:07:04    -        ??    1988
  75576. +                3:07:04    sol88        ??    1989
  75577. +                3:07:04    -        ??
  75578. diff -rup --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/solar89 amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/solar89
  75579. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/solar89    Wed Dec 31 17:00:00 1969
  75580. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/solar89    Sat Sep 28 00:00:00 1996
  75581. @@ -0,0 +1,391 @@
  75582. +# @(#)solar89    1.3
  75583. +
  75584. +# Apparent noon times below are for Riyadh; they're a bit off for other places.
  75585. +# Times were computed using a formula provided by the U. S. Naval Observatory:
  75586. +#    eqt = -105.8 * sin(l) + 596.2 * sin(2 * l) + 4.4 * sin(3 * l)
  75587. +#        -12.7 * sin(4 * l) - 429.0 * cos(l) - 2.1 * cos (2 * l)
  75588. +#        + 19.3 * cos(3 * l);
  75589. +# where l is the "mean longitude of the Sun" given by
  75590. +#    l = 279.642 degrees + 0.985647 * d
  75591. +# and d is the interval in days from January 0, 0 hours Universal Time
  75592. +# (equaling the day of the year plus the fraction of a day from zero hours).
  75593. +# The accuracy of the formula is plus or minus three seconds.
  75594. +#
  75595. +# Rounding to the nearest five seconds results in fewer than
  75596. +# 256 different "time types"--a limit that's faced because time types are
  75597. +# stored on disk as unsigned chars.
  75598. +
  75599. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  75600. +Rule    sol89    1989    only    -    Jan    1    12:03:35s -0:03:35 -
  75601. +Rule    sol89    1989    only    -    Jan    2    12:04:05s -0:04:05 -
  75602. +Rule    sol89    1989    only    -    Jan    3    12:04:30s -0:04:30 -
  75603. +Rule    sol89    1989    only    -    Jan    4    12:05:00s -0:05:00 -
  75604. +Rule    sol89    1989    only    -    Jan    5    12:05:25s -0:05:25 -
  75605. +Rule    sol89    1989    only    -    Jan    6    12:05:50s -0:05:50 -
  75606. +Rule    sol89    1989    only    -    Jan    7    12:06:15s -0:06:15 -
  75607. +Rule    sol89    1989    only    -    Jan    8    12:06:45s -0:06:45 -
  75608. +Rule    sol89    1989    only    -    Jan    9    12:07:10s -0:07:10 -
  75609. +Rule    sol89    1989    only    -    Jan    10    12:07:35s -0:07:35 -
  75610. +Rule    sol89    1989    only    -    Jan    11    12:07:55s -0:07:55 -
  75611. +Rule    sol89    1989    only    -    Jan    12    12:08:20s -0:08:20 -
  75612. +Rule    sol89    1989    only    -    Jan    13    12:08:45s -0:08:45 -
  75613. +Rule    sol89    1989    only    -    Jan    14    12:09:05s -0:09:05 -
  75614. +Rule    sol89    1989    only    -    Jan    15    12:09:25s -0:09:25 -
  75615. +Rule    sol89    1989    only    -    Jan    16    12:09:45s -0:09:45 -
  75616. +Rule    sol89    1989    only    -    Jan    17    12:10:05s -0:10:05 -
  75617. +Rule    sol89    1989    only    -    Jan    18    12:10:25s -0:10:25 -
  75618. +Rule    sol89    1989    only    -    Jan    19    12:10:45s -0:10:45 -
  75619. +Rule    sol89    1989    only    -    Jan    20    12:11:05s -0:11:05 -
  75620. +Rule    sol89    1989    only    -    Jan    21    12:11:20s -0:11:20 -
  75621. +Rule    sol89    1989    only    -    Jan    22    12:11:35s -0:11:35 -
  75622. +Rule    sol89    1989    only    -    Jan    23    12:11:55s -0:11:55 -
  75623. +Rule    sol89    1989    only    -    Jan    24    12:12:10s -0:12:10 -
  75624. +Rule    sol89    1989    only    -    Jan    25    12:12:20s -0:12:20 -
  75625. +Rule    sol89    1989    only    -    Jan    26    12:12:35s -0:12:35 -
  75626. +Rule    sol89    1989    only    -    Jan    27    12:12:50s -0:12:50 -
  75627. +Rule    sol89    1989    only    -    Jan    28    12:13:00s -0:13:00 -
  75628. +Rule    sol89    1989    only    -    Jan    29    12:13:10s -0:13:10 -
  75629. +Rule    sol89    1989    only    -    Jan    30    12:13:20s -0:13:20 -
  75630. +Rule    sol89    1989    only    -    Jan    31    12:13:30s -0:13:30 -
  75631. +Rule    sol89    1989    only    -    Feb    1    12:13:40s -0:13:40 -
  75632. +Rule    sol89    1989    only    -    Feb    2    12:13:45s -0:13:45 -
  75633. +Rule    sol89    1989    only    -    Feb    3    12:13:55s -0:13:55 -
  75634. +Rule    sol89    1989    only    -    Feb    4    12:14:00s -0:14:00 -
  75635. +Rule    sol89    1989    only    -    Feb    5    12:14:05s -0:14:05 -
  75636. +Rule    sol89    1989    only    -    Feb    6    12:14:10s -0:14:10 -
  75637. +Rule    sol89    1989    only    -    Feb    7    12:14:10s -0:14:10 -
  75638. +Rule    sol89    1989    only    -    Feb    8    12:14:15s -0:14:15 -
  75639. +Rule    sol89    1989    only    -    Feb    9    12:14:15s -0:14:15 -
  75640. +Rule    sol89    1989    only    -    Feb    10    12:14:20s -0:14:20 -
  75641. +Rule    sol89    1989    only    -    Feb    11    12:14:20s -0:14:20 -
  75642. +Rule    sol89    1989    only    -    Feb    12    12:14:20s -0:14:20 -
  75643. +Rule    sol89    1989    only    -    Feb    13    12:14:15s -0:14:15 -
  75644. +Rule    sol89    1989    only    -    Feb    14    12:14:15s -0:14:15 -
  75645. +Rule    sol89    1989    only    -    Feb    15    12:14:10s -0:14:10 -
  75646. +Rule    sol89    1989    only    -    Feb    16    12:14:10s -0:14:10 -
  75647. +Rule    sol89    1989    only    -    Feb    17    12:14:05s -0:14:05 -
  75648. +Rule    sol89    1989    only    -    Feb    18    12:14:00s -0:14:00 -
  75649. +Rule    sol89    1989    only    -    Feb    19    12:13:55s -0:13:55 -
  75650. +Rule    sol89    1989    only    -    Feb    20    12:13:50s -0:13:50 -
  75651. +Rule    sol89    1989    only    -    Feb    21    12:13:40s -0:13:40 -
  75652. +Rule    sol89    1989    only    -    Feb    22    12:13:35s -0:13:35 -
  75653. +Rule    sol89    1989    only    -    Feb    23    12:13:25s -0:13:25 -
  75654. +Rule    sol89    1989    only    -    Feb    24    12:13:15s -0:13:15 -
  75655. +Rule    sol89    1989    only    -    Feb    25    12:13:05s -0:13:05 -
  75656. +Rule    sol89    1989    only    -    Feb    26    12:12:55s -0:12:55 -
  75657. +Rule    sol89    1989    only    -    Feb    27    12:12:45s -0:12:45 -
  75658. +Rule    sol89    1989    only    -    Feb    28    12:12:35s -0:12:35 -
  75659. +Rule    sol89    1989    only    -    Mar    1    12:12:25s -0:12:25 -
  75660. +Rule    sol89    1989    only    -    Mar    2    12:12:10s -0:12:10 -
  75661. +Rule    sol89    1989    only    -    Mar    3    12:12:00s -0:12:00 -
  75662. +Rule    sol89    1989    only    -    Mar    4    12:11:45s -0:11:45 -
  75663. +Rule    sol89    1989    only    -    Mar    5    12:11:35s -0:11:35 -
  75664. +Rule    sol89    1989    only    -    Mar    6    12:11:20s -0:11:20 -
  75665. +Rule    sol89    1989    only    -    Mar    7    12:11:05s -0:11:05 -
  75666. +Rule    sol89    1989    only    -    Mar    8    12:10:50s -0:10:50 -
  75667. +Rule    sol89    1989    only    -    Mar    9    12:10:35s -0:10:35 -
  75668. +Rule    sol89    1989    only    -    Mar    10    12:10:20s -0:10:20 -
  75669. +Rule    sol89    1989    only    -    Mar    11    12:10:05s -0:10:05 -
  75670. +Rule    sol89    1989    only    -    Mar    12    12:09:50s -0:09:50 -
  75671. +Rule    sol89    1989    only    -    Mar    13    12:09:30s -0:09:30 -
  75672. +Rule    sol89    1989    only    -    Mar    14    12:09:15s -0:09:15 -
  75673. +Rule    sol89    1989    only    -    Mar    15    12:09:00s -0:09:00 -
  75674. +Rule    sol89    1989    only    -    Mar    16    12:08:40s -0:08:40 -
  75675. +Rule    sol89    1989    only    -    Mar    17    12:08:25s -0:08:25 -
  75676. +Rule    sol89    1989    only    -    Mar    18    12:08:05s -0:08:05 -
  75677. +Rule    sol89    1989    only    -    Mar    19    12:07:50s -0:07:50 -
  75678. +Rule    sol89    1989    only    -    Mar    20    12:07:30s -0:07:30 -
  75679. +Rule    sol89    1989    only    -    Mar    21    12:07:15s -0:07:15 -
  75680. +Rule    sol89    1989    only    -    Mar    22    12:06:55s -0:06:55 -
  75681. +Rule    sol89    1989    only    -    Mar    23    12:06:35s -0:06:35 -
  75682. +Rule    sol89    1989    only    -    Mar    24    12:06:20s -0:06:20 -
  75683. +Rule    sol89    1989    only    -    Mar    25    12:06:00s -0:06:00 -
  75684. +Rule    sol89    1989    only    -    Mar    26    12:05:40s -0:05:40 -
  75685. +Rule    sol89    1989    only    -    Mar    27    12:05:25s -0:05:25 -
  75686. +Rule    sol89    1989    only    -    Mar    28    12:05:05s -0:05:05 -
  75687. +Rule    sol89    1989    only    -    Mar    29    12:04:50s -0:04:50 -
  75688. +Rule    sol89    1989    only    -    Mar    30    12:04:30s -0:04:30 -
  75689. +Rule    sol89    1989    only    -    Mar    31    12:04:10s -0:04:10 -
  75690. +Rule    sol89    1989    only    -    Apr    1    12:03:55s -0:03:55 -
  75691. +Rule    sol89    1989    only    -    Apr    2    12:03:35s -0:03:35 -
  75692. +Rule    sol89    1989    only    -    Apr    3    12:03:20s -0:03:20 -
  75693. +Rule    sol89    1989    only    -    Apr    4    12:03:00s -0:03:00 -
  75694. +Rule    sol89    1989    only    -    Apr    5    12:02:45s -0:02:45 -
  75695. +Rule    sol89    1989    only    -    Apr    6    12:02:25s -0:02:25 -
  75696. +Rule    sol89    1989    only    -    Apr    7    12:02:10s -0:02:10 -
  75697. +Rule    sol89    1989    only    -    Apr    8    12:01:50s -0:01:50 -
  75698. +Rule    sol89    1989    only    -    Apr    9    12:01:35s -0:01:35 -
  75699. +Rule    sol89    1989    only    -    Apr    10    12:01:20s -0:01:20 -
  75700. +Rule    sol89    1989    only    -    Apr    11    12:01:05s -0:01:05 -
  75701. +Rule    sol89    1989    only    -    Apr    12    12:00:50s -0:00:50 -
  75702. +Rule    sol89    1989    only    -    Apr    13    12:00:35s -0:00:35 -
  75703. +Rule    sol89    1989    only    -    Apr    14    12:00:20s -0:00:20 -
  75704. +Rule    sol89    1989    only    -    Apr    15    12:00:05s -0:00:05 -
  75705. +Rule    sol89    1989    only    -    Apr    16    11:59:50s 0:00:10 -
  75706. +Rule    sol89    1989    only    -    Apr    17    11:59:35s 0:00:25 -
  75707. +Rule    sol89    1989    only    -    Apr    18    11:59:20s 0:00:40 -
  75708. +Rule    sol89    1989    only    -    Apr    19    11:59:10s 0:00:50 -
  75709. +Rule    sol89    1989    only    -    Apr    20    11:58:55s 0:01:05 -
  75710. +Rule    sol89    1989    only    -    Apr    21    11:58:45s 0:01:15 -
  75711. +Rule    sol89    1989    only    -    Apr    22    11:58:30s 0:01:30 -
  75712. +Rule    sol89    1989    only    -    Apr    23    11:58:20s 0:01:40 -
  75713. +Rule    sol89    1989    only    -    Apr    24    11:58:10s 0:01:50 -
  75714. +Rule    sol89    1989    only    -    Apr    25    11:58:00s 0:02:00 -
  75715. +Rule    sol89    1989    only    -    Apr    26    11:57:50s 0:02:10 -
  75716. +Rule    sol89    1989    only    -    Apr    27    11:57:40s 0:02:20 -
  75717. +Rule    sol89    1989    only    -    Apr    28    11:57:30s 0:02:30 -
  75718. +Rule    sol89    1989    only    -    Apr    29    11:57:20s 0:02:40 -
  75719. +Rule    sol89    1989    only    -    Apr    30    11:57:15s 0:02:45 -
  75720. +Rule    sol89    1989    only    -    May    1    11:57:05s 0:02:55 -
  75721. +Rule    sol89    1989    only    -    May    2    11:57:00s 0:03:00 -
  75722. +Rule    sol89    1989    only    -    May    3    11:56:50s 0:03:10 -
  75723. +Rule    sol89    1989    only    -    May    4    11:56:45s 0:03:15 -
  75724. +Rule    sol89    1989    only    -    May    5    11:56:40s 0:03:20 -
  75725. +Rule    sol89    1989    only    -    May    6    11:56:35s 0:03:25 -
  75726. +Rule    sol89    1989    only    -    May    7    11:56:30s 0:03:30 -
  75727. +Rule    sol89    1989    only    -    May    8    11:56:30s 0:03:30 -
  75728. +Rule    sol89    1989    only    -    May    9    11:56:25s 0:03:35 -
  75729. +Rule    sol89    1989    only    -    May    10    11:56:25s 0:03:35 -
  75730. +Rule    sol89    1989    only    -    May    11    11:56:20s 0:03:40 -
  75731. +Rule    sol89    1989    only    -    May    12    11:56:20s 0:03:40 -
  75732. +Rule    sol89    1989    only    -    May    13    11:56:20s 0:03:40 -
  75733. +Rule    sol89    1989    only    -    May    14    11:56:20s 0:03:40 -
  75734. +Rule    sol89    1989    only    -    May    15    11:56:20s 0:03:40 -
  75735. +Rule    sol89    1989    only    -    May    16    11:56:20s 0:03:40 -
  75736. +Rule    sol89    1989    only    -    May    17    11:56:20s 0:03:40 -
  75737. +Rule    sol89    1989    only    -    May    18    11:56:25s 0:03:35 -
  75738. +Rule    sol89    1989    only    -    May    19    11:56:25s 0:03:35 -
  75739. +Rule    sol89    1989    only    -    May    20    11:56:30s 0:03:30 -
  75740. +Rule    sol89    1989    only    -    May    21    11:56:35s 0:03:25 -
  75741. +Rule    sol89    1989    only    -    May    22    11:56:35s 0:03:25 -
  75742. +Rule    sol89    1989    only    -    May    23    11:56:40s 0:03:20 -
  75743. +Rule    sol89    1989    only    -    May    24    11:56:45s 0:03:15 -
  75744. +Rule    sol89    1989    only    -    May    25    11:56:55s 0:03:05 -
  75745. +Rule    sol89    1989    only    -    May    26    11:57:00s 0:03:00 -
  75746. +Rule    sol89    1989    only    -    May    27    11:57:05s 0:02:55 -
  75747. +Rule    sol89    1989    only    -    May    28    11:57:15s 0:02:45 -
  75748. +Rule    sol89    1989    only    -    May    29    11:57:20s 0:02:40 -
  75749. +Rule    sol89    1989    only    -    May    30    11:57:30s 0:02:30 -
  75750. +Rule    sol89    1989    only    -    May    31    11:57:35s 0:02:25 -
  75751. +Rule    sol89    1989    only    -    Jun    1    11:57:45s 0:02:15 -
  75752. +Rule    sol89    1989    only    -    Jun    2    11:57:55s 0:02:05 -
  75753. +Rule    sol89    1989    only    -    Jun    3    11:58:05s 0:01:55 -
  75754. +Rule    sol89    1989    only    -    Jun    4    11:58:15s 0:01:45 -
  75755. +Rule    sol89    1989    only    -    Jun    5    11:58:25s 0:01:35 -
  75756. +Rule    sol89    1989    only    -    Jun    6    11:58:35s 0:01:25 -
  75757. +Rule    sol89    1989    only    -    Jun    7    11:58:45s 0:01:15 -
  75758. +Rule    sol89    1989    only    -    Jun    8    11:59:00s 0:01:00 -
  75759. +Rule    sol89    1989    only    -    Jun    9    11:59:10s 0:00:50 -
  75760. +Rule    sol89    1989    only    -    Jun    10    11:59:20s 0:00:40 -
  75761. +Rule    sol89    1989    only    -    Jun    11    11:59:35s 0:00:25 -
  75762. +Rule    sol89    1989    only    -    Jun    12    11:59:45s 0:00:15 -
  75763. +Rule    sol89    1989    only    -    Jun    13    12:00:00s 0:00:00 -
  75764. +Rule    sol89    1989    only    -    Jun    14    12:00:10s -0:00:10 -
  75765. +Rule    sol89    1989    only    -    Jun    15    12:00:25s -0:00:25 -
  75766. +Rule    sol89    1989    only    -    Jun    16    12:00:35s -0:00:35 -
  75767. +Rule    sol89    1989    only    -    Jun    17    12:00:50s -0:00:50 -
  75768. +Rule    sol89    1989    only    -    Jun    18    12:01:05s -0:01:05 -
  75769. +Rule    sol89    1989    only    -    Jun    19    12:01:15s -0:01:15 -
  75770. +Rule    sol89    1989    only    -    Jun    20    12:01:30s -0:01:30 -
  75771. +Rule    sol89    1989    only    -    Jun    21    12:01:40s -0:01:40 -
  75772. +Rule    sol89    1989    only    -    Jun    22    12:01:55s -0:01:55 -
  75773. +Rule    sol89    1989    only    -    Jun    23    12:02:10s -0:02:10 -
  75774. +Rule    sol89    1989    only    -    Jun    24    12:02:20s -0:02:20 -
  75775. +Rule    sol89    1989    only    -    Jun    25    12:02:35s -0:02:35 -
  75776. +Rule    sol89    1989    only    -    Jun    26    12:02:45s -0:02:45 -
  75777. +Rule    sol89    1989    only    -    Jun    27    12:03:00s -0:03:00 -
  75778. +Rule    sol89    1989    only    -    Jun    28    12:03:10s -0:03:10 -
  75779. +Rule    sol89    1989    only    -    Jun    29    12:03:25s -0:03:25 -
  75780. +Rule    sol89    1989    only    -    Jun    30    12:03:35s -0:03:35 -
  75781. +Rule    sol89    1989    only    -    Jul    1    12:03:45s -0:03:45 -
  75782. +Rule    sol89    1989    only    -    Jul    2    12:04:00s -0:04:00 -
  75783. +Rule    sol89    1989    only    -    Jul    3    12:04:10s -0:04:10 -
  75784. +Rule    sol89    1989    only    -    Jul    4    12:04:20s -0:04:20 -
  75785. +Rule    sol89    1989    only    -    Jul    5    12:04:30s -0:04:30 -
  75786. +Rule    sol89    1989    only    -    Jul    6    12:04:40s -0:04:40 -
  75787. +Rule    sol89    1989    only    -    Jul    7    12:04:50s -0:04:50 -
  75788. +Rule    sol89    1989    only    -    Jul    8    12:05:00s -0:05:00 -
  75789. +Rule    sol89    1989    only    -    Jul    9    12:05:10s -0:05:10 -
  75790. +Rule    sol89    1989    only    -    Jul    10    12:05:20s -0:05:20 -
  75791. +Rule    sol89    1989    only    -    Jul    11    12:05:25s -0:05:25 -
  75792. +Rule    sol89    1989    only    -    Jul    12    12:05:35s -0:05:35 -
  75793. +Rule    sol89    1989    only    -    Jul    13    12:05:40s -0:05:40 -
  75794. +Rule    sol89    1989    only    -    Jul    14    12:05:50s -0:05:50 -
  75795. +Rule    sol89    1989    only    -    Jul    15    12:05:55s -0:05:55 -
  75796. +Rule    sol89    1989    only    -    Jul    16    12:06:00s -0:06:00 -
  75797. +Rule    sol89    1989    only    -    Jul    17    12:06:05s -0:06:05 -
  75798. +Rule    sol89    1989    only    -    Jul    18    12:06:10s -0:06:10 -
  75799. +Rule    sol89    1989    only    -    Jul    19    12:06:15s -0:06:15 -
  75800. +Rule    sol89    1989    only    -    Jul    20    12:06:20s -0:06:20 -
  75801. +Rule    sol89    1989    only    -    Jul    21    12:06:20s -0:06:20 -
  75802. +Rule    sol89    1989    only    -    Jul    22    12:06:25s -0:06:25 -
  75803. +Rule    sol89    1989    only    -    Jul    23    12:06:25s -0:06:25 -
  75804. +Rule    sol89    1989    only    -    Jul    24    12:06:30s -0:06:30 -
  75805. +Rule    sol89    1989    only    -    Jul    25    12:06:30s -0:06:30 -
  75806. +Rule    sol89    1989    only    -    Jul    26    12:06:30s -0:06:30 -
  75807. +Rule    sol89    1989    only    -    Jul    27    12:06:30s -0:06:30 -
  75808. +Rule    sol89    1989    only    -    Jul    28    12:06:30s -0:06:30 -
  75809. +Rule    sol89    1989    only    -    Jul    29    12:06:25s -0:06:25 -
  75810. +Rule    sol89    1989    only    -    Jul    30    12:06:25s -0:06:25 -
  75811. +Rule    sol89    1989    only    -    Jul    31    12:06:20s -0:06:20 -
  75812. +Rule    sol89    1989    only    -    Aug    1    12:06:20s -0:06:20 -
  75813. +Rule    sol89    1989    only    -    Aug    2    12:06:15s -0:06:15 -
  75814. +Rule    sol89    1989    only    -    Aug    3    12:06:10s -0:06:10 -
  75815. +Rule    sol89    1989    only    -    Aug    4    12:06:05s -0:06:05 -
  75816. +Rule    sol89    1989    only    -    Aug    5    12:06:00s -0:06:00 -
  75817. +Rule    sol89    1989    only    -    Aug    6    12:05:50s -0:05:50 -
  75818. +Rule    sol89    1989    only    -    Aug    7    12:05:45s -0:05:45 -
  75819. +Rule    sol89    1989    only    -    Aug    8    12:05:35s -0:05:35 -
  75820. +Rule    sol89    1989    only    -    Aug    9    12:05:30s -0:05:30 -
  75821. +Rule    sol89    1989    only    -    Aug    10    12:05:20s -0:05:20 -
  75822. +Rule    sol89    1989    only    -    Aug    11    12:05:10s -0:05:10 -
  75823. +Rule    sol89    1989    only    -    Aug    12    12:05:00s -0:05:00 -
  75824. +Rule    sol89    1989    only    -    Aug    13    12:04:50s -0:04:50 -
  75825. +Rule    sol89    1989    only    -    Aug    14    12:04:40s -0:04:40 -
  75826. +Rule    sol89    1989    only    -    Aug    15    12:04:30s -0:04:30 -
  75827. +Rule    sol89    1989    only    -    Aug    16    12:04:15s -0:04:15 -
  75828. +Rule    sol89    1989    only    -    Aug    17    12:04:05s -0:04:05 -
  75829. +Rule    sol89    1989    only    -    Aug    18    12:03:50s -0:03:50 -
  75830. +Rule    sol89    1989    only    -    Aug    19    12:03:35s -0:03:35 -
  75831. +Rule    sol89    1989    only    -    Aug    20    12:03:25s -0:03:25 -
  75832. +Rule    sol89    1989    only    -    Aug    21    12:03:10s -0:03:10 -
  75833. +Rule    sol89    1989    only    -    Aug    22    12:02:55s -0:02:55 -
  75834. +Rule    sol89    1989    only    -    Aug    23    12:02:40s -0:02:40 -
  75835. +Rule    sol89    1989    only    -    Aug    24    12:02:20s -0:02:20 -
  75836. +Rule    sol89    1989    only    -    Aug    25    12:02:05s -0:02:05 -
  75837. +Rule    sol89    1989    only    -    Aug    26    12:01:50s -0:01:50 -
  75838. +Rule    sol89    1989    only    -    Aug    27    12:01:30s -0:01:30 -
  75839. +Rule    sol89    1989    only    -    Aug    28    12:01:15s -0:01:15 -
  75840. +Rule    sol89    1989    only    -    Aug    29    12:00:55s -0:00:55 -
  75841. +Rule    sol89    1989    only    -    Aug    30    12:00:40s -0:00:40 -
  75842. +Rule    sol89    1989    only    -    Aug    31    12:00:20s -0:00:20 -
  75843. +Rule    sol89    1989    only    -    Sep    1    12:00:00s 0:00:00 -
  75844. +Rule    sol89    1989    only    -    Sep    2    11:59:45s 0:00:15 -
  75845. +Rule    sol89    1989    only    -    Sep    3    11:59:25s 0:00:35 -
  75846. +Rule    sol89    1989    only    -    Sep    4    11:59:05s 0:00:55 -
  75847. +Rule    sol89    1989    only    -    Sep    5    11:58:45s 0:01:15 -
  75848. +Rule    sol89    1989    only    -    Sep    6    11:58:25s 0:01:35 -
  75849. +Rule    sol89    1989    only    -    Sep    7    11:58:05s 0:01:55 -
  75850. +Rule    sol89    1989    only    -    Sep    8    11:57:45s 0:02:15 -
  75851. +Rule    sol89    1989    only    -    Sep    9    11:57:20s 0:02:40 -
  75852. +Rule    sol89    1989    only    -    Sep    10    11:57:00s 0:03:00 -
  75853. +Rule    sol89    1989    only    -    Sep    11    11:56:40s 0:03:20 -
  75854. +Rule    sol89    1989    only    -    Sep    12    11:56:20s 0:03:40 -
  75855. +Rule    sol89    1989    only    -    Sep    13    11:56:00s 0:04:00 -
  75856. +Rule    sol89    1989    only    -    Sep    14    11:55:35s 0:04:25 -
  75857. +Rule    sol89    1989    only    -    Sep    15    11:55:15s 0:04:45 -
  75858. +Rule    sol89    1989    only    -    Sep    16    11:54:55s 0:05:05 -
  75859. +Rule    sol89    1989    only    -    Sep    17    11:54:35s 0:05:25 -
  75860. +Rule    sol89    1989    only    -    Sep    18    11:54:10s 0:05:50 -
  75861. +Rule    sol89    1989    only    -    Sep    19    11:53:50s 0:06:10 -
  75862. +Rule    sol89    1989    only    -    Sep    20    11:53:30s 0:06:30 -
  75863. +Rule    sol89    1989    only    -    Sep    21    11:53:10s 0:06:50 -
  75864. +Rule    sol89    1989    only    -    Sep    22    11:52:45s 0:07:15 -
  75865. +Rule    sol89    1989    only    -    Sep    23    11:52:25s 0:07:35 -
  75866. +Rule    sol89    1989    only    -    Sep    24    11:52:05s 0:07:55 -
  75867. +Rule    sol89    1989    only    -    Sep    25    11:51:45s 0:08:15 -
  75868. +Rule    sol89    1989    only    -    Sep    26    11:51:25s 0:08:35 -
  75869. +Rule    sol89    1989    only    -    Sep    27    11:51:05s 0:08:55 -
  75870. +Rule    sol89    1989    only    -    Sep    28    11:50:40s 0:09:20 -
  75871. +Rule    sol89    1989    only    -    Sep    29    11:50:20s 0:09:40 -
  75872. +Rule    sol89    1989    only    -    Sep    30    11:50:00s 0:10:00 -
  75873. +Rule    sol89    1989    only    -    Oct    1    11:49:45s 0:10:15 -
  75874. +Rule    sol89    1989    only    -    Oct    2    11:49:25s 0:10:35 -
  75875. +Rule    sol89    1989    only    -    Oct    3    11:49:05s 0:10:55 -
  75876. +Rule    sol89    1989    only    -    Oct    4    11:48:45s 0:11:15 -
  75877. +Rule    sol89    1989    only    -    Oct    5    11:48:30s 0:11:30 -
  75878. +Rule    sol89    1989    only    -    Oct    6    11:48:10s 0:11:50 -
  75879. +Rule    sol89    1989    only    -    Oct    7    11:47:50s 0:12:10 -
  75880. +Rule    sol89    1989    only    -    Oct    8    11:47:35s 0:12:25 -
  75881. +Rule    sol89    1989    only    -    Oct    9    11:47:20s 0:12:40 -
  75882. +Rule    sol89    1989    only    -    Oct    10    11:47:00s 0:13:00 -
  75883. +Rule    sol89    1989    only    -    Oct    11    11:46:45s 0:13:15 -
  75884. +Rule    sol89    1989    only    -    Oct    12    11:46:30s 0:13:30 -
  75885. +Rule    sol89    1989    only    -    Oct    13    11:46:15s 0:13:45 -
  75886. +Rule    sol89    1989    only    -    Oct    14    11:46:00s 0:14:00 -
  75887. +Rule    sol89    1989    only    -    Oct    15    11:45:50s 0:14:10 -
  75888. +Rule    sol89    1989    only    -    Oct    16    11:45:35s 0:14:25 -
  75889. +Rule    sol89    1989    only    -    Oct    17    11:45:20s 0:14:40 -
  75890. +Rule    sol89    1989    only    -    Oct    18    11:45:10s 0:14:50 -
  75891. +Rule    sol89    1989    only    -    Oct    19    11:45:00s 0:15:00 -
  75892. +Rule    sol89    1989    only    -    Oct    20    11:44:50s 0:15:10 -
  75893. +Rule    sol89    1989    only    -    Oct    21    11:44:40s 0:15:20 -
  75894. +Rule    sol89    1989    only    -    Oct    22    11:44:30s 0:15:30 -
  75895. +Rule    sol89    1989    only    -    Oct    23    11:44:20s 0:15:40 -
  75896. +Rule    sol89    1989    only    -    Oct    24    11:44:10s 0:15:50 -
  75897. +Rule    sol89    1989    only    -    Oct    25    11:44:05s 0:15:55 -
  75898. +Rule    sol89    1989    only    -    Oct    26    11:44:00s 0:16:00 -
  75899. +Rule    sol89    1989    only    -    Oct    27    11:43:50s 0:16:10 -
  75900. +Rule    sol89    1989    only    -    Oct    28    11:43:45s 0:16:15 -
  75901. +Rule    sol89    1989    only    -    Oct    29    11:43:40s 0:16:20 -
  75902. +Rule    sol89    1989    only    -    Oct    30    11:43:40s 0:16:20 -
  75903. +Rule    sol89    1989    only    -    Oct    31    11:43:35s 0:16:25 -
  75904. +Rule    sol89    1989    only    -    Nov    1    11:43:35s 0:16:25 -
  75905. +Rule    sol89    1989    only    -    Nov    2    11:43:35s 0:16:25 -
  75906. +Rule    sol89    1989    only    -    Nov    3    11:43:30s 0:16:30 -
  75907. +Rule    sol89    1989    only    -    Nov    4    11:43:35s 0:16:25 -
  75908. +Rule    sol89    1989    only    -    Nov    5    11:43:35s 0:16:25 -
  75909. +Rule    sol89    1989    only    -    Nov    6    11:43:35s 0:16:25 -
  75910. +Rule    sol89    1989    only    -    Nov    7    11:43:40s 0:16:20 -
  75911. +Rule    sol89    1989    only    -    Nov    8    11:43:45s 0:16:15 -
  75912. +Rule    sol89    1989    only    -    Nov    9    11:43:50s 0:16:10 -
  75913. +Rule    sol89    1989    only    -    Nov    10    11:43:55s 0:16:05 -
  75914. +Rule    sol89    1989    only    -    Nov    11    11:44:00s 0:16:00 -
  75915. +Rule    sol89    1989    only    -    Nov    12    11:44:05s 0:15:55 -
  75916. +Rule    sol89    1989    only    -    Nov    13    11:44:15s 0:15:45 -
  75917. +Rule    sol89    1989    only    -    Nov    14    11:44:25s 0:15:35 -
  75918. +Rule    sol89    1989    only    -    Nov    15    11:44:35s 0:15:25 -
  75919. +Rule    sol89    1989    only    -    Nov    16    11:44:45s 0:15:15 -
  75920. +Rule    sol89    1989    only    -    Nov    17    11:44:55s 0:15:05 -
  75921. +Rule    sol89    1989    only    -    Nov    18    11:45:10s 0:14:50 -
  75922. +Rule    sol89    1989    only    -    Nov    19    11:45:20s 0:14:40 -
  75923. +Rule    sol89    1989    only    -    Nov    20    11:45:35s 0:14:25 -
  75924. +Rule    sol89    1989    only    -    Nov    21    11:45:50s 0:14:10 -
  75925. +Rule    sol89    1989    only    -    Nov    22    11:46:05s 0:13:55 -
  75926. +Rule    sol89    1989    only    -    Nov    23    11:46:25s 0:13:35 -
  75927. +Rule    sol89    1989    only    -    Nov    24    11:46:40s 0:13:20 -
  75928. +Rule    sol89    1989    only    -    Nov    25    11:47:00s 0:13:00 -
  75929. +Rule    sol89    1989    only    -    Nov    26    11:47:20s 0:12:40 -
  75930. +Rule    sol89    1989    only    -    Nov    27    11:47:35s 0:12:25 -
  75931. +Rule    sol89    1989    only    -    Nov    28    11:47:55s 0:12:05 -
  75932. +Rule    sol89    1989    only    -    Nov    29    11:48:20s 0:11:40 -
  75933. +Rule    sol89    1989    only    -    Nov    30    11:48:40s 0:11:20 -
  75934. +Rule    sol89    1989    only    -    Dec    1    11:49:00s 0:11:00 -
  75935. +Rule    sol89    1989    only    -    Dec    2    11:49:25s 0:10:35 -
  75936. +Rule    sol89    1989    only    -    Dec    3    11:49:50s 0:10:10 -
  75937. +Rule    sol89    1989    only    -    Dec    4    11:50:15s 0:09:45 -
  75938. +Rule    sol89    1989    only    -    Dec    5    11:50:35s 0:09:25 -
  75939. +Rule    sol89    1989    only    -    Dec    6    11:51:00s 0:09:00 -
  75940. +Rule    sol89    1989    only    -    Dec    7    11:51:30s 0:08:30 -
  75941. +Rule    sol89    1989    only    -    Dec    8    11:51:55s 0:08:05 -
  75942. +Rule    sol89    1989    only    -    Dec    9    11:52:20s 0:07:40 -
  75943. +Rule    sol89    1989    only    -    Dec    10    11:52:50s 0:07:10 -
  75944. +Rule    sol89    1989    only    -    Dec    11    11:53:15s 0:06:45 -
  75945. +Rule    sol89    1989    only    -    Dec    12    11:53:45s 0:06:15 -
  75946. +Rule    sol89    1989    only    -    Dec    13    11:54:10s 0:05:50 -
  75947. +Rule    sol89    1989    only    -    Dec    14    11:54:40s 0:05:20 -
  75948. +Rule    sol89    1989    only    -    Dec    15    11:55:10s 0:04:50 -
  75949. +Rule    sol89    1989    only    -    Dec    16    11:55:40s 0:04:20 -
  75950. +Rule    sol89    1989    only    -    Dec    17    11:56:05s 0:03:55 -
  75951. +Rule    sol89    1989    only    -    Dec    18    11:56:35s 0:03:25 -
  75952. +Rule    sol89    1989    only    -    Dec    19    11:57:05s 0:02:55 -
  75953. +Rule    sol89    1989    only    -    Dec    20    11:57:35s 0:02:25 -
  75954. +Rule    sol89    1989    only    -    Dec    21    11:58:05s 0:01:55 -
  75955. +Rule    sol89    1989    only    -    Dec    22    11:58:35s 0:01:25 -
  75956. +Rule    sol89    1989    only    -    Dec    23    11:59:05s 0:00:55 -
  75957. +Rule    sol89    1989    only    -    Dec    24    11:59:35s 0:00:25 -
  75958. +Rule    sol89    1989    only    -    Dec    25    12:00:05s -0:00:05 -
  75959. +Rule    sol89    1989    only    -    Dec    26    12:00:35s -0:00:35 -
  75960. +Rule    sol89    1989    only    -    Dec    27    12:01:05s -0:01:05 -
  75961. +Rule    sol89    1989    only    -    Dec    28    12:01:35s -0:01:35 -
  75962. +Rule    sol89    1989    only    -    Dec    29    12:02:00s -0:02:00 -
  75963. +Rule    sol89    1989    only    -    Dec    30    12:02:30s -0:02:30 -
  75964. +Rule    sol89    1989    only    -    Dec    31    12:03:00s -0:03:00 -
  75965. +
  75966. +# Riyadh is at about 46 degrees 46 minutes East:  3 hrs, 7 mins, 4 secs
  75967. +# Before and after 1989, we'll operate on local mean solar time.
  75968. +
  75969. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  75970. +Zone    Mideast/Riyadh89    3:07:04    -        ??    1989
  75971. +                3:07:04    sol89        ??    1990
  75972. +                3:07:04    -        ??
  75973. diff -rup --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/southamerica amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/southamerica
  75974. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/southamerica    Wed Dec 31 17:00:00 1969
  75975. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/southamerica    Sat Sep 28 00:00:00 1996
  75976. @@ -0,0 +1,103 @@
  75977. +# @(#)southamerica    4.3
  75978. +
  75979. +# From Guy Harris:
  75980. +# From Official Airline Guide - Worldwide Edition (1987).  Countries not
  75981. +# listed here do not observe DST, according to the OAG.  Time zone names
  75982. +# are pure inventions, and none are supplied for countries not observing
  75983. +# DST; updates from natives would be appreciated.  The times that DST
  75984. +# starts and ends are based on the assumption that they switch a 2AM just
  75985. +# as everybody else does.
  75986. +
  75987. +###############################################################################
  75988. +
  75989. +# Brazil
  75990. +
  75991. +# From Guy Harris:
  75992. +# The OAG lists October 25, 1987 and February 12, 1988 as the starting and
  75993. +# ending dates, giving them as "estimated date(s) based on previous year".  We
  75994. +# infer a rule here from one example, always a dangerous practice....  Yes,
  75995. +# they really do switch on Saturday, according to the OAG.
  75996. +# "Brazil/Acre" is for the Territory of Acre; "Brazil/DeNoronha" is for
  75997. +# Fernando De Noronha.
  75998. +
  75999. +# From Bob Devine (January 28, 1988):
  76000. +# The only information I found is that there was no DST up to 1985.
  76001. +# But there was some before 1952!
  76002. +
  76003. +# From U. S. Naval Observatory (January 16, 1989):
  76004. +# BRAZIL     WEST     5 H  BEHIND UTC    TERRITORY OF ACRE
  76005. +# BRAZIL     WEST     4 H  BEHIND UTC    ACRE OCT 23, '88-FEB 11,
  76006. +# BRAZIL                                 '89 (ESTIMATED)
  76007. +# BRAZIL     CENTRAL  4 H  BEHIND UTC    MANAUS
  76008. +# BRAZIL     CENTRAL  3 H  BEHIND UTC    MANAUS OCT 23, '88-FEB 11,
  76009. +# BRAZIL     CENTRAL                     '89 (ESTIMATED)
  76010. +# BRAZIL     EAST     3 H  BEHIND UTC    COASTAL STATES, RIO, SAO
  76011. +# BRAZIL     EAST                        PAULO, BRASILIA
  76012. +# BRAZIL     EAST     2 H  BEHIND UTC    COASTAL STATES, RIO, SAO
  76013. +# BRAZIL                                 PAULO, BRASILIA OCT 23,
  76014. +# BRAZIL                                 '88-FEB 11, '89
  76015. +# BRAZIL                                 (ESTIMATED)
  76016. +# BRAZIL              2 H  BEHIND UTC    ATLANTIC ISLANDS, FERNANDO
  76017. +# BRAZIL                                 DE NORONHA
  76018. +# BRAZIL              1 H  BEHIND UTC    OCT 23, '88-FEB 11, '89
  76019. +# BRAZIL                                 (ESTIMATED)
  76020. +# BRAZIL              3 H  BEHIND UTC    FOR MOST MAJOR AIRPORTS.
  76021. +
  76022. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  76023. +Rule    Brazil    1987    max    -    Feb    Sat<=14    2:00    0    S
  76024. +Rule    Brazil    1987    max    -    Oct    Sat<=28    2:00    1:00    D
  76025. +
  76026. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  76027. +Zone    Brazil/East        -3:00    Brazil        E%sT
  76028. +Zone    Brazil/West        -4:00    Brazil        W%sT
  76029. +Zone    Brazil/Acre        -5:00    Brazil        A%sT
  76030. +Zone    Brazil/DeNoronha    -2:00    Brazil        F%sT
  76031. +
  76032. +###############################################################################
  76033. +
  76034. +# Chile
  76035. +
  76036. +# From Guy Harris:
  76037. +# The OAG lists October 11, 1987 and March 12, 1988 as the starting and
  76038. +# ending dates, giving them as "estimated date(s) based on previous year."
  76039. +
  76040. +# From Bob Devine (January 28, 1988):
  76041. +# Chile has had 2nd Sunday in October to 2nd Sunday in March DST since 1977.
  76042. +# Switch is at midnight. OAG is right.
  76043. +
  76044. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  76045. +Rule    Chile    1977    max    -    Oct    Sun>=8    0:00    1:00    D
  76046. +Rule    Chile    1978    max    -    Mar    Sun>=8    0:00    0    S
  76047. +
  76048. +# Zone    NAME            GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  76049. +Zone    Chile/Continental    -4:00    Chile        C%sT
  76050. +Zone    Chile/EasterIsland    -6:00    Chile        E%sT
  76051. +
  76052. +###############################################################################
  76053. +
  76054. +# Paraguay
  76055. +
  76056. +# From Bob Devine (January 28, 1988):
  76057. +# Paraguay: First day in October to last in March.  Midnight switch??
  76058. +# Since 1980.
  76059. +
  76060. +# From U. S. Naval Observatory (January 19, 1989):
  76061. +# PARAGUAY            4 H  BEHIND UTC
  76062. +# PARAGUAY            3 H  BEHIND UTC    OCT 1, '88-MAR 31, '89
  76063. +
  76064. +# From Arthur David Olson (January 21, 1989):
  76065. +# Still don't know time of day when switch occurs.  Punt.
  76066. +
  76067. +###############################################################################
  76068. +
  76069. +# Argentina
  76070. +
  76071. +# From Bob Devine (January 28, 1988):
  76072. +# Argentina: first Sunday in October to first Sunday in April since 1976.
  76073. +# Double Summer time from 1969 to 1974.  Switches at midnight.
  76074. +
  76075. +# From U. S. Naval Observatory (January 19, 19889):
  76076. +# ARGENTINA           3 H BEHIND   UTC
  76077. +
  76078. +# From Arthur David Olson (January 21, 1989):
  76079. +# OAG, USNO and Bob have different data.  Punt.
  76080. diff -rup --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/systemv amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/systemv
  76081. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/systemv    Wed Dec 31 17:00:00 1969
  76082. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/systemv    Sat Sep 28 00:00:00 1996
  76083. @@ -0,0 +1,35 @@
  76084. +# @(#)systemv    4.1
  76085. +
  76086. +# Old rules, should the need arise.
  76087. +# No attempt is made to handle Newfoundland, since it cannot be expressed
  76088. +# using the System V "TZ" scheme (half-hour offset), or anything outside
  76089. +# North America (no support for non-standard DST start/end dates), nor
  76090. +# the change in the DST rules in the US in 1987 (can't split between
  76091. +# Canada, with no changes, and the US)
  76092. +#
  76093. +# Be sure to compile this *without* leap second correction for true conformance.
  76094. +
  76095. +# Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  76096. +Rule    SystemV    min    1973    -    Apr    lastSun    2:00    1:00    D
  76097. +Rule    SystemV    min    1973    -    Oct    lastSun    2:00    0    S
  76098. +Rule    SystemV    1974    only    -    Jan    6    2:00    1:00    D
  76099. +Rule    SystemV    1974    only    -    Nov    lastSun    2:00    0    S
  76100. +Rule    SystemV    1975    only    -    Feb    23    2:00    1:00    D
  76101. +Rule    SystemV    1975    only    -    Oct    lastSun    2:00    0    S
  76102. +Rule    SystemV    1976    max    -    Apr    lastSun    2:00    1:00    D
  76103. +Rule    SystemV    1976    max    -    Oct    lastSun    2:00    0    S
  76104. +
  76105. +# Zone    NAME        GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  76106. +Zone    SystemV/AST4ADT    -4:00    SystemV        A%sT
  76107. +Zone    SystemV/EST5EDT    -5:00    SystemV        E%sT
  76108. +Zone    SystemV/CST6CDT    -6:00    SystemV        C%sT
  76109. +Zone    SystemV/MST7MDT    -7:00    SystemV        M%sT
  76110. +Zone    SystemV/PST8PDT    -8:00    SystemV        P%sT
  76111. +Zone    SystemV/YST9YDT    -9:00    SystemV        Y%sT
  76112. +Zone    SystemV/AST4    -4:00    -        AST
  76113. +Zone    SystemV/EST5    -5:00    -        EST
  76114. +Zone    SystemV/CST6    -6:00    -        CST
  76115. +Zone    SystemV/MST7    -7:00    -        MST
  76116. +Zone    SystemV/PST8    -8:00    -        PST
  76117. +Zone    SystemV/YST9    -9:00    -        YST
  76118. +Zone    SystemV/HST10    -10:00    -        HST
  76119. diff -rup --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/usno1988 amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/usno1988
  76120. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/usno1988    Wed Dec 31 17:00:00 1969
  76121. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/usno1988    Sat Sep 28 00:00:00 1996
  76122. @@ -0,0 +1,111 @@
  76123. +# @(#)usno1988    1.1
  76124. +#
  76125. +# From Arthur David Olson (January 19, 1989):
  76126. +#
  76127. +# Here's some United States Naval Observatory time zone data from
  76128. +# February 1988.  It's here mostly to convince you that the USNO has indeed
  76129. +# been updating its files (see its 1989 data elsewhere).
  76130. +#
  76131. +ANDORRA             1 H AHEAD OF UTC
  76132. +ARGENTINA           3 H BEHIND   UTC
  76133. +BRASIL   WEST       5 H BEHIND UTC        (CRUZEIRO DO SUL) 
  76134. +BRASIL   CENTRAL    4 H BEHIND UTC              (MANAUS)
  76135. +BRASIL   EAST       3 H BEHIND UTC   COASTAL STATES, RIO, SP, BRASILIA
  76136. +BRASIL              2 H BEHIND UTC   ATLANTIC ISLANDS 
  76137. +BRAZIL              5 H BEHIND UTC   WEST (CRUZEIRO DO SUL) 
  76138. +BRAZIL              4 H BEHIND UTC   CENTRAL    (MANAUS)
  76139. +BRAZIL              3 H BEHIND UTC   COASTAL STATES, RIO, SP, BRASILIA
  76140. +BRAZIL              3 H BEHIND UTC   FOR MOST MAJOR AIRPORTS. 
  76141. +BRAZIL              2 H BEHIND UTC   ATLANTIC ISLANDS 
  76142. +BULGARIA            2 H AHEAD OF UTC WINTER 
  76143. +BULGARIA            3 H AHEAD OF UTC SUMMER MAR31 - SEP 85, 0100 LOCAL
  76144. +CHINA               8 H AHEAD OF UTC; ALL OF CHINA, INCL TAIWAN 
  76145. +CUBA                5 H BEHIND UTC IN WINTER
  76146. +CUBA                4 H BEHIND UTC MAY 8 - OCT 8
  76147. +CYPRUS              2 H AHEAD UTC IN WINTER 
  76148. +CYPRUS              3 H AHEAD UTC MAR 25 - SEP 30 
  76149. +DENMARK             1 H AHEAD UTC IN WINTER 
  76150. +DENMARK             2 H AHEAD UTC MAR 31 - SEP 30  , 0200 LOCAL 
  76151. +DENMK. FAEROE IS    1 H AHEAD UTC MAR 31 - SEP 30  , 0200 LOCAL 
  76152. +EGYPT               2 H AHEAD UTC 
  76153. +EGYPT               3 H AHEAD UTC SUMMER (AFTER RAMADAN)
  76154. +ENGLAND             ON UTC IN WINTER; WALES, SCOTLAND, N.I., CH.IS. 
  76155. +ENGLAND             1 H AHEAD OF UTC; SUMMER TIL 28 OCT 0200 LOCAL
  76156. +FINLAND             2 H AHEAD OF UTC IN WINTER
  76157. +FINLAND             3 H AHEAD OF UTC MAR 25 - SEP 30  
  76158. +FRANCE              1 H AHEAD OF UTC IN WINTER
  76159. +FRANCE              2 H AHEAD OF UTC MAR 31 - SEP 30 , 0100 LOCAL 
  76160. +GREECE              2 H AHEAD OF UTC IN WINTER
  76161. +GREECE              3 H AHEAD OF UTC IN SUMMER EFF. 31MAR85 02/03 LOCAL 
  76162. +GREECE              3 H AHEAD OF UTC MAR 25 - SEP 30
  76163. +GREENLAND           4 H BEHIND UTC  IN THULE AIRBASE YEAR ROUND 
  76164. +GREENLAND           3 H BEHIND UTC  IN WINTER AT SONDRESTROM
  76165. +GREENLAND           2 H BEHIND UTC  30 MAR - 30 SEP 2200 LOCAL AT -"- 
  76166. +GREENLAND           2 H BEHIND UTC  AROUND SCORESBY SUND
  76167. +ICELAND             ON UTC
  76168. +IRAN                3.5H AHEAD OF UTC 
  76169. +IRELAND             ON UTC IN WINTER
  76170. +IRELAND             1 H AHEAD OF UTC MAR 31 - OCT 23  0200 LOCAL
  76171. +ITALY               1 H AHEAD OF UTC IN WINTER
  76172. +ITALY               2 H AHEAD OF UTC MAR 31 - SEP 30, 0030 LOCAL
  76173. +JAMAICA             5 H BEHIND UTC IN WINTER
  76174. +JAMAICA             4 H BEHIND UTC APR 29 - OCT 29
  76175. +LIBYA               2 H AHEAD OF UTC
  76176. +MEXICO BAJA CAL N   8 H BEHIND UTC IN WINTER; NORTH BAJA CAL, TIJUANA 
  76177. +MEXICO BAJA CAL N   7 H BEHIND UTC APR 29 - OCT 29
  76178. +MEXICO BAJA CAL S   7 H BEHIND UTC ALL YEAR; MAZATLAN 
  76179. +MEXICO CENTRAL      6 H BEHIND UTC ALL YEAR; MEXICO CITY
  76180. +MONACO              1 H AHEAD UTC IN WINTER 
  76181. +MONACO              2 H AHEAD UTC MAR 25 - SEP30
  76182. +PARAGUAY            4 H BEHIND UTC IN WINTER
  76183. +PARAGUAY            3 H BEHIND UTC SEP 30 - MAR 30
  76184. +POLAND              1 H AHEAD OF UTC IN WINTER
  76185. +POLAND              2 H AHEAD OF UTC MAR 24 - SEP     0200 LOCAL
  76186. +PORTUGAL            ON UTC IN WINTER
  76187. +PORTUGAL            1 H AHEAD OF UTC IN SUMMER MAR 31 - SEP 29   0100 LOCAL 
  76188. +PORTUGAL AZORES     1 H BEHIND UTC IN WINTER
  76189. +PORTUGAL AZORES     ON UTC IN SUMMER MAR 31 - SEP 29
  76190. +PORTUGAL MADEIRA    ON UTC ALL YEAR;
  76191. +ROMANIA             2 H AHEAD OF UTC IN WINTER
  76192. +ROMANIA             3 H AHEAD OF UTC APR 3 - SEP 24 
  76193. +SCOTLAND            SEE ENGLAND 
  76194. +SWITZERLAND         1 H AHEAD OF UTC IN WINTER
  76195. +SWITZERLAND         2 H AHEAD OF UTC MAR 31 - SEP 30  0200 LOCAL
  76196. +TURKEY              3 H AHEAD OF UTC
  76197. +USA   EASTERN       5 H BEHIND UTC IN WINTER; NEW YORK, WASHINGTON
  76198. +USA   EASTERN       4 H BEHIND UTC APR 29 - OCT 29
  76199. +USA   CENTRAL       6 H BEHIND UTC IN WINTER; CHICAGO, HOUSTON
  76200. +USA   CENTRAL       5 H BEHIND UTC APR 29 - OCT 29
  76201. +USA   MOUNTAIN      7 H BEHIND UTC IN WINTER; DENVER
  76202. +USA   MOUNTAIN      6 H BEHIND UTC APR 29 - OCT 29
  76203. +USA   PACIFIC       8 H BEHIND UTC IN WINTER; L.A., SAN FRANCISCO 
  76204. +USA   PACIFIC       7 H BEHIND UTC APR 29 - OCT 29
  76205. +USA   ALASKA STD    9 H BEHIND UTC IN WINTER; MOST OF ALASKA     (AKST) 
  76206. +USA   ALASKA STD    8 H BEHIND UTC APR 29 - OCT 29               (AKDT) 
  76207. +USA   ALEUTIAN     10 H BEHIND UTC IN WINTER; ISLANDS WEST OF 170W
  76208. +USA   - " -         9 H BEHIND UTC APR 29 - OCT 29
  76209. +USA   HAWAII       10 H BEHIND UTC ALL YEAR;
  76210. +USA   BERING       11 H BEHIND UTC ALL YEAR; SAMOA, MIDWAY
  76211. +USSR WEST EUROP     3 H AHEAD OF UTC IN WINTER; LENINGRAD, MOSCOW 
  76212. +USSR WEST EUROP     4 H AHEAD OF UTC APR 1 - SEP 30 
  76213. +USSR CENTRAL EUR    4 H AHEAD OF UTC IN WINTER; ROSTOV, BAKU
  76214. +USSR CENTRAL EUR    5 H AHEAD OF UTC APR 1 - SEP 30 
  76215. +USSR EAST EUROP     5 H AHEAD OF UTC IN WINTER; SVERDLOVSK
  76216. +USSR EAST EUROP     6 H AHEAD OF UTC APR 1 - SEP 30 
  76217. +USSR WEST SIBERIAN  6 H AHEAD OF UTC IN WINTER; TASHKENT, ALMA ATA
  76218. +USSR WEST SIBERIAN  7 H AHEAD OF UTC APR 1 - SEP 30 
  76219. +USSR WEST-CENTRAL   7 H AHEAD OF UTC IN WINTER; NOVOSIBIRSK 
  76220. +USSR WEST-CENTRAL   8 H AHEAD OF UTC APR 1 - SEP 30 
  76221. +USSR WEST-CENTRAL   8 H AHEAD OF UTC IN WINTER; IRKUTSK 
  76222. +USSR WEST-CENTRAL   9 H AHEAD OF UTC APR 1 - SEP 30 
  76223. +USSR CENTRAL SIB    9 H AHEAD OF UTC IN WINTER; YAKUTSK 
  76224. +USSR CENTRAL SIB   10 H AHEAD OF UTC APR 1 - SEP 30 
  76225. +USSR CENTRAL SIB   10 H AHEAD OF UTC IN WINTER; VLADIVOSTOK 
  76226. +USSR CENTRAL SIB   11 H AHEAD OF UTC APR 1 - SEP 30 
  76227. +USSR EAST SIBERIA  11 H AHEAD OF UTC IN WINTER; MAGADAN 
  76228. +USSR EAST SIBERIA  12 H AHEAD OF UTC APR 1 - SEP 30 
  76229. +USSR EAST SIBERIA  12 H AHEAD OF UTC IN WINTER; PETROPAVLOVSK 
  76230. +USSR EAST SIBERIA  13 H AHEAD OF UTC APR 1 - SEP 30 
  76231. +USSR EAST SIBERIA  13 H AHEAD OF UTC IN WINTER; UELEN 
  76232. +USSR EAST SIBERIA  14 H AHEAD OF UTC APR 1 - SEP 30 
  76233. +WALES               SEE ENGLAND 
  76234. diff -rup --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/usno1989 amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/usno1989
  76235. --- baseline/fsf/emacs/unixlib/src/zoneinfo/datfiles/usno1989    Wed Dec 31 17:00:00 1969
  76236. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/datfiles/usno1989    Sat Sep 28 00:00:00 1996
  76237. @@ -0,0 +1,452 @@
  76238. +# @(#)usno1989    1.3
  76239. +#
  76240. +# From Arthur David Olson (January 19, 1989):
  76241. +# 
  76242. +# Here's time zone information from the United States Naval Observatory;
  76243. +# no corrections have been made, and there are some obvious challenges.
  76244. +# The USNO warns:
  76245. +#    DUE TO FREQUENT CHANGES IN THE LOCAL LAWS GOVERNING DAYLIGHT
  76246. +#    SAVING TIME, WE CANNOT GUARANTEE THE ACCURACY OF THIS
  76247. +#    INFORMATION.  PLEASE ALERT US TO ANY DISCREPANCY YOU MAY
  76248. +#    DISCOVER.
  76249. +#
  76250. +AFGHANISTAN         4.5H AHEAD OF UTC
  76251. +ALBANIA             1 H  AHEAD OF UTC
  76252. +ALBANIA             2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76253. +ALBANIA                                (ESTIMATED)
  76254. +ALGERIA             1 H  AHEAD OF UTC
  76255. +AMERICAN SAMOA     11 H  BEHIND UTC
  76256. +ANDORRA             1 H  AHEAD OF UTC
  76257. +ANDORRA             2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76258. +ANDORRA                                (ESTIMATED)
  76259. +ANGOLA              1 H  AHEAD OF UTC
  76260. +ARGENTINA           3 H  BEHIND UTC
  76261. +ARUBA               4 H  BEHIND UTC    ALSO BONAIRE, CURACAO,
  76262. +ARUBA                                  ST.MAARTEN
  76263. +AUSTRALIA  WEST     8 H  AHEAD OF UTC  PERTH, EXMOUTH
  76264. +AUSTRALIA  N.T.     9.5H AHEAD OF UTC  DARWIN  NO ADVANCED TIME
  76265. +AUSTRALIA  N.T.                                IN SUMMER
  76266. +AUSTRALIA  SOUTH    9.5H AHEAD OF UTC  ADELAIDE
  76267. +AUSTRALIA                              INCLUDING BROKEN HILL, NSW
  76268. +AUSTRALIA  SOUTH   10.5H AHEAD OF UTC  ADELAIDE OCT 30, '88-MAR
  76269. +AUSTRALIA  SOUTH                       18, '89 INCLUDING BROKEN
  76270. +AUSTRIALIA SOUTH                       HILL, NSW
  76271. +AUSTRALIA  QUEENL  10 H  AHEAD OF UTC
  76272. +AUSTRALIA  NSW     10 H  AHEAD OF UTC  SYDNEY
  76273. +AUSTRALIA  NSW     11 H  AHEAD OF UTC  SYDNEY OCT 30, '88-MAR 18,
  76274. +AUSTRALIA  NSW                         '89
  76275. +AUSTRALIA  TASM.   10 H  AHEAD OF UTC  HOBART
  76276. +AUSTRALIA  TASM.   11 H  AHEAD OF UTC  HOBART OCT 30, '88-MAR 18,
  76277. +AUSTRALIA  TASM.                       '89
  76278. +AUSTRIA             1 H  AHEAD OF UTC
  76279. +AUSTRIA             2 H  AHEAD OF UTC  MAR 27 - SEPT 24
  76280. +AZORES                   SEE PORTUGAL
  76281. +BAHAMAS             5 H  BEHIND UTC    EXCLUDING TURKS AND CAICOS
  76282. +BAHAMAS                                ISLANDS)
  76283. +BAHAMAS             4 H  BEHIND UTC    APR 3 - OCT 29 (SAME
  76284. +BAHAMAS                                EXCLUSION)
  76285. +BAHRAIN             3 H  AHEAD OF UTC
  76286. +BANGLADESH          6 H  AHEAD OF UTC
  76287. +BARBADOS            4 H  BEHIND UTC
  76288. +BELGIUM             1 H  AHEAD OF UTC
  76289. +BELGIUM             2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76290. +BELIZE              6 H  BEHIND UTC
  76291. +BENIN PEOPLES REP   1 H  AHEAD OF UTC  DAHOMEY
  76292. +BERMUDA             4 H  BEHIND UTC
  76293. +BERMUDA             3 H  BEHIND UTC    APR 3 - OCT 29
  76294. +BHUTAN              6 H  AHEAD OF UTC
  76295. +BOLIVIA             4 H  BEHIND UTC
  76296. +BONAIRE             4 H  BEHIND UTC    ALSO ARUBA,CURACAO,
  76297. +BONAIRE                                ST.MAARTEN, SABA
  76298. +BOTSWANA            2 H  AHEAD OF UTC
  76299. +BRAZIL     WEST     5 H  BEHIND UTC    TERRITORY OF ACRE
  76300. +BRAZIL     WEST     4 H  BEHIND UTC    ACRE OCT 23, '88-FEB 11,
  76301. +BRAZIL                                 '89 (ESTIMATED)
  76302. +BRAZIL     CENTRAL  4 H  BEHIND UTC    MANAUS
  76303. +BRAZIL     CENTRAL  3 H  BEHIND UTC    MANAUS OCT 23, '88-FEB 11,
  76304. +BRAZIL     CENTRAL                     '89 (ESTIMATED)
  76305. +BRAZIL     EAST     3 H  BEHIND UTC    COASTAL STATES, RIO, SAO
  76306. +BRAZIL     EAST                        PAULO, BRASILIA
  76307. +BRAZIL     EAST     2 H  BEHIND UTC    COASTAL STATES, RIO, SAO
  76308. +BRAZIL                                 PAULO, BRASILIA OCT 23,
  76309. +BRAZIL                                 '88-FEB 11, '89
  76310. +BRAZIL                                 (ESTIMATED)
  76311. +BRAZIL              2 H  BEHIND UTC    ATLANTIC ISLANDS, FERNANDO
  76312. +BRAZIL                                 DE NORONHA
  76313. +BRAZIL              1 H  BEHIND UTC    OCT 23, '88-FEB 11, '89
  76314. +BRAZIL                                 (ESTIMATED)
  76315. +BRAZIL              3 H  BEHIND UTC    FOR MOST MAJOR AIRPORTS.
  76316. +BRITISH VIRGIN I.   4 H  BEHIND UTC
  76317. +BRUNEI              8 H  AHEAD OF UTC
  76318. +BULGARIA            2 H  AHEAD OF UTC
  76319. +BULGARIA            3 H  AHEAD OF UTC  MAR 27 - SEP 24
  76320. +BURKINA FASO        ON UTC
  76321. +BURMA               6.5H AHEAD OF UTC
  76322. +BURUNDI             2 H  AHEAD OF UTC
  76323. +CAMBODIA            SEE KAMPUCHEA
  76324. +CAMEROON            1 H  AHEAD OF UTC
  76325. +CANADA   NEW FDL    3.5H BEHIND UTC    ST.JOHN'S
  76326. +CANADA   NEW FDL    1.5H BEHIND UTC    APR 3 - OCT 29
  76327. +CANADA   ATLANTIC   4 H  BEHIND UTC    HALIFAX
  76328. +CANADA   ATLANTIC   3 H  BEHIND UTC    APR 3 - OCT 29
  76329. +CANADA   EASTERN    5 H  BEHIND UTC    TORONTO, MONTREAL, OTTAWA
  76330. +CANADA   EASTERN    4 H  BEHIND UTC    APR 3 - OCT 29
  76331. +CANADA   CENTRAL    6 H  BEHIND UTC    REGINA, WINNIPEG
  76332. +CANADA   CENTRAL    5 H  BEHIND UTC    APR 3 - OCT 29
  76333. +CANADA   MOUNTAIN   7 H  BEHIND UTC    CALGARY, EDMONTON
  76334. +CANADA   MOUNTAIN   6 H  BEHIND UTC    APR 3 - OCT 29
  76335. +CANADA   PACIFIC    8 H  BEHIND UTC    VANCOUVER
  76336. +CANADA   PACIFIC    7 H  BEHIND UTC    APR 3 - OCT 29
  76337. +CANADA   YUKON      SAME AS PACIFIC    DAWSON
  76338. +CAPE VERDE          1 H  BEHIND UTC
  76339. +CAYMAN ISLANDS      5 H  BEHIND UTC
  76340. +CAROLINE ISLAND    10 H  AHEAD OF UTC  EXCLUDING PONAPE IS.,
  76341. +CAROLINE ISLAND                       KUSAIE, AND PINGELAP
  76342. +CENTRAL AFRICA      1 H  AHEAD OF UTC
  76343. +CEYLON              5.5H AHEAD OF UTC, SEE SRI LANKA
  76344. +CHAD                1 H  AHEAD OF UTC
  76345. +CHANNEL ISLANDS     SEE ENGLAND
  76346. +CHILE               4 H  BEHIND UTC    CONTINENTAL
  76347. +CHILE               3 H  BEHIND UTC    OCT 9, '88-MAR 11, '89
  76348. +CHILE               6 H  BEHIND UTC    EASTER ISLAND
  76349. +CHILE               5 H  BEHIND UTC    OCT 9, '88-MAR 11, '89
  76350. +CHINA               8 H  AHEAD OF UTC  ALL OF CHINA, INCL TAIWAN
  76351. +CHINA               9 H  AHEAD OF UTC  APR 17 - SEP 10
  76352. +COCOS (Keeling) I.  6.5H AHEAD OF UTC
  76353. +COLOMBIA            5 H  BEHIND UTC
  76354. +COMOROS             3 H  AHEAD OF UTC
  76355. +CONGO               1 H  AHEAD OF UTC
  76356. +COOK ISLANDS       10 H  BEHIND UTC
  76357. +COOK ISLANDS        9.5H  BEHIND UTC   OCT 30, '88-MAR 24, '89
  76358. +COOK ISLANDS                           (ESTIMATED)
  76359. +COSTA RICA          6 H  BEHIND UTC
  76360. +COTE D'IVOIRE       ON UTC
  76361. +CUBA                5 H  BEHIND UTC
  76362. +CUBA                4 H  BEHIND UTC    MAR 20 - OCT 8
  76363. +CURACAO             4 H  BEHIND UTC    ALSO BONAIRE, ARUBA,
  76364. +CURACAO                                ST.MAARTEN
  76365. +CYPRUS              2 H  AHEAD OF UTC
  76366. +CYPRUS              3 H  AHEAD OF UTC  MAR 27 - SEP 24
  76367. +CZECHOSLOVAKIA      1 H  AHEAD OF UTC
  76368. +CZECHOSLOVAKIA      2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76369. +DENMARK             1 H  AHEAD OF UTC
  76370. +DENMARK             2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76371. +DENMK. FAEROE IS    1 H  AHEAD OF UTC  MAR 27 - SEP 24
  76372. +DJIBOUTI            3 H  AHEAD OF UTC
  76373. +DOMINICA            4 H  BEHIND UTC
  76374. +DOMINICAN REP       4 H  BEHIND UTC
  76375. +ECUADOR             5 H  BEHIND UTC    CONTINENTAL
  76376. +ECUADOR             6 H  BEHIND UTC    GALAPAGOS ISLANDS
  76377. +EGYPT               2 H  AHEAD OF UTC
  76378. +EGYPT               3 H  AHEAD OF UTC  MAY 17 - SEP 30 (AFTER
  76379. +EGYPT                                  RAMADAN)
  76380. +EL SALVADOR         6 H  BEHIND UTC
  76381. +ENGLAND             ON UTC             (WALES, SCOTLAND, N.I.,
  76382. +ENGLAND                                CH. IS.)
  76383. +ENGLAND             1 H  AHEAD OF UTC  MAR 27 - OCT 22
  76384. +ENEZUELA           4 H  BEHIND UTC
  76385. +EQUITORIAL GUINEA   1 H  AHEAD OF UTC
  76386. +ETHIOPIA            3 H  AHEAD OF UTC
  76387. +FALKLAND ISLANDS    4 H  BEHIND UTC
  76388. +FALKLAND ISLANDS    3 H  BEHIND UTC    SEP 11, '88-APR 15, '89
  76389. +FALKLAND ISLANDS                       (ESTIMATED)
  76390. +FAROE ISLAND        ON UTC
  76391. +FAROE ISLAND        1 H  AHEAD OF UTC  MAR 27 - SEP 24
  76392. +FIJI               12 H  AHEAD OF UTC
  76393. +FINLAND             2 H  AHEAD OF UTC
  76394. +FINLAND             3 H  AHEAD OF UTC  MAR 27 - SEP 24
  76395. +FRANCE              1 H  AHEAD OF UTC
  76396. +FRANCE              2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76397. +FRENCH GUIANA       3 H  BEHIND UTC
  76398. +FRENCH POLYNESIA    9 H  BEHIND UTC    GAMBIER ISLAND
  76399. +FRENCH POLYNESIA    9.5H BEHIND UTC    MARQUESAS ISLANDS
  76400. +FRENCH POLYNESIA   10 H  BEHIND UTC    SOCIETY ISLANDS, TUBUAI
  76401. +FRENCH POLYNESIA                       ISLANDS, TUAMOTU ISLAND,
  76402. +FRENCH POLYNESIA                       TAHITI
  76403. +GABON               1 H  AHEAD OF UTC
  76404. +GAMBIA              ON UTC
  76405. +GERMANY ALL         1 H  AHEAD OF UTC
  76406. +GERMANY ALL         2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76407. +GHANA               ON UTC
  76408. +GIBRALTAR           1 H  AHEAD OF UTC
  76409. +GIBRALTAR           2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76410. +GREECE              2 H  AHEAD OF UTC
  76411. +GREECE              3 H  AHEAD OF UTC  MAR 27 - SEP 24
  76412. +GREENLAND           4 H  BEHIND UTC    THULE AIRBASE YEAR ROUND
  76413. +GREENLAND           3 H  BEHIND UTC    ANGMAGSSALIK AND W. COAST
  76414. +GREENLAND           2 H  BEHIND UTC    MAR 27 - SEP 24
  76415. +GREENLAND           1 H  BEHIND UTC    SCORESBYSUND
  76416. +GREENLAND           ON UTC             MAR 27 - SEP 24
  76417. +GRENADA             4 H  BEHIND UTC
  76418. +GUADELOUPE          4 H  BEHIND UTC    ST. BARTHELEMY, NORTHERN
  76419. +GUADELOUPE                             ST. MARTIN MARTINIQUE
  76420. +GUAM               10 H  AHEAD OF UTC
  76421. +GUATEMALA           6 H  BEHIND UTC
  76422. +GUINEA              ON UTC
  76423. +GUINEA BISSAU       ON UTC
  76424. +GUINEA REPUBLIC     ON UTC
  76425. +GUINEA EQUATORIAL   1 H  AHEAD OF UTC
  76426. +GUYANA              3 H  BEHIND UTC
  76427. +HAITI               5 H  BEHIND UTC
  76428. +HAITI               4 H  BEHIND UTC    APR 3 - OCT 29
  76429. +HOLLAND             SEE NETHERLANDS
  76430. +HONDURAS            6 H  BEHIND UTC
  76431. +HONG KONG           8 H  AHEAD OF UTC
  76432. +HUNGARY             1 H  AHEAD OF UTC
  76433. +HUNGARY             2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76434. +ICELAND             ON UTC
  76435. +INDIA               5.5H AHEAD OF UTC  INCLUDING ANDAMAN ISLANDS
  76436. +INDONESIA WEST      7 H  AHEAD OF UTC  SUMATRA, JAVA, BALI,
  76437. +INDONESIA WEST                         JAKARTA
  76438. +INDONESIA CENTRAL   8 H  AHEAD OF UTC  KALIMANTAN, SULAWESI
  76439. +INDONESIA EAST      9 H  AHEAD OF UTC  IRIAN, BARAT
  76440. +IRAN                3.5H AHEAD OF UTC
  76441. +IRAQ                3 H  AHEAD OF UTC
  76442. +IRAQ                4 H  AHEAD OF UTC  APR 1 - SEP 30
  76443. +IRELAND             ON UTC
  76444. +IRELAND             1 H  AHEAD OF UTC  MAR 27 - OCT 22
  76445. +ISRAEL              2 H  AHEAD OF UTC
  76446. +ISRAEL              3 H  AHEAD OF UTC  APR 10 - SEP 3
  76447. +ITALY               1 H  AHEAD OF UTC
  76448. +ITALY               2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76449. +IVORY COAST         ON UTC
  76450. +IWAN              8 H  AHEAD OF UTC
  76451. +JAMAICA             5 H  BEHIND UTC
  76452. +JAPAN               9 H  AHEAD OF UTC
  76453. +JOHNSTON ISLAND    10 H  BEHIND UTC
  76454. +JORDAN              2 H  AHEAD OF UTC
  76455. +JORDAN              3 H  AHEAD OF UTC  APR 1 - OCT 6
  76456. +KAMPUCHEA           7 H  AHEAD OF UTC
  76457. +KENYA               3 H  AHEAD OF UTC
  76458. +KIRIBATI, REP OF   12 H  AHEAD OF UTC  CANTON, ENDERBURY ISLANDS
  76459. +KIRIBATI, REP OF   11 H  AHEAD OF UTC  CHRISTMAS ISLAND
  76460. +KOREA               9 H  AHEAD OF UTC
  76461. +KOREA, REP OF       9 H  AHEAD OF UTC
  76462. +KOREA, REP OF      10 H  AHEAD OF UTC  MAY 8 - OCT 8
  76463. +KUWAIT              3 H  AHEAD OF UTC
  76464. +KUSAIE, PINGELAP  12 H  AHEAD OF UTC  INCLUDING MARSHALL IS.,
  76465. +KUSAIE, PINGELAP                      EXCLUDING KWAJALEIN)
  76466. +KWAJALEIN         12 H  BEHIND UTC
  76467. +LAOS                7 H  AHEAD OF UTC
  76468. +LEBANON             2 H  AHEAD OF UTC
  76469. +LEBANON             3 H  AHEAD OF UTC  JUN 1 - OCT 31
  76470. +LEEWARD ISLANDS     4 H BEHIND UTC     ANTIGUA, DOMINICA,
  76471. +LEEWARD ISLANDS                        MONTSERRAT, ST.
  76472. +LEEWARD ISLAANDS                       CHRISTOPHER, ST. KITTS,
  76473. +LEEWARD ISLANDS                        NEVIS, ANGUILLA
  76474. +LESOTHO             2 H  AHEAD OF UTC
  76475. +LIBERIA             ON UTC
  76476. +LIBYAN ARAB         1 H  AHEAD OF UTC  JAMAHIRIYA/LIBYA
  76477. +LIBYAN ARAB         2 H  AHEAD OF UTC  APR 1 - SEP 30 JAMAHIRIYA/LIBYA
  76478. +LIECHTENSTEIN       1 H  AHEAD OF UTC
  76479. +LIECHTENSTEIN       2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76480. +LUXEMBOURG          1 H  AHEAD OF UTC
  76481. +LUXEMBOURG          2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76482. +MACAO               8 H  AHEAD OF UTC
  76483. +MADAGASCAR          3 H  AHEAD OF UTC
  76484. +MADEIRA             SEE PORTUGAL
  76485. +MALAWI              2 H  AHEAD OF UTC
  76486. +MALAYSIA            8 H  AHEAD OF UTC
  76487. +MALDIVES            5 H  AHEAD OF UTC
  76488. +MALI                ON UTC
  76489. +MALTA               1 H  AHEAD OF UTC
  76490. +MALTA               2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76491. +MARTINIQUE          4 H  BEHIND UTC
  76492. +MAURITANIA          ON UTC
  76493. +MAURITIUS           4 H  AHEAD OF UTC
  76494. +MARIANA ISLAND    10 H  AHEAD OF UTC  EXCLUDING GUAM
  76495. +MEXICO BAJA CAL N   7 H  BEHIND UTC    BAJA CALIFORNIA SUR AND
  76496. +MEXICO BAJA CAL N                      N. PACIFIC COAST (STATES
  76497. +MEXICO BAJA CAL N                      OF SINALOA AND SONORA)
  76498. +MEXICO BAJA CAL N   8 H  BEHIND UTC    ABOVE 28TH PARALLAL APR 3
  76499. +MEXICO BAJA CAL N                      - OCT 29
  76500. +MEXICO BAJA CAL N   7 H  BEHIND UTC    ABOVE 28TH PARALLAL APR 3
  76501. +MEXICO BAJA CAL N                      - 0CT 29
  76502. +MEXICO              6 H  BEHIND UTC    STATES OF DURANGO,
  76503. +MEXICO                                 COAHUILA, NUEVO LEON,
  76504. +MEXICO                                 TAMAULIPAS
  76505. +MEXICO              5 H  BEHIND UTC    STATES OF DURANGO,
  76506. +MEXICO                                 COAHUILA, NUEVO LEON,
  76507. +MEXICO                                 TAMAULIPAS  APR 3 - OCT 29
  76508. +MEXICO              6 H  BEHIND UTC    GENERAL MEXICO, STATES OF
  76509. +MEXICO                                 CAMPECHE, QUINTANA ROO AND
  76510. +MEXICO                                 YUCATAN
  76511. +MIDWAY ISLAND      11 H  BEHIND UTC
  76512. +MONACO              1 H  AHEAD OF UTC
  76513. +MONACO              2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76514. +MONGOLIA            8 H  AHEAD OF UTC
  76515. +MONGOLIA            9 H  AHEAD OF UTC  MAR 27 - SEP 24
  76516. +MONTSERRAT          4 H  BEHIND UTC
  76517. +MOROCCO             ON UTC
  76518. +MOZAMBIQUE          2 H  AHEAD OF UTC
  76519. +NAMIBIA             2 H  AHEAD OF UTC
  76520. +NAURU, REP OF      12 H  AHEAD OF UTC
  76521. +NEPAL              5H45M AHEAD OF UTC
  76522. +NETHERLANDS         1 H  AHEAD OF UTC
  76523. +NETHERLANDS         2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76524. +NETHERLANDS         4 H  BEHIND UTC    ANTILLES AND SOUTHERN ST.
  76525. +NETHERLANDS                            MAARTEN
  76526. +NEW CALEDONIA      11 H  AHEAD OF UTC
  76527. +NEW HEBRIDES        SEE VANUATU
  76528. +NEW ZEALAND        12 H  AHEAD OF UTC  (EXCLUDING CHATHAM ISLAND)
  76529. +NEW ZEALAND        13 H  AHEAD OF UTC  OCT 30, '88-MAR 4, '89
  76530. +NEW ZEALAND       12H45M AHEAD OF UTC  CHATHAM ISLAND
  76531. +NICARAGUA           6 H  BEHIND UTC
  76532. +NIGER               1 H  AHEAD OF UTC
  76533. +NIGERIA             1 H  AHEAD OF UTC
  76534. +NIUE ISLAND        11 H  BEHIND UTC
  76535. +NORFOLK ISLAND    11H30M AHEAD OF UTC
  76536. +NORTHERN IRELAND    ON UTC             WALES, SCOTLAND, N.I.,
  76537. +NORTHERN IRELAND                       CH.IS.
  76538. +NORTHERN IRELAND    1 H  AHEAD OF UTC  MAR 27 - OCT 22
  76539. +NORWAY              1 H  AHEAD OF UTC
  76540. +NORWAY              2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76541. +OGO                ON UTC
  76542. +OMAN                4 H  AHEAD OF UTC
  76543. +PACIFIC ISLAND T.T.
  76544. +PALAU ISLAND       9 H  AHEAD OF UTC
  76545. +PAKISTAN            5 H  AHEAD OF UTC
  76546. +PANAMA              5 H  BEHIND UTC
  76547. +PAPUA NEW GUINEA   10 H  AHEAD OF UTC  INCLUDING BOUGAINVILLE
  76548. +PAPUA NEW GUINEA                       ISLAND
  76549. +PARAGUAY            4 H  BEHIND UTC
  76550. +PARAGUAY            3 H  BEHIND UTC    OCT 1, '88-MAR 31, '89
  76551. +PERU                5 H  BEHIND UTC
  76552. +PHILIPPINES         8 H  AHEAD OF UTC
  76553. +PONAPE ISLAND     11 H  AHEAD OF UTC
  76554. +POLAND              1 H  AHEAD OF UTC
  76555. +POLAND              2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76556. +PORTUGAL MAINLAND   ON UTC
  76557. +PORTUGAL MAINLAND   1 H  AHEAD OF UTC  MAR 27 - SEP 24
  76558. +PORTUGAL AZORES     1 H  BEHIND UTC
  76559. +PORTUGAL AZORES     ON UTC             MAR 27 - SEP 24
  76560. +PORTUGAL MADEIRA    ON UTC
  76561. +PORTUGAL MADEIRA    1 H  AHEAD OF UTC  MAR 27 - SEP 24
  76562. +PUERTO RICO         4 H  BEHIND UTC
  76563. +QATAR               3 H  AHEAD OF UTC
  76564. +ROMANIA             2 H  AHEAD OF UTC
  76565. +ROMANIA             3 H  AHEAD OF UTC  MAR 27 - SEP 24
  76566. +RUSSIA              SEE USSR
  76567. +RWANDA              2 H  AHEAD OF UTC
  76568. +SABA                4 H  BEHIND UTC    ALSO BONAIRE, CURACAO,
  76569. +SAMOA              11 H  BEHIND UTC
  76570. +SAN MARINO          1 H  AHEAD OF UTC
  76571. +SAN MARINO          2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76572. +SAN SALVADOR        6  H  BEHIND UTC
  76573. +SAO TOME ISLAND     ON UTC             AND PRINCIPE ISLAND
  76574. +SAUDI ARABIA        3 H  AHEAD OF UTC
  76575. +SCOTLAND            SEE ENGLAND
  76576. +SENEGAL             ON UTC
  76577. +SEYCHELLES          4 H  AHEAD OF UTC
  76578. +SIERRA LEONE        ON UTC
  76579. +SINGAPORE           8 H  AHEAD OF UTC
  76580. +SOLOMON ISLANDS    11 H  AHEAD OF UTC  EXCLUDING BOUGAINVILLE
  76581. +SOLOMON ISLANDS                        ISLAND
  76582. +SOMALI              3 H  AHEAD OF UTC
  76583. +SOUTH AFRICA        2 H  AHEAD OF UTC
  76584. +SPAIN  CANARY IS    ON UTC
  76585. +SPAIN  CANARY IS    1 H  AHEAD OF UTC  MAR 27 - SEP 24
  76586. +SPAIN               1 H  AHEAD OF UTC  CONTINENTAL, BALEARIC AND
  76587. +SPAIN                                  MALLORCA ISLANDS
  76588. +SPAIN               2 H  AHEAD OF UTC  CONTINENTAL, BALEARIC AND
  76589. +SPAIN                                  MALLORCA ISLANDS  MAR 27 -
  76590. +SPAIN                                  SEP 24
  76591. +SPAIN  MAINLAND     1 H  AHEAD OF UTC  MELILLA
  76592. +SPAIN  MAINLAND     2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76593. +SRI LANKA          5H30M AHEAD OF UTC
  76594. +ST.MAARTEN
  76595. +ST.KITTS-NEVIS     4 H  BEHIND UTC
  76596. +ST.LUCIA           4 H  BEHIND UTC
  76597. +ST.PIERRE          3 H  BEHIND UTC    INCLUDING MIQUELON
  76598. +ST.PIERRE          2 H  BEHIND UTC    INLCUDING MIQUELON  APR 3
  76599. +ST.PIERRE                             - OCT 29
  76600. +ST.VINCENT         4 H  BEHIND UTC    INCLUDING THE GRENADINES
  76601. +ST. HELENA          ON UTC
  76602. +SURINAME            3 H  BEHIND UTC
  76603. +SWAZILAND           2 H  AHEAD OF UTC
  76604. +SWEDEN              1 H  AHEAD OF UTC
  76605. +SWEDEN              2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76606. +SWITZERLAND         1 H  AHEAD OF UTC
  76607. +SWITZERLAND         2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76608. +SYRIA               2 H  AHEAD OF UTC
  76609. +SYRIA               3 H  AHEAD OF UTC  MAR 15 - OCT 30
  76610. +TAHITI             10 H  BEHIND UTC
  76611. +TANZANIA            3 H  AHEAD OF UTC
  76612. +THAILAND            7 H  AHEAD OF UTC
  76613. +TRINIDAD / TOBAGO   4 H  BEHIND UTC
  76614. +TUNISIA             1 H  AHEAD OF UTC
  76615. +TUNISIA             2 H  AHEAD OF UTC  APR 10 - SEP 24
  76616. +TURKEY              2 H  AHEAD OF UTC
  76617. +TURKEY              3 H  AHEAD OF UTC  MAR 27 - SEP 24
  76618. +TURKS AND CAICOS    5 H  BEHIND UTC
  76619. +TURKS AND CAICOS    4 H  BEHIND UTC    APR 3 - OCT 29
  76620. +TUVALU             12 H  AHEAD OF UTC
  76621. +UDAN               2 H  AHEAD OF UTC
  76622. +UGANDA              3 H  AHEAD OF UTC
  76623. +UNITED ARAB EMIR.   4 H  AHEAD OF UTC  ABU DHABI, DUBAI, SHARJAH,
  76624. +UNITED ARAB EMIR                       RAS AL KHAIMAH
  76625. +UNITED KINGDOM      ON UTC             WALES, SCOTLAND, N.I., CH.
  76626. +UNITED KINGDOM                         IS.
  76627. +UNITED KINGDOM      1 H  AHEAD OF UTC  MAR 27 - OCT 22
  76628. +UNITED STATES       SEE USA
  76629. +UPPER VOLTA         ON UTC
  76630. +URUGUAY             3 H  BEHIND UTC
  76631. +URUGUAY             2 H  BEHIND UTC    DEC 11, '88-FEB 25, '89
  76632. +URAGUAY                                (ESTIMATED)
  76633. +USA  EASTERN       5 H  BEHIND UTC    NEW YORK, WASHINGTON
  76634. +USA  EASTERN       4 H  BEHIND UTC    APR 3 - OCT 30
  76635. +USA  CENTRAL       6 H  BEHIND UTC    CHICAGO, HOUSTON
  76636. +USA  CENTRAL       5 H  BEHIND UTC    APR 3 - OCT 30
  76637. +USA  MOUNTAIN      7 H  BEHIND UTC    DENVER
  76638. +USA  MOUNTAIN      6 H  BEHIND UTC    APR 3 - OCT 30
  76639. +USA  PACIFIC       8 H  BEHIND UTC    L.A., SAN FRANCISCO
  76640. +USA  PACIFIC       7 H  BEHIND UTC    APR 3 - OCT 30
  76641. +USA  ALASKA STD    9 H  BEHIND UTC    MOST OF ALASKA     (AKST)
  76642. +USA  ALASKA STD    8 H  BEHIND UTC    APR 3 - OCT 30 (AKDT)
  76643. +USA  ALEUTIAN     10 H  BEHIND UTC    ISLANDS WEST OF 170W
  76644. +USA  - " -         9 H  BEHIND UTC    APR 3 - OCT 30
  76645. +USA  HAWAII       10 H  BEHIND UTC
  76646. +USA  BERING       11 H  BEHIND UTC    SAMOA, MIDWAY
  76647. +USA  FOR SPECIFIC INFO ON USA ZONES/TIMES CALL DOT 202-426-4520
  76648. +USSR WEST EUROP     3 H  AHEAD OF UTC  LENINGRAD, MOSCOW
  76649. +USSR WEST EUROP     4 H  AHEAD OF UTC  APR 1 - SEP 30
  76650. +USSR CENTRAL EUR    4 H  AHEAD OF UTC  ROSTOV, BAKU
  76651. +USSR CENTRAL EUR    5 H  AHEAD OF UTC  APR 1 - SEP 30
  76652. +USSR EAST EUROP     5 H  AHEAD OF UTC  SVERDLOVSK
  76653. +USSR EAST EUROP     6 H  AHEAD OF UTC  APR 1 - SEP 30
  76654. +USSR WEST SIBERIAN  6 H  AHEAD OF UTC  TASHKENT, ALMA ATA
  76655. +USSR WEST SIBERIAN  7 H  AHEAD OF UTC  APR 1 - SEP 30
  76656. +USSR WEST-CENTRAL   7 H  AHEAD OF UTC  NOVOSIBIRSK
  76657. +USSR WEST-CENTRAL   8 H  AHEAD OF UTC  APR 1 - SEP 30
  76658. +USSR WEST-CENTRAL   8 H  AHEAD OF UTC  IRKUTSK
  76659. +USSR WEST-CENTRAL   9 H  AHEAD OF UTC  APR 1 - SEP 30
  76660. +USSR CENTRAL SIB    9 H  AHEAD OF UTC  YAKUTSK
  76661. +USSR CENTRAL SIB   10 H  AHEAD OF UTC  APR 1 - SEP 30
  76662. +USSR CENTRAL SIB   10 H  AHEAD OF UTC  VLADIVOSTOK
  76663. +USSR CENTRAL SIB   11 H  AHEAD OF UTC  APR 1 - SEP 30
  76664. +USSR EAST SIBERIA  11 H  AHEAD OF UTC  MAGADAN
  76665. +USSR EAST SIBERIA  12 H  AHEAD OF UTC  APR 1 - SEP 30
  76666. +USSR EAST SIBERIA  12 H  AHEAD OF UTC  PETROPAVLOVSK
  76667. +USSR EAST SIBERIA  13 H  AHEAD OF UTC  APR 1 - SEP 30
  76668. +USSR EAST SIBERIA  13 H  AHEAD OF UTC  UELEN
  76669. +USSR EAST SIBERIA  14 H  AHEAD OF UTC  APR 1 - SEP 30
  76670. +VANUATU            11 H  AHEAD OF UTC  (NEW HEBRIDES)
  76671. +VANUATU            12 H  AHEAD OF UTC  SEP 25, '88-MAR 25, '89
  76672. +VANUATU                                (ESTIMATED)
  76673. +VATICAN             1 H  AHEAD OF UTC
  76674. +VATICAN             2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76675. +VIETNAM             7 H  AHEAD OF UTC
  76676. +VIRGIN ISLANDS      4 H  BEHIND UTC    ST.CROIX, ST.THOMAS,
  76677. +VIRGIN ISLANDS                         ST.JOHN
  76678. +WAKE ISLAND        12 H  AHEAD OF UTC
  76679. +WALES               SEE ENGLAND
  76680. +WALLIS/FUTUNA IS.  12 H  AHEAD OF UTC
  76681. +WINDWARD ISLANDS    4 H  BEHIND UTC    GRENADA, ST. LUCIA
  76682. +YEMEN               3 H  AHEAD OF UTC  BOTH REPUBLICS
  76683. +YUGOSLAVIA          1 H  AHEAD OF UTC
  76684. +YUGOSLAVIA          2 H  AHEAD OF UTC  MAR 27 - SEP 24
  76685. +ZAIRE  EAST         1 H  AHEAD OF UTC  KINSHASA MBANDAKA
  76686. +ZAIRE  WEST         2 H  AHEAD OF UTC  LUBUMBASHI, KASAI, KIVU,
  76687. +ZAIRE  WEST                            HAUT-ZAIRE, SHABA
  76688. +ZAMBIA              2 H  AHEAD OF UTC
  76689. +ZIMBABWE            2 H  AHEAD OF UTC
  76690. diff -rup --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/getopt.c amiga/fsf/emacs/unixlib/src/zoneinfo/getopt.c
  76691. --- baseline/fsf/emacs/unixlib/src/zoneinfo/getopt.c    Wed Dec 31 17:00:00 1969
  76692. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/getopt.c    Sat Sep 28 00:00:00 1996
  76693. @@ -0,0 +1,678 @@
  76694. +/* Getopt for GNU.
  76695. +   NOTE: getopt is now part of the C library, so if you don't know what
  76696. +   "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu
  76697. +   before changing it!
  76698. +
  76699. +   Copyright (C) 1987, 88, 89, 90, 91, 1992 Free Software Foundation, Inc.
  76700. +
  76701. +   This program is free software; you can redistribute it and/or modify
  76702. +   it under the terms of the GNU General Public License as published by
  76703. +   the Free Software Foundation; either version 2, or (at your option)
  76704. +   any later version.
  76705. +
  76706. +   This program is distributed in the hope that it will be useful,
  76707. +   but WITHOUT ANY WARRANTY; without even the implied warranty of
  76708. +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  76709. +   GNU General Public License for more details.
  76710. +
  76711. +   You should have received a copy of the GNU General Public License
  76712. +   along with this program; if not, write to the Free Software
  76713. +   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  76714. +
  76715. +/* AIX requires this to be the first thing in the file. */
  76716. +#ifdef __GNUC__
  76717. +#define alloca __builtin_alloca
  76718. +#else /* not __GNUC__ */
  76719. +#if defined(sparc) && !defined(USG) && !defined(SVR4) && !defined(__svr4__)
  76720. +#include <alloca.h>
  76721. +#else
  76722. +#ifdef _AIX
  76723. + #pragma alloca
  76724. +#else
  76725. +char *alloca ();
  76726. +#endif
  76727. +#endif /* sparc */
  76728. +#endif /* not __GNUC__ */
  76729. +
  76730. +#ifdef    LIBC
  76731. +/* For when compiled as part of the GNU C library.  */
  76732. +#include <ansidecl.h>
  76733. +#endif
  76734. +
  76735. +#include <stdio.h>
  76736. +
  76737. +/* This needs to come after some library #include
  76738. +   to get __GNU_LIBRARY__ defined.  */
  76739. +#ifdef    __GNU_LIBRARY__
  76740. +#undef    alloca
  76741. +#include <stdlib.h>
  76742. +#include <string.h>
  76743. +#else    /* Not GNU C library.  */
  76744. +#define    __alloca    alloca
  76745. +#endif    /* GNU C library.  */
  76746. +
  76747. +
  76748. +#ifndef __STDC__
  76749. +#define const
  76750. +#endif
  76751. +
  76752. +/* If GETOPT_COMPAT is defined, `+' as well as `--' can introduce a
  76753. +   long-named option.  Because this is not POSIX.2 compliant, it is
  76754. +   being phased out. */
  76755. +#define GETOPT_COMPAT
  76756. +
  76757. +/* This version of `getopt' appears to the caller like standard Unix `getopt'
  76758. +   but it behaves differently for the user, since it allows the user
  76759. +   to intersperse the options with the other arguments.
  76760. +
  76761. +   As `getopt' works, it permutes the elements of ARGV so that,
  76762. +   when it is done, all the options precede everything else.  Thus
  76763. +   all application programs are extended to handle flexible argument order.
  76764. +
  76765. +   Setting the environment variable POSIXLY_CORRECT disables permutation.
  76766. +   Then the behavior is completely standard.
  76767. +
  76768. +   GNU application programs can use a third alternative mode in which
  76769. +   they can distinguish the relative order of options and other arguments.  */
  76770. +
  76771. +#include "getopt.h"
  76772. +
  76773. +/* For communication from `getopt' to the caller.
  76774. +   When `getopt' finds an option that takes an argument,
  76775. +   the argument value is returned here.
  76776. +   Also, when `ordering' is RETURN_IN_ORDER,
  76777. +   each non-option ARGV-element is returned here.  */
  76778. +
  76779. +char *optarg = 0;
  76780. +
  76781. +/* Index in ARGV of the next element to be scanned.
  76782. +   This is used for communication to and from the caller
  76783. +   and for communication between successive calls to `getopt'.
  76784. +
  76785. +   On entry to `getopt', zero means this is the first call; initialize.
  76786. +
  76787. +   When `getopt' returns EOF, this is the index of the first of the
  76788. +   non-option elements that the caller should itself scan.
  76789. +
  76790. +   Otherwise, `optind' communicates from one call to the next
  76791. +   how much of ARGV has been scanned so far.  */
  76792. +
  76793. +int optind = 0;
  76794. +
  76795. +/* The next char to be scanned in the option-element
  76796. +   in which the last option character we returned was found.
  76797. +   This allows us to pick up the scan where we left off.
  76798. +
  76799. +   If this is zero, or a null string, it means resume the scan
  76800. +   by advancing to the next ARGV-element.  */
  76801. +
  76802. +static char *nextchar;
  76803. +
  76804. +/* Callers store zero here to inhibit the error message
  76805. +   for unrecognized options.  */
  76806. +
  76807. +int opterr = 1;
  76808. +
  76809. +/* Describe how to deal with options that follow non-option ARGV-elements.
  76810. +
  76811. +   If the caller did not specify anything,
  76812. +   the default is REQUIRE_ORDER if the environment variable
  76813. +   POSIXLY_CORRECT is defined, PERMUTE otherwise.
  76814. +
  76815. +   REQUIRE_ORDER means don't recognize them as options;
  76816. +   stop option processing when the first non-option is seen.
  76817. +   This is what Unix does.
  76818. +   This mode of operation is selected by either setting the environment
  76819. +   variable POSIXLY_CORRECT, or using `+' as the first character
  76820. +   of the list of option characters.
  76821. +
  76822. +   PERMUTE is the default.  We permute the contents of ARGV as we scan,
  76823. +   so that eventually all the non-options are at the end.  This allows options
  76824. +   to be given in any order, even with programs that were not written to
  76825. +   expect this.
  76826. +
  76827. +   RETURN_IN_ORDER is an option available to programs that were written
  76828. +   to expect options and other ARGV-elements in any order and that care about
  76829. +   the ordering of the two.  We describe each non-option ARGV-element
  76830. +   as if it were the argument of an option with character code 1.
  76831. +   Using `-' as the first character of the list of option characters
  76832. +   selects this mode of operation.
  76833. +
  76834. +   The special argument `--' forces an end of option-scanning regardless
  76835. +   of the value of `ordering'.  In the case of RETURN_IN_ORDER, only
  76836. +   `--' can cause `getopt' to return EOF with `optind' != ARGC.  */
  76837. +
  76838. +static enum
  76839. +{
  76840. +  REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
  76841. +} ordering;
  76842. +
  76843. +#ifdef    __GNU_LIBRARY__
  76844. +#include <string.h>
  76845. +#define    my_index    strchr
  76846. +#define    my_bcopy(src, dst, n)    memcpy ((dst), (src), (n))
  76847. +#else
  76848. +
  76849. +/* Avoid depending on library functions or files
  76850. +   whose names are inconsistent.  */
  76851. +
  76852. +char *getenv ();
  76853. +
  76854. +static char *
  76855. +my_index (string, chr)
  76856. +     char *string;
  76857. +     int chr;
  76858. +{
  76859. +  while (*string)
  76860. +    {
  76861. +      if (*string == chr)
  76862. +    return string;
  76863. +      string++;
  76864. +    }
  76865. +  return 0;
  76866. +}
  76867. +
  76868. +static void
  76869. +my_bcopy (from, to, size)
  76870. +     char *from, *to;
  76871. +     int size;
  76872. +{
  76873. +  int i;
  76874. +  for (i = 0; i < size; i++)
  76875. +    to[i] = from[i];
  76876. +}
  76877. +#endif                /* GNU C library.  */
  76878. +
  76879. +/* Handle permutation of arguments.  */
  76880. +
  76881. +/* Describe the part of ARGV that contains non-options that have
  76882. +   been skipped.  `first_nonopt' is the index in ARGV of the first of them;
  76883. +   `last_nonopt' is the index after the last of them.  */
  76884. +
  76885. +static int first_nonopt;
  76886. +static int last_nonopt;
  76887. +
  76888. +/* Exchange two adjacent subsequences of ARGV.
  76889. +   One subsequence is elements [first_nonopt,last_nonopt)
  76890. +   which contains all the non-options that have been skipped so far.
  76891. +   The other is elements [last_nonopt,optind), which contains all
  76892. +   the options processed since those non-options were skipped.
  76893. +
  76894. +   `first_nonopt' and `last_nonopt' are relocated so that they describe
  76895. +   the new indices of the non-options in ARGV after they are moved.  */
  76896. +
  76897. +static void
  76898. +exchange (argv)
  76899. +     char **argv;
  76900. +{
  76901. +  int nonopts_size = (last_nonopt - first_nonopt) * sizeof (char *);
  76902. +  char **temp = (char **) __alloca (nonopts_size);
  76903. +
  76904. +  /* Interchange the two blocks of data in ARGV.  */
  76905. +
  76906. +  my_bcopy (&argv[first_nonopt], temp, nonopts_size);
  76907. +  my_bcopy (&argv[last_nonopt], &argv[first_nonopt],
  76908. +        (optind - last_nonopt) * sizeof (char *));
  76909. +  my_bcopy (temp, &argv[first_nonopt + optind - last_nonopt], nonopts_size);
  76910. +
  76911. +  /* Update records for the slots the non-options now occupy.  */
  76912. +
  76913. +  first_nonopt += (optind - last_nonopt);
  76914. +  last_nonopt = optind;
  76915. +}
  76916. +
  76917. +/* Scan elements of ARGV (whose length is ARGC) for option characters
  76918. +   given in OPTSTRING.
  76919. +
  76920. +   If an element of ARGV starts with '-', and is not exactly "-" or "--",
  76921. +   then it is an option element.  The characters of this element
  76922. +   (aside from the initial '-') are option characters.  If `getopt'
  76923. +   is called repeatedly, it returns successively each of the option characters
  76924. +   from each of the option elements.
  76925. +
  76926. +   If `getopt' finds another option character, it returns that character,
  76927. +   updating `optind' and `nextchar' so that the next call to `getopt' can
  76928. +   resume the scan with the following option character or ARGV-element.
  76929. +
  76930. +   If there are no more option characters, `getopt' returns `EOF'.
  76931. +   Then `optind' is the index in ARGV of the first ARGV-element
  76932. +   that is not an option.  (The ARGV-elements have been permuted
  76933. +   so that those that are not options now come last.)
  76934. +
  76935. +   OPTSTRING is a string containing the legitimate option characters.
  76936. +   If an option character is seen that is not listed in OPTSTRING,
  76937. +   return '?' after printing an error message.  If you set `opterr' to
  76938. +   zero, the error message is suppressed but we still return '?'.
  76939. +
  76940. +   If a char in OPTSTRING is followed by a colon, that means it wants an arg,
  76941. +   so the following text in the same ARGV-element, or the text of the following
  76942. +   ARGV-element, is returned in `optarg'.  Two colons mean an option that
  76943. +   wants an optional arg; if there is text in the current ARGV-element,
  76944. +   it is returned in `optarg', otherwise `optarg' is set to zero.
  76945. +
  76946. +   If OPTSTRING starts with `-' or `+', it requests different methods of
  76947. +   handling the non-option ARGV-elements.
  76948. +   See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
  76949. +
  76950. +   Long-named options begin with `--' instead of `-'.
  76951. +   Their names may be abbreviated as long as the abbreviation is unique
  76952. +   or is an exact match for some defined option.  If they have an
  76953. +   argument, it follows the option name in the same ARGV-element, separated
  76954. +   from the option name by a `=', or else the in next ARGV-element.
  76955. +   When `getopt' finds a long-named option, it returns 0 if that option's
  76956. +   `flag' field is nonzero, the value of the option's `val' field
  76957. +   if the `flag' field is zero.
  76958. +
  76959. +   The elements of ARGV aren't really const, because we permute them.
  76960. +   But we pretend they're const in the prototype to be compatible
  76961. +   with other systems.
  76962. +
  76963. +   LONGOPTS is a vector of `struct option' terminated by an
  76964. +   element containing a name which is zero.
  76965. +
  76966. +   LONGIND returns the index in LONGOPT of the long-named option found.
  76967. +   It is only valid when a long-named option has been found by the most
  76968. +   recent call.
  76969. +
  76970. +   If LONG_ONLY is nonzero, '-' as well as '--' can introduce
  76971. +   long-named options.  */
  76972. +
  76973. +int
  76974. +_getopt_internal (argc, argv, optstring, longopts, longind, long_only)
  76975. +     int argc;
  76976. +     char *const *argv;
  76977. +     const char *optstring;
  76978. +     const struct option *longopts;
  76979. +     int *longind;
  76980. +     int long_only;
  76981. +{
  76982. +  int option_index;
  76983. +
  76984. +  optarg = 0;
  76985. +
  76986. +  /* Initialize the internal data when the first call is made.
  76987. +     Start processing options with ARGV-element 1 (since ARGV-element 0
  76988. +     is the program name); the sequence of previously skipped
  76989. +     non-option ARGV-elements is empty.  */
  76990. +
  76991. +  if (optind == 0)
  76992. +    {
  76993. +      first_nonopt = last_nonopt = optind = 1;
  76994. +
  76995. +      nextchar = NULL;
  76996. +
  76997. +      /* Determine how to handle the ordering of options and nonoptions.  */
  76998. +
  76999. +      if (optstring[0] == '-')
  77000. +    {
  77001. +      ordering = RETURN_IN_ORDER;
  77002. +      ++optstring;
  77003. +    }
  77004. +      else if (optstring[0] == '+')
  77005. +    {
  77006. +      ordering = REQUIRE_ORDER;
  77007. +      ++optstring;
  77008. +    }
  77009. +      else if (getenv ("POSIXLY_CORRECT") != NULL)
  77010. +    ordering = REQUIRE_ORDER;
  77011. +      else
  77012. +    ordering = PERMUTE;
  77013. +    }
  77014. +
  77015. +  if (nextchar == NULL || *nextchar == '\0')
  77016. +    {
  77017. +      if (ordering == PERMUTE)
  77018. +    {
  77019. +      /* If we have just processed some options following some non-options,
  77020. +         exchange them so that the options come first.  */
  77021. +
  77022. +      if (first_nonopt != last_nonopt && last_nonopt != optind)
  77023. +        exchange ((char **) argv);
  77024. +      else if (last_nonopt != optind)
  77025. +        first_nonopt = optind;
  77026. +
  77027. +      /* Now skip any additional non-options
  77028. +         and extend the range of non-options previously skipped.  */
  77029. +
  77030. +      while (optind < argc
  77031. +         && (argv[optind][0] != '-' || argv[optind][1] == '\0')
  77032. +#ifdef GETOPT_COMPAT
  77033. +         && (longopts == NULL
  77034. +             || argv[optind][0] != '+' || argv[optind][1] == '\0')
  77035. +#endif                /* GETOPT_COMPAT */
  77036. +         )
  77037. +        optind++;
  77038. +      last_nonopt = optind;
  77039. +    }
  77040. +
  77041. +      /* Special ARGV-element `--' means premature end of options.
  77042. +     Skip it like a null option,
  77043. +     then exchange with previous non-options as if it were an option,
  77044. +     then skip everything else like a non-option.  */
  77045. +
  77046. +      if (optind != argc && !strcmp (argv[optind], "--"))
  77047. +    {
  77048. +      optind++;
  77049. +
  77050. +      if (first_nonopt != last_nonopt && last_nonopt != optind)
  77051. +        exchange ((char **) argv);
  77052. +      else if (first_nonopt == last_nonopt)
  77053. +        first_nonopt = optind;
  77054. +      last_nonopt = argc;
  77055. +
  77056. +      optind = argc;
  77057. +    }
  77058. +
  77059. +      /* If we have done all the ARGV-elements, stop the scan
  77060. +     and back over any non-options that we skipped and permuted.  */
  77061. +
  77062. +      if (optind == argc)
  77063. +    {
  77064. +      /* Set the next-arg-index to point at the non-options
  77065. +         that we previously skipped, so the caller will digest them.  */
  77066. +      if (first_nonopt != last_nonopt)
  77067. +        optind = first_nonopt;
  77068. +      return EOF;
  77069. +    }
  77070. +
  77071. +      /* If we have come to a non-option and did not permute it,
  77072. +     either stop the scan or describe it to the caller and pass it by.  */
  77073. +
  77074. +      if ((argv[optind][0] != '-' || argv[optind][1] == '\0')
  77075. +#ifdef GETOPT_COMPAT
  77076. +      && (longopts == NULL
  77077. +          || argv[optind][0] != '+' || argv[optind][1] == '\0')
  77078. +#endif                /* GETOPT_COMPAT */
  77079. +      )
  77080. +    {
  77081. +      if (ordering == REQUIRE_ORDER)
  77082. +        return EOF;
  77083. +      optarg = argv[optind++];
  77084. +      return 1;
  77085. +    }
  77086. +
  77087. +      /* We have found another option-ARGV-element.
  77088. +     Start decoding its characters.  */
  77089. +
  77090. +      nextchar = (argv[optind] + 1
  77091. +          + (longopts != NULL && argv[optind][1] == '-'));
  77092. +    }
  77093. +
  77094. +  if (longopts != NULL
  77095. +      && ((argv[optind][0] == '-'
  77096. +       && (argv[optind][1] == '-' || long_only))
  77097. +#ifdef GETOPT_COMPAT
  77098. +      || argv[optind][0] == '+'
  77099. +#endif                /* GETOPT_COMPAT */
  77100. +      ))
  77101. +    {
  77102. +      const struct option *p;
  77103. +      char *s = nextchar;
  77104. +      int exact = 0;
  77105. +      int ambig = 0;
  77106. +      const struct option *pfound = NULL;
  77107. +      int indfound;
  77108. +
  77109. +      while (*s && *s != '=')
  77110. +    s++;
  77111. +
  77112. +      /* Test all options for either exact match or abbreviated matches.  */
  77113. +      for (p = longopts, option_index = 0; p->name;
  77114. +       p++, option_index++)
  77115. +    if (!strncmp (p->name, nextchar, s - nextchar))
  77116. +      {
  77117. +        if (s - nextchar == strlen (p->name))
  77118. +          {
  77119. +        /* Exact match found.  */
  77120. +        pfound = p;
  77121. +        indfound = option_index;
  77122. +        exact = 1;
  77123. +        break;
  77124. +          }
  77125. +        else if (pfound == NULL)
  77126. +          {
  77127. +        /* First nonexact match found.  */
  77128. +        pfound = p;
  77129. +        indfound = option_index;
  77130. +          }
  77131. +        else
  77132. +          /* Second nonexact match found.  */
  77133. +          ambig = 1;
  77134. +      }
  77135. +
  77136. +      if (ambig && !exact)
  77137. +    {
  77138. +      if (opterr)
  77139. +        fprintf (stderr, "%s: option `%s' is ambiguous\n",
  77140. +             argv[0], argv[optind]);
  77141. +      nextchar += strlen (nextchar);
  77142. +      optind++;
  77143. +      return '?';
  77144. +    }
  77145. +
  77146. +      if (pfound != NULL)
  77147. +    {
  77148. +      option_index = indfound;
  77149. +      optind++;
  77150. +      if (*s)
  77151. +        {
  77152. +          /* Don't test has_arg with >, because some C compilers don't
  77153. +         allow it to be used on enums. */
  77154. +          if (pfound->has_arg)
  77155. +        optarg = s + 1;
  77156. +          else
  77157. +        {
  77158. +          if (opterr)
  77159. +            {
  77160. +              if (argv[optind - 1][1] == '-')
  77161. +            /* --option */
  77162. +            fprintf (stderr,
  77163. +                 "%s: option `--%s' doesn't allow an argument\n",
  77164. +                 argv[0], pfound->name);
  77165. +              else
  77166. +            /* +option or -option */
  77167. +            fprintf (stderr,
  77168. +                 "%s: option `%c%s' doesn't allow an argument\n",
  77169. +                 argv[0], argv[optind - 1][0], pfound->name);
  77170. +            }
  77171. +          nextchar += strlen (nextchar);
  77172. +          return '?';
  77173. +        }
  77174. +        }
  77175. +      else if (pfound->has_arg == 1)
  77176. +        {
  77177. +          if (optind < argc)
  77178. +        optarg = argv[optind++];
  77179. +          else
  77180. +        {
  77181. +          if (opterr)
  77182. +            fprintf (stderr, "%s: option `%s' requires an argument\n",
  77183. +                 argv[0], argv[optind - 1]);
  77184. +          nextchar += strlen (nextchar);
  77185. +          return '?';
  77186. +        }
  77187. +        }
  77188. +      nextchar += strlen (nextchar);
  77189. +      if (longind != NULL)
  77190. +        *longind = option_index;
  77191. +      if (pfound->flag)
  77192. +        {
  77193. +          *(pfound->flag) = pfound->val;
  77194. +          return 0;
  77195. +        }
  77196. +      return pfound->val;
  77197. +    }
  77198. +      /* Can't find it as a long option.  If this is not getopt_long_only,
  77199. +     or the option starts with '--' or is not a valid short
  77200. +     option, then it's an error.
  77201. +     Otherwise interpret it as a short option. */
  77202. +      if (!long_only || argv[optind][1] == '-'
  77203. +#ifdef GETOPT_COMPAT
  77204. +      || argv[optind][0] == '+'
  77205. +#endif                /* GETOPT_COMPAT */
  77206. +      || my_index (optstring, *nextchar) == NULL)
  77207. +    {
  77208. +      if (opterr)
  77209. +        {
  77210. +          if (argv[optind][1] == '-')
  77211. +        /* --option */
  77212. +        fprintf (stderr, "%s: unrecognized option `--%s'\n",
  77213. +             argv[0], nextchar);
  77214. +          else
  77215. +        /* +option or -option */
  77216. +        fprintf (stderr, "%s: unrecognized option `%c%s'\n",
  77217. +             argv[0], argv[optind][0], nextchar);
  77218. +        }
  77219. +      nextchar += strlen (nextchar);
  77220. +      optind++;
  77221. +      return '?';
  77222. +    }
  77223. +    }
  77224. +
  77225. +  /* Look at and handle the next option-character.  */
  77226. +
  77227. +  {
  77228. +    char c = *nextchar++;
  77229. +    char *temp = my_index (optstring, c);
  77230. +
  77231. +    /* Increment `optind' when we start to process its last character.  */
  77232. +    if (*nextchar == '\0')
  77233. +      optind++;
  77234. +
  77235. +    if (temp == NULL || c == ':')
  77236. +      {
  77237. +    if (opterr)
  77238. +      {
  77239. +        if (c < 040 || c >= 0177)
  77240. +          fprintf (stderr, "%s: unrecognized option, character code 0%o\n",
  77241. +               argv[0], c);
  77242. +        else
  77243. +          fprintf (stderr, "%s: unrecognized option `-%c'\n", argv[0], c);
  77244. +      }
  77245. +    return '?';
  77246. +      }
  77247. +    if (temp[1] == ':')
  77248. +      {
  77249. +    if (temp[2] == ':')
  77250. +      {
  77251. +        /* This is an option that accepts an argument optionally.  */
  77252. +        if (*nextchar != '\0')
  77253. +          {
  77254. +        optarg = nextchar;
  77255. +        optind++;
  77256. +          }
  77257. +        else
  77258. +          optarg = 0;
  77259. +        nextchar = NULL;
  77260. +      }
  77261. +    else
  77262. +      {
  77263. +        /* This is an option that requires an argument.  */
  77264. +        if (*nextchar != 0)
  77265. +          {
  77266. +        optarg = nextchar;
  77267. +        /* If we end this ARGV-element by taking the rest as an arg,
  77268. +           we must advance to the next element now.  */
  77269. +        optind++;
  77270. +          }
  77271. +        else if (optind == argc)
  77272. +          {
  77273. +        if (opterr)
  77274. +          fprintf (stderr, "%s: option `-%c' requires an argument\n",
  77275. +               argv[0], c);
  77276. +        c = '?';
  77277. +          }
  77278. +        else
  77279. +          /* We already incremented `optind' once;
  77280. +         increment it again when taking next ARGV-elt as argument.  */
  77281. +          optarg = argv[optind++];
  77282. +        nextchar = NULL;
  77283. +      }
  77284. +      }
  77285. +    return c;
  77286. +  }
  77287. +}
  77288. +
  77289. +int
  77290. +getopt (argc, argv, optstring)
  77291. +     int argc;
  77292. +     char *const *argv;
  77293. +     const char *optstring;
  77294. +{
  77295. +  return _getopt_internal (argc, argv, optstring,
  77296. +               (const struct option *) 0,
  77297. +               (int *) 0,
  77298. +               0);
  77299. +}
  77300. +
  77301. +#ifdef TEST
  77302. +
  77303. +/* Compile with -DTEST to make an executable for use in testing
  77304. +   the above definition of `getopt'.  */
  77305. +
  77306. +int
  77307. +main (argc, argv)
  77308. +     int argc;
  77309. +     char **argv;
  77310. +{
  77311. +  int c;
  77312. +  int digit_optind = 0;
  77313. +
  77314. +  while (1)
  77315. +    {
  77316. +      int this_option_optind = optind ? optind : 1;
  77317. +
  77318. +      c = getopt (argc, argv, "abc:d:0123456789");
  77319. +      if (c == EOF)
  77320. +    break;
  77321. +
  77322. +      switch (c)
  77323. +    {
  77324. +    case '0':
  77325. +    case '1':
  77326. +    case '2':
  77327. +    case '3':
  77328. +    case '4':
  77329. +    case '5':
  77330. +    case '6':
  77331. +    case '7':
  77332. +    case '8':
  77333. +    case '9':
  77334. +      if (digit_optind != 0 && digit_optind != this_option_optind)
  77335. +        printf ("digits occur in two different argv-elements.\n");
  77336. +      digit_optind = this_option_optind;
  77337. +      printf ("option %c\n", c);
  77338. +      break;
  77339. +
  77340. +    case 'a':
  77341. +      printf ("option a\n");
  77342. +      break;
  77343. +
  77344. +    case 'b':
  77345. +      printf ("option b\n");
  77346. +      break;
  77347. +
  77348. +    case 'c':
  77349. +      printf ("option c with value `%s'\n", optarg);
  77350. +      break;
  77351. +
  77352. +    case '?':
  77353. +      break;
  77354. +
  77355. +    default:
  77356. +      printf ("?? getopt returned character code 0%o ??\n", c);
  77357. +    }
  77358. +    }
  77359. +
  77360. +  if (optind < argc)
  77361. +    {
  77362. +      printf ("non-option ARGV-elements: ");
  77363. +      while (optind < argc)
  77364. +    printf ("%s ", argv[optind++]);
  77365. +      printf ("\n");
  77366. +    }
  77367. +
  77368. +  exit (0);
  77369. +}
  77370. +
  77371. +#endif /* TEST */
  77372. diff -rup --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/getopt.h amiga/fsf/emacs/unixlib/src/zoneinfo/getopt.h
  77373. --- baseline/fsf/emacs/unixlib/src/zoneinfo/getopt.h    Wed Dec 31 17:00:00 1969
  77374. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/getopt.h    Sat Sep 28 00:00:00 1996
  77375. @@ -0,0 +1,113 @@
  77376. +/* Declarations for getopt.
  77377. +   Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
  77378. +
  77379. +   This program is free software; you can redistribute it and/or modify
  77380. +   it under the terms of the GNU General Public License as published by
  77381. +   the Free Software Foundation; either version 2, or (at your option)
  77382. +   any later version.
  77383. +
  77384. +   This program is distributed in the hope that it will be useful,
  77385. +   but WITHOUT ANY WARRANTY; without even the implied warranty of
  77386. +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  77387. +   GNU General Public License for more details.
  77388. +
  77389. +   You should have received a copy of the GNU General Public License
  77390. +   along with this program; if not, write to the Free Software
  77391. +   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  77392. +
  77393. +#ifndef _GETOPT_H_
  77394. +#define _GETOPT_H_
  77395. +
  77396. +/* For communication from `getopt' to the caller.
  77397. +   When `getopt' finds an option that takes an argument,
  77398. +   the argument value is returned here.
  77399. +   Also, when `ordering' is RETURN_IN_ORDER,
  77400. +   each non-option ARGV-element is returned here.  */
  77401. +
  77402. +extern char *optarg;
  77403. +
  77404. +/* Index in ARGV of the next element to be scanned.
  77405. +   This is used for communication to and from the caller
  77406. +   and for communication between successive calls to `getopt'.
  77407. +
  77408. +   On entry to `getopt', zero means this is the first call; initialize.
  77409. +
  77410. +   When `getopt' returns EOF, this is the index of the first of the
  77411. +   non-option elements that the caller should itself scan.
  77412. +
  77413. +   Otherwise, `optind' communicates from one call to the next
  77414. +   how much of ARGV has been scanned so far.  */
  77415. +
  77416. +extern int optind;
  77417. +
  77418. +/* Callers store zero here to inhibit the error message `getopt' prints
  77419. +   for unrecognized options.  */
  77420. +
  77421. +extern int opterr;
  77422. +
  77423. +/* Describe the long-named options requested by the application.
  77424. +   The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
  77425. +   of `struct option' terminated by an element containing a name which is
  77426. +   zero.
  77427. +
  77428. +   The field `has_arg' is:
  77429. +   no_argument        (or 0) if the option does not take an argument,
  77430. +   required_argument    (or 1) if the option requires an argument,
  77431. +   optional_argument     (or 2) if the option takes an optional argument.
  77432. +
  77433. +   If the field `flag' is not NULL, it points to a variable that is set
  77434. +   to the value given in the field `val' when the option is found, but
  77435. +   left unchanged if the option is not found.
  77436. +
  77437. +   To have a long-named option do something other than set an `int' to
  77438. +   a compiled-in constant, such as set a value from `optarg', set the
  77439. +   option's `flag' field to zero and its `val' field to a nonzero
  77440. +   value (the equivalent single-letter option character, if there is
  77441. +   one).  For long options that have a zero `flag' field, `getopt'
  77442. +   returns the contents of the `val' field.  */
  77443. +
  77444. +struct option
  77445. +{
  77446. +#ifdef    __STDC__
  77447. +  const char *name;
  77448. +#else
  77449. +  char *name;
  77450. +#endif
  77451. +  /* has_arg can't be an enum because some compilers complain about
  77452. +     type mismatches in all the code that assumes it is an int.  */
  77453. +  int has_arg;
  77454. +  int *flag;
  77455. +  int val;
  77456. +};
  77457. +
  77458. +/* Names for the values of the `has_arg' field of `struct option'.  */
  77459. +
  77460. +enum _argtype
  77461. +{
  77462. +  no_argument,
  77463. +  required_argument,
  77464. +  optional_argument
  77465. +};
  77466. +
  77467. +#ifdef __STDC__
  77468. +extern int getopt (int argc, char *const *argv, const char *shortopts);
  77469. +extern int getopt_long (int argc, char *const *argv, const char *shortopts,
  77470. +                const struct option *longopts, int *longind);
  77471. +extern int getopt_long_only (int argc, char *const *argv,
  77472. +                 const char *shortopts,
  77473. +                     const struct option *longopts, int *longind);
  77474. +
  77475. +/* Internal only.  Users should not call this directly.  */
  77476. +extern int _getopt_internal (int argc, char *const *argv,
  77477. +                 const char *shortopts,
  77478. +                     const struct option *longopts, int *longind,
  77479. +                 int long_only);
  77480. +#else /* not __STDC__ */
  77481. +extern int getopt ();
  77482. +extern int getopt_long ();
  77483. +extern int getopt_long_only ();
  77484. +
  77485. +extern int _getopt_internal ();
  77486. +#endif /* not __STDC__ */
  77487. +
  77488. +#endif /* _GETOPT_H_ */
  77489. diff -rup --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/ialloc.c amiga/fsf/emacs/unixlib/src/zoneinfo/ialloc.c
  77490. --- baseline/fsf/emacs/unixlib/src/zoneinfo/ialloc.c    Wed Dec 31 17:00:00 1969
  77491. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/ialloc.c    Sat Sep 28 00:00:00 1996
  77492. @@ -0,0 +1,142 @@
  77493. +/*-
  77494. + * Copyright (c) 1991 The Regents of the University of California.
  77495. + * All rights reserved.
  77496. + *
  77497. + * This code is derived from software contributed to Berkeley by
  77498. + * Arthur David Olson of the National Cancer Institute.
  77499. + *
  77500. + * Redistribution and use in source and binary forms, with or without
  77501. + * modification, are permitted provided that the following conditions
  77502. + * are met:
  77503. + * 1. Redistributions of source code must retain the above copyright
  77504. + *    notice, this list of conditions and the following disclaimer.
  77505. + * 2. Redistributions in binary form must reproduce the above copyright
  77506. + *    notice, this list of conditions and the following disclaimer in the
  77507. + *    documentation and/or other materials provided with the distribution.
  77508. + * 3. All advertising materials mentioning features or use of this software
  77509. + *    must display the following acknowledgement:
  77510. + *    This product includes software developed by the University of
  77511. + *    California, Berkeley and its contributors.
  77512. + * 4. Neither the name of the University nor the names of its contributors
  77513. + *    may be used to endorse or promote products derived from this software
  77514. + *    without specific prior written permission.
  77515. + *
  77516. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  77517. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  77518. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  77519. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  77520. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  77521. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  77522. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  77523. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  77524. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  77525. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  77526. + * SUCH DAMAGE.
  77527. + */
  77528. +
  77529. +#ifndef lint
  77530. +static char sccsid[] = "@(#)ialloc.c    5.3 (Berkeley) 4/20/91";
  77531. +#endif /* not lint */
  77532. +
  77533. +#ifdef notdef
  77534. +static char    elsieid[] = "@(#)ialloc.c    8.18";
  77535. +#endif
  77536. +
  77537. +/*LINTLIBRARY*/
  77538. +
  77539. +#include <sys/cdefs.h>
  77540. +#include <sys/types.h>
  77541. +#include <string.h>
  77542. +#include <stdlib.h>
  77543. +
  77544. +#ifdef MAL
  77545. +#define NULLMAL(x)    ((x) == NULL || (x) == MAL)
  77546. +#else /* !defined MAL */
  77547. +#define NULLMAL(x)    ((x) == NULL)
  77548. +#endif /* !defined MAL */
  77549. +
  77550. +#define nonzero(n)    (((n) == 0) ? 1 : (n))
  77551. +
  77552. +char *    icalloc __P((int nelem, int elsize));
  77553. +char *    icatalloc __P((char * old, const char * new));
  77554. +char *    icpyalloc __P((const char * string));
  77555. +char *    imalloc __P((int n));
  77556. +char *    irealloc __P((char * pointer, int size));
  77557. +void    ifree __P((char * pointer));
  77558. +
  77559. +char *
  77560. +imalloc(n)
  77561. +const int    n;
  77562. +{
  77563. +#ifdef MAL
  77564. +    register char *    result;
  77565. +
  77566. +    result = malloc((size_t) nonzero(n));
  77567. +    return NULLMAL(result) ? NULL : result;
  77568. +#else /* !defined MAL */
  77569. +    return malloc((size_t) nonzero(n));
  77570. +#endif /* !defined MAL */
  77571. +}
  77572. +
  77573. +char *
  77574. +icalloc(nelem, elsize)
  77575. +int    nelem;
  77576. +int    elsize;
  77577. +{
  77578. +    if (nelem == 0 || elsize == 0)
  77579. +        nelem = elsize = 1;
  77580. +    return calloc((size_t) nelem, (size_t) elsize);
  77581. +}
  77582. +
  77583. +char *
  77584. +irealloc(pointer, size)
  77585. +char * const    pointer;
  77586. +const int    size;
  77587. +{
  77588. +    if (NULLMAL(pointer))
  77589. +        return imalloc(size);
  77590. +    return realloc((void *) pointer, (size_t) nonzero(size));
  77591. +}
  77592. +
  77593. +char *
  77594. +icatalloc(old, new)
  77595. +char * const        old;
  77596. +const char * const    new;
  77597. +{
  77598. +    register char *    result;
  77599. +    register    oldsize, newsize;
  77600. +
  77601. +    newsize = NULLMAL(new) ? 0 : strlen(new);
  77602. +    if (NULLMAL(old))
  77603. +        oldsize = 0;
  77604. +    else if (newsize == 0)
  77605. +        return old;
  77606. +    else    oldsize = strlen(old);
  77607. +    if ((result = irealloc(old, oldsize + newsize + 1)) != NULL)
  77608. +        if (!NULLMAL(new))
  77609. +            (void) strcpy(result + oldsize, new);
  77610. +    return result;
  77611. +}
  77612. +
  77613. +char *
  77614. +icpyalloc(string)
  77615. +const char * const    string;
  77616. +{
  77617. +    return icatalloc((char *) NULL, string);
  77618. +}
  77619. +
  77620. +void
  77621. +ifree(p)
  77622. +char * const    p;
  77623. +{
  77624. +    if (!NULLMAL(p))
  77625. +        (void) free(p);
  77626. +}
  77627. +
  77628. +void
  77629. +icfree(p)
  77630. +char * const    p;
  77631. +{
  77632. +    if (!NULLMAL(p))
  77633. +        (void) free(p);
  77634. +}
  77635. diff -rup --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/smakefile amiga/fsf/emacs/unixlib/src/zoneinfo/smakefile
  77636. --- baseline/fsf/emacs/unixlib/src/zoneinfo/smakefile    Wed Dec 31 17:00:00 1969
  77637. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/smakefile    Sat Sep 28 00:00:00 1996
  77638. @@ -0,0 +1,11 @@
  77639. +CFLAGS= DEFINE=TM_GMTOFF=tm_gmtoff DEFINE=TM_ZONE=tm_zone DEFINE=emkdir=mkdir DEFINE=NOSOLAR IDIR=src:unix/include/ IGNORE=104
  77640. +
  77641. +all: zic
  77642. +
  77643. +zic: zic.o ialloc.o getopt.o
  77644. +    sc link to zic zic.o ialloc.o getopt.o lib src:unix/src/unix.lib
  77645. +
  77646. +zic.o: zic.c
  77647. +ialloc.o: ialloc.c
  77648. +getopt.o: getopt.c getopt.h
  77649. +
  77650. Binary files baseline/fsf/emacs/unixlib/src/zoneinfo/zic and amiga/fsf/emacs/unixlib/src/zoneinfo/zic differ
  77651. diff -rup --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/zic.8 amiga/fsf/emacs/unixlib/src/zoneinfo/zic.8
  77652. --- baseline/fsf/emacs/unixlib/src/zoneinfo/zic.8    Wed Dec 31 17:00:00 1969
  77653. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/zic.8    Sat Sep 28 00:00:00 1996
  77654. @@ -0,0 +1,424 @@
  77655. +.\" Copyright (c) 1991 The Regents of the University of California.
  77656. +.\" All rights reserved.
  77657. +.\"
  77658. +.\" This code is derived from software contributed to Berkeley by
  77659. +.\" Arthur David Olson of the National Cancer Institute.
  77660. +.\"
  77661. +.\" Redistribution and use in source and binary forms, with or without
  77662. +.\" modification, are permitted provided that the following conditions
  77663. +.\" are met:
  77664. +.\" 1. Redistributions of source code must retain the above copyright
  77665. +.\"    notice, this list of conditions and the following disclaimer.
  77666. +.\" 2. Redistributions in binary form must reproduce the above copyright
  77667. +.\"    notice, this list of conditions and the following disclaimer in the
  77668. +.\"    documentation and/or other materials provided with the distribution.
  77669. +.\" 3. All advertising materials mentioning features or use of this software
  77670. +.\"    must display the following acknowledgement:
  77671. +.\"    This product includes software developed by the University of
  77672. +.\"    California, Berkeley and its contributors.
  77673. +.\" 4. Neither the name of the University nor the names of its contributors
  77674. +.\"    may be used to endorse or promote products derived from this software
  77675. +.\"    without specific prior written permission.
  77676. +.\"
  77677. +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  77678. +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  77679. +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  77680. +.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  77681. +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  77682. +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  77683. +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  77684. +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  77685. +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  77686. +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  77687. +.\" SUCH DAMAGE.
  77688. +.\"
  77689. +.\"    @(#)zic.8    5.2 (Berkeley) 4/20/91
  77690. +.\"
  77691. +.TH ZIC 8
  77692. +.SH NAME
  77693. +zic \- time zone compiler
  77694. +.SH SYNOPSIS
  77695. +.B zic
  77696. +[
  77697. +.B \-v
  77698. +] [
  77699. +.B \-d
  77700. +.I directory
  77701. +] [
  77702. +.B \-l
  77703. +.I localtime
  77704. +] [
  77705. +.B \-p
  77706. +.I posixrules
  77707. +] [
  77708. +.B \-L
  77709. +.I leapsecondfilename
  77710. +] [
  77711. +.B \-s
  77712. +] [
  77713. +.I filename
  77714. +\&... ]
  77715. +.SH DESCRIPTION
  77716. +.if t .ds lq ``
  77717. +.if t .ds rq ''
  77718. +.if n .ds lq \&"\"
  77719. +.if n .ds rq \&"\"
  77720. +.de q
  77721. +\\$3\*(lq\\$1\*(rq\\$2
  77722. +..
  77723. +.I Zic
  77724. +reads text from the file(s) named on the command line
  77725. +and creates the time conversion information files specified in this input.
  77726. +If a
  77727. +.I filename
  77728. +is
  77729. +.BR \- ,
  77730. +the standard input is read.
  77731. +.PP
  77732. +These options are available:
  77733. +.TP
  77734. +.BI "\-d " directory
  77735. +Create time conversion information files in the named directory rather than
  77736. +in the standard directory named below.
  77737. +.TP
  77738. +.BI "\-l " timezone
  77739. +Use the given time zone as local time.
  77740. +.I Zic
  77741. +will act as if the input contained a link line of the form
  77742. +.sp
  77743. +.ti +.5i
  77744. +Link    \fItimezone\fP        localtime
  77745. +.TP
  77746. +.BI "\-p " timezone
  77747. +Use the given time zone's rules when handling POSIX-format
  77748. +time zone environment variables.
  77749. +.I Zic
  77750. +will act as if the input contained a link line of the form
  77751. +.sp
  77752. +.ti +.5i
  77753. +Link    \fItimezone\fP        posixrules
  77754. +.TP
  77755. +.BI "\-L " leapsecondfilename
  77756. +Read leap second information from the file with the given name.
  77757. +If this option is not used,
  77758. +no leap second information appears in output files.
  77759. +.TP
  77760. +.B \-v
  77761. +Complain if a year that appears in a data file is outside the range
  77762. +of years representable by
  77763. +.IR time (2)
  77764. +values.
  77765. +.TP
  77766. +.B \-s
  77767. +Limit time values stored in output files to values that are the same
  77768. +whether they're taken to be signed or unsigned.
  77769. +You can use this option to generate SVVS-compatible files.
  77770. +.sp
  77771. +Input lines are made up of fields.
  77772. +Fields are separated from one another by any number of white space characters.
  77773. +Leading and trailing white space on input lines is ignored.
  77774. +An unquoted sharp character (#) in the input introduces a comment which extends
  77775. +to the end of the line the sharp character appears on.
  77776. +White space characters and sharp characters may be enclosed in double quotes
  77777. +(") if they're to be used as part of a field.
  77778. +Any line that is blank (after comment stripping) is ignored.
  77779. +Non-blank lines are expected to be of one of three types:
  77780. +rule lines, zone lines, and link lines.
  77781. +.PP
  77782. +A rule line has the form
  77783. +.nf
  77784. +.B
  77785. +.ti +.5i
  77786. +.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
  77787. +.sp
  77788. +Rule    NAME    FROM    TO    TYPE    IN    ON    AT    SAVE    LETTER/S
  77789. +.sp
  77790. +For example:
  77791. +.ti +.5i
  77792. +.sp
  77793. +Rule    USA    1969    1973    \-    Apr    lastSun    2:00    1:00    D
  77794. +.sp
  77795. +.fi
  77796. +The fields that make up a rule line are:
  77797. +.TP "\w'LETTER/S'u"
  77798. +.B NAME
  77799. +Gives the (arbitrary) name of the set of rules this rule is part of.
  77800. +.TP
  77801. +.B FROM
  77802. +Gives the first year in which the rule applies.
  77803. +The word
  77804. +.B minimum
  77805. +(or an abbreviation) means the minimum year with a representable time value.
  77806. +The word
  77807. +.B maximum
  77808. +(or an abbreviation) means the maximum year with a representable time value.
  77809. +.TP
  77810. +.B TO
  77811. +Gives the final year in which the rule applies.
  77812. +In addition to
  77813. +.B minimum
  77814. +and
  77815. +.B maximum
  77816. +(as above),
  77817. +the word
  77818. +.B only
  77819. +(or an abbreviation)
  77820. +may be used to repeat the value of the
  77821. +.B FROM
  77822. +field.
  77823. +.TP
  77824. +.B TYPE
  77825. +Gives the type of year in which the rule applies.
  77826. +If
  77827. +.B TYPE
  77828. +is
  77829. +.B \-
  77830. +then the rule applies in all years between
  77831. +.B FROM
  77832. +and
  77833. +.B TO
  77834. +inclusive;
  77835. +if
  77836. +.B TYPE
  77837. +is
  77838. +.BR uspres ,
  77839. +the rule applies in U.S. Presidential election years;
  77840. +if
  77841. +.B TYPE
  77842. +is
  77843. +.BR nonpres ,
  77844. +the rule applies in years other than U.S. Presidential election years.
  77845. +If
  77846. +.B TYPE
  77847. +is something else, then
  77848. +.I zic
  77849. +executes the command
  77850. +.ti +.5i
  77851. +\fByearistype\fP \fIyear\fP \fItype\fP
  77852. +.br
  77853. +to check the type of a year:
  77854. +an exit status of zero is taken to mean that the year is of the given type;
  77855. +an exit status of one is taken to mean that the year is not of the given type.
  77856. +.TP
  77857. +.B IN
  77858. +Names the month in which the rule takes effect.
  77859. +Month names may be abbreviated.
  77860. +.TP
  77861. +.B ON
  77862. +Gives the day on which the rule takes effect.
  77863. +Recognized forms include:
  77864. +.nf
  77865. +.in +.5i
  77866. +.sp
  77867. +.ta \w'Sun<=25\0\0'u
  77868. +5    the fifth of the month
  77869. +lastSun    the last Sunday in the month
  77870. +lastMon    the last Monday in the month
  77871. +Sun>=8    first Sunday on or after the eighth
  77872. +Sun<=25    last Sunday on or before the 25th
  77873. +.fi
  77874. +.in -.5i
  77875. +.sp
  77876. +Names of days of the week may be abbreviated or spelled out in full.
  77877. +Note that there must be no spaces within the
  77878. +.B ON
  77879. +field.
  77880. +.TP
  77881. +.B AT
  77882. +Gives the time of day at which the rule takes effect.
  77883. +Recognized forms include:
  77884. +.nf
  77885. +.in +.5i
  77886. +.sp
  77887. +.ta \w'1:28:13\0\0'u
  77888. +2    time in hours
  77889. +2:00    time in hours and minutes
  77890. +15:00    24-hour format time (for times after noon)
  77891. +1:28:14    time in hours, minutes, and seconds
  77892. +.fi
  77893. +.in -.5i
  77894. +.sp
  77895. +Any of these forms may be followed by the letter
  77896. +.B w
  77897. +if the given time is local
  77898. +.q "wall clock"
  77899. +time or
  77900. +.B s
  77901. +if the given time is local
  77902. +.q standard
  77903. +time; in the absence of
  77904. +.B w
  77905. +or
  77906. +.BR s ,
  77907. +wall clock time is assumed.
  77908. +.TP
  77909. +.B SAVE
  77910. +Gives the amount of time to be added to local standard time when the rule is in
  77911. +effect.
  77912. +This field has the same format as the
  77913. +.B AT
  77914. +field
  77915. +(although, of course, the
  77916. +.B w
  77917. +and
  77918. +.B s
  77919. +suffixes are not used).
  77920. +.TP
  77921. +.B LETTER/S
  77922. +Gives the
  77923. +.q "variable part"
  77924. +(for example, the
  77925. +.q S
  77926. +or
  77927. +.q D
  77928. +in
  77929. +.q EST
  77930. +or
  77931. +.q EDT )
  77932. +of time zone abbreviations to be used when this rule is in effect.
  77933. +If this field is
  77934. +.BR \- ,
  77935. +the variable part is null.
  77936. +.PP
  77937. +A zone line has the form
  77938. +.sp
  77939. +.nf
  77940. +.ti +.5i
  77941. +.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
  77942. +Zone    NAME    GMTOFF    RULES/SAVE    FORMAT    [UNTIL]
  77943. +.sp
  77944. +For example:
  77945. +.sp
  77946. +.ti +.5i
  77947. +Zone    Australia/South\-west    9:30    Aus    CST    1987 Mar 15 2:00
  77948. +.sp
  77949. +.fi
  77950. +The fields that make up a zone line are:
  77951. +.TP "\w'GMTOFF'u"
  77952. +.B NAME
  77953. +The name of the time zone.
  77954. +This is the name used in creating the time conversion information file for the
  77955. +zone.
  77956. +.TP
  77957. +.B GMTOFF
  77958. +The amount of time to add to GMT to get standard time in this zone.
  77959. +This field has the same format as the
  77960. +.B AT
  77961. +and
  77962. +.B SAVE
  77963. +fields of rule lines;
  77964. +begin the field with a minus sign if time must be subtracted from GMT.
  77965. +.TP
  77966. +.B RULES/SAVE
  77967. +The name of the rule(s) that apply in the time zone or,
  77968. +alternately, an amount of time to add to local standard time.
  77969. +If this field is
  77970. +.B \-
  77971. +then standard time always applies in the time zone.
  77972. +.TP
  77973. +.B FORMAT
  77974. +The format for time zone abbreviations in this time zone.
  77975. +The pair of characters
  77976. +.B %s
  77977. +is used to show where the
  77978. +.q "variable part"
  77979. +of the time zone abbreviation goes.
  77980. +.TP
  77981. +.B UNTIL
  77982. +The time at which the GMT offset or the rule(s) change for a location.
  77983. +It is specified as a year, a month, a day, and a time of day.
  77984. +If this is specified,
  77985. +the time zone information is generated from the given GMT offset
  77986. +and rule change until the time specified.
  77987. +.IP
  77988. +The next line must be a
  77989. +.q continuation
  77990. +line; this has the same form as a zone line except that the
  77991. +string
  77992. +.q Zone
  77993. +and the name are omitted, as the continuation line will
  77994. +place information starting at the time specified as the
  77995. +.B UNTIL
  77996. +field in the previous line in the file used by the previous line.
  77997. +Continuation lines may contain an
  77998. +.B UNTIL
  77999. +field, just as zone lines do, indicating that the next line is a further
  78000. +continuation.
  78001. +.PP
  78002. +A link line has the form
  78003. +.sp
  78004. +.nf
  78005. +.ti +.5i
  78006. +.if t .ta \w'Link\0\0'u +\w'LINK-FROM\0\0'u
  78007. +.if n .ta \w'Link\0\0'u +\w'US/Eastern\0\0'u
  78008. +Link    LINK-FROM    LINK-TO
  78009. +.sp
  78010. +For example:
  78011. +.sp
  78012. +.ti +.5i
  78013. +Link    US/Eastern    EST5EDT
  78014. +.sp
  78015. +.fi
  78016. +The
  78017. +.B LINK-FROM
  78018. +field should appear as the
  78019. +.B NAME
  78020. +field in some zone line;
  78021. +the
  78022. +.B LINK-TO
  78023. +field is used as an alternate name for that zone.
  78024. +.PP
  78025. +Except for continuation lines,
  78026. +lines may appear in any order in the input.
  78027. +.PP
  78028. +Lines in the file that describes leap seconds have the following form:
  78029. +.nf
  78030. +.B
  78031. +.ti +.5i
  78032. +.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
  78033. +Leap    YEAR    MONTH    DAY    HH:MM:SS    CORR    R/S
  78034. +.sp
  78035. +For example:
  78036. +.ti +.5i
  78037. +.sp
  78038. +Leap    1974    Dec    31    23:59:60    +    S
  78039. +.sp
  78040. +.fi
  78041. +The 
  78042. +.BR YEAR ,
  78043. +.BR MONTH ,
  78044. +.BR DAY ,
  78045. +and
  78046. +.B HH:MM:SS
  78047. +fields tell when the leap second happened.
  78048. +The
  78049. +.B CORR
  78050. +field
  78051. +should be
  78052. +.q +
  78053. +if a second was added
  78054. +or 
  78055. +.q -
  78056. +if a second was skipped.
  78057. +The
  78058. +.B R/S
  78059. +field
  78060. +should be (an abbreviation of)
  78061. +.q Stationary
  78062. +if the leap second time given by the other fields should be interpreted as GMT
  78063. +or
  78064. +(an abbreviation of)
  78065. +.q Rolling
  78066. +if the leap second time given by the other fields should be interpreted as
  78067. +local wall clock time.
  78068. +.SH NOTE
  78069. +For areas with more than two types of local time,
  78070. +you may need to use local standard time in the
  78071. +.B AT
  78072. +field of the earliest transition time's rule to ensure that
  78073. +the earliest transition time recorded in the compiled file is correct.
  78074. +.SH FILE
  78075. +/etc/zoneinfo    standard directory used for created files
  78076. +.SH "SEE ALSO"
  78077. +newctime(3), tzfile(5), zdump(8)
  78078. +.. @(#)zic.8    4.4
  78079. diff -rup --new-file baseline/fsf/emacs/unixlib/src/zoneinfo/zic.c amiga/fsf/emacs/unixlib/src/zoneinfo/zic.c
  78080. --- baseline/fsf/emacs/unixlib/src/zoneinfo/zic.c    Wed Dec 31 17:00:00 1969
  78081. +++ amiga/fsf/emacs/unixlib/src/zoneinfo/zic.c    Sat Sep 28 00:00:00 1996
  78082. @@ -0,0 +1,1903 @@
  78083. +/*-
  78084. + * Copyright (c) 1991 The Regents of the University of California.
  78085. + * All rights reserved.
  78086. + *
  78087. + * This code is derived from software contributed to Berkeley by
  78088. + * Arthur David Olson of the National Cancer Institute.
  78089. + *
  78090. + * Redistribution and use in source and binary forms, with or without
  78091. + * modification, are permitted provided that the following conditions
  78092. + * are met:
  78093. + * 1. Redistributions of source code must retain the above copyright
  78094. + *    notice, this list of conditions and the following disclaimer.
  78095. + * 2. Redistributions in binary form must reproduce the above copyright
  78096. + *    notice, this list of conditions and the following disclaimer in the
  78097. + *    documentation and/or other materials provided with the distribution.
  78098. + * 3. All advertising materials mentioning features or use of this software
  78099. + *    must display the following acknowledgement:
  78100. + *    This product includes software developed by the University of
  78101. + *    California, Berkeley and its contributors.
  78102. + * 4. Neither the name of the University nor the names of its contributors
  78103. + *    may be used to endorse or promote products derived from this software
  78104. + *    without specific prior written permission.
  78105. + *
  78106. + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  78107. + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  78108. + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  78109. + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  78110. + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  78111. + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  78112. + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  78113. + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  78114. + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  78115. + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  78116. + * SUCH DAMAGE.
  78117. + */
  78118. +
  78119. +#ifndef lint
  78120. +static char sccsid[] = "@(#)zic.c    5.3 (Berkeley) 4/20/91";
  78121. +#endif /* not lint */
  78122. +
  78123. +#ifdef notdef
  78124. +static char    elsieid[] = "@(#)zic.c    4.12";
  78125. +#endif
  78126. +
  78127. +#include <sys/types.h>
  78128. +#include <sys/cdefs.h>
  78129. +#include <sys/stat.h>
  78130. +#include <time.h>
  78131. +#include <tzfile.h>
  78132. +#include <stdio.h>
  78133. +#include <ctype.h>
  78134. +#include <string.h>
  78135. +#include <stdlib.h>
  78136. +
  78137. +#ifndef TRUE
  78138. +#define TRUE    1
  78139. +#define FALSE    0
  78140. +#endif /* !defined TRUE */
  78141. +
  78142. +#ifndef EXIT_FAILURE
  78143. +#define EXIT_FAILURE 1
  78144. +#endif
  78145. +
  78146. +#ifndef EXIT_SUCCESS
  78147. +#define EXIT_SUCCESS 0
  78148. +#endif
  78149. +
  78150. +struct rule {
  78151. +    const char *    r_filename;
  78152. +    int        r_linenum;
  78153. +    const char *    r_name;
  78154. +
  78155. +    int        r_loyear;    /* for example, 1986 */
  78156. +    int        r_hiyear;    /* for example, 1986 */
  78157. +    const char *    r_yrtype;
  78158. +
  78159. +    int        r_month;    /* 0..11 */
  78160. +
  78161. +    int        r_dycode;    /* see below */
  78162. +    int        r_dayofmonth;
  78163. +    int        r_wday;
  78164. +
  78165. +    long        r_tod;        /* time from midnight */
  78166. +    int        r_todisstd;    /* above is standard time if TRUE */
  78167. +                    /* or wall clock time if FALSE */
  78168. +    long        r_stdoff;    /* offset from standard time */
  78169. +    const char *    r_abbrvar;    /* variable part of abbreviation */
  78170. +
  78171. +    int        r_todo;        /* a rule to do (used in outzone) */
  78172. +    time_t        r_temp;        /* used in outzone */
  78173. +};
  78174. +
  78175. +/*
  78176. +**    r_dycode        r_dayofmonth    r_wday
  78177. +*/
  78178. +
  78179. +#define DC_DOM        0    /* 1..31 */    /* unused */
  78180. +#define DC_DOWGEQ    1    /* 1..31 */    /* 0..6 (Sun..Sat) */
  78181. +#define DC_DOWLEQ    2    /* 1..31 */    /* 0..6 (Sun..Sat) */
  78182. +
  78183. +struct zone {
  78184. +    const char *    z_filename;
  78185. +    int        z_linenum;
  78186. +
  78187. +    const char *    z_name;
  78188. +    long        z_gmtoff;
  78189. +    const char *    z_rule;
  78190. +    const char *    z_format;
  78191. +
  78192. +    long        z_stdoff;
  78193. +
  78194. +    struct rule *    z_rules;
  78195. +    int        z_nrules;
  78196. +
  78197. +    struct rule    z_untilrule;
  78198. +    time_t        z_untiltime;
  78199. +};
  78200. +
  78201. +extern char *    icatalloc __P((char * old, const char * new));
  78202. +extern char *    icpyalloc __P((const char * string));
  78203. +extern void    ifree __P((char * p));
  78204. +extern char *    imalloc __P((int n));
  78205. +extern char *    irealloc __P((char * old, int n));
  78206. +extern int    link __P((const char * fromname, const char * toname));
  78207. +extern char *    optarg;
  78208. +extern int    optind;
  78209. +static void    addtt __P((time_t starttime, int type));
  78210. +static int    addtype
  78211. +            __P((long gmtoff, const char * abbr, int isdst,
  78212. +            int ttisstd));
  78213. +static void    addleap __P((time_t t, int positive, int rolling));
  78214. +static void    adjleap __P((void));
  78215. +static void    associate __P((void));
  78216. +static int    ciequal __P((const char * ap, const char * bp));
  78217. +static void    convert __P((long val, char * buf));
  78218. +static void    dolink __P((const char * fromfile, const char * tofile));
  78219. +static void    eat __P((const char * name, int num));
  78220. +static void    eats __P((const char * name, int num,
  78221. +            const char * rname, int rnum));
  78222. +static long    eitol __P((int i));
  78223. +static void    error __P((const char * message));
  78224. +static char **    getfields __P((char * buf));
  78225. +static long    gethms __P((char * string, const char * errstrng,
  78226. +            int signable));
  78227. +static void    infile __P((const char * filename));
  78228. +static void    inleap __P((char ** fields, int nfields));
  78229. +static void    inlink __P((char ** fields, int nfields));
  78230. +static void    inrule __P((char ** fields, int nfields));
  78231. +static int    inzcont __P((char ** fields, int nfields));
  78232. +static int    inzone __P((char ** fields, int nfields));
  78233. +static int    inzsub __P((char ** fields, int nfields, int iscont));
  78234. +static int    itsabbr __P((const char * abbr, const char * word));
  78235. +static int    itsdir __P((const char * name));
  78236. +static int    lowerit __P((int c));
  78237. +static char *    memcheck __P((char * tocheck));
  78238. +static int    mkdirs __P((char * filename));
  78239. +static void    newabbr __P((const char * abbr));
  78240. +static long    oadd __P((long t1, long t2));
  78241. +static void    outzone __P((const struct zone * zp, int ntzones));
  78242. +static void    puttzcode __P((long code, FILE * fp));
  78243. +static int    rcomp __P((const void *leftp, const void *rightp));
  78244. +static time_t    rpytime __P((const struct rule * rp, int wantedy));
  78245. +static void    rulesub __P((struct rule * rp, char * loyearp, char * hiyearp,
  78246. +        char * typep, char * monthp, char * dayp, char * timep));
  78247. +static void    setboundaries __P((void));
  78248. +static time_t    tadd __P((time_t t1, long t2));
  78249. +static void    usage __P((void));
  78250. +static void    writezone __P((const char * name));
  78251. +static int    yearistype __P((int year, const char * type));
  78252. +
  78253. +static int        charcnt;
  78254. +static int        errors;
  78255. +static const char *    filename;
  78256. +static int        leapcnt;
  78257. +static int        linenum;
  78258. +static time_t        max_time;
  78259. +static int        max_year;
  78260. +static time_t        min_time;
  78261. +static int        min_year;
  78262. +static int        noise;
  78263. +static const char *    rfilename;
  78264. +static int        rlinenum;
  78265. +static const char *    progname;
  78266. +static int        timecnt;
  78267. +static int        typecnt;
  78268. +static int        tt_signed;
  78269. +
  78270. +/*
  78271. +** Line codes.
  78272. +*/
  78273. +
  78274. +#define LC_RULE        0
  78275. +#define LC_ZONE        1
  78276. +#define LC_LINK        2
  78277. +#define LC_LEAP        3
  78278. +
  78279. +/*
  78280. +** Which fields are which on a Zone line.
  78281. +*/
  78282. +
  78283. +#define ZF_NAME        1
  78284. +#define ZF_GMTOFF    2
  78285. +#define ZF_RULE        3
  78286. +#define ZF_FORMAT    4
  78287. +#define ZF_TILYEAR    5
  78288. +#define ZF_TILMONTH    6
  78289. +#define ZF_TILDAY    7
  78290. +#define ZF_TILTIME    8
  78291. +#define ZONE_MINFIELDS    5
  78292. +#define ZONE_MAXFIELDS    9
  78293. +
  78294. +/*
  78295. +** Which fields are which on a Zone continuation line.
  78296. +*/
  78297. +
  78298. +#define ZFC_GMTOFF    0
  78299. +#define ZFC_RULE    1
  78300. +#define ZFC_FORMAT    2
  78301. +#define ZFC_TILYEAR    3
  78302. +#define ZFC_TILMONTH    4
  78303. +#define ZFC_TILDAY    5
  78304. +#define ZFC_TILTIME    6
  78305. +#define ZONEC_MINFIELDS    3
  78306. +#define ZONEC_MAXFIELDS    7
  78307. +
  78308. +/*
  78309. +** Which files are which on a Rule line.
  78310. +*/
  78311. +
  78312. +#define RF_NAME        1
  78313. +#define RF_LOYEAR    2
  78314. +#define RF_HIYEAR    3
  78315. +#define RF_COMMAND    4
  78316. +#define RF_MONTH    5
  78317. +#define RF_DAY        6
  78318. +#define RF_TOD        7
  78319. +#define RF_STDOFF    8
  78320. +#define RF_ABBRVAR    9
  78321. +#define RULE_FIELDS    10
  78322. +
  78323. +/*
  78324. +** Which fields are which on a Link line.
  78325. +*/
  78326. +
  78327. +#define LF_FROM        1
  78328. +#define LF_TO        2
  78329. +#define LINK_FIELDS    3
  78330. +
  78331. +/*
  78332. +** Which fields are which on a Leap line.
  78333. +*/
  78334. +
  78335. +#define LP_YEAR        1
  78336. +#define LP_MONTH    2
  78337. +#define LP_DAY        3
  78338. +#define LP_TIME        4
  78339. +#define LP_CORR        5
  78340. +#define LP_ROLL        6
  78341. +#define LEAP_FIELDS    7
  78342. +
  78343. +/*
  78344. +** Year synonyms.
  78345. +*/
  78346. +
  78347. +#define YR_MINIMUM    0
  78348. +#define YR_MAXIMUM    1
  78349. +#define YR_ONLY        2
  78350. +
  78351. +static struct rule *    rules;
  78352. +static int        nrules;    /* number of rules */
  78353. +
  78354. +static struct zone *    zones;
  78355. +static int        nzones;    /* number of zones */
  78356. +
  78357. +struct link {
  78358. +    const char *    l_filename;
  78359. +    int        l_linenum;
  78360. +    const char *    l_from;
  78361. +    const char *    l_to;
  78362. +};
  78363. +
  78364. +static struct link *    links;
  78365. +static int        nlinks;
  78366. +
  78367. +struct lookup {
  78368. +    const char *    l_word;
  78369. +    const int    l_value;
  78370. +};
  78371. +
  78372. +static struct lookup const *    byword __P((const char * string,
  78373. +                    const struct lookup * lp));
  78374. +
  78375. +static struct lookup const    line_codes[] = {
  78376. +    "Rule",        LC_RULE,
  78377. +    "Zone",        LC_ZONE,
  78378. +    "Link",        LC_LINK,
  78379. +    "Leap",        LC_LEAP,
  78380. +    NULL,        0
  78381. +};
  78382. +
  78383. +static struct lookup const    mon_names[] = {
  78384. +    "January",    TM_JANUARY,
  78385. +    "February",    TM_FEBRUARY,
  78386. +    "March",    TM_MARCH,
  78387. +    "April",    TM_APRIL,
  78388. +    "May",        TM_MAY,
  78389. +    "June",        TM_JUNE,
  78390. +    "July",        TM_JULY,
  78391. +    "August",    TM_AUGUST,
  78392. +    "September",    TM_SEPTEMBER,
  78393. +    "October",    TM_OCTOBER,
  78394. +    "November",    TM_NOVEMBER,
  78395. +    "December",    TM_DECEMBER,
  78396. +    NULL,        0
  78397. +};
  78398. +
  78399. +static struct lookup const    wday_names[] = {
  78400. +    "Sunday",    TM_SUNDAY,
  78401. +    "Monday",    TM_MONDAY,
  78402. +    "Tuesday",    TM_TUESDAY,
  78403. +    "Wednesday",    TM_WEDNESDAY,
  78404. +    "Thursday",    TM_THURSDAY,
  78405. +    "Friday",    TM_FRIDAY,
  78406. +    "Saturday",    TM_SATURDAY,
  78407. +    NULL,        0
  78408. +};
  78409. +
  78410. +static struct lookup const    lasts[] = {
  78411. +    "last-Sunday",        TM_SUNDAY,
  78412. +    "last-Monday",        TM_MONDAY,
  78413. +    "last-Tuesday",        TM_TUESDAY,
  78414. +    "last-Wednesday",    TM_WEDNESDAY,
  78415. +    "last-Thursday",    TM_THURSDAY,
  78416. +    "last-Friday",        TM_FRIDAY,
  78417. +    "last-Saturday",    TM_SATURDAY,
  78418. +    NULL,            0
  78419. +};
  78420. +
  78421. +static struct lookup const    begin_years[] = {
  78422. +    "minimum",        YR_MINIMUM,
  78423. +    "maximum",        YR_MAXIMUM,
  78424. +    NULL,            0
  78425. +};
  78426. +
  78427. +static struct lookup const    end_years[] = {
  78428. +    "minimum",        YR_MINIMUM,
  78429. +    "maximum",        YR_MAXIMUM,
  78430. +    "only",            YR_ONLY,
  78431. +    NULL,            0
  78432. +};
  78433. +
  78434. +static struct lookup const    leap_types[] = {
  78435. +    "Rolling",        TRUE,
  78436. +    "Stationary",        FALSE,
  78437. +    NULL,            0
  78438. +};
  78439. +
  78440. +static const int    len_months[2][MONSPERYEAR] = {
  78441. +    31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,
  78442. +    31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
  78443. +};
  78444. +
  78445. +static const int    len_years[2] = {
  78446. +    DAYSPERNYEAR, DAYSPERLYEAR
  78447. +};
  78448. +
  78449. +static time_t        ats[TZ_MAX_TIMES];
  78450. +static unsigned char    types[TZ_MAX_TIMES];
  78451. +static long        gmtoffs[TZ_MAX_TYPES];
  78452. +static char        isdsts[TZ_MAX_TYPES];
  78453. +static char        abbrinds[TZ_MAX_TYPES];
  78454. +static char        ttisstds[TZ_MAX_TYPES];
  78455. +static char        chars[TZ_MAX_CHARS];
  78456. +static time_t        trans[TZ_MAX_LEAPS];
  78457. +static long        corr[TZ_MAX_LEAPS];
  78458. +static char        roll[TZ_MAX_LEAPS];
  78459. +
  78460. +/*
  78461. +** Memory allocation.
  78462. +*/
  78463. +
  78464. +static char *
  78465. +memcheck(ptr)
  78466. +char * const    ptr;
  78467. +{
  78468. +    if (ptr == NULL) {
  78469. +        (void) perror(progname);
  78470. +        (void) exit(EXIT_FAILURE);
  78471. +    }
  78472. +    return ptr;
  78473. +}
  78474. +
  78475. +#define emalloc(size)        memcheck(imalloc(size))
  78476. +#define erealloc(ptr, size)    memcheck(irealloc(ptr, size))
  78477. +#define ecpyalloc(ptr)        memcheck(icpyalloc(ptr))
  78478. +#define ecatalloc(oldp, newp)    memcheck(icatalloc(oldp, newp))
  78479. +
  78480. +/*
  78481. +** Error handling.
  78482. +*/
  78483. +
  78484. +static void
  78485. +eats(name, num, rname, rnum)
  78486. +const char * const    name;
  78487. +const int        num;
  78488. +const char * const    rname;
  78489. +const int        rnum;
  78490. +{
  78491. +    filename = name;
  78492. +    linenum = num;
  78493. +    rfilename = rname;
  78494. +    rlinenum = rnum;
  78495. +}
  78496. +
  78497. +static void
  78498. +eat(name, num)
  78499. +const char * const    name;
  78500. +const int        num;
  78501. +{
  78502. +    eats(name, num, (char *) NULL, -1);
  78503. +}
  78504. +
  78505. +static void
  78506. +error(string)
  78507. +const char * const    string;
  78508. +{
  78509. +    /*
  78510. +    ** Match the format of "cc" to allow sh users to
  78511. +    **     zic ... 2>&1 | error -t "*" -v
  78512. +    ** on BSD systems.
  78513. +    */
  78514. +    (void) fprintf(stderr, "\"%s\", line %d: %s",
  78515. +        filename, linenum, string);
  78516. +    if (rfilename != NULL)
  78517. +        (void) fprintf(stderr, " (rule from \"%s\", line %d)",
  78518. +            rfilename, rlinenum);
  78519. +    (void) fprintf(stderr, "\n");
  78520. +    ++errors;
  78521. +}
  78522. +
  78523. +static void
  78524. +usage()
  78525. +{
  78526. +    (void) fprintf(stderr,
  78527. +"%s: usage is %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] [ -d directory ]\n\
  78528. +\t[ -L leapseconds ] [ filename ... ]\n",
  78529. +        progname, progname);
  78530. +    (void) exit(EXIT_FAILURE);
  78531. +}
  78532. +
  78533. +static const char *    psxrules = NULL;
  78534. +static const char *    lcltime = NULL;
  78535. +static const char *    directory = NULL;
  78536. +static const char *    leapsec = NULL;
  78537. +static int        sflag = FALSE;
  78538. +
  78539. +int
  78540. +main(argc, argv)
  78541. +int    argc;
  78542. +char *    argv[];
  78543. +{
  78544. +    register int    i, j;
  78545. +    register int    c;
  78546. +
  78547. +    (void) umask(umask(022) | 022);
  78548. +    progname = argv[0];
  78549. +    while ((c = getopt(argc, argv, "d:l:p:L:vs")) != EOF)
  78550. +        switch (c) {
  78551. +            default:
  78552. +                usage();
  78553. +            case 'd':
  78554. +                if (directory == NULL)
  78555. +                    directory = optarg;
  78556. +                else {
  78557. +                    (void) fprintf(stderr,
  78558. +"%s: More than one -d option specified\n",
  78559. +                        progname);
  78560. +                    (void) exit(EXIT_FAILURE);
  78561. +                }
  78562. +                break;
  78563. +            case 'l':
  78564. +                if (lcltime == NULL)
  78565. +                    lcltime = optarg;
  78566. +                else {
  78567. +                    (void) fprintf(stderr,
  78568. +"%s: More than one -l option specified\n",
  78569. +                        progname);
  78570. +                    (void) exit(EXIT_FAILURE);
  78571. +                }
  78572. +                break;
  78573. +            case 'p':
  78574. +                if (psxrules == NULL)
  78575. +                    psxrules = optarg;
  78576. +                else {
  78577. +                    (void) fprintf(stderr,
  78578. +"%s: More than one -p option specified\n",
  78579. +                        progname);
  78580. +                    (void) exit(EXIT_FAILURE);
  78581. +                }
  78582. +                break;
  78583. +            case 'L':
  78584. +                if (leapsec == NULL)
  78585. +                    leapsec = optarg;
  78586. +                else {
  78587. +                    (void) fprintf(stderr,
  78588. +"%s: More than one -L option specified\n",
  78589. +                        progname);
  78590. +                    (void) exit(EXIT_FAILURE);
  78591. +                }
  78592. +                break;
  78593. +            case 'v':
  78594. +                noise = TRUE;
  78595. +                break;
  78596. +            case 's':
  78597. +                sflag = TRUE;
  78598. +                break;
  78599. +        }
  78600. +    if (optind == argc - 1 && strcmp(argv[optind], "=") == 0)
  78601. +        usage();    /* usage message by request */
  78602. +    if (directory == NULL)
  78603. +        directory = TZDIR;
  78604. +
  78605. +    setboundaries();
  78606. +
  78607. +    if (optind < argc && leapsec != NULL) {
  78608. +        infile(leapsec);
  78609. +        adjleap();
  78610. +    }
  78611. +
  78612. +    zones = (struct zone *) emalloc(0);
  78613. +    rules = (struct rule *) emalloc(0);
  78614. +    links = (struct link *) emalloc(0);
  78615. +    for (i = optind; i < argc; ++i)
  78616. +        infile(argv[i]);
  78617. +    if (errors)
  78618. +        (void) exit(EXIT_FAILURE);
  78619. +    associate();
  78620. +    for (i = 0; i < nzones; i = j) {
  78621. +        /*
  78622. +        ** Find the next non-continuation zone entry.
  78623. +        */
  78624. +        for (j = i + 1; j < nzones && zones[j].z_name == NULL; ++j)
  78625. +            ;
  78626. +        outzone(&zones[i], j - i);
  78627. +    }
  78628. +    /*
  78629. +    ** Make links.
  78630. +    */
  78631. +    for (i = 0; i < nlinks; ++i)
  78632. +        dolink(links[i].l_from, links[i].l_to);
  78633. +    if (lcltime != NULL)
  78634. +        dolink(lcltime, TZDEFAULT);
  78635. +    if (psxrules != NULL)
  78636. +        dolink(psxrules, TZDEFRULES);
  78637. +    return (errors == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
  78638. +}
  78639. +
  78640. +static void
  78641. +dolink(fromfile, tofile)
  78642. +const char * const    fromfile;
  78643. +const char * const    tofile;
  78644. +{
  78645. +    register char *    fromname;
  78646. +    register char *    toname;
  78647. +
  78648. +    fromname = ecpyalloc(directory);
  78649. +    fromname = ecatalloc(fromname, "/");
  78650. +    fromname = ecatalloc(fromname, fromfile);
  78651. +    if (strchr(tofile, ':')) toname = ecpyalloc(tofile);
  78652. +    else
  78653. +      {
  78654. +        toname = ecpyalloc(directory);
  78655. +        toname = ecatalloc(toname, "/");
  78656. +        toname = ecatalloc(toname, tofile);
  78657. +      }
  78658. +    /*
  78659. +    ** We get to be careful here since
  78660. +    ** there's a fair chance of root running us.
  78661. +    */
  78662. +    if (!itsdir(toname))
  78663. +        (void) remove(toname);
  78664. +    if (link(fromname, toname) != 0) {
  78665. +        (void) fprintf(stderr, "%s: Can't link from %s to ",
  78666. +            progname, fromname);
  78667. +        (void) perror(toname);
  78668. +        (void) exit(EXIT_FAILURE);
  78669. +    }
  78670. +    ifree(fromname);
  78671. +    ifree(toname);
  78672. +}
  78673. +
  78674. +static void
  78675. +setboundaries()
  78676. +{
  78677. +    register time_t    bit;
  78678. +
  78679. +    for (bit = 1; bit > 0; bit <<= 1)
  78680. +        ;
  78681. +    if (bit == 0) {        /* time_t is an unsigned type */
  78682. +        tt_signed = FALSE;
  78683. +        min_time = 0;
  78684. +        max_time = ~(time_t) 0;
  78685. +        if (sflag)
  78686. +            max_time >>= 1;
  78687. +    } else {
  78688. +        tt_signed = TRUE;
  78689. +        min_time = bit;
  78690. +        max_time = bit;
  78691. +        ++max_time;
  78692. +        max_time = -max_time;
  78693. +        if (sflag)
  78694. +            min_time = 0;
  78695. +    }
  78696. +    min_year = TM_YEAR_BASE + gmtime(&min_time)->tm_year;
  78697. +    max_year = TM_YEAR_BASE + gmtime(&max_time)->tm_year;
  78698. +}
  78699. +
  78700. +static int
  78701. +itsdir(name)
  78702. +const char * const    name;
  78703. +{
  78704. +    struct stat    s;
  78705. +
  78706. +    return (stat(name, &s) == 0 && S_ISDIR(s.st_mode));
  78707. +}
  78708. +
  78709. +/*
  78710. +** Associate sets of rules with zones.
  78711. +*/
  78712. +
  78713. +/*
  78714. +** Sort by rule name.
  78715. +*/
  78716. +
  78717. +static int
  78718. +rcomp(cp1, cp2)
  78719. +const void *    cp1;
  78720. +const void *    cp2;
  78721. +{
  78722. +    return strcmp(((struct rule *) cp1)->r_name,
  78723. +        ((struct rule *) cp2)->r_name);
  78724. +}
  78725. +
  78726. +static void
  78727. +associate()
  78728. +{
  78729. +    register struct zone *    zp;
  78730. +    register struct rule *    rp;
  78731. +    register int        base, out;
  78732. +    register int        i;
  78733. +
  78734. +    if (nrules != 0)
  78735. +        (void) qsort((void *) rules, (size_t) nrules,
  78736. +             (size_t) sizeof *rules, rcomp);
  78737. +    for (i = 0; i < nzones; ++i) {
  78738. +        zp = &zones[i];
  78739. +        zp->z_rules = NULL;
  78740. +        zp->z_nrules = 0;
  78741. +    }
  78742. +    for (base = 0; base < nrules; base = out) {
  78743. +        rp = &rules[base];
  78744. +        for (out = base + 1; out < nrules; ++out)
  78745. +            if (strcmp(rp->r_name, rules[out].r_name) != 0)
  78746. +                break;
  78747. +        for (i = 0; i < nzones; ++i) {
  78748. +            zp = &zones[i];
  78749. +            if (strcmp(zp->z_rule, rp->r_name) != 0)
  78750. +                continue;
  78751. +            zp->z_rules = rp;
  78752. +            zp->z_nrules = out - base;
  78753. +        }
  78754. +    }
  78755. +    for (i = 0; i < nzones; ++i) {
  78756. +        zp = &zones[i];
  78757. +        if (zp->z_nrules == 0) {
  78758. +            /*
  78759. +            ** Maybe we have a local standard time offset.
  78760. +            */
  78761. +            eat(zp->z_filename, zp->z_linenum);
  78762. +            zp->z_stdoff =
  78763. +                gethms((char *)zp->z_rule, "unruly zone", TRUE);
  78764. +            /*
  78765. +            ** Note, though, that if there's no rule,
  78766. +            ** a '%s' in the format is a bad thing.
  78767. +            */
  78768. +            if (strchr(zp->z_format, '%') != 0)
  78769. +                error("%s in ruleless zone");
  78770. +        }
  78771. +    }
  78772. +    if (errors)
  78773. +        (void) exit(EXIT_FAILURE);
  78774. +}
  78775. +
  78776. +static void
  78777. +infile(name)
  78778. +const char *    name;
  78779. +{
  78780. +    register FILE *            fp;
  78781. +    register char **        fields;
  78782. +    register char *            cp;
  78783. +    register const struct lookup *    lp;
  78784. +    register int            nfields;
  78785. +    register int            wantcont;
  78786. +    register int            num;
  78787. +    char                buf[BUFSIZ];
  78788. +
  78789. +    if (strcmp(name, "-") == 0) {
  78790. +        name = "standard input";
  78791. +        fp = stdin;
  78792. +    } else if ((fp = fopen(name, "r")) == NULL) {
  78793. +        (void) fprintf(stderr, "%s: Can't open ", progname);
  78794. +        (void) perror(name);
  78795. +        (void) exit(EXIT_FAILURE);
  78796. +    }
  78797. +    wantcont = FALSE;
  78798. +    for (num = 1; ; ++num) {
  78799. +        eat(name, num);
  78800. +        if (fgets(buf, (int) sizeof buf, fp) != buf)
  78801. +            break;
  78802. +        cp = strchr(buf, '\n');
  78803. +        if (cp == NULL) {
  78804. +            error("line too long");
  78805. +            (void) exit(EXIT_FAILURE);
  78806. +        }
  78807. +        *cp = '\0';
  78808. +        fields = getfields(buf);
  78809. +        nfields = 0;
  78810. +        while (fields[nfields] != NULL) {
  78811. +            if (ciequal(fields[nfields], "-"))
  78812. +                fields[nfields] = "";
  78813. +            ++nfields;
  78814. +        }
  78815. +        if (nfields == 0) {
  78816. +            /* nothing to do */
  78817. +        } else if (wantcont) {
  78818. +            wantcont = inzcont(fields, nfields);
  78819. +        } else {
  78820. +            lp = byword(fields[0], line_codes);
  78821. +            if (lp == NULL)
  78822. +                error("input line of unknown type");
  78823. +            else switch ((int) (lp->l_value)) {
  78824. +                case LC_RULE:
  78825. +                    inrule(fields, nfields);
  78826. +                    wantcont = FALSE;
  78827. +                    break;
  78828. +                case LC_ZONE:
  78829. +                    wantcont = inzone(fields, nfields);
  78830. +                    break;
  78831. +                case LC_LINK:
  78832. +                    inlink(fields, nfields);
  78833. +                    wantcont = FALSE;
  78834. +                    break;
  78835. +                case LC_LEAP:
  78836. +                    if (name != leapsec)
  78837. +                        (void) fprintf(stderr,
  78838. +"%s: Leap line in non leap seconds file %s\n",
  78839. +                            progname, name);
  78840. +                    else    inleap(fields, nfields);
  78841. +                    wantcont = FALSE;
  78842. +                    break;
  78843. +                default:    /* "cannot happen" */
  78844. +                    (void) fprintf(stderr,
  78845. +"%s: panic: Invalid l_value %d\n",
  78846. +                        progname, lp->l_value);
  78847. +                    (void) exit(EXIT_FAILURE);
  78848. +            }
  78849. +        }
  78850. +        ifree((char *) fields);
  78851. +    }
  78852. +    if (ferror(fp)) {
  78853. +        (void) fprintf(stderr, "%s: Error reading ", progname);
  78854. +        (void) perror(filename);
  78855. +        (void) exit(EXIT_FAILURE);
  78856. +    }
  78857. +    if (fp != stdin && fclose(fp)) {
  78858. +        (void) fprintf(stderr, "%s: Error closing ", progname);
  78859. +        (void) perror(filename);
  78860. +        (void) exit(EXIT_FAILURE);
  78861. +    }
  78862. +    if (wantcont)
  78863. +        error("expected continuation line not found");
  78864. +}
  78865. +
  78866. +/*
  78867. +** Convert a string of one of the forms
  78868. +**    h    -h     hh:mm    -hh:mm    hh:mm:ss    -hh:mm:ss
  78869. +** into a number of seconds.
  78870. +** A null string maps to zero.
  78871. +** Call error with errstring and return zero on errors.
  78872. +*/
  78873. +
  78874. +static long
  78875. +gethms(string, errstring, signable)
  78876. +char *        string;
  78877. +const char * const    errstring;
  78878. +const int        signable;
  78879. +{
  78880. +    int    hh, mm, ss, sign;
  78881. +
  78882. +    if (string == NULL || *string == '\0')
  78883. +        return 0;
  78884. +    if (!signable)
  78885. +        sign = 1;
  78886. +    else if (*string == '-') {
  78887. +        sign = -1;
  78888. +        ++string;
  78889. +    } else    sign = 1;
  78890. +    if (sscanf(string, "%d:%d:%d", &hh, &mm, &ss) == 3) ;
  78891. +    else if (sscanf(string, "%d:%d", &hh, &mm) == 2) ss = 0;
  78892. +    else if (sscanf(string, "%d", &hh) == 1) mm = ss = 0;
  78893. +    else
  78894. +    {
  78895. +        error(errstring);
  78896. +        return 0;
  78897. +    }
  78898. +    if (hh < 0 || hh >= HOURSPERDAY ||
  78899. +        mm < 0 || mm >= MINSPERHOUR ||
  78900. +        ss < 0 || ss > SECSPERMIN) {
  78901. +            error(errstring);
  78902. +            return 0;
  78903. +    }
  78904. +    return eitol(sign) *
  78905. +        (eitol(hh * MINSPERHOUR + mm) *
  78906. +        eitol(SECSPERMIN) + eitol(ss));
  78907. +}
  78908. +
  78909. +static void
  78910. +inrule(fields, nfields)
  78911. +register char ** const    fields;
  78912. +const int        nfields;
  78913. +{
  78914. +    static struct rule    r;
  78915. +
  78916. +    if (nfields != RULE_FIELDS) {
  78917. +        error("wrong number of fields on Rule line");
  78918. +        return;
  78919. +    }
  78920. +    if (*fields[RF_NAME] == '\0') {
  78921. +        error("nameless rule");
  78922. +        return;
  78923. +    }
  78924. +    r.r_filename = filename;
  78925. +    r.r_linenum = linenum;
  78926. +    r.r_stdoff = gethms(fields[RF_STDOFF], "invalid saved time", TRUE);
  78927. +    rulesub(&r, fields[RF_LOYEAR], fields[RF_HIYEAR], fields[RF_COMMAND],
  78928. +        fields[RF_MONTH], fields[RF_DAY], fields[RF_TOD]);
  78929. +    r.r_name = ecpyalloc(fields[RF_NAME]);
  78930. +    r.r_abbrvar = ecpyalloc(fields[RF_ABBRVAR]);
  78931. +    rules = (struct rule *) erealloc((char *) rules,
  78932. +        (int) ((nrules + 1) * sizeof *rules));
  78933. +    rules[nrules++] = r;
  78934. +}
  78935. +
  78936. +static int
  78937. +inzone(fields, nfields)
  78938. +register char ** const    fields;
  78939. +const int        nfields;
  78940. +{
  78941. +    register int    i;
  78942. +    char        buf[132];
  78943. +
  78944. +    if (nfields < ZONE_MINFIELDS || nfields > ZONE_MAXFIELDS) {
  78945. +        error("wrong number of fields on Zone line");
  78946. +        return FALSE;
  78947. +    }
  78948. +    if (strcmp(fields[ZF_NAME], TZDEFAULT) == 0 && lcltime != NULL) {
  78949. +        (void) sprintf(buf,
  78950. +            "\"Zone %s\" line and -l option are mutually exclusive",
  78951. +            TZDEFAULT);
  78952. +        error(buf);
  78953. +        return FALSE;
  78954. +    }
  78955. +    if (strcmp(fields[ZF_NAME], TZDEFRULES) == 0 && psxrules != NULL) {
  78956. +        (void) sprintf(buf,
  78957. +            "\"Zone %s\" line and -p option are mutually exclusive",
  78958. +            TZDEFRULES);
  78959. +        error(buf);
  78960. +        return FALSE;
  78961. +    }
  78962. +    for (i = 0; i < nzones; ++i)
  78963. +        if (zones[i].z_name != NULL &&
  78964. +            strcmp(zones[i].z_name, fields[ZF_NAME]) == 0) {
  78965. +                (void) sprintf(buf,
  78966. +"duplicate zone name %s (file \"%s\", line %d)",
  78967. +                    fields[ZF_NAME],
  78968. +                    zones[i].z_filename,
  78969. +                    zones[i].z_linenum);
  78970. +                error(buf);
  78971. +                return FALSE;
  78972. +        }
  78973. +    return inzsub(fields, nfields, FALSE);
  78974. +}
  78975. +
  78976. +static int
  78977. +inzcont(fields, nfields)
  78978. +register char ** const    fields;
  78979. +const int        nfields;
  78980. +{
  78981. +    if (nfields < ZONEC_MINFIELDS || nfields > ZONEC_MAXFIELDS) {
  78982. +        error("wrong number of fields on Zone continuation line");
  78983. +        return FALSE;
  78984. +    }
  78985. +    return inzsub(fields, nfields, TRUE);
  78986. +}
  78987. +
  78988. +static int
  78989. +inzsub(fields, nfields, iscont)
  78990. +register char ** const    fields;
  78991. +const int        nfields;
  78992. +const int        iscont;
  78993. +{
  78994. +    register char *        cp;
  78995. +    static struct zone    z;
  78996. +    register int        i_gmtoff, i_rule, i_format;
  78997. +    register int        i_untilyear, i_untilmonth;
  78998. +    register int        i_untilday, i_untiltime;
  78999. +    register int        hasuntil;
  79000. +
  79001. +    if (iscont) {
  79002. +        i_gmtoff = ZFC_GMTOFF;
  79003. +        i_rule = ZFC_RULE;
  79004. +        i_format = ZFC_FORMAT;
  79005. +        i_untilyear = ZFC_TILYEAR;
  79006. +        i_untilmonth = ZFC_TILMONTH;
  79007. +        i_untilday = ZFC_TILDAY;
  79008. +        i_untiltime = ZFC_TILTIME;
  79009. +        z.z_name = NULL;
  79010. +    } else {
  79011. +        i_gmtoff = ZF_GMTOFF;
  79012. +        i_rule = ZF_RULE;
  79013. +        i_format = ZF_FORMAT;
  79014. +        i_untilyear = ZF_TILYEAR;
  79015. +        i_untilmonth = ZF_TILMONTH;
  79016. +        i_untilday = ZF_TILDAY;
  79017. +        i_untiltime = ZF_TILTIME;
  79018. +        z.z_name = ecpyalloc(fields[ZF_NAME]);
  79019. +    }
  79020. +    z.z_filename = filename;
  79021. +    z.z_linenum = linenum;
  79022. +    z.z_gmtoff = gethms(fields[i_gmtoff], "invalid GMT offset", TRUE);
  79023. +    if ((cp = strchr(fields[i_format], '%')) != 0) {
  79024. +        if (*++cp != 's' || strchr(cp, '%') != 0) {
  79025. +            error("invalid abbreviation format");
  79026. +            return FALSE;
  79027. +        }
  79028. +    }
  79029. +    z.z_rule = ecpyalloc(fields[i_rule]);
  79030. +    z.z_format = ecpyalloc(fields[i_format]);
  79031. +    hasuntil = nfields > i_untilyear;
  79032. +    if (hasuntil) {
  79033. +        z.z_untilrule.r_filename = filename;
  79034. +        z.z_untilrule.r_linenum = linenum;
  79035. +        rulesub(&z.z_untilrule,
  79036. +            fields[i_untilyear],
  79037. +            "only",
  79038. +            "",
  79039. +            (nfields > i_untilmonth) ? fields[i_untilmonth] : "Jan",
  79040. +            (nfields > i_untilday) ? fields[i_untilday] : "1",
  79041. +            (nfields > i_untiltime) ? fields[i_untiltime] : "0");
  79042. +        z.z_untiltime = rpytime(&z.z_untilrule, z.z_untilrule.r_loyear);
  79043. +        if (iscont && nzones > 0 && z.z_untiltime < max_time &&
  79044. +            z.z_untiltime > min_time &&
  79045. +            zones[nzones - 1].z_untiltime >= z.z_untiltime) {
  79046. +error("Zone continuation line end time is not after end time of previous line");
  79047. +            return FALSE;
  79048. +        }
  79049. +    }
  79050. +    zones = (struct zone *) erealloc((char *) zones,
  79051. +        (int) ((nzones + 1) * sizeof *zones));
  79052. +    zones[nzones++] = z;
  79053. +    /*
  79054. +    ** If there was an UNTIL field on this line,
  79055. +    ** there's more information about the zone on the next line.
  79056. +    */
  79057. +    return hasuntil;
  79058. +}
  79059. +
  79060. +static void
  79061. +inleap(fields, nfields)
  79062. +register char ** const    fields;
  79063. +const int        nfields;
  79064. +{
  79065. +    register const char *        cp;
  79066. +    register const struct lookup *    lp;
  79067. +    register int            i, j;
  79068. +    int                year, month, day;
  79069. +    long                dayoff, tod;
  79070. +    time_t                t;
  79071. +
  79072. +    if (nfields != LEAP_FIELDS) {
  79073. +        error("wrong number of fields on Leap line");
  79074. +        return;
  79075. +    }
  79076. +    dayoff = 0;
  79077. +    cp = fields[LP_YEAR];
  79078. +    if (sscanf((char *)cp, "%d", &year) != 1 ||
  79079. +        year < min_year || year > max_year) {
  79080. +            /*
  79081. +             * Leapin' Lizards!
  79082. +             */
  79083. +            error("invalid leaping year");
  79084. +            return;
  79085. +    }
  79086. +    j = EPOCH_YEAR;
  79087. +    while (j != year) {
  79088. +        if (year > j) {
  79089. +            i = len_years[isleap(j)];
  79090. +            ++j;
  79091. +        } else {
  79092. +            --j;
  79093. +            i = -len_years[isleap(j)];
  79094. +        }
  79095. +        dayoff = oadd(dayoff, eitol(i));
  79096. +    }
  79097. +    if ((lp = byword(fields[LP_MONTH], mon_names)) == NULL) {
  79098. +        error("invalid month name");
  79099. +        return;
  79100. +    }
  79101. +    month = lp->l_value;
  79102. +    j = TM_JANUARY;
  79103. +    while (j != month) {
  79104. +        i = len_months[isleap(year)][j];
  79105. +        dayoff = oadd(dayoff, eitol(i));
  79106. +        ++j;
  79107. +    }
  79108. +    cp = fields[LP_DAY];
  79109. +    if (sscanf((char *)cp, "%d", &day) != 1 ||
  79110. +        day <= 0 || day > len_months[isleap(year)][month]) {
  79111. +            error("invalid day of month");
  79112. +            return;
  79113. +    }
  79114. +    dayoff = oadd(dayoff, eitol(day - 1));
  79115. +    if (dayoff < 0 && !tt_signed) {
  79116. +        error("time before zero");
  79117. +        return;
  79118. +    }
  79119. +    t = (time_t) dayoff * SECSPERDAY;
  79120. +    /*
  79121. +    ** Cheap overflow check.
  79122. +    */
  79123. +    if (t / SECSPERDAY != dayoff) {
  79124. +        error("time overflow");
  79125. +        return;
  79126. +    }
  79127. +    tod = gethms(fields[LP_TIME], "invalid time of day", FALSE);
  79128. +    cp = fields[LP_CORR];
  79129. +    if (strcmp(cp, "+") != 0 && strcmp(cp, "") != 0) {
  79130. +        /* infile() turned "-" into "" */
  79131. +        error("illegal CORRECTION field on Leap line");
  79132. +        return;
  79133. +    }
  79134. +    if ((lp = byword(fields[LP_ROLL], leap_types)) == NULL) {
  79135. +        error("illegal Rolling/Stationary field on Leap line");
  79136. +        return;
  79137. +    }
  79138. +    addleap(tadd(t, tod), *cp == '+', lp->l_value);
  79139. +}
  79140. +
  79141. +static void
  79142. +inlink(fields, nfields)
  79143. +register char ** const    fields;
  79144. +const int        nfields;
  79145. +{
  79146. +    struct link    l;
  79147. +
  79148. +    if (nfields != LINK_FIELDS) {
  79149. +        error("wrong number of fields on Link line");
  79150. +        return;
  79151. +    }
  79152. +    if (*fields[LF_FROM] == '\0') {
  79153. +        error("blank FROM field on Link line");
  79154. +        return;
  79155. +    }
  79156. +    if (*fields[LF_TO] == '\0') {
  79157. +        error("blank TO field on Link line");
  79158. +        return;
  79159. +    }
  79160. +    l.l_filename = filename;
  79161. +    l.l_linenum = linenum;
  79162. +    l.l_from = ecpyalloc(fields[LF_FROM]);
  79163. +    l.l_to = ecpyalloc(fields[LF_TO]);
  79164. +    links = (struct link *) erealloc((char *) links,
  79165. +        (int) ((nlinks + 1) * sizeof *links));
  79166. +    links[nlinks++] = l;
  79167. +}
  79168. +
  79169. +static void
  79170. +rulesub(rp, loyearp, hiyearp, typep, monthp, dayp, timep)
  79171. +register struct rule * const    rp;
  79172. +char * const            loyearp;
  79173. +char * const            hiyearp;
  79174. +char * const            typep;
  79175. +char * const            monthp;
  79176. +char * const            dayp;
  79177. +char * const            timep;
  79178. +{
  79179. +    register struct lookup const *    lp;
  79180. +    register char *            cp;
  79181. +
  79182. +    if ((lp = byword(monthp, mon_names)) == NULL) {
  79183. +        error("invalid month name");
  79184. +        return;
  79185. +    }
  79186. +    rp->r_month = lp->l_value;
  79187. +    rp->r_todisstd = FALSE;
  79188. +    cp = timep;
  79189. +    if (*cp != '\0') {
  79190. +        cp += strlen(cp) - 1;
  79191. +        switch (lowerit(*cp)) {
  79192. +            case 's':
  79193. +                rp->r_todisstd = TRUE;
  79194. +                *cp = '\0';
  79195. +                break;
  79196. +            case 'w':
  79197. +                rp->r_todisstd = FALSE;
  79198. +                *cp = '\0';
  79199. +                break;
  79200. +        }
  79201. +    }
  79202. +    rp->r_tod = gethms(timep, "invalid time of day", FALSE);
  79203. +    /*
  79204. +    ** Year work.
  79205. +    */
  79206. +    cp = loyearp;
  79207. +    if ((lp = byword(cp, begin_years)) != NULL) switch ((int) lp->l_value) {
  79208. +        case YR_MINIMUM:
  79209. +            rp->r_loyear = min_year;
  79210. +            break;
  79211. +        case YR_MAXIMUM:
  79212. +            rp->r_loyear = max_year;
  79213. +            break;
  79214. +        default:    /* "cannot happen" */
  79215. +            (void) fprintf(stderr,
  79216. +                "%s: panic: Invalid l_value %d\n",
  79217. +                progname, lp->l_value);
  79218. +            (void) exit(EXIT_FAILURE);
  79219. +    } else if (sscanf(cp, "%d", &rp->r_loyear) != 1 ||
  79220. +        rp->r_loyear < min_year || rp->r_loyear > max_year) {
  79221. +            if (noise)
  79222. +                error("invalid starting year");
  79223. +            if (rp->r_loyear > max_year)
  79224. +                return;
  79225. +    }
  79226. +    cp = hiyearp;
  79227. +    if ((lp = byword(cp, end_years)) != NULL) switch ((int) lp->l_value) {
  79228. +        case YR_MINIMUM:
  79229. +            rp->r_hiyear = min_year;
  79230. +            break;
  79231. +        case YR_MAXIMUM:
  79232. +            rp->r_hiyear = max_year;
  79233. +            break;
  79234. +        case YR_ONLY:
  79235. +            rp->r_hiyear = rp->r_loyear;
  79236. +            break;
  79237. +        default:    /* "cannot happen" */
  79238. +            (void) fprintf(stderr,
  79239. +                "%s: panic: Invalid l_value %d\n",
  79240. +                progname, lp->l_value);
  79241. +            (void) exit(EXIT_FAILURE);
  79242. +    } else if (sscanf(cp, "%d", &rp->r_hiyear) != 1 ||
  79243. +        rp->r_hiyear < min_year || rp->r_hiyear > max_year) {
  79244. +            if (noise)
  79245. +                error("invalid ending year");
  79246. +            if (rp->r_hiyear < min_year)
  79247. +                return;
  79248. +    }
  79249. +    if (rp->r_hiyear < min_year)
  79250. +         return;
  79251. +     if (rp->r_loyear < min_year)
  79252. +         rp->r_loyear = min_year;
  79253. +     if (rp->r_hiyear > max_year)
  79254. +         rp->r_hiyear = max_year;
  79255. +    if (rp->r_loyear > rp->r_hiyear) {
  79256. +        error("starting year greater than ending year");
  79257. +        return;
  79258. +    }
  79259. +    if (*typep == '\0')
  79260. +        rp->r_yrtype = NULL;
  79261. +    else {
  79262. +        if (rp->r_loyear == rp->r_hiyear) {
  79263. +            error("typed single year");
  79264. +            return;
  79265. +        }
  79266. +        rp->r_yrtype = ecpyalloc(typep);
  79267. +    }
  79268. +    /*
  79269. +    ** Day work.
  79270. +    ** Accept things such as:
  79271. +    **    1
  79272. +    **    last-Sunday
  79273. +    **    Sun<=20
  79274. +    **    Sun>=7
  79275. +    */
  79276. +    if ((lp = byword(dayp, lasts)) != NULL) {
  79277. +        rp->r_dycode = DC_DOWLEQ;
  79278. +        rp->r_wday = lp->l_value;
  79279. +        rp->r_dayofmonth = len_months[1][rp->r_month];
  79280. +    } else {
  79281. +        if ((cp = strchr(dayp, '<')) != 0)
  79282. +            rp->r_dycode = DC_DOWLEQ;
  79283. +        else if ((cp = strchr(dayp, '>')) != 0)
  79284. +            rp->r_dycode = DC_DOWGEQ;
  79285. +        else {
  79286. +            cp = dayp;
  79287. +            rp->r_dycode = DC_DOM;
  79288. +        }
  79289. +        if (rp->r_dycode != DC_DOM) {
  79290. +            *cp++ = 0;
  79291. +            if (*cp++ != '=') {
  79292. +                error("invalid day of month");
  79293. +                return;
  79294. +            }
  79295. +            if ((lp = byword(dayp, wday_names)) == NULL) {
  79296. +                error("invalid weekday name");
  79297. +                return;
  79298. +            }
  79299. +            rp->r_wday = lp->l_value;
  79300. +        }
  79301. +        if (sscanf(cp, "%d", &rp->r_dayofmonth) != 1 ||
  79302. +            rp->r_dayofmonth <= 0 ||
  79303. +            (rp->r_dayofmonth > len_months[1][rp->r_month])) {
  79304. +                error("invalid day of month");
  79305. +                return;
  79306. +        }
  79307. +    }
  79308. +}
  79309. +
  79310. +static void
  79311. +convert(val, buf)
  79312. +const long    val;
  79313. +char * const    buf;
  79314. +{
  79315. +    register int    i;
  79316. +    register long    shift;
  79317. +
  79318. +    for (i = 0, shift = 24; i < 4; ++i, shift -= 8)
  79319. +        buf[i] = val >> shift;
  79320. +}
  79321. +
  79322. +static void
  79323. +puttzcode(val, fp)
  79324. +const long    val;
  79325. +FILE * const    fp;
  79326. +{
  79327. +    char    buf[4];
  79328. +
  79329. +    convert(val, buf);
  79330. +    (void) fwrite((void *) buf, (size_t) sizeof buf, (size_t) 1, fp);
  79331. +}
  79332. +
  79333. +static void
  79334. +writezone(name)
  79335. +const char * const    name;
  79336. +{
  79337. +    register FILE *        fp;
  79338. +    register int        i, j;
  79339. +    char            fullname[BUFSIZ];
  79340. +    static struct tzhead    tzh;
  79341. +
  79342. +    if (strlen(directory) + 1 + strlen(name) >= sizeof fullname) {
  79343. +        (void) fprintf(stderr,
  79344. +            "%s: File name %s/%s too long\n", progname,
  79345. +            directory, name);
  79346. +        (void) exit(EXIT_FAILURE);
  79347. +    }
  79348. +    (void) sprintf(fullname, "%s/%s", directory, name);
  79349. +    if ((fp = fopen(fullname, "wb")) == NULL) {
  79350. +        if (mkdirs(fullname) != 0)
  79351. +            (void) exit(EXIT_FAILURE);
  79352. +        if ((fp = fopen(fullname, "wb")) == NULL) {
  79353. +            (void) fprintf(stderr, "%s: Can't create ", progname);
  79354. +            (void) perror(fullname);
  79355. +            (void) exit(EXIT_FAILURE);
  79356. +        }
  79357. +    }
  79358. +    convert(eitol(typecnt), tzh.tzh_ttisstdcnt);
  79359. +    convert(eitol(leapcnt), tzh.tzh_leapcnt);
  79360. +    convert(eitol(timecnt), tzh.tzh_timecnt);
  79361. +    convert(eitol(typecnt), tzh.tzh_typecnt);
  79362. +    convert(eitol(charcnt), tzh.tzh_charcnt);
  79363. +    (void) fwrite((void *) &tzh, (size_t) sizeof tzh, (size_t) 1, fp);
  79364. +    for (i = 0; i < timecnt; ++i) {
  79365. +        j = leapcnt;
  79366. +        while (--j >= 0)
  79367. +            if (ats[i] >= trans[j]) {
  79368. +                ats[i] = tadd(ats[i], corr[j]);
  79369. +                break;
  79370. +            }
  79371. +        puttzcode((long) ats[i], fp);
  79372. +    }
  79373. +    if (timecnt > 0)
  79374. +        (void) fwrite((void *) types, (size_t) sizeof types[0],
  79375. +            (size_t) timecnt, fp);
  79376. +    for (i = 0; i < typecnt; ++i) {
  79377. +        puttzcode((long) gmtoffs[i], fp);
  79378. +        (void) putc(isdsts[i], fp);
  79379. +        (void) putc(abbrinds[i], fp);
  79380. +    }
  79381. +    if (charcnt != 0)
  79382. +        (void) fwrite((void *) chars, (size_t) sizeof chars[0],
  79383. +            (size_t) charcnt, fp);
  79384. +    for (i = 0; i < leapcnt; ++i) {
  79385. +        if (roll[i]) {
  79386. +            if (timecnt == 0 || trans[i] < ats[0]) {
  79387. +                j = 0;
  79388. +                while (isdsts[j])
  79389. +                    if (++j >= typecnt) {
  79390. +                        j = 0;
  79391. +                        break;
  79392. +                    }
  79393. +            } else {
  79394. +                j = 1;
  79395. +                while (j < timecnt && trans[i] >= ats[j])
  79396. +                    ++j;
  79397. +                j = types[j - 1];
  79398. +            }
  79399. +            puttzcode((long) tadd(trans[i], -gmtoffs[j]), fp);
  79400. +        } else    puttzcode((long) trans[i], fp);
  79401. +        puttzcode((long) corr[i], fp);
  79402. +    }
  79403. +    for (i = 0; i < typecnt; ++i)
  79404. +        (void) putc(ttisstds[i], fp);
  79405. +    if (ferror(fp) || fclose(fp)) {
  79406. +        (void) fprintf(stderr, "%s: Write error on ", progname);
  79407. +        (void) perror(fullname);
  79408. +        (void) exit(EXIT_FAILURE);
  79409. +    }
  79410. +}
  79411. +
  79412. +static void
  79413. +outzone(zpfirst, zonecount)
  79414. +const struct zone * const    zpfirst;
  79415. +const int            zonecount;
  79416. +{
  79417. +    register const struct zone *    zp;
  79418. +    register struct rule *        rp;
  79419. +    register int            i, j;
  79420. +    register int            usestart, useuntil;
  79421. +    register time_t            starttime, untiltime;
  79422. +    register long            gmtoff;
  79423. +    register long            stdoff;
  79424. +    register int            year;
  79425. +    register long            startoff;
  79426. +    register int            startisdst;
  79427. +    register int            startttisstd;
  79428. +    register int            type;
  79429. +    char                startbuf[BUFSIZ];
  79430. +
  79431. +    /*
  79432. +    ** Now. . .finally. . .generate some useful data!
  79433. +    */
  79434. +    timecnt = 0;
  79435. +    typecnt = 0;
  79436. +    charcnt = 0;
  79437. +    /*
  79438. +    ** Two guesses. . .the second may well be corrected later.
  79439. +    */
  79440. +    gmtoff = zpfirst->z_gmtoff;
  79441. +    stdoff = 0;
  79442. +#ifdef lint
  79443. +    starttime = 0;
  79444. +    startttisstd = FALSE;
  79445. +#endif /* defined lint */
  79446. +    for (i = 0; i < zonecount; ++i) {
  79447. +        usestart = i > 0;
  79448. +        useuntil = i < (zonecount - 1);
  79449. +        zp = &zpfirst[i];
  79450. +        eat(zp->z_filename, zp->z_linenum);
  79451. +        startisdst = -1;
  79452. +        if (zp->z_nrules == 0) {
  79453. +            type = addtype(oadd(zp->z_gmtoff, zp->z_stdoff),
  79454. +                zp->z_format, zp->z_stdoff != 0,
  79455. +                startttisstd);
  79456. +            if (usestart)
  79457. +                addtt(starttime, type);
  79458. +            gmtoff = zp->z_gmtoff;
  79459. +            stdoff = zp->z_stdoff;
  79460. +        } else for (year = min_year; year <= max_year; ++year) {
  79461. +            if (useuntil && year > zp->z_untilrule.r_hiyear)
  79462. +                break;
  79463. +            /*
  79464. +            ** Mark which rules to do in the current year.
  79465. +            ** For those to do, calculate rpytime(rp, year);
  79466. +            */
  79467. +            for (j = 0; j < zp->z_nrules; ++j) {
  79468. +                rp = &zp->z_rules[j];
  79469. +                eats(zp->z_filename, zp->z_linenum,
  79470. +                    rp->r_filename, rp->r_linenum);
  79471. +                rp->r_todo = year >= rp->r_loyear &&
  79472. +                        year <= rp->r_hiyear &&
  79473. +                        yearistype(year, rp->r_yrtype);
  79474. +                if (rp->r_todo)
  79475. +                    rp->r_temp = rpytime(rp, year);
  79476. +            }
  79477. +            for ( ; ; ) {
  79478. +                register int    k;
  79479. +                register time_t    jtime, ktime;
  79480. +                register long    offset;
  79481. +                char        buf[BUFSIZ];
  79482. +
  79483. +                if (useuntil) {
  79484. +                    /*
  79485. +                    ** Turn untiltime into GMT
  79486. +                    ** assuming the current gmtoff and
  79487. +                    ** stdoff values.
  79488. +                    */
  79489. +                    offset = gmtoff;
  79490. +                    if (!zp->z_untilrule.r_todisstd)
  79491. +                        offset = oadd(offset, stdoff);
  79492. +                    untiltime = tadd(zp->z_untiltime,
  79493. +                        -offset);
  79494. +                }
  79495. +                /*
  79496. +                ** Find the rule (of those to do, if any)
  79497. +                ** that takes effect earliest in the year.
  79498. +                */
  79499. +                k = -1;
  79500. +#ifdef lint
  79501. +                ktime = 0;
  79502. +#endif /* defined lint */
  79503. +                for (j = 0; j < zp->z_nrules; ++j) {
  79504. +                    rp = &zp->z_rules[j];
  79505. +                    if (!rp->r_todo)
  79506. +                        continue;
  79507. +                    eats(zp->z_filename, zp->z_linenum,
  79508. +                        rp->r_filename, rp->r_linenum);
  79509. +                    offset = gmtoff;
  79510. +                    if (!rp->r_todisstd)
  79511. +                        offset = oadd(offset, stdoff);
  79512. +                    jtime = rp->r_temp;
  79513. +                    if (jtime == min_time ||
  79514. +                        jtime == max_time)
  79515. +                            continue;
  79516. +                    jtime = tadd(jtime, -offset);
  79517. +                    if (k < 0 || jtime < ktime) {
  79518. +                        k = j;
  79519. +                        ktime = jtime;
  79520. +                    }
  79521. +                }
  79522. +                if (k < 0)
  79523. +                    break;    /* go on to next year */
  79524. +                rp = &zp->z_rules[k];
  79525. +                rp->r_todo = FALSE;
  79526. +                if (useuntil && ktime >= untiltime)
  79527. +                    break;
  79528. +                if (usestart) {
  79529. +                    if (ktime < starttime) {
  79530. +                        stdoff = rp->r_stdoff;
  79531. +                        startoff = oadd(zp->z_gmtoff,
  79532. +                            rp->r_stdoff);
  79533. +                        (void) sprintf(startbuf,
  79534. +                            zp->z_format,
  79535. +                            rp->r_abbrvar);
  79536. +                        startisdst =
  79537. +                            rp->r_stdoff != 0;
  79538. +                        continue;
  79539. +                    }
  79540. +                    if (ktime != starttime &&
  79541. +                        startisdst >= 0)
  79542. +addtt(starttime, addtype(startoff, startbuf, startisdst, startttisstd));
  79543. +                    usestart = FALSE;
  79544. +                }
  79545. +                eats(zp->z_filename, zp->z_linenum,
  79546. +                    rp->r_filename, rp->r_linenum);
  79547. +                (void) sprintf(buf, zp->z_format,
  79548. +                    rp->r_abbrvar);
  79549. +                offset = oadd(zp->z_gmtoff, rp->r_stdoff);
  79550. +                type = addtype(offset, buf, rp->r_stdoff != 0,
  79551. +                    rp->r_todisstd);
  79552. +                if (timecnt != 0 || rp->r_stdoff != 0)
  79553. +                    addtt(ktime, type);
  79554. +                gmtoff = zp->z_gmtoff;
  79555. +                stdoff = rp->r_stdoff;
  79556. +            }
  79557. +        }
  79558. +        /*
  79559. +        ** Now we may get to set starttime for the next zone line.
  79560. +        */
  79561. +        if (useuntil) {
  79562. +            starttime = tadd(zp->z_untiltime,
  79563. +                -gmtoffs[types[timecnt - 1]]);
  79564. +            startttisstd = zp->z_untilrule.r_todisstd;
  79565. +        }
  79566. +    }
  79567. +    writezone(zpfirst->z_name);
  79568. +}
  79569. +
  79570. +static void
  79571. +addtt(starttime, type)
  79572. +const time_t    starttime;
  79573. +const int    type;
  79574. +{
  79575. +    if (timecnt != 0 && type == types[timecnt - 1])
  79576. +        return;    /* easy enough! */
  79577. +    if (timecnt >= TZ_MAX_TIMES) {
  79578. +        error("too many transitions?!");
  79579. +        (void) exit(EXIT_FAILURE);
  79580. +    }
  79581. +    ats[timecnt] = starttime;
  79582. +    types[timecnt] = type;
  79583. +    ++timecnt;
  79584. +}
  79585. +
  79586. +static int
  79587. +addtype(gmtoff, abbr, isdst, ttisstd)
  79588. +const long        gmtoff;
  79589. +const char * const    abbr;
  79590. +const int        isdst;
  79591. +const int        ttisstd;
  79592. +{
  79593. +    register int    i, j;
  79594. +
  79595. +    /*
  79596. +    ** See if there's already an entry for this zone type.
  79597. +    ** If so, just return its index.
  79598. +    */
  79599. +    for (i = 0; i < typecnt; ++i) {
  79600. +        if (gmtoff == gmtoffs[i] && isdst == isdsts[i] &&
  79601. +            strcmp(abbr, &chars[abbrinds[i]]) == 0 &&
  79602. +            ttisstd == ttisstds[i])
  79603. +                return i;
  79604. +    }
  79605. +    /*
  79606. +    ** There isn't one; add a new one, unless there are already too
  79607. +    ** many.
  79608. +    */
  79609. +    if (typecnt >= TZ_MAX_TYPES) {
  79610. +        error("too many local time types");
  79611. +        (void) exit(EXIT_FAILURE);
  79612. +    }
  79613. +    gmtoffs[i] = gmtoff;
  79614. +    isdsts[i] = isdst;
  79615. +    ttisstds[i] = ttisstd;
  79616. +
  79617. +    for (j = 0; j < charcnt; ++j)
  79618. +        if (strcmp(&chars[j], abbr) == 0)
  79619. +            break;
  79620. +    if (j == charcnt)
  79621. +        newabbr(abbr);
  79622. +    abbrinds[i] = j;
  79623. +    ++typecnt;
  79624. +    return i;
  79625. +}
  79626. +
  79627. +static void
  79628. +addleap(t, positive, rolling)
  79629. +const time_t    t;
  79630. +const int    positive;
  79631. +const int    rolling;
  79632. +{
  79633. +    register int    i, j;
  79634. +
  79635. +    if (leapcnt >= TZ_MAX_LEAPS) {
  79636. +        error("too many leap seconds");
  79637. +        (void) exit(EXIT_FAILURE);
  79638. +    }
  79639. +    for (i = 0; i < leapcnt; ++i)
  79640. +        if (t <= trans[i]) {
  79641. +            if (t == trans[i]) {
  79642. +                error("repeated leap second moment");
  79643. +                (void) exit(EXIT_FAILURE);
  79644. +            }
  79645. +            break;
  79646. +        }
  79647. +    for (j = leapcnt; j > i; --j) {
  79648. +        trans[j] = trans[j-1];
  79649. +        corr[j] = corr[j-1];
  79650. +        roll[j] = roll[j-1];
  79651. +    }
  79652. +    trans[i] = t;
  79653. +    corr[i] = (positive ? 1L : -1L);
  79654. +    roll[i] = rolling;
  79655. +    ++leapcnt;
  79656. +}
  79657. +
  79658. +static void
  79659. +adjleap()
  79660. +{
  79661. +    register int    i;
  79662. +    register long    last = 0;
  79663. +
  79664. +    /*
  79665. +    ** propagate leap seconds forward
  79666. +    */
  79667. +    for (i = 0; i < leapcnt; ++i) {
  79668. +        trans[i] = tadd(trans[i], last);
  79669. +        last = corr[i] += last;
  79670. +    }
  79671. +}
  79672. +
  79673. +static int
  79674. +yearistype(year, type)
  79675. +const int        year;
  79676. +const char * const    type;
  79677. +{
  79678. +    char    buf[BUFSIZ];
  79679. +    int    result;
  79680. +
  79681. +    if (type == NULL || *type == '\0')
  79682. +        return TRUE;
  79683. +    if (strcmp(type, "uspres") == 0)
  79684. +        return (year % 4) == 0;
  79685. +    if (strcmp(type, "nonpres") == 0)
  79686. +        return (year % 4) != 0;
  79687. +    (void) sprintf(buf, "yearistype %d %s", year, type);
  79688. +    result = system(buf);
  79689. +    if (result == 0)
  79690. +        return TRUE;
  79691. +    if (result == (1 << 8))
  79692. +        return FALSE;
  79693. +    error("Wild result from command execution");
  79694. +    (void) fprintf(stderr, "%s: command was '%s', result was %d\n",
  79695. +        progname, buf, result);
  79696. +    for ( ; ; )
  79697. +        (void) exit(EXIT_FAILURE);
  79698. +}
  79699. +
  79700. +static int
  79701. +lowerit(a)
  79702. +const int    a;
  79703. +{
  79704. +    return (isascii(a) && isupper(a)) ? tolower(a) : a;
  79705. +}
  79706. +
  79707. +static int
  79708. +ciequal(ap, bp)        /* case-insensitive equality */
  79709. +register const char *    ap;
  79710. +register const char *    bp;
  79711. +{
  79712. +    while (lowerit(*ap) == lowerit(*bp++))
  79713. +        if (*ap++ == '\0')
  79714. +            return TRUE;
  79715. +    return FALSE;
  79716. +}
  79717. +
  79718. +static int
  79719. +itsabbr(abbr, word)
  79720. +register const char *    abbr;
  79721. +register const char *    word;
  79722. +{
  79723. +    if (lowerit(*abbr) != lowerit(*word))
  79724. +        return FALSE;
  79725. +    ++word;
  79726. +    while (*++abbr != '\0')
  79727. +        do if (*word == '\0')
  79728. +            return FALSE;
  79729. +                while (lowerit(*word++) != lowerit(*abbr));
  79730. +    return TRUE;
  79731. +}
  79732. +
  79733. +static const struct lookup *
  79734. +byword(word, table)
  79735. +register const char * const        word;
  79736. +register const struct lookup * const    table;
  79737. +{
  79738. +    register const struct lookup *    foundlp;
  79739. +    register const struct lookup *    lp;
  79740. +
  79741. +    if (word == NULL || table == NULL)
  79742. +        return NULL;
  79743. +    /*
  79744. +    ** Look for exact match.
  79745. +    */
  79746. +    for (lp = table; lp->l_word != NULL; ++lp)
  79747. +        if (ciequal(word, lp->l_word))
  79748. +            return lp;
  79749. +    /*
  79750. +    ** Look for inexact match.
  79751. +    */
  79752. +    foundlp = NULL;
  79753. +    for (lp = table; lp->l_word != NULL; ++lp)
  79754. +        if (itsabbr(word, lp->l_word))
  79755. +            if (foundlp == NULL)
  79756. +                foundlp = lp;
  79757. +            else    return NULL;    /* multiple inexact matches */
  79758. +    return foundlp;
  79759. +}
  79760. +
  79761. +static char **
  79762. +getfields(cp)
  79763. +register char *    cp;
  79764. +{
  79765. +    register char *        dp;
  79766. +    register char **    array;
  79767. +    register int        nsubs;
  79768. +
  79769. +    if (cp == NULL)
  79770. +        return NULL;
  79771. +    array = (char **) emalloc((int) ((strlen(cp) + 1) * sizeof *array));
  79772. +    nsubs = 0;
  79773. +    for ( ; ; ) {
  79774. +        while (isascii(*cp) && isspace(*cp))
  79775. +            ++cp;
  79776. +        if (*cp == '\0' || *cp == '#')
  79777. +            break;
  79778. +        array[nsubs++] = dp = cp;
  79779. +        do {
  79780. +            if ((*dp = *cp++) != '"')
  79781. +                ++dp;
  79782. +            else while ((*dp = *cp++) != '"')
  79783. +                if (*dp != '\0')
  79784. +                    ++dp;
  79785. +                else    error("Odd number of quotation marks");
  79786. +        } while (*cp != '\0' && *cp != '#' &&
  79787. +            (!isascii(*cp) || !isspace(*cp)));
  79788. +        if (isascii(*cp) && isspace(*cp))
  79789. +            ++cp;
  79790. +        *dp = '\0';
  79791. +    }
  79792. +    array[nsubs] = NULL;
  79793. +    return array;
  79794. +}
  79795. +
  79796. +static long
  79797. +oadd(t1, t2)
  79798. +const long    t1;
  79799. +const long    t2;
  79800. +{
  79801. +    register long    t;
  79802. +
  79803. +    t = t1 + t2;
  79804. +    if (t2 > 0 && t <= t1 || t2 < 0 && t >= t1) {
  79805. +        error("time overflow");
  79806. +        (void) exit(EXIT_FAILURE);
  79807. +    }
  79808. +    return t;
  79809. +}
  79810. +
  79811. +static time_t
  79812. +tadd(t1, t2)
  79813. +const time_t    t1;
  79814. +const long    t2;
  79815. +{
  79816. +    register time_t    t;
  79817. +
  79818. +    if (t1 == max_time && t2 > 0)
  79819. +        return max_time;
  79820. +    if (t1 == min_time && t2 < 0)
  79821. +        return min_time;
  79822. +    t = t1 + t2;
  79823. +    if (t2 > 0 && t <= t1 || t2 < 0 && t >= t1) {
  79824. +        error("time overflow");
  79825. +        (void) exit(EXIT_FAILURE);
  79826. +    }
  79827. +    return t;
  79828. +}
  79829. +
  79830. +/*
  79831. +** Given a rule, and a year, compute the date - in seconds since January 1,
  79832. +** 1970, 00:00 LOCAL time - in that year that the rule refers to.
  79833. +*/
  79834. +
  79835. +static time_t
  79836. +rpytime(rp, wantedy)
  79837. +register const struct rule * const    rp;
  79838. +register const int            wantedy;
  79839. +{
  79840. +    register int    y, m, i;
  79841. +    register long    dayoff;            /* with a nod to Margaret O. */
  79842. +    register time_t    t;
  79843. +
  79844. +    dayoff = 0;
  79845. +    m = TM_JANUARY;
  79846. +    y = EPOCH_YEAR;
  79847. +    while (wantedy != y) {
  79848. +        if (wantedy > y) {
  79849. +            i = len_years[isleap(y)];
  79850. +            ++y;
  79851. +        } else {
  79852. +            --y;
  79853. +            i = -len_years[isleap(y)];
  79854. +        }
  79855. +        dayoff = oadd(dayoff, eitol(i));
  79856. +    }
  79857. +    while (m != rp->r_month) {
  79858. +        i = len_months[isleap(y)][m];
  79859. +        dayoff = oadd(dayoff, eitol(i));
  79860. +        ++m;
  79861. +    }
  79862. +    i = rp->r_dayofmonth;
  79863. +    if (m == TM_FEBRUARY && i == 29 && !isleap(y)) {
  79864. +        if (rp->r_dycode == DC_DOWLEQ)
  79865. +            --i;
  79866. +        else {
  79867. +            error("use of 2/29 in non leap-year");
  79868. +            (void) exit(EXIT_FAILURE);
  79869. +        }
  79870. +    }
  79871. +    --i;
  79872. +    dayoff = oadd(dayoff, eitol(i));
  79873. +    if (rp->r_dycode == DC_DOWGEQ || rp->r_dycode == DC_DOWLEQ) {
  79874. +        register long    wday;
  79875. +
  79876. +#define LDAYSPERWEEK    ((long) DAYSPERWEEK)
  79877. +        wday = eitol(EPOCH_WDAY);
  79878. +        /*
  79879. +        ** Don't trust mod of negative numbers.
  79880. +        */
  79881. +        if (dayoff >= 0)
  79882. +            wday = (wday + dayoff) % LDAYSPERWEEK;
  79883. +        else {
  79884. +            wday -= ((-dayoff) % LDAYSPERWEEK);
  79885. +            if (wday < 0)
  79886. +                wday += LDAYSPERWEEK;
  79887. +        }
  79888. +        while (wday != eitol(rp->r_wday))
  79889. +            if (rp->r_dycode == DC_DOWGEQ) {
  79890. +                dayoff = oadd(dayoff, (long) 1);
  79891. +                if (++wday >= LDAYSPERWEEK)
  79892. +                    wday = 0;
  79893. +                ++i;
  79894. +            } else {
  79895. +                dayoff = oadd(dayoff, (long) -1);
  79896. +                if (--wday < 0)
  79897. +                    wday = LDAYSPERWEEK;
  79898. +                --i;
  79899. +            }
  79900. +        if (i < 0 || i >= len_months[isleap(y)][m]) {
  79901. +            error("no day in month matches rule");
  79902. +            (void) exit(EXIT_FAILURE);
  79903. +        }
  79904. +    }
  79905. +    if (dayoff < 0 && !tt_signed) {
  79906. +        if (wantedy == rp->r_loyear)
  79907. +            return min_time;
  79908. +        error("time before zero");
  79909. +        (void) exit(EXIT_FAILURE);
  79910. +    }
  79911. +    t = (time_t) dayoff * SECSPERDAY;
  79912. +    /*
  79913. +    ** Cheap overflow check.
  79914. +    */
  79915. +    if (t / SECSPERDAY != dayoff) {
  79916. +        if (wantedy == rp->r_hiyear)
  79917. +            return max_time;
  79918. +        if (wantedy == rp->r_loyear)
  79919. +            return min_time;
  79920. +        error("time overflow");
  79921. +        (void) exit(EXIT_FAILURE);
  79922. +    }
  79923. +    return tadd(t, rp->r_tod);
  79924. +}
  79925. +
  79926. +static void
  79927. +newabbr(string)
  79928. +const char * const    string;
  79929. +{
  79930. +    register int    i;
  79931. +
  79932. +    i = strlen(string) + 1;
  79933. +    if (charcnt + i >= TZ_MAX_CHARS) {
  79934. +        error("too many, or too long, time zone abbreviations");
  79935. +        (void) exit(EXIT_FAILURE);
  79936. +    }
  79937. +    (void) strcpy(&chars[charcnt], string);
  79938. +    charcnt += eitol(i);
  79939. +}
  79940. +
  79941. +static int
  79942. +mkdirs(name)
  79943. +char * const    name;
  79944. +{
  79945. +    register char *    cp;
  79946. +
  79947. +    if ((cp = name) == NULL || *cp == '\0')
  79948. +        return 0;
  79949. +    while ((cp = strchr(cp + 1, '/')) != 0) {
  79950. +        *cp = '\0';
  79951. +        if (!itsdir(name)) {
  79952. +            /*
  79953. +            ** It doesn't seem to exist, so we try to create it.
  79954. +            */
  79955. +            if (mkdir(name, 0755) != 0) {
  79956. +                (void) fprintf(stderr,
  79957. +                    "%s: Can't create directory ",
  79958. +                    progname);
  79959. +                (void) perror(name);
  79960. +                return -1;
  79961. +            }
  79962. +        }
  79963. +        *cp = '/';
  79964. +    }
  79965. +    return 0;
  79966. +}
  79967. +
  79968. +static long
  79969. +eitol(i)
  79970. +const int    i;
  79971. +{
  79972. +    long    l;
  79973. +
  79974. +    l = i;
  79975. +    if (i < 0 && l >= 0 || i == 0 && l != 0 || i > 0 && l <= 0) {
  79976. +        (void) fprintf(stderr, "%s: %d did not sign extend correctly\n",
  79977. +            progname, i);
  79978. +        (void) exit(EXIT_FAILURE);
  79979. +    }
  79980. +    return l;
  79981. +}
  79982. +
  79983. +/*
  79984. +** UNIX is a registered trademark of AT&T.
  79985. +*/
  79986. diff -rup --new-file baseline/fsf/emacs/unixlib/unix.doc amiga/fsf/emacs/unixlib/unix.doc
  79987. --- baseline/fsf/emacs/unixlib/unix.doc    Wed Dec 31 17:00:00 1969
  79988. +++ amiga/fsf/emacs/unixlib/unix.doc    Sat Sep 28 00:00:00 1996
  79989. @@ -0,0 +1,452 @@
  79990. +Unix compatibility library for SAS C 6.x version 1.2
  79991. +----------------------------------------------------
  79992. +
  79993. +Introduction
  79994. +------------
  79995. +
  79996. +This library provides 80 odd functions which are useful for porting
  79997. +Unix programs to the Amiga running AmigaOS 2.04 or higher. It is thus
  79998. +similar to Markus Wild's ixemul.library, but has more restricted aims:
  79999. +
  80000. +a) It is written specifically for SAS C 6.1, 6.2, ...
  80001. +
  80002. +b) It isn't a complete C library, it requires the SAS C library to function.
  80003. +It adds some routines, and replaces others that were deficient, out of date,
  80004. +or that didn't provide adequate functionality.
  80005. +
  80006. +c) It isn't a complete Unix emulation library, it only contains those functions
  80007. +that I needed while porting various utilities (mainly from GNU) to the Amiga.
  80008. +
  80009. +d) It is a traditional C link library, not an Amiga library. This produces 
  80010. +bigger executables.
  80011. +
  80012. +Considering the above points, you might ask why I wrote it ... There are several
  80013. +good answers:
  80014. +
  80015. +a) I started it before I was aware of ixemul.library.
  80016. +
  80017. +b) ixemul.library didn't provide the features I needed for Emacs (support for
  80018. +select).
  80019. +
  80020. +c) It is easier for me to maintain when I find I need to support another Unix
  80021. +feature (eg deleting open files).
  80022. +
  80023. +Copying
  80024. +-------
  80025. +
  80026. +The library includes code that I have written, which I place in the public domain.
  80027. +This is found in all the files that don't have a Copyright notice.
  80028. +
  80029. +It also includes code which is (inclusive of my modifications)
  80030. +
  80031. + Copyright (c) 1982, 1986, 1991 The Regents of the University of California.
  80032. + All rights reserved.
  80033. +
  80034. +This code is freely redistributable (see the copyright notices in the source
  80035. +and include files).
  80036. +
  80037. +Finally it includes Doug Gwyn's public domain alloca implementation.
  80038. +
  80039. +Installation & Use
  80040. +------------------
  80041. +
  80042. +To use this library, you must compile with the include directory in your include
  80043. +search path, and link with the unix.lib library (which must be specified before
  80044. +lc.lib). For example, if you extract this archive in a directory called src:, you
  80045. +could compile the following program:
  80046. +
  80047. +echo.c:
  80048. +
  80049. +#include <sys/unistd.h>
  80050. +
  80051. +void main(int argc, char **argv)
  80052. +{
  80053. +  int i;
  80054. +
  80055. +  for (i = 1; i < argc; i++)
  80056. +    {
  80057. +      if (i != 1) write(1, " ", 1);
  80058. +      write(1, argv[i], strlen(argv[i]));
  80059. +    }
  80060. +  write(1, "\n", 1);
  80061. +}
  80062. +
  80063. +with the command
  80064. +
  80065. +  sc idir src:unix/include/ lib src:unix/src/unix.lib link echo.c
  80066. +
  80067. +to produce a simple unix-like echo command.
  80068. +
  80069. +You should define the following environment variables:
  80070. +
  80071. +USER - A user name for the sole Amiga user (default "user").
  80072. +USERNAME - The full name of the sole Amiga user (default $USER).
  80073. +HOME - A "home" directory (default "s:") for programs that want one. Configuration
  80074. +       files will probably end up here ...
  80075. +SHELL - A program which behaves reasonably like a Unix shell (default "bin:sh").
  80076. +    You should copy the sh executable there if you don't have a Unix-like shell.
  80077. +HOSTNAME - The name of your machine (default "amiga").
  80078. +
  80079. +If you are going to be using pipes, you will require Matt Dillon's fifo.library
  80080. +and fifo: device. This can be found on the Fish disks, with his UUCP distribution
  80081. +and on many FTP sites.
  80082. +
  80083. +If you want to install the timezone information (see the discussion below on
  80084. +Unix vs Amiga time), do the following:
  80085. +
  80086. +  a) change to the zoneinfo directory
  80087. +  b) compile the zic problem by running lmk.
  80088. +  c) change to the datfiles directory.
  80089. +  d) edit lmkfile and choose your timezone (you can look at the data files
  80090. +     to see the ones available). If you get this wrong, you can always change
  80091. +     it later with the zic program.
  80092. +  e) type 'lmk install'. This will compile the timezones, and setup the one
  80093. +     you chose as the default. The default can be changed with
  80094. +       zic -l <timezone name>
  80095. +
  80096. +     or by defining the environment variable TZ.
  80097. +
  80098. +Functionality
  80099. +-------------
  80100. +
  80101. +While this library aims to hide the differences between AmigaOS & Unix, 
  80102. +it also aims to provide support for Amiga specific features. This sometimes
  80103. +produces strange compromises.
  80104. +
  80105. +This library provides two things to programs linked with it:
  80106. +
  80107. +a) A Unix-like environment:
  80108. +
  80109. +This includes:
  80110. +
  80111. +- Unix-like command line parsing, with wildcard expansion. These
  80112. +wildcards are however specified with the Amiga syntax. 
  80113. +
  80114. +Arguments which are unquoted or surround with single quotes are
  80115. +handled like Unix shells. Those surrounded with double quotes are
  80116. +handled in the Amiga fashion, but with wildcard expansion (this is
  80117. +done to avoid problems with the way the exec function works).
  80118. +
  80119. +Here is a summary of argument splitting:
  80120. +
  80121. +Arguments can be enclosed in single quotes, (') double quotes ("), or 
  80122. +separated by spaces.
  80123. +
  80124. +Arguments enclosed by single quotes never suffer wildcard expansion, and
  80125. +no character is significant inside them (not even \). Given the echo program
  80126. +given above,
  80127. +
  80128. +  echo 'f*un\'
  80129. +
  80130. +simply displays
  80131. +
  80132. +  f*un\
  80133. +
  80134. +Within double quotes, * is the standard Amiga escape character. \ is
  80135. +handled just like any other character. Wildcards are expanded. So,
  80136. +assuming the current directory contains only echo.c and echo,
  80137. +
  80138. +  echo "#?.c" "*.c" "\mad"
  80139. +
  80140. +displays
  80141. +
  80142. +  echo.c .c \mad
  80143. +
  80144. +(* escapes the following character, except that *N is newline and *E is 
  80145. +escape. Wildcard characters still behave as usual (' is the standard
  80146. +Amiga wildcard escape character)).
  80147. +
  80148. +If an argument is unquoted, \ acts as an escape character (removing
  80149. +special significance from the next character, be it a wildcard, a space, 
  80150. +a \, ...). So
  80151. +
  80152. +  echo \*.c \\ \n
  80153. +
  80154. +displays
  80155. +
  80156. +  *.c \ n
  80157. +
  80158. +- When a program is run from the Workbench, stdin, stdout & stderr are opened 
  80159. +on NIL:, and the icons selected are converted to file names and passed as the
  80160. +argc,argv to main.
  80161. +
  80162. +- The standard variable environ is defined and contains all the local environment
  80163. +variables. This is passed as the envp parameter to main.
  80164. +
  80165. +- The program is led to believe that all files belong to $USER (uid 1), group
  80166. +wheel (gid 0).
  80167. +
  80168. +- Amiga protection flags are mapped onto the standard 12 Unix protection bits
  80169. +(and back when necessary). This can be overridden (dynamically) by changing the
  80170. +value of use_amiga_flags. Eg:
  80171. +
  80172. +  extern int use_amiga_flags;
  80173. +
  80174. +  ...
  80175. +
  80176. +
  80177. +  main()
  80178. +  {
  80179. +    use_amiga_flags = 1;
  80180. +
  80181. +    ... some code using stat or chmod or ...
  80182. +  }
  80183. +
  80184. +In this case, the Amiga protection bits are left untouched. Otherwise the
  80185. +mapping is as follows (note that the archive bit is lost):
  80186. +
  80187. +Unix -> Amiga
  80188. +
  80189. +Amiga read: if user, group or world read.
  80190. +Amiga write: if user or group write.
  80191. +Amiga delete: if user or world write.
  80192. +Amiga execute: if group execute or only user execute.
  80193. +Amiga script: if world execute or only user execute.
  80194. +Amiga pure: if sticky.
  80195. +
  80196. +Amiga -> Unix
  80197. +
  80198. +user, group, world read: if amiga read.
  80199. +user write: if amiga write and delete.
  80200. +group write: if amiga write.
  80201. +world write: if amiga delete.
  80202. +user execute: if amiga execute or amiga script.
  80203. +group execute: if amiga execute.
  80204. +world execute: if amiga script.
  80205. +sticky: if amiga pure.
  80206. +
  80207. +- Unix-like time. time is expressed in seconds since 1-Jan-1970 00:00 GMT. 
  80208. +This is the format used by the time(), stat() and utime() functions. The
  80209. +library uses the BSD time functions which properly handle timezones, 
  80210. +daylight savings time, etc. 
  80211. +
  80212. +On Unix systems, time is generally stored as GMT, while the Amiga stores
  80213. +local time. These times are visible in two places: the time stored in the
  80214. +system clock and the creation, modification or access dates for files (only
  80215. +the modification date is available on the Amiga). There are 3 ways to resolve
  80216. +this conflict:
  80217. +
  80218. +1) Ignore timezones (you can choose this option by not installing the
  80219. +timezone information). The library will then assume that system time
  80220. +and file times are expressed in GMT and will never apply any
  80221. +corrections. All will work well (except maybe on a global network).
  80222. +This is the simplest solution.
  80223. +
  80224. +2) System & file time are assumed to be local times. The time() & stat()
  80225. +functions convert local time to GMT, the utime() call converts GMT to
  80226. +local time. This allows you to keep the system clock on local time, which
  80227. +is compatible with most (all?) Amiga applications. However, nearly every
  80228. +program will be bigger because they will need the timezone information and
  80229. +timezone conversion code (approximately 7k). The library can be recompiled
  80230. +if you prefer to have things this way by adding -dUSE_LOCAL to the CFLAGS
  80231. +variable in lmkfile.
  80232. +
  80233. +3) System & file time are stored in GMT. Times are converted to local time
  80234. +only when they are displayed to the user, who must of course choose the 
  80235. +correct timezone. This entails changing your system clock to GMT, which means
  80236. +that most programs will display an incorrect time. However, you won't have
  80237. +to change your system clock when daylight savings time ends ... The library
  80238. +comes compiled this way (But you can still choose option 1, no timezone
  80239. +information, and avoid the potential confusion).
  80240. +
  80241. +- BSD-like signals. Signal handlers stay enabled after a signal occurs
  80242. +(that particular signal is simply masked for the duration of the handler).
  80243. +setjmp & longjmp preserve the signal mask (the functions _setjmp & _longjmp
  80244. +don't). You may receive any signal with kill(getpid(), sig). Otherwise only
  80245. +the following occur:
  80246. +
  80247. +  SIGINT: user typed ctrl-c
  80248. +  SIGQUIT: user typed ctrl-d
  80249. +  SIGALRM: alarm() expired
  80250. +  SIGCHLD: a child process died
  80251. +
  80252. +When using kill to signal another process, only SIGHUP, SIGINT, SIGQUIT & 
  80253. +SIGKILL do anything. They all send SIGBREAKF_CTRL_C | D to the process (and
  80254. +hopefully its children). See the discussion under the exec function.
  80255. +
  80256. +
  80257. +b) A large number of unix C library calls:
  80258. +
  80259. +_exit, _setjmp, _longjmp, abort, access, alloca, gettimeofday, ftime, 
  80260. +bcmp, bcopy, bzero, chmod, chown, fchown, close, creat, tzset, tzsetwall,
  80261. +localtime, gmtime, asctime, ctime, mktime, opendir, closedir, readdir, 
  80262. +telldir, seekdir, fchmod, fcntl, fstat, ftruncate, getenv, gethostname,
  80263. +getpid, getwd, getgid, getegid, getgrgid, getgrnam, index, ioctl, isatty,
  80264. +kill, link, lseek, mkdir, mkfifo, mknod, mktemp, open, perror, pipe, sktpair, 
  80265. +getpwuid, getpwnam, getlogin, read, rename, rindex, rmdir, select, setjmp, 
  80266. +longjmp, signal, sigpause, sigsetmask, sleep, stat, strftime, time, truncate,
  80267. +getuid, geteuid, umask, unlink, utime, wait, waitpid, wait3, wait4, write,
  80268. +readlink, symlink, popen, pclose.
  80269. +
  80270. +These functions aim to be BSD compatible, however I based myself on descriptions
  80271. +in the SunOS 4 man pages. Their behaviour is sometimes strange or incomplete.
  80272. +
  80273. +Here is a summary of the differences with the standard Unix functions:
  80274. +
  80275. +alloca - This is Doug Gwyn's portable alloca. Memory allocated is freed
  80276. +later than with a true alloca.
  80277. +
  80278. +gettimeofday - The dst field of the timezone is a (not very good) guess. It
  80279. +shouldn't be used anyway.
  80280. +
  80281. +chown, fchown - These are do-nothing routines.
  80282. +
  80283. +opendir, closedir, ... - These interact with stat to avoid having to read
  80284. +each directory entry twice when doing a readdir + stat loop.
  80285. +
  80286. +fchmod - The protection is only set when the file is closed. See also the
  80287. +discussion of protection modes above.
  80288. +
  80289. +fcntl - Only the F_GETFL & F_SETFL operations are supported.
  80290. +
  80291. +truncate, ftruncate - These will not necessarily work with all filing systems.
  80292. +See the discussion of the AmigaOS SetFileSize function.
  80293. +
  80294. +getenv - This checks local environment variables and then global ones. It 
  80295. +allocates memory for the variables value each time. This memory is never freed
  80296. +(till the program exits).
  80297. +
  80298. +gethostname - This is obtained from the HOSTNAME environment variable at startup.
  80299. +
  80300. +getuid, geteuid, getgid, getegid, getpwuid, getpwnam, getgrgid, getgrnam, getlogin -
  80301. +These function only know about one user. He/She is:
  80302. +
  80303. +  name: $USER (default "user")
  80304. +  home directory: $HOME (default "s:")
  80305. +  shell: $SHELL (default "bin:sh")
  80306. +  uid: 1, gid: 0
  80307. +
  80308. +ioctl - Only FIONBIO & TIOCGWINSZ are known, plus a number of amiga specific
  80309. +ioctls (for internal use). These are documented in include/amiga/ioctl.h.
  80310. +
  80311. +lseek - Seeks beyond the end of a file are not implemented.
  80312. +
  80313. +mkfifo, mknod - These are 'do-nothing' routines.
  80314. +
  80315. +pipe - This uses Matt Dillon's fifo.library and fifo: device. It works well
  80316. +for interactive use, but not for transfering large quantities of data.
  80317. +
  80318. +select - This implementation only works with pipes & sktpairs, and cannot
  80319. +detect 'exceptional' conditions.
  80320. +
  80321. +sigvec - The flags are not recognized.
  80322. +
  80323. +symlink - Symbolic links on the Amiga are far too buggy and should not be used.
  80324. +By default, as compiled, this routine always returns an error. However readlink
  80325. +does work, so you can read existing symbolic links.
  80326. +
  80327. +umask - This is a 'do-nothing' routine.
  80328. +
  80329. +unlink - You can unlink a file that your program has opened before you close
  80330. +it. At that point, the AmigaOS file is closed & deleted, though it still
  80331. +appears open to read (it returns EOF), write, close, etc. Also you can unlink
  80332. +a file even if it is protected from deletion (the protection mode is changed
  80333. +first ...).
  80334. +
  80335. +utime - Only the modification time can be changed (the others don't exist).
  80336. +
  80337. +wait3, wait4 - Resource usage is never returned.
  80338. +
  80339. +exec
  80340. +----
  80341. +
  80342. +vfork() and execxx() are very tricky to implement. So I took the easy
  80343. +(but see below) way out, providing a function, eexec, that create a
  80344. +new process given argc, argv.  This functions returns a pid which can
  80345. +be used with wait, waitpid, ... as usual. Also exiting processes
  80346. +generate the SIGCHLD signal. With this, it is generally fairly easy to
  80347. +replace the process creation parts of most Unix programs.
  80348. +
  80349. +First, here is a description of the problems which arise:
  80350. +
  80351. +Executing an external program is tricky with AmigaOS. The various system
  80352. +routines (CreateNewProc, SystemTags, Execute) allow some operations to be
  80353. +done easily, but make others difficult. Specifically, if you want to do all
  80354. +of the following:
  80355. +
  80356. +- Execute a program given argc, argv (like with unix)
  80357. +- Specify arbitrary input, output and error streams, including inheriting
  80358. +the current ones.
  80359. +- Have some of these streams be pipes of which you keep one end.
  80360. +- Have some of these pipes appear to be interactive (this is used for example
  80361. +by programs running inside emacs).
  80362. +- Detect when the execute program exits, and get its return code.
  80363. +- Send signals (eg ctrl-c) to the created process, and preferably its children.
  80364. +
  80365. +you are in deep trouble. A minimum of 10 attempts is needed to get
  80366. +something which works most of the time, ie the eexec function.
  80367. +
  80368. +The problems are:
  80369. +- You have to make a command line from argc, argv. But these arguments may
  80370. +contain spaces, so they must be surrounded by double quotes. And then, '*'
  80371. +must be escaped as it is the escape character. And so on.
  80372. +- Only recently has an error stream appeared in AmigaOS. And it doesn't
  80373. +inherit very well (Indeed, specifying the error stream doesn't work in the
  80374. +current version).
  80375. +- Amiga programs generally expect interactive files to be console windows.
  80376. +And fifo: is the only interactive pipe I'm aware of. So the pipe: system
  80377. +call uses fifo: and fifo.library.
  80378. +- To get the return code of an application, you must use the synchronous
  80379. +version of SystemTags. Otherwise it is lost. But you want an asynchronous
  80380. +process facility. So I create 2 processes, the first one is created with
  80381. +CreateNewProc and executes a custom piece of code. This code launches
  80382. +the real program with SystemTags, and sends a message with the return code
  80383. +to its parent (if it is still around).
  80384. +- You can't find the children of a process. So the signal is sent to all
  80385. +the processes that share the input filehandle of the created process. This
  80386. +is the best solution that I found.
  80387. +- AmigaOS isn't Unix.
  80388. +
  80389. +Therefore, the eexec function is far from perfect. It works as follows:
  80390. +
  80391. +eexec(program, argv, input, output, error, directory, stacksize)
  80392. +
  80393. +  program: the path of the executable file. Your path is searched.
  80394. +  argv: A null terminated array of arguments. The first (argv[0]) is ignored.
  80395. +  input: A unix filehandle on the desired input. -1 means copy Input().
  80396. +  output: A unix filehandle on the desired output. -1 means copy Output().
  80397. +  error: A unix filehandle on the desired error stream. -1 means copy the pr_CES
  80398. +     field of the current process, -2 means copy the value specified for output.
  80399. +         Currently, this parameter has no effect.
  80400. +  directory: pathname for the current directory for the created process, or NULL
  80401. +         to inheir the current processes'.
  80402. +  stacksize: stack size for the created process. 0 means the same size as the 
  80403. +         current stack.
  80404. +  
  80405. +_start_process is a lower level interface:
  80406. +
  80407. +_start_process(command, input, close_input, output, close_output,
  80408. +           error, close_error, dir, stacksize)
  80409. +  command: the string to pass to SystemTags (it will be passed to
  80410. +    the UserShell, not the system default).
  80411. +  input, output, error, close_xxx: AmigaOS filehandles for use as the
  80412. +    appropriate stream. If close_x is true, the corresponding stream will be
  80413. +    closed when the process exits.
  80414. +  dir: Lock on the desired directory for the new process.
  80415. +  stacksize: as above.
  80416. +
  80417. +
  80418. +Recompiling
  80419. +-----------
  80420. +
  80421. +To recompile, simply run lmk in the src directory. You can add the -dUSE_LOCAL
  80422. +flag to CFLAGS in lmkfile if you want the system clock to store local time 
  80423. +instead of GMT.
  80424. +
  80425. +If you want symlink to work, add -dSOFTLINK to CFLAGS (For example, tar uses
  80426. +a version of unix.lib compiled like this).
  80427. +
  80428. +If you add modules, you can use the mkmkf to remake the makefile dependencies
  80429. +(it generates lmkfile from lmkfile.base and the dependencies for all the .c
  80430. +files in the current directory). This program requires perl (available from
  80431. +ftp sites).
  80432. +
  80433. +
  80434. +Changes from 1.0 to 1.1
  80435. +-----------------------
  80436. +stat() now returns a value for st_dev.
  80437. +exec() extended by eexec, assembly part rewritten in C.
  80438. +symbolic links recognized. Their use is not recommended (too buggy).
  80439. +sigvec added.
  80440. +popen, pclose added.
  80441. +Documentation discusses exec.
  80442.