Commits

Palmer, 2E0EOL committed 52d0070

Unpack SpriteEd archive

Comments (0)

Files changed (34)

SpriteEd/ABOUTBOX.CPP

+/* Code to control the AboutBox */
+
+#include <Owl\OwlAll.H>
+#include <StdIO.H>
+#pragma hdrstop
+
+#include "SpriteEd.RH" // Resources
+#include "AboutBox.H" // That's ours!
+#include "SeVer.H" // Version stuff (not VERSIONINFO resource)
+//---------------------------------------------------------------------------
+TAboutBox::TAboutBox(TWindow* parent, TModule* module)
+:
+	TSelfCenteringDialog(parent, MAKEINTRESOURCE(IDD_ABOUTBOX), module)
+{
+	InfoLabel = new TStatic(this, IDC_INFOTEXT);
+}
+//---------------------------------------------------------------------------
+void TAboutBox::CmOk()
+{
+	SendMessage(WM_CLOSE);
+}
+//---------------------------------------------------------------------------
+void TAboutBox::SetupWindow()
+{
+	TSelfCenteringDialog::SetupWindow(); // Pass further up the chain to base
+
+   MoveToWindowCentre(Parent->HWindow); // Move to centre of parent
+   SetupInfoLabel();
+}
+//---------------------------------------------------------------------------
+void TAboutBox::SetupInfoLabel()
+{
+	char text[512];
+   sprintf(text, "SpriteEditor V%u.%u by David Duncan Ross Palmer, for the use of Sarah Abbott.\nCopyright %u Daybo Logic, all rights reserved.\n\nBuild #%u", SE_VERMAJOR, SE_VERMINOR, SE_CYEAR, SE_BUILD);
+	InfoLabel->SetText(text);
+}
+//---------------------------------------------------------------------------

SpriteEd/ABOUTBOX.H

+#ifndef __INC_ABOUTBOX_H
+#define __INC_ABOUTBOX_H
+/*-------------------------------------------------------------------------*/
+#include "NoPP.H" /* Stop inclusion from C */
+
+#include "OwlStuff\SCDlg.H" // Self-centring dialog (TSelfCenteringDialog)
+
+class TAboutBox : public TSelfCenteringDialog
+{
+public:
+	TAboutBox(TWindow* parent=0, TModule* module=0);
+protected:
+	virtual void SetupWindow();
+
+	// Event handlers
+	void CmOk(); // OK button click
+private:
+	// Controls
+	TStatic* InfoLabel; // Information to user label
+
+   void SetupInfoLabel();
+
+	DECLARE_RESPONSE_TABLE(TAboutBox);
+};
+DEFINE_RESPONSE_TABLE1(TAboutBox, TSelfCenteringDialog)
+	EV_BN_CLICKED(IDOK, CmOk),
+END_RESPONSE_TABLE;
+/*-------------------------------------------------------------------------*/
+#endif /*__INC_ABOUTBOX_H*/
+/* Application class for ObjectWindows */
+
+#include <OWL\OwlAll.H>
+#define DLSTDINC_NOLOHIMAKE /* Daybo Logic mustn't make HI LO macros */
+#include "Stds\DLStdInc.H"
+#include "Headers\TStr.H" /* Widechar/multibyte macros */
+#pragma hdrstop
+
+#include "SpriteEd.RH" // Resource defines
+#include "App.H" // Application header
+#include "MainWin.H" // Main window header
+#include "SpriteEd.RH" // Resources header
+//---------------------------------------------------------------------------
+TSpriteEditorApp::TSpriteEditorApp()
+:
+	TApplication()
+{
+}
+//---------------------------------------------------------------------------
+void TSpriteEditorApp::InitMainWindow()
+{
+	/* First get app name from resources */
+	char appName[30*BYTESPERCHAR];
+   size_t sizeAppName = sizeof(appName)-1;
+   LoadString(IDS_APPNAME, appName, sizeAppName+1);
+
+	SetMainWindow( new TDecoratedMDIFrame( appName,
+														MAKEINTRESOURCE(MENU_MAIN),
+														*new TMainWindow ) );
+   GetMainWindow()->SetIcon(this, IDI_APPICON); // Set icon
+}
+//---------------------------------------------------------------------------
+#ifndef __INC_APP_H
+#define __INC_APP_H
+/*-------------------------------------------------------------------------*/
+#ifndef __cplusplus /* ie. C */
+#	error Only C++ modules may include the application class
+#endif //__cplusplus
+
+
+class TSpriteEditorApp : public TApplication
+{
+public:
+	TSpriteEditorApp(); // Constructor
+	virtual void InitMainWindow();
+};
+
+//---------------------------------------------------------------------------
+#endif //__INC_APP_H
+#ifndef __INC_EDWIN_H
+#define __INC_EDWIN_H
+/*-------------------------------------------------------------------------*/
+#include "NoPP.H" /* Stop C modules including this header */
+
+class TEdWin : public TMDIChild
+{
+public:
+	TEdWin(TMDIClient& parent, int ChildNum);
+   virtual ~TEdWin();
+
+   virtual NATIVEBOOLTYPE CanClose();
+   static void SetExpressClose(NATIVEBOOLTYPE tf);
+   static int GetNumChildren();
+
+private:
+		static NATIVEBOOLTYPE _expressClose;
+   	static int _numChildren;
+      int _childNum;
+
+      // More interesting stuff
+		PSPRITE _spriteData; // Pointer to sprite data (not header)
+	void SetupCaption(const char* FileName); // Sets caption of window to filename (and some)
+};
+/*-------------------------------------------------------------------------*/
+#endif /*__INC_EDWIN_H*/

SpriteEd/ImgDim.H

+/* "Image dimensions" dialog controlling class */
+
+#ifndef __INC_IMGDIM_H
+#define __INC_IMGDIM_H
+/*-------------------------------------------------------------------------*/
+#include "NoPP.H" /* Stops C including this C++ only header */
+#include "OwlStuff\SCDlg.H" // TSelfCenteringDialog
+
+class TImgDimDlg : public TSelfCenteringDialog
+{
+public:
+	TImgDimDlg(TWindow* parent=0, TModule* module=0);
+protected:
+	virtual void SetupWindow();
+
+   // Event handlers
+   void EvValuesChanged(); // Values have been changed
+   void CmOk(); // This happens when OK is clicked
+   void EvShowWindow(NATIVEBOOLTYPE show, uint stat);
+private:
+	// Controls
+   	TEdit *WidthEdit, *HeightEdit, *BPPEdit;
+   	TStatic* SizeResult;
+
+   unsigned long GetBPPBox(); // Gets bits per pixel edit contents
+   unsigned long GetWidthBox(); // Get width from edit box
+   unsigned long GetHeightBox(); // Gets height from edit box
+   void SetBPPBox(unsigned long newval); // Sets bits per pixel edit contents
+   void SetWidthBox(unsigned long newval); // Sets width edit contents
+   void SetHeightBox(unsigned long newval); // Sets height edit contents
+   void EditBoxesToMembers(); // Copies visual numbers into private members (save states when OK clicked kind of thing)
+   void MembersToEditBoxes(); // Copies private members to visual boxes for editing
+
+   	unsigned long _BPP, _width, _height; /* Internal representations of numerics */
+   	BYTE _noEditChangeEvents; /* If non-zero the edit boxes, when changed won't update the information bellow because our custom show proc doesn't work */ 
+
+   DECLARE_RESPONSE_TABLE(TImgDimDlg);
+};
+DEFINE_RESPONSE_TABLE1(TImgDimDlg, TSelfCenteringDialog)
+	EV_EN_CHANGE(IDC_HEIGHTEDIT, EvValuesChanged),
+   EV_EN_CHANGE(IDC_WIDTHEDIT, EvValuesChanged),
+   EV_EN_CHANGE(IDC_BPPEDIT, EvValuesChanged),
+   EV_BN_CLICKED(IDOK, CmOk),
+   EV_WM_SHOWWINDOW,
+END_RESPONSE_TABLE;
+/*-------------------------------------------------------------------------*/
+#endif /*__INC_IMGDIM_H*/

SpriteEd/MAINWIN.CPP

+/* Code to handle the main window */
+
+#include <Owl\OwlAll.H>
+#include <Windows.H> // For Windows message constants directly
+#define DLSTDINC_NOLOHIMAKE /* Daybo Logic mustn't make HI LO macros */
+#include "Stds\DLStdInc.H" // Daybo Logic standard inclusions
+#pragma hdrstop
+
+#include "SpriteEd.RH" // Resources
+#include "AboutBox.H" // About box
+#include "ImgDim.H" // Image dimensions dialog
+#include "MainWin.H" // Main window
+#include "CoppsRes.H" // Technical resource definitions
+#include "EdWin.H" // Graphical sprite editing window
+//---------------------------------------------------------------------------
+int TMainWindow::HighMDIIndex = 0;
+//---------------------------------------------------------------------------
+TMainWindow::TMainWindow() // Constructor
+:
+	TMDIClient()
+{
+	_imgDimDlg = new TImgDimDlg(this); // Create image dimensions dialog
+}
+//---------------------------------------------------------------------------
+TMainWindow::~TMainWindow() // Destructor
+{
+	delete _imgDimDlg; // Kill owned dialog that was here all along
+}
+//---------------------------------------------------------------------------
+TMDIChild* TMainWindow::InitChild()
+{
+	return new TEdWin(*this, ++HighMDIIndex);
+}
+//---------------------------------------------------------------------------
+NATIVEBOOLTYPE TMainWindow::CanClose()
+{
+	return TRUE;
+}
+//---------------------------------------------------------------------------
+NATIVEBOOLTYPE TMainWindow::CloseChildren()
+{
+	NATIVEBOOLTYPE result;
+
+   TEdWin::SetExpressClose(TRUE);
+   result = TMDIClient::CloseChildren();
+   TEdWin::SetExpressClose(FALSE);
+   HighMDIIndex = 0;
+   return result;
+}
+//---------------------------------------------------------------------------
+void TMainWindow::CmFileNew()
+{
+  TMDIChild* child = InitChild();
+  child->SetIcon(0, IDI_SPRITE);
+
+  TMDIChild* curChild = GetActiveMDIChild();
+  if (curChild && (curChild->GetWindowLong(GWL_STYLE) & WS_MAXIMIZE))
+    child->Attr.Style |= WS_MAXIMIZE;
+
+  child->Create();
+}
+//---------------------------------------------------------------------------
+void TMainWindow::CmHelpAbout() // Click on Help | About handler
+{
+	TAboutBox aboutbox(this); // about box on stack
+   aboutbox.Execute();
+   return;
+}
+//---------------------------------------------------------------------------
+void TMainWindow::CmFileExit() // Click on File | Exit handler
+{
+	SendMessage(WM_CLOSE);
+}
+//---------------------------------------------------------------------------
+void TMainWindow::EvGetMinMaxInfo(MINMAXINFO far & s) // Force window to stay between certain metrics
+{
+	/* For some reason, this is never executed */
+
+	s.ptMinTrackSize.x = 400;
+   s.ptMinTrackSize.y = 300;
+}
+//---------------------------------------------------------------------------
+void TMainWindow::CmImageAttribs()
+{
+   _imgDimDlg->Execute(); /* show modally.  This dialog is a member by the way */
+}
+//---------------------------------------------------------------------------

SpriteEd/MAINWIN.H

