add dos map_edit sources

from the book cd under /ACK/DOS/MAP_EDIT/SOURCE
This commit is contained in:
Gered 2019-11-02 18:16:05 -04:00
parent 45007835fa
commit cf7cd898cd
29 changed files with 6797 additions and 0 deletions

BIN
map_edit/font6x9.bbm Normal file

Binary file not shown.

BIN
map_edit/font6x9.lbm Normal file

Binary file not shown.

96
map_edit/iff.h Normal file
View file

@ -0,0 +1,96 @@
#ifndef NULL
#define NULL 0
#endif
#ifndef FALSE
#define FALSE 0
#define TRUE 1
#endif
#define LONG unsigned long
#define ULONG unsigned long
#define UBYTE unsigned char
#define UWORD unsigned short
#define DWORD unsigned long
long ByteFlipLong(long);
UCHAR *Readiff(char *); /* this returns back a bitmap with a picture in it*/
typedef LONG ID; /* An ID is four printable ASCII chars like FORM or DPPV */
#define MakeID(d,c,b,a) ((DWORD)(a)<<24 | (DWORD)(b)<<16 | (DWORD)(c)<<8 | (DWORD)(d) )
#define FORM MakeID('F','O','R','M')
#define PROP MakeID('P','R','O','P')
#define LIST MakeID('L','I','S','T')
#define CAT MakeID('C','A','T',' ')
#define FILLER MakeID(' ',' ',' ',' ')
typedef struct
{
ID type;
long cksize;
ID subtype;
} form_chunk;
typedef struct {
ID ckID;
LONG ckSize;
} ChunkHeader;
typedef struct {
ID ckID;
LONG ckSize;
UBYTE ckData[ 1 /*REALLY: ckSize*/ ];
} Chunk;
#define ID_PBM MakeID('P','B','M',' ')
#define ID_ILBM MakeID('I','L','B','M')
#define ID_BMHD MakeID('B','M','H','D')
#define ID_CMAP MakeID('C','M','A','P')
#define ID_GRAB MakeID('G','R','A','B')
#define ID_DEST MakeID('D','E','S','T')
#define ID_SPRT MakeID('S','P','R','T')
#define ID_CAMG MakeID('C','A','M','G')
#define ID_BODY MakeID('B','O','D','Y')
/* ---------- BitMapHeader ---------------------------------------------*/
typedef UBYTE Masking; /* Choice of masking technique.*/
#define mskNone 0
#define mskHasMask 1
#define mskHasTransparentColor 2
#define mskLasso 3
#define cmpNone 0
#define cmpByteRun1 1
/* A BitMapHeader is stored in a BMHD chunk. */
typedef struct {
UWORD w, h; /* raster width & height in pixels */
UWORD x, y; /* position for this image */
UBYTE nPlanes; /* # source bitplanes */
UBYTE masking; /* masking technique */
UBYTE compression; /* compression algoithm */
UBYTE pad1; /* UNUSED. For consistency, put 0 here.*/
UWORD transparentColor; /* transparent "color number" */
UBYTE xAspect, yAspect; /* aspect ratio, a rational number x/y */
UWORD pageWidth, pageHeight; /* source "page" size in pixels */
} BitMapHeader;
/* RowBytes computes the number of bytes in a row, from the width in pixels.*/
#define RowBytes(w) (((w) + 15) >> 4 << 1)
/* A CMAP chunk is a packed array of ColorRegisters (3 bytes each). */
typedef struct {
UBYTE red, green, blue; /* MUST be UBYTEs so ">> 4" won't sign extend.*/
} ColorRegister;
/* Use this constant instead of sizeof(ColorRegister). */
#define sizeofColorRegister 3
long ByteFlipLong(long);
void ByteFlipShort(short *);
short iffswab(unsigned short);
short swab(unsigned short);


BIN
map_edit/kit.map Normal file

Binary file not shown.

BIN
map_edit/kitmap.sav Normal file

Binary file not shown.

BIN
map_edit/m1.bbm Normal file

Binary file not shown.

2646
map_edit/m1.c Normal file

File diff suppressed because it is too large Load diff

222
map_edit/m1.h Normal file
View file

