From bd73ee14febebf5d62ef08638848409a07a7b58d Mon Sep 17 00:00:00 2001 From: datajerk Date: Thu, 10 Apr 2008 19:42:20 +0000 Subject: [PATCH] Ok, cleaned up. --- Curses-1.23/Artistic | 131 - Curses-1.23/Copying | 248 - Curses-1.23/Curses.c | 393 -- Curses-1.23/Curses.pm | 899 ---- Curses-1.23/CursesBoot.c | 1236 ----- Curses-1.23/CursesCon.c | 436 -- Curses-1.23/CursesFun.c | 6949 ------------------------- Curses-1.23/CursesTyp.h | 52 - Curses-1.23/CursesVar.c | 248 - Curses-1.23/HISTORY | 219 - Curses-1.23/INSTALL | 280 - Curses-1.23/MAINTENANCE | 73 - Curses-1.23/MANIFEST | 70 - Curses-1.23/Makefile.PL | 629 --- Curses-1.23/README | 144 - Curses-1.23/cdemo.c | 135 - Curses-1.23/demo | 79 - Curses-1.23/demo.form | 199 - Curses-1.23/demo.menu | 121 - Curses-1.23/demo.panel | 80 - Curses-1.23/demo2 | 78 - Curses-1.23/gdc | 150 - Curses-1.23/gen/Gen.pm | 468 -- Curses-1.23/gen/README | 5 - Curses-1.23/gen/increase-version | 22 - Curses-1.23/gen/list.con | 304 -- Curses-1.23/gen/list.fun | 645 --- Curses-1.23/gen/list.typ | 6 - Curses-1.23/gen/list.var | 9 - Curses-1.23/gen/make.Curses.pm | 559 -- Curses-1.23/gen/make.CursesBoot.c | 128 - Curses-1.23/gen/make.CursesCon.c | 69 - Curses-1.23/gen/make.CursesFun.c | 150 - Curses-1.23/gen/make.CursesTyp.h | 54 - Curses-1.23/gen/make.CursesVar.c | 182 - Curses-1.23/gen/make.list.syms | 67 - Curses-1.23/hints/c-MSWin32.borland.h | 38 - Curses-1.23/hints/c-MSWin32.visualc.h | 38 - Curses-1.23/hints/c-aix.h | 27 - Curses-1.23/hints/c-bsd386.h | 30 - Curses-1.23/hints/c-bsdos.h | 29 - Curses-1.23/hints/c-cygwin.h | 31 - Curses-1.23/hints/c-darwin.h | 29 - Curses-1.23/hints/c-darwin.old.h | 29 - Curses-1.23/hints/c-dec_osf.h | 30 - Curses-1.23/hints/c-dgux.h | 29 - Curses-1.23/hints/c-dynixptx.h | 29 - Curses-1.23/hints/c-freebsd.bsd.h | 17 - Curses-1.23/hints/c-freebsd.ncurses.h | 29 - Curses-1.23/hints/c-gnukfreebsd.h | 27 - Curses-1.23/hints/c-hpux.h | 27 - Curses-1.23/hints/c-irix.bsd.h | 17 - Curses-1.23/hints/c-irix.ncurses.h | 30 - Curses-1.23/hints/c-isc.h | 29 - Curses-1.23/hints/c-linux.bsd.h | 15 - Curses-1.23/hints/c-linux.ncurses.h | 27 - Curses-1.23/hints/c-netbsd.h | 35 - Curses-1.23/hints/c-next.h | 29 - Curses-1.23/hints/c-none.h | 40 - Curses-1.23/hints/c-openbsd.h | 29 - Curses-1.23/hints/c-os2.ncurses.h | 29 - Curses-1.23/hints/c-sco.h | 29 - Curses-1.23/hints/c-solaris.h | 29 - Curses-1.23/hints/c-sunos.bsd.h | 15 - Curses-1.23/hints/c-sunos.ncurses.h | 29 - Curses-1.23/hints/c-sunos.sysv.h | 52 - Curses-1.23/hints/c-svr4.h | 30 - Curses-1.23/hints/c-vms.h | 32 - Curses-1.23/list.syms | 349 -- Curses-1.23/perl-Curses.spec | 69 - Curses-1.23/ppport.h | 6377 ----------------------- Curses-1.23/t/00-load.t | 9 - Curses-1.23/test.syms | 310 -- Curses-1.23/testint.c | 7 - Curses-1.23/testsym.c | 5 - Curses-1.23/testtyp.c | 5 - perl-Curses/Curses-1.23.tar.gz | Bin 0 -> 257871 bytes 77 files changed, 23583 deletions(-) delete mode 100644 Curses-1.23/Artistic delete mode 100644 Curses-1.23/Copying delete mode 100644 Curses-1.23/Curses.c delete mode 100644 Curses-1.23/Curses.pm delete mode 100644 Curses-1.23/CursesBoot.c delete mode 100644 Curses-1.23/CursesCon.c delete mode 100644 Curses-1.23/CursesFun.c delete mode 100644 Curses-1.23/CursesTyp.h delete mode 100644 Curses-1.23/CursesVar.c delete mode 100644 Curses-1.23/HISTORY delete mode 100644 Curses-1.23/INSTALL delete mode 100644 Curses-1.23/MAINTENANCE delete mode 100644 Curses-1.23/MANIFEST delete mode 100755 Curses-1.23/Makefile.PL delete mode 100644 Curses-1.23/README delete mode 100644 Curses-1.23/cdemo.c delete mode 100755 Curses-1.23/demo delete mode 100755 Curses-1.23/demo.form delete mode 100755 Curses-1.23/demo.menu delete mode 100755 Curses-1.23/demo.panel delete mode 100755 Curses-1.23/demo2 delete mode 100755 Curses-1.23/gdc delete mode 100644 Curses-1.23/gen/Gen.pm delete mode 100644 Curses-1.23/gen/README delete mode 100755 Curses-1.23/gen/increase-version delete mode 100644 Curses-1.23/gen/list.con delete mode 100644 Curses-1.23/gen/list.fun delete mode 100644 Curses-1.23/gen/list.typ delete mode 100644 Curses-1.23/gen/list.var delete mode 100755 Curses-1.23/gen/make.Curses.pm delete mode 100755 Curses-1.23/gen/make.CursesBoot.c delete mode 100755 Curses-1.23/gen/make.CursesCon.c delete mode 100755 Curses-1.23/gen/make.CursesFun.c delete mode 100755 Curses-1.23/gen/make.CursesTyp.h delete mode 100755 Curses-1.23/gen/make.CursesVar.c delete mode 100755 Curses-1.23/gen/make.list.syms delete mode 100644 Curses-1.23/hints/c-MSWin32.borland.h delete mode 100644 Curses-1.23/hints/c-MSWin32.visualc.h delete mode 100644 Curses-1.23/hints/c-aix.h delete mode 100644 Curses-1.23/hints/c-bsd386.h delete mode 100644 Curses-1.23/hints/c-bsdos.h delete mode 100644 Curses-1.23/hints/c-cygwin.h delete mode 100644 Curses-1.23/hints/c-darwin.h delete mode 100644 Curses-1.23/hints/c-darwin.old.h delete mode 100644 Curses-1.23/hints/c-dec_osf.h delete mode 100644 Curses-1.23/hints/c-dgux.h delete mode 100644 Curses-1.23/hints/c-dynixptx.h delete mode 100644 Curses-1.23/hints/c-freebsd.bsd.h delete mode 100644 Curses-1.23/hints/c-freebsd.ncurses.h delete mode 100644 Curses-1.23/hints/c-gnukfreebsd.h delete mode 100644 Curses-1.23/hints/c-hpux.h delete mode 100644 Curses-1.23/hints/c-irix.bsd.h delete mode 100644 Curses-1.23/hints/c-irix.ncurses.h delete mode 100644 Curses-1.23/hints/c-isc.h delete mode 100644 Curses-1.23/hints/c-linux.bsd.h delete mode 100644 Curses-1.23/hints/c-linux.ncurses.h delete mode 100644 Curses-1.23/hints/c-netbsd.h delete mode 100644 Curses-1.23/hints/c-next.h delete mode 100644 Curses-1.23/hints/c-none.h delete mode 100644 Curses-1.23/hints/c-openbsd.h delete mode 100644 Curses-1.23/hints/c-os2.ncurses.h delete mode 100644 Curses-1.23/hints/c-sco.h delete mode 100644 Curses-1.23/hints/c-solaris.h delete mode 100644 Curses-1.23/hints/c-sunos.bsd.h delete mode 100644 Curses-1.23/hints/c-sunos.ncurses.h delete mode 100644 Curses-1.23/hints/c-sunos.sysv.h delete mode 100644 Curses-1.23/hints/c-svr4.h delete mode 100644 Curses-1.23/hints/c-vms.h delete mode 100644 Curses-1.23/list.syms delete mode 100644 Curses-1.23/perl-Curses.spec delete mode 100644 Curses-1.23/ppport.h delete mode 100644 Curses-1.23/t/00-load.t delete mode 100755 Curses-1.23/test.syms delete mode 100644 Curses-1.23/testint.c delete mode 100644 Curses-1.23/testsym.c delete mode 100644 Curses-1.23/testtyp.c create mode 100644 perl-Curses/Curses-1.23.tar.gz diff --git a/Curses-1.23/Artistic b/Curses-1.23/Artistic deleted file mode 100644 index 11f4d82..0000000 --- a/Curses-1.23/Artistic +++ /dev/null @@ -1,131 +0,0 @@ - - - - - The "Artistic License" - - Preamble - -The intent of this document is to state the conditions under which a -Package may be copied, such that the Copyright Holder maintains some -semblance of artistic control over the development of the package, -while giving the users of the package the right to use and distribute -the Package in a more-or-less customary fashion, plus the right to make -reasonable modifications. - -Definitions: - - "Package" refers to the collection of files distributed by the - Copyright Holder, and derivatives of that collection of files - created through textual modification. - - "Standard Version" refers to such a Package if it has not been - modified, or has been modified in accordance with the wishes - of the Copyright Holder as specified below. - - "Copyright Holder" is whoever is named in the copyright or - copyrights for the package. - - "You" is you, if you're thinking about copying or distributing - this Package. - - "Reasonable copying fee" is whatever you can justify on the - basis of media cost, duplication charges, time of people involved, - and so on. (You will not be required to justify it to the - Copyright Holder, but only to the computing community at large - as a market that must bear the fee.) - - "Freely Available" means that no fee is charged for the item - itself, though there may be fees involved in handling the item. - It also means that recipients of the item may redistribute it - under the same conditions they received it. - -1. You may make and give away verbatim copies of the source form of the -Standard Version of this Package without restriction, provided that you -duplicate all of the original copyright notices and associated disclaimers. - -2. You may apply bug fixes, portability fixes and other modifications -derived from the Public Domain or from the Copyright Holder. A Package -modified in such a way shall still be considered the Standard Version. - -3. You may otherwise modify your copy of this Package in any way, provided -that you insert a prominent notice in each changed file stating how and -when you changed that file, and provided that you do at least ONE of the -following: - - a) place your modifications in the Public Domain or otherwise make them - Freely Available, such as by posting said modifications to Usenet or - an equivalent medium, or placing the modifications on a major archive - site such as uunet.uu.net, or by allowing the Copyright Holder to include - your modifications in the Standard Version of the Package. - - b) use the modified Package only within your corporation or organization. - - c) rename any non-standard executables so the names do not conflict - with standard executables, which must also be provided, and provide - a separate manual page for each non-standard executable that clearly - documents how it differs from the Standard Version. - - d) make other distribution arrangements with the Copyright Holder. - -4. You may distribute the programs of this Package in object code or -executable form, provided that you do at least ONE of the following: - - a) distribute a Standard Version of the executables and library files, - together with instructions (in the manual page or equivalent) on where - to get the Standard Version. - - b) accompany the distribution with the machine-readable source of - the Package with your modifications. - - c) give non-standard executables non-standard names, and clearly - document the differences in manual pages (or equivalent), together - with instructions on where to get the Standard Version. - - d) make other distribution arrangements with the Copyright Holder. - -5. You may charge a reasonable copying fee for any distribution of this -Package. You may charge any fee you choose for support of this -Package. You may not charge a fee for this Package itself. However, -you may distribute this Package in aggregate with other (possibly -commercial) programs as part of a larger (possibly commercial) software -distribution provided that you do not advertise this Package as a -product of your own. You may embed this Package's interpreter within -an executable of yours (by linking); this shall be construed as a mere -form of aggregation, provided that the complete Standard Version of the -interpreter is so embedded. - -6. The scripts and library files supplied as input to or produced as -output from the programs of this Package do not automatically fall -under the copyright of this Package, but belong to whomever generated -them, and may be sold commercially, and may be aggregated with this -Package. If such scripts or library files are aggregated with this -Package via the so-called "undump" or "unexec" methods of producing a -binary executable image, then distribution of such an image shall -neither be construed as a distribution of this Package nor shall it -fall under the restrictions of Paragraphs 3 and 4, provided that you do -not represent such an executable image as a Standard Version of this -Package. - -7. C subroutines (or comparably compiled subroutines in other -languages) supplied by you and linked into this Package in order to -emulate subroutines and variables of the language defined by this -Package shall not be considered part of this Package, but are the -equivalent of input as in Paragraph 6, provided these subroutines do -not change the language in any way that would cause it to fail the -regression tests for the language. - -8. Aggregation of this Package with a commercial distribution is always -permitted provided that the use of this Package is embedded; that is, -when no overt attempt is made to make this Package's interfaces visible -to the end user of the commercial distribution. Such use shall not be -construed as a distribution of this Package. - -9. The name of the Copyright Holder may not be used to endorse or promote -products derived from this software without specific prior written permission. - -10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - - The End diff --git a/Curses-1.23/Copying b/Curses-1.23/Copying deleted file mode 100644 index 43cd72c..0000000 --- a/Curses-1.23/Copying +++ /dev/null @@ -1,248 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 1, February 1989 - - Copyright (C) 1989 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. - - Preamble - - The license agreements of most software companies try to keep users -at the mercy of those companies. By contrast, our General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. The -General Public License applies to the Free Software Foundation's -software and to any other program whose authors commit to using it. -You can use it for your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Specifically, the General Public License is designed to make -sure that you have the freedom to give away or sell copies of free -software, 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 software, or if you modify it. - - For example, if you distribute copies of a such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must tell them their rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any program or other work which -contains a notice placed by the copyright holder saying it may be -distributed under the terms of this General Public License. The -"Program", below, refers to any such program or work, and a "work based -on the Program" means either the Program or any work containing the -Program or a portion of it, either verbatim or with modifications. Each -licensee is addressed as "you". - - 1. You may copy and distribute verbatim copies of the Program's 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 -General Public License and to the absence of any warranty; and give any -other recipients of the Program a copy of this General Public License -along with the Program. You may charge a fee for the physical act of -transferring a copy. - - 2. You may modify your copy or copies of the Program or any portion of -it, and copy and distribute such modifications under the terms of Paragraph -1 above, provided that you also do the following: - - a) cause the modified files to carry prominent notices stating that - you changed the files and the date of any change; and - - b) cause the whole of any work that you distribute or publish, that - in whole or in part contains the Program or any part thereof, either - with or without modifications, to be licensed at no charge to all - third parties under the terms of this General Public License (except - that you may choose to grant warranty protection to some or all - third parties, at your option). - - c) If the modified program normally reads commands interactively when - run, you must cause it, when started running for such interactive use - in the simplest and most usual way, to print or display an - announcement including an appropriate copyright notice and a notice - that there is no warranty (or else, saying that you provide a - warranty) and that users may redistribute the program under these - conditions, and telling the user how to view a copy of this General - Public License. - - d) 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. - -Mere aggregation of another independent work with the Program (or its -derivative) on a volume of a storage or distribution medium does not bring -the other work under the scope of these terms. - - 3. You may copy and distribute the Program (or a portion or derivative of -it, under Paragraph 2) in object code or executable form under the terms of -Paragraphs 1 and 2 above provided that you also do one of the following: - - a) accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of - Paragraphs 1 and 2 above; or, - - b) accompany it with a written offer, valid for at least three - years, to give any third party free (except for a nominal charge - for the cost of distribution) a complete machine-readable copy of the - corresponding source code, to be distributed under the terms of - Paragraphs 1 and 2 above; or, - - c) accompany it with the information you received as to where the - corresponding source code may be obtained. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form alone.) - -Source code for a work means the preferred form of the work for making -modifications to it. For an executable file, complete source code means -all the source code for all modules it contains; but, as a special -exception, it need not include source code for modules which are standard -libraries that accompany the operating system on which the executable -file runs, or for standard header files or definitions files that -accompany that operating system. - - 4. You may not copy, modify, sublicense, distribute or transfer the -Program except as expressly provided under this General Public License. -Any attempt otherwise to copy, modify, sublicense, distribute or transfer -the Program is void, and will automatically terminate your rights to use -the Program under this License. However, parties who have received -copies, or rights to use copies, from you under this General Public -License will not have their licenses terminated so long as such parties -remain in full compliance. - - 5. By copying, distributing or modifying the Program (or any work based -on the Program) you indicate your acceptance of this license to do so, -and all its terms and conditions. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the original -licensor to copy, distribute or modify the Program subject to these -terms and conditions. You may not impose any further restrictions on the -recipients' exercise of the rights granted herein. - - 7. The Free Software Foundation may publish revised and/or new versions -of the 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 Program -specifies a version number of the 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 Program does not specify a version number of -the license, you may choose any version ever published by the Free Software -Foundation. - - 8. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, 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 - - 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "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 PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 10. 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 PROGRAM 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 PROGRAM (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 PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), 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 Programs - - If you develop a new program, and you want it to be of the greatest -possible use to humanity, the best way to achieve this is to make it -free software which everyone can redistribute and change under these -terms. - - To do so, attach the following notices to the program. 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) 19yy - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 1, or (at your option) - any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; 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. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) 19xx name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the -appropriate parts of the General Public License. Of course, the -commands you use may be called something other than `show w' and `show -c'; they could even be mouse-clicks or menu items--whatever suits your -program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - program `Gnomovision' (a program to direct compilers to make passes - at assemblers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/Curses-1.23/Curses.c b/Curses-1.23/Curses.c deleted file mode 100644 index 4c184a7..0000000 --- a/Curses-1.23/Curses.c +++ /dev/null @@ -1,393 +0,0 @@ -/* Curses.c -** -** Copyright (c) 1994-2000 William Setzer -** -** You may distribute under the terms of either the Artistic License -** or the GNU General Public License, as specified in the README file. -*/ - -#include "CursesDef.h" -#include "CursesTyp.h" -#include "c-config.h" - -/* c-config.h above includes Ncurses header files that define macro - 'instr'. Unfortunately, perl.h (below) also defines 'instr'. - Fortunately, we don't need the Curses version -- we use - winstr(stdscr, ...) instead. So we undef instr here to avoid a compiler - warning about the redeclaration. - - Similarly, c-config.h may define a macro "tab", while the word - "tab" is used in perl.h another way, so we undefine it to avoid - a nasty syntax error. - - "term.h" pollutes the name space with hundreds of other macros too. - We'll probably have to add to this list; maybe someday we should - just undef them all, since we don't use them. - - "bool" is another, and is more problematic. Sometimes, ncurses.h - defines that explicitly and that's bad, but sometimes it does it - by including , and that's fine. In the former case, - we should undefine it now, but in the latter we can't, because then - a subsequent #include (by something we #include below) - won't define bool because stdbool.h has already been included. - - We're going to leave bool alone now and wait for someone to report - that it breaks something. With a real example, we can then plan how - to work around this unfortunate ncurses.h behavior. We once had a - #undef bool.h in the Mac OSX hints file, so someone presumably found - it necessary. But we have also had a Mac OSX system on which compile - failed _because_ of that undef, for the reason described above. - */ - -#undef instr -#undef tab - -#include /* Needed by */ -#include -#include -/* I don't know why NEED_sv_2pv_flags is necessary, but ppport.h doesn't - work right without it. Maybe a bug in Devel::PPPort? */ -#define NEED_sv_2pv_flags -#include "ppport.h" - -#ifndef C_PANELSUPPORT -# define PANEL int -#endif - -#ifndef C_MENUSUPPORT -# define MENU int -# define ITEM int -#endif - -#ifndef C_FORMSUPPORT -# define FORM int -# define FIELD int -#endif - -/* Before 1.17 (September 2007), we undefined macro 'SP' here, for - the Pdcurses case only. I don't know why, but it caused the build - with Pdcurses to fail, so we took it out. 'SP' is - defined in Perl's CORE/pp.h via our inclusion of perl.h above. -*/ - -/* What a mess. :( */ -#ifndef PERL_VERSION -# define PL_sv_undef sv_undef -# define PL_sv_yes sv_yes -#endif - -/* -** Begin support variables and functions -*/ - -static char *c_function; -static int c_win, c_x, c_arg; - -static void -c_countargs(fn, nargs, base) -char *fn; -int nargs; -int base; -{ - switch (nargs - base) - { - case 0: c_win = 0; c_x = 0; c_arg = 0; break; - case 1: c_win = 1; c_x = 0; c_arg = 1; break; - case 2: c_win = 0; c_x = 1; c_arg = 2; break; - case 3: c_win = 1; c_x = 2; c_arg = 3; break; - default: - croak("Curses function '%s' called with too %s arguments", fn, - nargs < base ? "few" : "many"); - } - c_function = fn; -} - -static void -c_exactargs(fn, nargs, base) -char *fn; -int nargs; -int base; -{ - if (nargs != base) - croak("Curses function '%s' called with too %s arguments", fn, - nargs < base ? "few" : "many" ); - - c_function = fn; -} - -static int -c_domove(win, sv_y, sv_x) -WINDOW *win; -SV *sv_y; -SV *sv_x; -{ - int y = (int)SvIV(sv_y); - int x = (int)SvIV(sv_x); - - return wmove(win, y, x); -} - -static void -c_fun_not_there(fn) -char *fn; -{ - croak("Curses function '%s' is not defined by your vendor", fn); -} - -static void -c_var_not_there(fn) -char *fn; -{ - croak("Curses variable '%s' is not defined by your vendor", fn); -} - -static void -c_con_not_there(fn) -char *fn; -{ - croak("Curses constant '%s' is not defined by your vendor", fn); -} - -/* -** Begin complex type conversion routines -*/ - -static chtype -c_sv2chtype(sv) -SV *sv; -{ - if (SvPOK(sv)) { - char *tmp = SvPV_nolen(sv); - return (chtype)(unsigned char)tmp[0]; - } - return (chtype)SvIV(sv); -} - -static void -c_chtype2sv(sv, ch) -SV *sv; -chtype ch; -{ - if (ch == ERR || ch > 255) { sv_setiv(sv, (I32)ch); } - else { - char tmp[2]; - tmp[0] = (char)ch; - tmp[1] = (char)0; - sv_setpv(sv, tmp); - } -} - -static FIELD * -c_sv2field(sv, argnum) -SV *sv; -int argnum; -{ - if (sv_derived_from(sv, "Curses::Field")) - return (FIELD *)SvIV((SV*)SvRV(sv)); - if (argnum >= 0) - croak("argument %d to Curses function '%s' is not a Curses field", - argnum, c_function); - else - croak("argument is not a Curses field"); -} - -static void -c_field2sv(SV * const svP, - FIELD * const fieldP) { -/*---------------------------------------------------------------------------- - Make *svP a reference to a scalar whose value is the numerical - equivalent of 'fieldP' and which is blessed into the hypothetical - package "Curses::Field". ------------------------------------------------------------------------------*/ - sv_setref_pv(svP, "Curses::Field", (void*)fieldP); -} - -static FORM * -c_sv2form(sv, argnum) -SV *sv; -int argnum; -{ - if (sv_derived_from(sv, "Curses::Form")) - return (FORM *)SvIV((SV*)SvRV(sv)); - if (argnum >= 0) - croak("argument %d to Curses function '%s' is not a Curses form", - argnum, c_function); - else - croak("argument is not a Curses form"); -} - -static void -c_form2sv(sv, val) -SV *sv; -FORM *val; -{ - sv_setref_pv(sv, "Curses::Form", (void*)val); -} - -static ITEM * -c_sv2item(sv, argnum) -SV *sv; -int argnum; -{ - if (sv_derived_from(sv, "Curses::Item")) - return (ITEM *)SvIV((SV*)SvRV(sv)); - if (argnum >= 0) - croak("argument %d to Curses function '%s' is not a Curses item", - argnum, c_function); - else - croak("argument is not a Curses item"); -} - - -static void -c_item2sv(sv, val) -SV *sv; -ITEM *val; -{ - sv_setref_pv(sv, "Curses::Item", (void*)val); -} - -static MENU * -c_sv2menu(sv, argnum) -SV *sv; -int argnum; -{ - if (sv_derived_from(sv, "Curses::Menu")) - return (MENU *)SvIV((SV*)SvRV(sv)); - if (argnum >= 0) - croak("argument %d to Curses function '%s' is not a Curses menu", - argnum, c_function); - else - croak("argument is not a Curses menu"); -} - -static void -c_menu2sv(sv, val) -SV *sv; -MENU *val; -{ - sv_setref_pv(sv, "Curses::Menu", (void*)val); -} - -static PANEL * -c_sv2panel(sv, argnum) -SV *sv; -int argnum; -{ - if (sv_derived_from(sv, "Curses::Panel")) - return (PANEL *)SvIV((SV*)SvRV(sv)); - if (argnum >= 0) - croak("argument %d to Curses function '%s' is not a Curses panel", - argnum, c_function); - else - croak("argument is not a Curses panel"); -} - -static void -c_panel2sv(sv, val) -SV *sv; -PANEL *val; -{ - sv_setref_pv(sv, "Curses::Panel", (void*)val); -} - -static SCREEN * -c_sv2screen(sv, argnum) -SV *sv; -int argnum; -{ - if (sv_derived_from(sv, "Curses::Screen")) - return (SCREEN *)SvIV((SV*)SvRV(sv)); - if (argnum >= 0) - croak("argument %d to Curses function '%s' is not a Curses screen", - argnum, c_function); - else - croak("argument is not a Curses screen"); -} - -static void -c_screen2sv(sv, val) -SV *sv; -SCREEN *val; -{ - sv_setref_pv(sv, "Curses::Screen", (void*)val); -} - -static WINDOW * -c_sv2window(sv, argnum) -SV *sv; -int argnum; -{ - if (sv_derived_from(sv, "Curses::Window")) { - WINDOW *ret = (WINDOW *)SvIV((SV*)SvRV(sv)); - return ret; - } - if (argnum >= 0) - croak("argument %d to Curses function '%s' is not a Curses window", - argnum, c_function); - else - croak("argument is not a Curses window"); -} - -static void -c_window2sv(sv, val) -SV *sv; -WINDOW *val; -{ - sv_setref_pv(sv, "Curses::Window", (void*)val); -} - - -static void -c_setchar(sv, name) -SV *sv; -char *name; -{ - int len = SvLEN(sv); - - if (len > 0) { - name[len - 1] = 0; - - SvCUR(sv) = strlen(name); - SvPOK_only(sv); - *SvEND(sv) = 0; - } -} - -static void -c_setchtype(sv, name) -SV *sv; -chtype *name; -{ - int n = 0; - int rs = sizeof(chtype); - int len = SvLEN(sv); - - if (len - len % rs > rs) { /* find even multiple of rs */ - name[len - len % rs - rs] = 0; - - while (*name++) { n++; } - - SvCUR(sv) = n; - SvPOK_only(sv); - *(chtype *)SvEND(sv) = 0; - } -} - -static void -c_setmevent(sv) -SV *sv; -{ - SvCUR(sv) = sizeof(MEVENT); - SvPOK_only(sv); -} - -/* -** Cheesy, I know. But it works. -*/ - - -#include "CursesFun.c" -#include "CursesVar.c" -#include "CursesCon.c" -#include "CursesBoot.c" diff --git a/Curses-1.23/Curses.pm b/Curses-1.23/Curses.pm deleted file mode 100644 index a5b1a6a..0000000 --- a/Curses-1.23/Curses.pm +++ /dev/null @@ -1,899 +0,0 @@ -## CursesFun.c -- the functions -## -## Copyright (c) 1994-2000 William Setzer -## -## You may distribute under the terms of either the Artistic License -## or the GNU General Public License, as specified in the README file. - -### -## For the brave object-using person -# -package Curses::Window; - -@ISA = qw(Curses); - -package Curses::Screen; - -@ISA = qw(Curses); -sub new { newterm(@_) } -sub DESTROY { } - -package Curses::Panel; - -@ISA = qw(Curses); -sub new { new_panel(@_) } -sub DESTROY { } - -package Curses::Menu; - -@ISA = qw(Curses); -sub new { new_menu(@_) } -sub DESTROY { } - -package Curses::Item; - -@ISA = qw(Curses); -sub new { new_item(@_) } -sub DESTROY { } - -package Curses::Form; - -@ISA = qw(Curses); -sub new { new_form(@_) } -sub DESTROY { } - -package Curses::Field; - -@ISA = qw(Curses); -sub new { new_field(@_) } -sub DESTROY { } - - -package Curses; - -$VERSION = '1.23'; # Makefile.PL picks this up - -use Carp; -require Exporter; -require DynaLoader; -@ISA = qw(Exporter DynaLoader); - -bootstrap Curses; - -sub new { - my $pkg = shift; - my ($nl, $nc, $by, $bx) = (@_,0,0,0,0); - - unless ($_initscr++) { initscr() } - return newwin($nl, $nc, $by, $bx); -} - -sub DESTROY { } - -sub AUTOLOAD { - my $N = $AUTOLOAD; - $N =~ s/^.*:://; - - croak "Curses constant '$N' is not defined by your vendor"; -} - -sub printw { addstr(sprintf shift, @_) } - -tie $LINES, Curses::Vars, 1; -tie $COLS, Curses::Vars, 2; -tie $stdscr, Curses::Vars, 3; -tie $curscr, Curses::Vars, 4; -tie $COLORS, Curses::Vars, 5; -tie $COLOR_PAIRS, Curses::Vars, 6; - -@EXPORT = qw( - printw - - LINES $LINES COLS $COLS stdscr $stdscr curscr $curscr COLORS $COLORS - COLOR_PAIRS $COLOR_PAIRS - - addch echochar addchstr addchnstr addstr addnstr attroff attron attrset - standend standout attr_get attr_off attr_on attr_set chgat COLOR_PAIR - PAIR_NUMBER beep flash bkgd bkgdset getbkgd border box hline vline - erase clear clrtobot clrtoeol start_color init_pair init_color - has_colors can_change_color color_content pair_content delch deleteln - insdelln insertln getch ungetch has_key KEY_F getstr getnstr getyx - getparyx getbegyx getmaxyx inch inchstr inchnstr initscr endwin - isendwin newterm set_term delscreen cbreak nocbreak echo noecho - halfdelay intrflush keypad meta nodelay notimeout raw noraw qiflush - noqiflush timeout typeahead insch insstr insnstr instr innstr - def_prog_mode def_shell_mode reset_prog_mode reset_shell_mode resetty - savetty getsyx setsyx curs_set napms move clearok idlok idcok immedok - leaveok setscrreg scrollok nl nonl overlay overwrite copywin newpad - subpad prefresh pnoutrefresh pechochar refresh noutrefresh doupdate - redrawwin redrawln scr_dump scr_restore scr_init scr_set scroll scrl - slk_init slk_set slk_refresh slk_noutrefresh slk_label slk_clear - slk_restore slk_touch slk_attron slk_attrset slk_attr slk_attroff - slk_color baudrate erasechar has_ic has_il killchar longname termattrs - termname touchwin touchline untouchwin touchln is_linetouched - is_wintouched unctrl keyname filter use_env putwin getwin delay_output - flushinp newwin delwin mvwin subwin derwin mvderwin dupwin syncup - syncok cursyncup syncdown getmouse ungetmouse mousemask enclose - mouse_trafo mouseinterval BUTTON_RELEASE BUTTON_PRESS BUTTON_CLICK - BUTTON_DOUBLE_CLICK BUTTON_TRIPLE_CLICK BUTTON_RESERVED_EVENT - use_default_colors assume_default_colors define_key keybound keyok - resizeterm resize getmaxy getmaxx flusok getcap touchoverlap new_panel - bottom_panel top_panel show_panel update_panels hide_panel panel_window - replace_panel move_panel panel_hidden panel_above panel_below - set_panel_userptr panel_userptr del_panel set_menu_fore menu_fore - set_menu_back menu_back set_menu_grey menu_grey set_menu_pad menu_pad - pos_menu_cursor menu_driver set_menu_format menu_format set_menu_items - menu_items item_count set_menu_mark menu_mark new_menu free_menu - menu_opts set_menu_opts menu_opts_on menu_opts_off set_menu_pattern - menu_pattern post_menu unpost_menu set_menu_userptr menu_userptr - set_menu_win menu_win set_menu_sub menu_sub scale_menu set_current_item - current_item set_top_row top_row item_index item_name item_description - new_item free_item set_item_opts item_opts_on item_opts_off item_opts - item_userptr set_item_userptr set_item_value item_value item_visible - menu_request_name menu_request_by_name set_menu_spacing menu_spacing - pos_form_cursor data_ahead data_behind form_driver set_form_fields - form_fields field_count move_field new_form free_form set_new_page - new_page set_form_opts form_opts_on form_opts_off form_opts - set_current_field current_field set_form_page form_page field_index - post_form unpost_form set_form_userptr form_userptr set_form_win - form_win set_form_sub form_sub scale_form set_field_fore field_fore - set_field_back field_back set_field_pad field_pad set_field_buffer - field_buffer set_field_status field_status set_max_field field_info - dynamic_field_info set_field_just field_just new_field dup_field - link_field free_field set_field_opts field_opts_on field_opts_off - field_opts set_field_userptr field_userptr field_arg form_request_name - form_request_by_name - - ERR OK ACS_BLOCK ACS_BOARD ACS_BTEE ACS_BULLET ACS_CKBOARD ACS_DARROW - ACS_DEGREE ACS_DIAMOND ACS_HLINE ACS_LANTERN ACS_LARROW ACS_LLCORNER - ACS_LRCORNER ACS_LTEE ACS_PLMINUS ACS_PLUS ACS_RARROW ACS_RTEE ACS_S1 - ACS_S9 ACS_TTEE ACS_UARROW ACS_ULCORNER ACS_URCORNER ACS_VLINE - A_ALTCHARSET A_ATTRIBUTES A_BLINK A_BOLD A_CHARTEXT A_COLOR A_DIM - A_INVIS A_NORMAL A_PROTECT A_REVERSE A_STANDOUT A_UNDERLINE COLOR_BLACK - COLOR_BLUE COLOR_CYAN COLOR_GREEN COLOR_MAGENTA COLOR_RED COLOR_WHITE - COLOR_YELLOW KEY_A1 KEY_A3 KEY_B2 KEY_BACKSPACE KEY_BEG KEY_BREAK - KEY_BTAB KEY_C1 KEY_C3 KEY_CANCEL KEY_CATAB KEY_CLEAR KEY_CLOSE - KEY_COMMAND KEY_COPY KEY_CREATE KEY_CTAB KEY_DC KEY_DL KEY_DOWN KEY_EIC - KEY_END KEY_ENTER KEY_EOL KEY_EOS KEY_EXIT KEY_F0 KEY_FIND KEY_HELP - KEY_HOME KEY_IC KEY_IL KEY_LEFT KEY_LL KEY_MARK KEY_MAX KEY_MESSAGE - KEY_MIN KEY_MOVE KEY_NEXT KEY_NPAGE KEY_OPEN KEY_OPTIONS KEY_PPAGE - KEY_PREVIOUS KEY_PRINT KEY_REDO KEY_REFERENCE KEY_REFRESH KEY_REPLACE - KEY_RESET KEY_RESTART KEY_RESUME KEY_RIGHT KEY_SAVE KEY_SBEG - KEY_SCANCEL KEY_SCOMMAND KEY_SCOPY KEY_SCREATE KEY_SDC KEY_SDL - KEY_SELECT KEY_SEND KEY_SEOL KEY_SEXIT KEY_SF KEY_SFIND KEY_SHELP - KEY_SHOME KEY_SIC KEY_SLEFT KEY_SMESSAGE KEY_SMOVE KEY_SNEXT - KEY_SOPTIONS KEY_SPREVIOUS KEY_SPRINT KEY_SR KEY_SREDO KEY_SREPLACE - KEY_SRESET KEY_SRIGHT KEY_SRSUME KEY_SSAVE KEY_SSUSPEND KEY_STAB - KEY_SUNDO KEY_SUSPEND KEY_UNDO KEY_UP KEY_MOUSE BUTTON1_RELEASED - BUTTON1_PRESSED BUTTON1_CLICKED BUTTON1_DOUBLE_CLICKED - BUTTON1_TRIPLE_CLICKED BUTTON1_RESERVED_EVENT BUTTON2_RELEASED - BUTTON2_PRESSED BUTTON2_CLICKED BUTTON2_DOUBLE_CLICKED - BUTTON2_TRIPLE_CLICKED BUTTON2_RESERVED_EVENT BUTTON3_RELEASED - BUTTON3_PRESSED BUTTON3_CLICKED BUTTON3_DOUBLE_CLICKED - BUTTON3_TRIPLE_CLICKED BUTTON3_RESERVED_EVENT BUTTON4_RELEASED - BUTTON4_PRESSED BUTTON4_CLICKED BUTTON4_DOUBLE_CLICKED - BUTTON4_TRIPLE_CLICKED BUTTON4_RESERVED_EVENT BUTTON_CTRL BUTTON_SHIFT - BUTTON_ALT ALL_MOUSE_EVENTS REPORT_MOUSE_POSITION NCURSES_MOUSE_VERSION - E_OK E_SYSTEM_ERROR E_BAD_ARGUMENT E_POSTED E_CONNECTED E_BAD_STATE - E_NO_ROOM E_NOT_POSTED E_UNKNOWN_COMMAND E_NO_MATCH E_NOT_SELECTABLE - E_NOT_CONNECTED E_REQUEST_DENIED E_INVALID_FIELD E_CURRENT - REQ_LEFT_ITEM REQ_RIGHT_ITEM REQ_UP_ITEM REQ_DOWN_ITEM REQ_SCR_ULINE - REQ_SCR_DLINE REQ_SCR_DPAGE REQ_SCR_UPAGE REQ_FIRST_ITEM REQ_LAST_ITEM - REQ_NEXT_ITEM REQ_PREV_ITEM REQ_TOGGLE_ITEM REQ_CLEAR_PATTERN - REQ_BACK_PATTERN REQ_NEXT_MATCH REQ_PREV_MATCH MIN_MENU_COMMAND - MAX_MENU_COMMAND O_ONEVALUE O_SHOWDESC O_ROWMAJOR O_IGNORECASE - O_SHOWMATCH O_NONCYCLIC O_SELECTABLE REQ_NEXT_PAGE REQ_PREV_PAGE - REQ_FIRST_PAGE REQ_LAST_PAGE REQ_NEXT_FIELD REQ_PREV_FIELD - REQ_FIRST_FIELD REQ_LAST_FIELD REQ_SNEXT_FIELD REQ_SPREV_FIELD - REQ_SFIRST_FIELD REQ_SLAST_FIELD REQ_LEFT_FIELD REQ_RIGHT_FIELD - REQ_UP_FIELD REQ_DOWN_FIELD REQ_NEXT_CHAR REQ_PREV_CHAR REQ_NEXT_LINE - REQ_PREV_LINE REQ_NEXT_WORD REQ_PREV_WORD REQ_BEG_FIELD REQ_END_FIELD - REQ_BEG_LINE REQ_END_LINE REQ_LEFT_CHAR REQ_RIGHT_CHAR REQ_UP_CHAR - REQ_DOWN_CHAR REQ_NEW_LINE REQ_INS_CHAR REQ_INS_LINE REQ_DEL_CHAR - REQ_DEL_PREV REQ_DEL_LINE REQ_DEL_WORD REQ_CLR_EOL REQ_CLR_EOF - REQ_CLR_FIELD REQ_OVL_MODE REQ_INS_MODE REQ_SCR_FLINE REQ_SCR_BLINE - REQ_SCR_FPAGE REQ_SCR_BPAGE REQ_SCR_FHPAGE REQ_SCR_BHPAGE REQ_SCR_FCHAR - REQ_SCR_BCHAR REQ_SCR_HFLINE REQ_SCR_HBLINE REQ_SCR_HFHALF - REQ_SCR_HBHALF REQ_VALIDATION REQ_NEXT_CHOICE REQ_PREV_CHOICE - MIN_FORM_COMMAND MAX_FORM_COMMAND NO_JUSTIFICATION JUSTIFY_LEFT - JUSTIFY_CENTER JUSTIFY_RIGHT O_VISIBLE O_ACTIVE O_PUBLIC O_EDIT O_WRAP - O_BLANK O_AUTOSKIP O_NULLOK O_PASSOK O_STATIC O_NL_OVERLOAD - O_BS_OVERLOAD -); - -if ($OldCurses) -{ - @_OLD = qw( - wprintw mvprintw wmvprintw - - waddch mvaddch mvwaddch wechochar waddchstr mvaddchstr - mvwaddchstr waddchnstr mvaddchnstr mvwaddchnstr waddstr - mvaddstr mvwaddstr waddnstr mvaddnstr mvwaddnstr wattroff - wattron wattrset wstandend wstandout wattr_get wattr_off wattr_on - wattr_set wchgat mvchgat mvwchgat wbkgd wbkgdset wborder whline - mvhline mvwhline wvline mvvline mvwvline werase wclear - wclrtobot wclrtoeol wdelch mvdelch mvwdelch wdeleteln winsdelln - winsertln wgetch mvgetch mvwgetch wgetstr mvgetstr mvwgetstr - wgetnstr mvgetnstr mvwgetnstr winch mvinch mvwinch winchstr - mvinchstr mvwinchstr winchnstr mvinchnstr mvwinchnstr wtimeout - winsch mvinsch mvwinsch winsstr mvinsstr mvwinsstr winsnstr - mvinsnstr mvwinsnstr winstr mvinstr mvwinstr winnstr mvinnstr - mvwinnstr wmove wsetscrreg wrefresh wnoutrefresh wredrawln wscrl - wtouchln wsyncup wcursyncup wsyncdown wenclose wmouse_trafo wresize - ); - - push (@EXPORT, @_OLD); - for (@_OLD) - { - /^(?:mv)?(?:w)?(.*)/; - eval "sub $_ { $1(\@_); }"; - } - - eval < is the interface between Perl and your system's curses(3) -library. For descriptions on the usage of a given function, variable, -or constant, consult your system's documentation, as such information -invariably varies (:-) between different curses(3) libraries and -operating systems. This document describes the interface itself, and -assumes that you already know how your system's curses(3) library -works. - -=head2 Unified Functions - -Many curses(3) functions have variants starting with the prefixes -I, I, and/or I. These variants differ only in the -explicit addition of a window, or by the addition of two coordinates -that are used to move the cursor first. For example, C has -three other variants: C, C, and C. -The variants aren't very interesting; in fact, we could roll all of -the variants into original function by allowing a variable number -of arguments and analyzing the argument list for which variant the -user wanted to call. - -Unfortunately, curses(3) predates varargs(3), so in C we were stuck -with all the variants. However, C is a Perl interface, so we -are free to "unify" these variants into one function. The section -L<"Supported Functions"> below lists all curses(3) function supported -by C, along with a column listing if it is I. If -so, it takes a varying number of arguments as follows: - -=over 4 - -C - -I is an optional window argument, defaulting to C if not -specified. - -I is an optional coordinate pair used to move the cursor, -defaulting to no move if not specified. - -I are the required arguments of the function. These are the -arguments you would specify if you were just calling the base function -and not any of the variants. - -=back - -This makes the variants obsolete, since their functionality has been -merged into a single function, so C does not define them by -default. You can still get them if you want, by setting the -variable C<$Curses::OldCurses> to a non-zero value before using the -C package. See L<"Perl 4.X C Compatibility"> -for an example of this. - -=head2 Objects - -Objects are supported. Example: - - $win = new Curses; - $win->addstr(10, 10, 'foo'); - $win->refresh; - ... - -Any function that has been marked as I (see -L<"Supported Functions"> below and L<"Unified Functions"> above) -can be called as a method for a Curses object. - -Do not use C if using objects, as the first call to get -a C will do it for you. - -=head2 Security Concerns - -It has always been the case with the curses functions, but please note -that the following functions: - - getstr() (and optional wgetstr(), mvgetstr(), and mvwgetstr()) - inchstr() (and optional winchstr(), mvinchstr(), and mvwinchstr()) - instr() (and optional winstr(), mvinstr(), and mvwinstr()) - -are subject to buffer overflow attack. This is because you pass in -the buffer to be filled in, which has to be of finite length, but -there is no way to stop a bad guy from typing. - -In order to avoid this problem, use the alternate functions: - - getnstr() - inchnstr() - innstr() - -which take an extra "size of buffer" argument. - -=head1 COMPATIBILITY - -=head2 Perl 4.X C Compatibility - -C has been written to take advantage of the new features of -Perl. I felt it better to provide an improved curses programming -environment rather than to be 100% compatible. However, many old -C applications will probably still work by starting the -script with: - - BEGIN { $Curses::OldCurses = 1; } - use Curses; - -Any old application that still does not work should print an -understandable error message explaining the problem. - -Some functions and variables are not supported by C, even with -the C line. They are listed under -L<"curses(3) items not supported by Curses">. - -The variables C<$stdscr> and C<$curscr> are also available as -functions C and C. This is because of a Perl bug. -See the L section for details. - -=head2 Incompatibilities with previous versions of C - -In previous versions of this software, some Perl functions took a -different set of parameters than their C counterparts. This is no -longer true. You should now use C and C -instead of C<$str = getstr()> and C<($y, $x) = getyx()>. - -=head2 Incompatibilities with other Perl programs - - menu.pl, v3.0 and v3.1 - There were various interaction problems between these two - releases and Curses. Please upgrade to the latest version - (v3.3 as of 3/16/96). - -=head1 DIAGNOSTICS - -=over 4 - -=item * Curses function '%s' called with too %s arguments at ... - -You have called a C function with a wrong number of -arguments. - -=item * argument %d to Curses function '%s' is not a Curses %s at ... -=item * argument is not a Curses %s at ... - -The argument you gave to the function wasn't what it wanted. - -This probably means that you didn't give the right arguments to a -I function. See the DESCRIPTION section on L for more information. - -=item * Curses function '%s' is not defined by your vendor at ... - -You have a C function in your code that your system's curses(3) -library doesn't define. - -=item * Curses variable '%s' is not defined by your vendor at ... - -You have a C variable in your code that your system's curses(3) -library doesn't define. - -=item * Curses constant '%s' is not defined by your vendor at ... - -You have a C constant in your code that your system's curses(3) -library doesn't define. - -=item * Curses::Vars::FETCH called with bad index at ... -=item * Curses::Vars::STORE called with bad index at ... - -You've been playing with the C interface to the C -variables. Don't do that. :-) - -=item * Anything else - -Check out the F man page to see if the error is in there. - -=back - -=head1 BUGS - -If you use the variables C<$stdscr> and C<$curscr> instead of their -functional counterparts (C and C), you might run into -a bug in Perl where the "magic" isn't called early enough. This is -manifested by the C package telling you C<$stdscr> isn't a -window. One workaround is to put a line like C<$stdscr = $stdscr> -near the front of your program. - -Probably many more. - -=head1 AUTHOR - -William Setzer - -=head1 SYNOPSIS OF PERL CURSES SUPPORT - -=head2 Supported Functions - - Supported Unified? Supported via $OldCurses[*] - --------- -------- ------------------------ - addch Yes waddch mvaddch mvwaddch - echochar Yes wechochar - addchstr Yes waddchstr mvaddchstr mvwaddchstr - addchnstr Yes waddchnstr mvaddchnstr mvwaddchnstr - addstr Yes waddstr mvaddstr mvwaddstr - addnstr Yes waddnstr mvaddnstr mvwaddnstr - attroff Yes wattroff - attron Yes wattron - attrset Yes wattrset - standend Yes wstandend - standout Yes wstandout - attr_get Yes wattr_get - attr_off Yes wattr_off - attr_on Yes wattr_on - attr_set Yes wattr_set - chgat Yes wchgat mvchgat mvwchgat - COLOR_PAIR No - PAIR_NUMBER No - beep No - flash No - bkgd Yes wbkgd - bkgdset Yes wbkgdset - getbkgd Yes - border Yes wborder - box Yes - hline Yes whline mvhline mvwhline - vline Yes wvline mvvline mvwvline - erase Yes werase - clear Yes wclear - clrtobot Yes wclrtobot - clrtoeol Yes wclrtoeol - start_color No - init_pair No - init_color No - has_colors No - can_change_color No - color_content No - pair_content No - delch Yes wdelch mvdelch mvwdelch - deleteln Yes wdeleteln - insdelln Yes winsdelln - insertln Yes winsertln - getch Yes wgetch mvgetch mvwgetch - ungetch No - has_key No - KEY_F No - getstr Yes wgetstr mvgetstr mvwgetstr - getnstr Yes wgetnstr mvgetnstr mvwgetnstr - getyx Yes - getparyx Yes - getbegyx Yes - getmaxyx Yes - inch Yes winch mvinch mvwinch - inchstr Yes winchstr mvinchstr mvwinchstr - inchnstr Yes winchnstr mvinchnstr mvwinchnstr - initscr No - endwin No - isendwin No - newterm No - set_term No - delscreen No - cbreak No - nocbreak No - echo No - noecho No - halfdelay No - intrflush Yes - keypad Yes - meta Yes - nodelay Yes - notimeout Yes - raw No - noraw No - qiflush No - noqiflush No - timeout Yes wtimeout - typeahead No - insch Yes winsch mvinsch mvwinsch - insstr Yes winsstr mvinsstr mvwinsstr - insnstr Yes winsnstr mvinsnstr mvwinsnstr - instr Yes winstr mvinstr mvwinstr - innstr Yes winnstr mvinnstr mvwinnstr - def_prog_mode No - def_shell_mode No - reset_prog_mode No - reset_shell_mode No - resetty No - savetty No - getsyx No - setsyx No - curs_set No - napms No - move Yes wmove - clearok Yes - idlok Yes - idcok Yes - immedok Yes - leaveok Yes - setscrreg Yes wsetscrreg - scrollok Yes - nl No - nonl No - overlay No - overwrite No - copywin No - newpad No - subpad No - prefresh No - pnoutrefresh No - pechochar No - refresh Yes wrefresh - noutrefresh Yes wnoutrefresh - doupdate No - redrawwin Yes - redrawln Yes wredrawln - scr_dump No - scr_restore No - scr_init No - scr_set No - scroll Yes - scrl Yes wscrl - slk_init No - slk_set No - slk_refresh No - slk_noutrefresh No - slk_label No - slk_clear No - slk_restore No - slk_touch No - slk_attron No - slk_attrset No - slk_attr No - slk_attroff No - slk_color No - baudrate No - erasechar No - has_ic No - has_il No - killchar No - longname No - termattrs No - termname No - touchwin Yes - touchline Yes - untouchwin Yes - touchln Yes wtouchln - is_linetouched Yes - is_wintouched Yes - unctrl No - keyname No - filter No - use_env No - putwin No - getwin No - delay_output No - flushinp No - newwin No - delwin Yes - mvwin Yes - subwin Yes - derwin Yes - mvderwin Yes - dupwin Yes - syncup Yes wsyncup - syncok Yes - cursyncup Yes wcursyncup - syncdown Yes wsyncdown - getmouse No - ungetmouse No - mousemask No - enclose Yes wenclose - mouse_trafo Yes wmouse_trafo - mouseinterval No - BUTTON_RELEASE No - BUTTON_PRESS No - BUTTON_CLICK No - BUTTON_DOUBLE_CLICK No - BUTTON_TRIPLE_CLICK No - BUTTON_RESERVED_EVENT No - use_default_colors No - assume_default_colors No - define_key No - keybound No - keyok No - resizeterm No - resize Yes wresize - getmaxy Yes - getmaxx Yes - flusok Yes - getcap No - touchoverlap No - new_panel No - bottom_panel No - top_panel No - show_panel No - update_panels No - hide_panel No - panel_window No - replace_panel No - move_panel No - panel_hidden No - panel_above No - panel_below No - set_panel_userptr No - panel_userptr No - del_panel No - set_menu_fore No - menu_fore No - set_menu_back No - menu_back No - set_menu_grey No - menu_grey No - set_menu_pad No - menu_pad No - pos_menu_cursor No - menu_driver No - set_menu_format No - menu_format No - set_menu_items No - menu_items No - item_count No - set_menu_mark No - menu_mark No - new_menu No - free_menu No - menu_opts No - set_menu_opts No - menu_opts_on No - menu_opts_off No - set_menu_pattern No - menu_pattern No - post_menu No - unpost_menu No - set_menu_userptr No - menu_userptr No - set_menu_win No - menu_win No - set_menu_sub No - menu_sub No - scale_menu No - set_current_item No - current_item No - set_top_row No - top_row No - item_index No - item_name No - item_description No - new_item No - free_item No - set_item_opts No - item_opts_on No - item_opts_off No - item_opts No - item_userptr No - set_item_userptr No - set_item_value No - item_value No - item_visible No - menu_request_name No - menu_request_by_name No - set_menu_spacing No - menu_spacing No - pos_form_cursor No - data_ahead No - data_behind No - form_driver No - set_form_fields No - form_fields No - field_count No - move_field No - new_form No - free_form No - set_new_page No - new_page No - set_form_opts No - form_opts_on No - form_opts_off No - form_opts No - set_current_field No - current_field No - set_form_page No - form_page No - field_index No - post_form No - unpost_form No - set_form_userptr No - form_userptr No - set_form_win No - form_win No - set_form_sub No - form_sub No - scale_form No - set_field_fore No - field_fore No - set_field_back No - field_back No - set_field_pad No - field_pad No - set_field_buffer No - field_buffer No - set_field_status No - field_status No - set_max_field No - field_info No - dynamic_field_info No - set_field_just No - field_just No - new_field No - dup_field No - link_field No - free_field No - set_field_opts No - field_opts_on No - field_opts_off No - field_opts No - set_field_userptr No - field_userptr No - field_arg No - form_request_name No - form_request_by_name No - -[*] To use any functions in this column, the variable -C<$Curses::OldCurses> must be set to a non-zero value before using the -C package. See L<"Perl 4.X cursperl Compatibility"> for an -example of this. - -=head2 Supported Variables - - LINES COLS stdscr - curscr COLORS COLOR_PAIRS - -=head2 Supported Constants - - ERR OK ACS_BLOCK - ACS_BOARD ACS_BTEE ACS_BULLET - ACS_CKBOARD ACS_DARROW ACS_DEGREE - ACS_DIAMOND ACS_HLINE ACS_LANTERN - ACS_LARROW ACS_LLCORNER ACS_LRCORNER - ACS_LTEE ACS_PLMINUS ACS_PLUS - ACS_RARROW ACS_RTEE ACS_S1 - ACS_S9 ACS_TTEE ACS_UARROW - ACS_ULCORNER ACS_URCORNER ACS_VLINE - A_ALTCHARSET A_ATTRIBUTES A_BLINK - A_BOLD A_CHARTEXT A_COLOR - A_DIM A_INVIS A_NORMAL - A_PROTECT A_REVERSE A_STANDOUT - A_UNDERLINE COLOR_BLACK COLOR_BLUE - COLOR_CYAN COLOR_GREEN COLOR_MAGENTA - COLOR_RED COLOR_WHITE COLOR_YELLOW - KEY_A1 KEY_A3 KEY_B2 - KEY_BACKSPACE KEY_BEG KEY_BREAK - KEY_BTAB KEY_C1 KEY_C3 - KEY_CANCEL KEY_CATAB KEY_CLEAR - KEY_CLOSE KEY_COMMAND KEY_COPY - KEY_CREATE KEY_CTAB KEY_DC - KEY_DL KEY_DOWN KEY_EIC - KEY_END KEY_ENTER KEY_EOL - KEY_EOS KEY_EXIT KEY_F0 - KEY_FIND KEY_HELP KEY_HOME - KEY_IC KEY_IL KEY_LEFT - KEY_LL KEY_MARK KEY_MAX - KEY_MESSAGE KEY_MIN KEY_MOVE - KEY_NEXT KEY_NPAGE KEY_OPEN - KEY_OPTIONS KEY_PPAGE KEY_PREVIOUS - KEY_PRINT KEY_REDO KEY_REFERENCE - KEY_REFRESH KEY_REPLACE KEY_RESET - KEY_RESTART KEY_RESUME KEY_RIGHT - KEY_SAVE KEY_SBEG KEY_SCANCEL - KEY_SCOMMAND KEY_SCOPY KEY_SCREATE - KEY_SDC KEY_SDL KEY_SELECT - KEY_SEND KEY_SEOL KEY_SEXIT - KEY_SF KEY_SFIND KEY_SHELP - KEY_SHOME KEY_SIC KEY_SLEFT - KEY_SMESSAGE KEY_SMOVE KEY_SNEXT - KEY_SOPTIONS KEY_SPREVIOUS KEY_SPRINT - KEY_SR KEY_SREDO KEY_SREPLACE - KEY_SRESET KEY_SRIGHT KEY_SRSUME - KEY_SSAVE KEY_SSUSPEND KEY_STAB - KEY_SUNDO KEY_SUSPEND KEY_UNDO - KEY_UP KEY_MOUSE BUTTON1_RELEASED - BUTTON1_PRESSED BUTTON1_CLICKED BUTTON1_DOUBLE_CLICKED - BUTTON1_TRIPLE_CLICKED BUTTON1_RESERVED_EVENT BUTTON2_RELEASED - BUTTON2_PRESSED BUTTON2_CLICKED BUTTON2_DOUBLE_CLICKED - BUTTON2_TRIPLE_CLICKED BUTTON2_RESERVED_EVENT BUTTON3_RELEASED - BUTTON3_PRESSED BUTTON3_CLICKED BUTTON3_DOUBLE_CLICKED - BUTTON3_TRIPLE_CLICKED BUTTON3_RESERVED_EVENT BUTTON4_RELEASED - BUTTON4_PRESSED BUTTON4_CLICKED BUTTON4_DOUBLE_CLICKED - BUTTON4_TRIPLE_CLICKED BUTTON4_RESERVED_EVENT BUTTON_CTRL - BUTTON_SHIFT BUTTON_ALT ALL_MOUSE_EVENTS - REPORT_MOUSE_POSITION NCURSES_MOUSE_VERSION E_OK - E_SYSTEM_ERROR E_BAD_ARGUMENT E_POSTED - E_CONNECTED E_BAD_STATE E_NO_ROOM - E_NOT_POSTED E_UNKNOWN_COMMAND E_NO_MATCH - E_NOT_SELECTABLE E_NOT_CONNECTED E_REQUEST_DENIED - E_INVALID_FIELD E_CURRENT REQ_LEFT_ITEM - REQ_RIGHT_ITEM REQ_UP_ITEM REQ_DOWN_ITEM - REQ_SCR_ULINE REQ_SCR_DLINE REQ_SCR_DPAGE - REQ_SCR_UPAGE REQ_FIRST_ITEM REQ_LAST_ITEM - REQ_NEXT_ITEM REQ_PREV_ITEM REQ_TOGGLE_ITEM - REQ_CLEAR_PATTERN REQ_BACK_PATTERN REQ_NEXT_MATCH - REQ_PREV_MATCH MIN_MENU_COMMAND MAX_MENU_COMMAND - O_ONEVALUE O_SHOWDESC O_ROWMAJOR - O_IGNORECASE O_SHOWMATCH O_NONCYCLIC - O_SELECTABLE REQ_NEXT_PAGE REQ_PREV_PAGE - REQ_FIRST_PAGE REQ_LAST_PAGE REQ_NEXT_FIELD - REQ_PREV_FIELD REQ_FIRST_FIELD REQ_LAST_FIELD - REQ_SNEXT_FIELD REQ_SPREV_FIELD REQ_SFIRST_FIELD - REQ_SLAST_FIELD REQ_LEFT_FIELD REQ_RIGHT_FIELD - REQ_UP_FIELD REQ_DOWN_FIELD REQ_NEXT_CHAR - REQ_PREV_CHAR REQ_NEXT_LINE REQ_PREV_LINE - REQ_NEXT_WORD REQ_PREV_WORD REQ_BEG_FIELD - REQ_END_FIELD REQ_BEG_LINE REQ_END_LINE - REQ_LEFT_CHAR REQ_RIGHT_CHAR REQ_UP_CHAR - REQ_DOWN_CHAR REQ_NEW_LINE REQ_INS_CHAR - REQ_INS_LINE REQ_DEL_CHAR REQ_DEL_PREV - REQ_DEL_LINE REQ_DEL_WORD REQ_CLR_EOL - REQ_CLR_EOF REQ_CLR_FIELD REQ_OVL_MODE - REQ_INS_MODE REQ_SCR_FLINE REQ_SCR_BLINE - REQ_SCR_FPAGE REQ_SCR_BPAGE REQ_SCR_FHPAGE - REQ_SCR_BHPAGE REQ_SCR_FCHAR REQ_SCR_BCHAR - REQ_SCR_HFLINE REQ_SCR_HBLINE REQ_SCR_HFHALF - REQ_SCR_HBHALF REQ_VALIDATION REQ_NEXT_CHOICE - REQ_PREV_CHOICE MIN_FORM_COMMAND MAX_FORM_COMMAND - NO_JUSTIFICATION JUSTIFY_LEFT JUSTIFY_CENTER - JUSTIFY_RIGHT O_VISIBLE O_ACTIVE - O_PUBLIC O_EDIT O_WRAP - O_BLANK O_AUTOSKIP O_NULLOK - O_PASSOK O_STATIC O_NL_OVERLOAD - O_BS_OVERLOAD - -=head2 curses(3) functions not supported by C - - tstp _putchar fullname scanw wscanw mvscanw mvwscanw ripoffline - setupterm setterm set_curterm del_curterm restartterm tparm tputs - putp vidputs vidattr mvcur tigetflag tigetnum tigetstr tgetent - tgetflag tgetnum tgetstr tgoto tputs - -=head2 menu(3) functions not supported by C - - set_item_init item_init set_item_term item_term set_menu_init - menu_init set_menu_term menu_term - -=head2 form(3) functions not supported by C - - new_fieldtype free_fieldtype set_fieldtype_arg - set_fieldtype_choice link_fieldtype set_form_init form_init - set_form_term form_term set_field_init field_init set_field_term - field_term set_field_type field_type diff --git a/Curses-1.23/CursesBoot.c b/Curses-1.23/CursesBoot.c deleted file mode 100644 index 8bbee0c..0000000 --- a/Curses-1.23/CursesBoot.c +++ /dev/null @@ -1,1236 +0,0 @@ -/* This file can be automatically generated; changes may be lost. -** -** -** CursesBoot.c -- the bootstrap function -** -** Copyright (c) 1994-2000 William Setzer -** -** You may distribute under the terms of either the Artistic License -** or the GNU General Public License, as specified in the README file. -*/ - -#define C_NEWXS(A,B) newXS(A,B,file) -#define C_NEWCS(A,B) newCONSTSUB(stash,A,newSViv(B)) - -XS(boot_Curses) -{ - int i; - - dXSARGS; - char *file = __FILE__; - HV *stash = gv_stashpv("Curses", TRUE); - IV tmp; - SV *t2; - - XS_VERSION_BOOTCHECK; - - /* Functions */ - - C_NEWXS("Curses::addch", XS_Curses_addch); - C_NEWXS("Curses::echochar", XS_Curses_echochar); - C_NEWXS("Curses::addchstr", XS_Curses_addchstr); - C_NEWXS("Curses::addchnstr", XS_Curses_addchnstr); - C_NEWXS("Curses::addstr", XS_Curses_addstr); - C_NEWXS("Curses::addnstr", XS_Curses_addnstr); - C_NEWXS("Curses::attroff", XS_Curses_attroff); - C_NEWXS("Curses::attron", XS_Curses_attron); - C_NEWXS("Curses::attrset", XS_Curses_attrset); - C_NEWXS("Curses::standend", XS_Curses_standend); - C_NEWXS("Curses::standout", XS_Curses_standout); - C_NEWXS("Curses::attr_get", XS_Curses_attr_get); - C_NEWXS("Curses::attr_off", XS_Curses_attr_off); - C_NEWXS("Curses::attr_on", XS_Curses_attr_on); - C_NEWXS("Curses::attr_set", XS_Curses_attr_set); - C_NEWXS("Curses::chgat", XS_Curses_chgat); - C_NEWXS("Curses::COLOR_PAIR", XS_Curses_COLOR_PAIR); - C_NEWXS("Curses::PAIR_NUMBER", XS_Curses_PAIR_NUMBER); - C_NEWXS("Curses::beep", XS_Curses_beep); - C_NEWXS("Curses::flash", XS_Curses_flash); - C_NEWXS("Curses::bkgd", XS_Curses_bkgd); - C_NEWXS("Curses::bkgdset", XS_Curses_bkgdset); - C_NEWXS("Curses::getbkgd", XS_Curses_getbkgd); - C_NEWXS("Curses::border", XS_Curses_border); - C_NEWXS("Curses::box", XS_Curses_box); - C_NEWXS("Curses::hline", XS_Curses_hline); - C_NEWXS("Curses::vline", XS_Curses_vline); - C_NEWXS("Curses::erase", XS_Curses_erase); - C_NEWXS("Curses::clear", XS_Curses_clear); - C_NEWXS("Curses::clrtobot", XS_Curses_clrtobot); - C_NEWXS("Curses::clrtoeol", XS_Curses_clrtoeol); - C_NEWXS("Curses::start_color", XS_Curses_start_color); - C_NEWXS("Curses::init_pair", XS_Curses_init_pair); - C_NEWXS("Curses::init_color", XS_Curses_init_color); - C_NEWXS("Curses::has_colors", XS_Curses_has_colors); - C_NEWXS("Curses::can_change_color", XS_Curses_can_change_color); - C_NEWXS("Curses::color_content", XS_Curses_color_content); - C_NEWXS("Curses::pair_content", XS_Curses_pair_content); - C_NEWXS("Curses::delch", XS_Curses_delch); - C_NEWXS("Curses::deleteln", XS_Curses_deleteln); - C_NEWXS("Curses::insdelln", XS_Curses_insdelln); - C_NEWXS("Curses::insertln", XS_Curses_insertln); - C_NEWXS("Curses::getch", XS_Curses_getch); - C_NEWXS("Curses::ungetch", XS_Curses_ungetch); - C_NEWXS("Curses::has_key", XS_Curses_has_key); - C_NEWXS("Curses::KEY_F", XS_Curses_KEY_F); - C_NEWXS("Curses::getstr", XS_Curses_getstr); - C_NEWXS("Curses::getnstr", XS_Curses_getnstr); - C_NEWXS("Curses::getyx", XS_Curses_getyx); - C_NEWXS("Curses::getparyx", XS_Curses_getparyx); - C_NEWXS("Curses::getbegyx", XS_Curses_getbegyx); - C_NEWXS("Curses::getmaxyx", XS_Curses_getmaxyx); - C_NEWXS("Curses::inch", XS_Curses_inch); - C_NEWXS("Curses::inchstr", XS_Curses_inchstr); - C_NEWXS("Curses::inchnstr", XS_Curses_inchnstr); - C_NEWXS("Curses::initscr", XS_Curses_initscr); - C_NEWXS("Curses::endwin", XS_Curses_endwin); - C_NEWXS("Curses::isendwin", XS_Curses_isendwin); - C_NEWXS("Curses::newterm", XS_Curses_newterm); - C_NEWXS("Curses::set_term", XS_Curses_set_term); - C_NEWXS("Curses::delscreen", XS_Curses_delscreen); -#ifdef C_INTCBREAK - C_NEWXS("Curses::cbreak", XS_Curses_cbreak); -#else - C_NEWXS("Curses::cbreak", XS_Curses_cbreak); -#endif -#ifdef C_INTNOCBREAK - C_NEWXS("Curses::nocbreak", XS_Curses_nocbreak); -#else - C_NEWXS("Curses::nocbreak", XS_Curses_nocbreak); -#endif -#ifdef C_INTECHO - C_NEWXS("Curses::echo", XS_Curses_echo); -#else - C_NEWXS("Curses::echo", XS_Curses_echo); -#endif -#ifdef C_INTNOECHO - C_NEWXS("Curses::noecho", XS_Curses_noecho); -#else - C_NEWXS("Curses::noecho", XS_Curses_noecho); -#endif - C_NEWXS("Curses::halfdelay", XS_Curses_halfdelay); - C_NEWXS("Curses::intrflush", XS_Curses_intrflush); - C_NEWXS("Curses::keypad", XS_Curses_keypad); - C_NEWXS("Curses::meta", XS_Curses_meta); - C_NEWXS("Curses::nodelay", XS_Curses_nodelay); - C_NEWXS("Curses::notimeout", XS_Curses_notimeout); -#ifdef C_INTRAW - C_NEWXS("Curses::raw", XS_Curses_raw); -#else - C_NEWXS("Curses::raw", XS_Curses_raw); -#endif -#ifdef C_INTNORAW - C_NEWXS("Curses::noraw", XS_Curses_noraw); -#else - C_NEWXS("Curses::noraw", XS_Curses_noraw); -#endif - C_NEWXS("Curses::qiflush", XS_Curses_qiflush); - C_NEWXS("Curses::noqiflush", XS_Curses_noqiflush); - C_NEWXS("Curses::timeout", XS_Curses_timeout); - C_NEWXS("Curses::typeahead", XS_Curses_typeahead); - C_NEWXS("Curses::insch", XS_Curses_insch); - C_NEWXS("Curses::insstr", XS_Curses_insstr); - C_NEWXS("Curses::insnstr", XS_Curses_insnstr); - C_NEWXS("Curses::instr", XS_Curses_instr); - C_NEWXS("Curses::innstr", XS_Curses_innstr); - C_NEWXS("Curses::def_prog_mode", XS_Curses_def_prog_mode); - C_NEWXS("Curses::def_shell_mode", XS_Curses_def_shell_mode); - C_NEWXS("Curses::reset_prog_mode", XS_Curses_reset_prog_mode); - C_NEWXS("Curses::reset_shell_mode", XS_Curses_reset_shell_mode); - C_NEWXS("Curses::resetty", XS_Curses_resetty); - C_NEWXS("Curses::savetty", XS_Curses_savetty); -#ifdef C_INTGETSYX - C_NEWXS("Curses::getsyx", XS_Curses_getsyx); -#else - C_NEWXS("Curses::getsyx", XS_Curses_getsyx); -#endif -#ifdef C_INTSETSYX - C_NEWXS("Curses::setsyx", XS_Curses_setsyx); -#else - C_NEWXS("Curses::setsyx", XS_Curses_setsyx); -#endif - C_NEWXS("Curses::curs_set", XS_Curses_curs_set); - C_NEWXS("Curses::napms", XS_Curses_napms); - C_NEWXS("Curses::move", XS_Curses_move); - C_NEWXS("Curses::clearok", XS_Curses_clearok); -#ifdef C_INTIDLOK - C_NEWXS("Curses::idlok", XS_Curses_idlok); -#else - C_NEWXS("Curses::idlok", XS_Curses_idlok); -#endif - C_NEWXS("Curses::idcok", XS_Curses_idcok); - C_NEWXS("Curses::immedok", XS_Curses_immedok); - C_NEWXS("Curses::leaveok", XS_Curses_leaveok); - C_NEWXS("Curses::setscrreg", XS_Curses_setscrreg); - C_NEWXS("Curses::scrollok", XS_Curses_scrollok); -#ifdef C_INTNL - C_NEWXS("Curses::nl", XS_Curses_nl); -#else - C_NEWXS("Curses::nl", XS_Curses_nl); -#endif -#ifdef C_INTNONL - C_NEWXS("Curses::nonl", XS_Curses_nonl); -#else - C_NEWXS("Curses::nonl", XS_Curses_nonl); -#endif - C_NEWXS("Curses::overlay", XS_Curses_overlay); - C_NEWXS("Curses::overwrite", XS_Curses_overwrite); - C_NEWXS("Curses::copywin", XS_Curses_copywin); - C_NEWXS("Curses::newpad", XS_Curses_newpad); - C_NEWXS("Curses::subpad", XS_Curses_subpad); - C_NEWXS("Curses::prefresh", XS_Curses_prefresh); - C_NEWXS("Curses::pnoutrefresh", XS_Curses_pnoutrefresh); - C_NEWXS("Curses::pechochar", XS_Curses_pechochar); - C_NEWXS("Curses::refresh", XS_Curses_refresh); - C_NEWXS("Curses::noutrefresh", XS_Curses_noutrefresh); - C_NEWXS("Curses::doupdate", XS_Curses_doupdate); - C_NEWXS("Curses::redrawwin", XS_Curses_redrawwin); - C_NEWXS("Curses::redrawln", XS_Curses_redrawln); - C_NEWXS("Curses::scr_dump", XS_Curses_scr_dump); - C_NEWXS("Curses::scr_restore", XS_Curses_scr_restore); - C_NEWXS("Curses::scr_init", XS_Curses_scr_init); - C_NEWXS("Curses::scr_set", XS_Curses_scr_set); - C_NEWXS("Curses::scroll", XS_Curses_scroll); - C_NEWXS("Curses::scrl", XS_Curses_scrl); - C_NEWXS("Curses::slk_init", XS_Curses_slk_init); - C_NEWXS("Curses::slk_set", XS_Curses_slk_set); - C_NEWXS("Curses::slk_refresh", XS_Curses_slk_refresh); - C_NEWXS("Curses::slk_noutrefresh", XS_Curses_slk_noutrefresh); - C_NEWXS("Curses::slk_label", XS_Curses_slk_label); - C_NEWXS("Curses::slk_clear", XS_Curses_slk_clear); - C_NEWXS("Curses::slk_restore", XS_Curses_slk_restore); - C_NEWXS("Curses::slk_touch", XS_Curses_slk_touch); - C_NEWXS("Curses::slk_attron", XS_Curses_slk_attron); - C_NEWXS("Curses::slk_attrset", XS_Curses_slk_attrset); - C_NEWXS("Curses::slk_attr", XS_Curses_slk_attr); - C_NEWXS("Curses::slk_attroff", XS_Curses_slk_attroff); - C_NEWXS("Curses::slk_color", XS_Curses_slk_color); - C_NEWXS("Curses::baudrate", XS_Curses_baudrate); - C_NEWXS("Curses::erasechar", XS_Curses_erasechar); - C_NEWXS("Curses::has_ic", XS_Curses_has_ic); - C_NEWXS("Curses::has_il", XS_Curses_has_il); - C_NEWXS("Curses::killchar", XS_Curses_killchar); -#ifdef C_LONG0ARGS - C_NEWXS("Curses::longname", XS_Curses_longname); -#else - C_NEWXS("Curses::longname", XS_Curses_longname); -#endif - C_NEWXS("Curses::termattrs", XS_Curses_termattrs); - C_NEWXS("Curses::termname", XS_Curses_termname); - C_NEWXS("Curses::touchwin", XS_Curses_touchwin); -#ifdef C_TOUCH3ARGS - C_NEWXS("Curses::touchline", XS_Curses_touchline); -#else - C_NEWXS("Curses::touchline", XS_Curses_touchline); -#endif - C_NEWXS("Curses::untouchwin", XS_Curses_untouchwin); - C_NEWXS("Curses::touchln", XS_Curses_touchln); - C_NEWXS("Curses::is_linetouched", XS_Curses_is_linetouched); - C_NEWXS("Curses::is_wintouched", XS_Curses_is_wintouched); - C_NEWXS("Curses::unctrl", XS_Curses_unctrl); - C_NEWXS("Curses::keyname", XS_Curses_keyname); -#ifdef C_INTFILTER - C_NEWXS("Curses::filter", XS_Curses_filter); -#else - C_NEWXS("Curses::filter", XS_Curses_filter); -#endif - C_NEWXS("Curses::use_env", XS_Curses_use_env); - C_NEWXS("Curses::putwin", XS_Curses_putwin); - C_NEWXS("Curses::getwin", XS_Curses_getwin); - C_NEWXS("Curses::delay_output", XS_Curses_delay_output); - C_NEWXS("Curses::flushinp", XS_Curses_flushinp); - C_NEWXS("Curses::newwin", XS_Curses_newwin); - C_NEWXS("Curses::delwin", XS_Curses_delwin); - C_NEWXS("Curses::mvwin", XS_Curses_mvwin); - C_NEWXS("Curses::subwin", XS_Curses_subwin); - C_NEWXS("Curses::derwin", XS_Curses_derwin); - C_NEWXS("Curses::mvderwin", XS_Curses_mvderwin); - C_NEWXS("Curses::dupwin", XS_Curses_dupwin); - C_NEWXS("Curses::syncup", XS_Curses_syncup); - C_NEWXS("Curses::syncok", XS_Curses_syncok); - C_NEWXS("Curses::cursyncup", XS_Curses_cursyncup); - C_NEWXS("Curses::syncdown", XS_Curses_syncdown); - C_NEWXS("Curses::getmouse", XS_Curses_getmouse); - C_NEWXS("Curses::ungetmouse", XS_Curses_ungetmouse); - C_NEWXS("Curses::mousemask", XS_Curses_mousemask); - C_NEWXS("Curses::enclose", XS_Curses_enclose); - C_NEWXS("Curses::mouse_trafo", XS_Curses_mouse_trafo); - C_NEWXS("Curses::mouseinterval", XS_Curses_mouseinterval); - C_NEWXS("Curses::BUTTON_RELEASE", XS_Curses_BUTTON_RELEASE); - C_NEWXS("Curses::BUTTON_PRESS", XS_Curses_BUTTON_PRESS); - C_NEWXS("Curses::BUTTON_CLICK", XS_Curses_BUTTON_CLICK); - C_NEWXS("Curses::BUTTON_DOUBLE_CLICK", XS_Curses_BUTTON_DOUBLE_CLICK); - C_NEWXS("Curses::BUTTON_TRIPLE_CLICK", XS_Curses_BUTTON_TRIPLE_CLICK); - C_NEWXS("Curses::BUTTON_RESERVED_EVENT", XS_Curses_BUTTON_RESERVED_EVENT); - C_NEWXS("Curses::use_default_colors", XS_Curses_use_default_colors); - C_NEWXS("Curses::assume_default_colors", XS_Curses_assume_default_colors); - C_NEWXS("Curses::define_key", XS_Curses_define_key); - C_NEWXS("Curses::keybound", XS_Curses_keybound); - C_NEWXS("Curses::keyok", XS_Curses_keyok); - C_NEWXS("Curses::resizeterm", XS_Curses_resizeterm); - C_NEWXS("Curses::resize", XS_Curses_resize); - C_NEWXS("Curses::getmaxy", XS_Curses_getmaxy); - C_NEWXS("Curses::getmaxx", XS_Curses_getmaxx); - C_NEWXS("Curses::flusok", XS_Curses_flusok); - C_NEWXS("Curses::getcap", XS_Curses_getcap); - C_NEWXS("Curses::touchoverlap", XS_Curses_touchoverlap); - C_NEWXS("Curses::new_panel", XS_Curses_new_panel); - C_NEWXS("Curses::bottom_panel", XS_Curses_bottom_panel); - C_NEWXS("Curses::top_panel", XS_Curses_top_panel); - C_NEWXS("Curses::show_panel", XS_Curses_show_panel); - C_NEWXS("Curses::update_panels", XS_Curses_update_panels); - C_NEWXS("Curses::hide_panel", XS_Curses_hide_panel); - C_NEWXS("Curses::panel_window", XS_Curses_panel_window); - C_NEWXS("Curses::replace_panel", XS_Curses_replace_panel); - C_NEWXS("Curses::move_panel", XS_Curses_move_panel); - C_NEWXS("Curses::panel_hidden", XS_Curses_panel_hidden); - C_NEWXS("Curses::panel_above", XS_Curses_panel_above); - C_NEWXS("Curses::panel_below", XS_Curses_panel_below); - C_NEWXS("Curses::set_panel_userptr", XS_Curses_set_panel_userptr); - C_NEWXS("Curses::panel_userptr", XS_Curses_panel_userptr); - C_NEWXS("Curses::del_panel", XS_Curses_del_panel); - C_NEWXS("Curses::set_menu_fore", XS_Curses_set_menu_fore); - C_NEWXS("Curses::menu_fore", XS_Curses_menu_fore); - C_NEWXS("Curses::set_menu_back", XS_Curses_set_menu_back); - C_NEWXS("Curses::menu_back", XS_Curses_menu_back); - C_NEWXS("Curses::set_menu_grey", XS_Curses_set_menu_grey); - C_NEWXS("Curses::menu_grey", XS_Curses_menu_grey); - C_NEWXS("Curses::set_menu_pad", XS_Curses_set_menu_pad); - C_NEWXS("Curses::menu_pad", XS_Curses_menu_pad); - C_NEWXS("Curses::pos_menu_cursor", XS_Curses_pos_menu_cursor); - C_NEWXS("Curses::menu_driver", XS_Curses_menu_driver); - C_NEWXS("Curses::set_menu_format", XS_Curses_set_menu_format); - C_NEWXS("Curses::menu_format", XS_Curses_menu_format); - C_NEWXS("Curses::set_menu_items", XS_Curses_set_menu_items); - C_NEWXS("Curses::menu_items", XS_Curses_menu_items); - C_NEWXS("Curses::item_count", XS_Curses_item_count); - C_NEWXS("Curses::set_menu_mark", XS_Curses_set_menu_mark); - C_NEWXS("Curses::menu_mark", XS_Curses_menu_mark); - C_NEWXS("Curses::new_menu", XS_Curses_new_menu); - C_NEWXS("Curses::free_menu", XS_Curses_free_menu); - C_NEWXS("Curses::menu_opts", XS_Curses_menu_opts); - C_NEWXS("Curses::set_menu_opts", XS_Curses_set_menu_opts); - C_NEWXS("Curses::menu_opts_on", XS_Curses_menu_opts_on); - C_NEWXS("Curses::menu_opts_off", XS_Curses_menu_opts_off); - C_NEWXS("Curses::set_menu_pattern", XS_Curses_set_menu_pattern); - C_NEWXS("Curses::menu_pattern", XS_Curses_menu_pattern); - C_NEWXS("Curses::post_menu", XS_Curses_post_menu); - C_NEWXS("Curses::unpost_menu", XS_Curses_unpost_menu); - C_NEWXS("Curses::set_menu_userptr", XS_Curses_set_menu_userptr); - C_NEWXS("Curses::menu_userptr", XS_Curses_menu_userptr); - C_NEWXS("Curses::set_menu_win", XS_Curses_set_menu_win); - C_NEWXS("Curses::menu_win", XS_Curses_menu_win); - C_NEWXS("Curses::set_menu_sub", XS_Curses_set_menu_sub); - C_NEWXS("Curses::menu_sub", XS_Curses_menu_sub); - C_NEWXS("Curses::scale_menu", XS_Curses_scale_menu); - C_NEWXS("Curses::set_current_item", XS_Curses_set_current_item); - C_NEWXS("Curses::current_item", XS_Curses_current_item); - C_NEWXS("Curses::set_top_row", XS_Curses_set_top_row); - C_NEWXS("Curses::top_row", XS_Curses_top_row); - C_NEWXS("Curses::item_index", XS_Curses_item_index); - C_NEWXS("Curses::item_name", XS_Curses_item_name); - C_NEWXS("Curses::item_description", XS_Curses_item_description); - C_NEWXS("Curses::new_item", XS_Curses_new_item); - C_NEWXS("Curses::free_item", XS_Curses_free_item); - C_NEWXS("Curses::set_item_opts", XS_Curses_set_item_opts); - C_NEWXS("Curses::item_opts_on", XS_Curses_item_opts_on); - C_NEWXS("Curses::item_opts_off", XS_Curses_item_opts_off); - C_NEWXS("Curses::item_opts", XS_Curses_item_opts); - C_NEWXS("Curses::item_userptr", XS_Curses_item_userptr); - C_NEWXS("Curses::set_item_userptr", XS_Curses_set_item_userptr); - C_NEWXS("Curses::set_item_value", XS_Curses_set_item_value); - C_NEWXS("Curses::item_value", XS_Curses_item_value); - C_NEWXS("Curses::item_visible", XS_Curses_item_visible); - C_NEWXS("Curses::menu_request_name", XS_Curses_menu_request_name); - C_NEWXS("Curses::menu_request_by_name", XS_Curses_menu_request_by_name); - C_NEWXS("Curses::set_menu_spacing", XS_Curses_set_menu_spacing); - C_NEWXS("Curses::menu_spacing", XS_Curses_menu_spacing); - C_NEWXS("Curses::pos_form_cursor", XS_Curses_pos_form_cursor); - C_NEWXS("Curses::data_ahead", XS_Curses_data_ahead); - C_NEWXS("Curses::data_behind", XS_Curses_data_behind); - C_NEWXS("Curses::form_driver", XS_Curses_form_driver); - C_NEWXS("Curses::set_form_fields", XS_Curses_set_form_fields); - C_NEWXS("Curses::form_fields", XS_Curses_form_fields); - C_NEWXS("Curses::field_count", XS_Curses_field_count); - C_NEWXS("Curses::move_field", XS_Curses_move_field); - C_NEWXS("Curses::new_form", XS_Curses_new_form); - C_NEWXS("Curses::free_form", XS_Curses_free_form); - C_NEWXS("Curses::set_new_page", XS_Curses_set_new_page); - C_NEWXS("Curses::new_page", XS_Curses_new_page); - C_NEWXS("Curses::set_form_opts", XS_Curses_set_form_opts); - C_NEWXS("Curses::form_opts_on", XS_Curses_form_opts_on); - C_NEWXS("Curses::form_opts_off", XS_Curses_form_opts_off); - C_NEWXS("Curses::form_opts", XS_Curses_form_opts); - C_NEWXS("Curses::set_current_field", XS_Curses_set_current_field); - C_NEWXS("Curses::current_field", XS_Curses_current_field); - C_NEWXS("Curses::set_form_page", XS_Curses_set_form_page); - C_NEWXS("Curses::form_page", XS_Curses_form_page); - C_NEWXS("Curses::field_index", XS_Curses_field_index); - C_NEWXS("Curses::post_form", XS_Curses_post_form); - C_NEWXS("Curses::unpost_form", XS_Curses_unpost_form); - C_NEWXS("Curses::set_form_userptr", XS_Curses_set_form_userptr); - C_NEWXS("Curses::form_userptr", XS_Curses_form_userptr); - C_NEWXS("Curses::set_form_win", XS_Curses_set_form_win); - C_NEWXS("Curses::form_win", XS_Curses_form_win); - C_NEWXS("Curses::set_form_sub", XS_Curses_set_form_sub); - C_NEWXS("Curses::form_sub", XS_Curses_form_sub); - C_NEWXS("Curses::scale_form", XS_Curses_scale_form); - C_NEWXS("Curses::set_field_fore", XS_Curses_set_field_fore); - C_NEWXS("Curses::field_fore", XS_Curses_field_fore); - C_NEWXS("Curses::set_field_back", XS_Curses_set_field_back); - C_NEWXS("Curses::field_back", XS_Curses_field_back); - C_NEWXS("Curses::set_field_pad", XS_Curses_set_field_pad); - C_NEWXS("Curses::field_pad", XS_Curses_field_pad); - C_NEWXS("Curses::set_field_buffer", XS_Curses_set_field_buffer); - C_NEWXS("Curses::field_buffer", XS_Curses_field_buffer); - C_NEWXS("Curses::set_field_status", XS_Curses_set_field_status); - C_NEWXS("Curses::field_status", XS_Curses_field_status); - C_NEWXS("Curses::set_max_field", XS_Curses_set_max_field); - C_NEWXS("Curses::field_info", XS_Curses_field_info); - C_NEWXS("Curses::dynamic_field_info", XS_Curses_dynamic_field_info); - C_NEWXS("Curses::set_field_just", XS_Curses_set_field_just); - C_NEWXS("Curses::field_just", XS_Curses_field_just); - C_NEWXS("Curses::new_field", XS_Curses_new_field); - C_NEWXS("Curses::dup_field", XS_Curses_dup_field); - C_NEWXS("Curses::link_field", XS_Curses_link_field); - C_NEWXS("Curses::free_field", XS_Curses_free_field); - C_NEWXS("Curses::set_field_opts", XS_Curses_set_field_opts); - C_NEWXS("Curses::field_opts_on", XS_Curses_field_opts_on); - C_NEWXS("Curses::field_opts_off", XS_Curses_field_opts_off); - C_NEWXS("Curses::field_opts", XS_Curses_field_opts); - C_NEWXS("Curses::set_field_userptr", XS_Curses_set_field_userptr); - C_NEWXS("Curses::field_userptr", XS_Curses_field_userptr); - C_NEWXS("Curses::field_arg", XS_Curses_field_arg); - C_NEWXS("Curses::form_request_name", XS_Curses_form_request_name); - C_NEWXS("Curses::form_request_by_name", XS_Curses_form_request_by_name); - - /* Variables masquerading as functions */ - - C_NEWXS("Curses::LINES", XS_Curses_LINES); - C_NEWXS("Curses::COLS", XS_Curses_COLS); - C_NEWXS("Curses::stdscr", XS_Curses_stdscr); - C_NEWXS("Curses::curscr", XS_Curses_curscr); - C_NEWXS("Curses::COLORS", XS_Curses_COLORS); - C_NEWXS("Curses::COLOR_PAIRS", XS_Curses_COLOR_PAIRS); - - /* Variables masquerading as variables */ - - C_NEWXS("Curses::Vars::DESTROY", XS_Curses_Vars_DESTROY); - C_NEWXS("Curses::Vars::FETCH", XS_Curses_Vars_FETCH); - C_NEWXS("Curses::Vars::STORE", XS_Curses_Vars_STORE); - C_NEWXS("Curses::Vars::TIESCALAR", XS_Curses_Vars_TIESCALAR); - - /* Constants */ - -#ifdef ERR - C_NEWCS("ERR", ERR); -#endif -#ifdef OK - C_NEWCS("OK", OK); -#endif - C_NEWXS("Curses::ACS_BLOCK", XS_Curses_ACS_BLOCK); - C_NEWXS("Curses::ACS_BOARD", XS_Curses_ACS_BOARD); - C_NEWXS("Curses::ACS_BTEE", XS_Curses_ACS_BTEE); - C_NEWXS("Curses::ACS_BULLET", XS_Curses_ACS_BULLET); - C_NEWXS("Curses::ACS_CKBOARD", XS_Curses_ACS_CKBOARD); - C_NEWXS("Curses::ACS_DARROW", XS_Curses_ACS_DARROW); - C_NEWXS("Curses::ACS_DEGREE", XS_Curses_ACS_DEGREE); - C_NEWXS("Curses::ACS_DIAMOND", XS_Curses_ACS_DIAMOND); - C_NEWXS("Curses::ACS_HLINE", XS_Curses_ACS_HLINE); - C_NEWXS("Curses::ACS_LANTERN", XS_Curses_ACS_LANTERN); - C_NEWXS("Curses::ACS_LARROW", XS_Curses_ACS_LARROW); - C_NEWXS("Curses::ACS_LLCORNER", XS_Curses_ACS_LLCORNER); - C_NEWXS("Curses::ACS_LRCORNER", XS_Curses_ACS_LRCORNER); - C_NEWXS("Curses::ACS_LTEE", XS_Curses_ACS_LTEE); - C_NEWXS("Curses::ACS_PLMINUS", XS_Curses_ACS_PLMINUS); - C_NEWXS("Curses::ACS_PLUS", XS_Curses_ACS_PLUS); - C_NEWXS("Curses::ACS_RARROW", XS_Curses_ACS_RARROW); - C_NEWXS("Curses::ACS_RTEE", XS_Curses_ACS_RTEE); - C_NEWXS("Curses::ACS_S1", XS_Curses_ACS_S1); - C_NEWXS("Curses::ACS_S9", XS_Curses_ACS_S9); - C_NEWXS("Curses::ACS_TTEE", XS_Curses_ACS_TTEE); - C_NEWXS("Curses::ACS_UARROW", XS_Curses_ACS_UARROW); - C_NEWXS("Curses::ACS_ULCORNER", XS_Curses_ACS_ULCORNER); - C_NEWXS("Curses::ACS_URCORNER", XS_Curses_ACS_URCORNER); - C_NEWXS("Curses::ACS_VLINE", XS_Curses_ACS_VLINE); -#ifdef A_ALTCHARSET - C_NEWCS("A_ALTCHARSET", A_ALTCHARSET); -#endif -#ifdef A_ATTRIBUTES - C_NEWCS("A_ATTRIBUTES", A_ATTRIBUTES); -#endif -#ifdef A_BLINK - C_NEWCS("A_BLINK", A_BLINK); -#endif -#ifdef A_BOLD - C_NEWCS("A_BOLD", A_BOLD); -#endif -#ifdef A_CHARTEXT - C_NEWCS("A_CHARTEXT", A_CHARTEXT); -#endif -#ifdef A_COLOR - C_NEWCS("A_COLOR", A_COLOR); -#endif -#ifdef A_DIM - C_NEWCS("A_DIM", A_DIM); -#endif -#ifdef A_INVIS - C_NEWCS("A_INVIS", A_INVIS); -#endif -#ifdef A_NORMAL - C_NEWCS("A_NORMAL", A_NORMAL); -#endif -#ifdef A_PROTECT - C_NEWCS("A_PROTECT", A_PROTECT); -#endif -#ifdef A_REVERSE - C_NEWCS("A_REVERSE", A_REVERSE); -#endif -#ifdef A_STANDOUT - C_NEWCS("A_STANDOUT", A_STANDOUT); -#endif -#ifdef A_UNDERLINE - C_NEWCS("A_UNDERLINE", A_UNDERLINE); -#endif -#ifdef COLOR_BLACK - C_NEWCS("COLOR_BLACK", COLOR_BLACK); -#endif -#ifdef COLOR_BLUE - C_NEWCS("COLOR_BLUE", COLOR_BLUE); -#endif -#ifdef COLOR_CYAN - C_NEWCS("COLOR_CYAN", COLOR_CYAN); -#endif -#ifdef COLOR_GREEN - C_NEWCS("COLOR_GREEN", COLOR_GREEN); -#endif -#ifdef COLOR_MAGENTA - C_NEWCS("COLOR_MAGENTA", COLOR_MAGENTA); -#endif -#ifdef COLOR_RED - C_NEWCS("COLOR_RED", COLOR_RED); -#endif -#ifdef COLOR_WHITE - C_NEWCS("COLOR_WHITE", COLOR_WHITE); -#endif -#ifdef COLOR_YELLOW - C_NEWCS("COLOR_YELLOW", COLOR_YELLOW); -#endif -#ifdef KEY_A1 - C_NEWCS("KEY_A1", KEY_A1); -#endif -#ifdef KEY_A3 - C_NEWCS("KEY_A3", KEY_A3); -#endif -#ifdef KEY_B2 - C_NEWCS("KEY_B2", KEY_B2); -#endif -#ifdef KEY_BACKSPACE - C_NEWCS("KEY_BACKSPACE", KEY_BACKSPACE); -#endif -#ifdef KEY_BEG - C_NEWCS("KEY_BEG", KEY_BEG); -#endif -#ifdef KEY_BREAK - C_NEWCS("KEY_BREAK", KEY_BREAK); -#endif -#ifdef KEY_BTAB - C_NEWCS("KEY_BTAB", KEY_BTAB); -#endif -#ifdef KEY_C1 - C_NEWCS("KEY_C1", KEY_C1); -#endif -#ifdef KEY_C3 - C_NEWCS("KEY_C3", KEY_C3); -#endif -#ifdef KEY_CANCEL - C_NEWCS("KEY_CANCEL", KEY_CANCEL); -#endif -#ifdef KEY_CATAB - C_NEWCS("KEY_CATAB", KEY_CATAB); -#endif -#ifdef KEY_CLEAR - C_NEWCS("KEY_CLEAR", KEY_CLEAR); -#endif -#ifdef KEY_CLOSE - C_NEWCS("KEY_CLOSE", KEY_CLOSE); -#endif -#ifdef KEY_COMMAND - C_NEWCS("KEY_COMMAND", KEY_COMMAND); -#endif -#ifdef KEY_COPY - C_NEWCS("KEY_COPY", KEY_COPY); -#endif -#ifdef KEY_CREATE - C_NEWCS("KEY_CREATE", KEY_CREATE); -#endif -#ifdef KEY_CTAB - C_NEWCS("KEY_CTAB", KEY_CTAB); -#endif -#ifdef KEY_DC - C_NEWCS("KEY_DC", KEY_DC); -#endif -#ifdef KEY_DL - C_NEWCS("KEY_DL", KEY_DL); -#endif -#ifdef KEY_DOWN - C_NEWCS("KEY_DOWN", KEY_DOWN); -#endif -#ifdef KEY_EIC - C_NEWCS("KEY_EIC", KEY_EIC); -#endif -#ifdef KEY_END - C_NEWCS("KEY_END", KEY_END); -#endif -#ifdef KEY_ENTER - C_NEWCS("KEY_ENTER", KEY_ENTER); -#endif -#ifdef KEY_EOL - C_NEWCS("KEY_EOL", KEY_EOL); -#endif -#ifdef KEY_EOS - C_NEWCS("KEY_EOS", KEY_EOS); -#endif -#ifdef KEY_EXIT - C_NEWCS("KEY_EXIT", KEY_EXIT); -#endif -#ifdef KEY_F0 - C_NEWCS("KEY_F0", KEY_F0); -#endif -#ifdef KEY_FIND - C_NEWCS("KEY_FIND", KEY_FIND); -#endif -#ifdef KEY_HELP - C_NEWCS("KEY_HELP", KEY_HELP); -#endif -#ifdef KEY_HOME - C_NEWCS("KEY_HOME", KEY_HOME); -#endif -#ifdef KEY_IC - C_NEWCS("KEY_IC", KEY_IC); -#endif -#ifdef KEY_IL - C_NEWCS("KEY_IL", KEY_IL); -#endif -#ifdef KEY_LEFT - C_NEWCS("KEY_LEFT", KEY_LEFT); -#endif -#ifdef KEY_LL - C_NEWCS("KEY_LL", KEY_LL); -#endif -#ifdef KEY_MARK - C_NEWCS("KEY_MARK", KEY_MARK); -#endif -#ifdef KEY_MAX - C_NEWCS("KEY_MAX", KEY_MAX); -#endif -#ifdef KEY_MESSAGE - C_NEWCS("KEY_MESSAGE", KEY_MESSAGE); -#endif -#ifdef KEY_MIN - C_NEWCS("KEY_MIN", KEY_MIN); -#endif -#ifdef KEY_MOVE - C_NEWCS("KEY_MOVE", KEY_MOVE); -#endif -#ifdef KEY_NEXT - C_NEWCS("KEY_NEXT", KEY_NEXT); -#endif -#ifdef KEY_NPAGE - C_NEWCS("KEY_NPAGE", KEY_NPAGE); -#endif -#ifdef KEY_OPEN - C_NEWCS("KEY_OPEN", KEY_OPEN); -#endif -#ifdef KEY_OPTIONS - C_NEWCS("KEY_OPTIONS", KEY_OPTIONS); -#endif -#ifdef KEY_PPAGE - C_NEWCS("KEY_PPAGE", KEY_PPAGE); -#endif -#ifdef KEY_PREVIOUS - C_NEWCS("KEY_PREVIOUS", KEY_PREVIOUS); -#endif -#ifdef KEY_PRINT - C_NEWCS("KEY_PRINT", KEY_PRINT); -#endif -#ifdef KEY_REDO - C_NEWCS("KEY_REDO", KEY_REDO); -#endif -#ifdef KEY_REFERENCE - C_NEWCS("KEY_REFERENCE", KEY_REFERENCE); -#endif -#ifdef KEY_REFRESH - C_NEWCS("KEY_REFRESH", KEY_REFRESH); -#endif -#ifdef KEY_REPLACE - C_NEWCS("KEY_REPLACE", KEY_REPLACE); -#endif -#ifdef KEY_RESET - C_NEWCS("KEY_RESET", KEY_RESET); -#endif -#ifdef KEY_RESTART - C_NEWCS("KEY_RESTART", KEY_RESTART); -#endif -#ifdef KEY_RESUME - C_NEWCS("KEY_RESUME", KEY_RESUME); -#endif -#ifdef KEY_RIGHT - C_NEWCS("KEY_RIGHT", KEY_RIGHT); -#endif -#ifdef KEY_SAVE - C_NEWCS("KEY_SAVE", KEY_SAVE); -#endif -#ifdef KEY_SBEG - C_NEWCS("KEY_SBEG", KEY_SBEG); -#endif -#ifdef KEY_SCANCEL - C_NEWCS("KEY_SCANCEL", KEY_SCANCEL); -#endif -#ifdef KEY_SCOMMAND - C_NEWCS("KEY_SCOMMAND", KEY_SCOMMAND); -#endif -#ifdef KEY_SCOPY - C_NEWCS("KEY_SCOPY", KEY_SCOPY); -#endif -#ifdef KEY_SCREATE - C_NEWCS("KEY_SCREATE", KEY_SCREATE); -#endif -#ifdef KEY_SDC - C_NEWCS("KEY_SDC", KEY_SDC); -#endif -#ifdef KEY_SDL - C_NEWCS("KEY_SDL", KEY_SDL); -#endif -#ifdef KEY_SELECT - C_NEWCS("KEY_SELECT", KEY_SELECT); -#endif -#ifdef KEY_SEND - C_NEWCS("KEY_SEND", KEY_SEND); -#endif -#ifdef KEY_SEOL - C_NEWCS("KEY_SEOL", KEY_SEOL); -#endif -#ifdef KEY_SEXIT - C_NEWCS("KEY_SEXIT", KEY_SEXIT); -#endif -#ifdef KEY_SF - C_NEWCS("KEY_SF", KEY_SF); -#endif -#ifdef KEY_SFIND - C_NEWCS("KEY_SFIND", KEY_SFIND); -#endif -#ifdef KEY_SHELP - C_NEWCS("KEY_SHELP", KEY_SHELP); -#endif -#ifdef KEY_SHOME - C_NEWCS("KEY_SHOME", KEY_SHOME); -#endif -#ifdef KEY_SIC - C_NEWCS("KEY_SIC", KEY_SIC); -#endif -#ifdef KEY_SLEFT - C_NEWCS("KEY_SLEFT", KEY_SLEFT); -#endif -#ifdef KEY_SMESSAGE - C_NEWCS("KEY_SMESSAGE", KEY_SMESSAGE); -#endif -#ifdef KEY_SMOVE - C_NEWCS("KEY_SMOVE", KEY_SMOVE); -#endif -#ifdef KEY_SNEXT - C_NEWCS("KEY_SNEXT", KEY_SNEXT); -#endif -#ifdef KEY_SOPTIONS - C_NEWCS("KEY_SOPTIONS", KEY_SOPTIONS); -#endif -#ifdef KEY_SPREVIOUS - C_NEWCS("KEY_SPREVIOUS", KEY_SPREVIOUS); -#endif -#ifdef KEY_SPRINT - C_NEWCS("KEY_SPRINT", KEY_SPRINT); -#endif -#ifdef KEY_SR - C_NEWCS("KEY_SR", KEY_SR); -#endif -#ifdef KEY_SREDO - C_NEWCS("KEY_SREDO", KEY_SREDO); -#endif -#ifdef KEY_SREPLACE - C_NEWCS("KEY_SREPLACE", KEY_SREPLACE); -#endif -#ifdef KEY_SRESET - C_NEWCS("KEY_SRESET", KEY_SRESET); -#endif -#ifdef KEY_SRIGHT - C_NEWCS("KEY_SRIGHT", KEY_SRIGHT); -#endif -#ifdef KEY_SRSUME - C_NEWCS("KEY_SRSUME", KEY_SRSUME); -#endif -#ifdef KEY_SSAVE - C_NEWCS("KEY_SSAVE", KEY_SSAVE); -#endif -#ifdef KEY_SSUSPEND - C_NEWCS("KEY_SSUSPEND", KEY_SSUSPEND); -#endif -#ifdef KEY_STAB - C_NEWCS("KEY_STAB", KEY_STAB); -#endif -#ifdef KEY_SUNDO - C_NEWCS("KEY_SUNDO", KEY_SUNDO); -#endif -#ifdef KEY_SUSPEND - C_NEWCS("KEY_SUSPEND", KEY_SUSPEND); -#endif -#ifdef KEY_UNDO - C_NEWCS("KEY_UNDO", KEY_UNDO); -#endif -#ifdef KEY_UP - C_NEWCS("KEY_UP", KEY_UP); -#endif -#ifdef KEY_MOUSE - C_NEWCS("KEY_MOUSE", KEY_MOUSE); -#endif -#ifdef BUTTON1_RELEASED - C_NEWCS("BUTTON1_RELEASED", BUTTON1_RELEASED); -#endif -#ifdef BUTTON1_PRESSED - C_NEWCS("BUTTON1_PRESSED", BUTTON1_PRESSED); -#endif -#ifdef BUTTON1_CLICKED - C_NEWCS("BUTTON1_CLICKED", BUTTON1_CLICKED); -#endif -#ifdef BUTTON1_DOUBLE_CLICKED - C_NEWCS("BUTTON1_DOUBLE_CLICKED", BUTTON1_DOUBLE_CLICKED); -#endif -#ifdef BUTTON1_TRIPLE_CLICKED - C_NEWCS("BUTTON1_TRIPLE_CLICKED", BUTTON1_TRIPLE_CLICKED); -#endif -#ifdef BUTTON1_RESERVED_EVENT - C_NEWCS("BUTTON1_RESERVED_EVENT", BUTTON1_RESERVED_EVENT); -#endif -#ifdef BUTTON2_RELEASED - C_NEWCS("BUTTON2_RELEASED", BUTTON2_RELEASED); -#endif -#ifdef BUTTON2_PRESSED - C_NEWCS("BUTTON2_PRESSED", BUTTON2_PRESSED); -#endif -#ifdef BUTTON2_CLICKED - C_NEWCS("BUTTON2_CLICKED", BUTTON2_CLICKED); -#endif -#ifdef BUTTON2_DOUBLE_CLICKED - C_NEWCS("BUTTON2_DOUBLE_CLICKED", BUTTON2_DOUBLE_CLICKED); -#endif -#ifdef BUTTON2_TRIPLE_CLICKED - C_NEWCS("BUTTON2_TRIPLE_CLICKED", BUTTON2_TRIPLE_CLICKED); -#endif -#ifdef BUTTON2_RESERVED_EVENT - C_NEWCS("BUTTON2_RESERVED_EVENT", BUTTON2_RESERVED_EVENT); -#endif -#ifdef BUTTON3_RELEASED - C_NEWCS("BUTTON3_RELEASED", BUTTON3_RELEASED); -#endif -#ifdef BUTTON3_PRESSED - C_NEWCS("BUTTON3_PRESSED", BUTTON3_PRESSED); -#endif -#ifdef BUTTON3_CLICKED - C_NEWCS("BUTTON3_CLICKED", BUTTON3_CLICKED); -#endif -#ifdef BUTTON3_DOUBLE_CLICKED - C_NEWCS("BUTTON3_DOUBLE_CLICKED", BUTTON3_DOUBLE_CLICKED); -#endif -#ifdef BUTTON3_TRIPLE_CLICKED - C_NEWCS("BUTTON3_TRIPLE_CLICKED", BUTTON3_TRIPLE_CLICKED); -#endif -#ifdef BUTTON3_RESERVED_EVENT - C_NEWCS("BUTTON3_RESERVED_EVENT", BUTTON3_RESERVED_EVENT); -#endif -#ifdef BUTTON4_RELEASED - C_NEWCS("BUTTON4_RELEASED", BUTTON4_RELEASED); -#endif -#ifdef BUTTON4_PRESSED - C_NEWCS("BUTTON4_PRESSED", BUTTON4_PRESSED); -#endif -#ifdef BUTTON4_CLICKED - C_NEWCS("BUTTON4_CLICKED", BUTTON4_CLICKED); -#endif -#ifdef BUTTON4_DOUBLE_CLICKED - C_NEWCS("BUTTON4_DOUBLE_CLICKED", BUTTON4_DOUBLE_CLICKED); -#endif -#ifdef BUTTON4_TRIPLE_CLICKED - C_NEWCS("BUTTON4_TRIPLE_CLICKED", BUTTON4_TRIPLE_CLICKED); -#endif -#ifdef BUTTON4_RESERVED_EVENT - C_NEWCS("BUTTON4_RESERVED_EVENT", BUTTON4_RESERVED_EVENT); -#endif -#ifdef BUTTON_CTRL - C_NEWCS("BUTTON_CTRL", BUTTON_CTRL); -#endif -#ifdef BUTTON_SHIFT - C_NEWCS("BUTTON_SHIFT", BUTTON_SHIFT); -#endif -#ifdef BUTTON_ALT - C_NEWCS("BUTTON_ALT", BUTTON_ALT); -#endif -#ifdef ALL_MOUSE_EVENTS - C_NEWCS("ALL_MOUSE_EVENTS", ALL_MOUSE_EVENTS); -#endif -#ifdef REPORT_MOUSE_POSITION - C_NEWCS("REPORT_MOUSE_POSITION", REPORT_MOUSE_POSITION); -#endif -#ifdef NCURSES_MOUSE_VERSION - C_NEWCS("NCURSES_MOUSE_VERSION", NCURSES_MOUSE_VERSION); -#endif -#ifdef E_OK - C_NEWCS("E_OK", E_OK); -#endif -#ifdef E_SYSTEM_ERROR - C_NEWCS("E_SYSTEM_ERROR", E_SYSTEM_ERROR); -#endif -#ifdef E_BAD_ARGUMENT - C_NEWCS("E_BAD_ARGUMENT", E_BAD_ARGUMENT); -#endif -#ifdef E_POSTED - C_NEWCS("E_POSTED", E_POSTED); -#endif -#ifdef E_CONNECTED - C_NEWCS("E_CONNECTED", E_CONNECTED); -#endif -#ifdef E_BAD_STATE - C_NEWCS("E_BAD_STATE", E_BAD_STATE); -#endif -#ifdef E_NO_ROOM - C_NEWCS("E_NO_ROOM", E_NO_ROOM); -#endif -#ifdef E_NOT_POSTED - C_NEWCS("E_NOT_POSTED", E_NOT_POSTED); -#endif -#ifdef E_UNKNOWN_COMMAND - C_NEWCS("E_UNKNOWN_COMMAND", E_UNKNOWN_COMMAND); -#endif -#ifdef E_NO_MATCH - C_NEWCS("E_NO_MATCH", E_NO_MATCH); -#endif -#ifdef E_NOT_SELECTABLE - C_NEWCS("E_NOT_SELECTABLE", E_NOT_SELECTABLE); -#endif -#ifdef E_NOT_CONNECTED - C_NEWCS("E_NOT_CONNECTED", E_NOT_CONNECTED); -#endif -#ifdef E_REQUEST_DENIED - C_NEWCS("E_REQUEST_DENIED", E_REQUEST_DENIED); -#endif -#ifdef E_INVALID_FIELD - C_NEWCS("E_INVALID_FIELD", E_INVALID_FIELD); -#endif -#ifdef E_CURRENT - C_NEWCS("E_CURRENT", E_CURRENT); -#endif -#ifdef REQ_LEFT_ITEM - C_NEWCS("REQ_LEFT_ITEM", REQ_LEFT_ITEM); -#endif -#ifdef REQ_RIGHT_ITEM - C_NEWCS("REQ_RIGHT_ITEM", REQ_RIGHT_ITEM); -#endif -#ifdef REQ_UP_ITEM - C_NEWCS("REQ_UP_ITEM", REQ_UP_ITEM); -#endif -#ifdef REQ_DOWN_ITEM - C_NEWCS("REQ_DOWN_ITEM", REQ_DOWN_ITEM); -#endif -#ifdef REQ_SCR_ULINE - C_NEWCS("REQ_SCR_ULINE", REQ_SCR_ULINE); -#endif -#ifdef REQ_SCR_DLINE - C_NEWCS("REQ_SCR_DLINE", REQ_SCR_DLINE); -#endif -#ifdef REQ_SCR_DPAGE - C_NEWCS("REQ_SCR_DPAGE", REQ_SCR_DPAGE); -#endif -#ifdef REQ_SCR_UPAGE - C_NEWCS("REQ_SCR_UPAGE", REQ_SCR_UPAGE); -#endif -#ifdef REQ_FIRST_ITEM - C_NEWCS("REQ_FIRST_ITEM", REQ_FIRST_ITEM); -#endif -#ifdef REQ_LAST_ITEM - C_NEWCS("REQ_LAST_ITEM", REQ_LAST_ITEM); -#endif -#ifdef REQ_NEXT_ITEM - C_NEWCS("REQ_NEXT_ITEM", REQ_NEXT_ITEM); -#endif -#ifdef REQ_PREV_ITEM - C_NEWCS("REQ_PREV_ITEM", REQ_PREV_ITEM); -#endif -#ifdef REQ_TOGGLE_ITEM - C_NEWCS("REQ_TOGGLE_ITEM", REQ_TOGGLE_ITEM); -#endif -#ifdef REQ_CLEAR_PATTERN - C_NEWCS("REQ_CLEAR_PATTERN", REQ_CLEAR_PATTERN); -#endif -#ifdef REQ_BACK_PATTERN - C_NEWCS("REQ_BACK_PATTERN", REQ_BACK_PATTERN); -#endif -#ifdef REQ_NEXT_MATCH - C_NEWCS("REQ_NEXT_MATCH", REQ_NEXT_MATCH); -#endif -#ifdef REQ_PREV_MATCH - C_NEWCS("REQ_PREV_MATCH", REQ_PREV_MATCH); -#endif -#ifdef MIN_MENU_COMMAND - C_NEWCS("MIN_MENU_COMMAND", MIN_MENU_COMMAND); -#endif -#ifdef MAX_MENU_COMMAND - C_NEWCS("MAX_MENU_COMMAND", MAX_MENU_COMMAND); -#endif -#ifdef O_ONEVALUE - C_NEWCS("O_ONEVALUE", O_ONEVALUE); -#endif -#ifdef O_SHOWDESC - C_NEWCS("O_SHOWDESC", O_SHOWDESC); -#endif -#ifdef O_ROWMAJOR - C_NEWCS("O_ROWMAJOR", O_ROWMAJOR); -#endif -#ifdef O_IGNORECASE - C_NEWCS("O_IGNORECASE", O_IGNORECASE); -#endif -#ifdef O_SHOWMATCH - C_NEWCS("O_SHOWMATCH", O_SHOWMATCH); -#endif -#ifdef O_NONCYCLIC - C_NEWCS("O_NONCYCLIC", O_NONCYCLIC); -#endif -#ifdef O_SELECTABLE - C_NEWCS("O_SELECTABLE", O_SELECTABLE); -#endif -#ifdef REQ_NEXT_PAGE - C_NEWCS("REQ_NEXT_PAGE", REQ_NEXT_PAGE); -#endif -#ifdef REQ_PREV_PAGE - C_NEWCS("REQ_PREV_PAGE", REQ_PREV_PAGE); -#endif -#ifdef REQ_FIRST_PAGE - C_NEWCS("REQ_FIRST_PAGE", REQ_FIRST_PAGE); -#endif -#ifdef REQ_LAST_PAGE - C_NEWCS("REQ_LAST_PAGE", REQ_LAST_PAGE); -#endif -#ifdef REQ_NEXT_FIELD - C_NEWCS("REQ_NEXT_FIELD", REQ_NEXT_FIELD); -#endif -#ifdef REQ_PREV_FIELD - C_NEWCS("REQ_PREV_FIELD", REQ_PREV_FIELD); -#endif -#ifdef REQ_FIRST_FIELD - C_NEWCS("REQ_FIRST_FIELD", REQ_FIRST_FIELD); -#endif -#ifdef REQ_LAST_FIELD - C_NEWCS("REQ_LAST_FIELD", REQ_LAST_FIELD); -#endif -#ifdef REQ_SNEXT_FIELD - C_NEWCS("REQ_SNEXT_FIELD", REQ_SNEXT_FIELD); -#endif -#ifdef REQ_SPREV_FIELD - C_NEWCS("REQ_SPREV_FIELD", REQ_SPREV_FIELD); -#endif -#ifdef REQ_SFIRST_FIELD - C_NEWCS("REQ_SFIRST_FIELD", REQ_SFIRST_FIELD); -#endif -#ifdef REQ_SLAST_FIELD - C_NEWCS("REQ_SLAST_FIELD", REQ_SLAST_FIELD); -#endif -#ifdef REQ_LEFT_FIELD - C_NEWCS("REQ_LEFT_FIELD", REQ_LEFT_FIELD); -#endif -#ifdef REQ_RIGHT_FIELD - C_NEWCS("REQ_RIGHT_FIELD", REQ_RIGHT_FIELD); -#endif -#ifdef REQ_UP_FIELD - C_NEWCS("REQ_UP_FIELD", REQ_UP_FIELD); -#endif -#ifdef REQ_DOWN_FIELD - C_NEWCS("REQ_DOWN_FIELD", REQ_DOWN_FIELD); -#endif -#ifdef REQ_NEXT_CHAR - C_NEWCS("REQ_NEXT_CHAR", REQ_NEXT_CHAR); -#endif -#ifdef REQ_PREV_CHAR - C_NEWCS("REQ_PREV_CHAR", REQ_PREV_CHAR); -#endif -#ifdef REQ_NEXT_LINE - C_NEWCS("REQ_NEXT_LINE", REQ_NEXT_LINE); -#endif -#ifdef REQ_PREV_LINE - C_NEWCS("REQ_PREV_LINE", REQ_PREV_LINE); -#endif -#ifdef REQ_NEXT_WORD - C_NEWCS("REQ_NEXT_WORD", REQ_NEXT_WORD); -#endif -#ifdef REQ_PREV_WORD - C_NEWCS("REQ_PREV_WORD", REQ_PREV_WORD); -#endif -#ifdef REQ_BEG_FIELD - C_NEWCS("REQ_BEG_FIELD", REQ_BEG_FIELD); -#endif -#ifdef REQ_END_FIELD - C_NEWCS("REQ_END_FIELD", REQ_END_FIELD); -#endif -#ifdef REQ_BEG_LINE - C_NEWCS("REQ_BEG_LINE", REQ_BEG_LINE); -#endif -#ifdef REQ_END_LINE - C_NEWCS("REQ_END_LINE", REQ_END_LINE); -#endif -#ifdef REQ_LEFT_CHAR - C_NEWCS("REQ_LEFT_CHAR", REQ_LEFT_CHAR); -#endif -#ifdef REQ_RIGHT_CHAR - C_NEWCS("REQ_RIGHT_CHAR", REQ_RIGHT_CHAR); -#endif -#ifdef REQ_UP_CHAR - C_NEWCS("REQ_UP_CHAR", REQ_UP_CHAR); -#endif -#ifdef REQ_DOWN_CHAR - C_NEWCS("REQ_DOWN_CHAR", REQ_DOWN_CHAR); -#endif -#ifdef REQ_NEW_LINE - C_NEWCS("REQ_NEW_LINE", REQ_NEW_LINE); -#endif -#ifdef REQ_INS_CHAR - C_NEWCS("REQ_INS_CHAR", REQ_INS_CHAR); -#endif -#ifdef REQ_INS_LINE - C_NEWCS("REQ_INS_LINE", REQ_INS_LINE); -#endif -#ifdef REQ_DEL_CHAR - C_NEWCS("REQ_DEL_CHAR", REQ_DEL_CHAR); -#endif -#ifdef REQ_DEL_PREV - C_NEWCS("REQ_DEL_PREV", REQ_DEL_PREV); -#endif -#ifdef REQ_DEL_LINE - C_NEWCS("REQ_DEL_LINE", REQ_DEL_LINE); -#endif -#ifdef REQ_DEL_WORD - C_NEWCS("REQ_DEL_WORD", REQ_DEL_WORD); -#endif -#ifdef REQ_CLR_EOL - C_NEWCS("REQ_CLR_EOL", REQ_CLR_EOL); -#endif -#ifdef REQ_CLR_EOF - C_NEWCS("REQ_CLR_EOF", REQ_CLR_EOF); -#endif -#ifdef REQ_CLR_FIELD - C_NEWCS("REQ_CLR_FIELD", REQ_CLR_FIELD); -#endif -#ifdef REQ_OVL_MODE - C_NEWCS("REQ_OVL_MODE", REQ_OVL_MODE); -#endif -#ifdef REQ_INS_MODE - C_NEWCS("REQ_INS_MODE", REQ_INS_MODE); -#endif -#ifdef REQ_SCR_FLINE - C_NEWCS("REQ_SCR_FLINE", REQ_SCR_FLINE); -#endif -#ifdef REQ_SCR_BLINE - C_NEWCS("REQ_SCR_BLINE", REQ_SCR_BLINE); -#endif -#ifdef REQ_SCR_FPAGE - C_NEWCS("REQ_SCR_FPAGE", REQ_SCR_FPAGE); -#endif -#ifdef REQ_SCR_BPAGE - C_NEWCS("REQ_SCR_BPAGE", REQ_SCR_BPAGE); -#endif -#ifdef REQ_SCR_FHPAGE - C_NEWCS("REQ_SCR_FHPAGE", REQ_SCR_FHPAGE); -#endif -#ifdef REQ_SCR_BHPAGE - C_NEWCS("REQ_SCR_BHPAGE", REQ_SCR_BHPAGE); -#endif -#ifdef REQ_SCR_FCHAR - C_NEWCS("REQ_SCR_FCHAR", REQ_SCR_FCHAR); -#endif -#ifdef REQ_SCR_BCHAR - C_NEWCS("REQ_SCR_BCHAR", REQ_SCR_BCHAR); -#endif -#ifdef REQ_SCR_HFLINE - C_NEWCS("REQ_SCR_HFLINE", REQ_SCR_HFLINE); -#endif -#ifdef REQ_SCR_HBLINE - C_NEWCS("REQ_SCR_HBLINE", REQ_SCR_HBLINE); -#endif -#ifdef REQ_SCR_HFHALF - C_NEWCS("REQ_SCR_HFHALF", REQ_SCR_HFHALF); -#endif -#ifdef REQ_SCR_HBHALF - C_NEWCS("REQ_SCR_HBHALF", REQ_SCR_HBHALF); -#endif -#ifdef REQ_VALIDATION - C_NEWCS("REQ_VALIDATION", REQ_VALIDATION); -#endif -#ifdef REQ_NEXT_CHOICE - C_NEWCS("REQ_NEXT_CHOICE", REQ_NEXT_CHOICE); -#endif -#ifdef REQ_PREV_CHOICE - C_NEWCS("REQ_PREV_CHOICE", REQ_PREV_CHOICE); -#endif -#ifdef MIN_FORM_COMMAND - C_NEWCS("MIN_FORM_COMMAND", MIN_FORM_COMMAND); -#endif -#ifdef MAX_FORM_COMMAND - C_NEWCS("MAX_FORM_COMMAND", MAX_FORM_COMMAND); -#endif -#ifdef NO_JUSTIFICATION - C_NEWCS("NO_JUSTIFICATION", NO_JUSTIFICATION); -#endif -#ifdef JUSTIFY_LEFT - C_NEWCS("JUSTIFY_LEFT", JUSTIFY_LEFT); -#endif -#ifdef JUSTIFY_CENTER - C_NEWCS("JUSTIFY_CENTER", JUSTIFY_CENTER); -#endif -#ifdef JUSTIFY_RIGHT - C_NEWCS("JUSTIFY_RIGHT", JUSTIFY_RIGHT); -#endif -#ifdef O_VISIBLE - C_NEWCS("O_VISIBLE", O_VISIBLE); -#endif -#ifdef O_ACTIVE - C_NEWCS("O_ACTIVE", O_ACTIVE); -#endif -#ifdef O_PUBLIC - C_NEWCS("O_PUBLIC", O_PUBLIC); -#endif -#ifdef O_EDIT - C_NEWCS("O_EDIT", O_EDIT); -#endif -#ifdef O_WRAP - C_NEWCS("O_WRAP", O_WRAP); -#endif -#ifdef O_BLANK - C_NEWCS("O_BLANK", O_BLANK); -#endif -#ifdef O_AUTOSKIP - C_NEWCS("O_AUTOSKIP", O_AUTOSKIP); -#endif -#ifdef O_NULLOK - C_NEWCS("O_NULLOK", O_NULLOK); -#endif -#ifdef O_PASSOK - C_NEWCS("O_PASSOK", O_PASSOK); -#endif -#ifdef O_STATIC - C_NEWCS("O_STATIC", O_STATIC); -#endif -#ifdef O_NL_OVERLOAD - C_NEWCS("O_NL_OVERLOAD", O_NL_OVERLOAD); -#endif -#ifdef O_BS_OVERLOAD - C_NEWCS("O_BS_OVERLOAD", O_BS_OVERLOAD); -#endif - - /* traceon(); */ - ST(0) = &PL_sv_yes; - XSRETURN(1); -} diff --git a/Curses-1.23/CursesCon.c b/Curses-1.23/CursesCon.c deleted file mode 100644 index a5cafa1..0000000 --- a/Curses-1.23/CursesCon.c +++ /dev/null @@ -1,436 +0,0 @@ -/* This file can be automatically generated; changes may be lost. -** -** -** CursesCon.c -- non-trivial constants -** -** Copyright (c) 1994-2000 William Setzer -** -** You may distribute under the terms of either the Artistic License -** or the GNU General Public License, as specified in the README file. -*/ - -XS(XS_Curses_ACS_BLOCK) -{ - dXSARGS; -#ifdef ACS_BLOCK - { - int ret = ACS_BLOCK; - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_con_not_there("ACS_BLOCK"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ACS_BOARD) -{ - dXSARGS; -#ifdef ACS_BOARD - { - int ret = ACS_BOARD; - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_con_not_there("ACS_BOARD"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ACS_BTEE) -{ - dXSARGS; -#ifdef ACS_BTEE - { - int ret = ACS_BTEE; - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_con_not_there("ACS_BTEE"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ACS_BULLET) -{ - dXSARGS; -#ifdef ACS_BULLET - { - int ret = ACS_BULLET; - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_con_not_there("ACS_BULLET"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ACS_CKBOARD) -{ - dXSARGS; -#ifdef ACS_CKBOARD - { - int ret = ACS_CKBOARD; - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_con_not_there("ACS_CKBOARD"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ACS_DARROW) -{ - dXSARGS; -#ifdef ACS_DARROW - { - int ret = ACS_DARROW; - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_con_not_there("ACS_DARROW"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ACS_DEGREE) -{ - dXSARGS; -#ifdef ACS_DEGREE - { - int ret = ACS_DEGREE; - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_con_not_there("ACS_DEGREE"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ACS_DIAMOND) -{ - dXSARGS; -#ifdef ACS_DIAMOND - { - int ret = ACS_DIAMOND; - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_con_not_there("ACS_DIAMOND"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ACS_HLINE) -{ - dXSARGS; -#ifdef ACS_HLINE - { - int ret = ACS_HLINE; - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_con_not_there("ACS_HLINE"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ACS_LANTERN) -{ - dXSARGS; -#ifdef ACS_LANTERN - { - int ret = ACS_LANTERN; - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_con_not_there("ACS_LANTERN"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ACS_LARROW) -{ - dXSARGS; -#ifdef ACS_LARROW - { - int ret = ACS_LARROW; - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_con_not_there("ACS_LARROW"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ACS_LLCORNER) -{ - dXSARGS; -#ifdef ACS_LLCORNER - { - int ret = ACS_LLCORNER; - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_con_not_there("ACS_LLCORNER"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ACS_LRCORNER) -{ - dXSARGS; -#ifdef ACS_LRCORNER - { - int ret = ACS_LRCORNER; - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_con_not_there("ACS_LRCORNER"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ACS_LTEE) -{ - dXSARGS; -#ifdef ACS_LTEE - { - int ret = ACS_LTEE; - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_con_not_there("ACS_LTEE"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ACS_PLMINUS) -{ - dXSARGS; -#ifdef ACS_PLMINUS - { - int ret = ACS_PLMINUS; - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_con_not_there("ACS_PLMINUS"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ACS_PLUS) -{ - dXSARGS; -#ifdef ACS_PLUS - { - int ret = ACS_PLUS; - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_con_not_there("ACS_PLUS"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ACS_RARROW) -{ - dXSARGS; -#ifdef ACS_RARROW - { - int ret = ACS_RARROW; - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_con_not_there("ACS_RARROW"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ACS_RTEE) -{ - dXSARGS; -#ifdef ACS_RTEE - { - int ret = ACS_RTEE; - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_con_not_there("ACS_RTEE"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ACS_S1) -{ - dXSARGS; -#ifdef ACS_S1 - { - int ret = ACS_S1; - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_con_not_there("ACS_S1"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ACS_S9) -{ - dXSARGS; -#ifdef ACS_S9 - { - int ret = ACS_S9; - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_con_not_there("ACS_S9"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ACS_TTEE) -{ - dXSARGS; -#ifdef ACS_TTEE - { - int ret = ACS_TTEE; - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_con_not_there("ACS_TTEE"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ACS_UARROW) -{ - dXSARGS; -#ifdef ACS_UARROW - { - int ret = ACS_UARROW; - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_con_not_there("ACS_UARROW"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ACS_ULCORNER) -{ - dXSARGS; -#ifdef ACS_ULCORNER - { - int ret = ACS_ULCORNER; - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_con_not_there("ACS_ULCORNER"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ACS_URCORNER) -{ - dXSARGS; -#ifdef ACS_URCORNER - { - int ret = ACS_URCORNER; - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_con_not_there("ACS_URCORNER"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ACS_VLINE) -{ - dXSARGS; -#ifdef ACS_VLINE - { - int ret = ACS_VLINE; - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_con_not_there("ACS_VLINE"); - XSRETURN(0); -#endif -} - diff --git a/Curses-1.23/CursesFun.c b/Curses-1.23/CursesFun.c deleted file mode 100644 index 8f73899..0000000 --- a/Curses-1.23/CursesFun.c +++ /dev/null @@ -1,6949 +0,0 @@ -/* This file can be automatically generated; changes may be lost. -** -** -** CursesFun.c -- the functions -** -** Copyright (c) 1994-2000 William Setzer -** -** You may distribute under the terms of either the Artistic License -** or the GNU General Public License, as specified in the README file. -*/ - -/* curs_addch */ - -XS(XS_Curses_addch) -{ - dXSARGS; -#ifdef C_ADDCH - c_countargs("addch", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - chtype ch = c_sv2chtype(ST(c_arg)); - int ret = c_mret == ERR ? ERR : waddch(win, ch); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("addch"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_echochar) -{ - dXSARGS; -#ifdef C_ECHOCHAR - c_countargs("echochar", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - chtype ch = c_sv2chtype(ST(c_arg)); - int ret = c_mret == ERR ? ERR : wechochar(win, ch); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("echochar"); - XSRETURN(0); -#endif -} - - -/* curs_addchstr */ - -XS(XS_Curses_addchstr) -{ - dXSARGS; -#ifdef C_ADDCHSTR - c_countargs("addchstr", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - chtype *str = (chtype *)SvPV_nolen(ST(c_arg)); - int ret = c_mret == ERR ? ERR : waddchstr(win, str); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("addchstr"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_addchnstr) -{ - dXSARGS; -#ifdef C_ADDCHNSTR - c_countargs("addchnstr", items, 2); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - chtype *str = (chtype *)SvPV_nolen(ST(c_arg)); - int n = (int)SvIV(ST(c_arg+1)); - int ret = c_mret == ERR ? ERR : waddchnstr(win, str, n); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("addchnstr"); - XSRETURN(0); -#endif -} - - -/* curs_addstr */ - -XS(XS_Curses_addstr) -{ - dXSARGS; -#ifdef C_ADDSTR - c_countargs("addstr", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - char * str = (char *)SvPV_nolen(ST(c_arg)); - int ret = c_mret == ERR ? ERR : waddstr(win, str); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("addstr"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_addnstr) -{ - dXSARGS; -#ifdef C_ADDNSTR - c_countargs("addnstr", items, 2); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - char * str = (char *)SvPV_nolen(ST(c_arg)); - int n = (int)SvIV(ST(c_arg+1)); - int ret = c_mret == ERR ? ERR : waddnstr(win, str, n); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("addnstr"); - XSRETURN(0); -#endif -} - - -/* curs_attr */ - -XS(XS_Curses_attroff) -{ - dXSARGS; -#ifdef C_ATTROFF - c_countargs("attroff", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int attrs = (int)SvIV(ST(c_arg)); - int ret = c_mret == ERR ? ERR : wattroff(win, attrs); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("attroff"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_attron) -{ - dXSARGS; -#ifdef C_ATTRON - c_countargs("attron", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int attrs = (int)SvIV(ST(c_arg)); - int ret = c_mret == ERR ? ERR : wattron(win, attrs); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("attron"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_attrset) -{ - dXSARGS; -#ifdef C_ATTRSET - c_countargs("attrset", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int attrs = (int)SvIV(ST(c_arg)); - int ret = c_mret == ERR ? ERR : wattrset(win, attrs); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("attrset"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_standend) -{ - dXSARGS; -#ifdef C_STANDEND - c_countargs("standend", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int ret = c_mret == ERR ? ERR : (int)wstandend(win); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("standend"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_standout) -{ - dXSARGS; -#ifdef C_STANDOUT - c_countargs("standout", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int ret = c_mret == ERR ? ERR : (int)wstandout(win); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("standout"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_attr_get) -{ - dXSARGS; -#ifdef C_ATTR_GET - c_countargs("attr_get", items, 3); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - attr_t attrs = 0; - short color = 0; - void * opts = 0; - int ret = c_mret == ERR ? ERR : wattr_get(win, &attrs, &color, opts); - - sv_setiv(ST(c_arg), (IV)attrs);; - sv_setiv(ST(c_arg+1), (IV)color);; - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("attr_get"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_attr_off) -{ - dXSARGS; -#ifdef C_ATTR_OFF - c_countargs("attr_off", items, 2); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - attr_t attrs = (attr_t)SvIV(ST(c_arg)); - void * opts = 0; - int ret = c_mret == ERR ? ERR : wattr_off(win, attrs, opts); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("attr_off"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_attr_on) -{ - dXSARGS; -#ifdef C_ATTR_ON - c_countargs("attr_on", items, 2); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - attr_t attrs = (attr_t)SvIV(ST(c_arg)); - void * opts = 0; - int ret = c_mret == ERR ? ERR : wattr_on(win, attrs, opts); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("attr_on"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_attr_set) -{ - dXSARGS; -#ifdef C_ATTR_SET - c_countargs("attr_set", items, 3); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - attr_t attrs = (attr_t)SvIV(ST(c_arg)); - short color = (short)SvIV(ST(c_arg+1)); - void * opts = 0; - int ret = c_mret == ERR ? ERR : wattr_set(win, attrs, color, opts); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("attr_set"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_chgat) -{ - dXSARGS; -#ifdef C_CHGAT - /* Our 4th argument is meaningless. It mirrors the meaningless "opts" - argument in the Curses C library. - - In Perl Curses 1.16, we tried reducing this to 3 as a user thought - a 3-argument call ought to work, and we thought this number might - just be the _minimum_ argument count. Well, it's not. So for - backward compatibility if nothing else, it has to be 4. Fixed - back to 4 in 1.18. - */ - c_countargs("chgat", items, 4); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int n = (int)SvIV(ST(c_arg)); - attr_t attrs = (attr_t)SvIV(ST(c_arg+1)); - short color = (short)SvIV(ST(c_arg+2)); - void * opts = 0; - int ret = c_mret == ERR ? ERR : wchgat(win, n, attrs, color, opts); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("chgat"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_COLOR_PAIR) -{ - dXSARGS; -#ifdef C_COLOR_PAIR - c_exactargs("COLOR_PAIR", items, 1); - { - int n = (int)SvIV(ST(0)); - int ret = COLOR_PAIR(n); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("COLOR_PAIR"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_PAIR_NUMBER) -{ - dXSARGS; -#ifdef C_PAIR_NUMBER - c_exactargs("PAIR_NUMBER", items, 1); - { - int attrs = (int)SvIV(ST(0)); - int ret = PAIR_NUMBER(attrs); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("PAIR_NUMBER"); - XSRETURN(0); -#endif -} - - -/* curs_beep */ - -XS(XS_Curses_beep) -{ - dXSARGS; -#ifdef C_BEEP - c_exactargs("beep", items, 0); - { - int ret = beep(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("beep"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_flash) -{ - dXSARGS; -#ifdef C_FLASH - c_exactargs("flash", items, 0); - { - int ret = flash(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("flash"); - XSRETURN(0); -#endif -} - - -/* curs_bkgd */ - -XS(XS_Curses_bkgd) -{ - dXSARGS; -#ifdef C_BKGD - c_countargs("bkgd", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - chtype ch = c_sv2chtype(ST(c_arg)); - int ret = c_mret == ERR ? ERR : wbkgd(win, ch); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("bkgd"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_bkgdset) -{ - dXSARGS; -#ifdef C_BKGDSET - c_countargs("bkgdset", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - chtype ch = c_sv2chtype(ST(c_arg)); - - if (c_mret == OK) { wbkgdset(win, ch); } - } - XSRETURN(0); -#else - c_fun_not_there("bkgdset"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_getbkgd) -{ - dXSARGS; -#ifdef C_GETBKGD - c_countargs("getbkgd", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - chtype ret = c_mret == ERR ? ERR : getbkgd(win); - - ST(0) = sv_newmortal(); - c_chtype2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("getbkgd"); - XSRETURN(0); -#endif -} - - -/* curs_border */ - -XS(XS_Curses_border) -{ - dXSARGS; -#ifdef C_BORDER - c_countargs("border", items, 8); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - chtype ls = c_sv2chtype(ST(c_arg)); - chtype rs_ = c_sv2chtype(ST(c_arg+1)); - chtype ts = c_sv2chtype(ST(c_arg+2)); - chtype bs = c_sv2chtype(ST(c_arg+3)); - chtype tl = c_sv2chtype(ST(c_arg+4)); - chtype tr = c_sv2chtype(ST(c_arg+5)); - chtype bl = c_sv2chtype(ST(c_arg+6)); - chtype br = c_sv2chtype(ST(c_arg+7)); - int ret = c_mret == ERR ? ERR : wborder(win, ls, rs_, ts, bs, tl, tr, bl, br); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("border"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_box) -{ - dXSARGS; -#ifdef C_BOX - c_countargs("box", items, 2); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - chtype verch = c_sv2chtype(ST(c_arg)); - chtype horch = c_sv2chtype(ST(c_arg+1)); - int ret = c_mret == ERR ? ERR : box(win, verch, horch); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("box"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_hline) -{ - dXSARGS; -#ifdef C_HLINE - c_countargs("hline", items, 2); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - chtype ch = c_sv2chtype(ST(c_arg)); - int n = (int)SvIV(ST(c_arg+1)); - int ret = c_mret == ERR ? ERR : whline(win, ch, n); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("hline"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_vline) -{ - dXSARGS; -#ifdef C_VLINE - c_countargs("vline", items, 2); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - chtype ch = c_sv2chtype(ST(c_arg)); - int n = (int)SvIV(ST(c_arg+1)); - int ret = c_mret == ERR ? ERR : wvline(win, ch, n); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("vline"); - XSRETURN(0); -#endif -} - - -/* curs_clear */ - -XS(XS_Curses_erase) -{ - dXSARGS; -#ifdef C_ERASE - c_countargs("erase", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int ret = c_mret == ERR ? ERR : werase(win); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("erase"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_clear) -{ - dXSARGS; -#ifdef C_CLEAR - c_countargs("clear", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int ret = c_mret == ERR ? ERR : wclear(win); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("clear"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_clrtobot) -{ - dXSARGS; -#ifdef C_CLRTOBOT - c_countargs("clrtobot", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int ret = c_mret == ERR ? ERR : wclrtobot(win); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("clrtobot"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_clrtoeol) -{ - dXSARGS; -#ifdef C_CLRTOEOL - c_countargs("clrtoeol", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int ret = c_mret == ERR ? ERR : wclrtoeol(win); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("clrtoeol"); - XSRETURN(0); -#endif -} - - -/* curs_color */ - -XS(XS_Curses_start_color) -{ - dXSARGS; -#ifdef C_START_COLOR - c_exactargs("start_color", items, 0); - { - int ret = start_color(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("start_color"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_init_pair) -{ - dXSARGS; -#ifdef C_INIT_PAIR - c_exactargs("init_pair", items, 3); - { - short pair = (short)SvIV(ST(0)); - short f = (short)SvIV(ST(1)); - short b = (short)SvIV(ST(2)); - int ret = init_pair(pair, f, b); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("init_pair"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_init_color) -{ - dXSARGS; -#ifdef C_INIT_COLOR - c_exactargs("init_color", items, 4); - { - short color = (short)SvIV(ST(0)); - short r = (short)SvIV(ST(1)); - short g = (short)SvIV(ST(2)); - short b = (short)SvIV(ST(3)); - int ret = init_color(color, r, g, b); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("init_color"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_has_colors) -{ - dXSARGS; -#ifdef C_HAS_COLORS - c_exactargs("has_colors", items, 0); - { - bool ret = has_colors(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("has_colors"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_can_change_color) -{ - dXSARGS; -#ifdef C_CAN_CHANGE_COLOR - c_exactargs("can_change_color", items, 0); - { - bool ret = can_change_color(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("can_change_color"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_color_content) -{ - dXSARGS; -#ifdef C_COLOR_CONTENT - c_exactargs("color_content", items, 4); - { - short color = (short)SvIV(ST(0)); - short r = 0; - short g = 0; - short b = 0; - int ret = color_content(color, &r, &g, &b); - - sv_setiv(ST(1), (IV)r);; - sv_setiv(ST(2), (IV)g);; - sv_setiv(ST(3), (IV)b);; - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("color_content"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_pair_content) -{ - dXSARGS; -#ifdef C_PAIR_CONTENT - c_exactargs("pair_content", items, 3); - { - short pair = (short)SvIV(ST(0)); - short f = 0; - short b = 0; - int ret = pair_content(pair, &f, &b); - - sv_setiv(ST(1), (IV)f);; - sv_setiv(ST(2), (IV)b);; - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("pair_content"); - XSRETURN(0); -#endif -} - - -/* curs_delch */ - -XS(XS_Curses_delch) -{ - dXSARGS; -#ifdef C_DELCH - c_countargs("delch", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int ret = c_mret == ERR ? ERR : wdelch(win); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("delch"); - XSRETURN(0); -#endif -} - - -/* curs_deleteln */ - -XS(XS_Curses_deleteln) -{ - dXSARGS; -#ifdef C_DELETELN - c_countargs("deleteln", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int ret = c_mret == ERR ? ERR : wdeleteln(win); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("deleteln"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_insdelln) -{ - dXSARGS; -#ifdef C_INSDELLN - c_countargs("insdelln", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int n = (int)SvIV(ST(c_arg)); - int ret = c_mret == ERR ? ERR : winsdelln(win, n); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("insdelln"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_insertln) -{ - dXSARGS; -#ifdef C_INSERTLN - c_countargs("insertln", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int ret = c_mret == ERR ? ERR : winsertln(win); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("insertln"); - XSRETURN(0); -#endif -} - - -/* curs_getch */ - -XS(XS_Curses_getch) -{ - dXSARGS; -#ifdef C_GETCH - c_countargs("getch", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - chtype ret = c_mret == ERR ? ERR : wgetch(win); - - ST(0) = sv_newmortal(); - c_chtype2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("getch"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ungetch) -{ - dXSARGS; -#ifdef C_UNGETCH - c_exactargs("ungetch", items, 1); - { - chtype ch = c_sv2chtype(ST(0)); - int ret = ungetch(ch); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("ungetch"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_has_key) -{ - dXSARGS; -#ifdef C_HAS_KEY - c_exactargs("has_key", items, 1); - { - int ch = (int)SvIV(ST(0)); - int ret = has_key(ch); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("has_key"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_KEY_F) -{ - dXSARGS; -#ifdef C_KEY_F - c_exactargs("KEY_F", items, 1); - { - int n = (int)SvIV(ST(0)); - chtype ret = KEY_F(n); - - ST(0) = sv_newmortal(); - c_chtype2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("KEY_F"); - XSRETURN(0); -#endif -} - - -/* curs_getstr */ - -XS(XS_Curses_getstr) -{ - dXSARGS; -#ifdef C_GETSTR - c_countargs("getstr", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - char * str = (char *)sv_grow(ST(c_arg), 250); - int ret = c_mret == ERR ? ERR : wgetstr(win, str); - - c_setchar(ST(c_arg), str); - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("getstr"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_getnstr) -{ - dXSARGS; -#ifdef C_GETNSTR - c_countargs("getnstr", items, 2); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int n = (int)SvIV(ST(c_arg+1)); - char * str = (char *)sv_grow(ST(c_arg), n+1); - int ret = c_mret == ERR ? ERR : wgetnstr(win, str, n); - - c_setchar(ST(c_arg), str); - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("getnstr"); - XSRETURN(0); -#endif -} - - -/* curs_getyx */ - -XS(XS_Curses_getyx) -{ - dXSARGS; -#ifdef C_GETYX - c_countargs("getyx", items, 2); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int y = 0; - int x = 0; - - if (c_mret == OK) { getyx(win, y, x); } - sv_setiv(ST(c_arg), (IV)y);; - sv_setiv(ST(c_arg+1), (IV)x);; - } - XSRETURN(0); -#else - c_fun_not_there("getyx"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_getparyx) -{ - dXSARGS; -#ifdef C_GETPARYX - c_countargs("getparyx", items, 2); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int y = 0; - int x = 0; - - if (c_mret == OK) { getparyx(win, y, x); } - sv_setiv(ST(c_arg), (IV)y);; - sv_setiv(ST(c_arg+1), (IV)x);; - } - XSRETURN(0); -#else - c_fun_not_there("getparyx"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_getbegyx) -{ - dXSARGS; -#ifdef C_GETBEGYX - c_countargs("getbegyx", items, 2); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int y = 0; - int x = 0; - - if (c_mret == OK) { getbegyx(win, y, x); } - sv_setiv(ST(c_arg), (IV)y);; - sv_setiv(ST(c_arg+1), (IV)x);; - } - XSRETURN(0); -#else - c_fun_not_there("getbegyx"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_getmaxyx) -{ - dXSARGS; -#ifdef C_GETMAXYX - c_countargs("getmaxyx", items, 2); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int y = 0; - int x = 0; - - if (c_mret == OK) { getmaxyx(win, y, x); } - sv_setiv(ST(c_arg), (IV)y);; - sv_setiv(ST(c_arg+1), (IV)x);; - } - XSRETURN(0); -#else - c_fun_not_there("getmaxyx"); - XSRETURN(0); -#endif -} - - -/* curs_inch */ - -XS(XS_Curses_inch) -{ - dXSARGS; -#ifdef C_INCH - c_countargs("inch", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - chtype ret = c_mret == ERR ? ERR : winch(win); - - ST(0) = sv_newmortal(); - c_chtype2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("inch"); - XSRETURN(0); -#endif -} - - -/* curs_inchstr */ - -XS(XS_Curses_inchstr) -{ - dXSARGS; -#ifdef C_INCHSTR - c_countargs("inchstr", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - chtype *str = (chtype *)sv_grow(ST(c_arg), (250)*sizeof(chtype)); - int ret = c_mret == ERR ? ERR : winchstr(win, str); - - c_setchtype(ST(c_arg), str); - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("inchstr"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_inchnstr) -{ - dXSARGS; -#ifdef C_INCHNSTR - c_countargs("inchnstr", items, 2); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int n = (int)SvIV(ST(c_arg+1)); - chtype *str = (chtype *)sv_grow(ST(c_arg), (n+1)*sizeof(chtype)); - int ret = c_mret == ERR ? ERR : winchnstr(win, str, n); - - c_setchtype(ST(c_arg), str); - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("inchnstr"); - XSRETURN(0); -#endif -} - - -/* curs_initscr */ - -XS(XS_Curses_initscr) -{ - dXSARGS; -#ifdef C_INITSCR - c_exactargs("initscr", items, 0); - { - WINDOW * ret = initscr(); - - ST(0) = sv_newmortal(); - c_window2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("initscr"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_endwin) -{ - dXSARGS; -#ifdef C_ENDWIN - c_exactargs("endwin", items, 0); - { - int ret = endwin(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("endwin"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_isendwin) -{ - dXSARGS; -#ifdef C_ISENDWIN - c_exactargs("isendwin", items, 0); - { - int ret = isendwin(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("isendwin"); - XSRETURN(0); -#endif -} - -/* newterm() has some complexities because of PerlIo. - - IoIFP() returns a FILE * with some Perl cores, and PerlIo with - others. We need FILE *. One would think that on the PerlIo system, - there would be some way to call something that uses FILE *, - such as newterm(), but I haven't found one. - - With some Perl cores, "FILE" is a macro that expands to "PerlIo". - That seems ridiculous, because something such as newterm() needs a - real FILE *, not just something called that. -*/ - - -XS(XS_Curses_newterm) -{ - dXSARGS; -#ifdef C_NEWTERM -#ifdef PERLIO_IS_STDIO - c_exactargs("newterm", items, 3); - { - char * type = ST(0) != &PL_sv_undef ? (char *)SvPV_nolen(ST(0)) : NULL; - - FILE * outfd = IoIFP(sv_2io(ST(1))); - FILE * infd = IoIFP(sv_2io(ST(2))); - SCREEN * ret = newterm(type, outfd, infd); - - ST(0) = sv_newmortal(); - c_screen2sv(ST(0), ret); - } - XSRETURN(1); -#else /* PERLIO_IS_STDIO */ - croak("You cannot use newterm() with this Perl interpreter core because " - "it uses PerlIo for file I/O, and the Curses library doesn't " - "know what to do with that"); - /* See explanation in comments above */ -#endif -#else - c_fun_not_there("newterm"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_set_term) -{ - dXSARGS; -#ifdef C_SET_TERM - c_exactargs("set_term", items, 1); - { - SCREEN *new = c_sv2screen(ST(0), 0); - SCREEN * ret = set_term(new); - - ST(0) = sv_newmortal(); - c_screen2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_term"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_delscreen) -{ - dXSARGS; -#ifdef C_DELSCREEN - c_exactargs("delscreen", items, 1); - { - SCREEN *sp = c_sv2screen(ST(0), 0); - - delscreen(sp); - } - XSRETURN(0); -#else - c_fun_not_there("delscreen"); - XSRETURN(0); -#endif -} - - -/* curs_inopts */ - -#ifdef C_INTCBREAK -XS(XS_Curses_cbreak) -{ - dXSARGS; -#ifdef C_CBREAK - c_exactargs("cbreak", items, 0); - { - int ret = cbreak(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("cbreak"); - XSRETURN(0); -#endif -} - -#else -XS(XS_Curses_cbreak) -{ - dXSARGS; -#ifdef C_CBREAK - c_exactargs("cbreak", items, 0); - { - cbreak(); - } - XSRETURN(0); -#else - c_fun_not_there("cbreak"); - XSRETURN(0); -#endif -} - -#endif -#ifdef C_INTNOCBREAK -XS(XS_Curses_nocbreak) -{ - dXSARGS; -#ifdef C_NOCBREAK - c_exactargs("nocbreak", items, 0); - { - int ret = nocbreak(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("nocbreak"); - XSRETURN(0); -#endif -} - -#else -XS(XS_Curses_nocbreak) -{ - dXSARGS; -#ifdef C_NOCBREAK - c_exactargs("nocbreak", items, 0); - { - nocbreak(); - } - XSRETURN(0); -#else - c_fun_not_there("nocbreak"); - XSRETURN(0); -#endif -} - -#endif -#ifdef C_INTECHO -XS(XS_Curses_echo) -{ - dXSARGS; -#ifdef C_ECHO - c_exactargs("echo", items, 0); - { - int ret = echo(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("echo"); - XSRETURN(0); -#endif -} - -#else -XS(XS_Curses_echo) -{ - dXSARGS; -#ifdef C_ECHO - c_exactargs("echo", items, 0); - { - echo(); - } - XSRETURN(0); -#else - c_fun_not_there("echo"); - XSRETURN(0); -#endif -} - -#endif -#ifdef C_INTNOECHO -XS(XS_Curses_noecho) -{ - dXSARGS; -#ifdef C_NOECHO - c_exactargs("noecho", items, 0); - { - int ret = noecho(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("noecho"); - XSRETURN(0); -#endif -} - -#else -XS(XS_Curses_noecho) -{ - dXSARGS; -#ifdef C_NOECHO - c_exactargs("noecho", items, 0); - { - noecho(); - } - XSRETURN(0); -#else - c_fun_not_there("noecho"); - XSRETURN(0); -#endif -} - -#endif -XS(XS_Curses_halfdelay) -{ - dXSARGS; -#ifdef C_HALFDELAY - c_exactargs("halfdelay", items, 1); - { - int tenths = (int)SvIV(ST(0)); - int ret = halfdelay(tenths); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("halfdelay"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_intrflush) -{ - dXSARGS; -#ifdef C_INTRFLUSH - c_countargs("intrflush", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - bool bf = (int)SvIV(ST(c_arg)); - int ret = c_mret == ERR ? ERR : intrflush(win, bf); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("intrflush"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_keypad) -{ - dXSARGS; -#ifdef C_KEYPAD - c_countargs("keypad", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - bool bf = (int)SvIV(ST(c_arg)); - int ret = c_mret == ERR ? ERR : keypad(win, bf); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("keypad"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_meta) -{ - dXSARGS; -#ifdef C_META - c_countargs("meta", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - bool bf = (int)SvIV(ST(c_arg)); - int ret = c_mret == ERR ? ERR : meta(win, bf); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("meta"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_nodelay) -{ - dXSARGS; -#ifdef C_NODELAY - c_countargs("nodelay", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - bool bf = (int)SvIV(ST(c_arg)); - int ret = c_mret == ERR ? ERR : nodelay(win, bf); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("nodelay"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_notimeout) -{ - dXSARGS; -#ifdef C_NOTIMEOUT - c_countargs("notimeout", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - bool bf = (int)SvIV(ST(c_arg)); - int ret = c_mret == ERR ? ERR : notimeout(win, bf); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("notimeout"); - XSRETURN(0); -#endif -} - -#ifdef C_INTRAW -XS(XS_Curses_raw) -{ - dXSARGS; -#ifdef C_RAW - c_exactargs("raw", items, 0); - { - int ret = raw(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("raw"); - XSRETURN(0); -#endif -} - -#else -XS(XS_Curses_raw) -{ - dXSARGS; -#ifdef C_RAW - c_exactargs("raw", items, 0); - { - raw(); - } - XSRETURN(0); -#else - c_fun_not_there("raw"); - XSRETURN(0); -#endif -} - -#endif -#ifdef C_INTNORAW -XS(XS_Curses_noraw) -{ - dXSARGS; -#ifdef C_NORAW - c_exactargs("noraw", items, 0); - { - int ret = noraw(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("noraw"); - XSRETURN(0); -#endif -} - -#else -XS(XS_Curses_noraw) -{ - dXSARGS; -#ifdef C_NORAW - c_exactargs("noraw", items, 0); - { - noraw(); - } - XSRETURN(0); -#else - c_fun_not_there("noraw"); - XSRETURN(0); -#endif -} - -#endif -XS(XS_Curses_qiflush) -{ - dXSARGS; -#ifdef C_QIFLUSH - c_exactargs("qiflush", items, 0); - { - qiflush(); - } - XSRETURN(0); -#else - c_fun_not_there("qiflush"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_noqiflush) -{ - dXSARGS; -#ifdef C_NOQIFLUSH - c_exactargs("noqiflush", items, 0); - { - noqiflush(); - } - XSRETURN(0); -#else - c_fun_not_there("noqiflush"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_timeout) -{ - dXSARGS; -#ifdef C_TIMEOUT - c_countargs("timeout", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int delay = (int)SvIV(ST(c_arg)); - - if (c_mret == OK) { wtimeout(win, delay); } - } - XSRETURN(0); -#else - c_fun_not_there("timeout"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_typeahead) -{ - dXSARGS; -#ifdef C_TYPEAHEAD - c_exactargs("typeahead", items, 1); - { - int fd = (int)SvIV(ST(0)); - int ret = typeahead(fd); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("typeahead"); - XSRETURN(0); -#endif -} - - -/* curs_insch */ - -XS(XS_Curses_insch) -{ - dXSARGS; -#ifdef C_INSCH - c_countargs("insch", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - chtype ch = c_sv2chtype(ST(c_arg)); - int ret = c_mret == ERR ? ERR : winsch(win, ch); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("insch"); - XSRETURN(0); -#endif -} - - -/* curs_insstr */ - -XS(XS_Curses_insstr) -{ - dXSARGS; -#ifdef C_INSSTR - c_countargs("insstr", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - char * str = (char *)SvPV_nolen(ST(c_arg)); - int ret = c_mret == ERR ? ERR : winsstr(win, str); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("insstr"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_insnstr) -{ - dXSARGS; -#ifdef C_INSNSTR - c_countargs("insnstr", items, 2); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - char * str = (char *)SvPV_nolen(ST(c_arg)); - int n = (int)SvIV(ST(c_arg+1)); - int ret = c_mret == ERR ? ERR : winsnstr(win, str, n); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("insnstr"); - XSRETURN(0); -#endif -} - - -/* curs_instr */ - -XS(XS_Curses_instr) -{ - dXSARGS; -#ifdef C_INSTR - c_countargs("instr", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - char * str = (char *)sv_grow(ST(c_arg), 250); - int ret = c_mret == ERR ? ERR : winstr(win, str); - - c_setchar(ST(c_arg), str); - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("instr"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_innstr) -{ - dXSARGS; -#ifdef C_INNSTR - c_countargs("innstr", items, 2); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int n = (int)SvIV(ST(c_arg+1)); - char * str = (char *)sv_grow(ST(c_arg), n+1); - int ret = c_mret == ERR ? ERR : winnstr(win, str, n); - - c_setchar(ST(c_arg), str); - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("innstr"); - XSRETURN(0); -#endif -} - - -/* curs_kernel */ - -XS(XS_Curses_def_prog_mode) -{ - dXSARGS; -#ifdef C_DEF_PROG_MODE - c_exactargs("def_prog_mode", items, 0); - { - int ret = def_prog_mode(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("def_prog_mode"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_def_shell_mode) -{ - dXSARGS; -#ifdef C_DEF_SHELL_MODE - c_exactargs("def_shell_mode", items, 0); - { - int ret = def_shell_mode(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("def_shell_mode"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_reset_prog_mode) -{ - dXSARGS; -#ifdef C_RESET_PROG_MODE - c_exactargs("reset_prog_mode", items, 0); - { - int ret = reset_prog_mode(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("reset_prog_mode"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_reset_shell_mode) -{ - dXSARGS; -#ifdef C_RESET_SHELL_MODE - c_exactargs("reset_shell_mode", items, 0); - { - int ret = reset_shell_mode(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("reset_shell_mode"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_resetty) -{ - dXSARGS; -#ifdef C_RESETTY - c_exactargs("resetty", items, 0); - { - int ret = resetty(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("resetty"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_savetty) -{ - dXSARGS; -#ifdef C_SAVETTY - c_exactargs("savetty", items, 0); - { - int ret = savetty(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("savetty"); - XSRETURN(0); -#endif -} - -#ifdef C_INTGETSYX -XS(XS_Curses_getsyx) -{ - dXSARGS; -#ifdef C_GETSYX - c_exactargs("getsyx", items, 2); - { - int y = 0; - int x = 0; - int ret = getsyx(y, x); - - sv_setiv(ST(0), (IV)y);; - sv_setiv(ST(1), (IV)x);; - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("getsyx"); - XSRETURN(0); -#endif -} - -#else -XS(XS_Curses_getsyx) -{ - dXSARGS; -#ifdef C_GETSYX - c_exactargs("getsyx", items, 2); - { - int y = 0; - int x = 0; - - getsyx(y, x); - sv_setiv(ST(0), (IV)y);; - sv_setiv(ST(1), (IV)x);; - } - XSRETURN(0); -#else - c_fun_not_there("getsyx"); - XSRETURN(0); -#endif -} - -#endif -#ifdef C_INTSETSYX -XS(XS_Curses_setsyx) -{ - dXSARGS; -#ifdef C_SETSYX - c_exactargs("setsyx", items, 2); - { - int y = (int)SvIV(ST(0)); - int x = (int)SvIV(ST(1)); - int ret = setsyx(y, x); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("setsyx"); - XSRETURN(0); -#endif -} - -#else -XS(XS_Curses_setsyx) -{ - dXSARGS; -#ifdef C_SETSYX - c_exactargs("setsyx", items, 2); - { - int y = (int)SvIV(ST(0)); - int x = (int)SvIV(ST(1)); - - setsyx(y, x); - } - XSRETURN(0); -#else - c_fun_not_there("setsyx"); - XSRETURN(0); -#endif -} - -#endif -XS(XS_Curses_curs_set) -{ - dXSARGS; -#ifdef C_CURS_SET - c_exactargs("curs_set", items, 1); - { - int visibility = (int)SvIV(ST(0)); - int ret = curs_set(visibility); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("curs_set"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_napms) -{ - dXSARGS; -#ifdef C_NAPMS - c_exactargs("napms", items, 1); - { - int ms = (int)SvIV(ST(0)); - int ret = napms(ms); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("napms"); - XSRETURN(0); -#endif -} - - -/* curs_move */ - -XS(XS_Curses_move) -{ - dXSARGS; -#ifdef C_MOVE - c_countargs("move", items, 2); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int y = (int)SvIV(ST(c_arg)); - int x = (int)SvIV(ST(c_arg+1)); - int ret = c_mret == ERR ? ERR : wmove(win, y, x); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("move"); - XSRETURN(0); -#endif -} - - -/* curs_outopts */ - -XS(XS_Curses_clearok) -{ - dXSARGS; -#ifdef C_CLEAROK - c_countargs("clearok", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - bool bf = (int)SvIV(ST(c_arg)); - int ret = c_mret == ERR ? ERR : clearok(win, bf); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("clearok"); - XSRETURN(0); -#endif -} - -#ifdef C_INTIDLOK -XS(XS_Curses_idlok) -{ - dXSARGS; -#ifdef C_IDLOK - c_countargs("idlok", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - bool bf = (int)SvIV(ST(c_arg)); - int ret = c_mret == ERR ? ERR : idlok(win, bf); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("idlok"); - XSRETURN(0); -#endif -} - -#else -XS(XS_Curses_idlok) -{ - dXSARGS; -#ifdef C_IDLOK - c_countargs("idlok", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - bool bf = (int)SvIV(ST(c_arg)); - - if (c_mret == OK) { idlok(win, bf); } - } - XSRETURN(0); -#else - c_fun_not_there("idlok"); - XSRETURN(0); -#endif -} - -#endif -XS(XS_Curses_idcok) -{ - dXSARGS; -#ifdef C_IDCOK - c_countargs("idcok", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - bool bf = (int)SvIV(ST(c_arg)); - - if (c_mret == OK) { idcok(win, bf); } - } - XSRETURN(0); -#else - c_fun_not_there("idcok"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_immedok) -{ - dXSARGS; -#ifdef C_IMMEDOK - c_countargs("immedok", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - bool bf = (int)SvIV(ST(c_arg)); - - if (c_mret == OK) { immedok(win, bf); } - } - XSRETURN(0); -#else - c_fun_not_there("immedok"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_leaveok) -{ - dXSARGS; -#ifdef C_LEAVEOK - c_countargs("leaveok", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - bool bf = (int)SvIV(ST(c_arg)); - int ret = c_mret == ERR ? ERR : leaveok(win, bf); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("leaveok"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_setscrreg) -{ - dXSARGS; -#ifdef C_SETSCRREG - c_countargs("setscrreg", items, 2); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int top = (int)SvIV(ST(c_arg)); - int bot = (int)SvIV(ST(c_arg+1)); - int ret = c_mret == ERR ? ERR : wsetscrreg(win, top, bot); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("setscrreg"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_scrollok) -{ - dXSARGS; -#ifdef C_SCROLLOK - c_countargs("scrollok", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - bool bf = (int)SvIV(ST(c_arg)); - int ret = c_mret == ERR ? ERR : scrollok(win, bf); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("scrollok"); - XSRETURN(0); -#endif -} - -#ifdef C_INTNL -XS(XS_Curses_nl) -{ - dXSARGS; -#ifdef C_NL - c_exactargs("nl", items, 0); - { - int ret = nl(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("nl"); - XSRETURN(0); -#endif -} - -#else -XS(XS_Curses_nl) -{ - dXSARGS; -#ifdef C_NL - c_exactargs("nl", items, 0); - { - nl(); - } - XSRETURN(0); -#else - c_fun_not_there("nl"); - XSRETURN(0); -#endif -} - -#endif -#ifdef C_INTNONL -XS(XS_Curses_nonl) -{ - dXSARGS; -#ifdef C_NONL - c_exactargs("nonl", items, 0); - { - int ret = nonl(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("nonl"); - XSRETURN(0); -#endif -} - -#else -XS(XS_Curses_nonl) -{ - dXSARGS; -#ifdef C_NONL - c_exactargs("nonl", items, 0); - { - nonl(); - } - XSRETURN(0); -#else - c_fun_not_there("nonl"); - XSRETURN(0); -#endif -} - -#endif - -/* curs_overlay */ - -XS(XS_Curses_overlay) -{ - dXSARGS; -#ifdef C_OVERLAY - c_exactargs("overlay", items, 2); - { - WINDOW *srcwin = c_sv2window(ST(0), 0); - WINDOW *dstwin = c_sv2window(ST(1), 1); - int ret = overlay(srcwin, dstwin); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("overlay"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_overwrite) -{ - dXSARGS; -#ifdef C_OVERWRITE - c_exactargs("overwrite", items, 2); - { - WINDOW *srcwin = c_sv2window(ST(0), 0); - WINDOW *dstwin = c_sv2window(ST(1), 1); - int ret = overwrite(srcwin, dstwin); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("overwrite"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_copywin) -{ - dXSARGS; -#ifdef C_COPYWIN - c_exactargs("copywin", items, 9); - { - WINDOW *srcwin = c_sv2window(ST(0), 0); - WINDOW *dstwin = c_sv2window(ST(1), 1); - int sminrow = (int)SvIV(ST(2)); - int smincol = (int)SvIV(ST(3)); - int dminrow = (int)SvIV(ST(4)); - int dmincol = (int)SvIV(ST(5)); - int dmaxrow = (int)SvIV(ST(6)); - int dmaxcol = (int)SvIV(ST(7)); - int overlay = (int)SvIV(ST(8)); - int ret = copywin(srcwin, dstwin, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol, overlay); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("copywin"); - XSRETURN(0); -#endif -} - - -/* curs_pad */ - -XS(XS_Curses_newpad) -{ - dXSARGS; -#ifdef C_NEWPAD - c_exactargs("newpad", items, 2); - { - int lines_ = (int)SvIV(ST(0)); - int cols = (int)SvIV(ST(1)); - WINDOW * ret = newpad(lines_, cols); - - ST(0) = sv_newmortal(); - c_window2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("newpad"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_subpad) -{ - dXSARGS; -#ifdef C_SUBPAD - c_exactargs("subpad", items, 5); - { - WINDOW *orig = c_sv2window(ST(0), 0); - int lines_ = (int)SvIV(ST(1)); - int cols = (int)SvIV(ST(2)); - int beginy = (int)SvIV(ST(3)); - int beginx = (int)SvIV(ST(4)); - WINDOW * ret = subpad(orig, lines_, cols, beginy, beginx); - - ST(0) = sv_newmortal(); - c_window2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("subpad"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_prefresh) -{ - dXSARGS; -#ifdef C_PREFRESH - c_exactargs("prefresh", items, 7); - { - WINDOW *pad = c_sv2window(ST(0), 0); - int pminrow = (int)SvIV(ST(1)); - int pmincol = (int)SvIV(ST(2)); - int sminrow = (int)SvIV(ST(3)); - int smincol = (int)SvIV(ST(4)); - int smaxrow = (int)SvIV(ST(5)); - int smaxcol = (int)SvIV(ST(6)); - int ret = prefresh(pad, pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("prefresh"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_pnoutrefresh) -{ - dXSARGS; -#ifdef C_PNOUTREFRESH - c_exactargs("pnoutrefresh", items, 7); - { - WINDOW *pad = c_sv2window(ST(0), 0); - int pminrow = (int)SvIV(ST(1)); - int pmincol = (int)SvIV(ST(2)); - int sminrow = (int)SvIV(ST(3)); - int smincol = (int)SvIV(ST(4)); - int smaxrow = (int)SvIV(ST(5)); - int smaxcol = (int)SvIV(ST(6)); - int ret = pnoutrefresh(pad, pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("pnoutrefresh"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_pechochar) -{ - dXSARGS; -#ifdef C_PECHOCHAR - c_exactargs("pechochar", items, 2); - { - WINDOW *pad = c_sv2window(ST(0), 0); - chtype ch = c_sv2chtype(ST(1)); - int ret = pechochar(pad, ch); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("pechochar"); - XSRETURN(0); -#endif -} - - -/* curs_printw */ - -/* done in perl */ - -/* curs_refresh */ - -XS(XS_Curses_refresh) -{ - dXSARGS; -#ifdef C_REFRESH - c_countargs("refresh", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int ret = c_mret == ERR ? ERR : wrefresh(win); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("refresh"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_noutrefresh) -{ - dXSARGS; -#ifdef C_NOUTREFRESH - c_countargs("noutrefresh", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int ret = c_mret == ERR ? ERR : wnoutrefresh(win); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("noutrefresh"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_doupdate) -{ - dXSARGS; -#ifdef C_DOUPDATE - c_exactargs("doupdate", items, 0); - { - int ret = doupdate(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("doupdate"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_redrawwin) -{ - dXSARGS; -#ifdef C_REDRAWWIN - c_countargs("redrawwin", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int ret = c_mret == ERR ? ERR : redrawwin(win); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("redrawwin"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_redrawln) -{ - dXSARGS; -#ifdef C_REDRAWLN - c_countargs("redrawln", items, 2); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int beg_line = (int)SvIV(ST(c_arg)); - int num_lines = (int)SvIV(ST(c_arg+1)); - int ret = c_mret == ERR ? ERR : wredrawln(win, beg_line, num_lines); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("redrawln"); - XSRETURN(0); -#endif -} - - -/* curs_scanw */ - -/* done in perl */ - -/* curs_scr_dump */ - -XS(XS_Curses_scr_dump) -{ - dXSARGS; -#ifdef C_SCR_DUMP - c_exactargs("scr_dump", items, 1); - { - char * filename = (char *)SvPV_nolen(ST(0)); - int ret = scr_dump(filename); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("scr_dump"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_scr_restore) -{ - dXSARGS; -#ifdef C_SCR_RESTORE - c_exactargs("scr_restore", items, 1); - { - char * filename = (char *)SvPV_nolen(ST(0)); - int ret = scr_restore(filename); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("scr_restore"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_scr_init) -{ - dXSARGS; -#ifdef C_SCR_INIT - c_exactargs("scr_init", items, 1); - { - char * filename = (char *)SvPV_nolen(ST(0)); - int ret = scr_init(filename); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("scr_init"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_scr_set) -{ - dXSARGS; -#ifdef C_SCR_SET - c_exactargs("scr_set", items, 1); - { - char * filename = (char *)SvPV_nolen(ST(0)); - int ret = scr_set(filename); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("scr_set"); - XSRETURN(0); -#endif -} - - -/* curs_scroll */ - -XS(XS_Curses_scroll) -{ - dXSARGS; -#ifdef C_SCROLL - c_countargs("scroll", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int ret = c_mret == ERR ? ERR : scroll(win); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("scroll"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_scrl) -{ - dXSARGS; -#ifdef C_SCRL - c_countargs("scrl", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int n = (int)SvIV(ST(c_arg)); - int ret = c_mret == ERR ? ERR : wscrl(win, n); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("scrl"); - XSRETURN(0); -#endif -} - - -/* curs_slk */ - -XS(XS_Curses_slk_init) -{ - dXSARGS; -#ifdef C_SLK_INIT - c_exactargs("slk_init", items, 1); - { - int fmt = (int)SvIV(ST(0)); - int ret = slk_init(fmt); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("slk_init"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_slk_set) -{ - dXSARGS; -#ifdef C_SLK_SET - c_exactargs("slk_set", items, 3); - { - int labnum = (int)SvIV(ST(0)); - char * label = (char *)SvPV_nolen(ST(1)); - int fmt = (int)SvIV(ST(2)); - int ret = slk_set(labnum, label, fmt); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("slk_set"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_slk_refresh) -{ - dXSARGS; -#ifdef C_SLK_REFRESH - c_exactargs("slk_refresh", items, 0); - { - int ret = slk_refresh(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("slk_refresh"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_slk_noutrefresh) -{ - dXSARGS; -#ifdef C_SLK_NOUTREFRESH - c_exactargs("slk_noutrefresh", items, 0); - { - int ret = slk_noutrefresh(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("slk_noutrefresh"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_slk_label) -{ - dXSARGS; -#ifdef C_SLK_LABEL - c_exactargs("slk_label", items, 1); - { - int labnum = (int)SvIV(ST(0)); - char * ret = slk_label(labnum); - - ST(0) = sv_newmortal(); - sv_setpv((SV*)ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("slk_label"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_slk_clear) -{ - dXSARGS; -#ifdef C_SLK_CLEAR - c_exactargs("slk_clear", items, 0); - { - int ret = slk_clear(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("slk_clear"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_slk_restore) -{ - dXSARGS; -#ifdef C_SLK_RESTORE - c_exactargs("slk_restore", items, 0); - { - int ret = slk_restore(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("slk_restore"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_slk_touch) -{ - dXSARGS; -#ifdef C_SLK_TOUCH - c_exactargs("slk_touch", items, 0); - { - int ret = slk_touch(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("slk_touch"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_slk_attron) -{ - dXSARGS; -#ifdef C_SLK_ATTRON - c_exactargs("slk_attron", items, 1); - { - chtype attrs = c_sv2chtype(ST(0)); - int ret = slk_attron(attrs); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("slk_attron"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_slk_attrset) -{ - dXSARGS; -#ifdef C_SLK_ATTRSET - c_exactargs("slk_attrset", items, 1); - { - chtype attrs = c_sv2chtype(ST(0)); - int ret = slk_attrset(attrs); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("slk_attrset"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_slk_attr) -{ - dXSARGS; -#ifdef C_SLK_ATTR - c_exactargs("slk_attr", items, 0); - { - attr_t ret = slk_attr(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("slk_attr"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_slk_attroff) -{ - dXSARGS; -#ifdef C_SLK_ATTROFF - c_exactargs("slk_attroff", items, 1); - { - chtype attrs = c_sv2chtype(ST(0)); - int ret = slk_attroff(attrs); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("slk_attroff"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_slk_color) -{ - dXSARGS; -#ifdef C_SLK_COLOR - c_exactargs("slk_color", items, 1); - { - short color_pair_number = (short)SvIV(ST(0)); - int ret = slk_color(color_pair_number); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("slk_color"); - XSRETURN(0); -#endif -} - - -/* curs_termattrs */ - -XS(XS_Curses_baudrate) -{ - dXSARGS; -#ifdef C_BAUDRATE - c_exactargs("baudrate", items, 0); - { - int ret = baudrate(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("baudrate"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_erasechar) -{ - dXSARGS; -#ifdef C_ERASECHAR - c_exactargs("erasechar", items, 0); - { - char ret = erasechar(); - - ST(0) = sv_newmortal(); - sv_setpvn(ST(0), (char *)&ret, 1); - } - XSRETURN(1); -#else - c_fun_not_there("erasechar"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_has_ic) -{ - dXSARGS; -#ifdef C_HAS_IC - c_exactargs("has_ic", items, 0); - { - int ret = has_ic(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("has_ic"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_has_il) -{ - dXSARGS; -#ifdef C_HAS_IL - c_exactargs("has_il", items, 0); - { - int ret = has_il(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("has_il"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_killchar) -{ - dXSARGS; -#ifdef C_KILLCHAR - c_exactargs("killchar", items, 0); - { - char ret = killchar(); - - ST(0) = sv_newmortal(); - sv_setpvn(ST(0), (char *)&ret, 1); - } - XSRETURN(1); -#else - c_fun_not_there("killchar"); - XSRETURN(0); -#endif -} - -#ifdef C_LONG0ARGS -XS(XS_Curses_longname) -{ - dXSARGS; -#ifdef C_LONGNAME - c_exactargs("longname", items, 0); - { - char * ret = longname(); - - ST(0) = sv_newmortal(); - sv_setpv((SV*)ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("longname"); - XSRETURN(0); -#endif -} - -#else -XS(XS_Curses_longname) -{ - dXSARGS; -#ifdef C_LONGNAME - c_exactargs("longname", items, 2); - { - char * a = (char *)SvPV_nolen(ST(0)); - char * b = (char *)SvPV_nolen(ST(1)); - char * ret = longname(a, b); - - ST(0) = sv_newmortal(); - sv_setpv((SV*)ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("longname"); - XSRETURN(0); -#endif -} - -#endif - -XS(XS_Curses_termattrs) -{ - dXSARGS; -#ifdef C_TERMATTRS - c_exactargs("termattrs", items, 0); - { - chtype ret = termattrs(); - - ST(0) = sv_newmortal(); - c_chtype2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("termattrs"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_termname) -{ - dXSARGS; -#ifdef C_TERMNAME - c_exactargs("termname", items, 0); - { - char * ret = termname(); - - ST(0) = sv_newmortal(); - sv_setpv((SV*)ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("termname"); - XSRETURN(0); -#endif -} - - -/* curs_touch */ - -XS(XS_Curses_touchwin) -{ - dXSARGS; -#ifdef C_TOUCHWIN - c_countargs("touchwin", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int ret = c_mret == ERR ? ERR : touchwin(win); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("touchwin"); - XSRETURN(0); -#endif -} - -#ifdef C_TOUCH3ARGS -XS(XS_Curses_touchline) -{ - dXSARGS; -#ifdef C_TOUCHLINE - c_countargs("touchline", items, 2); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int start = (int)SvIV(ST(c_arg)); - int count = (int)SvIV(ST(c_arg+1)); - int ret = c_mret == ERR ? ERR : touchline(win, start, count); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("touchline"); - XSRETURN(0); -#endif -} - -#else -XS(XS_Curses_touchline) -{ - dXSARGS; -#ifdef C_TOUCHLINE - c_countargs("touchline", items, 3); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int y = (int)SvIV(ST(c_arg)); - int sx = (int)SvIV(ST(c_arg+1)); - int ex = (int)SvIV(ST(c_arg+2)); - int ret = c_mret == ERR ? ERR : touchline(win, y, sx, ex); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("touchline"); - XSRETURN(0); -#endif -} - -#endif - -XS(XS_Curses_untouchwin) -{ - dXSARGS; -#ifdef C_UNTOUCHWIN - c_countargs("untouchwin", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int ret = c_mret == ERR ? ERR : untouchwin(win); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("untouchwin"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_touchln) -{ - dXSARGS; -#ifdef C_TOUCHLN - c_countargs("touchln", items, 3); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int y = (int)SvIV(ST(c_arg)); - int n = (int)SvIV(ST(c_arg+1)); - int changed = (int)SvIV(ST(c_arg+2)); - int ret = c_mret == ERR ? ERR : wtouchln(win, y, n, changed); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("touchln"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_is_linetouched) -{ - dXSARGS; -#ifdef C_IS_LINETOUCHED - c_countargs("is_linetouched", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int line = (int)SvIV(ST(c_arg)); - int ret = c_mret == ERR ? ERR : is_linetouched(win, line); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("is_linetouched"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_is_wintouched) -{ - dXSARGS; -#ifdef C_IS_WINTOUCHED - c_countargs("is_wintouched", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int ret = c_mret == ERR ? ERR : is_wintouched(win); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("is_wintouched"); - XSRETURN(0); -#endif -} - - -/* curs_util */ - -XS(XS_Curses_unctrl) -{ - dXSARGS; -#ifdef C_UNCTRL - c_exactargs("unctrl", items, 1); - { - chtype ch = c_sv2chtype(ST(0)); - char * ret = unctrl(ch); - - ST(0) = sv_newmortal(); - sv_setpv((SV*)ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("unctrl"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_keyname) -{ - dXSARGS; -#ifdef C_KEYNAME - c_exactargs("keyname", items, 1); - { - int k = (int)SvIV(ST(0)); - char * ret = (char *)keyname(k); - - ST(0) = sv_newmortal(); - sv_setpv((SV*)ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("keyname"); - XSRETURN(0); -#endif -} - -#ifdef C_INTFILTER -XS(XS_Curses_filter) -{ - dXSARGS; -#ifdef C_FILTER - c_exactargs("filter", items, 0); - { - int ret = filter(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("filter"); - XSRETURN(0); -#endif -} - -#else -XS(XS_Curses_filter) -{ - dXSARGS; -#ifdef C_FILTER - c_exactargs("filter", items, 0); - { - filter(); - } - XSRETURN(0); -#else - c_fun_not_there("filter"); - XSRETURN(0); -#endif -} - -#endif -XS(XS_Curses_use_env) -{ - dXSARGS; -#ifdef C_USE_ENV - c_exactargs("use_env", items, 1); - { - bool bf = (int)SvIV(ST(0)); - - use_env(bf); - } - XSRETURN(0); -#else - c_fun_not_there("use_env"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_putwin) -{ - dXSARGS; -#ifdef C_PUTWIN - c_exactargs("putwin", items, 2); - { - WINDOW *win = c_sv2window(ST(0), 0); - FILE * filep = IoIFP(sv_2io(ST(1))); - int ret = putwin(win, filep); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("putwin"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_getwin) -{ - dXSARGS; -#ifdef C_GETWIN - c_exactargs("getwin", items, 1); - { - FILE * filep = IoIFP(sv_2io(ST(0))); - WINDOW * ret = getwin(filep); - - ST(0) = sv_newmortal(); - c_window2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("getwin"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_delay_output) -{ - dXSARGS; -#ifdef C_DELAY_OUTPUT - c_exactargs("delay_output", items, 1); - { - int ms = (int)SvIV(ST(0)); - int ret = delay_output(ms); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("delay_output"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_flushinp) -{ - dXSARGS; -#ifdef C_FLUSHINP - c_exactargs("flushinp", items, 0); - { - int ret = flushinp(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("flushinp"); - XSRETURN(0); -#endif -} - - -/* curs_window */ - -XS(XS_Curses_newwin) -{ - dXSARGS; -#ifdef C_NEWWIN - c_exactargs("newwin", items, 4); - { - int nlines = (int)SvIV(ST(0)); - int ncols = (int)SvIV(ST(1)); - int beginy = (int)SvIV(ST(2)); - int beginx = (int)SvIV(ST(3)); - WINDOW * ret = newwin(nlines, ncols, beginy, beginx); - - ST(0) = sv_newmortal(); - c_window2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("newwin"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_delwin) -{ - dXSARGS; -#ifdef C_DELWIN - c_countargs("delwin", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int ret = c_mret == ERR ? ERR : delwin(win); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("delwin"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_mvwin) -{ - dXSARGS; -#ifdef C_MVWIN - c_countargs("mvwin", items, 2); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int y = (int)SvIV(ST(c_arg)); - int x = (int)SvIV(ST(c_arg+1)); - int ret = c_mret == ERR ? ERR : mvwin(win, y, x); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("mvwin"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_subwin) -{ - dXSARGS; -#ifdef C_SUBWIN - c_countargs("subwin", items, 4); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int nlines = (int)SvIV(ST(c_arg)); - int ncols = (int)SvIV(ST(c_arg+1)); - int beginy = (int)SvIV(ST(c_arg+2)); - int beginx = (int)SvIV(ST(c_arg+3)); - WINDOW * ret = c_mret == ERR ? NULL : subwin(win, nlines, ncols, beginy, beginx); - - ST(0) = sv_newmortal(); - c_window2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("subwin"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_derwin) -{ - dXSARGS; -#ifdef C_DERWIN - c_countargs("derwin", items, 4); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int nlines = (int)SvIV(ST(c_arg)); - int ncols = (int)SvIV(ST(c_arg+1)); - int beginy = (int)SvIV(ST(c_arg+2)); - int beginx = (int)SvIV(ST(c_arg+3)); - WINDOW * ret = c_mret == ERR ? NULL : derwin(win, nlines, ncols, beginy, beginx); - - ST(0) = sv_newmortal(); - c_window2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("derwin"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_mvderwin) -{ - dXSARGS; -#ifdef C_MVDERWIN - c_countargs("mvderwin", items, 2); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int par_y = (int)SvIV(ST(c_arg)); - int par_x = (int)SvIV(ST(c_arg+1)); - int ret = c_mret == ERR ? ERR : mvderwin(win, par_y, par_x); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("mvderwin"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_dupwin) -{ - dXSARGS; -#ifdef C_DUPWIN - c_countargs("dupwin", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - WINDOW * ret = c_mret == ERR ? NULL : dupwin(win); - - ST(0) = sv_newmortal(); - c_window2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("dupwin"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_syncup) -{ - dXSARGS; -#ifdef C_SYNCUP - c_countargs("syncup", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - - if (c_mret == OK) { wsyncup(win); } - } - XSRETURN(0); -#else - c_fun_not_there("syncup"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_syncok) -{ - dXSARGS; -#ifdef C_SYNCOK - c_countargs("syncok", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - bool bf = (int)SvIV(ST(c_arg)); - int ret = c_mret == ERR ? ERR : syncok(win, bf); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("syncok"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_cursyncup) -{ - dXSARGS; -#ifdef C_CURSYNCUP - c_countargs("cursyncup", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - - if (c_mret == OK) { wcursyncup(win); } - } - XSRETURN(0); -#else - c_fun_not_there("cursyncup"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_syncdown) -{ - dXSARGS; -#ifdef C_SYNCDOWN - c_countargs("syncdown", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - - if (c_mret == OK) { wsyncdown(win); } - } - XSRETURN(0); -#else - c_fun_not_there("syncdown"); - XSRETURN(0); -#endif -} - - -/* ncurses extension functions */ - -XS(XS_Curses_getmouse) -{ - dXSARGS; -#ifdef C_GETMOUSE - c_exactargs("getmouse", items, 1); - { - MEVENT *event = (MEVENT *)sv_grow(ST(0), 2 * sizeof(MEVENT)); - int ret = getmouse(event); - - c_setmevent(ST(0), event); - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("getmouse"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_ungetmouse) -{ - dXSARGS; -#ifdef C_UNGETMOUSE - c_exactargs("ungetmouse", items, 1); - { - MEVENT *event = (MEVENT *)SvPV_nolen(ST(0)); - int ret = ungetmouse(event); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("ungetmouse"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_mousemask) -{ - dXSARGS; -#ifdef C_MOUSEMASK - c_exactargs("mousemask", items, 2); - { - mmask_t newmask = (mmask_t)SvIV(ST(0)); - mmask_t oldmask = 0; - mmask_t ret = mousemask(newmask, &oldmask); - - sv_setiv(ST(1), (IV)oldmask);; - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("mousemask"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_enclose) -{ - dXSARGS; -#ifdef C_ENCLOSE - c_countargs("enclose", items, 2); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int y = (int)SvIV(ST(c_arg)); - int x = (int)SvIV(ST(c_arg+1)); - bool ret = c_mret == ERR ? ERR : wenclose(win, y, x); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("enclose"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_mouse_trafo) -{ - dXSARGS; -#ifdef C_MOUSE_TRAFO - c_countargs("mouse_trafo", items, 3); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int pY = 0; - int pX = 0; - bool to_screen = (int)SvIV(ST(c_arg+2)); - bool ret = c_mret == ERR ? ERR : wmouse_trafo(win, &pY, &pX, to_screen); - - sv_setiv(ST(c_arg), (IV)pY);; - sv_setiv(ST(c_arg+1), (IV)pX);; - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("mouse_trafo"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_mouseinterval) -{ - dXSARGS; -#ifdef C_MOUSEINTERVAL - c_exactargs("mouseinterval", items, 1); - { - int erval = (int)SvIV(ST(0)); - int ret = mouseinterval(erval); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("mouseinterval"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_BUTTON_RELEASE) -{ - dXSARGS; -#ifdef C_BUTTON_RELEASE - c_exactargs("BUTTON_RELEASE", items, 2); - { - mmask_t e = (mmask_t)SvIV(ST(0)); - int x = (int)SvIV(ST(1)); - int ret = BUTTON_RELEASE(e, x); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("BUTTON_RELEASE"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_BUTTON_PRESS) -{ - dXSARGS; -#ifdef C_BUTTON_PRESS - c_exactargs("BUTTON_PRESS", items, 2); - { - mmask_t e = (mmask_t)SvIV(ST(0)); - int x = (int)SvIV(ST(1)); - int ret = BUTTON_PRESS(e, x); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("BUTTON_PRESS"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_BUTTON_CLICK) -{ - dXSARGS; -#ifdef C_BUTTON_CLICK - c_exactargs("BUTTON_CLICK", items, 2); - { - mmask_t e = (mmask_t)SvIV(ST(0)); - int x = (int)SvIV(ST(1)); - int ret = BUTTON_CLICK(e, x); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("BUTTON_CLICK"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_BUTTON_DOUBLE_CLICK) -{ - dXSARGS; -#ifdef C_BUTTON_DOUBLE_CLICK - c_exactargs("BUTTON_DOUBLE_CLICK", items, 2); - { - mmask_t e = (mmask_t)SvIV(ST(0)); - int x = (int)SvIV(ST(1)); - int ret = BUTTON_DOUBLE_CLICK(e, x); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("BUTTON_DOUBLE_CLICK"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_BUTTON_TRIPLE_CLICK) -{ - dXSARGS; -#ifdef C_BUTTON_TRIPLE_CLICK - c_exactargs("BUTTON_TRIPLE_CLICK", items, 2); - { - mmask_t e = (mmask_t)SvIV(ST(0)); - int x = (int)SvIV(ST(1)); - int ret = BUTTON_TRIPLE_CLICK(e, x); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("BUTTON_TRIPLE_CLICK"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_BUTTON_RESERVED_EVENT) -{ - dXSARGS; -#ifdef C_BUTTON_RESERVED_EVENT - c_exactargs("BUTTON_RESERVED_EVENT", items, 2); - { - mmask_t e = (mmask_t)SvIV(ST(0)); - int x = (int)SvIV(ST(1)); - int ret = BUTTON_RESERVED_EVENT(e, x); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("BUTTON_RESERVED_EVENT"); - XSRETURN(0); -#endif -} - - -XS(XS_Curses_use_default_colors) -{ - dXSARGS; -#ifdef C_USE_DEFAULT_COLORS - c_exactargs("use_default_colors", items, 0); - { - int ret = use_default_colors(); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("use_default_colors"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_assume_default_colors) -{ - dXSARGS; -#ifdef C_ASSUME_DEFAULT_COLORS - c_exactargs("assume_default_colors", items, 2); - { - int fg = (int)SvIV(ST(0)); - int bg = (int)SvIV(ST(1)); - int ret = assume_default_colors(fg, bg); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("assume_default_colors"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_define_key) -{ - dXSARGS; -#ifdef C_DEFINE_KEY - c_exactargs("define_key", items, 2); - { - char * definition = (char *)SvPV_nolen(ST(0)); - int keycode = (int)SvIV(ST(1)); - int ret = define_key(definition, keycode); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("define_key"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_keybound) -{ - dXSARGS; -#ifdef C_KEYBOUND - c_exactargs("keybound", items, 2); - { - int keycode = (int)SvIV(ST(0)); - int count = (int)SvIV(ST(1)); - char * ret = keybound(keycode, count); - - ST(0) = sv_newmortal(); - sv_setpv((SV*)ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("keybound"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_keyok) -{ - dXSARGS; -#ifdef C_KEYOK - c_exactargs("keyok", items, 2); - { - int keycode = (int)SvIV(ST(0)); - bool enable = (int)SvIV(ST(1)); - int ret = keyok(keycode, enable); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("keyok"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_resizeterm) -{ - dXSARGS; -#ifdef C_RESIZETERM - c_exactargs("resizeterm", items, 2); - { - int lines = (int)SvIV(ST(0)); - int cols = (int)SvIV(ST(1)); - int ret = resizeterm(lines, cols); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("resizeterm"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_resize) -{ - dXSARGS; -#ifdef C_RESIZE - c_countargs("resize", items, 2); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int lines_ = (int)SvIV(ST(c_arg)); - int columns = (int)SvIV(ST(c_arg+1)); - int ret = c_mret == ERR ? ERR : wresize(win, lines_, columns); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("resize"); - XSRETURN(0); -#endif -} - - -/* DEC curses, I think */ - -XS(XS_Curses_getmaxy) -{ - dXSARGS; -#ifdef C_GETMAXY - c_countargs("getmaxy", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int ret = c_mret == ERR ? ERR : getmaxy(win); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("getmaxy"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_getmaxx) -{ - dXSARGS; -#ifdef C_GETMAXX - c_countargs("getmaxx", items, 0); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - int ret = c_mret == ERR ? ERR : getmaxx(win); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("getmaxx"); - XSRETURN(0); -#endif -} - - -/* old BSD curses calls */ - -XS(XS_Curses_flusok) -{ - dXSARGS; -#ifdef C_FLUSOK - c_countargs("flusok", items, 1); - { - WINDOW *win = c_win ? c_sv2window(ST(0), 0) : stdscr; - int c_mret = c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK; - bool bf = (int)SvIV(ST(c_arg)); - - if (c_mret == OK) { flusok(win, bf); } - } - XSRETURN(0); -#else - c_fun_not_there("flusok"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_getcap) -{ - dXSARGS; -#ifdef C_GETCAP - c_exactargs("getcap", items, 1); - { - char * term = (char *)SvPV_nolen(ST(0)); - char * ret = (char *)getcap(term); - - ST(0) = sv_newmortal(); - sv_setpv((SV*)ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("getcap"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_touchoverlap) -{ - dXSARGS; -#ifdef C_TOUCHOVERLAP - c_exactargs("touchoverlap", items, 2); - { - WINDOW *src = c_sv2window(ST(0), 0); - WINDOW *dst = c_sv2window(ST(1), 1); - int ret = touchoverlap(src, dst); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("touchoverlap"); - XSRETURN(0); -#endif -} - - -/* Panel support */ - -XS(XS_Curses_new_panel) -{ - dXSARGS; -#ifdef C_NEW_PANEL - c_exactargs("new_panel", items, 1); - { - WINDOW *win = c_sv2window(ST(0), 0); - PANEL * ret = new_panel(win); - - ST(0) = sv_newmortal(); - c_panel2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("new_panel"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_bottom_panel) -{ - dXSARGS; -#ifdef C_BOTTOM_PANEL - c_exactargs("bottom_panel", items, 1); - { - PANEL * pan = c_sv2panel(ST(0), 0); - int ret = bottom_panel(pan); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("bottom_panel"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_top_panel) -{ - dXSARGS; -#ifdef C_TOP_PANEL - c_exactargs("top_panel", items, 1); - { - PANEL * pan = c_sv2panel(ST(0), 0); - int ret = top_panel(pan); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("top_panel"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_show_panel) -{ - dXSARGS; -#ifdef C_SHOW_PANEL - c_exactargs("show_panel", items, 1); - { - PANEL * pan = c_sv2panel(ST(0), 0); - int ret = show_panel(pan); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("show_panel"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_update_panels) -{ - dXSARGS; -#ifdef C_UPDATE_PANELS - c_exactargs("update_panels", items, 0); - { - update_panels(); - } - XSRETURN(0); -#else - c_fun_not_there("update_panels"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_hide_panel) -{ - dXSARGS; -#ifdef C_HIDE_PANEL - c_exactargs("hide_panel", items, 1); - { - PANEL * pan = c_sv2panel(ST(0), 0); - int ret = hide_panel(pan); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("hide_panel"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_panel_window) -{ - dXSARGS; -#ifdef C_PANEL_WINDOW - c_exactargs("panel_window", items, 1); - { - PANEL * pan = c_sv2panel(ST(0), 0); - WINDOW * ret = panel_window(pan); - - ST(0) = sv_newmortal(); - c_window2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("panel_window"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_replace_panel) -{ - dXSARGS; -#ifdef C_REPLACE_PANEL - c_exactargs("replace_panel", items, 2); - { - PANEL * pan = c_sv2panel(ST(0), 0); - WINDOW *window = c_sv2window(ST(1), 1); - int ret = replace_panel(pan, window); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("replace_panel"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_move_panel) -{ - dXSARGS; -#ifdef C_MOVE_PANEL - c_exactargs("move_panel", items, 3); - { - PANEL * pan = c_sv2panel(ST(0), 0); - int starty = (int)SvIV(ST(1)); - int startx = (int)SvIV(ST(2)); - int ret = move_panel(pan, starty, startx); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("move_panel"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_panel_hidden) -{ - dXSARGS; -#ifdef C_PANEL_HIDDEN - c_exactargs("panel_hidden", items, 1); - { - PANEL * pan = c_sv2panel(ST(0), 0); - int ret = panel_hidden(pan); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("panel_hidden"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_panel_above) -{ - dXSARGS; -#ifdef C_PANEL_ABOVE - c_exactargs("panel_above", items, 1); - { - PANEL * pan = ST(0) != &PL_sv_undef ? c_sv2panel(ST(0), 0) : NULL; - PANEL * ret = panel_above(pan); - - ST(0) = sv_newmortal(); - c_panel2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("panel_above"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_panel_below) -{ - dXSARGS; -#ifdef C_PANEL_BELOW - c_exactargs("panel_below", items, 1); - { - PANEL * pan = ST(0) != &PL_sv_undef ? c_sv2panel(ST(0), 0) : NULL; - PANEL * ret = panel_below(pan); - - ST(0) = sv_newmortal(); - c_panel2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("panel_below"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_set_panel_userptr) -{ - dXSARGS; -#ifdef C_SET_PANEL_USERPTR - c_exactargs("set_panel_userptr", items, 2); - { - PANEL * pan = c_sv2panel(ST(0), 0); - char * ptr = (char *)SvPV_nolen(ST(1)); - int ret = set_panel_userptr(pan, ptr); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_panel_userptr"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_panel_userptr) -{ - dXSARGS; -#ifdef C_PANEL_USERPTR - c_exactargs("panel_userptr", items, 1); - { - PANEL * pan = c_sv2panel(ST(0), 0); - char * ret = (char *)panel_userptr(pan); - - ST(0) = sv_newmortal(); - sv_setpv((SV*)ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("panel_userptr"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_del_panel) -{ - dXSARGS; -#ifdef C_DEL_PANEL - c_exactargs("del_panel", items, 1); - { - PANEL * pan = c_sv2panel(ST(0), 0); - int ret = del_panel(pan); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("del_panel"); - XSRETURN(0); -#endif -} - - -/* Menu support */ - -/* menu_attributes */ - -XS(XS_Curses_set_menu_fore) -{ - dXSARGS; -#ifdef C_SET_MENU_FORE - c_exactargs("set_menu_fore", items, 2); - { - MENU * menu = c_sv2menu(ST(0), 0); - chtype attr = c_sv2chtype(ST(1)); - int ret = set_menu_fore(menu, attr); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_menu_fore"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_menu_fore) -{ - dXSARGS; -#ifdef C_MENU_FORE - c_exactargs("menu_fore", items, 1); - { - MENU * menu = c_sv2menu(ST(0), 0); - chtype ret = menu_fore(menu); - - ST(0) = sv_newmortal(); - c_chtype2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("menu_fore"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_set_menu_back) -{ - dXSARGS; -#ifdef C_SET_MENU_BACK - c_exactargs("set_menu_back", items, 2); - { - MENU * menu = c_sv2menu(ST(0), 0); - chtype attr = c_sv2chtype(ST(1)); - int ret = set_menu_back(menu, attr); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_menu_back"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_menu_back) -{ - dXSARGS; -#ifdef C_MENU_BACK - c_exactargs("menu_back", items, 1); - { - MENU * menu = c_sv2menu(ST(0), 0); - chtype ret = menu_back(menu); - - ST(0) = sv_newmortal(); - c_chtype2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("menu_back"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_set_menu_grey) -{ - dXSARGS; -#ifdef C_SET_MENU_GREY - c_exactargs("set_menu_grey", items, 2); - { - MENU * menu = c_sv2menu(ST(0), 0); - chtype attr = c_sv2chtype(ST(1)); - int ret = set_menu_grey(menu, attr); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_menu_grey"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_menu_grey) -{ - dXSARGS; -#ifdef C_MENU_GREY - c_exactargs("menu_grey", items, 1); - { - MENU * menu = c_sv2menu(ST(0), 0); - chtype ret = menu_grey(menu); - - ST(0) = sv_newmortal(); - c_chtype2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("menu_grey"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_set_menu_pad) -{ - dXSARGS; -#ifdef C_SET_MENU_PAD - c_exactargs("set_menu_pad", items, 2); - { - MENU * menu = c_sv2menu(ST(0), 0); - int pad = (int)SvIV(ST(1)); - int ret = set_menu_pad(menu, pad); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_menu_pad"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_menu_pad) -{ - dXSARGS; -#ifdef C_MENU_PAD - c_exactargs("menu_pad", items, 1); - { - MENU * menu = c_sv2menu(ST(0), 0); - int ret = menu_pad(menu); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("menu_pad"); - XSRETURN(0); -#endif -} - - -/* menu_cursor */ - -XS(XS_Curses_pos_menu_cursor) -{ - dXSARGS; -#ifdef C_POS_MENU_CURSOR - c_exactargs("pos_menu_cursor", items, 1); - { - MENU * menu = c_sv2menu(ST(0), 0); - int ret = pos_menu_cursor(menu); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("pos_menu_cursor"); - XSRETURN(0); -#endif -} - - -/* menu_driver */ - -XS(XS_Curses_menu_driver) -{ - dXSARGS; -#ifdef C_MENU_DRIVER - c_exactargs("menu_driver", items, 2); - { - MENU * menu = c_sv2menu(ST(0), 0); - int c = (int)SvIV(ST(1)); - int ret = menu_driver(menu, c); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("menu_driver"); - XSRETURN(0); -#endif -} - - -/* menu_format */ - -XS(XS_Curses_set_menu_format) -{ - dXSARGS; -#ifdef C_SET_MENU_FORMAT - c_exactargs("set_menu_format", items, 3); - { - MENU * menu = c_sv2menu(ST(0), 0); - int rows = (int)SvIV(ST(1)); - int cols = (int)SvIV(ST(2)); - int ret = set_menu_format(menu, rows, cols); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_menu_format"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_menu_format) -{ - dXSARGS; -#ifdef C_MENU_FORMAT - c_exactargs("menu_format", items, 3); - { - MENU * menu = c_sv2menu(ST(0), 0); - int rows = 0; - int cols = 0; - - menu_format(menu, &rows, &cols); - sv_setiv(ST(1), (IV)rows);; - sv_setiv(ST(2), (IV)cols);; - } - XSRETURN(0); -#else - c_fun_not_there("menu_format"); - XSRETURN(0); -#endif -} - - -/* menu_items */ - -XS(XS_Curses_set_menu_items) -{ - dXSARGS; -#ifdef C_SET_MENU_ITEMS - c_exactargs("set_menu_items", items, 2); - { - MENU * menu = c_sv2menu(ST(0), 0); - ITEM ** items = (ITEM **)SvPV_nolen(ST(1)); - int ret = set_menu_items(menu, items); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_menu_items"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_menu_items) -{ - dXSARGS; -#ifdef C_MENU_ITEMS - c_exactargs("menu_items", items, 1); - { - MENU * menu = c_sv2menu(ST(0), 0); - ITEM ** ret = menu_items(menu); - - ST(0) = sv_newmortal(); - sv_setpv((SV*)ST(0), (char *)ret); - } - XSRETURN(1); -#else - c_fun_not_there("menu_items"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_item_count) -{ - dXSARGS; -#ifdef C_ITEM_COUNT - c_exactargs("item_count", items, 1); - { - MENU * menu = c_sv2menu(ST(0), 0); - int ret = item_count(menu); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("item_count"); - XSRETURN(0); -#endif -} - - -/* menu_mark */ - -XS(XS_Curses_set_menu_mark) -{ - dXSARGS; -#ifdef C_SET_MENU_MARK - c_exactargs("set_menu_mark", items, 2); - { - MENU * menu = c_sv2menu(ST(0), 0); - char * mark = (char *)SvPV_nolen(ST(1)); - int ret = set_menu_mark(menu, mark); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_menu_mark"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_menu_mark) -{ - dXSARGS; -#ifdef C_MENU_MARK - c_exactargs("menu_mark", items, 1); - { - MENU * menu = c_sv2menu(ST(0), 0); - char * ret = (char *)menu_mark(menu); - - ST(0) = sv_newmortal(); - sv_setpv((SV*)ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("menu_mark"); - XSRETURN(0); -#endif -} - - -/* menu_new */ - -XS(XS_Curses_new_menu) -{ - dXSARGS; -#ifdef C_NEW_MENU - c_exactargs("new_menu", items, 1); - { - ITEM ** items = (ITEM **)SvPV_nolen(ST(0)); - MENU * ret = new_menu(items); - - ST(0) = sv_newmortal(); - c_menu2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("new_menu"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_free_menu) -{ - dXSARGS; -#ifdef C_FREE_MENU - c_exactargs("free_menu", items, 1); - { - MENU * menu = c_sv2menu(ST(0), 0); - int ret = free_menu(menu); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("free_menu"); - XSRETURN(0); -#endif -} - - -/* menu_opts */ - -XS(XS_Curses_menu_opts) -{ - dXSARGS; -#ifdef C_MENU_OPTS - c_exactargs("menu_opts", items, 1); - { - MENU * menu = c_sv2menu(ST(0), 0); - int ret = menu_opts(menu); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("menu_opts"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_set_menu_opts) -{ - dXSARGS; -#ifdef C_SET_MENU_OPTS - c_exactargs("set_menu_opts", items, 2); - { - MENU * menu = c_sv2menu(ST(0), 0); - int opts = (int)SvIV(ST(1)); - int ret = set_menu_opts(menu, opts); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_menu_opts"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_menu_opts_on) -{ - dXSARGS; -#ifdef C_MENU_OPTS_ON - c_exactargs("menu_opts_on", items, 2); - { - MENU * menu = c_sv2menu(ST(0), 0); - int opts = (int)SvIV(ST(1)); - int ret = menu_opts_on(menu, opts); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("menu_opts_on"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_menu_opts_off) -{ - dXSARGS; -#ifdef C_MENU_OPTS_OFF - c_exactargs("menu_opts_off", items, 2); - { - MENU * menu = c_sv2menu(ST(0), 0); - int opts = (int)SvIV(ST(1)); - int ret = menu_opts_off(menu, opts); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("menu_opts_off"); - XSRETURN(0); -#endif -} - - -/* menu_pattern */ - -XS(XS_Curses_set_menu_pattern) -{ - dXSARGS; -#ifdef C_SET_MENU_PATTERN - c_exactargs("set_menu_pattern", items, 2); - { - MENU * menu = c_sv2menu(ST(0), 0); - char * pattern = (char *)SvPV_nolen(ST(1)); - int ret = set_menu_pattern(menu, pattern); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_menu_pattern"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_menu_pattern) -{ - dXSARGS; -#ifdef C_MENU_PATTERN - c_exactargs("menu_pattern", items, 1); - { - MENU * menu = c_sv2menu(ST(0), 0); - char * ret = menu_pattern(menu); - - ST(0) = sv_newmortal(); - sv_setpv((SV*)ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("menu_pattern"); - XSRETURN(0); -#endif -} - - -/* menu_post */ - -XS(XS_Curses_post_menu) -{ - dXSARGS; -#ifdef C_POST_MENU - c_exactargs("post_menu", items, 1); - { - MENU * menu = c_sv2menu(ST(0), 0); - int ret = post_menu(menu); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("post_menu"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_unpost_menu) -{ - dXSARGS; -#ifdef C_UNPOST_MENU - c_exactargs("unpost_menu", items, 1); - { - MENU * menu = c_sv2menu(ST(0), 0); - int ret = unpost_menu(menu); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("unpost_menu"); - XSRETURN(0); -#endif -} - - -/* menu_userptr */ - -XS(XS_Curses_set_menu_userptr) -{ - dXSARGS; -#ifdef C_SET_MENU_USERPTR - c_exactargs("set_menu_userptr", items, 2); - { - MENU * item = c_sv2menu(ST(0), 0); - char * userptr = (char *)SvPV_nolen(ST(1)); - int ret = set_menu_userptr(item, userptr); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_menu_userptr"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_menu_userptr) -{ - dXSARGS; -#ifdef C_MENU_USERPTR - c_exactargs("menu_userptr", items, 1); - { - MENU * item = c_sv2menu(ST(0), 0); - char * ret = menu_userptr(item); - - ST(0) = sv_newmortal(); - sv_setpv((SV*)ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("menu_userptr"); - XSRETURN(0); -#endif -} - - -/* menu_win */ - -XS(XS_Curses_set_menu_win) -{ - dXSARGS; -#ifdef C_SET_MENU_WIN - c_exactargs("set_menu_win", items, 2); - { - MENU * menu = c_sv2menu(ST(0), 0); - WINDOW *win = c_sv2window(ST(1), 1); - int ret = set_menu_win(menu, win); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_menu_win"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_menu_win) -{ - dXSARGS; -#ifdef C_MENU_WIN - c_exactargs("menu_win", items, 1); - { - MENU * menu = c_sv2menu(ST(0), 0); - WINDOW * ret = menu_win(menu); - - ST(0) = sv_newmortal(); - c_window2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("menu_win"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_set_menu_sub) -{ - dXSARGS; -#ifdef C_SET_MENU_SUB - c_exactargs("set_menu_sub", items, 2); - { - MENU * menu = c_sv2menu(ST(0), 0); - WINDOW *win = c_sv2window(ST(1), 1); - int ret = set_menu_sub(menu, win); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_menu_sub"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_menu_sub) -{ - dXSARGS; -#ifdef C_MENU_SUB - c_exactargs("menu_sub", items, 1); - { - MENU * menu = c_sv2menu(ST(0), 0); - WINDOW * ret = menu_sub(menu); - - ST(0) = sv_newmortal(); - c_window2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("menu_sub"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_scale_menu) -{ - dXSARGS; -#ifdef C_SCALE_MENU - c_exactargs("scale_menu", items, 3); - { - MENU * menu = c_sv2menu(ST(0), 0); - int rows = 0; - int cols = 0; - int ret = scale_menu(menu, &rows, &cols); - - sv_setiv(ST(1), (IV)rows);; - sv_setiv(ST(2), (IV)cols);; - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("scale_menu"); - XSRETURN(0); -#endif -} - - -/* menu_item_current */ - -XS(XS_Curses_set_current_item) -{ - dXSARGS; -#ifdef C_SET_CURRENT_ITEM - c_exactargs("set_current_item", items, 2); - { - MENU * menu = c_sv2menu(ST(0), 0); - ITEM * item = c_sv2item(ST(1), 1); - int ret = set_current_item(menu, item); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_current_item"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_current_item) -{ - dXSARGS; -#ifdef C_CURRENT_ITEM - c_exactargs("current_item", items, 1); - { - MENU * menu = c_sv2menu(ST(0), 0); - ITEM * ret = current_item(menu); - - ST(0) = sv_newmortal(); - c_item2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("current_item"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_set_top_row) -{ - dXSARGS; -#ifdef C_SET_TOP_ROW - c_exactargs("set_top_row", items, 2); - { - MENU * menu = c_sv2menu(ST(0), 0); - int row = (int)SvIV(ST(1)); - int ret = set_top_row(menu, row); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_top_row"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_top_row) -{ - dXSARGS; -#ifdef C_TOP_ROW - c_exactargs("top_row", items, 1); - { - MENU * menu = c_sv2menu(ST(0), 0); - int ret = top_row(menu); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("top_row"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_item_index) -{ - dXSARGS; -#ifdef C_ITEM_INDEX - c_exactargs("item_index", items, 1); - { - ITEM * item = c_sv2item(ST(0), 0); - int ret = item_index(item); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("item_index"); - XSRETURN(0); -#endif -} - - -/* menu_item_name */ - -XS(XS_Curses_item_name) -{ - dXSARGS; -#ifdef C_ITEM_NAME - c_exactargs("item_name", items, 1); - { - ITEM * item = c_sv2item(ST(0), 0); - char * ret = (char *)item_name(item); - - ST(0) = sv_newmortal(); - sv_setpv((SV*)ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("item_name"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_item_description) -{ - dXSARGS; -#ifdef C_ITEM_DESCRIPTION - c_exactargs("item_description", items, 1); - { - ITEM * item = c_sv2item(ST(0), 0); - char * ret = (char *)item_description(item); - - ST(0) = sv_newmortal(); - sv_setpv((SV*)ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("item_description"); - XSRETURN(0); -#endif -} - - -/* menu_item_new */ - -XS(XS_Curses_new_item) -{ - dXSARGS; -#ifdef C_NEW_ITEM - c_exactargs("new_item", items, 2); - { - char * name = (char *)SvPV_nolen(ST(0)); - char * descr = (char *)SvPV_nolen(ST(1)); - ITEM * ret = new_item(name, descr); - - ST(0) = sv_newmortal(); - c_item2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("new_item"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_free_item) -{ - dXSARGS; -#ifdef C_FREE_ITEM - c_exactargs("free_item", items, 1); - { - ITEM * item = c_sv2item(ST(0), 0); - int ret = free_item(item); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("free_item"); - XSRETURN(0); -#endif -} - - -/* menu_item_opts */ - -XS(XS_Curses_set_item_opts) -{ - dXSARGS; -#ifdef C_SET_ITEM_OPTS - c_exactargs("set_item_opts", items, 2); - { - ITEM * item = c_sv2item(ST(0), 0); - int opts = (int)SvIV(ST(1)); - int ret = set_item_opts(item, opts); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_item_opts"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_item_opts_on) -{ - dXSARGS; -#ifdef C_ITEM_OPTS_ON - c_exactargs("item_opts_on", items, 2); - { - ITEM * item = c_sv2item(ST(0), 0); - int opts = (int)SvIV(ST(1)); - int ret = item_opts_on(item, opts); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("item_opts_on"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_item_opts_off) -{ - dXSARGS; -#ifdef C_ITEM_OPTS_OFF - c_exactargs("item_opts_off", items, 2); - { - ITEM * item = c_sv2item(ST(0), 0); - int opts = (int)SvIV(ST(1)); - int ret = item_opts_off(item, opts); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("item_opts_off"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_item_opts) -{ - dXSARGS; -#ifdef C_ITEM_OPTS - c_exactargs("item_opts", items, 1); - { - ITEM * item = c_sv2item(ST(0), 0); - int ret = item_opts(item); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("item_opts"); - XSRETURN(0); -#endif -} - - -/* menu_item_userptr */ - -XS(XS_Curses_item_userptr) -{ - dXSARGS; -#ifdef C_ITEM_USERPTR - c_exactargs("item_userptr", items, 1); - { - ITEM * item = c_sv2item(ST(0), 0); - char * ret = (char *)item_userptr(item); - - ST(0) = sv_newmortal(); - sv_setpv((SV*)ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("item_userptr"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_set_item_userptr) -{ - dXSARGS; -#ifdef C_SET_ITEM_USERPTR - c_exactargs("set_item_userptr", items, 2); - { - ITEM * item = c_sv2item(ST(0), 0); - char * ptr = (char *)SvPV_nolen(ST(1)); - int ret = set_item_userptr(item, ptr); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_item_userptr"); - XSRETURN(0); -#endif -} - - -/* menu_item_value */ - -XS(XS_Curses_set_item_value) -{ - dXSARGS; -#ifdef C_SET_ITEM_VALUE - c_exactargs("set_item_value", items, 2); - { - ITEM * item = c_sv2item(ST(0), 0); - bool val = (int)SvIV(ST(1)); - int ret = set_item_value(item, val); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_item_value"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_item_value) -{ - dXSARGS; -#ifdef C_ITEM_VALUE - c_exactargs("item_value", items, 1); - { - ITEM * item = c_sv2item(ST(0), 0); - bool ret = item_value(item); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("item_value"); - XSRETURN(0); -#endif -} - - -/* menu_item_visible */ - -XS(XS_Curses_item_visible) -{ - dXSARGS; -#ifdef C_ITEM_VISIBLE - c_exactargs("item_visible", items, 1); - { - ITEM * item = c_sv2item(ST(0), 0); - bool ret = item_visible(item); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("item_visible"); - XSRETURN(0); -#endif -} - - -/* ncurses menu extension functions */ - -XS(XS_Curses_menu_request_name) -{ - dXSARGS; -#ifdef C_MENU_REQUEST_NAME - c_exactargs("menu_request_name", items, 1); - { - int request = (int)SvIV(ST(0)); - char * ret = (char *)menu_request_name(request); - - ST(0) = sv_newmortal(); - sv_setpv((SV*)ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("menu_request_name"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_menu_request_by_name) -{ - dXSARGS; -#ifdef C_MENU_REQUEST_BY_NAME - c_exactargs("menu_request_by_name", items, 1); - { - char * name = (char *)SvPV_nolen(ST(0)); - int ret = menu_request_by_name(name); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("menu_request_by_name"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_set_menu_spacing) -{ - dXSARGS; -#ifdef C_SET_MENU_SPACING - c_exactargs("set_menu_spacing", items, 4); - { - MENU * menu = c_sv2menu(ST(0), 0); - int descr = (int)SvIV(ST(1)); - int rows = (int)SvIV(ST(2)); - int cols = (int)SvIV(ST(3)); - int ret = set_menu_spacing(menu, descr, rows, cols); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_menu_spacing"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_menu_spacing) -{ - dXSARGS; -#ifdef C_MENU_SPACING - c_exactargs("menu_spacing", items, 4); - { - MENU * menu = c_sv2menu(ST(0), 0); - int descr = 0; - int rows = 0; - int cols = 0; - int ret = menu_spacing(menu, &descr, &rows, &cols); - - sv_setiv(ST(1), (IV)descr);; - sv_setiv(ST(2), (IV)rows);; - sv_setiv(ST(3), (IV)cols);; - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("menu_spacing"); - XSRETURN(0); -#endif -} - - -/* Form support */ - -/* form_cursor */ - -XS(XS_Curses_pos_form_cursor) -{ - dXSARGS; -#ifdef C_POS_FORM_CURSOR - c_exactargs("pos_form_cursor", items, 1); - { - FORM * form = c_sv2form(ST(0), 0); - int ret = pos_form_cursor(form); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("pos_form_cursor"); - XSRETURN(0); -#endif -} - - -/* form_data */ - -XS(XS_Curses_data_ahead) -{ - dXSARGS; -#ifdef C_DATA_AHEAD - c_exactargs("data_ahead", items, 1); - { - FORM * form = c_sv2form(ST(0), 0); - bool ret = data_ahead(form); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("data_ahead"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_data_behind) -{ - dXSARGS; -#ifdef C_DATA_BEHIND - c_exactargs("data_behind", items, 1); - { - FORM * form = c_sv2form(ST(0), 0); - bool ret = data_behind(form); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("data_behind"); - XSRETURN(0); -#endif -} - - -/* form_driver */ - -XS(XS_Curses_form_driver) -{ - dXSARGS; -#ifdef C_FORM_DRIVER - c_exactargs("form_driver", items, 2); - { - FORM * form = c_sv2form(ST(0), 0); - int c = (int)SvIV(ST(1)); - int ret = form_driver(form, c); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("form_driver"); - XSRETURN(0); -#endif -} - - -/* form_field */ - -XS(XS_Curses_set_form_fields) -{ - dXSARGS; -#ifdef C_SET_FORM_FIELDS - c_exactargs("set_form_fields", items, 2); - { - FORM * form = c_sv2form(ST(0), 0); - FIELD **fields = (FIELD **)SvPV_nolen(ST(1)); - int ret = set_form_fields(form, fields); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_form_fields"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_form_fields) -{ - dXSARGS; -#ifdef C_FORM_FIELDS - c_exactargs("form_fields", items, 1); - { - FORM * form = c_sv2form(ST(0), 0); - FIELD ** ret = form_fields(form); - - ST(0) = sv_newmortal(); - sv_setpv((SV*)ST(0), (char *)ret); - } - XSRETURN(1); -#else - c_fun_not_there("form_fields"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_field_count) -{ - dXSARGS; -#ifdef C_FIELD_COUNT - c_exactargs("field_count", items, 1); - { - FORM * form = c_sv2form(ST(0), 0); - int ret = field_count(form); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("field_count"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_move_field) -{ - dXSARGS; -#ifdef C_MOVE_FIELD - c_exactargs("move_field", items, 3); - { - FIELD * field = c_sv2field(ST(0), 0); - int frow = (int)SvIV(ST(1)); - int fcol = (int)SvIV(ST(2)); - int ret = move_field(field, frow, fcol); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("move_field"); - XSRETURN(0); -#endif -} - - -/* form_new */ - -XS(XS_Curses_new_form) { - dXSARGS; -#ifdef C_NEW_FORM - c_exactargs("new_form", items, 1); - { - FIELD ** fields = (FIELD **)SvPV_nolen(ST(0)); - FORM * ret = new_form(fields); - - ST(0) = sv_newmortal(); - c_form2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("new_form"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_free_form) -{ - dXSARGS; -#ifdef C_FREE_FORM - c_exactargs("free_form", items, 1); - { - FORM * form = c_sv2form(ST(0), 0); - int ret = free_form(form); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("free_form"); - XSRETURN(0); -#endif -} - - -/* form_new_page */ - -XS(XS_Curses_set_new_page) -{ - dXSARGS; -#ifdef C_SET_NEW_PAGE - c_exactargs("set_new_page", items, 2); - { - FIELD * field = c_sv2field(ST(0), 0); - bool new_page_flag = (int)SvIV(ST(1)); - int ret = set_new_page(field, new_page_flag); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_new_page"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_new_page) -{ - dXSARGS; -#ifdef C_NEW_PAGE - c_exactargs("new_page", items, 1); - { - FIELD * field = c_sv2field(ST(0), 0); - bool ret = new_page(field); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("new_page"); - XSRETURN(0); -#endif -} - - -/* form_opts */ - -XS(XS_Curses_set_form_opts) -{ - dXSARGS; -#ifdef C_SET_FORM_OPTS - c_exactargs("set_form_opts", items, 2); - { - FORM * form = c_sv2form(ST(0), 0); - int opts = (int)SvIV(ST(1)); - int ret = set_form_opts(form, opts); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_form_opts"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_form_opts_on) -{ - dXSARGS; -#ifdef C_FORM_OPTS_ON - c_exactargs("form_opts_on", items, 2); - { - FORM * form = c_sv2form(ST(0), 0); - int opts = (int)SvIV(ST(1)); - int ret = form_opts_on(form, opts); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("form_opts_on"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_form_opts_off) -{ - dXSARGS; -#ifdef C_FORM_OPTS_OFF - c_exactargs("form_opts_off", items, 2); - { - FORM * form = c_sv2form(ST(0), 0); - int opts = (int)SvIV(ST(1)); - int ret = form_opts_off(form, opts); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("form_opts_off"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_form_opts) -{ - dXSARGS; -#ifdef C_FORM_OPTS - c_exactargs("form_opts", items, 1); - { - FORM * form = c_sv2form(ST(0), 0); - int ret = form_opts(form); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("form_opts"); - XSRETURN(0); -#endif -} - - -/* form_page */ - -XS(XS_Curses_set_current_field) -{ - dXSARGS; -#ifdef C_SET_CURRENT_FIELD - c_exactargs("set_current_field", items, 2); - { - FORM * form = c_sv2form(ST(0), 0); - FIELD * field = c_sv2field(ST(1), 1); - int ret = set_current_field(form, field); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_current_field"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_current_field) -{ - dXSARGS; -#ifdef C_CURRENT_FIELD - c_exactargs("current_field", items, 1); - { - FORM * form = c_sv2form(ST(0), 0); - FIELD * ret = current_field(form); - - ST(0) = sv_newmortal(); - c_field2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("current_field"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_set_form_page) -{ - dXSARGS; -#ifdef C_SET_FORM_PAGE - c_exactargs("set_form_page", items, 2); - { - FORM * form = c_sv2form(ST(0), 0); - int n = (int)SvIV(ST(1)); - int ret = set_form_page(form, n); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_form_page"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_form_page) -{ - dXSARGS; -#ifdef C_FORM_PAGE - c_exactargs("form_page", items, 1); - { - FORM * form = c_sv2form(ST(0), 0); - int ret = form_page(form); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("form_page"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_field_index) -{ - dXSARGS; -#ifdef C_FIELD_INDEX - c_exactargs("field_index", items, 1); - { - FIELD * field = c_sv2field(ST(0), 0); - int ret = field_index(field); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("field_index"); - XSRETURN(0); -#endif -} - - -/* form_post */ - -XS(XS_Curses_post_form) -{ - dXSARGS; -#ifdef C_POST_FORM - c_exactargs("post_form", items, 1); - { - FORM * form = c_sv2form(ST(0), 0); - int ret = post_form(form); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("post_form"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_unpost_form) -{ - dXSARGS; -#ifdef C_UNPOST_FORM - c_exactargs("unpost_form", items, 1); - { - FORM * form = c_sv2form(ST(0), 0); - int ret = unpost_form(form); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("unpost_form"); - XSRETURN(0); -#endif -} - - -/* form_userptr */ - -XS(XS_Curses_set_form_userptr) -{ - dXSARGS; -#ifdef C_SET_FORM_USERPTR - c_exactargs("set_form_userptr", items, 2); - { - FORM * form = c_sv2form(ST(0), 0); - char * userptr = (char *)SvPV_nolen(ST(1)); - int ret = set_form_userptr(form, userptr); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_form_userptr"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_form_userptr) -{ - dXSARGS; -#ifdef C_FORM_USERPTR - c_exactargs("form_userptr", items, 1); - { - FORM * form = c_sv2form(ST(0), 0); - char * ret = form_userptr(form); - - ST(0) = sv_newmortal(); - sv_setpv((SV*)ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("form_userptr"); - XSRETURN(0); -#endif -} - - -/* form_win */ - -XS(XS_Curses_set_form_win) -{ - dXSARGS; -#ifdef C_SET_FORM_WIN - c_exactargs("set_form_win", items, 2); - { - FORM * form = c_sv2form(ST(0), 0); - WINDOW *win = c_sv2window(ST(1), 1); - int ret = set_form_win(form, win); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_form_win"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_form_win) -{ - dXSARGS; -#ifdef C_FORM_WIN - c_exactargs("form_win", items, 1); - { - FORM * form = c_sv2form(ST(0), 0); - WINDOW * ret = form_win(form); - - ST(0) = sv_newmortal(); - c_window2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("form_win"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_set_form_sub) -{ - dXSARGS; -#ifdef C_SET_FORM_SUB - c_exactargs("set_form_sub", items, 2); - { - FORM * form = c_sv2form(ST(0), 0); - WINDOW *sub = c_sv2window(ST(1), 1); - int ret = set_form_sub(form, sub); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_form_sub"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_form_sub) -{ - dXSARGS; -#ifdef C_FORM_SUB - c_exactargs("form_sub", items, 1); - { - FORM * form = c_sv2form(ST(0), 0); - WINDOW * ret = form_sub(form); - - ST(0) = sv_newmortal(); - c_window2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("form_sub"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_scale_form) -{ - dXSARGS; -#ifdef C_SCALE_FORM - c_exactargs("scale_form", items, 3); - { - FORM * form = c_sv2form(ST(0), 0); - int rows = 0; - int cols = 0; - int ret = scale_form(form, &rows, &cols); - - sv_setiv(ST(1), (IV)rows);; - sv_setiv(ST(2), (IV)cols);; - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("scale_form"); - XSRETURN(0); -#endif -} - - -/* form_field_attributes */ - -XS(XS_Curses_set_field_fore) -{ - dXSARGS; -#ifdef C_SET_FIELD_FORE - c_exactargs("set_field_fore", items, 2); - { - FIELD * field = c_sv2field(ST(0), 0); - chtype attr = c_sv2chtype(ST(1)); - int ret = set_field_fore(field, attr); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_field_fore"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_field_fore) -{ - dXSARGS; -#ifdef C_FIELD_FORE - c_exactargs("field_fore", items, 1); - { - FIELD * field = c_sv2field(ST(0), 0); - chtype ret = field_fore(field); - - ST(0) = sv_newmortal(); - c_chtype2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("field_fore"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_set_field_back) -{ - dXSARGS; -#ifdef C_SET_FIELD_BACK - c_exactargs("set_field_back", items, 2); - { - FIELD * field = c_sv2field(ST(0), 0); - chtype attr = c_sv2chtype(ST(1)); - int ret = set_field_back(field, attr); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_field_back"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_field_back) -{ - dXSARGS; -#ifdef C_FIELD_BACK - c_exactargs("field_back", items, 1); - { - FIELD * field = c_sv2field(ST(0), 0); - chtype ret = field_back(field); - - ST(0) = sv_newmortal(); - c_chtype2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("field_back"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_set_field_pad) -{ - dXSARGS; -#ifdef C_SET_FIELD_PAD - c_exactargs("set_field_pad", items, 2); - { - FIELD * field = c_sv2field(ST(0), 0); - int pad = (int)SvIV(ST(1)); - int ret = set_field_pad(field, pad); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_field_pad"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_field_pad) -{ - dXSARGS; -#ifdef C_FIELD_PAD - c_exactargs("field_pad", items, 1); - { - FIELD * field = c_sv2field(ST(0), 0); - chtype ret = field_pad(field); - - ST(0) = sv_newmortal(); - c_chtype2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("field_pad"); - XSRETURN(0); -#endif -} - - -/* form_field_buffer */ - -XS(XS_Curses_set_field_buffer) -{ - dXSARGS; -#ifdef C_SET_FIELD_BUFFER - c_exactargs("set_field_buffer", items, 3); - { - FIELD * field = c_sv2field(ST(0), 0); - int buf = (int)SvIV(ST(1)); - char * value = (char *)SvPV_nolen(ST(2)); - int ret = set_field_buffer(field, buf, value); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_field_buffer"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_field_buffer) -{ - dXSARGS; -#ifdef C_FIELD_BUFFER - c_exactargs("field_buffer", items, 2); - { - FIELD * field = c_sv2field(ST(0), 0); - int buffer = (int)SvIV(ST(1)); - char * ret = field_buffer(field, buffer); - - ST(0) = sv_newmortal(); - sv_setpv((SV*)ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("field_buffer"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_set_field_status) -{ - dXSARGS; -#ifdef C_SET_FIELD_STATUS - c_exactargs("set_field_status", items, 2); - { - FIELD * field = c_sv2field(ST(0), 0); - bool status = (int)SvIV(ST(1)); - int ret = set_field_status(field, status); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_field_status"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_field_status) -{ - dXSARGS; -#ifdef C_FIELD_STATUS - c_exactargs("field_status", items, 1); - { - FIELD * field = c_sv2field(ST(0), 0); - bool ret = field_status(field); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("field_status"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_set_max_field) -{ - dXSARGS; -#ifdef C_SET_MAX_FIELD - c_exactargs("set_max_field", items, 2); - { - FIELD * field = c_sv2field(ST(0), 0); - int max = (int)SvIV(ST(1)); - int ret = set_max_field(field, max); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_max_field"); - XSRETURN(0); -#endif -} - - -/* form_field_info */ - -XS(XS_Curses_field_info) -{ - dXSARGS; -#ifdef C_FIELD_INFO - c_exactargs("field_info", items, 7); - { - FIELD * field = c_sv2field(ST(0), 0); - int rows = 0; - int cols = 0; - int frow = 0; - int fcol = 0; - int nrow = 0; - int nbuf = 0; - int ret = field_info(field, &rows, &cols, &frow, &fcol, &nrow, &nbuf); - - sv_setiv(ST(1), (IV)rows);; - sv_setiv(ST(2), (IV)cols);; - sv_setiv(ST(3), (IV)frow);; - sv_setiv(ST(4), (IV)fcol);; - sv_setiv(ST(5), (IV)nrow);; - sv_setiv(ST(6), (IV)nbuf);; - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("field_info"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_dynamic_field_info) -{ - dXSARGS; -#ifdef C_DYNAMIC_FIELD_INFO - c_exactargs("dynamic_field_info", items, 4); - { - FIELD * field = c_sv2field(ST(0), 0); - int rows = 0; - int cols = 0; - int max = 0; - int ret = dynamic_field_info(field, &rows, &cols, &max); - - sv_setiv(ST(1), (IV)rows);; - sv_setiv(ST(2), (IV)cols);; - sv_setiv(ST(3), (IV)max);; - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("dynamic_field_info"); - XSRETURN(0); -#endif -} - - -/* form_field_just */ - -XS(XS_Curses_set_field_just) -{ - dXSARGS; -#ifdef C_SET_FIELD_JUST - c_exactargs("set_field_just", items, 2); - { - FIELD * field = c_sv2field(ST(0), 0); - int justif = (int)SvIV(ST(1)); - int ret = set_field_just(field, justif); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_field_just"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_field_just) -{ - dXSARGS; -#ifdef C_FIELD_JUST - c_exactargs("field_just", items, 1); - { - FIELD * field = c_sv2field(ST(0), 0); - int ret = field_just(field); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("field_just"); - XSRETURN(0); -#endif -} - - -/* form_field_new */ - -XS(XS_Curses_new_field) -{ - dXSARGS; -#ifdef C_NEW_FIELD - c_exactargs("new_field", items, 6); - { - int const height = (int)SvIV(ST(0)); - int const width = (int)SvIV(ST(1)); - int const toprow = (int)SvIV(ST(2)); - int const leftcol = (int)SvIV(ST(3)); - int const offscreen = (int)SvIV(ST(4)); - int const nbuffers = (int)SvIV(ST(5)); - FIELD * ret = new_field(height, width, toprow, leftcol, offscreen, nbuffers); - ST(0) = sv_newmortal(); - c_field2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("new_field"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_dup_field) -{ - dXSARGS; -#ifdef C_DUP_FIELD - c_exactargs("dup_field", items, 3); - { - FIELD * field = c_sv2field(ST(0), 0); - int toprow = (int)SvIV(ST(1)); - int leftcol = (int)SvIV(ST(2)); - FIELD * ret = dup_field(field, toprow, leftcol); - - ST(0) = sv_newmortal(); - c_field2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("dup_field"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_link_field) -{ - dXSARGS; -#ifdef C_LINK_FIELD - c_exactargs("link_field", items, 3); - { - FIELD * field = c_sv2field(ST(0), 0); - int toprow = (int)SvIV(ST(1)); - int leftcol = (int)SvIV(ST(2)); - FIELD * ret = link_field(field, toprow, leftcol); - - ST(0) = sv_newmortal(); - c_field2sv(ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("link_field"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_free_field) -{ - dXSARGS; -#ifdef C_FREE_FIELD - c_exactargs("free_field", items, 1); - { - FIELD * field = c_sv2field(ST(0), 0); - int ret = free_field(field); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("free_field"); - XSRETURN(0); -#endif -} - - -/* form_field_opts */ - -XS(XS_Curses_set_field_opts) -{ - dXSARGS; -#ifdef C_SET_FIELD_OPTS - c_exactargs("set_field_opts", items, 2); - { - FIELD * field = c_sv2field(ST(0), 0); - int opts = (int)SvIV(ST(1)); - int ret = set_field_opts(field, opts); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_field_opts"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_field_opts_on) -{ - dXSARGS; -#ifdef C_FIELD_OPTS_ON - c_exactargs("field_opts_on", items, 2); - { - FIELD * field = c_sv2field(ST(0), 0); - int opts = (int)SvIV(ST(1)); - int ret = field_opts_on(field, opts); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("field_opts_on"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_field_opts_off) -{ - dXSARGS; -#ifdef C_FIELD_OPTS_OFF - c_exactargs("field_opts_off", items, 2); - { - FIELD * field = c_sv2field(ST(0), 0); - int opts = (int)SvIV(ST(1)); - int ret = field_opts_off(field, opts); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("field_opts_off"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_field_opts) -{ - dXSARGS; -#ifdef C_FIELD_OPTS - c_exactargs("field_opts", items, 1); - { - FIELD * field = c_sv2field(ST(0), 0); - int ret = field_opts(field); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("field_opts"); - XSRETURN(0); -#endif -} - - -/* form_field_userptr */ - -XS(XS_Curses_set_field_userptr) -{ - dXSARGS; -#ifdef C_SET_FIELD_USERPTR - c_exactargs("set_field_userptr", items, 2); - { - FIELD * field = c_sv2field(ST(0), 0); - char * userptr = (char *)SvPV_nolen(ST(1)); - int ret = set_field_userptr(field, userptr); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("set_field_userptr"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_field_userptr) -{ - dXSARGS; -#ifdef C_FIELD_USERPTR - c_exactargs("field_userptr", items, 1); - { - FIELD * field = c_sv2field(ST(0), 0); - char * ret = field_userptr(field); - - ST(0) = sv_newmortal(); - sv_setpv((SV*)ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("field_userptr"); - XSRETURN(0); -#endif -} - - -/* form_field_validation */ - -XS(XS_Curses_field_arg) -{ - dXSARGS; -#ifdef C_FIELD_ARG - c_exactargs("field_arg", items, 1); - { - FIELD * field = c_sv2field(ST(0), 0); - char * ret = field_arg(field); - - ST(0) = sv_newmortal(); - sv_setpv((SV*)ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("field_arg"); - XSRETURN(0); -#endif -} - - -/* ncurses form extension functions */ - -XS(XS_Curses_form_request_name) -{ - dXSARGS; -#ifdef C_FORM_REQUEST_NAME - c_exactargs("form_request_name", items, 1); - { - int request = (int)SvIV(ST(0)); - char * ret = (char *)form_request_name(request); - - ST(0) = sv_newmortal(); - sv_setpv((SV*)ST(0), ret); - } - XSRETURN(1); -#else - c_fun_not_there("form_request_name"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_form_request_by_name) -{ - dXSARGS; -#ifdef C_FORM_REQUEST_BY_NAME - c_exactargs("form_request_by_name", items, 1); - { - char * name = (char *)SvPV_nolen(ST(0)); - int ret = form_request_by_name(name); - - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)ret); - } - XSRETURN(1); -#else - c_fun_not_there("form_request_by_name"); - XSRETURN(0); -#endif -} - diff --git a/Curses-1.23/CursesTyp.h b/Curses-1.23/CursesTyp.h deleted file mode 100644 index d190836..0000000 --- a/Curses-1.23/CursesTyp.h +++ /dev/null @@ -1,52 +0,0 @@ -/*============================================================================= - CursesTyp.h -=============================================================================== - Define types that are missing from the Curses library, which other Curses - libraries define. This way, we'll have a set of types that we can use - regardless of which Curses library we have. -=============================================================================*/ - -/* The C_xxx macros are defined by CursesDef.h, which was generated by - the build system based on its analysis of the Curses library on this - system. - - C_xxx defined means the Curses library header files define type 'xxx'. -*/ - -#ifndef C_TYPATTR_T -#define attr_t int -#endif - -#if 0 -/* Disabled this in Curses.pm 1.21. Why would we want 'bool' defined? */ -#ifndef C_TYPBOOL -#define bool int -#endif -#endif - -#ifndef C_TYPCHTYPE -#define chtype int -#endif - -#ifndef C_TYPMEVENT -#define MEVENT int -#endif - -#ifndef C_TYPMMASK_T -#define mmask_t int -#endif - -#ifndef C_TYPSCREEN -#define SCREEN int -#endif - - - -/* -** -** Copyright (c) 1994-2001 William Setzer -** -** You may distribute under the terms of either the Artistic License -** or the GNU General Public License, as specified in the README file. -*/ - diff --git a/Curses-1.23/CursesVar.c b/Curses-1.23/CursesVar.c deleted file mode 100644 index aa3c4d5..0000000 --- a/Curses-1.23/CursesVar.c +++ /dev/null @@ -1,248 +0,0 @@ -/* This file can be automatically generated; changes may be lost. -** -** -** CursesVar.c -- the variables -** -** Copyright (c) 1994-2000 William Setzer -** -** You may distribute under the terms of either the Artistic License -** or the GNU General Public License, as specified in the README file. -*/ - -XS(XS_Curses_LINES) -{ - dXSARGS; -#ifdef C_LINES - c_exactargs("LINES", items, 0); - { - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)LINES); - } - XSRETURN(1); -#else - c_var_not_there("LINES"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_COLS) -{ - dXSARGS; -#ifdef C_COLS - c_exactargs("COLS", items, 0); - { - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)COLS); - } - XSRETURN(1); -#else - c_var_not_there("COLS"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_stdscr) -{ - dXSARGS; -#ifdef C_STDSCR - c_exactargs("stdscr", items, 0); - { - ST(0) = sv_newmortal(); - c_window2sv(ST(0), stdscr); - } - XSRETURN(1); -#else - c_var_not_there("stdscr"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_curscr) -{ - dXSARGS; -#ifdef C_CURSCR - c_exactargs("curscr", items, 0); - { - ST(0) = sv_newmortal(); - c_window2sv(ST(0), curscr); - } - XSRETURN(1); -#else - c_var_not_there("curscr"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_COLORS) -{ - dXSARGS; -#ifdef C_COLORS - c_exactargs("COLORS", items, 0); - { - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)COLORS); - } - XSRETURN(1); -#else - c_var_not_there("COLORS"); - XSRETURN(0); -#endif -} - -XS(XS_Curses_COLOR_PAIRS) -{ - dXSARGS; -#ifdef C_COLOR_PAIRS - c_exactargs("COLOR_PAIRS", items, 0); - { - ST(0) = sv_newmortal(); - sv_setiv(ST(0), (IV)COLOR_PAIRS); - } - XSRETURN(1); -#else - c_var_not_there("COLOR_PAIRS"); - XSRETURN(0); -#endif -} - - -XS(XS_Curses_Vars_TIESCALAR) -{ - dXSARGS; - c_exactargs("TIESCALAR", items, 2); - { - char * pack = (char *)SvPV_nolen(ST(0)); - int n = (int)SvIV(ST(1)); - - ST(0) = sv_newmortal(); - sv_setref_iv(ST(0), pack, n); - } - XSRETURN(1); -} - -XS(XS_Curses_Vars_FETCH) -{ - dXSARGS; - { - int num = (int)SvIV(SvRV((SV*)ST(0))); - - ST(0) = sv_newmortal(); - switch (num) { - case 1: -#ifdef C_LINES - sv_setiv(ST(0), (IV)LINES); -#else - c_var_not_there("LINES"); -#endif - break; - case 2: -#ifdef C_COLS - sv_setiv(ST(0), (IV)COLS); -#else - c_var_not_there("COLS"); -#endif - break; - case 3: -#ifdef C_STDSCR - c_window2sv(ST(0), stdscr); -#else - c_var_not_there("stdscr"); -#endif - break; - case 4: -#ifdef C_CURSCR - c_window2sv(ST(0), curscr); -#else - c_var_not_there("curscr"); -#endif - break; - case 5: -#ifdef C_COLORS - sv_setiv(ST(0), (IV)COLORS); -#else - c_var_not_there("COLORS"); -#endif - break; - case 6: -#ifdef C_COLOR_PAIRS - sv_setiv(ST(0), (IV)COLOR_PAIRS); -#else - c_var_not_there("COLOR_PAIRS"); -#endif - break; - default: - croak("Curses::Vars::FETCH called with bad index"); - /* NOTREACHED */ - } - } - XSRETURN(1); -} - -XS(XS_Curses_Vars_STORE) -{ - dXSARGS; - { - int num = (int)SvIV((SV*)SvRV(ST(0))); - - switch (num) { - case 1: -#ifdef C_LINES - LINES = (int)SvIV(ST(1)); -#else - c_var_not_there("LINES"); -#endif - break; - case 2: -#ifdef C_COLS - COLS = (int)SvIV(ST(1)); -#else - c_var_not_there("COLS"); -#endif - break; - case 3: -#ifdef C_STDSCR - stdscr = c_sv2window(ST(1), -1); -#else - c_var_not_there("stdscr"); -#endif - break; - case 4: -#ifdef C_CURSCR - curscr = c_sv2window(ST(1), -1); -#else - c_var_not_there("curscr"); -#endif - break; - case 5: -#ifdef C_COLORS - COLORS = (int)SvIV(ST(1)); -#else - c_var_not_there("COLORS"); -#endif - break; - case 6: -#ifdef C_COLOR_PAIRS - COLOR_PAIRS = (int)SvIV(ST(1)); -#else - c_var_not_there("COLOR_PAIRS"); -#endif - break; - default: - croak("Curses::Vars::STORE called with bad index"); - /* NOTREACHED */ - } - ST(0) = &PL_sv_yes; - } - XSRETURN(1); -} - -XS(XS_Curses_Vars_DESTROY) -{ - dXSARGS; - { - SV * rv = ST(0); - - ST(0) = &PL_sv_yes; - } - XSRETURN(1); -} diff --git a/Curses-1.23/HISTORY b/Curses-1.23/HISTORY deleted file mode 100644 index 3e4f44c..0000000 --- a/Curses-1.23/HISTORY +++ /dev/null @@ -1,219 +0,0 @@ -The Curses Perl module was created by William Setzer (William_Setzer -at ncsu.edu) in 1994. William maintained it up until July 2001, when he -stopped having time to do so. - -In September 2004, Bryan Henderson (bryanh@giraffe-data.com) took over -maintainership of it, after confirming with William that he did not -plan to continue. - -The module has always been distributed via CPAN. - -Curses itself is much older than the Perl implementation. Curses was -originally only a C programming library. - -New in 1.23 (Released March 9, 2008) - - Fix crash of Makefile.PL on Windows. - -New in 1.22 (Released February 29, 2008) - - Nothing. Just a packaging fix. - -New in 1.21 (Released February 15, 2008) - - Don't undefine 'bool' macro in c-darwin hints file. - -New in 1.20 (Released November 19, 2007) - - Fix missing comment delimiter. - -New in 1.19 (Released November 18, 2007) - - Make it work on 5.005 again, using ppport.h (Devel::PPPort). - From Slaven Rezic - slaven rezic de . - - Fix uninitialized value in Makefile.PL on a system without BSD Curses or - Ncurses in a common place. - - Reverse change to chgat() in 1.16. Make expected argument count 4. - -There was never a 1.18 release; problems with PAUSE prevent using that -release number. - -New in 1.17 (Released October 14, 2007) - - Fix bug - can't find c-config.h on a system with ncursesw. - - Make cdemo work on Windows. - - Don't undefine SP macro with Pdcurses. (Otherwise it won't compile; - don't know why we used to undefine SP). - - In Windows hints file, #include curses.h instead of pdcurses.h. It - seems to be called curses.h these days. - -New in 1.16 (August 7, 2007) - - Use Ncursesw (Ncurses with wide character functions) instead of - Ncurses if available. - - Undefine "tab" macro, defined by Curses header file. It interferes - with perl.h. - - Fix demo.form to use L! instead of J in the pack template that generates - the new_form() argument. Apparently, J is something from older Perl - and doesn't exist in current Perl. - - Put some documentation of the library in comments in demo.form. - - Use L! instead of I in the pack template in demo.menu. - - Change SvPV(X,PL_na) to SvPV_nolen(X) to get with the times. - - Change #!/usr/local/bin/perl to #! /usr/bin/perl . - - Fix bug: chgat() requires an extra, meaningless, argument. Fix changes - expected argument count from 4 to 3. - -New in 1.15 (October 8, 2006) - - Add a simple load test 00-load.t. - - Makefile.PL: use cdemo.obj instead of cdemo.o on Windows. - - Makefile.PL: Guess ncurses/bsd based on what .h files exist. - - Fix bug in Makefile.PL: doesn't use curses type in guess at c-config.h - (e.g. tries to use c-freebsd.h when it should use c-freebsd.bsd.h). - - Change all sv_isa() to sv_derived_from() so you can use subclasses. - Thanks Leigh . - - Rename default Darwin (Mac OS X) hints file (ca 2001) to c-darwin.old, and - the newer one ca 2004) to c-darwin.old so as to be the default. We're - guessing that the newer one applies to more systems today. - -New in 1.14 (June 3, 2006) - - Make demo.form work on 64 bit machine. - - Add some narration to Makefile.PL to help with diagnosis. - - Move undef of 'instr' from individual hint files to Curses.c and add - explanation. - - Use perl -w instead of 'use warnings' in Makefile.PL so it works with - older Perl. - -New in 1.13 (October 10, 2005) - - Fix so it builds on current Cygwin. - - Some kind of build fix to get panels, forms, and menu functions to build. - -New in 1.12 (March 17, 2005) - - Build bug fixed: panel, forms, menu libs not found in build. - - Build bug fixed: Curses.pm treats version as number, so 1.10 == 1.1 . - -New in 1.11 (March 12, 2005) - - Various cleanup and improved diagnostics in the build. - -New in 1.10 (March 11, 2005) - - Build bug fixed: Makefile has undefined variable $libtyp. - - Build bug fixed: Makefile computes wrong guess hint file name. - -New in 1.09 (March 6, 2005) - - - Makefile.PL searches for curses header files instead of assuming - based on $OSNAME. - - - Makefile.PL warns user to reconfigure environment when form.h is - in /usr/include rather than just add -I/usr/include to the compile - (this concerns the problem with the conflicting Perl form.h file). - -New in 1.08 (November 2004) - - - perl.syms more verbose so you can diagnose failures. - - - You can use environment variables instead of modifying Makefile.PL - to set your -I, -L, etc. options for the Curses libraries. - - - c-linux.ncurses.h hints file includes ncurses.h, not curses.h. - - - New c-darwin-thread-multi-2level.h hints file. - -New in 1.07 (September 2004) - - - Call to Perl_isa_sv() changed to isa_sv() because the former doesn't - work on some systems (causes a build failure). - -New in 1.06 (July 2001) - - o Now requires perl5.005 or better to run. (You can probably run it - in perl5.002-perl5.004 by grabbing newCONSTSUB out of the IO - distribution on CPAN and editing all uses of "foreach my $var" in - my perl scripts.) - - o Did lots of fiddling with the file generation in an effort to make - it more comprehensible. In doing so, I moved around the way some - things were done and probably broke it on some systems with weird - compilers. Please let me know. - - o changed the "Curses->new()" function to be a bit less clever. - - o Support for libmenu! Many thanks to Yury Pshenichny - who did most of the actual work. - - Update: Well, sort of support. For some reason beyond my ken, it - doesn't work with Solaris (2.6) libmenu. (The items won't attach to - the menu.) ncurses menu, both 1.9.9 and 5.2, seem to work fine. - - o libform support added, too. Ho hum. ;) This one does appear to - work with Solaris libform. - - o Added the following ncurses extension functions: - - use_default_colors() - assume_default_colors() - define_key() - keybound() - keyok() - resizeterm() - - (Thanks to neild at misago.org, hans at kolej.mff.cuni.cz) - - o Re-enabled the functions: - - attr_get() - attr_off() - attr_on() - attr_set() - - o Between the functions supported and the functions listed in the - pod as not supported, those are all the ones I know about. - Got any more? Let me know. - - o Fixed 64 bit issue with getch() and possibly others, truncating - returns of `chtype' to 32 bits. Note that this could possibly - break some OSes. Please let me know. - (Thanks to Randall.G.Steiner at bankofamerica.com) - - o Fixed bug where @ARGV was always being cleared, and so no arguments - ever got to MakeMaker. - (Thanks to bdlow at nortelnetworks.com) - - o Added hints for Darwin/Mac OS X system. - (Thanks to sdietrich at emlab.com) - - o Added note to NETBSD users at the bottom of this README. - - o Added a security notice to the README and pod. - (Thanks to connor at ing.umu.se) - - o Has anyone successfully used the mouse event stuff? - diff --git a/Curses-1.23/INSTALL b/Curses-1.23/INSTALL deleted file mode 100644 index 7119330..0000000 --- a/Curses-1.23/INSTALL +++ /dev/null @@ -1,280 +0,0 @@ -This package requires at least perl5.005. You're on your own before -then. - -1) Make sure you've got the prerequisites - -1.1) Make sure perl has been built. - -1.2) Make sure you have a Curses C library installed. Either original - BSD Curses or newer Ncurses will do. Pdcurses (public domain Curses - code that works in DOS, Windows, and X11) almost works. See - PDCURSES section below. - -2) Chdir into the Curses source directory (which you unpacked from the - .tgz file you downloaded from CPAN) - -3) Want to see if maybe the package can autoconfigure itself? It's - pretty dumb about it, but give it a try and skip to (5). - -4) Configure the build for your system. - -4.1) - - Look in the "hints" directory to see if any of the hint files are - appropriate to your machine's OS. If so, symlink or copy it to the - file "c-config.h" in the current ("Curses") directory. If not, - copy "hints/c-none.h" to "c-config.h" in the current directory. - Then edit "c-config.h" and follow the directions. If you have to - "roll your own", be sure and save a copy. A "make clean" will - delete "c-config.h". If you "rolled your own", please send me a - copy so I can include it in future distributions (see - "hints/c-isc.h" for an example of a user-contributed "c-config.h"). - -4.2) - - Curses has an interface header file named form.h. If on your system - this is in a system header file directory such as /usr/include, you - have a problem. That's because Perl also has a file named form.h - in a directory that is searched before the system directories in the - compile of the Perl Curses module. - - So you'll have to fix that. It's better to have your Curses stuff - in its own directory. /usr/include/ncurses is conventional. Move - all your Curses header files (curses.h, ncurses.h, form.h, menu.h, - panel.h) into this directory. If you use /usr/include/ncurses, - Makefile.PL will find them there. Otherwise, set the _CFLAGS - environment variables below accordingly. - - Alternatively, you can just edit c-config.h, after running - Makefile.PL. Replace the line - - #include - - with something like - - #include "/usr/include/form.h" - - explicitly specifying the Ncurses version of form.h. - - You can ignore all this if you're not building forms capability - into the Perl Curses module (by specifying "FORMS" as an option to - Makefile.PL below). - -4.3) - - Set environment variables telling the compiler and linker where your - Curses C libraries are: - - CURSES_CFLAGS: -I and -D options needed at compile time for access to - the basic Curses library (libcurses). - CURSES_LDFLAGS: -L and -l options needed at link time for access to - the basic Curses library (libcurses). (this really - must be only -L and -l options; Makefile.PL parses it. Furthermore, - there can't be any space between the -L or -l and its value). - - CURSES_PANEL_CFLAGS - CURSES_PANEL_LDFLAGS - CURSES_MENU_CFLAGS - CURSES_MENU_LDFLAGS - CURSES_FORM_CFLAGS - CURSES_FORM_LDFLAGS - - These are analogous, but for the panel, menu, and form specialty - Curses libraries, respectively. - - You can set these in your shell and export them, e.g. - - export CURSES_CFLAGS="-I/usr/include/ncurses" - export CURSES_LDFLAGS="-L/usr/lib/ncurses -lncurses" - - Or you can set them right on the 'perl Makefile.PL' command. - - -5) perl Makefile.PL [PANELS] [MENUS] [FORMS] [options] - - PANELS means to include Curses panel function. - - MENUS means to include Curses menu functions. - - FORMS means to include Curses form function. - - For PANELS, MENUS, and FORMS, you must have the associated C library on - your system (libpanel, libmenu, libform). Choosing one of these options - without having the library will prevent this package from compiling. - - Currently, PANELS, MENUS, and FORMS don't work for the BSD - hints files (c-*.bsd.h), because I'm not aware of any panel, menu, - or form libraries for BSD curses. - - This package needs the perl header files. If you've already - installed perl, the "Makefile.PL" will magically know where they - are. If you haven't installed perl, you may need to tell the - "Makefile.PL" where the header files are. You can do this with the - "PERL_SRC=" option. - - perl Makefile.PL PERL_SRC=/local/src/perl - - The "Makefile.PL", as with just about every other perl module, uses - the "ExtUtils::MakeMaker" package to generate a make file (named - "Makefile"). I highly recommend reading the "ExtUtils::MakeMaker" - man page, as there are lots of neat options you can specify. - - If Makefile.PL tells you that it can't do something (it prints out - "I'm sorry" and some more stuff), then you'll need to go back to - step (4) and try configuring by hand. - -6) make - - `make' will first run a perl script called `test.syms' that investigates - what the Curses libraries are like on your system and records the - results in the file "CursesDef.h". - - test.syms is very brittle -- it works via test compiles, and if any - number of things goes wrong with the test compile, it makes bad - assumptions, usually that you don't have a certain function in your - Curses library. If test.syms tells you it can't find functions that - you think you have, run test.syms manually with the -v (verbose) option. - That will show you the error messages from the test compiles and you - can figure out what's going wrong and fix it. Typically, you'll find - that you need to do better on your CURSES_* environment variables - (see above). - - Alternatively, if you see that test.syms is picking the wrong - values, you can edit "CursesDef.h" by hand and follow the - directions. If you have to "roll your own", be sure and save a - copy. A "make clean" will delete "CursesDef.h". - - `make' will then try to compile "Curses.c". If you get any - undefined curses symbols, it means that your curses really doesn't - have those functions, and you should edit "CursesDef.h" and/or - "c-config.h" and change the #define to #undef for that function. - - If you get other compile errors, it is probably because the curses - include file and the perl include files are conflicting. You'll - have to figure out what's wrong and add proper C code to - "c-config.h". See "hints/c-sunos.sysv.h" for an example of how to - do this. - -7) Test the distribution: - - perl demo - perl gdc - perl demo2 [stuff that has a 50/50 chance of showing up right] - perl demo.panel [if you enabled panel support] - perl demo.menu [if you enabled menu support] - perl demo.form [if you enabled form support] - - "gdc" is a digital clock ported from the "ncurses" distribution. - - As mentioned in the "README", the demo is not intended to be an - exhaustive test of all the possible Curses functions. If it - doesn't do all the functions correctly, it may be a Curses bug or - it may be a problem with your system's "libcurses.a". There's no - getting around the fact that you need to be conversant in how your - system's "libcurses.a" works to be able to use Curses most - effectively. - - For "demo", you can try: - - make cdemo - - This will try to compile a pure-C version of the "demo". If you - see the same errors in it that you see in "demo", it means there's - a bug in your libcurses. - -8) Doing a : - - make install - - will install everything in the "standard" perl places, just like - stuff from the base perl distribution. - -9) Enjoy! - - If your enjoyment is ruined (:-) because the module doesn't work - right, peruse the Curses pod document (located at the end of - "Curses.pm") for incompatibilities with other Perl programs. Also - check the end of the "README" for problems that may exist for your - particular libcurses.a or operating system. - - -HP-UX ------ - -HP-UX has two Curses libraries. According to HP: - - Libraries libcur_colr.a and libcur_colr.sl, and commands - captoinfo_colr, infocmp_colr, tput_colr, and tic_colr are - part of HP-UX Color-Curses package used for color-management. - -And there is apparently also a library with the standard names. -The Curses Perl module builds using the standard library by default. -If you want to use the "color" versions, set the CURSES_CFLAGS and -CURSES_LDFLAGS environment variables accordingly. - -HP recommends using the HP ANSI C compiler for everything but -compiling the kernel, but the one for compling the kernel is the -default. (Seems ridiculous, but an HP user said so). I don't know -what difference it makes for the Perl Curses module, but if you -want to use the ANSI compiler, add this to Makefile.PL's arguments: - - CC=/opt/ansic/bin/cc - - -PDCURSES --------- - -Pdcurses is a public domain Curses implementation that works on DOS, -OS/2, Win32, and X11. http://pdcurses.sourceforge.net . - -Dave C reported success using Perl Curses with Pdcurses on Windows -in September 2007. He gave these notes: - - Environment: - Perl Version 5.8.1 built for MSWin32-x86-multi-thread - MSVS 2003 Visual C++ 7 - Windows XP - Perl module Curses-1.16 - Pdcurses 3.3 - - Instructions: - - - Set environment variables (for Perl Curses Makefile.PL): - - CURSES_CFLAGS=-Ic:\dev\pdc33 - CURSES_LDFLAGS=-Lc:\dev\pdc33 pdcurses.lib - - - Build and Test - - > Makefile.PL - > nmake test - - ignore MOUSE_MOVED redefined warning - MOUSE_MOVED is never used in Curses 1.16 - - - Install: - - > nmake install - - - - Test: - - demo, demo2, demo.panel scripts successfully run - - > nmake cdemo - > cdemo - - -Alexandr Ciornii on September 22, 2006, reported that he had some success -using Perl Curses with Pdcurses, with these notes: - - I've encountered several problems with it: - - 1. 'pdcurses.h' does not exist; only 'curses.h'. Renamed it. - 2. 'curses.h' also defines chtype and attr_t. Commented out there. - 3. 'curses.h' also defines SCREEN. Commented out in 'CursesTyp.h'. - 4. `perl demo` fails - - Curses function 'TIESCALAR' called with too few arguments at - C:\cpan\Curses-1.14\blib\lib/Curses.pm line 82. - Compilation failed in require at demo line 11. diff --git a/Curses-1.23/MAINTENANCE b/Curses-1.23/MAINTENANCE deleted file mode 100644 index 9fdec5d..0000000 --- a/Curses-1.23/MAINTENANCE +++ /dev/null @@ -1,73 +0,0 @@ -These are notes for the maintainer. - -Steps to release: - - - Test the build: - - make realclean - Set up environment variables, c-config.h if required. - perl Makefile.PL PANELS MENUS FORMS - make - perl -Mblib -MCurses -e1 - - - make realclean - - - Update HISTORY file with description of new stuff and release date. - - - Update version number in Curses.pm (search for VERSION). - - - Make a tarball with something like this: - - tar --file=/tmp/Curses-1.07.tgz --gzip --create Curses-1.07 - - - Upload via pause.perl.org. Use "upload a file to CPAN" link. - You have to login to make that link appear. - - It goes into CPAN in the directory belonging to the user who - uploaded it. PAUSE gives you various options for uploading, tells - you how to follow the progress of the uploading and indexing, and - sends you emails about it. - - - PAUSE will automatically extract the README file from the tarball - and install it as e.g. Curses-1.07.readme - - - PAUSE will open the tarball automatically and index the packages it finds - in there by name (Curses::Window, Curses::Screen, etc.). - - It will find and index the package "Gen" and extract its README too. I'm - pretty sure this is wrong -- this looks like it's just supposed to be a - private thing used in the build. Someday, we should find a way to stop - this. - - -For Bryan's test system: - - export CURSES_LDFLAGS="-L/usr/link/ncurses -lncurses -ldl" - export CURSES_CFLAGS="-I/usr/include/ncurses" - - -GEN ---- - -The package is designed to have all the distributed code files -(Curses.pm, CursesFun.c, etc.) generated by the programs in gen/ . -This is supposed to handle the myriad Ncurses functions with less -tedium than manually editing the files. - -However, Bryan doesn't know how the Gen stuff works, so he has been -making the small updates necessary directly to the distributed files. -But the changes are modest, so it should be possible some day to -generate new files, diff to see what changed, and put those changes -into the Gen programs. - - -ppport.h --------- - -You generate this by running the function Devel::PPPort::WriteFile(). - -There shouldn't be any need to generate a new one unless there are -updates to the Devel::PPPort package. - -A comment in ppport.h says it was generated by Perl 5.006002. That's -a lie. diff --git a/Curses-1.23/MANIFEST b/Curses-1.23/MANIFEST deleted file mode 100644 index 415f893..0000000 --- a/Curses-1.23/MANIFEST +++ /dev/null @@ -1,70 +0,0 @@ -Artistic -Copying -Curses.c -Curses.pm -CursesBoot.c -CursesCon.c -CursesFun.c -CursesTyp.h -CursesVar.c -INSTALL -MANIFEST -Makefile.PL -README -cdemo.c -demo -demo.form -demo.menu -demo.panel -demo2 -gdc -gen/Gen.pm -gen/README -gen/increase-version -gen/list.con -gen/list.fun -gen/list.typ -gen/list.var -gen/make.Curses.pm -gen/make.CursesBoot.c -gen/make.CursesCon.c -gen/make.CursesFun.c -gen/make.CursesTyp.h -gen/make.CursesVar.c -gen/make.list.syms -hints/c-MSWin32.borland.h -hints/c-MSWin32.visualc.h -hints/c-aix.h -hints/c-bsd386.h -hints/c-bsdos.h -hints/c-cygwin.h -hints/c-darwin.h -hints/c-dec_osf.h -hints/c-dgux.h -hints/c-dynixptx.h -hints/c-freebsd.bsd.h -hints/c-freebsd.ncurses.h -hints/c-hpux.h -hints/c-irix.bsd.h -hints/c-irix.ncurses.h -hints/c-isc.h -hints/c-linux.bsd.h -hints/c-linux.ncurses.h -hints/c-netbsd.h -hints/c-next.h -hints/c-none.h -hints/c-openbsd.h -hints/c-os2.ncurses.h -hints/c-sco.h -hints/c-solaris.h -hints/c-sunos.bsd.h -hints/c-sunos.ncurses.h -hints/c-sunos.sysv.h -hints/c-svr4.h -hints/c-vms.h -list.syms -ppport.h -test.syms -testint.c -testsym.c -testtyp.c diff --git a/Curses-1.23/Makefile.PL b/Curses-1.23/Makefile.PL deleted file mode 100755 index dfadf92..0000000 --- a/Curses-1.23/Makefile.PL +++ /dev/null @@ -1,629 +0,0 @@ -#! /usr/bin/perl -w -## -## Makefile.PL -## -## Copyright (c) 1994-2000 William Setzer -## -## You may distribute under the terms of either the Artistic License -## or the GNU General Public License, as specified in the README file. - -require 5.005; -use strict; -#use warnings; Can't use; new since Perl 5.005; use perl -w instead -use ExtUtils::MakeMaker; -use English; - -# Here are the arguments defined for this file: -# -# PANELS -- enable panel functions -# MENUS -- enable menus functions -# FORMS -- enable forms functions -# GEN -- add generation function to Makefile (developers only!) -# -# Ex: "perl Makefile.PL PANELS MENUS GEN" - -# Environment variables tell us how one accesses the Curses library -# on this system. -# -# CURSES_LIBTYPE -# 'bsd', 'ncurses', or 'ncursesw' on most systems. -# In some environments, there are other possibilities. -# -# CURSES_CFLAGS -# CURSES_PANEL_CFLAGS -# CURSES_MENUS_CFLAGS -# CURSES_FORMS_CFLAGS -# contains any includes or defines (-I or -D) that are -# needed to compile libcurses applications -# -# CURSES_LDFLAGS -# CURSES_PANEL_LDFLAGS -# CURSES_MENUS_LDFLAGS -# CURSES_FORMS_LDFLAGS -# contains any libraries or library paths (-l or -L) that are -# needed to compile libcurses applications. This must be -# -l and -L options only -- we parse it. Note that if you -# specify something that doesn't result in MakeMaker finding -# a library, your value just gets silently ignored -- it -# won't show up in the make file. - - -# If these environment variables aren't set, we try in a fairly -# stupid fashion to pick them for you, along with a "c-config.h" file. - -my $libType = $ENV{'CURSES_LIBTYPE'}; - -my $inc = $ENV{'CURSES_CFLAGS'}; -my $libs = $ENV{'CURSES_LDFLAGS'}; - -my $panel_inc = $ENV{'CURSES_PANEL_CFLAGS'} || ''; -my $panel_libs = $ENV{'CURSES_PANEL_LDFLAGS'} || ''; - -my $menu_inc = $ENV{'CURSES_MENU_CFLAGS'} || ''; -my $menu_libs = $ENV{'CURSES_MENU_LDFLAGS'} || ''; - -my $form_inc = $ENV{'CURSES_FORM_CFLAGS'} || ''; -my $form_libs = $ENV{'CURSES_FORM_LDFLAGS'} || ''; - -# If you want to see examples of what needs to go in the $inc and -# $libs variables, check out the `guess_cfg' tables of values below. -# In fact, one way to set the variables would be to add or modify an -# entry for your 'osname'. If you're not sure what the osname is for -# your machine, you can use the following at your command line to -# print it out: -# -# perl -MConfig -le 'print $^O' -# -# Some lines have multiple versions (such as `freebsd' and `linux'), -# representing different versions of curses that an OS might have. -# You can pick the version you want by setting the `default' entry. - -# Here are some notes provided by the hint providers for certain of the -# OSes. You should scan them first to see if they apply to you. -# -# Notes for FreeBSD ncurses: -# [Courtesy of "Andrew V. Stesin" ] -# FreeBSD-2.0.5 ncurses + mytinfo NOTE! Straight curses works much -# better for me! -# -# Notes for Solaris: -# Under 2.3, it was reported that to get the module to compile properly -# with gcc, you must add `-DSYSV=1' to $inc. This will disable the -# redefinition of memcpy to bcopy that is present in /usr/include/curses.h. -# [Courtesy of Dave Blaszyk ] -# -# $inc also contained "-I/usr/include", but this seems to cause a great -# deal of trouble for gcc under perl5.002, so I removed it by default. -# I have tested Curses-a9 with perl5.002 and gcc263 and Sun's unbundled -# cc on Solaris 2.4 with an empty $inc and had no problems, but your -# mileage may vary. -# -# If you are having trouble compiling under Solaris, try various -# combinations of "-I/usr/include" and "-DSYSV=1" in $inc to see if -# it fixes things. - -## OS default guess for $inc default guess for $libs -# -my $guess_cfg = { - 'aix' => [ '' , '-lcurses -ltermcap' ], - 'bsd386' => [ '' , '-lcurses -ltermcap' ], - 'bsdos' => [ '' , '-lcurses -ltermcap' ], - 'cygwin' => [ '-I/usr/include/ncurses' , '-lncurses' ], - 'darwin' => [ '' , '-lcurses' ], - 'dec_osf' => [ '' , '-lcurses -ltermcap' ], - 'dgux' => [ '' , '-lcurses -ltermcap' ], - 'dynixptx' => [ '' , '-lcurses -lc' ], - 'freebsd' => { - 'bsd' => [ '' , '-lcurses -ltermcap' ], - 'ncurses' => [ '' , '-lncurses' ], - 'default' => 'bsd' - }, - 'hpux' => [ '' , '-lcurses -ltermcap' ], -# See INSTALL file for information about a different Curses library on HPUX. - 'irix' => { - 'bsd' => [ '' , '-lcurses -ltermcap' ], - 'ncurses' => [ '' , '-lncurses' ], - 'default' => 'bsd' - }, - 'isc' => [ '' , '-lcurses -ltermcap' ], - 'linux' => { - 'bsd' => [ '' , '-lcurses -ltermcap' ], - 'ncurses' => [ '-I/usr/include/ncurses' , '-lncurses' ], - 'default' => 'ncurses' - }, - 'netbsd' => [ '' , '-lcurses -ltermcap' ], - 'next' => [ '' , '-lcurses -ltermcap' ], - 'openbsd' => [ '' , '-lcurses -ltermcap' ], - 'os2' => { - 'bsd' => [ '' , '-lcurses -ltermcap' ], - 'ncurses' => [ '' , '-lncurses' ], - 'default' => 'ncurses' - }, - 'sco' => [ '' , '-lcurses -ltermcap' ], - 'solaris' => [ '' , '-L/usr/ccs/lib -lcurses' ], - 'sunos' => { - 'bsd' => [ '' , '-lcurses -ltermcap' ], - 'sysv' => [ '-I/usr/5include' , '-L/usr/5lib -lcurses' ], - 'ncurses' => [ '' , '-lncurses' ], - 'default' => 'sysv' - }, - 'VMS' => [ '' , 'sys$library:vaxccurse.olb' ], - 'svr4' => [ '' , '-lcurses' ], - 'MSWin32' => { - 'borland' => [ '-w- -Id:\bc5\include' , '-Ld:\bc5\lib pdcurses.lib' ], - 'visualc' => [ '' , 'pdcurses' ], - 'default' => 'visualc' - }, - '' => undef -}; - -### -## You shouldn't need to change anything below -# - -my $TRUE = 1; my $FALSE = 0; - - -sub nCursesIsInstalled() { - - if (-f('/usr/include/ncurses/ncurses.h')) { - return $TRUE; - } elsif (-f('/usr/include/ncurses.h')) { - return $TRUE; - } else { - return $FALSE; - } -} - - -sub bsdIsInstalled() { - - if (-f('/usr/include/curses/curses.h')) { - return $TRUE; - } elsif (-f('/usr/include/curses.h')) { - return $TRUE; - } else { - return $FALSE; - } -} - - - -sub chooseLibraryType($$) { - my ($typeList, $libtypR) = @_; -#----------------------------------------------------------------------------- -# Assuming this is a platform on which there may be multiple versions of -# Curses, choose one. -# -# Return the choice as $$libtypR. -# -# We prefer Ncurses, so choose that if it appears to be installed. -# If it doesn't, but BSD appears to be installed, we choose that. If -# we don't see either, we choose $libtypDefault. -#----------------------------------------------------------------------------- - if (0) { - } elsif ($typeList->{'ncurses'} && nCursesIsInstalled()) { - $$libtypR = 'ncurses'; - } elsif ($typeList->{'bsd'} && bsdIsInstalled()) { - $$libtypR = 'bsd'; - } else { - $$libtypR = $typeList->{'default'}; - } -} - - - -sub guessAtCursesLocation($$$) { - my ($libtypR, $incR, $libsR) = @_; -#----------------------------------------------------------------------------- -# Return as $$libtypR the type of Curses library we should use, e.g. -# 'ncurses', 'ncursesw' or 'bsd'. May be undefined if we don't think -# we have to choose between those on this system. -# -# Return as $$incR the -I option we think is appropriate to get the -# Curses interface header files. -# -# Return as $$libsR the -L and -l options we think are needed to link -# the main Curses library (doesn't cover panels/menus/forms). -#----------------------------------------------------------------------------- - print qq{Making a guess for -I and -L/-l options...\n}; - - # We need to move away from the inflexible $guess_cfg thing. For - # starters, we don't use it when the system looks like one with - # wide-character Ncurses. - - if (-f('/usr/include/ncursesw/ncurses.h')) { - $$incR = '-I/usr/include/ncursesw'; - $$libsR = '-lncursesw'; - $$libtypR = 'ncursesw'; - } else { - my $guess1 = $guess_cfg->{$OSNAME}; - my $libtyp; - # typically 'bsd' or 'ncurses'. Undefined if we think - # there's no choice of Curses version on this platform. - - my $guess; - if (ref $guess1 eq 'HASH') { - # For this platform, we have a choice of Curses library. - - chooseLibraryType($guess1, \$libtyp); - $guess = $guess1->{$libtyp}; - } else { - $guess = $guess1; - } - if (not defined $guess) { - print STDERR <<"EOW"; - -I'm sorry, but I could not make a good guess for the includes and -libraries that are needed. You will need to set the CURSES_ -environment variables as described in the INSTALL file. -OSNAME=$OSNAME -EOW - exit 1; - } - if (ref $guess ne 'ARRAY') { - die "FATAL: internal error: guess_cfg is bad"; - } - - if (!defined($libtyp)) { - if (0) { - } elsif (-f('/usr/include/ncurses/ncurses.h')) { - $inc = '-I/usr/include/ncurses'; - } elsif (-f('/usr/include/curses/curses.h')) { - $inc = '-I/usr/include/curses'; - } elsif (-f('/usr/include/ncurses.h')) { - $inc = ''; - } elsif (-f('/usr/include/curses.h')) { - $inc = ''; - } else { - $inc = $guess->[0]; - } - } else { - if ($libtyp eq 'ncurses') { - if (-f('/usr/include/ncurses/ncurses.h')) { - $inc = '-I/usr/include/ncurses'; - } elsif (-f('/usr/include/ncurses.h')) { - $inc = ''; - } else { - $inc = $guess->[0]; - } - } else { - if (-f('/usr/include/curses/curses.h')) { - $inc = '-I/usr/include/curses'; - } elsif (-f('/usr/include/curses.h')) { - $inc = ''; - } else { - $inc = $guess->[0]; - } - } - } - $libs = $guess->[1]; - - $$libtypR = $libtyp; - $$incR = $inc; - $$libsR = $libs; - } - print("Guesses:\n"); - print(" includes: '$$incR'\n"); - print(" libs: '$$libsR'\n"); - if (defined($$libtypR)) { - print(" Curses type: $$libtypR"); - } else { - print(" Curses type: irrelevant"); - } - print("\n"); -} - - - -sub defaultLibTypeForOs($) { - my ($osname) = @_; -#----------------------------------------------------------------------------- -# Return the default library type for OS named '$osname'; if we don't think -# there is a choice of library type on this OS, return undef. -#----------------------------------------------------------------------------- - my $libType; - - my $guess = $guess_cfg->{$OSNAME}; - - if (ref $guess eq 'HASH') { - # For this platform, we have a choice of Curses library. - - $libType = $guess->{'default'}; - } - return $libType; -} - - -# A "library class" is a more abstract categorization than a "library type." -# The difference between two library types is just compiler and linker -# options to choose the right library, but different library classes -# have bigger differences and can have different hints files. The -# library class is part of the hint file name. - -my %libClass = ( - 'bsd' => 'bsd', - 'ncurses' => 'ncurses', - 'ncursesw' => 'ncurses', - 'sysv' => 'sysv', - 'visualc' => 'visualc', - 'borland' => 'borland', -); - - - -sub makeConfigH($) { - my ($libType) = @_; -#----------------------------------------------------------------------------- -# $libType is the kind of Curses library we are using - e.g. 'bsd', -# 'ncurses', or 'ncursesw'. It may be undefined if there is no -# choice on this system. -#----------------------------------------------------------------------------- - print qq{Making a guess for "c-config.h"...\n}; - - my $libClass; - - if (defined($libType)) { - $libClass = $libClass{$libType}; - - if (!defined($libClass)) { - print STDERR ("Internal error: invalid library type '$libType' " . - "in makeConfigH()\n"); - exit 1; - } - } - my $hintsfile; - if (defined($libType) && -f("hints/c-$OSNAME.$libType.h")) { - $hintsfile = "hints/c-$OSNAME.$libType.h"; - } elsif (defined($libClass) && -f("hints/c-$OSNAME.$libClass.h")) { - $hintsfile = "hints/c-$OSNAME.$libClass.h"; - } else { - my $candidate = "hints/c-$OSNAME.h"; - if (-f($candidate)) { - $hintsfile = $candidate; - } else { - print STDERR <<"EOW"; - -I'm sorry, but I couldn't find a hints file that was configured for -your OS (named $candidate). You will need to create and configure a -"c-config.h" file for yourself. Please see the "INSTALL" directions -for pointers on how to do this. -EOW - exit 1; - } - } - - print("Choosing hints file '$hintsfile'\n"); - - eval "require File::Copy;"; - if (! $@) { - &File::Copy::copy($hintsfile, "c-config.h"); - } else { - my $cp; - - if ($OSNAME eq 'MSWin32') { $cp = "perl -MExtUtils::Command -e cp" } - elsif ($OSNAME eq 'VMS') { $cp = "copy/log" } - else { $cp = "cp" } - - my $sys = "$cp $hintsfile c-config.h"; - if ($sys =~ m!([^\\:\w/. -])!) { - print STDERR <<"EOW"; - -I'm sorry. I was going to try to create a "c-config.h" for you, but it -looks like there are some non-standard characters in the exec string. -I'm feeling rather paranoid, so I'll let you look at the line and do -it by hand if it looks OK. I wanted to execute a copy and thought I -might be able to use: - - $sys - -but it has the (possibly) naughty character '$1' in it. ' -EOW - exit 1; - } else { - system($sys); - } - } -} - - - - -sub guessPanelMenuFormLibs($$$$$) { - - my ($ncursesLibSearch, $libType, $panelLibsR, $menuLibsR, $formLibsR) = @_; - - my ($panelLibGuess, $menuLibGuess, $formLibGuess); - - if (defined($libType) && $libType eq "ncursesw") { - $panelLibGuess = -lpanelw; - $menuLibGuess = -lmenuw; - $formLibGuess = -lformw; - } else { - $panelLibGuess = -lpanel; - $menuLibGuess = -lmenu; - $formLibGuess = -lform; - } - $$panelLibsR = "$ncursesLibSearch $panelLibGuess"; - $$menuLibsR = "$ncursesLibSearch $menuLibGuess"; - $$formLibsR = "$ncursesLibSearch $formLibGuess"; -} - - - -my $gen; -my $panels; -my $menus; -my $forms; - -my @argv; -while (@ARGV) { - my $arg = shift; - - if ($arg eq 'GEN') { $gen = $arg } - elsif ($arg eq 'PANELS') { $panels = $arg } - elsif ($arg eq 'MENUS') { $menus = $arg } - elsif ($arg eq 'FORMS') { $forms = $arg } - else { push @argv, $arg } -} -@ARGV = @argv; # pass non-Curses arguments to MakeMaker - -print "GEN function: ", ($gen ? "enabled" : "not applicable"), "\n"; -print "PANELS functions: ", ($panels ? "enabled" : "not enabled"), "\n"; -print "MENUS functions: ", ($menus ? "enabled" : "not enabled"), "\n"; -print "FORMS functions: ", ($forms ? "enabled" : "not enabled"), "\n"; -print "\n"; - -if (defined($inc) && defined($libs)) { - # We have the info we need - if (!defined($libType)) { - $libType = defaultLibTypeForOs($OSNAME); - } -} elsif (defined($inc) || defined($libs) || defined($libType)) { - die("You must specify both CURSES_LDFLAGS and CURSES_CFLAGS " . - "environment variables or neither. "); -} else { - guessAtCursesLocation(\$libType, \$inc, \$libs); -} - -if (not -e "c-config.h") { - makeConfigH($libType); -} - -# Major cheese alert. Any -L for the curses library is probably -# also needed for the panels library. -# - -my $ncursesLibSearch; - -$ncursesLibSearch = ''; # initial value - -while ($libs =~ m{(-L\S+)}g) { - $ncursesLibSearch .= $1 . ' '; -} - -guessPanelMenuFormLibs($ncursesLibSearch, $libType, - \my $panelGuess, \my $menuGuess, \my $formGuess); - - -if ($panels and not $panel_libs) { - $panel_libs = $panelGuess; -} - -if ($menus and not $menu_libs) { - $menu_libs = $menuGuess; -} - -if ($forms and not $form_libs) { - $form_libs = $formGuess; -} -# Both Perl and Ncurses have a form.h. We have to include the Perl -# header files in our search path, but don't need form.h itself. -# Because the Curses form library header directory comes before the -# perl header directory in our search path, that isn't normally a -# problem. EXCEPT: when there is no specific Curses form library -# directory, and the Curses form.h is instead in the general system -# search path, e.g. /usr/include/form.h. The system directories come -# after the Perl directory in the search. There used to be a -# workaround here where we would simply add /usr/include to the front -# of the search path, but that is not only gross, but ineffective with -# some compilers, which ignore a -I option that adds a directory that -# is a system directory (e.g. gcc 3). - -# To deal with this, we make a rough check for the problem, and if it -# appears to exist, we tell the user to fix it. - -if ($forms and $form_inc !~ m{-I} and -f('/usr/include/form.h')) { - print("WARNING: Your Curses form.h file appears to be in the default\n"); - print("system search path, which will not work for us because of\n"); - print("the conflicting Perl form.h file. This means your 'make' will\n"); - print("probably fail unless you fix this, as described in the INSTALL\n"); - print("file.\n"); -} - -my $clean = 'CursesDef.h c-config.h cdemo testsym testint testtyp'; -my $realc = $gen - ? 'list.syms Curses.pm ' . - 'CursesFun.c CursesVar.c CursesCon.c CursesTyp.h CursesBoot.c' - : ""; - -my $components = - ($panels ? " PANELS " : "") . - ($menus ? " MENUS " : "") . - ($forms ? " FORMS " : ""); - -WriteMakefile(NAME => 'Curses', - INC => "$panel_inc $menu_inc $form_inc $inc", - LIBS => [ "$panel_libs $menu_libs $form_libs $libs" ], - H => [ 'CursesDef.h' ], - clean => { FILES => $clean }, - realclean => { FILES => $realc }, - dist => { COMPRESS => 'gzip -9f' }, - postamble => { COMPONENTS => $components }, - VERSION_FROM => 'Curses.pm', -); - -sub MY::postamble { - - my ($this, %args) = @_; - - my $echo = $OSNAME eq 'VMS' ? 'write sys$output' : 'echo'; - my $objext = $OSNAME eq 'MSWin32' ? 'obj' : 'o'; - my $mf = < /* not in perl.h ??? */ -#endif -#ifdef WIN32 -#include -#endif - -static void -sleepSeconds(unsigned int seconds) { - -#ifdef WIN32 - Sleep(seconds * 1000); -#else - sleep(seconds); -#endif -} - - - -int -main(unsigned int const argc, - const char ** const argv) { - - WINDOW *b; - chtype ch; - char str[250]; - int m, n; - - initscr(); - b = subwin(stdscr, 10, 20, 3, 3); - - noecho(); - cbreak(); - - move(0, 0); - addstr("ref b = "); - move(1, 1); - addstr("fooalpha"); - -#ifdef C_ATTRON -# ifdef A_BOLD - attron(A_BOLD); -# endif -#endif - move(2, 5); - addstr("bold "); -#ifdef C_ATTRON -# ifdef A_REVERSE - attron(A_REVERSE); -# endif -#endif - addstr("bold+reverse"); -#ifdef C_ATTRSET -# ifdef A_NORMAL - attrset(A_NORMAL); -# endif -#endif - addstr(" normal (if your curses can do these modes)"); - - move(6, 1); - addstr("do12345678901234567890n't worry be happy"); -#ifdef C_BOX - box(b, '|', '-'); -#endif - wstandout(b); - move(2, 2); - waddstr(b, "ping"); - wstandend(b); - move(4, 4); - waddstr(b, "pong"); - - wmove(b, 3, 3); - move(6, 3); - wdeleteln(b); - insertln(); - - move(4, 5); - wdelch(b); - move(7, 8); - insch('a'); - -#ifdef C_KEYPAD - keypad(stdscr, 1); -#endif - move(14, 0); - addstr("hit a key: "); - refresh(); - ch = getch(); - move(15, 0); - printw("you typed: >>%c<<", ch); - move(17, 0); - addstr("enter string: "); - refresh(); - getstr(str); - - move(18, 0); - printw("you typed: >>%s<<", str); - getyx(stdscr, m, n); - move(19, 4); - printw("y == %d (should be 18), x == %d", m, n); - - ch = mvinch(19, 7); - move(20, 0); - printw("The character at (19,7) is an '%c' (should be an '=')", ch); - - move(21, 0); - addstr("testing KEY_*. Hit the up arrow on your keyboard: "); - refresh(); - ch = getch(); - -#ifdef KEY_UP - if (ch == KEY_UP) { mvaddstr(22, 0, "KEY_UP was pressed!"); } - else { mvaddstr(22, 0, "Something else was pressed."); } -#else - move(22, 0); - addstr("You don't seem to have the KEY_UP macro"); -#endif - - move(LINES - 1, 0); - refresh(); - - sleepSeconds(5); - - endwin(); -} diff --git a/Curses-1.23/demo b/Curses-1.23/demo deleted file mode 100755 index f480a48..0000000 --- a/Curses-1.23/demo +++ /dev/null @@ -1,79 +0,0 @@ -#! /usr/bin/perl -## -## demo -- do some curses stuff -## -## Copyright (c) 1994-2000 William Setzer -## -## You may distribute under the terms of either the Artistic License -## or the GNU General Public License, as specified in the README file. - -use ExtUtils::testlib; -use Curses; - -initscr(); -$b = subwin(10, 20, 3, 3); - -noecho(); -cbreak(); - -addstr(0, 0, "ref b = " . ref $b); -addstr(1, 1, "fooalpha"); - -eval { attron(A_BOLD) }; -addstr(2, 5, "bold "); -eval { attron(A_REVERSE) }; -addstr("bold+reverse"); -eval { attrset(A_NORMAL) }; -addstr(" normal (if your curses supports these modes)"); - -addstr(6, 1, "do12345678901234567890n't worry be happy"); -eval { box($b, '|', '-') }; - -standout($b); -addstr($b, 2, 2, "ping"); -standend($b); -addstr($b, 4, 4, "pong"); - -move($b, 3, 3); -move(6, 3); -deleteln($b); -insertln(); - -delch($b, 4, 5); -insch(7, 8, ord(a)); - -eval { keypad(1) }; -addstr(14, 0, "hit a key: "); -refresh(); -$ch = getch(); - -addstr(15, 0, "you typed: >>"); -addch($ch); -addstr("<< and perl thinks you typed: >>$ch<<"); - -addstr(17, 0, "enter string: "); -refresh(); -getstr($str); - -addstr(18, 0, "you typed: >>$str<<"); -getyx($m, $n); -addstr(19, 4, "y == $m (should be 18), x == $n (should be " - . (15 + length $str) . ")"); - -$ch = inch(19, 7); -addstr(20, 0, "The character at (19,7) is an '$ch' (should be an '=')"); - -addstr(21, 0, "testing KEY_*. Hit the up arrow on your keyboard: "); -refresh(); -$ch = getch(); -eval -{ - if ($ch == KEY_UP) { addstr(22, 0, "KEY_UP was pressed!") } - else { addstr(22, 0, "Something else was pressed.") } - 1; -} || addstr(22, 0, "You don't seem to have the KEY_UP macro"); - -move($LINES - 1, 0); -refresh(); -sleep 2; -endwin(); diff --git a/Curses-1.23/demo.form b/Curses-1.23/demo.form deleted file mode 100755 index df3874e..0000000 --- a/Curses-1.23/demo.form +++ /dev/null @@ -1,199 +0,0 @@ -#! /usr//bin/perl -## - -use ExtUtils::testlib; -use Curses; - - -sub fatal { - clrtobot(0, 0); - addstr(0, 0, "@_\n"); - refresh(); - sleep 2; - exit 1; -} - - - -sub driveForm($$) { - my ($fwin, $form) = @_; - - while (1) { - my $ch = getch($fwin); - if ($ch == KEY_UP) { - form_driver($form, REQ_PREV_FIELD); - } elsif ($ch == KEY_DOWN or $ch eq "\t" or - $ch eq "\r" or $ch eq "\n") { - form_driver($form, REQ_NEXT_FIELD); - } elsif ($ch == KEY_LEFT) { - form_driver($form, REQ_LEFT_CHAR); - } elsif ($ch == KEY_RIGHT) { - form_driver($form, REQ_RIGHT_CHAR); - } elsif ($ch == KEY_NPAGE) { - form_driver($form, REQ_NEXT_PAGE); - } elsif ($ch == KEY_PPAGE) { - form_driver($form, REQ_PREV_PAGE); - } elsif ($ch == KEY_DC or ord($ch) == 8 or ord($ch) == 127) { - form_driver($form, REQ_DEL_PREV); - } elsif ($ch == KEY_F(1)) { - last; - } elsif ($ch =~ /^\S$/) { - form_driver($form, ord($ch)); - } else { - beep(); - } - } -} - - - -sub makeFields() { - - my $flist = [ - [ 'L', 0, 0, 0, 8, "Form" ], - [ 'L', 0, 0, 2, 0, "First Name" ], - [ 'F', 1, 15, 2, 12, "F Name" ], - [ 'L', 0, 0, 3, 0, "Last Name" ], - [ 'F', 1, 15, 3, 12, "L Name" ], - [ 'L', 0, 0, 5, 8, "Form (pt 2)" ], - [ 'L', 0, 0, 7, 0, "# Tuits" ], - [ 'F', 1, 5, 7, 12, "Tuits" ], - [ 'L', 0, 0, 8, 0, "# Bleems" ], - [ 'F', 1, 5, 8, 12, "Bleems" ] - ]; - - my @fl; - - foreach my $F (@$flist) { - my $field; - # This is a Perl reference to a scalar number variable. The - # number is the numerical equivalent (cast) of the C pointer to the - # executable-Curses FIELD object. The reference is blessed into - # package "Curses::Field", but don't confuse it with a Perl - # object. - - if ($F->[0] eq 'L') { - $field = new_field(1, length($F->[5]), $F->[3], $F->[4], 0, 0); - if ($field eq '') { - fatal("new_field $F->[5] failed"); - } - set_field_buffer($field, 0, $F->[5]); - field_opts_off($field, O_ACTIVE); - field_opts_off($field, O_EDIT); - } elsif ($F->[0] eq 'F') { - $field = new_field($F->[1], $F->[2], $F->[3], $F->[4], 0, 0); - if ($field eq '') { - fatal("new_field $F->[5] failed"); - } - if ($F->[5] eq "Tuits") { - set_field_buffer($field, 0, $F->[5]); - } - set_field_back($field, A_UNDERLINE); - } - - push(@fl, $field); - } - return @fl; -} - - - -sub makeForm(@) { - - my @fl = @_; - - my @pack; - foreach $fieldR (@fl) { - push(@pack, $ {$fieldR}); - } - push(@pack, 0); - - # new_form()'s argument is a list of fields. Its form is amazingly - # complex: - - # The argument is a string whose ASCII encoding is an array of C - # pointers. Each pointer is to a FIELD object of the - # executable-Curses library, except the last is NULL to mark the - # end of the list. For example, assume there are two fields and - # the executable-Curses library represents them with FIELD objects - # whose addresses (pointers) are 0x11223344 and 0x0004080C. The - # argument to Curses::new_form() is a 12 character string whose - # ASCII encoding is 0x112233440004080C00000000 . - - # Maybe some day we can provide an alternative where there is an - # actual Perl field object class and the argument is a reference to - # a Perl list of them. - - my $form = new_form(pack('L!*', @pack)); - if ($form eq '') { - fatal("new_form failed"); - } - return $form; -} - - - -sub demo() { - - noecho(); - - eval { new_form() }; - if ($@ =~ m{not defined by your vendor}) { - print STDERR "Curses was not compiled with form function.\n"; - exit 1; - } - - my @fl = makeFields(); - - my $form = makeForm(@fl); - - my $rows; - my $cols; - - scale_form($form, $rows, $cols); - - my $fwin = newwin($rows + 2, $cols + 4, 4, 0); - my $fsub = derwin($fwin, $rows, $cols, 1, 2); - - set_form_win($form, $fwin); - set_form_sub($form, $fsub); - - box($fwin, 0, 0); - keypad($fwin, 1); - - post_form($form); - - addstr(0, 0, "Use KEY_UP/KEY_DOWN/KEY_PPAGE/KEY_NPAGE to navigate"); - addstr(1, 0, "Press 'ENTER' to select item, or 'F1' to exit"); - addstr(2, 0, "Other alphanumeric characters will enter data"); - refresh(); - - driveForm($fwin, $form); - - unpost_form($form); - delwin($fwin); - free_form($form); - map { free_field($_) } @fl; -} - - - -############################################################################## -# MAINLINE -############################################################################## - -initscr(); - -# The eval makes sure if it croaks, we have a chance to restore the -# terminal. - -eval { demo() }; - -endwin(); - -if ($@) { - print STDERR "Failed. $@\n"; - exit(1); -} - -exit(0); diff --git a/Curses-1.23/demo.menu b/Curses-1.23/demo.menu deleted file mode 100755 index ff7f49e..0000000 --- a/Curses-1.23/demo.menu +++ /dev/null @@ -1,121 +0,0 @@ -#! /usr/bin/perl -## -## This code contributed by Yury Pshenichny -## based on demo.panel by Chris Leach -## and pretty much redone by me - -use ExtUtils::testlib; -use Curses; - -eval { new_menu() }; -if ($@ =~ /not defined by your vendor/) { - print STDERR "Curses was not compiled with menu support.\n"; - exit 1; -} - -my $ilist = [ - [ "AAA" => "A descr" ], - [ "BBB" => "B descr" ], - [ "CCC" => "C descr" ], - [ "DDD" => "D descr" ], - [ "EEE" => "E descr" ], - [ "FFF" => "F descr" ], - [ "GGG" => "G descr" ], - [ "HHH" => "H descr (This item has a very long descr) "] -]; - -initscr; -noecho; - -my @il; -my @pack; - -foreach my $I (@$ilist) { - my $item = new_item($I->[0], $I->[1]); - - if ($item eq '') { fatal("new_item($I->[0], $I->[1]) failed: $item") } - push @il, $item; - push @pack, ${$item}; -} -push @pack, 0; - -my $menu = new_menu(pack "L!*", @pack); -if ($menu eq '') { fatal("new_menu failed") } - -my $rows; -my $cols; - -set_menu_mark($menu, '->'); -set_menu_format($menu, 3, 1); -scale_menu($menu, $rows, $cols); - -my $mwin = newwin($rows + 2, $cols + 2, 8, 15); -my $msub = derwin($mwin, $rows, $cols, 1, 1); - -set_menu_win($menu, $mwin); -set_menu_sub($menu, $msub); - -box($mwin, 0, 0); -keypad($mwin, 1); - -post_menu($menu); - -addstr(0, 0, "Use KEY_UP/KEY_DOWN/KEY_PPAGE/KEY_NPAGE to navigate"); -addstr(1, 0, "Press 'ENTER' to select item, or 'F1' to exit"); -refresh(); - -my $ci; -while(1) { - my $ch = getch($mwin); - if ($ch == KEY_UP) { - menu_driver($menu, REQ_UP_ITEM); - } - elsif ($ch == KEY_DOWN) { - menu_driver($menu, REQ_DOWN_ITEM); - } - elsif ($ch == KEY_PPAGE) { - menu_driver($menu, REQ_SCR_UPAGE); - } - elsif ($ch == KEY_NPAGE) { - menu_driver($menu, REQ_SCR_DPAGE); - } - elsif ($ch == KEY_F(1)) { - last; - } - elsif ($ch eq "\r" or $ch eq "\n") { - $ci = current_item($menu); - last; - } - elsif ($ch =~ /^\S$/) { - menu_driver($menu, $ch); - } - else { - beep(); - } -} - -if ($ci) { - addstr(0, 0, "You selected " . item_name($ci) . "\n"); -} -else { - addstr(0, 0, "You didn't select anything\n"); -} -clrtoeol(1,0); -refresh(); -sleep 2; - -unpost_menu($menu); -delwin($mwin); -free_menu($menu); -map { free_item($_) } @il; -endwin(); - -exit 0; - -sub fatal { - clrtobot(0, 0); - addstr(0, 0, "@_\n"); - refresh(); - sleep 2; - exit 1; -} diff --git a/Curses-1.23/demo.panel b/Curses-1.23/demo.panel deleted file mode 100755 index 9ca749c..0000000 --- a/Curses-1.23/demo.panel +++ /dev/null @@ -1,80 +0,0 @@ -#! /usr/bin/perl -## -## This code contributed by Chris Leach - -use ExtUtils::testlib; -use Curses; - -eval { new_panel() }; -if ($@ =~ /not defined by your vendor/) { - print STDERR "Curses was not compiled with panel support.\n"; - exit 1; -} - -my $p1 = mkpanel("000"); -message("New Panel with 000's"); - -my $p2 = mkpanel("+++"); -move_panel($p1, 8, 20); -message("New Panel with +++'s"); - -hide_panel($p1); -message("Hiding 000's"); -message("000's hidden? ", panel_hidden($p1) ? "Yes" : "No"); - -show_panel($p1); -message("Showing 000's"); - -my $p3 = mkpanel("XXX"); -move_panel($p3, 7, 34); -message("New Panel with XXX's"); - -top_panel(panel_above(panel_above(undef))); -message("Moving the panel above the bottom panel to the top"); - -bottom_panel(panel_below(panel_below(undef))); -message("Moving the panel below the top panel to the bottom"); - -my $w3 = panel_window($p3); -del_panel($p3); -message("Deleting panel with XXX's saving window"); - -replace_panel($p1, $w3); -message("Replacing 000's window"); - -del_panel($p2); -del_panel($p1); -endwin(); - -sub mkpanel { - my $s = shift; - my $w = Curses->new(10, 26, 12, 25); - die unless $w; - - box($w, 0, 0); - my $p = new_panel($w); - - if ($p) { - set_panel_userptr($p, $s); - - foreach my $r (1..8) { - addstr($w, $r, 3*$r-2, $s); - } - } - else { - fatal("new_panel failed"); - } - $p; -} - -sub message { - addstr(stdscr, 0, 0, "@_\n"); - update_panels(); - doupdate(); - sleep 2; -} - -sub fatal { - message("@_"); - exit 1; -} diff --git a/Curses-1.23/demo2 b/Curses-1.23/demo2 deleted file mode 100755 index ac09d0e..0000000 --- a/Curses-1.23/demo2 +++ /dev/null @@ -1,78 +0,0 @@ -#! /usr/bin/perl -## -## demo2 -- play around with some weird stuff, use object model -## -## Copyright (c) 2000 William Setzer -## -## You may distribute under the terms of either the Artistic License -## or the GNU General Public License, as specified in the README file. - -use ExtUtils::testlib; -use Curses; - -sub message { - my $win = shift; - - $win->addstr(0, 0, "@_\n"); - $win->addstr(3, 4, "-->"); - $win->move($LINES - 1, 0); - $win->refresh(); - sleep 2; -} - -my $win = Curses->new or die "Can't get new window\n"; - -## You have to pack chtypes. Be sure to get that trailing zero. -# -eval { - my $chstr = pack "I*", - ACS_BLOCK, ord(A), ACS_CKBOARD, ord(B), ACS_PLMINUS, 0; - - $win->addchstr(3, 8, $chstr); - message $win, "addchstr: block, A, checkerboard, B, plus/minus"; -}; - -$win->clrtoeol(3, 8); - -## Attrs -# -eval { - $win->attron(A_BOLD|A_UNDERLINE); - $win->addstr(3, 8, "hello"); - $win->attrset(0); - message $win, "attr: BOLD|UNDERLINE"; - $win->attron(A_BOLD|A_UNDERLINE); - $win->attroff(A_BOLD); - $win->addstr(3, 8, "hello"); - $win->attrset(0); - message $win, "attr: UNDERLINE"; -}; - -$win->clrtoeol(3, 8); - -## Color -# -eval { - start_color; - init_pair 1, COLOR_GREEN, COLOR_BLACK; - init_pair 2, COLOR_RED, COLOR_BLACK; - - my $GREEN = COLOR_PAIR(1); - my $RED = COLOR_PAIR(2); - - $win->attron($RED); - $win->addstr(3, 8, "hello"); - $win->attroff($RED); - message $win, "color: red"; - $win->attron($GREEN); - $win->addstr(3, 8, "hello"); - $win->attroff($GREEN); - message $win, "color: green"; - - my $chstr = $RED | ACS_CKBOARD; - $win->clrtoeol(3, 8); - $win->addch(3, 8, $chstr); - message $win, "addch: red checkerboard"; -}; - -endwin(); diff --git a/Curses-1.23/gdc b/Curses-1.23/gdc deleted file mode 100755 index 58a132c..0000000 --- a/Curses-1.23/gdc +++ /dev/null @@ -1,150 +0,0 @@ -#! /usr/bin/perl - -# This file a port from test/gdc.c in the ncurses-1.9.8a distribution. -# No copyright license is publicly offered, but I don't think the -# writer would mind the port. It's not exact, because I was -# simplifying things to find a bug in my port. -# -# Also note that this is basically a direct port. If it looks like C -# written in perl, that's because it is. :-) -# -# /* -# * Grand digital clock for curses compatible terminals -# * Usage: gdc [-s] [n] -- run for n seconds (default infinity) -# * Flags: -s: scroll -# * -# * modified 10-18-89 for curses (jrl) -# * 10-18-89 added signal handling -# */ - -use ExtUtils::testlib; -use Curses; - -$YBASE = 10; -$XBASE = 10; -$YDEPTH = 5; -$XLENGTH = 54; - -@disp = (075557, 011111, 071747, 071717, 055711, 074717, - 074757, 071111, 075757, 075717, 002020); - - -$SIG{INT} = \&sighndl; -$SIG{TERM} = \&sighndl; - -initscr(); -cbreak(); -noecho(); -clear(); -refresh(); - -$n = -1; -for (@ARGV) { - /-s/ and $scroll = 1; - $n = $_; -} -$hascolor = eval { has_colors() }; - -if ($hascolor) { - start_color(); - init_pair(1, COLOR_BLACK, COLOR_RED); - init_pair(2, COLOR_RED, COLOR_BLACK); - init_pair(3, COLOR_WHITE, COLOR_BLACK); - attrset(COLOR_PAIR(3)); - - addch($YBASE - 1, $XBASE - 1, ACS_ULCORNER); - hline(ACS_HLINE, $XLENGTH); - addch($YBASE - 1, $XBASE + $XLENGTH, ACS_URCORNER); - - addch($YBASE + $YDEPTH, $XBASE - 1, ACS_LLCORNER); - hline(ACS_HLINE, $XLENGTH); - addch($YBASE + $YDEPTH, $XBASE + $XLENGTH, ACS_LRCORNER); - - move($YBASE, $XBASE - 1); - vline(ACS_VLINE, $YDEPTH); - - move($YBASE, $XBASE + $XLENGTH); - vline(ACS_VLINE, $YDEPTH); - - attrset(COLOR_PAIR(2)); -} - -while ($n--) { - $mask = 0; - $time = time; - my($sec, $min, $hour) = localtime $time; - set($sec % 10, 0); - set($sec / 10, 4); - set($min % 10, 10); - set($min / 10, 14); - set($hour % 10, 20); - set($hour / 10, 24); - set(10, 7); - set(10, 17); - foreach $k (0..5) { - if($scroll) { - foreach $i (0..4) { - $new[$i] = ($new[$i] & ~$mask) | ($new[$i+1] & $mask); - } - $new[5] = ($new[5] & ~$mask) | ($next[$k] & $mask); - } - else { $new[$k] = ($new[$k] & ~$mask) | ($next[$k] & $mask) } - $next[$k] = 0; - for($s = 1; $s >= 0; $s--) { - standt($s); - foreach $i (0..5) { - if($a = (($new[$i] ^ $old[$i]) & ($s ? $new[$i] : $old[$i]))) { - for ($j = 0, $t = 1 << 26; $t; $t >>= 1, $j++) { - if($a & $t) { - if(!($a & ($t << 1))) { - move($YBASE + $i, $XBASE + 2*$j); - } - addstr(" "); - } - } - } - if(!$s) { $old[$i] = $new[$i]; } - } - } - refresh(); - } -# /* this depends on the detailed format of ctime(3) */ - my($ctime) = scalar localtime $time; - addstr(16, 30, substr($ctime, 0, 10) . substr($ctime, 19)); - - move(0, 0); - refresh(); - sleep(1); - if ($sigtermed) { - last; - } -} -standend(); -clear(); -refresh(); -endwin(); -print STDERR "gdc terminated by signal $sigtermed\n" if $sigtermed; - -sub set { - my($t, $n) = @_; - my($m) = 7 << $n; - - foreach $i (0..4) { - $next[$i] |= (($disp[$t] >> (4-$i)*3) & 07) << $n; - $mask |= ($next[$i] ^ $old[$i]) & $m; - } - if ($mask & $m) { $mask |= $m } -} - -sub standt { - my($on) = @_; - - if ($on) { $hascolor ? attron(COLOR_PAIR(1)) : standout() } - else { $hascolor ? attron(COLOR_PAIR(2)) : standend() } -} - -sub sighndl { - local($sig) = @_; - - $sigtermed = $sig; -} diff --git a/Curses-1.23/gen/Gen.pm b/Curses-1.23/gen/Gen.pm deleted file mode 100644 index 3683226..0000000 --- a/Curses-1.23/gen/Gen.pm +++ /dev/null @@ -1,468 +0,0 @@ -package Gen; - -@ISA = qw(Exporter); -@EXPORT = qw(lookup Q process_DATA_chunk - process_functions process_variables process_constants - process_typedefs); - -my $list_fun = "gen/list.fun"; -my $list_var = "gen/list.var"; -my $list_con = "gen/list.con"; -my $list_typ = "gen/list.typ"; - -### -## Declaration entries -# -my $MAP = { - 'attr_t' => { - 'DECL_NOR' => '(attr_t)SvIV($A)', - 'RETN_NOR' => 'sv_setiv($A, (IV)$N)', - 'TEST_NOR' => '0', - 'DECL_OUT' => '0', - 'RETN_OUT' => 'sv_setiv($A, (IV)$N);', - 'TEST_OUT' => 'LINES', - 'RETN_NUL' => 'ERR', - }, - - 'bool' => { - 'DECL_NOR' => '(int)SvIV($A)', - 'RETN_NOR' => 'sv_setiv($A, (IV)$N)', - 'TEST_NOR' => '0', - 'RETN_NUL' => 'ERR', - }, - - 'char' => { - 'RETN_NOR' => 'sv_setpvn($A, (char *)&$N, 1)', - 'RETN_NUL' => 'ERR', - }, - - 'char *' => { - 'DECL_NOR' => '(char *)SvPV($A,PL_na)', - 'RETN_NOR' => 'sv_setpv((SV*)$A, $N)', - 'TEST_NOR' => '0', - 'DECL_OUT' => '(char *)sv_grow($A, $B)', - 'RETN_OUT' => 'c_setchar($A, $N)', - 'TEST_OUT' => '0', - 'DECL_OPT' => '$A != &PL_sv_undef ? (char *)SvPV($A,PL_na) : NULL', - 'TEST_OPT' => '0', - 'RETN_NUL' => 'NULL', - }, - - 'chtype' => { - 'DECL_NOR' => 'c_sv2chtype($A)', - 'RETN_NOR' => 'c_chtype2sv($A, $N)', - 'TEST_NOR' => '0', - 'RETN_NUL' => 'ERR', - }, - - 'chtype *' => { - 'DECL_NOR' => '(chtype *)SvPV($A,PL_na)', - 'TEST_NOR' => '0', - 'DECL_OUT' => '(chtype *)sv_grow($A, ($B)*sizeof(chtype))', - 'RETN_OUT' => 'c_setchtype($A, $N)', - 'TEST_OUT' => '0', - }, - - 'FIELD *' => { - 'DECL_NOR' => 'c_sv2field($A, $B)', - 'RETN_NOR' => 'c_field2sv($A, $N)', - 'TEST_NOR' => '0', - 'RETN_NUL' => 'NULL', - }, - - 'FIELD **' => { - 'DECL_NOR' => '(FIELD **)SvPV($A,PL_na)', - 'RETN_NOR' => 'sv_setpv((SV*)$A, (char *)$N)', - 'TEST_NOR' => '0', - 'RETN_NUL' => '0', - }, - - 'FILE *' => { - 'DECL_NOR' => 'IoIFP(sv_2io($A))', - 'TEST_NOR' => '0', - }, - - 'FORM *' => { - 'DECL_NOR' => 'c_sv2form($A, $B)', - 'RETN_NOR' => 'c_form2sv($A, $N)', - 'TEST_NOR' => '0', - 'RETN_NUL' => 'NULL', - }, - - 'int' => { - 'DECL_NOR' => '(int)SvIV($A)', - 'RETN_NOR' => 'sv_setiv($A, (IV)$N)', - 'TEST_NOR' => '0', - 'DECL_OUT' => '0', - 'RETN_OUT' => 'sv_setiv($A, (IV)$N);', - 'TEST_OUT' => 'LINES', - 'RETN_NUL' => 'ERR', - }, - - 'ITEM *' => { - 'DECL_NOR' => 'c_sv2item($A, $B)', - 'RETN_NOR' => 'c_item2sv($A, $N)', - 'TEST_NOR' => '0', - 'RETN_NUL' => 'NULL', - }, - - 'ITEM **' => { - 'DECL_NOR' => '(ITEM **)SvPV($A,PL_na)', - 'RETN_NOR' => 'sv_setpv((SV*)$A, (char *)$N)', - 'TEST_NOR' => '0', - 'RETN_NUL' => '0', - }, - - 'MENU *' => { - 'DECL_NOR' => 'c_sv2menu($A, $B)', - 'RETN_NOR' => 'c_menu2sv($A, $N)', - 'TEST_NOR' => '0', - 'RETN_NUL' => 'NULL', - }, - - 'MEVENT *' => { - 'DECL_NOR' => '(MEVENT *)SvPV($A,PL_na)', - 'TEST_NOR' => '0', - 'DECL_OUT' => '(MEVENT *)sv_grow($A, 2 * sizeof(MEVENT))', - 'RETN_OUT' => 'c_setmevent($A, $N)', - 'TEST_OUT' => '0', - }, - - 'mmask_t' => { - 'DECL_NOR' => '(mmask_t)SvIV($A)', - 'RETN_NOR' => 'sv_setiv($A, (IV)$N)', - 'TEST_NOR' => '0', - 'DECL_OUT' => '0', - 'RETN_OUT' => 'sv_setiv($A, (IV)$N);', - 'TEST_OUT' => 'LINES', - 'RETN_NUL' => 'ERR', - }, - - 'PANEL *' => { - 'DECL_NOR' => 'c_sv2panel($A, $B)', - 'RETN_NOR' => 'c_panel2sv($A, $N)', - 'TEST_NOR' => '0', - 'DECL_OPT' => '$A != &PL_sv_undef ? c_sv2panel($A, $B) : NULL', - 'TEST_OPT' => '0', - 'RETN_NUL' => 'NULL', - }, - - 'SCREEN *' => { - 'DECL_NOR' => 'c_sv2screen($A, $B)', - 'RETN_NOR' => 'c_screen2sv($A, $N)', - 'TEST_NOR' => '0', - 'RETN_NUL' => 'NULL', - }, - - 'short' => { - 'DECL_NOR' => '(short)SvIV($A)', - 'TEST_NOR' => '0', - 'DECL_OUT' => '0', - 'RETN_OUT' => 'sv_setiv($A, (IV)$N);', - 'TEST_OUT' => 'LINES', - }, - - 'void' => { - 'RETN_NOR' => 'not gonna happen', - 'RETN_NUL' => 'not gonna happen', - }, - - 'void *' => { - 'DECL_NOR' => '0', - 'TEST_NOR' => '0', - }, - - 'WINDOW *' => { - 'DECL_NOR' => 'c_sv2window($A, $B)', - 'RETN_NOR' => 'c_window2sv($A, $N)', - 'TEST_NOR' => 'stdscr', - 'RETN_NUL' => 'NULL', - } -}; - -## Allow us to put some quoting around here documents to make them stand out -# -sub Q { - my $text = shift; - - $text =~ s/^#{16}\n//mg; - $text =~ s/^#\t?//mg; - $text; -} - -## Print a chunk of data, 'til we hit PAUSE -# -sub process_DATA_chunk { - my $proc = shift; - my ($pkg) = (caller)[0]; - - *DATA = *{"${pkg}::DATA"}; - - while () { - last if /^PAUSE$/; - - &{$proc}($_); - } -} - -my $pattern = '^\s* (?:const \s+)? ( (?:[{<|] [^}>|]+ [}>|])* )' . - '\s* (\S+ (?: \s+ \*+)?) \s* ( [{<|] \w+ [}>|] )* \s* (\w+)'; - - -sub process_functions { - my $proc = shift; - my $numf = 1; - - open INF, $list_fun or die "Can't open $list_fun: $!\n"; - - FCN: - while () { - next if /^!/; - - while (s/\\\n//) { - $_ .= ; - die "$list_fun: Unterminated backslash\n" if eof; - } - - my $fun = { - LINE => $_, - DOIT => 0 - }; - - if (/^> (.+) \( (.+) \) ; /x) { - my $lhs = $1; - my $args = $2; - - unless ($lhs =~ /$pattern/xo) { - warn "$lhs($args): bad function prototype\n"; - next FCN; - } - - $fun->{SPEC} = $1; - $fun->{DECL} = $2; - $fun->{UNI} = $3; - $fun->{NAME} = $4; - $fun->{DOIT} = 1; - $fun->{NUM} = $numf++; - $fun->{ARGV} = [ ]; - - $fun->{SPEC} = { map { uc($_) => 1 } $fun->{SPEC} =~ /{(.+?)}/g }; - $fun->{W} = $fun->{UNI} && $fun->{UNI} =~ /[{|]/ ? 'w' : ''; - my $argc = 0; - foreach my $entry (split /\s*,\s*/, $args) { - next if $entry eq 'void'; - - unless ($entry =~ /$pattern/xo) { - warn "$fun->{NAME}( $entry ): bad arg prototype\n"; - next FCN; - } - - my $arg = $fun->{ARGV}[$argc] = { }; - $arg->{SPEC} = $1; - $arg->{DECL} = $2; - $arg->{NAME} = $4; - - $arg->{SPEC} = { map { /=/ ? (uc($`) => $') : (uc($_) => 1) } - $arg->{SPEC} =~ /{(.+?(?:=.+?)?)}/g }; - - $arg->{MAP} = { }; - $arg->{NUM} = $argc++; - - my $typ = 'NOR'; - if ($arg->{SPEC}{OUT}) { $typ = 'OUT' } - elsif ($arg->{SPEC}{OPT}) { $typ = 'OPT' } - - my $decl = $MAP->{$arg->{DECL}}{"DECL_$typ"}; - if (not defined $decl) { - warn "$fun->{NAME}( $arg->{DECL} $arg->{NAME} ): " . - "no map rewrite for DECL_$typ\n"; - next FCN; - } - $arg->{M_DECL} = $decl; - - if ($typ eq 'OUT') { - my $retn = $MAP->{$arg->{DECL}}{"RETN_$typ"}; - if (not defined $retn) { - warn "$fun->{NAME}( $arg->{DECL} $arg->{NAME} ): " . - "no map rewrite for RETN_$typ\n"; - next FCN; - } - $arg->{M_RETN} = $retn; - } - - my $test = $MAP->{$arg->{DECL}}{"TEST_$typ"}; - if (not defined $test) { - warn "$fun->{NAME}( $arg->{DECL} $arg->{NAME} ): " . - "no map rewrite for TEST_$typ\n"; - next FCN; - } - $arg->{M_TEST} = $test; - } - - my $retn = $MAP->{$fun->{DECL}}{RETN_NOR}; - if (not defined $retn) { - warn "$fun->{DECL} $fun->{NAME}( ): " . - "no map rewrite for RETN_NOR\n"; - next FCN; - } - - my $null = $MAP->{$fun->{DECL}}{RETN_NUL}; - if (not defined $null) { - warn "$fun->{DECL} $fun->{NAME}( ): " . - "no map rewrite for RETN_NUL\n"; - next FCN; - } - - $fun->{M_RETN} = $retn; - $fun->{M_NULL} = $null; - $fun->{ARGC} = $argc; - } - &{$proc}($fun); - } - - close INF; -} - -sub process_variables { - my $proc = shift; - my $numv = 1; - - open INV, $list_var or die "Can't open $list_var: $!\n"; - - while () { - next if /^!/; - - while (s/\\\n//) { - $_ .= ; - die "$list_var: Unterminated backslash\n" if eof; - } - - my $var = { - LINE => $_, - DOIT => 0 - }; - - if (/^> (.+) ; /x) { - my $lhs = $1; - - unless ($lhs =~ /$pattern/xo) { - warn "$lhs: bad variable prototype\n"; - next; - } - - $var->{SPEC} = $1; - $var->{DECL} = $2; - $var->{NAME} = $4; - $var->{DOIT} = 1; - $var->{NUM} = $numv++; - - $var->{SPEC} = { map { uc($_) => 1 } $var->{SPEC} =~ /{(.+?)}/g }; - - my $decl = $MAP->{$var->{DECL}}{DECL_NOR}; - if (not defined $decl) { - warn "$var->{DECL} $var->{NAME}: " . - "no map rewrite for DECL_$typ\n"; - next; - } - - my $retn = $MAP->{$var->{DECL}}{RETN_NOR}; - if (not defined $retn) { - warn "$var->{DECL} $var->{NAME}: " . - "no map rewrite for RETN_NOR\n"; - next; - } - - $var->{M_DECL} = $decl; - $var->{M_RETN} = $retn; - } - &{$proc}($var); - } - - close INV; -} - -sub process_constants { - my $proc = shift; - my $numc = 1; - - open INC, $list_con or die "Can't open $list_con: $!\n"; - - while () { - next if /^!/; - - while (s/\\\n//) { - $_ .= ; - die "$list_con: Unterminated backslash\n" if eof; - } - - my $con = { - LINE => $_, - DOIT => 0 - }; - - if (/^> (.+) ; /x) { - my $lhs = $1; - - unless ($lhs =~ /$pattern/xo) { - warn "$lhs: bad variable prototype\n"; - next; - } - - $con->{SPEC} = $1; - $con->{DECL} = $2; - $con->{NAME} = $4; - $con->{DOIT} = 1; - $con->{NUM} = $numc++; - - $con->{SPEC} = { map { uc($_) => 1 } $con->{SPEC} =~ /{(.+?)}/g }; - - } - &{$proc}($con); - } - - close INC; -} - -sub process_typedefs { - my $proc = shift; - my $numt = 1; - - open INT, $list_typ or die "Can't open $list_typ: $!\n"; - - while () { - next if /^!/; - - while (s/\\\n//) { - $_ .= ; - die "$list_typ: Unterminated backslash\n" if eof; - } - - my $typ = { - LINE => $_, - DOIT => 0 - }; - - if (/^> \s+ (.+) /x) { - my $lhs = $1; - - unless ($lhs =~ /$pattern/xo) { - warn "$lhs: bad typedef prototype\n"; - next; - } - - $typ->{SPEC} = $1; - $typ->{DECL} = $2; - $typ->{NAME} = $4; - $typ->{DOIT} = 1; - $typ->{NUM} = $numt++; - - $typ->{SPEC} = { map { uc($_) => 1 } $typ->{SPEC} =~ /{(.+?)}/g }; - - } - &{$proc}($typ); - } - - close INT; -} - -1; diff --git a/Curses-1.23/gen/README b/Curses-1.23/gen/README deleted file mode 100644 index ad3d7b9..0000000 --- a/Curses-1.23/gen/README +++ /dev/null @@ -1,5 +0,0 @@ -The files in this directory do all the real work. Someday I might -document them, but for now you'll just have to "read the source, Luke". - - -William diff --git a/Curses-1.23/gen/increase-version b/Curses-1.23/gen/increase-version deleted file mode 100755 index f9f1dac..0000000 --- a/Curses-1.23/gen/increase-version +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/sh -## -## incrase-version -- Increases version number everywhere -## -## Copyright (c) 2000 William Setzer -## -## You may distribute under the terms of either the Artistic License -## or the GNU General Public License, as specified in the README file. -## -## (but why would you want to?) - -if [ "$1" = "" ]; then - echo "Usage: $0 " - exit 1 -fi - -vers=$1 -perl="/usr/local/bin/perl -p -i.bak -e" - -$perl "s/^(.VERSION = )\d+\.\d+/\${1}$vers/" gen/make.Curses.pm -$perl "s/(Curses-)\d+\.\d+/\${1}$vers/" INSTALL -$perl "s/(VERSION\s+=>\s+')\d+\.\d+/\${1}$vers/" Makefile.PL diff --git a/Curses-1.23/gen/list.con b/Curses-1.23/gen/list.con deleted file mode 100644 index 19ac543..0000000 --- a/Curses-1.23/gen/list.con +++ /dev/null @@ -1,304 +0,0 @@ -> int ERR; -> int OK; - -!! These aren't really constants, but act like them. They don't exist -!! until initscr()/newterm() have been called, so I'm gonna make functions -!! out of them. -!! -> {defer} int ACS_BLOCK; -> {defer} int ACS_BOARD; -> {defer} int ACS_BTEE; -> {defer} int ACS_BULLET; -> {defer} int ACS_CKBOARD; -> {defer} int ACS_DARROW; -> {defer} int ACS_DEGREE; -> {defer} int ACS_DIAMOND; -> {defer} int ACS_HLINE; -> {defer} int ACS_LANTERN; -> {defer} int ACS_LARROW; -> {defer} int ACS_LLCORNER; -> {defer} int ACS_LRCORNER; -> {defer} int ACS_LTEE; -> {defer} int ACS_PLMINUS; -> {defer} int ACS_PLUS; -> {defer} int ACS_RARROW; -> {defer} int ACS_RTEE; -> {defer} int ACS_S1; -> {defer} int ACS_S9; -> {defer} int ACS_TTEE; -> {defer} int ACS_UARROW; -> {defer} int ACS_ULCORNER; -> {defer} int ACS_URCORNER; -> {defer} int ACS_VLINE; - -> int A_ALTCHARSET; -> int A_ATTRIBUTES; -> int A_BLINK; -> int A_BOLD; -> int A_CHARTEXT; -> int A_COLOR; -> int A_DIM; -> int A_INVIS; -> int A_NORMAL; -> int A_PROTECT; -> int A_REVERSE; -> int A_STANDOUT; -> int A_UNDERLINE; - -> int COLOR_BLACK; -> int COLOR_BLUE; -> int COLOR_CYAN; -> int COLOR_GREEN; -> int COLOR_MAGENTA; -> int COLOR_RED; -> int COLOR_WHITE; -> int COLOR_YELLOW; - -> int KEY_A1; -> int KEY_A3; -> int KEY_B2; -> int KEY_BACKSPACE; -> int KEY_BEG; -> int KEY_BREAK; -> int KEY_BTAB; -> int KEY_C1; -> int KEY_C3; -> int KEY_CANCEL; -> int KEY_CATAB; -> int KEY_CLEAR; -> int KEY_CLOSE; -> int KEY_COMMAND; -> int KEY_COPY; -> int KEY_CREATE; -> int KEY_CTAB; -> int KEY_DC; -> int KEY_DL; -> int KEY_DOWN; -> int KEY_EIC; -> int KEY_END; -> int KEY_ENTER; -> int KEY_EOL; -> int KEY_EOS; -> int KEY_EXIT; -> int KEY_F0; -> int KEY_FIND; -> int KEY_HELP; -> int KEY_HOME; -> int KEY_IC; -> int KEY_IL; -> int KEY_LEFT; -> int KEY_LL; -> int KEY_MARK; -> int KEY_MAX; -> int KEY_MESSAGE; -> int KEY_MIN; -> int KEY_MOVE; -> int KEY_NEXT; -> int KEY_NPAGE; -> int KEY_OPEN; -> int KEY_OPTIONS; -> int KEY_PPAGE; -> int KEY_PREVIOUS; -> int KEY_PRINT; -> int KEY_REDO; -> int KEY_REFERENCE; -> int KEY_REFRESH; -> int KEY_REPLACE; -> int KEY_RESET; -> int KEY_RESTART; -> int KEY_RESUME; -> int KEY_RIGHT; -> int KEY_SAVE; -> int KEY_SBEG; -> int KEY_SCANCEL; -> int KEY_SCOMMAND; -> int KEY_SCOPY; -> int KEY_SCREATE; -> int KEY_SDC; -> int KEY_SDL; -> int KEY_SELECT; -> int KEY_SEND; -> int KEY_SEOL; -> int KEY_SEXIT; -> int KEY_SF; -> int KEY_SFIND; -> int KEY_SHELP; -> int KEY_SHOME; -> int KEY_SIC; -> int KEY_SLEFT; -> int KEY_SMESSAGE; -> int KEY_SMOVE; -> int KEY_SNEXT; -> int KEY_SOPTIONS; -> int KEY_SPREVIOUS; -> int KEY_SPRINT; -> int KEY_SR; -> int KEY_SREDO; -> int KEY_SREPLACE; -> int KEY_SRESET; -> int KEY_SRIGHT; -> int KEY_SRSUME; -> int KEY_SSAVE; -> int KEY_SSUSPEND; -> int KEY_STAB; -> int KEY_SUNDO; -> int KEY_SUSPEND; -> int KEY_UNDO; -> int KEY_UP; - -> int KEY_MOUSE; -> int BUTTON1_RELEASED; -> int BUTTON1_PRESSED; -> int BUTTON1_CLICKED; -> int BUTTON1_DOUBLE_CLICKED; -> int BUTTON1_TRIPLE_CLICKED; -> int BUTTON1_RESERVED_EVENT; -> int BUTTON2_RELEASED; -> int BUTTON2_PRESSED; -> int BUTTON2_CLICKED; -> int BUTTON2_DOUBLE_CLICKED; -> int BUTTON2_TRIPLE_CLICKED; -> int BUTTON2_RESERVED_EVENT; -> int BUTTON3_RELEASED; -> int BUTTON3_PRESSED; -> int BUTTON3_CLICKED; -> int BUTTON3_DOUBLE_CLICKED; -> int BUTTON3_TRIPLE_CLICKED; -> int BUTTON3_RESERVED_EVENT; -> int BUTTON4_RELEASED; -> int BUTTON4_PRESSED; -> int BUTTON4_CLICKED; -> int BUTTON4_DOUBLE_CLICKED; -> int BUTTON4_TRIPLE_CLICKED; -> int BUTTON4_RESERVED_EVENT; -> int BUTTON_CTRL; -> int BUTTON_SHIFT; -> int BUTTON_ALT; -> int ALL_MOUSE_EVENTS; -> int REPORT_MOUSE_POSITION; -> int NCURSES_MOUSE_VERSION; - -> int E_OK; -> int E_SYSTEM_ERROR; -> int E_BAD_ARGUMENT; -> int E_POSTED; -> int E_CONNECTED; -> int E_BAD_STATE; -> int E_NO_ROOM; -> int E_NOT_POSTED; -> int E_UNKNOWN_COMMAND; -> int E_NO_MATCH; -> int E_NOT_SELECTABLE; -> int E_NOT_CONNECTED; -> int E_REQUEST_DENIED; -> int E_INVALID_FIELD; -> int E_CURRENT; - -> int REQ_LEFT_ITEM; -> int REQ_RIGHT_ITEM; -> int REQ_UP_ITEM; -> int REQ_DOWN_ITEM; -> int REQ_SCR_ULINE; -> int REQ_SCR_DLINE; -> int REQ_SCR_DPAGE; -> int REQ_SCR_UPAGE; -> int REQ_FIRST_ITEM; -> int REQ_LAST_ITEM; -> int REQ_NEXT_ITEM; -> int REQ_PREV_ITEM; -> int REQ_TOGGLE_ITEM; -> int REQ_CLEAR_PATTERN; -> int REQ_BACK_PATTERN; -> int REQ_NEXT_MATCH; -> int REQ_PREV_MATCH; - -> int MIN_MENU_COMMAND; -> int MAX_MENU_COMMAND; - -> int O_ONEVALUE; -> int O_SHOWDESC; -> int O_ROWMAJOR; -> int O_IGNORECASE; -> int O_SHOWMATCH; -> int O_NONCYCLIC; -> int O_SELECTABLE; - -> int REQ_NEXT_PAGE; -> int REQ_PREV_PAGE; -> int REQ_FIRST_PAGE; -> int REQ_LAST_PAGE; -> int REQ_NEXT_FIELD; -> int REQ_PREV_FIELD; -> int REQ_FIRST_FIELD; -> int REQ_LAST_FIELD; -> int REQ_SNEXT_FIELD; -> int REQ_SPREV_FIELD; -> int REQ_SFIRST_FIELD; -> int REQ_SLAST_FIELD; -> int REQ_LEFT_FIELD; -> int REQ_RIGHT_FIELD; -> int REQ_UP_FIELD; -> int REQ_DOWN_FIELD; -> int REQ_NEXT_CHAR; -> int REQ_PREV_CHAR; -> int REQ_NEXT_LINE; -> int REQ_PREV_LINE; -> int REQ_NEXT_WORD; -> int REQ_PREV_WORD; -> int REQ_BEG_FIELD; -> int REQ_END_FIELD; -> int REQ_BEG_LINE; -> int REQ_END_LINE; -> int REQ_LEFT_CHAR; -> int REQ_RIGHT_CHAR; -> int REQ_UP_CHAR; -> int REQ_DOWN_CHAR; -> int REQ_NEW_LINE; -> int REQ_INS_CHAR; -> int REQ_INS_LINE; -> int REQ_DEL_CHAR; -> int REQ_DEL_PREV; -> int REQ_DEL_LINE; -> int REQ_DEL_WORD; -> int REQ_CLR_EOL; -> int REQ_CLR_EOF; -> int REQ_CLR_FIELD; -> int REQ_OVL_MODE; -> int REQ_INS_MODE; -> int REQ_SCR_FLINE; -> int REQ_SCR_BLINE; -> int REQ_SCR_FPAGE; -> int REQ_SCR_BPAGE; -> int REQ_SCR_FHPAGE; -> int REQ_SCR_BHPAGE; -> int REQ_SCR_FCHAR; -> int REQ_SCR_BCHAR; -> int REQ_SCR_HFLINE; -> int REQ_SCR_HBLINE; -> int REQ_SCR_HFHALF; -> int REQ_SCR_HBHALF; -> int REQ_VALIDATION; -> int REQ_NEXT_CHOICE; -> int REQ_PREV_CHOICE; - -> int MIN_FORM_COMMAND; -> int MAX_FORM_COMMAND; - -> int NO_JUSTIFICATION; -> int JUSTIFY_LEFT; -> int JUSTIFY_CENTER; -> int JUSTIFY_RIGHT; - -> int O_VISIBLE; -> int O_ACTIVE; -> int O_PUBLIC; -> int O_EDIT; -> int O_WRAP; -> int O_BLANK; -> int O_AUTOSKIP; -> int O_NULLOK; -> int O_PASSOK; -> int O_STATIC; - -> int O_NL_OVERLOAD; -> int O_BS_OVERLOAD; diff --git a/Curses-1.23/gen/list.fun b/Curses-1.23/gen/list.fun deleted file mode 100644 index d6819a0..0000000 --- a/Curses-1.23/gen/list.fun +++ /dev/null @@ -1,645 +0,0 @@ -!! Note 1: "void *" declarations are always set to zero. -!! Note 2: "void *"s meant to handle real pointers were made "{cast} char *". -!! Note 3: "{out}{amp} " were all originally "decl *var". -!! Note 4: "{cast}"ing a function is usually to shut up the compiler -!! complaining about discarding const from pointer. -!! Note 5: Some insane curses return "char *" for standout()/standend(). -!! I don't feel like handling it, hence the "{cast}". -! -/* curs_addch */ - -> int {mvw}addch(chtype ch); -> int {w}echochar(chtype ch); - -/* curs_addchstr */ - -> int {mvw}addchstr(const chtype *str); -> int {mvw}addchnstr(const chtype *str, int n); - -/* curs_addstr */ - -> int {mvw}addstr(const char *str); -> int {mvw}addnstr(const char *str, int n); - -/* curs_attr */ - -> int {w}attroff(int attrs); -> int {w}attron(int attrs); -> int {w}attrset(int attrs); -> {cast} int {w}standend(void); -> {cast} int {w}standout(void); -> int {w}attr_get({out}{amp} attr_t attrs, {out}{amp} short color, void *opts); -> int {w}attr_off(attr_t attrs, void *opts); -> int {w}attr_on(attr_t attrs, void *opts); -> int {w}attr_set(attr_t attrs, short color, void *opts); -> int {mvw}chgat(int n, attr_t attrs, short color, \ - const void *opts); -> int COLOR_PAIR(int n); -> int PAIR_NUMBER(int attrs); - -/* curs_beep */ - -> int beep(void); -> int flash(void); - -/* curs_bkgd */ - -> int {w}bkgd(chtype ch); -> void {w}bkgdset(chtype ch); -> chtype getbkgd(void); - -/* curs_border */ - -> int {w}border(chtype ls, chtype rs_, chtype ts, chtype bs, \ - chtype tl, chtype tr, chtype bl, chtype br); -> int box(chtype verch, chtype horch); -> int {mvw}hline(chtype ch, int n); -> int {mvw}vline(chtype ch, int n); - -/* curs_clear */ - -> int {w}erase(void); -> int {w}clear(void); -> int {w}clrtobot(void); -> int {w}clrtoeol(void); - -/* curs_color */ - -> int start_color(void); -> int init_pair(short pair, short f, short b); -> int init_color(short color, short r, short g, short b); -> bool has_colors(void); -> bool can_change_color(void); -> int color_content(short color, {out}{amp} short r, {out}{amp} short g, \ - {out}{amp} short b); -> int pair_content(short pair, {out}{amp} short f, {out}{amp} short b); - -/* curs_delch */ - -> int {mvw}delch(void); - -/* curs_deleteln */ - -> int {w}deleteln(void); -> int {w}insdelln(int n); -> int {w}insertln(void); - -/* curs_getch */ - -> chtype {mvw}getch(void); -> int ungetch(chtype ch); -> int has_key(int ch); -> chtype KEY_F(int n); - -/* curs_getstr */ - -> int {mvw}getstr({b=250}{out} char *str); -> int {mvw}getnstr({b=n+1}{out} char *str, {shift=-1} int n); - -/* curs_getyx */ - -> void getyx({out} int y, {out} int x); -> void getparyx({out} int y, {out} int x); -> void getbegyx({out} int y, {out} int x); -> void getmaxyx({out} int y, {out} int x); - -/* curs_inch */ - -> chtype {mvw}inch(void); - -/* curs_inchstr */ - -> int {mvw}inchstr({b=250}{out} chtype *str); -> int {mvw}inchnstr({b=n+1}{out} chtype *str, {shift=-1} int n); - -/* curs_initscr */ - -> WINDOW *initscr(void); -> int endwin(void); -> int isendwin(void); -> SCREEN *newterm({opt} char *type, FILE *outfd, FILE *infd); -> SCREEN *set_term(SCREEN *new); -> void delscreen(SCREEN *sp); - -/* curs_inopts */ - -#ifdef C_INTCBREAK -> {itest} int cbreak(void); -#else -> {dup} void cbreak(void); -#endif -#ifdef C_INTNOCBREAK -> {itest} int nocbreak(void); -#else -> {dup} void nocbreak(void); -#endif -#ifdef C_INTECHO -> {itest} int echo(void); -#else -> {dup} void echo(void); -#endif -#ifdef C_INTNOECHO -> {itest} int noecho(void); -#else -> {dup} void noecho(void); -#endif -> int halfdelay(int tenths); -> int intrflush(bool bf); -> int keypad(bool bf); -> int meta(bool bf); -> int nodelay(bool bf); -> int notimeout(bool bf); -#ifdef C_INTRAW -> {itest} int raw(void); -#else -> {dup} void raw(void); -#endif -#ifdef C_INTNORAW -> {itest} int noraw(void); -#else -> {dup} void noraw(void); -#endif -> void qiflush(void); -> void noqiflush(void); -> void {w}timeout(int delay); -> int typeahead(int fd); - -/* curs_insch */ - -> int {mvw}insch(chtype ch); - -/* curs_insstr */ - -> int {mvw}insstr(const char *str); -> int {mvw}insnstr(const char *str, int n); - -/* curs_instr */ - -> int {mvw}instr({b=250}{out} char *str); -> int {mvw}innstr({b=n+1}{out} char *str, {shift=-1} int n); - -/* curs_kernel */ - -> int def_prog_mode(void); -> int def_shell_mode(void); -> int reset_prog_mode(void); -> int reset_shell_mode(void); -> int resetty(void); -> int savetty(void); -#ifdef C_INTGETSYX -> {itest} int getsyx({out} int y, {out} int x); -#else -> {dup} void getsyx({out} int y, {out} int x); -#endif -#ifdef C_INTSETSYX -> {itest} int setsyx(int y, int x); -#else -> {dup} void setsyx(int y, int x); -#endif -> int curs_set(int visibility); -> int napms(int ms); - -/* curs_move */ - -> int {w}move(int y, int x); - -/* curs_outopts */ - -> int clearok(bool bf); -#ifdef C_INTIDLOK -> {itest} int idlok(bool bf); -#else -> {dup} void idlok(bool bf); -#endif -> void idcok(bool bf); -> void immedok(bool bf); -> int leaveok(bool bf); -> int {w}setscrreg(int top, int bot); -> int scrollok(bool bf); -#ifdef C_INTNL -> {itest} int nl(void); -#else -> {dup} void nl(void); -#endif -#ifdef C_INTNONL -> {itest} int nonl(void); -#else -> {dup} void nonl(void); -#endif - -/* curs_overlay */ - -> int overlay(WINDOW *srcwin, WINDOW *dstwin); -> int overwrite(WINDOW *srcwin, WINDOW *dstwin); -> int copywin(WINDOW *srcwin, WINDOW *dstwin, int sminrow, int smincol, \ - int dminrow, int dmincol, int dmaxrow, int dmaxcol, \ - int overlay); - -/* curs_pad */ - -> WINDOW *newpad(int lines_, int cols); -> WINDOW *subpad(WINDOW *orig, int lines_, int cols, int beginy, int beginx); -> int prefresh(WINDOW *pad, int pminrow, int pmincol, int sminrow, \ - int smincol, int smaxrow, int smaxcol); -> int pnoutrefresh(WINDOW *pad, int pminrow, int pmincol, int sminrow, \ - int smincol, int smaxrow, int smaxcol); -> int pechochar(WINDOW *pad, chtype ch); - -/* curs_printw */ - -/* done in perl */ - -/* curs_refresh */ - -> int {w}refresh(void); -> int |w|noutrefresh(void); -> int doupdate(void); -> int redrawwin(void); -> int |w|redrawln(int beg_line, int num_lines); - -/* curs_scanw */ - -/* done in perl */ - -/* curs_scr_dump */ - -> int scr_dump(const char *filename); -> int scr_restore(const char *filename); -> int scr_init(const char *filename); -> int scr_set(const char *filename); - -/* curs_scroll */ - -> int scroll(void); -> int {w}scrl(int n); - -/* curs_slk */ - -> int slk_init(int fmt); -> int slk_set(int labnum, char *label, int fmt); -> int slk_refresh(void); -> int slk_noutrefresh(void); -> char *slk_label(int labnum); -> int slk_clear(void); -> int slk_restore(void); -> int slk_touch(void); -> int slk_attron(chtype attrs); -> int slk_attrset(chtype attrs); -> attr_t slk_attr(void); -> int slk_attroff(chtype attrs); -> int slk_color(short color_pair_number); - -/* curs_termattrs */ - -> int baudrate(void); -> char erasechar(void); -> int has_ic(void); -> int has_il(void); -> char killchar(void); -#ifdef C_LONG0ARGS -> {notest} char *longname(void); -#else -> {dup} char *longname(char *a, char *b); -#endif - -> chtype termattrs(void); -> char *termname(void); - -/* curs_touch */ - -> int touchwin(void); -#ifdef C_TOUCH3ARGS -> {notest} int touchline(int start, int count); -#else -> {dup} int touchline(int y, int sx, int ex); -#endif - -> int untouchwin(void); -> int |w|touchln(int y, int n, int changed); -> int is_linetouched(int line); -> int is_wintouched(void); - -/* curs_util */ - -> char *unctrl(chtype ch); -> {cast} char *keyname(int k); -#ifdef C_INTFILTER -> {itest} int filter(void); -#else -> {dup} void filter(void); -#endif -> void use_env(bool bf); -> int putwin(WINDOW *win, FILE *filep); -> WINDOW *getwin(FILE *filep); -> int delay_output(int ms); -> int flushinp(void); - -/* curs_window */ - -> WINDOW *newwin(int nlines, int ncols, int beginy, int beginx); -> int delwin(void); -> int mvwin(int y, int x); -> WINDOW *subwin(int nlines, int ncols, int beginy, int beginx); -> WINDOW *derwin(int nlines, int ncols, int beginy, int beginx); -> int mvderwin(int par_y, int par_x); -> WINDOW *dupwin(void); -> void |w|syncup(void); -> int syncok(bool bf); -> void |w|cursyncup(void); -> void |w|syncdown(void); - -/* ncurses extension functions */ - -> int getmouse({out} MEVENT *event); -> int ungetmouse(MEVENT *event); -> mmask_t mousemask(mmask_t newmask, {out}{amp} mmask_t oldmask); -> bool |w|enclose(int y, int x); -> bool |w|mouse_trafo({out}{amp} int pY, {out}{amp} int pX, bool to_screen); -> int mouseinterval(int erval); -> int BUTTON_RELEASE(mmask_t e, int x); -> int BUTTON_PRESS(mmask_t e, int x); -> int BUTTON_CLICK(mmask_t e, int x); -> int BUTTON_DOUBLE_CLICK(mmask_t e, int x); -> int BUTTON_TRIPLE_CLICK(mmask_t e, int x); -> int BUTTON_RESERVED_EVENT(mmask_t e, int x); - -> int use_default_colors(void); -> int assume_default_colors(int fg, int bg); -> int define_key(char *definition, int keycode); -> char *keybound(int keycode, int count); -> int keyok(int keycode, bool enable); -> int resizeterm(int lines, int cols); -> int {w}resize(int lines_, int columns); - -/* DEC curses, I think */ - -> int getmaxy(void); -> int getmaxx(void); - -/* old BSD curses calls */ - -> void flusok(bool bf); -> {cast} char *getcap(char *term); -> int touchoverlap(WINDOW *src, WINDOW *dst); - -/* Panel support */ - -> PANEL *new_panel(WINDOW *win); -> int bottom_panel(PANEL *pan); -> int top_panel(PANEL *pan); -> int show_panel(PANEL *pan); -> void update_panels(void); -> int hide_panel(PANEL *pan); -> WINDOW *panel_window(const PANEL *pan); -> int replace_panel(PANEL *pan, WINDOW *window); -> int move_panel(PANEL *pan, int starty, int startx); -> int panel_hidden(const PANEL *pan); -> PANEL *panel_above(const {opt} PANEL *pan); -> PANEL *panel_below(const {opt} PANEL *pan); -> int set_panel_userptr(PANEL *pan, const {cast} char *ptr); -> const {cast} char *panel_userptr(const PANEL *pan); -> int del_panel(PANEL *pan); - -/* Menu support */ - -/* menu_attributes */ - -> int set_menu_fore(MENU *menu, chtype attr); -> chtype menu_fore(MENU *menu); -> int set_menu_back(MENU *menu, chtype attr); -> chtype menu_back(MENU *menu); -> int set_menu_grey(MENU *menu, chtype attr); -> chtype menu_grey(MENU *menu); -> int set_menu_pad(MENU *menu, int pad); -> int menu_pad(MENU *menu); - -/* menu_cursor */ - -> int pos_menu_cursor(MENU *menu); - -/* menu_driver */ - -> int menu_driver(MENU *menu, int c); - -/* menu_format */ - -> int set_menu_format(MENU *menu, int rows, int cols); -> void menu_format(MENU *menu, {out}{amp} int rows, {out}{amp} int cols); - -/* menu_items */ - -> int set_menu_items(MENU *menu, ITEM **items); -> ITEM **menu_items(MENU *menu); -> int item_count(MENU *menu); - -/* menu_mark */ - -> int set_menu_mark(MENU *menu, char *mark); -> const {cast} char *menu_mark( const MENU *menu); - -/* menu_new */ - -> MENU *new_menu(ITEM **items); -> int free_menu(MENU *menu); - -/* menu_opts */ - -> int menu_opts(MENU *menu); -> int set_menu_opts(MENU *menu, int opts); -> int menu_opts_on(MENU *menu, int opts); -> int menu_opts_off(MENU *menu, int opts); - -/* menu_pattern */ - -> int set_menu_pattern(MENU *menu, const char *pattern); -> char *menu_pattern(const MENU *menu); - -/* menu_post */ - -> int post_menu(MENU *menu); -> int unpost_menu(MENU *menu); - -/* menu_userptr */ - -> int set_menu_userptr(MENU *item, char *userptr); -> char *menu_userptr(MENU *item); - -/* menu_win */ - -> int set_menu_win(MENU *menu, WINDOW *win); -> WINDOW *menu_win(MENU *menu); -> int set_menu_sub(MENU *menu, WINDOW *win); -> WINDOW *menu_sub(MENU *menu); -> int scale_menu(MENU *menu, {out}{amp} int rows, {out}{amp} int cols); - -/* menu_item_current */ - -> int set_current_item(MENU *menu, const ITEM *item); -> ITEM *current_item(const MENU *menu); -> int set_top_row(MENU *menu, int row); -> int top_row(const MENU *menu); -> int item_index(const ITEM *item); - -/* menu_item_name */ - -> const {cast} char *item_name( const ITEM *item); -> const {cast} char *item_description( const ITEM *item); - -/* menu_item_new */ - -> ITEM *new_item(const char *name, const char *descr); -> int free_item(ITEM *item); - -/* menu_item_opts */ - -> int set_item_opts(ITEM *item, int opts); -> int item_opts_on(ITEM *item, int opts); -> int item_opts_off(ITEM *item, int opts); -> int item_opts(ITEM *item); - -/* menu_item_userptr */ - -> const {cast} char *item_userptr(const ITEM *item); -> int set_item_userptr(ITEM *item, const {cast} char *ptr); - -/* menu_item_value */ - -> int set_item_value(ITEM *item, bool val); -> bool item_value(ITEM *item); - -/* menu_item_visible */ - -> bool item_visible(ITEM *item); - -/* ncurses menu extension functions */ - -> const {cast} char *menu_request_name(int request); -> int menu_request_by_name(const char *name); -> int set_menu_spacing(MENU *menu, int descr, int rows, int cols); -> int menu_spacing(const MENU *menu, {out}{amp} int descr, \ - {out}{amp} int rows, {out}{amp} int cols); - -/* Form support */ - -/* form_cursor */ - -> int pos_form_cursor(FORM *form); - -/* form_data */ - -> bool data_ahead(const FORM *form); -> bool data_behind(const FORM *form); - -/* form_driver */ - -> int form_driver(FORM *form, int c); - -/* form_field */ - -> int set_form_fields(FORM *form, FIELD **fields); -> FIELD **form_fields(const FORM *form); -> int field_count(const FORM *form); -> int move_field(FIELD *field, int frow, int fcol); - -/* form_new */ - -> FORM *new_form(FIELD **fields); -> int free_form(FORM *form); - -/* form_new_page */ - -> int set_new_page(FIELD *field, bool new_page_flag); -> bool new_page(const FIELD *field); - -/* form_opts */ - -> int set_form_opts(FORM *form, int opts); -> int form_opts_on(FORM *form, int opts); -> int form_opts_off(FORM *form, int opts); -> int form_opts(const FORM *form); - -/* form_page */ - -> int set_current_field(FORM *form, FIELD *field); -> FIELD *current_field(const FORM *form); -> int set_form_page(FORM *form, int n); -> int form_page(const FORM *form); -> int field_index(const FIELD *field); - -/* form_post */ - -> int post_form(FORM *form); -> int unpost_form(FORM *form); - -/* form_userptr */ - -> int set_form_userptr(FORM *form, char *userptr); -> char *form_userptr(const FORM *form); - -/* form_win */ - -> int set_form_win(FORM *form, WINDOW *win); -> WINDOW *form_win(const FORM *form); -> int set_form_sub(FORM *form, WINDOW *sub); -> WINDOW *form_sub(const FORM *form); -> int scale_form(const FORM *form, {out}{amp} int rows, {out}{amp} int cols); - -/* form_field_attributes */ - -> int set_field_fore(FIELD *field, chtype attr); -> chtype field_fore(const FIELD *field); -> int set_field_back(FIELD *field, chtype attr); -> chtype field_back(const FIELD *field); -> int set_field_pad(FIELD *field, int pad); -> chtype field_pad(const FIELD *field); - -/* form_field_buffer */ - -> int set_field_buffer(FIELD *field, int buf, const char *value); -> char *field_buffer(const FIELD *field, int buffer); -> int set_field_status(FIELD *field, bool status); -> bool field_status(const FIELD *field); -> int set_max_field(FIELD *field, int max); - -/* form_field_info */ - -> int field_info(const FIELD *field, {out}{amp} int rows, \ - {out}{amp} int cols, {out}{amp} int frow, \ - {out}{amp} int fcol, {out}{amp} int nrow, \ - {out}{amp} int nbuf); -> int dynamic_field_info(const FIELD *field, {out}{amp} int rows, \ - {out}{amp} int cols, {out}{amp} int max); - -/* form_field_just */ - -> int set_field_just(FIELD *field, int justif); -> int field_just(const FIELD *field); - -/* form_field_new */ - -> FIELD *new_field(int height, int width, int toprow, int leftcol, \ - int offscreen, int nbuffers); -> FIELD *dup_field(FIELD *field, int toprow, int leftcol); -> FIELD *link_field(FIELD *field, int toprow, int leftcol); -> int free_field(FIELD *field); - -/* form_field_opts */ - -> int set_field_opts(FIELD *field, int opts); -> int field_opts_on(FIELD *field, int opts); -> int field_opts_off(FIELD *field, int opts); -> int field_opts(const FIELD *field); - -/* form_field_userptr */ - -> int set_field_userptr(FIELD *field, char *userptr); -> char *field_userptr(const FIELD *field); - -/* form_field_validation */ - -> char *field_arg(const FIELD *field); - -/* ncurses form extension functions */ - -> const {cast} char *form_request_name(int request); -> int form_request_by_name(const char *name); diff --git a/Curses-1.23/gen/list.typ b/Curses-1.23/gen/list.typ deleted file mode 100644 index 6d96150..0000000 --- a/Curses-1.23/gen/list.typ +++ /dev/null @@ -1,6 +0,0 @@ -> attr_t sym; -> bool sym; -> chtype sym; -> MEVENT sym; -> mmask_t sym; -> SCREEN sym; diff --git a/Curses-1.23/gen/list.var b/Curses-1.23/gen/list.var deleted file mode 100644 index b48d5e6..0000000 --- a/Curses-1.23/gen/list.var +++ /dev/null @@ -1,9 +0,0 @@ -> int LINES; -> int COLS; -> WINDOW *stdscr; -> WINDOW *curscr; -> int COLORS; -> int COLOR_PAIRS; -/* char *ttytype; */ -/* char *Def_term; */ -/* bool My_term; */ diff --git a/Curses-1.23/gen/make.Curses.pm b/Curses-1.23/gen/make.Curses.pm deleted file mode 100755 index 1d97086..0000000 --- a/Curses-1.23/gen/make.Curses.pm +++ /dev/null @@ -1,559 +0,0 @@ -#!/usr/local/bin/perl -## -## make.Curses.pm -- make Curses.pm -## -## Copyright (c) 2000 William Setzer -## -## You may distribute under the terms of either the Artistic License -## or the GNU General Public License, as specified in the README file. - -require 5.005; -use lib 'gen'; -use Gen; - -my $roff = 0; - -open OUT, "> Curses.pm" or die "Can't open Curses.pm: $!\n"; - -process_DATA_chunk \&print_line; -process_variables \&print_variable1; -process_DATA_chunk \&print_line; -process_variables \&print_variable2; print OUT "\n"; $roff = 0; -process_DATA_chunk \&print_line; -process_functions \&print_function1; print OUT "\n"; $roff = 0; -process_DATA_chunk \&print_line; -process_constants \&print_constant1; print OUT "\n"; $roff = 0; -process_DATA_chunk \&print_line; -process_functions \&print_function2; print OUT "\n"; $roff = 0; -process_DATA_chunk \&print_line; -process_functions \&print_function3; -process_DATA_chunk \&print_line; -process_variables \&print_variable3; print OUT "\n"; $roff = 0; -process_DATA_chunk \&print_line; -process_constants \&print_constant2; print OUT "\n"; $roff = 0; -process_DATA_chunk \&print_line; - -close OUT; - -### -## Helpers -# -sub print_line { print OUT @_ } - -sub print_function1 { - my $fun = shift; - - return unless $fun->{DOIT}; - return if $fun->{SPEC}{DUP}; - - my $L = 1 + length $fun->{NAME}; - - if ($roff < 4) { print OUT " "; $roff = 4 } - if ($roff + $L > 76) { print OUT "\n "; $roff = 4 } - print OUT ' ', $fun->{NAME}; - - $roff += $L; -} - -sub print_function2 { - my $fun = shift; - - return unless $fun->{DOIT}; - return if $fun->{SPEC}{DUP}; - return unless $fun->{W}; - - my $L = 2 + length $fun->{NAME}; - - if ($roff < 8) { print OUT " "; $roff = 8 } - if ($roff + $L > 76) { print OUT "\n "; $roff = 8 } - print OUT ' w', $fun->{NAME}; - - $roff += $L; - - if ($fun->{UNI} =~ /mv/) { - $L += 2; - - if ($roff < 8) { print OUT " "; $roff = 8 } - if ($roff + $L > 76) { print OUT "\n "; $roff = 8 } - print OUT ' mv', $fun->{NAME}; - - $roff += $L; - $L ++; - - if ($roff < 8) { print OUT " "; $roff = 8 } - if ($roff + $L > 76) { print OUT "\n "; $roff = 8 } - print OUT ' mvw', $fun->{NAME}; - - $roff += $L; - } -} - -sub print_function3 { - my $fun = shift; - - return unless $fun->{DOIT}; - return if $fun->{SPEC}{DUP}; - - my $S = " " x (23 - length $fun->{NAME}); - - print OUT " ", $fun->{NAME}, $S, $fun->{UNI} ? "Yes" : " No"; - - if ($fun->{W}) { - print OUT " w$fun->{NAME}"; - - if ($fun->{UNI} =~ /mv/) { - print OUT " mv$fun->{NAME} mvw$fun->{NAME}"; - } - } - print OUT "\n"; -} - - -sub print_variable1 { - my $var = shift; - - return unless $var->{DOIT}; - - my $S = " " x (12 - length $var->{NAME}); - - print OUT qq{tie \$$var->{NAME},}, $S, qq{Curses::Vars, $var->{NUM};\n}; -} - -sub print_variable2 { - my $var = shift; - - return unless $var->{DOIT}; - - my $L = 1 + length $var->{NAME}; - - if ($roff < 4) { print OUT " "; $roff = 4 } - if ($roff + $L > 76) { print OUT "\n "; $roff = 4 } - print OUT ' ', $var->{NAME}; - - $roff += $L; - $L++; - - if ($roff < 4) { print OUT " "; $roff = 4 } - if ($roff + $L > 76) { print OUT "\n "; $roff = 4 } - print OUT ' $', $var->{NAME}; - - $roff += $L; -} - -sub print_variable3 { - my $var = shift; - - return unless $var->{DOIT}; - - my $L = length $var->{NAME}; - my $M = 24 - $L % 24; - - if ($roff < 4) { print OUT " "; $roff = 4 } - if ($roff > 52) { print OUT "\n "; $roff = 4 } - print OUT $var->{NAME}; - - $roff += $L; - - if ($M < 2) { $M += 24 } - if ($roff + $M <= 52) { print OUT " " x $M } - $roff += $M; -} - -sub print_constant1 { - my $con = shift; - - return unless $con->{DOIT}; - - my $L = 1 + length $con->{NAME}; - - if ($roff < 4) { print OUT " "; $roff = 4 } - if ($roff + $L > 76) { print OUT "\n "; $roff = 4 } - print OUT ' ', $con->{NAME}; - - $roff += $L; -} - -sub print_constant2 { - my $con = shift; - - return unless $con->{DOIT}; - - my $L = length $con->{NAME}; - my $M = 24 - $L % 24; - - if ($roff < 4) { print OUT " "; $roff = 4 } - if ($roff > 52) { print OUT "\n "; $roff = 4 } - print OUT $con->{NAME}; - - $roff += $L; - - if ($M < 2) { $M += 24 } - if ($roff + $M <= 52) { print OUT " " x $M } - $roff += $M; -} - -__END__ -## This file can be automatically generated; changes may be lost. -## -## -## CursesFun.c -- the functions -## -## Copyright (c) 1994-2000 William Setzer -## -## You may distribute under the terms of either the Artistic License -## or the GNU General Public License, as specified in the README file. - -### -## For the brave object-using person -# -package Curses::Window; - -@ISA = qw(Curses); - -package Curses::Screen; - -@ISA = qw(Curses); -sub new { newterm(@_) } -sub DESTROY { } - -package Curses::Panel; - -@ISA = qw(Curses); -sub new { new_panel(@_) } -sub DESTROY { } - -package Curses::Menu; - -@ISA = qw(Curses); -sub new { new_menu(@_) } -sub DESTROY { } - -package Curses::Item; - -@ISA = qw(Curses); -sub new { new_item(@_) } -sub DESTROY { } - -package Curses::Form; - -@ISA = qw(Curses); -sub new { new_form(@_) } -sub DESTROY { } - -package Curses::Field; - -@ISA = qw(Curses); -sub new { new_field(@_) } -sub DESTROY { } - - -package Curses; - -$VERSION = 1.06; - -use Carp; -require Exporter; -require DynaLoader; -@ISA = qw(Exporter DynaLoader); - -bootstrap Curses; - -sub new { - my $pkg = shift; - my ($nl, $nc, $by, $bx) = (@_,0,0,0,0); - - unless ($_initscr++) { initscr() } - return newwin($nl, $nc, $by, $bx); -} - -sub DESTROY { } - -sub AUTOLOAD { - my $N = $AUTOLOAD; - $N =~ s/^.*:://; - - croak "Curses constant '$N' is not defined by your vendor"; -} - -sub printw { addstr(sprintf shift, @_) } - -PAUSE - -@EXPORT = qw( - printw - -PAUSE - -PAUSE - -PAUSE -); - -if ($OldCurses) -{ - @_OLD = qw( - wprintw mvprintw wmvprintw - -PAUSE - ); - - push (@EXPORT, @_OLD); - for (@_OLD) - { - /^(?:mv)?(?:w)?(.*)/; - eval "sub $_ { $1(\@_); }"; - } - - eval < is the interface between Perl and your system's curses(3) -library. For descriptions on the usage of a given function, variable, -or constant, consult your system's documentation, as such information -invariably varies (:-) between different curses(3) libraries and -operating systems. This document describes the interface itself, and -assumes that you already know how your system's curses(3) library -works. - -=head2 Unified Functions - -Many curses(3) functions have variants starting with the prefixes -I, I, and/or I. These variants differ only in the -explicit addition of a window, or by the addition of two coordinates -that are used to move the cursor first. For example, C has -three other variants: C, C, and C. -The variants aren't very interesting; in fact, we could roll all of -the variants into original function by allowing a variable number -of arguments and analyzing the argument list for which variant the -user wanted to call. - -Unfortunately, curses(3) predates varargs(3), so in C we were stuck -with all the variants. However, C is a Perl interface, so we -are free to "unify" these variants into one function. The section -L<"Supported Functions"> below lists all curses(3) function supported -by C, along with a column listing if it is I. If -so, it takes a varying number of arguments as follows: - -=over 4 - -C - -I is an optional window argument, defaulting to C if not -specified. - -I is an optional coordinate pair used to move the cursor, -defaulting to no move if not specified. - -I are the required arguments of the function. These are the -arguments you would specify if you were just calling the base function -and not any of the variants. - -=back - -This makes the variants obsolete, since their functionality has been -merged into a single function, so C does not define them by -default. You can still get them if you want, by setting the -variable C<$Curses::OldCurses> to a non-zero value before using the -C package. See L<"Perl 4.X C Compatibility"> -for an example of this. - -=head2 Objects - -Objects are supported. Example: - - $win = new Curses; - $win->addstr(10, 10, 'foo'); - $win->refresh; - ... - -Any function that has been marked as I (see -L<"Supported Functions"> below and L<"Unified Functions"> above) -can be called as a method for a Curses object. - -Do not use C if using objects, as the first call to get -a C will do it for you. - -=head2 Security Concerns - -It has always been the case with the curses functions, but please note -that the following functions: - - getstr() (and optional wgetstr(), mvgetstr(), and mvwgetstr()) - inchstr() (and optional winchstr(), mvinchstr(), and mvwinchstr()) - instr() (and optional winstr(), mvinstr(), and mvwinstr()) - -are subject to buffer overflow attack. This is because you pass in -the buffer to be filled in, which has to be of finite length, but -there is no way to stop a bad guy from typing. - -In order to avoid this problem, use the alternate functions: - - getnstr() - inchnstr() - innstr() - -which take an extra "size of buffer" argument. - -=head1 COMPATIBILITY - -=head2 Perl 4.X C Compatibility - -C has been written to take advantage of the new features of -Perl. I felt it better to provide an improved curses programming -environment rather than to be 100% compatible. However, many old -C applications will probably still work by starting the -script with: - - BEGIN { $Curses::OldCurses = 1; } - use Curses; - -Any old application that still does not work should print an -understandable error message explaining the problem. - -Some functions and variables are not supported by C, even with -the C line. They are listed under -L<"curses(3) items not supported by Curses">. - -The variables C<$stdscr> and C<$curscr> are also available as -functions C and C. This is because of a Perl bug. -See the L section for details. - -=head2 Incompatibilities with previous versions of C - -In previous versions of this software, some Perl functions took a -different set of parameters than their C counterparts. This is no -longer true. You should now use C and C -instead of C<$str = getstr()> and C<($y, $x) = getyx()>. - -=head2 Incompatibilities with other Perl programs - - menu.pl, v3.0 and v3.1 - There were various interaction problems between these two - releases and Curses. Please upgrade to the latest version - (v3.3 as of 3/16/96). - -=head1 DIAGNOSTICS - -=over 4 - -=item * Curses function '%s' called with too %s arguments at ... - -You have called a C function with a wrong number of -arguments. - -=item * argument %d to Curses function '%s' is not a Curses %s at ... -=item * argument is not a Curses %s at ... - -The argument you gave to the function wasn't what it wanted. - -This probably means that you didn't give the right arguments to a -I function. See the DESCRIPTION section on L for more information. - -=item * Curses function '%s' is not defined by your vendor at ... - -You have a C function in your code that your system's curses(3) -library doesn't define. - -=item * Curses variable '%s' is not defined by your vendor at ... - -You have a C variable in your code that your system's curses(3) -library doesn't define. - -=item * Curses constant '%s' is not defined by your vendor at ... - -You have a C constant in your code that your system's curses(3) -library doesn't define. - -=item * Curses::Vars::FETCH called with bad index at ... -=item * Curses::Vars::STORE called with bad index at ... - -You've been playing with the C interface to the C -variables. Don't do that. :-) - -=item * Anything else - -Check out the F man page to see if the error is in there. - -=back - -=head1 BUGS - -If you use the variables C<$stdscr> and C<$curscr> instead of their -functional counterparts (C and C), you might run into -a bug in Perl where the "magic" isn't called early enough. This is -manifested by the C package telling you C<$stdscr> isn't a -window. One workaround is to put a line like C<$stdscr = $stdscr> -near the front of your program. - -Probably many more. - -=head1 AUTHOR - -William Setzer - -=head1 SYNOPSIS OF PERL CURSES SUPPORT - -=head2 Supported Functions - - Supported Unified? Supported via $OldCurses[*] - --------- -------- ------------------------ -PAUSE - -[*] To use any functions in this column, the variable -C<$Curses::OldCurses> must be set to a non-zero value before using the -C package. See L<"Perl 4.X cursperl Compatibility"> for an -example of this. - -=head2 Supported Variables - -PAUSE - -=head2 Supported Constants - -PAUSE - -=head2 curses(3) functions not supported by C - - tstp _putchar fullname scanw wscanw mvscanw mvwscanw ripoffline - setupterm setterm set_curterm del_curterm restartterm tparm tputs - putp vidputs vidattr mvcur tigetflag tigetnum tigetstr tgetent - tgetflag tgetnum tgetstr tgoto tputs - -=head2 menu(3) functions not supported by C - - set_item_init item_init set_item_term item_term set_menu_init - menu_init set_menu_term menu_term - -=head2 form(3) functions not supported by C - - new_fieldtype free_fieldtype set_fieldtype_arg - set_fieldtype_choice link_fieldtype set_form_init form_init - set_form_term form_term set_field_init field_init set_field_term - field_term set_field_type field_type diff --git a/Curses-1.23/gen/make.CursesBoot.c b/Curses-1.23/gen/make.CursesBoot.c deleted file mode 100755 index 5d17c3b..0000000 --- a/Curses-1.23/gen/make.CursesBoot.c +++ /dev/null @@ -1,128 +0,0 @@ -#!/usr/local/bin/perl -## -## make.CursesBoot.c -- make CursesBoot.c -## -## Copyright (c) 2000 William Setzer -## -## You may distribute under the terms of either the Artistic License -## or the GNU General Public License, as specified in the README file. - -use lib 'gen'; -use Gen; - - -open OUT, "> CursesBoot.c" or die "Can't open CursesBoot.c: $!\n"; - -process_DATA_chunk \&print_line; -process_functions \&print_function; -process_DATA_chunk \&print_line; -process_variables \&print_variable; -process_DATA_chunk \&print_line; -process_constants \&print_constant; -process_DATA_chunk \&print_line; - -close OUT; - - -### -## Helpers -# -sub print_line { print OUT @_ } - -sub print_function { - my $fun = shift; - - if (not $fun->{DOIT}) { - print OUT $fun->{LINE} if $fun->{LINE} =~ /^#/; # cpp directives - return; - } - - my $S = " " x (22 - length $fun->{NAME}); - - print OUT qq{ C_NEWXS("Curses::$fun->{NAME}", } . $S . - qq{XS_Curses_$fun->{NAME});\n}; -} - -sub print_variable { - my $var = shift; - - return unless $var->{DOIT}; - - my $S = " " x (22 - length $var->{NAME}); - - print OUT qq{ C_NEWXS("Curses::$var->{NAME}", } . $S . - qq{XS_Curses_$var->{NAME});\n}; -} - -sub print_constant { - my $con = shift; - - return unless $con->{DOIT}; - - if ($con->{SPEC}{DEFER}) { - my $S = " " x (22 - length $con->{NAME}); - - print OUT qq{ C_NEWXS("Curses::$con->{NAME}", } . $S . - qq{XS_Curses_$con->{NAME});\n}; - } - else { - my $S = " " x (30 - length $con->{NAME}); - - print OUT "#ifdef $con->{NAME}\n"; - print OUT qq{ C_NEWCS("$con->{NAME}", } . $S . - qq{$con->{NAME});\n}; - print OUT "#endif\n"; - } -} - - -__END__ -/* This file can be automatically generated; changes may be lost. -** -** -** CursesBoot.c -- the bootstrap function -** -** Copyright (c) 1994-2000 William Setzer -** -** You may distribute under the terms of either the Artistic License -** or the GNU General Public License, as specified in the README file. -*/ - -#define C_NEWXS(A,B) newXS(A,B,file) -#define C_NEWCS(A,B) newCONSTSUB(stash,A,newSViv(B)) - -XS(boot_Curses) -{ - int i; - - dXSARGS; - char *file = __FILE__; - HV *stash = gv_stashpv("Curses", TRUE); - IV tmp; - SV *t2; - - XS_VERSION_BOOTCHECK; - - /* Functions */ - -PAUSE - - /* Variables masquerading as functions */ - -PAUSE - - /* Variables masquerading as variables */ - - C_NEWXS("Curses::Vars::DESTROY", XS_Curses_Vars_DESTROY); - C_NEWXS("Curses::Vars::FETCH", XS_Curses_Vars_FETCH); - C_NEWXS("Curses::Vars::STORE", XS_Curses_Vars_STORE); - C_NEWXS("Curses::Vars::TIESCALAR", XS_Curses_Vars_TIESCALAR); - - /* Constants */ - -PAUSE - - /* traceon(); */ - ST(0) = &PL_sv_yes; - XSRETURN(1); -} diff --git a/Curses-1.23/gen/make.CursesCon.c b/Curses-1.23/gen/make.CursesCon.c deleted file mode 100755 index 6df617b..0000000 --- a/Curses-1.23/gen/make.CursesCon.c +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/local/bin/perl -## -## make.CursesFun.c -- make CursesFun.c -## -## Copyright (c) 2000 William Setzer -## -## You may distribute under the terms of either the Artistic License -## or the GNU General Public License, as specified in the README file. - - -use lib 'gen'; -use Gen; -use Data::Dumper; - -open OUT, "> CursesCon.c" or die "Can't open CursesCon.c: $!\n"; - -process_DATA_chunk \&print_line; -process_constants \&print_constant; - -close OUT; - - -### -## The helpers -# -sub print_line { print OUT @_ } - -sub print_constant { - my $con = shift; - - return unless $con->{DOIT}; - return unless $con->{SPEC}{DEFER}; - - print OUT Q<{NAME}) -# { -# dXSARGS; -# #ifdef $con->{NAME} -# { -# int ret = $con->{NAME}; -# -# ST(0) = sv_newmortal(); -# sv_setiv(ST(0), (IV)ret); -# } -# XSRETURN(1); -# #else -# c_con_not_there("$con->{NAME}"); -# XSRETURN(0); -# #endif -# } -# -################ -AAA -} - -__END__ -/* This file can be automatically generated; changes may be lost. -** -** -** CursesCon.c -- non-trivial constants -** -** Copyright (c) 1994-2000 William Setzer -** -** You may distribute under the terms of either the Artistic License -** or the GNU General Public License, as specified in the README file. -*/ - -PAUSE diff --git a/Curses-1.23/gen/make.CursesFun.c b/Curses-1.23/gen/make.CursesFun.c deleted file mode 100755 index 574e85d..0000000 --- a/Curses-1.23/gen/make.CursesFun.c +++ /dev/null @@ -1,150 +0,0 @@ -#!/usr/local/bin/perl -## -## make.CursesFun.c -- make CursesFun.c -## -## Copyright (c) 2000 William Setzer -## -## You may distribute under the terms of either the Artistic License -## or the GNU General Public License, as specified in the README file. - - -use lib 'gen'; -use Gen; - -open OUT, "> CursesFun.c" or die "Can't open CursesFun.c: $!\n"; - -process_DATA_chunk \&print_line; -process_functions \&print_function; - -close OUT; - - -### -## The helpers -# -sub print_line { print OUT @_ } - -sub print_function { - my $fun = shift; - - unless ($fun->{DOIT}) { - print OUT $fun->{LINE}; - return; - } - - my @decl; - my @retn; - my @argv; - - if ($fun->{UNI}) { - push @decl, "WINDOW *win\t= c_win ? c_sv2window(ST(0), 0) : stdscr;"; - push @decl, "int\tc_mret\t= c_x ? c_domove(win, ST(c_x-1), ST(c_x)) : OK;"; - - push @argv, "win"; - } - - foreach my $arg (@{$fun->{ARGV}}) { - my $pos = $fun->{UNI} ? $arg->{NUM} ? "c_arg+$arg->{NUM}" : "c_arg" - : $arg->{NUM}; - - my $A = "ST($pos)"; - my $B = $arg->{SPEC}{B} || $pos; - my $N = $arg->{NAME}; - my $T = length($arg->{DECL}) < 8 ? "\t" : ""; - my $D = eval qq("$arg->{DECL}$T$arg->{NAME}\t= $arg->{M_DECL};"); - - if ($arg->{SPEC}{SHIFT}) { - splice @decl, $arg->{SPEC}{SHIFT}, 0, $D; - } - else { - push @decl, $D; - } - - if ($arg->{M_RETN}) { - push @retn, eval qq("$arg->{M_RETN};"); - } - - push @argv, $arg->{SPEC}{AMP} ? "&" . $arg->{NAME} : $arg->{NAME}; - } - - my $pref = $fun->{SPEC}{CAST} ? "($fun->{DECL})" . $fun->{W} : $fun->{W}; - my $call = $pref . $fun->{NAME} . "(" . join(", ", @argv) . ");"; - - if ($fun->{UNI}) { - if ($fun->{DECL} eq 'void') { - $call = "if (c_mret == OK) { $call }"; - } - else { - $call = eval qq("c_mret == ERR ? $fun->{M_NULL} : $call"); - } - } - - if ($fun->{DECL} eq 'void') { - unshift @retn, $call; - } - else { - my $A = "ST(0)"; - my $N = "ret"; - - push @decl, "$fun->{DECL}\tret\t= $call"; - push @retn, "ST(0) = sv_newmortal();"; - push @retn, eval qq("$fun->{M_RETN};"); - } - - push @decl, '' if @decl; - - my $count = $fun->{UNI} ? "count" : "exact"; - my $body = join "\n\t", @decl, @retn; - my $xsret = $fun->{DECL} ne 'void' ? 1 : 0; - - print OUT Q<{NAME}) -# { -# dXSARGS; -# #ifdef C_\U$fun->{NAME}\E -# c_${count}args("$fun->{NAME}", items, $fun->{ARGC}); -# { -# $body -# } -# XSRETURN($xsret); -# #else -# c_fun_not_there("$fun->{NAME}"); -# XSRETURN(0); -# #endif -# } -# -################ -AAA -} - -sub print_function2 { - my $fun = shift; - - return unless $fun->{DOIT}; - return if $fun->{SPEC}{DUP}; - - my $S = " " x (3 - length $fun->{NUM}); - - print OUT Q<{NAME}\E -# case $S$fun->{NUM}: ret = 1; break; -# #endif -################ -AAA -} - -__END__ -/* This file can be automatically generated; changes may be lost. -** -** -** CursesFun.c -- the functions -** -** Copyright (c) 1994-2000 William Setzer -** -** You may distribute under the terms of either the Artistic License -** or the GNU General Public License, as specified in the README file. -*/ - -PAUSE diff --git a/Curses-1.23/gen/make.CursesTyp.h b/Curses-1.23/gen/make.CursesTyp.h deleted file mode 100755 index 3274768..0000000 --- a/Curses-1.23/gen/make.CursesTyp.h +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/local/bin/perl -## -## make.CursesTyp.h -- make CursesTyp.h -## -## Copyright (c) 2001 William Setzer -## -## You may distribute under the terms of either the Artistic License -## or the GNU General Public License, as specified in the README file. - -use lib 'gen'; -use Gen; - - -open OUT, "> CursesTyp.h" or die "Can't open CursesTyp.h: $!\n"; - -process_DATA_chunk \&print_line; -process_typedefs \&print_typedef; - -close OUT; - - -### -## Helpers -# -sub print_line { print OUT @_ } - -sub print_typedef { - my $typ = shift; - - return unless $typ->{DOIT}; - - print OUT Q<{DECL}\E -# #define $typ->{DECL} int -# #endif -# -################ -AAA -} - -__END__ -/* This file can be automatically generated; changes may be lost. -** -** -** CursesTyp.c -- typedef handlers -** -** Copyright (c) 1994-2001 William Setzer -** -** You may distribute under the terms of either the Artistic License -** or the GNU General Public License, as specified in the README file. -*/ - -PAUSE diff --git a/Curses-1.23/gen/make.CursesVar.c b/Curses-1.23/gen/make.CursesVar.c deleted file mode 100755 index 8576ff8..0000000 --- a/Curses-1.23/gen/make.CursesVar.c +++ /dev/null @@ -1,182 +0,0 @@ -#!/usr/local/bin/perl -## -## make.CursesVar.c -- make CursesVar.c -## -## Copyright (c) 2000 William Setzer -## -## You may distribute under the terms of either the Artistic License -## or the GNU General Public License, as specified in the README file. - -use lib 'gen'; -use Gen; - -open OUT, "> CursesVar.c" or die "Can't open CursesVar.c: $!\n"; - -process_DATA_chunk \&print_line; -process_variables \&print_function; -process_DATA_chunk \&print_line; -process_variables \&print_fetch; -process_DATA_chunk \&print_line; -process_variables \&print_store; -process_DATA_chunk \&print_line; - -close OUT; - - -### -## Helpers -# -sub print_line { print OUT @_ } - -sub print_function { - my $var = shift; - - return unless $var->{DOIT}; - - my $A = "ST(0)"; - my $N = $var->{NAME}; - my $body = eval qq("$var->{M_RETN}"); - - print OUT Q<{NAME}) -# { -# dXSARGS; -# #ifdef \UC_$var->{NAME}\E -# c_exactargs("$var->{NAME}", items, 0); -# { -# ST(0) = sv_newmortal(); -# $body; -# } -# XSRETURN(1); -# #else -# c_var_not_there("$var->{NAME}"); -# XSRETURN(0); -# #endif -# } -# -################ -AAA -} - -sub print_fetch { - my $var = shift; - - return unless $var->{DOIT}; - - my $A = "ST(0)"; - my $N = $var->{NAME}; - my $body = eval qq("$var->{M_RETN}"); - - print OUT Q<{NUM}: -# #ifdef \UC_$var->{NAME}\E -# $body; -# #else -# c_var_not_there("$var->{NAME}"); -# #endif -# break; -################ -AAA -} - -sub print_store { - my $var = shift; - - return unless $var->{DOIT}; - - my $A = "ST(1)"; - my $B = -1; - my $N = $var->{NAME}; - my $body = eval qq("$var->{M_DECL}"); - - print OUT Q<{NUM}: -# #ifdef \UC_$var->{NAME}\E -# $var->{NAME} = $body; -# #else -# c_var_not_there("$var->{NAME}"); -# #endif -# break; -################ -AAA - -} - -### -## Templates -# -__END__ -/* This file can be automatically generated; changes may be lost. -** -** -** CursesVar.c -- the variables -** -** Copyright (c) 1994-2000 William Setzer -** -** You may distribute under the terms of either the Artistic License -** or the GNU General Public License, as specified in the README file. -*/ - -PAUSE - -XS(XS_Curses_Vars_TIESCALAR) -{ - dXSARGS; - c_exactargs("TIESCALAR", items, 2); - { - char * pack = (char *)SvPV(ST(0),PL_na); - int n = (int)SvIV(ST(1)); - - ST(0) = sv_newmortal(); - sv_setref_iv(ST(0), pack, n); - } - XSRETURN(1); -} - -XS(XS_Curses_Vars_FETCH) -{ - dXSARGS; - { - int num = (int)SvIV(SvRV((SV*)ST(0))); - - ST(0) = sv_newmortal(); - switch (num) { -PAUSE - default: - croak("Curses::Vars::FETCH called with bad index"); - /* NOTREACHED */ - } - } - XSRETURN(1); -} - -XS(XS_Curses_Vars_STORE) -{ - dXSARGS; - { - int num = (int)SvIV((SV*)SvRV(ST(0))); - - switch (num) { -PAUSE - default: - croak("Curses::Vars::STORE called with bad index"); - /* NOTREACHED */ - } - ST(0) = &PL_sv_yes; - } - XSRETURN(1); -} - -XS(XS_Curses_Vars_DESTROY) -{ - dXSARGS; - { - SV * rv = ST(0); - - ST(0) = &PL_sv_yes; - } - XSRETURN(1); -} diff --git a/Curses-1.23/gen/make.list.syms b/Curses-1.23/gen/make.list.syms deleted file mode 100755 index f4812d7..0000000 --- a/Curses-1.23/gen/make.list.syms +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/local/bin/perl -## -## make.list.syms -- make list.syms -## -## Copyright (c) 2000 William Setzer -## -## You may distribute under the terms of either the Artistic License -## or the GNU General Public License, as specified in the README file. - -use lib 'gen'; -use Gen; - -open OUT, "> list.syms" or die "Can't open list.syms: $!\n"; - -process_DATA_chunk \&print_line; -process_functions \&print_function; -process_variables \&print_variable; -process_typedefs \&print_typedef; - -close OUT; - -### -## The helpers -# -sub print_line { print OUT @_ } - -sub print_function { - my $fun = shift; - - return unless $fun->{DOIT}; - return if $fun->{SPEC}{DUP}; - return if $fun->{SPEC}{NOTEST}; - - my @argv = map { $_->{SPEC}{AMP} ? '&' . $_->{M_TEST} : $_->{M_TEST} } - @{$fun->{ARGV}}; - unshift @argv, "stdscr" if $fun->{UNI}; - - my $call = $fun->{W} . $fun->{NAME} . "(" . join(',', @argv) . ")"; - - print OUT "E $call\n"; - print OUT "I $call\n" if $fun->{SPEC}{ITEST}; -} - -sub print_variable { - my $var = shift; - - return unless $var->{DOIT}; - - print OUT "V $var->{NAME}\n"; -} - -sub print_typedef { - my $typ = shift; - - return unless $typ->{DOIT}; - - print OUT "T $typ->{DECL}\n"; -} - -__END__ -## This file is automatically generated; changes will be lost. -## -## V = variable existence check -## E = function existence check, -## I = function "returns int?" check -## T = typedef existence check - diff --git a/Curses-1.23/hints/c-MSWin32.borland.h b/Curses-1.23/hints/c-MSWin32.borland.h deleted file mode 100644 index 784875c..0000000 --- a/Curses-1.23/hints/c-MSWin32.borland.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Hint file for the MSWin32 platform, Borland compiler. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -/* These hints thanks to Gurusamy Sarathy */ - -/* We used to include , but users found it is actually - installed as . Maybe it changed at some point. - 2007.09.29 -*/ -/* We used to undef macro SP, (which is defined by perl.h), but in September - 2007, we found that a) SP is needed; and 2) SP doesn't hurt - the #includes below. -*/ - -#include - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -#define C_LONGNAME -#define C_LONG0ARGS -#undef C_LONG2ARGS - -#define C_TOUCHLINE -#define C_TOUCH3ARGS -#undef C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-MSWin32.visualc.h b/Curses-1.23/hints/c-MSWin32.visualc.h deleted file mode 100644 index 3c7fa33..0000000 --- a/Curses-1.23/hints/c-MSWin32.visualc.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Hint file for the MSWin32 platform, Visual C compiler. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -/* These hints thanks to Gurusamy Sarathy */ - -/* We used to include , but users found it is actually - installed as . Maybe it changed at some point. - 2007.09.29 -*/ -/* We used to undef macro SP, (which is defined by perl.h), but in September - 2007, we found that a) SP is needed; and 2) SP doesn't hurt - the #includes below. -*/ - -#include - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -#define C_LONGNAME -#define C_LONG0ARGS -#undef C_LONG2ARGS - -#define C_TOUCHLINE -#define C_TOUCH3ARGS -#undef C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-aix.h b/Curses-1.23/hints/c-aix.h deleted file mode 100644 index e2e6129..0000000 --- a/Curses-1.23/hints/c-aix.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Hint file for the AIX platform. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -#include - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -#define C_LONGNAME -#define C_LONG0ARGS -#undef C_LONG2ARGS - -#define C_TOUCHLINE -#define C_TOUCH3ARGS -#undef C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-bsd386.h b/Curses-1.23/hints/c-bsd386.h deleted file mode 100644 index ad96dc5..0000000 --- a/Curses-1.23/hints/c-bsd386.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Hint file for the BSD386 platform. - * (Copy of the hint file for the FreeBSD platform, BSD version of libcurses.) - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -/* These hints thanks to "Andrew V. Stesin" */ - -#include - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -#define C_LONGNAME -#undef C_LONG0ARGS -#define C_LONG2ARGS - -#define C_TOUCHLINE -#undef C_TOUCH3ARGS -#define C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-bsdos.h b/Curses-1.23/hints/c-bsdos.h deleted file mode 100644 index 9667e37..0000000 --- a/Curses-1.23/hints/c-bsdos.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Hint file for the BSDOS platform. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -/* These hints thanks to Dean Karres */ - -#include - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -#define C_LONGNAME -#undef C_LONG0ARGS -#define C_LONG2ARGS - -#define C_TOUCHLINE -#undef C_TOUCH3ARGS -#define C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-cygwin.h b/Curses-1.23/hints/c-cygwin.h deleted file mode 100644 index 9f9527e..0000000 --- a/Curses-1.23/hints/c-cygwin.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Hint file for the Cygwin platform. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -/* These hints thanks to Federico Spinazzi - (2001) and yselkowitz@users.sourceforge.net (October 2005) -*/ - -#include - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -#undef C_LONGNAME -#undef C_LONG0ARGS -#undef C_LONG2ARGS - -#undef C_TOUCHLINE -#undef C_TOUCH3ARGS -#undef C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-darwin.h b/Curses-1.23/hints/c-darwin.h deleted file mode 100644 index 0194872..0000000 --- a/Curses-1.23/hints/c-darwin.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Hint file for Darwin Kernel Version 7.5.0, ncurses version of - libcurses. Based in FreeBSD, ncurses hints file - - This file came from gene03@smalltime.com, September 2004. -*/ - -#include - -#ifdef C_PANELSUPPORT -#include -#endif - - -#ifdef C_MENUSUPPORT -#include -#endif - - -#ifdef C_FORMSUPPORT -#include -#endif - -#define C_LONGNAME -#define C_LONG0ARGS -#undef C_LONG2ARGS - -#define C_TOUCHLINE -#define C_TOUCH3ARGS -#undef C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-darwin.old.h b/Curses-1.23/hints/c-darwin.old.h deleted file mode 100644 index 1aaefb6..0000000 --- a/Curses-1.23/hints/c-darwin.old.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Hint file for the darwin platform. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -/* These hints thanks to Scott Dietrich */ - -#include - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -#define C_LONGNAME -#undef C_LONG0ARGS -#define C_LONG2ARGS - -#define C_TOUCHLINE -#undef C_TOUCH3ARGS -#define C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-dec_osf.h b/Curses-1.23/hints/c-dec_osf.h deleted file mode 100644 index 80f8701..0000000 --- a/Curses-1.23/hints/c-dec_osf.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Hint file for the OSF1 platform. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -/* These hints thanks to Lamont Granquist */ - -#include -/* #include */ - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -#define C_LONGNAME -#define C_LONG0ARGS -#undef C_LONG2ARGS - -#undef C_TOUCHLINE -#undef C_TOUCH3ARGS -#undef C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-dgux.h b/Curses-1.23/hints/c-dgux.h deleted file mode 100644 index e2fc2cf..0000000 --- a/Curses-1.23/hints/c-dgux.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Hint file for the DGUX platform. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -/* These hints thanks to Shreeniwas N Sapre */ - -#include - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -#define C_LONGNAME -#define C_LONG0ARGS -#undef C_LONG2ARGS - -#define C_TOUCHLINE -#define C_TOUCH3ARGS -#undef C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-dynixptx.h b/Curses-1.23/hints/c-dynixptx.h deleted file mode 100644 index 871acc3..0000000 --- a/Curses-1.23/hints/c-dynixptx.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Hint file for the DYNIX/ptx platform. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - - /* These hints thanks to Carson Wilson */ - -#include - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -#define C_LONGNAME -#define C_LONG0ARGS -#undef C_LONG2ARGS - -#define C_TOUCHLINE -#define C_TOUCH3ARGS -#undef C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-freebsd.bsd.h b/Curses-1.23/hints/c-freebsd.bsd.h deleted file mode 100644 index 5a1672c..0000000 --- a/Curses-1.23/hints/c-freebsd.bsd.h +++ /dev/null @@ -1,17 +0,0 @@ -/* Hint file for the FreeBSD platform, BSD version of libcurses. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -/* These hints thanks to "Andrew V. Stesin" */ - -#include - -#define C_LONGNAME -#undef C_LONG0ARGS -#define C_LONG2ARGS - -#define C_TOUCHLINE -#undef C_TOUCH3ARGS -#define C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-freebsd.ncurses.h b/Curses-1.23/hints/c-freebsd.ncurses.h deleted file mode 100644 index 828b049..0000000 --- a/Curses-1.23/hints/c-freebsd.ncurses.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Hint file for the FreeBSD platform, ncurses version of libcurses. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -/* These hints thanks to "Andrew V. Stesin" */ - -#include - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -#define C_LONGNAME -#define C_LONG0ARGS -#undef C_LONG2ARGS - -#define C_TOUCHLINE -#define C_TOUCH3ARGS -#undef C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-gnukfreebsd.h b/Curses-1.23/hints/c-gnukfreebsd.h deleted file mode 100644 index 6c7432b..0000000 --- a/Curses-1.23/hints/c-gnukfreebsd.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Hint file for the Debian GNU/kfreebsd platform - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -#include - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -#define C_LONGNAME -#define C_LONG0ARGS -#undef C_LONG2ARGS - -#define C_TOUCHLINE -#define C_TOUCH3ARGS -#undef C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-hpux.h b/Curses-1.23/hints/c-hpux.h deleted file mode 100644 index adb2f54..0000000 --- a/Curses-1.23/hints/c-hpux.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Hint file for the HP-UX platform. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -#include - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -#define C_LONGNAME -#define C_LONG0ARGS -#undef C_LONG2ARGS - -#define C_TOUCHLINE -#define C_TOUCH3ARGS -#undef C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-irix.bsd.h b/Curses-1.23/hints/c-irix.bsd.h deleted file mode 100644 index b214a18..0000000 --- a/Curses-1.23/hints/c-irix.bsd.h +++ /dev/null @@ -1,17 +0,0 @@ -/* Hint file for the IRIX platform, tested for IRIX 5.3. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -/* These hints thanks to Sven Heinicke */ - -#include - -#define C_LONGNAME -#define C_LONG0ARGS -#undef C_LONG2ARGS - -#define C_TOUCHLINE -#define C_TOUCH3ARGS -#undef C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-irix.ncurses.h b/Curses-1.23/hints/c-irix.ncurses.h deleted file mode 100644 index 10b6836..0000000 --- a/Curses-1.23/hints/c-irix.ncurses.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Hint file for the IRIX platform, ncurses version of libncurses, - * tested for IRIX 6.2. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -/* Roland Walker Feb 1999*/ - -#include - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -#define C_LONGNAME -#define C_LONG0ARGS -#undef C_LONG2ARGS - -#define C_TOUCHLINE -#define C_TOUCH3ARGS -#undef C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-isc.h b/Curses-1.23/hints/c-isc.h deleted file mode 100644 index 8952f37..0000000 --- a/Curses-1.23/hints/c-isc.h +++ /dev/null @@ -1,29 +0,0 @@ -/* c-isc.h: Hint file for curses on Interactive System V, release 3.2. - This was tested on version 3.01, but probably will work for most - generic SysV curses. - Andy Dougherty doughera@lafcol.lafayette.edu -*/ - -#include - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -#define C_LONGNAME -#define C_LONG0ARGS -#undef C_LONG2ARGS - -#define C_TOUCHLINE -#define C_TOUCH3ARGS -#undef C_TOUCH4ARGS - - diff --git a/Curses-1.23/hints/c-linux.bsd.h b/Curses-1.23/hints/c-linux.bsd.h deleted file mode 100644 index 1533240..0000000 --- a/Curses-1.23/hints/c-linux.bsd.h +++ /dev/null @@ -1,15 +0,0 @@ -/* Hint file for the Linux platform, BSD version of libcurses. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -#include - -#undef C_LONGNAME -#define C_LONG0ARGS -#undef C_LONG2ARGS - -#define C_TOUCHLINE -#undef C_TOUCH3ARGS -#define C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-linux.ncurses.h b/Curses-1.23/hints/c-linux.ncurses.h deleted file mode 100644 index bdc7632..0000000 --- a/Curses-1.23/hints/c-linux.ncurses.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Hint file for the Linux platform, ncurses version of libcurses. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -#include - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -#define C_LONGNAME -#define C_LONG0ARGS -#undef C_LONG2ARGS - -#define C_TOUCHLINE -#define C_TOUCH3ARGS -#undef C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-netbsd.h b/Curses-1.23/hints/c-netbsd.h deleted file mode 100644 index efe36b5..0000000 --- a/Curses-1.23/hints/c-netbsd.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Hint file for the NETBSD platform. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -/* These hints thanks to matthew green */ - -/* Note to NETBSD users: I have gotten several conflicting reports - * about the correct number of arguments for longname() and - * touchline(). You may have to look them up and edit this file to - * reflect the reality for your system. - */ - -#include - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -#define C_LONGNAME /* Does longname() exist? */ -#define C_LONG0ARGS /* Does longname() take 0 arguments? */ -#undef C_LONG2ARGS /* Does longname() take 2 arguments? */ - -#define C_TOUCHLINE /* Does touchline() exist? */ -#define C_TOUCH3ARGS /* Does touchline() take 3 arguments? */ -#undef C_TOUCH4ARGS /* Does touchline() take 4 arguments? */ diff --git a/Curses-1.23/hints/c-next.h b/Curses-1.23/hints/c-next.h deleted file mode 100644 index 12f3f01..0000000 --- a/Curses-1.23/hints/c-next.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Hint file for the NeXT platform. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -/* These hints thanks to Anno Siegel */ - -#include - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -#define C_LONGNAME -#undef C_LONG0ARGS -#define C_LONG2ARGS - -#define C_TOUCHLINE -#undef C_TOUCH3ARGS -#define C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-none.h b/Curses-1.23/hints/c-none.h deleted file mode 100644 index d69f065..0000000 --- a/Curses-1.23/hints/c-none.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Change below to the proper "include" file for curses. */ -#include - -/* Change below to the proper "include" file for panels. */ -#ifdef C_PANELSUPPORT -#include -#endif - -/* Change below to the proper "include" file for menus. */ -#ifdef C_MENUSUPPORT -#include -#endif - -/* Change below to the proper "include" file for forms. */ -#ifdef C_FORMSUPPORT -#include -#endif - -/* Change each #undef below to #define if the answer to the question - * beside it is "yes". - */ -#undef C_LONGNAME /* Does longname() exist? */ -#undef C_LONG0ARGS /* Does longname() take 0 arguments? */ -#undef C_LONG2ARGS /* Does longname() take 2 arguments? */ - -#undef C_TOUCHLINE /* Does touchline() exist? */ -#undef C_TOUCH3ARGS /* Does touchline() take 3 arguments? */ -#undef C_TOUCH4ARGS /* Does touchline() take 4 arguments? */ - -/* Some Curses include files have problems interacting with perl, - * some are missing basic functionality, and some just plain do - * weird things. Unfortunately, there's no way to anticipate all - * of the problems the curses include file + "perl.h" might create. - * - * If you find that you can't compile Curses.c because of these - * conflicts, you should insert C code before and after the "include" - * file above to try and fix the problems. "See c-sunos.sysv.h" - * for an example of this. - */ - diff --git a/Curses-1.23/hints/c-openbsd.h b/Curses-1.23/hints/c-openbsd.h deleted file mode 100644 index 9dca027..0000000 --- a/Curses-1.23/hints/c-openbsd.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Hint file for the OpenBSD platform. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -/* These hints thanks to Stanislav Grozev */ - -#include - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -#define C_LONGNAME -#define C_LONG0ARGS -#undef C_LONG2ARGS - -#define C_TOUCHLINE -#define C_TOUCH3ARGS -#undef C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-os2.ncurses.h b/Curses-1.23/hints/c-os2.ncurses.h deleted file mode 100644 index 456d152..0000000 --- a/Curses-1.23/hints/c-os2.ncurses.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Hint file for the OS/2 platform, ncurses version of libcurses. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -/* These hints thanks to "Andrew V. Stesin" */ - -#include - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -#define C_LONGNAME -#define C_LONG0ARGS -#undef C_LONG2ARGS - -#define C_TOUCHLINE -#define C_TOUCH3ARGS -#undef C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-sco.h b/Curses-1.23/hints/c-sco.h deleted file mode 100644 index fed920c..0000000 --- a/Curses-1.23/hints/c-sco.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Hint file for the SCO Unix (3.2 and 4.2) platform. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -/* These hints thanks to Han Holl <100327.1632@compuserve.com> */ - -#include - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -#define C_LONGNAME -#define C_LONG0ARGS -#undef C_LONG2ARGS - -#define C_TOUCHLINE -#define C_TOUCH3ARGS -#undef C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-solaris.h b/Curses-1.23/hints/c-solaris.h deleted file mode 100644 index ff04281..0000000 --- a/Curses-1.23/hints/c-solaris.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Hint file for the Solaris platform. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -/* These hints thanks to Douglas Acker */ - -#include - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -#define C_LONGNAME -#define C_LONG0ARGS -#undef C_LONG2ARGS - -#define C_TOUCHLINE -#define C_TOUCH3ARGS -#undef C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-sunos.bsd.h b/Curses-1.23/hints/c-sunos.bsd.h deleted file mode 100644 index b84db1e..0000000 --- a/Curses-1.23/hints/c-sunos.bsd.h +++ /dev/null @@ -1,15 +0,0 @@ -/* Hint file for the SunOS platform, BSD version of libcurses. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -#include - -#define C_LONGNAME -#define C_LONG0ARGS -#undef C_LONG2ARGS - -#define C_TOUCHLINE -#define C_TOUCH3ARGS -#undef C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-sunos.ncurses.h b/Curses-1.23/hints/c-sunos.ncurses.h deleted file mode 100644 index 2479fb2..0000000 --- a/Curses-1.23/hints/c-sunos.ncurses.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Hint file for the SunOS platform, ncurses version of libcurses. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -/* These hints thanks to Ivan Kohler */ - -#include /* or curses.h */ - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -#define C_LONGNAME -#define C_LONG0ARGS -#undef C_LONG2ARGS - -#define C_TOUCHLINE -#define C_TOUCH3ARGS -#undef C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-sunos.sysv.h b/Curses-1.23/hints/c-sunos.sysv.h deleted file mode 100644 index adf0302..0000000 --- a/Curses-1.23/hints/c-sunos.sysv.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Hint file for the SunOS platform, SysV version of libcurses. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -/* The combined set of lines below between * vvvv * and * ^^^^ * - * below is one example of how to fix compiler errors between the - * curses include file and the perl include files. It turns out that - * for the SunOS platform, SysV curses, there were these problems: - * - * 1) sprintf() was declared as returning different types in - * and "perl.h" - * 3) Lots of redefined warnings, because was included by - * both and "perl.h" - * - * You can see by looking at the fixes how each problem was resolved. - * - * Note that "perl.h" is always included after this file when deciding - * how to fix the conflicts. - */ - -/* vvvv */ -#define sprintf stupid_stupid_stupid -/* ^^^^ */ - -#include - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -/* vvvv */ -#undef sprintf -#define _sys_ioctl_h -/* ^^^^ */ - -#define C_LONGNAME -#define C_LONG0ARGS -#undef C_LONG2ARGS - -#define C_TOUCHLINE -#define C_TOUCH3ARGS -#undef C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-svr4.h b/Curses-1.23/hints/c-svr4.h deleted file mode 100644 index 28c5e62..0000000 --- a/Curses-1.23/hints/c-svr4.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Hint file for the NCR UNIX MP_RAS 3.02 platform. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -/* These hints thanks to James Bailey */ - - -#include - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -#define C_LONGNAME -#define C_LONG0ARGS -#undef C_LONG2ARGS - -#define C_TOUCHLINE -#define C_TOUCH3ARGS -#undef C_TOUCH4ARGS diff --git a/Curses-1.23/hints/c-vms.h b/Curses-1.23/hints/c-vms.h deleted file mode 100644 index feadc11..0000000 --- a/Curses-1.23/hints/c-vms.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Hint file for VMS. - * - * If this configuration doesn't work, look at the file "c-none.h" - * for how to set the configuration options. - */ - -/* These hints thanks to Peter Prymmer */ - -#include - -#ifdef C_PANELSUPPORT -#include -#endif - -#ifdef C_MENUSUPPORT -#include -#endif - -#ifdef C_FORMSUPPORT -#include -#endif - -#define C_LONGNAME -#undef C_LONG0ARGS -#define C_LONG2ARGS - -#undef C_TOUCHLINE -#undef C_TOUCH3ARGS -#undef C_TOUCH4ARGS - -#define cbreak() crmode() -#define nocbreak() nocrmode() diff --git a/Curses-1.23/list.syms b/Curses-1.23/list.syms deleted file mode 100644 index 53860c1..0000000 --- a/Curses-1.23/list.syms +++ /dev/null @@ -1,349 +0,0 @@ -## This file is automatically generated; changes will be lost. -## -## V = variable existence check -## E = function existence check, -## I = function "returns int?" check -## T = typedef existence check - -E waddch(stdscr,0) -E wechochar(stdscr,0) -E waddchstr(stdscr,0) -E waddchnstr(stdscr,0,0) -E waddstr(stdscr,0) -E waddnstr(stdscr,0,0) -E wattroff(stdscr,0) -E wattron(stdscr,0) -E wattrset(stdscr,0) -E wstandend(stdscr) -E wstandout(stdscr) -E wattr_get(stdscr,&LINES,&LINES,0) -E wattr_off(stdscr,0,0) -E wattr_on(stdscr,0,0) -E wattr_set(stdscr,0,0,0) -E wchgat(stdscr,0,0,0,0) -E COLOR_PAIR(0) -E PAIR_NUMBER(0) -E beep() -E flash() -E wbkgd(stdscr,0) -E wbkgdset(stdscr,0) -E getbkgd(stdscr) -E wborder(stdscr,0,0,0,0,0,0,0,0) -E box(stdscr,0,0) -E whline(stdscr,0,0) -E wvline(stdscr,0,0) -E werase(stdscr) -E wclear(stdscr) -E wclrtobot(stdscr) -E wclrtoeol(stdscr) -E start_color() -E init_pair(0,0,0) -E init_color(0,0,0,0) -E has_colors() -E can_change_color() -E color_content(0,&LINES,&LINES,&LINES) -E pair_content(0,&LINES,&LINES) -E wdelch(stdscr) -E wdeleteln(stdscr) -E winsdelln(stdscr,0) -E winsertln(stdscr) -E wgetch(stdscr) -E ungetch(0) -E has_key(0) -E KEY_F(0) -E wgetstr(stdscr,0) -E wgetnstr(stdscr,0,0) -E getyx(stdscr,LINES,LINES) -E getparyx(stdscr,LINES,LINES) -E getbegyx(stdscr,LINES,LINES) -E getmaxyx(stdscr,LINES,LINES) -E winch(stdscr) -E winchstr(stdscr,0) -E winchnstr(stdscr,0,0) -E initscr() -E endwin() -E isendwin() -E newterm(0,0,0) -E set_term(0) -E delscreen(0) -E cbreak() -I cbreak() -E nocbreak() -I nocbreak() -E echo() -I echo() -E noecho() -I noecho() -E halfdelay(0) -E intrflush(stdscr,0) -E keypad(stdscr,0) -E meta(stdscr,0) -E nodelay(stdscr,0) -E notimeout(stdscr,0) -E raw() -I raw() -E noraw() -I noraw() -E qiflush() -E noqiflush() -E wtimeout(stdscr,0) -E typeahead(0) -E winsch(stdscr,0) -E winsstr(stdscr,0) -E winsnstr(stdscr,0,0) -E winstr(stdscr,0) -E winnstr(stdscr,0,0) -E def_prog_mode() -E def_shell_mode() -E reset_prog_mode() -E reset_shell_mode() -E resetty() -E savetty() -E getsyx(LINES,LINES) -I getsyx(LINES,LINES) -E setsyx(0,0) -I setsyx(0,0) -E curs_set(0) -E napms(0) -E wmove(stdscr,0,0) -E clearok(stdscr,0) -E idlok(stdscr,0) -I idlok(stdscr,0) -E idcok(stdscr,0) -E immedok(stdscr,0) -E leaveok(stdscr,0) -E wsetscrreg(stdscr,0,0) -E scrollok(stdscr,0) -E nl() -I nl() -E nonl() -I nonl() -E overlay(stdscr,stdscr) -E overwrite(stdscr,stdscr) -E copywin(stdscr,stdscr,0,0,0,0,0,0,0) -E newpad(0,0) -E subpad(stdscr,0,0,0,0) -E prefresh(stdscr,0,0,0,0,0,0) -E pnoutrefresh(stdscr,0,0,0,0,0,0) -E pechochar(stdscr,0) -E wrefresh(stdscr) -E wnoutrefresh(stdscr) -E doupdate() -E redrawwin(stdscr) -E wredrawln(stdscr,0,0) -E scr_dump(0) -E scr_restore(0) -E scr_init(0) -E scr_set(0) -E scroll(stdscr) -E wscrl(stdscr,0) -E slk_init(0) -E slk_set(0,0,0) -E slk_refresh() -E slk_noutrefresh() -E slk_label(0) -E slk_clear() -E slk_restore() -E slk_touch() -E slk_attron(0) -E slk_attrset(0) -E slk_attr() -E slk_attroff(0) -E slk_color(0) -E baudrate() -E erasechar() -E has_ic() -E has_il() -E killchar() -E termattrs() -E termname() -E touchwin(stdscr) -E untouchwin(stdscr) -E wtouchln(stdscr,0,0,0) -E is_linetouched(stdscr,0) -E is_wintouched(stdscr) -E unctrl(0) -E keyname(0) -E filter() -I filter() -E use_env(0) -E putwin(stdscr,0) -E getwin(0) -E delay_output(0) -E flushinp() -E newwin(0,0,0,0) -E delwin(stdscr) -E mvwin(stdscr,0,0) -E subwin(stdscr,0,0,0,0) -E derwin(stdscr,0,0,0,0) -E mvderwin(stdscr,0,0) -E dupwin(stdscr) -E wsyncup(stdscr) -E syncok(stdscr,0) -E wcursyncup(stdscr) -E wsyncdown(stdscr) -E getmouse(0) -E ungetmouse(0) -E mousemask(0,&LINES) -E wenclose(stdscr,0,0) -E wmouse_trafo(stdscr,&LINES,&LINES,0) -E mouseinterval(0) -E BUTTON_RELEASE(0,0) -E BUTTON_PRESS(0,0) -E BUTTON_CLICK(0,0) -E BUTTON_DOUBLE_CLICK(0,0) -E BUTTON_TRIPLE_CLICK(0,0) -E BUTTON_RESERVED_EVENT(0,0) -E use_default_colors() -E assume_default_colors(0,0) -E define_key(0,0) -E keybound(0,0) -E keyok(0,0) -E resizeterm(0,0) -E wresize(stdscr,0,0) -E getmaxy(stdscr) -E getmaxx(stdscr) -E flusok(stdscr,0) -E getcap(0) -E touchoverlap(stdscr,stdscr) -E new_panel(stdscr) -E bottom_panel(0) -E top_panel(0) -E show_panel(0) -E update_panels() -E hide_panel(0) -E panel_window(0) -E replace_panel(0,stdscr) -E move_panel(0,0,0) -E panel_hidden(0) -E panel_above(0) -E panel_below(0) -E set_panel_userptr(0,0) -E panel_userptr(0) -E del_panel(0) -E set_menu_fore(0,0) -E menu_fore(0) -E set_menu_back(0,0) -E menu_back(0) -E set_menu_grey(0,0) -E menu_grey(0) -E set_menu_pad(0,0) -E menu_pad(0) -E pos_menu_cursor(0) -E menu_driver(0,0) -E set_menu_format(0,0,0) -E menu_format(0,&LINES,&LINES) -E set_menu_items(0,0) -E menu_items(0) -E item_count(0) -E set_menu_mark(0,0) -E menu_mark(0) -E new_menu(0) -E free_menu(0) -E menu_opts(0) -E set_menu_opts(0,0) -E menu_opts_on(0,0) -E menu_opts_off(0,0) -E set_menu_pattern(0,0) -E menu_pattern(0) -E post_menu(0) -E unpost_menu(0) -E set_menu_userptr(0,0) -E menu_userptr(0) -E set_menu_win(0,stdscr) -E menu_win(0) -E set_menu_sub(0,stdscr) -E menu_sub(0) -E scale_menu(0,&LINES,&LINES) -E set_current_item(0,0) -E current_item(0) -E set_top_row(0,0) -E top_row(0) -E item_index(0) -E item_name(0) -E item_description(0) -E new_item(0,0) -E free_item(0) -E set_item_opts(0,0) -E item_opts_on(0,0) -E item_opts_off(0,0) -E item_opts(0) -E item_userptr(0) -E set_item_userptr(0,0) -E set_item_value(0,0) -E item_value(0) -E item_visible(0) -E menu_request_name(0) -E menu_request_by_name(0) -E set_menu_spacing(0,0,0,0) -E menu_spacing(0,&LINES,&LINES,&LINES) -E pos_form_cursor(0) -E data_ahead(0) -E data_behind(0) -E form_driver(0,0) -E set_form_fields(0,0) -E form_fields(0) -E field_count(0) -E move_field(0,0,0) -E new_form(0) -E free_form(0) -E set_new_page(0,0) -E new_page(0) -E set_form_opts(0,0) -E form_opts_on(0,0) -E form_opts_off(0,0) -E form_opts(0) -E set_current_field(0,0) -E current_field(0) -E set_form_page(0,0) -E form_page(0) -E field_index(0) -E post_form(0) -E unpost_form(0) -E set_form_userptr(0,0) -E form_userptr(0) -E set_form_win(0,stdscr) -E form_win(0) -E set_form_sub(0,stdscr) -E form_sub(0) -E scale_form(0,&LINES,&LINES) -E set_field_fore(0,0) -E field_fore(0) -E set_field_back(0,0) -E field_back(0) -E set_field_pad(0,0) -E field_pad(0) -E set_field_buffer(0,0,0) -E field_buffer(0,0) -E set_field_status(0,0) -E field_status(0) -E set_max_field(0,0) -E field_info(0,&LINES,&LINES,&LINES,&LINES,&LINES,&LINES) -E dynamic_field_info(0,&LINES,&LINES,&LINES) -E set_field_just(0,0) -E field_just(0) -E new_field(0,0,0,0,0,0) -E dup_field(0,0,0) -E link_field(0,0,0) -E free_field(0) -E set_field_opts(0,0) -E field_opts_on(0,0) -E field_opts_off(0,0) -E field_opts(0) -E set_field_userptr(0,0) -E field_userptr(0) -E field_arg(0) -E form_request_name(0) -E form_request_by_name(0) -V LINES -V COLS -V stdscr -V curscr -V COLORS -V COLOR_PAIRS -T attr_t -T bool -T chtype -T MEVENT -T mmask_t -T SCREEN diff --git a/Curses-1.23/perl-Curses.spec b/Curses-1.23/perl-Curses.spec deleted file mode 100644 index eccd9e2..0000000 --- a/Curses-1.23/perl-Curses.spec +++ /dev/null @@ -1,69 +0,0 @@ -%define _use_internal_dependency_generator 0 -%define debug_package %nil - -Name: perl-Curses -Version: 1.23 -Release: 1 -Summary: Terminal screen handling and optimization -License: Perl/Artistic License? -Group: Applications/CPAN -URL: http://cpan.org/modules/by-module/Curses/Curses-1.23.tar.gz -BuildRoot: %{_tmppath}/%{name}-root -Requires: perl >= 0:5.002 -Buildarch: noarch -Source: Curses-%{version}.tar.gz - -%description -"Curses" is the interface between Perl and your system’s curses(3) library. -For descriptions on the usage of a given function, variable, or constant, -consult your system’s documentation, as such information invariably varies -(:-) between different curses(3) libraries and operating systems. This -document describes the interface itself, and assumes that you already know -how your system’s c. - -%prep -%setup -q -n Curses-%{version} - -%build -umask 022 -CFLAGS="$RPM_OPT_FLAGS" perl Makefile.PL PREFIX=$RPM_BUILD_ROOT/usr INSTALLDIRS=vendor -make -make test - -%install -umask 022 -if [ "$RPM_BUILD_ROOT" != "/" ]; then - %{__rm} -rf $RPM_BUILD_ROOT -fi -make install - -[ -x /usr/lib/rpm/brp-compress ] && /usr/lib/rpm/brp-compress - -find $RPM_BUILD_ROOT \( -name perllocal.pod -o -name .packlist \) -exec rm -v {} \; - -find $RPM_BUILD_ROOT/usr -type f -print | \ - sed "s@^$RPM_BUILD_ROOT@@g" | \ - grep -v perllocal.pod | \ - grep -v "\.packlist" > %{name}-%{version}-filelist -if [ "$(cat %{name}-%{version}-filelist)X" = "X" ] ; then - echo "ERROR: EMPTY FILE LIST" - exit -1 -fi - -%clean -if [ "$RPM_BUILD_ROOT" != "/" ]; then - %{__rm} -rf $RPM_BUILD_ROOT -fi - -%files -f %{name}-%{version}-filelist -%defattr(-,root,root) - -%changelog -* Thu Apr 10 2008 Egan Ford -+ perl-Curses-1.23-1 -- First cut for xCAT 2.0. - -* Tue Jan 09 2007 Daryl W. Grunau -+ xcat-perl-Curses-1.23-1 -- First cut. - diff --git a/Curses-1.23/ppport.h b/Curses-1.23/ppport.h deleted file mode 100644 index 905cddd..0000000 --- a/Curses-1.23/ppport.h +++ /dev/null @@ -1,6377 +0,0 @@ -#if 0 -<<'SKIP'; -#endif -/* ----------------------------------------------------------------------- - - ppport.h -- Perl/Pollution/Portability Version 3.13 - - Automatically created by Devel::PPPort running under perl 5.006002. - - Do NOT edit this file directly! -- Edit PPPort_pm.PL and the - includes in parts/inc/ instead. - - Use 'perldoc ppport.h' to view the documentation below. - ----------------------------------------------------------------------- - -SKIP - -=pod - -=head1 NAME - -ppport.h - Perl/Pollution/Portability version 3.13 - -=head1 SYNOPSIS - - perl ppport.h [options] [source files] - - Searches current directory for files if no [source files] are given - - --help show short help - - --version show version - - --patch=file write one patch file with changes - --copy=suffix write changed copies with suffix - --diff=program use diff program and options - - --compat-version=version provide compatibility with Perl version - --cplusplus accept C++ comments - - --quiet don't output anything except fatal errors - --nodiag don't show diagnostics - --nohints don't show hints - --nochanges don't suggest changes - --nofilter don't filter input files - - --strip strip all script and doc functionality from - ppport.h - - --list-provided list provided API - --list-unsupported list unsupported API - --api-info=name show Perl API portability information - -=head1 COMPATIBILITY - -This version of F is designed to support operation with Perl -installations back to 5.003, and has been tested up to 5.10.0. - -=head1 OPTIONS - -=head2 --help - -Display a brief usage summary. - -=head2 --version - -Display the version of F. - -=head2 --patch=I - -If this option is given, a single patch file will be created if -any changes are suggested. This requires a working diff program -to be installed on your system. - -=head2 --copy=I - -If this option is given, a copy of each file will be saved with -the given suffix that contains the suggested changes. This does -not require any external programs. Note that this does not -automagially add a dot between the original filename and the -suffix. If you want the dot, you have to include it in the option -argument. - -If neither C<--patch> or C<--copy> are given, the default is to -simply print the diffs for each file. This requires either -C or a C program to be installed. - -=head2 --diff=I - -Manually set the diff program and options to use. The default -is to use C, when installed, and output unified -context diffs. - -=head2 --compat-version=I - -Tell F to check for compatibility with the given -Perl version. The default is to check for compatibility with Perl -version 5.003. You can use this option to reduce the output -of F if you intend to be backward compatible only -down to a certain Perl version. - -=head2 --cplusplus - -Usually, F will detect C++ style comments and -replace them with C style comments for portability reasons. -Using this option instructs F to leave C++ -comments untouched. - -=head2 --quiet - -Be quiet. Don't print anything except fatal errors. - -=head2 --nodiag - -Don't output any diagnostic messages. Only portability -alerts will be printed. - -=head2 --nohints - -Don't output any hints. Hints often contain useful portability -notes. Warnings will still be displayed. - -=head2 --nochanges - -Don't suggest any changes. Only give diagnostic output and hints -unless these are also deactivated. - -=head2 --nofilter - -Don't filter the list of input files. By default, files not looking -like source code (i.e. not *.xs, *.c, *.cc, *.cpp or *.h) are skipped. - -=head2 --strip - -Strip all script and documentation functionality from F. -This reduces the size of F dramatically and may be useful -if you want to include F in smaller modules without -increasing their distribution size too much. - -The stripped F will have a C<--unstrip> option that allows -you to undo the stripping, but only if an appropriate C -module is installed. - -=head2 --list-provided - -Lists the API elements for which compatibility is provided by -F. Also lists if it must be explicitly requested, -if it has dependencies, and if there are hints or warnings for it. - -=head2 --list-unsupported - -Lists the API elements that are known not to be supported by -F and below which version of Perl they probably -won't be available or work. - -=head2 --api-info=I - -Show portability information for API elements matching I. -If I is surrounded by slashes, it is interpreted as a regular -expression. - -=head1 DESCRIPTION - -In order for a Perl extension (XS) module to be as portable as possible -across differing versions of Perl itself, certain steps need to be taken. - -=over 4 - -=item * - -Including this header is the first major one. This alone will give you -access to a large part of the Perl API that hasn't been available in -earlier Perl releases. Use - - perl ppport.h --list-provided - -to see which API elements are provided by ppport.h. - -=item * - -You should avoid using deprecated parts of the API. For example, using -global Perl variables without the C prefix is deprecated. Also, -some API functions used to have a C prefix. Using this form is -also deprecated. You can safely use the supported API, as F -will provide wrappers for older Perl versions. - -=item * - -If you use one of a few functions or variables that were not present in -earlier versions of Perl, and that can't be provided using a macro, you -have to explicitly request support for these functions by adding one or -more C<#define>s in your source code before the inclusion of F. - -These functions or variables will be marked C in the list shown -by C<--list-provided>. - -Depending on whether you module has a single or multiple files that -use such functions or variables, you want either C or global -variants. - -For a C function or variable (used only in a single source -file), use: - - #define NEED_function - #define NEED_variable - -For a global function or variable (used in multiple source files), -use: - - #define NEED_function_GLOBAL - #define NEED_variable_GLOBAL - -Note that you mustn't have more than one global request for the -same function or variable in your project. - - Function / Variable Static Request Global Request - ----------------------------------------------------------------------------------------- - PL_signals NEED_PL_signals NEED_PL_signals_GLOBAL - eval_pv() NEED_eval_pv NEED_eval_pv_GLOBAL - grok_bin() NEED_grok_bin NEED_grok_bin_GLOBAL - grok_hex() NEED_grok_hex NEED_grok_hex_GLOBAL - grok_number() NEED_grok_number NEED_grok_number_GLOBAL - grok_numeric_radix() NEED_grok_numeric_radix NEED_grok_numeric_radix_GLOBAL - grok_oct() NEED_grok_oct NEED_grok_oct_GLOBAL - load_module() NEED_load_module NEED_load_module_GLOBAL - my_snprintf() NEED_my_snprintf NEED_my_snprintf_GLOBAL - my_strlcat() NEED_my_strlcat NEED_my_strlcat_GLOBAL - my_strlcpy() NEED_my_strlcpy NEED_my_strlcpy_GLOBAL - newCONSTSUB() NEED_newCONSTSUB NEED_newCONSTSUB_GLOBAL - newRV_noinc() NEED_newRV_noinc NEED_newRV_noinc_GLOBAL - newSVpvn_share() NEED_newSVpvn_share NEED_newSVpvn_share_GLOBAL - sv_2pv_flags() NEED_sv_2pv_flags NEED_sv_2pv_flags_GLOBAL - sv_2pvbyte() NEED_sv_2pvbyte NEED_sv_2pvbyte_GLOBAL - sv_catpvf_mg() NEED_sv_catpvf_mg NEED_sv_catpvf_mg_GLOBAL - sv_catpvf_mg_nocontext() NEED_sv_catpvf_mg_nocontext NEED_sv_catpvf_mg_nocontext_GLOBAL - sv_pvn_force_flags() NEED_sv_pvn_force_flags NEED_sv_pvn_force_flags_GLOBAL - sv_setpvf_mg() NEED_sv_setpvf_mg NEED_sv_setpvf_mg_GLOBAL - sv_setpvf_mg_nocontext() NEED_sv_setpvf_mg_nocontext NEED_sv_setpvf_mg_nocontext_GLOBAL - vload_module() NEED_vload_module NEED_vload_module_GLOBAL - vnewSVpvf() NEED_vnewSVpvf NEED_vnewSVpvf_GLOBAL - warner() NEED_warner NEED_warner_GLOBAL - -To avoid namespace conflicts, you can change the namespace of the -explicitly exported functions / variables using the C -macro. Just C<#define> the macro before including C: - - #define DPPP_NAMESPACE MyOwnNamespace_ - #include "ppport.h" - -The default namespace is C. - -=back - -The good thing is that most of the above can be checked by running -F on your source code. See the next section for -details. - -=head1 EXAMPLES - -To verify whether F is needed for your module, whether you -should make any changes to your code, and whether any special defines -should be used, F can be run as a Perl script to check your -source code. Simply say: - - perl ppport.h - -The result will usually be a list of patches suggesting changes -that should at least be acceptable, if not necessarily the most -efficient solution, or a fix for all possible problems. - -If you know that your XS module uses features only available in -newer Perl releases, if you're aware that it uses C++ comments, -and if you want all suggestions as a single patch file, you could -use something like this: - - perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff - -If you only want your code to be scanned without any suggestions -for changes, use: - - perl ppport.h --nochanges - -You can specify a different C program or options, using -the C<--diff> option: - - perl ppport.h --diff='diff -C 10' - -This would output context diffs with 10 lines of context. - -If you want to create patched copies of your files instead, use: - - perl ppport.h --copy=.new - -To display portability information for the C function, -use: - - perl ppport.h --api-info=newSVpvn - -Since the argument to C<--api-info> can be a regular expression, -you can use - - perl ppport.h --api-info=/_nomg$/ - -to display portability information for all C<_nomg> functions or - - perl ppport.h --api-info=/./ - -to display information for all known API elements. - -=head1 BUGS - -If this version of F is causing failure during -the compilation of this module, please check if newer versions -of either this module or C are available on CPAN -before sending a bug report. - -If F was generated using the latest version of -C and is causing failure of this module, please -file a bug report using the CPAN Request Tracker at L. - -Please include the following information: - -=over 4 - -=item 1. - -The complete output from running "perl -V" - -=item 2. - -This file. - -=item 3. - -The name and version of the module you were trying to build. - -=item 4. - -A full log of the build that failed. - -=item 5. - -Any other information that you think could be relevant. - -=back - -For the latest version of this code, please get the C -module from CPAN. - -=head1 COPYRIGHT - -Version 3.x, Copyright (c) 2004-2007, Marcus Holland-Moritz. - -Version 2.x, Copyright (C) 2001, Paul Marquess. - -Version 1.x, Copyright (C) 1999, Kenneth Albanowski. - -This program is free software; you can redistribute it and/or -modify it under the same terms as Perl itself. - -=head1 SEE ALSO - -See L. - -=cut - -use strict; - -# Disable broken TRIE-optimization -BEGIN { eval '${^RE_TRIE_MAXBUF} = -1' if $] >= 5.009004 && $] <= 5.009005 } - -my $VERSION = 3.13; - -my %opt = ( - quiet => 0, - diag => 1, - hints => 1, - changes => 1, - cplusplus => 0, - filter => 1, - strip => 0, - version => 0, -); - -my($ppport) = $0 =~ /([\w.]+)$/; -my $LF = '(?:\r\n|[\r\n])'; # line feed -my $HS = "[ \t]"; # horizontal whitespace - -# Never use C comments in this file! -my $ccs = '/'.'*'; -my $cce = '*'.'/'; -my $rccs = quotemeta $ccs; -my $rcce = quotemeta $cce; - -eval { - require Getopt::Long; - Getopt::Long::GetOptions(\%opt, qw( - help quiet diag! filter! hints! changes! cplusplus strip version - patch=s copy=s diff=s compat-version=s - list-provided list-unsupported api-info=s - )) or usage(); -}; - -if ($@ and grep /^-/, @ARGV) { - usage() if "@ARGV" =~ /^--?h(?:elp)?$/; - die "Getopt::Long not found. Please don't use any options.\n"; -} - -if ($opt{version}) { - print "This is $0 $VERSION.\n"; - exit 0; -} - -usage() if $opt{help}; -strip() if $opt{strip}; - -if (exists $opt{'compat-version'}) { - my($r,$v,$s) = eval { parse_version($opt{'compat-version'}) }; - if ($@) { - die "Invalid version number format: '$opt{'compat-version'}'\n"; - } - die "Only Perl 5 is supported\n" if $r != 5; - die "Invalid version number: $opt{'compat-version'}\n" if $v >= 1000 || $s >= 1000; - $opt{'compat-version'} = sprintf "%d.%03d%03d", $r, $v, $s; -} -else { - $opt{'compat-version'} = 5; -} - -my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/ - ? ( $1 => { - ($2 ? ( base => $2 ) : ()), - ($3 ? ( todo => $3 ) : ()), - (index($4, 'v') >= 0 ? ( varargs => 1 ) : ()), - (index($4, 'p') >= 0 ? ( provided => 1 ) : ()), - (index($4, 'n') >= 0 ? ( nothxarg => 1 ) : ()), - } ) - : die "invalid spec: $_" } qw( -AvFILLp|5.004050||p -AvFILL||| -CLASS|||n -CX_CURPAD_SAVE||| -CX_CURPAD_SV||| -CopFILEAV|5.006000||p -CopFILEGV_set|5.006000||p -CopFILEGV|5.006000||p -CopFILESV|5.006000||p -CopFILE_set|5.006000||p -CopFILE|5.006000||p -CopSTASHPV_set|5.006000||p -CopSTASHPV|5.006000||p -CopSTASH_eq|5.006000||p -CopSTASH_set|5.006000||p -CopSTASH|5.006000||p -CopyD|5.009002||p -Copy||| -CvPADLIST||| -CvSTASH||| -CvWEAKOUTSIDE||| -DEFSV|5.004050||p -END_EXTERN_C|5.005000||p -ENTER||| -ERRSV|5.004050||p -EXTEND||| -EXTERN_C|5.005000||p -F0convert|||n -FREETMPS||| -GIMME_V||5.004000|n -GIMME|||n -GROK_NUMERIC_RADIX|5.007002||p -G_ARRAY||| -G_DISCARD||| -G_EVAL||| -G_NOARGS||| -G_SCALAR||| -G_VOID||5.004000| -GetVars||| -GvSV||| -Gv_AMupdate||| -HEf_SVKEY||5.004000| -HeHASH||5.004000| -HeKEY||5.004000| -HeKLEN||5.004000| -HePV||5.004000| -HeSVKEY_force||5.004000| -HeSVKEY_set||5.004000| -HeSVKEY||5.004000| -HeVAL||5.004000| -HvNAME||| -INT2PTR|5.006000||p -IN_LOCALE_COMPILETIME|5.007002||p -IN_LOCALE_RUNTIME|5.007002||p -IN_LOCALE|5.007002||p -IN_PERL_COMPILETIME|5.008001||p -IS_NUMBER_GREATER_THAN_UV_MAX|5.007002||p -IS_NUMBER_INFINITY|5.007002||p -IS_NUMBER_IN_UV|5.007002||p -IS_NUMBER_NAN|5.007003||p -IS_NUMBER_NEG|5.007002||p -IS_NUMBER_NOT_INT|5.007002||p -IVSIZE|5.006000||p -IVTYPE|5.006000||p -IVdf|5.006000||p -LEAVE||| -LVRET||| -MARK||| -MULTICALL||5.009005| -MY_CXT_CLONE|5.009002||p -MY_CXT_INIT|5.007003||p -MY_CXT|5.007003||p -MoveD|5.009002||p -Move||| -NOOP|5.005000||p -NUM2PTR|5.006000||p -NVTYPE|5.006000||p -NVef|5.006001||p -NVff|5.006001||p -NVgf|5.006001||p -Newxc|5.009003||p -Newxz|5.009003||p -Newx|5.009003||p -Nullav||| -Nullch||| -Nullcv||| -Nullhv||| -Nullsv||| -ORIGMARK||| -PAD_BASE_SV||| -PAD_CLONE_VARS||| -PAD_COMPNAME_FLAGS||| -PAD_COMPNAME_GEN_set||| -PAD_COMPNAME_GEN||| -PAD_COMPNAME_OURSTASH||| -PAD_COMPNAME_PV||| -PAD_COMPNAME_TYPE||| -PAD_RESTORE_LOCAL||| -PAD_SAVE_LOCAL||| -PAD_SAVE_SETNULLPAD||| -PAD_SETSV||| -PAD_SET_CUR_NOSAVE||| -PAD_SET_CUR||| -PAD_SVl||| -PAD_SV||| -PERL_ABS|5.008001||p -PERL_BCDVERSION|5.009005||p -PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||p -PERL_HASH|5.004000||p -PERL_INT_MAX|5.004000||p -PERL_INT_MIN|5.004000||p -PERL_LONG_MAX|5.004000||p -PERL_LONG_MIN|5.004000||p -PERL_MAGIC_arylen|5.007002||p -PERL_MAGIC_backref|5.007002||p -PERL_MAGIC_bm|5.007002||p -PERL_MAGIC_collxfrm|5.007002||p -PERL_MAGIC_dbfile|5.007002||p -PERL_MAGIC_dbline|5.007002||p -PERL_MAGIC_defelem|5.007002||p -PERL_MAGIC_envelem|5.007002||p -PERL_MAGIC_env|5.007002||p -PERL_MAGIC_ext|5.007002||p -PERL_MAGIC_fm|5.007002||p -PERL_MAGIC_glob|5.009005||p -PERL_MAGIC_isaelem|5.007002||p -PERL_MAGIC_isa|5.007002||p -PERL_MAGIC_mutex|5.009005||p -PERL_MAGIC_nkeys|5.007002||p -PERL_MAGIC_overload_elem|5.007002||p -PERL_MAGIC_overload_table|5.007002||p -PERL_MAGIC_overload|5.007002||p -PERL_MAGIC_pos|5.007002||p -PERL_MAGIC_qr|5.007002||p -PERL_MAGIC_regdata|5.007002||p -PERL_MAGIC_regdatum|5.007002||p -PERL_MAGIC_regex_global|5.007002||p -PERL_MAGIC_shared_scalar|5.007003||p -PERL_MAGIC_shared|5.007003||p -PERL_MAGIC_sigelem|5.007002||p -PERL_MAGIC_sig|5.007002||p -PERL_MAGIC_substr|5.007002||p -PERL_MAGIC_sv|5.007002||p -PERL_MAGIC_taint|5.007002||p -PERL_MAGIC_tiedelem|5.007002||p -PERL_MAGIC_tiedscalar|5.007002||p -PERL_MAGIC_tied|5.007002||p -PERL_MAGIC_utf8|5.008001||p -PERL_MAGIC_uvar_elem|5.007003||p -PERL_MAGIC_uvar|5.007002||p -PERL_MAGIC_vec|5.007002||p -PERL_MAGIC_vstring|5.008001||p -PERL_QUAD_MAX|5.004000||p -PERL_QUAD_MIN|5.004000||p -PERL_REVISION|5.006000||p -PERL_SCAN_ALLOW_UNDERSCORES|5.007003||p -PERL_SCAN_DISALLOW_PREFIX|5.007003||p -PERL_SCAN_GREATER_THAN_UV_MAX|5.007003||p -PERL_SCAN_SILENT_ILLDIGIT|5.008001||p -PERL_SHORT_MAX|5.004000||p -PERL_SHORT_MIN|5.004000||p -PERL_SIGNALS_UNSAFE_FLAG|5.008001||p -PERL_SUBVERSION|5.006000||p -PERL_UCHAR_MAX|5.004000||p -PERL_UCHAR_MIN|5.004000||p -PERL_UINT_MAX|5.004000||p -PERL_UINT_MIN|5.004000||p -PERL_ULONG_MAX|5.004000||p -PERL_ULONG_MIN|5.004000||p -PERL_UNUSED_ARG|5.009003||p -PERL_UNUSED_CONTEXT|5.009004||p -PERL_UNUSED_DECL|5.007002||p -PERL_UNUSED_VAR|5.007002||p -PERL_UQUAD_MAX|5.004000||p -PERL_UQUAD_MIN|5.004000||p -PERL_USE_GCC_BRACE_GROUPS|5.009004||p -PERL_USHORT_MAX|5.004000||p -PERL_USHORT_MIN|5.004000||p -PERL_VERSION|5.006000||p -PL_DBsignal|5.005000||p -PL_DBsingle|||pn -PL_DBsub|||pn -PL_DBtrace|||pn -PL_Sv|5.005000||p -PL_compiling|5.004050||p -PL_copline|5.009005||p -PL_curcop|5.004050||p -PL_curstash|5.004050||p -PL_debstash|5.004050||p -PL_defgv|5.004050||p -PL_diehook|5.004050||p -PL_dirty|5.004050||p -PL_dowarn|||pn -PL_errgv|5.004050||p -PL_expect|5.009005||p -PL_hexdigit|5.005000||p -PL_hints|5.005000||p -PL_last_in_gv|||n -PL_laststatval|5.005000||p -PL_modglobal||5.005000|n -PL_na|5.004050||pn -PL_no_modify|5.006000||p -PL_ofs_sv|||n -PL_perl_destruct_level|5.004050||p -PL_perldb|5.004050||p -PL_ppaddr|5.006000||p -PL_rsfp_filters|5.004050||p -PL_rsfp|5.004050||p -PL_rs|||n -PL_signals|5.008001||p -PL_stack_base|5.004050||p -PL_stack_sp|5.004050||p -PL_statcache|5.005000||p -PL_stdingv|5.004050||p -PL_sv_arenaroot|5.004050||p -PL_sv_no|5.004050||pn -PL_sv_undef|5.004050||pn -PL_sv_yes|5.004050||pn -PL_tainted|5.004050||p -PL_tainting|5.004050||p -POP_MULTICALL||5.009005| -POPi|||n -POPl|||n -POPn|||n -POPpbytex||5.007001|n -POPpx||5.005030|n -POPp|||n -POPs|||n -PTR2IV|5.006000||p -PTR2NV|5.006000||p -PTR2UV|5.006000||p -PTR2ul|5.007001||p -PTRV|5.006000||p -PUSHMARK||| -PUSH_MULTICALL||5.009005| -PUSHi||| -PUSHmortal|5.009002||p -PUSHn||| -PUSHp||| -PUSHs||| -PUSHu|5.004000||p -PUTBACK||| -PerlIO_clearerr||5.007003| -PerlIO_close||5.007003| -PerlIO_context_layers||5.009004| -PerlIO_eof||5.007003| -PerlIO_error||5.007003| -PerlIO_fileno||5.007003| -PerlIO_fill||5.007003| -PerlIO_flush||5.007003| -PerlIO_get_base||5.007003| -PerlIO_get_bufsiz||5.007003| -PerlIO_get_cnt||5.007003| -PerlIO_get_ptr||5.007003| -PerlIO_read||5.007003| -PerlIO_seek||5.007003| -PerlIO_set_cnt||5.007003| -PerlIO_set_ptrcnt||5.007003| -PerlIO_setlinebuf||5.007003| -PerlIO_stderr||5.007003| -PerlIO_stdin||5.007003| -PerlIO_stdout||5.007003| -PerlIO_tell||5.007003| -PerlIO_unread||5.007003| -PerlIO_write||5.007003| -Perl_signbit||5.009005|n -PoisonFree|5.009004||p -PoisonNew|5.009004||p -PoisonWith|5.009004||p -Poison|5.008000||p -RETVAL|||n -Renewc||| -Renew||| -SAVECLEARSV||| -SAVECOMPPAD||| -SAVEPADSV||| -SAVETMPS||| -SAVE_DEFSV|5.004050||p -SPAGAIN||| -SP||| -START_EXTERN_C|5.005000||p -START_MY_CXT|5.007003||p -STMT_END|||p -STMT_START|||p -STR_WITH_LEN|5.009003||p -ST||| -SV_CONST_RETURN|5.009003||p -SV_COW_DROP_PV|5.008001||p -SV_COW_SHARED_HASH_KEYS|5.009005||p -SV_GMAGIC|5.007002||p -SV_HAS_TRAILING_NUL|5.009004||p -SV_IMMEDIATE_UNREF|5.007001||p -SV_MUTABLE_RETURN|5.009003||p -SV_NOSTEAL|5.009002||p -SV_SMAGIC|5.009003||p -SV_UTF8_NO_ENCODING|5.008001||p -SVf|5.006000||p -SVt_IV||| -SVt_NV||| -SVt_PVAV||| -SVt_PVCV||| -SVt_PVHV||| -SVt_PVMG||| -SVt_PV||| -Safefree||| -Slab_Alloc||| -Slab_Free||| -Slab_to_rw||| -StructCopy||| -SvCUR_set||| -SvCUR||| -SvEND||| -SvGAMAGIC||5.006001| -SvGETMAGIC|5.004050||p -SvGROW||| -SvIOK_UV||5.006000| -SvIOK_notUV||5.006000| -SvIOK_off||| -SvIOK_only_UV||5.006000| -SvIOK_only||| -SvIOK_on||| -SvIOKp||| -SvIOK||| -SvIVX||| -SvIV_nomg|5.009001||p -SvIV_set||| -SvIVx||| -SvIV||| -SvIsCOW_shared_hash||5.008003| -SvIsCOW||5.008003| -SvLEN_set||| -SvLEN||| -SvLOCK||5.007003| -SvMAGIC_set|5.009003||p -SvNIOK_off||| -SvNIOKp||| -SvNIOK||| -SvNOK_off||| -SvNOK_only||| -SvNOK_on||| -SvNOKp||| -SvNOK||| -SvNVX||| -SvNV_set||| -SvNVx||| -SvNV||| -SvOK||| -SvOOK||| -SvPOK_off||| -SvPOK_only_UTF8||5.006000| -SvPOK_only||| -SvPOK_on||| -SvPOKp||| -SvPOK||| -SvPVX_const|5.009003||p -SvPVX_mutable|5.009003||p -SvPVX||| -SvPV_const|5.009003||p -SvPV_flags_const_nolen|5.009003||p -SvPV_flags_const|5.009003||p -SvPV_flags_mutable|5.009003||p -SvPV_flags|5.007002||p -SvPV_force_flags_mutable|5.009003||p -SvPV_force_flags_nolen|5.009003||p -SvPV_force_flags|5.007002||p -SvPV_force_mutable|5.009003||p -SvPV_force_nolen|5.009003||p -SvPV_force_nomg_nolen|5.009003||p -SvPV_force_nomg|5.007002||p -SvPV_force|||p -SvPV_mutable|5.009003||p -SvPV_nolen_const|5.009003||p -SvPV_nolen|5.006000||p -SvPV_nomg_const_nolen|5.009003||p -SvPV_nomg_const|5.009003||p -SvPV_nomg|5.007002||p -SvPV_set||| -SvPVbyte_force||5.009002| -SvPVbyte_nolen||5.006000| -SvPVbytex_force||5.006000| -SvPVbytex||5.006000| -SvPVbyte|5.006000||p -SvPVutf8_force||5.006000| -SvPVutf8_nolen||5.006000| -SvPVutf8x_force||5.006000| -SvPVutf8x||5.006000| -SvPVutf8||5.006000| -SvPVx||| -SvPV||| -SvREFCNT_dec||| -SvREFCNT_inc_NN|5.009004||p -SvREFCNT_inc_simple_NN|5.009004||p -SvREFCNT_inc_simple_void_NN|5.009004||p -SvREFCNT_inc_simple_void|5.009004||p -SvREFCNT_inc_simple|5.009004||p -SvREFCNT_inc_void_NN|5.009004||p -SvREFCNT_inc_void|5.009004||p -SvREFCNT_inc|||p -SvREFCNT||| -SvROK_off||| -SvROK_on||| -SvROK||| -SvRV_set|5.009003||p -SvRV||| -SvRXOK||5.009005| -SvRX||5.009005| -SvSETMAGIC||| -SvSHARED_HASH|5.009003||p -SvSHARE||5.007003| -SvSTASH_set|5.009003||p -SvSTASH||| -SvSetMagicSV_nosteal||5.004000| -SvSetMagicSV||5.004000| -SvSetSV_nosteal||5.004000| -SvSetSV||| -SvTAINTED_off||5.004000| -SvTAINTED_on||5.004000| -SvTAINTED||5.004000| -SvTAINT||| -SvTRUE||| -SvTYPE||| -SvUNLOCK||5.007003| -SvUOK|5.007001|5.006000|p -SvUPGRADE||| -SvUTF8_off||5.006000| -SvUTF8_on||5.006000| -SvUTF8||5.006000| -SvUVXx|5.004000||p -SvUVX|5.004000||p -SvUV_nomg|5.009001||p -SvUV_set|5.009003||p -SvUVx|5.004000||p -SvUV|5.004000||p -SvVOK||5.008001| -SvVSTRING_mg|5.009004||p -THIS|||n -UNDERBAR|5.009002||p -UTF8_MAXBYTES|5.009002||p -UVSIZE|5.006000||p -UVTYPE|5.006000||p -UVXf|5.007001||p -UVof|5.006000||p -UVuf|5.006000||p -UVxf|5.006000||p -WARN_ALL|5.006000||p -WARN_AMBIGUOUS|5.006000||p -WARN_ASSERTIONS|5.009005||p -WARN_BAREWORD|5.006000||p -WARN_CLOSED|5.006000||p -WARN_CLOSURE|5.006000||p -WARN_DEBUGGING|5.006000||p -WARN_DEPRECATED|5.006000||p -WARN_DIGIT|5.006000||p -WARN_EXEC|5.006000||p -WARN_EXITING|5.006000||p -WARN_GLOB|5.006000||p -WARN_INPLACE|5.006000||p -WARN_INTERNAL|5.006000||p -WARN_IO|5.006000||p -WARN_LAYER|5.008000||p -WARN_MALLOC|5.006000||p -WARN_MISC|5.006000||p -WARN_NEWLINE|5.006000||p -WARN_NUMERIC|5.006000||p -WARN_ONCE|5.006000||p -WARN_OVERFLOW|5.006000||p -WARN_PACK|5.006000||p -WARN_PARENTHESIS|5.006000||p -WARN_PIPE|5.006000||p -WARN_PORTABLE|5.006000||p -WARN_PRECEDENCE|5.006000||p -WARN_PRINTF|5.006000||p -WARN_PROTOTYPE|5.006000||p -WARN_QW|5.006000||p -WARN_RECURSION|5.006000||p -WARN_REDEFINE|5.006000||p -WARN_REGEXP|5.006000||p -WARN_RESERVED|5.006000||p -WARN_SEMICOLON|5.006000||p -WARN_SEVERE|5.006000||p -WARN_SIGNAL|5.006000||p -WARN_SUBSTR|5.006000||p -WARN_SYNTAX|5.006000||p -WARN_TAINT|5.006000||p -WARN_THREADS|5.008000||p -WARN_UNINITIALIZED|5.006000||p -WARN_UNOPENED|5.006000||p -WARN_UNPACK|5.006000||p -WARN_UNTIE|5.006000||p -WARN_UTF8|5.006000||p -WARN_VOID|5.006000||p -XCPT_CATCH|5.009002||p -XCPT_RETHROW|5.009002||p -XCPT_TRY_END|5.009002||p -XCPT_TRY_START|5.009002||p -XPUSHi||| -XPUSHmortal|5.009002||p -XPUSHn||| -XPUSHp||| -XPUSHs||| -XPUSHu|5.004000||p -XSRETURN_EMPTY||| -XSRETURN_IV||| -XSRETURN_NO||| -XSRETURN_NV||| -XSRETURN_PV||| -XSRETURN_UNDEF||| -XSRETURN_UV|5.008001||p -XSRETURN_YES||| -XSRETURN|||p -XST_mIV||| -XST_mNO||| -XST_mNV||| -XST_mPV||| -XST_mUNDEF||| -XST_mUV|5.008001||p -XST_mYES||| -XS_VERSION_BOOTCHECK||| -XS_VERSION||| -XSprePUSH|5.006000||p -XS||| -ZeroD|5.009002||p -Zero||| -_aMY_CXT|5.007003||p -_pMY_CXT|5.007003||p -aMY_CXT_|5.007003||p -aMY_CXT|5.007003||p -aTHXR_|5.009005||p -aTHXR|5.009005||p -aTHX_|5.006000||p -aTHX|5.006000||p -add_data|||n -addmad||| -allocmy||| -amagic_call||| -amagic_cmp_locale||| -amagic_cmp||| -amagic_i_ncmp||| -amagic_ncmp||| -any_dup||| -ao||| -append_elem||| -append_list||| -append_madprops||| -apply_attrs_my||| -apply_attrs_string||5.006001| -apply_attrs||| -apply||| -atfork_lock||5.007003|n -atfork_unlock||5.007003|n -av_arylen_p||5.009003| -av_clear||| -av_create_and_push||5.009005| -av_create_and_unshift_one||5.009005| -av_delete||5.006000| -av_exists||5.006000| -av_extend||| -av_fake||| -av_fetch||| -av_fill||| -av_len||| -av_make||| -av_pop||| -av_push||| -av_reify||| -av_shift||| -av_store||| -av_undef||| -av_unshift||| -ax|||n -bad_type||| -bind_match||| -block_end||| -block_gimme||5.004000| -block_start||| -boolSV|5.004000||p -boot_core_PerlIO||| -boot_core_UNIVERSAL||| -boot_core_mro||| -boot_core_xsutils||| -bytes_from_utf8||5.007001| -bytes_to_uni|||n -bytes_to_utf8||5.006001| -call_argv|5.006000||p -call_atexit||5.006000| -call_list||5.004000| -call_method|5.006000||p -call_pv|5.006000||p -call_sv|5.006000||p -calloc||5.007002|n -cando||| -cast_i32||5.006000| -cast_iv||5.006000| -cast_ulong||5.006000| -cast_uv||5.006000| -check_type_and_open||| -check_uni||| -checkcomma||| -checkposixcc||| -ckWARN|5.006000||p -ck_anoncode||| -ck_bitop||| -ck_concat||| -ck_defined||| -ck_delete||| -ck_die||| -ck_eof||| -ck_eval||| -ck_exec||| -ck_exists||| -ck_exit||| -ck_ftst||| -ck_fun||| -ck_glob||| -ck_grep||| -ck_index||| -ck_join||| -ck_lengthconst||| -ck_lfun||| -ck_listiob||| -ck_match||| -ck_method||| -ck_null||| -ck_open||| -ck_readline||| -ck_repeat||| -ck_require||| -ck_retarget||| -ck_return||| -ck_rfun||| -ck_rvconst||| -ck_sassign||| -ck_select||| -ck_shift||| -ck_sort||| -ck_spair||| -ck_split||| -ck_subr||| -ck_substr||| -ck_svconst||| -ck_trunc||| -ck_unpack||| -ckwarn_d||5.009003| -ckwarn||5.009003| -cl_and|||n -cl_anything|||n -cl_init_zero|||n -cl_init|||n -cl_is_anything|||n -cl_or|||n -clear_placeholders||| -closest_cop||| -convert||| -cop_free||| -cr_textfilter||| -create_eval_scope||| -croak_nocontext|||vn -croak|||v -csighandler||5.009003|n -curmad||| -custom_op_desc||5.007003| -custom_op_name||5.007003| -cv_ckproto_len||| -cv_ckproto||| -cv_clone||| -cv_const_sv||5.004000| -cv_dump||| -cv_undef||| -cx_dump||5.005000| -cx_dup||| -cxinc||| -dAXMARK|5.009003||p -dAX|5.007002||p -dITEMS|5.007002||p -dMARK||| -dMULTICALL||5.009003| -dMY_CXT_SV|5.007003||p -dMY_CXT|5.007003||p -dNOOP|5.006000||p -dORIGMARK||| -dSP||| -dTHR|5.004050||p -dTHXR|5.009005||p -dTHXa|5.006000||p -dTHXoa|5.006000||p -dTHX|5.006000||p -dUNDERBAR|5.009002||p -dVAR|5.009003||p -dXCPT|5.009002||p -dXSARGS||| -dXSI32||| -dXSTARG|5.006000||p -deb_curcv||| -deb_nocontext|||vn -deb_stack_all||| -deb_stack_n||| -debop||5.005000| -debprofdump||5.005000| -debprof||| -debstackptrs||5.007003| -debstack||5.007003| -debug_start_match||| -deb||5.007003|v -del_sv||| -delete_eval_scope||| -delimcpy||5.004000| -deprecate_old||| -deprecate||| -despatch_signals||5.007001| -destroy_matcher||| -die_nocontext|||vn -die_where||| -die|||v -dirp_dup||| -div128||| -djSP||| -do_aexec5||| -do_aexec||| -do_aspawn||| -do_binmode||5.004050| -do_chomp||| -do_chop||| -do_close||| -do_dump_pad||| -do_eof||| -do_exec3||| -do_execfree||| -do_exec||| -do_gv_dump||5.006000| -do_gvgv_dump||5.006000| -do_hv_dump||5.006000| -do_ipcctl||| -do_ipcget||| -do_join||| -do_kv||| -do_magic_dump||5.006000| -do_msgrcv||| -do_msgsnd||| -do_oddball||| -do_op_dump||5.006000| -do_op_xmldump||| -do_open9||5.006000| -do_openn||5.007001| -do_open||5.004000| -do_pipe||| -do_pmop_dump||5.006000| -do_pmop_xmldump||| -do_print||| -do_readline||| -do_seek||| -do_semop||| -do_shmio||| -do_smartmatch||| -do_spawn_nowait||| -do_spawn||| -do_sprintf||| -do_sv_dump||5.006000| -do_sysseek||| -do_tell||| -do_trans_complex_utf8||| -do_trans_complex||| -do_trans_count_utf8||| -do_trans_count||| -do_trans_simple_utf8||| -do_trans_simple||| -do_trans||| -do_vecget||| -do_vecset||| -do_vop||| -docatch_body||| -docatch||| -doeval||| -dofile||| -dofindlabel||| -doform||| -doing_taint||5.008001|n -dooneliner||| -doopen_pm||| -doparseform||| -dopoptoeval||| -dopoptogiven||| -dopoptolabel||| -dopoptoloop||| -dopoptosub_at||| -dopoptosub||| -dopoptowhen||| -doref||5.009003| -dounwind||| -dowantarray||| -dump_all||5.006000| -dump_eval||5.006000| -dump_exec_pos||| -dump_fds||| -dump_form||5.006000| -dump_indent||5.006000|v -dump_mstats||| -dump_packsubs||5.006000| -dump_sub||5.006000| -dump_sv_child||| -dump_trie_interim_list||| -dump_trie_interim_table||| -dump_trie||| -dump_vindent||5.006000| -dumpuntil||| -dup_attrlist||| -emulate_cop_io||| -emulate_eaccess||| -eval_pv|5.006000||p -eval_sv|5.006000||p -exec_failed||| -expect_number||| -fbm_compile||5.005000| -fbm_instr||5.005000| -fd_on_nosuid_fs||| -feature_is_enabled||| -filter_add||| -filter_del||| -filter_gets||| -filter_read||| -find_and_forget_pmops||| -find_array_subscript||| -find_beginning||| -find_byclass||| -find_hash_subscript||| -find_in_my_stash||| -find_runcv||5.008001| -find_rundefsvoffset||5.009002| -find_script||| -find_uninit_var||| -first_symbol|||n -fold_constants||| -forbid_setid||| -force_ident||| -force_list||| -force_next||| -force_version||| -force_word||| -forget_pmop||| -form_nocontext|||vn -form||5.004000|v -fp_dup||| -fprintf_nocontext|||vn -free_global_struct||| -free_tied_hv_pool||| -free_tmps||| -gen_constant_list||| -get_arena||| -get_av|5.006000||p -get_context||5.006000|n -get_cvn_flags||5.009005| -get_cv|5.006000||p -get_db_sub||| -get_debug_opts||| -get_hash_seed||| -get_hv|5.006000||p -get_mstats||| -get_no_modify||| -get_num||| -get_op_descs||5.005000| -get_op_names||5.005000| -get_opargs||| -get_ppaddr||5.006000| -get_re_arg||| -get_sv|5.006000||p -get_vtbl||5.005030| -getcwd_sv||5.007002| -getenv_len||| -glob_2number||| -glob_2pv||| -glob_assign_glob||| -glob_assign_ref||| -gp_dup||| -gp_free||| -gp_ref||| -grok_bin|5.007003||p -grok_hex|5.007003||p -grok_number|5.007002||p -grok_numeric_radix|5.007002||p -grok_oct|5.007003||p -group_end||| -gv_AVadd||| -gv_HVadd||| -gv_IOadd||| -gv_SVadd||| -gv_autoload4||5.004000| -gv_check||| -gv_const_sv||5.009003| -gv_dump||5.006000| -gv_efullname3||5.004000| -gv_efullname4||5.006001| -gv_efullname||| -gv_ename||| -gv_fetchfile_flags||5.009005| -gv_fetchfile||| -gv_fetchmeth_autoload||5.007003| -gv_fetchmethod_autoload||5.004000| -gv_fetchmethod||| -gv_fetchmeth||| -gv_fetchpvn_flags||5.009002| -gv_fetchpv||| -gv_fetchsv||5.009002| -gv_fullname3||5.004000| -gv_fullname4||5.006001| -gv_fullname||| -gv_handler||5.007001| -gv_init_sv||| -gv_init||| -gv_name_set||5.009004| -gv_stashpvn|5.004000||p -gv_stashpvs||5.009003| -gv_stashpv||| -gv_stashsv||| -he_dup||| -hek_dup||| -hfreeentries||| -hsplit||| -hv_assert||5.009005| -hv_auxinit|||n -hv_backreferences_p||| -hv_clear_placeholders||5.009001| -hv_clear||| -hv_copy_hints_hv||| -hv_delayfree_ent||5.004000| -hv_delete_common||| -hv_delete_ent||5.004000| -hv_delete||| -hv_eiter_p||5.009003| -hv_eiter_set||5.009003| -hv_exists_ent||5.004000| -hv_exists||| -hv_fetch_common||| -hv_fetch_ent||5.004000| -hv_fetchs|5.009003||p -hv_fetch||| -hv_free_ent||5.004000| -hv_iterinit||| -hv_iterkeysv||5.004000| -hv_iterkey||| -hv_iternext_flags||5.008000| -hv_iternextsv||| -hv_iternext||| -hv_iterval||| -hv_kill_backrefs||| -hv_ksplit||5.004000| -hv_magic_check|||n -hv_magic_uvar_xkey||| -hv_magic||| -hv_name_set||5.009003| -hv_notallowed||| -hv_placeholders_get||5.009003| -hv_placeholders_p||5.009003| -hv_placeholders_set||5.009003| -hv_riter_p||5.009003| -hv_riter_set||5.009003| -hv_scalar||5.009001| -hv_store_ent||5.004000| -hv_store_flags||5.008000| -hv_stores|5.009004||p -hv_store||| -hv_undef||| -ibcmp_locale||5.004000| -ibcmp_utf8||5.007003| -ibcmp||| -incl_perldb||| -incline||| -incpush_if_exists||| -incpush||| -ingroup||| -init_argv_symbols||| -init_debugger||| -init_global_struct||| -init_i18nl10n||5.006000| -init_i18nl14n||5.006000| -init_ids||| -init_interp||| -init_main_stash||| -init_perllib||| -init_postdump_symbols||| -init_predump_symbols||| -init_stacks||5.005000| -init_tm||5.007002| -instr||| -intro_my||| -intuit_method||| -intuit_more||| -invert||| -io_close||| -isALNUM||| -isALPHA||| -isDIGIT||| -isLOWER||| -isSPACE||| -isUPPER||| -is_an_int||| -is_gv_magical_sv||| -is_gv_magical||| -is_handle_constructor|||n -is_list_assignment||| -is_lvalue_sub||5.007001| -is_uni_alnum_lc||5.006000| -is_uni_alnumc_lc||5.006000| -is_uni_alnumc||5.006000| -is_uni_alnum||5.006000| -is_uni_alpha_lc||5.006000| -is_uni_alpha||5.006000| -is_uni_ascii_lc||5.006000| -is_uni_ascii||5.006000| -is_uni_cntrl_lc||5.006000| -is_uni_cntrl||5.006000| -is_uni_digit_lc||5.006000| -is_uni_digit||5.006000| -is_uni_graph_lc||5.006000| -is_uni_graph||5.006000| -is_uni_idfirst_lc||5.006000| -is_uni_idfirst||5.006000| -is_uni_lower_lc||5.006000| -is_uni_lower||5.006000| -is_uni_print_lc||5.006000| -is_uni_print||5.006000| -is_uni_punct_lc||5.006000| -is_uni_punct||5.006000| -is_uni_space_lc||5.006000| -is_uni_space||5.006000| -is_uni_upper_lc||5.006000| -is_uni_upper||5.006000| -is_uni_xdigit_lc||5.006000| -is_uni_xdigit||5.006000| -is_utf8_alnumc||5.006000| -is_utf8_alnum||5.006000| -is_utf8_alpha||5.006000| -is_utf8_ascii||5.006000| -is_utf8_char_slow|||n -is_utf8_char||5.006000| -is_utf8_cntrl||5.006000| -is_utf8_common||| -is_utf8_digit||5.006000| -is_utf8_graph||5.006000| -is_utf8_idcont||5.008000| -is_utf8_idfirst||5.006000| -is_utf8_lower||5.006000| -is_utf8_mark||5.006000| -is_utf8_print||5.006000| -is_utf8_punct||5.006000| -is_utf8_space||5.006000| -is_utf8_string_loclen||5.009003| -is_utf8_string_loc||5.008001| -is_utf8_string||5.006001| -is_utf8_upper||5.006000| -is_utf8_xdigit||5.006000| -isa_lookup||| -items|||n -ix|||n -jmaybe||| -join_exact||| -keyword||| -leave_scope||| -lex_end||| -lex_start||| -linklist||| -listkids||| -list||| -load_module_nocontext|||vn -load_module|5.006000||pv -localize||| -looks_like_bool||| -looks_like_number||| -lop||| -mPUSHi|5.009002||p -mPUSHn|5.009002||p -mPUSHp|5.009002||p -mPUSHu|5.009002||p -mXPUSHi|5.009002||p -mXPUSHn|5.009002||p -mXPUSHp|5.009002||p -mXPUSHu|5.009002||p -mad_free||| -madlex||| -madparse||| -magic_clear_all_env||| -magic_clearenv||| -magic_clearhint||| -magic_clearpack||| -magic_clearsig||| -magic_dump||5.006000| -magic_existspack||| -magic_freearylen_p||| -magic_freeovrld||| -magic_freeregexp||| -magic_getarylen||| -magic_getdefelem||| -magic_getnkeys||| -magic_getpack||| -magic_getpos||| -magic_getsig||| -magic_getsubstr||| -magic_gettaint||| -magic_getuvar||| -magic_getvec||| -magic_get||| -magic_killbackrefs||| -magic_len||| -magic_methcall||| -magic_methpack||| -magic_nextpack||| -magic_regdata_cnt||| -magic_regdatum_get||| -magic_regdatum_set||| -magic_scalarpack||| -magic_set_all_env||| -magic_setamagic||| -magic_setarylen||| -magic_setbm||| -magic_setcollxfrm||| -magic_setdbline||| -magic_setdefelem||| -magic_setenv||| -magic_setfm||| -magic_setglob||| -magic_sethint||| -magic_setisa||| -magic_setmglob||| -magic_setnkeys||| -magic_setpack||| -magic_setpos||| -magic_setregexp||| -magic_setsig||| -magic_setsubstr||| -magic_settaint||| -magic_setutf8||| -magic_setuvar||| -magic_setvec||| -magic_set||| -magic_sizepack||| -magic_wipepack||| -magicname||| -make_matcher||| -make_trie_failtable||| -make_trie||| -malloced_size|||n -malloc||5.007002|n -markstack_grow||| -matcher_matches_sv||| -measure_struct||| -memEQ|5.004000||p -memNE|5.004000||p -mem_collxfrm||| -mess_alloc||| -mess_nocontext|||vn -mess||5.006000|v -method_common||| -mfree||5.007002|n -mg_clear||| -mg_copy||| -mg_dup||| -mg_find||| -mg_free||| -mg_get||| -mg_length||5.005000| -mg_localize||| -mg_magical||| -mg_set||| -mg_size||5.005000| -mini_mktime||5.007002| -missingterm||| -mode_from_discipline||| -modkids||| -mod||| -more_bodies||| -more_sv||| -moreswitches||| -mro_get_linear_isa_c3||5.009005| -mro_get_linear_isa_dfs||5.009005| -mro_get_linear_isa||5.009005| -mro_isa_changed_in||| -mro_meta_dup||| -mro_meta_init||| -mro_method_changed_in||5.009005| -mul128||| -mulexp10|||n -my_atof2||5.007002| -my_atof||5.006000| -my_attrs||| -my_bcopy|||n -my_betoh16|||n -my_betoh32|||n -my_betoh64|||n -my_betohi|||n -my_betohl|||n -my_betohs|||n -my_bzero|||n -my_chsize||| -my_clearenv||| -my_cxt_index||| -my_cxt_init||| -my_dirfd||5.009005| -my_exit_jump||| -my_exit||| -my_failure_exit||5.004000| -my_fflush_all||5.006000| -my_fork||5.007003|n -my_htobe16|||n -my_htobe32|||n -my_htobe64|||n -my_htobei|||n -my_htobel|||n -my_htobes|||n -my_htole16|||n -my_htole32|||n -my_htole64|||n -my_htolei|||n -my_htolel|||n -my_htoles|||n -my_htonl||| -my_kid||| -my_letoh16|||n -my_letoh32|||n -my_letoh64|||n -my_letohi|||n -my_letohl|||n -my_letohs|||n -my_lstat||| -my_memcmp||5.004000|n -my_memset|||n -my_ntohl||| -my_pclose||5.004000| -my_popen_list||5.007001| -my_popen||5.004000| -my_setenv||| -my_snprintf|5.009004||pvn -my_socketpair||5.007003|n -my_sprintf||5.009003|vn -my_stat||| -my_strftime||5.007002| -my_strlcat|5.009004||pn -my_strlcpy|5.009004||pn -my_swabn|||n -my_swap||| -my_unexec||| -my_vsnprintf||5.009004|n -my||| -need_utf8|||n -newANONATTRSUB||5.006000| -newANONHASH||| -newANONLIST||| -newANONSUB||| -newASSIGNOP||| -newATTRSUB||5.006000| -newAVREF||| -newAV||| -newBINOP||| -newCONDOP||| -newCONSTSUB|5.004050||p -newCVREF||| -newDEFSVOP||| -newFORM||| -newFOROP||| -newGIVENOP||5.009003| -newGIVWHENOP||| -newGP||| -newGVOP||| -newGVREF||| -newGVgen||| -newHVREF||| -newHVhv||5.005000| -newHV||| -newIO||| -newLISTOP||| -newLOGOP||| -newLOOPEX||| -newLOOPOP||| -newMADPROP||| -newMADsv||| -newMYSUB||| -newNULLLIST||| -newOP||| -newPADOP||| -newPMOP||| -newPROG||| -newPVOP||| -newRANGE||| -newRV_inc|5.004000||p -newRV_noinc|5.004000||p -newRV||| -newSLICEOP||| -newSTATEOP||| -newSUB||| -newSVOP||| -newSVREF||| -newSV_type||5.009005| -newSVhek||5.009003| -newSViv||| -newSVnv||| -newSVpvf_nocontext|||vn -newSVpvf||5.004000|v -newSVpvn_share|5.007001||p -newSVpvn|5.004050||p -newSVpvs_share||5.009003| -newSVpvs|5.009003||p -newSVpv||| -newSVrv||| -newSVsv||| -newSVuv|5.006000||p -newSV||| -newTOKEN||| -newUNOP||| -newWHENOP||5.009003| -newWHILEOP||5.009003| -newXS_flags||5.009004| -newXSproto||5.006000| -newXS||5.006000| -new_collate||5.006000| -new_constant||| -new_ctype||5.006000| -new_he||| -new_logop||| -new_numeric||5.006000| -new_stackinfo||5.005000| -new_version||5.009000| -new_warnings_bitfield||| -next_symbol||| -nextargv||| -nextchar||| -ninstr||| -no_bareword_allowed||| -no_fh_allowed||| -no_op||| -not_a_number||| -nothreadhook||5.008000| -nuke_stacks||| -num_overflow|||n -offer_nice_chunk||| -oopsAV||| -oopsCV||| -oopsHV||| -op_clear||| -op_const_sv||| -op_dump||5.006000| -op_free||| -op_getmad_weak||| -op_getmad||| -op_null||5.007002| -op_refcnt_dec||| -op_refcnt_inc||| -op_refcnt_lock||5.009002| -op_refcnt_unlock||5.009002| -op_xmldump||| -open_script||| -pMY_CXT_|5.007003||p -pMY_CXT|5.007003||p -pTHX_|5.006000||p -pTHX|5.006000||p -packWARN|5.007003||p -pack_cat||5.007003| -pack_rec||| -package||| -packlist||5.008001| -pad_add_anon||| -pad_add_name||| -pad_alloc||| -pad_block_start||| -pad_check_dup||| -pad_compname_type||| -pad_findlex||| -pad_findmy||| -pad_fixup_inner_anons||| -pad_free||| -pad_leavemy||| -pad_new||| -pad_peg|||n -pad_push||| -pad_reset||| -pad_setsv||| -pad_sv||5.009005| -pad_swipe||| -pad_tidy||| -pad_undef||| -parse_body||| -parse_unicode_opts||| -parser_dup||| -parser_free||| -path_is_absolute|||n -peep||| -pending_Slabs_to_ro||| -perl_alloc_using|||n -perl_alloc|||n -perl_clone_using|||n -perl_clone|||n -perl_construct|||n -perl_destruct||5.007003|n -perl_free|||n -perl_parse||5.006000|n -perl_run|||n -pidgone||| -pm_description||| -pmflag||| -pmop_dump||5.006000| -pmop_xmldump||| -pmruntime||| -pmtrans||| -pop_scope||| -pregcomp||5.009005| -pregexec||| -pregfree||| -prepend_elem||| -prepend_madprops||| -printbuf||| -printf_nocontext|||vn -process_special_blocks||| -ptr_table_clear||5.009005| -ptr_table_fetch||5.009005| -ptr_table_find|||n -ptr_table_free||5.009005| -ptr_table_new||5.009005| -ptr_table_split||5.009005| -ptr_table_store||5.009005| -push_scope||| -put_byte||| -pv_display||5.006000| -pv_escape||5.009004| -pv_pretty||5.009004| -pv_uni_display||5.007003| -qerror||| -qsortsvu||| -re_compile||5.009005| -re_croak2||| -re_dup||| -re_intuit_start||5.009005| -re_intuit_string||5.006000| -readpipe_override||| -realloc||5.007002|n -reentrant_free||| -reentrant_init||| -reentrant_retry|||vn -reentrant_size||| -ref_array_or_hash||| -refcounted_he_chain_2hv||| -refcounted_he_fetch||| -refcounted_he_free||| -refcounted_he_new||| -refcounted_he_value||| -refkids||| -refto||| -ref||5.009003| -reg_check_named_buff_matched||| -reg_named_buff_all||5.009005| -reg_named_buff_exists||5.009005| -reg_named_buff_fetch||5.009005| -reg_named_buff_firstkey||5.009005| -reg_named_buff_iter||| -reg_named_buff_nextkey||5.009005| -reg_named_buff_scalar||5.009005| -reg_named_buff||| -reg_namedseq||| -reg_node||| -reg_numbered_buff_fetch||| -reg_numbered_buff_length||| -reg_numbered_buff_store||| -reg_qr_package||| -reg_recode||| -reg_scan_name||| -reg_skipcomment||| -reg_stringify||5.009005| -reg_temp_copy||| -reganode||| -regatom||| -regbranch||| -regclass_swash||5.009004| -regclass||| -regcppop||| -regcppush||| -regcurly|||n -regdump_extflags||| -regdump||5.005000| -regdupe_internal||| -regexec_flags||5.005000| -regfree_internal||5.009005| -reghop3|||n -reghop4|||n -reghopmaybe3|||n -reginclass||| -reginitcolors||5.006000| -reginsert||| -regmatch||| -regnext||5.005000| -regpiece||| -regpposixcc||| -regprop||| -regrepeat||| -regtail_study||| -regtail||| -regtry||| -reguni||| -regwhite|||n -reg||| -repeatcpy||| -report_evil_fh||| -report_uninit||| -require_pv||5.006000| -require_tie_mod||| -restore_magic||| -rninstr||| -rsignal_restore||| -rsignal_save||| -rsignal_state||5.004000| -rsignal||5.004000| -run_body||| -run_user_filter||| -runops_debug||5.005000| -runops_standard||5.005000| -rvpv_dup||| -rxres_free||| -rxres_restore||| -rxres_save||| -safesyscalloc||5.006000|n -safesysfree||5.006000|n -safesysmalloc||5.006000|n -safesysrealloc||5.006000|n -same_dirent||| -save_I16||5.004000| -save_I32||| -save_I8||5.006000| -save_aelem||5.004050| -save_alloc||5.006000| -save_aptr||| -save_ary||| -save_bool||5.008001| -save_clearsv||| -save_delete||| -save_destructor_x||5.006000| -save_destructor||5.006000| -save_freeop||| -save_freepv||| -save_freesv||| -save_generic_pvref||5.006001| -save_generic_svref||5.005030| -save_gp||5.004000| -save_hash||| -save_hek_flags|||n -save_helem||5.004050| -save_hints||5.005000| -save_hptr||| -save_int||| -save_item||| -save_iv||5.005000| -save_lines||| -save_list||| -save_long||| -save_magic||| -save_mortalizesv||5.007001| -save_nogv||| -save_op||| -save_padsv||5.007001| -save_pptr||| -save_re_context||5.006000| -save_scalar_at||| -save_scalar||| -save_set_svflags||5.009000| -save_shared_pvref||5.007003| -save_sptr||| -save_svref||| -save_vptr||5.006000| -savepvn||| -savepvs||5.009003| -savepv||| -savesharedpvn||5.009005| -savesharedpv||5.007003| -savestack_grow_cnt||5.008001| -savestack_grow||| -savesvpv||5.009002| -sawparens||| -scalar_mod_type|||n -scalarboolean||| -scalarkids||| -scalarseq||| -scalarvoid||| -scalar||| -scan_bin||5.006000| -scan_commit||| -scan_const||| -scan_formline||| -scan_heredoc||| -scan_hex||| -scan_ident||| -scan_inputsymbol||| -scan_num||5.007001| -scan_oct||| -scan_pat||| -scan_str||| -scan_subst||| -scan_trans||| -scan_version||5.009001| -scan_vstring||5.009005| -scan_word||| -scope||| -screaminstr||5.005000| -seed||5.008001| -sequence_num||| -sequence_tail||| -sequence||| -set_context||5.006000|n -set_csh||| -set_numeric_local||5.006000| -set_numeric_radix||5.006000| -set_numeric_standard||5.006000| -setdefout||| -setenv_getix||| -share_hek_flags||| -share_hek||5.004000| -si_dup||| -sighandler|||n -simplify_sort||| -skipspace0||| -skipspace1||| -skipspace2||| -skipspace||| -softref2xv||| -sortcv_stacked||| -sortcv_xsub||| -sortcv||| -sortsv_flags||5.009003| -sortsv||5.007003| -space_join_names_mortal||| -ss_dup||| -stack_grow||| -start_force||| -start_glob||| -start_subparse||5.004000| -stashpv_hvname_match||5.009005| -stdize_locale||| -strEQ||| -strGE||| -strGT||| -strLE||| -strLT||| -strNE||| -str_to_version||5.006000| -strip_return||| -strnEQ||| -strnNE||| -study_chunk||| -sub_crush_depth||| -sublex_done||| -sublex_push||| -sublex_start||| -sv_2bool||| -sv_2cv||| -sv_2io||| -sv_2iuv_common||| -sv_2iuv_non_preserve||| -sv_2iv_flags||5.009001| -sv_2iv||| -sv_2mortal||| -sv_2nv||| -sv_2pv_flags|5.007002||p -sv_2pv_nolen|5.006000||p -sv_2pvbyte_nolen|5.006000||p -sv_2pvbyte|5.006000||p -sv_2pvutf8_nolen||5.006000| -sv_2pvutf8||5.006000| -sv_2pv||| -sv_2uv_flags||5.009001| -sv_2uv|5.004000||p -sv_add_arena||| -sv_add_backref||| -sv_backoff||| -sv_bless||| -sv_cat_decode||5.008001| -sv_catpv_mg|5.004050||p -sv_catpvf_mg_nocontext|||pvn -sv_catpvf_mg|5.006000|5.004000|pv -sv_catpvf_nocontext|||vn -sv_catpvf||5.004000|v -sv_catpvn_flags||5.007002| -sv_catpvn_mg|5.004050||p -sv_catpvn_nomg|5.007002||p -sv_catpvn||| -sv_catpvs|5.009003||p -sv_catpv||| -sv_catsv_flags||5.007002| -sv_catsv_mg|5.004050||p -sv_catsv_nomg|5.007002||p -sv_catsv||| -sv_catxmlpvn||| -sv_catxmlsv||| -sv_chop||| -sv_clean_all||| -sv_clean_objs||| -sv_clear||| -sv_cmp_locale||5.004000| -sv_cmp||| -sv_collxfrm||| -sv_compile_2op||5.008001| -sv_copypv||5.007003| -sv_dec||| -sv_del_backref||| -sv_derived_from||5.004000| -sv_does||5.009004| -sv_dump||| -sv_dup||| -sv_eq||| -sv_exp_grow||| -sv_force_normal_flags||5.007001| -sv_force_normal||5.006000| -sv_free2||| -sv_free_arenas||| -sv_free||| -sv_gets||5.004000| -sv_grow||| -sv_i_ncmp||| -sv_inc||| -sv_insert||| -sv_isa||| -sv_isobject||| -sv_iv||5.005000| -sv_kill_backrefs||| -sv_len_utf8||5.006000| -sv_len||| -sv_magic_portable|5.009005|5.004000|p -sv_magicext||5.007003| -sv_magic||| -sv_mortalcopy||| -sv_ncmp||| -sv_newmortal||| -sv_newref||| -sv_nolocking||5.007003| -sv_nosharing||5.007003| -sv_nounlocking||| -sv_nv||5.005000| -sv_peek||5.005000| -sv_pos_b2u_midway||| -sv_pos_b2u||5.006000| -sv_pos_u2b_cached||| -sv_pos_u2b_forwards|||n -sv_pos_u2b_midway|||n -sv_pos_u2b||5.006000| -sv_pvbyten_force||5.006000| -sv_pvbyten||5.006000| -sv_pvbyte||5.006000| -sv_pvn_force_flags|5.007002||p -sv_pvn_force||| -sv_pvn_nomg|5.007003||p -sv_pvn||| -sv_pvutf8n_force||5.006000| -sv_pvutf8n||5.006000| -sv_pvutf8||5.006000| -sv_pv||5.006000| -sv_recode_to_utf8||5.007003| -sv_reftype||| -sv_release_COW||| -sv_replace||| -sv_report_used||| -sv_reset||| -sv_rvweaken||5.006000| -sv_setiv_mg|5.004050||p -sv_setiv||| -sv_setnv_mg|5.006000||p -sv_setnv||| -sv_setpv_mg|5.004050||p -sv_setpvf_mg_nocontext|||pvn -sv_setpvf_mg|5.006000|5.004000|pv -sv_setpvf_nocontext|||vn -sv_setpvf||5.004000|v -sv_setpviv_mg||5.008001| -sv_setpviv||5.008001| -sv_setpvn_mg|5.004050||p -sv_setpvn||| -sv_setpvs|5.009004||p -sv_setpv||| -sv_setref_iv||| -sv_setref_nv||| -sv_setref_pvn||| -sv_setref_pv||| -sv_setref_uv||5.007001| -sv_setsv_cow||| -sv_setsv_flags||5.007002| -sv_setsv_mg|5.004050||p -sv_setsv_nomg|5.007002||p -sv_setsv||| -sv_setuv_mg|5.004050||p -sv_setuv|5.004000||p -sv_tainted||5.004000| -sv_taint||5.004000| -sv_true||5.005000| -sv_unglob||| -sv_uni_display||5.007003| -sv_unmagic||| -sv_unref_flags||5.007001| -sv_unref||| -sv_untaint||5.004000| -sv_upgrade||| -sv_usepvn_flags||5.009004| -sv_usepvn_mg|5.004050||p -sv_usepvn||| -sv_utf8_decode||5.006000| -sv_utf8_downgrade||5.006000| -sv_utf8_encode||5.006000| -sv_utf8_upgrade_flags||5.007002| -sv_utf8_upgrade||5.007001| -sv_uv|5.005000||p -sv_vcatpvf_mg|5.006000|5.004000|p -sv_vcatpvfn||5.004000| -sv_vcatpvf|5.006000|5.004000|p -sv_vsetpvf_mg|5.006000|5.004000|p -sv_vsetpvfn||5.004000| -sv_vsetpvf|5.006000|5.004000|p -sv_xmlpeek||| -svtype||| -swallow_bom||| -swap_match_buff||| -swash_fetch||5.007002| -swash_get||| -swash_init||5.006000| -sys_intern_clear||| -sys_intern_dup||| -sys_intern_init||| -taint_env||| -taint_proper||| -tmps_grow||5.006000| -toLOWER||| -toUPPER||| -to_byte_substr||| -to_uni_fold||5.007003| -to_uni_lower_lc||5.006000| -to_uni_lower||5.007003| -to_uni_title_lc||5.006000| -to_uni_title||5.007003| -to_uni_upper_lc||5.006000| -to_uni_upper||5.007003| -to_utf8_case||5.007003| -to_utf8_fold||5.007003| -to_utf8_lower||5.007003| -to_utf8_substr||| -to_utf8_title||5.007003| -to_utf8_upper||5.007003| -token_free||| -token_getmad||| -tokenize_use||| -tokeq||| -tokereport||| -too_few_arguments||| -too_many_arguments||| -uiv_2buf|||n -unlnk||| -unpack_rec||| -unpack_str||5.007003| -unpackstring||5.008001| -unshare_hek_or_pvn||| -unshare_hek||| -unsharepvn||5.004000| -unwind_handler_stack||| -update_debugger_info||| -upg_version||5.009005| -usage||| -utf16_to_utf8_reversed||5.006001| -utf16_to_utf8||5.006001| -utf8_distance||5.006000| -utf8_hop||5.006000| -utf8_length||5.007001| -utf8_mg_pos_cache_update||| -utf8_to_bytes||5.006001| -utf8_to_uvchr||5.007001| -utf8_to_uvuni||5.007001| -utf8n_to_uvchr||| -utf8n_to_uvuni||5.007001| -utilize||| -uvchr_to_utf8_flags||5.007003| -uvchr_to_utf8||| -uvuni_to_utf8_flags||5.007003| -uvuni_to_utf8||5.007001| -validate_suid||| -varname||| -vcmp||5.009000| -vcroak||5.006000| -vdeb||5.007003| -vdie_common||| -vdie_croak_common||| -vdie||| -vform||5.006000| -visit||| -vivify_defelem||| -vivify_ref||| -vload_module|5.006000||p -vmess||5.006000| -vnewSVpvf|5.006000|5.004000|p -vnormal||5.009002| -vnumify||5.009000| -vstringify||5.009000| -vverify||5.009003| -vwarner||5.006000| -vwarn||5.006000| -wait4pid||| -warn_nocontext|||vn -warner_nocontext|||vn -warner|5.006000|5.004000|pv -warn|||v -watch||| -whichsig||| -write_no_mem||| -write_to_stderr||| -xmldump_all||| -xmldump_attr||| -xmldump_eval||| -xmldump_form||| -xmldump_indent|||v -xmldump_packsubs||| -xmldump_sub||| -xmldump_vindent||| -yyerror||| -yylex||| -yyparse||| -yywarn||| -); - -if (exists $opt{'list-unsupported'}) { - my $f; - for $f (sort { lc $a cmp lc $b } keys %API) { - next unless $API{$f}{todo}; - print "$f ", '.'x(40-length($f)), " ", format_version($API{$f}{todo}), "\n"; - } - exit 0; -} - -# Scan for possible replacement candidates - -my(%replace, %need, %hints, %warnings, %depends); -my $replace = 0; -my($hint, $define, $function); - -sub find_api -{ - my $code = shift; - $code =~ s{ - / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*) - | "[^"\\]*(?:\\.[^"\\]*)*" - | '[^'\\]*(?:\\.[^'\\]*)*' }{}egsx; - grep { exists $API{$_} } $code =~ /(\w+)/mg; -} - -while () { - if ($hint) { - my $h = $hint->[0] eq 'Hint' ? \%hints : \%warnings; - if (m{^\s*\*\s(.*?)\s*$}) { - for (@{$hint->[1]}) { - $h->{$_} ||= ''; # suppress warning with older perls - $h->{$_} .= "$1\n"; - } - } - else { undef $hint } - } - - $hint = [$1, [split /,?\s+/, $2]] - if m{^\s*$rccs\s+(Hint|Warning):\s+(\w+(?:,?\s+\w+)*)\s*$}; - - if ($define) { - if ($define->[1] =~ /\\$/) { - $define->[1] .= $_; - } - else { - if (exists $API{$define->[0]} && $define->[1] !~ /^DPPP_\(/) { - my @n = find_api($define->[1]); - push @{$depends{$define->[0]}}, @n if @n - } - undef $define; - } - } - - $define = [$1, $2] if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(.*)}; - - if ($function) { - if (/^}/) { - if (exists $API{$function->[0]}) { - my @n = find_api($function->[1]); - push @{$depends{$function->[0]}}, @n if @n - } - undef $define; - } - else { - $function->[1] .= $_; - } - } - - $function = [$1, ''] if m{^DPPP_\(my_(\w+)\)}; - - $replace = $1 if m{^\s*$rccs\s+Replace:\s+(\d+)\s+$rcce\s*$}; - $replace{$2} = $1 if $replace and m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+)}; - $replace{$2} = $1 if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+).*$rccs\s+Replace\s+$rcce}; - $replace{$1} = $2 if m{^\s*$rccs\s+Replace (\w+) with (\w+)\s+$rcce\s*$}; - - if (m{^\s*$rccs\s+(\w+)\s+depends\s+on\s+(\w+(\s*,\s*\w+)*)\s+$rcce\s*$}) { - push @{$depends{$1}}, map { s/\s+//g; $_ } split /,/, $2; - } - - $need{$1} = 1 if m{^#if\s+defined\(NEED_(\w+)(?:_GLOBAL)?\)}; -} - -for (values %depends) { - my %s; - $_ = [sort grep !$s{$_}++, @$_]; -} - -if (exists $opt{'api-info'}) { - my $f; - my $count = 0; - my $match = $opt{'api-info'} =~ m!^/(.*)/$! ? $1 : "^\Q$opt{'api-info'}\E\$"; - for $f (sort { lc $a cmp lc $b } keys %API) { - next unless $f =~ /$match/; - print "\n=== $f ===\n\n"; - my $info = 0; - if ($API{$f}{base} || $API{$f}{todo}) { - my $base = format_version($API{$f}{base} || $API{$f}{todo}); - print "Supported at least starting from perl-$base.\n"; - $info++; - } - if ($API{$f}{provided}) { - my $todo = $API{$f}{todo} ? format_version($API{$f}{todo}) : "5.003"; - print "Support by $ppport provided back to perl-$todo.\n"; - print "Support needs to be explicitly requested by NEED_$f.\n" if exists $need{$f}; - print "Depends on: ", join(', ', @{$depends{$f}}), ".\n" if exists $depends{$f}; - print "\n$hints{$f}" if exists $hints{$f}; - print "\nWARNING:\n$warnings{$f}" if exists $warnings{$f}; - $info++; - } - print "No portability information available.\n" unless $info; - $count++; - } - $count or print "Found no API matching '$opt{'api-info'}'."; - print "\n"; - exit 0; -} - -if (exists $opt{'list-provided'}) { - my $f; - for $f (sort { lc $a cmp lc $b } keys %API) { - next unless $API{$f}{provided}; - my @flags; - push @flags, 'explicit' if exists $need{$f}; - push @flags, 'depend' if exists $depends{$f}; - push @flags, 'hint' if exists $hints{$f}; - push @flags, 'warning' if exists $warnings{$f}; - my $flags = @flags ? ' ['.join(', ', @flags).']' : ''; - print "$f$flags\n"; - } - exit 0; -} - -my @files; -my @srcext = qw( .xs .c .h .cc .cpp -c.inc -xs.inc ); -my $srcext = join '|', map { quotemeta $_ } @srcext; - -if (@ARGV) { - my %seen; - for (@ARGV) { - if (-e) { - if (-f) { - push @files, $_ unless $seen{$_}++; - } - else { warn "'$_' is not a file.\n" } - } - else { - my @new = grep { -f } glob $_ - or warn "'$_' does not exist.\n"; - push @files, grep { !$seen{$_}++ } @new; - } - } -} -else { - eval { - require File::Find; - File::Find::find(sub { - $File::Find::name =~ /($srcext)$/i - and push @files, $File::Find::name; - }, '.'); - }; - if ($@) { - @files = map { glob "*$_" } @srcext; - } -} - -if (!@ARGV || $opt{filter}) { - my(@in, @out); - my %xsc = map { /(.*)\.xs$/ ? ("$1.c" => 1, "$1.cc" => 1) : () } @files; - for (@files) { - my $out = exists $xsc{$_} || /\b\Q$ppport\E$/i || !/($srcext)$/i; - push @{ $out ? \@out : \@in }, $_; - } - if (@ARGV && @out) { - warning("Skipping the following files (use --nofilter to avoid this):\n| ", join "\n| ", @out); - } - @files = @in; -} - -die "No input files given!\n" unless @files; - -my(%files, %global, %revreplace); -%revreplace = reverse %replace; -my $filename; -my $patch_opened = 0; - -for $filename (@files) { - unless (open IN, "<$filename") { - warn "Unable to read from $filename: $!\n"; - next; - } - - info("Scanning $filename ..."); - - my $c = do { local $/; }; - close IN; - - my %file = (orig => $c, changes => 0); - - # Temporarily remove C/XS comments and strings from the code - my @ccom; - - $c =~ s{ - ( ^$HS*\#$HS*include\b[^\r\n]+\b(?:\Q$ppport\E|XSUB\.h)\b[^\r\n]* - | ^$HS*\#$HS*(?:define|elif|if(?:def)?)\b[^\r\n]* ) - | ( ^$HS*\#[^\r\n]* - | "[^"\\]*(?:\\.[^"\\]*)*" - | '[^'\\]*(?:\\.[^'\\]*)*' - | / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]* ) ) - }{ defined $2 and push @ccom, $2; - defined $1 ? $1 : "$ccs$#ccom$cce" }mgsex; - - $file{ccom} = \@ccom; - $file{code} = $c; - $file{has_inc_ppport} = $c =~ /^$HS*#$HS*include[^\r\n]+\b\Q$ppport\E\b/m; - - my $func; - - for $func (keys %API) { - my $match = $func; - $match .= "|$revreplace{$func}" if exists $revreplace{$func}; - if ($c =~ /\b(?:Perl_)?($match)\b/) { - $file{uses_replace}{$1}++ if exists $revreplace{$func} && $1 eq $revreplace{$func}; - $file{uses_Perl}{$func}++ if $c =~ /\bPerl_$func\b/; - if (exists $API{$func}{provided}) { - $file{uses_provided}{$func}++; - if (!exists $API{$func}{base} || $API{$func}{base} > $opt{'compat-version'}) { - $file{uses}{$func}++; - my @deps = rec_depend($func); - if (@deps) { - $file{uses_deps}{$func} = \@deps; - for (@deps) { - $file{uses}{$_} = 0 unless exists $file{uses}{$_}; - } - } - for ($func, @deps) { - $file{needs}{$_} = 'static' if exists $need{$_}; - } - } - } - if (exists $API{$func}{todo} && $API{$func}{todo} > $opt{'compat-version'}) { - if ($c =~ /\b$func\b/) { - $file{uses_todo}{$func}++; - } - } - } - } - - while ($c =~ /^$HS*#$HS*define$HS+(NEED_(\w+?)(_GLOBAL)?)\b/mg) { - if (exists $need{$2}) { - $file{defined $3 ? 'needed_global' : 'needed_static'}{$2}++; - } - else { warning("Possibly wrong #define $1 in $filename") } - } - - for (qw(uses needs uses_todo needed_global needed_static)) { - for $func (keys %{$file{$_}}) { - push @{$global{$_}{$func}}, $filename; - } - } - - $files{$filename} = \%file; -} - -# Globally resolve NEED_'s -my $need; -for $need (keys %{$global{needs}}) { - if (@{$global{needs}{$need}} > 1) { - my @targets = @{$global{needs}{$need}}; - my @t = grep $files{$_}{needed_global}{$need}, @targets; - @targets = @t if @t; - @t = grep /\.xs$/i, @targets; - @targets = @t if @t; - my $target = shift @targets; - $files{$target}{needs}{$need} = 'global'; - for (@{$global{needs}{$need}}) { - $files{$_}{needs}{$need} = 'extern' if $_ ne $target; - } - } -} - -for $filename (@files) { - exists $files{$filename} or next; - - info("=== Analyzing $filename ==="); - - my %file = %{$files{$filename}}; - my $func; - my $c = $file{code}; - my $warnings = 0; - - for $func (sort keys %{$file{uses_Perl}}) { - if ($API{$func}{varargs}) { - unless ($API{$func}{nothxarg}) { - my $changes = ($c =~ s{\b(Perl_$func\s*\(\s*)(?!aTHX_?)(\)|[^\s)]*\))} - { $1 . ($2 eq ')' ? 'aTHX' : 'aTHX_ ') . $2 }ge); - if ($changes) { - warning("Doesn't pass interpreter argument aTHX to Perl_$func"); - $file{changes} += $changes; - } - } - } - else { - warning("Uses Perl_$func instead of $func"); - $file{changes} += ($c =~ s{\bPerl_$func(\s*)\((\s*aTHX_?)?\s*} - {$func$1(}g); - } - } - - for $func (sort keys %{$file{uses_replace}}) { - warning("Uses $func instead of $replace{$func}"); - $file{changes} += ($c =~ s/\b$func\b/$replace{$func}/g); - } - - for $func (sort keys %{$file{uses_provided}}) { - if ($file{uses}{$func}) { - if (exists $file{uses_deps}{$func}) { - diag("Uses $func, which depends on ", join(', ', @{$file{uses_deps}{$func}})); - } - else { - diag("Uses $func"); - } - } - $warnings += hint($func); - } - - unless ($opt{quiet}) { - for $func (sort keys %{$file{uses_todo}}) { - print "*** WARNING: Uses $func, which may not be portable below perl ", - format_version($API{$func}{todo}), ", even with '$ppport'\n"; - $warnings++; - } - } - - for $func (sort keys %{$file{needed_static}}) { - my $message = ''; - if (not exists $file{uses}{$func}) { - $message = "No need to define NEED_$func if $func is never used"; - } - elsif (exists $file{needs}{$func} && $file{needs}{$func} ne 'static') { - $message = "No need to define NEED_$func when already needed globally"; - } - if ($message) { - diag($message); - $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_$func\b.*$LF//mg); - } - } - - for $func (sort keys %{$file{needed_global}}) { - my $message = ''; - if (not exists $global{uses}{$func}) { - $message = "No need to define NEED_${func}_GLOBAL if $func is never used"; - } - elsif (exists $file{needs}{$func}) { - if ($file{needs}{$func} eq 'extern') { - $message = "No need to define NEED_${func}_GLOBAL when already needed globally"; - } - elsif ($file{needs}{$func} eq 'static') { - $message = "No need to define NEED_${func}_GLOBAL when only used in this file"; - } - } - if ($message) { - diag($message); - $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_${func}_GLOBAL\b.*$LF//mg); - } - } - - $file{needs_inc_ppport} = keys %{$file{uses}}; - - if ($file{needs_inc_ppport}) { - my $pp = ''; - - for $func (sort keys %{$file{needs}}) { - my $type = $file{needs}{$func}; - next if $type eq 'extern'; - my $suffix = $type eq 'global' ? '_GLOBAL' : ''; - unless (exists $file{"needed_$type"}{$func}) { - if ($type eq 'global') { - diag("Files [@{$global{needs}{$func}}] need $func, adding global request"); - } - else { - diag("File needs $func, adding static request"); - } - $pp .= "#define NEED_$func$suffix\n"; - } - } - - if ($pp && ($c =~ s/^(?=$HS*#$HS*define$HS+NEED_\w+)/$pp/m)) { - $pp = ''; - $file{changes}++; - } - - unless ($file{has_inc_ppport}) { - diag("Needs to include '$ppport'"); - $pp .= qq(#include "$ppport"\n) - } - - if ($pp) { - $file{changes} += ($c =~ s/^($HS*#$HS*define$HS+NEED_\w+.*?)^/$1$pp/ms) - || ($c =~ s/^(?=$HS*#$HS*include.*\Q$ppport\E)/$pp/m) - || ($c =~ s/^($HS*#$HS*include.*XSUB.*\s*?)^/$1$pp/m) - || ($c =~ s/^/$pp/); - } - } - else { - if ($file{has_inc_ppport}) { - diag("No need to include '$ppport'"); - $file{changes} += ($c =~ s/^$HS*?#$HS*include.*\Q$ppport\E.*?$LF//m); - } - } - - # put back in our C comments - my $ix; - my $cppc = 0; - my @ccom = @{$file{ccom}}; - for $ix (0 .. $#ccom) { - if (!$opt{cplusplus} && $ccom[$ix] =~ s!^//!!) { - $cppc++; - $file{changes} += $c =~ s/$rccs$ix$rcce/$ccs$ccom[$ix] $cce/; - } - else { - $c =~ s/$rccs$ix$rcce/$ccom[$ix]/; - } - } - - if ($cppc) { - my $s = $cppc != 1 ? 's' : ''; - warning("Uses $cppc C++ style comment$s, which is not portable"); - } - - my $s = $warnings != 1 ? 's' : ''; - my $warn = $warnings ? " ($warnings warning$s)" : ''; - info("Analysis completed$warn"); - - if ($file{changes}) { - if (exists $opt{copy}) { - my $newfile = "$filename$opt{copy}"; - if (-e $newfile) { - error("'$newfile' already exists, refusing to write copy of '$filename'"); - } - else { - local *F; - if (open F, ">$newfile") { - info("Writing copy of '$filename' with changes to '$newfile'"); - print F $c; - close F; - } - else { - error("Cannot open '$newfile' for writing: $!"); - } - } - } - elsif (exists $opt{patch} || $opt{changes}) { - if (exists $opt{patch}) { - unless ($patch_opened) { - if (open PATCH, ">$opt{patch}") { - $patch_opened = 1; - } - else { - error("Cannot open '$opt{patch}' for writing: $!"); - delete $opt{patch}; - $opt{changes} = 1; - goto fallback; - } - } - mydiff(\*PATCH, $filename, $c); - } - else { -fallback: - info("Suggested changes:"); - mydiff(\*STDOUT, $filename, $c); - } - } - else { - my $s = $file{changes} == 1 ? '' : 's'; - info("$file{changes} potentially required change$s detected"); - } - } - else { - info("Looks good"); - } -} - -close PATCH if $patch_opened; - -exit 0; - - -sub try_use { eval "use @_;"; return $@ eq '' } - -sub mydiff -{ - local *F = shift; - my($file, $str) = @_; - my $diff; - - if (exists $opt{diff}) { - $diff = run_diff($opt{diff}, $file, $str); - } - - if (!defined $diff and try_use('Text::Diff')) { - $diff = Text::Diff::diff($file, \$str, { STYLE => 'Unified' }); - $diff = <
$tmp") { - print F $str; - close F; - - if (open F, "$prog $file $tmp |") { - while () { - s/\Q$tmp\E/$file.patched/; - $diff .= $_; - } - close F; - unlink $tmp; - return $diff; - } - - unlink $tmp; - } - else { - error("Cannot open '$tmp' for writing: $!"); - } - - return undef; -} - -sub rec_depend -{ - my($func, $seen) = @_; - return () unless exists $depends{$func}; - $seen = {%{$seen||{}}}; - return () if $seen->{$func}++; - my %s; - grep !$s{$_}++, map { ($_, rec_depend($_, $seen)) } @{$depends{$func}}; -} - -sub parse_version -{ - my $ver = shift; - - if ($ver =~ /^(\d+)\.(\d+)\.(\d+)$/) { - return ($1, $2, $3); - } - elsif ($ver !~ /^\d+\.[\d_]+$/) { - die "cannot parse version '$ver'\n"; - } - - $ver =~ s/_//g; - $ver =~ s/$/000000/; - - my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/; - - $v = int $v; - $s = int $s; - - if ($r < 5 || ($r == 5 && $v < 6)) { - if ($s % 10) { - die "cannot parse version '$ver'\n"; - } - } - - return ($r, $v, $s); -} - -sub format_version -{ - my $ver = shift; - - $ver =~ s/$/000000/; - my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/; - - $v = int $v; - $s = int $s; - - if ($r < 5 || ($r == 5 && $v < 6)) { - if ($s % 10) { - die "invalid version '$ver'\n"; - } - $s /= 10; - - $ver = sprintf "%d.%03d", $r, $v; - $s > 0 and $ver .= sprintf "_%02d", $s; - - return $ver; - } - - return sprintf "%d.%d.%d", $r, $v, $s; -} - -sub info -{ - $opt{quiet} and return; - print @_, "\n"; -} - -sub diag -{ - $opt{quiet} and return; - $opt{diag} and print @_, "\n"; -} - -sub warning -{ - $opt{quiet} and return; - print "*** ", @_, "\n"; -} - -sub error -{ - print "*** ERROR: ", @_, "\n"; -} - -my %given_hints; -my %given_warnings; -sub hint -{ - $opt{quiet} and return; - my $func = shift; - my $rv = 0; - if (exists $warnings{$func} && !$given_warnings{$func}++) { - my $warn = $warnings{$func}; - $warn =~ s!^!*** !mg; - print "*** WARNING: $func\n", $warn; - $rv++; - } - if ($opt{hints} && exists $hints{$func} && !$given_hints{$func}++) { - my $hint = $hints{$func}; - $hint =~ s/^/ /mg; - print " --- hint for $func ---\n", $hint; - } - $rv; -} - -sub usage -{ - my($usage) = do { local(@ARGV,$/)=($0); <> } =~ /^=head\d$HS+SYNOPSIS\s*^(.*?)\s*^=/ms; - my %M = ( 'I' => '*' ); - $usage =~ s/^\s*perl\s+\S+/$^X $0/; - $usage =~ s/([A-Z])<([^>]+)>/$M{$1}$2$M{$1}/g; - - print < }; - my($copy) = $self =~ /^=head\d\s+COPYRIGHT\s*^(.*?)^=\w+/ms; - $copy =~ s/^(?=\S+)/ /gms; - $self =~ s/^$HS+Do NOT edit.*?(?=^-)/$copy/ms; - $self =~ s/^SKIP.*(?=^__DATA__)/SKIP -if (\@ARGV && \$ARGV[0] eq '--unstrip') { - eval { require Devel::PPPort }; - \$@ and die "Cannot require Devel::PPPort, please install.\\n"; - if (\$Devel::PPPort::VERSION < $VERSION) { - die "$0 was originally generated with Devel::PPPort $VERSION.\\n" - . "Your Devel::PPPort is only version \$Devel::PPPort::VERSION.\\n" - . "Please install a newer version, or --unstrip will not work.\\n"; - } - Devel::PPPort::WriteFile(\$0); - exit 0; -} -print <$0" or die "cannot strip $0: $!\n"; - print OUT "$pl$c\n"; - - exit 0; -} - -__DATA__ -*/ - -#ifndef _P_P_PORTABILITY_H_ -#define _P_P_PORTABILITY_H_ - -#ifndef DPPP_NAMESPACE -# define DPPP_NAMESPACE DPPP_ -#endif - -#define DPPP_CAT2(x,y) CAT2(x,y) -#define DPPP_(name) DPPP_CAT2(DPPP_NAMESPACE, name) - -#ifndef PERL_REVISION -# if !defined(__PATCHLEVEL_H_INCLUDED__) && !(defined(PATCHLEVEL) && defined(SUBVERSION)) -# define PERL_PATCHLEVEL_H_IMPLICIT -# include -# endif -# if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL))) -# include -# endif -# ifndef PERL_REVISION -# define PERL_REVISION (5) - /* Replace: 1 */ -# define PERL_VERSION PATCHLEVEL -# define PERL_SUBVERSION SUBVERSION - /* Replace PERL_PATCHLEVEL with PERL_VERSION */ - /* Replace: 0 */ -# endif -#endif - -#define _dpppDEC2BCD(dec) ((((dec)/100)<<8)|((((dec)%100)/10)<<4)|((dec)%10)) -#define PERL_BCDVERSION ((_dpppDEC2BCD(PERL_REVISION)<<24)|(_dpppDEC2BCD(PERL_VERSION)<<12)|_dpppDEC2BCD(PERL_SUBVERSION)) - -/* It is very unlikely that anyone will try to use this with Perl 6 - (or greater), but who knows. - */ -#if PERL_REVISION != 5 -# error ppport.h only works with Perl version 5 -#endif /* PERL_REVISION != 5 */ - -#ifdef I_LIMITS -# include -#endif - -#ifndef PERL_UCHAR_MIN -# define PERL_UCHAR_MIN ((unsigned char)0) -#endif - -#ifndef PERL_UCHAR_MAX -# ifdef UCHAR_MAX -# define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX) -# else -# ifdef MAXUCHAR -# define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR) -# else -# define PERL_UCHAR_MAX ((unsigned char)~(unsigned)0) -# endif -# endif -#endif - -#ifndef PERL_USHORT_MIN -# define PERL_USHORT_MIN ((unsigned short)0) -#endif - -#ifndef PERL_USHORT_MAX -# ifdef USHORT_MAX -# define PERL_USHORT_MAX ((unsigned short)USHORT_MAX) -# else -# ifdef MAXUSHORT -# define PERL_USHORT_MAX ((unsigned short)MAXUSHORT) -# else -# ifdef USHRT_MAX -# define PERL_USHORT_MAX ((unsigned short)USHRT_MAX) -# else -# define PERL_USHORT_MAX ((unsigned short)~(unsigned)0) -# endif -# endif -# endif -#endif - -#ifndef PERL_SHORT_MAX -# ifdef SHORT_MAX -# define PERL_SHORT_MAX ((short)SHORT_MAX) -# else -# ifdef MAXSHORT /* Often used in */ -# define PERL_SHORT_MAX ((short)MAXSHORT) -# else -# ifdef SHRT_MAX -# define PERL_SHORT_MAX ((short)SHRT_MAX) -# else -# define PERL_SHORT_MAX ((short) (PERL_USHORT_MAX >> 1)) -# endif -# endif -# endif -#endif - -#ifndef PERL_SHORT_MIN -# ifdef SHORT_MIN -# define PERL_SHORT_MIN ((short)SHORT_MIN) -# else -# ifdef MINSHORT -# define PERL_SHORT_MIN ((short)MINSHORT) -# else -# ifdef SHRT_MIN -# define PERL_SHORT_MIN ((short)SHRT_MIN) -# else -# define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3)) -# endif -# endif -# endif -#endif - -#ifndef PERL_UINT_MAX -# ifdef UINT_MAX -# define PERL_UINT_MAX ((unsigned int)UINT_MAX) -# else -# ifdef MAXUINT -# define PERL_UINT_MAX ((unsigned int)MAXUINT) -# else -# define PERL_UINT_MAX (~(unsigned int)0) -# endif -# endif -#endif - -#ifndef PERL_UINT_MIN -# define PERL_UINT_MIN ((unsigned int)0) -#endif - -#ifndef PERL_INT_MAX -# ifdef INT_MAX -# define PERL_INT_MAX ((int)INT_MAX) -# else -# ifdef MAXINT /* Often used in */ -# define PERL_INT_MAX ((int)MAXINT) -# else -# define PERL_INT_MAX ((int)(PERL_UINT_MAX >> 1)) -# endif -# endif -#endif - -#ifndef PERL_INT_MIN -# ifdef INT_MIN -# define PERL_INT_MIN ((int)INT_MIN) -# else -# ifdef MININT -# define PERL_INT_MIN ((int)MININT) -# else -# define PERL_INT_MIN (-PERL_INT_MAX - ((3 & -1) == 3)) -# endif -# endif -#endif - -#ifndef PERL_ULONG_MAX -# ifdef ULONG_MAX -# define PERL_ULONG_MAX ((unsigned long)ULONG_MAX) -# else -# ifdef MAXULONG -# define PERL_ULONG_MAX ((unsigned long)MAXULONG) -# else -# define PERL_ULONG_MAX (~(unsigned long)0) -# endif -# endif -#endif - -#ifndef PERL_ULONG_MIN -# define PERL_ULONG_MIN ((unsigned long)0L) -#endif - -#ifndef PERL_LONG_MAX -# ifdef LONG_MAX -# define PERL_LONG_MAX ((long)LONG_MAX) -# else -# ifdef MAXLONG -# define PERL_LONG_MAX ((long)MAXLONG) -# else -# define PERL_LONG_MAX ((long) (PERL_ULONG_MAX >> 1)) -# endif -# endif -#endif - -#ifndef PERL_LONG_MIN -# ifdef LONG_MIN -# define PERL_LONG_MIN ((long)LONG_MIN) -# else -# ifdef MINLONG -# define PERL_LONG_MIN ((long)MINLONG) -# else -# define PERL_LONG_MIN (-PERL_LONG_MAX - ((3 & -1) == 3)) -# endif -# endif -#endif - -#if defined(HAS_QUAD) && (defined(convex) || defined(uts)) -# ifndef PERL_UQUAD_MAX -# ifdef ULONGLONG_MAX -# define PERL_UQUAD_MAX ((unsigned long long)ULONGLONG_MAX) -# else -# ifdef MAXULONGLONG -# define PERL_UQUAD_MAX ((unsigned long long)MAXULONGLONG) -# else -# define PERL_UQUAD_MAX (~(unsigned long long)0) -# endif -# endif -# endif - -# ifndef PERL_UQUAD_MIN -# define PERL_UQUAD_MIN ((unsigned long long)0L) -# endif - -# ifndef PERL_QUAD_MAX -# ifdef LONGLONG_MAX -# define PERL_QUAD_MAX ((long long)LONGLONG_MAX) -# else -# ifdef MAXLONGLONG -# define PERL_QUAD_MAX ((long long)MAXLONGLONG) -# else -# define PERL_QUAD_MAX ((long long) (PERL_UQUAD_MAX >> 1)) -# endif -# endif -# endif - -# ifndef PERL_QUAD_MIN -# ifdef LONGLONG_MIN -# define PERL_QUAD_MIN ((long long)LONGLONG_MIN) -# else -# ifdef MINLONGLONG -# define PERL_QUAD_MIN ((long long)MINLONGLONG) -# else -# define PERL_QUAD_MIN (-PERL_QUAD_MAX - ((3 & -1) == 3)) -# endif -# endif -# endif -#endif - -/* This is based on code from 5.003 perl.h */ -#ifdef HAS_QUAD -# ifdef cray -#ifndef IVTYPE -# define IVTYPE int -#endif - -#ifndef IV_MIN -# define IV_MIN PERL_INT_MIN -#endif - -#ifndef IV_MAX -# define IV_MAX PERL_INT_MAX -#endif - -#ifndef UV_MIN -# define UV_MIN PERL_UINT_MIN -#endif - -#ifndef UV_MAX -# define UV_MAX PERL_UINT_MAX -#endif - -# ifdef INTSIZE -#ifndef IVSIZE -# define IVSIZE INTSIZE -#endif - -# endif -# else -# if defined(convex) || defined(uts) -#ifndef IVTYPE -# define IVTYPE long long -#endif - -#ifndef IV_MIN -# define IV_MIN PERL_QUAD_MIN -#endif - -#ifndef IV_MAX -# define IV_MAX PERL_QUAD_MAX -#endif - -#ifndef UV_MIN -# define UV_MIN PERL_UQUAD_MIN -#endif - -#ifndef UV_MAX -# define UV_MAX PERL_UQUAD_MAX -#endif - -# ifdef LONGLONGSIZE -#ifndef IVSIZE -# define IVSIZE LONGLONGSIZE -#endif - -# endif -# else -#ifndef IVTYPE -# define IVTYPE long -#endif - -#ifndef IV_MIN -# define IV_MIN PERL_LONG_MIN -#endif - -#ifndef IV_MAX -# define IV_MAX PERL_LONG_MAX -#endif - -#ifndef UV_MIN -# define UV_MIN PERL_ULONG_MIN -#endif - -#ifndef UV_MAX -# define UV_MAX PERL_ULONG_MAX -#endif - -# ifdef LONGSIZE -#ifndef IVSIZE -# define IVSIZE LONGSIZE -#endif - -# endif -# endif -# endif -#ifndef IVSIZE -# define IVSIZE 8 -#endif - -#ifndef PERL_QUAD_MIN -# define PERL_QUAD_MIN IV_MIN -#endif - -#ifndef PERL_QUAD_MAX -# define PERL_QUAD_MAX IV_MAX -#endif - -#ifndef PERL_UQUAD_MIN -# define PERL_UQUAD_MIN UV_MIN -#endif - -#ifndef PERL_UQUAD_MAX -# define PERL_UQUAD_MAX UV_MAX -#endif - -#else -#ifndef IVTYPE -# define IVTYPE long -#endif - -#ifndef IV_MIN -# define IV_MIN PERL_LONG_MIN -#endif - -#ifndef IV_MAX -# define IV_MAX PERL_LONG_MAX -#endif - -#ifndef UV_MIN -# define UV_MIN PERL_ULONG_MIN -#endif - -#ifndef UV_MAX -# define UV_MAX PERL_ULONG_MAX -#endif - -#endif - -#ifndef IVSIZE -# ifdef LONGSIZE -# define IVSIZE LONGSIZE -# else -# define IVSIZE 4 /* A bold guess, but the best we can make. */ -# endif -#endif -#ifndef UVTYPE -# define UVTYPE unsigned IVTYPE -#endif - -#ifndef UVSIZE -# define UVSIZE IVSIZE -#endif -#ifndef sv_setuv -# define sv_setuv(sv, uv) \ - STMT_START { \ - UV TeMpUv = uv; \ - if (TeMpUv <= IV_MAX) \ - sv_setiv(sv, TeMpUv); \ - else \ - sv_setnv(sv, (double)TeMpUv); \ - } STMT_END -#endif -#ifndef newSVuv -# define newSVuv(uv) ((uv) <= IV_MAX ? newSViv((IV)uv) : newSVnv((NV)uv)) -#endif -#ifndef sv_2uv -# define sv_2uv(sv) ((PL_Sv = (sv)), (UV) (SvNOK(PL_Sv) ? SvNV(PL_Sv) : sv_2nv(PL_Sv))) -#endif - -#ifndef SvUVX -# define SvUVX(sv) ((UV)SvIVX(sv)) -#endif - -#ifndef SvUVXx -# define SvUVXx(sv) SvUVX(sv) -#endif - -#ifndef SvUV -# define SvUV(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv(sv)) -#endif - -#ifndef SvUVx -# define SvUVx(sv) ((PL_Sv = (sv)), SvUV(PL_Sv)) -#endif - -/* Hint: sv_uv - * Always use the SvUVx() macro instead of sv_uv(). - */ -#ifndef sv_uv -# define sv_uv(sv) SvUVx(sv) -#endif - -#if !defined(SvUOK) && defined(SvIOK_UV) -# define SvUOK(sv) SvIOK_UV(sv) -#endif -#ifndef XST_mUV -# define XST_mUV(i,v) (ST(i) = sv_2mortal(newSVuv(v)) ) -#endif - -#ifndef XSRETURN_UV -# define XSRETURN_UV(v) STMT_START { XST_mUV(0,v); XSRETURN(1); } STMT_END -#endif -#ifndef PUSHu -# define PUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); PUSHTARG; } STMT_END -#endif - -#ifndef XPUSHu -# define XPUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END -#endif - -#ifdef HAS_MEMCMP -#ifndef memNE -# define memNE(s1,s2,l) (memcmp(s1,s2,l)) -#endif - -#ifndef memEQ -# define memEQ(s1,s2,l) (!memcmp(s1,s2,l)) -#endif - -#else -#ifndef memNE -# define memNE(s1,s2,l) (bcmp(s1,s2,l)) -#endif - -#ifndef memEQ -# define memEQ(s1,s2,l) (!bcmp(s1,s2,l)) -#endif - -#endif -#ifndef MoveD -# define MoveD(s,d,n,t) memmove((char*)(d),(char*)(s), (n) * sizeof(t)) -#endif - -#ifndef CopyD -# define CopyD(s,d,n,t) memcpy((char*)(d),(char*)(s), (n) * sizeof(t)) -#endif - -#ifdef HAS_MEMSET -#ifndef ZeroD -# define ZeroD(d,n,t) memzero((char*)(d), (n) * sizeof(t)) -#endif - -#else -#ifndef ZeroD -# define ZeroD(d,n,t) ((void)memzero((char*)(d), (n) * sizeof(t)), d) -#endif - -#endif -#ifndef PoisonWith -# define PoisonWith(d,n,t,b) (void)memset((char*)(d), (U8)(b), (n) * sizeof(t)) -#endif - -#ifndef PoisonNew -# define PoisonNew(d,n,t) PoisonWith(d,n,t,0xAB) -#endif - -#ifndef PoisonFree -# define PoisonFree(d,n,t) PoisonWith(d,n,t,0xEF) -#endif - -#ifndef Poison -# define Poison(d,n,t) PoisonFree(d,n,t) -#endif -#ifndef Newx -# define Newx(v,n,t) New(0,v,n,t) -#endif - -#ifndef Newxc -# define Newxc(v,n,t,c) Newc(0,v,n,t,c) -#endif - -#ifndef Newxz -# define Newxz(v,n,t) Newz(0,v,n,t) -#endif - -#ifndef PERL_UNUSED_DECL -# ifdef HASATTRIBUTE -# if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER) -# define PERL_UNUSED_DECL -# else -# define PERL_UNUSED_DECL __attribute__((unused)) -# endif -# else -# define PERL_UNUSED_DECL -# endif -#endif - -#ifndef PERL_UNUSED_ARG -# if defined(lint) && defined(S_SPLINT_S) /* www.splint.org */ -# include -# define PERL_UNUSED_ARG(x) NOTE(ARGUNUSED(x)) -# else -# define PERL_UNUSED_ARG(x) ((void)x) -# endif -#endif - -#ifndef PERL_UNUSED_VAR -# define PERL_UNUSED_VAR(x) ((void)x) -#endif - -#ifndef PERL_UNUSED_CONTEXT -# ifdef USE_ITHREADS -# define PERL_UNUSED_CONTEXT PERL_UNUSED_ARG(my_perl) -# else -# define PERL_UNUSED_CONTEXT -# endif -#endif -#ifndef NOOP -# define NOOP /*EMPTY*/(void)0 -#endif - -#ifndef dNOOP -# define dNOOP extern int /*@unused@*/ Perl___notused PERL_UNUSED_DECL -#endif - -#ifndef NVTYPE -# if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) -# define NVTYPE long double -# else -# define NVTYPE double -# endif -typedef NVTYPE NV; -#endif - -#ifndef INT2PTR - -# if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE) -# define PTRV UV -# define INT2PTR(any,d) (any)(d) -# else -# if PTRSIZE == LONGSIZE -# define PTRV unsigned long -# else -# define PTRV unsigned -# endif -# define INT2PTR(any,d) (any)(PTRV)(d) -# endif - -# define NUM2PTR(any,d) (any)(PTRV)(d) -# define PTR2IV(p) INT2PTR(IV,p) -# define PTR2UV(p) INT2PTR(UV,p) -# define PTR2NV(p) NUM2PTR(NV,p) - -# if PTRSIZE == LONGSIZE -# define PTR2ul(p) (unsigned long)(p) -# else -# define PTR2ul(p) INT2PTR(unsigned long,p) -# endif - -#endif /* !INT2PTR */ - -#undef START_EXTERN_C -#undef END_EXTERN_C -#undef EXTERN_C -#ifdef __cplusplus -# define START_EXTERN_C extern "C" { -# define END_EXTERN_C } -# define EXTERN_C extern "C" -#else -# define START_EXTERN_C -# define END_EXTERN_C -# define EXTERN_C extern -#endif - -#if defined(PERL_GCC_PEDANTIC) -# ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN -# define PERL_GCC_BRACE_GROUPS_FORBIDDEN -# endif -#endif - -#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus) -# ifndef PERL_USE_GCC_BRACE_GROUPS -# define PERL_USE_GCC_BRACE_GROUPS -# endif -#endif - -#undef STMT_START -#undef STMT_END -#ifdef PERL_USE_GCC_BRACE_GROUPS -# define STMT_START (void)( /* gcc supports ``({ STATEMENTS; })'' */ -# define STMT_END ) -#else -# if defined(VOIDFLAGS) && (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && !defined(__GNUC__) -# define STMT_START if (1) -# define STMT_END else (void)0 -# else -# define STMT_START do -# define STMT_END while (0) -# endif -#endif -#ifndef boolSV -# define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no) -#endif - -/* DEFSV appears first in 5.004_56 */ -#ifndef DEFSV -# define DEFSV GvSV(PL_defgv) -#endif - -#ifndef SAVE_DEFSV -# define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv)) -#endif - -/* Older perls (<=5.003) lack AvFILLp */ -#ifndef AvFILLp -# define AvFILLp AvFILL -#endif -#ifndef ERRSV -# define ERRSV get_sv("@",FALSE) -#endif -#ifndef newSVpvn -# define newSVpvn(data,len) ((data) \ - ? ((len) ? newSVpv((data), (len)) : newSVpv("", 0)) \ - : newSV(0)) -#endif - -/* Hint: gv_stashpvn - * This function's backport doesn't support the length parameter, but - * rather ignores it. Portability can only be ensured if the length - * parameter is used for speed reasons, but the length can always be - * correctly computed from the string argument. - */ -#ifndef gv_stashpvn -# define gv_stashpvn(str,len,create) gv_stashpv(str,create) -#endif - -/* Replace: 1 */ -#ifndef get_cv -# define get_cv perl_get_cv -#endif - -#ifndef get_sv -# define get_sv perl_get_sv -#endif - -#ifndef get_av -# define get_av perl_get_av -#endif - -#ifndef get_hv -# define get_hv perl_get_hv -#endif - -/* Replace: 0 */ -#ifndef dUNDERBAR -# define dUNDERBAR dNOOP -#endif - -#ifndef UNDERBAR -# define UNDERBAR DEFSV -#endif -#ifndef dAX -# define dAX I32 ax = MARK - PL_stack_base + 1 -#endif - -#ifndef dITEMS -# define dITEMS I32 items = SP - MARK -#endif -#ifndef dXSTARG -# define dXSTARG SV * targ = sv_newmortal() -#endif -#ifndef dAXMARK -# define dAXMARK I32 ax = POPMARK; \ - register SV ** const mark = PL_stack_base + ax++ -#endif -#ifndef XSprePUSH -# define XSprePUSH (sp = PL_stack_base + ax - 1) -#endif - -#if (PERL_BCDVERSION < 0x5005000) -# undef XSRETURN -# define XSRETURN(off) \ - STMT_START { \ - PL_stack_sp = PL_stack_base + ax + ((off) - 1); \ - return; \ - } STMT_END -#endif -#ifndef PERL_ABS -# define PERL_ABS(x) ((x) < 0 ? -(x) : (x)) -#endif -#ifndef dVAR -# define dVAR dNOOP -#endif -#ifndef SVf -# define SVf "_" -#endif -#ifndef UTF8_MAXBYTES -# define UTF8_MAXBYTES UTF8_MAXLEN -#endif -#ifndef PERL_HASH -# define PERL_HASH(hash,str,len) \ - STMT_START { \ - const char *s_PeRlHaSh = str; \ - I32 i_PeRlHaSh = len; \ - U32 hash_PeRlHaSh = 0; \ - while (i_PeRlHaSh--) \ - hash_PeRlHaSh = hash_PeRlHaSh * 33 + *s_PeRlHaSh++; \ - (hash) = hash_PeRlHaSh; \ - } STMT_END -#endif - -#ifndef PERL_SIGNALS_UNSAFE_FLAG - -#define PERL_SIGNALS_UNSAFE_FLAG 0x0001 - -#if (PERL_BCDVERSION < 0x5008000) -# define D_PPP_PERL_SIGNALS_INIT PERL_SIGNALS_UNSAFE_FLAG -#else -# define D_PPP_PERL_SIGNALS_INIT 0 -#endif - -#if defined(NEED_PL_signals) -static U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT; -#elif defined(NEED_PL_signals_GLOBAL) -U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT; -#else -extern U32 DPPP_(my_PL_signals); -#endif -#define PL_signals DPPP_(my_PL_signals) - -#endif - -/* Hint: PL_ppaddr - * Calling an op via PL_ppaddr requires passing a context argument - * for threaded builds. Since the context argument is different for - * 5.005 perls, you can use aTHXR (supplied by ppport.h), which will - * automatically be defined as the correct argument. - */ - -#if (PERL_BCDVERSION <= 0x5005005) -/* Replace: 1 */ -# define PL_ppaddr ppaddr -# define PL_no_modify no_modify -/* Replace: 0 */ -#endif - -#if (PERL_BCDVERSION <= 0x5004005) -/* Replace: 1 */ -# define PL_DBsignal DBsignal -# define PL_DBsingle DBsingle -# define PL_DBsub DBsub -# define PL_DBtrace DBtrace -# define PL_Sv Sv -# define PL_compiling compiling -# define PL_copline copline -# define PL_curcop curcop -# define PL_curstash curstash -# define PL_debstash debstash -# define PL_defgv defgv -# define PL_diehook diehook -# define PL_dirty dirty -# define PL_dowarn dowarn -# define PL_errgv errgv -# define PL_expect expect -# define PL_hexdigit hexdigit -# define PL_hints hints -# define PL_laststatval laststatval -# define PL_na na -# define PL_perl_destruct_level perl_destruct_level -# define PL_perldb perldb -# define PL_rsfp_filters rsfp_filters -# define PL_rsfp rsfp -# define PL_stack_base stack_base -# define PL_stack_sp stack_sp -# define PL_statcache statcache -# define PL_stdingv stdingv -# define PL_sv_arenaroot sv_arenaroot -# define PL_sv_no sv_no -# define PL_sv_undef sv_undef -# define PL_sv_yes sv_yes -# define PL_tainted tainted -# define PL_tainting tainting -/* Replace: 0 */ -#endif - -/* Warning: PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters - * Do not use this variable. It is internal to the perl parser - * and may change or even be removed in the future. Note that - * as of perl 5.9.5 you cannot assign to this variable anymore. - */ - -/* TODO: cannot assign to these vars; is it worth fixing? */ -#if (PERL_BCDVERSION >= 0x5009005) -# define PL_expect (PL_parser ? PL_parser->expect : 0) -# define PL_copline (PL_parser ? PL_parser->copline : 0) -# define PL_rsfp (PL_parser ? PL_parser->rsfp : (PerlIO *) 0) -# define PL_rsfp_filters (PL_parser ? PL_parser->rsfp_filters : (AV *) 0) -#endif -#ifndef dTHR -# define dTHR dNOOP -#endif -#ifndef dTHX -# define dTHX dNOOP -#endif - -#ifndef dTHXa -# define dTHXa(x) dNOOP -#endif -#ifndef pTHX -# define pTHX void -#endif - -#ifndef pTHX_ -# define pTHX_ -#endif - -#ifndef aTHX -# define aTHX -#endif - -#ifndef aTHX_ -# define aTHX_ -#endif - -#if (PERL_BCDVERSION < 0x5006000) -# ifdef USE_THREADS -# define aTHXR thr -# define aTHXR_ thr, -# else -# define aTHXR -# define aTHXR_ -# endif -# define dTHXR dTHR -#else -# define aTHXR aTHX -# define aTHXR_ aTHX_ -# define dTHXR dTHX -#endif -#ifndef dTHXoa -# define dTHXoa(x) dTHXa(x) -#endif -#ifndef PUSHmortal -# define PUSHmortal PUSHs(sv_newmortal()) -#endif - -#ifndef mPUSHp -# define mPUSHp(p,l) sv_setpvn_mg(PUSHmortal, (p), (l)) -#endif - -#ifndef mPUSHn -# define mPUSHn(n) sv_setnv_mg(PUSHmortal, (NV)(n)) -#endif - -#ifndef mPUSHi -# define mPUSHi(i) sv_setiv_mg(PUSHmortal, (IV)(i)) -#endif - -#ifndef mPUSHu -# define mPUSHu(u) sv_setuv_mg(PUSHmortal, (UV)(u)) -#endif -#ifndef XPUSHmortal -# define XPUSHmortal XPUSHs(sv_newmortal()) -#endif - -#ifndef mXPUSHp -# define mXPUSHp(p,l) STMT_START { EXTEND(sp,1); sv_setpvn_mg(PUSHmortal, (p), (l)); } STMT_END -#endif - -#ifndef mXPUSHn -# define mXPUSHn(n) STMT_START { EXTEND(sp,1); sv_setnv_mg(PUSHmortal, (NV)(n)); } STMT_END -#endif - -#ifndef mXPUSHi -# define mXPUSHi(i) STMT_START { EXTEND(sp,1); sv_setiv_mg(PUSHmortal, (IV)(i)); } STMT_END -#endif - -#ifndef mXPUSHu -# define mXPUSHu(u) STMT_START { EXTEND(sp,1); sv_setuv_mg(PUSHmortal, (UV)(u)); } STMT_END -#endif - -/* Replace: 1 */ -#ifndef call_sv -# define call_sv perl_call_sv -#endif - -#ifndef call_pv -# define call_pv perl_call_pv -#endif - -#ifndef call_argv -# define call_argv perl_call_argv -#endif - -#ifndef call_method -# define call_method perl_call_method -#endif -#ifndef eval_sv -# define eval_sv perl_eval_sv -#endif -#ifndef PERL_LOADMOD_DENY -# define PERL_LOADMOD_DENY 0x1 -#endif - -#ifndef PERL_LOADMOD_NOIMPORT -# define PERL_LOADMOD_NOIMPORT 0x2 -#endif - -#ifndef PERL_LOADMOD_IMPORT_OPS -# define PERL_LOADMOD_IMPORT_OPS 0x4 -#endif - -/* Replace: 0 */ - -/* Replace perl_eval_pv with eval_pv */ - -#ifndef eval_pv -#if defined(NEED_eval_pv) -static SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error); -static -#else -extern SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error); -#endif - -#ifdef eval_pv -# undef eval_pv -#endif -#define eval_pv(a,b) DPPP_(my_eval_pv)(aTHX_ a,b) -#define Perl_eval_pv DPPP_(my_eval_pv) - -#if defined(NEED_eval_pv) || defined(NEED_eval_pv_GLOBAL) - -SV* -DPPP_(my_eval_pv)(char *p, I32 croak_on_error) -{ - dSP; - SV* sv = newSVpv(p, 0); - - PUSHMARK(sp); - eval_sv(sv, G_SCALAR); - SvREFCNT_dec(sv); - - SPAGAIN; - sv = POPs; - PUTBACK; - - if (croak_on_error && SvTRUE(GvSV(errgv))) - croak(SvPVx(GvSV(errgv), na)); - - return sv; -} - -#endif -#endif - -#ifndef vload_module -#if defined(NEED_vload_module) -static void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args); -static -#else -extern void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args); -#endif - -#ifdef vload_module -# undef vload_module -#endif -#define vload_module(a,b,c,d) DPPP_(my_vload_module)(aTHX_ a,b,c,d) -#define Perl_vload_module DPPP_(my_vload_module) - -#if defined(NEED_vload_module) || defined(NEED_vload_module_GLOBAL) - -void -DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args) -{ - dTHR; - dVAR; - OP *veop, *imop; - - OP * const modname = newSVOP(OP_CONST, 0, name); - /* 5.005 has a somewhat hacky force_normal that doesn't croak on - SvREADONLY() if PL_compling is true. Current perls take care in - ck_require() to correctly turn off SvREADONLY before calling - force_normal_flags(). This seems a better fix than fudging PL_compling - */ - SvREADONLY_off(((SVOP*)modname)->op_sv); - modname->op_private |= OPpCONST_BARE; - if (ver) { - veop = newSVOP(OP_CONST, 0, ver); - } - else - veop = NULL; - if (flags & PERL_LOADMOD_NOIMPORT) { - imop = sawparens(newNULLLIST()); - } - else if (flags & PERL_LOADMOD_IMPORT_OPS) { - imop = va_arg(*args, OP*); - } - else { - SV *sv; - imop = NULL; - sv = va_arg(*args, SV*); - while (sv) { - imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv)); - sv = va_arg(*args, SV*); - } - } - { - const line_t ocopline = PL_copline; - COP * const ocurcop = PL_curcop; - const int oexpect = PL_expect; - -#if (PERL_BCDVERSION >= 0x5004000) - utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0), - veop, modname, imop); -#else - utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(), - modname, imop); -#endif - PL_expect = oexpect; - PL_copline = ocopline; - PL_curcop = ocurcop; - } -} - -#endif -#endif - -#ifndef load_module -#if defined(NEED_load_module) -static void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...); -static -#else -extern void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...); -#endif - -#ifdef load_module -# undef load_module -#endif -#define load_module DPPP_(my_load_module) -#define Perl_load_module DPPP_(my_load_module) - -#if defined(NEED_load_module) || defined(NEED_load_module_GLOBAL) - -void -DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...) -{ - va_list args; - va_start(args, ver); - vload_module(flags, name, ver, &args); - va_end(args); -} - -#endif -#endif -#ifndef newRV_inc -# define newRV_inc(sv) newRV(sv) /* Replace */ -#endif - -#ifndef newRV_noinc -#if defined(NEED_newRV_noinc) -static SV * DPPP_(my_newRV_noinc)(SV *sv); -static -#else -extern SV * DPPP_(my_newRV_noinc)(SV *sv); -#endif - -#ifdef newRV_noinc -# undef newRV_noinc -#endif -#define newRV_noinc(a) DPPP_(my_newRV_noinc)(aTHX_ a) -#define Perl_newRV_noinc DPPP_(my_newRV_noinc) - -#if defined(NEED_newRV_noinc) || defined(NEED_newRV_noinc_GLOBAL) -SV * -DPPP_(my_newRV_noinc)(SV *sv) -{ - SV *rv = (SV *)newRV(sv); - SvREFCNT_dec(sv); - return rv; -} -#endif -#endif - -/* Hint: newCONSTSUB - * Returns a CV* as of perl-5.7.1. This return value is not supported - * by Devel::PPPort. - */ - -/* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */ -#if (PERL_BCDVERSION < 0x5004063) && (PERL_BCDVERSION != 0x5004005) -#if defined(NEED_newCONSTSUB) -static void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv); -static -#else -extern void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv); -#endif - -#ifdef newCONSTSUB -# undef newCONSTSUB -#endif -#define newCONSTSUB(a,b,c) DPPP_(my_newCONSTSUB)(aTHX_ a,b,c) -#define Perl_newCONSTSUB DPPP_(my_newCONSTSUB) - -#if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL) - -void -DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv) -{ - U32 oldhints = PL_hints; - HV *old_cop_stash = PL_curcop->cop_stash; - HV *old_curstash = PL_curstash; - line_t oldline = PL_curcop->cop_line; - PL_curcop->cop_line = PL_copline; - - PL_hints &= ~HINT_BLOCK_SCOPE; - if (stash) - PL_curstash = PL_curcop->cop_stash = stash; - - newSUB( - -#if (PERL_BCDVERSION < 0x5003022) - start_subparse(), -#elif (PERL_BCDVERSION == 0x5003022) - start_subparse(0), -#else /* 5.003_23 onwards */ - start_subparse(FALSE, 0), -#endif - - newSVOP(OP_CONST, 0, newSVpv((char *) name, 0)), - newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */ - newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv)) - ); - - PL_hints = oldhints; - PL_curcop->cop_stash = old_cop_stash; - PL_curstash = old_curstash; - PL_curcop->cop_line = oldline; -} -#endif -#endif - -/* - * Boilerplate macros for initializing and accessing interpreter-local - * data from C. All statics in extensions should be reworked to use - * this, if you want to make the extension thread-safe. See ext/re/re.xs - * for an example of the use of these macros. - * - * Code that uses these macros is responsible for the following: - * 1. #define MY_CXT_KEY to a unique string, e.g. "DynaLoader_guts" - * 2. Declare a typedef named my_cxt_t that is a structure that contains - * all the data that needs to be interpreter-local. - * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t. - * 4. Use the MY_CXT_INIT macro such that it is called exactly once - * (typically put in the BOOT: section). - * 5. Use the members of the my_cxt_t structure everywhere as - * MY_CXT.member. - * 6. Use the dMY_CXT macro (a declaration) in all the functions that - * access MY_CXT. - */ - -#if defined(MULTIPLICITY) || defined(PERL_OBJECT) || \ - defined(PERL_CAPI) || defined(PERL_IMPLICIT_CONTEXT) - -#ifndef START_MY_CXT - -/* This must appear in all extensions that define a my_cxt_t structure, - * right after the definition (i.e. at file scope). The non-threads - * case below uses it to declare the data as static. */ -#define START_MY_CXT - -#if (PERL_BCDVERSION < 0x5004068) -/* Fetches the SV that keeps the per-interpreter data. */ -#define dMY_CXT_SV \ - SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE) -#else /* >= perl5.004_68 */ -#define dMY_CXT_SV \ - SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY, \ - sizeof(MY_CXT_KEY)-1, TRUE) -#endif /* < perl5.004_68 */ - -/* This declaration should be used within all functions that use the - * interpreter-local data. */ -#define dMY_CXT \ - dMY_CXT_SV; \ - my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv)) - -/* Creates and zeroes the per-interpreter data. - * (We allocate my_cxtp in a Perl SV so that it will be released when - * the interpreter goes away.) */ -#define MY_CXT_INIT \ - dMY_CXT_SV; \ - /* newSV() allocates one more than needed */ \ - my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ - Zero(my_cxtp, 1, my_cxt_t); \ - sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) - -/* This macro must be used to access members of the my_cxt_t structure. - * e.g. MYCXT.some_data */ -#define MY_CXT (*my_cxtp) - -/* Judicious use of these macros can reduce the number of times dMY_CXT - * is used. Use is similar to pTHX, aTHX etc. */ -#define pMY_CXT my_cxt_t *my_cxtp -#define pMY_CXT_ pMY_CXT, -#define _pMY_CXT ,pMY_CXT -#define aMY_CXT my_cxtp -#define aMY_CXT_ aMY_CXT, -#define _aMY_CXT ,aMY_CXT - -#endif /* START_MY_CXT */ - -#ifndef MY_CXT_CLONE -/* Clones the per-interpreter data. */ -#define MY_CXT_CLONE \ - dMY_CXT_SV; \ - my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ - Copy(INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)), my_cxtp, 1, my_cxt_t);\ - sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) -#endif - -#else /* single interpreter */ - -#ifndef START_MY_CXT - -#define START_MY_CXT static my_cxt_t my_cxt; -#define dMY_CXT_SV dNOOP -#define dMY_CXT dNOOP -#define MY_CXT_INIT NOOP -#define MY_CXT my_cxt - -#define pMY_CXT void -#define pMY_CXT_ -#define _pMY_CXT -#define aMY_CXT -#define aMY_CXT_ -#define _aMY_CXT - -#endif /* START_MY_CXT */ - -#ifndef MY_CXT_CLONE -#define MY_CXT_CLONE NOOP -#endif - -#endif - -#ifndef IVdf -# if IVSIZE == LONGSIZE -# define IVdf "ld" -# define UVuf "lu" -# define UVof "lo" -# define UVxf "lx" -# define UVXf "lX" -# else -# if IVSIZE == INTSIZE -# define IVdf "d" -# define UVuf "u" -# define UVof "o" -# define UVxf "x" -# define UVXf "X" -# endif -# endif -#endif - -#ifndef NVef -# if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && \ - defined(PERL_PRIfldbl) /* Not very likely, but let's try anyway. */ -# define NVef PERL_PRIeldbl -# define NVff PERL_PRIfldbl -# define NVgf PERL_PRIgldbl -# else -# define NVef "e" -# define NVff "f" -# define NVgf "g" -# endif -#endif - -#ifndef SvREFCNT_inc -# ifdef PERL_USE_GCC_BRACE_GROUPS -# define SvREFCNT_inc(sv) \ - ({ \ - SV * const _sv = (SV*)(sv); \ - if (_sv) \ - (SvREFCNT(_sv))++; \ - _sv; \ - }) -# else -# define SvREFCNT_inc(sv) \ - ((PL_Sv=(SV*)(sv)) ? (++(SvREFCNT(PL_Sv)),PL_Sv) : NULL) -# endif -#endif - -#ifndef SvREFCNT_inc_simple -# ifdef PERL_USE_GCC_BRACE_GROUPS -# define SvREFCNT_inc_simple(sv) \ - ({ \ - if (sv) \ - (SvREFCNT(sv))++; \ - (SV *)(sv); \ - }) -# else -# define SvREFCNT_inc_simple(sv) \ - ((sv) ? (SvREFCNT(sv)++,(SV*)(sv)) : NULL) -# endif -#endif - -#ifndef SvREFCNT_inc_NN -# ifdef PERL_USE_GCC_BRACE_GROUPS -# define SvREFCNT_inc_NN(sv) \ - ({ \ - SV * const _sv = (SV*)(sv); \ - SvREFCNT(_sv)++; \ - _sv; \ - }) -# else -# define SvREFCNT_inc_NN(sv) \ - (PL_Sv=(SV*)(sv),++(SvREFCNT(PL_Sv)),PL_Sv) -# endif -#endif - -#ifndef SvREFCNT_inc_void -# ifdef PERL_USE_GCC_BRACE_GROUPS -# define SvREFCNT_inc_void(sv) \ - ({ \ - SV * const _sv = (SV*)(sv); \ - if (_sv) \ - (void)(SvREFCNT(_sv)++); \ - }) -# else -# define SvREFCNT_inc_void(sv) \ - (void)((PL_Sv=(SV*)(sv)) ? ++(SvREFCNT(PL_Sv)) : 0) -# endif -#endif -#ifndef SvREFCNT_inc_simple_void -# define SvREFCNT_inc_simple_void(sv) STMT_START { if (sv) SvREFCNT(sv)++; } STMT_END -#endif - -#ifndef SvREFCNT_inc_simple_NN -# define SvREFCNT_inc_simple_NN(sv) (++SvREFCNT(sv), (SV*)(sv)) -#endif - -#ifndef SvREFCNT_inc_void_NN -# define SvREFCNT_inc_void_NN(sv) (void)(++SvREFCNT((SV*)(sv))) -#endif - -#ifndef SvREFCNT_inc_simple_void_NN -# define SvREFCNT_inc_simple_void_NN(sv) (void)(++SvREFCNT((SV*)(sv))) -#endif - -/* Backwards compatibility stuff... :-( */ -#if !defined(NEED_sv_2pv_flags) && defined(NEED_sv_2pv_nolen) -# define NEED_sv_2pv_flags -#endif -#if !defined(NEED_sv_2pv_flags_GLOBAL) && defined(NEED_sv_2pv_nolen_GLOBAL) -# define NEED_sv_2pv_flags_GLOBAL -#endif - -/* Hint: sv_2pv_nolen - * Use the SvPV_nolen() or SvPV_nolen_const() macros instead of sv_2pv_nolen(). - */ -#ifndef sv_2pv_nolen -# define sv_2pv_nolen(sv) SvPV_nolen(sv) -#endif - -#ifdef SvPVbyte - -/* Hint: SvPVbyte - * Does not work in perl-5.6.1, ppport.h implements a version - * borrowed from perl-5.7.3. - */ - -#if (PERL_BCDVERSION < 0x5007000) - -#if defined(NEED_sv_2pvbyte) -static char * DPPP_(my_sv_2pvbyte)(pTHX_ SV * sv, STRLEN * lp); -static -#else -extern char * DPPP_(my_sv_2pvbyte)(pTHX_ SV * sv, STRLEN * lp); -#endif - -#ifdef sv_2pvbyte -# undef sv_2pvbyte -#endif -#define sv_2pvbyte(a,b) DPPP_(my_sv_2pvbyte)(aTHX_ a,b) -#define Perl_sv_2pvbyte DPPP_(my_sv_2pvbyte) - -#if defined(NEED_sv_2pvbyte) || defined(NEED_sv_2pvbyte_GLOBAL) - -char * -DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp) -{ - sv_utf8_downgrade(sv,0); - return SvPV(sv,*lp); -} - -#endif - -/* Hint: sv_2pvbyte - * Use the SvPVbyte() macro instead of sv_2pvbyte(). - */ - -#undef SvPVbyte - -#define SvPVbyte(sv, lp) \ - ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK) \ - ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp)) - -#endif - -#else - -# define SvPVbyte SvPV -# define sv_2pvbyte sv_2pv - -#endif -#ifndef sv_2pvbyte_nolen -# define sv_2pvbyte_nolen(sv) sv_2pv_nolen(sv) -#endif - -/* Hint: sv_pvn - * Always use the SvPV() macro instead of sv_pvn(). - */ - -/* Hint: sv_pvn_force - * Always use the SvPV_force() macro instead of sv_pvn_force(). - */ - -/* If these are undefined, they're not handled by the core anyway */ -#ifndef SV_IMMEDIATE_UNREF -# define SV_IMMEDIATE_UNREF 0 -#endif - -#ifndef SV_GMAGIC -# define SV_GMAGIC 0 -#endif - -#ifndef SV_COW_DROP_PV -# define SV_COW_DROP_PV 0 -#endif - -#ifndef SV_UTF8_NO_ENCODING -# define SV_UTF8_NO_ENCODING 0 -#endif - -#ifndef SV_NOSTEAL -# define SV_NOSTEAL 0 -#endif - -#ifndef SV_CONST_RETURN -# define SV_CONST_RETURN 0 -#endif - -#ifndef SV_MUTABLE_RETURN -# define SV_MUTABLE_RETURN 0 -#endif - -#ifndef SV_SMAGIC -# define SV_SMAGIC 0 -#endif - -#ifndef SV_HAS_TRAILING_NUL -# define SV_HAS_TRAILING_NUL 0 -#endif - -#ifndef SV_COW_SHARED_HASH_KEYS -# define SV_COW_SHARED_HASH_KEYS 0 -#endif - -#if (PERL_BCDVERSION < 0x5007002) - -#if defined(NEED_sv_2pv_flags) -static char * DPPP_(my_sv_2pv_flags)(pTHX_ SV * sv, STRLEN * lp, I32 flags); -static -#else -extern char * DPPP_(my_sv_2pv_flags)(pTHX_ SV * sv, STRLEN * lp, I32 flags); -#endif - -#ifdef sv_2pv_flags -# undef sv_2pv_flags -#endif -#define sv_2pv_flags(a,b,c) DPPP_(my_sv_2pv_flags)(aTHX_ a,b,c) -#define Perl_sv_2pv_flags DPPP_(my_sv_2pv_flags) - -#if defined(NEED_sv_2pv_flags) || defined(NEED_sv_2pv_flags_GLOBAL) - -char * -DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags) -{ - STRLEN n_a = (STRLEN) flags; - return sv_2pv(sv, lp ? lp : &n_a); -} - -#endif - -#if defined(NEED_sv_pvn_force_flags) -static char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV * sv, STRLEN * lp, I32 flags); -static -#else -extern char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV * sv, STRLEN * lp, I32 flags); -#endif - -#ifdef sv_pvn_force_flags -# undef sv_pvn_force_flags -#endif -#define sv_pvn_force_flags(a,b,c) DPPP_(my_sv_pvn_force_flags)(aTHX_ a,b,c) -#define Perl_sv_pvn_force_flags DPPP_(my_sv_pvn_force_flags) - -#if defined(NEED_sv_pvn_force_flags) || defined(NEED_sv_pvn_force_flags_GLOBAL) - -char * -DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags) -{ - STRLEN n_a = (STRLEN) flags; - return sv_pvn_force(sv, lp ? lp : &n_a); -} - -#endif - -#endif -#ifndef SvPV_const -# define SvPV_const(sv, lp) SvPV_flags_const(sv, lp, SV_GMAGIC) -#endif - -#ifndef SvPV_mutable -# define SvPV_mutable(sv, lp) SvPV_flags_mutable(sv, lp, SV_GMAGIC) -#endif -#ifndef SvPV_flags -# define SvPV_flags(sv, lp, flags) \ - ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ - ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pv_flags(sv, &lp, flags)) -#endif -#ifndef SvPV_flags_const -# define SvPV_flags_const(sv, lp, flags) \ - ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ - ? ((lp = SvCUR(sv)), SvPVX_const(sv)) : \ - (const char*) sv_2pv_flags(sv, &lp, flags|SV_CONST_RETURN)) -#endif -#ifndef SvPV_flags_const_nolen -# define SvPV_flags_const_nolen(sv, flags) \ - ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ - ? SvPVX_const(sv) : \ - (const char*) sv_2pv_flags(sv, 0, flags|SV_CONST_RETURN)) -#endif -#ifndef SvPV_flags_mutable -# define SvPV_flags_mutable(sv, lp, flags) \ - ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ - ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) : \ - sv_2pv_flags(sv, &lp, flags|SV_MUTABLE_RETURN)) -#endif -#ifndef SvPV_force -# define SvPV_force(sv, lp) SvPV_force_flags(sv, lp, SV_GMAGIC) -#endif - -#ifndef SvPV_force_nolen -# define SvPV_force_nolen(sv) SvPV_force_flags_nolen(sv, SV_GMAGIC) -#endif - -#ifndef SvPV_force_mutable -# define SvPV_force_mutable(sv, lp) SvPV_force_flags_mutable(sv, lp, SV_GMAGIC) -#endif - -#ifndef SvPV_force_nomg -# define SvPV_force_nomg(sv, lp) SvPV_force_flags(sv, lp, 0) -#endif - -#ifndef SvPV_force_nomg_nolen -# define SvPV_force_nomg_nolen(sv) SvPV_force_flags_nolen(sv, 0) -#endif -#ifndef SvPV_force_flags -# define SvPV_force_flags(sv, lp, flags) \ - ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \ - ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force_flags(sv, &lp, flags)) -#endif -#ifndef SvPV_force_flags_nolen -# define SvPV_force_flags_nolen(sv, flags) \ - ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \ - ? SvPVX(sv) : sv_pvn_force_flags(sv, 0, flags)) -#endif -#ifndef SvPV_force_flags_mutable -# define SvPV_force_flags_mutable(sv, lp, flags) \ - ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \ - ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) \ - : sv_pvn_force_flags(sv, &lp, flags|SV_MUTABLE_RETURN)) -#endif -#ifndef SvPV_nolen -# define SvPV_nolen(sv) \ - ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ - ? SvPVX(sv) : sv_2pv_flags(sv, 0, SV_GMAGIC)) -#endif -#ifndef SvPV_nolen_const -# define SvPV_nolen_const(sv) \ - ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ - ? SvPVX_const(sv) : sv_2pv_flags(sv, 0, SV_GMAGIC|SV_CONST_RETURN)) -#endif -#ifndef SvPV_nomg -# define SvPV_nomg(sv, lp) SvPV_flags(sv, lp, 0) -#endif - -#ifndef SvPV_nomg_const -# define SvPV_nomg_const(sv, lp) SvPV_flags_const(sv, lp, 0) -#endif - -#ifndef SvPV_nomg_const_nolen -# define SvPV_nomg_const_nolen(sv) SvPV_flags_const_nolen(sv, 0) -#endif -#ifndef SvMAGIC_set -# define SvMAGIC_set(sv, val) \ - STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \ - (((XPVMG*) SvANY(sv))->xmg_magic = (val)); } STMT_END -#endif - -#if (PERL_BCDVERSION < 0x5009003) -#ifndef SvPVX_const -# define SvPVX_const(sv) ((const char*) (0 + SvPVX(sv))) -#endif - -#ifndef SvPVX_mutable -# define SvPVX_mutable(sv) (0 + SvPVX(sv)) -#endif -#ifndef SvRV_set -# define SvRV_set(sv, val) \ - STMT_START { assert(SvTYPE(sv) >= SVt_RV); \ - (((XRV*) SvANY(sv))->xrv_rv = (val)); } STMT_END -#endif - -#else -#ifndef SvPVX_const -# define SvPVX_const(sv) ((const char*)((sv)->sv_u.svu_pv)) -#endif - -#ifndef SvPVX_mutable -# define SvPVX_mutable(sv) ((sv)->sv_u.svu_pv) -#endif -#ifndef SvRV_set -# define SvRV_set(sv, val) \ - STMT_START { assert(SvTYPE(sv) >= SVt_RV); \ - ((sv)->sv_u.svu_rv = (val)); } STMT_END -#endif - -#endif -#ifndef SvSTASH_set -# define SvSTASH_set(sv, val) \ - STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \ - (((XPVMG*) SvANY(sv))->xmg_stash = (val)); } STMT_END -#endif - -#if (PERL_BCDVERSION < 0x5004000) -#ifndef SvUV_set -# define SvUV_set(sv, val) \ - STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ - (((XPVIV*) SvANY(sv))->xiv_iv = (IV) (val)); } STMT_END -#endif - -#else -#ifndef SvUV_set -# define SvUV_set(sv, val) \ - STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ - (((XPVUV*) SvANY(sv))->xuv_uv = (val)); } STMT_END -#endif - -#endif - -#if (PERL_BCDVERSION >= 0x5004000) && !defined(vnewSVpvf) -#if defined(NEED_vnewSVpvf) -static SV * DPPP_(my_vnewSVpvf)(pTHX_ const char * pat, va_list * args); -static -#else -extern SV * DPPP_(my_vnewSVpvf)(pTHX_ const char * pat, va_list * args); -#endif - -#ifdef vnewSVpvf -# undef vnewSVpvf -#endif -#define vnewSVpvf(a,b) DPPP_(my_vnewSVpvf)(aTHX_ a,b) -#define Perl_vnewSVpvf DPPP_(my_vnewSVpvf) - -#if defined(NEED_vnewSVpvf) || defined(NEED_vnewSVpvf_GLOBAL) - -SV * -DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args) -{ - register SV *sv = newSV(0); - sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); - return sv; -} - -#endif -#endif - -#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf) -# define sv_vcatpvf(sv, pat, args) sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)) -#endif - -#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf) -# define sv_vsetpvf(sv, pat, args) sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)) -#endif - -#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg) -#if defined(NEED_sv_catpvf_mg) -static void DPPP_(my_sv_catpvf_mg)(pTHX_ SV * sv, const char * pat, ...); -static -#else -extern void DPPP_(my_sv_catpvf_mg)(pTHX_ SV * sv, const char * pat, ...); -#endif - -#define Perl_sv_catpvf_mg DPPP_(my_sv_catpvf_mg) - -#if defined(NEED_sv_catpvf_mg) || defined(NEED_sv_catpvf_mg_GLOBAL) - -void -DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...) -{ - va_list args; - va_start(args, pat); - sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); - SvSETMAGIC(sv); - va_end(args); -} - -#endif -#endif - -#ifdef PERL_IMPLICIT_CONTEXT -#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg_nocontext) -#if defined(NEED_sv_catpvf_mg_nocontext) -static void DPPP_(my_sv_catpvf_mg_nocontext)(SV * sv, const char * pat, ...); -static -#else -extern void DPPP_(my_sv_catpvf_mg_nocontext)(SV * sv, const char * pat, ...); -#endif - -#define sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext) -#define Perl_sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext) - -#if defined(NEED_sv_catpvf_mg_nocontext) || defined(NEED_sv_catpvf_mg_nocontext_GLOBAL) - -void -DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...) -{ - dTHX; - va_list args; - va_start(args, pat); - sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); - SvSETMAGIC(sv); - va_end(args); -} - -#endif -#endif -#endif - -/* sv_catpvf_mg depends on sv_catpvf_mg_nocontext */ -#ifndef sv_catpvf_mg -# ifdef PERL_IMPLICIT_CONTEXT -# define sv_catpvf_mg Perl_sv_catpvf_mg_nocontext -# else -# define sv_catpvf_mg Perl_sv_catpvf_mg -# endif -#endif - -#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf_mg) -# define sv_vcatpvf_mg(sv, pat, args) \ - STMT_START { \ - sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \ - SvSETMAGIC(sv); \ - } STMT_END -#endif - -#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg) -#if defined(NEED_sv_setpvf_mg) -static void DPPP_(my_sv_setpvf_mg)(pTHX_ SV * sv, const char * pat, ...); -static -#else -extern void DPPP_(my_sv_setpvf_mg)(pTHX_ SV * sv, const char * pat, ...); -#endif - -#define Perl_sv_setpvf_mg DPPP_(my_sv_setpvf_mg) - -#if defined(NEED_sv_setpvf_mg) || defined(NEED_sv_setpvf_mg_GLOBAL) - -void -DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...) -{ - va_list args; - va_start(args, pat); - sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); - SvSETMAGIC(sv); - va_end(args); -} - -#endif -#endif - -#ifdef PERL_IMPLICIT_CONTEXT -#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg_nocontext) -#if defined(NEED_sv_setpvf_mg_nocontext) -static void DPPP_(my_sv_setpvf_mg_nocontext)(SV * sv, const char * pat, ...); -static -#else -extern void DPPP_(my_sv_setpvf_mg_nocontext)(SV * sv, const char * pat, ...); -#endif - -#define sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext) -#define Perl_sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext) - -#if defined(NEED_sv_setpvf_mg_nocontext) || defined(NEED_sv_setpvf_mg_nocontext_GLOBAL) - -void -DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...) -{ - dTHX; - va_list args; - va_start(args, pat); - sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); - SvSETMAGIC(sv); - va_end(args); -} - -#endif -#endif -#endif - -/* sv_setpvf_mg depends on sv_setpvf_mg_nocontext */ -#ifndef sv_setpvf_mg -# ifdef PERL_IMPLICIT_CONTEXT -# define sv_setpvf_mg Perl_sv_setpvf_mg_nocontext -# else -# define sv_setpvf_mg Perl_sv_setpvf_mg -# endif -#endif - -#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf_mg) -# define sv_vsetpvf_mg(sv, pat, args) \ - STMT_START { \ - sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \ - SvSETMAGIC(sv); \ - } STMT_END -#endif - -#ifndef newSVpvn_share - -#if defined(NEED_newSVpvn_share) -static SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash); -static -#else -extern SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash); -#endif - -#ifdef newSVpvn_share -# undef newSVpvn_share -#endif -#define newSVpvn_share(a,b,c) DPPP_(my_newSVpvn_share)(aTHX_ a,b,c) -#define Perl_newSVpvn_share DPPP_(my_newSVpvn_share) - -#if defined(NEED_newSVpvn_share) || defined(NEED_newSVpvn_share_GLOBAL) - -SV * -DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash) -{ - SV *sv; - if (len < 0) - len = -len; - if (!hash) - PERL_HASH(hash, (char*) src, len); - sv = newSVpvn((char *) src, len); - sv_upgrade(sv, SVt_PVIV); - SvIVX(sv) = hash; - SvREADONLY_on(sv); - SvPOK_on(sv); - return sv; -} - -#endif - -#endif -#ifndef SvSHARED_HASH -# define SvSHARED_HASH(sv) (0 + SvUVX(sv)) -#endif -#ifndef WARN_ALL -# define WARN_ALL 0 -#endif - -#ifndef WARN_CLOSURE -# define WARN_CLOSURE 1 -#endif - -#ifndef WARN_DEPRECATED -# define WARN_DEPRECATED 2 -#endif - -#ifndef WARN_EXITING -# define WARN_EXITING 3 -#endif - -#ifndef WARN_GLOB -# define WARN_GLOB 4 -#endif - -#ifndef WARN_IO -# define WARN_IO 5 -#endif - -#ifndef WARN_CLOSED -# define WARN_CLOSED 6 -#endif - -#ifndef WARN_EXEC -# define WARN_EXEC 7 -#endif - -#ifndef WARN_LAYER -# define WARN_LAYER 8 -#endif - -#ifndef WARN_NEWLINE -# define WARN_NEWLINE 9 -#endif - -#ifndef WARN_PIPE -# define WARN_PIPE 10 -#endif - -#ifndef WARN_UNOPENED -# define WARN_UNOPENED 11 -#endif - -#ifndef WARN_MISC -# define WARN_MISC 12 -#endif - -#ifndef WARN_NUMERIC -# define WARN_NUMERIC 13 -#endif - -#ifndef WARN_ONCE -# define WARN_ONCE 14 -#endif - -#ifndef WARN_OVERFLOW -# define WARN_OVERFLOW 15 -#endif - -#ifndef WARN_PACK -# define WARN_PACK 16 -#endif - -#ifndef WARN_PORTABLE -# define WARN_PORTABLE 17 -#endif - -#ifndef WARN_RECURSION -# define WARN_RECURSION 18 -#endif - -#ifndef WARN_REDEFINE -# define WARN_REDEFINE 19 -#endif - -#ifndef WARN_REGEXP -# define WARN_REGEXP 20 -#endif - -#ifndef WARN_SEVERE -# define WARN_SEVERE 21 -#endif - -#ifndef WARN_DEBUGGING -# define WARN_DEBUGGING 22 -#endif - -#ifndef WARN_INPLACE -# define WARN_INPLACE 23 -#endif - -#ifndef WARN_INTERNAL -# define WARN_INTERNAL 24 -#endif - -#ifndef WARN_MALLOC -# define WARN_MALLOC 25 -#endif - -#ifndef WARN_SIGNAL -# define WARN_SIGNAL 26 -#endif - -#ifndef WARN_SUBSTR -# define WARN_SUBSTR 27 -#endif - -#ifndef WARN_SYNTAX -# define WARN_SYNTAX 28 -#endif - -#ifndef WARN_AMBIGUOUS -# define WARN_AMBIGUOUS 29 -#endif - -#ifndef WARN_BAREWORD -# define WARN_BAREWORD 30 -#endif - -#ifndef WARN_DIGIT -# define WARN_DIGIT 31 -#endif - -#ifndef WARN_PARENTHESIS -# define WARN_PARENTHESIS 32 -#endif - -#ifndef WARN_PRECEDENCE -# define WARN_PRECEDENCE 33 -#endif - -#ifndef WARN_PRINTF -# define WARN_PRINTF 34 -#endif - -#ifndef WARN_PROTOTYPE -# define WARN_PROTOTYPE 35 -#endif - -#ifndef WARN_QW -# define WARN_QW 36 -#endif - -#ifndef WARN_RESERVED -# define WARN_RESERVED 37 -#endif - -#ifndef WARN_SEMICOLON -# define WARN_SEMICOLON 38 -#endif - -#ifndef WARN_TAINT -# define WARN_TAINT 39 -#endif - -#ifndef WARN_THREADS -# define WARN_THREADS 40 -#endif - -#ifndef WARN_UNINITIALIZED -# define WARN_UNINITIALIZED 41 -#endif - -#ifndef WARN_UNPACK -# define WARN_UNPACK 42 -#endif - -#ifndef WARN_UNTIE -# define WARN_UNTIE 43 -#endif - -#ifndef WARN_UTF8 -# define WARN_UTF8 44 -#endif - -#ifndef WARN_VOID -# define WARN_VOID 45 -#endif - -#ifndef WARN_ASSERTIONS -# define WARN_ASSERTIONS 46 -#endif -#ifndef packWARN -# define packWARN(a) (a) -#endif - -#ifndef ckWARN -# ifdef G_WARN_ON -# define ckWARN(a) (PL_dowarn & G_WARN_ON) -# else -# define ckWARN(a) PL_dowarn -# endif -#endif - -#if (PERL_BCDVERSION >= 0x5004000) && !defined(warner) -#if defined(NEED_warner) -static void DPPP_(my_warner)(U32 err, const char *pat, ...); -static -#else -extern void DPPP_(my_warner)(U32 err, const char *pat, ...); -#endif - -#define Perl_warner DPPP_(my_warner) - -#if defined(NEED_warner) || defined(NEED_warner_GLOBAL) - -void -DPPP_(my_warner)(U32 err, const char *pat, ...) -{ - SV *sv; - va_list args; - - PERL_UNUSED_ARG(err); - - va_start(args, pat); - sv = vnewSVpvf(pat, &args); - va_end(args); - sv_2mortal(sv); - warn("%s", SvPV_nolen(sv)); -} - -#define warner Perl_warner - -#define Perl_warner_nocontext Perl_warner - -#endif -#endif - -/* concatenating with "" ensures that only literal strings are accepted as argument - * note that STR_WITH_LEN() can't be used as argument to macros or functions that - * under some configurations might be macros - */ -#ifndef STR_WITH_LEN -# define STR_WITH_LEN(s) (s ""), (sizeof(s)-1) -#endif -#ifndef newSVpvs -# define newSVpvs(str) newSVpvn(str "", sizeof(str) - 1) -#endif - -#ifndef sv_catpvs -# define sv_catpvs(sv, str) sv_catpvn(sv, str "", sizeof(str) - 1) -#endif - -#ifndef sv_setpvs -# define sv_setpvs(sv, str) sv_setpvn(sv, str "", sizeof(str) - 1) -#endif - -#ifndef hv_fetchs -# define hv_fetchs(hv, key, lval) hv_fetch(hv, key "", sizeof(key) - 1, lval) -#endif - -#ifndef hv_stores -# define hv_stores(hv, key, val) hv_store(hv, key "", sizeof(key) - 1, val, 0) -#endif -#ifndef SvGETMAGIC -# define SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END -#endif -#ifndef PERL_MAGIC_sv -# define PERL_MAGIC_sv '\0' -#endif - -#ifndef PERL_MAGIC_overload -# define PERL_MAGIC_overload 'A' -#endif - -#ifndef PERL_MAGIC_overload_elem -# define PERL_MAGIC_overload_elem 'a' -#endif - -#ifndef PERL_MAGIC_overload_table -# define PERL_MAGIC_overload_table 'c' -#endif - -#ifndef PERL_MAGIC_bm -# define PERL_MAGIC_bm 'B' -#endif - -#ifndef PERL_MAGIC_regdata -# define PERL_MAGIC_regdata 'D' -#endif - -#ifndef PERL_MAGIC_regdatum -# define PERL_MAGIC_regdatum 'd' -#endif - -#ifndef PERL_MAGIC_env -# define PERL_MAGIC_env 'E' -#endif - -#ifndef PERL_MAGIC_envelem -# define PERL_MAGIC_envelem 'e' -#endif - -#ifndef PERL_MAGIC_fm -# define PERL_MAGIC_fm 'f' -#endif - -#ifndef PERL_MAGIC_regex_global -# define PERL_MAGIC_regex_global 'g' -#endif - -#ifndef PERL_MAGIC_isa -# define PERL_MAGIC_isa 'I' -#endif - -#ifndef PERL_MAGIC_isaelem -# define PERL_MAGIC_isaelem 'i' -#endif - -#ifndef PERL_MAGIC_nkeys -# define PERL_MAGIC_nkeys 'k' -#endif - -#ifndef PERL_MAGIC_dbfile -# define PERL_MAGIC_dbfile 'L' -#endif - -#ifndef PERL_MAGIC_dbline -# define PERL_MAGIC_dbline 'l' -#endif - -#ifndef PERL_MAGIC_mutex -# define PERL_MAGIC_mutex 'm' -#endif - -#ifndef PERL_MAGIC_shared -# define PERL_MAGIC_shared 'N' -#endif - -#ifndef PERL_MAGIC_shared_scalar -# define PERL_MAGIC_shared_scalar 'n' -#endif - -#ifndef PERL_MAGIC_collxfrm -# define PERL_MAGIC_collxfrm 'o' -#endif - -#ifndef PERL_MAGIC_tied -# define PERL_MAGIC_tied 'P' -#endif - -#ifndef PERL_MAGIC_tiedelem -# define PERL_MAGIC_tiedelem 'p' -#endif - -#ifndef PERL_MAGIC_tiedscalar -# define PERL_MAGIC_tiedscalar 'q' -#endif - -#ifndef PERL_MAGIC_qr -# define PERL_MAGIC_qr 'r' -#endif - -#ifndef PERL_MAGIC_sig -# define PERL_MAGIC_sig 'S' -#endif - -#ifndef PERL_MAGIC_sigelem -# define PERL_MAGIC_sigelem 's' -#endif - -#ifndef PERL_MAGIC_taint -# define PERL_MAGIC_taint 't' -#endif - -#ifndef PERL_MAGIC_uvar -# define PERL_MAGIC_uvar 'U' -#endif - -#ifndef PERL_MAGIC_uvar_elem -# define PERL_MAGIC_uvar_elem 'u' -#endif - -#ifndef PERL_MAGIC_vstring -# define PERL_MAGIC_vstring 'V' -#endif - -#ifndef PERL_MAGIC_vec -# define PERL_MAGIC_vec 'v' -#endif - -#ifndef PERL_MAGIC_utf8 -# define PERL_MAGIC_utf8 'w' -#endif - -#ifndef PERL_MAGIC_substr -# define PERL_MAGIC_substr 'x' -#endif - -#ifndef PERL_MAGIC_defelem -# define PERL_MAGIC_defelem 'y' -#endif - -#ifndef PERL_MAGIC_glob -# define PERL_MAGIC_glob '*' -#endif - -#ifndef PERL_MAGIC_arylen -# define PERL_MAGIC_arylen '#' -#endif - -#ifndef PERL_MAGIC_pos -# define PERL_MAGIC_pos '.' -#endif - -#ifndef PERL_MAGIC_backref -# define PERL_MAGIC_backref '<' -#endif - -#ifndef PERL_MAGIC_ext -# define PERL_MAGIC_ext '~' -#endif - -/* That's the best we can do... */ -#ifndef sv_catpvn_nomg -# define sv_catpvn_nomg sv_catpvn -#endif - -#ifndef sv_catsv_nomg -# define sv_catsv_nomg sv_catsv -#endif - -#ifndef sv_setsv_nomg -# define sv_setsv_nomg sv_setsv -#endif - -#ifndef sv_pvn_nomg -# define sv_pvn_nomg sv_pvn -#endif - -#ifndef SvIV_nomg -# define SvIV_nomg SvIV -#endif - -#ifndef SvUV_nomg -# define SvUV_nomg SvUV -#endif - -#ifndef sv_catpv_mg -# define sv_catpv_mg(sv, ptr) \ - STMT_START { \ - SV *TeMpSv = sv; \ - sv_catpv(TeMpSv,ptr); \ - SvSETMAGIC(TeMpSv); \ - } STMT_END -#endif - -#ifndef sv_catpvn_mg -# define sv_catpvn_mg(sv, ptr, len) \ - STMT_START { \ - SV *TeMpSv = sv; \ - sv_catpvn(TeMpSv,ptr,len); \ - SvSETMAGIC(TeMpSv); \ - } STMT_END -#endif - -#ifndef sv_catsv_mg -# define sv_catsv_mg(dsv, ssv) \ - STMT_START { \ - SV *TeMpSv = dsv; \ - sv_catsv(TeMpSv,ssv); \ - SvSETMAGIC(TeMpSv); \ - } STMT_END -#endif - -#ifndef sv_setiv_mg -# define sv_setiv_mg(sv, i) \ - STMT_START { \ - SV *TeMpSv = sv; \ - sv_setiv(TeMpSv,i); \ - SvSETMAGIC(TeMpSv); \ - } STMT_END -#endif - -#ifndef sv_setnv_mg -# define sv_setnv_mg(sv, num) \ - STMT_START { \ - SV *TeMpSv = sv; \ - sv_setnv(TeMpSv,num); \ - SvSETMAGIC(TeMpSv); \ - } STMT_END -#endif - -#ifndef sv_setpv_mg -# define sv_setpv_mg(sv, ptr) \ - STMT_START { \ - SV *TeMpSv = sv; \ - sv_setpv(TeMpSv,ptr); \ - SvSETMAGIC(TeMpSv); \ - } STMT_END -#endif - -#ifndef sv_setpvn_mg -# define sv_setpvn_mg(sv, ptr, len) \ - STMT_START { \ - SV *TeMpSv = sv; \ - sv_setpvn(TeMpSv,ptr,len); \ - SvSETMAGIC(TeMpSv); \ - } STMT_END -#endif - -#ifndef sv_setsv_mg -# define sv_setsv_mg(dsv, ssv) \ - STMT_START { \ - SV *TeMpSv = dsv; \ - sv_setsv(TeMpSv,ssv); \ - SvSETMAGIC(TeMpSv); \ - } STMT_END -#endif - -#ifndef sv_setuv_mg -# define sv_setuv_mg(sv, i) \ - STMT_START { \ - SV *TeMpSv = sv; \ - sv_setuv(TeMpSv,i); \ - SvSETMAGIC(TeMpSv); \ - } STMT_END -#endif - -#ifndef sv_usepvn_mg -# define sv_usepvn_mg(sv, ptr, len) \ - STMT_START { \ - SV *TeMpSv = sv; \ - sv_usepvn(TeMpSv,ptr,len); \ - SvSETMAGIC(TeMpSv); \ - } STMT_END -#endif -#ifndef SvVSTRING_mg -# define SvVSTRING_mg(sv) (SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_vstring) : NULL) -#endif - -/* Hint: sv_magic_portable - * This is a compatibility function that is only available with - * Devel::PPPort. It is NOT in the perl core. - * Its purpose is to mimic the 5.8.0 behaviour of sv_magic() when - * it is being passed a name pointer with namlen == 0. In that - * case, perl 5.8.0 and later store the pointer, not a copy of it. - * The compatibility can be provided back to perl 5.004. With - * earlier versions, the code will not compile. - */ - -#if (PERL_BCDVERSION < 0x5004000) - - /* code that uses sv_magic_portable will not compile */ - -#elif (PERL_BCDVERSION < 0x5008000) - -# define sv_magic_portable(sv, obj, how, name, namlen) \ - STMT_START { \ - SV *SvMp_sv = (sv); \ - char *SvMp_name = (char *) (name); \ - I32 SvMp_namlen = (namlen); \ - if (SvMp_name && SvMp_namlen == 0) \ - { \ - MAGIC *mg; \ - sv_magic(SvMp_sv, obj, how, 0, 0); \ - mg = SvMAGIC(SvMp_sv); \ - mg->mg_len = -42; /* XXX: this is the tricky part */ \ - mg->mg_ptr = SvMp_name; \ - } \ - else \ - { \ - sv_magic(SvMp_sv, obj, how, SvMp_name, SvMp_namlen); \ - } \ - } STMT_END - -#else - -# define sv_magic_portable(a, b, c, d, e) sv_magic(a, b, c, d, e) - -#endif - -#ifdef USE_ITHREADS -#ifndef CopFILE -# define CopFILE(c) ((c)->cop_file) -#endif - -#ifndef CopFILEGV -# define CopFILEGV(c) (CopFILE(c) ? gv_fetchfile(CopFILE(c)) : Nullgv) -#endif - -#ifndef CopFILE_set -# define CopFILE_set(c,pv) ((c)->cop_file = savepv(pv)) -#endif - -#ifndef CopFILESV -# define CopFILESV(c) (CopFILE(c) ? GvSV(gv_fetchfile(CopFILE(c))) : Nullsv) -#endif - -#ifndef CopFILEAV -# define CopFILEAV(c) (CopFILE(c) ? GvAV(gv_fetchfile(CopFILE(c))) : Nullav) -#endif - -#ifndef CopSTASHPV -# define CopSTASHPV(c) ((c)->cop_stashpv) -#endif - -#ifndef CopSTASHPV_set -# define CopSTASHPV_set(c,pv) ((c)->cop_stashpv = ((pv) ? savepv(pv) : Nullch)) -#endif - -#ifndef CopSTASH -# define CopSTASH(c) (CopSTASHPV(c) ? gv_stashpv(CopSTASHPV(c),GV_ADD) : Nullhv) -#endif - -#ifndef CopSTASH_set -# define CopSTASH_set(c,hv) CopSTASHPV_set(c, (hv) ? HvNAME(hv) : Nullch) -#endif - -#ifndef CopSTASH_eq -# define CopSTASH_eq(c,hv) ((hv) && (CopSTASHPV(c) == HvNAME(hv) \ - || (CopSTASHPV(c) && HvNAME(hv) \ - && strEQ(CopSTASHPV(c), HvNAME(hv))))) -#endif - -#else -#ifndef CopFILEGV -# define CopFILEGV(c) ((c)->cop_filegv) -#endif - -#ifndef CopFILEGV_set -# define CopFILEGV_set(c,gv) ((c)->cop_filegv = (GV*)SvREFCNT_inc(gv)) -#endif - -#ifndef CopFILE_set -# define CopFILE_set(c,pv) CopFILEGV_set((c), gv_fetchfile(pv)) -#endif - -#ifndef CopFILESV -# define CopFILESV(c) (CopFILEGV(c) ? GvSV(CopFILEGV(c)) : Nullsv) -#endif - -#ifndef CopFILEAV -# define CopFILEAV(c) (CopFILEGV(c) ? GvAV(CopFILEGV(c)) : Nullav) -#endif - -#ifndef CopFILE -# define CopFILE(c) (CopFILESV(c) ? SvPVX(CopFILESV(c)) : Nullch) -#endif - -#ifndef CopSTASH -# define CopSTASH(c) ((c)->cop_stash) -#endif - -#ifndef CopSTASH_set -# define CopSTASH_set(c,hv) ((c)->cop_stash = (hv)) -#endif - -#ifndef CopSTASHPV -# define CopSTASHPV(c) (CopSTASH(c) ? HvNAME(CopSTASH(c)) : Nullch) -#endif - -#ifndef CopSTASHPV_set -# define CopSTASHPV_set(c,pv) CopSTASH_set((c), gv_stashpv(pv,GV_ADD)) -#endif - -#ifndef CopSTASH_eq -# define CopSTASH_eq(c,hv) (CopSTASH(c) == (hv)) -#endif - -#endif /* USE_ITHREADS */ -#ifndef IN_PERL_COMPILETIME -# define IN_PERL_COMPILETIME (PL_curcop == &PL_compiling) -#endif - -#ifndef IN_LOCALE_RUNTIME -# define IN_LOCALE_RUNTIME (PL_curcop->op_private & HINT_LOCALE) -#endif - -#ifndef IN_LOCALE_COMPILETIME -# define IN_LOCALE_COMPILETIME (PL_hints & HINT_LOCALE) -#endif - -#ifndef IN_LOCALE -# define IN_LOCALE (IN_PERL_COMPILETIME ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME) -#endif -#ifndef IS_NUMBER_IN_UV -# define IS_NUMBER_IN_UV 0x01 -#endif - -#ifndef IS_NUMBER_GREATER_THAN_UV_MAX -# define IS_NUMBER_GREATER_THAN_UV_MAX 0x02 -#endif - -#ifndef IS_NUMBER_NOT_INT -# define IS_NUMBER_NOT_INT 0x04 -#endif - -#ifndef IS_NUMBER_NEG -# define IS_NUMBER_NEG 0x08 -#endif - -#ifndef IS_NUMBER_INFINITY -# define IS_NUMBER_INFINITY 0x10 -#endif - -#ifndef IS_NUMBER_NAN -# define IS_NUMBER_NAN 0x20 -#endif -#ifndef GROK_NUMERIC_RADIX -# define GROK_NUMERIC_RADIX(sp, send) grok_numeric_radix(sp, send) -#endif -#ifndef PERL_SCAN_GREATER_THAN_UV_MAX -# define PERL_SCAN_GREATER_THAN_UV_MAX 0x02 -#endif - -#ifndef PERL_SCAN_SILENT_ILLDIGIT -# define PERL_SCAN_SILENT_ILLDIGIT 0x04 -#endif - -#ifndef PERL_SCAN_ALLOW_UNDERSCORES -# define PERL_SCAN_ALLOW_UNDERSCORES 0x01 -#endif - -#ifndef PERL_SCAN_DISALLOW_PREFIX -# define PERL_SCAN_DISALLOW_PREFIX 0x02 -#endif - -#ifndef grok_numeric_radix -#if defined(NEED_grok_numeric_radix) -static bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send); -static -#else -extern bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send); -#endif - -#ifdef grok_numeric_radix -# undef grok_numeric_radix -#endif -#define grok_numeric_radix(a,b) DPPP_(my_grok_numeric_radix)(aTHX_ a,b) -#define Perl_grok_numeric_radix DPPP_(my_grok_numeric_radix) - -#if defined(NEED_grok_numeric_radix) || defined(NEED_grok_numeric_radix_GLOBAL) -bool -DPPP_(my_grok_numeric_radix)(pTHX_ const char **sp, const char *send) -{ -#ifdef USE_LOCALE_NUMERIC -#ifdef PL_numeric_radix_sv - if (PL_numeric_radix_sv && IN_LOCALE) { - STRLEN len; - char* radix = SvPV(PL_numeric_radix_sv, len); - if (*sp + len <= send && memEQ(*sp, radix, len)) { - *sp += len; - return TRUE; - } - } -#else - /* older perls don't have PL_numeric_radix_sv so the radix - * must manually be requested from locale.h - */ -#include - dTHR; /* needed for older threaded perls */ - struct lconv *lc = localeconv(); - char *radix = lc->decimal_point; - if (radix && IN_LOCALE) { - STRLEN len = strlen(radix); - if (*sp + len <= send && memEQ(*sp, radix, len)) { - *sp += len; - return TRUE; - } - } -#endif -#endif /* USE_LOCALE_NUMERIC */ - /* always try "." if numeric radix didn't match because - * we may have data from different locales mixed */ - if (*sp < send && **sp == '.') { - ++*sp; - return TRUE; - } - return FALSE; -} -#endif -#endif - -#ifndef grok_number -#if defined(NEED_grok_number) -static int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep); -static -#else -extern int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep); -#endif - -#ifdef grok_number -# undef grok_number -#endif -#define grok_number(a,b,c) DPPP_(my_grok_number)(aTHX_ a,b,c) -#define Perl_grok_number DPPP_(my_grok_number) - -#if defined(NEED_grok_number) || defined(NEED_grok_number_GLOBAL) -int -DPPP_(my_grok_number)(pTHX_ const char *pv, STRLEN len, UV *valuep) -{ - const char *s = pv; - const char *send = pv + len; - const UV max_div_10 = UV_MAX / 10; - const char max_mod_10 = UV_MAX % 10; - int numtype = 0; - int sawinf = 0; - int sawnan = 0; - - while (s < send && isSPACE(*s)) - s++; - if (s == send) { - return 0; - } else if (*s == '-') { - s++; - numtype = IS_NUMBER_NEG; - } - else if (*s == '+') - s++; - - if (s == send) - return 0; - - /* next must be digit or the radix separator or beginning of infinity */ - if (isDIGIT(*s)) { - /* UVs are at least 32 bits, so the first 9 decimal digits cannot - overflow. */ - UV value = *s - '0'; - /* This construction seems to be more optimiser friendly. - (without it gcc does the isDIGIT test and the *s - '0' separately) - With it gcc on arm is managing 6 instructions (6 cycles) per digit. - In theory the optimiser could deduce how far to unroll the loop - before checking for overflow. */ - if (++s < send) { - int digit = *s - '0'; - if (digit >= 0 && digit <= 9) { - value = value * 10 + digit; - if (++s < send) { - digit = *s - '0'; - if (digit >= 0 && digit <= 9) { - value = value * 10 + digit; - if (++s < send) { - digit = *s - '0'; - if (digit >= 0 && digit <= 9) { - value = value * 10 + digit; - if (++s < send) { - digit = *s - '0'; - if (digit >= 0 && digit <= 9) { - value = value * 10 + digit; - if (++s < send) { - digit = *s - '0'; - if (digit >= 0 && digit <= 9) { - value = value * 10 + digit; - if (++s < send) { - digit = *s - '0'; - if (digit >= 0 && digit <= 9) { - value = value * 10 + digit; - if (++s < send) { - digit = *s - '0'; - if (digit >= 0 && digit <= 9) { - value = value * 10 + digit; - if (++s < send) { - digit = *s - '0'; - if (digit >= 0 && digit <= 9) { - value = value * 10 + digit; - if (++s < send) { - /* Now got 9 digits, so need to check - each time for overflow. */ - digit = *s - '0'; - while (digit >= 0 && digit <= 9 - && (value < max_div_10 - || (value == max_div_10 - && digit <= max_mod_10))) { - value = value * 10 + digit; - if (++s < send) - digit = *s - '0'; - else - break; - } - if (digit >= 0 && digit <= 9 - && (s < send)) { - /* value overflowed. - skip the remaining digits, don't - worry about setting *valuep. */ - do { - s++; - } while (s < send && isDIGIT(*s)); - numtype |= - IS_NUMBER_GREATER_THAN_UV_MAX; - goto skip_value; - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - numtype |= IS_NUMBER_IN_UV; - if (valuep) - *valuep = value; - - skip_value: - if (GROK_NUMERIC_RADIX(&s, send)) { - numtype |= IS_NUMBER_NOT_INT; - while (s < send && isDIGIT(*s)) /* optional digits after the radix */ - s++; - } - } - else if (GROK_NUMERIC_RADIX(&s, send)) { - numtype |= IS_NUMBER_NOT_INT | IS_NUMBER_IN_UV; /* valuep assigned below */ - /* no digits before the radix means we need digits after it */ - if (s < send && isDIGIT(*s)) { - do { - s++; - } while (s < send && isDIGIT(*s)); - if (valuep) { - /* integer approximation is valid - it's 0. */ - *valuep = 0; - } - } - else - return 0; - } else if (*s == 'I' || *s == 'i') { - s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; - s++; if (s == send || (*s != 'F' && *s != 'f')) return 0; - s++; if (s < send && (*s == 'I' || *s == 'i')) { - s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; - s++; if (s == send || (*s != 'I' && *s != 'i')) return 0; - s++; if (s == send || (*s != 'T' && *s != 't')) return 0; - s++; if (s == send || (*s != 'Y' && *s != 'y')) return 0; - s++; - } - sawinf = 1; - } else if (*s == 'N' || *s == 'n') { - /* XXX TODO: There are signaling NaNs and quiet NaNs. */ - s++; if (s == send || (*s != 'A' && *s != 'a')) return 0; - s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; - s++; - sawnan = 1; - } else - return 0; - - if (sawinf) { - numtype &= IS_NUMBER_NEG; /* Keep track of sign */ - numtype |= IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT; - } else if (sawnan) { - numtype &= IS_NUMBER_NEG; /* Keep track of sign */ - numtype |= IS_NUMBER_NAN | IS_NUMBER_NOT_INT; - } else if (s < send) { - /* we can have an optional exponent part */ - if (*s == 'e' || *s == 'E') { - /* The only flag we keep is sign. Blow away any "it's UV" */ - numtype &= IS_NUMBER_NEG; - numtype |= IS_NUMBER_NOT_INT; - s++; - if (s < send && (*s == '-' || *s == '+')) - s++; - if (s < send && isDIGIT(*s)) { - do { - s++; - } while (s < send && isDIGIT(*s)); - } - else - return 0; - } - } - while (s < send && isSPACE(*s)) - s++; - if (s >= send) - return numtype; - if (len == 10 && memEQ(pv, "0 but true", 10)) { - if (valuep) - *valuep = 0; - return IS_NUMBER_IN_UV; - } - return 0; -} -#endif -#endif - -/* - * The grok_* routines have been modified to use warn() instead of - * Perl_warner(). Also, 'hexdigit' was the former name of PL_hexdigit, - * which is why the stack variable has been renamed to 'xdigit'. - */ - -#ifndef grok_bin -#if defined(NEED_grok_bin) -static UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); -static -#else -extern UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); -#endif - -#ifdef grok_bin -# undef grok_bin -#endif -#define grok_bin(a,b,c,d) DPPP_(my_grok_bin)(aTHX_ a,b,c,d) -#define Perl_grok_bin DPPP_(my_grok_bin) - -#if defined(NEED_grok_bin) || defined(NEED_grok_bin_GLOBAL) -UV -DPPP_(my_grok_bin)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result) -{ - const char *s = start; - STRLEN len = *len_p; - UV value = 0; - NV value_nv = 0; - - const UV max_div_2 = UV_MAX / 2; - bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; - bool overflowed = FALSE; - - if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) { - /* strip off leading b or 0b. - for compatibility silently suffer "b" and "0b" as valid binary - numbers. */ - if (len >= 1) { - if (s[0] == 'b') { - s++; - len--; - } - else if (len >= 2 && s[0] == '0' && s[1] == 'b') { - s+=2; - len-=2; - } - } - } - - for (; len-- && *s; s++) { - char bit = *s; - if (bit == '0' || bit == '1') { - /* Write it in this wonky order with a goto to attempt to get the - compiler to make the common case integer-only loop pretty tight. - With gcc seems to be much straighter code than old scan_bin. */ - redo: - if (!overflowed) { - if (value <= max_div_2) { - value = (value << 1) | (bit - '0'); - continue; - } - /* Bah. We're just overflowed. */ - warn("Integer overflow in binary number"); - overflowed = TRUE; - value_nv = (NV) value; - } - value_nv *= 2.0; - /* If an NV has not enough bits in its mantissa to - * represent a UV this summing of small low-order numbers - * is a waste of time (because the NV cannot preserve - * the low-order bits anyway): we could just remember when - * did we overflow and in the end just multiply value_nv by the - * right amount. */ - value_nv += (NV)(bit - '0'); - continue; - } - if (bit == '_' && len && allow_underscores && (bit = s[1]) - && (bit == '0' || bit == '1')) - { - --len; - ++s; - goto redo; - } - if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) - warn("Illegal binary digit '%c' ignored", *s); - break; - } - - if ( ( overflowed && value_nv > 4294967295.0) -#if UVSIZE > 4 - || (!overflowed && value > 0xffffffff ) -#endif - ) { - warn("Binary number > 0b11111111111111111111111111111111 non-portable"); - } - *len_p = s - start; - if (!overflowed) { - *flags = 0; - return value; - } - *flags = PERL_SCAN_GREATER_THAN_UV_MAX; - if (result) - *result = value_nv; - return UV_MAX; -} -#endif -#endif - -#ifndef grok_hex -#if defined(NEED_grok_hex) -static UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); -static -#else -extern UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); -#endif - -#ifdef grok_hex -# undef grok_hex -#endif -#define grok_hex(a,b,c,d) DPPP_(my_grok_hex)(aTHX_ a,b,c,d) -#define Perl_grok_hex DPPP_(my_grok_hex) - -#if defined(NEED_grok_hex) || defined(NEED_grok_hex_GLOBAL) -UV -DPPP_(my_grok_hex)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result) -{ - const char *s = start; - STRLEN len = *len_p; - UV value = 0; - NV value_nv = 0; - - const UV max_div_16 = UV_MAX / 16; - bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; - bool overflowed = FALSE; - const char *xdigit; - - if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) { - /* strip off leading x or 0x. - for compatibility silently suffer "x" and "0x" as valid hex numbers. - */ - if (len >= 1) { - if (s[0] == 'x') { - s++; - len--; - } - else if (len >= 2 && s[0] == '0' && s[1] == 'x') { - s+=2; - len-=2; - } - } - } - - for (; len-- && *s; s++) { - xdigit = strchr((char *) PL_hexdigit, *s); - if (xdigit) { - /* Write it in this wonky order with a goto to attempt to get the - compiler to make the common case integer-only loop pretty tight. - With gcc seems to be much straighter code than old scan_hex. */ - redo: - if (!overflowed) { - if (value <= max_div_16) { - value = (value << 4) | ((xdigit - PL_hexdigit) & 15); - continue; - } - warn("Integer overflow in hexadecimal number"); - overflowed = TRUE; - value_nv = (NV) value; - } - value_nv *= 16.0; - /* If an NV has not enough bits in its mantissa to - * represent a UV this summing of small low-order numbers - * is a waste of time (because the NV cannot preserve - * the low-order bits anyway): we could just remember when - * did we overflow and in the end just multiply value_nv by the - * right amount of 16-tuples. */ - value_nv += (NV)((xdigit - PL_hexdigit) & 15); - continue; - } - if (*s == '_' && len && allow_underscores && s[1] - && (xdigit = strchr((char *) PL_hexdigit, s[1]))) - { - --len; - ++s; - goto redo; - } - if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) - warn("Illegal hexadecimal digit '%c' ignored", *s); - break; - } - - if ( ( overflowed && value_nv > 4294967295.0) -#if UVSIZE > 4 - || (!overflowed && value > 0xffffffff ) -#endif - ) { - warn("Hexadecimal number > 0xffffffff non-portable"); - } - *len_p = s - start; - if (!overflowed) { - *flags = 0; - return value; - } - *flags = PERL_SCAN_GREATER_THAN_UV_MAX; - if (result) - *result = value_nv; - return UV_MAX; -} -#endif -#endif - -#ifndef grok_oct -#if defined(NEED_grok_oct) -static UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); -static -#else -extern UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); -#endif - -#ifdef grok_oct -# undef grok_oct -#endif -#define grok_oct(a,b,c,d) DPPP_(my_grok_oct)(aTHX_ a,b,c,d) -#define Perl_grok_oct DPPP_(my_grok_oct) - -#if defined(NEED_grok_oct) || defined(NEED_grok_oct_GLOBAL) -UV -DPPP_(my_grok_oct)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result) -{ - const char *s = start; - STRLEN len = *len_p; - UV value = 0; - NV value_nv = 0; - - const UV max_div_8 = UV_MAX / 8; - bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; - bool overflowed = FALSE; - - for (; len-- && *s; s++) { - /* gcc 2.95 optimiser not smart enough to figure that this subtraction - out front allows slicker code. */ - int digit = *s - '0'; - if (digit >= 0 && digit <= 7) { - /* Write it in this wonky order with a goto to attempt to get the - compiler to make the common case integer-only loop pretty tight. - */ - redo: - if (!overflowed) { - if (value <= max_div_8) { - value = (value << 3) | digit; - continue; - } - /* Bah. We're just overflowed. */ - warn("Integer overflow in octal number"); - overflowed = TRUE; - value_nv = (NV) value; - } - value_nv *= 8.0; - /* If an NV has not enough bits in its mantissa to - * represent a UV this summing of small low-order numbers - * is a waste of time (because the NV cannot preserve - * the low-order bits anyway): we could just remember when - * did we overflow and in the end just multiply value_nv by the - * right amount of 8-tuples. */ - value_nv += (NV)digit; - continue; - } - if (digit == ('_' - '0') && len && allow_underscores - && (digit = s[1] - '0') && (digit >= 0 && digit <= 7)) - { - --len; - ++s; - goto redo; - } - /* Allow \octal to work the DWIM way (that is, stop scanning - * as soon as non-octal characters are seen, complain only iff - * someone seems to want to use the digits eight and nine). */ - if (digit == 8 || digit == 9) { - if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) - warn("Illegal octal digit '%c' ignored", *s); - } - break; - } - - if ( ( overflowed && value_nv > 4294967295.0) -#if UVSIZE > 4 - || (!overflowed && value > 0xffffffff ) -#endif - ) { - warn("Octal number > 037777777777 non-portable"); - } - *len_p = s - start; - if (!overflowed) { - *flags = 0; - return value; - } - *flags = PERL_SCAN_GREATER_THAN_UV_MAX; - if (result) - *result = value_nv; - return UV_MAX; -} -#endif -#endif - -#if !defined(my_snprintf) -#if defined(NEED_my_snprintf) -static int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...); -static -#else -extern int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...); -#endif - -#define my_snprintf DPPP_(my_my_snprintf) -#define Perl_my_snprintf DPPP_(my_my_snprintf) - -#if defined(NEED_my_snprintf) || defined(NEED_my_snprintf_GLOBAL) - -int -DPPP_(my_my_snprintf)(char *buffer, const Size_t len, const char *format, ...) -{ - dTHX; - int retval; - va_list ap; - va_start(ap, format); -#ifdef HAS_VSNPRINTF - retval = vsnprintf(buffer, len, format, ap); -#else - retval = vsprintf(buffer, format, ap); -#endif - va_end(ap); - if (retval >= (int)len) - Perl_croak(aTHX_ "panic: my_snprintf buffer overflow"); - return retval; -} - -#endif -#endif - -#ifdef NO_XSLOCKS -# ifdef dJMPENV -# define dXCPT dJMPENV; int rEtV = 0 -# define XCPT_TRY_START JMPENV_PUSH(rEtV); if (rEtV == 0) -# define XCPT_TRY_END JMPENV_POP; -# define XCPT_CATCH if (rEtV != 0) -# define XCPT_RETHROW JMPENV_JUMP(rEtV) -# else -# define dXCPT Sigjmp_buf oldTOP; int rEtV = 0 -# define XCPT_TRY_START Copy(top_env, oldTOP, 1, Sigjmp_buf); rEtV = Sigsetjmp(top_env, 1); if (rEtV == 0) -# define XCPT_TRY_END Copy(oldTOP, top_env, 1, Sigjmp_buf); -# define XCPT_CATCH if (rEtV != 0) -# define XCPT_RETHROW Siglongjmp(top_env, rEtV) -# endif -#endif - -#if !defined(my_strlcat) -#if defined(NEED_my_strlcat) -static Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size); -static -#else -extern Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size); -#endif - -#define my_strlcat DPPP_(my_my_strlcat) -#define Perl_my_strlcat DPPP_(my_my_strlcat) - -#if defined(NEED_my_strlcat) || defined(NEED_my_strlcat_GLOBAL) - -Size_t -DPPP_(my_my_strlcat)(char *dst, const char *src, Size_t size) -{ - Size_t used, length, copy; - - used = strlen(dst); - length = strlen(src); - if (size > 0 && used < size - 1) { - copy = (length >= size - used) ? size - used - 1 : length; - memcpy(dst + used, src, copy); - dst[used + copy] = '\0'; - } - return used + length; -} -#endif -#endif - -#if !defined(my_strlcpy) -#if defined(NEED_my_strlcpy) -static Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size); -static -#else -extern Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size); -#endif - -#define my_strlcpy DPPP_(my_my_strlcpy) -#define Perl_my_strlcpy DPPP_(my_my_strlcpy) - -#if defined(NEED_my_strlcpy) || defined(NEED_my_strlcpy_GLOBAL) - -Size_t -DPPP_(my_my_strlcpy)(char *dst, const char *src, Size_t size) -{ - Size_t length, copy; - - length = strlen(src); - if (size > 0) { - copy = (length >= size) ? size - 1 : length; - memcpy(dst, src, copy); - dst[copy] = '\0'; - } - return length; -} - -#endif -#endif - -#endif /* _P_P_PORTABILITY_H_ */ - -/* End of File ppport.h */ - diff --git a/Curses-1.23/t/00-load.t b/Curses-1.23/t/00-load.t deleted file mode 100644 index 405f7ab..0000000 --- a/Curses-1.23/t/00-load.t +++ /dev/null @@ -1,9 +0,0 @@ -#!perl - -use Test::More tests => 1; - -BEGIN { - use_ok( 'Curses' ); -} - -diag( "Testing Curses $Curses::VERSION, Perl $]" ); diff --git a/Curses-1.23/test.syms b/Curses-1.23/test.syms deleted file mode 100755 index 227c309..0000000 --- a/Curses-1.23/test.syms +++ /dev/null @@ -1,310 +0,0 @@ -#!../../perl -## -## test.syms -- test for function/variable symbols -## -## Set the environment variable CURSES_VERBOSE to see the details of the -## testing. - -## Copyright (c) 1994-2000 William Setzer -## -## You may distribute under the terms of either the Artistic License -## or the GNU General Public License, as specified in the README file. -## -## This program is modelled after parts of the dist-3.0 distribution. -## In many cases I just hand-converted the sh script to perl, so this -## program probably falls under the Artistic license. At the very least, -## it has the "look and feel". Will I be sued? :-) -## -## Thanks to Raphael Manfredi and the other contributors of dist-3.0. -## -## VMS patches thanks to Peter Prymmer - -use strict; -use warnings; -use English; - -my $verbose; - -sub makeCompileCommand($) { - my ($compileR) = @_; - - # Get a compile command so we can test for curses symbols. - # (There has got to be an easier way. Blech.) - # - - my $compile = '#CC# #DEFS# #INCS# #CFLAGS# #FILE# #LFLAGS# #LIBS#' . - ($verbose ? '' : '#NULL#'); - my $makefile = ($OSNAME =~ /VMS/) ? "Descrip.MMS" : "Makefile"; - - my ($cc, $inc, $ccflags, $ldloadlibs, $lddlflags); - - open MAKEFILE, "< $makefile" or - die "Can't open make file '$makefile' errno=$ERRNO"; - while () { - - if (/^CC\s*=\s*(.*)/) { - $cc = $1; - } elsif (/^INC\s*=\s*(.*)/) { - $inc = $1; - } elsif (/^CCFLAGS\s*=\s*(.*)/) { - $ccflags = $1; - } elsif (/^LDLOADLIBS\s*=\s*(.*)/) { - $ldloadlibs = $1; - } elsif (/^LDDLFLAGS\s*=\s*(.*)/) { - $lddlflags = $1; - } - } - - if (defined($cc)) { - $compile =~ s{#CC#}{$cc}; - } - if (defined($inc)) { - $compile =~ s{#INCS#}{$inc}; - } - if (defined($ccflags)) { - $compile =~ s{#CFLAGS#}{$ccflags}; - } - if (defined($ldloadlibs)) { - $compile =~ s{#LIBS#}{$ldloadlibs}; - } else { - $compile =~ s{#LIBS#}{}; - } - if (defined($lddlflags)) { - ## Only get -L's. Other options can cause strange link behavior. - ## (I shoulda stayed in bed.) - # - my $lflags; - $lflags = ''; # initial value - while ($lddlflags =~ m{(-L\S+)}g) { - $lflags .= " $1"; - } - $compile =~ s{#LFLAGS#}{$lflags}; - } - close MAKEFILE; - - # Left to handle: DEFS/FILE/NULL - # DEFS => "cc" define of "SYM" to "_C_SYM_" - # FILE => "cc" compile of file _C_FILE_.c into executable _C_FILE_ - # NULL => output of system call to dev null - # - # _C_SYM_ and _C_FILE_ will be filled in later - - if ($OSNAME =~ m{VMS}i) { - $compile =~ s{#DEFS#}{DEFINE=SYM="_C_SYM_"}; - $compile =~ s{#FILE#}{_C_FILE_.c}; - $compile =~ s{#NULL#}{}; # no non-verbose way - } - elsif ($OSNAME eq 'MSWin32') { - $compile =~ s{#DEFS#}{-DSYM="_C_SYM_"}; - $compile =~ s{#FILE#}{_C_FILE_.c}; - $compile =~ s{#NULL#}{>nul 2>&1}; - } - else { - $compile =~ s{#DEFS#}{-DSYM="_C_SYM_"}; - $compile =~ s{#FILE#}{-o _C_FILE_ _C_FILE_.c}; - $compile =~ s{#NULL#}{>/dev/null 2>&1}; - } - - if ($compile =~ m{#.+#}) { - die "OOPS: internal error constructing a compile command. " . - "We failed to substitute for a #xxx# substitution variable " . - "and thus ended up with this: '$compile'\n"; - } - $$compileR = $compile; -} - - - -############################################################################### -# MAINLINE # -############################################################################### - -print("Checking capabilities of the Ncurses libraries.\n"); -print("Set CURSES_VERBOSE environment variable to see the details of the " . - "tests.\n"); -print("\n"); - -my $panels; -my $menus; -my $forms; - -if ($ENV{CURSES_VERBOSE}) { - $verbose = 1; -} else { - $verbose = 0; -} - -open IN, "list.syms" or die "Can't open list.syms: $!\n"; -open(OUTH, ">CursesDef.h") or die "Can't open CursesDef.h: $!\n"; -open LOG, ">&STDERR" or die "Can't redirect to STDERR: $!\n"; - -while (@ARGV) { - my $arg = shift; - - $arg eq 'PANELS' and ++$panels and next; - $arg eq 'MENUS' and ++$menus and next; - $arg eq 'FORMS' and ++$forms and next; - $arg =~ /^-h/ and Usage(); - $arg =~ /^-v/ and ++$verbose and next; - $arg =~ /^-l/ and do { - my $logfile = shift or Usage("<-l> needs a filename"); - open LOG, ">$logfile" or die "Can't open file '$logfile': $!\n"; - open STDERR, ">&LOG" or die "Can't redirect STDERR: $!\n"; - - next; - }; - $arg =~ /^-/ and Usage("Unknown option: $arg"); - Usage("Unknown argument: $arg"); -} -if (@ARGV) { Usage() } - -select LOG; -$| = 1; - -# Prep compile stage - -makeCompileCommand(\my $compile); - -print STDOUT "Doing test compiles with the compile command '$compile'\n"; - - -### -## Now generate the .h file -# - -print OUTH <<'EOHDR'; -/* This file is automatically generated; changes will be lost. -** -** If you need to edit this file because "test.syms" didn't do a good -** job, be sure to save a copy of your changes. -** -** The "define"s below are simply educated guesses. If you are -** having problems compiling, check the appropriate symbol to see if -** it was set correctly: For each line, if the answer to the question -** is "no", that line should start with "#undef"; if the answer is -** yes, it should start with "#define". -*/ - -EOHDR - -print OUTH - $panels ? "#define " : "#undef ", - "C_PANELSUPPORT /* Add in panel library support? */", - "\n\n"; - -print OUTH - $menus ? "#define " : "#undef ", - "C_MENUSUPPORT /* Add in menu library support? */", - "\n\n"; - -print OUTH - $forms ? "#define " : "#undef ", - "C_FORMSUPPORT /* Add in form library support? */", - "\n\n"; - -# Some functions return either int or void, depending on what compiler -# and libcurses.a you are using. For the int/void test, if the -# compiler doesn't complain about assigning the sym to an int -# variable, we assume the function returns int. Otherwise, we assume -# it returns void. - -my %tstfile = qw( E testsym - I testint - V testsym - T testtyp); -while () { - next if /^\S*#/; - next unless /\S/; - - my ($action, $sym, $args) = /^([A-Z])\s+(\w+)\s*(\(.*\))?/; - my $file = $tstfile{$action}; - - unless (defined $sym and defined $file) { - warn "WARNING: internal error on symbol $_\n"; - } - - my $cmd; - $cmd = $compile; # initial value - my $symargs = $sym . (defined($args) ? $args : ''); - $cmd =~ s{_C_SYM_}{$symargs}ge; - $cmd =~ s{_C_FILE_}{$file}g; - - print LOG $cmd, "\n" if $verbose; - my $ret = `$cmd`; - my $rc = $?; - print LOG $ret if $verbose; - print LOG "(rc = $rc)\n" if $verbose; - - my $ssym = $sym; - $ssym =~ s/^w//; - - my $c_sym; - my $comment; - - if ($action eq 'E') { - print LOG "function '$sym' ", ($rc ? "NOT " : ""), "found\n"; - - $c_sym = uc "C_$ssym"; - $comment = "Does function '$ssym' exist?"; - } - elsif ($action eq 'I') { - print LOG "function '$sym' returns ", ($rc ? "void" : "int"), "\n"; - - $c_sym = uc "C_INT$ssym"; - $comment = "Does function '$ssym' return 'int'?"; - } - elsif ($action eq 'V') { - print LOG "variable '$sym' ", ($rc ? "NOT " : ""), "found\n"; - - $c_sym = uc "C_$ssym"; - $comment = "Does variable '$ssym' exist?"; - } - elsif ($action eq 'T') { - print LOG "typedef '$sym' ", ($rc ? "NOT " : ""), "found\n"; - - $c_sym = uc "C_TYP$ssym"; - $comment = "Does typedef '$ssym' exist?"; - } - else { - warn "WARNING: internal error on symbol $_\n"; - } - - print OUTH - $rc ? "#undef " : "#define ", - $c_sym, " " x (24 - length $c_sym), - "/* ", - $comment, " " x (42 - length $comment), - "*/\n"; -} - -unlink "testsym"; -unlink "testint"; -unlink "testtyp"; - -1 while unlink "testsym.obj"; # Possibly pointless VMSism -1 while unlink "testint.obj"; # Possibly pointless VMSism -1 while unlink "testtyp.obj"; # Possibly pointless VMSism - -close IN; -close OUTH; -close LOG; -exit 0; - -### -## Helper functions -# - -sub Usage { - print LOG @_, "\n"; - print LOG < Create file and dump output into it. -EOM -} - -__END__ diff --git a/Curses-1.23/testint.c b/Curses-1.23/testint.c deleted file mode 100644 index 7d0eb29..0000000 --- a/Curses-1.23/testint.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "c-config.h" - -main() { - int ret; - - ret = SYM; -} diff --git a/Curses-1.23/testsym.c b/Curses-1.23/testsym.c deleted file mode 100644 index 212d055..0000000 --- a/Curses-1.23/testsym.c +++ /dev/null @@ -1,5 +0,0 @@ -#include "c-config.h" - -main() { - SYM; -} diff --git a/Curses-1.23/testtyp.c b/Curses-1.23/testtyp.c deleted file mode 100644 index e7c31da..0000000 --- a/Curses-1.23/testtyp.c +++ /dev/null @@ -1,5 +0,0 @@ -#include "c-config.h" - -main() { - typedef SYM c_sym_t; -} diff --git a/perl-Curses/Curses-1.23.tar.gz b/perl-Curses/Curses-1.23.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..14a4bcad1422c02497aa34f11cced9012d8650b5 GIT binary patch literal 257871 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

801z3XAEZ*s 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

Ro?q7U5&0;sko3pbWQgN!Re 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 literal 0 HcmV?d00001