+#ifndef __INC_MAINWIN_H
+#define __INC_MAINWIN_H
+/*-------------------------------------------------------------------------*/
+#ifndef __cplusplus /* C */
+#	error Only C++ modules may include the class for the main window
+#endif
+
+#include "ImgDim.H" // We use this dialog as a member so it's class must be included here
+
+class TMainWindow : public TMDIClient
+{
+private:
+		static int HighMDIIndex;
+
+      TImgDimDlg* _imgDimDlg; // We'll keep this dialog all the time, as owned by the main window
+
+	DECLARE_RESPONSE_TABLE(TMainWindow);
+public:
+	TMainWindow(); // Constructor
+   ~TMainWindow(); // Destructor
+	virtual TMDIChild* InitChild(); // Create a new child
+	virtual NATIVEBOOLTYPE CloseChildren(); // Close all MDI children
+
+	virtual NATIVEBOOLTYPE CanClose();
+
+	// Event handlers for mainm window
+   void CmFileNew();
+	void CmFileExit();
+   void CmImageAttribs();
+   void EvHTileChildren();
+   void EvVTileChildren();
+	void CmHelpAbout();
+   void EvGetMinMaxInfo(MINMAXINFO far & s);
+};
+DEFINE_RESPONSE_TABLE1(TMainWindow, TMDIClient)
+	EV_COMMAND(CM_FILE_NEW, CmFileNew),
+	EV_COMMAND(CM_FILE_EXIT, CmFileExit),
+   EV_COMMAND(CM_IMAGE_ATTRIBS, CmImageAttribs),
+   EV_COMMAND(CM_WINDOW_CASCADE, CmCascadeChildren), /* This function is in parent */
+   EV_COMMAND(CM_WINDOW_HTILE, CmTileChildrenHoriz), /* This is in TMainWindow */
+   EV_COMMAND(CM_WINDOW_VTILE, CmTileChildren), /* This is in TMainWindow*/
+   EV_COMMAND(CM_WINDOW_ARRANGEICONS, CmArrangeIcons), /* This also */
+	EV_COMMAND(CM_HELP_ABOUT, CmHelpAbout),
+   EV_WM_GETMINMAXINFO,
+END_RESPONSE_TABLE;
+//---------------------------------------------------------------------------
+#endif //__INC_MAINWIN_H
+/* Thie file stops inclusion of a header by C, it should be included by
+a header that is designed for C++ and not C */
+
+#ifndef __cplusplus /* ie. C */
+#	error This header may only be included in a C++ module
+#endif /*__cplusplus*/

SpriteEd/SESTUB.EXE

Binary file added.
+#ifndef __INC_SEVER_H
+#define __INC_SEVER_H
+
+/* Version number in SpriteEditor */
+
+#define SE_VERMAJOR 0
+#define SE_VERMINOR 1
+#define SE_BUILD 11
+#define SE_CYEAR 1999
+
+#endif /*__INC_SEVER_H*/

SpriteEd/SPRITEED.DEF

+NAME SpriteEd
+DESCRIPTION 'Sprite Editor for The Copps'
+STUB 'SeStub.EXE'

SpriteEd/SPRITEED.DSW

Binary file added.

SpriteEd/SPRITEED.H

+#ifndef __INC_SPRITEED_H
+#define __INC_SPRITEED_H
+/*-------------------------------------------------------------------------*/
+/* Main program header */
+
+#include "SEVer.H" /* Version information */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+/*-------------------------------------------------------------------------*/
+#endif /*__INC_SPRITEED_H*/

SpriteEd/SPRITEED.RWS

Binary file added.

SpriteEd/SPRITEED.TR2

Binary file added.

SpriteEd/SPRITEED.cpp

+#include <StdIO.H>
+#include <OWL\Applicat.H> // To start application
+#define DLSTDINC_NOLOHIMAKE // Don't allow Daybo Logic to define HIWORD etc.
+#include "Stds\DLStdInc.H" /* Daybo Logic standard inclusions header */
+#pragma hdrstop
+
+#include "SpriteEd.H" /* Main app header */
+#include "Replace\SleepX.H" /* Non-ANSI replaceable:  Sleep */
+#include "App.H" // Class for application
+
+/* Private functions */
+static void StartupTasks(void); /* Do startup tasks */
+static void ShutdownTasks(void); /* Do shutdown tasks */
+static void CClassGlobalConstruct(void);
+static void CClassGlobalDestruct(void);
+/*-------------------------------------------------------------------------*/
+int OwlMain(int argc, char* argv[]) /* Psuedo Entry point */
+{
+	StartupTasks();
+
+	TSpriteEditorApp SpriteEditorApp; // Application on stack
+	SpriteEditorApp.Run(); // Run application
+
+	ShutdownTasks();
+	return 0;
+}
+/*-------------------------------------------------------------------------*/
+void StartupTasks(void) /* things to do at startup */
+{
+	CClassGlobalConstruct();
+}
+/*-------------------------------------------------------------------------*/
+void ShutdownTasks(void) /* things to do at program exit */
+{
+	CClassGlobalDestruct();
+}
+/*-------------------------------------------------------------------------*/
+void CClassGlobalConstruct()
+{
+}
+/*-------------------------------------------------------------------------*/
+void CClassGlobalDestruct()
+{
+}
+/*-------------------------------------------------------------------------*/

SpriteEd/SPRITEED.ini