@ -0,0 +1,222 @@
// Header file for ACK-3D Map Editor
// Author: Lary Myers
// Copyright (c) 1994
#define RES_SMFONT 0 // Resource ID's
#define RES_MDFONT 1
#define RES_2DSCREEN 2
#define RES_3DSCREEN 3
#define RES_SELSCREEN 4
#define BM_X 272
#define BM_Y 17
#define BM_NUM_X 308
#define BM_NUM_Y 30
#define MAP_X 0
#define MAP_Y 0
#define MAP_X1 256
#define MAP_Y1 160
#define MINI_X 255
#define MINI_Y 135
#define MINI_X1 (MINI_X+63)
#define MINI_Y1 (MINI_Y+63)
#define MAPXY_X 217
#define MAPXY_Y 165
#define MAPXY_X1 231
#define MAPXY_Y1 165
#define CURXY_X 217
#define CURXY_Y 173
#define CURXY_X1 231
#define CURXY_Y1 173
#define GD_FWT 32
#define GD_FHT 32
#define GD_HWT 16
#define GD_HHT 16
#define VM_2D 0 // View mode is 2D
#define VM_3D 1 // View mode is 3D
#define VT_MAP 0 // Viewing map
#define VT_FLOOR 1 // Viewing floor
#define VT_CEIL 2 // Viewing ceiling
#define ED_WALLS 0 // Editing walls
#define ED_OBJECTS 1 // Editing objects
#define AI_UP 1 // Action index's
#define AI_RIGHT 2
#define AI_DOWN 3
#define AI_LEFT 4
#define AI_MINI 5
#define AI_SELECT 6
#define AI_VIEW 7
#define AI_FLOORS 8
#define AI_SAVE 9
#define AI_MAP 10
#define AI_WALLS 11
#define AI_CEILING 12
#define AI_OBJECTS 13
#define AI_OPTIONS 14
#define AI_EDITWIN 15
#define AI_BM_UP 16
#define AI_BM_DOWN 17
#define AI_EXIT 99
#define OPT_NORMAL 0 // Selectable option ID's
#define OPT_SLIDING 1
#define OPT_SPLIT 2
#define OPT_SECRET 3
#define OPT_LOCKED 4
#define OPT_TRANS 5
#define OPT_MULTI 6
#define OPT_RAISED 7
#define OPT_CANCEL 8
#define OPT_FILL 9
#define OPT_BORDER 10
#define OPT_CLEAR 11
#define OPT_PASSABLE 12
#define OPT_PALETTE 13
#define OPT_MAPPAL 14
#define OPT_MAX 15 // Total number of options above
#define BM_COLOR_X 261 // Current bitmap color coordinates
#define BM_COLOR_Y 17
#define BM_COLOR_X1 267
#define BM_COLOR_Y1 48
typedef struct {
short Action;
short x;
short y;
short x1;
short y1;
} HS;
typedef struct {
short id;
int xBias;
int yBias;
UCHAR Flags;
char *Text;
} OPTS;
#define OPTF_CHECKED 0x80 // Button will have a checkmark
#define VIDSEG (UCHAR *)0xA0000
#define MAX_MULTI 3
#define KEY_ESC 0x011B
#define KEY_SPACE 0x3920
#define KEY_F2 0x3C00
#define KEY_F3 0x3D00
#define KEY_UP 0x4800
#define KEY_RIGHT 0x4D00
#define KEY_DOWN 0x5000
#define KEY_LEFT 0x4B00
#define KEY_PGUP 0x4900
#define KEY_PGDN 0x5100
//=============================================================================
// Prototypes;
//=============================================================================
//-----------------------------------------------------------------------------
// Functions in mouse.c
//-----------------------------------------------------------------------------
short MouseInstalled(void);
void ShowMouse(void);
void HideMouse(void);
short ReadMouseCursor(short *mrow,short *mcol);
short ReadMouseButtons(void);
void SetMouseCursor(short mrow,short mcol);
void SetMouseMinMaxColumns(short mincol,short maxcol);
void SetMouseMinMaxRows(short minrow,short maxrow);
void SetMouseShape(short hsrow,short hscol,char far *mask);
void MouseReleased(void);
//-----------------------------------------------------------------------------
// Functions in m1.c
//-----------------------------------------------------------------------------
short GetAction(short mx,short my);
short GetSelAction(short mx,short my);
void DrawYline(int x,int y);
void DrawXline(int x,int y);
void DrawGridBlock(int x,int y);
void DrawYbitmap(int x,int y,UCHAR *bm,UCHAR Shade,int TransFlag);
void DrawXbitmap(int x,int y,UCHAR *bm,UCHAR Shade,int TransFlag);
void ClearGridArea(UCHAR *BufPtr);
void RefreshGrid(void);
void DrawGrid3D(void);
void Draw2Dxline(int x,int y,UCHAR color);
void DrawxLineMulti(int x,int y,UCHAR color);
void Draw2Dyline(int x,int y,UCHAR color);
void DrawyLineMulti(int x,int y,UCHAR color);
void DrawGrid2D(void);
void DrawTinyBitmap(int x,int y,UCHAR *bm);
void DrawFloorCeil(void);
void DrawObjects(void);
void DrawGrid(void);
void ShowScreen(char *Name);
void ShowBitmap(int x,int y,UCHAR *bm);
short LoadGridMap(char *Name);
short SaveGridMap(char *Name);
void ShowCurrentBitmap(void);
short GetActionIndex(short action);
void PressButton(short ActionCode);
void ReleaseButton(short ActionCode);
void UpdateScreen(void);
int GetGridPos(short mx,short my);
void PutCode(short mx,short my);
void UpdatePosn(short mx,short my);
void ShowSelBitmaps(UCHAR bCode);
int SelectScreen(void);
UCHAR GetIndexColor(short index);
UCHAR GetIndexColor2(short index);
void DrawBackBox(int x,int y,int x1,int y1);
void ShowButtons(OPTS *op,HS *hs,int x,int y,int xAmt,int yAmt);
int ShowOptions(void);
void FillMap(UCHAR bCode);
void DrawArrow(int x,int y,UCHAR color);
int SelectGridBox(void);
void EditMulti(int mode,short mx,short my);
//-----------------------------------------------------------------------------
// Functions in m1util.c
//-----------------------------------------------------------------------------
void SoundBeep(void);
short LoadSmallFont(void);
short LoadMedFont(void);
void mdWriteChar(short x,short y,unsigned char ch);
short mdWriteString(short x,short y,char *s);
void smWriteChar(short x,short y,unsigned char ch);
short smWriteString(short x,short y,char *s);
void smWriteHUD(short x,short y,UCHAR color,char *s);
void BlitBlock(int x,int y,int x1,int y1,UCHAR *buf);
void DrawFillBox(int x,int y,int x1,int y1,UCHAR color);
void DrawHorzLine(int x,int y,int x1,UCHAR color);
void DrawVertLine(int x,int y,int y1,UCHAR color);
void DrawBox(int x,int y,int x1,int y1,UCHAR color);
UCHAR GetColor(int x,int y);
void SaveVideo(UCHAR *buf);
void RestoreVideo(UCHAR *buf);
void CreateButton(int x,int y,HS *hs,char *s);
int QueryBox(int x,int y,char *Msg);
//-----------------------------------------------------------------------------
// Functions in m1read.c
//-----------------------------------------------------------------------------
short LoadDescFile(char *fName);

BIN
map_edit/m1.lbm Normal file

Binary file not shown.

BIN
map_edit/m12.bbm Normal file

Binary file not shown.

BIN
map_edit/m12d.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

BIN
map_edit/m12d.lbm Normal file

Binary file not shown.

BIN
map_edit/m12d.pcx Normal file

Binary file not shown.

BIN
map_edit/m13d.lbm Normal file

Binary file not shown.

8
map_edit/m1files.dat Normal file
View file

@ -0,0 +1,8 @@
; Resource files for ACK3D Map Editor
SPFONT.BBM
FONT6X9.BBM
M12D.LBM
M13D.LBM
M1SEL.LBM


354
map_edit/m1read.c Normal file
View file

