headache-1.03/0040755002701000512160000000000010031764546013071 5ustar simonetcristalheadache-1.03/Depend0100644002701000512160000000104110031764546014204 0ustar simonetcristalconfig_lex.cmo: config.cmo config_parse.cmi config_lex.cmx: config.cmx config_parse.cmx config_parse.cmo: config.cmo model.cmo config_parse.cmi config_parse.cmx: config.cmx model.cmx config_parse.cmi main.cmo: config.cmo config_builtin.cmo config_lex.cmo config_parse.cmi \ info.cmo model.cmo main.cmx: config.cmx config_builtin.cmx config_lex.cmx config_parse.cmx \ info.cmx model.cmx mkconfig.cmo: config.cmo config_lex.cmo config_parse.cmi mkconfig.cmx: config.cmx config_lex.cmx config_parse.cmx config_parse.cmi: model.cmo headache-1.03/example0100644002701000512160000000055010031764546014444 0ustar simonetcristal Headache Vincent Simonet, Projet Cristal, INRIA Rocquencourt Copyright 2002 Institut National de Recherche en Informatique et en Automatique. All rights reserved. This file is distributed under the terms of the GNU Library General Public License. Vincent.Simonet@inria.fr http://cristal.inria.fr/~simonet/ headache-1.03/config.ml0100644002701000512160000000443710031764546014675 0ustar simonetcristal(**************************************************************************) (* *) (* Headache *) (* *) (* Vincent Simonet, Projet Cristal, INRIA Rocquencourt *) (* *) (* Copyright 2002 *) (* Institut National de Recherche en Informatique et en Automatique. *) (* All rights reserved. This file is distributed under the terms of *) (* the GNU Library General Public License. *) (* *) (* Vincent.Simonet@inria.fr http://cristal.inria.fr/~simonet/ *) (* *) (**************************************************************************) (**************************************************************************) (* *) (* Header *) (* Automatic generation of files headers *) (* *) (* Vincent Simonet, Projet Cristal, INRIA Rocquencourt *) (* *) (* Copyright 2002 *) (* Institut National de Recherche en Informatique et en Automatique. *) (* All rights reserved. This file is distributed under the terms of *) (* the GNU Library General Public License. *) (* *) (* Vincent.Simonet@inria.fr http://cristal.inria.fr/~simonet/ *) (* *) (**************************************************************************) (* $Id: config.ml,v 1.2 2003/11/13 16:08:44 simonet Exp $ *) exception Error of string * int * int headache-1.03/LICENSE0100644002701000512160000006144410031764546014104 0ustar simonetcristal GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! headache-1.03/config_builtin0100644002701000512160000000064410031764546016010 0ustar simonetcristal# Builtin configuration file ".*\\.ml[il]?" -> frame open:"(*" line:"*" close:"*)" | ".*\\.fml[i]?" -> frame open:"(*" line:"*" close:"*)" | ".*\\.mly" -> frame open:"/*" line:"*" close:"*/" | ".*\\.[ch]" -> frame open:"/*" line:"*" close:"*/" | ".*Makefile.*" -> frame open:"#" line:"#" close:"#" | ".*README.*" -> frame open:"*" line:"*" close:"*" | ".*LICENSE.*" -> frame open:"*" line:"*" close:"*" headache-1.03/Makefile.in0100644002701000512160000000346010031764546015136 0ustar simonetcristal# $Id: Makefile.in,v 1.2 2003/11/13 16:08:44 simonet Exp $ ########################################################################### # Configuration # Objective Caml bytecode compiler OCAMLC=@OCAMLC@ OCAMLOPT=@OCAMLOPT@ OCAMLDEP=@OCAMLDEP@ OCAMLYACC=@OCAMLYACC@ OCAMLLEX=@OCAMLLEX@ # Installation directory INSTALLDIR=@INSTALLDIR@ GENERATED= config_parse.mli config_parse.ml config_lex.ml config_builtin.ml MKCONFIG.CU=model config config_parse config_lex mkconfig MKCONFIG.CMO=$(MKCONFIG.CU:%=%.cmo) CU=info model config config_parse config_lex config_builtin main CMO=$(CU:%=%.cmo) ########################################################################### # Main rules default: $(MAKE) all @echo @echo ------------------------------------------------------------ @echo Compilation seems to succeed @echo You can install the software. As a superuser, do @echo \'make install\' @echo ------------------------------------------------------------ all: headache clean: rm -f $(GENERATED) rm -f *.cm* headache *.output mkconfig rm -f Makefile config.cache config.log config.status install: headache cp -f headache $(INSTALLDIR) bootstrap: headache ./headache -h example *.ml* Makefile depend: $(GENERATED) $(OCAMLDEP) *.ml *.mli > Depend headache: $(CMO) ocamlc -o $@ unix.cma str.cma $^ mkconfig: $(MKCONFIG.CMO) ocamlc -o $@ unix.cma str.cma $^ config_builtin.ml: config_builtin mkconfig ./mkconfig ######################################################################### # Generic compilation rules .SUFFIXES: .ml .mli .mll .mly .cma .cmi .cmo .cmx .cmxa .mli.cmi: $(OCAMLC) $(OCAMLC_FLAGS) -c $< .ml.cmo: $(OCAMLC) $(OCAMLC_FLAGS) -c $< .ml.cmx: $(OCAMLOPT) $(OCAMLOPT_FLAGS) -c $< .mll.ml: $(OCAMLLEX) $< .mly.mli: $(OCAMLYACC) -v $< .mly.ml: $(OCAMLYACC) -v $< include Depend headache-1.03/config_lex.mll0100644002701000512160000001500310031764546015710 0ustar simonetcristal(**************************************************************************) (* *) (* Headache *) (* *) (* Vincent Simonet, Projet Cristal, INRIA Rocquencourt *) (* *) (* Copyright 2002 *) (* Institut National de Recherche en Informatique et en Automatique. *) (* All rights reserved. This file is distributed under the terms of *) (* the GNU Library General Public License. *) (* *) (* Vincent.Simonet@inria.fr http://cristal.inria.fr/~simonet/ *) (* *) (**************************************************************************) (**************************************************************************) (* *) (* Header *) (* Automatic generation of files headers *) (* *) (* Vincent Simonet, Projet Cristal, INRIA Rocquencourt *) (* *) (* Copyright 2002 *) (* Institut National de Recherche en Informatique et en Automatique. *) (* All rights reserved. This file is distributed under the terms of *) (* the GNU Library General Public License. *) (* *) (* Vincent.Simonet@inria.fr http://cristal.inria.fr/~simonet/ *) (* *) (**************************************************************************) (**************************************************************************) (* *) (* Header *) (* Automatic generation of files headers *) (* *) (* Vincent Simonet, Projet Cristal, INRIA Rocquencourt *) (* *) (* Copyright 2002 *) (* Institut National de Recherche en Informatique et en Automatique. *) (* All rights reserved. This file is distributed under the terms of *) (* the GNU Library General Public License. *) (* *) (* Vincent.Simonet@inria.fr http://cristal.inria.fr/~simonet/ *) (* *) (**************************************************************************) (* $Id: config_lex.mll,v 1.2 2003/11/13 16:08:44 simonet Exp $ *) { open Printf open Config_parse (* To buffer string literals *) let initial_string_buffer = String.create 256 let string_buff = ref initial_string_buffer let string_index = ref 0 let reset_string_buffer () = string_buff := initial_string_buffer; string_index := 0 let store_string_char c = if !string_index >= String.length (!string_buff) then begin let new_buff = String.create (String.length (!string_buff) * 2) in String.blit (!string_buff) 0 new_buff 0 (String.length (!string_buff)); string_buff := new_buff end; String.unsafe_set (!string_buff) (!string_index) c; incr string_index let get_stored_string () = let s = String.sub (!string_buff) 0 (!string_index) in string_buff := initial_string_buffer; s (* To translate escape sequences *) let char_for_backslash = match Sys.os_type with | "Unix" | "Win32" | "Cygwin" -> begin function | 'n' -> '\010' | 'r' -> '\013' | 'b' -> '\008' | 't' -> '\009' | c -> c end | "MacOS" -> begin function | 'n' -> '\013' | 'r' -> '\010' | 'b' -> '\008' | 't' -> '\009' | c -> c end | x -> (* TEMPORARY Error "Unknown system type" *) assert false let char_for_decimal_code lexbuf i = let c = 100 * (Char.code(Lexing.lexeme_char lexbuf i) - 48) + 10 * (Char.code(Lexing.lexeme_char lexbuf (i+1)) - 48) + (Char.code(Lexing.lexeme_char lexbuf (i+2)) - 48) in if c < 0 || c > 255 then raise (Config.Error(sprintf "illegal escape %s" (Lexing.lexeme lexbuf), Lexing.lexeme_start lexbuf, Lexing.lexeme_end lexbuf)) else Char.chr c (* To store the position of the beginning of a string *) let string_start_pos = ref 0 } let blank = [' ' '\010' '\013' '\009' '\012'] let identchar = ['A'-'Z' 'a'-'z' '_' '\192'-'\214' '\216'-'\246' '\248'-'\255' '\'' '0'-'9'] rule token = parse blank + { token lexbuf } | "->" { ARROW } | "|" { PIPE } | ":" { COLON } | "#" [^ '\010' '\013']* ['\010' '\013'] { token lexbuf } | identchar+ { STRING (Lexing.lexeme lexbuf) } | "\"" { reset_string_buffer(); let string_start = Lexing.lexeme_start lexbuf in string_start_pos := string_start; string lexbuf; lexbuf.Lexing.lex_start_pos <- string_start - lexbuf.Lexing.lex_abs_pos; STRING (get_stored_string()) } | eof { EOF } | _ { raise (Config.Error (sprintf "Illegal character %c" ((Lexing.lexeme lexbuf).[0]), Lexing.lexeme_start lexbuf, Lexing.lexeme_end lexbuf)) } and string = parse '"' { () } | '\\' ("\010" | "\013" | "\013\010") [' ' '\009'] * { string lexbuf } | '\\' ['\\' '"' 'n' 't' 'b' 'r'] { store_string_char(char_for_backslash(Lexing.lexeme_char lexbuf 1)); string lexbuf } | '\\' ['0'-'9'] ['0'-'9'] ['0'-'9'] { store_string_char(char_for_decimal_code lexbuf 1); string lexbuf } | eof { raise (Config.Error ("Unterminated string", !string_start_pos, !string_start_pos+1)) } | _ { store_string_char(Lexing.lexeme_char lexbuf 0); string lexbuf } headache-1.03/config_parse.mly0100644002701000512160000001216510031764546016255 0ustar simonetcristal/**************************************************************************/ /* */ /* Headache */ /* */ /* Vincent Simonet, Projet Cristal, INRIA Rocquencourt */ /* */ /* Copyright 2002 */ /* Institut National de Recherche en Informatique et en Automatique. */ /* All rights reserved. This file is distributed under the terms of */ /* the GNU Library General Public License. */ /* */ /* Vincent.Simonet@inria.fr http://cristal.inria.fr/~simonet/ */ /* */ /**************************************************************************/ /**************************************************************************/ /* */ /* Header */ /* Automatic generation of files headers */ /* */ /* Vincent Simonet, Projet Cristal, INRIA Rocquencourt */ /* */ /* Copyright 2002 */ /* Institut National de Recherche en Informatique et en Automatique. */ /* All rights reserved. This file is distributed under the terms of */ /* the GNU Library General Public License. */ /* */ /* Vincent.Simonet@inria.fr http://cristal.inria.fr/~simonet/ */ /* */ /**************************************************************************/ /**************************************************************************/ /* */ /* Header */ /* Automatic generation of files headers */ /* */ /* Vincent Simonet, Projet Cristal, INRIA Rocquencourt */ /* */ /* Copyright 2002 */ /* Institut National de Recherche en Informatique et en Automatique. */ /* All rights reserved. This file is distributed under the terms of */ /* the GNU Library General Public License. */ /* */ /* Vincent.Simonet@inria.fr http://cristal.inria.fr/~simonet/ */ /* */ /**************************************************************************/ /* $Id: config_parse.mly,v 1.2 2003/11/13 16:08:44 simonet Exp $ */ %{ open Printf %} %token ARROW %token COLON %token EOF %token PIPE %token STRING %start configfile %type <(Str.regexp * Model.generator) list > configfile %start boot %type <(string * string * (string * string) list) list> boot %% configfile: opt_pipe item_list EOF { List.rev $2 } ; opt_pipe: /*empty*/ { () } | PIPE { () } ; item_list: item { $1 :: [] } | item_list PIPE item { $3 :: $1 } ; item: STRING ARROW STRING parameters { let regexp = try Str.regexp ("^" ^ $1 ^ "$") with Failure msg -> raise (Config.Error (sprintf "Illegal regexp: %s" msg, Parsing.rhs_start 1, Parsing.rhs_end 1)) in let model = try Model.find $3 with Not_found -> raise (Config.Error (sprintf "Unknown model: %s" $3, Parsing.rhs_start 3, Parsing.rhs_end 3)) in let generator = try model (List.rev $4) with Model.Error msg -> raise (Config.Error (msg, Parsing.rhs_start 3, Parsing.rhs_end 4)) in regexp, generator } ; parameters: /*empty*/ { [] } | parameters STRING COLON STRING { ($2, $4) :: $1 } ; /***************************************************************************/ boot: opt_pipe boot_item_list EOF { List.rev $2 } ; boot_item_list: boot_item { $1 :: [] } | boot_item_list PIPE boot_item { $3 :: $1 } ; boot_item: STRING ARROW STRING parameters { $1, $3, $4 } ; headache-1.03/configure0100755002701000512160000022117010031764546015000 0ustar simonetcristal#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.57. # # Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" # Sed expression to map a string onto a valid variable name. as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_unique_file="Makefile.in" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS OCAMLC OCAMLOPT OCAMLYACC OCAMLLEX OCAMLDEP INSTALLDIR OCAML OCAMLDOC CAMLP4 OCAML_LIB LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] _ACEOF cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be # absolute. ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then echo $SHELL $ac_srcdir/configure.gnu --help=recursive elif test -f $ac_srcdir/configure; then echo $SHELL $ac_srcdir/configure --help=recursive elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.57. Invocation command line was $ $0 $@ _ACEOF { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core core.* *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ########################################################################### # Checks for Objective Caml compiler echo "$as_me:$LINENO: result: " >&5 echo "${ECHO_T}" >&6 echo "$as_me:$LINENO: result: *** Objective Caml" >&5 echo "${ECHO_T}*** Objective Caml" >&6 # Extract the first word of "ocamlc", so it can be a program name with args. set dummy ocamlc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_OCAMLC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $OCAMLC in [\\/]* | ?:[\\/]*) ac_cv_path_OCAMLC="$OCAMLC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLC="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_OCAMLC" && ac_cv_path_OCAMLC="no" ;; esac fi OCAMLC=$ac_cv_path_OCAMLC if test -n "$OCAMLC"; then echo "$as_me:$LINENO: result: $OCAMLC" >&5 echo "${ECHO_T}$OCAMLC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$OCAMLC" = no ; then { { echo "$as_me:$LINENO: error: Cannot find Objective Caml bytecode compiler (ocamlc)." >&5 echo "$as_me: error: Cannot find Objective Caml bytecode compiler (ocamlc)." >&2;} { (exit 1); exit 1; }; } true else echo "$as_me:$LINENO: checking ocamlc version" >&5 echo $ECHO_N "checking ocamlc version... $ECHO_C" >&6 OCAML_VERSION=`$OCAMLC -version 2> /dev/null`; if test "$?" -ne "0"; then OCAML_VERSION="<= 3.05" fi echo "$as_me:$LINENO: result: $OCAML_VERSION" >&5 echo "${ECHO_T}$OCAML_VERSION" >&6 if test "$OCAML_VERSION" = "<= 3.05"; then ac_prov_major="3" ac_prov_minor="05" else ac_prov_major=`echo $OCAML_VERSION | cut -f 1 -d .`; ac_prov_minor=`echo $OCAML_VERSION | cut -f 2 -d . | cut -f 1 -d +`; fi ac_req_major=`echo 3.07 | cut -f 1 -d .`; ac_req_minor=`echo 3.07 | cut -f 2 -d . | cut -f 1 -d +`; if test "$ac_prov_major" -le "$ac_req_major"; then if test "$ac_prov_major" -lt "$ac_req_major" \ -o "$ac_prov_minor" -lt "$ac_req_minor"; then { { echo "$as_me:$LINENO: error: Objective Caml version $OCAML_VERSION found ; but version 3.07 or greater is needed." >&5 echo "$as_me: error: Objective Caml version $OCAML_VERSION found ; but version 3.07 or greater is needed." >&2;} { (exit 1); exit 1; }; } fi fi echo "$as_me:$LINENO: checking Objective Caml library path" >&5 echo $ECHO_N "checking Objective Caml library path... $ECHO_C" >&6 OCAML_LIB=`ocamlc -where` echo "$as_me:$LINENO: result: $OCAML_LIB" >&5 echo "${ECHO_T}$OCAML_LIB" >&6 fi # Extract the first word of "ocamlopt", so it can be a program name with args. set dummy ocamlopt; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_OCAMLOPT+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $OCAMLOPT in [\\/]* | ?:[\\/]*) ac_cv_path_OCAMLOPT="$OCAMLOPT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLOPT="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_OCAMLOPT" && ac_cv_path_OCAMLOPT="no" ;; esac fi OCAMLOPT=$ac_cv_path_OCAMLOPT if test -n "$OCAMLOPT"; then echo "$as_me:$LINENO: result: $OCAMLOPT" >&5 echo "${ECHO_T}$OCAMLOPT" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$OCAMLOPT" = no ; then { echo "$as_me:$LINENO: WARNING: Cannot find Objective Caml native compiler (ocamlopt)" >&5 echo "$as_me: WARNING: Cannot find Objective Caml native compiler (ocamlopt)" >&2;} OCAMLOPT=no else echo "$as_me:$LINENO: checking ocamlopt version" >&5 echo $ECHO_N "checking ocamlopt version... $ECHO_C" >&6 ac_version=`$OCAMLOPT -version 2> /dev/null`; if test "$?" -ne "0"; then ac_version="<= 3.05" fi echo "$as_me:$LINENO: result: $OCAML_VERSION" >&5 echo "${ECHO_T}$OCAML_VERSION" >&6 if test "$ac_version" != "$OCAML_VERSION"; then { echo "$as_me:$LINENO: WARNING: Objective Caml native code compiler version ($ac_version) does not match that of the bytecode compiler ($OCAML_VERSION)" >&5 echo "$as_me: WARNING: Objective Caml native code compiler version ($ac_version) does not match that of the bytecode compiler ($OCAML_VERSION)" >&2;} { echo "$as_me:$LINENO: WARNING: Native code compilation disabled." >&5 echo "$as_me: WARNING: Native code compilation disabled." >&2;} OCAMLOPT=no fi fi # Extract the first word of "ocamlyacc", so it can be a program name with args. set dummy ocamlyacc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_OCAMLYACC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $OCAMLYACC in [\\/]* | ?:[\\/]*) ac_cv_path_OCAMLYACC="$OCAMLYACC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLYACC="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_OCAMLYACC" && ac_cv_path_OCAMLYACC="no" ;; esac fi OCAMLYACC=$ac_cv_path_OCAMLYACC if test -n "$OCAMLYACC"; then echo "$as_me:$LINENO: result: $OCAMLYACC" >&5 echo "${ECHO_T}$OCAMLYACC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$OCAMLYACC" = "no" ; then { { echo "$as_me:$LINENO: error: Cannot find Objective Caml parser generator (ocamlyacc)." >&5 echo "$as_me: error: Cannot find Objective Caml parser generator (ocamlyacc)." >&2;} { (exit 1); exit 1; }; } fi # Extract the first word of "ocamllex", so it can be a program name with args. set dummy ocamllex; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_OCAMLLEX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $OCAMLLEX in [\\/]* | ?:[\\/]*) ac_cv_path_OCAMLLEX="$OCAMLLEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLLEX="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_OCAMLLEX" && ac_cv_path_OCAMLLEX="no" ;; esac fi OCAMLLEX=$ac_cv_path_OCAMLLEX if test -n "$OCAMLLEX"; then echo "$as_me:$LINENO: result: $OCAMLLEX" >&5 echo "${ECHO_T}$OCAMLLEX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$OCAMLLEX" = "no" ; then { { echo "$as_me:$LINENO: error: Cannot find Objective Caml lexer generator (ocamllex)." >&5 echo "$as_me: error: Cannot find Objective Caml lexer generator (ocamllex)." >&2;} { (exit 1); exit 1; }; } fi # Extract the first word of "ocamldep", so it can be a program name with args. set dummy ocamldep; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_OCAMLDEP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $OCAMLDEP in [\\/]* | ?:[\\/]*) ac_cv_path_OCAMLDEP="$OCAMLDEP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OCAMLDEP="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_OCAMLDEP" && ac_cv_path_OCAMLDEP="no" ;; esac fi OCAMLDEP=$ac_cv_path_OCAMLDEP if test -n "$OCAMLDEP"; then echo "$as_me:$LINENO: result: $OCAMLDEP" >&5 echo "${ECHO_T}$OCAMLDEP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$OCAMLDEP" = "no" ; then { echo "$as_me:$LINENO: WARNING: Cannot find Objective Caml dependency analyser (ocamldep)." >&5 echo "$as_me: WARNING: Cannot find Objective Caml dependency analyser (ocamldep)." >&2;} fi ########################################################################### # Installation directories if test "$prefix" = "NONE"; then prefix="/usr/local" fi echo "$as_me:$LINENO: result: " >&5 echo "${ECHO_T}" >&6 echo "$as_me:$LINENO: result: *** Installation directories" >&5 echo "${ECHO_T}*** Installation directories" >&6 echo "$as_me:$LINENO: checking binaries installation path:" >&5 echo $ECHO_N "checking binaries installation path:... $ECHO_C" >&6 if test "$bindir" = "\${exec_prefix}/bin"; then INSTALLDIR="$prefix/bin" else INSTALLDIR="$bindir" fi echo "$as_me:$LINENO: result: $INSTALLDIR" >&5 echo "${ECHO_T}$INSTALLDIR" >&6 ########################################################################### echo "$as_me:$LINENO: result: " >&5 echo "${ECHO_T}" >&6 ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then we branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. cat >confdef2opt.sed <<\_ACEOF t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g t quote s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g t quote d : quote s,[ `~#$^&*(){}\\|;'"<>?],\\&,g s,\[,\\&,g s,\],\\&,g s,\$,$$,g p _ACEOF # We use echo to avoid assuming a particular line-breaking character. # The extra dot is to prevent the shell from consuming trailing # line-breaks from the sub-command output. A line-break within # single-quotes doesn't work because, if this script is created in a # platform that uses two characters for line-breaks (e.g., DOS), tr # would break. ac_LF_and_DOT=`echo; echo .` DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` rm -f confdef2opt.sed ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" # Sed expression to map a string onto a valid variable name. as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by $as_me, which was generated by GNU Autoconf 2.57. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.57, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ac_shift=: ;; -*) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@OCAMLC@,$OCAMLC,;t t s,@OCAMLOPT@,$OCAMLOPT,;t t s,@OCAMLYACC@,$OCAMLYACC,;t t s,@OCAMLLEX@,$OCAMLLEX,;t t s,@OCAMLDEP@,$OCAMLDEP,;t t s,@INSTALLDIR@,$INSTALLDIR,;t t s,@OCAML@,$OCAML,;t t s,@OCAMLDOC@,$OCAMLDOC,;t t s,@CAMLP4@,$CAMLP4,;t t s,@OCAML_LIB@,$OCAML_LIB,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be # absolute. ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; *) # Relative if test -f "$f"; then # Build tree echo $f elif test -f "$srcdir/$f"; then # Source tree echo $srcdir/$f else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t s,@builddir@,$ac_builddir,;t t s,@abs_builddir@,$ac_abs_builddir,;t t s,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi echo echo ------------------------------------------------------------ echo Everything seems to be ok. echo You can now start compilation by \'make\'. echo ------------------------------------------------------------ headache-1.03/info.ml0100600002701000512160000000005310031764546014341 0ustar simonetcristallet name = "headache" let version = "1.03" headache-1.03/main.ml0100644002701000512160000001317610031764546014354 0ustar simonetcristal(**************************************************************************) (* *) (* Headache *) (* *) (* Vincent Simonet, Projet Cristal, INRIA Rocquencourt *) (* *) (* Copyright 2002 *) (* Institut National de Recherche en Informatique et en Automatique. *) (* All rights reserved. This file is distributed under the terms of *) (* the GNU Library General Public License. *) (* *) (* Vincent.Simonet@inria.fr http://cristal.inria.fr/~simonet/ *) (* *) (**************************************************************************) (* $Id: main.ml,v 1.2 2003/11/13 16:08:44 simonet Exp $ *) open Printf open Config_builtin (***************************************************************************) (** {2 Configuration files} *) let generators : (Str.regexp * Model.generator) list ref = ref [] let read_configfile filename = let ic = open_in filename in let lexbuf = Lexing.from_channel ic in try generators := (Config_parse.configfile Config_lex.token lexbuf) @ !generators; close_in ic with Config.Error (msg, loc1, loc2) -> eprintf "%s: Configuration file %s, error at characters %d-%d:\n%s\n" Sys.argv.(0) filename loc1 loc2 msg; exit 2 | Parsing.Parse_error -> eprintf "%s: Configuration file %s, syntax error at characters %d-%d:\n" Sys.argv.(0) filename (Lexing.lexeme_start lexbuf) (Lexing.lexeme_end lexbuf) let find_generator filename = let basename = Filename.basename filename in try let _, generator = List.find (function regexp, _ -> Str.string_match regexp basename 0 ) (! generators) in generator with Not_found -> eprintf "%s: No generator found found for file %s\n" Sys.argv.(0) filename; exit 2 (***************************************************************************) (** {2 Builtin config} *) let _ = try generators := List.map (function regexp, model, parameters -> (Str.regexp (sprintf "^%s$" regexp), (Model.find model) parameters) ) builtin_config with Not_found -> eprintf "%s: Error in builtin configuration\n" Sys.argv.(0); exit 2 (***************************************************************************) (** {2 Header files} *) let read_headerfile filename = let ic = open_in filename in let rec loop () = try let line = input_line ic in line :: loop () with End_of_file -> [] in loop () (***************************************************************************) (** {2 Processing files} *) external random_seed: unit -> int = "sys_random_seed" let temp_file_counter = ref 0 let prng = Random.State.make_self_init ();; let temp_file_name directory prefix suffix = let rnd = (Random.State.bits prng) land 0xFFFFFF in Filename.concat directory (Printf.sprintf "%s%06x%s" prefix rnd suffix) ;; let open_temp_file ?(mode = [Open_text]) directory prefix suffix = let rec try_name counter = if counter >= 1000 then invalid_arg "Filename.open_temp_file: temp dir nonexistent or full"; let name = temp_file_name directory prefix suffix in try (name, open_out_gen (Open_wronly::Open_creat::Open_excl::mode) 0o600 name) with Sys_error _ -> try_name (counter + 1) in try_name 0 let pipe_file f filename = let directory = Filename.dirname filename in let ic = open_in filename in let tempname, oc = open_temp_file directory "header" "tmp" in f ic oc; close_in ic; close_out oc; Unix.chmod tempname (Unix.stat filename).Unix.st_perm; Sys.remove filename; Sys.rename tempname filename let copy ic oc = let len = 256 in let buf = String.create len in let rec loop () = let i = input ic buf 0 len in if i > 0 then begin output oc buf 0 i; loop () end in loop () let create_header header filename = let generator = find_generator filename in pipe_file (fun ic oc -> let line = generator.Model.remove ic in generator.Model.create oc header; output_string oc line; copy ic oc ) filename let remove_header filename = let generator = find_generator filename in pipe_file (fun ic oc -> let line = generator.Model.remove ic in output_string oc line; copy ic oc ) filename (***************************************************************************) (** {2 Main loop} *) type action = Create of string list | Remove let main () = let action = ref (Create []) in let anonymous filename = match !action with Create header -> create_header header filename | Remove -> remove_header filename in Arg.parse [ "-h", Arg.String (fun s -> action := Create (read_headerfile s)), " Create headers with text from "; "-c", Arg.String read_configfile, " Read the given configuration file"; "-r", Arg.Unit (fun () -> action := Remove), " Remove headers in files"; ] anonymous (sprintf "%s, version %s\n\ Usage: %s \nArguments are:\n \ Process file " Info.name Info.version Info.name); () let () = try main () with Sys_error msg -> eprintf "%s: %s" Sys.argv.(0) msg headache-1.03/mkconfig.ml0100644002701000512160000001060010031764546015212 0ustar simonetcristal(**************************************************************************) (* *) (* Headache *) (* *) (* Vincent Simonet, Projet Cristal, INRIA Rocquencourt *) (* *) (* Copyright 2002 *) (* Institut National de Recherche en Informatique et en Automatique. *) (* All rights reserved. This file is distributed under the terms of *) (* the GNU Library General Public License. *) (* *) (* Vincent.Simonet@inria.fr http://cristal.inria.fr/~simonet/ *) (* *) (**************************************************************************) (**************************************************************************) (* *) (* Header *) (* Automatic generation of files headers *) (* *) (* Vincent Simonet, Projet Cristal, INRIA Rocquencourt *) (* *) (* Copyright 2002 *) (* Institut National de Recherche en Informatique et en Automatique. *) (* All rights reserved. This file is distributed under the terms of *) (* the GNU Library General Public License. *) (* *) (* Vincent.Simonet@inria.fr http://cristal.inria.fr/~simonet/ *) (* *) (**************************************************************************) (**************************************************************************) (* *) (* Header *) (* Automatic generation of files headers *) (* *) (* Vincent Simonet, Projet Cristal, INRIA Rocquencourt *) (* *) (* Copyright 2002 *) (* Institut National de Recherche en Informatique et en Automatique. *) (* All rights reserved. This file is distributed under the terms of *) (* the GNU Library General Public License. *) (* *) (* Vincent.Simonet@inria.fr http://cristal.inria.fr/~simonet/ *) (* *) (**************************************************************************) (* $Id: mkconfig.ml,v 1.2 2003/11/13 16:08:44 simonet Exp $ *) open Printf let file_in = "config_builtin" let file_out = "config_builtin.ml" let main () = let ic = open_in file_in in let lexbuf = Lexing.from_channel ic in let oc = open_out file_out in try fprintf oc "let builtin_config = [\n"; List.iter (function regexp, model, parameters -> fprintf oc "\"%s\", \"%s\", [" (String.escaped regexp) (String.escaped model); List.iter (function name, v -> fprintf oc "\"%s\", \"%s\"; " (String.escaped name) (String.escaped v) ) parameters; fprintf oc "];\n" ) (Config_parse.boot Config_lex.token lexbuf); fprintf oc "]\n"; close_in ic; close_out oc with Config.Error (msg, loc1, loc2) -> eprintf "%s: Configuration file %s, error at characters %d-%d:\n%s\n" Sys.argv.(0) file_in loc1 loc2 msg; exit 2 | Parsing.Parse_error -> eprintf "%s: Configuration file %s, syntax error at characters %d-%d:\n" Sys.argv.(0) file_in (Lexing.lexeme_start lexbuf) (Lexing.lexeme_end lexbuf) let () = main () headache-1.03/model.ml0100644002701000512160000001273110031764546014524 0ustar simonetcristal(**************************************************************************) (* *) (* Headache *) (* *) (* Vincent Simonet, Projet Cristal, INRIA Rocquencourt *) (* *) (* Copyright 2002 *) (* Institut National de Recherche en Informatique et en Automatique. *) (* All rights reserved. This file is distributed under the terms of *) (* the GNU Library General Public License. *) (* *) (* Vincent.Simonet@inria.fr http://cristal.inria.fr/~simonet/ *) (* *) (**************************************************************************) (* $Id: model.ml,v 1.2 2003/11/13 16:08:44 simonet Exp $ *) open Printf exception Error of string (***************************************************************************) (** {2 Headers generators} *) type generator = { remove: in_channel -> string; create: out_channel -> string list -> unit } (***************************************************************************) (** {2 Models} *) type model = (string * string) list -> generator let models : (string, model) Hashtbl.t = Hashtbl.create 3 let add name m = Hashtbl.add models name m let find name = Hashtbl.find models name (***************************************************************************) let arg_string args ?default name = try List.assoc name args with Not_found -> match default with None -> raise (Error (sprintf "parameter %s is missing" name)) | Some s -> s let arg_int args ?default name = try int_of_string (arg_string args ?default name) with Failure "int_of_string" -> raise (Error (sprintf "parameter %s expects an integer" name)) let arg_char args ?default name = let s = arg_string args ?default name in if String.length s = 1 then s.[0] else raise (Error (sprintf "parameter %s expects a character" name)) let make_frame ~open_comment ~close_comment ~line_char ~margin ~width = let regexp_header = Str.regexp_string (sprintf "%s%s" open_comment (String.make 10 line_char)) in let regexp_blank = Str.regexp "^[ ]*$" in let remove ic = try let line = input_line ic in if Str.string_match regexp_header line 0 then begin while not (Str.string_match regexp_blank (input_line ic) 0) do () done; "" end else if Str.string_match regexp_blank line 0 then "" else (line ^ "\n") with End_of_file -> "" in let create oc header = let width' = width + 2 * String.length margin in let white = String.make width' ' ' in let line = String.make width' line_char in Printf.fprintf oc "%s%s%s\n" open_comment line close_comment; List.iter (function string -> output_string oc open_comment; output_string oc margin; output_string oc string; output oc white 0 (max 0 (width - String.length string)); output_string oc margin; output_string oc close_comment; output_char oc '\n' ) header; Printf.fprintf oc "%s%s%s\n\n" open_comment line close_comment in { remove = remove; create = create } let _ = add "frame" begin function args -> make_frame ~open_comment:(arg_string args "open") ~close_comment:(arg_string args "close") ~line_char:(arg_char args "line") ~margin:(arg_string args ~default:" " "margin") ~width:(arg_int args ~default:"68" "width") end let make_lines ~open_comment ~close_comment ~line_char ~begin_line ~begin_last ~width = let regexp_begin = Str.regexp_string (sprintf "%s%s" open_comment (String.make 10 line_char)) in let regexp_end = Str.regexp_string (sprintf "%s%s" (String.make 10 line_char) close_comment) in let regexp_blank = Str.regexp "^[ ]*$" in let remove ic = try let line = input_line ic in if Str.string_match regexp_begin line 0 then begin while not (Str.string_match regexp_end (input_line ic) 0) do () done; "" end else if Str.string_match regexp_blank line 0 then "" else (line ^ "\n") with End_of_file -> "" in let create oc header = Printf.fprintf oc "%s%s\n" open_comment (String.make (max 0 (width - String.length open_comment)) line_char); List.iter (function string -> output_string oc begin_line; output_string oc string; output_char oc '\n' ) header; Printf.fprintf oc "%s%s%s\n\n" begin_last (String.make (max 0 (width - String.length begin_last - String.length close_comment)) line_char) close_comment; in { remove = remove; create = create } let _ = add "lines" begin function args -> make_lines ~open_comment:(arg_string args "open") ~close_comment:(arg_string args "close") ~line_char:(arg_char args "line") ~begin_line:(arg_string args ~default:" " "begin") ~begin_last:(arg_string args ~default:"" "last") ~width:(arg_int args ~default:"70" "width") end let make_no () = { remove = (fun _ -> ""); create = (fun _ _ -> ()) } let _ = add "no" (function _ -> make_no ()) headache-1.03/main.ml.~1.2.~0100644002701000512160000001361710031764546015325 0ustar simonetcristal(**************************************************************************) (* *) (* Headache *) (* *) (* Vincent Simonet, Projet Cristal, INRIA Rocquencourt *) (* *) (* Copyright 2002 *) (* Institut National de Recherche en Informatique et en Automatique. *) (* All rights reserved. This file is distributed under the terms of *) (* the GNU Library General Public License. *) (* *) (* Vincent.Simonet@inria.fr http://cristal.inria.fr/~simonet/ *) (* *) (**************************************************************************) (* $Id: main.ml,v 1.2 2003/11/13 16:08:44 simonet Exp $ *) open Printf open Config_builtin (***************************************************************************) (** {2 Configuration files} *) let generators : (Str.regexp * Model.generator) list ref = ref [] let read_configfile filename = let ic = open_in filename in let lexbuf = Lexing.from_channel ic in try generators := (Config_parse.configfile Config_lex.token lexbuf) @ !generators; close_in ic with Config.Error (msg, loc1, loc2) -> eprintf "%s: Configuration file %s, error at characters %d-%d:\n%s\n" Sys.argv.(0) filename loc1 loc2 msg; exit 2 | Parsing.Parse_error -> eprintf "%s: Configuration file %s, syntax error at characters %d-%d:\n" Sys.argv.(0) filename (Lexing.lexeme_start lexbuf) (Lexing.lexeme_end lexbuf) let find_generator filename = let basename = Filename.basename filename in try let _, generator = List.find (function regexp, _ -> Str.string_match regexp basename 0 ) (! generators) in generator with Not_found -> eprintf "%s: No generator found found for file %s\n" Sys.argv.(0) filename; exit 2 (***************************************************************************) (** {2 Builtin config} *) let _ = try generators := List.map (function regexp, model, parameters -> (Str.regexp (sprintf "^%s$" regexp), (Model.find model) parameters) ) builtin_config with Not_found -> eprintf "%s: Error in builtin configuration\n" Sys.argv.(0); exit 2 (***************************************************************************) (** {2 Header files} *) let read_headerfile filename = let ic = open_in filename in let rec loop () = try let line = input_line ic in line :: loop () with End_of_file -> [] in loop () (***************************************************************************) (** {2 Processing files} *) external open_desc: string -> open_flag list -> int -> int = "sys_open" external close_desc: int -> unit = "sys_close" external random_seed: unit -> int = "sys_random_seed" let temp_file_counter = ref 0 let temp_file_name directory prefix suffix = if !temp_file_counter = 0 then temp_file_counter := random_seed(); let name = Filename.concat directory (Printf.sprintf "%s%06x%s" prefix (!temp_file_counter land 0xFFFFFF) suffix) in (* Linear congruential PRNG *) temp_file_counter := !temp_file_counter * 69069 + 25173; name let open_temp_file ?(mode = [Open_text]) directory prefix suffix = let rec try_name counter = if counter >= 1000 then invalid_arg "Filename.open_temp_file: temp dir nonexistent or full"; let name = temp_file_name directory prefix suffix in try (name, open_out_gen (Open_wronly::Open_creat::Open_excl::mode) 0o600 name) with Sys_error _ -> try_name (counter + 1) in try_name 0 let pipe_file f filename = let directory = Filename.dirname filename in let ic = open_in filename in let tempname, oc = open_temp_file directory "header" "tmp" in f ic oc; close_in ic; close_out oc; Unix.chmod tempname (Unix.stat filename).Unix.st_perm; Sys.remove filename; Sys.rename tempname filename let copy ic oc = let len = 256 in let buf = String.create len in let rec loop () = let i = input ic buf 0 len in if i > 0 then begin output oc buf 0 i; loop () end in loop () let create_header header filename = let generator = find_generator filename in pipe_file (fun ic oc -> let line = generator.Model.remove ic in generator.Model.create oc header; output_string oc line; copy ic oc ) filename let remove_header filename = let generator = find_generator filename in pipe_file (fun ic oc -> let line = generator.Model.remove ic in output_string oc line; copy ic oc ) filename (***************************************************************************) (** {2 Main loop} *) type action = Create of string list | Remove let main () = let action = ref (Create []) in let anonymous filename = match !action with Create header -> create_header header filename | Remove -> remove_header filename in Arg.parse [ "-h", Arg.String (fun s -> action := Create (read_headerfile s)), " Create headers with text from "; "-c", Arg.String read_configfile, " Read the given configuration file"; "-r", Arg.Unit (fun () -> action := Remove), " Remove headers in files"; ] anonymous (sprintf "%s, version %s\n\ Usage: %s \nArguments are:\n \ Process file " Info.name Info.version Info.name); () let () = try main () with Sys_error msg -> eprintf "%s: %s" Sys.argv.(0) msg headache-1.03/doc/0040755002701000512160000000000010031764546013636 5ustar simonetcristalheadache-1.03/doc/manual.pdf0100644002701000512160000017661010031764546015616 0ustar simonetcristal%PDF-1.2 7 0 obj << /Type/Encoding /Differences[0/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/arrowup/arrowdown/quotesingle/exclamdown/questiondown/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/visiblespace/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/dieresis/visiblespace 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 173/Omega/arrowup/arrowdown/quotesingle/exclamdown/questiondown/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/visiblespace/dieresis] >> endobj 10 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F1 /FontDescriptor 9 0 R /BaseFont/BDHMHK+CMTT12 /FirstChar 33 /LastChar 196 /Widths[514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 0 0 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6] >> endobj 11 0 obj << /Type/Encoding /Differences[0/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/quotedblleft/bracketright/circumflex/dotaccent/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash/emdash/hungarumlaut/tilde/dieresis/suppress 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis] >> endobj 14 0 obj << /Encoding 11 0 R /Type/Font /Subtype/Type1 /Name/F2 /FontDescriptor 13 0 R /BaseFont/EFFYIC+CMSS12 /FirstChar 33 /LastChar 196 /Widths[311.3 489.6 816 489.6 816 740.7 272 380.8 380.8 489.6 761.6 272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 311.3 761.6 462.4 462.4 652.8 647 649.9 625.6 704.3 583.3 556.1 652.8 686.3 266.2 459.5 674.2 528.9 849.5 686.3 722.2 622.7 722.2 630.2 544 667.8 666.7 647 919 647 647 598.4 283 489.6 283 489.6 272 272 468.7 502.3 435.2 502.3 435.2 299.2 489.6 502.3 230.3 257.5 475.1 230.3 774.3 502.3 489.6 502.3 502.3 332.8 375.3 353.6 502.3 447.9 665.5 447.9 447.9 424.8 489.6 979.2 489.6 489.6 489.6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 528.9 816 761.6 592.6 652.8 686.3 707.2 761.6 707.2 761.6 0 0 707.2 571.2 523.1 523.1 795.1 795.1 230.3 257.5 489.6 489.6 489.6 489.6 489.6 647 435.2 468.7 707.2 761.6 489.6 840.3 949.1 761.6 230.3 489.6] >> endobj 17 0 obj << /Encoding 11 0 R /Type/Font /Subtype/Type1 /Name/F3 /FontDescriptor 16 0 R /BaseFont/JQUFJF+CMSSBX10 /FirstChar 33 /LastChar 196 /Widths[366.7 558.3 916.7 550 1029.1 830.6 305.6 427.8 427.8 550 855.6 305.6 366.7 305.6 550 550 550 550 550 550 550 550 550 550 550 305.6 305.6 366.7 855.6 519.4 519.4 733.3 733.3 733.3 702.8 794.4 641.7 611.1 733.3 794.4 330.6 519.4 763.9 580.6 977.8 794.4 794.4 702.8 794.4 702.8 611.1 733.3 763.9 733.3 1038.9 733.3 733.3 672.2 343.1 558.3 343.1 550 305.6 305.6 525 561.1 488.9 561.1 511.1 336.1 550 561.1 255.6 286.1 530.6 255.6 866.7 561.1 550 561.1 561.1 372.2 421.7 404.2 561.1 500 744.4 500 500 476.4 550 1100 550 550 550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 580.6 916.7 855.6 672.2 733.3 794.4 794.4 855.6 794.4 855.6 0 0 794.4 641.7 586.1 586.1 891.7 891.7 255.6 286.1 550 550 550 550 550 733.3 488.9 565.3 794.4 855.6 550 947.2 1069.5 855.6 255.6 550] >> endobj 20 0 obj << /Encoding 11 0 R /Type/Font /Subtype/Type1 /Name/F4 /FontDescriptor 19 0 R /BaseFont/TPZNJH+CMR10 /FirstChar 33 /LastChar 196 /Widths[277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 625 833.3 777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 0 0 722.2 583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 500] >> endobj 23 0 obj << /Encoding 7 0 R /Type/Font /Subtype/Type1 /Name/F5 /FontDescriptor 22 0 R /BaseFont/ANYGOX+CMTT10 /FirstChar 33 /LastChar 196 /Widths[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 525 525 525 525 525 525 525 525 525 525 0 0 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] >> endobj 24 0 obj << /Type/Encoding /Differences[0/minus/periodcentered/multiply/asteriskmath/divide/diamondmath/plusminus/minusplus/circleplus/circleminus/circlemultiply/circledivide/circledot/circlecopyrt/openbullet/bullet/equivasymptotic/equivalence/reflexsubset/reflexsuperset/lessequal/greaterequal/precedesequal/followsequal/similar/approxequal/propersubset/propersuperset/lessmuch/greatermuch/precedes/follows/arrowleft/arrowright/arrowup/arrowdown/arrowboth/arrownortheast/arrowsoutheast/similarequal/arrowdblleft/arrowdblright/arrowdblup/arrowdbldown/arrowdblboth/arrownorthwest/arrowsouthwest/proportional/prime/infinity/element/owner/triangle/triangleinv/negationslash/mapsto/universal/existential/logicalnot/emptyset/Rfractur/Ifractur/latticetop/perpendicular/aleph/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/union/intersection/unionmulti/logicaland/logicalor/turnstileleft/turnstileright/floorleft/floorright/ceilingleft/ceilingright/braceleft/braceright/angbracketleft/angbracketright/bar/bardbl/arrowbothv/arrowdblbothv/backslash/wreathproduct/radical/coproduct/nabla/integral/unionsq/intersectionsq/subsetsqequal/supersetsqequal/section/dagger/daggerdbl/paragraph/club/diamond/heart/spade/arrowleft 161/minus/periodcentered/multiply/asteriskmath/divide/diamondmath/plusminus/minusplus/circleplus/circleminus 173/circlemultiply/circledivide/circledot/circlecopyrt/openbullet/bullet/equivasymptotic/equivalence/reflexsubset/reflexsuperset/lessequal/greaterequal/precedesequal/followsequal/similar/approxequal/propersubset/propersuperset/lessmuch/greatermuch/precedes/follows/arrowleft/spade] >> endobj 27 0 obj << /Encoding 24 0 R /Type/Font /Subtype/Type1 /Name/F6 /FontDescriptor 26 0 R /BaseFont/VRBEFK+CMSY10 /FirstChar 33 /LastChar 196 /Widths[1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500 500 611.1 500 277.8 833.3 750 833.3 416.7 666.7 666.7 777.8 777.8 444.4 444.4 444.4 611.1 777.8 777.8 777.8 777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 0 0 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 777.8] >> endobj 28 0 obj << /Type/Encoding /Differences[0/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/sterling/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/quotedblleft/bracketright/circumflex/dotaccent/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash/emdash/hungarumlaut/tilde/dieresis/suppress 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis] >> endobj 31 0 obj << /Encoding 28 0 R /Type/Font /Subtype/Type1 /Name/F7 /FontDescriptor 30 0 R /BaseFont/PKPWKX+CMTI10 /FirstChar 33 /LastChar 196 /Widths[306.7 514.4 817.8 769.1 817.8 766.7 306.7 408.9 408.9 511.1 766.7 306.7 357.8 306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6 525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9 743.3 743.3 613.3 306.7 514.4 306.7 511.1 306.7 306.7 511.1 460 460 511.1 460 306.7 460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2 536.7 460 664.4 463.9 485.6 408.9 511.1 1022.2 511.1 511.1 511.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 627.2 817.8 766.7 692.2 664.4 743.3 715.6 766.7 715.6 766.7 0 0 715.6 613.3 562.2 587.8 881.7 894.4 306.7 332.2 511.1 511.1 511.1 511.1 511.1 831.3 460 536.7 715.6 715.6 511.1 882.8 985 766.7 255.6 511.1] >> endobj 33 0 obj << /Filter[/FlateDecode] /Length 2035 >> stream xڵXɲۺ+ UeqK&΂ ~C>hpxm'l$l6O&fq9m߇/wLqsN&L?#:Pg_ދ ,(S,6;,Mi~"غmLoVJdJy탩 Hı-+&߂e`k.ʣ_{^Q >e~D[lGm 88Z[Z "gCO,2'49H];2ȕ<_N+!sz8Z>Ќ$<:.t}؆ 7e{¦Ξ[G|sxEoۦcQgHbZDR1:[_*ćyD_FzEL|.ř):[=x3LhQ2zc#dJy 5єLQgRVA5 'ģҼ\\{qNj!x-v~LH Q1-FdIǥMtUd>:_Gg+ݻ4?q}@$6+[8[Y<5 2EFIw[aud͇Oh˶[!X ۵Ό0 )^Am[_lUI"\U|`~AdG `YI8fKP|]NE]ݪMc&ƭr]NFI! W!u`zB/}p-UU[p+fHmm=F.CQ|d,ہeK`̙eaXŲ|YE=74Oz4J xQ^7EmteSʽ"LgKdc3@M;VO~dMf煺[Ԅ08dIlT$ʘq1z.t-A_B_b_CfR/">}:VĂS JÁoWYܘp:vթ?:u5ۘd,tPSbbiVUA+ Lo,ZoT8+tbnln6kgwu+kͲ1ۖ1վ}=aXcTZÀ_)Qaǡ'g>#pJ,O>~@ Ԭִ keYrL&M; cYO>\\"Ư'c-or}հ^817 Gߥ*a؛`Xc(eMY  }LW8_C Է(I#7L7G)hqIW4A?Z }̰1l wTU?O=Z##(Cج%Yjိ endstream endobj 35 0 obj << /F1 10 0 R /F2 14 0 R /F3 17 0 R /F4 20 0 R /F5 23 0 R /F6 27 0 R /F7 31 0 R >> endobj 6 0 obj << /ProcSet[/PDF/Text/ImageC] /Font 35 0 R >> endobj 38 0 obj << /Filter[/FlateDecode] /Length 2967 >> stream xڵZ[o~Ixhn[&l\ q[uڣFe.%h(C~zW ~ÏY=Hb%*ZV&UWy&I&r@ߑQ}s{]*TnV:LUW srWnv?6YtG"ʡڮ7NG>ۆ}jpڮTUqm4աmp~؁vU?|-jFl۱$tm{|ǽܡPaKuC5B*kbg* ZP3iEP# Ne@WkugSM&apYoڊ$)0)LXqL3u-zG6tL=CtJˮWrbmz`(Hs%l`BqL >|>ve;wvu7ke|o1Ym߭R7,3ktFO#{ۮP=Jгmz7ÿ2sDiP1 Gϱ~kKn-tvӍAܓoxg5G2''H$:iGC)K4pԶ@ڶ|'t}D{ VRwYكBz것 yLz@ \fas:ؘ%f:i@J\QǬ Iu-1 :|;ɚHsJm^Wb.­sR5 d gw-O7}'Δ qES}$ir `pR)Gq( 9m&\I)kPVN@ ebWyI:#M '1'$s kyhVȍ=]%326b ['Q  l gwgʱI1޴6V֨u/V Ml$;sm UiI==i]6oK]};kǔ0O/8o}us 7 l7ȺZk̀YP$E=੫8eFrvR.|)\qNsq!fcںͼWZU{ Uy iA"L3i~ JT1YP Opb h4!@₵GG\ǡ4IxIS슣_(qmb:=JJ,#ӰU)De-6 OJEy!.Qw:/ebvP@)"V|Nyta;D[Q稚x @Smtd/q5 ,t4m^BO%$\4usag 1"c7: ˃=s P~o` m\9cil؜T ],T\jq9f^¹rjZݗm@ ﯤvc2ܐν2+)UwTŪ409SQٿ`w 7nڀܻ74@._޺(8cۮ a/J;BWC#X5qp#XzWx`K@4Q2JPe'dm/PLTwkjˢ˲5dREWw,mGjA"?';i7QKE ri{͛5jB|KP )"U}^'(dz|"29%s-mUjP|\n4Y{;v ~<9Qw֞;i泰..6QJQ}s'E3/\*e Z-?{X|E>Б!<{A|t6 5I^}OאjT%g5[1/sqJ CD$D$"AČjYʘאМ4r!^o5!!L` 'EHb|T@e3dZD9\4jTdspo/ħ978hEDo[=@ (oHD]=bc_qJLʼn9o 'a ~Жpq~"$Ƣ1 S>4b#Y2~HCMTng4.VmW Vh VOMRt?P?ĺv endstream endobj 39 0 obj << /F5 23 0 R /F4 20 0 R /F3 17 0 R /F7 31 0 R /F6 27 0 R >> endobj 37 0 obj << /ProcSet[/PDF/Text/ImageC] /Font 39 0 R >> endobj 42 0 obj << /Filter[/FlateDecode] /Length 676 >> stream xڭTK0+VMb;=`E(HloJS'G+$~{|D.1d.ʝ~Ev37ڦu\rՑW57!(%yHw;(/Mr ?Zh(G筸~qqg}rxd\Od9h1;OEoݟB0p^rNP.ݬ eEGA>^/?YP#)0~/s+tfh"=<=O]d%˻ٔ2ks0{]jg׉tTcƭJ!wr5{cBL#dv*-@ WQex+iS,IR )ͥ` k?%ZѬyCro6(8 X0L-tB$@!U5V[iB̸Ni&ot?Vn֪uܞE3 ,$VUEc=v{aV=bX*o'Ϟ(1kޘʮz0ɢϔ2Ѵu TCyZ&\bE]T!P%m%ʓke F(֟Hb7岪 endstream endobj 43 0 obj << /F5 23 0 R /F4 20 0 R /F6 27 0 R >> endobj 41 0 obj << /ProcSet[/PDF/Text/ImageC] /Font 43 0 R >> endobj 9 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-1 -234 524 695] /FontName/BDHMHK+CMTT12 /ItalicAngle 0 /StemV 65 /FontFile 8 0 R /Flags 4 >> endobj 8 0 obj << /Filter[/FlateDecode] /Length1 715 /Length2 1787 /Length3 533 /Length 2318 >> stream xy<#LJY&YƬ֐})jD8d1Y4f2bh,%5*5RBZ*^[Io 0e4@` :P*`fRȾ,@\K0L O,_&!⩀#HYZ`JGm  $H҂BQ(D!HСoPt]&~N@.$ @(0Cp(` Vl*0-~mPij-=2?[]p ¦ܵe)LwhE$EXL6&t  ,lmiMwqx g7Zg-ܑZH$J`o?fI'2H:pd$y۫`zo5#BG/Bwk3*r7|\KXxeBhQ"f]aOng$7[чx2v jSX'v3~[RK/֌׀tx|.O|&t.T}DA=?zhAf`Sf(t:p,*04wo3=^EYm8ڮN|x_GYfUVp }m6,_kqfҼb2K\^ok#ϝRrh +-&s&k\s5#ņ*3IV!`?Zlqw{-qʐ{ۀqvN#[wґ@ɋrkҡ&ue~8=qyK h(l-^3wᶢ7i~si]%:Dob b}bS}|N9)CMk-Ewow5&+\ꬃņPإ~|3n o Jle.z!'<v/' ۦ(5R1^j&==sIw@)7˻HM=hLokGH?C,攟vr8j-~+ cy9_2 @NyڐEό+?!ǎ]ybO1YSd=++o.ZZ1h徯Q݃/ֈzwEʨ%] Pdۥ+)O}>=P%̧Ujh{Oy0w0|'[5<}w y9!`wGǪkr0Q[!#"}!%}|TsȪiX 6(G.b%iUa YZJ.[h|?y\s+6C0fB =}vzoiٮԠm5z#ԉMӹC%rHJusMb$QZE-_V-UQ^BLbN>W!Ǜ߶ U$MwFB;Tkv鏉G ޼i/E (pAgBG6)]wVSYR#48{LO -W;a4ߪK2dіטaPޥ2qBdJK#iz`ֵfp{`@l &7-j̊u)f7 N>W.yy5NF#Km%Wc3u2DH&ߔr PS3~!,a}@9E%>ўշ+/)dT(bh&!>v@.q={CS-u˺<GE> endobj 12 0 obj << /Filter[/FlateDecode] /Length1 717 /Length2 2684 /Length3 533 /Length 3225 >> stream xy<dzUl)ۍucƾec1ۑ%{ǚ}M%!JR%d<~?:|?z_46RÑ@m2* 33 ""C%I*H8 8BQVV24 Bj Ő t? bKPP#[S 8(8 8D. O8oZ> =)qdx!4PM$bԿ1?dwo*H 8Bz R1DVL؟K T :H q8Zh] |?j5_(?כ/id Q1$Td)y@JF  BN!,HOoPW` ?U7? U A? $9HIl87 ]24|Nzӱz}f>mvʶJtER\ %c\ ;R}5ϖOl$rNR=Z8$0On&kk|jUbFAjeCܖ{^=v8u*Hq7G*kr3ӲE΂_M{uO&-.5` 8TȅάO26rրizzSWkMƜ߱OHj{#^R+=w欎`.Ð}l^?.RV%3&>ߔMiOMh\^A e$cTggCq#Vz8P6m`%ų:Z*<^-r`EXȡuKWb}x:-+EnOw'DIZI-v6T*ׅ>6θ˗|\J !qn}Z\NN Sp\w]1!BJj(Gx5=B[;{/JW#Q`GuDJ #9އu$ĒVԭA1z>_N: ^ttެ}t,{|[5nʐՋVkm8خ^ ߠ"rmB$[P^|l%ZёPC30gts QMsgعL߽=Z!CYK+v,K wި>nK e87 ž.ӌ$C*QgaS_͆j^uٻ;_DtY?}2FEp#TCװ!mY/Jf- []c.\cT#IYa(oֵ \pcp^oC(-[ïeƘ&f`:7( d_Yp9G ཀྵw Zeo;#X& GN(b>8 z K Yh @܃a gw1eo1WeB˹RҬ WjąwQIԵؠv*Xَi$3˻xwYTXL@PǺG^;0 *AR:Ԭ䬏1P|Yڅv%%NjabJ:q7l6{yWއw_Q}WHbؼ;Nk++{ X2RWfEӀ('h%6>b֧y\*Y}=]-MZEQGw  QŪB_ʼng^R̯J2TbϤpeSSAt5cQ7\.@8/.꽩hjl9s5+rt lfqoGD+:P3&0ޱ*}uv&3ɕ0"%eb 9~Ldo"\ ]$̺#^@~/y298"_E:$J|'ر^jFf`7W‡w!r i=]r t!5"Ѧ6[2|硥 `&^}2ߝc?J/viJ(j θ~% oBbWDk%fʔԾsX"Pw S6 endstream endobj 16 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-71 -250 1099 780] /FontName/JQUFJF+CMSSBX10 /ItalicAngle 0 /StemV 136 /FontFile 15 0 R /Flags 4 >> endobj 15 0 obj << /Filter[/FlateDecode] /Length1 722 /Length2 4693 /Length3 533 /Length 5243 >> stream xgX[ EJP:{'HTJB% !HR(B^7E"H9HAM`8|5?sͿ޵ֳu7*cax(*R36VB@P0Gã0h ; 8‘JTs q?oituշs_7_0pO9O<55۹THWg Cy#(Grp3?v(4_YCRx~h Fvhw߹0~"P3ʂe UhF{"5@D"GC<3;.'@x#ҙPB{o'̛}? +#H}+/_c.r Rԣ.bs-kNɥ+o 2J k3-$} ?cZޏz ʇ|ɫҚrfvY#gZ? z!2&+I!ʪ)'/$wL&<}'~ KЪmgkW_ۂET|# |@f幾1< \ξTj;ܤthr(qGAc'w-'=.BY *-u~>9YLibUJά6uYEGnx'h.5&ۣ\i#?ɭ0g{舷¶j>kdZޛ sNWәͯ_9|Ơ7XT?K?:J Kz#XZ=Q</ +_>iIc/NTc67H`L{%R#UřX,U \Z/=b>Wg .H|kgl& $Mf܅^?M (lU)hWȊXAZ db3ѻ[ @ҭf|}V N>[+R[ ܧQpq.]ckDgXƚw>Z棌MNlU_<+Ǽ+ 0+#n$9&oVXr~O;||p6r` 1+E!tx%M+AC%$eI-u_ʆo'fk4~ZHWK _-ymT;ޚ>6P_)[=ndӦѲPۙ#HmRM}UԙqB~Ʋz) Vetl X9$7<-G%qACѐT/2\41gm'Xi9:̐QABKei >܏O{W`ϬJ$hpeP9+i(0&StMh#?2E>wD+}2Kՙb#}[in euG$VQ9ԋB*;LW]E"xHds㟿ż%3%wu— ބӇ`j&Bﳵ[MvzP1iQ;/uPZ8 _5P܌MAs,-+1紓6UWϤ>WzQF7.IeB^p>6=x!@ BAhpXyb{Y̖F ,<]}F@sjv* TH ]:] О@ArR7-DD\X8$$Za\k4 .)`Jt, Ѧ-C~` #c_twxᨶ6"f%#\~Qo5v ){Ckmv6#@-/޻=wwMիל_m[Hzkn3- !LL$vhOL'&M_6~N k{N<&Ĕ\ & C_1uFq--Ѻ~I^*'&w-i?/#FA[biVd+FJ1A9U%yPN;e|Eh07&,#]"D(?~HQ^~)Vg"rO<z͹nCX"RZ)# ?cۄp_X17lL6Cмs$ \,&l3+ZtBT@hKBaƑکuwUO՛Jg({{F,%3Jd;oU1P.ȏͥ{3l89pKv׉TQ:%!> vg;Rv)CC%A e5ntm|@+eo}%-qnؐbKQyb}ձJo`/$_2uD̕^h5*٫P$W>l0*t'r*G֙FWGoo)%5n  Dhu_ڊ*&~v}i`Wc/>jك}[熝 gd;ngoz-d< 8eƻ]Ʌu~9<ŋoHM]bЎL&rk]tyL cW9['fEm50'b(rRPwvrH,ua;rӠl\:9=5 ]vv:a!-;ɱ"-+׾ԈyOcsXn{y,ĀI@a|HKVT޳kI۱?L#xS . 7͖L.4k5g5-ʑ 4a\<|HQ^>?-٩ڳYT q܃s-<#5t:1r&)p;z,'ؾ qڵq0F{b]fڝQx,>!䛟Vk 2gw `}lGm:l`xn_!'U_icK=gG@w£?u?(!iޡ`jD28 wƥ00^N0ydyCbA`?V<=uKeG[6zdiuB \`O/ Xx{"Ժ|oe rqYOQ~Cgȇ_Kc 7g P3ЪNŽðjU |ނ[mo7Ds̱cW{5g~{tr<Nі"@)N!+(`wvw{WOi^cݮٚrT}\3̌pVQEyo#+|kIϳ{_^5xvZ UVU*Cd?X^o7 g0 ׿VI{&0 >)oϓЯlf>Z DE!u6Q٘85 MdEG7=x$t C?(SL / Iyp!trٖߧ?FfLJEJ,TJ?͚:+jddkz͆~>r~@_#spki}+/VmIEB"e ]Ė뙄3)ն\WJXŽ&{e;JRK7sC`ƒzFMIY!]=5 i Mdm,0~&,^^^(jw-p:Rv"^f &Ɠ+6n!<W4Ny#5nf.9"tlq^`nܙu}7>4`XwY@Lrb܀xԠAFS}$Pso7^g-Rof7Go#5t9zؕеP@Ʊ&!*bMq]͒"<|ģV9]Uxx^Spb4c'PۻQ+,46Q.6(%k8R rM'IݛrW =Ο&SY?i9%ݠWg%6"ȇM |e Io1eK`tډ\'~}mTNv2>~!.oЋڹ ͍IF.ݧ.ðE}#Xvt(HPBYT"K.sP9m#v- ި.p/[a*9x5u#nԚ'~,[1x gd,I"* _~Toacp.TT]z endstream endobj 19 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-251 -250 1009 969] /FontName/TPZNJH+CMR10 /ItalicAngle 0 /StemV 69 /FontFile 18 0 R /Flags 4 >> endobj 18 0 obj << /Filter[/FlateDecode] /Length1 720 /Length2 11514 /Length3 533 /Length 12065 >> stream xct'cc۶mضmv:tl9s9w̚oVwԳߗPAVT֙@XVAT`g+blED fjwbebe&%ww[8PSCN hc06%5t0kblhMlg 0uv# &P'NJN&tЌ&cg#Ss-4?$m6qϒ_.R4v'015/1\ maY l]M dLLm]n/6YSͿW% Ƃ֦ Jn& gc 3Ck'MmM@%'%AmWQ`n_P3f8Η+k&jklg5'Pv651t4sebe${8 88W-TRYcGGS[|LMLe).(+(>JxTٿycRG7H?XO޿'}8h'cy$׻a g~'hhx;f1)~4Pʓ)-ޗ+ LlLmd~ɹX=sX;Az!Y@Ͷ?#olfw䫥 073cԔw \^f1:/款'2CktW3]чtB}QZ]RNtA{B =hS^zVJ81|h#@Ƙ=TK5$y̬|1u{Œ'3CУ7"upJ-Y[/߲UoY*=K|_)=-]-hiVxW#=UV0"ZXCH DuLHLJqk*!e"Z4)co*~iTZ d!f {$'6s<:Ttr93ՔqgCh6'(._j˯~E>=niHooʺ*Њɞ)ʗ뇵E6@AķW6 TgXu$J:d x?M(]ODzTIU~d[ Hms]'`BSDRa#dz6hŽ4;EAzԤkD֌,kSwz~_ig!L# {m}tèpℒiu>W0&{a9xAķp6(SN"Mxf_P7_D\6Uz-L s5i/5 vK=<ޣ`cA˟vQcB7wpmc0`Ok8]G?F.Dxz,.;hoЋӅ0rzav&>:^L9HL؆^, g;!lQ$F|4i<&#D^W@ׅԒ쾾U (ƯZ2hhKW$0^3K`vd +_na$(9y/t!Lc,+(z w?mW6Swv o)*SSC~X>@2¿yB>"VLT, 99:CMm _{9?[.~D jX!qS߮*EBP_THh`'LO;8 GXyo89=W7ml7Gdd*ܱqHS1|Eu ,u`_y=8[\[cwڛLOrMg1^/bn'c{_sC TRI-ܶ[b>&Y%``g)uZP-QwBh.rr?8 H\䒈!܆Iۓ,ڮˍLsJ^A̐1Oʒi]}7d ݖykIChA3*KQx`:Gg.#Bn n$]at@y9~3qT`9 yW ajj͘ݧgCnDWt|"R:5#n9!xP[9vozNL'sy~ȱ !hu]X/u4_͡:9;D(svi!CpIlfetŵ"^c9d4c: nYX4*X]c;m;59֤⺘^~jGx (, 4 h$ywY,&F|#NtqlN$9gD?~찔Κph/*mMk65xv{-Vjp ^}MU's w_S A6F PTJdK '6Zu!J6J\bjPLKӒ~}oUD{57=orXH[i}B{64 fHTU<½AO X6;zQW-Pb_M :^e2]qO+}Bi P̸s4deM,Uv'oOx1>zGΛ =~QJi[CzLt)NMhvN-9/YV_=.)ȣk*>.&Ĩyz%vFŖ$KXoFE4&Z=X5m=nlX>!RhM6(%Gr22P&c4l~YQ$`AMg5V[Ei;̓UyUy_wkd@|NdOQԬxw!%IbC̯.D6G։wg Ԑȇ/&_!7쌯B1voqA)"kp~ڏ("~VRs2bxp S44FpPB?Ҹ.>,۬}r(v_B Ajܡ FfCa3S@u PcǪᦧGK ՞H٤c)n &+ݑ ǪR!^d:`2-~-]%GNԛ*\=eUm} xm!"=vs鵒;]ǍY$YW]2v*0uU/# $:qB5 kw.ծo5"mTvg<QAqEx ĢkjQ'ྯ$oqJGGƽHƚhN@e6_>*?[3˦e$8:t^9!Jf0+3h6/f6-E=A>Uu>fj5旧{>pZIC=<<@ aQ /?9Gm%HOݗCL\SPGo]l2Է5۲L߭+Tq5c$1!"EϨi4rN ڽU~(ji9H1N6t *fIz*(T>e.)*Xg:jv=YN.ÀHFW3Xu9' ,07Qhyuo}pg=A(U'>Ez/˛5bYfL;P=}t \Z!5ȍHnF2gArqwy6OGXP0sǓܤW4 yxzj…%( 8 ,7'Vܝbz0xGB#:њfkyѮBvB۷apr)rkdF5ϩb* nd_v9HS 5i4Ȯ],(0ԠhLx ַޜZ[ 3pS0s>ce睐D4,>GsFvEPP⊶4fަIU+/<~5-u![#ᵴ# @#?;.r˔jJQg3%¹/~-Vj\ qOc #IѮCJrIm̗x DGsg4X4+sm (39sZҼz+q2H_k7+9.Ȇl ߗ:[oxC=5~!.~=[pJLNWlm/ubYW3J@*@axbN(gaܷ"h35mXs$[9Mw.in!G_:߽W5FqGCa<|Ψ܈{ q߉j]@у=B8&"4l6' ^ߜs(0]&Q/HW%1 9@Lݭ c8LEQN|Q6'!8ԭB?gv71<Hk|f/ k5&$U&=l3ZL*{9K.4nYϸ3%i)7E¸S.h#d[v.+ChvV𤌚9yU_x7ZkORcY'NyH#q_SHc3t5ŕtqbi ȷ&C&w?YDhc$<:r? l&FVy?Ώm?3"pZsTLda&C9@nEE! Sya7lj$2?x= dImkPcIr@fw[mW5­MYu/WӦO;$Cvz;M&Dq4y|M!yAA.7ߩaaB_xw57uJhrm r'j"_~BM7O VXjA3dJ24i&/Y!̺~JQSͅ$b/ w꧂w< V枏x" VSG&y# $^QtwD41E*DR4ca;D!%P.?sgdZ|ge xm x;s"}ss>f8H9ն.eGchYr_UP D]-s:Lb?=%hEw4N=/éΨyLL!Ըvp YOXb()HShWA}HlHfNS U zT 됏j @zdʴЉ5<ƃqynDZq,֚ LH*l wAįڝHY C1g.!P\ 0阋n"ų5;.V(HX~!\UezB KyM%|-!h;FZ`FJŮEOd@Һ>PlvOJ4yҪP8u(N1BZn8Ɯf*v" w yC+. MVݦe0KZaIUQ{TbfE:Ll\G0}-\u1ؠ#}y\-zxl:6LawER|\W\% D.ffp4=ͣ}?,w,eJrk{mϘ;GXӶ؜98:͏*>^Xҍ`ant@4-@tR hB0r. ?_vqA+xf\k\!LXyٲ 7 ttZԵYoӃ.,0 TWI^5SȫɈ9c<hryeo/\{¿Ri]!,; jnԷP]]1p萆45|ZenS.=-^]~|́ę,0a8HTV'u2l4U{L>R]oGp PVM$4n1~j8ƬdFn2 [WYVw5Avߖ.]v1Ψ7 K׾ } VWAɗW,b$8goF5ʉQ ['eOf7:ܷ|2.Iwˆ4!xgECKo۰!ՙʂg2.^6z(V@ר-eΞO7*)X`l.}vW(V **P˰S >!8si@ (q(qS٧ ~0xz4=05(thD{ }7δ&k'p 9<|S]+(z;~[In43 .)@Ⱥpi]rʿҭfnc˝ÜTFgg\?&~RX, J+xgmt^ ph**%o_pD<,C w%-\d6:ȟ7)mKWQ*9)nzJKis@LWfvWiEiEGQ@n- ]O=8J(WRDZb0)Es&2pKpLאbY'џF<_fi8s1Q+k% lU!'jǭ3_6El@$4r{NM>#8qk=qcgkPhODtRx꣨hh,K.}P $ʪ(@/+C><ϳрt|xjp]T%qo$slv~cWI/с.A^ԈPL)%P drv%l%&q a?VuT\WYIUU"Sӧ~4:Y*QI;y F&W]KTV9~c N=7A:\-rsXE޾Q5 .QOYrxpߵeY8 N)4-}vjTaa>"V\ +>9~H`C+:!tB4'Kyk }yI_'S4f+)jA Aqv^H$%cv{m/&jZ H>Gf] $UJMR"mN`uN0W1[T!1yOcao@9q 2gqz.ZoǰN)4-z6R(x*`eCT}r|{S؏Նk[!CjĒP&_Հhoت^G8wXon!:guKF)v\ap=9.KLYԿ Ujw@Gzm;_}Ws= '<B &G (zs5ƘW4gax٨XaaidQL P ? 42FIc &+5ׯ/ETx!tq}o@^=bP?)R<08uQErpPW-=>:[7wV6^OyJmxG|E: 3_IxM?)݃`?_XMz R/7?4Jĥ,ܨ]&C1q sIMΰ1>k~iϯs#sHfrHN%?8k ]!:Adxd'^^]V]pU :f" -:p~~Κ\0T&zq^NX!9jkKxhɯbaY)l7 "5(C#js={OЫux^Wi &jF*z?9FC2պi Q)]Q*2'\vJ @ i3dU~ lyq@6iKGwzkl5bHE=WD7ym 1rG?/J$bf}CFHT؃Kp`l#("ajf%E?cq ?G02 }..&%!*,Qo4a+ZZ{}dQVrlYFe i-l/DDnof*ݵd[lJه̫iٴ~dGZ~9*u9}R7QfnCc7Z\4! V;Sdj/pB~goHk+{-0cObO^ύ55'L3ŲnΐZ )JlD0ɀʬc DY8 X:|`!=XËTFz$\@&^< IR1p{lXh8ЦzSTK7_/.  >^Pa(^佸[:>&?"UW"~yK>!~Qa:8cT,ɃEp>EVH+ag5AвIm 2Ą;C`gw:+n'5qcR F{MSw##~xbR}3?=s 6+6.@baS44TpOw欺igoHσ&LLqcFC| !hdqFg5Fpvlb+ce9hD"YvP12RQ~:sv| ZA?U]"+\ ya:￶d ib4B\Wpliv{c?$ ߭r|Pf\O//o4 endstream endobj 22 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-4 -235 731 800] /FontName/ANYGOX+CMTT10 /ItalicAngle 0 /StemV 69 /FontFile 21 0 R /Flags 4 >> endobj 21 0 obj << /Filter[/FlateDecode] /Length1 719 /Length2 10712 /Length3 533 /Length 11264 >> stream xUP%q6.kl`㍻4N޸7ҸMssLTCUIIMA(io SPSca023"PR9Av@^ +@ `aeg{# P<A1"@G@hjo :{0"66P:]f,,33hC`=_i3,rhIJ ifog0#0).66ƶg[d {[g#@ hRMf 8ۀLE,l@N w7%4vL"RJZ_d_3f8Ww&agjo:ۙ;WSڻ{1X8\l,nffUnp033s3ks:6t"*+МӬb3cVP+ a#sВ]K}?,hMƁhx|W9'#}"vއTfs,!ZQXn%-Q:ݢ'˯ԅCŪVG֬D0qk]Ir(YXoӤ ZgX#w"$U$l* =-\ y =QDH:r<"x// 2JlR~er?^C} sW{t{'=uzlIȟWΉykQ;rh8@|@&P@Ri i$C緊L6j@CڭWͬ$,jj2?'YA^2߇W9t]Û3}]jGz OZ~ZK1fJcDq[s!/*l! /8i=B@1/GZ2쑺Wc4eNhXE8a-֌Bmš"SZHV0(&(Qc2 )Zީ+館x4Bwwb6=/Wpʹ aL$6v&,9X@rr|t[cL>kU4j=zKM?w#aaMw<֏L5Ré /P+W^)Sp:~)_6e2u$/gsy\P~$&UKQ+@Z&J|g~߰b# h`CgK;Sb8c 鷂9Qx>+H<՗ $wU 3HHKǍY74!Q3)ΤeNё6|I!S 'dtF9kxӆ E&㗧DUj?~mlh:>Ȁ\63~ R|'/ˀϩȎQB!Ԅ瘘w^~^bYid?{6im&%,)IXp`Ul_De7 Azו3܏;kF-/Y:8{vH٭'$8 2O$E?a&Hv6Б&1u6N<ȅZ-jݙ%Fd3ҰycsͷBuC@*R0Fy0K͕ǚxJ:嘙?'2 ^K>fHm&ZEv_p7$ȍ=2R=;#v `k6m'`~!2!&Ƀ#5t;ctCݧ$9(õh$Z+TUp"T{]zoxEǕ։ p\oD4AiE"kϿjF9J,$˷{ 0C ~/x#:]Akӧ?Ke`-Ol3ښd0868xM8E[ב7Y[r82ߗׂ)l 4,%4 iFnhQF[BT6Vu4م1ηNf߸wR-Ö #u+ -EǼ֢ Փ([c%擂dwvqI׆GtSR= MzēASb榫ԻfZ,k%*..b a6{\6X ^T,p ND^+Z#|)B)3w:/&X6RP(}ڟO[B) x4}S :t5d1{4 *݂uAzy2G&6Lg G6uUV)\ (R/:*,<<+D(3h3xD},s"LIII.Οj;S>'Ckf!D_i-% +y0e4j ŠVeړfWɅ ShSDSQGڗ#C:h1=E)3WRZhlוWXsbU^d9;yQN, > 6tvu%BFUO1)D Jt,-MsiuwUNГ7h+0O[m,i$}p yv+ xU?$\5o;DI ƖDVQ$oDK1u'?40@ADAs^Ck9Dj2b?FIn}K{'=¦f$?1w4f^竄 .ǨiO(L `-urd ,Q2Y$ꝫ{lKYS (L&9%!E1azWlNxk9\G[|UF&C8ټ ^Nt7;RZU~KmW==z=+zt1&CBde?ػm}Q w¬4<-zIZmLYNsJx)(]HGgXWY}Ssᶿ.ZiZd`KcG3(_5>-Y{_~VZod=v)P6B( OƤŗ=wWӖ|"nAIebB=`v:_xį*ud\5yS=Ķ _ vV ޭ^?63JJkpnLVw #^|ldB| ̢"Bٗq5l`7̔e4{4uU7`Qnx؍G1Q2õ 07[H%"n,{ʾx527UVwA#{9US\0(^cx*Vso.Gy]ޏHuQ&{Dh #Lm|}iN9OcfCv\;xIvg#J}%EGqf}{.6a$Q؍!M&QIwp,AH TJZ7L{d ?]n>W<߻=E7} IM02KΩ?pEzj+42hm[_iL_Xu,Ȇ(}^@t bTK{WdX;kWxA'JC2;3nc.:)-.͖?DRS~.9V;Ny YFi]`maR+.&Hb'Mo)dpʭNEr/fjŘϖ]01?u (`Ҹ1!/(r2z]C}.؄5wfF!9u|"0GYn~(SfdY¯k ITp)Cp1y:DٿIℑЅ@6rCm 7/? " UeO͊.cׄSyB~tq  a=N=0 }9 1`ShGVE<fq n$V3 ͜AȊhAjKD+T2׃|a؏2as" {b^]]yY> ,T ]X P~u֯KՐ4+Q ݪ.i AHNK\X R#g˫ܙXthXjqO#ഷ4>Pg#zªଋD8;1W6RZզrLkn[`pn!RJ÷ŽLc{Y@]+:/[ՔzӹvU|@$|H rͥ'aZ1+l^l٩Bm9 BcS%Ҷy)wg/݀> ^{eI8a[%n}]ڃH~m'㇒+\k9|$E[: ΕȼV;Ahg\V*toܯ$qN`OZ$wq=`w W2*lyG3ܱڛ !hb e9ѰfC7eLFS 7q\Eᣧ34e4hp!@h}*Q|؟Y7C P iryAm+kq ?JYe uGS>r Ι>ZW2v'% qo?\k }|#6 H# 3`&(N +PTh*=+9 ꡠYxGYIݚLH ΍x66+5KXY'Ku㩻X{EZ툛icF9RA\eG T[C.> k:G%l%rhpIOu43juog F_H6|0G1Ln³7j RFn_[`!f<>;j=^ ŒFKiSqjxaQNa/dBDl`Ys) b;֒՜)3?}7+Vgw9EwShmIY~iȰ!9; P>{>F HБ*iP01HK%mBsJΟhREKD_($<W( 4|2wa&&yQJD&UV\~뛲 V^֑r+(;]8j" .aŕ=v scݰ;)N4D4op& UږEΗf0mTsED0T}9A_zF@+]j̎kTj#%8hb]ukeď @>9͡]Q70"rXfiDC~T VA l$^K0HOU\sR&C 1z@cFX9I@6Z֤<OI^N rԶMԹmUvZPhuEl QgseR[ ۄaOSA -ZC?Ί8 #fcʧfsmb&YdbS=bB2cPn-s#g&3B>Tad<[ƺk)IOOcJ68^'yuB!ǑT>M:ÖYptڐKG'Eʫ]~Jf ܭ'D+Cf,oThIzs2 }P׸'?4 uO¨vj8e̚mB !Ѭ#8{yot;' 1@y\vYïȣ8e+q_Rbx(xW<^P7woYfN0a}`jfWUD"rް e:8]A ?d| {^F؛0%I4Wxp#-E6"]q|)n~e$ X+}o Jyi~)mZ`BuuL_i%mps">Wqsl֙QXOeA0[y;> {/RJ:KP*fJ SLGjpDž-eVִ;=IJ]ط]E'=2֙[CAFIGysh`Mu~@%=5 š(fy=ldƃ(Ng{my3GʷN&-SS5ϰA|{Φc,vvFjķKZ l2O$'`sdW)>p@k3܋C dh1| K{(8ՏYܴ QDΆN򞟃̷6}z|"EANƾ޼L 2)ߓc/bn3䝼^<] ^4k|J.SAټwHݯ^>^=Ïpڃw.n,QFslf{d6nG7V  Vxe2)O~M{( 5լ/"_FԴlo5Q8 [EeDT2Vg*$ޱ> L o 6™aXʸ;Bgy)sҹ i3J{3#_)ɹS6y)Al*|b=eѡwmM QcC~'Cg-At=g`wXaY AVA\͗C~aB9ʴ)fH UcaB؄^]!\hER2C߳V ;>:Bɭ-YJb&L%&t-X,φP19+_1C)̿+w\)Ƶ@:4zBwx>蛀;/eM MhMK͔)`r%E{W+l??\-7GrY'!Sm(-PI5ˠ9~n<3<_p QQ9H*tky!OzpcsreاWΚNְ&Fo𬵣6u`b^E%NV9:w{cuïJt31^7/:e"\W6EHni`Z3w^4FgNvg$Eg$/n I9_a|.D iP(Դ:k)#财$O+}Ey 7CoݯBP'R."W" &IvfsTV? gpvzԟ>2?(q 8]uuapy0k"2:æ2mMzoI`\MS?'z1PiOVư8JiJ7_>{YL-~hJ8gWC\"*eiuyˆ,w}u1]'P r[BI%ݴj6nMi1]9L:& +Eݛ+c#\0^Y5Avʙ^RZbOy OIMW:\s;&$wψeil+-K A%5ߜ{QRRu WTL0r=$jVWeG:UeN ڋ7lif TJxoǤRF/.:ܑ-d\>A604^(!?rՏ,'&GU~`,^ikT.-B%&DSz96`a256ҕ-ʋA3h4Lukx&1?=>(=f3s $3ul&h]c] k3Ny XA> !+W<Mn> endobj 25 0 obj << /Filter[/FlateDecode] /Length1 724 /Length2 594 /Length3 533 /Length 1104 >> stream xSU uLOJu+53Rp 44P03RUu.JM,sI,IR04Tp,MW04U002225RUp/,L(Qp2WpM-LNSM,HZRRZZTeh\ǥrg^Z9D8&UZT tН @WT*qmKdgaqn99~ !S U[PZZZ4<8Ԕ\tYϒĜdǼT]C=cSDf[fEjJ@fIrBZbNq*X<5/);D?,[ـ̼ʂTr0SQfB!P!Xh%d+$$0]_QkdkiLjf 榵 C2 KS=]L , L.-*J+'aL`(V&s͞##5ˁJNaz&CIMXǞ;w\[Žg40њ3;nY($ǝg0eXWҞ1Jԗ]aKuz]XU- ݣ%6 t6,`N|+Kgdq;)yAWpq3z]K&j؟u~x?˰ *wO٭\vwv%|3:YY}|v߿Xd?/ya^:-w^fys[Ӟ|g;} [ף~m7 {?hr=<ɩ qKݮ<:w}Լ8wÛK3?'lqf<|mlekϙߖ(mK|E*d4*9壦lM{]$k&/3xO(X X2p5b E*e\E4=wp⹣*ٱ gC~Qw^[Nfd iXZb)v*8x^b!I|^TZᬐ? (\ sRJs{! endstream endobj 30 0 obj << /Type/FontDescriptor /CapHeight 850 /Ascent 850 /Descent -200 /FontBBox[-163 -250 1146 969] /FontName/PKPWKX+CMTI10 /ItalicAngle -14.04 /StemV 68 /FontFile 29 0 R /Flags 68 >> endobj 29 0 obj << /Filter[/FlateDecode] /Length1 728 /Length2 7846 /Length3 533 /Length 8406 >> stream xUT]qཱྀ]6aww{p'@pw9wңzZ?5YPt$,@rNP6.v.!"'S NePKP ; q]6P4?\I+PBmAX!N`ԛ@Z rzиV`K(dvD_<@n$errx@hjN?p{q9wD lp898CAU'+[@SY=B6;`79J X!n G'ۿrph(k)+;BA3o\^#οmkfut;>BV@W)w*))'/_6.>7 ':u. E/''?UKwWW#3D x¸BIhVM26 O(|SM\N's+R5Slfbb9Q)ϯ;9]3BH1h/$ x;|a*p\dõ-z+(-%c )a~i52J0pH(v? k,Һ…pYSRqXߗ4QA|foB(_ɻ:w(+Ξ [nzmys\ռ7(rF ֿ{]1SAPrIS&LjlM=j5{Լ9$¼i7R^0MpfOVsaTp3NQ%lV 8ڤ1nYT lhj9F= \=^uEQπtg-דkUkwD(3tI>J9)}KAx$m~ m츝'ǼfR&Yؼr2In'z`F"nMWP"_ɡ.hw+h LZ z2F>%^!#;**6; ]xn!FSùn N0L %W 7aõZ>ibTQ*s牦b1rBJ*Ɓ׶\JV^26# ;؇Em}HB5zCsVGD|3)8YFYP)\m9M 맪E;VgY*i9辷gѠ6kސ$??=wQ5sc,{y*Z91o;oǠ05]oYzAYܫ9v^4:n񏼁smGka|JӴŨ؍qK eabyCc _?gкW o4D^U,`0[p>?bj޷++7LCk:j?+FWR\{"iWcFGX;-`woː2LZRf3pX~ `Tm ]U aj?,TXID3Z/#ÇyDui@kb-043EP;]"(AzUjVpM\K:+T&sG{*o1ۖ&LR#YtI=63_~YY9^jbQq[%OL,KO'}0#,TI:DTD:tUܺX/^+ˋגuV Ɲswgâ u/hU~#ެER%hn_%%ƻw^4٫;{sDž9BJZ ~ϊ>,W6Z[Dy4,70 یH3N<^7c?5M?5.NF}dFFW/hw[J1֒"贑s~ h 0G ?NDyjy΀ͧ{8[W7|gC̗X+oAUW^W,\)y$T,DwL_R:ɍpVp-܍mh/M+2T>)$Q,:ؖ~qq zK($%\wtgiw|t+S~̍:%]ѽ]## @wp cM+Xՙ#^P[Q4hT] GF3?daGi爓L*Ygy6׍`y?N]D M=1SIZZr5`U{]>8/UWUm v5U\i{D~@F-N T'_&3w;Gn}ΔËc~eymn9|]]9 \}0B8$h q4N`8vvfsA~Rt=;͔p+hB@B; Rࠢ*&V~Knl 3) ko?P/ZW t6-jvfju7/+YUQ$RK*QKuC9E9I;_!/ f5ZNeCz=/7d@g@>gshȶK/8ȹ2Bmj;]E}WuoȽ98K~.Ό2s{ _\]\"dž? mgas%kɦ:r2T.6Z?CeӾwBEQWnrgH\kCX,(D=9"QG΢U:gn 5`[ M6ϩEqHC8O0p7h'g5ַ+%=ݮqšnOd]t Dۂ:}dGN'Mji[]cE"b[ ~)A]PN7O, ZިhFn3K)%F龺T zp0bʃ wBOI 9:m;2Y$"S|EB Oy%C BHX vu -%g^r{4T];s6z׍Sa1d:o_;+1BCL4@uFP逸՞o^Q;G5yɍ)M*j=uK2ʫsߤRj; CgzA{=tcoxjK.MƥB FokC >SEbgƛofŝD 2d#5ڕoGlMI %_͓^rw5؏a3W`${ xX8J7 ~K4]Td@Rlԣv-EzlIR)V~(|g$N&[,"qxf$-*Կ]\Us#|xE5ĉW9a=4a'q-ΏHSGJ!dSNf'^De:^b6ʜ=V~uEX#P3FwVϦZĻt(;žG©8gy Y.%YD}jPRFIз]y=u\<gHDvdKꯍX޴5zi\Ea ު 30wSWh9o~ů6NZ؊&ɰ˖=5%akVt2k piVh}1'NQ?sƤ4q?.T/rxhրk?aK$XjS+y$~VIuɞ _g/rȯ.%S `*G4<ĝY{qfYs@HGSD(ui O&(Bw 䯖Pzf>fQLc݂"v|hI Qm5UZ" "k.HJ`{X +z0>,*+^G~[xatf9b[۽wNV(զGg*HIdP)IE!9<| LbC|Ɏ]iI4mdJZ2ѭ%?3R%xf6j za@JTU|)5;cv~]_5)XNOí0OՊC򜚀<An-_vEy C/mqt:W+.(髰{9M!&vwbeN j h/59͟\1Bl#Hlۑ}Քo/ e}瑳zDW@7f i@"?%!l-BUX=n;Q$ӳjqjQHɛohѪyn]\1` KLO9p-MZ]YZ,@Z(@Nx4pwq|7r# 'Gyފ?*xoTGj"M{\ب1Vp{;o4]7Q]GDPVeKڔmj'q$O(I=HQl>[Pcds ?߂\Ir.iTY|Zo۔:5}|$O{5E?n{#Aw^ϵd-/ ܐqPJ]/} _qI5 5h?ؐbNŴ}shv'#M{ ʈ2TL~hayu+z yIzMx>|ECnafv>RRĝ؂nD]! 4GFguTڜԉ-'/Mi; 0s/e^kiJb^i p =EwjNl=qu|X;ZoHD 1z%vQ 5 u{vNd}sgl׭ vkR lv3O۵UZ"#qIDYb8^Tj- ./90+)a LaL!Mˢ[YǴ貨2Xd8Oה\1?(˱YNICK!7}R;x+eXT\PCH"ZUW} SS~  a"\(R3\RWclmBKmEٞz"\Kt:@lAo"˛6},p0P/^x.xװ'ƀۃ`;pC4IJÜӊu=el U#z_#]䳽ƭ4:&SG#VT } 3Ɉ6D.ac -i%wqq ț@UY6Ekր^eŌŶOy4K9q=uUjڎt?J_K? w|&ܥt`wLJz6u0K 2EidVoBx?)Y\mi&-KlTlYZzo>x+WmV'5xzي)̿Pݠ:s_F^QKkH`8HG=՚xnb pLЖv5g7>sou\bvC1XA.L&8 fKq2U!}Q{ eᖿw224o,{e4Y",[Afg'+\J O 5 (g4d2{OgQ3,H,* fe΄iz9{x,bwO|AB^:\bN"ǹrxU=t4Gr#FáȾ. zƢ: M,<@Br rl|"AO&N1=H4DyxlV? VO}/`ɳ#6#nGJd_0q[e@q;OP'=x endstream endobj 1 0 obj << /Creator( TeX output 2004.03.29:1116) /Producer(dvipdfm 0.13.2c, Copyright \251 1998, by Mark A. Wicks) /CreationDate(D:20040329111619+01'00') >> endobj 5 0 obj << /Type/Page /Resources 6 0 R /Contents[32 0 R 4 0 R 33 0 R 34 0 R] /Parent 3 0 R >> endobj 36 0 obj << /Type/Page /Resources 37 0 R /Contents[32 0 R 4 0 R 38 0 R 34 0 R] /Parent 3 0 R >> endobj 40 0 obj << /Type/Page /Resources 41 0 R /Contents[32 0 R 4 0 R 42 0 R 34 0 R] /Parent 3 0 R >> endobj 3 0 obj << /Type/Pages /Count 3 /Kids[5 0 R 36 0 R 40 0 R] /MediaBox[0 0 595 842] >> endobj 32 0 obj << /Length 1 >> stream endstream endobj 34 0 obj << /Length 1 >> stream endstream endobj 4 0 obj << /Length 33 >> stream 1.00028 0 0 1.00028 72 769.82 cm endstream endobj 44 0 obj << >> endobj 45 0 obj null endobj 46 0 obj << >> endobj 2 0 obj << /Type/Catalog /Pages 3 0 R /Outlines 44 0 R /Threads 45 0 R /Names 46 0 R >> endobj xref 0 47 0000000000 65535 f 0000062980 00000 n 0000063790 00000 n 0000063451 00000 n 0000063643 00000 n 0000063144 00000 n 0000013122 00000 n 0000000009 00000 n 0000017413 00000 n 0000017229 00000 n 0000000985 00000 n 0000001985 00000 n 0000020031 00000 n 0000019844 00000 n 0000002890 00000 n 0000023561 00000 n 0000023370 00000 n 0000003854 00000 n 0000029106 00000 n 0000028918 00000 n 0000004798 00000 n 0000041473 00000 n 0000041287 00000 n 0000005716 00000 n 0000006459 00000 n 0000053048 00000 n 0000052853 00000 n 0000008075 00000 n 0000009026 00000 n 0000054460 00000 n 0000054265 00000 n 0000009933 00000 n 0000063543 00000 n 0000010914 00000 n 0000063593 00000 n 0000013023 00000 n 0000063245 00000 n 0000016301 00000 n 0000013183 00000 n 0000016224 00000 n 0000063348 00000 n 0000017167 00000 n 0000016363 00000 n 0000017112 00000 n 0000063725 00000 n 0000063747 00000 n 0000063768 00000 n trailer << /Size 47 /Root 2 0 R /Info 1 0 R >> startxref 63885 %%EOF headache-1.03/doc/manual.ps.gz0100644002701000512160000015416210031764546016104 0ustar simonetcristaldg@manual.ps[oH^E `l/ /dXg| E*$c{UEJvY$fW*UI>5ًq#nص/?i`/x\bm6ȖE<|^۬}Yt8۬g)@mOR|Z.ղQ}wM.6:oEe#u]Y&2FJSזymͼQMѐV˸RS^$^,Dy{{{(Ž8+݇dǢZB@~RL}9md[щؗ?]#]#V,uyornžS;8,%yuQm|.3މtqIw|b|IXrAu3~QTKpn{ sCdrCzywMVe 4mUV7--{6Kldꠊڕ60{9N4z_OCdPy]Y:Bv!ںwE]ykqa8[1B\ʡ?s;I$S@t:x\JluMq}@UyZ /xhyjˮ ,UGF1} S'2؉^M[1k?)\ Yeݾ%m1ժ/zmo+Tdݵ%L޳scEצ3ߟU̹:Ui52]N({jsz2N Rժ;]Tp Xd+5Mvό(,+#2dMOY dVyM6uk fe-h`~!v9)k!%!s9F JcMTVJƐam#1H票݆;RsB6m5M&Fmwe}2SJ] fd>˻Gcj0%ʂ˞$NRcjirGFlnUdS*hB6PSciyȵ9$WBBx| HAyoRrX'09J'BA󂌃홬JX7=[xm~(p!Ey|iؕJ"0$"(뚬A1X7,O.*xXc>N V`+ƂTl7QI(Bmʶ3}YMb`#(eɛZ *?A5JXs lFUB3΍7rY rU&!T{beΥ= ǹSzÔ ods]LP\Ի~ߊFYN6u۪gCЌk.9W!4)Ft.lVMdD`CDiP aݰ"C$M=7e B[>--4vS`~(@4t=C qtee@@x f׶*O)*=d})Sӗ4->}u@l[+ѨqiΙWyIsnDI w5f^&z(;UW|=D rF4B:_LvWf^WP禀=k`[}?FKiRG[md(33 NҫJ0R//Yd0? {y> H WS@G~ ׎666d{BšZ\hS"C$b(j*Ъ8]!-^PP]&BFác7j!eQႪBޟL؟LdF'̬hEuo"EĶUEѫՐq/[d,,Tm,\ӓ\)P($*pC m%󹶃*PH:S;x dWlb姢 ~<^#OD.0Nae%Zx~2˷mu!eo w53~ȶیAr#(1.H n߼XSڢ3n-VcWw:}݉h hkm JX])uX7$Y#@SjqhH ( R& 2ɋ"/|Lę'WT!x&x7&dF z !2 s=FhdY[OU䴪;Ba3L /<¿jTs Qa`Tw8 v4_ V]Nlw 2(X -G~]ח@~ے~j#7k˯ohxC@F#[&Q"[˔_[<5mu8JN—_5""A[m3V+r] ~]l~:mw':1??a_ n 8sسq\3WGQΪޞT I:ˁ{`!e-*ueGOAYR#f5|.E:׸Wޑ_W~˿N>Ю}{ڷEEnI!Pm]yp`[:k>f[xdҳi82ўvyG4d]!K?~4(;Q-p!Ad*7Mow]AV`U1C7jHȆX0v(Ŷ@kPiXi(cx  S8(;9:EM"UtPz#͚cCGPzV8RIhElSl1E*Roe0 tX S!WTp<q6۵]M!Ϫ+PkSĽ FGkcFuP;ЬeռBg7_=a CPLG̷"'`$]|Mr7"RBcQˬʺnT(J_ Z?a<y7caZ' CĢ8uya wE~|,)*~V^[Al&R$x4y_ Ȳ !3.oė|p^S"3;;#~D+}Tiʽ +dZD N:un3xD5PJQ-%.}Hž 3W{!/p>bǸ_~~H٨Ciq۵ÛǯOURb_wtpԍKc:0g*`UZ>eˋn]k.PEn6jxOLJ &Do! @|;r**ӄkͤ;zK=P:aTCx$H5*O?HZRȰ IkC"J W8+ORfd.{b" ;/wG-g^cȐ$~J]yD<^=.!끹&߈CxI]@RWZ9MڰFpI51Q7ޏr̚!ppgfP1}u6>QÉujuxUO!偞p'Ol o><8{4MteS˫dY$;s'ȟaEOI:uIb؁7 =Q;4&QIdԳ#/9SױҙmYcYnar4FabܩNԴȝZ^{^Ĝ=ķ3kjRЕFNv؍msd?H$f3Y, IfΦqLV&~hN w&^F,NR3 ̈;'f$,qฎ~2 8iH6M At` H~N3۟ 7{0i;ʼn:Acz0C}O'L&>F9rl',&v}(,+CLt /Fc 8 d21]umӉ5^ENq v;vA:gYfz妑 ]IIj D4|F~!dAxvZf 1;AeCƞL'FqL!c3 } 3B=Z,tg!tm\nг(IJ^өcIjxM<=_g{U~Tf2+ˣ!q&42plc߾+nbH4#R{($S>;s{_{W|*f 6{pr\mŰ|yKx}aoqZxxh:q9YY[e*3rO \fy/Ej dYǑf͙…eEK ]-lvKg0o9zx$j7M,ˎ?lsHbEgd 4"87k wSFoqb1K؋FµejO͍(ws?ݱVfƸC#Pb"p vy+lc*MG<inf0p1sb,Qk\𫺏:Ζj<_)X2B0| BuO#xRv+^k) |�:}eȽ9ALGĂ@ 76Hؙ¡0H@qA$ ^r?,$=]F1_xFYG:R :lK)N$ `-"K"#J%xN!!V+{W{4Œ<$#{ 4wF"aNN|Z+X<ލY'DD@#~y 0iq@ևtyju . @( E6r>od#)<_%h`j8#i>ƪij(޵d\/vq~? jDĥc#c+AS`|ysM (lrCsX ؅ ef6rxgB /2%96!$Ξw,S7O=2dA@DX"*0 N'-D(&h;oTk"?a'j$c5|q`eK<3}q͌&X3q]b h!r`#e.=%>wyb/:Cfц"1OdlHbCR[mD6R) . OQ , z{;SNPdTK_J6 #EX'^:=,} G!x7؛g)uCdghH5"$@:#W{%l#.@+A+Kl( oo总gp`W3s z p+a^Hd&!*=}1 [KQs\U?Q ]1Haaa!A~CǏ'{xp46,%r"\B۸fkZx(o _a'0>͡)B KKBx|'n4V d9΃&F ?C4  c#ZvVgF] @vɆCx|g"ޓ +RJKu?5ʝs6ɞg@oyP=` }P.zW\#  W@!b˃kύ"aQ8NPdkEn@NЌ w@Y v`"K=I(k9ԆpLi2_5q6v 6zC$@)a8GV@4&@Xx ~6ĕ=¸ċUNa#h6Ap{!Q?`cC/*{p .l0eL\9X*&`e@8e z/0D ⁗ @&b_5\<3cE;AJv6M6I8 S/&<$ 07$P`a#47Bċ3w2apqj8S9`.``93 9=MfC{0ܽ@k=d2_pcu ]q穭7g jv4 E!Rr0wj96O늧]=!V&bBw550q>~n.1="~a<#^sc'qFq<*ݷyy`K%*}/)a8:9JOoAܞs XD@4 bx= \>&IR=e4f#8/><}}ӉϹos HgJf`xGP@%v> =<2 0ג?ޔ<Zfl7d,I1m/4hnMR8O2vd&{I Pj`m蠶ېʊo"`7^!uIP"T 2'<}#`[dS6L0* yyW'JN Pډc9\dg0p5roݼ!/X>Wr0Q3{C"wϳwo?`]f7Ϯh*? Դшxhs&bLd`F4eD(^@ǘLl">WvQHO ='AFzXnoypyǮ)7 mr' P;<i_ *^aG-NݖuO" ;isVB&F}jHLb4;`}>cIfK^-\x tPa$:Z0NN` z4]xjCr`K|2ֶ'(6Ms_]k!~nC\쀯<-y-a|/RVnQ#+xyUc#:&\xExhz`~ U U8^ -z҃hď 0(X+̻x7h BKPdxe[NKS*7`~X[j% u}{q*C6wv. (ssQz΃; ݯ":y#d`O%\"f@G؛L^ya>7~ݗx-İ |Gqg1pz W0 zI}lKy Exz;)ceW 2pvkH *VWDM=+i|H 憎tz ixՎuk+\ո xp^Hgx#̰%"+o '6a.#b"q9C/nqֶǣdOy+!a.7Wq\_:ѕ=+$D9WϘ.l]ROށXF4ʵy,RoWj0LIGM,sgjv wPa R כxZȜ,oւ'ww~7Ix#b{Om}}Ff yLG=/Br]H<Ǻ tʗ %ODWycK={+yܰ纰ߏGnGOیXMC9dw2 f2=o۬IޜIN ] ܒg,#9/g=\2vO*|~b;-Ioev삐@*7.]2Pb#\ `ublBE>w|ÛQ-zë v.6Bg+Y\kyx.aqO`c3I߼}I.Dxa+we~N`u뮽=ltO=FR0<ɯ{ `C%$ǹo&MXG2~vK]ú$_"uZs3V-&:Vąa[#9-ƊzOfI\WdWz vx댕6Rk ætq B=N )g;W/%QZ9qfZgfiרs FĘ=ËH2bT+_?`XNw#O, ɾ1|${\pJͤȝ$$xCcy¨wl! "@:*91l<i4aVV%Q^㱮!IEJ,b@>[bWHU;Gv͓5*yM/uai6KL<_y> |3\ vvbIv?-5ɖ;ɽv] Wf'ɾYYPH2ACvh}Ϲ7*Jcr_ l#ƵۃaJڵlp~<`ʁ&2+Txſ{]܂2|&P,v ܀{zhd̪كuJ{cg3[5#6>BW:"i t$}AcA|db,V?W ֜e0jkJa'fdY`h|vPAl8O"dfs+$tcgwAx^b勽0N$U{l*݁@ߴxʶel2k$n ްR;`j9q5C90s3G7C~l7a w<#P\sz`k}IvXr9.> k؆ I%>ni$T`>$VaArmM=T_};9oi_OOߗVd[[/ӍJ}7'j+WH>1| %elO㐚û>,Q[Cx dz!yi"D`-"^"Ҏ@Oj60Dlqª¬je `8lqևJ$EF6{ȡc䵆,&pdG!v|֗b$aN| S96dMeufܱyٍXyAxrՑ!`pqOp S4NcK%+Y}G&R /Rs $X:0 lC%m)x`fQAf3Ŋq0lpZ0EP!';-"m{쇱g %D&]"[nlMj-Ix [Z!0$ty湯c{!sÇ,|mkجx 'FOłb\($vcxg]C}UfImQߓfȅZO>XG^SD|ÔB:ZYX:RÆ1v˜W!Qx@Ѭ˜c/ΒdE-9V^rldp%ܞO;e's,xM[6#7`e1C݁KD@| [ŘTm.f`;d#wnֿtyrGi%8>{A6#Zw[4KHb~ٮ sX!œwɠf#8y &AwwjvO!{8 BhHoO$!%x"<,Fe 9f^<.z6X}nm*C!y읰v!(q֛ UF@ذռcWDڌ%g+3a +؈A^$pCfʪ_ i e i5ylA1 feUmEZPZvuF5}lWVi:163ه! 8jPnb,f>Qn9a &'H.o^%~lJQHw`+p[W|ڻ2,טere{eĘ@?|%Z#=j|x=h~^$J$sv(m@|_4IdݖVc'X7xjv9f,^6. z'wd.bI K`H]U7}zU23% =PvcyIK>hH66u8gx !yޟROM:y$lCPP)JvYKJX'uɪ2MdMbCo%JmAȎKz7JI -iu`.b +7_^'x-nx1_r(W<a&X"D Pu?{ؘ]a!R,pAR0{h/Ph^Ӫb/P0 Y&Lnu-Ϸ'PY76ES?gOʼnUmJ%ܧMk4Kkz%dY|4v0}\F!ޖ}SL<') bdrQ>6,^QgN B7zO'QO'ÿ vƵyx!c d<< Ӯrun_M=ᥥ՛Nw׽t%R[uNi`oH8pY} hOJ\EP1]V_w!n~{2iðSڕ^I(6b.omy=S $@̴Pp/Cų|o60D9!QIh|v/J^41Lx ~ X ;!iJ@%R[ ~⡰ X1yV Ʒ=v]Riɒ=pjQX |\s3`%D ]Oƈ޽[=% *nd=_qkIr!&PCK;S}!ѹr [z] oE |#c4SHbݮh&3vŵ]H:}g7XUc;q>Mkx:=Нs^!ݦsg?!"1gݍ` VZ45JF>WU7'$(?:m>Y)#m)Kzs %jFb9>TQѝeq@|AT FCQCA"x>yXHRj6Bxu7B b},2)ʐ]'@+mPhal≵WRF}6&*DP |^z1&S`=JHPB;k>7 U# KDeR~S,XeZձ'" g WsH.|)q-*bbJ@̔ʟ`ϲ-F+d WKuhO|=`;쯼pD9&!J S 'Dv}@I8r#v(8- p; (5 Г]"d(ql4Zс{ O Qԁ#˴` jaꖣeoUFflF\'V`2{߳kq`jS2&H"k=. pHEq0ߌqJx"! 'Q_tem!70|{Bi{PFa6;B\ W—Z`jȘŷX"KMQV-?P6 shy{kp7HI1K2WP4 TT-oUdhE.Hx16w|cIb+z#̴7zp&'/=Ʒ滓-gs+iI!k! !Y[gc&$dž@85*dJϖJ٧*w[WUѢqQeE_j'=GQM:~ ɮg$4Urm7zZfU۠Y3طBkУj*Ww/ 烧u}Mo&y0T2ͶC8nX([;x1\0HěU%sb3.v_+$T,]S ĝݬvlW*W~jLVmHx<RrRRHm]HU^Ǥ8Ҋ1j٘7~vy{Ⱦ3@$L,AM-aPg g7,s` jJrK+_ 0nQHUwO1IGnImEBUQ"WL\uT`rZH=|޶td Ï@J=ͱT\uF<ԑ|( $Hc܊WBR/ SD)X2D#+uևU6(6; WݨE)`,0(f =PMu_պ?0lZGll|.p, -m%38O\,ۥZY{KɞW^]Zui{Z2< QYCn ltЀ /*dSōv['Xp73l&~9oB~g&X]-[x)e&8+fBUFk^$}FP؎&؝ԶRu.鸎J%\XvHzExe" M&t&F5&Oys?NÿHϠ[ ~z/j=?N[ :vK^TޱCKԛ?(yVn5\NoiMzoV/@@)H6Y%ݎmF%t[H RXw{NhN湽%fhR)MZ,~+ų*Lsۊ;Nlxb aN&&QB{ bp/Y!gYFÆ/UT OBᝳ7ۣZ9d!7Q\_K(uQmvۯD1lV^rԶ͗i8$-[RHڀ7O F\tUBy IY&1~m]ArȬjk,cX4+8a^!J_8ۡlG%xּ=n{$0k?&P޻Or:Z'`{,l5Q-WY|ulQ {ӎV3?m3-xSԦ: Hnc1kߡS 0'J$6b8ɲ4Hgצz#Jav?X'^V"GU#IgGJX_~U,ϟ)%~&~pſn_,`k ?]`{./ŋ/\W^J9Ѣ9>@ׄ9k+X 'uX@/3 5 wخwod1Z#v,R&\7m׽=:Yp%WwK_IhF,nr2)ۨYyԽ<&{[Q`PV|R+󄊵t6 lʴ7eʥu.:1u_-G=RU]֦helǵs`;u 4<兓di'ͺsX¦=۾\]@dC6r-p\Jg(ݯ9::uk )væTb=ʡ;W&eqb_5u@bNђZf5# T;f=75,Ɏf @#p&s8_ju|弧?qxsJ:,~_NRİm;6F(IY 1Xώˉok$)YVtq.VM{d<غm-  .llkO.av\:|[}Nt^h-}lq"xj'Ft\q9U,YzgM$F8 y_jGpgIJvu1Q&Tڛ8ܮjm=E90pj`Uz>H/>{lr68uj~RPlw<'̍EQ5|]cdda5nZF4.U.=9eQ Lo0e*o5.i"+i@]hք2~*w.O*n Q/Y&z 8wUê{w7yLD-.E؛Wu%P;V8=v{:i(Đ[A( TغTmn!9dBm"K٘ yV#[cz +U{˝}eer.\7 ,?} RhAm*=5br{H;kM՞ySBQ}U0EHg</ayEg*M"|1 e*wv‚EN"q]c y&봊0LlL҉mZƢ~4v{|&2^{b= +'M 5"F`e|;RTF{FsJRHG뫊ov'@[|L7A㼶+e?I?4l > UuV(Nh԰6,doAoCU@`$?©gf8:rϣdݳ&z]uV}!o7hB~/NhpTfzAdA`g| j5FB ;N#E[p2čx@$>Uun b&8 r7'4CKtb2Z҈:{7em|L6cWO1BqT xi`)y:p:6XDMtrquWB8;'56RX$2 P[ehw z_J!2m$K4}Y}NԀYwyꉇtt2HeQ$ U[.U='$5ap) `ȢH[47;Ͳ>Jf=rO.&ڔxNx[qJ ;*Ng:s %.p[IՁRzWamҲW^Rzb_ rVR^xdոv(;)aգTVCa&AW %n 8.%s(V~un%hzǁBQ(Y_" dғ;oȷҝw8{ xmK((Pl8bG$f(tJbhN6jOԸ[xd s S*stE:w"1dY?'R:6 >μCЎ'{To0$~um#_mN)0#=ӁRCM}/=?LnK˞nc =vBMli{A\;͎>e(R:*;7="Yq84v >vu',ESɐH%%:.i*@T_gʡ7 R*{T{[Dhd}Օ8vHWДb~ A7WTTM/]?"7L5AԙN7Y 2rJďz @*@  CSK+@޹;!Q \mץ1MicKϺ7Zv',[ˡ2P%d`N/ءg 9=ɦI,y[IAbK5e@Yw(&'U CϛRnEM͋p:w7_Be6ֺg[99v[NJ ݱ{'OSҤ <;oL! JɂyHiY;DƐW`A}7>`XaaNjTQ+$ki_ byPDT:l8d2xgwBqvl՗ގ;>] M74Qw[:TUT6Hhغ9:BN?B3jyt]"xJـXҳm:ޞ6iPR8 S \֧a~ 1E ˪OL:%X9X!NZa Ui$?lv':(';35=d@Diqd$^W'Ȭ4=S^G歩潃{ֈ9,D߃ īyJ)Su簑 . 1AЏ#7w|ib;$QSJeVr~k6N6p<B!{ ӚS9 0ƼH~CĂ/ kCxB[3:'議i}ȡrT<(+7Y񀱝q 3zcy2GETB?*?@(b+7Kհyb;YGbXj^ST VVک]VZ/AC5=:7%n c4pF]%Ns:ڼh,a h7A*^e\AE Uӡ'\1OӱИh LMvy;,OV 3[_H L{FqWm[6]^f Z\KbYO54Nt7EהAD`)y[ iz2Ēʫ޺5E KǔxA #i;JNr\ b; sݧQK3zA݌ϴD5^?Ņ$$ɑT*ߖã9p@mb (=6q; 77$(KVs}lyΗ18 f\;PivJTZ{+HlqI Z+Ւ2pXZz _Pl%G6GMYSvv@Vyzq;Wv{c}d?Me쀽/rc fN4p#1w֖ÇOL=vnDXBtɥG{h` XPrT"HؼĈ(gx٢սC\Tjn!`B`W^'&πa0 xnלw1`|Ѱ=s =YHYXMqčE,pc)A|NT PO~8:vlTav؜W%IB%/kj* 6o6RIu¥*phRn?VLU`+mJVY,Uy%zѹfdȓbm5=ew~87+pe4 3[Ye8a1HņL f; q=4 zoa2جbсuJ`KفN:ʚ[,G پKUɏ R?b\o6 Gգs.>ue e)j)LzxcslʤyKf^ *N}s H%"C ]G?}`j8r W*zSgVn:{=0"l)&`%t斑(P >,pԔyH Z'Ycc~٭Ĺ! _ɼS إNe>zdr30Kqnu4'Ze&Kx?O;ZTt7M!h3vm[;gUADu.{x.*iY5yvI -X|;aM,i88\0;]'"d0{r7;N@=_,h ?t Ob=Z&+uy=CU\|Q-NLB4gK.߱9Cuzj_~Pϰn5-({w'H:WOQ N!!]b&"a&ja>De 93$L;`ػyZ^kMF63e[UytvuK,I3m:=v%'2H@s98Y}`Hl\ ֹ&Bs=n<6rnBq>-"݅3k_=W3=ʽ1!=vgϲFNwYW3yǧAu ^pu]NʱP{eLϚ 0X:caϑ }'x/ϥ`:i]}C-֐b x X <찪 ޛt'"-%O0u(̼dUbnvdlO<9DL/K32:(Q=A ^q[{)HxЛU9i{XXo"NN]ث#V39u!*065삲`{ugk J;iFtu&Bܼ*}/I ܜ =uN@"A1 n&xGǪ-9@" xtnı6Ce/@gJjdKƹΌl>Qz!4'0en^AUui#ו-6jо D*&+Ey5?`B݁6l}Ax@ \֑yuFɎ$= 9jt8#ogz;AvbfUQ3l^]Ϻb lZZxY^.F g1u5q0m_Pú!W c)HTYvX _г1Գp$N]C͘g Nd +Dxfz@rxoH$':XB y(~x2܈6^NH+S6/;7HTM᱘Ew{fc` {/rQ/s" gU' VJDhAXkPgX~ty mKf( 'T)Mj }Cs +ua.JC ϖ"6AiX͕MeRo.(I85G9JD6-JʚoHt9B0׃5b㕻 AId1~z$F #J:j9kv; ,ڸvNxN jh2j bn<`I#Ey4;';L x/!?Ao!Q?EYM)68ݿvK>ϏR'TcG%nxWL>xE.F%yu>^ qz^Bg)ښ%*.5&HTL|-1.gZ4뛕5zW-A ~{͘7g2yo9`/n.cI4kНֳR`@?8fd>JlTX=f"F`iʖ]Nt8̻*US:*w{|kh*$]wp|=dw!U䡵[g+D9s^Q &g8~Id /Z(9|%ڋY&ZV[cH[7{Xhٳl[uۤTdO\s^?޼8ZxIg J*Rl`hx39c#f`6bcis}kxk&: _^_ې$&ñqif/,r)3/az\鱜Pr`XJϤбvyvY/q!꧃ٻ,">1kq+y3i^6 +wŰGRXB-#wOg8BV¯b,u Ӧ[ͧ=~8j(@m*E4'e8߼?0&+ɚ"ZZ"dzvFn?r&v4{gL*BWviʸ,$A]jE6?p9}ιεI:<jو"SC'yڰy]wW]aaQى^Y2TW,};76ǿ8vV,ll/\(űSB%n7WJOi=];rH+0 NsqT%pVM)x yóڷ8ZAE mo}yq7:\}Kk'V)2yMgvvS|ԠQS*|U&Sbڐu ©9le2^q|".)pK=bg#"yƙ֠+Uw i?-%5v%`zԙu;KϳVy, UxU3E+M$9U2ç$v@OcPWP+u-Fྎ5}\s#~thej(/moQ^s,&1j;%Wbe2_>t%r |ՕL$(:z֎g*knd^ mg-S%1E$X3^w UiF027ѱd6B2cgE.!vW9@ &bZzFg5oD/OB ٯpv1ԫb *cZ:cr $Ivi^#㗻Ӻf,,?ʘuTKbNr 83OҭAqbIޞ|ؔ#o2R^"Due%,Nf've h#]DcbldpR|EE1*=lC濬s=NpjUY-*V(f) My(̡`n*@O V9kXCk'lb`2}DcI^y,⡦Q)Uհh<UZ%A'*c襥ŽikaԬ ΨX|p,p#$䕟!>~=K BʎK r9! +#O<(RsC^Qr s+;6XT=~hKHVrŒT3aV\OBPOwN5j5đkJY'Q&a#2`fWe8-cˊvd l"L٪ЇJn$[ 4TZXE$Od[V95UWҙڽ]m6=K%Ȃ~wReS;Fu+^#'|Ze(7B{ˬjg3=#$,0iU2<ݩ#ܞORLEb:ı&&K}l6 doR^GI˶(JZڀPHvh Y" 5[Uά뭭}BQR/s֒ER Y 򕌮5S6JYSkH-XGre_kt{;U#9C9{<˪F%v3#tk_:<ط>յѢNKR^ ̵S,W,?!ʞGEOV"sֳU` ؉ Q,3ZBwNt V@;9o 276rL YgwbX!ހW.Z(40c EuK%p)̮~Z>3q<"3gԥst@UijOL@ŧsd xEV^Fg 8[vb=;0'Z+2N'Y\q6ow>>#o/xE e9݂S480 3xlpg1nUeƶ{ [wD.[!sPkǩjķ^830CI2e8TfqN7 8MhUxg;qU d a u7g+k%@^SrXmnJ3QM.cXS7Uj 9+t.O6uDfSHk@%$`gQ@=*S0ol碣vyN6V ƀD䑥66+q@XV9hhK*Z: / O‡SnF.teCRpȋ-:;(j6333mi7>m?`H@fgT}xbjervحG*{6/҅2t}B~Slj& HNKT'ب@ⅅM*64t j2'c1ҭ5[r5)p'[@KKAd';7g5Ɇjku&Xͷ֪>3.eXdPczEmGeơw$_g&)A=GE3 xQAzosD6&vA$naV!t.KTr5dvG  0m % .!PDzS}=(+oK:s`G) "i BޅbXǜ$@;; t^pw;9ngXb2S 'Rlrږm&a6ƒڛ7]?8%5>.[gOQQ*wzLҘ a9M1\~(l< qhʂn:%L:ӳUWtz1.@h/b pk۴@;tΗx"V1 ^;yc*Edt(PXz! Tp̭Iag< K&"/AVyrP?ևo]m,nw;61~TRK$]0HiF@ÚnKps nS 4Z;&m@OB{w*%5( 9ߢSDQvl5eIV)-dj}>ιRviVJŔ%aN*)aᭊ{1[ŋ qte{;3k ?( ʔ.nϚ?nh,ih HohYTEf~ᒭ%ui#؊f/䯊56&ÛĜN{X>O9&l摗94`Y)zZl_rB6o,'6lUwm z<@rg]}5*~$W+ g]–{!II 5˰'|<0p{&:<+Qj [$A":v$3=.7;UX?3nJ%?yfnU)m;yXͣ-u,Nљ/RkY7&ܑ,+뒋n(+ :Tbic}ݡB#yH'V,>B4Rmnd/03T.P脙ս+Wȉ[K xވ/zR.7o#}CcG8-pE$hɬ #-CWhkh*{֪l2 jk:l VU>Mpoe~uT!SjYb 8N}O86,G) ο^+x] em̖0S*qXm ΅?7lyH-ޛ}x4R+31B,ۘl.+$|VYо~)}y(`%7q)tZ@';QGIKEo,F?P=u.79E $Q,rFfYzgnM {uHab7|8>P<8=\۽Fo82;i 968W<Rc**P/whaU^39(YLx20Lݤ"?p[f9gن}`=YX~4N'"'%uҢgm>V]݋a=Scp,v?]Xi+o+^u5x셺բG=%vBgkRݎ}Q6 Įy@㯇#SEjHetLm:0 )pGBNr. Zશf"v/fſ-Sl*gW i@Os*Q. ;~ozyoؼR|goRvu \bzۢ6,e;c[U:J;# ]<xn18E/}7 -'|T >=Kۅެ2#gW7^ir1[uxNY]RcVvkl;#w`]weEp"i-:&ʚaw{_ <8 PWj"hPq<)u}\ wu)Džg"d #߲=̏>ygTH/Yܑg;gDN7:u\knAl>WwS"bI؋/iޫ4p!N_[4r2_EA?* /fNo__^V0 })qõ"ݪjl~3i jJgeM@釁y$ ! + *HjU1ڲ\<+*m-w<NUKۂCO/e$l*%<y'1vpSE&;(OH])|N8G.ZN);/Uy*(~b6ӡc( .Yk5tO07zxt)1/E8^k8B{<哚t7`Fp'L_-V!g: `mu{zng5 lpU`>-St:/qe.*_-'ɦ۱Տ#j(GXS <ͽݥ (imS0p"<.y66qm7v&08]$s9쇣ތb\:0TE;-| S$8Bx-=n;h Xw؅Î8֍^sG$,ﰽMKuͦTshA^Kl~b ݚ:.n!c?iѫa1FQHwE%3% ʼnrȴ= (Y bWeiYV(?E܊qc$lHP-UB}#g$[aU/fn V@똇vd贵26ee:aHJ!AJH@I@H򋊀1YE-w!S \R<`vo+ Je:ʎj]W3{WBR;F+bFV+ng X汆|^ beڅ%{_K9=TծW5T16 ?RLM,V8)l#oN<؁u L!xT袼+. lUV{TmRZѡdhJbed,hK0{:$)OP>1ؿuZ\OyK@nnFr' {aG:_e'Yi8T̮d󕇂VN +'!ͫnuFwT4H} u^u :Rer|G9~H6aWlxUoV56eKppw@n'%K=i/Xmd^ڤbJo#e Fɲgs9*qB b!]F ʂ4VJzM5;闫Tz>'6G)PS;rx~?*7$OOmOHX6z`QlS=N[4kykp]&/MC/Uj9}fEzA& LJ|g]<`DD&SvTLZ&Ys̋{v\!u \a˲6`$a]vkc븒jÛɉ'%}`ÞZ.9Uy ݢ-fߞ-6]Jd\X;KiԴK5wyNs"?Z p#(I[B;jPVEOnj,'OY5mi#YKlK!L^q.ֲ aSm^&CfOʺE"boW<P,Laxe0sRƓ-[7;M$?WUDĹ6͙w#R cAM1VE HjU {Mv"4OU)hEX"/ee y>^gm#4E Dgj:3EJWyTkcI2@=Ñ;֜U !8sޒPP!9"o `,@ͼP (-m8%Xu:[00-a-!k7(9d !ٿ< 8^u:zp˂d'6ʳyA}L5xB,VZ®|RdXi^k٘W57e᛫\CjWrundf h]m'9j>XYL;X|٥Yz f+ZWi*NIw[ࣱ4t/ ON?TF+!Ҿ HS$2})Ww|"i_EϞξ{|%9>.G9;d[I5O:N[vC'RKIpu5 Akֺr` z4q˭;:C_αB&.zR}s]o_Kx].+-DZ ˎN# =ND}b6ć,@ ՊqUx/oTxf{a7Ra؀$n׼nZ^cHCiPc=] mŭ삇?6={ ʠ7>8ߧOo|mKDd9sSFWB7i KQ8亏8Lf- l :^G|nawưp@wJgfg YzwdOԇ~ƃ&EjJݖFXs8S%- (+)Ω:.SWf Jy ˑnE )!Phq1+j5:b UX.ƒdXC:T'ƻƷ%'!(=EהI{%t%Zc\U(8CHyN9lE`ȘNs*])jdnXJwZq5k-=%en=XhSh-jN}@LM:U6'ahoaXةS7 AiG\WT'{5`K8 m,QG9(|"^꡵ T'o$/*Y$l]m(bKIC7)jqR6oJ5T }"72K[2kK3nՔ2qe v`S$>6.o[_9?]-*`pR0vne )@|/LvP!p;.TmRqk`AS¾zgE.³!h6fXLnM su, 0 ZCmwIȂ]MUg7Bw/XC:tv.Xõeg;XuzEf+* rR ln 8$ ?.}~ǿo_?U]?g;Ӧ IOq󨅽T6 !YAP+ogk<$5vUZx<3gaܲ[ RPzht96+ߘ߭v7*JWMcէ*R^N㵳sPi)8e b6w{]G4 ݛ'm CA(BjqmY^/5k#ua)_ӆS[NtZ})"4-nQ1)x΄Oyƍ%骦/vZ&oYٵ[P#H6A7ඏ] p <ߧwSa>%͉Q(s$ɛ1IZi(yC mH ~pgSmyv(xppk\sM|Hׂ#>{;jxeq:E*,NK%'e+q*I60m"jmޖo>_ L& ~Mݔd# #C dm4tkZLAUǗS:MlVMk#d ;Cv7:U g?N麤Emޣ:^^8-}[sn(?^֌Z C#yAj.c wrXϊe{ԭ%,k9hW-P#“UhWZq·ߒQgbynQvo);Gp:{;9y#5q27` Q6b)fjޤCkps&>U=./β'%Z5(;ʠbAQazw9/*<}*r|0l=.X8\Ԙ-hzJWj1T(+\{W~iweͼ9NAodP9-vѓb oYu}nUaSq,v_ 3S9,x#^쑺ثȎBdPWe$4BZ.XKz߈$LC+;.,(ھn:Y%9+]5w޼O Goe ʪ`^}X)ҀbQ~}.j,WN)>hu'[LH[{:=Ii,p,1:mx#yIzmeeTiu5^5Z1,6|<\92u&w֎Ǭ ۓYp9#ر_0cWD29ƦёYٙeZgpsCWlvo7}l?y yR~W)?ȟ<{yjnʯ+w?{?;_|i~4~OHS˾Jl?f#}s_/^y>E ]{)&D y,'kG`@g#FVJD-vs|^:v#(~qO?S};aOSz_W_/Y~֏߰J^"Ϡt}O7W_~:w?y?߾o~oӘ߼w/~mˇ_+_z'*^~*x_{/M(;˞_=|w{}?RX?wû_>՛_!㛟[ux|w_bB5^o߾ͯ^|ś_{~<ׯx/-|5w?~wo޿@o}ww ~+>>%zyueܻ-ugk^=_v)}kz_;_|o_gOηo>=f}K_~|Y}˗/ksM?~o/^_oyw&뷾wU;ܨ/]<^~7D/^{W}7n/D.~/o~k}_I>ΛpMuzvA|co/aa]__sy01{7"ύa~G7͇>b,c;XƵko_ݗ?p1~wLJ>{sRژz~'|]˟]|r8/uҵZocw6ۋ'>GWd݇_q}jDͿȻ7?~/׏hM~H2/}7cor>;BcP1q-'nE<};Z.8~M_vhEo>WÊ^c2YvOn=߇w?2 lxoV)XobUՈ_w_*+,Uo~%o7߽k_ΥoO/更Zay؆Wkw}oX?2C ,߷n/ɉ/Lt7??|'#W,ח?|껟 Ԏ쯿ۯ߯ܝ0HbE_ϋ7_~X |w/̪ n_od"q%?~Cۖq _A7o _ݯ_k}_W/g|(nϸ5qվ|˻{g~q~c]g]ٞ_Il'߾!f]oPX]N9 }|r`= $M`-t31s/ou~ %-Vp%%qQx_n[ y}} cF_~d7g>„ˇ6+O W.s/O;{)/>eYf䋷>þ6\?|귯*|t cot+>BBO 3>y,yAQV?w6W=SbLX_.o.XûO_~lwқ߅PtM{Gß?~:o[_/K(߾ /lE߆p),7߈M^nbH K_у+G 彘v +K7I~BW6V|_e nk~]}yQ) Ob>۬ͫwpR "\L&Y(U~O,D+^ ֥"k~~뫟E^O7 I''';v|xo$Zow_?$|}OE],ۢEz]/4z;^B>ɪ7io~[-ï7 ?|Y{KX1ue__~O@邹AFz!ӷ =L* ]w?gzco?㿾~a/KO?s߽__^X[ʹ,?ϋ5mZSgzhf/Y ILQ~Kހ4=LgƮmm#W΋d؎Efhiч@(⠠$$7u{眙P%6%-ggr*وBĢ+1Ln(V>pb2̎ "bڦ>M8<~Xʰ~ -bu YQQtXT_i6J[Zu;din4koQ.t3,/ ms7STxi-q7#AQǖ-,V=#Ve,V~[7m)3r+Q0KKb9ڹa F'WR#]sMϵw*=-M>ekewd06bUNג .? %O:L׊D@xj@zg` A{q9 ISF=5pj5 {pv5W:GbaE6Ị,ԓh6ܓU,3 +(O$M,U.y#eg&$V^pw* 2&_䕂c''0T~'mIԑmK5}y_,AvD\*>㑵wL~eIqB:(l;p>)lh:C>Z:0'Lt\TX!@{<{^Sm1n xK+|Vz}P0ЀĬ%PM[YĜU1$̃JPG/ ~E j!֩J /<*6h/ɤKY$o\gi)4z9%x<(BPA(VL ـ &sNj/%t^Ҷca65t!>Fhc 4մӜaX7`ȴ&ZwnŢ-E~|Kd݌pNkERc ysyvP#K.hQafݗ`0CY{:?Fo1ZSں CWB}Qcb'!/8=c蒺y?HZ#gDmC_لnCBq&wqf+#)M=c;`^=7N\8 Ug>\P2Lg14Mw W<sV_6͹}I*\hP^A6Xcnj=>"c!3 v,1MktA9۲4i[`ҞNš'76j 냼UNœR RwXl2I۲:Gab2J/$9dtu컦Gaic/V`B?6ku<;FMnZux֩]gF~W g YfwzLMh'}<џ+Bf1o%Z'Z Wi@|ٜT( 5c:U|./ҢNBGifi^maJ_J[D)BN4G3y`(:v궵|*u:n郿?f#5<` +C;|#A p5`>8r J86ȥ&ɗFsJ< 'Rc~{>8W}4!2Hgp5;}/\tfӵn(8'7GȻf!i|i.Q?ߌNFr /|%ӏѤdIU{> This generates the `Makefile' in the source directory. The software is installed by default in `/usr/local/bin'. This path is customizable thanks to the `--bindir' option. 2. Build the executable. From the source directory, do: << make >> This builds an executable named headache. 3. In order to install it in the directory specified during configuration, as a superuser, do: << make install >> 3 Usage *=*=*=*= Let us illustrate the use of this tool with a small example. Assume you have a small project mixing C and Caml code consisting in three files `foo.c', `bar.ml' and `bar.mli'', and you want to equip them with some header. First of all, write a header file, i.e. a plain text file including the information headers must mention. An example of such a file is given in figure 1. In the following, we assume this file is named `myheader' and is in the same directory as source files. Then, in order to generate headers, just run the command: << headache -h myheader foo.c bar.ml bar.mli >> Each file is equipped with an header including the text given in the header file `myheader', surrounded by some extra characters depending on its format making it a comment (e.g. `(*' and `*)' in `.ml' files). If you update informations in the header file `myheader', you simply need to re-run the above command to update headers in source code files: existing ones are automatically removed. Similarly, running: << headache -r foo.c bar.ml bar.mli >> removes any existing in files `foo.c', `bar.ml' and `bar.mli'. Files which do not have a header are kept unchanged. -------------------------------------------------------- << Headache Automatic generation of files headers Vincent Simonet, Projet Cristal, INRIA Rocquencourt Copyright 2002 Institut National de Recherche en Informatique et en Automatique. All rights reserved. This file is distributed under the terms of the GNU Library General Public License. Vincent.Simonet@inria.fr http://cristal.inria.fr/~simonet/ >> Figure 1: An example of header file -------------------------------------------------------- 4 Configuration file *=*=*=*=*=*=*=*=*=*=* File types and format of header may be specified by a configuration file. By default, the default builtin configuration file given in figure 2 is used. You can also use your own configuration file thanks to the `-c' option: << headache -c myconfig -h myheader foo.c bar.ml bar.mli >> In order to write your own configuration, you can follow the example given in figure 2. A configuration file consists in a list of entries separated by the character `|'. Each of them is made of two parts separated by an `->': - The first one is a regular expression. (Regular expression are enclosed within double quotes and have the same syntax as in Gnu Emacs.) headache determines file types according to file basenames; thus, each file is dealt with using the first line its name matches. - The second one describes the format of headers for files of this type. It consists of the name of a model (e.g. `frame'), possibly followed by a list of arguments. Arguments are named: `open:"(*"' means that the value of the argument `open' is `(*'. headache currently supports three models: - `frame'. With this model, headers are generated in a frame. This model requires three arguments: `open' and `close' (the opening and closing sequences for comments) and `line' (the character used to make the horizontal lines of the frame). Two optional arguments may be used `margin' (a string printed between the left and right side of the frame and the border, by default two spaces) and `width' (the width of the inside of the frame, default is 68). - `lines'. Headers are typeset between two lines. Three arguments must be provided: `open' and `close' (the opening and closing sequences for comments), `line' (the character used to make the horizontal lines). Three optional arguments are allowd: `begin' (a string typeset at the beginning of each line, by default two spaces), `last' (a string typeset at the beginning of the last line) and `width' (the width of the lines, default is 70). - `no'. This model generates no header and has no argument. It is possible to change the default builtin configuration file at compile time. For this, just edit the file `config_builtin' present in the source distribution before building the software. -------------------------------------------------------- << # Objective Caml source ".*\\.ml[il]?" -> frame open:"(*" line:"*" close:"*)" | ".*\\.mly" -> frame open:"/*" line:"*" close:"*/" # C source | ".*\\.[ch]" -> frame open:"/*" line:"*" close:"*/" # Misc | ".*Makefile.*" -> frame open:"#" line:"#" close:"#" | ".*README.*" -> frame open:"*" line:"*" close:"*" | ".*LICENSE.*" -> frame open:"*" line:"*" close:"*" >> Figure 2: The default builtin configuration file -------------------------------------------------------- ----------------------------------- (1) manual.txt (2) manual.ps.gz (3) manual.pdf ----------------------------------------------------------------------- This document was translated from LaTeX by HeVeA (http://pauillac.inria.fr/~maranget/hevea/index.html). headache-1.03/doc/manual.html0100644002701000512160000002061510031764546016002 0ustar simonetcristal headache

