-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.
`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
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
\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
-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
\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
-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
-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
-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
-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
-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
-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
-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
produces
- For more information, see *Note Hurricanes.
+ For more information, see *Note Hurricanes::.
and
-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
-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
-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
-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
-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
-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>
* 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.
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.
;; 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")
;;; 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
(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
(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"))
;; (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
;;; 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.")
-;;; 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.
(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
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)
+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.
#endif /* LWLIB_WIDGETS_ATHENA */
-widget_creation_entry
+const widget_creation_entry
xaw_creation_table [] =
{
#ifdef LWLIB_SCROLLBARS_ATHENA
#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);
}
#endif
-widget_creation_entry
+const widget_creation_entry
xlw_creation_table [] =
{
#ifdef LWLIB_MENUBARS_LUCID
#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
\f
/* Table of functions to create widgets */
-widget_creation_entry
+const widget_creation_entry
xm_creation_table [] =
{
#ifdef LWLIB_MENUBARS_MOTIF
#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);
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;
}
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
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,
}
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;
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++)
{
/* 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
+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.
@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
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
\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.
produces
@example
-For more information, see *Note Hurricanes.
+For more information, see *Note Hurricanes::.
@end example
@noindent
+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.
(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.
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! */
staticidx = 0;
}
-int pure_bytes_used = 0;
-
void
reinit_alloc (void)
{
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.
}
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 =
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.
}
/* 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),
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),
}
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))
HASH_TABLE_KEY_VALUE_WEAK,
HASH_TABLE_KEY_CAR_WEAK,
HASH_TABLE_VALUE_CAR_WEAK,
+ HASH_TABLE_KEY_CAR_VALUE_WEAK,
HASH_TABLE_WEAK
};
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,
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;
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)));
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;
}
}
+/* 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);
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)
{
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;
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"
}
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));
}
}
}
/* 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));
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)
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);
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),
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)
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);
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
||
{
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;
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. */
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)
{
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
{
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 =
{
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))
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))
/* 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);
}
{
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));
#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));
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
#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);
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,
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
/* 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 { \
/*****************************************************************************
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,
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
/* 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. */ \
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)
mcnt -= pat_len;
#else /* not MULE */
- PREFETCH ();
+ REGEX_PREFETCH ();
if ((unsigned char) RE_TRANSLATE (*d++) != *p++)
goto fail;
mcnt--;
{
do
{
- PREFETCH ();
+ REGEX_PREFETCH ();
if (*d++ != *p++) goto fail;
}
while (--mcnt);
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'))
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
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. */
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;
int matches;
Emchar emch;
- PREFETCH ();
+ REGEX_PREFETCH ();
emch = charptr_emchar ((const Bufbyte *) d);
matches = (SYNTAX_UNSAFE
(XCHAR_TABLE (regex_emacs_buffer->mirror_syntax_table),
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,
#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 ();
case notwordchar:
DEBUG_PRINT1 ("EXECUTING non-Emacs notwordchar.\n");
- PREFETCH ();
+ REGEX_PREFETCH ();
if (!WORDCHAR_P_UNSAFE ((int) (*d)))
goto fail;
SET_REGS_MATCHED ();
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);
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);
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;
/*
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);
+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.