]> git.donarmstrong.com Git - lib.git/blob - emacs_el/tiny-tools/tiny/tinytag.el
add tiny-tools
[lib.git] / emacs_el / tiny-tools / tiny / tinytag.el
1 ;;; tinytag.el --- Grep tags: show C++/Java/etc. syntax call while coding
2
3 ;; This file is not part of Emacs.
4
5 ;;{{{ Id
6
7 ;; Copyright (C)    1996-2007 Jari Aalto
8 ;; Keywords:        tools
9 ;; Author:          Jari Aalto
10 ;; Maintainer:      Jari Aalto
11 ;;
12 ;; To get information on this program, call M-x tinytag-version.
13 ;; Look at the code with folding.el.
14
15 ;; This program is free software; you can redistribute it and/or modify it
16 ;; under the terms of the GNU General Public License as published by the Free
17 ;; Software Foundation; either version 2 of the License, or (at your option)
18 ;; any later version.
19 ;;
20 ;; This program is distributed in the hope that it will be useful, but
21 ;; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
22 ;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
23 ;; for more details.
24 ;;
25 ;; You should have received a copy of the GNU General Public License
26 ;; along with program; see the file COPYING. If not, write to the
27 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
28 ;; Boston, MA 02110-1301, USA.
29 ;;
30 ;; Visit <http://www.gnu.org/copyleft/gpl.html> for more information
31
32 ;;}}}
33 ;;{{{ Install
34
35 ;; ....................................................... &t-install ...
36 ;;  Put this file on your Emacs-Lisp load path, add following into your
37 ;;  ~/.emacs startup file. Rip code with with tinylib.el/ti::package-rip-magic
38 ;;
39 ;;      (setq tinytag-:database-dir "~/elisp/config")
40 ;;      (require 'tinytag)
41 ;;
42 ;;  You can also use the autoload feature, which speeds up loading
43 ;;  the ~/.emacs
44 ;;
45 ;;      (autoload 'tinytag-install    "tinytag" "" t)
46 ;;      (autoload 'tinytag-main       "tinytag" "" t)
47 ;;      (autoload 'tinytag-main-mouse "tinytag" "" t)
48 ;;
49 ;;  You do not have to install `tinytag-install' function to every known
50 ;;  programming language, because the mode will be global once it
51 ;;  is called. Here, if you program mostly with Java and C,
52 ;;  then either one will activate tinytag for all buffers.
53 ;;
54 ;;      (add-hook 'c++-mode-hook      'tinytag-install)
55 ;;      (add-hook 'c-mode-hook        'tinytag-install)
56 ;;      (add-hook 'java-mode-hook     'tinytag-install)
57 ;;
58 ;;   ********************************************************************
59 ;;
60 ;;          YOU MAY NEED TO CHANGE VARIABLE tinytag-:database-setup-table
61 ;;          BEFORE YOU USE THIS PACKAGE.
62 ;;
63 ;;          It gives the instructions where are the databases located
64 ;;          that offer the code help in echo are. Without that variable
65 ;;          this package does nothing.
66 ;;
67 ;;          Read section "Installing support for your programming languages"
68 ;;
69 ;;   ********************************************************************
70 ;;
71 ;;  When you use this package for the first time, an example C/C++
72 ;;  database is extracted fromt he end of this file. See the attached
73 ;;  perl script if you want to generate the database from your
74 ;;  system's manual pages by hand.
75 ;;
76 ;;      M-x load-library RET tinytag RET
77 ;;      M-x tinytag-install-sample-databases
78 ;;
79 ;;  Keybinding suggestion (HP-UX)
80 ;;
81 ;;      (global-set-key [(alt control mouse-2)] 'tinytag-main-mouse)
82 ;;      (global-set-key "\C-c\C-z" 'tinytag-main)
83 ;;
84 ;;  If you have any questions, use these function
85 ;;
86 ;;      M-x tinytag-submit-bug-report
87 ;;
88 ;;  Pleace, send any other programming language database that you may use,
89 ;;  even an different C prototypes in different platform. Let's share the
90 ;;  information with others!
91 ;;
92 ;;  C/C++ database help
93 ;;
94 ;;     Peter Simons <simons@petium.rhein.de> to get
95 ;;     NetBSD/Linux C database
96 ;;
97 ;;  Java database help
98 ;;
99 ;;     Jari Aalto
100 ;;     SUN Java databases  (1.2.2 - 1.4)
101
102 ;;}}}
103 ;;{{{ Documentation
104
105 ;; ..................................................... &t-commentary ...
106 ;;; Commentary:
107
108 ;;  Preface, overview of features
109 ;;
110 ;;      o   Simple database searching, some analogue to emacs TAGS package.
111 ;;          Databaseses are simple text files that are searched for matches.
112 ;;      o   Flips databases easily to show the right data.
113 ;;      o   The Language's function call syntax is shown in the echo area
114 ;;          when cursor is over an identifiable item.
115 ;;      o   Limitations: The function help info can only be 80 characters
116 ;;          or as long as your minibuffer is wide. But you can keep the
117 ;;          *tinytag-output* buffer visible in another buffer to show all
118 ;;          the information.
119 ;;      o   Unlimited extendability to any programming or other "lookup"
120 ;;          languages.
121 ;;
122 ;;      Ready-to-use databases currently available:
123 ;;
124 ;;      o   HP-UX/Netbsd C/C++ function database is included in this file
125 ;;          and perl script to rip the function definitions from Unix manual
126 ;;          pages.
127 ;;      o   Perl script to generate databases from any
128 ;;          Javadoc compliant pages (E.g full database from all
129 ;;          JDK 1.2.2 pages) The Java database is not distributed
130 ;;          because it takes over a Meg and generating one straight
131 ;;          from SUN Java /docs tree is trivial.
132 ;;
133 ;;  Story behind this package
134 ;;
135 ;;      The word "tag" refers to famous tags package in emacs that allows
136 ;;      you to browse your C/C++ code easily.
137 ;;
138 ;;      Someone may be in the middle of c++ project at work and notice
139 ;;      that he frequently consults the manual pages to find correct
140 ;;      syntax for calling stdio.h functions. It's hard to remember
141 ;;      them right every time. Time spent for reading manual pages may
142 ;;      be considerable just to figure out what #include statements
143 ;;      each function might require, and what type of parameters they
144 ;;      need.
145 ;;
146 ;;      No more. There must be a way out of this...
147 ;;
148 ;;      If you have programmed in lisp, you propably know package called
149 ;;      eldoc.el (get it fast if you haven't) by Noah Friedman
150 ;;      <friedman@prep.ai.mit.edu>. It shows you the lisp function call
151 ;;      arguments when your cursor is right over some function.
152 ;;
153 ;;      What a cool tool! You never have to go to elisp info pages
154 ;;      just to check what the function takes, and you don't have to
155 ;;      pop up extra buffer with c-h f <func>. It's a real time saver.
156 ;;      Similar keyword lookup feature culd be built for any
157 ;;      programing. Since eldoc looked the lisp args from memory
158 ;;      (emacs obarray, symbol storage), the other programming
159 ;;      languages must use external reference files: databases.
160 ;;
161 ;;      First, all C/C++ function syntaxes were extracted out of the
162 ;;      man pages with small perl program. The final output after
163 ;;      ripping all the 3C man pages loooked like this. The output
164 ;;      is put under database 'c++-functions'
165 ;;
166 ;;          <dirent.h> dir *opendir(const char *dirname);
167 ;;          <dirent.h> int closedir(dir *dirp);
168 ;;          <dirent.h> int readdir_r(dir *dirp, struct dirent *result);
169 ;;          <dirent.h> long int telldir(dir *dirp);
170 ;;          <dirent.h> struct dirent *readdir(dir *dirp);
171 ;;          ...
172 ;;          <string.h><strings.h> char *index(const char *s, int c);
173 ;;          <string.h><strings.h> char *rindex(const char *s, int c);
174 ;;
175 ;;      Notice how perl stuck the '#define' statements at the
176 ;;      beginning of each function. After this 'function' database was
177 ;;      ready, the only thing needed was lisp code to handle database
178 ;;      lookups for the keyword under the cursor. Similar approach can
179 ;;      be user for any programming language. Just set up the
180 ;;      database, entries to search; one per line.  that's it.
181 ;;
182 ;;  Word about installation -- performance problems [19.29 or lower]
183 ;;
184 ;;      Skip this part if you have 19.30+
185 ;;
186 ;;      When you load this package, it immediately installs an _example_
187 ;;      post-command function. It assumes that you're using the "Having a
188 ;;      test drive" C++ database and stored it as explained.  You propably
189 ;;      want to remove that default post-command function and use your own
190 ;;      definition. Here is how you remove it.
191 ;;
192 ;;      Doing this is also recommended if you don't want post command
193 ;;      actions, but want to use the tinytag-main[-mouse] functions
194 ;;      directly. Call them only when you need them.
195 ;;
196 ;;      o   before any load command say: (setq tinytag-:load-hook nil)
197 ;;      o   If package is already loaded, say: C-u M-x tinytag-install.
198 ;;
199 ;;      If your databases are big, or if you're afraid of the overall emacs
200 ;;      performance I STRONGLY ADVICE THAT YOU REMOVE THAT post-command
201 ;;      with methods (2) or (1) You can always call the database with the
202 ;;      supplied keyboard or mouse commands when you need the information.
203 ;;
204 ;;  Having a test run
205 ;;
206 ;;      There is sample C++ database from HP-UX 10 man 3C pages, which
207 ;;      is unfortunately incomplete. You may consider using the BSD
208 ;;      C-database instaed. The BSD is installed by default when you
209 ;;      call `M-x' `tinytag-install-sample-database-c'. Rememeber that
210 ;;      you really should replace those definitions with your own
211 ;;      systems equivalents, because not all functions are found in
212 ;;      all systems. Vendors are different.
213 ;;
214 ;;      This is how you test this package.
215 ;;
216 ;;      o   Go to empty buffer
217 ;;      o   Add statement "strcat(a,b)" to the buffer
218 ;;      o   Turn on C++ mode
219 ;;      o   Be sure to have tinytag on (M-x load-library tinytag.el)
220 ;;      o   Move your cursor over the word "strcat" and wait few seconds.
221 ;;          <For very old Emacs, below 19.30: wave your cursor
222 ;;          back and forth about 5 times.>
223 ;;
224 ;;      You should see the "strcat"'s function's definition displayed in
225 ;;      the echo area. Next, you can start writing your own databases to
226 ;;      languages you use.
227 ;;
228 ;;  Installing support for your programming languages
229 ;;
230 ;;      While you may have installed the default database for C/C++, you
231 ;;      have to configure the variable `tinytag-:database-setup-table' to
232 ;;      include all languages where you have databases available. It is
233 ;;      recommended that you keep all emacs related configuration,
234 ;;      including databases, in one place, e.g.
235 ;;
236 ;;          ~/elisp/config/
237 ;;
238 ;;      First you need databases which you must write yourself.
239 ;;      e.g. emacs-tinytag-python-function.el where you describe the
240 ;;      function, packages and call syntax. The only thing after creating the
241 ;;      database is to tell where it can be found. E.g for php you would
242 ;;      add couple of you own variables:
243 ;;
244 ;;          (defconst my-tinytag-:db-map-php
245 ;;               '((func       "emacs-config-tinytag-php.txt"))
246 ;;               "Java database.")
247 ;;
248 ;;          (defconst my-tinytag-:db-re-php
249 ;;               '(("."        (func)))  ;; See name FUNC in prev. variable
250 ;;               "PHP database.")
251 ;;
252 ;;      And tell tinytag.el that the Java is now known:
253 ;;
254 ;;          (defconst tinytag-:database-setup-table
255 ;;            (list
256 ;;             (list
257 ;;              "code-php\\|php"
258 ;;              '(my-tinytag-:db-map-php
259 ;;                my-tinytag-:db-re-php))
260 ;;            (list
261 ;;              "c-mode....."
262 ;;              '(..
263 ;;                 ))))
264 ;;
265 ;;     C/C++ database
266 ;;
267 ;;      Run c-function-list.pl that comes with Tiny Tools Distribution to
268 ;;      generate function database.
269 ;;
270 ;;      Alternatively copy the database from the end of this file or
271 ;;      use M-x tinytag-install-sample-databases
272 ;;
273 ;;     Java database
274 ;;
275 ;;      Run script `java-function-list.pl' that comes with Tiny Tools
276 ;;      distribution to generate function database from the Sun JDK's javadoc
277 ;;      html pages.  See the manual page of the script how to run it (--help
278 ;;      option)
279 ;;
280 ;;      NOTE: In SUN documentation, there is no System.out.print() or
281 ;;      System.out.println() functions that could be extracted. Please add
282 ;;      Those functions by hand to the database.
283 ;;
284 ;;      This script is also run with call tinytag-install-sample-databases,
285 ;;      provided that you have `perl' and `java' and `java-function-list.pl'
286 ;;      installed and located along PATH.
287 ;;
288 ;;     Perl database
289 ;;
290 ;;      <coming>
291 ;;
292 ;;      Run perl-function-list.pl that comes with Tiny Tools Distribution to
293 ;;      generate function database.  See the manual page of the script how to
294 ;;      run it (--help option)
295 ;;
296 ;;  Database format and display
297 ;;
298 ;;      There is nothing special in the database format, each entry must me
299 ;;      in one line nad that's all. Try to find most suitable display format
300 ;;      for your language, like the general method that is used for C/C++, Java
301 ;;      and Perl
302 ;;
303 ;;          <LIBRARY> return-value function-name(function-parameters) REST-INFO
304 ;;
305 ;;      _Important_: When function `tinytag-search-db' searches the whole
306 ;;      database, it gathers the lines that likely match and FIRST one that
307 ;;      is found is displayed in the echo-area. So that you're aware of other
308 ;;      matches, the count of matches is displayed
309 ;;
310 ;;          10: java.lang.System.out  void println()
311 ;;          |
312 ;;          Count of matches
313 ;;
314 ;;      If you have time, it would be sensible to move the most informational
315 ;;      description of the function first in the list of lines, so that it
316 ;;      get displayed. For example, you could move method this method first in
317 ;;      the line and add [] inside function parameters to signal that the
318 ;;      parameter is optional
319 ;;
320 ;;          java.lang.System.out  void print([Object obj])
321 ;;
322 ;;      Alternatively, you can keep the buffer `tinytag-:output-buffer'
323 ;;      visible e.g in separate frame, so that all the matched items are
324 ;;      visible to you in case the one displayed in echo-are is not correct.
325 ;;
326 ;;  Differencies between 19.30+ and lower
327 ;;
328 ;;      The 19.30 Emacs has idle hook, which runs after you move cursor. It
329 ;;      doesn't run if you move mouse.  19.28 on the other hand has post
330 ;;      command hook, that runs every time you either move cursor _OR_
331 ;;      move mouse.
332 ;;
333 ;;      Now, to get display fast in 19.28, you propably want to wave
334 ;;      your mouse fast couple of times. In 19.30 you can have immediate
335 ;;      display with just one cursor move over the word.
336 ;;
337 ;;  What to do if you don't see the definition displayed?
338 ;;
339 ;;      hem most informative is the internal debug which you turn on with:
340 ;;
341 ;;          M-x tinytag-debug
342 ;;
343 ;;      Then call this function directly over the word whose definition
344 ;;      you want to display (e.g. strcat in C++)
345 ;;
346 ;;          ESC ESC : (tinytag-post-command-1)
347 ;;          ========
348 ;;          Press this key combination and enter text to the right.
349 ;;
350 ;;      After that call there is buffer *tinytag-debug* that has some
351 ;;      information about called functions and parameters. Please
352 ;;      investigate the call chain for possible problem. Is the database
353 ;;      selected right? if the regexp used for search right? If you don't
354 ;;      know how to read the debug buffer's output, just send the buffer's
355 ;;      content to me and describe what you did and what was your current
356 ;;      major mode.
357 ;;
358 ;;  Thank you
359 ;;
360 ;;      Peter Simons <simons@petium.rhein.de> sent me
361 ;;      NetBSD and Linux C databases and his perl script can help you
362 ;;      to create your own database from the man pages.
363
364 ;;}}}
365
366 ;;; Change Log:
367
368 ;;; Code:
369
370 ;;{{{ setup: require
371
372 ;; Under no circumstances remove the following comment line below!
373 ;; $PackageInstallRe: '^;;+[*]' $
374
375 (require 'tinylibm)
376
377 (eval-and-compile
378   (autoload 'man "man" "" t))
379
380 (eval-when-compile (ti::package-use-dynamic-compilation))
381
382 (ti::package-defgroup-tiny TinyTag tinytag-: programming
383   "Grep database: example show C++ synatx call while coding.
384 Overview of features
385       o   simple database searching, some analogue to emacs TAGS package.
386       o   you can flip databases very easily to show the right data.
387       o   example: showing c++ funcall syntax in echo area while you program.
388       o   installs hp-ux or netbsd c function databases automatically.")
389
390 ;;}}}
391 ;;{{{ setup: -- variables
392
393 (defcustom tinytag-:load-hook nil
394   "*Hook run when file has been loaded."
395   :type  'hook
396   :group 'TinyTag)
397
398 (defcustom tinytag-:post-command-try-hook
399   '(tinytag-try-function-show-cached-word
400     tinytag-try-function-search-db)
401   "*Try displaying the information.
402 Run these functions, until one of them return non-nil.
403 Put here only functions that does not need any user interaction."
404   :type  'hook
405   :group 'TinyTag)
406
407 (defcustom tinytag-:try-hook
408   '(tinytag-try-function-show-cached-word
409     tinytag-try-function-search-db
410     tinytag-try-function-man)
411   "*Try displaying the information.
412 Run these functions, until one of them return non-nil.
413 This hook is primarily run upon request: M - x, keyboard command, or mouse
414 command."
415   :type  'hook
416   :group 'TinyTag)
417
418 (defcustom tinytag-:set-database-hook
419   '(tinytag-set-database)
420   "*Function to set the correct database for buffer.
421 Run these functions, until someone return non-nil."
422   :type  'hook
423   :group 'TinyTag)
424
425 (defcustom tinytag-:word-filter-hook
426   '(tinytag-filter-default-function)
427   "*Run hook until some function return non-nil.
428 Every function in this hook is called with
429
430 arg1:  string, word picked at current point to initiate database search
431
432 The function should return nil if the word should not be searched.
433 many times short words are not valid 'keys' in database: e.g. in
434 C/C++ code common words like 'char' 'double' 'int' can be ignored."
435   :type  'hook
436   :group 'TinyTag)
437
438 (defcustom tinytag-:word-modify-hook  'tinytag-word-default-adjust
439   "*This function formats the searched word to correct search regexp.
440 Regexp should match only desired hits.
441
442 Call arguments:
443   string
444
445 Function must return always:
446   string"
447   :type  'hook
448   :group 'TinyTag)
449
450 (defcustom tinytag-:database-ok-hook nil
451   "*Run hook database was set according to current buffer.
452 Called from `tinytag-set-database'.
453
454 The variables `tinytag-:database-map' and `tinytag-:regexp-to-databases'
455 have valid values when the hook is called."
456   :type  'hook
457   :group 'TinyTag)
458
459 ;;; ....................................................... &v-private ...
460
461 (defvar tinytag-:last-word-lookup  nil
462   "Last lookup,  '(WORD . (DB-STRING DB-STRING)).")
463 (make-variable-buffer-local 'tinytag-:last-word-lookup)
464
465 (defvar tinytag-:noerror  nil
466   "If non-nil, no error command is called.")
467
468 (defvar tinytag-:post-command-hook-counter  nil
469   "Counter.")
470
471 (defvar tinytag-:post-command-hook-wakeup
472   ;;  There is no delay in 19.30+, but for <19.30 the must be
473   ;;
474   (if (boundp 'post-command-idle-hook)
475       0 3)
476   "Wakeup threshold.
477 The more lower value, the more often post command hook is called
478 and your Emacs probably slows down. The values must be 0 in 19.30+,
479 because `post-command-hook' is not used there.")
480
481 (defvar tinytag-:database-map nil
482   "Databases available, format '((NAME-SYMBOL FILENAME) .. )
483 Do not put directory name here, use `tinytag-:database-dir' instead.")
484
485 (defvar tinytag-:regexp-to-databases nil
486   "Which REGEXP on word should initiate database search?.
487 Format: '((REGEXP '(database1 database2 ..)) (RE  (d1 d1 ..))  ..)")
488
489 (defvar tinytag-:idle-timer-elt  nil
490   "If idle timer is used, this variable has the timer elt.")
491
492 ;;; .................................................. &private-sample ...
493 ;;; - These are offered as samples, see tinytag-set-database,
494 ;;;   which uses these variable. They are not part of the tinytag.el
495 ;;;   package (user variables). You should program your own
496 ;;;   tinytag-set-database function to deal with different buffers.
497
498 (defconst tinytag-:example-db-map-c++
499   '((func       "emacs-config-tinytag-c++-functions.txt")
500     (struct     "emacs-config-tinytag-c++-structs.txt")
501     (types      "emacs-config-tinytag-c++-types.txt"))
502   "Sample. C++ databases.")
503
504 (defconst tinytag-:example-db-re-c++
505   '(("_t"       (types structs))
506     ("_s"       (struct types))
507     ("."        (func)))
508   "Sample. C++ word-to-database mappings.")
509
510 (defconst tinytag-:example-db-map-java
511   '((func       "emacs-config-tinytag-java-functions.txt"))
512   "Sample. Java databases.")
513
514 (defconst tinytag-:example-db-re-java
515   '(("."        (func))) ;; All words are looked from `func' database
516   "Sample. Map found word to correct Java database.")
517
518 ;;;  You propably should program your own filter function for variaous
519 ;;;  modes. This variable belongs to default filter only.
520 ;;;
521 (defcustom tinytag-:filter-default-c++-words
522   (concat
523    "^char\\|^double\\|^int$\\|^float\\|^void\\|static"
524    "\\|endif\\|define\\|ifndef\\|ifdef\\|include"
525    "\\|break")
526   "*Filter out unwanted words from current point.
527 This variable is used in `tinytag-filter-default-function'."
528   :type  '(string "Regexp")
529   :group 'TinyTag)
530
531 ;;; ........................................................ &v-public ...
532 ;;; user configurable
533
534 (defcustom tinytag-:output-buffer "*tinytag-output*"
535   "*Buffer where to display all database matches for word at point.
536 Many times the word picked at point matches several functions and you
537 can keep this buffer in separate frame in Window environment to see what
538 is the correct match.
539 If this variable is nil, no buffer is created.")
540
541 (defcustom tinytag-:database-dir
542   (or
543    (file-name-as-directory
544     (file-name-directory (ti::package-config-file-prefix "tinytag.el")))
545    (error "TinyTag: Can't set default value for `tinytag-:database-dir'.
546 Please define the directory of database directory to `tinytag-:database-dir'."))
547   "*Directory of database files."
548   :type  'directory
549   :group 'TinyTag)
550
551 (defcustom tinytag-:filter-word-table
552   (list
553    (list
554     (concat
555      "c-mode\\|cc-mode\\|c[+]+-mode"
556      ;;See tinylibid.el
557      "\\|code-c\\|code-c[+]+")
558     '(or (< (length string) 4)          ;too short word ?
559          (string-match tinytag-:filter-default-c++-words string))))
560   "*Format is:
561
562 '((BUFFER-TYPE-REGEXP EVAL-STATEMENT-TO-REJECT) (B E) ..)
563
564 If buffer type/mode matches REGEXP then the eval statement is evaluated
565 for current word that is stored into 'string'. The statement should return
566 t if word should be rejected. During the eval, any matches done are
567 case sensitive."
568   :type '(repeat
569           (string :tag "buffer type regexp")
570           (sexp :tag "Form"))
571   :group 'TinyTag)
572
573 (defcustom tinytag-:database-setup-table
574   (list
575    (list
576     (concat
577      ;;  See tinylibid.el to detect buffer type
578      "c-mode\\|cc-mode\\|c[+]+-mode"
579      "\\|code-c\\|code-c[+]+")
580     '(tinytag-:example-db-map-c++
581       tinytag-:example-db-re-c++))
582    (list
583     "java"
584     '(tinytag-:example-db-map-java
585       tinytag-:example-db-re-java)))
586   "*If buffer type/mode match REGEXP then set database variables.
587 Cariables `tinytag-:database-map' and
588 `tinytag-:regexp-to-databases' are used.
589
590 The BUFFER-TYPE-REGEXP corresponds the value returned by ti::id-info
591 for current buffer. The function detects various progrmaming.
592
593 Format:
594
595 '((BUFFER-TYPE-REGEXP (DATABASE-MAP-SYM DATABASE-REGEXP-SYM))
596   ..)"
597   :type '(repeat
598           (list
599            (string :tag "mode regexp")
600            (list
601             (symbol :tag "db map sym")
602             (symbol :tag "db regexp sym"))))
603   :group 'TinyTag)
604
605 (defcustom tinytag-:display-function  'tinytag-display-function
606   "*Function to display search results.
607 Should accept one ARG, which is list of matched lines from databases."
608   :type  'function
609   :group 'TinyTag)
610
611 ;;}}}
612 ;;{{{ version
613
614 ;;;### (autoload 'tinytab-debug-toggle "tinytag"  t t)
615
616 (eval-and-compile (ti::macrof-debug-standard "tinytag" "-:"))
617
618 (eval-and-compile
619   (ti::macrof-version-bug-report
620    "tinytag.el"
621    "tinytag"
622    tinytag-:version-id
623    "$Id: tinytag.el,v 2.53 2007/05/01 17:21:00 jaalto Exp $"
624    '(tinytag-:version-id
625      tinytag-:debug
626      tinytag-:load-hook
627      tinytag-:try-hook
628      tinytag-:set-database-hook
629      tinytag-:last-word-lookup
630      tinytag-:noerror
631      tinytag-:post-command-hook-counter
632      tinytag-:post-command-hook-wakeup
633      tinytag-:example-db-map-c++
634      tinytag-:example-db-re-c++
635      tinytag-:database-dir
636      tinytag-:database-map
637      tinytag-:regexp-to-databases
638      tinytag-:display-function
639      post-command-idle-hook
640      post-command-hook)
641    '(tinytag-:debug-buffer)))
642
643 ;;}}}
644 ;;{{{ code: install
645
646 ;;; ----------------------------------------------------------------------
647 ;;;
648 (defun tinytag-initialize  ()
649   "Start package and verify that some variables exist."
650   (interactive)
651   (let* ()
652     (if (or (not (stringp tinytag-:database-dir))
653             (not (file-exists-p tinytag-:database-dir)))
654         (error "\
655 TinyTag: `tinytag-:database-dir' is not a directory. Please configure"))))
656
657 ;;; ----------------------------------------------------------------------
658 ;;;
659 ;;;###autoload
660 (defun tinytag-install (&optional uninstall)
661   "Install package. Optionally UNINSTALL."
662   (interactive "P")
663   (let* ((hook  (if (boundp 'post-command-idle-hook)
664                     ;; post-command-idle-hook became obsolete in 19.34
665                     'post-command-idle-hook
666                   'post-command-hook))
667          (cmd   (if uninstall
668                     'remove-hook
669                   'add-hook)))
670     (cond
671      ((ti::idle-timer-supported-p)
672       (ti::compat-timer-cancel-function 'tinytag-post-command)
673       (unless uninstall
674         (setq
675          tinytag-:idle-timer-elt
676          (ti::funcall
677           'run-with-idle-timer
678           2
679           'repeat
680           'tinytag-post-command))))
681      (t
682       ;; We use post-command-idle-hook if defined,
683       ;; otherwise put it on post-command-hook.
684       ;; The idle hook appeared in Emacs 19.30.
685       (funcall cmd hook 'tinytag-post-command)))
686     (when (interactive-p)
687       (message "TinyTag: Package %s" (if uninstall
688                                          "deactivated"
689                                        "activated")))))
690
691 ;;; ----------------------------------------------------------------------
692 ;;;
693 ;;;###autoload
694 (defun tinytag-uninstall ()
695   "Uninstall package."
696   (tinytag-install 'uninstall))
697
698 ;;; ----------------------------------------------------------------------
699 ;;;
700 (defun tinytag-install-sample-database-java-external-process (doc-dir file)
701   "Call external process to examine DOC-DIR to build Java function calls.
702 The output is written to FILE."
703   (let* ((info (ti::process-perl-version "perl"))
704          (perl (nth 2 info))
705          ;; (type (nth 1 info))
706          (bin  "java-function-list.pl")
707          (prg  (ti::file-get-load-path bin exec-path)))
708     (cond
709      ((null perl)
710       (message
711        (concat
712         "Tinytag: [install] Cannot find `perl' along path. "
713         "Please check your PATH or install perl. "
714         (if (ti::win32-p)
715             "http://www.activestate.com"
716           "http://www.perl.com/"))))
717      ((null prg)
718       (message
719        (concat
720         "Tinytag: [install] Cannot find " bin
721         " please check your PATH")))
722      (t
723       (unless (file-directory-p
724                (file-name-directory file))
725         (error "Tinytag: Can't find directory %s" file))
726       (with-temp-buffer
727         ;;  Java 1.3-1.4  documentation size, when processes, is 1.5 Meg
728         ;;  It will fit into memory.
729         (message
730          (concat
731           "Tinytag: [install] Java database... "
732           "Please wait for external process to traverse %s") doc-dir)
733         (call-process perl
734                       nil
735                       (current-buffer)
736                       nil
737                       prg
738                       "--recurse"
739                       doc-dir)
740         (message "Tinytag: [install] Java database...done. Size %d"
741                  (buffer-size))
742         ;; perl syntax error in line NNNN
743         (when (ti::re-search-check " line [0-9]")
744           (error "Tinytag: Failed to call %s\n\ [Perl error] %s"
745                  prg (buffer-string)))
746         (when (ti::buffer-empty-p)
747           (error "Tinytag: %s with %s didn't return anything."
748                  prg doc-dir))
749         (write-region (point-min) (point-max) file)
750         (message "Tinytag: [install] Java database...done %s"
751                  file))))))
752
753 ;;; ----------------------------------------------------------------------
754 ;;;
755 ;;;###autoload
756 (defun tinytag-install-sample-database-java ()
757   "Install Java database from Sub JDK documentation."
758   (interactive)
759   (tinytag-initialize)
760   (let* ((java-info  (progn
761                        (message "TinyTag: Wait, checking java...")
762                        (prog1 (ti::process-java-version)
763                          (message "TinyTag: Wait, checking java...done."))))
764          (case-fold-search t))
765     (cond
766      ((not java-info)
767       (message
768        (concat
769         "Tinytag: [install] Skipped. No `java' binary found along PATH."
770         " Java sample database will not be installed.")))
771      (t
772       ;;  path to `java' binary could be something like
773       ;;  i:/java/sun/jdk1.3_02/bin/java
774       ;;
775       ;;  The Java documentation si assumed to be under
776       ;;  i:/java/sun/jdk1.3_02/docs/
777       ;;
778       (let* ((java (nth 2 java-info)) ;; path
779              (dir  (file-name-directory java))
780              (root (and dir (ti::directory-up dir)))
781              (doc-dir (and root (concat (file-name-as-directory root)
782                                         "docs")))
783              (out-dir (file-name-as-directory tinytag-:database-dir))
784              (db      (concat
785                        out-dir
786                        (nth 1 (assq 'func tinytag-:example-db-map-java)))))
787         (cond
788          ((and (stringp doc-dir)
789                (file-directory-p doc-dir))
790           (if (file-exists-p db)
791               (message
792                "Tinytag: [install] Skipped. Database already exists %s"
793                db)
794             (tinytag-install-sample-database-java-external-process
795              doc-dir db)))
796          (t
797           (message "Tinytag: [install] Can't find java docs/ dir [%s]"
798                    doc-dir))))))))
799
800 ;;; ----------------------------------------------------------------------
801 ;;;
802 ;;;###autoload
803 (defun tinytag-install-sample-database-c ()
804   "Install c/C++ database from file tintytag.el."
805   (interactive)
806   (tinytag-initialize)
807   (let* ((case-fold-search t)
808          (file   (locate-library "tinytag.el"))
809          (dir    (file-name-as-directory tinytag-:database-dir))
810          (db     (concat
811                   dir
812                   (nth 1 (assq 'func  tinytag-:example-db-map-c++))))
813          buffer)
814     (unless (stringp file)
815       (error "Tinytag: [install] cannot find tinytag.el along load-path."))
816     (setq buffer (ti::package-install-example "tinytag.el"))
817     (with-current-buffer buffer
818       (if (not (re-search-forward "Sample.*function database" nil t))
819           (error "Tinytag: [install] Cannot find start of example section.")
820         ;;  Remove all before the database.
821         (beginning-of-line)
822         (delete-region (point-min) (point))
823         (cond
824          ((string-match "hpux" (emacs-version))
825           ;; GNU Emacs 19.28.1 (hppa1.1-hp-hpux9, X toolkit)
826           ;;
827           (re-search-forward "END HP-UX")
828           (forward-line 1)
829           (delete-region (point) (point-max)))
830          (t
831           ;; GNU Emacs 19.33.1 (i386-unknown-netbsd1.1, X toolkit)
832           ;;
833           (re-search-forward "# NetBSD Sample")
834           (beginning-of-line)  (delete-region (point-min) (point))
835           (re-search-forward "# END NetBSD")
836           (forward-line 1)
837           (delete-region (point) (point-max))))
838
839         (if (file-exists-p db)
840             (message
841              "Tinytag: [install] Skipped. Database already exists %s" db)
842           (message "Tinytag: [install] C/C++ database...")
843           (write-region  (point-min) (point-max) db)
844           (message
845            "Tinytag: [install]  C/C++ database...installed %s" db))))))
846
847 ;;; ----------------------------------------------------------------------
848 ;;;
849 (defun tinytag-install-sample-databases ()
850   "Install Sample databases: C/C++ and Java.
851 This function sets Â´tinytag-install-sample-databases'
852 property 'done to non-nil value, when called."
853   (tinytag-install-sample-database-c)
854   (tinytag-install-sample-database-java)
855   ;;  This is signal for other setups, that can check if functon
856   ;;  has already been called (not to install databases multiple times)
857   (put 'tinytag-install-sample-databases 'done t)
858   (ti::kill-buffer-safe "*ti::pkg*"))
859
860 ;;}}}
861
862 ;;{{{ code: misc
863
864 ;;; ----------------------------------------------------------------------
865 ;;;
866 (defsubst tinytag-word-at-point ()
867   "Read word on current point."
868   (if (looking-at "[.a-z0-9_]+[ \t\n\r]*(") ;is here word ?
869       (ti::buffer-read-word "-_.A-Za-z0-9" )))
870
871 ;;; ----------------------------------------------------------------------
872 ;;;
873 (defsubst tinytag-display (list)
874   "Call display function with LIST."
875   (funcall tinytag-:display-function list))
876
877 ;;; ----------------------------------------------------------------------
878 ;;;
879 (defun tinytag-display-function  (list)
880   "Display car of LIST and count of LIST.
881 Output matched to tinytag-:output-buffer too."
882   (when (stringp tinytag-:output-buffer)
883     (with-current-buffer (get-buffer-create tinytag-:output-buffer)
884       (erase-buffer)
885       (dolist (line list)
886         (insert line "\n"))))
887   (message
888    (format
889     "%s: %s" (length list) (car list))))
890
891 ;;; ----------------------------------------------------------------------
892 ;;;
893 (defun tinytag-filter-default-function  (string)
894   "Default filter function. Reject STRING."
895   (let* ((fid       "tinytag-filter-default-function: ")
896          (id        (or (ti::id-info nil 'variable-lookup)
897                         (symbol-name major-mode)))
898          (table     tinytag-:filter-word-table)
899          (accept    t)
900          (case-fold-search nil)         ;Case is important here
901          elt)
902     (when (and (setq elt (ti::list-find table id))
903                (eval (nth 1 elt)))
904       (setq accept nil))
905     (tinytag-debug fid " ret accept" accept "elt" elt "\n")
906     accept))
907
908 ;;; ----------------------------------------------------------------------
909 ;;;
910 (defun tinytag-word-default-adjust  (string)
911   "Convert STRING to suitable regexp.
912 Currently supports only C/C++ and Java."
913   (let ((fid        "tinytag-word-default-adjust: ")
914         (id         (or (ti::id-info nil 'variable-lookup)
915                         (symbol-name major-mode)))
916         (ret        string))
917     (cond
918      ((string-match "c[+]+\\|code-c\\|c-mode\\|cc-mode" id)
919       ;;
920       ;;  We suppose database format
921       ;;  "<include.h> function(definition...)"
922       ;;
923       ;;  Notice the '*' which matches functions returning a pointer
924       ;;  ring.h><strings.h> char *strcat(
925       ;;
926       (setq ret (format "[ \t*]%s[ \t]*(" string)))
927      ((string-match "java" id)
928       ;;
929       ;;  We suppose database format
930       ;;
931       ;; java.lang.System.out  void print(boolean b)
932       ;; java.lang.System.out  void print(Object obj)
933       ;;
934       ;; --> System.out.*print\\>
935       ;;
936       ;; But there is a problem with variables
937       ;;
938       ;;     Runtime rt = Runtime.getRuntime();
939       ;;     long free  = rt.freeMemory();
940       ;;                   *cursor here         --> grabbed "rt.freeMemory"
941       ;;
942       ;; --> Search last word after dot too.
943       ;;
944       (let (class
945             function)
946         (tinytag-debug fid "java" (string-match "^(.*\\.)(.*)$" string)
947                        ret "\n")
948         (cond
949          ((string-match "\\(.+\\)\\.\\(.*\\)$" string)
950           (setq class    (match-string 1 string)
951                 function (match-string 2 string)
952                 ret      (format "%s.*%s\\>"
953                                  (regexp-quote class)
954                                  (regexp-quote function)))
955           ;;  If the name is "System.something", the assume that the first word
956           ;;  is pure java Class.
957           ;;
958           ;;  If the name is in lowercase, assume that it is variable and
959           ;;  search for plain function name as well.
960           (unless (ti::string-match-case "^[A-Z]" class)
961             (setq ret (format "%s\\| %s(" ret function))))
962          ((not (string-match "\\." string))
963           (setq ret (format "\\<%s[ \t]*("
964                             (regexp-quote string))))))))
965     (tinytag-debug fid "ret" ret "\n")
966     ret))
967
968 ;;}}}
969 ;;{{{ code: search engine
970
971 ;;; ----------------------------------------------------------------------
972 ;;;
973 (defun tinytag-search-db (re single-or-list)
974   "Search RE from databases in SINGLE-OR-LIST.
975
976 References:
977
978   `tinytag-:database-map'
979   `tinytag-:database-dir'
980   `tinytag-:noerror'
981   `tinytag-:word-modify-hook'
982
983 Return:
984
985   list  '(line line ..)  matched lines or nil."
986   (tinytag-initialize)
987   (let* ((fid       "tinytag-search-db: ")
988          (table     tinytag-:database-map)
989          (noerr     tinytag-:noerror)
990          (dir       (file-name-as-directory tinytag-:database-dir))
991          (list      (ti::list-make single-or-list))
992          buffer
993          file
994          ret)
995     (tinytag-debug fid " input" re single-or-list "\n")
996     (dolist (elt list)
997       (when (setq elt (assq elt table))
998         (setq file   (concat
999                       (file-name-as-directory dir)
1000                       (nth 1 elt)))
1001         (setq buffer (or (get-file-buffer file)
1002                          (and (file-exists-p file)
1003                               (find-file-noselect file))))
1004         (tinytag-debug fid " buffer" buffer "file" file "\n")
1005         ;; ......................................... search or no file ...
1006         (cond
1007          ((and
1008            buffer
1009            (setq re (run-hook-with-args-until-success
1010                      'tinytag-:word-modify-hook re)))
1011           (tinytag-debug fid " regexp" re "\n")
1012           (with-current-buffer buffer
1013             (ti::pmin)
1014             (setq ret (ti::buffer-grep-lines re))))
1015          ((null noerr)
1016           (error "No database to search %s" file))))) ;; when-dolist
1017     (tinytag-debug fid "RET" ret "\n")
1018     ret))
1019
1020 ;;; ----------------------------------------------------------------------
1021 ;;;
1022 (defun tinytag-do-search (string)
1023   "Search those databases which match predefined regexp against STRING.
1024
1025 References:
1026   `tinytag-:regexp-to-databases'
1027
1028 Return:
1029   list   '(db-matched-line ..)  or nil"
1030   (let* ((fid   "tinytag-do-search: ")
1031          (table tinytag-:regexp-to-databases)
1032          e
1033          db
1034          re
1035          ret)
1036     (tinytag-debug fid "string" string "\n")
1037     (when (run-hook-with-args-until-success
1038            'tinytag-:word-filter-hook string)
1039       (dolist (elt table)
1040         (setq re (car elt)
1041               db (nth 1 elt))
1042         (when (string-match re string)
1043           (setq ret (tinytag-search-db string db))
1044           (tinytag-debug fid " MATCH" "re" re "str" string "ret" ret"\n")
1045           (return))))
1046     ret))
1047
1048 ;;}}}
1049 ;;{{{ code: try funcs
1050
1051 ;;; ----------------------------------------------------------------------
1052 ;;;
1053 (defun tinytag-try-function-show-cached-word (&optional noerr)
1054   "Pick word at point and show info if word was same as previously looked.
1055 NOERR ignores errors."
1056   (interactive)
1057   (let* ((word          (tinytag-word-at-point))
1058          (prev-word     (car-safe tinytag-:last-word-lookup))
1059          (prev-info     (cdr-safe tinytag-:last-word-lookup))
1060          (err           (or noerr tinytag-:noerror))
1061          (fid           "tinytag-try-function-show-cached-word: "))
1062     (catch 'quit
1063       (tinytag-debug fid
1064                      "word"          word
1065                      "previous word" prev-word
1066                      "previous info" prev-info
1067                      "error flag"    err
1068                      "\n")
1069       (when (not (stringp word))
1070         (if (null err)
1071             (message "tinytag: No word at point."))
1072         (throw 'quit t))
1073
1074       (when (and (not (null prev-word))
1075                  (not (null prev-info))
1076                  (string= word prev-word))
1077         (tinytag-display prev-info)
1078         (throw 'quit t)))))
1079
1080 ;;; ----------------------------------------------------------------------
1081 ;;;
1082 (defun tinytag-try-function-search-db ()
1083   "Do lookup, pick word at point and search databases.
1084 Show the matched word from database."
1085   (interactive)
1086   (let* ((fid    "tinytag-try-function-search-db: ")
1087          (word   (tinytag-word-at-point))
1088          info)
1089     (tinytag-debug fid "word" word "\n")
1090     (when (and (stringp word)
1091                (run-hook-with-args-until-success 'tinytag-:set-database-hook)
1092                (setq info (tinytag-do-search word)))
1093       (setq tinytag-:last-word-lookup (cons word info))
1094       (tinytag-display info)
1095       t)))
1096
1097 ;;; ----------------------------------------------------------------------
1098 ;;;
1099 (defun tinytag-try-function-man ()
1100   "Suggest man page search for current word."
1101   (interactive)
1102   (let* ((word          (ti::buffer-read-word))
1103          ;; only in 19.30
1104 ;;;      (syntax-elt    (fexec 'c-guess-basic-syntax))
1105 ;;;      (syntax        (car-safe syntax-elt))
1106          ans)
1107     (when
1108         (and word ;; (memq syntax '(statement nil))
1109              (y-or-n-p (concat "Run man on " word))
1110              (not
1111               (ti::nil-p
1112                (setq ans (read-from-minibuffer "Man cmd: " word)))))
1113       (man ans)
1114       t)))
1115
1116 ;;}}}
1117 ;;{{{ main
1118
1119 ;;; ----------------------------------------------------------------------
1120 ;;;
1121 ;;;###autoload
1122 (defun tinytag-main ()
1123   "Run `tinytag-:try-hook' until some of the functions return non-nil."
1124   (interactive)
1125   (run-hook-with-args-until-success 'tinytag-:try-hook))
1126
1127 ;;; ----------------------------------------------------------------------
1128 ;;;
1129 ;;;###autoload
1130 (defun tinytag-main-mouse (&optional event)
1131   "See `tinytag-main'. Function is called with mouse EVENT."
1132   (interactive "e")
1133   (tinytag-main))
1134
1135 ;;}}}
1136 ;;{{{ code: example
1137
1138 ;;; ----------------------------------------------------------------------
1139 ;;;
1140 (defun tinytag-post-command-1  ()
1141   "Do lookup."
1142   ;; ... ... ... ... ... ... ... ... ... ... ... ... ... do action . .
1143   ;;
1144   (when (and
1145          (run-hook-with-args-until-success 'tinytag-:set-database-hook)
1146          (run-hook-with-args-until-success 'tinytag-:post-command-try-hook))
1147     ;;  This is needed in 19.30<, so that the
1148     ;;  message doesn't get wiped away.
1149     ;;
1150     ;; (unless (fboundp 'post-command-idle-hook)
1151     ;;   (sleep-for 1))
1152     ;;(discard-input)
1153     nil))
1154
1155 ;;; ----------------------------------------------------------------------
1156 ;;; - The functionality is copied from Noah's <friedman@prep.ai.mit.edu>
1157 ;;;   eldoc.el: eldoc-mode-print-current-symbol-info
1158 ;;;
1159 ;;;###autoload
1160 (defun tinytag-post-command ()
1161   "Activates only if `tinytag-:set-database-hook' wakes up.
1162 Show the database definition for the current word under point.
1163
1164 References:
1165
1166   `tinytag-:noerror'
1167   `tinytag-:post-command-hook-wakeup'
1168   `tinytag-:set-database-hook'"
1169   (let* ((tinytag-:noerror  t)
1170          it-is-time)
1171     (when (and (not (ti::compat-executing-macro))
1172                ;; Having this mode operate in the minibuffer
1173                ;; makes it impossible to
1174                ;; see what you're doing.
1175                (not (eq (selected-window) (minibuffer-window)))
1176                (symbolp this-command)
1177                (sit-for 0.50)
1178                ;;  Is this programming language supported?
1179                (run-hook-with-args-until-success
1180                 'tinytag-:set-database-hook))
1181       ;; ... ... ... ... ... ... ... ... ... ... ... ...  wakeup time? . .
1182       ;;  This is not used if we're in 19.34
1183       ;;
1184       (cond
1185        ((fboundp 'run-with-idle-timer)
1186         (setq it-is-time t))
1187        (t
1188         (if (null tinytag-:post-command-hook-counter)
1189             (setq tinytag-:post-command-hook-counter 0))
1190         ;;  Don't wake up all the time.. saves Emacs processing time.
1191         ;;
1192         (setq
1193          it-is-time
1194          (or (eq 0 tinytag-:post-command-hook-wakeup)
1195              (and (not (eq 0  tinytag-:post-command-hook-counter))
1196                   (eq 0 (% tinytag-:post-command-hook-counter
1197                            tinytag-:post-command-hook-wakeup)))))
1198         (incf tinytag-:post-command-hook-counter)
1199         (if it-is-time                  ;do reset
1200             (setq tinytag-:post-command-hook-counter 0))))
1201       ;; ... ... ... ... ... ... ... ... ... ... ... ... ... do action . .
1202       ;;
1203       (if it-is-time
1204           (tinytag-post-command-1)))))
1205
1206 ;;; ----------------------------------------------------------------------
1207 ;;; This is default function. Copy this and  you _have_to_ write your own.
1208 ;;;
1209 (defun tinytag-set-database  ()
1210   "Set correct database values according to buffer content.
1211 Return:
1212   non-nil or nil  was the database set according to buffer?"
1213   (let* ((id    (or (ti::id-info nil 'variable-lookup)
1214                     (symbol-name major-mode)))
1215          ;;    read last word, delete rest
1216          ;;
1217          (table tinytag-:database-setup-table)
1218          elt
1219          did-it)
1220     (cond
1221      ((and (setq elt (ti::list-find table id))
1222            (setq elt (nth 1 elt)))      ;Get second list
1223       (setq tinytag-:database-map        (eval (nth 0 elt))
1224             tinytag-:regexp-to-databases (eval (nth 1 elt))
1225             did-it                       (nth 0 elt)))
1226      (t
1227       ;;  Disable search. We don't know database for this buffer
1228       ;;
1229       (setq tinytag-:database-map         nil
1230             tinytag-:regexp-to-databases  nil)))
1231
1232     (if did-it
1233         (run-hooks 'tinytag-:database-ok-hook))
1234     did-it))
1235
1236 ;;}}}
1237 ;;{{{ example: perl script for creating your own database
1238
1239 ;;; ..................................................... &example-c++ ...
1240
1241 ;;; Here sript which you can use to generate database lines from
1242 ;;; manual page files. I would have included mine, but it uses my private
1243 ;;; perl libs and it's much bigger than Peter's handy script.
1244
1245 ;;* #! /usr/local/perl5/bin/perl
1246 ;;* #
1247 ;;* # Peter Simons <simons@petium.rhein.de>
1248 ;;* # (#) Script to make C++ function database for Emacs tinytag.el
1249 ;;* _
1250 ;;* foreach $filename (@ARGV) {
1251 ;;*     open(INFILE, $filename) || die("Can't open file $filename.");
1252 ;;*     @lines = <INFILE>;
1253 ;;*     chop(@lines);
1254 ;;*     $lines_num = @lines;
1255 ;;*     for ($isSynopsis = 0, $includes = "", $curr_line = "", $i = 0;
1256 ;;* $i < $lines_num; $i++) {
1257 ;;*     $lines[$i] =~ s/.\b//g;
1258 ;;*     if ($lines[$i] =~ /^SYNOPSIS$/) {
1259 ;;*         $isSynopsis = 1;
1260 ;;*         next;
1261 ;;*     }
1262 ;;*     if ($lines[$i] =~ /^DESCRIPTION$/) {
1263 ;;*         $isSynopsis = 0;
1264 ;;*         $includes = "";
1265 ;;*         $curr_line = "";
1266 ;;*         last;
1267 ;;*     }
1268 ;;*     if ($isSynopsis == 1) {
1269 ;;*         if ($lines[$i] =~ /^ *#include/) {
1270 ;;*             $lines[$i] =~ s/^.*<(.*)>$/<$1>/;
1271 ;;*             $includes = $includes . $lines[$i];
1272 ;;*         }
1273 ;;*         elsif ($lines[$i] =~ /^$/) {
1274 ;;*             if ($curr_line ne "") {
1275 ;;*                 $curr_line =~ s/ +/ /g;
1276 ;;*                 if ($includes eq "") {
1277 ;;*                     printf("<none>$curr_line\n");
1278 ;;*                 }
1279 ;;*                 else {
1280 ;;*                     printf("$includes$curr_line\n");
1281 ;;*                 }
1282 ;;*                 $curr_line = "";
1283 ;;*             }
1284 ;;*         }
1285 ;;*         else {
1286 ;;*             $curr_line = $curr_line . $lines[$i];
1287 ;;*         }
1288 ;;*     }
1289 ;;*     }
1290 ;;* }
1291
1292 ;; }}}
1293 ;; {{{ example: HP-UX simple database
1294
1295 ;;; Rip code with with tinylib.el/ti::package-rip-magic
1296 ;;; These databases are automatically intalled when call
1297 ;;; M-x tinytag-install-sample-database-c
1298
1299 ;;* # HP-UX Sample C++ function database
1300 ;;* #
1301 ;;* #   HP 10, The C/C++ function call definitions from man 3C and 2.
1302 ;;* #   Not guarrantees, that are calls are here.
1303 ;;* #
1304 ;;* _
1305 ;;* <dirent.h> DIR *opendir(const char *dirname);
1306 ;;* <dirent.h> int closedir(DIR *dirp);
1307 ;;* <dirent.h> int readdir_r(DIR *dirp, struct dirent *result);
1308 ;;* <dirent.h> long int telldir(DIR *dirp);
1309 ;;* <dirent.h> struct dirent *readdir(DIR *dirp);
1310 ;;* <dirent.h> void rewinddir(DIR *dirp);
1311 ;;* <dirent.h> void seekdir(DIR *dirp, long int loc);
1312 ;;* <regexp.h> extern char *loc1, *loc2, *locs;
1313 ;;* <regexp.h> extern int circf, sed, nbra;
1314 ;;* <regexp.h> int advance(const char *string, const char *expbuf);
1315 ;;* <regexp.h> int step(const char *string, const char *expbuf);
1316 ;;* <stdio.h> FILE *fdopen(int fildes, const char *type);
1317 ;;* <stdio.h> FILE *fopen(const char *pathname, const char *type);
1318 ;;* <stdio.h> FILE *freopen(const char *pathname, const char *type, FILE *stream);
1319 ;;* <stdio.h> FILE *stream);
1320 ;;* <stdio.h> int fclose(FILE *stream);
1321 ;;* <stdio.h> int fclose_unlocked(FILE *stream);
1322 ;;* <stdio.h> int feof(FILE *stream);
1323 ;;* <stdio.h> int feof_unlocked(FILE *stream);
1324 ;;* <stdio.h> int ferror(FILE *stream);
1325 ;;* <stdio.h> int ferror_unlocked(FILE *stream);
1326 ;;* <stdio.h> int fflush(FILE *stream);
1327 ;;* <stdio.h> int fflush_unlocked(FILE *stream);
1328 ;;* <stdio.h> int fscanf(FILE *stream, const char *format, /* [pointer,] */ ...);
1329 ;;* <stdio.h> int fseek(FILE *stream, long int offset, int whence);
1330 ;;* <stdio.h> int fseek_unlocked(FILE *stream, long int offset, int whence);
1331 ;;* <stdio.h> int scanf(const char *format, /* [pointer,] */ ...);
1332 ;;* <stdio.h> int sscanf(const char *s, const char *format, /* [pointer,] */ ...);
1333 ;;* <stdio.h> long int ftell(FILE *stream);
1334 ;;* <stdio.h> long int ftell_unlocked(FILE *stream);
1335 ;;* <stdio.h> size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream);
1336 ;;* <stdio.h> size_t fwrite(const void *ptr, size_t size, size_t nitems, FILE *stream);
1337 ;;* <stdio.h> void clearerr(FILE *stream);
1338 ;;* <stdio.h> void clearerr_unlocked(FILE *stream);
1339 ;;* <stdio.h> void rewind(FILE *stream);
1340 ;;* <stdio.h> void rewind_unlocked(FILE *stream);
1341 ;;* <stdlib.h> int system(const char *command);
1342 ;;* <stdlib.h> void abort(void);
1343 ;;* <string.h><strings.h> char *index(const char *s, int c);
1344 ;;* <string.h><strings.h> char *rindex(const char *s, int c);
1345 ;;* <string.h><strings.h> char *strcat(char *s1, const char *s2);
1346 ;;* <string.h><strings.h> char *strchr(const char *s, int c);
1347 ;;* <string.h><strings.h> char *strcpy(char *s1, const char *s2);
1348 ;;* <string.h><strings.h> char *strdup(const char *s);
1349 ;;* <string.h><strings.h> char *strncat(char *s1, const char *s2, size_t n);
1350 ;;* <string.h><strings.h> char *strncpy(char *s1, const char *s2, size_t n);
1351 ;;* <string.h><strings.h> char *strpbrk(const char *s1, const char *s2);
1352 ;;* <string.h><strings.h> char *strrchr(const char *s, int c);
1353 ;;* <string.h><strings.h> char *strrstr(const char *s1, const char *s2);
1354 ;;* <string.h><strings.h> char *strstr(const char *s1, const char *s2);
1355 ;;* <string.h><strings.h> char *strtok(char *s1, const char *s2);
1356 ;;* <string.h><strings.h> char *strtok_r(char *s1, const char *s2, char **last);
1357 ;;* <string.h><strings.h> int strcasecmp(const char *s1, const char *s2);
1358 ;;* <string.h><strings.h> int strcmp(const char *s1, const char *s2);
1359 ;;* <string.h><strings.h> int strcoll(const char *s1, const char *s2);
1360 ;;* <string.h><strings.h> int strncasecmp(const char *s1, const char *s2, size_t n);
1361 ;;* <string.h><strings.h> int strncmp(const char *s1, const char *s2, size_t n);
1362 ;;* <string.h><strings.h> size_t strcspn(const char *s1, const char *s2);
1363 ;;* <string.h><strings.h> size_t strlen(const char *s);
1364 ;;* <string.h><strings.h> size_t strspn(const char *s1, const char *s2);
1365 ;;* <string.h><strings.h> size_t strxfrm(char *s1, const char *s2, size_t n);
1366 ;;* <time.h> char *asctime(const struct tm *timeptr);
1367 ;;* <time.h> char *ctime(const time_t *timer);
1368 ;;* <time.h> double difftime(time_t time1, time_t time0);
1369 ;;* <time.h> extern char *tzname[2];
1370 ;;* <time.h> extern int daylight;
1371 ;;* <time.h> extern long timezone;
1372 ;;* <time.h> int asctime_r(const struct tm *timeptr, char *buffer, int buflen);
1373 ;;* <time.h> int ctime_r(const time_t *timer, char *buffer, int buflen);
1374 ;;* <time.h> int gmtime_r(const time_t *timer, struct tm *result);
1375 ;;* <time.h> int localtime_r(const time_t *timer, struct tm *result);
1376 ;;* <time.h> struct tm *gmtime(const time_t *timer);
1377 ;;* <time.h> struct tm *localtime(const time_t *timer);
1378 ;;* <time.h> time_t mktime(struct tm *timeptr);
1379 ;;* <time.h> void tzset(void);
1380 ;;* <unistd.h> char *getcwd(char *buf, size_t size);
1381 ;;* _
1382 ;;* #
1383 ;;* # HP 10 man 2 pages
1384 ;;* #
1385 ;;* <sys/stat.h> int stat(const char *path, struct stat *buf);
1386 ;;* <sys/stat.h> int lstat(const char *path, struct stat *buf);
1387 ;;* <sys/stat.h> int fstat(int fildes, struct stat *buf);
1388 ;;* <stdlib.h><unistd.h> void exit(int status);
1389 ;;* <stdlib.h><unistd.h> void _exit(int status);
1390 ;;* <unistd.h> pid_t getpid(void);
1391 ;;* <unistd.h> pid_t getpgrp(void);
1392 ;;* <unistd.h> pid_t getppid(void);
1393 ;;* <unistd.h> pid_t getpgrp2(pid_t pid);
1394 ;;* <unistd.h> int link(const char *path1, const char *path2);
1395 ;;* <time.h> time_t time(time_t *tloc);
1396 ;;* <sys/socket.h> int send(int s, const void *msg, int len, int flags);
1397 ;;* <sys/socket.h> int tolen);
1398 ;;* <sys/socket.h> int sendmsg(int s, const struct msghdr msg[], int flags);
1399 ;;* <unistd.h> extern char **environ;
1400 ;;* <unistd.h> int execv(const char *path, char * const argv[]);
1401 ;;* <unistd.h> int execve(const char *file, char * const argv[], char * const envp[]);
1402 ;;* <unistd.h> int execvp(const char *file, char * const argv[]);
1403 ;;* <unistd.h> unsigned int alarm(unsigned int sec);
1404 ;;* <sys/times.h> clock_t times(struct tms *buffer);
1405 ;;* <errno.h> extern int errno;
1406 ;;* <sys/uio.h><unistd.h> ssize_t write(int fildes, const void *buf, size_t nbyte);
1407 ;;* <sys/uio.h><unistd.h> );
1408 ;;* <unistd.h> pid_t fork(void);
1409 ;;* <unistd.h> int close(int fildes);
1410 ;;* <unistd.h> int unlink(const char *path);
1411 ;;* <unistd.h> extern char **environ;
1412 ;;* <unistd.h> int execv(const char *path, char * const argv[]);
1413 ;;* <unistd.h> int execve(const char *file, char * const argv[], char * const envp[]);
1414 ;;* <unistd.h> int execvp(const char *file, char * const argv[]);
1415 ;;* <time.h> int stime(const time_t *tp);
1416 ;;* <ulimit.h> long ulimit(int cmd, ...);
1417 ;;* <sys/wait.h> pid_t wait(int *stat_loc);
1418 ;;* <sys/wait.h> pid_t waitpid(pid_t pid, int *stat_loc, int options);
1419 ;;* <sys/wait.h> pid_t wait3(int *stat_loc, int options, int *reserved);
1420 ;;* <time.h> int getitimer(int which, struct itimerval *value);
1421 ;;* <unistd.h> int setuid(uid_t uid);
1422 ;;* <unistd.h> int setgid(gid_t gid);
1423 ;;* <unistd.h> int setresuid(uid_t ruid, uid_t euid, uid_t suid);
1424 ;;* <unistd.h> int setresgid(gid_t rgid, gid_t egid, gid_t sgid);
1425 ;;* <signal.h> int kill(pid_t pid, int sig);
1426 ;;* <signal.h> int raise(int sig);
1427 ;;* <signal.h> void (*signal(int sig, void (*action)(int)))(int);
1428 ;;*  int rmdir(const char *path);
1429 ;;* <sys/wait.h> pid_t wait(int *stat_loc);
1430 ;;* <sys/wait.h> pid_t waitpid(pid_t pid, int *stat_loc, int options);
1431 ;;* <sys/wait.h> pid_t wait3(int *stat_loc, int options, int *reserved);
1432 ;;* <unistd.h> int pause(void);
1433 ;;* <symlink.h> int symlink(const char *name1, const char *name2);
1434 ;;* <signal.h> int sigsuspend(const sigset_t *sigmask);
1435 ;;* <sys/uio.h><unistd.h> size_t read(int fildes, void *buf, size_t nbyte);
1436 ;;* <sys/uio.h><unistd.h> );
1437 ;;* <unistd.h> extern char **environ;
1438 ;;* <unistd.h> int execv(const char *path, char * const argv[]);
1439 ;;* <unistd.h> int execve(const char *file, char * const argv[], char * const envp[]);
1440 ;;* <unistd.h> int execvp(const char *file, char * const argv[]);
1441 ;;* <unistd.h> int access(char *path, int amode);
1442 ;;* <sys/stat.h> int mknod(const char *path, mode_t mode, dev_t dev);
1443 ;;* <fcntl.h> int creat(const char *path, mode_t mode);
1444 ;;* <sys/stat.h> int mkdir(const char *path, mode_t mode);
1445 ;;* <sys/uio.h><unistd.h> size_t read(int fildes, void *buf, size_t nbyte);
1446 ;;* <ustat.h> int ustat(dev_t dev, struct ustat *buf);
1447 ;;* <sys/stat.h> int chmod(const char *path, mode_t mode);
1448 ;;* <sys/stat.h> int fchmod(int fildes, mode_t mode)
1449 ;;* _
1450 ;;* # END HP-UX Sample C++ function database
1451
1452 ;; }}}
1453 ;; {{{ example: NetBSD 1.2 database
1454
1455 ;;* # NetBSD Sample 1.2
1456 ;;* # collected by Peter Simons <simons@rhein.de>
1457 ;;* # Thu Oct 17 16:31:10 MET DST 1996
1458 ;;* #
1459 ;;* <assert.h> assert(expression)
1460 ;;* <bitstring.h> bit_clear(bit_str name, int bit)
1461 ;;* <bitstring.h> bit_decl(bit_str name, int nbits)
1462 ;;* <bitstring.h> bit_ffc(bit_str name, int nbits, int *value)
1463 ;;* <bitstring.h> bit_ffs(bit_str name, int nbits, int *value)
1464 ;;* <bitstring.h> bit_nclear(bit_str name, int start, int stop)
1465 ;;* <bitstring.h> bit_nset(bit_str name, int start, int stop)
1466 ;;* <bitstring.h> bit_set(bit_str name, int bit)
1467 ;;* <bitstring.h> bit_test(bit_str name, int bit)
1468 ;;* <bitstring.h> bitstr_size(int nbits)
1469 ;;* <bitstring.h> bitstr_t * bit_alloc(int nbits)
1470 ;;* <ctype.h> int isalnum(int c)
1471 ;;* <ctype.h> int isalpha(int c)
1472 ;;* <ctype.h> int isascii(int c)
1473 ;;* <ctype.h> int isblank(int c)
1474 ;;* <ctype.h> int iscntrl(int c)
1475 ;;* <ctype.h> int isdigit(int c)
1476 ;;* <ctype.h> int isgraph(int c)
1477 ;;* <ctype.h> int islower(int c)
1478 ;;* <ctype.h> int isprint(int c)
1479 ;;* <ctype.h> int ispunct(int c)
1480 ;;* <ctype.h> int isspace(int c)
1481 ;;* <ctype.h> int isupper(int c)
1482 ;;* <ctype.h> int isxdigit(int c)
1483 ;;* <ctype.h> int tolower(int c)
1484 ;;* <ctype.h> int toupper(int c)
1485 ;;* <dirent.h> int getdirentries(int fd, char *buf, int nbytes, long *basep)
1486 ;;* <dlfcn.h> char * dlerror(void)
1487 ;;* <dlfcn.h> int dlclose(void *handle)
1488 ;;* <dlfcn.h> int dlctl(void *handle, int cmd, void *data)
1489 ;;* <dlfcn.h> void * dlopen(char *path, int mode)
1490 ;;* <dlfcn.h> void * dlsym(void *handle, char *symbol)
1491 ;;* <err.h> void err(int eval, const char *fmt, ...)
1492 ;;* <err.h> void errx(int eval, const char *fmt, ...)
1493 ;;* <err.h> void verr(int eval, const char *fmt, va_list args)
1494 ;;* <err.h> void verrx(int eval, const char *fmt, va_list args)
1495 ;;* <err.h> void vwarn(const char *fmt, va_list args)
1496 ;;* <err.h> void vwarnx(const char *fmt, va_list args)
1497 ;;* <err.h> void warn(const char *fmt, ...)
1498 ;;* <err.h> void warnx(const char *fmt, ...)
1499 ;;* <fcntl.h> int fcntl(int fd, int cmd, int arg)
1500 ;;* <fcntl.h> int open(const char *path, int flags, mode_t mode)
1501 ;;* <fcntl.h><kvm.h> int kvm_close(kvm_t *kd)
1502 ;;* <fcntl.h><kvm.h> kvm_t * kvm_open(const char *execfile, const char *corefile, char *swapfile, int flags, const char *errstr)
1503 ;;* <fcntl.h><kvm.h> kvm_t * kvm_openfiles(const char *execfile, const char *corefile, char *swapfile, int flags, char *errbuf)
1504 ;;* <fnmatch.h> int fnmatch(const char *pattern, const char *string, int flags)
1505 ;;* <fstab.h> int setfsent(void)
1506 ;;* <fstab.h> struct fstab * getfsent(void)
1507 ;;* <fstab.h> struct fstab * getfsfile(const char *file)
1508 ;;* <fstab.h> struct fstab * getfsspec(const char *spec)
1509 ;;* <fstab.h> void endfsent(void)
1510 ;;* <glob.h> int glob(const char *pattern, int flags, const int (*errfunc)(const char *, int), glob_t *pglob)
1511 ;;* <glob.h> void globfree(glob_t *pglob)
1512 ;;* <kvm.h> char * kvm_geterr(kvm_t *kd)
1513 ;;* <kvm.h> ssize_t kvm_read(kvm_t *kd, u_long addr, void *buf, size_t nbytes)
1514 ;;* <kvm.h> ssize_t kvm_write(kvm_t *kd, u_long addr, const void *buf, size_t nbytes)
1515 ;;* <kvm.h><nlist.h> int kvm_nlist(kvm_t *kd, struct nlist *nl)
1516 ;;* <kvm.h><sys/kinfo.h><sys/file.h> char * kvm_getfiles(kvm_t *kd, int op, int arg, int *cnt)
1517 ;;* <kvm.h><sys/sysctl.h> char ** kvm_getargv(kvm_t *kd, const struct kinfo_proc *p, int nchr)
1518 ;;* <kvm.h><sys/sysctl.h> char ** kvm_getenvv(kvm_t *kd, const struct kinfo_proc *p, int nchr)
1519 ;;* <kvm.h><sys/sysctl.h> struct kinfo_proc * kvm_getprocs(kvm_t *kd, int op, int arg, int *cnt)
1520 ;;* <limits.h><stdlib.h> int radixsort(u_char **base, int nmemb, u_char *table, u_int endbyte)
1521 ;;* <limits.h><stdlib.h> int sradixsort(u_char **base, int nmemb, u_char *table, u_int endbyte)
1522 ;;* <machine/sysarch.h> int sysarch(int number, char *args)
1523 ;;* <math.h> double acos(double x)
1524 ;;* <math.h> double acosh(double x)
1525 ;;* <math.h> double asin(double x)
1526 ;;* <math.h> double asinh(double x)
1527 ;;* <math.h> double atan(double x)
1528 ;;* <math.h> double atan2(double y, double x)
1529 ;;* <math.h> double atanh(double x)
1530 ;;* <math.h> double cabs(z)
1531 ;;* <math.h> double cbrt(double x)
1532 ;;* <math.h> double ceil(double x)
1533 ;;* <math.h> double copysign(double x, double y)
1534 ;;* <math.h> double cos(double x)
1535 ;;* <math.h> double cosh(double x)
1536 ;;* <math.h> double erf(double x)
1537 ;;* <math.h> double erfc(double x)
1538 ;;* <math.h> double exp(double x)
1539 ;;* <math.h> double expm1(double x)
1540 ;;* <math.h> double fabs(double x)
1541 ;;* <math.h> double floor(double x)
1542 ;;* <math.h> double fmod(double x, double y)
1543 ;;* <math.h> double frexp(double value, int *exp)
1544 ;;* <math.h> double hypot(double x, double y)
1545 ;;* <math.h> double j0(double x)
1546 ;;* <math.h> double j1(double x)
1547 ;;* <math.h> double jn(int n, double x)
1548 ;;* <math.h> double ldexp(double x, int exp)
1549 ;;* <math.h> double lgamma(double x)
1550 ;;* <math.h> double log(double x)
1551 ;;* <math.h> double log10(double x)
1552 ;;* <math.h> double log1p(double x)
1553 ;;* <math.h> double logb(double x)
1554 ;;* <math.h> double modf(double value, double *iptr)
1555 ;;* <math.h> double nextafter(double x, double y)
1556 ;;* <math.h> double pow(double x, double y)
1557 ;;* <math.h> double remainder(double x, double y)
1558 ;;* <math.h> double rint(double x)
1559 ;;* <math.h> double scalb(double x, double n)
1560 ;;* <math.h> double scalbn(double x, int n)
1561 ;;* <math.h> double significand(double x)
1562 ;;* <math.h> double sin(double x)
1563 ;;* <math.h> double sinh(double x)
1564 ;;* <math.h> double sqrt(double x)
1565 ;;* <math.h> double tan(double x)
1566 ;;* <math.h> double tanh(double x)
1567 ;;* <math.h> double y0(double x)
1568 ;;* <math.h> double y1(double x)
1569 ;;* <math.h> double yn(int n, double x)
1570 ;;* <math.h> erff(float x)
1571 ;;* <math.h> extern int signgam;
1572 ;;* <math.h> float acosf(float x)
1573 ;;* <math.h> float acoshf(float x)
1574 ;;* <math.h> float asinf(float x)
1575 ;;* <math.h> float asinhf(float x)
1576 ;;* <math.h> float atan2f(float y, float x)
1577 ;;* <math.h> float atanf(float x)
1578 ;;* <math.h> float atanhf(float x)
1579 ;;* <math.h> float cbrtf(float x)
1580 ;;* <math.h> float ceilf(float x)
1581 ;;* <math.h> float copysignf(float x, float y)
1582 ;;* <math.h> float cosf(float x)
1583 ;;* <math.h> float coshf(float x)
1584 ;;* <math.h> float erfcf(float x)
1585 ;;* <math.h> float expf(float x)
1586 ;;* <math.h> float expm1f(float x)
1587 ;;* <math.h> float fabsf(float x)
1588 ;;* <math.h> float floorf(float x)
1589 ;;* <math.h> float fmodf(float x, float y)
1590 ;;* <math.h> float hypotf(float x, float y)
1591 ;;* <math.h> float j0f(float x)
1592 ;;* <math.h> float j1f(float x)
1593 ;;* <math.h> float jnf(int n, float x)
1594 ;;* <math.h> float lgammaf(float x)
1595 ;;* <math.h> float log10f(float x)
1596 ;;* <math.h> float log1pf(float x)
1597 ;;* <math.h> float logbf(float x)
1598 ;;* <math.h> float logf(float x)
1599 ;;* <math.h> float nextafterf(float x, float y)
1600 ;;* <math.h> float powf(float x, float, y")
1601 ;;* <math.h> float remainderf(float x, float y)
1602 ;;* <math.h> float rintf(float x)
1603 ;;* <math.h> float scalbf(float x, float n)
1604 ;;* <math.h> float scalbnf(float x, int n)
1605 ;;* <math.h> float significand(float x)
1606 ;;* <math.h> float sinf(float x)
1607 ;;* <math.h> float sinhf(float x)
1608 ;;* <math.h> float sqrtf(float x)
1609 ;;* <math.h> float tanf(float x)
1610 ;;* <math.h> float tanhf(float x)
1611 ;;* <math.h> float y0f(float x)
1612 ;;* <math.h> float y1f(float x)
1613 ;;* <math.h> float ynf(int n, float x)
1614 ;;* <math.h> int finite(double x)
1615 ;;* <math.h> int finitef(float x)
1616 ;;* <math.h> int ilogb(double x)
1617 ;;* <math.h> int ilogbf(float x)
1618 ;;* <netdb.h> char * hstrerror(int err)
1619 ;;* <netdb.h> endnetent()
1620 ;;* <netdb.h> endprotoent()
1621 ;;* <netdb.h> setnetent(int stayopen)
1622 ;;* <netdb.h> setprotoent(int stayopen)
1623 ;;* <netdb.h> struct hostent * gethostbyaddr(const char *addr, int len, int type)
1624 ;;* <netdb.h> struct hostent * gethostbyname(const char *name)
1625 ;;* <netdb.h> struct hostent * gethostent(void)
1626 ;;* <netdb.h> struct netent * getnetbyaddr(long net, int type)
1627 ;;* <netdb.h> struct netent * getnetbyname(char *name)
1628 ;;* <netdb.h> struct netent * getnetent()
1629 ;;* <netdb.h> struct protoent * getprotobyname(char *name)
1630 ;;* <netdb.h> struct protoent * getprotobynumber(int proto)
1631 ;;* <netdb.h> struct protoent * getprotoent()
1632 ;;* <netdb.h> struct rpcent * getrpcbyname(char *name)
1633 ;;* <netdb.h> struct rpcent * getrpcbynumber(int number)
1634 ;;* <netdb.h> struct rpcent * getrpcent(void)
1635 ;;* <netdb.h> struct servent * getservbyname(char *name, char *proto)
1636 ;;* <netdb.h> struct servent * getservbyport(int port, proto)
1637 ;;* <netdb.h> struct servent * getservent()
1638 ;;* <netdb.h> void endhostent(void)
1639 ;;* <netdb.h> void endrpcent(void)
1640 ;;* <netdb.h> void endservent(void)
1641 ;;* <netdb.h> void herror(char *string)
1642 ;;* <netdb.h> void sethostent(int stayopen)
1643 ;;* <netdb.h> void setrpcent(int stayopen)
1644 ;;* <netdb.h> void setservent(int stayopen)
1645 ;;* <netinet/if_ether.h> char * ether_ntoa(struct ether_addr *e)
1646 ;;* <netinet/if_ether.h> ether_hostton(char *hostname, struct ether_addr *e)
1647 ;;* <netinet/if_ether.h> ether_line(char *l, struct ether_addr *e, char *hostname)
1648 ;;* <netinet/if_ether.h> ether_ntohost(char *hostname, struct ether_addr *e)
1649 ;;* <netinet/if_ether.h> struct ether_addr * ether_aton(char *s)
1650 ;;* <nl_types.h> char * catgets(nl_catd catd, int set_id, int msg_id, char *s)
1651 ;;* <nl_types.h> int catclose(nl_catd catd)
1652 ;;* <nl_types.h> nl_catd catopen(const char *name, int oflag)
1653 ;;* <nl_types.h><langinfo.h> char * nl_langinfo(nl_item item)
1654 ;;* <nlist.h> int nlist(const char *filename, struct nlist *nl)
1655 ;;* <none> char * getusershell(void)
1656 ;;* <none> char * lfind(const void *key, const void *base, size_t *nelp, size_t width, int (*compar)(void *, void *))
1657 ;;* <none> char * lsearch(const void *key, const void *base, size_t *nelp, size_t width, int (*compar)(void *, void *))
1658 ;;* <none> char * tgetstr(char *id, char **area)
1659 ;;* <none> char * tgoto(char *cm, destcol, destline)
1660 ;;* <none> char * timezone(int zone, int dst)
1661 ;;* <none> char *crypt(const char *key, const char *setting)
1662 ;;* <none> getloadavg(double loadavg[], int nelem)
1663 ;;* <none> getpw(uid, char *buf)
1664 ;;* <none> group_from_gid(gid_t gid, int nogroup)
1665 ;;* <none> int des_cipher(const char *in, char *out, long salt, int count)
1666 ;;* <none> int des_setkey(const char *key)
1667 ;;* <none> int encrypt(char *block, int flag)
1668 ;;* <none> int getnetgrent(char **host, char **user, char **domain)
1669 ;;* <none> int getrpcport(char *host, int prognum, int versnum, int proto)
1670 ;;* <none> int innetgr(const char *netgroup, const char *host, const char *user, )
1671 ;;* <none> int isinf(double)
1672 ;;* <none> int isnan(double)
1673 ;;* <none> int profil(char *samples, size_t size, u_long offset, u_int scale)
1674 ;;* <none> int rexec(ahost, int inport, char *user, char *passwd, char *cmd, int *fd2p)
1675 ;;* <none> int setkey(const char *key)
1676 ;;* <none> mode_t getmode(const void *set, mode_t mode)
1677 ;;* <none> moncontrol(int mode)
1678 ;;* <none> monstartup(u_long *lowpc, u_long *highpc)
1679 ;;* <none> nice(int incr)
1680 ;;* <none> tgetent(char *bp, char *name)
1681 ;;* <none> tgetflag(char *id)
1682 ;;* <none> tgetnum(char *id)
1683 ;;* <none> user_from_uid(uid_t uid, int nouser)
1684 ;;* <none> void * setmode(const char *mode_str)
1685 ;;* <none> void * shutdownhook_establish(void (*fn)(void *), void *arg)
1686 ;;* <none> void doshutdownhooks(void)
1687 ;;* <none> void endnetgrent(void)
1688 ;;* <none> void endusershell(void)
1689 ;;* <none> void inittodr(time_t base)
1690 ;;* <none> void resettodr(void)
1691 ;;* <none> void setnetgrent(const char *netgroup)
1692 ;;* <none> void setusershell(void)
1693 ;;* <none> void shutdownhook_disestablish(void *cookie)
1694 ;;* <none> void tputs(register char *cp, int affcnt, int (*outc)())
1695 ;;* <none> void tzset()
1696 ;;* <pwd.h><unistd.h> char * getpass(const char *prompt)
1697 ;;* <regexp.h> int regexec(const regexp *prog, const char *string)
1698 ;;* <regexp.h> regexp * regcomp(const char *exp)
1699 ;;* <regexp.h> void regsub(const regexp *prog, const char *source, char *dest)
1700 ;;* <search.h> struct qelem { struct qelem *q_forw; struct qelem *q_back; char q_data[]; }; void insque(struct qelem *elem, struct qelem *pred)
1701 ;;* <search.h> void remque(struct qelem *elem)
1702 ;;* <setjmp.h> int _setjmp(jmp_buf env)
1703 ;;* <setjmp.h> int setjmp(jmp_buf env)
1704 ;;* <setjmp.h> int sigsetjmp(sigjmp_buf env, int savemask)
1705 ;;* <setjmp.h> void _longjmp(jmp_buf env, int val)
1706 ;;* <setjmp.h> void longjmp(jmp_buf env, int val)
1707 ;;* <setjmp.h> void longjmperror(void)
1708 ;;* <setjmp.h> void siglongjmp(sigjmp_buf env, int val)
1709 ;;* <sgtty.h> gtty(int fd, struct sgttyb *buf)
1710 ;;* <sgtty.h> stty(int fd, struct sgttyb *buf)
1711 ;;* <signal.h> int kill(pid_t pid, int sig)
1712 ;;* <signal.h> int killpg(pid_t pgrp, int sig)
1713 ;;* <signal.h> int raise(int sig)
1714 ;;* <signal.h> int sigaction(int sig, const struct sigaction *act, struct sigaction *oact)
1715 ;;* <signal.h> int sigaddset(sigset_t *set, int signo)
1716 ;;* <signal.h> int sigblock(int mask)
1717 ;;* <signal.h> int sigdelset(sigset_t *set, int signo)
1718 ;;* <signal.h> int sigemptyset(sigset_t *set)
1719 ;;* <signal.h> int sigfillset(sigset_t *set)
1720 ;;* <signal.h> int siginterrupt(int sig, int flag)
1721 ;;* <signal.h> int sigismember(sigset_t *set, int signo)
1722 ;;* <signal.h> int sigmask(signum)
1723 ;;* <signal.h> int sigpause(int sigmask)
1724 ;;* <signal.h> int sigpending(sigset_t *set)
1725 ;;* <signal.h> int sigprocmask(int how, const sigset_t *set, sigset_t *oset)
1726 ;;* <signal.h> int sigreturn(struct sigcontext *scp)
1727 ;;* <signal.h> int sigsetmask(int mask)
1728 ;;* <signal.h> int sigsuspend(const sigset_t *sigmask)
1729 ;;* <signal.h> sigmask(signum)
1730 ;;* <signal.h> sigvec(int sig, struct sigvec *vec, struct sigvec *ovec)
1731 ;;* <signal.h> struct sigaction { void (*sa_handler)(); sigset_t sa_mask; int sa_flags; };
1732 ;;* <signal.h> struct sigcontext { int sc_onstack; int sc_mask; int sc_sp; int sc_fp; int sc_ap; int sc_pc; int sc_ps; };
1733 ;;* <signal.h> struct sigvec { void (*sv_handler)(); sigset_t sv_mask; int sv_flags; };
1734 ;;* <signal.h> void (*signal(int sig, void (*func)()))()
1735 ;;* <stdarg.h> type va_arg(va_list ap, type)
1736 ;;* <stdarg.h> void va_end(va_list ap)
1737 ;;* <stdarg.h> void va_start(va_list ap, last)
1738 ;;* <stdio.h> FILE * fdopen(int fildes, char *mode)
1739 ;;* <stdio.h> FILE * fopen(char *path, char *mode)
1740 ;;* <stdio.h> FILE * freopen(char *path, char *mode, FILE *stream)
1741 ;;* <stdio.h> FILE * fropen(void *cookie, int (*readfn)(void *, char *, int))
1742 ;;* <stdio.h> FILE * funopen(void *cookie, int (*readfn)(void *, char *, int), int (*writefn)(void *, const char *, int), fpos_t (*seekfn)(void *, fpos_t, int), int (*closefn)(void *))
1743 ;;* <stdio.h> FILE * fwopen(void *cookie, int (*writefn)(void *, char *, int))
1744 ;;* <stdio.h> FILE * popen(const char *command, const char *type)
1745 ;;* <stdio.h> FILE * tmpfile(void)
1746 ;;* <stdio.h> FILE *stdin; FILE *stdout; FILE *stderr;
1747 ;;* <stdio.h> char * ctermid(char *buf)
1748 ;;* <stdio.h> char * cuserid(char *buf)
1749 ;;* <stdio.h> char * fgetln(FILE *stream, size_t *len)
1750 ;;* <stdio.h> char * fgets(char *str, size_t size, FILE *stream)
1751 ;;* <stdio.h> char * gets(char *str)
1752 ;;* <stdio.h> char * tempnam(const char *tmpdir, const char *prefix)
1753 ;;* <stdio.h> char * tmpnam(char *str)
1754 ;;* <stdio.h> int fclose(FILE *stream)
1755 ;;* <stdio.h> int feof(FILE *stream)
1756 ;;* <stdio.h> int ferror(FILE *stream)
1757 ;;* <stdio.h> int fflush(FILE *stream)
1758 ;;* <stdio.h> int fgetc(FILE *stream)
1759 ;;* <stdio.h> int fgetpos(FILE *stream, fpos_t *pos)
1760 ;;* <stdio.h> int fileno(FILE *stream)
1761 ;;* <stdio.h> int fprintf(FILE *stream, const char *format, ...)
1762 ;;* <stdio.h> int fpurge(FILE *stream)
1763 ;;* <stdio.h> int fputc(int c, FILE *stream)
1764 ;;* <stdio.h> int fputs(const char *str, FILE *stream)
1765 ;;* <stdio.h> int fscanf(FILE *stream, const char *format, ...)
1766 ;;* <stdio.h> int fseek(FILE *stream, long offset, int whence)
1767 ;;* <stdio.h> int fsetpos(FILE *stream, fpos_t *pos)
1768 ;;* <stdio.h> int getc(FILE *stream)
1769 ;;* <stdio.h> int getchar()
1770 ;;* <stdio.h> int getsubopt(char **optionp, char * const *tokens, char **valuep)
1771 ;;* <stdio.h> int getw(FILE *stream)
1772 ;;* <stdio.h> int pclose(FILE *stream)
1773 ;;* <stdio.h> int printf(const char *format, ...)
1774 ;;* <stdio.h> int putc(int c, FILE *stream)
1775 ;;* <stdio.h> int putchar(int c)
1776 ;;* <stdio.h> int puts(const char *str)
1777 ;;* <stdio.h> int putw(int w, FILE *stream)
1778 ;;* <stdio.h> int remove(const char *path)
1779 ;;* <stdio.h> int rename(const char *from, const char *to)
1780 ;;* <stdio.h> int scanf(const char *format, ...)
1781 ;;* <stdio.h> int setlinebuf(FILE *stream)
1782 ;;* <stdio.h> int setvbuf(FILE *stream, char *buf, int mode, size_t size)
1783 ;;* <stdio.h> int snprintf(char *str, size_t size, const char *format, ...)
1784 ;;* <stdio.h> int sprintf(char *str, const char *format, ...)
1785 ;;* <stdio.h> int sscanf(const char *str, const char *format, ...)
1786 ;;* <stdio.h> int ungetc(int c, FILE *stream)
1787 ;;* <stdio.h> long ftell(FILE *stream)
1788 ;;* <stdio.h> size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
1789 ;;* <stdio.h> size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
1790 ;;* <stdio.h> void clearerr(FILE *stream)
1791 ;;* <stdio.h> void perror(const char *string)
1792 ;;* <stdio.h> void rewind(FILE *stream)
1793 ;;* <stdio.h> void setbuf(FILE *stream, char *buf)
1794 ;;* <stdio.h> void setbuffer(FILE *stream, char *buf, size_t size)
1795 ;;* <stdio.h><stdarg.h> int vfprintf(FILE *stream, const char *format, va_list ap)
1796 ;;* <stdio.h><stdarg.h> int vfscanf(FILE *stream, const char *format, va_list ap)
1797 ;;* <stdio.h><stdarg.h> int vprintf(const char *format, va_list ap)
1798 ;;* <stdio.h><stdarg.h> int vscanf(const char *format, va_list ap)
1799 ;;* <stdio.h><stdarg.h> int vsnprintf(char *str, size_t size, const char *format, va_list ap)
1800 ;;* <stdio.h><stdarg.h> int vsprintf(char *str, char *format, va_list ap)
1801 ;;* <stdio.h><stdarg.h> int vsscanf(const char *str, const char *format, va_list ap)
1802 ;;* <stdlib.h> char * cgetcap(char *buf, char *cap, char type)
1803 ;;* <stdlib.h> char * devname(dev_t dev, mode_t type)
1804 ;;* <stdlib.h> char * getbsize(int *headerlenp, long *blocksizep)
1805 ;;* <stdlib.h> char * getenv(const char *name)
1806 ;;* <stdlib.h> char * initstate(unsigned seed, char *state, int n)
1807 ;;* <stdlib.h> char * setstate(char *state)
1808 ;;* <stdlib.h> daemon(int nochdir, int noclose)
1809 ;;* <stdlib.h> div_t div(int num, int denom)
1810 ;;* <stdlib.h> double atof(const char *nptr)
1811 ;;* <stdlib.h> double drand48(void)
1812 ;;* <stdlib.h> double erand48(unsigned short xseed[3])
1813 ;;* <stdlib.h> double strtod(const char *nptr, char **endptr)
1814 ;;* <stdlib.h> int abs(int j)
1815 ;;* <stdlib.h> int atexit(void (*function)(void))
1816 ;;* <stdlib.h> int atoi(const char *nptr)
1817 ;;* <stdlib.h> int cgetclose(void)
1818 ;;* <stdlib.h> int cgetent(char **buf, char **db_array, char *name)
1819 ;;* <stdlib.h> int cgetfirst(char **buf, char **db_array)
1820 ;;* <stdlib.h> int cgetmatch(char *buf, char *name)
1821 ;;* <stdlib.h> int cgetnext(char **buf, char **db_array)
1822 ;;* <stdlib.h> int cgetnum(char *buf, char *cap, long *num)
1823 ;;* <stdlib.h> int cgetset(char *ent)
1824 ;;* <stdlib.h> int cgetstr(char *buf, char *cap, char **str)
1825 ;;* <stdlib.h> int cgetustr(char *buf, char *cap, char **str)
1826 ;;* <stdlib.h> int heapsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *))
1827 ;;* <stdlib.h> int mergesort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *))
1828 ;;* <stdlib.h> int putenv(const char *string)
1829 ;;* <stdlib.h> int rand(void)
1830 ;;* <stdlib.h> int setenv(const char *name, const char *value, int overwrite)
1831 ;;* <stdlib.h> int system(const char *string)
1832 ;;* <stdlib.h> ldiv_t ldiv(long num, long denom)
1833 ;;* <stdlib.h> long atol(const char *nptr)
1834 ;;* <stdlib.h> long jrand48(unsigned short xseed[3])
1835 ;;* <stdlib.h> long labs(long j)
1836 ;;* <stdlib.h> long lrand48(void)
1837 ;;* <stdlib.h> long mrand48(void)
1838 ;;* <stdlib.h> long nrand48(unsigned short xseed[3])
1839 ;;* <stdlib.h> long random(void)
1840 ;;* <stdlib.h> qdiv_t qdiv(quad_t num, quad_t denom)
1841 ;;* <stdlib.h> quad_t qabs(quad_t j)
1842 ;;* <stdlib.h> unsigned short * seed48(unsigned short xseed[3])
1843 ;;* <stdlib.h> void * alloca(size_t size)
1844 ;;* <stdlib.h> void * bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar) (const void *, const void *))
1845 ;;* <stdlib.h> void * calloc(size_t nelem, size_t elsize)
1846 ;;* <stdlib.h> void * calloc(size_t nmemb, size_t size)
1847 ;;* <stdlib.h> void * malloc(size_t size)
1848 ;;* <stdlib.h> void * realloc(void *ptr, size_t size)
1849 ;;* <stdlib.h> void abort(void)
1850 ;;* <stdlib.h> void exit(int status)
1851 ;;* <stdlib.h> void free(void *ptr)
1852 ;;* <stdlib.h> void lcong48(unsigned short p[7])
1853 ;;* <stdlib.h> void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *))
1854 ;;* <stdlib.h> void setproctitle(const char *fmt, ...)
1855 ;;* <stdlib.h> void srand(unsigned seed)
1856 ;;* <stdlib.h> void srand48(long seed)
1857 ;;* <stdlib.h> void srandom(unsigned seed)
1858 ;;* <stdlib.h> void unsetenv(const char *name)
1859 ;;* <stdlib.h><limits.h> long strtol(const char *nptr, char **endptr, int base)
1860 ;;* <stdlib.h><limits.h> unsigned long strtoul(const char *nptr, char **endptr, int base)
1861 ;;* <stdlib.h><limits.h><sys/types.h><stdlib.h><limits.h> quad_t strtoq(const char *nptr, char **endptr, int base)
1862 ;;* <stdlib.h><limits.h><sys/types.h><stdlib.h><limits.h> u_quad_t strtouq(const char *nptr, char **endptr, int base)
1863 ;;* <string.h> char * index(const char *s, int c)
1864 ;;* <string.h> char * rindex(const char *s, int c)
1865 ;;* <string.h> char * strcat(char *s, const char * append)
1866 ;;* <string.h> char * strcat(char *s, const char *append)
1867 ;;* <string.h> char * strchr(const char *s, int c)
1868 ;;* <string.h> char * strcpy(char *dst, const char *src)
1869 ;;* <string.h> char * strdup(const char *str)
1870 ;;* <string.h> char * strerror(int errno)
1871 ;;* <string.h> char * strerror(int errnum)
1872 ;;* <string.h> char * strncat(char *s, const char *append, size_t count)
1873 ;;* <string.h> char * strncpy(char *dst, const char *src, size_t count)
1874 ;;* <string.h> char * strncpy(char *dst, const char *src, size_t len)
1875 ;;* <string.h> char * strpbrk(const char *s, const char *charset)
1876 ;;* <string.h> char * strrchr(const char *s, int c)
1877 ;;* <string.h> char * strsep(char **stringp, char *delim)
1878 ;;* <string.h> char * strsep(char **stringp, const char *delim)
1879 ;;* <string.h> char * strsignal(int sig)
1880 ;;* <string.h> char * strstr(const char *big, const char *little)
1881 ;;* <string.h> char * strtok(char *s, const char *delim)
1882 ;;* <string.h> char * strtok(char *str, const char *sep)
1883 ;;* <string.h> int bcmp(const void *b1, const void *b2, size_t len)
1884 ;;* <string.h> int ffs(int value)
1885 ;;* <string.h> int memcmp(const void *b1, const void *b2, size_t len)
1886 ;;* <string.h> int strcasecmp(const char *s1, const char *s2)
1887 ;;* <string.h> int strcmp(const char *s1, const char *s2)
1888 ;;* <string.h> int strcoll(const char *s1, const char *s2)
1889 ;;* <string.h> int strncasecmp(const char *s1, const char *s2, size_t count)
1890 ;;* <string.h> int strncasecmp(const char *s1, const char *s2, size_t len)
1891 ;;* <string.h> int strncmp(const char *s1, const char *s2, size_t count)
1892 ;;* <string.h> int strncmp(const char *s1, const char *s2, size_t len)
1893 ;;* <string.h> size_t strcspn(const char *s, const char *charset)
1894 ;;* <string.h> size_t strlen(const char *s)
1895 ;;* <string.h> size_t strspn(const char *s, const char *charset)
1896 ;;* <string.h> size_t strxfrm(char *dst, const char *src, size_t n)
1897 ;;* <string.h> void * memccpy(void *dst, const void *src, int c, size_t len)
1898 ;;* <string.h> void * memchr(const void *b, int c, size_t len)
1899 ;;* <string.h> void * memcpy(void *dst, const void *src, size_t len)
1900 ;;* <string.h> void * memmove(void *dst, const void *src, size_t len)
1901 ;;* <string.h> void * memset(void *b, int c, size_t len)
1902 ;;* <string.h> void bcopy(const void *src, void *dst, size_t len)
1903 ;;* <string.h> void bzero(void *b, size_t len)
1904 ;;* <string.h> void strmode(mode_t mode, char *bp)
1905 ;;* <string.h> void swab(const void *src, void *dst, size_t len)
1906 ;;* <sys/disklabel.h> struct disklabel * getdiskbyname(const char *name)
1907 ;;* <sys/file.h> int flock(int fd, int operation)
1908 ;;* <sys/ioctl.h> int ioctl(int d, unsigned long request, char *argp)
1909 ;;* <sys/param.h> u_long htonl(u_long hostlong)
1910 ;;* <sys/param.h> u_long ntohl(u_long netlong)
1911 ;;* <sys/param.h> u_short htons(u_short hostshort)
1912 ;;* <sys/param.h> u_short ntohs(u_short netshort)
1913 ;;* <sys/param.h><stdlib.h> char * realpath(const char *pathname, char resolvedname[MAXPATHLEN])
1914 ;;* <sys/param.h><sys/mount.h> int fstatfs(int fd, struct statfs *buf)
1915 ;;* <sys/param.h><sys/mount.h> int mount(const char *type, const char *dir, int flags, void *data)
1916 ;;* <sys/param.h><sys/mount.h> int statfs(const char *path, struct statfs *buf)
1917 ;;* <sys/param.h><sys/mount.h> int unmount(const char *dir, int flags)
1918 ;;* <sys/param.h><sys/sysctl.h> int sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp, void *newp, size_t newlen)
1919 ;;* <sys/param.h><sys/types.h><unistd.h> int getgroups(int gidsetlen, gid_t *gidset)
1920 ;;* <sys/param.h><sys/ucred.h><sys/mount.h> int getfsstat(struct statfs *buf, long bufsize, int flags)
1921 ;;* <sys/param.h><sys/ucred.h><sys/mount.h> int getmntinfo(struct statfs **mntbufp, int flags)
1922 ;;* <sys/param.h><unistd.h> int setgroups(int ngroups, const gid_t *gidset)
1923 ;;* <sys/queue.h> CIRCLEQ_ENTRY(TYPE)
1924 ;;* <sys/queue.h> CIRCLEQ_HEAD(HEADNAME, TYPE)
1925 ;;* <sys/queue.h> CIRCLEQ_INIT(CIRCLEQ_HEAD *head)
1926 ;;* <sys/queue.h> CIRCLEQ_INSERT_AFTER(CIRCLEQ_HEAD *head, TYPE *listelm, TYPE *elm, CIRCLEQ_ENTRY NAME)
1927 ;;* <sys/queue.h> CIRCLEQ_INSERT_BEFORE(CIRCLEQ_HEAD *head, TYPE *listelm, TYPE *elm, CIRCLEQ_ENTRY NAME)
1928 ;;* <sys/queue.h> CIRCLEQ_INSERT_HEAD(CIRCLEQ_HEAD *head, TYPE *elm, CIRCLEQ_ENTRY NAME)
1929 ;;* <sys/queue.h> CIRCLEQ_INSERT_TAIL(CIRCLEQ_HEAD *head, TYPE *elm, CIRCLEQ_ENTRY NAME)
1930 ;;* <sys/queue.h> CIRCLEQ_REMOVE(CIRCLEQ_HEAD *head, TYPE *elm, CIRCLEQ_ENTRY NAME)
1931 ;;* <sys/queue.h> LIST_ENTRY(TYPE)
1932 ;;* <sys/queue.h> LIST_HEAD(HEADNAME, TYPE)
1933 ;;* <sys/queue.h> LIST_INIT(LIST_HEAD *head)
1934 ;;* <sys/queue.h> LIST_INSERT_AFTER(TYPE *listelm, TYPE *elm, LIST_ENTRY NAME)
1935 ;;* <sys/queue.h> LIST_INSERT_BEFORE(TYPE *listelm, TYPE *elm, LIST_ENTRY NAME)
1936 ;;* <sys/queue.h> LIST_INSERT_HEAD(LIST_HEAD *head, TYPE *elm, LIST_ENTRY NAME)
1937 ;;* <sys/queue.h> LIST_REMOVE(TYPE *elm, LIST_ENTRY NAME)
1938 ;;* <sys/queue.h> TAILQ_ENTRY(TYPE)
1939 ;;* <sys/queue.h> TAILQ_HEAD(HEADNAME, TYPE)
1940 ;;* <sys/queue.h> TAILQ_INIT(TAILQ_HEAD *head)
1941 ;;* <sys/queue.h> TAILQ_INSERT_AFTER(TAILQ_HEAD *head, TYPE *listelm, TYPE *elm, TAILQ_ENTRY NAME)
1942 ;;* <sys/queue.h> TAILQ_INSERT_BEFORE(TYPE *listelm, TYPE *elm, TAILQ_ENTRY NAME)
1943 ;;* <sys/queue.h> TAILQ_INSERT_HEAD(TAILQ_HEAD *head, TYPE *elm, TAILQ_ENTRY NAME)
1944 ;;* <sys/queue.h> TAILQ_INSERT_TAIL(TAILQ_HEAD *head, TYPE *elm, TAILQ_ENTRY NAME)
1945 ;;* <sys/queue.h> TAILQ_REMOVE(TAILQ_HEAD *head, TYPE *elm, TAILQ_ENTRY NAME)
1946 ;;* <sys/reboot.h> void boot(int howto)
1947 ;;* <sys/resource.h><kvm.h> int kvm_getloadavg(kvm_t *kd, double loadavg[], int nelem)
1948 ;;* <sys/signal.h> extern char *sys_siglist[]; extern char *sys_signame[];
1949 ;;* <sys/signal.h> void psignal(unsigned sig, const char *s)
1950 ;;* <sys/socket.h> int getpeername(int s, struct sockaddr *name, int *namelen)
1951 ;;* <sys/socket.h> int getsockname(int s, struct sockaddr *name, int *namelen)
1952 ;;* <sys/socket.h> int listen(int s, int backlog)
1953 ;;* <sys/socket.h> int shutdown(int s, int how)
1954 ;;* <sys/socket.h><netinet/in.h><arpa/inet.h> char * inet_ntoa(struct in_addr in)
1955 ;;* <sys/socket.h><netinet/in.h><arpa/inet.h> int inet_aton(const char *cp, struct in_addr *pin)
1956 ;;* <sys/socket.h><netinet/in.h><arpa/inet.h> struct in_addr inet_makeaddr(int net, int lna)
1957 ;;* <sys/socket.h><netinet/in.h><arpa/inet.h> unsigned long inet_addr(const char *cp)
1958 ;;* <sys/socket.h><netinet/in.h><arpa/inet.h> unsigned long inet_lnaof(struct in_addr in)
1959 ;;* <sys/socket.h><netinet/in.h><arpa/inet.h> unsigned long inet_netof(struct in_addr in)
1960 ;;* <sys/socket.h><netinet/in.h><arpa/inet.h> unsigned long inet_network(const char *cp)
1961 ;;* <sys/stat.h><unistd.h> int chflags(const char *path, u_long flags)
1962 ;;* <sys/stat.h><unistd.h> int fchflags(int fd, u_long flags)
1963 ;;* <sys/syscall.h><unistd.h> int __syscall(quad_t number, ...)
1964 ;;* <sys/syscall.h><unistd.h> int syscall(int number, ...)
1965 ;;* <sys/time.h> int adjtime(const struct timeval *delta, struct timeval *olddelta)
1966 ;;* <sys/time.h> int futimes(int fd, const struct timeval *times)
1967 ;;* <sys/time.h> int getitimer(int which, struct itimerval *value)
1968 ;;* <sys/time.h> int gettimeofday(struct timeval *tp, struct timezone *tzp)
1969 ;;* <sys/time.h> int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue)
1970 ;;* <sys/time.h> int settimeofday(const struct timeval *tp, const struct timezone *tzp)
1971 ;;* <sys/time.h> int utimes(const char *file, const struct timeval *times)
1972 ;;* <sys/time.h><sys/resource.h> int getpriority(int which, int who)
1973 ;;* <sys/time.h><sys/resource.h> int getrusage(int who, struct rusage *rusage)
1974 ;;* <sys/time.h><sys/resource.h> int setpriority(int which, int who, int prio)
1975 ;;* <sys/times.h> clock_t times(struct tms *tp)
1976 ;;* <sys/types.h> char * sbrk(int incr)
1977 ;;* <sys/types.h> char *ctime(clock) const time_t *clock;
1978 ;;* <sys/types.h> double difftime(time1, time0) time_t time1; time_t time0;
1979 ;;* <sys/types.h> int bindresvport(int sd, struct sockaddr_in **sin)
1980 ;;* <sys/types.h> int brk(const char *addr)
1981 ;;* <sys/types.h> int setrgid(gid_t gid)
1982 ;;* <sys/types.h> int setruid(uid_t uid)
1983 ;;* <sys/types.h><bm.h> bm_pat * bm_comp(u_char *pattern, size_t patlen, u_char freq[256]);
1984 ;;* <sys/types.h><bm.h> u_char * bm_exec(bm_pat *pdesc, u_char *text, size_t len);
1985 ;;* <sys/types.h><bm.h> void bm_free(bm_pat *pdesc);
1986 ;;* <sys/types.h><dirent.h> DIR * opendir(const char *filename)
1987 ;;* <sys/types.h><dirent.h> int alphasort(const void *d1, const void *d2)
1988 ;;* <sys/types.h><dirent.h> int closedir(DIR *dirp)
1989 ;;* <sys/types.h><dirent.h> int dirfd(DIR *dirp)
1990 ;;* <sys/types.h><dirent.h> int scandir(const char *dirname, struct dirent ***namelist, int (*select)(struct dirent *), int (*compar)(const void *, const void *))
1991 ;;* <sys/types.h><dirent.h> long telldir(const DIR *dirp)
1992 ;;* <sys/types.h><dirent.h> struct dirent * readdir(DIR *dirp)
1993 ;;* <sys/types.h><dirent.h> void rewinddir(DIR *dirp)
1994 ;;* <sys/types.h><dirent.h> void seekdir(DIR *dirp, long loc)
1995 ;;* <sys/types.h><grp.h> int setgroupent(int stayopen)
1996 ;;* <sys/types.h><grp.h> struct group * getgrent(void)
1997 ;;* <sys/types.h><grp.h> struct group * getgrgid(gid_t gid)
1998 ;;* <sys/types.h><grp.h> struct group * getgrnam(const char *name)
1999 ;;* <sys/types.h><grp.h> void endgrent(void)
2000 ;;* <sys/types.h><grp.h> void setgrent(void)
2001 ;;* <sys/types.h><limits.h><db.h> DB * dbopen(const char *file, int flags, int mode, DBTYPE type, const void *openinfo);
2002 ;;* <sys/types.h><machine/segments.h><machine/sysarch.h> int i386_get_ldt(int start_sel, union descriptor *descs, int num_sels)
2003 ;;* <sys/types.h><machine/segments.h><machine/sysarch.h> int i386_set_ldt(int start_sel, union descriptor *descs, int num_sels)
2004 ;;* <sys/types.h><machine/sysarch.h> int i386_get_ioperm(u_long *iomap)
2005 ;;* <sys/types.h><machine/sysarch.h> int i386_iopl(int iopl)
2006 ;;* <sys/types.h><machine/sysarch.h> int i386_set_ioperm(u_long *iomap)
2007 ;;* <sys/types.h><netinet/in.h><arpa/nameser.h><resolv.h> dn_comp(char *exp_dn, char *comp_dn, int length, char **dnptrs, char **lastdnptr)
2008 ;;* <sys/types.h><netinet/in.h><arpa/nameser.h><resolv.h> dn_expand(u_char *msg, u_char *eomorig, u_char *comp_dn, u_char *exp_dn, int length)
2009 ;;* <sys/types.h><netinet/in.h><arpa/nameser.h><resolv.h> res_init()
2010 ;;* <sys/types.h><netinet/in.h><arpa/nameser.h><resolv.h> res_mkquery(int op, char *dname, int class, int type, char *data, int datalen, struct rrec *newrr, char *buf, int buflen)
2011 ;;* <sys/types.h><netinet/in.h><arpa/nameser.h><resolv.h> res_query(char *dname, int class, int type, u_char *answer, int anslen)
2012 ;;* <sys/types.h><netinet/in.h><arpa/nameser.h><resolv.h> res_search(char *dname, int class, int type, u_char *answer, int anslen)
2013 ;;* <sys/types.h><netinet/in.h><arpa/nameser.h><resolv.h> res_send(char *msg, int msglen, char *answer, int anslen)
2014 ;;* <sys/types.h><netns/ns.h> char * ns_ntoa(struct ns_addr ns)
2015 ;;* <sys/types.h><netns/ns.h> struct ns_addr ns_addr(char *cp)
2016 ;;* <sys/types.h><pwd.h> int setpassent(int stayopen)
2017 ;;* <sys/types.h><pwd.h> struct passwd * getpwent(void)
2018 ;;* <sys/types.h><pwd.h> struct passwd * getpwnam(const char *login)
2019 ;;* <sys/types.h><pwd.h> struct passwd * getpwuid(uid_t uid)
2020 ;;* <sys/types.h><pwd.h> void endpwent(void)
2021 ;;* <sys/types.h><pwd.h> void setpwent(void)
2022 ;;* <sys/types.h><regex.h> int regcomp(regex_t *preg, const char *pattern, int cflags);
2023 ;;* <sys/types.h><regex.h> int regexec(const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags);
2024 ;;* <sys/types.h><regex.h> size_t regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size);
2025 ;;* <sys/types.h><regex.h> void regfree(regex_t *preg);
2026 ;;* <sys/types.h><rpcsvc/ypclnt.h><rpcsvc/yp_prot.h> char * yperr_string(int incode)
2027 ;;* <sys/types.h><rpcsvc/ypclnt.h><rpcsvc/yp_prot.h> int yp_all(char *indomain, char *inmap, struct ypall_callback *incallback)
2028 ;;* <sys/types.h><rpcsvc/ypclnt.h><rpcsvc/yp_prot.h> int yp_bind(char *dom)
2029 ;;* <sys/types.h><rpcsvc/ypclnt.h><rpcsvc/yp_prot.h> int yp_first(char *indomain, char *inmap, char **outkey, int *outkeylen, char **outval, int *outvallen)
2030 ;;* <sys/types.h><rpcsvc/ypclnt.h><rpcsvc/yp_prot.h> int yp_get_default_domain(char **domp)
2031 ;;* <sys/types.h><rpcsvc/ypclnt.h><rpcsvc/yp_prot.h> int yp_master(char *indomain, char *inmap, char **outname)
2032 ;;* <sys/types.h><rpcsvc/ypclnt.h><rpcsvc/yp_prot.h> int yp_match(char *indomain, char *inmap, const char *inkey, int inkeylen, char **outval, int *outvallen)
2033 ;;* <sys/types.h><rpcsvc/ypclnt.h><rpcsvc/yp_prot.h> int yp_next(char *indomain, char *inmap, char *inkey, int inkeylen, char **outkey, int *outkeylen, char **outval, int *outvallen)
2034 ;;* <sys/types.h><rpcsvc/ypclnt.h><rpcsvc/yp_prot.h> int yp_order(char *indomain, char *inmap, char *outorder)
2035 ;;* <sys/types.h><rpcsvc/ypclnt.h><rpcsvc/yp_prot.h> int ypprot_err(unsigned int incode)
2036 ;;* <sys/types.h><rpcsvc/ypclnt.h><rpcsvc/yp_prot.h> void yp_unbind(char *dom)
2037 ;;* <sys/types.h><signal.h> int sigaltstack(const struct sigaltstack *ss, struct sigaltstack *oss)
2038 ;;* <sys/types.h><signal.h><machine/segments.h><machine/sysarch.h><machine/vm86.h> int i386_vm86(struct vm86_struct *vmcp)
2039 ;;* <sys/types.h><sys/disklabel.h><sys/disk.h> struct disk * disk_find(char *)
2040 ;;* <sys/types.h><sys/disklabel.h><sys/disk.h> void disk_attach(struct disk *)
2041 ;;* <sys/types.h><sys/disklabel.h><sys/disk.h> void disk_busy(struct disk *)
2042 ;;* <sys/types.h><sys/disklabel.h><sys/disk.h> void disk_detatch(struct disk *)
2043 ;;* <sys/types.h><sys/disklabel.h><sys/disk.h> void disk_init(void)
2044 ;;* <sys/types.h><sys/disklabel.h><sys/disk.h> void disk_resetstat(struct disk *)
2045 ;;* <sys/types.h><sys/disklabel.h><sys/disk.h> void disk_unbusy(struct disk *)
2046 ;;* <sys/types.h><sys/ipc.h> key_t ftok(const char *path, char id);
2047 ;;* <sys/types.h><sys/ipc.h><sys/msg.h> int msgctl(int msqid, int cmd, struct msqid_ds *buf)
2048 ;;* <sys/types.h><sys/ipc.h><sys/msg.h> int msgget(key_t key, int msgflg)
2049 ;;* <sys/types.h><sys/ipc.h><sys/msg.h> int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg)
2050 ;;* <sys/types.h><sys/ipc.h><sys/msg.h> int msgsnd(int msqid, void *msgp, size_t msgsz, int msgflg)
2051 ;;* <sys/types.h><sys/ipc.h><sys/msg.h> int shmctl(int shmid, int cmd, struct shmid_ds *buf)
2052 ;;* <sys/types.h><sys/ipc.h><sys/sem.h> int semctl(int semid, int semnum, int cmd, union semun arg)
2053 ;;* <sys/types.h><sys/ipc.h><sys/sem.h> int semget(key_t key, int nsems, int semflg)
2054 ;;* <sys/types.h><sys/ipc.h><sys/sem.h> int semop(int semid, struct sembuf *sops, int nsops)
2055 ;;* <sys/types.h><sys/ipc.h><sys/shm.h> int shmdt(void *shmaddr)
2056 ;;* <sys/types.h><sys/ipc.h><sys/shm.h> int shmget(key_t key, int size, int shmflg)
2057 ;;* <sys/types.h><sys/ipc.h><sys/shm.h> void * shmat(int shmid, void *shmaddr, int shmflg)
2058 ;;* <sys/types.h><sys/mman.h> caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t offset)
2059 ;;* <sys/types.h><sys/mman.h> int madvise(caddr_t addr, size_t len, int behav)
2060 ;;* <sys/types.h><sys/mman.h> int mincore(caddr_t addr, size_t len, char *vec)
2061 ;;* <sys/types.h><sys/mman.h> int mlock(caddr_t addr, size_t len)
2062 ;;* <sys/types.h><sys/mman.h> int mprotect(caddr_t addr, size_t len, int prot)
2063 ;;* <sys/types.h><sys/mman.h> int msync(caddr_t addr, size_t len)
2064 ;;* <sys/types.h><sys/mman.h> int munlock(caddr_t addr, size_t len)
2065 ;;* <sys/types.h><sys/mman.h> int munmap(caddr_t addr, size_t len)
2066 ;;* <sys/types.h><sys/mount.h> int getfh(const char *path, fhandle_t *fhp)
2067 ;;* <sys/types.h><sys/ptrace.h> int ptrace(int request, pid_t pid, caddr_t addr, int data)
2068 ;;* <sys/types.h><sys/socket.h> int accept(int s, struct sockaddr *addr, int *addrlen)
2069 ;;* <sys/types.h><sys/socket.h> int bind(int s, const struct sockaddr *name, int namelen)
2070 ;;* <sys/types.h><sys/socket.h> int connect(int s, const struct sockaddr *name, int namelen)
2071 ;;* <sys/types.h><sys/socket.h> int getsockopt(int s, int level, int optname, void *optval, int *optlen)
2072 ;;* <sys/types.h><sys/socket.h> int setsockopt(int s, int level, int optname, const void *optval, int optlen)
2073 ;;* <sys/types.h><sys/socket.h> int socket(int domain, int type, int protocol)
2074 ;;* <sys/types.h><sys/socket.h> int socketpair(int d, int type, int protocol, int *sv)
2075 ;;* <sys/types.h><sys/socket.h> ssize_t recv(int s, void *buf, size_t len, int flags)
2076 ;;* <sys/types.h><sys/socket.h> ssize_t recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, int *fromlen)
2077 ;;* <sys/types.h><sys/socket.h> ssize_t recvmsg(int s, struct msghdr *msg, int flags)
2078 ;;* <sys/types.h><sys/socket.h> ssize_t send(int s, const void *msg, size_t len, int flags)
2079 ;;* <sys/types.h><sys/socket.h> ssize_t sendmsg(int s, const struct msghdr *msg, int flags)
2080 ;;* <sys/types.h><sys/socket.h> ssize_t sendto(int s, const void *msg, size_t len, int flags, const struct sockaddr *to, int tolen)
2081 ;;* <sys/types.h><sys/socket.h><net/if_dl.h> char * link_ntoa(const struct sockaddr_dl *sdl)
2082 ;;* <sys/types.h><sys/socket.h><net/if_dl.h> void link_addr(const char *addr, struct sockaddr_dl *sdl)
2083 ;;* <sys/types.h><sys/stat.h> int chmod(const char *path, mode_t mode)
2084 ;;* <sys/types.h><sys/stat.h> int fchmod(int fd, mode_t mode)
2085 ;;* <sys/types.h><sys/stat.h> int fstat(int fd, struct stat *sb)
2086 ;;* <sys/types.h><sys/stat.h> int lstat(const char *path, struct stat *sb)
2087 ;;* <sys/types.h><sys/stat.h> int mkdir(const char *path, mode_t mode)
2088 ;;* <sys/types.h><sys/stat.h> int mkfifo(const char *path, mode_t mode)
2089 ;;* <sys/types.h><sys/stat.h> int stat(const char *path, struct stat *sb)
2090 ;;* <sys/types.h><sys/stat.h> mode_t umask(mode_t numask)
2091 ;;* <sys/types.h><sys/stat.h><fcntl.h> int creat(const char *path, mode_t mode)
2092 ;;* <sys/types.h><sys/stat.h><fts.h> FTS * fts_open(char * const *path_argv, int options, int *compar(const FTSENT **, const FTSENT **))
2093 ;;* <sys/types.h><sys/stat.h><fts.h> FTSENT * fts_children(FTS *ftsp, int options)
2094 ;;* <sys/types.h><sys/stat.h><fts.h> FTSENT * fts_read(FTS *ftsp)
2095 ;;* <sys/types.h><sys/stat.h><fts.h> int fts_close(FTS *ftsp)
2096 ;;* <sys/types.h><sys/stat.h><fts.h> int fts_set(FTS ftsp, FTSENT *f, int options)
2097 ;;* <sys/types.h><sys/systm.h> int copyin(void *uaddr, void *kaddr, size_t len)
2098 ;;* <sys/types.h><sys/systm.h> int copyinstr(void *uaddr, void *kaddr, size_t len, size_t *done)
2099 ;;* <sys/types.h><sys/systm.h> int copyout(void *kaddr, void *uaddr, size_t len)
2100 ;;* <sys/types.h><sys/systm.h> int copyoutstr(void *kaddr, void *uaddr, size_t len, size_t *done)
2101 ;;* <sys/types.h><sys/systm.h> int copystr(void *kfaddr, void *kdaddr, size_t len, size_t *done)
2102 ;;* <sys/types.h><sys/systm.h> int fubyte(void *base)
2103 ;;* <sys/types.h><sys/systm.h> int fuswintr(void *base)
2104 ;;* <sys/types.h><sys/systm.h> int fusword(void *base)
2105 ;;* <sys/types.h><sys/systm.h> int fuword(void *base)
2106 ;;* <sys/types.h><sys/systm.h> int subyte(void *base)
2107 ;;* <sys/types.h><sys/systm.h> int suswintr(void *base)
2108 ;;* <sys/types.h><sys/systm.h> int susword(void *base)
2109 ;;* <sys/types.h><sys/systm.h> int suword(void *base)
2110 ;;* <sys/types.h><sys/time.h><sys/resource.h> int getrlimit(int resource, struct rlimit *rlp)
2111 ;;* <sys/types.h><sys/time.h><sys/resource.h> int setrlimit(int resource, const struct rlimit *rlp)
2112 ;;* <sys/types.h><sys/time.h><unistd.h> FD_CLR(fd, &fdset)
2113 ;;* <sys/types.h><sys/time.h><unistd.h> FD_ISSET(fd, &fdset)
2114 ;;* <sys/types.h><sys/time.h><unistd.h> FD_SET(fd, &fdset)
2115 ;;* <sys/types.h><sys/time.h><unistd.h> FD_ZERO(&fdset)
2116 ;;* <sys/types.h><sys/time.h><unistd.h> int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)
2117 ;;* <sys/types.h><sys/timeb.h> int ftime(struct timeb *tp)
2118 ;;* <sys/types.h><sys/uio.h><unistd.h> ssize_t read(int d, void *buf, size_t nbytes)
2119 ;;* <sys/types.h><sys/uio.h><unistd.h> ssize_t readv(int d, const struct iovec *iov, int iovcnt)
2120 ;;* <sys/types.h><sys/uio.h><unistd.h> ssize_t write(int d, const void *buf, size_t nbytes)
2121 ;;* <sys/types.h><sys/uio.h><unistd.h> ssize_t writev(int d, const struct iovec *iov, int iovcnt)
2122 ;;* <sys/types.h><sys/wait.h> pid_t wait(int *status)
2123 ;;* <sys/types.h><sys/wait.h> pid_t waitpid(pid_t wpid, int *status, int options)
2124 ;;* <sys/types.h><sys/wait.h><sys/time.h><sys/resource.h> pid_t wait3(int *status, int options, struct rusage *rusage)
2125 ;;* <sys/types.h><sys/wait.h><sys/time.h><sys/resource.h> pid_t wait4(pid_t wpid, int *status, int options, struct rusage *rusage)
2126 ;;* <sys/types.h><time.h> char *asctime(tm) const struct tm *tm;
2127 ;;* <sys/types.h><time.h> struct tm *gmtime(clock) const time_t *clock;
2128 ;;* <sys/types.h><time.h> struct tm *localtime(clock) const time_t *clock;
2129 ;;* <sys/types.h><time.h> time_t mktime(tm) struct tm *tm;
2130 ;;* <sys/types.h><time.h> time_t posix2time(t) time_t t
2131 ;;* <sys/types.h><time.h> time_t time2posix(t) time_t t
2132 ;;* <sys/types.h><unistd.h> gid_t getegid(void)
2133 ;;* <sys/types.h><unistd.h> gid_t getgid(void)
2134 ;;* <sys/types.h><unistd.h> int chown(const char *path, uid_t owner, gid_t group)
2135 ;;* <sys/types.h><unistd.h> int fchown(int fd, uid_t owner, gid_t group)
2136 ;;* <sys/types.h><unistd.h> int setegid(gid_t egid)
2137 ;;* <sys/types.h><unistd.h> int seteuid(uid_t euid)
2138 ;;* <sys/types.h><unistd.h> int setgid(gid_t gid)
2139 ;;* <sys/types.h><unistd.h> int setuid(uid_t uid)
2140 ;;* <sys/types.h><unistd.h> int tcsetpgrp(int fd, pid_t pgrp_id)
2141 ;;* <sys/types.h><unistd.h> pid_t fork(void)
2142 ;;* <sys/types.h><unistd.h> pid_t getpid(void)
2143 ;;* <sys/types.h><unistd.h> pid_t getppid(void)
2144 ;;* <sys/types.h><unistd.h> pid_t setsid(void)
2145 ;;* <sys/types.h><unistd.h> pid_t tcgetpgrp(int fd)
2146 ;;* <sys/types.h><unistd.h> uid_t geteuid(void)
2147 ;;* <sys/types.h><unistd.h> uid_t getuid(void)
2148 ;;* <sys/types.h><utime.h> int utime(const char *file, const struct utimbuf *timep)
2149 ;;* <sys/utsname.h> int uname(struct utsname *name)
2150 ;;* <sys/vlimit.h> vlimit(resource, value)
2151 ;;* <sys/vtimes.h> vtimes(struct vtimes *par_vm, struct vtimes *ch_vm)
2152 ;;* <syslog.h><varargs.h> int setlogmask(int maskpri)
2153 ;;* <syslog.h><varargs.h> void closelog(void)
2154 ;;* <syslog.h><varargs.h> void openlog(const char *ident, int logopt, int facility)
2155 ;;* <syslog.h><varargs.h> void syslog(int priority, const char *message, ...)
2156 ;;* <syslog.h><varargs.h> void vsyslog(int priority, const char *message, va_list args)
2157 ;;* <termios.h> int cfsetispeed(struct termios *t, speed_t speed)
2158 ;;* <termios.h> int cfsetospeed(struct termios *t, speed_t speed)
2159 ;;* <termios.h> int tcdrain(int fd)
2160 ;;* <termios.h> int tcflow(int fd, int action)
2161 ;;* <termios.h> int tcflush(int fd, int action)
2162 ;;* <termios.h> int tcgetattr(int fd, struct termios *t)
2163 ;;* <termios.h> int tcsendbreak(int fd, int len)
2164 ;;* <termios.h> int tcsetattr(int fd, int action, const struct termios *t)
2165 ;;* <termios.h> speed_t cfgetispeed(const struct termios *t)
2166 ;;* <termios.h> speed_t cfgetospeed(const struct termios *t)
2167 ;;* <termios.h> void cfmakeraw(struct termios *t)
2168 ;;* <termios.h> void cfsetspeed(struct termios *t, speed_t speed)
2169 ;;* <time.h> clock_t clock(void)
2170 ;;* <time.h> size_t strftime(char *buf, size_t maxsize, const char *format, const struct tm *timeptr)
2171 ;;* <time.h> time_t time(time_t *tloc)
2172 ;;* <ttyent.h> int endttyent(void)
2173 ;;* <ttyent.h> int setttyent(void)
2174 ;;* <ttyent.h> struct ttyent * getttyent()
2175 ;;* <ttyent.h> struct ttyent * getttynam(char *name)
2176 ;;* <unistd.h> char * getcwd(char *buf, size_t size)
2177 ;;* <unistd.h> char * getlogin(void)
2178 ;;* <unistd.h> char * getwd(char *buf)
2179 ;;* <unistd.h> char * mktemp(char *template)
2180 ;;* <unistd.h> char * re_comp(const char *s)
2181 ;;* <unistd.h> char * ttyname(int fd)
2182 ;;* <unistd.h> char * valloc(unsigned size)
2183 ;;* <unistd.h> extern char **environ;
2184 ;;* <unistd.h> extern char *optarg; extern int optind; extern int optopt; extern int opterr; extern int optreset;
2185 ;;* <unistd.h> int access(const char *path, int mode)
2186 ;;* <unistd.h> int acct(const char *file)
2187 ;;* <unistd.h> int chdir(const char *path)
2188 ;;* <unistd.h> int chroot(const char *dirname)
2189 ;;* <unistd.h> int close(int d)
2190 ;;* <unistd.h> int dup(int oldd)
2191 ;;* <unistd.h> int dup2(int oldd, int newd)
2192 ;;* <unistd.h> int execl(const char *path, const char *arg, ...)
2193 ;;* <unistd.h> int execle(const char *path, const char *arg, ..., char *const envp[])
2194 ;;* <unistd.h> int execlp(const char *file, const char *arg, ...)
2195 ;;* <unistd.h> int exect(const char *path, char *const argv[], char *const envp[])
2196 ;;* <unistd.h> int execv(const char *path, char *const argv[])
2197 ;;* <unistd.h> int execve(const char *path, char *const argv[], char *const envp[])
2198 ;;* <unistd.h> int execvp(const char *file, char *const argv[])
2199 ;;* <unistd.h> int fchdir(int fd)
2200 ;;* <unistd.h> int fsync(int fd)
2201 ;;* <unistd.h> int ftruncate(int fd, off_t length)
2202 ;;* <unistd.h> int getdomainname(char *name, int namelen)
2203 ;;* <unistd.h> int getdtablesize(void)
2204 ;;* <unistd.h> int getgrouplist(const char *name, gid_t basegid, gid_t *groups, int *ngroups)
2205 ;;* <unistd.h> int gethostname(char *name, int namelen)
2206 ;;* <unistd.h> int getopt(int argc, char * const *argv, const char *optstring)
2207 ;;* <unistd.h> int getpagesize(void)
2208 ;;* <unistd.h> int initgroups(const char *name, gid_t basegid)
2209 ;;* <unistd.h> int iruserok(u_int32_t raddr, int superuser, const char *ruser, const char *luser)
2210 ;;* <unistd.h> int isatty(int fd)
2211 ;;* <unistd.h> int link(const char *name1, const char *name2)
2212 ;;* <unistd.h> int mknod(const char *path, mode_t mode, dev_t dev)
2213 ;;* <unistd.h> int mkstemp(char *template)
2214 ;;* <unistd.h> int pause(void)
2215 ;;* <unistd.h> int pipe(int *fildes)
2216 ;;* <unistd.h> int rcmd(char **ahost, int inport, const char *locuser, const char *remuser, const char *cmd, int *fd2p)
2217 ;;* <unistd.h> int re_exec(const char *s)
2218 ;;* <unistd.h> int readlink(const char *path, char *buf, int bufsiz)
2219 ;;* <unistd.h> int revoke(const char *path)
2220 ;;* <unistd.h> int rmdir(const char *path)
2221 ;;* <unistd.h> int rresvport(int *port)
2222 ;;* <unistd.h> int ruserok(const char *rhost, int superuser, const char *ruser, const char *luser)
2223 ;;* <unistd.h> int setdomainname(const char *name, int namelen)
2224 ;;* <unistd.h> int sethostid(long hostid)
2225 ;;* <unistd.h> int sethostname(const char *name, int namelen)
2226 ;;* <unistd.h> int setlogin(const char *name)
2227 ;;* <unistd.h> int setpgid(pid_t pid, pid_t pgrp)
2228 ;;* <unistd.h> int setpgrp(pid_t pid, pid_t pgrp)
2229 ;;* <unistd.h> int setregid(int rgid, int egid)
2230 ;;* <unistd.h> int setreuid(int ruid, int euid)
2231 ;;* <unistd.h> int swapon(const char *special)
2232 ;;* <unistd.h> int symlink(const char *name1, const char *name2)
2233 ;;* <unistd.h> int truncate(const char *path, off_t length)
2234 ;;* <unistd.h> int ttyslot()
2235 ;;* <unistd.h> int unlink(const char *path)
2236 ;;* <unistd.h> long fpathconf(int fd, int name)
2237 ;;* <unistd.h> long gethostid(void)
2238 ;;* <unistd.h> long pathconf(const char *path, int name)
2239 ;;* <unistd.h> long sysconf(int name)
2240 ;;* <unistd.h> off_t lseek(int fildes, off_t offset, int whence)
2241 ;;* <unistd.h> pid_t getpgrp(void)
2242 ;;* <unistd.h> pid_t vfork(void)
2243 ;;* <unistd.h> size_t confstr(int name, char *buf, size_t len)
2244 ;;* <unistd.h> u_int ualarm(u_int microseconds, u_int interval)
2245 ;;* <unistd.h> unsigned int alarm(unsigned int seconds)
2246 ;;* <unistd.h> unsigned int sleep(unsigned int seconds)
2247 ;;* <unistd.h> void _exit(int status)
2248 ;;* <unistd.h> void sync(void)
2249 ;;* <unistd.h> void usleep(u_int microseconds)
2250 ;;* <unistd.h><nfs/nfs.h> int nfssvc(int flags, void *argstructp)
2251 ;;* <unistd.h><sys/reboot.h> int reboot(int howto)
2252 ;;* <util.h> #indlude <pwd.h>
2253 ;;* <util.h> int getmaxpartitions(void)
2254 ;;* <util.h> int getrawpartition(void)
2255 ;;* <util.h> int login_tty(int fd)
2256 ;;* <util.h> int logout(const char *line)
2257 ;;* <util.h> int pw_lock(int retries)
2258 ;;* <util.h> int pw_mkdb()
2259 ;;* <util.h> int pw_scan(char *bp, struct passwd *pw, int *flags)
2260 ;;* <util.h> pid_t forkpty(int *amaster, char *name, struct termios *termp, struct winsize *winp)
2261 ;;* <util.h> void login(struct utmp *ut)
2262 ;;* <util.h> void logwtmp(const char *line, const char *name, const char *host)
2263 ;;* <util.h> void openpty(int *amaster, int *aslave, char *name, struct termios *termp, struct winsize *winp)
2264 ;;* <util.h> void pw_abort()
2265 ;;* <util.h> void pw_copy(int ffd, int tfd, struct passwd *pw)
2266 ;;* <util.h> void pw_edit(int notsetuid, const char *filename)
2267 ;;* <util.h> void pw;;* _
2268 ;;* # END NetBSD Sample C++ function database
2269
2270 ;;}}}
2271
2272 (tinytag-install)
2273
2274 (provide   'tinytag)
2275 (run-hooks 'tinytag-:load-hook)
2276
2277 ;;; tinytag.el ends here