Sync up with r21-2-40.
authortomo <tomo>
Wed, 15 Aug 2001 05:52:39 +0000 (05:52 +0000)
committertomo <tomo>
Wed, 15 Aug 2001 05:52:39 +0000 (05:52 +0000)
53 files changed:
info/emodules.info
info/texinfo.info
info/texinfo.info-1
info/texinfo.info-10
info/texinfo.info-11
info/texinfo.info-12
info/texinfo.info-2
info/texinfo.info-3
info/texinfo.info-4
info/texinfo.info-5
info/texinfo.info-6
info/texinfo.info-7
info/texinfo.info-8
info/texinfo.info-9
lib-src/ChangeLog
lisp/ChangeLog
lisp/ChangeLog.1
lisp/dump-paths.el
lisp/mule/hebrew.el
lisp/mule/japanese.el
lisp/mule/mule-category.el
lisp/mule/mule-ccl.el
lisp/paragraphs.el
lwlib/ChangeLog
lwlib/lwlib-Xaw.c
lwlib/lwlib-Xaw.h
lwlib/lwlib-Xlw.c
lwlib/lwlib-Xlw.h
lwlib/lwlib-Xm.c
lwlib/lwlib-Xm.h
lwlib/lwlib.c
lwlib/lwlib.h
man/ChangeLog
man/emodules.texi
man/texinfo.texi
nt/ChangeLog
src/ChangeLog
src/alloc.c
src/elhash.c
src/elhash.h
src/event-Xt.c
src/frame-x.c
src/frame.c
src/glyphs-x.c
src/glyphs.c
src/glyphs.h
src/menubar.c
src/mule-ccl.c
src/redisplay-x.c
src/redisplay.h
src/regex.c
src/window.c
tests/ChangeLog

index 2fc6147..15eb210 100644 (file)
@@ -1,4 +1,4 @@
-This is ../info/emodules.info, produced by makeinfo version 4.0 from
+This is ../info/emodules.info, produced by makeinfo version 4.0b from
 emodules.texi.
 
    This file documents the module loading technology of XEmacs.
@@ -252,7 +252,14 @@ place-holder, not an actual function name.
      `DEFVAR_LISP()', `DEFVAR_BOOL()' etc, and its purpose is to
      declare and initialize all and any variables that your module
      defines.  They syntax for declaring variables is identical to the
-     syntax used for all internal XEmacs source code.
+     syntax used for all internal XEmacs source code.  If the module is
+     intended to be usable statically linked into XEmacs, the actions
+     of this function are severely restricted.  *Note General Coding
+     Rules: (internals)General Coding Rules.  Also see the comments in
+     `src/emacs.c' (`main_1').  Modules which perform initializations
+     not permitted by these rules will probably work, but dual-use
+     (dynamic loading and static linking) modules will require very
+     careful, and possibly fragile, coding.
 
 `modules_of_module'
      This optional function should be used to load in any modules which
@@ -553,7 +560,7 @@ Link Mode
    Once all of your source code files have been compiled (including the
 generated init file) you need to link them all together to create the
 loadable module.  To do this, you invoke `ellcc' in link mode, by
