]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/16_head.h
last time i will start wolf3d core port after exam on thursday
[16.git] / src / lib / 16_head.h
old mode 100644 (file)
new mode 100755 (executable)
index 0fe12ce..c055943
-/* Project 16 Source Code~
- * Copyright (C) 2012-2015 sparky4 & pngwen & andrius4669
- *
- * This file is part of Project 16.
- *
- * Project 16 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 3 of the License, or
- * (at your option) any later version.
- *
- * Project 16 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, see <http://www.gnu.org/licenses/>, or
- * write to the Free Software Foundation, Inc., 51 Franklin Street,
- * Fifth Floor, Boston, MA 02110-1301 USA.
- *
- */
-
-#if !defined(__LARGE__) && !defined(__COMPACT__) && !defined(__HUGE__)
-#error Invalid memory model for compiling project 16
-#endif
-
-#if !defined(__i86__) && defined(__i386__)
-#error i8088 only
-#endif
-
-#ifndef _LIBHEAD_H_
-#define _LIBHEAD_H_
-#include <i86.h>
-#include <dos.h>
-#include <stdio.h>
-#include <conio.h> // just for wait
-#include <time.h> // just for wait
-#include <stdlib.h>
-#include <malloc.h>
-#include <ctype.h>
-#include <unistd.h>\r
+/* Project 16 Source Code~\r
+ * Copyright (C) 2012-2018 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover\r
+ *\r
+ * This file is part of Project 16.\r
+ *\r
+ * Project 16 is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 3 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * Project 16 is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>, or\r
+ * write to the Free Software Foundation, Inc., 51 Franklin Street,\r
+ * Fifth Floor, Boston, MA 02110-1301 USA.\r
+ *\r
+ */\r
+\r
+//#if !defined(__LARGE__) && !defined(__COMPACT__) && !defined(__HUGE__)\r
+//#error Invalid memory model for compiling project 16\r
+//#endif\r
+\r
+#if !defined(__i86__) && defined(__i386__)\r
+#error i8088 only\r
+#endif\r
+\r
+#ifndef __16_HEAD_H__\r
+#define __16_HEAD_H__\r
+#include <dos.h>\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <conio.h> // this is where Open Watcom hides the outp() etc. functions // just for wait\r
+#include <time.h> // just for wait\r
+#include <ctype.h>\r
 #include <fcntl.h>\r