+[Version]
+
+; Version number is recognized as two integer numbers (Major.Minor)
+; Increase to clone changes for project configuration files
+VersionNumber=2.60
+
+[System]
+
+; Where Together add-on's help is located.
+; (Make sure it is the same directory as in host.ini)
+; Tuned by Installer
+Helpfile=C:\BC5\help\together.hlp
+
+[Notations]
+
+; List of notations for Object Model Editor corresponds to the local menu commands
+Coad=1
+OMT=2
+Unified=3
+
+[View]
+
+
+; Format:
+;
+; MapXX=Type, Filter, Active, "FilterTitle", "Query", "Command", "Argument"[, "Notation"]
+;
+; Type ::=Class | Member | Attribute | Link | Operation
+; Filter ::=0 | 1
+;   determines whether view statement is included in Filter dialog
+; Active ::=0 | 1
+;   determines whether view is active
+; FilterTitle...
+;   is the title of corresponding Filter check
+; Query ::=...see table of queries...
+;   Query is one of the queries that are available for the Type
+;   The result of the Query can be true or false.
+;   To negate the query result, precede it by "!".
+; Command ::=...see table of commands...
+;   Command is a graphical-property command which is executed if the Query is true.
+;   This command accepts "Argument" as argument.
+; Argument ::=...see table of arguments...
+;   Additional argument for the Command.
+; Notation ::=Coad | OMT | Unified
+;   optional parameter determines the notation to which the view is applied.
+;   If ommited, the view is applied to any notation
+;
+; Note that view maps are not cumulative.
+; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+; Look for the word "message" later in this section and uncomment the appropriate lines
+; to get an example of user-defined link
+
+; ------------------------------------------------------------------------
+
+; Queries supported by Types:
+; ^^^^^^^
+
+; Query         Applied to:         What is?
+;               Class
+;                   Member
+;                       Attribute
+;                           Link
+;                               Operation
+;
+; Equal(Name)   x   x   x   x   x   true if the identifier matches Name
+; HasTag(Name)  x   x   x   x   x   true if the identifier has the tag Name in the comment
+; HasTagValue(Name,Value)   
+;               x   x   x   x   x   true if the identifier has the tag Name with the value Value
+; DeclSubString(s)
+;               x   x   x   x   x   true if declaration contains substring s
+; IsClass()     x                   true if class
+; IsStruct()    x                   true if structure
+; IsTemplate()  x                   true if the class or the member is a template class
+; IsNested()    x                   true if the class is nested into another class
+; IsExport()    x                   true if the class has the export keyword
+; IsObject()    x                   true if the class is an object
+; IsAbstract()  x                   true if the class is pure virtual
+; IsImported()  x                   true if the class is imported (is not defined in diagram's branch)
+; IsPublic()        x   x   x   x   true if the member is public
+; IsPrivate()       x   x   x   x   true if the member is private
+; IsProtected()     x   x   x   x   true if the member is protected
+; IsStatic()        x   x   x   x   true if the member is static
+; IsConst()         x   x   x   x   true if the member is const
+; IsVolatile()      x   x   x   x   true if the member is volatile
+; IsAttribute()     x   x   x   x   true if the member is an  attribute
+; IsOperation()     x   x   x   x   true if the member is an operation
+; IsLink()          x   x   x   x   true if the member is a link
+; IsLinkType(Type)  x   x   x   x   true if the member is a link of the specified type
+; IsLinkCategory(Type)
+;                   x   x   x   x   true if the member is a link of the specified category
+; IsPureLink()      x   x   x   x   true if the member is a pure link (link-as-comment)
+; IsRegister()          x           true if the attribute has the register keyword
+; IsInline()                    x   true if the operation is inline
+; IsConstructorOrDestructor()
+;                               x   true if the operation is a constructor or a destructor
+; IsConstructor()               x   true if the operation is a constructor
+; IsDestructor()                x   true if the operation is a destructor
+; IsOperator()                  x   true if the operation is an operator
+; IsVirtual()                   x   true if the operation is virtual
+; IsPureVirtual()               x   true if the operation is pure virtual
+; IsOverloaded()                x   true if the operation is overloaded
+; IsInitiator()                 x   true if the operation is an initiator of a scenario
+; ------------------------------------------------------------------------
+
+; Commands supported by OME
+; ^^^^^^^^
+; (Optional command argument is written to the 8th parameter)
+
+; Command            Argument        Comment
+;
+; Orthogonal         -               Makes link "orthogonal" (as in Coad notation)
+; Vertical           -               Makes link "vertical" (as inheritance link)
+; Icon               IconArg         Inserts icon to a link
+; Role               RoleArg         Inserts role to a link
+; Color              ColorSpec       Changes the foreground color
+; Background         ColorSpec       Changes the background color
+; LineStyle          LineStyleArg    Changes the line style
+; Width              Width           Changes the width of line
+; FontStyle          FontStyleArg    Changes the font style
+; Font               FontSpec        Changes the font
+; Hilite             -               Displays the element as highlighted
+; Hide               -               Hides the diagram element
+; NodeShape          ShapeArg        Defines the shape of node (usually class)
+; RoleLabels         CardArg         Inserts Role labels to a link
+; Qualifiers         CardArg         Inserts Qualifier labels within rectangles at link edges
+; Prefix             symbol          Prefixes the member name with given symbol
+; PropertyInBraces   TagName         Insert label "TagName" in { } below the class name
+; PropertyIndented   TagName         Insert label "TagName" indented and in italic below the class name
+; PropertyInBracesValue
+;                    TagName         Insert label "TagName=Value" in { } below the class name
+; PropertyIndentedValue
+;                    TagName         Insert label "TagName=Value" indented and in italic below the class name
+; CardinalityDashed  CardArg         Inserts Coad-style cardinality using CardArg
+; CardinalityAsIcons CardArg         Inserts OMT-style cardinality using CardArg
+; CardinalityDotsReverse
+;                    CardArg         Inserts Unified-style cardinality using CardArg
+; ------------------------------------------------------------------------
+
+; Many commands: RoleLabels, Cardinality*, Qualifiers, Prop* specially process its argument.
+; If argument is identifier it extract the value of corresponding tag.
+; Otherwise, it accepts the argument as directly passed value.
+; For the commands effective on links:
+;   Given one of 2 ways value is separeted onto 2 parts by slash sign ('/').
+;   Each part is the string label to place at one of 2 edges of the link.
+;   The place and the order is determined by the command:
+;   Cardinality* : above link line.
+;   RoleLabels:    below link line
+;   Qualifiers:    in the rectangle squeezed to a class.
+
+;
+; Argument formats accepted by Commands
+; ^^^^^^^^
+
+; Argument      Format                              Examples
+
+; FontSpec      % FontName - Size - Style           "%times-12-i". May be "default"
+; FontStyleArg  [b][i][u]                           "i" (italic),
+;                                                   "u" (underline),
+;                                                   "b" (bold),
+;                                                   "ub" (underline bold)
+; ColorSpec     [rXXX][gXXX][bXXX]
+;               where XXX is in the range 0-255     "r255", "r99g99"
+; Width         Number in the range 1-99            "3"
+; LineStyleArg  solid | dash | dashdot | dot        "dot"
+; IconArg       {S|C|D}{O|A|U}#<StandardIconName>   "CO#Triangle" (for Aggregation)
+; RoleArg       {S|D}[G]#<StandardIconName>         "DBG#HalfCircle" (for Inheritance)
+; CardArg   the name of cardinality label tag   "Cardinalities"
+;               or directly passed string           "0..1/n"
+;       (in special format)
+; ------------------------------------------------------------------------
+; ShapeArg is the parameter for NodeShape command. It can be:
+; ^^^^^^^^
+; DefaultType
+; Note
+; RoundRectangle
+; RoundRectangleDoubleBorder
+; Rectangle
+; ShadowedRectangle
+; RectangleWithoutOperations
+; RectangleImpacted
+; StructuredCloud
+; ShadowedRectangleImpacted
+
+; ------------------------------------------------------------------------
+; IconArg is the parameter for Icon command. It has the following format:
+; ^^^^^^^
+; {Source|Center|Destination}{Online|Aboveline|Underline}#<StandardIconName>
+;
+; Only first (capitalized) characters can be specified for icon position.
+
+; <StandardIconName> is a standard icon names from:
+; ^^^^^^^^^^^^^^^^^^
+;
+; Empty
+; Triangle
+; HalfCircle
+; Arrow
+; ThickArrow
+; HalfArrow
+; Circle
+; FilledCircle
+; Box
+; FilledBox
+; BackArrow
+; Timeout
+; Sync
+; Rhomb
+
+; RoleArg is the parameter for Role command. It has the following format:
+; ^^^^^^^
+; {Source|Destination}[Grouping]#<StandardIconName>
+;
+; Only first (capitalized) characters can be specified for icon position.
+
+; CardArg is the parameter for CardLabels command.
+; ^^^^^^^
+; It is the tag name from which cardinality labels will be constructed.
+; The format of the value of this tag should be:
+; "k..l/m..n", where k, l, m, n can be a digit, 'n', or 'm'
+; The contents of the tag value before the slash will be used for label
+; at the source node, and contents after the slash will be used for label
+; at the destination node.
+;========================================================================
+
+; ------------------------------------------------------------------------
+; highlighting...
+
+; ------------------------------------------------------------------------
+; Class
+; Default color for classes
+Map40D=Class, 0, 1, "", "IsClass()", "Color", "r0g0b0"
+
+; Background color for classes and structures
+Map40C=Class, 0, 1, "", "IsClass()", "Background", "r255g255b255"
+Map40S=Class, 0, 1, "", "IsStruct()", "Background", "r255g255b255"
+
+; Display user-defined properties
+MapProp0=Class, 0, 1, "", "HasTag (Property)", "PropertyInBracesValue", "Property", OMT
+MapProp1=Class, 0, 1, "", "HasTag (Property)", "PropertyIndentedValue", "Property", Unified
+
+; Display classnames in bold
+Map42=Class, 0, 1, "", "IsStruct()", "Font", "%Arial-11-b"
+Map43=Class, 0, 1, "", "IsClass ()", "Font", "%Arial-11-b"
+
+; Display member names in plain
+Map44=Attribute, 0, 1, "", "IsAttribute()", "Font", "%Arial-11-"
+Map45=Operation, 0, 1, "", "IsOperation ()", "Font", "%Arial-11-"
+
+; Display structures with green border:
+Map41g=Class, 0, 1, "", "IsStruct()", "Color", "g99"
+
+; ----------------------------------
+; Notation specific nodes
+
+MapCoad45=Class, 0, 1, "", "IsAbstract ()", "NodeShape", "RoundRectangle", Coad
+MapCoad46=Class, 0, 1, "", "!IsAbstract ()", "NodeShape", "RoundRectangleDoubleBorder", Coad
+MapCoad47=Class, 0, 1, "", "IsStruct ()", "NodeShape", "RoundRectangleDoubleBorder", Coad
+
+MapOMT47=Class, 0, 1, "", "IsClass()", "NodeShape", "Rectangle", OMT
+MapOMT48=Class, 0, 1, "", "HasTag (Object)", "NodeShape", "RectangleWithoutOperations", OMT
+
+MapUnified47=Class, 0, 1, "", "IsClass()", "NodeShape", "RectangleImpacted", Unified
+MapUnified48=Class, 0, 1, "", "HasTag (Object)", "NodeShape", "StructuredCloud", Unified
+MapUnified50=Class, 0, 1, "", "HasTag (Utility)", "NodeShape", "ShadowedRectangleImpacted", Unified
+
+; ------------------------------------------------------------------------
+; Members
+
+; Private attributes black, others dark cyan
+Map51A=Attribute, 0, 1, "", "!IsPrivate()", "Color", "r0g128b128"
+
+; Private operations black, others dark green
+Map51O=Operation, 0, 1, "", "!IsPrivate()", "Color", "r0g128b0"
+
+; Display const members bold
+Map52=Member, 0, 1, "", "IsConst()", "FontStyle", "b"
+
+; Display labels of virtual operations with italic font:
+Map53=Operation, 0, 1, "", "IsVirtual()", "FontStyle", "i"
+
+; Display operations with scenario underlined
+Map55=Operation, 0, 1, "", "IsInitiator()", "FontStyle", "u"
+
+; Display visibility symbols of members in Coad, OMT and Unified
+;X Map56=Member, 0, 1, "", "IsPublic ()", "Prefix", "+", Coad
+;X Map57=Member, 0, 1, "", "IsPublic ()", "Prefix", "+", OMT
+Map58=Member, 0, 1, "", "IsPublic ()", "Prefix", "+", Unified
+
+;X Map59=Member, 0, 1, "", "IsProtected ()", "Prefix", "#", Coad
+;X Map60=Member, 0, 1, "", "IsProtected ()", "Prefix", "#", OMT
+Map61=Member, 0, 1, "", "IsProtected ()", "Prefix", "#", Unified
+
+;X Map62=Member, 0, 1, "", "IsPrivate ()", "Prefix", "-", Coad
+;X Map63=Member, 0, 1, "", "IsPrivate ()", "Prefix", "-", OMT
+Map64=Member, 0, 1, "", "IsPrivate ()", "Prefix", "-", Unified
+
+; Display leading '$' for static members in OMT and Unified
+;X Map65=Member, 0, 1, "", "IsStatic ()", "Prefix", "$", OMT
+Map66=Member, 0, 1, "", "IsStatic ()", "Prefix", "$", Unified
+
+; ------------------------------------------------------------------------
+; Links
+; ------------------------------------------------------------------------
+
+; Display association links in blue:
+MapLnkCol01=Link, 0, 1, "", "IsLinkCategory (Association)", "Color", "r0g0b255"
+
+; Display aggregation links in dark blue:
+MapLnkCol02=Link, 0, 1, "", "IsLinkCategory (Aggregation)", "Color", "r0g0b130"
+
+; Display inheritance links in dark magenta:
+MapLnkCol03=Link, 0, 1, "", "IsLinkType (Inheritance)", "Color", "r128g0b128"
+
+; ------------------------------------------------------------------------
+; General
+
+; MapLnk00=Link, 0, 1, "", "IsLink ()", "Font", "default"
+MapLnk01=Link, 0, 1, "", "IsLink ()", "Width", "2"
+MapLnk02=Link, 0, 1, "", "IsLink ()", "Orthogonal", ""
+
+MapLnk03=Link, 0, 1, "", "HasTag (Qualifiers)", "Qualifiers", "Qualifiers", OMT
+MapLnk04=Link, 0, 1, "", "HasTag (Qualifiers)", "Qualifiers", "Qualifiers", Unified
+MapLnk05=Link, 0, 1, "", "HasTag (Roles)", "RoleLabels", "Roles", Coad
+MapLnk06=Link, 0, 1, "", "HasTag (Roles)", "RoleLabels", "Roles", OMT
+MapLnk07=Link, 0, 1, "", "HasTag (Roles)", "RoleLabels", "Roles", Unified
+
+; ------------------------------------------------------------------------
+; Blueprint specific
+; Do not change the order of groups of commands
+
+; default pointer association cardinality: 0..1
+MapAsoPtr04=Link, 0, 1, "", "IsLinkType (AssociationPtr)", "CardinalityDashed", "0..1/", Coad
+MapAsoPtr03=Link, 0, 1, "", "IsLinkType (AssociationPtr)", "CardinalityAsIcons", "0..1/", OMT
+MapAsoPtr05=Link, 0, 1, "", "IsLinkType (AssociationPtr)", "CardinalityDotsReverse", "0..1/", Unified
+
+; default template association cardinality: 0..n
+MapAsoMem04=Link, 0, 1, "", "IsLinkType (AssociationTmpl)", "CardinalityDashed", "0..n/", Coad
+MapAsoMem03=Link, 0, 1, "", "IsLinkType (AssociationTmpl)", "CardinalityAsIcons", "0..n/", OMT
+MapAsoMem05=Link, 0, 1, "", "IsLinkType (AssociationTmpl)", "CardinalityDotsReverse", "0..n/", Unified
+
+
+; default template aggregation cardinality: 0..n
+MapAggMem04=Link, 0, 1, "", "IsLinkType (AggregationTmpl)", "CardinalityDashed", "1..n/", Coad
+MapAggMem03=Link, 0, 1, "", "IsLinkType (AggregationTmpl)", "CardinalityAsIcons", "1..n/", OMT
+MapAggMem05=Link, 0, 1, "", "IsLinkType (AggregationTmpl)", "CardinalityDotsReverse", "1..n/", Unified
+
+
+; Display cardinality labels on links, that has tag "Cardinalities". Take a label from the tag value.
+MapCardCoad=Link, 0, 1, "", "HasTag (Cardinalities)", "CardinalityDashed", "Cardinalities", Coad
+MapCardOMT=Link, 0, 1, "", "HasTag (Cardinalities)", "CardinalityAsIcons", "Cardinalities", OMT
+MapCardUnified=Link, 0, 1, "", "HasTag (Cardinalities)", "CardinalityDotsReverse", "Cardinalities", Unified
+
+; Display Inheritance with Vertical lines, and
+; HalfCircle icon below line near Destination class:
+MapInh01=Link, 0, 1, "", "IsLinkType (Inheritance)", "Vertical", ""
+MapInh02=Link, 0, 1, "", "IsLinkType (Inheritance)", "Role", "DBG#HalfCircle", Coad
+MapInh04=Link, 0, 1, "", "IsLinkType (Inheritance)", "Role", "DBG#Triangle", OMT
+MapInh05=Link, 0, 1, "", "IsLinkType (Inheritance)", "Role", "DBG#", Unified
+MapInh06=Link, 0, 1, "", "IsLinkType (Inheritance)", "Icon", "DO#ThickArrow", Unified
+
+
+; display aggregation links with notation specific icons...
+; Triangle icon On line in the Center between classes
+MapAgg00=Link, 0, 1, "", "IsLinkCategory (Aggregation)", "Vertical", ""
+MapAgg01=Link, 0, 1, "", "IsLinkCategory (Aggregation)", "Icon", "CO#Triangle", Coad
+MapAgg02=Link, 0, 1, "", "IsLinkCategory (Aggregation)", "Icon", "SO#Rhomb", OMT
+MapAgg04=Link, 0, 1, "", "IsLinkCategory (Aggregation)", "Icon", "SO#Rhomb", Unified
+
+; Display message link as dotted thin line with an arrow at the destination
+;MapMsg00=Link, 0, 1, "", "IsLinkCategory (Message)", "Color", "r0g128b0"
+;MapMsg01=Link, 0, 1, "", "IsLinkCategory (Message)", "Width", "1"
+;MapMsg02=Link, 0, 1, "", "IsLinkCategory (Message)", "LineStyle", "dot"
+;MapMsg03=Link, 0, 1, "", "IsLinkCategory (Message)", "Icon", "DO#Arrow"
+
+; ------------------------------------------------------------------------
+; Filters shown in the Filter dialog
+
+; ------------------------------------------------------------------------
+; Show/Hide all attributes:
+MapFilter00=Attribute, 1, 0, "All attributes", "IsAttribute ()", "Hide", ""
+
+; Show/Hide all operations:
+MapFilter01=Operation, 1, 0, "All operations", "IsOperation ()", "Hide", ""
+
+; Show/Hide private members:
+MapFilter02=Attribute, 1, 0, "Private attributes", "IsPrivate()", "Hide", ""
+MapFilter03=Operation, 1, 0, "Private operations", "IsPrivate()", "Hide", ""
+
+; Show/Hide constructors and destructors:
+MapFilter20=Operation, 1, 0, "Constructors and destructors", "IsConstructorOrDestructor()", "Hide", ""
+
+; Show/Hide non-virtual operations:
+MapFilter21=Operation, 1, 0, "Non-virtual operations", "!IsVirtual()", "Hide", ""
+
+; Show/Hide static operations:
+MapFilter22=Operation, 1, 0, "Static operations", "IsStatic()", "Hide", ""
+
+; Show/Hide Aggregation links:
+MapFilter31=Link, 1, 0, "Aggregation links", "IsLinkCategory (Aggregation)", "Hide", ""
+
+; Show/Hide Association links:
+MapFilter33=Link, 1, 0, "Association links", "IsLinkCategory (Association)", "Hide", ""
+
+; Show/Hide Inheritances:
+MapFilter34=Link, 1, 0, "Inheritances", "IsLinkType (Inheritance)", "Hide", ""
+
+; Show/Hide imported classes:
+MapFilter35=Class, 1, 0, "Imported classes", "IsImported ()", "Hide", ""
+
+[Blueprints]
+
+; Format:
+;
+; BlueprintXX=Type, "MenuName", "DeclarationTemplate", "DefinitionTemplate", LinkKind, LinkCategory, "IconId", "IconLabel", "ToolTip"
+;
+; Type ::=Class | Attribute | Operation
+;   determines the type of model object
+; MenuName ...
+;   ...is displayed in Code Editor's dialogs in the field 'Blueprint'
+; DeclarationTemplate ...
+;   ...is used for generating the declaration source code of the model object
+; DefinitionTemplate ...
+;   ...is used for generating the definition source code of the model object
+;   about templates see below
+; LinkKind ::=<user-defined-identifier>
+;   determines the kind of link corresponding to the model object (attribute)
+;   LinkKind is in correspondence to the attribute due to Parser recognizing.
+; LinkCategory ::=Aggregation | Association | <user-defined-identifier>
+;   determines the category of link corresponding to the model object (attribute)
+;   LinkCategory is in correspondence to the attribute due to Parser recognizing.
+; Note: LinkKind and LinkType fields can be ommited.
+; IconId determines the icon established in the Icon tool bar for corresponding blueprint.
+;   ...is the name (without extension) of the file containing bitmap for icon
+;   The bitmaps for icons are stored in the directory <Installation>\BIN\ICONS\<Notation>
+;    where: <Installation> is the installation directory,
+;           <Notation> is one of the directory coad, omt, or unified.
+;   The bitmaps is taken from the directory in accordance to the notation of the diagram editor.
+;   Preinstalled icon file names have the mnemonic value:
+;   IconId ::=<Signature><ColorPallete>
+;     <ColorPallete> is the number from 0 to 5.
+;     <Signature> ::=<ObjectId> | <LinkId>
+;       <ObjectId> ::=C | B | A | O
+;       ... which means: Class, aBstract, Attribute, Operation
+;       <LinkId> ::=<LinkCategory><MultiPlicity>
+;       <LinkCategory> ::=I | S | G
+;       ... which means: Inheritance, aSsociation, aGgregation
+;       <MultiPlicity> ::=O | _ | Z | N
+;       ... which means: Optional (0..1), Only (1..1), Zero to N (0..n), maNy (1..n)
+; IconLabel
+;   ..is the string labelled the icon in the Icon ToolBar
+; ToolTip
+;   ...is the string shown in status bar when the mouse comes onto the toolbar-icon
+
+; Templates are the C-strings in quotes. They consist of constant text and Code-Editor variables.
+; ^^^^^^^^^
+; Variables         Expanded to
+; ^^^^^^^^^
+; %Name%            name of the object
+; %ClassName%       name of the class (usually used for members)
+; %Type%            type (for attributes and operations)
+; %Dst%             name of the destination class (for links)
+; %Dimension%       dimension (for attributes)
+; %Arguments%       arguments within '()' (for operations)
+; %PostArguments%   modifiers, or initialization list after ')' (for operations)
+; %Body%            body of operation
+; %FileMacro%       macro identifier=%ClassName%_<HeaderExtension> (for classes)
+; %filemacro%       macro identifier=tolower(%ClassName%_<HeaderExtension>)
+; %FILEMACRO%       macro identifier=toupper(%ClassName%_<HeaderExtension>)
+;                   where <HeaderExtension> is defined by DefaultHeaderExtension option in CodeEditor group.
+; %IncludeStm%      include statement #include "HeaderFileName" (for classes)
+; %ClassId%         unique class identifier (for classes)
+; %Comment%         design comment
+; %Declaration%     contents of Declaration field of the dialog quotably (for attributes & operations)
+; %Any%             <none>
+;
+; %Any% is a special variable for Parser to recognize links. It matches any C++ token.
+; It is not used in creative Code Editor blueprints
+;
+; Look for the word "message" later in this section and uncomment the appropriate lines
+; to get an example of user-defined link definition
+
+; ------------------------------------------------------------------------
+; Classes
+
+; Abstract class - the class with pure virtual operation
+
+Class00=Class, "Abstract", "#ifndef %FileMacro%\n#define %FileMacro%\n//-----------------------------------------------------------------\n//\n//-----------------------------------------------------------------\n\t%Comment%\nclass %ClassName%\n{\npublic:\n\tvirtual ~%ClassName%() = 0; \n};\n#endif\n", "%IncludeStm%\n\n/**# implementation %ClassName%:: id(%ClassId%) \n*/", "B0", "", "Abstract class - class with pure virtual operation"
+
+; Class
+
+Class01=Class, "Class",     "#ifndef %FileMacro%\n#define %FileMacro%\n//-----------------------------------------------------------------\n//\n//-----------------------------------------------------------------\n\t%Comment%\nclass %ClassName%\n{\npublic:\n};\n#endif\n", "%IncludeStm%\n\n/**# implementation %ClassName%:: id(%ClassId%) \n*/", "C0", "", "Class"
+
+; ------------------------------------------------------------------------
+; Members
+
+; Generic attribute
+
+Attribute00=Attribute, "Attribute", "%Comment%\n\t%Type% %Name%%Dimension%", "%Type% %ClassName%::%Name%%Dimension%", "A0", "", "Default attribute"
+
+; Generic operation
+
+Operation00=Operation, "Operation", "%Comment%\n\t%Type% %Name%%Arguments% %PostArguments%", "%Type% %ClassName%::%Name% %Arguments% %PostArguments%\n{\n%Body%\n}", "O0", "", "Default operation"
+
+; ------------------------------------------------------------------------
+; Attribute-as-Links, Associations
+; uncomment for additional associations
+
+; association 0..1
+; p=Attribute, "Association 0..1", "%Comment%\n\t%Dst% * %Name%", "",,, "SO0", "", "Association, 0 to 1, implemented as pointer to destination class"
+
+; association 1..1
+; po=Attribute, "Association 1..1", "/**#: [Cardinalities = \"1..1/\"]*/\n\t%Dst% * %Name%", "",,, "S_0", "", "Association, 1 to 1, implemented as annotated pointer to destination class"
+
+; association 0..n
+vp=Attribute, "Association 0..n", "%Comment%\n\tvector <%Dst% *> %Name%", "",,, "SZ0", "", "Association, 0 to n, implemented as vector of pointers"
+
+; association 1..n
+; vp1n=Attribute, "Association 1..n", "/**#: [Cardinalities = \"1..n/\"]*/\n\tvector <%Dst% *> %Name%", "",,, "SN0", "", "Association, 1 to n, implemented as annotated vector of pointers"
+
+; ------------------------------------------------------------------------
+; Attribute-as-Links, Aggregations
+; uncomment for additional aggregations
+
+; aggregation 0..1
+; v01=Attribute, "Aggregation 0..1", "/**#: [Cardinalities = \"0..1/\"]*/\n\tvector <%Dst%> %Name%", "",,, "GO0", "", "Aggregation, 0 to 1, implemented as annotated vector"
+
+; aggregation 1..1
+; v11=Attribute, "Aggregation 1..1", "/**#: [Cardinalities = \"1..1/\"]*/\n\tvector <%Dst%> %Name%", "",,, "G_0", "", "Aggregation, 1 to 1, implemented as annotated vector"
+
+; aggregation 0..n
+; v1n=Attribute, "Aggregation 0..n", "/**#: [Cardinalities = \"0..n/\"]*/\n\tvector <%Dst%> %Name%", "",,, "GZ0", "", "Aggregation, 0 to n, implemented as annotated vector"
+
+; aggregation 1..n
+v=Attribute, "Aggregation 1..n", "%Comment%\n\tvector <%Dst%> %Name%", "",,, "GN0", "", "Aggregation, 1 to n, implemented as vector"
+
+; ------------------------------------------------------------------------
+; Link-as-Comment (pure link):
+; uncomment for additional aggregations and associations
+
+;PureAggr=Attribute, "Pure aggregation", "/**# aggregation <%Dst%> %Name%*/", "", PureAggr,, "G_1", "", "Link-as-Comment (pure link): Aggregation"
+;PureAssoc=Attribute, "Pure association", "/**# association <%Dst%> %Name%*/", "", PureAssoc,, "S_1", "", "Link-as-Comment (pure link): Association"
+
+; Pure link: message
+;message=Attribute, "Pure message", "/**# message <%Dst%> %Name% */", "",,, "M2", "", "Message (pure link)"
+
+; ------------------------------------------------------------------------
+; Parser only
+
+; pointers to destination class -- parser only
+match_p=Attribute, "", "%Dst% * %Name%", "", AssociationPtr, Association
+
+; pointers as template argument -- parser only
+match_tp=Attribute, "", "%Any% <%Dst% *> %Name%", "", AssociationTmpl, Association
+
+; members as template argument -- parser only
+match_tm=Attribute, "", "%Any% <%Dst%> %Name%", "", AggregationTmpl, Aggregation
+
+[Tags]
+
+; Format:
+;
+; TagXX=Type, "TagName", "TagFormat"
+;
+; Type ::=Ident | Class | Member | Attribute | Operation
+;   determines to which Type of model object the tag may be applied
+;   Ident referred to any object, including Class, Attribute and Operation
+;   Member referred to Attribute and Operation
+; TagName is displayed in Code Editor dialogs as the title of tag,
+;   and is inserted as lvalue in design comment:
+;   /**#: [TagName=TagValue] */
+;   where symbols /, #, :, , [,=and ] is typed quotly
+;   and TagValue format is determined by TagFormat.
+; TagFormat ::=%s | %s<Length> | %sw | %sm | %b | %#<List> | %f | %m | %r
+;   where: <Length> is the integer number
+;          <List> ::=Ident1[,Ident2]...
+; ------------------------------------------------------------------------
+
+; TagFormat     Value                       Control element in dialog
+;
+; %s            C-string in quotes          Edit box: single line
+; %s<Length>    -"- at least <Length>       Edit box: validating length
+;               characters
+; %sw           One word in quotes          Edit box: validating for single word
+; %sm           C-string in quotes          Edit box + Edit button to invoke multiline editbox
+; %b            [TagName] for true          Check box
+;               <empty> for false
+; %#<List>      Identifier from List        Drop-down combobox
+; %f            File name in quotes         Edit box + Browse button to invoke File dialog
+;                                           Also, double-click opens the file
+; %m            "k..l/m..n"                 2 edit boxes, switching by press '/', validating format.
+;               k,l,m,n is a digit or 'n'
+; %r            "string1/string2"           2 edit boxes, switching by press '/'.
+;
+;========================================================================
+
+; Some tags are defined by notations and have corresponding statements in View group
+; ------------------------------------------------------------------------
+; Commenting any object
+
+; Alias name is displayed instead identifier
+Tag01=Ident, "Alias", "%s"
+
+; Description is free multi line comment
+Tag02=Ident, "Description", "%sm"
+
+; Note is displayed as label in rectangle (for classes)
+Tag03=Ident, "Note", "%sm"
+
+; Level of development phase
+Tag04=Ident, "Level","%#Analysis,Design,Implementation"
+
+; ------------------------------------------------------------------------
+; Commenting classes
+TagCl01=Class, "Stereotype", "%s"
+TagCl02=Class, "Utility", "%b"
+TagCl03=Class, "Object", "%b"
+TagCl14=Class, "Document", "%f"
+TagCl15=Class, "Property", "%s"
+
+; ------------------------------------------------------------------------
+; Commenting attributes, espesially used for links
+TagAt01=Attribute, "Label", "%s"
+
+; Cardinalities is the cardinality label
+TagAt02=Attribute, "Cardinalities", "%m"
+TagAt03=Attribute, "Roles", "%r"
+TagAt04=Attribute, "Qualifiers", "%r"
+
+; ------------------------------------------------------------------------
+; Commenting operations
+TagOp01=Operation, "Inputs", "%s"
+TagOp02=Operation, "Output", "%s"
+
+[ScenarioEditor]
+
+; DefaultFont ::=%fontName-fontSize-fontStyle
+;   fontName  ::=helvetica | courier | times
+;   fontStyle ::=[b][i][u]
+;   b - bold, i -italic, u - underline
+DefaultFont=%Arial-11-
+
+; if ConfirmCopy, user is asked to confirm copying
+ConfirmCopy=No
+
+; if ConfirmMove, user is asked to confirm moving
+ConfirmMove=No
+
+; if ConfirmDelete, user is asked to confirm deletion
+ConfirmDelete=No
+
+; if ConfirmHide, user is asked to confirm removing (hiding) from scenario
+ConfirmHide=Yes
+
+; if KeyDeclarationInStatusLine, the declaration of a focused operation
+; is displayed in status bar of the IDE
+KeyDeclarationInStatusLine=Yes
+
+; MemberDisplayType ::=None | Cpp | Unified
+;  None -       member type is not displayed
+;  Cpp  -       member type is displayed in C++ format: <Type> <Name>
+;  Unified -    member type is displayed in the Unified format: <Name>:<Type>
+;  (applied to operations only, of course)
+MemberDisplayType=None
+
+; Zoom ratio in % for printing
+PrintZoom=100
+
+; if ShowPrintGrid, the grid lines between print pages is displayed on the screen
+ShowPrintGrid=No
+
+[CodeEditor]
+
+; SourcePrologue defines the string inserted in the beginning of each Source file
+; when it is created.
+SourcePrologue="// -----------------\n#include <vector>  \nusing namespace std;\n//  ----------------\n\n"
+
+; HeaderPrologue defines the string inserted in the beginning of each Header file
+; when it is created.
+HeaderPrologue=""
+
+;FileNameLengthLimit ::=0 | 1 | <n>, where <n> is in the range from 8 to 255
+;   0 - use standard DOS file names (8 - names + 3 - extension)
+;   1 - use long file names, supported in Windows/NT and Windows 95
+;   <n> - is the user-defined length limit for file names
+; FileNameLengthLimit determines initial state of the check "Use long file name"
+; and maximum length of automatically constructed file name in the Class dialog.
+FileNameLengthLimit=255
+
+; set default extension for "Header file" name of the Class dialog
+DefaultHeaderExtension=.h
+
+; set default extension for "Source file" name of the Class dialog
+DefaultSourceExtension=.cpp
+
+; if DefaultRemoveFromProject, check box "Remove file from project" is
+; initially checked in the Delete class dialog
+DefaultRemoveFromProject=Yes
+
+; if DefaultRemoveFile, check box "Remove file from disk" is
+; initially checked in the Delete class dialog
+DefaultRemoveFile=Yes
+
+; if DisplayDefaultType=No, the Attribute and Operation dialogs
+; shows only member name instead of full declaration in the "Declaration" field
+; for default member types: "int xxxxxxx;" and "void xxxxxxx();".
+DisplayDefaultType=No
+
+; String delimiters, inserted between similar source code construction.
+; The format is C-string in quotes.
+
+;  between declarations of classes (1 empty line between)
+BlanksBetweenClassDecl="\n\n"
+
+;  between declarations of members (from new line and indented 1 tab)
+BlanksBetweenDecls="\n\t"
+
+;  between definitions of members (1 empty line between)
+BlanksBetweenDefs="\n\n"
+
+;  between items in declaration list via comma. (like list base classes)
+;  ( 1 space after comma before next item)
+BlanksBetweenCommaList=" "
+
+; if ReformatAfterCodeEditor, source Code Reformatter is automatically called
+; after each Code Editor action.
+; Manual call: Shift-Ctrl-F on the project node or in the Text Editor
+ReformatAfterCodeEditor=0
+
+; Allow Code Editor to modify source files located outside project subdirectory.
+ModifyFilesOutsideProject=0
+
+; if CStyleIncludeNames, Code Editor generates include file name in Microsoft C-style,
+; i.e. without the path relative to project directory,
+; otherwise the include statement contain the relative path to the header file
+CStyleIncludeNames=Yes
+
+[PrintServer]
+
+; Header and Footer are the strings (without quotes) printed in corresponding positions
+; A string may contain variables:
+;   %P - page number
+;   %D - expanded to current date
+;   %F - expanded to View node file name
+Header=%F
+Footer=Page %P
+
+; Margin offsets from the corresponding page edge.
+;  " - inches
+; cm - centimeters
+; mm - millimeters
+LeftMargin=1"
+RightMargin=1"
+TopMargin=1"
+BottomMargin=1"
+
+; if PrintEmpty, empty pages are printed (not supported)
+PrintEmpty=1
+
+; if Border, the thin border is printed around the page
+Border=1
+
+; Header and footer fonts
+; Format:
+; HeaderFont ::="FaceName", <Height>, <Width>, <Escapement>, <Orientation> , <Weight>, <PitchAndFamily>, <Italic>, <Underline>, <Strikeout>
+; Missed parameters mean default values (leave comma within the string)
+HeaderFont="Times New Roman",20,0,0,0,700,18,0,0,0
+FooterFont="Times New Roman",17,0,0,0,700,18,255,1,0
+
+[Parser]
+
+; if SkipStandardDirectories, the include files placed in the standard include directories
+; are not processed, and therefore the classes declared in them are not included into Object Model.
+; Standard include directories are defined in Options | Project | Include path
+SkipStandardDirectories=YES
+
+; Explicit list of directories to be excluded from processing include files.
+; Actually it is more significant for Parser then SkipStandardDirectories.
+SkipDirectories=C:\BC5\include
+
+; if SkipStructs, structures are not included into Object Model
+SkipStructs=NO
+
+; if SkipEnums, enumerated types are not processed
+SkipEnums=YES
+
+; if SubstituteMacros, macro variables are substituted in the processed source code
+SubstituteMacros=NO
+
+[InformationExport]
+
+; Default Inforamtion Export templates directory
+TemplateDir=..\TOGETHER\IE
+
+; Custom execute values
+Custom1=hcw /a /c /e /m %helpproject%; #helpview %fullpath(output)%\%name(output)%.hlp
+Custom2=winword %output%
+LastTemplate=
+LastOutput=
+LastOptions=4
+LastSave=0
+
+[ObjectModelEditor]
+
+; DefaultFont ::=%fontName-fontSize-fontStyle
+;   fontName  ::=helvetica | courier | times
+;   fontStyle ::=[b][i][u]
+;   b - bold, i -italic, u - underline
+DefaultFont=%Arial-9-
+
+; if LayoutSemiAutomatic, dragging an object is followed by layouting
+;  to make sure links looks good
+LayoutSemiAutomatic=1
+
+; if ShowModelComponents, the name of the subtarget of a class is displayed below the class name
+ShowModelComponents=1
+
+; if ShowLinkAttributes, the Attributes-as-Links is displayed among attributes
+ShowLinkAttributes=0
+
+; if ShowTemplateArgs, the arguments of a template class is displayed at the right upper corner of the class
+ShowTemplateArgs=1
+
+; if ShowTypeAsLinkLabel, the type of Attribute-as-Link is displayed as a label on the link near the source
+ShowTypeAsLinkLabel=0
+
+; ShowForward ::=All | Inheritance | None
+; All -           all forward-declared (not defined) classes are displayed (grayed)
+; Inheritance -   only undefined base classes are displayed
+; None -          forward-declared classes are not displayed     
+ShowForward=All
+
+; if JoinLinks, a number of same kind links between the same two classes are joined into one link.
+JoinLinks=1
+
+; MemberDisplayType ::=Auto | None | Cpp | Unified
+;  Auto -       member type is dependent on notation: Coad=> None, OMT and Unified => Unified
+;  None -       member type is not displayed
+;  Cpp  -       member type is displayed in C++ format: <Type> <Name>
+;  Unified -    member type is displayed in the Unified format: <Name>:<Type>
+MemberDisplayType=Auto
+
+; Zoom ratio in % for printing
+PrintZoom=100
+
+; if ShowPrintGrid, the grid lines between print pages is displayed on the screen
+ShowPrintGrid=0
+
+; if KeyDeclarationInStatusLine, the declaration of a focused element
+; is displayed in status bar of the IDE
+KeyDeclarationInStatusLine=Yes
+
+; if ConfirmCopy, user is asked to confirm copying
+ConfirmCopy=0
+
+; if ConfirmMove, user is asked to confirm moving
+ConfirmMove=0
+
+; if ConfirmDelete, user is asked to confirm deletion
+ConfirmDelete=0
+
+; ShowOperationParameters ::=Auto | Yes | No
+;  Auto -       display of operation parameters is dependent on notation: 
+;               Coad=> None, OMT and Unified => Yes
+;  Yes  -       display operation parameters with operation names
+;  No   -       NOT display operation parameters 
+ShowOperationParameters=Auto
+
+; The maximum number of characters in class labels
+MaximumClassLabelLength=20
+
+[Formatter]
+
+; Typename options are accomodative. They define the identifiers which are enforced to be a type.
+Typename=string
+Typename=DEFINE_RESPONSE_TABLE
+Typename=DECLARE_RESPONSE_TABLE
+Typename=HWND
+Typename=vector
+;       End of user type names
+BracesAlignType2=Yes
+BracesAlignType3=Yes
+CodeLineCommentColumn=41
+DeclarationIndent=8
+DeclLineCommentColumn=41
+IndentationSpaces=4
+MaximumLineLength=132
+PreprocessorElseEndifCommentColumn=41
+SpacesAfterCaseCode=4
+TabSize=8
+UseTabsForSpaces=No
+
+[FindDialog]
+
+; Keep the state of search options
+; The value is hexadecimal disjunction of flags:
+; 0x0001 - Whole words only
+; 0x0002 - Case sensitive
+; 0x0400 - Classes
+; 0x0800 - Attributes
+; 0x1000 - Operations
+; 0x2000 - Messages
+LastOptions=3d52
+
+; Keep the last text in 'Text to find' combobox
+LastText=
+

SpriteEd/SPRITEED.mbt

Binary file added.

SpriteEd/SPRITEED.mrt

Binary file added.

SpriteEd/SPRITEED.r$p

+/Twe/x/l/v/c/C/k /V3.10 /LC:\BC5\LIB +
+-v+ C:\BC5\LIB\C0WL.OBJ+
+-v+ _SLEEPX.OBJ+
+-v+ SPRITEED.OBJ+
+-v+ MAINWIN.OBJ+
+-v+ APP.OBJ+
+-v+ ABOUTBOX.OBJ
+SPRITEED.EXE
+
+-v+ C:\BC5\LIB\OWLWI.LIB+
+-v+ C:\BC5\LIB\BIDSI.LIB+
+-v+ C:\BC5\LIB\BWCC.LIB+
+-v+ C:\BC5\LIB\CTL3DV2.LIB+
+-v+ C:\BC5\LIB\IMPORT.LIB+
+-v+ C:\BC5\LIB\CRTLDLL.LIB
+SPRITEED.DEF
+SPRITEED.RES

SpriteEd/SprWork.H

+/**********************************************************************
+ * SprWork.  This contains all the sprite-resource related work (not  *
+ * the drawing of such sprites).  But all manipulation of the data and*
+ * loading / saving the sprites is here.                              *
+ **********************************************************************/
+
+#ifndef __INC_SPRWORK_H
+#define __INC_SPRWORK_H
+/*-------------------------------------------------------------------------*/
+typedef struct _S_RESSPRITECREATIONDATA /* Data to pass to CreateSprite() */
+{
+	WORD PixelsWidth, PixelsHeight;
+	BYTE BitsPerPixel;
+} S_RESSPRITECREATIONDATA, *PS_RESSPRITECREATIONDATA;
+/*-------------------------------------------------------------------------*/
+#ifdef __cplusplus /* Compiling as C++? */
+extern "C" { /* These are C functions! */
+#endif /*__cplusplus*/
+
+PSPRITE LoadSpriteFromSpriteFile(FILE* fs, S_RESOBJHEADER* WantResObjHeader);
+BOOL SaveSpriteToSpriteFile(FILE* fs, S_RESOBJHEADER* ResObjHeader, PSPRITE PSprite);
+unsigned long GetSpriteDataSize(PS_RESSPRITEHEADER PSpriteHeader);
+PSPRITE CreateSprite(PS_RESSPRITECREATIONDATA scd); /* Creates a sprite */
+
+#ifdef __cplusplus /* C++? */
+} /* end extern "C"s */
+#endif /*__cplusplus*/
+/*-------------------------------------------------------------------------*/
+#endif /*__INC_SPRWORK_H*/

SpriteEd/SpriteEd.OBR

Binary file added.

SpriteEd/SpriteEd.RH

+#define IDD_IMAGEDIMS	2
+#define IDC_STATICTEXT1	101
+#define IDC_STATICTEXT2	102
+#define IDC_STATICTEXT3	103
+#define IDC_EDIT1	104
+#define IDC_HEIGHTEDIT	104
+#define IDC_EDIT2	105
+#define IDC_WIDTHEDIT	105
+#define IDC_EDIT3	106
+#define IDC_BPPEDIT	106
+#define IDC_STATICTEXT4	107
+#define IDC_SIZERESULT	107
+#define IDI_SPRITE	2
+#define IDD_ABOUTBOX	1
+#define IDC_INFOTEXT	102
+#define ACCELERATORS_MAIN	1
+#define MENU_MAIN	1
+#define CM_HELP_ABOUT	109
+#define CM_WINDOW_CASCADE 110
+#define CM_WINDOW_HTILE 111
+#define CM_WINDOW_VTILE 112
+#define CM_WINDOW_ARRANGEICONS 113
+#define CM_WINDOW_CLOSEALL 114
+#define CM_WINDOW_MINIMIZEALL 115
+#define CM_WINDOW_RESTOREALL 116
+#define CM_IMAGE_ATTRIBS 117
+#define CM_FORMATS_COPPS	107
+#define CM_POPUPITEM	106
+#define CM_FILE_EXIT	105
+#define CM_FILE_NEW	101
+#define CM_FILE_OPEN	102
+#define CM_FILE_SAVE	103
+#define CM_FILE_SAVEAS	104
+#define IDI_APPICON	1
+#define IDC_STATICICON 101
+#define STRINGTABLESTART (200)
+#define IDS_APPNAME (STRINGTABLESTART)

SpriteEd/edwin.cpp

+/* This class controls an editor window (sprite editing) */
+
+#include <Owl\MDIChild.H>
+#include <Assert.H>
+#include "Stds\DLStdInc.H"
+#include "Stds\MoreLmts.H"
+#pragma hdrstop
+
+#include "CoppsRes.H" // Technical resource definitions
+#include "EdWin.H"
+//---------------------------------------------------------------------------
+NATIVEBOOLTYPE TEdWin::_expressClose = FALSE;
+int TEdWin::_numChildren = 0;
+//---------------------------------------------------------------------------
+TEdWin::TEdWin(TMDIClient& parent, int ChildNum)
+:	TMDIChild(parent),
+	_childNum(ChildNum),
+   _spriteData(NULL) // Sprite data has not yet been allocated
+{
+	++_numChildren; // Another child created
+   SetupCaption("");
+}
+//---------------------------------------------------------------------------
+TEdWin::~TEdWin()
+{
+	--_numChildren; // Another child destroyed
+
+   if (_spriteData) /* A sprite was allocated? */
+   	free(_spriteData); /* Free the sprite */
+}
+//---------------------------------------------------------------------------
+NATIVEBOOLTYPE TEdWin::CanClose()
+{
+	return _expressClose
+   	|| MessageBox("Close this window?",
+      	"Query",
+         MB_YESNO | MB_ICONQUESTION) == IDYES;
+}
+//---------------------------------------------------------------------------
+void TEdWin::SetExpressClose(NATIVEBOOLTYPE tf)
+{
+	_expressClose = tf;
+}
+//---------------------------------------------------------------------------
+int TEdWin::GetNumChildren()
+{
+	return _numChildren;
+}
+//---------------------------------------------------------------------------
+void TEdWin::SetupCaption(const char* FileName)
+{
+	char deftext[] = " Sprite #";
+   char defname[] = "Untitled";
+   char blank[] = "";
+   char* buff; // Will be allocated later
+   char* usestr;
+   char* usename;
+   char strofnum[18]; /* For number conversion */
+
+   assert(FileName); /* Must send pointer, even if it's to a blank string */
+   if (FileName[0] == '\0') /* No string sent? */
+   {
+   	usestr = deftext; // Use default text
+      usename = defname;
+   }
+   else // String sent
+   {
+   	usestr = blank; // Add nothing on the end
+      usename = (char*)FileName; // Case const to r/w (just don't use the pointer to modify it!
+   }
+
+   buff = new char[strlen(usename)+strlen(deftext)+sizeof(strofnum)];
+
+   strcpy(buff, usename);
+   strcat(buff, usestr);
+   itoa(_childNum, strofnum, 10);
+   strcat(buff, strofnum); /* Add the number to the caption */
+
+   SetCaption(buff); /* Implement the caption (display) */
+
+   // Cleaup
+   delete[] buff;
+}
+//---------------------------------------------------------------------------

SpriteEd/except.res

Binary file added.

SpriteEd/imgdim.cpp

+#include <OWL\Dialog.H> /* TDialog */
+#include <OWL\Edit.H> /* TEdit */
+#include "Stds\DLStdInc.H" /* Daybo Logic standard inclusions */
+#pragma hdrstop
+
+#include "Headers\PCMath.H" // for powi
+#include "SpriteEd.RH" // Resource defines
+#include "ImgDim.H" // Our header
+//---------------------------------------------------------------------------
+TImgDimDlg::TImgDimDlg(TWindow* parent, TModule* module)
+:	TSelfCenteringDialog(parent, MAKEINTRESOURCE(IDD_IMAGEDIMS), module),
+	_BPP(8),
+   _width(20),
+   _height(20), /* Defaults for when user first creates an image without visiting this dialog */
+   _noEditChangeEvents(0) /* Changes fires event by default */
+{
+	WidthEdit = new TEdit(this, IDC_WIDTHEDIT, 17+1);
+   HeightEdit = new TEdit(this, IDC_HEIGHTEDIT, 17+1);
+   BPPEdit = new TEdit(this, IDC_BPPEDIT, 2+1);
+   SizeResult = new TStatic(this, IDC_SIZERESULT);
+}
+//---------------------------------------------------------------------------
+void TImgDimDlg::SetupWindow()
+{
+	TSelfCenteringDialog::SetupWindow(); // Call next base up the chain
+
+   MoveToWindowCentre(Parent->HWindow); // Move to centre of parent
+}
+//---------------------------------------------------------------------------
+void TImgDimDlg::EvValuesChanged()
+{
+	/* Called when any of the three edit boxes values are changed */
+
+   if (!_noEditChangeEvents) /* Provided nobody objects... */
+   {
+   	// locals
+   	char buff[100];
+   	unsigned long rcolors, imgsize, temp;
+
+   	rcolors = powli(2, GetBPPBox());
+   	temp = ((GetWidthBox() * GetHeightBox()) * GetBPPBox());
+   	imgsize = temp /8; /* Bits to bytes */
+   	if (temp % 8 > 0) /* Remainder in conversion from bits to bytes? */ imgsize++; /* One more byte then */
+   	sprintf(buff, "Resulting colors: %lu, image size: %lu bytes", rcolors, imgsize);
+   	SizeResult->SetText(buff);
+   }
+}
+//---------------------------------------------------------------------------
+unsigned long TImgDimDlg::GetBPPBox()
+{
+	char far* buffer = BPPEdit->LockBuffer();
+   unsigned long r = (unsigned long)atol(buffer);
+   BPPEdit->UnlockBuffer(buffer);
+   return r;
+}
+//---------------------------------------------------------------------------
+unsigned long TImgDimDlg::GetWidthBox()
+{
+	char far* buffer = WidthEdit->LockBuffer();
+	unsigned long r = (unsigned long)atol(buffer);
+   WidthEdit->UnlockBuffer(buffer);
+   return r;
+}
+//---------------------------------------------------------------------------
+unsigned long TImgDimDlg::GetHeightBox()
+{
+	char far* buffer = HeightEdit->LockBuffer();
+	unsigned long r = (unsigned long)atol(buffer);
+   HeightEdit->UnlockBuffer(buffer);
+   return r;
+}
+//---------------------------------------------------------------------------
+void TImgDimDlg::SetBPPBox(unsigned long newval)
+{
+	char far* buffer = BPPEdit->LockBuffer();
+   sprintf(buffer, "%lu", newval);
+   BPPEdit->UnlockBuffer(buffer, (NATIVEBOOLTYPE)TRUE);
+}
+//---------------------------------------------------------------------------
+void TImgDimDlg::SetWidthBox(unsigned long newval)
+{
+	char far* buffer = WidthEdit->LockBuffer();
+   sprintf(buffer, "%lu", newval);
+   WidthEdit->UnlockBuffer(buffer, (NATIVEBOOLTYPE)TRUE);
+}
+//---------------------------------------------------------------------------
+void TImgDimDlg::SetHeightBox(unsigned long newval)
+{
+	char far* buffer = HeightEdit->LockBuffer();
+   sprintf(buffer, "%lu", newval);
+   HeightEdit->UnlockBuffer(buffer, (NATIVEBOOLTYPE)TRUE);
+}
+//---------------------------------------------------------------------------
+void TImgDimDlg::CmOk() // OK button clicked
+{
+	BOOL Problems = FALSE; /* Set to TRUE if you encounter a problem */
+
+	if (GetHeightBox() < 1) /* Must have a height! */
+   {
+   	::MessageBox(HWindow, "Height must be greater than 0", NULL, MB_OK + MB_ICONEXCLAMATION);
+      Problems = TRUE; /* Had a problem */
+   }
+   if (GetWidthBox() < 1) /* Must have a width */
+   {
+   	::MessageBox(HWindow, "Width must be greater than 0", NULL, MB_OK + MB_ICONEXCLAMATION);
+      Problems = TRUE; /* Had a problem */
+   }
+   if (GetBPPBox() < 1) /* Must sprcify bits per pixel */
+   {
+   	::MessageBox(HWindow, "Must specify number of bits to use per pixel!", NULL, MB_OK + MB_ICONEXCLAMATION);
+      Problems = TRUE; /* Had a problem */
+   }
+
+   if (!Problems) /* No problems? */
+   {
+   	EditBoxesToMembers(); // Saves stuff from form
+
+      SendMessage(WM_CLOSE); /* Time to close */
+   }
+}
+//---------------------------------------------------------------------------
+void TImgDimDlg::EvShowWindow(NATIVEBOOLTYPE /*show*/, uint /*stat*/)
+{
+	_noEditChangeEvents++; // Don't update now!
+	MembersToEditBoxes(); // Reads stuff onto the form
+   _noEditChangeEvents--; // Fine
+}
+//---------------------------------------------------------------------------
+void TImgDimDlg::EditBoxesToMembers()
+{
+	_BPP = GetBPPBox();
+   _height = GetHeightBox();
+   _width = GetWidthBox();
+}
+//---------------------------------------------------------------------------
+void TImgDimDlg::MembersToEditBoxes()
+{
+	_noEditChangeEvents++; /* Don't bother updating until we are through! */
+
+	SetBPPBox(_BPP);
+   SetHeightBox(_height);
+
+   _noEditChangeEvents--; /* Update on last one, we saved two futile refreshes */
+
+   SetWidthBox(_height);
+}
+//---------------------------------------------------------------------------

SpriteEd/sestub.asm

+;----------------------------------------------------------------;
+; This program is a custom stub for SpriteEditor NT for TheCopps ;
+;----------------------------------------------------------------;
+
+;== Stack ==============================================================
+
+stackseg  segment para STACK 'STACK'      ;Definition of stack segment
+
+          dw 16 dup (?)          ;The stack comprises 2 paragraphs
+
+stackseg  ends                     ;End of stack segment 
+        
+;== Data ===============================================================
+
+data      segment para 'DATA'     ;Definition of data segment 
+
+          ;-- All data, buffers and variables can be stored here -------
+          
+StubMsg   db "SpriteEditor for TheCopps, (C) 1999, Daybo Logic.",13,10
+          db "by David Duncan Ross Palmer.",13,10,13,10
+          db "Sorry, Sarah... you must run SpriteEditor under Windows!",13,10
+          db "32-bit program, 32-bit Windows or Win32s layer required.",13,10,"$"
+
+bell      db 07,"$"
+
+;Indirect call table
+_main_indirect dw offset _main
+
+data      ends                    ;End of data segment
+
+;== Code ===============================================================
+
+code      segment para 'CODE'     ;Definition of CODE segment
+
+          assume cs:code, ds:data, ss:stackseg
+
+                                  ;CS defines the code segment, DS
+                                  ;DS the data segment and SS the stack
+                                  ;segment. ES can be accessed freely
+                                  
+prog      proc far                ;This procedure is the main routine,
+                                  ;and is accessed right after the start
+                                  ;of the program
+
+          ;-- CS and SS are already initialized. DS must be initialized 
+          ;-- manually, because it prints to the PSP (like ES)
+          
+          mov  ax,data            ;Load segment address of data segment
+          mov  ds,ax              ;into the DS register 
+
+          ;-- Place additional main program code here ------------------
+          
+          call _main_Indirect           ;Make indirect call to our code to con
+                                        ;fuse a disassembler
+
+          ;--- End program here using DOS function 4Ch -----------------
+
+          mov  ax,4C00h           ;Load function number and error code 00
+          int  21h                ;DOS call                   
+                                  
+          ;--- Program execution stops here because of DOS call --------
+          
+prog      endp                    ;End of PROG procedure
+
+;-- Subroutines --------------------------------------------------------
+;-- This is the area provided for subroutines within the program -------
+
+_main    proc near
+
+        ;This is where the actual effective stub begins
+        lea si, bell                   ;Load address of bell string into register
+        call OutStringF9               ;That will produce a bell noise
+
+        lea si, StubMsg                ;Ready to print stub message
+        call OutStringF9               ;Do it
+
+        ret
+
+_main    endp 
+
+;Note : put offset address into si, segment address in ds
+OutStringF9    proc near
+
+          push dx                       ;Save original DX contents to stack
+
+          mov dx, si                    ;Take user's offset
+          mov ah, 09h                   ;Want to call function 09h
+          int 21h                       ;Of MS-DOS kernel
+
+          pop dx                        ;Restore original register
+          ret
+
+OutStringF9    endp
+
+;== End ================================================================
+
+code      ends                    ;End of CODE segment
+          end  prog               ;Begin execution with PROG procedure
+                                  

SpriteEd/spriteed.cgl

+Error 00001. 0x130410 (Thread 0x0076):
+Access overrun: Attempt to access 3 byte(s) at 0x01285280, that is at heap
+ block 0x01285280 which is only 2 bytes long.
+sprintf(0x01285280, 0x0040B2FD ["%lu"], ...)
+Call Tree:
+   0x00401C68(=spriteed.exe:0x01:000C68)
+   0x00401EF6(=spriteed.exe:0x01:000EF6)
+   0x00401DEB(=spriteed.exe:0x01:000DEB)
+   0x00323798(=OWL52F.DLL:0x01:012798)
+   0x0032A068(=OWL52F.DLL:0x01:019068)
+   0x0035479C(=OWL52F.DLL:0x01:04379C)
+
+The object array (0x01285280) [size: 2 bytes] was created with new[]
+Call Tree:
+   0x0036C9B6(=OWL52F.DLL:0x01:05B9B6)
+   0x00401C55(=spriteed.exe:0x01:000C55)
+   0x00401EF6(=spriteed.exe:0x01:000EF6)
+   0x00401DEB(=spriteed.exe:0x01:000DEB)
+   0x00323798(=OWL52F.DLL:0x01:012798)
+   0x0032A068(=OWL52F.DLL:0x01:019068)
+
+------------------------------------------
+Error 00002. 0x130410 (Thread 0x0076):
+Access overrun: Attempt to access 3 byte(s) at 0x01285290, that is at heap
+ block 0x01285290 which is only 2 bytes long.
+sprintf(0x01285290, 0x0040B2F9 ["%lu"], ...)
+Call Tree:
+   0x00401BE0(=spriteed.exe:0x01:000BE0)
+   0x00401F19(=spriteed.exe:0x01:000F19)
+   0x00401DEB(=spriteed.exe:0x01:000DEB)
+   0x00323798(=OWL52F.DLL:0x01:012798)
+   0x0032A068(=OWL52F.DLL:0x01:019068)
+   0x0035479C(=OWL52F.DLL:0x01:04379C)
+
+The object array (0x01285290) [size: 2 bytes] was created with new[]
+Call Tree:
+   0x0036C9B6(=OWL52F.DLL:0x01:05B9B6)
+   0x00401BCD(=spriteed.exe:0x01:000BCD)
+   0x00401F19(=spriteed.exe:0x01:000F19)
+   0x00401DEB(=spriteed.exe:0x01:000DEB)
+   0x00323798(=OWL52F.DLL:0x01:012798)
+   0x0032A068(=OWL52F.DLL:0x01:019068)
+
+------------------------------------------
+Functions called:
+ atol (18 times)
+ itoa (2 times)
+ strcat (4 times)
+ strcpy (2 times)
+ strlen (4 times)
+ sprintf (7 times)
+ GetWindowRect (2 times)
+ delete (46 times)
+ free (16 times)
+ realloc (1 times)
+ memcpy (1 times)
+ delete[] (107 times)
+ new[] (107 times)
+ new (46 times)
+ calloc (2 times)
+ malloc (13 times)
+Resource types used:
+ object array (107 allocs, 63 max)
+ object (46 allocs, 37 max)
+ memory block (16 allocs, 15 max)
+Modules used:
+ D:\WINNT\system32\VERSION.dll 00000000 10/14/96 01:38:00
+ D:\WINNT\System32\WINMM.dll 00000000 10/14/96 01:38:00
+ D:\WINNT\system32\SHELL32.dll 00000000 04/29/99 12:04:00
+ D:\WINNT\system32\COMDLG32.dll 00000000 04/29/99 12:04:00
+ D:\BC5\BIN\bds52f.dll 00480000 03/25/97 04:02:00
+ D:\BC5\BIN\cw3230.DLL 00430000 03/25/97 04:02:00
+ D:\BC5\BIN\OWL52F.DLL 00310000 03/25/97 04:02:00
+ D:\WINNT\system32\GDI32.dll 77ED0000 04/29/99 12:04:00
+ D:\WINNT\system32\USER32.dll 00000000 04/29/99 12:04:00
+ D:\BC5\BIN\CG32.DLL 00230000 03/25/97 04:02:00
+ D:\WINNT\system32\KERNEL32.DLL 00000000 04/29/99 12:04:00
+ G:\Projects\GDT\SpriteEd\spriteed.exe 00400000 01/24/99 22:51:48
+==========================================

SpriteEd/spriteed.exe

Binary file added.

SpriteEd/spriteed.exe.sig

Binary file added.

SpriteEd/spriteed.ide

Binary file added.

SpriteEd/spriteed.rc

+/****************************************************************************
+
+
+SPRITEED.RC
+
+produced by Borland Resource Workshop
+
+
+*****************************************************************************/
+#include "SpriteEd.RH"
+
+IDI_APPICON ICON 
+{
+ '00 00 01 00 01 00 20 20 10 00 00 00 00 00 E8 02'
+ '00 00 16 00 00 00 28 00 00 00 20 00 00 00 40 00'
+ '00 00 01 00 04 00 00 00 00 00 80 02 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 80 00 00 80 00 00 00 80 80 00 80 00'
+ '00 00 80 00 80 00 80 80 00 00 C0 C0 C0 00 80 80'
+ '80 00 00 00 FF 00 00 FF 00 00 00 FF FF 00 FF 00'
+ '00 00 FF 00 FF 00 FF FF 00 00 FF FF FF 00 00 0C'
+ 'CD DD DD CC 00 00 00 00 00 00 00 00 00 00 00 0C'
+ 'CD DD DD CC 00 00 00 00 00 00 00 00 00 00 00 0C'
+ 'CD DD DD CC 00 00 00 00 00 00 00 00 00 00 00 0C'
+ 'CD DD DD CC 00 00 00 00 00 00 00 00 00 00 00 0C'
+ 'CD DD DD CC 00 00 00 00 00 00 00 00 00 00 00 0C'
+ 'CD DD DD CC 00 00 00 00 00 00 00 00 00 00 00 0C'
+ 'CD DD DD CC 00 00 00 00 00 00 00 00 00 00 00 0B'
+ 'CD DD DD CC C0 00 00 00 00 00 00 00 00 00 00 B0'
+ 'CD DD DD CC CC 00 00 00 00 00 00 00 00 00 00 0B'
+ 'CD DD DD CC CC C0 00 00 00 00 00 00 00 00 00 B0'
+ 'CD DD DD CC CC C0 00 00 00 00 00 00 00 00 00 0B'
+ 'CD DD DD CC CC 00 00 00 00 00 00 00 00 00 00 B0'
+ 'CD DD DD CC C0 00 00 00 00 00 00 00 00 00 00 0B'
+ 'CD DD DD CC 00 00 00 00 00 00 00 00 00 00 00 B0'
+ 'CC DD DC C0 00 00 00 00 00 00 00 00 00 00 00 0B'
+ 'CC CC CC 00 00 00 00 00 00 00 00 00 00 00 00 B0'
+ '00 0D D0 00 00 00 00 00 00 00 00 00 00 00 00 0B'
+ '00 0D D0 00 00 00 00 00 00 00 00 00 00 00 00 B0'
+ '00 0D D0 00 00 00 00 00 00 00 00 00 00 00 00 0B'
+ '00 0D D0 00 00 00 00 00 00 00 00 00 00 00 00 B0'
+ 'DD DD DD D0 00 00 00 00 00 00 00 00 00 00 00 0B'
+ '70 70 70 7D 00 00 00 00 00 00 00 00 00 00 00 B0'
+ '07 07 09 99 D0 00 00 00 00 00 00 00 00 00 00 0B'
+ '70 70 90 70 D0 00 00 00 00 00 00 00 00 00 00 B0'
+ '07 09 07 07 D0 00 00 00 00 00 00 00 00 00 00 3B'
+ '70 70 70 70 D0 00 00 00 00 00 00 00 00 00 00 B3'
+ 'B7 07 EE 07 D0 00 00 00 00 00 00 00 00 00 00 3B'
+ '3B 70 70 7B B0 00 00 00 00 00 00 00 00 00 00 B3'
+ 'B3 B7 07 0B B0 00 00 00 00 00 00 00 00 00 00 3B'
+ '3B 3B 3B 33 D0 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 E0 0F'
+ 'FF FF E0 0F FF FF E0 0F FF FF E0 0F FF FF E0 0F'
+ 'FF FF E0 0F FF FE E0 0F FF FC E0 07 FF F8 D0 03'
+ 'FF F0 E0 01 FF E0 D0 01 FF C0 E0 03 FF 80 D0 07'
+ 'FF 01 E0 0F FE 03 D0 1F FC 07 E0 3F F8 0F DE 7F'
+ 'F0 1F EE 7F E0 3F DE 7F C0 7F EE 7F 80 FF D0 1F'
+ '01 FF E5 4E 03 FF DA 86 07 FF E5 54 0F FF DA A4'
+ '1F FF C5 50 3F FF C2 20 7F FF C1 41 FF FF C0 A7'
+ 'FF FF C0 07 FF FF FF FF FF FF FF FF FF FF'
+}
+
+MENU_MAIN MENU 
+{
+ POPUP "&File"
+ {
+  MENUITEM "&New", CM_FILE_NEW
+  MENUITEM "&Open", CM_FILE_OPEN
+  MENUITEM "&Save", CM_FILE_SAVE
+  MENUITEM "Save &As...", CM_FILE_SAVEAS
+  MENUITEM SEPARATOR
+  MENUITEM "E&xit", CM_FILE_EXIT
+ }
+
+ POPUP "&Tools"
+ {
+  MENUITEM "&Item", CM_POPUPITEM
+ }
+
+ POPUP "&Image"
+ {
+  MENUITEM "Attributes...", CM_IMAGE_ATTRIBS, GRAYED
+ }
+
+ POPUP "&Formats"
+ {
+  MENUITEM "TheCopps", CM_FORMATS_COPPS, GRAYED, CHECKED
+ }
+
+ POPUP "&Window"
+ {
+  MENUITEM "&Cascade", CM_WINDOW_CASCADE
+  MENUITEM "Tile &horizontal", CM_WINDOW_HTILE
+  MENUITEM "&Tile vertical", CM_WINDOW_VTILE
+  MENUITEM "Arrange &icons", CM_WINDOW_ARRANGEICONS
+  MENUITEM SEPARATOR
+  MENUITEM "Close &all", CM_WINDOW_CLOSEALL
+  MENUITEM "Mi&nimize all", CM_WINDOW_MINIMIZEALL
+  MENUITEM "&Restore all", CM_WINDOW_RESTOREALL
+  MENUITEM SEPARATOR
+ }
+
+ POPUP "&Help"
+ {
+  MENUITEM "&About...", CM_HELP_ABOUT
+ }
+
+}
+
+
+STRINGTABLE 
+{
+ CM_FILE_NEW, "Clears the current file from memory so you can start afresh"
+ CM_FILE_OPEN, "Opens another file, the current one will be closed"
+ CM_FILE_SAVE, "Saves your current data (it is wise to do this occasionally)"
+ CM_FILE_SAVEAS, "Saves your file to disk with a new name.  Don't use in place of copying the file please"
+ CM_FILE_EXIT, "Exits the SpriteEditor"
+ CM_FORMATS_COPPS, "The Copps game resource format"
+ CM_HELP_ABOUT, "Program version and copyright information"
+ IDS_APPNAME, "SpriteEditor"
+ CM_WINDOW_CASCADE, "Cascades child windows"
+ CM_WINDOW_HTILE, "Tiles windows horizontally"
+ CM_WINDOW_VTILE, "Tiles windows vertically"
+ CM_WINDOW_ARRANGEICONS, "Arrange all iconized windows"
+ CM_WINDOW_CLOSEALL, "Close all edit windows"
+ CM_WINDOW_MINIMIZEALL, "Minimize all editor windows to icons"
+ CM_WINDOW_RESTOREALL, "Restore editor windows"
+}
+
+
+ACCELERATORS_MAIN ACCELERATORS 
+{
+ "^N", CM_FILE_NEW, ASCII
+ "^O", CM_FILE_OPEN, ASCII
+ "^S", CM_FILE_SAVE, ASCII
+ VK_F5, CM_WINDOW_CASCADE, VIRTKEY, SHIFT
+ VK_F4, CM_WINDOW_HTILE, VIRTKEY, SHIFT
+}
+
+
+IDD_ABOUTBOX DIALOG 0, 0, 212, 120
+STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "About SpriteEditor"
+FONT 8, "MS Sans Serif"
+{
+ CONTROL "OK", IDOK, "BUTTON", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 81, 100, 50, 14
+ CONTROL "", IDC_INFOTEXT, "static", SS_CENTER | SS_SUNKEN | WS_CHILD | WS_VISIBLE, 36, 4, 168, 88
+ CONTROL IDI_APPICON, IDC_STATICICON, "static", SS_ICON | SS_REALSIZEIMAGE | WS_CHILD | WS_VISIBLE, 4, 4, 21, 20
+}
+
+IDI_SPRITE ICON 
+{
+ '00 00 01 00 01 00 10 10 10 00 00 00 00 00 28 01'
+ '00 00 16 00 00 00 28 00 00 00 10 00 00 00 20 00'
+ '00 00 01 00 04 00 00 00 00 00 C0 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 80 00 00 80 00 00 00 80 80 00 80 00'
+ '00 00 80 00 80 00 80 80 00 00 C0 C0 C0 00 80 80'
+ '80 00 00 00 FF 00 00 FF 00 00 00 FF FF 00 FF 00'
+ '00 00 FF 00 FF 00 FF FF 00 00 FF FF FF 00 00 0B'
+ '00 CD DC 00 00 00 00 B0 00 CC CC 00 00 00 00 0B'
+ '00 CC CC 00 00 00 00 B0 00 DD DD 00 00 00 00 0B'
+ '0D 70 70 D0 00 00 00 B0 D7 07 07 9D 00 00 00 0B'
+ 'D0 70 79 7D 00 00 00 B0 D7 07 97 0D 00 00 00 0B'
+ 'D0 70 70 7D 00 00 00 B0 D7 07 EE 0D 00 00 00 0B'
+ 'D0 70 70 7D 00 00 00 B0 BD 07 07 D0 00 00 00 0B'
+ '0B DB 0B 0B 00 00 00 00 B0 B0 B0 B0 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 EC 3F'
+ '00 00 DC 3F 00 00 EC 3F 00 00 DC 3F 00 00 E9 5F'
+ '00 00 D2 8F 00 00 E5 0F 00 00 D2 2F 00 00 E5 4F'
+ '00 00 D2 2F 00 00 E5 4F 00 00 D2 9F 00 00 E8 AF'
+ '00 00 F5 5F 00 00 FF FF 00 00 FF FF 00 00'
+}
+
+IDD_IMAGEDIMS DIALOG 0, 0, 183, 73
+STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Image dimensions"
+FONT 8, "MS Sans Serif"
+{
+ CONTROL "OK", IDOK, "BUTTON", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 128, 6, 50, 14
+ CONTROL "Cancel", IDCANCEL, "BUTTON", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 128, 26, 50, 14
+ CONTROL "Height in pixels:", IDC_STATICTEXT1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 8, 6, 56, 11
+ CONTROL "Width in pixels:", IDC_STATICTEXT2, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 8, 25, 56, 8
+ CONTROL "Bits per pixel:", IDC_STATICTEXT3, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 12, 41, 56, 8
+ CONTROL "0", IDC_HEIGHTEDIT, "edit", ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 64, 4, 52, 12
+ CONTROL "0", IDC_WIDTHEDIT, "edit", ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 64, 22, 52, 13
+ CONTROL "0", IDC_BPPEDIT, "edit", ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 64, 40, 52, 12
+ CONTROL "Resulting colors: 0, image size: 0 bytes", IDC_SIZERESULT, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 4, 60, 176, 9
+}
+

SpriteEd/spriteed.res

Binary file added.