@ -0,0 +1,354 @@
// Map Editor for Animation Construction Kit 3D
// ASCII Reader program
// Author: Lary Myers
// Copyright (c) 1994
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#include <dos.h>
#include <mem.h>
#include <io.h>
#include <fcntl.h>
#include <time.h>
#include <string.h>
#include <process.h>
#include <bios.h>
#include <sys\stat.h>
#include "ack3d.h"
#include "ackeng.h"
extern UCHAR *Bitmaps[];
extern UCHAR *ObjBitmaps[];
extern UCHAR ObjbmNum[];
extern char MapName[];
extern char PalName[];
short ReadErrorCode;
/****************************************************************************
** **
****************************************************************************/
char *GetExtent(char *s)
{
char *e;
e = strchr(s,'.');
if (e == NULL)
return(s);
e++;
return(e);
}
/****************************************************************************
** **
****************************************************************************/
short LoadBitmap(short BitmapNumber,char *BitmapName,short BitmapType)
{
short LoadType;
short handle;
short x,y;
short sPos,dPos;
unsigned char ch;
unsigned char *bmp;
LoadType = 0;
if (!(stricmp(GetExtent(BitmapName),"BBM")))
LoadType = 1;
if (!(stricmp(GetExtent(BitmapName),"GIF")))
LoadType = 2;
if (LoadType)
{
if (LoadType == 1)
bmp = AckReadiff(BitmapName);
else
bmp = AckReadgif(BitmapName);
if (bmp == NULL)
{
ReadErrorCode = ERR_NOMEMORY;
return(-1);
}
if (BitmapType == TYPE_WALL)
Bitmaps[BitmapNumber] = bmp;
if (BitmapType == TYPE_OBJECT)
ObjBitmaps[BitmapNumber] = bmp;
return(0);
}
bmp = malloc(4096);
if (bmp == NULL)
{
ReadErrorCode = ERR_NOMEMORY;
return(-1);
}
if (BitmapType == TYPE_WALL)
Bitmaps[BitmapNumber] = bmp;
if (BitmapType == TYPE_OBJECT)
ObjBitmaps[BitmapNumber] = bmp;
handle = open(BitmapName,O_RDWR|O_BINARY);
if (handle < 1)
{
free(bmp);
ReadErrorCode = ERR_BADFILE;
return(-1);
}
read(handle,bmp,4); /* Skip width and height for now */
read(handle,bmp,4096);
close(handle);
return(0);
}
/****************************************************************************
** **
****************************************************************************/
char *StripEndOfLine(char *s)
{
short len;
char ch;
len = strlen(s);
while (--len >= 0)
{
ch = s[len];
if (ch != ' ' && ch != ';' && ch != '\t' && ch != 13 && ch != 10)
break;
s[len] = '\0';
}
return(s);
}
/****************************************************************************
** **
****************************************************************************/
char *SkipSpaces(char *s)
{
while (*s == ' ' || *s == '\t' || *s == ',')
strcpy(s,&s[1]);
return(s);
}
/****************************************************************************
** **
****************************************************************************/
char *AddExtent(char *s,char *ext)
{
if (strchr(s,'.') == NULL)
strcat(s,ext);
return(s);
}
/****************************************************************************
** **
****************************************************************************/
char *CopyToComma(char *dest,char *src)
{
char ch;
while (*src)
{
ch = *src++;
if (ch == ' ' || ch == '\t' || ch == ',')
break;
*dest++ = ch;
}
*dest = '\0';
return(src);
}
/****************************************************************************
** **
****************************************************************************/
short LoadDescFile(char *fName)
{
FILE *fp;
short Mode,fMode,result;
short bType,value,bNum,ObjIndex;
char LineBuf[128];
char fBuf[128];
char *s;
fp = fopen(fName,"rt");
if (fp == NULL)
{
printf("Unable to open description file: %s\n",fName);
return(-1);
}
printf("Processing description file %s ",fName);
ObjIndex = 0;
Mode = 0;
result = 0;
*MapName = '\0';
while (1)
{
if (feof(fp))
break;
*LineBuf = '\0';
fgets(LineBuf,127,fp);
if (*LineBuf == ';')
continue;
StripEndOfLine(LineBuf);
SkipSpaces(LineBuf);
if (!strlen(LineBuf))
continue;
printf(".");
if (!stricmp(LineBuf,"WALLS:"))
{
bType = TYPE_WALL;
Mode = 1;
continue;
}
if (!stricmp(LineBuf,"ENDWALLS:"))
{
if (Mode != 1)
{
printf("Invalid place for command: %s.\n",LineBuf);
result = -1;
}
Mode = 0;
continue;
}
if (!stricmp(LineBuf,"OBJECTS:"))
{
bType = TYPE_OBJECT;
Mode = 2;
continue;
}
if (!stricmp(LineBuf,"FILES:"))
{
fMode = 1;
continue;
}
if (!stricmp(LineBuf,"ENDFILES:"))
{
fMode = 0;
continue;
}
if (!strnicmp(LineBuf,"PALFILE:",8))
{
strcpy(PalName,SkipSpaces(&LineBuf[8]));
continue;
}
if (!strnicmp(LineBuf,"MAPFILE:",8))
{
strcpy(MapName,SkipSpaces(&LineBuf[8]));
continue;
}
if (Mode == 2)
{
if (!strnicmp(LineBuf,"NUMBER:",7))
{
value = atoi(&LineBuf[7]);
if (value < 1 || value >= 255)
{
printf("Invalid object number:\n%s\n",LineBuf);
result = -1;
break;
}
ObjIndex = value;
continue;
}
if (!strnicmp(LineBuf,"BITMAPS:",8))
{
strcpy(LineBuf,SkipSpaces(&LineBuf[8]));
value = 0;
strcpy(LineBuf,CopyToComma(fBuf,LineBuf));
SkipSpaces(fBuf);
bNum = atoi(fBuf);
if (bNum < 1 || bNum > 255)
{
printf("Invalid bitmap number for object: %d\n",ObjIndex);
result = -1;
break;
}
ObjbmNum[ObjIndex] = bNum;
continue;
}
}
if (fMode)
{
value = atoi(LineBuf);
if (value < 1 || value > 255)
{
printf("Invalid number for object: %s.\n",LineBuf);
result = -1;
continue;
}
s = strpbrk(LineBuf,", \t");
if (s == NULL)
{
printf("Unable to locate bitmap name for object: %s.\n",LineBuf);
result = -1;
continue;
}
strcpy(fBuf,SkipSpaces(s));
AddExtent(fBuf,".img");
if (LoadBitmap(value,fBuf,bType))
{
printf("Error loading bitmap \"%s\".\n",fBuf);
result = -1;
}
continue;
}
}
fclose(fp);
printf("done\n");
return(result);
}

BIN
map_edit/m1sel.lbm Normal file

Binary file not shown.

564
map_edit/m1util.c Normal file
View file