-passing the `--mode-link' option.  You need to specify the final output
+passing the `--mode=link' option.  You need to specify the final output
 file using the `--mod-output=NAME' option, but other than that all
 other arguments are passed on directly to the system compiler or
 linker, along with any other required arguments to create the loadable
@@ -930,23 +937,23 @@ Index
 
 \1f
 Tag Table:
-Node: Top\7f1536
-Node: Introduction\7f2883
-Node: Anatomy of a Module\7f7391
-Node: Required Header File\7f8205
-Node: Required Functions\7f10124
-Node: Required Variables\7f12371
-Node: Loading other Modules\7f15057
-Node: Using ellcc\7f17114
-Node: Compile Mode\7f18908
-Node: Initialization Mode\7f20276
-Node: Link Mode\7f25310
-Node: Other ellcc options\7f26455
-Node: Environment Variables\7f29034
-Node: Defining Functions\7f30725
-Node: Using DEFUN\7f32736
-Node: Declaring Functions\7f34447
-Node: Defining Variables\7f35790
-Node: Index\7f38033
+Node: Top\7f1537
+Node: Introduction\7f2884
+Node: Anatomy of a Module\7f7392
+Node: Required Header File\7f8206
+Node: Required Functions\7f10125
+Node: Required Variables\7f12849
+Node: Loading other Modules\7f15535
+Node: Using ellcc\7f17592
+Node: Compile Mode\7f19386
+Node: Initialization Mode\7f20754
+Node: Link Mode\7f25788
+Node: Other ellcc options\7f26933
+Node: Environment Variables\7f29512
+Node: Defining Functions\7f31203
+Node: Using DEFUN\7f33214
+Node: Declaring Functions\7f34925
+Node: Defining Variables\7f36268
+Node: Index\7f38511
 \1f
 End Tag Table
index acf2780..ae4c6b1 100644 (file)
@@ -1,4 +1,4 @@
-This is ../info/texinfo.info, produced by makeinfo version 4.0 from
+This is ../info/texinfo.info, produced by makeinfo version 4.0b from
 texinfo.texi.
 
 INFO-DIR-SECTION Texinfo documentation system
@@ -34,317 +34,317 @@ translation approved by the Free Software Foundation.
 
 \1f
 Indirect:
-texinfo.info-1: 1484
-texinfo.info-2: 48703
-texinfo.info-3: 96677
-texinfo.info-4: 146069
-texinfo.info-5: 196054
-texinfo.info-6: 245146
-texinfo.info-7: 293741
-texinfo.info-8: 343556
-texinfo.info-9: 392869
-texinfo.info-10: 435247
-texinfo.info-11: 481363
-texinfo.info-12: 519523
+texinfo.info-1: 1485
+texinfo.info-2: 48704
+texinfo.info-3: 96678
+texinfo.info-4: 146070
+texinfo.info-5: 196057
+texinfo.info-6: 245149
+texinfo.info-7: 293744
+texinfo.info-8: 343559
+texinfo.info-9: 392872
+texinfo.info-10: 435250
+texinfo.info-11: 481366
+texinfo.info-12: 519526
 \1f
 Tag Table:
 (Indirect)
-Node: Top\7f1484
-Node: Copying\7f23799
-Node: Overview\7f25804
-Node: Overview-Footnotes\7f27233
-Ref: Overview-Footnote-1\7f27297
-Node: Using Texinfo\7f27769
-Node: Info Files\7f30252
-Node: Info Files-Footnotes\7f34288
-Ref: Info Files-Footnote-1\7f34356
-Node: Printed Books\7f34535
-Node: Printed Books-Footnotes\7f37207
-Ref: Printed Books-Footnote-1\7f37281
-Node: Formatting Commands\7f37491
-Node: Formatting Commands-Footnotes\7f40318
-Ref: Formatting Commands-Footnote-1\7f40404
-Node: Conventions\7f41020
-Node: Comments\7f43582
-Node: Minimum\7f45005
-Node: Six Parts\7f47191
-Node: Short Sample\7f48703
-Node: Acknowledgements\7f52839
-Node: Texinfo Mode\7f53674
-Node: Texinfo Mode Overview\7f55046
-Node: Emacs Editing\7f55822
-Node: Inserting\7f57952
-Node: Showing the Structure\7f62233
-Node: Updating Nodes and Menus\7f64760
-Node: Updating Commands\7f65833
-Node: Updating Requirements\7f71894
-Node: Other Updating Commands\7f74191
-Node: Info Formatting\7f77459
-Node: Printing\7f78717
-Node: Texinfo Mode Summary\7f81062
-Node: Beginning a File\7f85816
-Node: Four Parts\7f86707
-Node: Sample Beginning\7f88177
-Node: Header\7f89797
-Node: First Line\7f91149
-Node: Start of Header\7f92138
-Node: setfilename\7f92851
-Node: settitle\7f94787
-Node: setchapternewpage\7f96677
-Node: paragraphindent\7f99438
-Node: End of Header\7f100920
-Node: Info Summary and Permissions\7f101759
-Node: Titlepage & Copyright Page\7f102778
-Node: titlepage\7f104384
-Node: titlepage-Footnotes\7f106666
-Ref: titlepage-Footnote-1\7f106732
-Node: titlefont center sp\7f107006
-Node: title subtitle author\7f108232
-Node: Copyright & Permissions\7f110504
-Node: end titlepage\7f112505
-Node: headings on off\7f114211
-Node: The Top Node\7f116256
-Node: Title of Top Node\7f117411
-Node: Master Menu Parts\7f118664
-Node: Software Copying Permissions\7f120901
-Node: Ending a File\7f122069
-Node: Printing Indices & Menus\7f122917
-Node: Contents\7f125226
-Node: File End\7f127566
-Node: Structuring\7f128239
-Node: Tree Structuring\7f129896
-Node: Structuring Command Types\7f131339
-Node: makeinfo top\7f133666
-Node: chapter\7f134199
-Node: unnumbered & appendix\7f135223
-Node: majorheading & chapheading\7f136062
-Node: section\7f136883
-Node: unnumberedsec appendixsec heading\7f137647
-Node: subsection\7f138636
-Node: unnumberedsubsec appendixsubsec subheading\7f139208
-Node: subsubsection\7f140161
-Node: Raise/lower sections\7f141711
-Node: Nodes\7f143846
-Node: Two Paths\7f144783
-Node: Node Menu Illustration\7f146069
-Node: node\7f149764
-Node: Node Names\7f152460
-Node: Writing a Node\7f153536
-Node: Node Line Tips\7f155554
-Node: Node Line Requirements\7f156348
-Node: First Node\7f157949
-Node: makeinfo top command\7f159393
-Node: Top Node Summary\7f160572
-Node: makeinfo Pointer Creation\7f162022
-Node: Menus\7f163269
-Node: Menus-Footnotes\7f164208
-Ref: Menus-Footnote-1\7f164266
-Node: Menu Location\7f164559
-Node: Writing a Menu\7f166236
-Node: Menu Parts\7f167202
-Node: Less Cluttered Menu Entry\7f168360
-Node: Menu Example\7f168985
-Node: Other Info Files\7f170506
-Node: Cross References\7f172374
-Node: References\7f173331
-Node: Cross Reference Commands\7f175078
-Node: Cross Reference Parts\7f176137
-Node: xref\7f178973
-Node: Reference Syntax\7f179772
-Node: One Argument\7f181426
-Node: Two Arguments\7f182438
-Node: Three Arguments\7f183553
-Node: Four and Five Arguments\7f185944
-Node: Top Node Naming\7f188356
-Node: ref\7f189366
-Node: pxref\7f190756
-Node: inforef\7f193138
-Node: uref\7f194431
-Node: Marking Text\7f195430
-Node: Indicating\7f196054
-Node: Useful Highlighting\7f197959
-Node: code\7f199348
-Node: kbd\7f202386
-Node: key\7f204256
-Node: samp\7f205589
-Node: var\7f207176
-Node: file\7f208969
-Node: dfn\7f209576
-Node: cite\7f210486
-Node: url\7f210940
-Node: email\7f211504
-Node: Emphasis\7f212316
-Node: emph & strong\7f213216
-Node: Smallcaps\7f214202
-Node: Fonts\7f215529
-Node: Customized Highlighting\7f216617
-Node: Customized Highlighting-Footnotes\7f219432
-Ref: Customized Highlighting-Footnote-1\7f219526
-Node: Quotations and Examples\7f219652
-Node: Block Enclosing Commands\7f221274
-Node: quotation\7f223299
-Node: example\7f224389
-Node: noindent\7f226444
-Node: Lisp Example\7f227908
-Node: Lisp Example-Footnotes\7f228610
-Ref: Lisp Example-Footnote-1\7f228682
-Node: smallexample & smalllisp\7f228800
-Node: display\7f230825
-Node: format\7f231457
-Node: exdent\7f231918
-Node: flushleft & flushright\7f232998
-Node: cartouche\7f234264
-Node: Lists and Tables\7f235031
-Node: Introducing Lists\7f235707
-Node: itemize\7f237372
-Node: enumerate\7f239519
-Node: Two-column Tables\7f242024
-Node: table\7f242713
-Node: ftable vtable\7f245146
-Node: itemx\7f246247
-Node: Multi-column Tables\7f247258
-Node: Multitable Column Widths\7f247929
-Node: Multitable Rows\7f249383
-Node: Indices\7f251160
-Node: Index Entries\7f252310
-Node: Predefined Indices\7f253443
-Node: Indexing Commands\7f254440
-Node: Combining Indices\7f258980
-Node: syncodeindex\7f260343
-Node: synindex\7f262005
-Node: New Indices\7f262530
-Node: Insertions\7f264355
-Node: Braces Atsigns\7f265539
-Node: Inserting An Atsign\7f266091
-Node: Inserting Braces\7f266365
-Node: Inserting Space\7f266728
-Node: Not Ending a Sentence\7f267232
-Node: Ending a Sentence\7f268586
-Node: Multiple Spaces\7f269715
-Node: dmn\7f270934
-Node: Inserting Accents\7f272141
-Node: Dots Bullets\7f273898
-Node: dots\7f274720
-Node: bullet\7f275244
-Node: TeX and copyright\7f275641
-Node: tex\7f276208
-Node: copyright symbol\7f276624
-Node: pounds\7f276884
-Node: minus\7f277248
-Node: math\7f278170
-Node: Glyphs\7f278898
-Node: Glyphs Summary\7f280011
-Node: result\7f280639
-Node: expansion\7f281124
-Node: Print Glyph\7f282080
-Node: Error Glyph\7f282957
-Node: Equivalence\7f283790
-Node: Point Glyph\7f284478
-Node: Images\7f286035
-Node: Breaks\7f287702
-Node: Break Commands\7f289133
-Node: Line Breaks\7f289974
-Node: - and hyphenation\7f290992
-Node: w\7f292242
-Node: sp\7f292955
-Node: page\7f293364
-Node: group\7f293741
-Node: need\7f295484
-Node: Definition Commands\7f296214
-Node: Def Cmd Template\7f297785
-Node: Optional Arguments\7f300782
-Node: deffnx\7f302370
-Node: Def Cmds in Detail\7f303325
-Node: Functions Commands\7f304435
-Node: Variables Commands\7f307440
-Node: Typed Functions\7f309526
-Node: Typed Variables\7f313068
-Node: Abstract Objects\7f315051
-Node: Data Types\7f320276
-Node: Def Cmd Conventions\7f321531
-Node: Sample Function Definition\7f322094
-Node: Footnotes\7f324978
-Node: Footnotes-Footnotes\7f325366
-Ref: Footnotes-Footnote-1\7f325432
-Node: Footnote Commands\7f325712
-Node: Footnote Commands-Footnotes\7f327209
-Ref: Footnote Commands-Footnote-1\7f327291
-Node: Footnote Styles\7f327327
-Node: Conditionals\7f329913
-Node: Conditional Commands\7f330724
-Node: Conditional Not Commands\7f332217
-Node: Raw Formatter Commands\7f332962
-Node: set clear value\7f334792
-Node: ifset ifclear\7f335593
-Node: value\7f338772
-Node: value Example\7f340184
-Node: Macros\7f341762
-Node: Defining Macros\7f342467
-Node: Invoking Macros\7f343556
-Node: Format/Print Hardcopy\7f344662
-Node: Use TeX\7f346499
-Node: Format with tex/texindex\7f347127
-Node: Format with texi2dvi\7f350768
-Node: Print with lpr\7f351359
-Node: Within Emacs\7f352213
-Node: Texinfo Mode Printing\7f353132
-Node: Compile-Command\7f356542
-Node: Requirements Summary\7f357430
-Node: Preparing for TeX\7f358743
-Node: Overfull hboxes\7f361530
-Node: smallbook\7f363089
-Node: A4 Paper\7f364607
-Node: Cropmarks and Magnification\7f365832
-Node: Create an Info File\7f367773
-Node: makeinfo advantages\7f369076
-Node: Invoking makeinfo\7f369992
-Node: makeinfo options\7f370680
-Node: Pointer Validation\7f376164
-Node: makeinfo in Emacs\7f377508
-Node: texinfo-format commands\7f380066
-Node: Batch Formatting\7f381337
-Node: Tag and Split Files\7f382553
-Node: Install an Info File\7f385907
-Node: Directory file\7f386725
-Node: New Info File\7f388593
-Node: Other Info Directories\7f389654
-Node: Installing Dir Entries\7f392869
-Node: Invoking install-info\7f394862
-Node: Command List\7f397277
-Node: Tips\7f435247
-Node: Sample Texinfo File\7f446657
-Node: Sample Permissions\7f448776
-Node: Inserting Permissions\7f449819
-Node: ifinfo Permissions\7f452125
-Node: Titlepage Permissions\7f453746
-Node: Include Files\7f455008
-Node: Using Include Files\7f456095
-Node: texinfo-multiple-files-update\7f458050
-Node: Include File Requirements\7f460411
-Node: Sample Include File\7f461656
-Node: Include Files Evolution\7f463175
-Node: Headings\7f465146
-Node: Headings Introduced\7f465783
-Node: Heading Format\7f467671
-Node: Heading Choice\7f470123
-Node: Custom Headings\7f471495
-Node: Catching Mistakes\7f475823
-Node: makeinfo Preferred\7f477112
-Node: Debugging with Info\7f478017
-Node: Debugging with TeX\7f481363
-Node: Using texinfo-show-structure\7f485643
-Node: Using occur\7f488742
-Node: Running Info-Validate\7f490279
-Node: Using Info-validate\7f491340
-Node: Unsplit\7f493182
-Node: Tagifying\7f494228
-Node: Splitting\7f495080
-Node: Refilling Paragraphs\7f496696
-Node: Refilling Paragraphs-Footnotes\7f498350
-Ref: Refilling Paragraphs-Footnote-1\7f498438
-Node: Command Syntax\7f498601
-Node: Obtaining TeX\7f501558
-Node: Command and Variable Index\7f503671
-Node: Concept Index\7f519523
+Node: Top\7f1485
+Node: Copying\7f23800
+Node: Overview\7f25805
+Node: Overview-Footnotes\7f27234
+Ref: Overview-Footnote-1\7f27298
+Node: Using Texinfo\7f27770
+Node: Info Files\7f30253
+Node: Info Files-Footnotes\7f34289
+Ref: Info Files-Footnote-1\7f34357
+Node: Printed Books\7f34536
+Node: Printed Books-Footnotes\7f37208
+Ref: Printed Books-Footnote-1\7f37282
+Node: Formatting Commands\7f37492
+Node: Formatting Commands-Footnotes\7f40319
+Ref: Formatting Commands-Footnote-1\7f40405
+Node: Conventions\7f41021
+Node: Comments\7f43583
+Node: Minimum\7f45006
+Node: Six Parts\7f47192
+Node: Short Sample\7f48704
+Node: Acknowledgements\7f52840
+Node: Texinfo Mode\7f53675
+Node: Texinfo Mode Overview\7f55047
+Node: Emacs Editing\7f55823
+Node: Inserting\7f57953
+Node: Showing the Structure\7f62234
+Node: Updating Nodes and Menus\7f64761
+Node: Updating Commands\7f65834
+Node: Updating Requirements\7f71895
+Node: Other Updating Commands\7f74192
+Node: Info Formatting\7f77460
+Node: Printing\7f78718
+Node: Texinfo Mode Summary\7f81063
+Node: Beginning a File\7f85817
+Node: Four Parts\7f86708
+Node: Sample Beginning\7f88178
+Node: Header\7f89798
+Node: First Line\7f91150
+Node: Start of Header\7f92139
+Node: setfilename\7f92852
+Node: settitle\7f94788
+Node: setchapternewpage\7f96678
+Node: paragraphindent\7f99439
+Node: End of Header\7f100921
+Node: Info Summary and Permissions\7f101760
+Node: Titlepage & Copyright Page\7f102779
+Node: titlepage\7f104385
+Node: titlepage-Footnotes\7f106667
+Ref: titlepage-Footnote-1\7f106733
+Node: titlefont center sp\7f107007
+Node: title subtitle author\7f108233
+Node: Copyright & Permissions\7f110505
+Node: end titlepage\7f112506
+Node: headings on off\7f114212
+Node: The Top Node\7f116257
+Node: Title of Top Node\7f117412
+Node: Master Menu Parts\7f118665
+Node: Software Copying Permissions\7f120902
+Node: Ending a File\7f122070
+Node: Printing Indices & Menus\7f122918
+Node: Contents\7f125227
+Node: File End\7f127567
+Node: Structuring\7f128240
+Node: Tree Structuring\7f129897
+Node: Structuring Command Types\7f131340
+Node: makeinfo top\7f133667
+Node: chapter\7f134200
+Node: unnumbered & appendix\7f135224
+Node: majorheading & chapheading\7f136063
+Node: section\7f136884
+Node: unnumberedsec appendixsec heading\7f137648
+Node: subsection\7f138637
+Node: unnumberedsubsec appendixsubsec subheading\7f139209
+Node: subsubsection\7f140162
+Node: Raise/lower sections\7f141712
+Node: Nodes\7f143847
+Node: Two Paths\7f144784
+Node: Node Menu Illustration\7f146070
+Node: node\7f149765
+Node: Node Names\7f152461
+Node: Writing a Node\7f153537
+Node: Node Line Tips\7f155555
+Node: Node Line Requirements\7f156349
+Node: First Node\7f157950
+Node: makeinfo top command\7f159394
+Node: Top Node Summary\7f160573
+Node: makeinfo Pointer Creation\7f162023
+Node: Menus\7f163270
+Node: Menus-Footnotes\7f164209
+Ref: Menus-Footnote-1\7f164267
+Node: Menu Location\7f164560
+Node: Writing a Menu\7f166237
+Node: Menu Parts\7f167203
+Node: Less Cluttered Menu Entry\7f168361
+Node: Menu Example\7f168986
+Node: Other Info Files\7f170507
+Node: Cross References\7f172375
+Node: References\7f173332
+Node: Cross Reference Commands\7f175079
+Node: Cross Reference Parts\7f176138
+Node: xref\7f178974
+Node: Reference Syntax\7f179773
+Node: One Argument\7f181427
+Node: Two Arguments\7f182439
+Node: Three Arguments\7f183554
+Node: Four and Five Arguments\7f185945
+Node: Top Node Naming\7f188357
+Node: ref\7f189367
+Node: pxref\7f190759
+Node: inforef\7f193141
+Node: uref\7f194434
+Node: Marking Text\7f195433
+Node: Indicating\7f196057
+Node: Useful Highlighting\7f197962
+Node: code\7f199351
+Node: kbd\7f202389
+Node: key\7f204259
+Node: samp\7f205592
+Node: var\7f207179
+Node: file\7f208972
+Node: dfn\7f209579
+Node: cite\7f210489
+Node: url\7f210943
+Node: email\7f211507
+Node: Emphasis\7f212319
+Node: emph & strong\7f213219
+Node: Smallcaps\7f214205
+Node: Fonts\7f215532
+Node: Customized Highlighting\7f216620
+Node: Customized Highlighting-Footnotes\7f219435
+Ref: Customized Highlighting-Footnote-1\7f219529
+Node: Quotations and Examples\7f219655
+Node: Block Enclosing Commands\7f221277
+Node: quotation\7f223302
+Node: example\7f224392
+Node: noindent\7f226447
+Node: Lisp Example\7f227911
+Node: Lisp Example-Footnotes\7f228613
+Ref: Lisp Example-Footnote-1\7f228685
+Node: smallexample & smalllisp\7f228803
+Node: display\7f230828
+Node: format\7f231460
+Node: exdent\7f231921
+Node: flushleft & flushright\7f233001
+Node: cartouche\7f234267
+Node: Lists and Tables\7f235034
+Node: Introducing Lists\7f235710
+Node: itemize\7f237375
+Node: enumerate\7f239522
+Node: Two-column Tables\7f242027
+Node: table\7f242716
+Node: ftable vtable\7f245149
+Node: itemx\7f246250
+Node: Multi-column Tables\7f247261
+Node: Multitable Column Widths\7f247932
+Node: Multitable Rows\7f249386
+Node: Indices\7f251163
+Node: Index Entries\7f252313
+Node: Predefined Indices\7f253446
+Node: Indexing Commands\7f254443
+Node: Combining Indices\7f258983
+Node: syncodeindex\7f260346
+Node: synindex\7f262008
+Node: New Indices\7f262533
+Node: Insertions\7f264358
+Node: Braces Atsigns\7f265542
+Node: Inserting An Atsign\7f266094
+Node: Inserting Braces\7f266368
+Node: Inserting Space\7f266731
+Node: Not Ending a Sentence\7f267235
+Node: Ending a Sentence\7f268589
+Node: Multiple Spaces\7f269718
+Node: dmn\7f270937
+Node: Inserting Accents\7f272144
+Node: Dots Bullets\7f273901
+Node: dots\7f274723
+Node: bullet\7f275247
+Node: TeX and copyright\7f275644
+Node: tex\7f276211
+Node: copyright symbol\7f276627
+Node: pounds\7f276887
+Node: minus\7f277251
+Node: math\7f278173
+Node: Glyphs\7f278901
+Node: Glyphs Summary\7f280014
+Node: result\7f280642
+Node: expansion\7f281127
+Node: Print Glyph\7f282083
+Node: Error Glyph\7f282960
+Node: Equivalence\7f283793
+Node: Point Glyph\7f284481
+Node: Images\7f286038
+Node: Breaks\7f287705
+Node: Break Commands\7f289136
+Node: Line Breaks\7f289977
+Node: - and hyphenation\7f290995
+Node: w\7f292245
+Node: sp\7f292958
+Node: page\7f293367
+Node: group\7f293744
+Node: need\7f295487
+Node: Definition Commands\7f296217
+Node: Def Cmd Template\7f297788
+Node: Optional Arguments\7f300785
+Node: deffnx\7f302373
+Node: Def Cmds in Detail\7f303328
+Node: Functions Commands\7f304438
+Node: Variables Commands\7f307443
+Node: Typed Functions\7f309529
+Node: Typed Variables\7f313071
+Node: Abstract Objects\7f315054
+Node: Data Types\7f320279
+Node: Def Cmd Conventions\7f321534
+Node: Sample Function Definition\7f322097
+Node: Footnotes\7f324981
+Node: Footnotes-Footnotes\7f325369
+Ref: Footnotes-Footnote-1\7f325435
+Node: Footnote Commands\7f325715
+Node: Footnote Commands-Footnotes\7f327212
+Ref: Footnote Commands-Footnote-1\7f327294
+Node: Footnote Styles\7f327330
+Node: Conditionals\7f329916
+Node: Conditional Commands\7f330727
+Node: Conditional Not Commands\7f332220
+Node: Raw Formatter Commands\7f332965
+Node: set clear value\7f334795
+Node: ifset ifclear\7f335596
+Node: value\7f338775
+Node: value Example\7f340187
+Node: Macros\7f341765
+Node: Defining Macros\7f342470
+Node: Invoking Macros\7f343559
+Node: Format/Print Hardcopy\7f344665
+Node: Use TeX\7f346502
+Node: Format with tex/texindex\7f347130
+Node: Format with texi2dvi\7f350771
+Node: Print with lpr\7f351362
+Node: Within Emacs\7f352216
+Node: Texinfo Mode Printing\7f353135
+Node: Compile-Command\7f356545
+Node: Requirements Summary\7f357433
+Node: Preparing for TeX\7f358746
+Node: Overfull hboxes\7f361533
+Node: smallbook\7f363092
+Node: A4 Paper\7f364610
+Node: Cropmarks and Magnification\7f365835
+Node: Create an Info File\7f367776
+Node: makeinfo advantages\7f369079
+Node: Invoking makeinfo\7f369995
+Node: makeinfo options\7f370683
+Node: Pointer Validation\7f376167
+Node: makeinfo in Emacs\7f377511
+Node: texinfo-format commands\7f380069
+Node: Batch Formatting\7f381340
+Node: Tag and Split Files\7f382556
+Node: Install an Info File\7f385910
+Node: Directory file\7f386728
+Node: New Info File\7f388596
+Node: Other Info Directories\7f389657
+Node: Installing Dir Entries\7f392872
+Node: Invoking install-info\7f394865
+Node: Command List\7f397280
+Node: Tips\7f435250
+Node: Sample Texinfo File\7f446660
+Node: Sample Permissions\7f448779
+Node: Inserting Permissions\7f449822
+Node: ifinfo Permissions\7f452128
+Node: Titlepage Permissions\7f453749
+Node: Include Files\7f455011
+Node: Using Include Files\7f456098
+Node: texinfo-multiple-files-update\7f458053
+Node: Include File Requirements\7f460414
+Node: Sample Include File\7f461659
+Node: Include Files Evolution\7f463178
+Node: Headings\7f465149
+Node: Headings Introduced\7f465786
+Node: Heading Format\7f467674
+Node: Heading Choice\7f470126
+Node: Custom Headings\7f471498
+Node: Catching Mistakes\7f475826
+Node: makeinfo Preferred\7f477115
+Node: Debugging with Info\7f478020
+Node: Debugging with TeX\7f481366
+Node: Using texinfo-show-structure\7f485646
+Node: Using occur\7f488745
+Node: Running Info-Validate\7f490282
+Node: Using Info-validate\7f491343
+Node: Unsplit\7f493185
+Node: Tagifying\7f494231
+Node: Splitting\7f495083
+Node: Refilling Paragraphs\7f496699
+Node: Refilling Paragraphs-Footnotes\7f498353
+Ref: Refilling Paragraphs-Footnote-1\7f498441
+Node: Command Syntax\7f498604
+Node: Obtaining TeX\7f501561
+Node: Command and Variable Index\7f503674
+Node: Concept Index\7f519526
 \1f
 End Tag Table
index f31fc03..d0c2298 100644 (file)
@@ -1,4 +1,4 @@
-This is ../info/texinfo.info, produced by makeinfo version 4.0 from
+This is ../info/texinfo.info, produced by makeinfo version 4.0b from
 texinfo.texi.
 
 INFO-DIR-SECTION Texinfo documentation system
index aea9a20..7ea65d1 100644 (file)
@@ -1,4 +1,4 @@
-This is ../info/texinfo.info, produced by makeinfo version 4.0 from
+This is ../info/texinfo.info, produced by makeinfo version 4.0b from
 texinfo.texi.
 
 INFO-DIR-SECTION Texinfo documentation system
index 43fe115..3f8c007 100644 (file)
@@ -1,4 +1,4 @@
-This is ../info/texinfo.info, produced by makeinfo version 4.0 from
+This is ../info/texinfo.info, produced by makeinfo version 4.0b from
 texinfo.texi.
 
 INFO-DIR-SECTION Texinfo documentation system
index de69019..8868116 100644 (file)
@@ -1,4 +1,4 @@
-This is ../info/texinfo.info, produced by makeinfo version 4.0 from
+This is ../info/texinfo.info, produced by makeinfo version 4.0b from
 texinfo.texi.
 
 INFO-DIR-SECTION Texinfo documentation system
index fc54512..2d9851d 100644 (file)
@@ -1,4 +1,4 @@
-This is ../info/texinfo.info, produced by makeinfo version 4.0 from
+This is ../info/texinfo.info, produced by makeinfo version 4.0b from
 texinfo.texi.
 
 INFO-DIR-SECTION Texinfo documentation system
index 5eab100..02f4b8b 100644 (file)
@@ -1,4 +1,4 @@
-This is ../info/texinfo.info, produced by makeinfo version 4.0 from
+This is ../info/texinfo.info, produced by makeinfo version 4.0b from
 texinfo.texi.
 
 INFO-DIR-SECTION Texinfo documentation system
index be6cc69..cc6a9aa 100644 (file)
@@ -1,4 +1,4 @@
-This is ../info/texinfo.info, produced by makeinfo version 4.0 from
+This is ../info/texinfo.info, produced by makeinfo version 4.0b from
 texinfo.texi.
 
 INFO-DIR-SECTION Texinfo documentation system
@@ -1192,7 +1192,7 @@ For example,
 
 produces
 
-     For more information, see *Note Hurricanes.
+     For more information, see *Note Hurricanes::.
 
 and
 
index f285171..ad0ff64 100644 (file)
@@ -1,4 +1,4 @@
-This is ../info/texinfo.info, produced by makeinfo version 4.0 from
+This is ../info/texinfo.info, produced by makeinfo version 4.0b from
 texinfo.texi.
 
 INFO-DIR-SECTION Texinfo documentation system
index 4bcdc71..5adf092 100644 (file)
@@ -1,4 +1,4 @@
-This is ../info/texinfo.info, produced by makeinfo version 4.0 from
+This is ../info/texinfo.info, produced by makeinfo version 4.0b from
 texinfo.texi.
 
 INFO-DIR-SECTION Texinfo documentation system
index 10a127a..c64f1ee 100644 (file)
@@ -1,4 +1,4 @@
-This is ../info/texinfo.info, produced by makeinfo version 4.0 from
+This is ../info/texinfo.info, produced by makeinfo version 4.0b from
 texinfo.texi.
 
 INFO-DIR-SECTION Texinfo documentation system
index 79ed349..7c39015 100644 (file)
@@ -1,4 +1,4 @@
-This is ../info/texinfo.info, produced by makeinfo version 4.0 from
+This is ../info/texinfo.info, produced by makeinfo version 4.0b from
 texinfo.texi.
 
 INFO-DIR-SECTION Texinfo documentation system
index 8448388..97f0356 100644 (file)
@@ -1,4 +1,4 @@
-This is ../info/texinfo.info, produced by makeinfo version 4.0 from
+This is ../info/texinfo.info, produced by makeinfo version 4.0b from
 texinfo.texi.
 
 INFO-DIR-SECTION Texinfo documentation system
index bfef491..792f924 100644 (file)
@@ -1,15 +1,6 @@
-2000-06-03  MORIOKA Tomohiko  <tomo@kanji.zinbun.kyoto-u.ac.jp>
+2001-01-08  Martin Buchholz <martin@xemacs.org>
 
-       * update-elc.sh: Fix typo about `utf_2000_p'.
-
-1999-11-16  MORIOKA Tomohiko  <tomo@etl.go.jp>
-
-       * update-elc.sh: Don't ignore lisp/utf-2000/ if utf-2000 is
-       provided.
-
-1999-10-04  MORIOKA Tomohiko  <tomo@etl.go.jp>
-
-       * update-elc.sh (ignore_dirs): Ignore lisp/utf-2000 subdirectory.
+       * XEmacs 21.2.40 is released.
 
 2000-12-31  Martin Buchholz <martin@xemacs.org>
 
