as multiboot kernels.tags/v0.99.beta14
| @@ -0,0 +1,340 @@ | |||||
| GNU GENERAL PUBLIC LICENSE | |||||
| Version 2, June 1991 | |||||
| Copyright (C) 1989, 1991 Free Software Foundation, Inc. | |||||
| 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |||||
| Everyone is permitted to copy and distribute verbatim copies | |||||
| of this license document, but changing it is not allowed. | |||||
| Preamble | |||||
| The licenses for most software are designed to take away your | |||||
| freedom to share and change it. By contrast, the GNU 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. This | |||||
| General Public License applies to most of the Free Software | |||||
| Foundation's software and to any other program whose authors commit to | |||||
| using it. (Some other Free Software Foundation software is covered by | |||||
| the GNU Library General Public License instead.) You can apply it to | |||||
| your programs, too. | |||||
| When we speak of free software, we are referring to freedom, not | |||||
| price. Our General Public Licenses are designed to make sure that you | |||||
| have the freedom to distribute copies of free software (and charge for | |||||
| this service if you wish), that you receive source code or can get it | |||||
| if you want it, that you can change the software or use pieces of it | |||||
| in new free programs; and that you know you can do these things. | |||||
| To protect your rights, we need to make restrictions that forbid | |||||
| anyone to deny you these rights or to ask you to surrender the rights. | |||||
| These restrictions translate to certain responsibilities for you if you | |||||
| distribute copies of the software, or if you modify it. | |||||
| For example, if you distribute copies of 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 show them these terms so they know 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. | |||||
| Finally, any free program is threatened constantly by software | |||||
| patents. We wish to avoid the danger that redistributors of a free | |||||
| program will individually obtain patent licenses, in effect making the | |||||
| program proprietary. To prevent this, we have made it clear that any | |||||
| patent must be licensed for everyone's free use or not licensed at all. | |||||
| 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 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 derivative work under copyright law: | |||||
| that is to say, a work containing the Program or a portion of it, | |||||
| either verbatim or with modifications and/or translated into another | |||||
| language. (Hereinafter, translation is included without limitation in | |||||
| the term "modification".) Each licensee is addressed as "you". | |||||
| Activities other than copying, distribution and modification are not | |||||
| covered by this License; they are outside its scope. The act of | |||||
| running the Program is not restricted, and the output from the Program | |||||
| is covered only if its contents constitute a work based on the | |||||
| Program (independent of having been made by running the Program). | |||||
| Whether that is true depends on what the Program does. | |||||
| 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 License and to the absence of any warranty; | |||||
| and give any other recipients of the Program a copy of this License | |||||
| along with the Program. | |||||
| You may charge a fee for the physical act of transferring a copy, and | |||||
| you may at your option offer warranty protection in exchange for a fee. | |||||
| 2. You may modify your copy or copies of the Program or any portion | |||||
| of it, thus forming a work based on the Program, and copy and | |||||
| distribute such modifications or work under the terms of Section 1 | |||||
| above, provided that you also meet all of these conditions: | |||||
| a) You must cause the modified files to carry prominent notices | |||||
| stating that you changed the files and the date of any change. | |||||
| b) You must cause any work that you distribute or publish, that in | |||||
| whole or in part contains or is derived from the Program or any | |||||
| part thereof, to be licensed as a whole at no charge to all third | |||||
| parties under the terms of this License. | |||||
| c) If the modified program normally reads commands interactively | |||||
| when run, you must cause it, when started running for such | |||||
| interactive use in the most ordinary 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 | |||||
| License. (Exception: if the Program itself is interactive but | |||||
| does not normally print such an announcement, your work based on | |||||
| the Program is not required to print an announcement.) | |||||
| These requirements apply to the modified work as a whole. If | |||||
| identifiable sections of that work are not derived from the Program, | |||||
| and can be reasonably considered independent and separate works in | |||||
| themselves, then this License, and its terms, do not apply to those | |||||
| sections when you distribute them as separate works. But when you | |||||
| distribute the same sections as part of a whole which is a work based | |||||
| on the Program, the distribution of the whole must be on the terms of | |||||
| this License, whose permissions for other licensees extend to the | |||||
| entire whole, and thus to each and every part regardless of who wrote it. | |||||
| Thus, it is not the intent of this section to claim rights or contest | |||||
| your rights to work written entirely by you; rather, the intent is to | |||||
| exercise the right to control the distribution of derivative or | |||||
| collective works based on the Program. | |||||
| In addition, mere aggregation of another work not based on the Program | |||||
| with the Program (or with a work based on the Program) on a volume of | |||||
| a storage or distribution medium does not bring the other work under | |||||
| the scope of this License. | |||||
| 3. You may copy and distribute the Program (or a work based on it, | |||||
| under Section 2) in object code or executable form under the terms of | |||||
| Sections 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 Sections | |||||
| 1 and 2 above on a medium customarily used for software interchange; or, | |||||
| b) Accompany it with a written offer, valid for at least three | |||||
| years, to give any third party, for a charge no more than your | |||||
| cost of physically performing source distribution, a complete | |||||
| machine-readable copy of the corresponding source code, to be | |||||
| distributed under the terms of Sections 1 and 2 above on a medium | |||||
| customarily used for software interchange; or, | |||||
| c) Accompany it with the information you received as to the offer | |||||
| to distribute corresponding source code. (This alternative is | |||||
| allowed only for noncommercial distribution and only if you | |||||
| received the program in object code or executable form with such | |||||
| an offer, in accord with Subsection b above.) | |||||
| The source code for a work means the preferred form of the work for | |||||
| making modifications to it. For an executable work, complete source | |||||
| code means all the source code for all modules it contains, plus any | |||||
| associated interface definition files, plus the scripts used to | |||||
| control compilation and installation of the executable. However, as a | |||||
| special exception, the source code distributed need not include | |||||
| anything that is normally distributed (in either source or binary | |||||
| form) with the major components (compiler, kernel, and so on) of the | |||||
| operating system on which the executable runs, unless that component | |||||
| itself accompanies the executable. | |||||
| If distribution of executable or object code is made by offering | |||||
| access to copy from a designated place, then offering equivalent | |||||
| access to copy the source code from the same place counts as | |||||
| distribution of the source code, even though third parties are not | |||||
| compelled to copy the source along with the object code. | |||||
| 4. You may not copy, modify, sublicense, or distribute the Program | |||||
| except as expressly provided under this License. Any attempt | |||||
| otherwise to copy, modify, sublicense or distribute the Program is | |||||
| void, and will automatically terminate your rights under this License. | |||||
| However, parties who have received copies, or rights, from you under | |||||
| this License will not have their licenses terminated so long as such | |||||
| parties remain in full compliance. | |||||
| 5. You are not required to accept this License, since you have not | |||||
| signed it. However, nothing else grants you permission to modify or | |||||
| distribute the Program or its derivative works. These actions are | |||||
| prohibited by law if you do not accept this License. Therefore, by | |||||
| modifying or distributing 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 for copying, distributing or modifying | |||||
| the Program or works based on it. | |||||
| 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. | |||||
| You are not responsible for enforcing compliance by third parties to | |||||
| this License. | |||||
| 7. If, as a consequence of a court judgment or allegation of patent | |||||
| infringement or for any other reason (not limited to patent issues), | |||||
| conditions are imposed on you (whether by court order, agreement or | |||||
| otherwise) that contradict the conditions of this License, they do not | |||||
| excuse you from the conditions of this License. If you cannot | |||||
| distribute so as to satisfy simultaneously your obligations under this | |||||
| License and any other pertinent obligations, then as a consequence you | |||||
| may not distribute the Program at all. For example, if a patent | |||||
| license would not permit royalty-free redistribution of the Program by | |||||
| all those who receive copies directly or indirectly through you, then | |||||
| the only way you could satisfy both it and this License would be to | |||||
| refrain entirely from distribution of the Program. | |||||
| If any portion of this section is held invalid or unenforceable under | |||||
| any particular circumstance, the balance of the section is intended to | |||||
| apply and the section as a whole is intended to apply in other | |||||
| circumstances. | |||||
| It is not the purpose of this section to induce you to infringe any | |||||
| patents or other property right claims or to contest validity of any | |||||
| such claims; this section has the sole purpose of protecting the | |||||
| integrity of the free software distribution system, which is | |||||
| implemented by public license practices. Many people have made | |||||
| generous contributions to the wide range of software distributed | |||||
| through that system in reliance on consistent application of that | |||||
| system; it is up to the author/donor to decide if he or she is willing | |||||
| to distribute software through any other system and a licensee cannot | |||||
| impose that choice. | |||||
| This section is intended to make thoroughly clear what is believed to | |||||
| be a consequence of the rest of this License. | |||||
| 8. If the distribution and/or use of the Program is restricted in | |||||
| certain countries either by patents or by copyrighted interfaces, the | |||||
| original copyright holder who places the Program under this License | |||||
| may add an explicit geographical distribution limitation excluding | |||||
| those countries, so that distribution is permitted only in or among | |||||
| countries not thus excluded. In such case, this License incorporates | |||||
| the limitation as if written in the body of this License. | |||||
| 9. 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 this License which applies to it and "any | |||||
| later version", you have the option of following the terms and conditions | |||||
| either of that version or of any later version published by the Free | |||||
| Software Foundation. If the Program does not specify a version number of | |||||
| this License, you may choose any version ever published by the Free Software | |||||
| Foundation. | |||||
| 10. 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 | |||||
| 11. 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. | |||||
| 12. 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 | |||||
| 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 the public, 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. | |||||
| <one line to give the program's name and a brief idea of what it does.> | |||||
| Copyright (C) <year> <name of author> | |||||
| 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 2 of the License, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 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) year 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 is a sample; alter the names: | |||||
| Yoyodyne, Inc., hereby disclaims all copyright interest in the program | |||||
| `Gnomovision' (which makes passes at compilers) written by James Hacker. | |||||
| <signature of Ty Coon>, 1 April 1989 | |||||
| Ty Coon, President of Vice | |||||
| This General Public License does not permit incorporating your program into | |||||
| proprietary programs. If your program is a subroutine library, you may | |||||
| consider it more useful to permit linking proprietary applications with the | |||||
| library. If this is what you want to do, use the GNU Library General | |||||
| Public License instead of this License. | |||||
| @@ -1,9 +1,9 @@ | |||||
| # $Id$ | # $Id$ | ||||
| SUBDIRS = cucul caca src test doc | |||||
| SUBDIRS = kernel cucul caca src test doc | |||||
| DIST_SUBDIRS = $(SUBDIRS) autotools debian msvc | DIST_SUBDIRS = $(SUBDIRS) autotools debian msvc | ||||
| EXTRA_DIST = NOTES COPYING.LGPL bootstrap build-dos build-win32 caca-config.in libcaca.spec | |||||
| EXTRA_DIST = NOTES COPYING.GPL COPYING.LGPL bootstrap build-dos build-kernel build-win32 caca-config.in libcaca.spec | |||||
| AUTOMAKE_OPTIONS = dist-bzip2 | AUTOMAKE_OPTIONS = dist-bzip2 | ||||
| bin_SCRIPTS = caca-config | bin_SCRIPTS = caca-config | ||||
| @@ -0,0 +1,30 @@ | |||||
| #! /bin/sh | |||||
| ## Kernel-mode libcaca compilation script -- Sam Hocevar <sam@zoy.org> | |||||
| ## $Id: build-dos 333 2006-03-07 12:39:34Z sam $ | |||||
| set -x | |||||
| set -e | |||||
| CFLAGS="-fno-builtin -O2 -I. -I.. -Wall" | |||||
| CPPFLAGS="-D__KERNEL__ -nostdinc -include kernel/kernel.h" | |||||
| LDFLAGS="-nostdlib -Wl,-N -Wl,-Ttext -Wl,100000" | |||||
| ./configure --disable-slang --disable-ncurses --disable-win32 \ | |||||
| --disable-conio --disable-x11 --disable-gl --disable-network \ | |||||
| --enable-vga --disable-imlib2 --disable-doc \ | |||||
| --host i386 | |||||
| (cd cucul && make) | |||||
| (cd caca && make) | |||||
| (cd src && make cacafire-aafire.o) | |||||
| (cd kernel && | |||||
| gcc $CFLAGS -c multiboot.S -o multiboot.o | |||||
| gcc $CFLAGS $CPPFLAGS -c kernel.c -o kernel.o) | |||||
| gcc $LDFLAGS -o src/cacafire kernel/multiboot.o kernel/kernel.o src/cacafire-aafire.o caca/.libs/libcaca.a cucul/.libs/libcucul.a | |||||
| objcopy -O binary src/cacafire cacafire.boot | |||||
| @@ -19,18 +19,18 @@ | |||||
| #include "config.h" | #include "config.h" | ||||
| #include <stdlib.h> | |||||
| #if defined(HAVE_SYS_TIME_H) | |||||
| # include <sys/time.h> | |||||
| #endif | |||||
| #include <time.h> | |||||
| #if defined(USE_WIN32) | |||||
| # include <windows.h> | |||||
| #endif | |||||
| #if defined(HAVE_UNISTD_H) | |||||
| # include <unistd.h> | |||||
| #if !defined(__KERNEL__) | |||||
| # include <stdlib.h> | |||||
| # if defined(HAVE_SYS_TIME_H) | |||||
| # include <sys/time.h> | |||||
| # endif | |||||
| # include <time.h> | |||||
| # if defined(USE_WIN32) | |||||
| # include <windows.h> | |||||
| # endif | |||||
| # if defined(HAVE_UNISTD_H) | |||||
| # include <unistd.h> | |||||
| # endif | |||||
| #endif | #endif | ||||
| #include "caca.h" | #include "caca.h" | ||||
| @@ -43,7 +43,7 @@ void _caca_sleep(unsigned int usec) | |||||
| #elif defined(HAVE_SLEEP) | #elif defined(HAVE_SLEEP) | ||||
| Sleep(usec / 1000); | Sleep(usec / 1000); | ||||
| #else | #else | ||||
| SLEEP | |||||
| /* SLEEP */ | |||||
| #endif | #endif | ||||
| } | } | ||||
| @@ -11,6 +11,7 @@ AM_CONFIG_HEADER(config.h) | |||||
| AM_PROG_CC_C_O | AM_PROG_CC_C_O | ||||
| AC_PROG_CPP | AC_PROG_CPP | ||||
| AM_PROG_AS | |||||
| AC_LIBTOOL_WIN32_DLL | AC_LIBTOOL_WIN32_DLL | ||||
| AM_PROG_LIBTOOL | AM_PROG_LIBTOOL | ||||
| @@ -38,6 +39,8 @@ AC_ARG_ENABLE(gl, | |||||
| [ --enable-gl OpenGL support (autodetected)]) | [ --enable-gl OpenGL support (autodetected)]) | ||||
| AC_ARG_ENABLE(network, | AC_ARG_ENABLE(network, | ||||
| [ --enable-network Network support (autodetected)]) | [ --enable-network Network support (autodetected)]) | ||||
| AC_ARG_ENABLE(vga, | |||||
| [ --enable-vga VGA support (default disabled)]) | |||||
| dnl example programs features | dnl example programs features | ||||
| AC_ARG_ENABLE(imlib2, | AC_ARG_ENABLE(imlib2, | ||||
| @@ -47,7 +50,7 @@ dnl conditional builds | |||||
| AC_ARG_ENABLE(doc, | AC_ARG_ENABLE(doc, | ||||
| [ --enable-doc build documentation (needs doxygen and LaTeX)]) | [ --enable-doc build documentation (needs doxygen and LaTeX)]) | ||||
| AC_CHECK_HEADERS(signal.h sys/ioctl.h sys/time.h inttypes.h endian.h unistd.h) | |||||
| AC_CHECK_HEADERS(stdio.h stdarg.h signal.h sys/ioctl.h sys/time.h inttypes.h endian.h unistd.h) | |||||
| AC_CHECK_FUNCS(signal ioctl vsnprintf getenv putenv strcasecmp) | AC_CHECK_FUNCS(signal ioctl vsnprintf getenv putenv strcasecmp) | ||||
| AC_CHECK_FUNCS(usleep gettimeofday) | AC_CHECK_FUNCS(usleep gettimeofday) | ||||
| @@ -168,6 +171,16 @@ if test "${enable_ncurses}" != "no"; then | |||||
| fi | fi | ||||
| fi | fi | ||||
| if test "${enable_vga}" = "yes"; then | |||||
| ac_cv_my_have_vga="yes" | |||||
| CPPFLAGS="${CPPFLAGS} -I. -D__KERNEL__ -nostdinc -include kernel/kernel.h" | |||||
| CFLAGS="${CFLAGS} -fno-builtin -O2 -Wall" | |||||
| CCASFLAGS="${CCASFLAGS} -I." | |||||
| LDFLAGS="${LDFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,100000" | |||||
| AC_DEFINE(USE_VGA, 1, Define to activate the VGA backend driver) | |||||
| CACA_DRIVERS="${CACA_DRIVERS} vga" | |||||
| fi | |||||
| AC_MSG_CHECKING(valid output drivers) | AC_MSG_CHECKING(valid output drivers) | ||||
| if test -z "${CACA_DRIVERS}"; then | if test -z "${CACA_DRIVERS}"; then | ||||
| AC_MSG_RESULT(no) | AC_MSG_RESULT(no) | ||||
| @@ -244,6 +257,7 @@ AM_CONDITIONAL(USE_LATEX, test "${LATEX}" != "no") | |||||
| AC_CONFIG_FILES([ | AC_CONFIG_FILES([ | ||||
| Makefile | Makefile | ||||
| kernel/Makefile | |||||
| cucul/Makefile | cucul/Makefile | ||||
| caca/Makefile | caca/Makefile | ||||
| src/Makefile | src/Makefile | ||||
| @@ -19,15 +19,16 @@ | |||||
| #include "config.h" | #include "config.h" | ||||
| #if defined(HAVE_ENDIAN_H) | |||||
| # include <endian.h> | |||||
| #if !defined(__KERNEL__) | |||||
| # if defined(HAVE_ENDIAN_H) | |||||
| # include <endian.h> | |||||
| # endif | |||||
| # include <stdio.h> | |||||
| # include <stdlib.h> | |||||
| # include <limits.h> | |||||
| # include <string.h> | |||||
| #endif | #endif | ||||
| #include <stdio.h> | |||||
| #include <stdlib.h> | |||||
| #include <limits.h> | |||||
| #include <string.h> | |||||
| #include "cucul.h" | #include "cucul.h" | ||||
| #include "cucul_internals.h" | #include "cucul_internals.h" | ||||
| @@ -19,7 +19,9 @@ | |||||
| #include "config.h" | #include "config.h" | ||||
| #include <stdlib.h> | |||||
| #if !defined(__KERNEL__) | |||||
| # include <stdlib.h> | |||||
| #endif | |||||
| #include "cucul.h" | #include "cucul.h" | ||||
| #include "cucul_internals.h" | #include "cucul_internals.h" | ||||
| @@ -19,19 +19,20 @@ | |||||
| #include "config.h" | #include "config.h" | ||||
| #include <stdio.h> /* BUFSIZ */ | |||||
| #include <string.h> | |||||
| #include <stdlib.h> | |||||
| #if defined(HAVE_UNISTD_H) | |||||
| # include <unistd.h> | |||||
| #endif | |||||
| #include <stdarg.h> | |||||
| #if defined(HAVE_SIGNAL_H) | |||||
| # include <signal.h> | |||||
| #endif | |||||
| #if defined(HAVE_SYS_IOCTL_H) | |||||
| # include <sys/ioctl.h> | |||||
| #if !defined(__KERNEL__) | |||||
| # include <stdio.h> /* BUFSIZ */ | |||||
| # include <string.h> | |||||
| # include <stdlib.h> | |||||
| # include <stdarg.h> | |||||
| # if defined(HAVE_UNISTD_H) | |||||
| # include <unistd.h> | |||||
| # endif | |||||
| # if defined(HAVE_SIGNAL_H) | |||||
| # include <signal.h> | |||||
| # endif | |||||
| # if defined(HAVE_SYS_IOCTL_H) | |||||
| # include <sys/ioctl.h> | |||||
| # endif | |||||
| #endif | #endif | ||||
| #include "cucul.h" | #include "cucul.h" | ||||
| @@ -20,7 +20,9 @@ | |||||
| #include "config.h" | #include "config.h" | ||||
| #include <stdlib.h> | |||||
| #if !defined(__KERNEL__) | |||||
| # include <stdlib.h> | |||||
| #endif | |||||
| #include "cucul.h" | #include "cucul.h" | ||||
| #include "cucul_internals.h" | #include "cucul_internals.h" | ||||
| @@ -20,8 +20,10 @@ | |||||
| #include "config.h" | #include "config.h" | ||||
| #include <stdlib.h> | |||||
| #include <string.h> | |||||
| #if !defined(__KERNEL__) | |||||
| # include <stdlib.h> | |||||
| # include <string.h> | |||||
| #endif | |||||
| #include "cucul.h" | #include "cucul.h" | ||||
| #include "cucul_internals.h" | #include "cucul_internals.h" | ||||
| @@ -20,12 +20,12 @@ | |||||
| #ifndef __CUCUL_INTERNALS_H__ | #ifndef __CUCUL_INTERNALS_H__ | ||||
| #define __CUCUL_INTERNALS_H__ | #define __CUCUL_INTERNALS_H__ | ||||
| #if defined(HAVE_INTTYPES_H) || defined(_DOXYGEN_SKIP_ME) | |||||
| #if defined(HAVE_INTTYPES_H) && !defined(__KERNEL__) | |||||
| # include <inttypes.h> | # include <inttypes.h> | ||||
| #elif !defined(CUSTOM_INTTYPES) | |||||
| #elif !defined(CUSTOM_INTTYPES) && !defined(_DOXYGEN_SKIP_ME) | |||||
| # define CUSTOM_INTTYPES | # define CUSTOM_INTTYPES | ||||
| typedef unsigned char uint8_t; | typedef unsigned char uint8_t; | ||||
| typedef unsigned char uint16_t; | |||||
| typedef unsigned short uint16_t; | |||||
| typedef unsigned int uint32_t; | typedef unsigned int uint32_t; | ||||
| #endif | #endif | ||||
| @@ -21,9 +21,11 @@ | |||||
| #include "config.h" | #include "config.h" | ||||
| #include <stdlib.h> | |||||
| #include <stdio.h> | |||||
| #include <string.h> | |||||
| #if !defined(__KERNEL__) | |||||
| # include <stdlib.h> | |||||
| # include <stdio.h> | |||||
| # include <string.h> | |||||
| #endif | |||||
| #include "cucul.h" | #include "cucul.h" | ||||
| #include "cucul_internals.h" | #include "cucul_internals.h" | ||||
| @@ -20,7 +20,9 @@ | |||||
| #include "config.h" | #include "config.h" | ||||
| #include <stdlib.h> | |||||
| #if !defined(__KERNEL__) | |||||
| # include <stdlib.h> | |||||
| #endif | |||||
| #include "cucul.h" | #include "cucul.h" | ||||
| #include "cucul_internals.h" | #include "cucul_internals.h" | ||||
| @@ -19,7 +19,9 @@ | |||||
| #include "config.h" | #include "config.h" | ||||
| #include <stdlib.h> | |||||
| #if !defined(__KERNEL__) | |||||
| # include <stdlib.h> | |||||
| #endif | |||||
| #include "cucul.h" | #include "cucul.h" | ||||
| #include "cucul_internals.h" | #include "cucul_internals.h" | ||||
| @@ -19,9 +19,11 @@ | |||||
| #include "config.h" | #include "config.h" | ||||
| #include <stdio.h> | |||||
| #include <stdlib.h> | |||||
| #include <string.h> | |||||
| #if !defined(__KERNEL__) | |||||
| # include <stdio.h> | |||||
| # include <stdlib.h> | |||||
| # include <string.h> | |||||
| #endif | |||||
| #include "cucul.h" | #include "cucul.h" | ||||
| #include "cucul_internals.h" | #include "cucul_internals.h" | ||||
| @@ -19,7 +19,9 @@ | |||||
| #include "config.h" | #include "config.h" | ||||
| #include <stdlib.h> | |||||
| #if !defined(__KERNEL__) | |||||
| # include <stdlib.h> | |||||
| #endif | |||||
| #include "cucul.h" | #include "cucul.h" | ||||
| #include "cucul_internals.h" | #include "cucul_internals.h" | ||||
| @@ -0,0 +1,12 @@ | |||||
| # $Id: Makefile.am 326 2006-03-06 20:57:14Z sam $ | |||||
| lib_LTLIBRARIES = libkernel.la | |||||
| libkernel_la_SOURCES = \ | |||||
| kernel.c \ | |||||
| kernel.h \ | |||||
| multiboot.S \ | |||||
| multiboot.h \ | |||||
| $(NULL) | |||||
| libkernel_la_LDFLAGS = -no-undefined | |||||
| @@ -0,0 +1,204 @@ | |||||
| /* | |||||
| * libcucul Unicode canvas library | |||||
| * libcaca ASCII-Art library | |||||
| * Copyright (c) 2006 Sam Hocevar <sam@zoy.org> | |||||
| * All Rights Reserved | |||||
| * | |||||
| * This library is free software; you can redistribute it and/or | |||||
| * modify it under the terms of the Do What The Fuck You Want To | |||||
| * Public License, Version 2, as published by Sam Hocevar. See | |||||
| * http://sam.zoy.org/wtfpl/COPYING for more details. | |||||
| */ | |||||
| /** \file kernel.c | |||||
| * \version \$Id$ | |||||
| * \author Sam Hocevar <sam@zoy.org> | |||||
| * \brief Kernel features | |||||
| * | |||||
| * This file contains replacement functions for the standard C library | |||||
| * that must be used when building libcucul and libcaca into a kernel. | |||||
| */ | |||||
| #include "config.h" | |||||
| #ifdef __KERNEL__ | |||||
| /* Our memory mapping */ | |||||
| static uint32_t *freemem = (uint32_t*) 0x00200000; | |||||
| /* Multiboot kernel entry point */ | |||||
| void cmain(unsigned long int magic, unsigned long int addr) | |||||
| { | |||||
| char *argv[] = { NULL }; | |||||
| int argc = 0; | |||||
| main(argc, argv); | |||||
| } | |||||
| /* stdlib.h functions */ | |||||
| void *malloc(size_t size) | |||||
| { | |||||
| uint32_t *p = freemem; | |||||
| size = (size + 0x7) / 4; | |||||
| *p = size; | |||||
| freemem += size + 1; | |||||
| return p + 1; | |||||
| } | |||||
| void free(void *ptr) | |||||
| { | |||||
| return; | |||||
| } | |||||
| void *realloc(void *ptr, size_t size) | |||||
| { | |||||
| uint32_t oldsize = ((uint32_t *)ptr)[-1]; | |||||
| void *p; | |||||
| if(oldsize >= size) | |||||
| return ptr; | |||||
| p = malloc(size); | |||||
| memcpy(p, ptr, oldsize); | |||||
| return p; | |||||
| } | |||||
| char *getenv(const char *name) | |||||
| { | |||||
| return NULL; | |||||
| } | |||||
| int rand(void) | |||||
| { | |||||
| static int seed = 0x68743284; | |||||
| seed = (seed * 0x7f32ba17) ^ 0xf893a735; | |||||
| return seed % RAND_MAX; | |||||
| } | |||||
| int abs(int j) | |||||
| { | |||||
| if(j < 0) | |||||
| return -j; | |||||
| return j; | |||||
| } | |||||
| void exit(int status) | |||||
| { | |||||
| /* FIXME: reboot? */ | |||||
| while(1); | |||||
| } | |||||
| /* string.h functions */ | |||||
| void *memset(void *s, int c, size_t n) | |||||
| { | |||||
| uint8_t *ptr = s; | |||||
| while(n--) | |||||
| *ptr++ = c; | |||||
| return s; | |||||
| } | |||||
| void *memcpy(void *dest, const void *src, size_t n) | |||||
| { | |||||
| uint8_t *destptr = dest; | |||||
| uint8_t const *srcptr = src; | |||||
| while(n--) | |||||
| *destptr++ = *srcptr++; | |||||
| return dest; | |||||
| } | |||||
| size_t strlen(const char *s) | |||||
| { | |||||
| int len = 0; | |||||
| while(*s++) | |||||
| len++; | |||||
| return len; | |||||
| } | |||||
| int strcasecmp(const char *s1, const char *s2) | |||||
| { | |||||
| /* FIXME */ | |||||
| return -1; | |||||
| } | |||||
| /* stdarg.h functions */ | |||||
| int vsnprintf(char *str, size_t size, const char *format, va_list ap) | |||||
| { | |||||
| /* FIXME */ | |||||
| return 0; | |||||
| } | |||||
| /* stdio.h functions */ | |||||
| FILE *fopen(const char *path, const char *mode) | |||||
| { | |||||
| /* FIXME */ | |||||
| return NULL; | |||||
| } | |||||
| int feof(FILE *stream) | |||||
| { | |||||
| /* FIXME */ | |||||
| return 0; | |||||
| } | |||||
| char *fgets(char *s, int size, FILE *stream) | |||||
| { | |||||
| /* FIXME */ | |||||
| return NULL; | |||||
| } | |||||
| int fclose(FILE *fp) | |||||
| { | |||||
| /* FIXME */ | |||||
| return 0; | |||||
| } | |||||
| int printf(const char *format, ...) | |||||
| { | |||||
| /* FIXME */ | |||||
| return 0; | |||||
| } | |||||
| int sprintf(char *str, const char *format, ...) | |||||
| { | |||||
| /* FIXME */ | |||||
| return 0; | |||||
| } | |||||
| int sscanf(const char *str, const char *format, ...) | |||||
| { | |||||
| /* FIXME */ | |||||
| return 0; | |||||
| } | |||||
| /* unistd.h functions */ | |||||
| void usleep(unsigned long usec) | |||||
| { | |||||
| /* FIXME */ | |||||
| return; | |||||
| } | |||||
| /* time.h functions */ | |||||
| int gettimeofday(struct timeval *tv, struct timezone *tz) | |||||
| { | |||||
| static int usec = 0; | |||||
| static int sec = 0; | |||||
| /* FIXME */ | |||||
| usec += 10000; | |||||
| if(usec > 1000000) | |||||
| { | |||||
| sec++; | |||||
| usec -= 1000000; | |||||
| } | |||||
| tv->tv_sec = sec; | |||||
| tv->tv_usec = usec; | |||||
| return 0; | |||||
| } | |||||
| #endif /* __KERNEL__ */ | |||||
| @@ -0,0 +1,95 @@ | |||||
| /* | |||||
| * libcucul Unicode canvas library | |||||
| * libcaca ASCII-Art library | |||||
| * Copyright (c) 2006 Sam Hocevar <sam@zoy.org> | |||||
| * All Rights Reserved | |||||
| * | |||||
| * This library is free software; you can redistribute it and/or | |||||
| * modify it under the terms of the Do What The Fuck You Want To | |||||
| * Public License, Version 2, as published by Sam Hocevar. See | |||||
| * http://sam.zoy.org/wtfpl/COPYING for more details. | |||||
| */ | |||||
| /** \file kernel.h | |||||
| * \version \$Id$ | |||||
| * \author Sam Hocevar <sam@zoy.org> | |||||
| * \brief Kernel features | |||||
| * | |||||
| * This file contains replacement functions for the standard C library | |||||
| * that must be used when building libcucul and libcaca into a kernel. | |||||
| */ | |||||
| /* Various defines */ | |||||
| #define NULL ((void *)0) | |||||
| #define BUFSIZ 4096 | |||||
| #define RAND_MAX ((unsigned int)0x8000000) | |||||
| #define INT_MAX ((int)0x7fffffff) | |||||
| #define __BYTE_ORDER 1 | |||||
| #define __BIG_ENDIAN 2 | |||||
| /* Various typedefs -- some are x86-specific */ | |||||
| #define CUSTOM_INTTYPES | |||||
| typedef unsigned char uint8_t; | |||||
| typedef unsigned short uint16_t; | |||||
| typedef unsigned int uint32_t; | |||||
| typedef unsigned int uintptr_t; | |||||
| typedef unsigned int size_t; | |||||
| typedef struct file | |||||
| { | |||||
| void *mem; | |||||
| } FILE; | |||||
| struct timeval { | |||||
| int tv_sec; | |||||
| int tv_usec; | |||||
| }; | |||||
| struct timezone { | |||||
| int tz_minuteswest; | |||||
| int tz_dsttime; | |||||
| }; | |||||
| /* Multiboot kernel entry point */ | |||||
| void cmain(unsigned long int magic, unsigned long int addr); | |||||
| /* The application's entry point */ | |||||
| int main(int argc, char *argv[]); | |||||
| /* stdlib.h functions */ | |||||
| void *malloc(size_t size); | |||||
| void free(void *ptr); | |||||
| void *realloc(void *ptr, size_t size); | |||||
| char *getenv(const char *name); | |||||
| int rand(void); | |||||
| int abs(int j); | |||||
| void exit(int status); | |||||
| /* string.h functions */ | |||||
| void *memset(void *s, int c, size_t n); | |||||
| void *memcpy(void *dest, const void *src, size_t n); | |||||
| size_t strlen(const char *s); | |||||
| int strcasecmp(const char *s1, const char *s2); | |||||
| /* stdarg.h functions */ | |||||
| typedef void * va_list; | |||||
| #define va_start(v,a) v = (void *)((uintptr_t)(&a) + sizeof(a)) | |||||
| #define va_end(v) | |||||
| int vsnprintf(char *str, size_t size, const char *format, va_list ap); | |||||
| /* stdio.h functions */ | |||||
| FILE *fopen(const char *path, const char *mode); | |||||
| int feof(FILE *stream); | |||||
| char *fgets(char *s, int size, FILE *stream); | |||||
| int fclose(FILE *fp); | |||||
| int printf(const char *format, ...); | |||||
| int sprintf(char *str, const char *format, ...); | |||||
| int sscanf(const char *str, const char *format, ...); | |||||
| /* unistd.h functions */ | |||||
| void usleep(unsigned long usec); | |||||
| /* time.h functions */ | |||||
| int gettimeofday(struct timeval *tv, struct timezone *tz); | |||||
| @@ -0,0 +1,73 @@ | |||||
| /* boot.S - bootstrap the kernel */ | |||||
| /* Copyright (C) 1999 Free Software Foundation, Inc. | |||||
| 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 2 of the License, 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ | |||||
| #define ASM 1 | |||||
| #include <multiboot.h> | |||||
| .text | |||||
| .code32 | |||||
| .globl start, _start | |||||
| /* This entry is not used actually. */ | |||||
| start: | |||||
| _start: | |||||
| jmp multiboot_entry | |||||
| /* Align 32 bits boundary. */ | |||||
| .align 4 | |||||
| /* Multiboot header. */ | |||||
| multiboot_header: | |||||
| /* magic */ | |||||
| .long MULTIBOOT_HEADER_MAGIC | |||||
| /* flags */ | |||||
| .long MULTIBOOT_HEADER_FLAGS | |||||
| /* checksum */ | |||||
| .long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS) | |||||
| /* header_addr */ | |||||
| .long multiboot_header | |||||
| /* load_addr */ | |||||
| .long _start | |||||
| /* load_end_addr */ | |||||
| .long _edata | |||||
| /* bss_end_addr */ | |||||
| .long _end | |||||
| /* entry_addr */ | |||||
| .long multiboot_entry | |||||
| multiboot_entry: | |||||
| /* Initialize the stack pointer. */ | |||||
| movl $(stack + STACK_SIZE), %esp | |||||
| /* Reset EFLAGS. */ | |||||
| pushl $0 | |||||
| popf | |||||
| /* Push the pointer to the Multiboot information structure. */ | |||||
| pushl %ebx | |||||
| /* Push the magic value. */ | |||||
| pushl %eax | |||||
| /* Now enter the C main function... */ | |||||
| call EXT_C(cmain) | |||||
| loop: hlt | |||||
| jmp loop | |||||
| /* Our stack area. */ | |||||
| .comm stack, STACK_SIZE | |||||
| @@ -0,0 +1,115 @@ | |||||
| /* multiboot.h - the header for Multiboot */ | |||||
| /* Copyright (C) 1999 Free Software Foundation, Inc. | |||||
| 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 2 of the License, 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ | |||||
| /* Macros. */ | |||||
| /* The magic number for the Multiboot header. */ | |||||
| #define MULTIBOOT_HEADER_MAGIC 0x1BADB002 | |||||
| /* The flags for the Multiboot header. */ | |||||
| #define MULTIBOOT_HEADER_FLAGS 0x00010003 | |||||
| /* The magic number passed by a Multiboot-compliant boot loader. */ | |||||
| #define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002 | |||||
| /* The size of our stack (16KB). */ | |||||
| #define STACK_SIZE 0x4000 | |||||
| /* C symbol format. HAVE_ASM_USCORE is defined by configure. */ | |||||
| #ifdef HAVE_ASM_USCORE | |||||
| # define EXT_C(sym) _ ## sym | |||||
| #else | |||||
| # define EXT_C(sym) sym | |||||
| #endif | |||||
| #ifndef ASM | |||||
| /* Do not include here in boot.S. */ | |||||
| /* Types. */ | |||||
| /* The Multiboot header. */ | |||||
| typedef struct multiboot_header | |||||
| { | |||||
| unsigned long magic; | |||||
| unsigned long flags; | |||||
| unsigned long checksum; | |||||
| unsigned long header_addr; | |||||
| unsigned long load_addr; | |||||
| unsigned long load_end_addr; | |||||
| unsigned long bss_end_addr; | |||||
| unsigned long entry_addr; | |||||
| } multiboot_header_t; | |||||
| /* The symbol table for a.out. */ | |||||
| typedef struct aout_symbol_table | |||||
| { | |||||
| unsigned long tabsize; | |||||
| unsigned long strsize; | |||||
| unsigned long addr; | |||||
| unsigned long reserved; | |||||
| } aout_symbol_table_t; | |||||
| /* The section header table for ELF. */ | |||||
| typedef struct elf_section_header_table | |||||
| { | |||||
| unsigned long num; | |||||
| unsigned long size; | |||||
| unsigned long addr; | |||||
| unsigned long shndx; | |||||
| } elf_section_header_table_t; | |||||
| /* The Multiboot information. */ | |||||
| typedef struct multiboot_info | |||||
| { | |||||
| unsigned long flags; | |||||
| unsigned long mem_lower; | |||||
| unsigned long mem_upper; | |||||
| unsigned long boot_device; | |||||
| unsigned long cmdline; | |||||
| unsigned long mods_count; | |||||
| unsigned long mods_addr; | |||||
| union | |||||
| { | |||||
| aout_symbol_table_t aout_sym; | |||||
| elf_section_header_table_t elf_sec; | |||||
| } u; | |||||
| unsigned long mmap_length; | |||||
| unsigned long mmap_addr; | |||||
| } multiboot_info_t; | |||||
| /* The module structure. */ | |||||
| typedef struct module | |||||
| { | |||||
| unsigned long mod_start; | |||||
| unsigned long mod_end; | |||||
| unsigned long string; | |||||
| unsigned long reserved; | |||||
| } module_t; | |||||
| /* The memory map. Be careful that the offset 0 is base_addr_low | |||||
| but no size. */ | |||||
| typedef struct memory_map | |||||
| { | |||||
| unsigned long size; | |||||
| unsigned long base_addr_low; | |||||
| unsigned long base_addr_high; | |||||
| unsigned long length_low; | |||||
| unsigned long length_high; | |||||
| unsigned long type; | |||||
| } memory_map_t; | |||||
| #endif /* ! ASM */ | |||||
| @@ -24,9 +24,11 @@ | |||||
| #ifdef LIBCACA | #ifdef LIBCACA | ||||
| #include "config.h" | #include "config.h" | ||||
| #include <stdio.h> | |||||
| #include <stdlib.h> | |||||
| #include <string.h> | |||||
| #if !defined(__KERNEL__) | |||||
| # include <stdio.h> | |||||
| # include <stdlib.h> | |||||
| # include <string.h> | |||||
| #endif | |||||
| #include "caca.h" | #include "caca.h" | ||||
| #else | #else | ||||
| #include <stdio.h> | #include <stdio.h> | ||||