@ -0,0 +1,564 @@
// Map Editor for Animation Construction Kit 3D
// Utilities
// Author: Lary Myers
// Copyright (c) 1994
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#include <dos.h>
#include <mem.h>
#include <io.h>
#include <fcntl.h>
#include <time.h>
#include <string.h>
#include <process.h>
#include <bios.h>
#include <sys\stat.h>
#include "ack3d.h"
#include "ackeng.h"
#include "m1.h"
char *smFont;
char *mdFont;
UCHAR FontUseColor;
UCHAR FontTransparent;
UCHAR FontColor;
UCHAR TextBGcolor;
UCHAR ButtonColor;
UCHAR ButtonUpperColor;
UCHAR ButtonLowerColor;
UCHAR BoxColor;
//=============================================================================
//
//=============================================================================
void SoundBeep(void)
{
sound(440);
delay(50);
nosound();
}
//=============================================================================
//
//=============================================================================
short LoadSmallFont(void)
{
short ht,wt;
int len;
ht = 2;
smFont = AckReadiff((char *)RES_SMFONT); // "spfont.bbm");
if (smFont == NULL)
return(-1);
ht = (*(short *)smFont);
wt = (*(short *)&smFont[2]);
len = ht * wt;
memmove(smFont,&smFont[4],len);
return(0);
}
//=============================================================================
//
//=============================================================================
short LoadMedFont(void)
{
short ht,wt;
int len;
ht = 2;
mdFont = AckReadiff((char *)RES_MDFONT); // "font6x9.bbm");
if (mdFont == NULL)
return(-1);
ht = (*(short *)mdFont);
wt = (*(short *)&mdFont[2]);
len = ht * wt;
memmove(mdFont,&mdFont[4],len);
return(0);
}
//=============================================================================
//
//=============================================================================
void mdWriteChar(short x,short y,unsigned char ch)
{
int FontOffset,VidOffset;
int row,col;
UCHAR *Video;
VidOffset = (y * 320) + x;
Video = VIDSEG;
Video += VidOffset;
FontOffset = ((ch-32) * 6);
if (ch >= 'A')
FontOffset += 1386;
for (row = 0; row < 8; row++)
{
if (FontUseColor)
{
ch = mdFont[FontOffset];
if (ch == ButtonColor) ch = TextBGcolor;
Video[0] = ch;
ch = mdFont[FontOffset+1];
if (ch == ButtonColor) ch = TextBGcolor;
Video[1] = ch;
ch = mdFont[FontOffset+2];
if (ch == ButtonColor) ch = TextBGcolor;
Video[2] = ch;
ch = mdFont[FontOffset+3];
if (ch == ButtonColor) ch = TextBGcolor;
Video[3] = ch;
ch = mdFont[FontOffset+4];
if (ch == ButtonColor) ch = TextBGcolor;
Video[4] = ch;
ch = mdFont[FontOffset+5];
if (ch == ButtonColor) ch = TextBGcolor;
Video[5] = ch;
}
else
{
Video[0] = mdFont[FontOffset];
Video[1] = mdFont[FontOffset+1];
Video[2] = mdFont[FontOffset+2];
Video[3] = mdFont[FontOffset+3];
Video[4] = mdFont[FontOffset+4];
Video[5] = mdFont[FontOffset+5];
}
Video += 320;
FontOffset += 198;
}
}
//=============================================================================
//
//=============================================================================
short mdWriteString(short x,short y,char *s)
{
short OrgX;
char ch;
OrgX = x;
while (*s)
{
ch = *s++;
if (ch == 10)
{
x = OrgX;
y += 10;
continue;
}
if (ch < ' ')
continue;
ch = toupper(ch);
mdWriteChar(x,y,ch);
x += 6;
}
return(y);
}
//=============================================================================
//
//=============================================================================
void smWriteChar(short x,short y,unsigned char ch)
{
int FontOffset,VidOffset;
int row,col;
UCHAR *Video;
VidOffset = (y * 320) + x;
Video = VIDSEG;
Video += VidOffset;
FontOffset = ((ch-32) * 5);
for (row = 0; row < 5; row++)
{
if (!FontTransparent)
{
Video[0] = TextBGcolor;
Video[1] = TextBGcolor;
Video[2] = TextBGcolor;
Video[3] = TextBGcolor;
}
if (smFont[FontOffset])
Video[0] = FontColor;
if (smFont[FontOffset+1])
Video[1] = FontColor;
if (smFont[FontOffset+2])
Video[2] = FontColor;
if (smFont[FontOffset+3])
Video[3] = FontColor;
Video += 320;
FontOffset += 294;
}
}
//=============================================================================
//
//=============================================================================
short smWriteString(short x,short y,char *s)
{
short OrgX;
char ch;
OrgX = x;
while (*s)
{
ch = *s++;
if (ch == 10)
{
x = OrgX;
y += 8;
continue;
}
if (ch < ' ')
continue;
ch = toupper(ch);
smWriteChar(x,y,ch);
x += 5;
}
return(y);
}
//=============================================================================
//
//=============================================================================
void smWriteHUD(short x,short y,UCHAR color,char *s)
{
FontTransparent = 1;
FontColor = color;
smWriteString(x,y,s);
FontTransparent = 0;
FontColor = 15;
}
//=============================================================================
//
//=============================================================================
void BlitBlock(int x,int y,int x1,int y1,UCHAR *buf)
{
int offset,wt;
UCHAR *Video;
offset = (y * 320) + x;
Video = VIDSEG + offset;
buf += offset;
wt = (x1 - x) + 1;
HideMouse();
while (y++ <= y1)
{
memmove(Video,buf,wt);
Video += 320;
buf += 320;
}
ShowMouse();
}
//=============================================================================
//
//=============================================================================
void DrawFillBox(int x,int y,int x1,int y1,UCHAR color)
{
int wt;
UCHAR *Video;
wt = (y * 320) + x;
Video = VIDSEG + wt;
wt = (x1-x)+1;
while (y++ <= y1)
{
memset(Video,color,wt);
Video += 320;
}
}
//=============================================================================
//
//=============================================================================
void DrawHorzLine(int x,int y,int x1,UCHAR color)
{
UCHAR *Video;
int offset;
offset = (y * 320) + x;
Video = VIDSEG + offset;
memset(Video,color,(x1-x)+1);
}
//=============================================================================
//
//=============================================================================
void DrawVertLine(int x,int y,int y1,UCHAR color)
{
UCHAR *Video;
int offset;
offset = (y * 320) + x;
Video = VIDSEG + offset;
while (y++ <= y1)
{
*Video = color;
Video += 320;
}
}
//=============================================================================
//
//=============================================================================
void DrawBox(int x,int y,int x1,int y1,UCHAR color)
{
DrawHorzLine(x,y,x1,color);
DrawHorzLine(x,y1,x1,color);
DrawVertLine(x,y,y1,color);
DrawVertLine(x1,y,y1,color);
}
//=============================================================================
//
//=============================================================================
UCHAR GetColor(int x,int y)
{
int offset;
UCHAR *Video;
offset = (y * 320) + x;
Video = VIDSEG + offset;
return(*Video);
}
//=============================================================================
//
//=============================================================================
void SaveVideo(UCHAR *buf)
{
memmove(buf,VIDSEG,64000);
}
//=============================================================================
//
//=============================================================================
void RestoreVideo(UCHAR *buf)
{
memmove(VIDSEG,buf,64000);
}
//=============================================================================
//
//=============================================================================
void CreateButton(int x,int y,HS *hs,char *s)
{
int len,plen,x1,y1;
hs->x = x;
hs->y = y;
len = strlen(s);
plen = len * 6;
hs->x1 = x1 = x + plen + 5;
hs->y1 = y1 = y + 11;
DrawFillBox(x,y,x1,y1,ButtonColor);
DrawHorzLine(x,y,x1,ButtonUpperColor);
DrawVertLine(x,y,y1,ButtonUpperColor);
DrawVertLine(x1,y+1,y1,ButtonLowerColor);
DrawHorzLine(x,y1,x1,ButtonLowerColor);
x1 = x + 3;
y1 = y + 2;
while (*s)
{
mdWriteChar(x1,y1,toupper(*s++));
x1 += 6;
}
}
//=============================================================================
//
//=============================================================================
UCHAR *SaveBlock(int x,int y,int x1,int y1)
{
int ht,wt,size,offset;
UCHAR *buf,*bPtr,*vPtr;
ht = (y1 - y) + 1;
wt = (x1 - x) + 1;
size = (ht * wt) + 4;
buf = (UCHAR *)malloc(size);
if (buf == NULL)
return(buf);
bPtr = buf;
(*(short *)bPtr) = ht;
bPtr += 2;
(*(short *)bPtr) = wt;
bPtr += 2;
offset = (y * 320) + x;
vPtr = VIDSEG + offset;
HideMouse();
while (ht-- > 0)
{
memmove(bPtr,vPtr,wt);
vPtr += 320;
bPtr += wt;
}
ShowMouse();
return(buf);
}
//=============================================================================
//
//=============================================================================
void RestoreBlock(int x,int y,UCHAR *buf)
{
int ht,wt,offset;
UCHAR *vPtr;
if (buf == NULL)
return;
offset = (y * 320) + x;
vPtr = VIDSEG + offset;
ht = (*(short *)buf);
buf += 2;
wt = (*(short *)buf);
buf += 2;
HideMouse();
while (ht-- > 0)
{
memmove(vPtr,buf,wt);
vPtr += 320;
buf += wt;
}
ShowMouse();
}
//=============================================================================
//
//=============================================================================
int QueryBox(int x,int y,char *Msg)
{
int done,plen;
int x1,y1;
UCHAR SaveColor,SaveBGcolor;
short mx,my,mbutton;
char *s;
UCHAR *vBuf;
HS hs[2];
SaveColor = BoxColor;
SaveBGcolor = TextBGcolor;
BoxColor = TextBGcolor = ButtonColor;
y1 = y + 42;
s = Msg;
plen = 0;
x1 = 0;
while (*s)
{
if (*s++ == 10)
{
y1 += 10;
x1 = 0;
}
else
{
x1 += 6;
if (x1 > plen) plen = x1;
}
}
x1 = x + plen + 10;
if ((x1-x) < 100)
x1 = x + 100;
HideMouse();
vBuf = SaveBlock(x,y,x1,y1);
DrawBackBox(x,y,x1,y1);
FontUseColor = 1;
mdWriteString(x+5,y+6,Msg);
BoxColor = SaveColor;
TextBGcolor = SaveBGcolor;
FontUseColor = 0;
CreateButton(x+5,y1-15,&hs[0]," Ok ");
CreateButton(x1-46,y1-15,&hs[1],"CANCEL");
ShowMouse();
done = 0;
while (!done)
{
mbutton = ReadMouseCursor(&my,&mx);
if (mbutton & 1)
{
for (x1 = 0; x1 < 2; x1++)
{
if (mx >= hs[x1].x && mx <= hs[x1].x1 && my >= hs[x1].y && my <= hs[x1].y1)
{
done = 1;
break;
}
}
}
}
if (vBuf != NULL)
{
RestoreBlock(x,y,vBuf);
free(vBuf);
}
return(x1);
}