index a5aaf8c..89da658 100644 (file)
        * files.el (insert-file-contents-literally): Treat file as binary;
        call file-name-handlers. [sync with Emacs 20.3.10]
 
+2001-01-08  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.40 is released.
+
+2001-01-06  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * mule/hebrew.el: Fix comments and typos.
+       mule/japanese.el: Fix comments, typos, and 8-bit character encoding.
+
+2001-01-06  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * ChangeLog.1: move ancient log from fill.el.
+
+       * dump-paths.el:
+       paragraphs.el:
+       mule/mule-category.el:
+       Miscellaneous typo fixes and slight doc clarifications.
+
+       * mule/mule-ccl.el:  Correct file name in header.
+
 2000-12-31  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.39 is released.
index 3ad71dd..08d2a10 100644 (file)
@@ -6580,6 +6580,11 @@ Sat Mar 15 15:14:06 1997  Steven L Baur  <steve@altair.xemacs.org>
        Abrahamsen).
        (batch-update-autoloads): Use it.
 
+Fri Mar 14 20:00:00 1997  Jareth Hein  <jhod@po.iijnet.or.jp>
+
+       * prim/fill.el:  added functions for kinsoku (Asian text line
+       break processing).
+
 Fri Mar 14 19:59:36 1997  Bob Weiner  <weiner@infodock.com>
 
        * packages/jka-compr.el (jka-compr-installed-p): Simplify.