-#include <sys/stat.h>
-#include <mem.h>
-//#include <fenv.h>
-#include "src/lib/types.h"
-
-/* Control codes for all keys on the keyboard */
-//here temperarly
-/*
-#define KEY_A          (0x1E)
-#define KEY_B          (0x30)
-#define KEY_C          (0x2E)
-#define KEY_D          (0x20)
-#define KEY_E          (0x12)
-#define KEY_F          (0x21)
-#define KEY_G          (0x22)
-#define KEY_H          (0x23)
-#define KEY_I          (0x17)
-#define KEY_J          (0x24)
-#define KEY_K          (0x25)
-#define KEY_L          (0x26)
-#define KEY_M          (0x32)
-#define KEY_N          (0x31)
-#define KEY_O          (0x18)
-#define KEY_P          (0x19)
-#define KEY_Q          (0x10)
-#define KEY_R          (0x13)
-#define KEY_S          (0x1F)
-#define KEY_T          (0x14)
-#define KEY_U          (0x16)
-#define KEY_V          (0x2F)
-#define KEY_W          (0x11)
-#define KEY_X          (0x2D)
-#define KEY_Y          (0x15)
-#define KEY_Z          (0x2C)
-#define KEY_1          (0x02)
-#define KEY_2          (0x03)
-#define KEY_3          (0x04)
-#define KEY_4          (0x05)
-#define KEY_5          (0x06)
-#define KEY_6          (0x07)
-#define KEY_7          (0x08)
-#define KEY_8          (0x09)
-#define KEY_9          (0x0A)
-#define KEY_0          (0x0B)
-#define KEY_DASH               (0x0C)  // -_
-#define KEY_EQUAL              (0x0D)  // =+
-#define KEY_LBRACKET   (0x1A)  // [{
-#define KEY_RBRACKET   (0x1B)  // ]}
-#define KEY_SEMICOLON  (0x27)  // ;:
-#define KEY_RQUOTE     (0x28)  // '"
-#define KEY_LQUOTE     (0x29)  // `~
-#define KEY_PERIOD     (0x33)  // .>
-#define KEY_COMMA              (0x34)  // ,<
-#define KEY_SLASH              (0x35)  // /?
-#define KEY_BACKSLASH  (0x2B)  // \|
-#define KEY_F1         (0x3B)
-#define KEY_F2         (0x3C)
-#define KEY_F3         (0x3D)
-#define KEY_F4         (0x3E)
-#define KEY_F5         (0x3F)
-#define KEY_F6         (0x40)
-#define KEY_F7         (0x41)
-#define KEY_F8         (0x42)
-#define KEY_F9         (0x43)
-#define KEY_F10                (0x44)
-#define KEY_ESC                (0x01)
-#define KEY_BACKSPACE   (0x0E)
-#define KEY_TAB                (0x0F)
-#define KEY_ENTER              (0x1C)
-#define KEY_CONTROL    (0x1D)
-#define KEY_LSHIFT     (0x2A)
-#define KEY_RSHIFT     (0x36)
-#define KEY_PRTSC              (0x37)
-#define KEY_ALT                (0x38)
-#define KEY_SPACE              (0x39)
-#define KEY_CAPSLOCK   (0x3A)
-#define KEY_NUMLOCK    (0x45)
-#define KEY_SCROLLLOCK (0x46)
-#define KEY_HOME               (0x47)
-#define KEY_UP         (0x48)
-#define KEY_PGUP               (0x49)
-#define KEY_MINUS              (0x4A)
-#define KEY_LEFT               (0x4B)
-#define KEY_CENTER     (0x4C)
-#define KEY_RIGHT              (0x4D)
-#define KEY_PLUS               (0x4E)
-#define KEY_END                (0x4F)
-#define KEY_DOWN               (0x50)
-#define KEY_PGDOWN     (0x51)
-#define KEY_INS                (0x52)
-#define KEY_DEL                (0x53)
-
-#define KEY_LWIN               (0x73)
-#define KEY_RWIN               (0x74)
-#define KEY_MENU               (0x75)
-*/
-
-static dword far* clockdw= (dword far*) 0x046C; /* 18.2hz clock */
-//static dword clockdw=0;
-extern int                     profilehandle,debughandle;      //make it into game global
-
-#define __DEBUG__
-
-//#define _SEGU(__p) ((unsigned)((unsigned long)(void __huge*)(__p) >> 16))
-
-#define        nil     ((void *)0)
-
-#define peekb(segm,ofs) (*(byte far*)MK_FP((segm),(ofs)))\r
-#define peekw(segm,ofs) (*(word far*)MK_FP((segm),(ofs)))\r
-#define pokeb(segm,ofs,value) (peekb((segm),(ofs)) = (byte)(value))\r
-#define pokew(segm,ofs,value) (peekw((segm),(ofs)) = (word)(value))\r
-
-typedef union REGPACK  regs_t;
-typedef        enum    {false,true}    boolean;
-//I hope this is correct!
-typedef void __based(__self) * memptr;
-//typedef __segment * memptr;
-//typedef fenp.op_ptr_seg * memptr;//=fenv_t.;
-typedef struct
-{\r
-       int old_mode;   //old video mode before game!
-} global_game_variables_t;
-
-/* local function */\r
-void wait(clock_t wait);
-void* AllocateLargestFreeBlock(size_t* Size);
-size_t GetFreeSize(void);
-void far *AllocateLargestFarFreeBlock(size_t far* Size);
-size_t GetFarFreeSize(void);
-long int filesize(FILE *fp);
-int US_CheckParm(char *parm,char **strings);
-
-extern void CA_OpenDebug (void);\r
-extern void CA_CloseDebug (void);
-
-#endif/*_LIBHEAD_H_*/
+#include <io.h>\r
+#include <sys/stat.h>\r
+#include <mem.h>\r
+#include <string.h>\r
+#include <limits.h>\r
+#include <errno.h>\r
+#include <process.h>\r
+#ifdef __WATCOMC__\r
+#include <i86.h>\r
+#include <unistd.h>\r
+#include <alloca.h>\r
+#include <stdint.h> //16_vrs.h\r
+#endif\r
+#ifdef __BORLANDC__\r
+#include <values.h>\r
+#include <dir.h>\r
+#define TILEWH 16\r
+#endif\r
+#include "src/lib/16_t.h"\r
+#include "src/lib/16_tdef.h"\r
+#include "src/lib/nyan/kitten.h"\r
+\r
+#define VERSION __DATE__ " " __TIME__\r
+\r
+/* Control codes for all keys on the keyboard */\r
+//here temperarly\r
+/*\r
+#define KEY_A          (0x1E)\r
+#define KEY_B          (0x30)\r
+#define KEY_C          (0x2E)\r
+#define KEY_D          (0x20)\r
+#define KEY_E          (0x12)\r
+#define KEY_F          (0x21)\r
+#define KEY_G          (0x22)\r
+#define KEY_H          (0x23)\r
+#define KEY_I          (0x17)\r
+#define KEY_J          (0x24)\r
+#define KEY_K          (0x25)\r
+#define KEY_L          (0x26)\r
+#define KEY_M          (0x32)\r
+#define KEY_N          (0x31)\r
+#define KEY_O          (0x18)\r
+#define KEY_P          (0x19)\r
+#define KEY_Q          (0x10)\r
+#define KEY_R          (0x13)\r
+#define KEY_S          (0x1F)\r
+#define KEY_T          (0x14)\r
+#define KEY_U          (0x16)\r
+#define KEY_V          (0x2F)\r
+#define KEY_W          (0x11)\r
+#define KEY_X          (0x2D)\r
+#define KEY_Y          (0x15)\r
+#define KEY_Z          (0x2C)\r
+#define KEY_1          (0x02)\r
+#define KEY_2          (0x03)\r
+#define KEY_3          (0x04)\r
+#define KEY_4          (0x05)\r
+#define KEY_5          (0x06)\r
+#define KEY_6          (0x07)\r
+#define KEY_7          (0x08)\r
+#define KEY_8          (0x09)\r
+#define KEY_9          (0x0A)\r
+#define KEY_0          (0x0B)\r
+#define KEY_DASH               (0x0C)  // -_\r
+#define KEY_EQUAL              (0x0D)  // =+\r
+#define KEY_LBRACKET   (0x1A)  // [{\r
+#define KEY_RBRACKET   (0x1B)  // ]}\r
+#define KEY_SEMICOLON  (0x27)  // ;:\r
+#define KEY_RQUOTE     (0x28)  // '"\r
+#define KEY_LQUOTE     (0x29)  // `~\r
+#define KEY_PERIOD     (0x33)  // .>\r
+#define KEY_COMMA              (0x34)  // ,<\r
+#define KEY_SLASH              (0x35)  // /?\r
+#define KEY_BACKSLASH  (0x2B)  // \|\r
+#define KEY_F1         (0x3B)\r
+#define KEY_F2         (0x3C)\r
+#define KEY_F3         (0x3D)\r
+#define KEY_F4         (0x3E)\r
+#define KEY_F5         (0x3F)\r
+#define KEY_F6         (0x40)\r
+#define KEY_F7         (0x41)\r
+#define KEY_F8         (0x42)\r
+#define KEY_F9         (0x43)\r
+#define KEY_F10                (0x44)\r
+#define KEY_ESC                (0x01)\r
+#define KEY_BACKSPACE   (0x0E)\r
+#define KEY_TAB                (0x0F)\r
+#define KEY_ENTER              (0x1C)\r
+#define KEY_CONTROL    (0x1D)\r
+#define KEY_LSHIFT     (0x2A)\r
+#define KEY_RSHIFT     (0x36)\r
+#define KEY_PRTSC              (0x37)\r
+#define KEY_ALT                (0x38)\r
+#define KEY_SPACE              (0x39)\r
+#define KEY_CAPSLOCK   (0x3A)\r
+#define KEY_NUMLOCK    (0x45)\r
+#define KEY_SCROLLLOCK (0x46)\r
+#define KEY_HOME               (0x47)\r
+#define KEY_UP         (0x48)\r
+#define KEY_PGUP               (0x49)\r
+#define KEY_MINUS              (0x4A)\r
+#define KEY_LEFT               (0x4B)\r
+#define KEY_CENTER     (0x4C)\r
+#define KEY_RIGHT              (0x4D)\r
+#define KEY_PLUS               (0x4E)\r
+#define KEY_END                (0x4F)\r
+#define KEY_DOWN               (0x50)\r
+#define KEY_PGDOWN     (0x51)\r
+#define KEY_INS                (0x52)\r
+#define KEY_DEL                (0x53)\r
+\r
+#define KEY_LWIN               (0x73)\r
+#define KEY_RWIN               (0x74)\r
+#define KEY_MENU               (0x75)\r
+*/\r
+\r
+//static word far* clockw= (word far*) 0x046C; /* 18.2hz clock */\r
+extern int                     profilehandle,debughandle;      //make it into game global\r
+\r
+//#define OLD16_VL\r
+\r
+#define        nil     ((void *)0)\r
+\r
+#ifdef __WATCOMC__\r
+//----#define _FCORELEFT 0x90000UL+16UL\r
+extern union REGS CPURegs;\r
+\r
+#define _AX CPURegs.x.ax\r
+#define _BX CPURegs.x.bx\r
+#define _CX CPURegs.x.cx\r
+#define _DX CPURegs.x.dx\r
+\r
+#define _SI CPURegs.x.si\r
+#define _DI CPURegs.x.di\r
+\r
+#define _AH CPURegs.h.ah\r
+#define _AL CPURegs.h.al\r
+#define _BH CPURegs.h.bh\r
+#define _BL CPURegs.h.bl\r
+#define _CH CPURegs.h.ch\r
+#define _CL CPURegs.h.cl\r
+#define _DH CPURegs.h.dh\r
+#define _DL CPURegs.h.dl\r
+\r
+#define _CFLAG CPURegs.x.cflag\r
+\r
+#define geninterrupt(n) int86(n,&CPURegs,&CPURegs);\r
+\r
+\r
+typedef union REGPACK  regs_t;\r
+#endif\r
+\r
+// local function //\r
+long int filesize(FILE *fp);\r
+void clrstdin();\r
+char *remove_ext(char* mystr, char dot, char sep);\r
+void rotateR(byte arr[], byte n);\r
+void rotateL(byte arr[], byte n);\r
+void printmeminfoline(byte *strc, const byte *pee, size_t h_total, size_t h_used, size_t h_free);\r
+int US_CheckParm(char *parm,char **strings);\r
+byte dirchar(byte in);\r
+void print_mem(void const *vp, size_t n);\r
+void hres (void);\r
+void regidump();\r
+\r
+//from https://stackoverflow.com/questions/111928/is-there-a-printf-converter-to-print-in-binary-format\r
+//printf("Leading text "BYTE_TO_BINARY_PATTERN, BYTE_TO_BINARY(byte));\r
+//For multi-byte types\r
+//printf("m: "BYTE_TO_BINARY_PATTERN" "BYTE_TO_BINARY_PATTERN"\n",             BYTE_TO_BINARY(m>>8), BYTE_TO_BINARY(m));\r
+#define BYTE_TO_BINARY_PATTERN "%c%c%c%c%c%c%c%c"\r
+#define BYTE_TO_BINARY(byte)   \\r
+       (byte & 0x80 ? '1' : '0'),      \\r
+       (byte & 0x40 ? '1' : '0'),      \\r
+       (byte & 0x20 ? '1' : '0'),      \\r
+       (byte & 0x10 ? '1' : '0'),      \\r
+       (byte & 0x08 ? '1' : '0'),      \\r
+       (byte & 0x04 ? '1' : '0'),      \\r
+       (byte & 0x02 ? '1' : '0'),      \\r
+       (byte & 0x01 ? '1' : '0')\r
+\r
+#define WORD_TO_BINARY_PATTERN "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c"\r
+#define WORD_TO_BINARY(word)   \\r
+       (word & 0x8000 ? '1' : '0'),    \\r
+       (word & 0x4000 ? '1' : '0'),    \\r
+       (word & 0x2000 ? '1' : '0'),    \\r
+       (word & 0x1000 ? '1' : '0'),    \\r
+       (word & 0x0800 ? '1' : '0'),    \\r
+       (word & 0x0400 ? '1' : '0'),    \\r
+       (word & 0x0200 ? '1' : '0'),    \\r
+       (word & 0x0100 ? '1' : '0'),    \\r
+       (word & 0x0080 ? '1' : '0'),    \\r
+       (word & 0x0040 ? '1' : '0'),    \\r
+       (word & 0x0020 ? '1' : '0'),    \\r
+       (word & 0x0010 ? '1' : '0'),    \\r
+       (word & 0x0008 ? '1' : '0'),    \\r
+       (word & 0x0004 ? '1' : '0'),    \\r
+       (word & 0x0002 ? '1' : '0'),    \\r
+       (word & 0x0001 ? '1' : '0')\r
+\r
+#define NIBBLE_TO_BINARY_PATTERN "%c%c%c%c"\r
+#define NIBBLE_TO_BINARY(nibble)       \\r
+       (nibble & 0x08 ? '1' : '0'),    \\r
+       (nibble & 0x04 ? '1' : '0'),    \\r
+       (nibble & 0x02 ? '1' : '0'),    \\r
+       (nibble & 0x01 ? '1' : '0')\r
+\r
+#define BOOLEAN_TO_BINARY_PATTERN "%c"\r
+#define BOOLEAN_TO_BINARY(boolean)     \\r
+       (boolean & 0x01 ? '1' : '0')\r
+\r
+#define PRINT_OPAQUE_STRUCT(p)  print_mem((p), sizeof(*(p)))\r
+\r
+#endif/*__16_HEAD_H__*/\r