52
map_edit/mapedit.h Normal file
View file

@ -0,0 +1,52 @@
/* Header file for ACK-3D Map Editor */
#define CURRENT_SQUAREX 161
#define CURRENT_SQUAREY 4
#define PASS_X 243
#define PASS_Y 2
#define SCREEN_COLOR 20
#define BLACK 0
#define LIGHTBLUE 64
#define BLUE 69
#define LIGHTMAGENTA 112
#define MAGENTA 119
#define RED 40
#define LIGHTRED 32
#define GREEN 88
#define LIGHTGREEN 80
#define YELLOW 120
typedef struct {
short x;
short y;
short x1;
short y1;
} RECT;
typedef struct {
short BoxX;
short BoxY;
char *FileName;
char DoBeep;
short NumButtons;
RECT ButtonCoords[4];
} BOXES;
#define BOX_ALREADY_1_OBJECT 0
#define BOX_NEW_WARNING 1
#define BOX_MODIFIED_WARNING 2
#define BOX_SAVED 3
#define BOX_ALREADY_START_CODE 4
#define BOX_MAX_SPECIAL_CODE 5
/* Prototypes */
void SetVmode(short);
void SetPalette(unsigned char *);
char *AddExtent(char *,char *);
unsigned short inkey(void);
void SetVGAmode(void);
void SetTextMode(void);

123
map_edit/measm.asm Normal file
View file

