DEADSOFTWARE

map.h memory.c memory.h moved to repo. Added license notification
authorAndriy Shinkarchuck <adriano32.gnu@gmail.com>
Sun, 24 Jul 2011 16:30:51 +0000 (19:30 +0300)
committerAndriy Shinkarchuck <adriano32.gnu@gmail.com>
Sun, 24 Jul 2011 16:30:51 +0000 (19:30 +0300)
map.h [new file with mode: 0755]
memory.c [new file with mode: 0755]
memory.h [new file with mode: 0755]

diff --git a/map.h b/map.h
new file mode 100755 (executable)
index 0000000..05d1816
--- /dev/null
+++ b/map.h
@@ -0,0 +1,177 @@
+/**************************************************************************\
+*                                                                          *
+*  Форматы карт Doom'а 2D                                       Версия 2   *
+*                                                                          *
+*  Prikol Software                                           10.VII.1996   *
+*                                                                          *
+*  Разрешается свободно распространять этот файл, при условии сохранения   *
+*  ссылки на Prikol Software, версии и даты выпуска файла.                 *
+*                                                                          *
+*  Этот include-файл расчитан на WATCOM C 10.0 и DOS4GW                    *
+*  Вы можете переделать его на любой другой язык/компилятор, но сохраните  *
+*  этот файл (если собираетесь его распространять), а в своем укажите,     *
+*  что он изменен (переделан).                                             *
+*                                                                          *
+\**************************************************************************/
+
+/*
+   Copyright (C) Prikol Software 1996-1997
+   Copyright (C) Aleksey Volynskov 1996-1997
+   Copyright (C) <ARembo@gmail.com> 2011
+
+   This file is part of the Doom2D:Rembo project.
+
+   Doom2D:Rembo is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License version 2 as
+   published by the Free Software Foundation.
+
+   Doom2D:Rembo 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 St, Fifth Floor, Boston, MA  02110-1301 USA
+*/
+
+#pragma pack(1)
+
+/* Старый формат - версия 1.04 alpha (и раньше)
+
+  названия текстур (old_wall_t)
+    кончается пустой строкой (old_wall_t.n[0]==0)
+
+  фон           - массив 100x100 байт - номера текстур
+
+  тип стенок    - массив 100x100 байт:
+    0 - пусто
+    1 - стена
+    2 - закрытая дверь
+    3 - открытая дверь
+    4 - ступенька
+
+  передний план - массив 100x100 байт - номера текстур
+
+  вещи, монстры и др. (old_thing_t)
+    кончается нулевым типом (old_thing_t.t==0)
+
+  переключатели (old_switch_t)
+    кончается нулевым типом (old_switch_t.t==0)
+
+*/
+
+typedef struct{
+  char n[8];                   // название текстуры
+  char t;                      // тип: 0-сплошная 1-"решётка"
+}old_wall_t;
+
+typedef struct{
+  short x,y;                   // координаты
+  short t;                     // тип
+  unsigned short f;            // флаги
+}old_thing_t;
+
+typedef struct{
+  unsigned char x,y;           // координаты/8
+  unsigned char t;             // тип
+  unsigned char tm;            // должно быть 0
+  unsigned char a,b;           // обычно - координаты/8 двери
+  unsigned short c;            // не используется (вроде бы)
+}old_switch_t;
+
+/* Новый формат - начиная с версии 1.05 alpha
+
+  заголовок карты (map_header_t)
+
+  блоки (map_block_t)
+    кончается блоком MB_END (map_block_t.t==MB_END)
+
+*/
+
+typedef struct{
+  char id[8];                  // "подпись" - "Doom2D\x1A"
+  short ver;                   // версия карты
+}map_header_t;
+
+typedef struct{
+  short t;                     // тип блока
+  short st;                    // подтип (метод упаковки, например)
+                               // если не используется, то должен быть 0
+                               // (для будущей совместимости)
+  int sz;                      // размер (сколько байт после этой структуры)
+}map_block_t;
+
+enum{
+  MB_COMMENT=-1,MB_END=0,
+  MB_WALLNAMES,MB_BACK,MB_WTYPE,MB_FRONT,MB_THING,MB_SWITCH,
+  MB_MUSIC,MB_SKY,
+  MB_SWITCH2,
+  MB__UNKNOWN
+};
+
+/* Версия 0  (Doom2D версии 1.05 alpha)
+
+  MB_COMMENT - комментарий
+
+  MB_WALLNAMES - названия текстур (см. старую версию)
+    количество - по размеру блока
+
+  MB_BACK,MB_WTYPE,MB_FRONT - фон,тип,передний план (см. старую версию)
+    подтип 0 - без упаковки (как в старой версии)
+
+  MB_THING - вещи,монстры и др. (см. старую версию)
+    количество - по размеру блока
+
+  MB_SWITCH - переключатели (см. старую версию)
+    количество - по размеру блока
+
+*/
+
+/* Версия 1  (Doom2D версии 1.06 alpha)
+
+  MB_WALLNAMES
+    добавлены псевдо-текстуры _WATER_*
+      где * это 0=вода,1=кислота,2=кровь
+
+  MB_WTYPE
+    добавлен новый тип 5 - вода
+
+  MB_MUSIC - новый блок - название музыки (8 байт)
+
+  MB_SKY - новый блок - тип неба (2 байта - short)
+    1 = облака
+    2 = город
+    3 = ад
+
+*/
+
+#define SW_PL_PRESS            1
+#define SW_MN_PRESS            2
+#define SW_PL_NEAR             4
+#define SW_MN_NEAR             8
+#define SW_KEY_R               16
+#define SW_KEY_G               32
+#define SW_KEY_B               64
+
+typedef struct{
+  unsigned char x,y;           // координаты/8
+  unsigned char t;             // тип
+  unsigned char tm;            // должно быть 0
+  unsigned char a,b;           // обычно - координаты/8 двери
+  unsigned short c;            // не используется (вроде бы)
+  unsigned char f;             // флаги
+}switch2_t;
+
+/* Версия 2  (Doom2D версии 1.17 alpha)
+
+  блок MB_SWITCH заменен на MB_SWITCH2 (см. switch2_t)
+
+*/
+
+#define LAST_MAP_VER 2 // Самая последняя версия карты
+
+#pragma pack()
+
+/*  КОНЕЦ  */
diff --git a/memory.c b/memory.c
new file mode 100755 (executable)
index 0000000..23e5cbd
--- /dev/null
+++ b/memory.c
@@ -0,0 +1,94 @@
+/*
+   Copyright (C) Prikol Software 1996-1997
+   Copyright (C) Aleksey Volynskov 1996-1997
+   Copyright (C) <ARembo@gmail.com> 2011
+
+   This file is part of the Doom2D:Rembo project.
+
+   Doom2D:Rembo is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License version 2 as
+   published by the Free Software Foundation.
+
+   Doom2D:Rembo 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 St, Fifth Floor, Boston, MA  02110-1301 USA
+*/
+
+#include "glob.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <malloc.h>
+#include <string.h>
+#include "error.h"
+#include "files.h"
+#include "memory.h"
+
+dword dpmi_memavl(void);
+
+extern int d_start,d_end;
+
+extern mwad_t wad[];
+
+static byte m_active=FALSE;
+
+static void *resp[MAX_WAD];
+static short resl[MAX_WAD];
+
+void M_startup(void) {
+  if(m_active) return;
+  logo("M_startup: настройка памяти\n");
+  memset(resp,0,sizeof(resp));
+  memset(resl,0,sizeof(resl));
+  //  logo("  свободно DPMI-памяти: %uK\n",dpmi_memavl()>>10);
+  m_active=TRUE;
+}
+
+void M_shutdown(void) {
+
+  if(!m_active) return;
+  m_active=FALSE;
+}
+
+static void allocres(int h) {
+  int *p,s;
+
+  if(h>d_start && h<d_end) s=1; else s=0;
+  if(!(p=malloc(wad[h].l+4+s*8)))
+    ERR_fatal("M_lock: не хватает памяти");
+  *p=h;
+  ++p;
+  resp[h]=p;
+  if(s) {
+    p[0]=p[1]=p[2]=p[3]=0;
+    F_loadres(h,p,0,2);
+    F_loadres(h,p+1,2,2);
+    F_loadres(h,p+2,4,2);
+    F_loadres(h,p+3,6,2);
+    F_loadres(h,p+4,8,wad[h].l-8);
+  }else F_loadres(h,p,0,wad[h].l);
+}
+
+void *M_lock(int h) {
+  if(h==-1 || h==0xFFFF) return NULL;
+  h&=-1-0x8000;
+  if(h>=MAX_WAD) ERR_fatal("M_lock: странный номер ресурса");
+  if(!resl[h]) if(!resp[h]) allocres(h);
+  ++resl[h];
+  return resp[h];
+}
+
+void M_unlock(void *p) {
+  int h;
+
+  if(!p) return;
+  h=((int*)p)[-1];
+  if(h>=MAX_WAD) ERR_fatal("M_unlock: странный номер ресурса");
+  if(!resl[h]) return;
+  --resl[h];
+}
diff --git a/memory.h b/memory.h
new file mode 100755 (executable)
index 0000000..121490b
--- /dev/null
+++ b/memory.h
@@ -0,0 +1,28 @@
+/*
+   Copyright (C) Prikol Software 1996-1997
+   Copyright (C) Aleksey Volynskov 1996-1997
+   Copyright (C) <ARembo@gmail.com> 2011
+
+   This file is part of the Doom2D:Rembo project.
+
+   Doom2D:Rembo is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License version 2 as
+   published by the Free Software Foundation.
+
+   Doom2D:Rembo 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 St, Fifth Floor, Boston, MA  02110-1301 USA
+*/
+
+// High-level memory allocation
+
+void M_startup(void);
+void M_shutdown(void);
+void *M_lock(int);
+void M_unlock(void *);