#define IDSTRING "TED5v1.0" #define TITLESTR "TED5 vD.IP" #define IDSTSTR " "TITLESTR #include #include #include #include #include #include #include #include #include #include #include #include "lib.h" #include "memmgr.h" #include "menu.h" #include "jhuff.h" #include "xms.h" #define SGN(x) (x>0?1:x<0?-1:0) #define OFF3(m,i) (*(long huge *)((char huge *)m+(i)*3)&0xffffff) // // Defs for TED5 // typedef enum {TILES,MASKED,ICONS} screentype; typedef enum {DATA,CODE,FARDATA} segtype; // FOR MAKEOBJ ONLY #define SCindex 0x3C4 #define SCmapmask 2 #define GCindex 0x3CE #define GCreadmap 4 #define GCmode 5 #define crtcaddr 0x3d4 // // STRUCTURE OF TED5 TEMPFILE WHILE LAUNCHING // typedef struct { video lastmode; char ext[4]; } TempStruct; // // STRUCTURE OF THE "TEDINFO.EXT" FILE THAT TED5 CREATES // typedef struct { int level,lastvid,lastx,lasty,tsize; int OldCgaXMS,OldEgaXMS,OldVgaXMS; long OldCgaXMSsize,OldEgaXMSsize,OldVgaXMSsize; int CgaXMSlook,EgaXMSlook,VgaXMSlook; char permicon,pflags; int oscrx,oscry; char parmstring[64],launchname[14]; char BackgndColor; char ImportPath[64]; } InfoStruct; // // STRUCTURE OF THE "GFXINFO?.EXT" FILE THAT IGRAB CREATES // typedef struct { int num8,num8m,num16,num16m,num32,num32m; int off8,off8m,off16,off16m,off32,off32m; int numpics,numpicm,numsprites; int offpic,offpicm,offsprites; int offpicstr,offpicmstr,offsprstr; int numexterns,offexterns; } GfxStruct; // // TED5 LOADS & SAVES THIS HEADER FOR INTERNAL MAPFILE USAGE // typedef struct { unsigned maptype; //bit 0=bkgnd/1=frgnd/2=info unsigned tsize; //1=8/2=16/3=32 unsigned numtplanes,oldtilenum; long tileinfooff[10]; unsigned tileinfolen[10]; char tnames[10][8]; unsigned numtmplanes,oldtilemnum; long tileinfomoff[10]; unsigned tileinfomlen[10]; char tmnames[10][8]; unsigned RLEWtag; long dataoffsets[100]; long datalengths[100]; int NumIconRows; } MapFileHeaderStr; // // TED5 SAVES THIS MAPFILE HEADER FOR THE GAME // typedef struct { unsigned RLEWtag; long dataoffsets[100]; } OutputHeadStr; // // EACH AND EVERY MAP HAS THIS HEADER (IF THE MAP EXISTS) // typedef struct { long mapbkgndpl; long mapfrgndpl; long mapinfopl; unsigned mapbkgndlen; unsigned mapfrgndlen; unsigned mapinfolen; unsigned width,height; char name[16]; } MapHeaderStr; // // SPECIFY WHAT, WHEREFROM, AND HOW TO COPY A REGION // typedef struct { char PlanesCopied; // use BPLANE,FPLANE,IPLANE to mask int MapOrTileSelect; // 0:map,1:tileselect int x,y,w,h; // from map or tileselect } CopyStr; // // UNDO REGION // typedef struct { int x,y,w,h; } UndoStr; // // LAST-BUILT "VIEWMAP" // typedef struct { unsigned step,built_flag,EGAseg,maxpack; } VMapStr; // // HEADER FOR APPLE-PREFERRED FILES // typedef struct { long length; char Kind[5]; int MasterMode; int PixelsPerLine; int NumColorTables; int ColorTable[16]; int NumScanLines; } ApPrefStr; #define CREATED 1 #define NOTCREATED 2 #define ANYLIST 3 #define BPLANE 1 #define FPLANE 2 #define IPLANE 4 #define O_FGNDBACK 4 #define ICONBACK 3 #define TINFOWIDTH 3 #define TINFOHEIGHT 7 #define TINFOHEIGHTEGA2 25 extern MBarDef TED5MenuBar[]; extern DialogDef DoCreated; extern UndoStr UndoRegion; extern CopyStr TileCopy; extern MapFileHeaderStr _seg *MapFileHeader; extern char _seg *Tinfo[10],_seg *TMinfo[10],_seg *GraphHeader; extern long _seg *XMSlookup,_seg *CgaXMSlookup,_seg *EgaXMSlookup,_seg *VgaXMSlookup; extern int _seg *MapBkgnd,_seg *MapFrgnd,_seg *MapInfoPl, _seg *CutBkgnd,_seg *CutFrgnd,_seg *CutInfoPl; extern MapHeaderStr MapHeader; #if 0 extern char far TOM; // JOKE SHIT! #endif extern TempStruct LaunchInfo; extern InfoStruct _seg *TEDInfo; extern GfxStruct _seg *GfxInfo; extern video lastvideo,videomode; extern screentype whichscreen; extern VMapStr VMapData; extern char launchname[64],ext[4],format[2],projname[64],mapname[64],planes, infoname[64],mapheadname[64],tdata,MapNames[100][16],parmstring[64]; extern char SM_name[64],SM_loadname[64],BkgndColor; extern unsigned temp,whichmap,numtplanes,tilenum,tilemnum,numtmplanes,left, DirtyFlag,tilelen,tilemlen,whicht,whichtm,whichi, tsize,infoy,infomaxw,mapwidth,mapheight,screenw,usingbat, screenh,planeton,planemon,planeion,maxiconrows,lasticon,firsticon, viewton,viewmon,viewion,XMSundoB,XMSundoF,XMSundoI,XMSmaps, EgaXMS,CgaXMS,VgaXMS,xmshandle,GridMode,SnapMode,snapx,snapy, snapxsize,snapysize,writeH,F3_flag,NoAbout; extern int tilebase,tilembase,infobaron,xbase,ybase,scrnbot,scrnrgt, FillMode,PasteMode,SelectMode,SelX1,SelY1,PasteOK,SelX2,SelY2,pixelx,pixely, selectcols,px,py,lastmap,TIybase,TIymbase,TIxbase,TIxmbase,BfillMode, Plotting,TsearchMode; extern long CgaXMSsize,EgaXMSsize,VgaXMSsize; extern void far *XMSdriver; // // FUNCTION PROTOTYPES // // // LIB_A.ASM // extern void CGAcharout(int x,int y,char ch); extern void EGAcharout(int x,int y,char ch,video vid); extern void VGAcharout(int x,int y,char ch); // // TED5_A.ASM // extern unsigned EGA1lookup[200]; extern unsigned EGA2lookup[200]; extern void DrawTile(int x,int y,int tile); extern void CopyCGA(int srcx,int srcy,int width,int height,int destx,int desty); extern void CopyEGA(int srcx,int srcy,int width,int height,int destx,int desty); extern void CopyVGA(int srcx,int srcy,int width,int height,int destx,int desty); extern void Overlay(int tsize); // // TED5 // void FindGraphFile(void); void HandleEvent(void); void Continuous(void); void LoadInfoFile(void); int LoadGraphStuff(int rtn,video newvid); void LoadMapHeader(void); void ParseCmdline(void); void InitTed5(void); void CallDesktop(void); void SelectTiles(int screen); void STnot(int x,int y); void DrawProjBord(int x,int y); void DrawInfoBar(void); void PrintCoords(void); void FigureScreenEdges(void); void errsound(void); void DrawMap(void); void CheckSelectEdges(int x,int y,int i,int j); int InputIconAmount(void); // // TED5-1 // void Item_InputInfoplane(void); void Item_SelectTile(void); void Item_EditTinfoNames(void); void Item_BlockFill(void); void Item_TileSearch(void); void Item_Launch(void); void Item_Undo(void); void Item_TINFOCopy(void); void CreateMap(int exitok); int SelectMap(int exitok,int createflg,char *title); int PickMorePlanes(void); void DoBlockFill(void); void RemoveUndoBuffers(void); void AllocateUndoBuffers(void); void RestoreUndo(void); void SaveUndo(int x,int y,int w,int h); void CopyUndoRegion(void); void SaveOutputHeader(void); void SaveTEDInfo(void); void BackupFile(char *filename); void TInfoNon(int x,int y,int b); void TInfoNoff(int x,int y,int b); void TInfoMNon(int x,int y,int b); void TInfoMNoff(int x,int y,int b); void TIDoneOn(int x,int y); void TIDoneOff(int x,int y); // // TED5-2 // void Item_About(void); void Item_ModeSwitch(void); void Item_DeleteMap(void); void Item_EditMap(void); void Item_SaveMap(void); void Item_CreateMap(void); void Item_Quit(void); void Item_MapStats(void); void Item_ToggleInfo(void); void Item_Amputate(void); void Item_SwitchMap(void); void Item_EditMapNames(void); void Item_Copy(void); void Item_Paste(void); void Item_LastVideo(void); void Item_FloodFill(void); void Item_LastMap(void); void Item_CountTiles(void); int CheckForMapSave(void); void DoFloodFill(int x,int y,int whichb); void DrawTileSelect(int deltarows,int *numrows,int *numcols); void DrawUnused(int deltarow); void DrawCurrentTiles(void); void ZeroModes(void); // // TED5-3 // void Item_EditMapEdges(void); void Item_PrintMem(void); void Item_Huffman(void); void CheckInfoValues(int i,int j,int tilei); void PrintMem(int x,int y); void EraseFloatPaste(void); void DrawFloatPaste(void); void CopyScreen(int srcx,int srcy,int width,int height,int destx,int desty); void Item_LAUNCHname(void); void Item_PARMstring(void); void Item_ChangeIconRows(void); void Item_ChangeLaunchIcon(void); void Item_ChangeBkgndColor(void); // // TED5-4 // void SignalSound(void); void Item_GraphicDump(void); void Item_EditTinfoValues(void); void Item_ProjectReSelect(void); void Item_AddDelTinfo(void); void Item_GridMode(void); void Item_SnapTog(void); void Item_ViewMap(void); void Item_ReviewMap(void); void Item_ImportMaps(void); void Item_VisitDOS(void); void Item_POtog(void); void Do_ViewMap(int how); int MakeOBJ(char *filename,char *destfilename,char *public,segtype whichseg,char *farname); void DrawTinfoScreen(int thescreen,int deltax,int deltay); void EnterTinfoValue(int whichtinfo,int mx,int my,int H_or_V); void UseTinfoValue(int whichtinfo,int mx,int my,int PickupOrDrop);