@ -0,0 +1,123 @@
IDEAL
JUMPS
include "prologue.mac"
P386 ; 386 specific opcodes and shit allowed.
P387 ; Allow 386 processor
MASM
.MODEL FLAT ;32-bit OS/2 model
.CODE
IDEAL
PUBLIC SetPalette2_
PUBLIC SetVGAmode_
PUBLIC SetTextMode_
PUBLIC inkey_
PUBLIC PutHex_
;==============================================================================
; void SetPalette2(unsigned char *PalBuf,short count);
;==============================================================================
Proc SetPalette2_ near
push esi
mov esi,eax
mov cx,dx
mov bx,0
cld
mov dx,3C8H
sp210:
mov al,bl
out dx,al
inc dx
lodsb
out dx,al
lodsb
out dx,al
lodsb
out dx,al
dec dx
inc bx
loop sp210
pop esi
ret
endp
;==============================================================================
; void SetVGAmode(void);
;==============================================================================
Proc SetVGAmode_ near
push ebp
mov ax,13h
int 10h ; Set 320x200x256
pop ebp
ret
endp
;==============================================================================
;
;==============================================================================
Proc SetTextMode_ near
push ebp
mov ax,3
int 10h
pop ebp
ret
endp
;==============================================================================
;
;==============================================================================
Proc inkey_ near
xor eax,eax
mov ah,1 ;see if key available
int 16h
jz ink080 ;nope
xor ax,ax
int 16h
jmp short ink090
ink080:
xor ax,ax
ink090:
ret
endp
;==============================================================================
;
;==============================================================================
Proc HexOut_ near
and al,15
cmp al,10
jb short hex010
add al,7
hex010:
add al,'0'
stosb
ret
endp
;==============================================================================
; void PutHex(char *buf,UINT mCode);
;==============================================================================
Proc PutHex_ near
push edi
mov edi,eax
mov eax,edx
shr al,4
call HexOut_
mov eax,edx
call HexOut_
xor al,al
stosb
pop edi
ret
endp
end

1981
map_edit/medit.c Normal file

File diff suppressed because it is too large Load diff

BIN
map_edit/medit.dtf Normal file

Binary file not shown.

296
map_edit/mgif.c Normal file
View file

@ -0,0 +1,296 @@
/*****************************************************************************
MGIF.C
#include <malloc.h>
Routine to load a 256 color .GIF file into a memory buffer. *Only* 256
color images are supported here! Sorry, no routines to SAVE .GIFs...
Memory required is allocated on the fly.
Mark Morley
morley@camosun.bc.ca
Modified for use in the ACK environment by Lary Myers
*****************************************************************************/
#include <stdio.h>
#include <conio.h>
#include <process.h>
#include <bios.h>
#include <fcntl.h>
#include <malloc.h>
#include "ack3d.h"
#include "ackeng.h"
#define MAX_CODES 4096
extern unsigned char colordat[]; // Palette buffer in AckReadiff module
extern short rsHandle;
extern short ErrorCode;
static FILE* fp;
static short curr_size;
static short clear;
static short ending;
static short newcodes;
static short top_slot;
static short slot;
static short navail_bytes = 0;
static short nbits_left = 0;
static unsigned char b1;
static unsigned char byte_buff[257];
static unsigned char* pbytes;
static unsigned char* stack;
static unsigned char* suffix;
static unsigned short* prefix;
static unsigned long rbaTable[10];
static unsigned long code_mask[13] =
{
0L,
0x0001L, 0x0003L,
0x0007L, 0x000FL,
0x001FL, 0x003FL,
0x007FL, 0x00FFL,
0x01FFL, 0x03FFL,
0x07FFL, 0x0FFFL
};
//=============================================================================
//
//=============================================================================
static short get_next_code(void)
{
short i;
static unsigned long ret;
if (!nbits_left)
{
if (navail_bytes <= 0)
{
pbytes = byte_buff;
navail_bytes = getc(fp);
if (navail_bytes)
{
for (i = 0; i < navail_bytes; ++i )
*(byte_buff + i) = getc( fp );
}
}
b1 = *pbytes++;
nbits_left = 8;
--navail_bytes;
}
ret = b1 >> (8 - nbits_left);
while (curr_size > nbits_left)
{
if (navail_bytes <= 0)
{
pbytes = byte_buff;
navail_bytes = getc(fp);
if (navail_bytes)
{
for( i = 0; i < navail_bytes; ++i )
*(byte_buff + i) = getc( fp );
}
}
b1 = *pbytes++;
ret |= b1 << nbits_left;
nbits_left += 8;
--navail_bytes;
}
nbits_left -= curr_size;
return((short)(ret & *(code_mask + curr_size)));
}
//=============================================================================
//
//=============================================================================
unsigned char *AckReadgif(char *picname)
{
unsigned char *sp;
unsigned char *buffer,*OrgBuffer;
short code, fc, oc;
short i;
unsigned char size;
short c;
unsigned short wt,ht;
int bSize;
unsigned char buf[1028];
unsigned char red;
unsigned char grn;
unsigned char blu;
if (!rsHandle)
{
fp = fopen(picname,"rb");
if( !fp )
{
ErrorCode = ERR_BADFILE;
return(NULL);
}
}
else
{
fp = fdopen(rsHandle,"rb");
if (fp == NULL)
{
ErrorCode = ERR_BADPICNAME;
return(0L);
}
fseek(fp,rbaTable[(ULONG)picname],SEEK_SET);
}
fread(buf,1,6,fp);
if( strncmp( buf, "GIF", 3 ) )
{
if (!rsHandle)
fclose(fp);
ErrorCode = ERR_INVALIDFORM;
return(NULL);
}
fread(buf,1,7,fp);
for (i = 0; i < 768;)
{
red = getc(fp);
grn = getc(fp);
blu = getc(fp);
colordat[i++] = red >> 2;
colordat[i++] = grn >> 2;
colordat[i++] = blu >> 2;
}
fread(buf,1,5,fp);
fread(buf,1,2,fp);
wt = (*(short *)buf);
fread(buf,1,2,fp);
ht = (*(short *)buf);
//wt = getw(fp);
//ht = getw(fp);
bSize = (ht * wt) + (sizeof(short) * 2);
buffer = (UCHAR *)malloc(bSize);
if (buffer == NULL)
{
if (!rsHandle)
fclose(fp);
ErrorCode = ERR_NOMEMORY;
return(NULL);
}
OrgBuffer = buffer;
(*(short *)buffer) = wt;
buffer += sizeof(short);
(*(short *)buffer) = ht;
buffer += sizeof(short);
fread(buf,1,1,fp);
size = getc(fp);
if (size < 2 || 9 < size)
{
if (!rsHandle)
fclose(fp);
free(OrgBuffer);
ErrorCode = ERR_INVALIDFORM;
return(NULL);
}
stack = (unsigned char *) malloc(MAX_CODES + 1);
suffix = (unsigned char *) malloc(MAX_CODES + 1);
prefix = (unsigned short *) malloc(sizeof(short) * (MAX_CODES + 1));
if (stack == NULL || suffix == NULL || prefix == NULL)
{
if (!rsHandle)
fclose(fp);
free(OrgBuffer);
ErrorCode = ERR_NOMEMORY;
return(NULL);
}
curr_size = size + 1;
top_slot = 1 << curr_size;
clear = 1 << size;
ending = clear + 1;
slot = newcodes = ending + 1;
navail_bytes = nbits_left = 0;
oc = fc = 0;
sp = stack;
while ( (c = get_next_code()) != ending )
{
if (c == clear)
{
curr_size = size + 1;
slot = newcodes;
top_slot = 1 << curr_size;
while ( (c = get_next_code()) == clear );
if( c == ending )
break;
if( c >= slot )
c = 0;
oc = fc = c;
*buffer++ = c;
}
else
{
code = c;
if (code >= slot)
{
code = oc;
*sp++ = fc;
}
while (code >= newcodes)
{
*sp++ = *(suffix + code);
code = *(prefix + code);
}
*sp++ = code;
if (slot < top_slot)
{
*(suffix + slot) = fc = code;
*(prefix + slot++) = oc;
oc = c;
}
if (slot >= top_slot && curr_size < 12)
{
top_slot <<= 1;
++curr_size;
}
while (sp > stack)
{
--sp;
*buffer++ = *sp;
}
}
}
free(stack);
free(suffix);
free(prefix);
if (!rsHandle)
fclose(fp);
return(OrgBuffer);
}