index 780f3ad..9381a0c 100644 (file)
@@ -28,6 +28,7 @@
 
 ;; This sets up the various paths for continuing loading files for
 ;; dumping.
+;; #### This code is duplicated in startup.el (startup-setup-paths).
 
 (let ((debug-paths (or debug-paths
                      (and (getenv "EMACSDEBUGPATHS")
index 9e89fa1..d396df2 100644 (file)
@@ -24,7 +24,7 @@
 
 ;;; Commentary:
 
-;; For Hebrew, the character sets ISO8859-8 is supported.
+;;  ISO 8859-8 (Hebrew) support.
 
 ;;; Code:
 
 (modify-syntax-entry (make-char 'hebrew-iso8859-8 32) "w") ; no-break space
 
 \f
-;; (make-coding-system
-;;  'hebrew-iso-8bit 2 ?8
-;;  "ISO 2022 based 8-bit encoding for Hebrew (MIME:ISO-8859-8)"
-;;  '(ascii hebrew-iso8859-8 nil nil
-;;    nil ascii-eol ascii-cntl nil nil nil nil nil t)
-;;  '((safe-charsets ascii hebrew-iso8859-8)
-;;    (mime-charset . iso-8859-8)))
-
-;; (define-coding-system-alias 'iso-8859-8 'hebrew-iso-8bit)
-
 (make-coding-system
  'iso-8859-8 'iso2022
- "MIME ISO-8859-8"
+ "ISO-8859-8 (ISO 2022 based 8-bit encoding for Hebrew)"
  '(charset-g0 ascii
    charset-g1 hebrew-iso8859-8
    charset-g2 t
@@ -57,7 +47,7 @@
 
 (make-coding-system
  'ctext-hebrew 'iso2022
- "Coding-system of Hebrew."
+ "Coding-system for Hebrew."
  '(charset-g0 ascii
    charset-g1 hebrew-iso8859-8
    charset-g2 t
@@ -67,7 +57,7 @@
 
 (defun setup-hebrew-environment ()
   "Setup multilingual environment (MULE) for Hebrew.
-But, please note that right-to-left writing is not yet supported."
+Note: right-to-left writing is not yet supported."
   (interactive)
   (set-language-environment "Hebrew"))
 
index cc8bc03..42b2207 100644 (file)
     ;; (setq egg-default-startup-file "eggrc-wnn")
     (setq-default its:*current-map* (its:get-mode-map "roma-kana"))))
 
-;; stuff for providing gramatic processing of Japanese text
+;; stuff for providing grammatic processing of Japanese text
 ;; something like this should probably be created for all environments...
+;; #### Arrgh.  This stuff should defvar'd in either fill.el or kinsoku.el.
+;; Then the language environment should set these things, probably buffer-
+;; locally.
 
 (defvar aletter (concat "\\(" ascii-char "\\|" kanji-char "\\)"))
 (defvar kanji-space-insertable (concat 
           ascii-alphanumeric  kanji-kanji-char "\\|"
           kanji-kanji-char    ascii-alphanumeric ))
 
+;; #### will be moved to fill.el
 (defvar space-insertable (concat " " aletter "\\|" kanji-space-insertable)
   "Regexp for finding points that can have spaces inserted into them for justification")
 \f
index 254b541..3757302 100644 (file)
@@ -279,6 +279,11 @@ Each element is a list of a charset, a designator, and maybe a doc string.")
 
 ;;; At the present, I know Japanese and Chinese text can
 ;;; break line at any point under a restriction of 'kinsoku'.
+;;; #### SJT this needs to be set by language environments and probably should
+;;; be buffer-local---strategy for dealing with this: check all $language.el
+;;; files and also mule-base/$language-utils.el files for variables set;
+;;; these should be made buffer local and some kind of a- or p-list of vars
+;;; to be set for a language environment created. 
 (defvar word-across-newline "\\(\\cj\\|\\cc\\|\\ct\\)"
   "Regular expression of such characters which can be a word across newline.")
 
index 72880fe..e6f72c4 100644 (file)
@@ -1,4 +1,4 @@
-;;; ccl.el --- CCL (Code Conversion Language) compiler
+;;; mule-ccl.el --- CCL (Code Conversion Language) compiler
 
 ;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN.
 ;; Licensed to the Free Software Foundation.
index f26eb42..68b7a55 100644 (file)
@@ -124,7 +124,9 @@ hard newline are considered to match.")
 
 (defconst paragraph-separate "[ \t\f]*$" "\
 *Regexp for beginning of a line that separates paragraphs.
-If you change this, you may have to change paragraph-start also.
+If you change this, you may have to change `paragraph-start' also.
+
+A line matching this is not part of any paragraph.
 
 This is matched against the text at the left margin, which is not necessarily
 the beginning of the line, so it should not use \"^\" as an anchor.  This
@@ -347,7 +349,7 @@ negative arg -N means kill forward to Nth end of paragraph."
 With negative argument, move backward repeatedly to `sentence-beginning'.
 
 The variable `sentence-end' is a regular expression that matches ends of
-sentences.  Also, every paragraph boundary terminates sentences as well."
+sentences.  A paragraph boundary also terminates a sentence."
   (interactive "_p") ; XEmacs
   (or arg (setq arg 1))
   (while (< arg 0)
index 71cbd9d..9c8c6e8 100644 (file)
@@ -1,3 +1,28 @@
+2001-01-08  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.40 is released.
+
+2001-01-06  Martin Buchholz  <martin@xemacs.org>
+
+       * lwlib-Xaw.c (xaw_creation_table): Make const.
+       * lwlib-Xaw.h (xaw_creation_table): Make const.
+       * lwlib-Xlw.c (xlw_creation_table): Make const.
+       * lwlib-Xlw.h (xlw_creation_table): Make const.
+       * lwlib-Xm.c (xm_creation_table): Make const.
+       * lwlib-Xm.h (xm_creation_table): Make const.
+       * lwlib.c (find_in_table): Use const.
+
+2001-01-02  Andy Piper  <andy@xemacs.org>
+
+       * lwlib.h (_widget_args): add args_changed. Necessary because we
+       reference count args.
+
+       * lwlib.c (lw_add_widget_value_arg): set args_changed flag.
+       (merge_widget_value_args): mark as changed if args_changed is
+       true.
+       (update_all_widget_values): reset args_changed.
+       (initialize_widget_instance): ditto.
+
 2000-12-31  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.39 is released.
index 5544c24..1bdafcd 100644 (file)
@@ -880,7 +880,7 @@ xaw_create_text_field (widget_instance *instance)
 
 #endif /* LWLIB_WIDGETS_ATHENA */
 
-widget_creation_entry
+const widget_creation_entry
 xaw_creation_table [] =
 {
 #ifdef LWLIB_SCROLLBARS_ATHENA
index 4562448..ce4bc10 100644 (file)
@@ -3,7 +3,7 @@
 
 #include "lwlib-internal.h"
 
-extern widget_creation_entry xaw_creation_table [];
+extern const widget_creation_entry xaw_creation_table [];
 
 Widget 
 xaw_create_dialog (widget_instance* instance);
index bfb2dfa..92437d5 100644 (file)
@@ -482,7 +482,7 @@ xlw_create_clip_window (widget_instance *instance)
 }
 #endif
 
-widget_creation_entry 
+const widget_creation_entry 
 xlw_creation_table [] =
 {
 #ifdef LWLIB_MENUBARS_LUCID
index f4fd0ed..f1611d7 100644 (file)
@@ -3,7 +3,7 @@
 
 #include "lwlib-internal.h"
 
-extern widget_creation_entry xlw_creation_table [];
+extern const widget_creation_entry xlw_creation_table [];
 extern widget_creation_function xlw_create_dialog;
 
 Boolean
index 28dc5f8..2903ede 100644 (file)
@@ -1786,7 +1786,7 @@ xm_create_combo_box (widget_instance *instance)
 \f
 /* Table of functions to create widgets */
 
-widget_creation_entry
+const widget_creation_entry
 xm_creation_table [] =
 {
 #ifdef LWLIB_MENUBARS_MOTIF
index 13e48b0..b8973f6 100644 (file)
@@ -3,7 +3,7 @@
 
 #include "lwlib-internal.h"
 
-extern widget_creation_entry xm_creation_table [];
+extern const widget_creation_entry xm_creation_table [];
 
 Widget 
 xm_create_dialog (widget_instance* instance);
index bd6e900..44e5ebd 100644 (file)
@@ -264,6 +264,10 @@ merge_widget_value_args (widget_value *old, widget_value *new)
       lw_copy_widget_value_args (new, old);
       changed = True;
     }
+  else if (new->args && new->args == old->args && new->args->args_changed == True)
+    {
+      changed = True;
+    }
 
   return changed;
 }
@@ -756,7 +760,11 @@ update_all_widget_values (widget_info *info, Boolean deep_p)
     update_one_widget_instance (instance, deep_p);
 
   for (val = info->val; val; val = val->next)
-    val->change = NO_CHANGE;
+    {
+      val->change = NO_CHANGE;
+      if (val->args)
+       val->args->args_changed = False;
+    }
 }
 
 void
@@ -821,7 +829,11 @@ initialize_widget_instance (widget_instance *instance)
   update_one_widget_instance (instance, True);
 
   for (val = instance->info->val; val; val = val->next)
-    val->change = NO_CHANGE;
+    {
+      val->change = NO_CHANGE;
+      if (val->args)
+       val->args->args_changed = False;
+    }
 }
 
 /* strcasecmp() is not sufficiently portable or standard,
@@ -841,9 +853,9 @@ ascii_strcasecmp (const char *s1, const char *s2)
 }
 
 static widget_creation_function
-find_in_table (const char *type, widget_creation_entry *table)
+find_in_table (const char *type, const widget_creation_entry table[])
 {
-  widget_creation_entry *cur;
+  const widget_creation_entry *cur;
   for (cur = table; cur->type; cur++)
     if (!ascii_strcasecmp (type, cur->type))
       return cur->function;
@@ -1393,6 +1405,8 @@ void lw_add_widget_value_arg (widget_value* wv, String name, XtArgVal value)
   if (wv->args->nargs > 10)
     return;
 
+  /* Register the change. */
+  wv->args->args_changed = True;
   /* If the arg is already there then we must replace it. */
   for (i = 0; i < wv->args->nargs; i++)
     {
index 9ee62e8..d2f0c54 100644 (file)
@@ -106,6 +106,9 @@ typedef struct _widget_args
   /* Copying args is impossible so we make the caller give us heap allocated
      args and free them when no one wants them any more. */
   int  ref_count;
+  /* Since we are reference counting we need to be able to determine
+     when something has changed. */
+  Boolean      args_changed;
 } widget_args;
 
 typedef struct _widget_value
index cb32e69..1816c40 100644 (file)
@@ -1,3 +1,14 @@
+2001-01-08  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.40 is released.
+
+2001-01-06  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * emodules.texi (Required Functions): Xref coding rules for dual-use
+       modules (module and statically linked).  Typo fix.
+
+       * texinfo.texi (ref):  Typo fix.
+
 2000-12-31  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.39 is released.
index 415caee..b1b250a 100644 (file)
@@ -350,7 +350,14 @@ This required function contains calls to macros such as
 @code{DEFVAR_LISP()}, @code{DEFVAR_BOOL()} etc, and its purpose is to
 declare and initialize all and any variables that your module defines.
 They syntax for declaring variables is identical to the syntax used for
-all internal @value{emacs} source code.
+all internal @value{emacs} source code.  If the module is intended to be
+usable statically linked into XEmacs, the actions of this function are
+severely restricted.  @xref{General Coding Rules,,,internals,
+@value{emacs} Internals Manual}.  Also see the comments in
+@file{src/emacs.c} (@code{main_1}).  Modules which perform
+initializations not permitted by these rules will probably work, but
+dual-use (dynamic loading and static linking) modules will require very
+careful, and possibly fragile, coding.
 
 @item modules_of_module
 @findex modules_of_module
@@ -665,7 +672,7 @@ although @file{.ell} is the preferred extension.
 Once all of your source code files have been compiled (including the
 generated init file) you need to link them all together to create the
 loadable module.  To do this, you invoke @code{ellcc} in link mode, by
-passing the @code{--mode-link} option.  You need to specify the final
+passing the @code{--mode=link} option.  You need to specify the final
 output file using the @code{--mod-output=NAME} option, but other than
 that all other arguments are passed on directly to the system compiler
 or linker, along with any other required arguments to create the
index 321f488..121589e 100644 (file)
@@ -1,5 +1,5 @@
 \input texinfo.tex    @c -*-texinfo-*-
-@c $Id: texinfo.texi,v 1.8.2.5 2000/11/14 23:29:15 adrian Exp $
+@c $Id: texinfo.texi,v 1.8.2.6 2001/01/06 07:51:28 stephent Exp $
 @c %**start of header
 
 @c All text is ignored before the setfilename.
@@ -5882,7 +5882,7 @@ For more information, see @@ref@{Hurricanes@}.
 produces
 
 @example
-For more information, see *Note Hurricanes.
+For more information, see *Note Hurricanes::.
 @end example
 
 @noindent
index ac50ab0..e68d20b 100644 (file)
@@ -1,3 +1,7 @@
+2001-01-08  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.40 is released.
+
 2000-12-31  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.39 is released.
index 6e1ee63..7e87eb8 100644 (file)
        (Vcharset_thai_tis620): Likewise.
        (Vcharset_katakana_jisx0201): Likewise.
 
+2001-01-08  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.40 is released.
+
+2001-01-06  Golubev I. N.  <gin@mo.msk.ru>
+
+       * regex.c: Replace PREFETCH with REGEX_PREFETCH.
+
+2001-01-06  Martin Buchholz  <martin@xemacs.org>
+
+       * alloc.c (dbg_valmask): Make const.
+       * alloc.c (dbg_typemask): Make const.
+       * alloc.c (dbg_USE_UNION_TYPE): Make const.
+       * alloc.c (dbg_valbits): Make const.
+       * alloc.c (dbg_gctypebits): Make const.
+
+2001-01-06  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * redisplay-x.c (x_bevel_area):
+       redisplay.h (struct rune):
+       Typo fixes in comments.
+
+2001-01-05  Andy Piper  <andy@xemacs.org>
+
+       * glyphs-x.c (x_redisplay_widget): use size changed for offset
+       adjustment.
+
+       * menubar.c (menubar_visible_p_changed): don't mark frame changed.
+
+2001-01-05  Martin Buchholz  <martin@xemacs.org>
+
+       * alloc.c (pure-bytes-used): Remove unused mendacious variable.
+
+       * mule-ccl.c (stack_idx_of_map_multiple):
+       Non const global data must not be initialized!
+       Found by MIYASHITA Hisashi.
+
+2001-01-02  Andy Piper  <andy@xemacs.org>
+
+       * frame.c (change_frame_size): make sure frame size is always
+       marked as changed.
+
+       * glyphs.c (image_instance_layout): minor code reuse.
+
+       * window.c (Fcurrent_window_configuration): revert previous
+       change.
+
+2001-01-02  Martin Buchholz  <martin@xemacs.org>
+
+       * glyphs.h:
+       * glyphs.c (make_image_instance_cache_hash_table): Use ANSI prototypes.
+
+2000-12-31  Andy Piper  <andy@xemacs.org>
+
+       * glyphs-x.c (x_unmap_subwindow): return focus to enclosing frame
+       when widget gets unmapped.
+
+       * event-Xt.c (emacs_Xt_handle_widget_losing_focus): new
+       function. Make sure widgets losing focus don't just drop it.
+       (handle_focus_event_1): record the widget with focus.
+
+2000-12-31  Andy Piper  <andy@xemacs.org>
+
+       * window.c (allocate_window): use
+       make_image_instance_cache_hash_table.
+       (make_dummy_parent): ditto.
+       (Fset_window_configuration): ditto.
+
+       * glyphs.h (INSTANTIATOR_TYPE): new macro.  declare new functions.
+
+       * glyphs.c (process_image_string_instantiator): use
+       INSTANTIATOR_TYPE.
+       (get_image_instantiator_governing_domain): ditto.
+       (normalize_image_instantiator): ditto.
+       (instantiate_image_instantiator): ditto.
+       (make_image_instance_1): ditto.
+       (image_instantiate): ditto. Key on glyph *and* instantiator type.
+       (instantiator_eq_equal): new function for use with instance hash
+       tables.
+       (instantiator_eq_hash): ditto.
+       (make_image_instance_cache_hash_table): create a suitable hash
+       table for storing image instances.
+
+       * elhash.h (hash_table_weakness): new internal weakness type
+       HASH_TABLE_KEY_CAR_VALUE_WEAK.
+       declare new functions.
+
+       * elhash.c (finish_marking_weak_hash_tables): introduce yet
+       another weakness type for glyphs.
+       (make_standard_lisp_hash_table): new function split out from
+       make_general_lisp_hash_table.
+       (make_lisp_hash_table): call make_standard_lisp_hash_table.
+       (hash_table_instantiate): ditto.
+       (Fmake_hash_table): ditto.
+
 2000-12-31  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.39 is released.
index 6cb81ee..38b7755 100644 (file)
@@ -490,17 +490,17 @@ disksave_object_finalization_1 (void)
    about expressions in src/.gdbinit.  See src/.gdbinit or src/.dbxrc
    to see how this is used.  */
 
-EMACS_UINT dbg_valmask = ((1UL << VALBITS) - 1) << GCBITS;
-EMACS_UINT dbg_typemask = (1UL << GCTYPEBITS) - 1;
+const EMACS_UINT dbg_valmask = ((1UL << VALBITS) - 1) << GCBITS;
+const EMACS_UINT dbg_typemask = (1UL << GCTYPEBITS) - 1;
 
 #ifdef USE_UNION_TYPE
-unsigned char dbg_USE_UNION_TYPE = 1;
+const unsigned char dbg_USE_UNION_TYPE = 1;
 #else
-unsigned char dbg_USE_UNION_TYPE = 0;
+const unsigned char dbg_USE_UNION_TYPE = 0;
 #endif
 
-unsigned char dbg_valbits = VALBITS;
-unsigned char dbg_gctypebits = GCTYPEBITS;
+const unsigned char dbg_valbits = VALBITS;
+const unsigned char dbg_gctypebits = GCTYPEBITS;
 
 /* Macros turned into functions for ease of debugging.
    Debuggers don't know about macros! */
@@ -4065,8 +4065,6 @@ init_alloc_once_early (void)
   staticidx = 0;
 }
 
-int pure_bytes_used = 0;
-
 void
 reinit_alloc (void)
 {
@@ -4118,10 +4116,6 @@ prevent garbage collection during a part of the program.
 See also `consing-since-gc'.
 */ );
 
-  DEFVAR_INT ("pure-bytes-used", &pure_bytes_used /*
-Number of bytes of sharable Lisp data allocated so far.
-*/ );
-
 #ifdef DEBUG_XEMACS
   DEFVAR_INT ("debug-allocation", &debug_allocation /*
 If non-zero, print out information to stderr about all objects allocated.
index 2fb2c04..058fdd4 100644 (file)
@@ -434,36 +434,54 @@ compute_hash_table_derived_values (Lisp_Hash_Table *ht)
 }
 
 Lisp_Object
-make_general_lisp_hash_table (enum hash_table_test test,
-                             size_t size,
-                             double rehash_size,
-                             double rehash_threshold,
-                             enum hash_table_weakness weakness)
+make_standard_lisp_hash_table (enum hash_table_test test,
+                              size_t size,
+                              double rehash_size,
+                              double rehash_threshold,
+                              enum hash_table_weakness weakness)
 {
-  Lisp_Object hash_table;
-  Lisp_Hash_Table *ht = alloc_lcrecord_type (Lisp_Hash_Table, &lrecord_hash_table);
+  hash_table_hash_function_t hash_function =  0;
+  hash_table_test_function_t test_function = 0;
 
   switch (test)
     {
     case HASH_TABLE_EQ:
-      ht->test_function = 0;
-      ht->hash_function = 0;
+      test_function = 0;
+      hash_function = 0;
       break;
 
     case HASH_TABLE_EQL:
-      ht->test_function = lisp_object_eql_equal;
-      ht->hash_function = lisp_object_eql_hash;
+      test_function = lisp_object_eql_equal;
+      hash_function = lisp_object_eql_hash;
       break;
 
     case HASH_TABLE_EQUAL:
-      ht->test_function = lisp_object_equal_equal;
-      ht->hash_function = lisp_object_equal_hash;
+      test_function = lisp_object_equal_equal;
+      hash_function = lisp_object_equal_hash;
       break;
 
     default:
       abort ();
     }
 
+  return make_general_lisp_hash_table (hash_function, test_function,
+                                      size, rehash_size, rehash_threshold,
+                                      weakness);
+}
+
+Lisp_Object
+make_general_lisp_hash_table (hash_table_hash_function_t hash_function,
+                             hash_table_test_function_t test_function,
+                             size_t size,
+                             double rehash_size,
+                             double rehash_threshold,
+                             enum hash_table_weakness weakness)
+{
+  Lisp_Object hash_table;
+  Lisp_Hash_Table *ht = alloc_lcrecord_type (Lisp_Hash_Table, &lrecord_hash_table);
+
+  ht->test_function = test_function;
+  ht->hash_function = hash_function;
   ht->weakness = weakness;
 
   ht->rehash_size =
@@ -505,7 +523,7 @@ make_lisp_hash_table (size_t size,
                      enum hash_table_weakness weakness,
                      enum hash_table_test test)
 {
-  return make_general_lisp_hash_table (test, size, -1.0, -1.0, weakness);
+  return make_standard_lisp_hash_table (test, size, -1.0, -1.0, weakness);
 }
 
 /* Pretty reading of hash tables.
@@ -722,7 +740,7 @@ hash_table_instantiate (Lisp_Object plist)
     }
 
   /* Create the hash table.  */
-  hash_table = make_general_lisp_hash_table
+  hash_table = make_standard_lisp_hash_table
     (decode_hash_table_test (test),
      decode_hash_table_size (size),
      decode_hash_table_rehash_size (rehash_size),
@@ -872,7 +890,7 @@ if (!NILP (var)) hash_table_##var##_validate (Q##var, var, ERROR_ME);
   VALIDATE_VAR (rehash_threshold);
   VALIDATE_VAR (weakness);
 
-  return make_general_lisp_hash_table
+  return make_standard_lisp_hash_table
     (decode_hash_table_test (test),
      decode_hash_table_size (size),
      decode_hash_table_rehash_size (rehash_size),
@@ -1305,6 +1323,24 @@ finish_marking_weak_hash_tables (void)
                }
          break;
 
+         /* We seem to be sprouting new weakness types at an alarming
+            rate. At least this is not externally visible - and in
+            fact all of these KEY_CAR_* types are only used by the
+            glyph code. */
+       case HASH_TABLE_KEY_CAR_VALUE_WEAK:
+         for (; e < sentinel; e++)
+           if (!HENTRY_CLEAR_P (e))
+             {
+               if (!CONSP (e->key) || marked_p (XCAR (e->key)))
+                 {
+                   MARK_OBJ (e->key);
+                   MARK_OBJ (e->value);
+                 }
+               else if (marked_p (e->value))
+                 MARK_OBJ (e->key);
+             }
+         break;
+
        case HASH_TABLE_VALUE_CAR_WEAK:
          for (; e < sentinel; e++)
            if (!HENTRY_CLEAR_P (e))
index 04c1d03..7c4fe9c 100644 (file)
@@ -41,6 +41,7 @@ enum hash_table_weakness
   HASH_TABLE_KEY_VALUE_WEAK,
   HASH_TABLE_KEY_CAR_WEAK,
   HASH_TABLE_VALUE_CAR_WEAK,
+  HASH_TABLE_KEY_CAR_VALUE_WEAK,
   HASH_TABLE_WEAK
 };
 
@@ -66,7 +67,14 @@ typedef unsigned long (*hash_table_hash_function_t) (Lisp_Object obj);
 typedef int (*maphash_function_t) (Lisp_Object key, Lisp_Object value,
                                   void* extra_arg);
 
-Lisp_Object make_general_lisp_hash_table (enum hash_table_test test,
+Lisp_Object make_standard_lisp_hash_table (enum hash_table_test test,
+                                          size_t size,
+                                          double rehash_size,
+                                          double rehash_threshold,
+                                          enum hash_table_weakness weakness);
+
+Lisp_Object make_general_lisp_hash_table (hash_table_hash_function_t hash_function,
+                                         hash_table_test_function_t test_function,
                                          size_t size,
                                          double rehash_size,
                                          double rehash_threshold,
index b9ef392..ae62194 100644 (file)
@@ -92,6 +92,7 @@ int debug_x_events;
 
 static int process_events_occurred;
 static int tty_events_occurred;
+static Widget widget_with_focus;
 
 /* Mask of bits indicating the descriptors that we wait for input on */
 extern SELECT_TYPE input_wait_mask, process_only_mask, tty_only_mask;
@@ -1536,11 +1537,12 @@ static void
 handle_focus_event_1 (struct frame *f, int in_p)
 {
 #if XtSpecificationRelease > 5
-  Widget focus_widget = XtGetKeyboardFocusWidget (FRAME_X_TEXT_WIDGET (f));
+  widget_with_focus = XtGetKeyboardFocusWidget (FRAME_X_TEXT_WIDGET (f));
 #endif
 #ifdef HAVE_XIM
   XIM_focus_event (f, in_p);
 #endif /* HAVE_XIM */
+
   /* On focus change, clear all memory of sticky modifiers
      to avoid non-intuitive behavior. */
   clear_sticky_modifiers (XDEVICE (FRAME_DEVICE (f)));
@@ -1564,13 +1566,19 @@ handle_focus_event_1 (struct frame *f, int in_p)
      click in the frame. Why is this?  */
   if (in_p
 #if XtSpecificationRelease > 5
-      && FRAME_X_TEXT_WIDGET (f) != focus_widget
+      && FRAME_X_TEXT_WIDGET (f) != widget_with_focus
 #endif
       )
     {
       lw_set_keyboard_focus (FRAME_X_SHELL_WIDGET (f),
                             FRAME_X_TEXT_WIDGET (f));
     }
+
+  /* We have the focus now. See comment in
+     emacs_Xt_handle_widget_losing_focus (). */
+  if (in_p)
+    widget_with_focus = NULL;
+
   /* do the generic event-stream stuff. */
   {
     Lisp_Object frm;
@@ -1587,6 +1595,23 @@ handle_focus_event_1 (struct frame *f, int in_p)
   }
 }
 
+/* The idea here is that when a widget glyph gets unmapped we don't
+   want the focus to stay with it if it has focus - because it may
+   well just get deleted next andthen we have lost the focus until the
+   user does something. So handle_focus_event_1 records the widget
+   with keyboard focus when FocusOut is processed, and then, when a
+   widget gets unmapped, it calls this function to restore focus if
+   appropriate. */
+void emacs_Xt_handle_widget_losing_focus (struct frame* f, Widget losing_widget);
+void
+emacs_Xt_handle_widget_losing_focus (struct frame* f, Widget losing_widget)
+{
+  if (losing_widget == widget_with_focus)
+    {
+      handle_focus_event_1 (f, 1);
+    }
+}
+
 /* This is called from the external-widget code */
 
 void emacs_Xt_handle_focus_event (XEvent *event);
index dbd70cb..23ef070 100644 (file)
@@ -2654,7 +2654,7 @@ x_focus_on_frame (struct frame *f)
   XFlush (XtDisplay (shell_widget)); /* hey, I'd like to DEBUG this... */
 }
 
-/* Destroy the X window of frame S.  */
+/* Destroy the X window of frame F.  */
 static void
 x_delete_frame (struct frame *f)
 {
index 422566b..1f1bc83 100644 (file)
@@ -3007,9 +3007,15 @@ change_frame_size (struct frame *f, int newheight, int newwidth, int delay)
      So deal. */
   check_frame_size (f, &newheight, &newwidth);
 
+  /* Unconditionally mark that the frame has changed size. This is
+     because many things need to know after the
+     fact. f->size_change_pending will get reset below. The most that
+     can happen is that we will cycle through redisplay once more
+     --andy. */
+  MARK_FRAME_SIZE_CHANGED (f);
+
   if (delay || in_display || gc_in_progress)
     {
-      MARK_FRAME_SIZE_CHANGED (f);
       f->new_width = newwidth;
       f->new_height = newheight;
       return;
index e0fa2d2..0451996 100644 (file)
@@ -156,6 +156,8 @@ static void
 update_tab_widget_face (widget_value* wv,
                        Lisp_Image_Instance* ii, Lisp_Object domain);
 #endif
+void
+emacs_Xt_handle_widget_losing_focus (struct frame* f, Widget losing_widget);
 
 #include "bitmaps.h"
 
@@ -2130,6 +2132,12 @@ x_unmap_subwindow (Lisp_Image_Instance *p)
     }
   else                         /* must be a widget */
     {
+      /* Since we are being unmapped we want the enclosing frame to
+        get focus. The losing with simple scrolling but is the safest
+        thing to do. */
+      emacs_Xt_handle_widget_losing_focus 
+       ( XFRAME (IMAGE_INSTANCE_FRAME (p)),
+         IMAGE_INSTANCE_X_WIDGET_ID (p));
       XtUnmapWidget (IMAGE_INSTANCE_X_CLIPWIDGET (p));
     }
 }
@@ -2261,7 +2269,7 @@ x_redisplay_widget (Lisp_Image_Instance *p)
     }
 
   /* Adjust offsets within the frame. */
-  if (XFRAME (IMAGE_INSTANCE_FRAME (p))->frame_changed)
+  if (XFRAME (IMAGE_INSTANCE_FRAME (p))->size_changed)
     {
       Arg al[2];
       XtSetArg (al [0], XtNx, &IMAGE_INSTANCE_X_WIDGET_XOFFSET (p));
index f831733..fd9c733 100644 (file)
@@ -382,7 +382,7 @@ process_image_string_instantiator (Lisp_Object data,
         skip it. */
       if (!(dest_mask &
            IIFORMAT_METH (decode_image_instantiator_format
-                          (XVECTOR_DATA (typevec)[0], ERROR_ME),
+                          (INSTANTIATOR_TYPE (typevec), ERROR_ME),
                           possible_dest_types, ())))
        continue;
       if (fast_string_match (exp, 0, data, 0, -1, 0, ERROR_ME, 0) >= 0)
@@ -689,7 +689,7 @@ get_image_instantiator_governing_domain (Lisp_Object instantiator,
   int governing_domain;
 
   struct image_instantiator_methods *meths =
-    decode_image_instantiator_format (XVECTOR_DATA (instantiator)[0],
+    decode_image_instantiator_format (INSTANTIATOR_TYPE (instantiator),
                                      ERROR_ME);
   governing_domain = IIFORMAT_METH_OR_GIVEN (meths, governing_domain, (),
                                             GOVERNING_DOMAIN_DEVICE);
@@ -742,7 +742,7 @@ normalize_image_instantiator (Lisp_Object instantiator,
 
     GCPRO1 (instantiator);
 
-    meths = decode_image_instantiator_format (XVECTOR_DATA (instantiator)[0],
+    meths = decode_image_instantiator_format (INSTANTIATOR_TYPE (instantiator),
                                              ERROR_ME);
     RETURN_UNGCPRO (IIFORMAT_METH_OR_GIVEN (meths, normalize,
                                            (instantiator, contype, dest_mask),
@@ -765,20 +765,20 @@ instantiate_image_instantiator (Lisp_Object governing_domain,
   struct gcpro gcpro1;
 
   GCPRO1 (ii);
-  if (!valid_image_instantiator_format_p (XVECTOR_DATA (instantiator)[0],
+  if (!valid_image_instantiator_format_p (INSTANTIATOR_TYPE (instantiator),
                                          DOMAIN_DEVICE (governing_domain)))
     signal_simple_error
       ("Image instantiator format is invalid in this locale.",
        instantiator);
 
-  meths = decode_image_instantiator_format (XVECTOR_DATA (instantiator)[0],
+  meths = decode_image_instantiator_format (INSTANTIATOR_TYPE (instantiator),
                                            ERROR_ME);
   MAYBE_IIFORMAT_METH (meths, instantiate, (ii, instantiator, pointer_fg,
                                            pointer_bg, dest_mask, domain));
 
   /* Now do device specific instantiation. */
   device_meths = decode_device_ii_format (DOMAIN_DEVICE (governing_domain),
-                                         XVECTOR_DATA (instantiator)[0],
+                                         INSTANTIATOR_TYPE (instantiator),
                                          ERROR_ME_NOT);
 
   if (!HAS_IIFORMAT_METH_P (meths, instantiate)
@@ -1469,7 +1469,7 @@ make_image_instance_1 (Lisp_Object data, Lisp_Object domain,
   GCPRO1 (data);
   /* After normalizing the data, it's always either an image instance (which
      we filtered out above) or a vector. */
-  if (EQ (XVECTOR_DATA (data)[0], Qinherit))
+  if (EQ (INSTANTIATOR_TYPE (data), Qinherit))
     signal_simple_error ("Inheritance not allowed here", data);
   governing_domain =
     get_image_instantiator_governing_domain (data, domain);
@@ -1992,9 +1992,6 @@ image_instance_layout (Lisp_Object image_instance,
   assert (XIMAGE_INSTANCE_YOFFSET (image_instance) >= 0
          && XIMAGE_INSTANCE_XOFFSET (image_instance) >= 0);
 
-  type = encode_image_instance_type (IMAGE_INSTANCE_TYPE (ii));
-  meths = decode_device_ii_format (Qnil, type, ERROR_ME_NOT);
-
   /* If geometry is unspecified then get some reasonable values for it. */
   if (width == IMAGE_UNSPECIFIED_GEOMETRY
       ||
@@ -2002,20 +1999,11 @@ image_instance_layout (Lisp_Object image_instance,
     {
       int dwidth = IMAGE_UNSPECIFIED_GEOMETRY;
       int dheight = IMAGE_UNSPECIFIED_GEOMETRY;
-
       /* Get the desired geometry. */
-      if (meths && HAS_IIFORMAT_METH_P (meths, query_geometry))
-       {
-         IIFORMAT_METH (meths, query_geometry, (image_instance, &dwidth, &dheight,
-                                                IMAGE_DESIRED_GEOMETRY,
-                                                domain));
-       }
-      else
-       {
-         dwidth = IMAGE_INSTANCE_WIDTH (ii);
-         dheight = IMAGE_INSTANCE_HEIGHT (ii);
-       }
-
+      image_instance_query_geometry (image_instance,
+                                    &dwidth, &dheight,
+                                    IMAGE_DESIRED_GEOMETRY,
+                                    domain);
       /* Compare with allowed geometry. */
       if (width == IMAGE_UNSPECIFIED_GEOMETRY)
        width = dwidth;
@@ -2042,12 +2030,15 @@ image_instance_layout (Lisp_Object image_instance,
   IMAGE_INSTANCE_WIDTH (ii) = width;
   IMAGE_INSTANCE_HEIGHT (ii) = height;
 
-  if (IIFORMAT_METH_OR_GIVEN (meths, layout,
-                             (image_instance, width, height, xoffset, yoffset,
-                              domain), 1))
-    /* Do not clear the dirty flag here - redisplay will do this for
-       us at the end. */
-    IMAGE_INSTANCE_LAYOUT_CHANGED (ii) = 0;
+  type = encode_image_instance_type (IMAGE_INSTANCE_TYPE (ii));
+  meths = decode_device_ii_format (Qnil, type, ERROR_ME_NOT);
+
+  MAYBE_IIFORMAT_METH (meths, layout,
+                      (image_instance, width, height, xoffset, yoffset,
+                       domain));
+  /* Do not clear the dirty flag here - redisplay will do this for
+     us at the end. */
+  IMAGE_INSTANCE_LAYOUT_CHANGED (ii) = 0;
 }
 
 /* Update an image instance from its changed instantiator. */
@@ -3054,6 +3045,44 @@ image_mark (Lisp_Object obj)
   mark_object (IMAGE_SPECIFIER_ATTACHEE_PROPERTY (image));
 }
 
+static int
+instantiator_eq_equal (Lisp_Object obj1, Lisp_Object obj2)
+{
+  if (EQ (obj1, obj2))
+    return 1;
+
+  else if (CONSP (obj1) && CONSP (obj2))
+    {
+      return instantiator_eq_equal (XCAR (obj1), XCAR (obj2))
+       &&
+       instantiator_eq_equal (XCDR (obj1), XCDR (obj2));
+    }
+  return 0;
+}
+
+static hashcode_t
+instantiator_eq_hash (Lisp_Object obj)
+{
+  if (CONSP (obj))
+    {
+      /* no point in worrying about tail recursion, since we're not
+        going very deep */
+      return HASH2 (instantiator_eq_hash (XCAR (obj)),
+                   instantiator_eq_hash (XCDR (obj)));
+    }
+  return LISP_HASH (obj);
+}
+
+/* We need a special hash table for storing image instances. */
+Lisp_Object
+make_image_instance_cache_hash_table (void)
+{
+  return make_general_lisp_hash_table
+    (instantiator_eq_hash, instantiator_eq_equal,
+     30, -1.0, -1.0,
+     HASH_TABLE_KEY_CAR_VALUE_WEAK);
+}
+
 static Lisp_Object
 image_instantiate_cache_result (Lisp_Object locative)
 {
@@ -3110,7 +3139,7 @@ image_instantiate (Lisp_Object specifier, Lisp_Object matchspec,
                               instantiator, domain);
     }
   else if (VECTORP (instantiator)
-          && EQ (XVECTOR_DATA (instantiator)[0], Qinherit))
+          && EQ (INSTANTIATOR_TYPE (instantiator), Qinherit))
     {
       assert (XVECTOR_LENGTH (instantiator) == 3);
       return (FACE_PROPERTY_INSTANCE
@@ -3121,7 +3150,8 @@ image_instantiate (Lisp_Object specifier, Lisp_Object matchspec,
     {
       Lisp_Object instance = Qnil;
       Lisp_Object subtable = Qnil;
-      Lisp_Object ls3 = Qnil;
+      /* #### Should this be GCPRO'd? */
+      Lisp_Object hash_key = Qnil;
       Lisp_Object pointer_fg = Qnil;
       Lisp_Object pointer_bg = Qnil;
       Lisp_Object governing_domain =
@@ -3139,8 +3169,15 @@ image_instantiate (Lisp_Object specifier, Lisp_Object matchspec,
        {
          pointer_fg = FACE_FOREGROUND (Vpointer_face, domain);
          pointer_bg = FACE_BACKGROUND (Vpointer_face, domain);
-         ls3 = list3 (glyph, pointer_fg, pointer_bg);
+         hash_key = list4 (glyph, INSTANTIATOR_TYPE (instantiator), 
+                           pointer_fg, pointer_bg);
        }
+      else
+       /* We cannot simply key on the glyph since fallbacks could use
+          the same glyph but have a totally different instantiator
+          type. Thus we key on the glyph and the type (but not any
+          other parts of the instantiator. */
+       hash_key = list2 (glyph, INSTANTIATOR_TYPE (instantiator));
 
       /* First look in the device cache. */
       if (DEVICEP (governing_domain))
@@ -3167,20 +3204,15 @@ image_instantiate (Lisp_Object specifier, Lisp_Object matchspec,
                 have to use EQUAL because we massaged the
                 instantiator into a cons3 also containing the
                 foreground and background of the pointer face.  */
+             subtable = make_image_instance_cache_hash_table ();
 
-             subtable = make_lisp_hash_table
-               (20, pointerp ? HASH_TABLE_KEY_CAR_WEAK
-                : HASH_TABLE_KEY_WEAK,
-                pointerp ? HASH_TABLE_EQUAL
-                : HASH_TABLE_EQ);
              Fputhash (make_int (dest_mask), subtable,
                        XDEVICE (governing_domain)->image_instance_cache);
              instance = Qunbound;
            }
          else
            {
-             instance = Fgethash (pointerp ? ls3 : glyph,
-                                  subtable, Qunbound);
+             instance = Fgethash (hash_key, subtable, Qunbound);
            }
        }
       else if (WINDOWP (governing_domain))
@@ -3188,7 +3220,7 @@ image_instantiate (Lisp_Object specifier, Lisp_Object matchspec,
          /* Subwindows have a per-window cache and have to be treated
             differently. */
          instance =
-           Fgethash (pointerp ? ls3 : glyph,
+           Fgethash (hash_key,
                      XWINDOW (governing_domain)->subwindow_instance_cache,
                      Qunbound);
        }
@@ -3201,7 +3233,7 @@ image_instantiate (Lisp_Object specifier, Lisp_Object matchspec,
        {
          Lisp_Object locative =
            noseeum_cons (Qnil,
-                         noseeum_cons (pointerp ? ls3 : glyph,
+                         noseeum_cons (hash_key,
                                        DEVICEP (governing_domain) ? subtable
                                        : XWINDOW (governing_domain)
                                        ->subwindow_instance_cache));
@@ -3234,7 +3266,7 @@ image_instantiate (Lisp_Object specifier, Lisp_Object matchspec,
 #ifdef ERROR_CHECK_GLYPHS
          if (image_instance_type_to_mask (XIMAGE_INSTANCE_TYPE (instance))
              & (IMAGE_SUBWINDOW_MASK | IMAGE_WIDGET_MASK))
-           assert (EQ (Fgethash ((pointerp ? ls3 : glyph),
+           assert (EQ (Fgethash (hash_key,
                                  XWINDOW (governing_domain)
                                  ->subwindow_instance_cache,
                                  Qunbound), instance));
@@ -3258,7 +3290,7 @@ image_instantiate (Lisp_Object specifier, Lisp_Object matchspec,
             possible to make changes that don't get reflected in the
             display. */
          update_image_instance (instance, instantiator);
-         free_list (ls3);
+         free_list (hash_key);
        }
 
 #ifdef ERROR_CHECK_GLYPHS
index 056cc23..c279f54 100644 (file)
@@ -327,6 +327,8 @@ do {                                                                        \
 #define IIFORMAT_INHERITS_SHARED_DEVMETHOD(type, from, format, m, fromformat) \
   (type##_##format##_image_instantiator_methods->m##_method = from##_##fromformat##_##m)
 
+#define INSTANTIATOR_TYPE(inst) (XVECTOR_DATA ((inst))[0])
+
 struct image_instantiator_methods *
 decode_device_ii_format (Lisp_Object device, Lisp_Object format,
                         Error_behavior errb);
@@ -374,6 +376,7 @@ int layout_layout (Lisp_Object image_instance,
                   int width, int height, int xoffset, int yoffset,
                   Lisp_Object domain);
 int invalidate_glyph_geometry_maybe (Lisp_Object glyph_or_ii, struct window* w);
+Lisp_Object make_image_instance_cache_hash_table (void);
 
 DECLARE_DOESNT_RETURN (incompatible_image_types (Lisp_Object instantiator,
                                                  int given_dest_mask,
index 7332455..d0d60d7 100644 (file)
@@ -115,9 +115,6 @@ menubar_visible_p_changed (Lisp_Object specifier, struct window *w,
                           Lisp_Object oldval)
 {
   MARK_MENUBAR_CHANGED;
-  /* This is to force subwindow offsets to be recalculated - see
-     x_redisplay_widget (). */
-  MARK_FRAME_CHANGED (WINDOW_XFRAME (w));
 }
 
 static void
index 4a61e89..a6576e7 100644 (file)
@@ -600,7 +600,7 @@ static tr_stack *mapping_stack_pointer;
 
 /* If this variable is non-zero, it indicates the stack_idx
    of immediately called by CCL_MapMultiple. */
-static int stack_idx_of_map_multiple = 0;
+static int stack_idx_of_map_multiple;
 
 #define PUSH_MAPPING_STACK(restlen, orig)              \
   do {                                                 \
index ec86469..fcbd5e9 100644 (file)
@@ -524,7 +524,7 @@ x_output_display_block (struct window *w, struct display_line *dl, int block,
 /*****************************************************************************
  x_bevel_area
 
- Draw a shadows for the given area in the given face.
+ Draw shadows for the given area in the given face.
  ****************************************************************************/
 static void
 x_bevel_area (struct window *w, face_index findex,
index fdadb45..1e441ae 100644 (file)
@@ -139,7 +139,7 @@ struct rune
 
   union                                /* Information specific to the type of rune */
   {
-    /* #### GLyphs are rare. Is it really necessary to waste 8 bytes on every
+    /* #### Glyphs are rare. Is it really necessary to waste 8 bytes on every
        rune for that?! */
     /* DGLYPH */
     struct
index 1fa8680..677db05 100644 (file)
@@ -4169,7 +4169,7 @@ re_search_2 (struct re_pattern_buffer *bufp, const char *str1,
 
 /* Call before fetching a character with *d.  This switches over to
    string2 if necessary.  */
-#define PREFETCH()                                                     \
+#define REGEX_PREFETCH()                                                       \
   while (d == dend)                                                    \
     {                                                                  \
       /* End of string2 => fail.  */                                   \
@@ -4711,7 +4711,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, re_char *string1,
                  Emchar pat_ch, buf_ch;
                  Bytecount pat_len;
 
-                 PREFETCH ();
+                 REGEX_PREFETCH ();
                  pat_ch = charptr_emchar (p);
                  buf_ch = charptr_emchar (d);
                  if (RE_TRANSLATE (buf_ch) != pat_ch)
@@ -4723,7 +4723,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, re_char *string1,
                  
                  mcnt -= pat_len;
 #else /* not MULE */
-                 PREFETCH ();
+                 REGEX_PREFETCH ();
                  if ((unsigned char) RE_TRANSLATE (*d++) != *p++)
                     goto fail;
                  mcnt--;
@@ -4735,7 +4735,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, re_char *string1,
            {
              do
                {
-                 PREFETCH ();
+                 REGEX_PREFETCH ();
                  if (*d++ != *p++) goto fail;
                }
              while (--mcnt);
@@ -4748,7 +4748,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, re_char *string1,
        case anychar:
           DEBUG_PRINT1 ("EXECUTING anychar.\n");
 
-          PREFETCH ();
+          REGEX_PREFETCH ();
 
           if ((!(bufp->syntax & RE_DOT_NEWLINE) && TRANSLATE (*d) == '\n')
               || (bufp->syntax & RE_DOT_NOT_NULL && TRANSLATE (*d) == '\000'))
@@ -4768,7 +4768,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, re_char *string1,
 
             DEBUG_PRINT2 ("EXECUTING charset%s.\n", not ? "_not" : "");
 
-           PREFETCH ();
+           REGEX_PREFETCH ();
            c = TRANSLATE (*d); /* The character to match.  */
 
             /* Cast to `unsigned' instead of `unsigned char' in case the
@@ -4795,7 +4795,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, re_char *string1,
 
             DEBUG_PRINT2 ("EXECUTING charset_mule%s.\n", not ? "_not" : "");
 
-           PREFETCH ();
+           REGEX_PREFETCH ();
            c = charptr_emchar ((const Bufbyte *) d);
            c = TRANSLATE_EXTENDED_UNSAFE (c); /* The character to match.  */
 
@@ -5047,7 +5047,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, re_char *string1,
                if (d2 == dend2) break;
 
                /* If necessary, advance to next segment in data.  */
-               PREFETCH ();
+               REGEX_PREFETCH ();
 
                /* How many characters left in this segment to match.  */
                mcnt = dend - d;
@@ -5606,7 +5606,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, re_char *string1,
            int matches;
            Emchar emch;
 
-           PREFETCH ();
+           REGEX_PREFETCH ();
            emch = charptr_emchar ((const Bufbyte *) d);
            matches = (SYNTAX_UNSAFE
                       (XCHAR_TABLE (regex_emacs_buffer->mirror_syntax_table),
@@ -5639,7 +5639,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, re_char *string1,
            Emchar emch;
 
            mcnt = *p++;
-           PREFETCH ();
+           REGEX_PREFETCH ();
            emch = charptr_emchar ((const Bufbyte *) d);
            INC_CHARPTR (d);
            if (check_category_char(emch, regex_emacs_buffer->category_table,
@@ -5657,7 +5657,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, re_char *string1,
 #else /* not emacs */
        case wordchar:
           DEBUG_PRINT1 ("EXECUTING non-Emacs wordchar.\n");
-         PREFETCH ();
+         REGEX_PREFETCH ();
           if (!WORDCHAR_P_UNSAFE ((int) (*d)))
             goto fail;
          SET_REGS_MATCHED ();
@@ -5666,7 +5666,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, re_char *string1,
 
        case notwordchar:
           DEBUG_PRINT1 ("EXECUTING non-Emacs notwordchar.\n");
-         PREFETCH ();
+         REGEX_PREFETCH ();
           if (!WORDCHAR_P_UNSAFE ((int) (*d)))
             goto fail;
           SET_REGS_MATCHED ();
index ef0cf7f..7790ce7 100644 (file)
@@ -281,9 +281,8 @@ allocate_window (void)
   p->face_cachels     = Dynarr_new (face_cachel);
   p->glyph_cachels    = Dynarr_new (glyph_cachel);
   p->line_start_cache = Dynarr_new (line_start_cache);
-  p->subwindow_instance_cache = make_lisp_hash_table (30,
-                                                     HASH_TABLE_KEY_VALUE_WEAK,
-                                                     HASH_TABLE_EQ);
+  p->subwindow_instance_cache = make_image_instance_cache_hash_table ();
+
   p->line_cache_last_updated = Qzero;
   INIT_DISP_VARIABLE (last_point_x, 0);
   INIT_DISP_VARIABLE (last_point_y, 0);
@@ -3604,9 +3603,7 @@ make_dummy_parent (Lisp_Object window)
   p->face_cachels     = Dynarr_new (face_cachel);
   p->glyph_cachels    = Dynarr_new (glyph_cachel);
   p->subwindow_instance_cache =
-    make_lisp_hash_table (30,
-                         HASH_TABLE_KEY_VALUE_WEAK,
-                         HASH_TABLE_EQ);
+    make_image_instance_cache_hash_table ();
 
   /* Put new into window structure in place of window */
   replace_window (window, new);
@@ -5478,9 +5475,8 @@ by `current-window-configuration' (which see).
             set. */
          if (NILP (w->subwindow_instance_cache))
            w->subwindow_instance_cache =
-             make_lisp_hash_table (30,
-                                   HASH_TABLE_KEY_VALUE_WEAK,
-                                   HASH_TABLE_EQ);
+             make_image_instance_cache_hash_table ();
+
          SET_LAST_MODIFIED (w, 1);
          SET_LAST_FACECHANGE (w);
          w->config_mark = 0;
@@ -5861,14 +5857,20 @@ its value is -not- saved.
   /*
   config->frame_width = FRAME_WIDTH (f);
   config->frame_height = FRAME_HEIGHT (f); */
-  /* When using `push-window-configuration', often the minibuffer ends
+  /* #### When using `push-window-configuration', often the minibuffer ends
      up as the selected window because functions run as the result of
      user interaction e.g. hyper-apropos. It seems to me the sensible
-     thing to do is not record the minibuffer here. */
+     thing to do is not record the minibuffer here. 
+
+     #### Unfortunately this is a change to previous behaviour, however logical
+     it may be, so revert for the moment. */
+#if 0
   if (FRAME_MINIBUF_ONLY_P (f) || minibuf_level)
     config->current_window = FRAME_SELECTED_WINDOW (f);
   else
     config->current_window = FRAME_LAST_NONMINIBUF_WINDOW (f);
+#endif
+  config->current_window = FRAME_SELECTED_WINDOW (f);
   XSETBUFFER (config->current_buffer, current_buffer);
   config->minibuffer_scroll_window = Vminibuffer_scroll_window;
   config->root_window = FRAME_ROOT_WINDOW (f);
index 863abf1..74bfcd5 100644 (file)
@@ -1,3 +1,7 @@
+2001-01-08  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.40 is released.
+
 2000-12-31  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.39 is released.