X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=doc%2Fhackguide.doc;h=1bafad2ad10bd0d012173f38d81252df61481d66;hp=2324322a4e67a6a539f688dd27c6b13fe2dfecff;hb=02f1dee48fe8af6ce054388fba739aa4f975004e;hpb=ed646e3f683083e787c6ba773364401dc9fa9d40 diff --git a/doc/hackguide.doc b/doc/hackguide.doc index 2324322a..1bafad2a 100644 --- a/doc/hackguide.doc +++ b/doc/hackguide.doc @@ -205,7 +205,7 @@ How to Design Extensions If your bug produces a core-dump, please include a symbolic stack trace generated by gdb(1) or your local equivalent. Tell us about every terminal on which you have reproduced the bug - -- and every terminal on which you cannot. Ideally, sent us + -- and every terminal on which you cannot. Ideally, send us terminfo sources for all of these (yours might differ from ours). Include your ncurses version and your OS/machine type, of course! You can find your ncurses version in the curses.h file. @@ -352,10 +352,10 @@ The Engine Room Here are some more details about mouse event handling: - The lib_mouse()code is logically split into a lower level that accepts - event reports in a device-dependent format and an upper level that - parses mouse gestures and filters events. The mediating data structure - is a circular queue of event structures. + The lib_mouse() code is logically split into a lower level that + accepts event reports in a device-dependent format and an upper level + that parses mouse gestures and filters events. The mediating data + structure is a circular queue of event structures. Functionally, the lower level's job is to pick up primitive events and put them on the circular queue. This can happen in one of two ways: @@ -382,24 +382,23 @@ The Engine Room The brains of this operation are the modules hashmap.c, hardscroll.c and lib_doupdate.c; the latter two use lib_mvcur.c. Essentially, what happens looks like this: - - The hashmap.c module tries to detect vertical motion changes between - the real and virtual screens. This information is represented by the - oldindex members in the newscr structure. These are modified by - vertical-motion and clear operations, and both are re-initialized - after each update. To this change-journalling information, the hashmap - code adds deductions made using a modified Heckel algorithm on hash - values generated from the line contents. - - The hardscroll.c module computes an optimum set of scroll, insertion, - and deletion operations to make the indices match. It calls - _nc_mvcur_scrolln() in lib_mvcur.c to do those motions. - - Then lib_doupdate.c goes to work. Its job is to do line-by-line - transformations of curscr lines to newscr lines. Its main tool is the - routine mvcur() in lib_mvcur.c. This routine does cursor-movement - optimization, attempting to get from given screen location A to given - location B in the fewest output characters possible. + * The hashmap.c module tries to detect vertical motion changes + between the real and virtual screens. This information is + represented by the oldindex members in the newscr structure. These + are modified by vertical-motion and clear operations, and both are + re-initialized after each update. To this change-journalling + information, the hashmap code adds deductions made using a + modified Heckel algorithm on hash values generated from the line + contents. + * The hardscroll.c module computes an optimum set of scroll, + insertion, and deletion operations to make the indices match. It + calls _nc_mvcur_scrolln() in lib_mvcur.c to do those motions. + * Then lib_doupdate.c goes to work. Its job is to do line-by-line + transformations of curscr lines to newscr lines. Its main tool is + the routine mvcur() in lib_mvcur.c. This routine does + cursor-movement optimization, attempting to get from given screen + location A to given location B in the fewest output characters + possible. If you want to work on screen optimizations, you should use the fact that (in the trace-enabled version of the library) enabling the