headache

Vincent Simonet

November, 2002

This manual is also available in
plain text, PostScript and PDF.

1  Overview

It is a common usage to put at the beginning of source code files a short header giving, for instance, some copyright informations. headache is a simple and lightweight tool for managing easily these headers. Among its functionalities, one may mention:
  • Headers must generally be generated as comments in source code files. headache deals with different files types and generates for each of them headers in an appropriate format.
  • Headers automatically detects existing headers and removes them. Thus, you can use it to update headers in a set of files.
headache is distributed under the terms of the GNU Library General Public License. See file LICENSE of the distribution for more information.

2  Compilation and installation

Building headache requires Objective Caml (version 3.06 or up, available at http://caml.inria.fr/) and GNU Make.

Instructions
  1. Configure the system. From the source directory, do:
      ./configure
    
    This generates the Makefile in the source directory. The software is installed by default in /usr/local/bin. This path is customizable thanks to the --bindir option.

  2. Build the executable. From the source directory, do:
      make
    
    This builds an executable named headache.

  3. In order to install it in the directory specified during configuration, as a superuser, do:
      make install
    

3  Usage

Let us illustrate the use of this tool with a small example. Assume you have a small project mixing C and Caml code consisting in three files foo.c, bar.ml and bar.mli', and you want to equip them with some header. First of all, write a header file, i.e. a plain text file including the information headers must mention. An example of such a file is given in figure 1. In the following, we assume this file is named myheader and is in the same directory as source files.

Then, in order to generate headers, just run the command:
  headache -h myheader foo.c bar.ml bar.mli
Each file is equipped with an header including the text given in the header file myheader, surrounded by some extra characters depending on its format making it a comment (e.g. (* and *) in .ml files). If you update informations in the header file myheader, you simply need to re-run the above command to update headers in source code files: existing ones are automatically removed.

Similarly, running:
  headache -r foo.c bar.ml bar.mli
removes any existing in files foo.c, bar.ml and bar.mli. Files which do not have a header are kept unchanged.

                             Headache
               Automatic generation of files headers

        Vincent Simonet, Projet Cristal, INRIA Rocquencourt

Copyright 2002 
Institut National de Recherche en Informatique et en Automatique.
All rights reserved.  This file is distributed under the terms of
the GNU Library General Public License.

Vincent.Simonet@inria.fr           http://cristal.inria.fr/~simonet/

Figure 1: An example of header file


4  Configuration file

File types and format of header may be specified by a configuration file. By default, the default builtin configuration file given in figure 2 is used. You can also use your own configuration file thanks to the -c option:
  headache -c myconfig -h myheader foo.c bar.ml bar.mli
In order to write your own configuration, you can follow the example given in figure 2. A configuration file consists in a list of entries separated by the character |. Each of them is made of two parts separated by an ->:
  • The first one is a regular expression. (Regular expression are enclosed within double quotes and have the same syntax as in Gnu Emacs.) headache determines file types according to file basenames; thus, each file is dealt with using the first line its name matches.
  • The second one describes the format of headers for files of this type. It consists of the name of a model (e.g. frame), possibly followed by a list of arguments. Arguments are named: open:"(*" means that the value of the argument open is (*.
headache currently supports three models:
  • frame. With this model, headers are generated in a frame. This model requires three arguments: open and close (the opening and closing sequences for comments) and line (the character used to make the horizontal lines of the frame). Two optional arguments may be used margin (a string printed between the left and right side of the frame and the border, by default two spaces) and width (the width of the inside of the frame, default is 68).
  • lines. Headers are typeset between two lines. Three arguments must be provided: open and close (the opening and closing sequences for comments), line (the character used to make the horizontal lines). Three optional arguments are allowd: begin (a string typeset at the beginning of each line, by default two spaces), last (a string typeset at the beginning of the last line) and width (the width of the lines, default is 70).
  • no. This model generates no header and has no argument.
It is possible to change the default builtin configuration file at compile time. For this, just edit the file config_builtin present in the source distribution before building the software.

# Objective Caml source 
  ".*\\.ml[il]?" -> frame open:"(*" line:"*" close:"*)"
| ".*\\.mly"     -> frame open:"/*" line:"*" close:"*/"
# C source
| ".*\\.[ch]"    -> frame open:"/*" line:"*" close:"*/"
# Misc
| ".*Makefile.*" -> frame open:"#"  line:"#" close:"#"
| ".*README.*"   -> frame open:"*"  line:"*" close:"*"
| ".*LICENSE.*"  -> frame open:"*"  line:"*" close:"*"

Figure 2: The default builtin configuration file



This document was translated from LATEX by HEVEA.
headache-1.03/README0100644002701000512160000001663110031764546013755 0ustar simonetcristal headache ******** Vincent Simonet =============== November, 2002 =============== This manual is also available in plain text (1), PostScript (2) and PDF (3). 1 Overview *=*=*=*=*=* It is a common usage to put at the beginning of source code files a short header giving, for instance, some copyright informations. headache is a simple and lightweight tool for managing easily these headers. Among its functionalities, one may mention: - Headers must generally be generated as comments in source code files. headache deals with different files types and generates for each of them headers in an appropriate format. - Headers automatically detects existing headers and removes them. Thus, you can use it to update headers in a set of files. headache is distributed under the terms of the GNU Library General Public License. See file `LICENSE' of the distribution for more information. 2 Compilation and installation *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* Building headache requires Objective Caml (version 3.06 or up, available at http://caml.inria.fr/) and GNU Make. Instructions 1. Configure the system. From the source directory, do: << ./configure >> This generates the `Makefile' in the source directory. The software is installed by default in `/usr/local/bin'. This path is customizable thanks to the `--bindir' option. 2. Build the executable. From the source directory, do: << make >> This builds an executable named headache. 3. In order to install it in the directory specified during configuration, as a superuser, do: << make install >> 3 Usage *=*=*=*= Let us illustrate the use of this tool with a small example. Assume you have a small project mixing C and Caml code consisting in three files `foo.c', `bar.ml' and `bar.mli'', and you want to equip them with some header. First of all, write a header file, i.e. a plain text file including the information headers must mention. An example of such a file is given in figure 1. In the following, we assume this file is named `myheader' and is in the same directory as source files. Then, in order to generate headers, just run the command: << headache -h myheader foo.c bar.ml bar.mli >> Each file is equipped with an header including the text given in the header file `myheader', surrounded by some extra characters depending on its format making it a comment (e.g. `(*' and `*)' in `.ml' files). If you update informations in the header file `myheader', you simply need to re-run the above command to update headers in source code files: existing ones are automatically removed. Similarly, running: << headache -r foo.c bar.ml bar.mli >> removes any existing in files `foo.c', `bar.ml' and `bar.mli'. Files which do not have a header are kept unchanged. -------------------------------------------------------- << Headache Automatic generation of files headers Vincent Simonet, Projet Cristal, INRIA Rocquencourt Copyright 2002 Institut National de Recherche en Informatique et en Automatique. All rights reserved. This file is distributed under the terms of the GNU Library General Public License. Vincent.Simonet@inria.fr http://cristal.inria.fr/~simonet/ >> Figure 1: An example of header file -------------------------------------------------------- 4 Configuration file *=*=*=*=*=*=*=*=*=*=* File types and format of header may be specified by a configuration file. By default, the default builtin configuration file given in figure 2 is used. You can also use your own configuration file thanks to the `-c' option: << headache -c myconfig -h myheader foo.c bar.ml bar.mli >> In order to write your own configuration, you can follow the example given in figure 2. A configuration file consists in a list of entries separated by the character `|'. Each of them is made of two parts separated by an `->': - The first one is a regular expression. (Regular expression are enclosed within double quotes and have the same syntax as in Gnu Emacs.) headache determines file types according to file basenames; thus, each file is dealt with using the first line its name matches. - The second one describes the format of headers for files of this type. It consists of the name of a model (e.g. `frame'), possibly followed by a list of arguments. Arguments are named: `open:"(*"' means that the value of the argument `open' is `(*'. headache currently supports three models: - `frame'. With this model, headers are generated in a frame. This model requires three arguments: `open' and `close' (the opening and closing sequences for comments) and `line' (the character used to make the horizontal lines of the frame). Two optional arguments may be used `margin' (a string printed between the left and right side of the frame and the border, by default two spaces) and `width' (the width of the inside of the frame, default is 68). - `lines'. Headers are typeset between two lines. Three arguments must be provided: `open' and `close' (the opening and closing sequences for comments), `line' (the character used to make the horizontal lines). Three optional arguments are allowd: `begin' (a string typeset at the beginning of each line, by default two spaces), `last' (a string typeset at the beginning of the last line) and `width' (the width of the lines, default is 70). - `no'. This model generates no header and has no argument. It is possible to change the default builtin configuration file at compile time. For this, just edit the file `config_builtin' present in the source distribution before building the software. -------------------------------------------------------- << # Objective Caml source ".*\\.ml[il]?" -> frame open:"(*" line:"*" close:"*)" | ".*\\.mly" -> frame open:"/*" line:"*" close:"*/" # C source | ".*\\.[ch]" -> frame open:"/*" line:"*" close:"*/" # Misc | ".*Makefile.*" -> frame open:"#" line:"#" close:"#" | ".*README.*" -> frame open:"*" line:"*" close:"*" | ".*LICENSE.*" -> frame open:"*" line:"*" close:"*" >> Figure 2: The default builtin configuration file -------------------------------------------------------- ----------------------------------- (1) manual.txt (2) manual.ps.gz (3) manual.pdf ----------------------------------------------------------------------- This document was translated from LaTeX by HeVeA (http://pauillac.inria.fr/~maranget/hevea/index.html).