250
map_edit/miff.c Normal file
View file

@ -0,0 +1,250 @@
/******************* ( Animation Construction Kit 3D ) ***********************/
/* Deluxe Paint file reader */
/* CopyRight (c) 1993 Authors: Jaimi McEntire, Lary Myers */
/*****************************************************************************/
//
// This function will return a pointer to a buffer that holds the raw image.
// just free the pointer to delete this buffer. After returning, the array
// colordat will hold the adjusted palette of this pic.
//
// Also, this has been modified to only read in form PBM brushes. form ILBM's
// (the "old" type) are not supported. use the "new" deluxe paint .lbm type
// and do not choose "old".
#include <stdio.h>
#include <conio.h>
#include <process.h>
#include <bios.h>
#include <fcntl.h>
#include <malloc.h>
#include <mem.h>
#include "ack3d.h"
#include "ackeng.h"
#include "iff.h"
extern int ErrorCode;
unsigned char colordat[768]; /* maximum it can be...256 colors */
unsigned char cplanes[8][80]; /* setting max at 640 pixels width */
/* thats 8 pixels per byte per plane */
unsigned char *pplanes= (char far *) &cplanes[0][0]; /* for a form pbm */
#define MAX_BUF_POS 4096
int rdbufpos;
int rdSize;
UCHAR rdBuffer[MAX_BUF_POS+2];
//=============================================================================
//
//=============================================================================
short ReadNxtBlock(short handle)
{
short retlen;
retlen = read(handle,rdBuffer,MAX_BUF_POS);
rdbufpos = 0;
return(retlen);
}
//=============================================================================
//
//=============================================================================
int aRead(short handle,void *dest,int size)
{
int count = 0;
UCHAR *d = (UCHAR *)dest;
while (size--)
{
if (rdbufpos >= MAX_BUF_POS)
{
if (rdSize != MAX_BUF_POS)
{
return(count);
}
rdSize = read(handle,rdBuffer,MAX_BUF_POS);
rdbufpos = 0;
}
d[count++] = rdBuffer[rdbufpos++];
}
return(count);
}
//=============================================================================
//
//=============================================================================
unsigned char *Readiff(char *picname)
{
FILE *pic;
short handle;
form_chunk fchunk;
ChunkHeader chunk;
BitMapHeader bmhd;
long length;
char value; // must remain signed, no matter what. ignore any warnings.
short sofar;
short width,height,planes;
short pixw;
unsigned char *destx, *savedestx;
rdbufpos = MAX_BUF_POS + 1;
rdSize = MAX_BUF_POS;
if ((pic = fopen(picname,"rb")) == NULL)
{
ErrorCode = ERR_BADPICNAME;
return(0L);
}
fread(&fchunk,1,sizeof(form_chunk),pic); /* read in the first 12 bytes*/
// aRead(pic,&fchunk,sizeof(form_chunk));
if (fchunk.type != FORM)
{
fclose(pic);
ErrorCode = ERR_INVALIDFORM;
return(0L);
}
if (fchunk.subtype != ID_PBM)
{
printf("Error: Not form PBM!");
fclose(pic);
ErrorCode = ERR_NOPBM;
return(0L);
}
// now lets loop...Because the Chunks can be in any order!
while(1)
{
fread(&chunk,1,sizeof(ChunkHeader),pic);
// aRead(pic,&chunk,sizeof(ChunkHeader));
chunk.ckSize = ByteFlipLong(chunk.ckSize);
if (chunk.ckSize & 1) chunk.ckSize ++; // must be word aligned
if(chunk.ckID == ID_BMHD)
{
fread(&bmhd,1,sizeof(BitMapHeader),pic);
// aRead(pic,&bmhd,sizeof(BitMapHeader));
bmhd.w=iffswab(bmhd.w); // the only things we need.
bmhd.h=iffswab(bmhd.h);
destx = (unsigned char *)malloc((bmhd.w * bmhd.h)+4);
if ( !destx )
{
fclose(pic);
ErrorCode = ERR_NOMEMORY;
return(0L);
}
savedestx = destx;
destx[0] = bmhd.w%256;
destx[1] = bmhd.w/256;
destx[2] = bmhd.h%256;
destx[3] = bmhd.h/256;
destx += 4;
continue;
}
if(chunk.ckID == ID_CMAP)
{
short i;
unsigned char r,g;
fread(colordat,1,chunk.ckSize,pic);
// aRead(pic,colordat,chunk.ckSize);
for (i=0;i<768;i++)
{
r = colordat[i]; // r,g do not stand for red and green
g = r >> 2;
colordat[i] = g;
}
continue;
}
if(chunk.ckID == ID_BODY)
{
for(height = 0; height<bmhd.h; height ++)
{
unsigned char *dest;
dest = (unsigned char *)&(pplanes[0]); /* point at first char */
sofar = bmhd.w; /* number of bytes = 8 */
if (sofar&1) sofar++;
while (sofar)
{
if (bmhd.compression)
{
// aRead(pic,&value,1);
value=fgetc(pic); /* get the next byte */
// if (value == 128) continue; /* NOP..just get another*/
if (value > 0)
{
short len;
len = value +1;
sofar -= len;
if(!(fread(dest,len,1,pic)))
// if(!(aRead(pic,dest,len)))
{
fclose(pic);
ErrorCode = ERR_BADPICFILE;
free(savedestx);
return(0L);
}
dest +=len;
}
else
{
short count;
count = -value; /* get amount to dup */
count ++;
sofar -= count;
value=fgetc(pic);
// aRead(pic,&value,1);
while (--count >= 0) *dest++ = value;
}
}
else
{
fread(dest,sofar,1,pic); /* just throw on plane */
// aRead(pic,dest,sofar); /* just throw on plane */
sofar = 0;
}
}
if (sofar < 0)
{
fclose(pic);
}
_fmemcpy(destx,pplanes,bmhd.w);
destx += bmhd.w;
}
break; /* leave if we've unpacked the BODY*/
}
fseek(pic,chunk.ckSize,SEEK_CUR);
}
fclose(pic);
return((char *)savedestx);
}
long ByteFlipLong(long NUMBER)
{
// Hey, I didn;t write this function!!!
long Y, T;
short I;
T = NUMBER;
Y=0;for (I=0;I<4;I++){Y = Y | (T & 0xFF);if (I<3) {Y = Y << 8;T = T >> 8;}}
return(Y);
}
short iffswab(unsigned short number)
{
unsigned short xx1,xx2;
unsigned short result;
xx1 = number <<8; xx2 = number >>8; result = xx1|xx2;
return(result);
}

1
map_edit/mkdtf.bat Normal file
View file

@ -0,0 +1 @@
bpic m1files.dat medit.dtf

160
map_edit/mouse.c Normal file
View file

@ -0,0 +1,160 @@
// 3D Construction Kit
// Started: 01/02/94
// Author: Lary Myers
// Module: MOUSE.C
// (c) CopyRight 1994 All Rights Reserved
#include <dos.h>
#include <stdio.h>
#include <dos.h>
int MouseModifier = 2;
//=============================================================================
// Check if mouse is installed, returns -1 if it IS installed
//=============================================================================
int MouseInstalled(void)
{
int yesno;
union REGPACK regs;
memset(&regs,0,sizeof(union REGPACK));
intr(0x33,&regs);
yesno = regs.w.ax;
return(yesno);
}
//=============================================================================
// Show the mouse cursor
//=============================================================================
void ShowMouse(void)
{
union REGPACK regs;
memset(&regs,0,sizeof(union REGPACK));
regs.w.ax = 1;
intr(0x33,&regs);
}
//=============================================================================
// Hide the mouse cursor
//=============================================================================
void HideMouse(void)
{
union REGPACK regs;
memset(&regs,0,sizeof(union REGPACK));
regs.w.ax = 2;
intr(0x33,&regs);
}
//=============================================================================
// Returns button status, mouse row and column
//=============================================================================
int ReadMouseCursor(int *mrow,int *mcol)
{
int bstatus;
union REGPACK regs;
memset(&regs,0,sizeof(union REGPACK));
regs.w.ax = 3;
intr(0x33,&regs);
bstatus = regs.w.bx;
*mrow = regs.w.dx;
*mcol = regs.w.cx / MouseModifier;
return(bstatus);
}
//=============================================================================
// Returns just the mouse button status
//=============================================================================
int ReadMouseButtons(void)
{
int bstatus;
union REGPACK regs;
memset(&regs,0,sizeof(union REGPACK));
regs.w.ax = 3;
intr(0x33,&regs);
bstatus = regs.w.bx;
return(bstatus);
}
//=============================================================================
// Set mouse cursor to desired row and column
//=============================================================================
void SetMouseCursor(int mrow,int mcol)
{
union REGPACK regs;
memset(&regs,0,sizeof(union REGPACK));
regs.w.ax = 4;
regs.w.dx = mrow;
regs.w.cx = mcol * MouseModifier;
intr(0x33,&regs);
}
//=============================================================================
// Defines left and right columns for mouse travel
//=============================================================================
void SetMouseMinMaxColumns(int mincol,int maxcol)
{
union REGPACK regs;
memset(&regs,0,sizeof(union REGPACK));
regs.w.ax = 7;
regs.w.cx = mincol * MouseModifier;
regs.w.dx = maxcol * MouseModifier;
intr(0x33,&regs);
}
//=============================================================================
// Defines top and bottom rows for mouse travel
//=============================================================================
void SetMouseMinMaxRows(int minrow,int maxrow)
{
union REGPACK regs;
memset(&regs,0,sizeof(union REGPACK));
regs.w.ax = 8;
regs.w.cx = minrow;
regs.w.dx = maxrow;
intr(0x33,&regs);
}
//=============================================================================
// Set shape of mouse cursor. 8 byte mask, hotspot row,col
//=============================================================================
void SetMouseShape(int hsrow,int hscol,char far *mask)
{
union REGPACK regs;
memset(&regs,0,sizeof(union REGPACK));
regs.w.ax = 9;
regs.w.dx = FP_OFF(mask);
regs.w.es = FP_SEG(mask);
regs.w.bx = hscol;
regs.w.cx = hsrow;
intr(0x33,&regs);
}
//=============================================================================
// Wait for the mouse button to be released
//=============================================================================
void MouseReleased(void)
{
while (ReadMouseButtons());
}

44
map_edit/prologue.mac Normal file
View file

@ -0,0 +1,44 @@
P386
Macro SETUPSEGMENT
SEGMENT _TEXT PARA PUBLIC 'CODE'
ASSUME CS:_TEXT
Endm
macro PENTER STORAGE
;; 17 - Enter a procedue with storage space
;; Procedure enter, uses the 286/386 ENTER opcode
push ebp
mov ebp,esp
IF STORAGE
sub esp,STORAGE
ENDIF
ENDIF
endm
macro PLEAVE
;; 18 - Exit a procedure with stack correction.
mov esp,ebp
pop ebp
endm
macro PushCREGS
;; 19 - Save registers for C
push es
push ds ;The Kernel is responsible for maintaining DS
push esi
push edi
cld
endm
macro PopCREGS
;; 20 - Restore registers for C
pop edi
pop esi
pop ds ;The Kernel is responsible for maintaining DS
pop es
endm

BIN
map_edit/slime1a.bbm Normal file

Binary file not shown.

BIN
map_edit/spfont.bbm Normal file

Binary file not shown.