========================================================================
       MICROSOFT FOUNDATION CLASS LIBRARY : CGMScript
========================================================================

This file contains a summary of what you will find in each of the files that
make up CGMScript.

CGMScript.h
    This is the main header file for the application.  It includes other
    project specific headers (including Resource.h) and declares the
    CCGMScriptApp application class.

CGMScript.cpp
    This is the main application source file that contains the application
    class CCGMScriptApp.

CGMScript.rc
    This is a listing of all of the Microsoft Windows resources that the
    program uses.  It includes the icons, bitmaps, and cursors that are stored
    in the RES subdirectory.  This file can be directly edited in Microsoft
	Developer Studio.

res\CGMScript.ico
    This is an icon file, which is used as the application's icon.  This
    icon is included by the main resource file CGMScript.rc.

res\CGMScript.rc2
    This file contains resources that are not edited by Microsoft 
	Developer Studio.  You should place all resources not
	editable by the resource editor in this file.

CGMScript.reg
    This is an example .REG file that shows you the kind of registration
    settings the framework will set for you.  You can use this as a .REG
    file to go along with your application or just delete it and rely
    on the default RegisterShellFileTypes registration.

CGMScript.clw
    This file contains information used by ClassWizard to edit existing
    classes or add new classes.  ClassWizard also uses this file to store
    information needed to create and edit message maps and dialog data
    maps and to create prototype member functions.
	THIS FILE CONTAINS THE EXTRA DDX DECLARATION FOR CLASS CMacro.

/////////////////////////////////////////////////////////////////////////////

For the main frame window:

MainFrm.h, MainFrm.cpp
    These files contain the frame class CMainFrame, which is derived from
    CFrameWnd and controls all SDI frame features.

res\Toolbar.bmp
    This bitmap file is used to create tiled images for the toolbar.
    The initial toolbar and status bar are constructed in the
    CMainFrame class.  Edit this toolbar bitmap along with the
    array in MainFrm.cpp to add more toolbar buttons.

For the Document and View classes:

CGMScriptDoc.h, CGMScriptDoc.cpp - the document
    These files contain your CCGMScriptDoc class.  Edit these files to
    add your special document data and to implement file saving and loading
    (via CCGMScriptDoc::Serialize).

CGMScriptView.h, CGMScriptView.cpp - the view of the document
    These files contain your CCGMScriptView class.
    CCGMScriptView objects are used to view CCGMScriptDoc objects.


/////////////////////////////////////////////////////////////////////////////

Help Support:

MakeHelp.bat
    Use this batch file to create your application's Help file, CGMScript.hLP.

CGMScript.hpj
    This file is the Help Project file used by the Help compiler to create
    your application's Help file.

hlp\*.bmp
    These are bitmap files required by the standard Help file topics for
    Microsoft Foundation Class Library standard commands.

hlp\*.rtf
    This file contains the standard help topics for standard MFC
    commands and screen objects.

/////////////////////////////////////////////////////////////////////////////
Other standard files:

StdAfx.h, StdAfx.cpp
    These files are used to build a precompiled header (PCH) file
    named CGMScript.pch and a precompiled types file named StdAfx.obj.

Resource.h
    This is the standard header file, which defines new resource IDs.
    Microsoft Developer Studio reads and updates this file.

/////////////////////////////////////////////////////////////////////////////
Other files:

ColrList.h, ColrList.cpp
	These files hold the class CColrList which is derived from 
	CListBox and implements an owner-draw ListBox. This owner draw
	ListBox interprets 0-9 in the first character of every string 
	in the box to colour the string. It also implements some message
	handlers to enable a Right-Button Drag and Drop.

ElemTree.h, ElemTree.cpp
	These files implement the CElemTree class to catch the Left
	Button Down message and force selection of an element before
	the View sees the reflected BeginDrag message. 

Foreman.h, Foreman.cpp
Task.h, Task.cpp
	These files implement the unlimited Undo/Redo functionality.
	The Foreman class manages an Undo/Redo list by storing objects
	derived from class Task. Each Task in turn stores the 
	information necessary to Undo/Redo itself. The Foreman class
	is called from the Document class to store new tasks or Do/Undo
	the last action. The Foreman calls each task's Do or Undo action.
	A single Foreman object is needed per document. Once an action has
	been Done/Undone/Redone, the foreman calls the Document's 
	UpdateAllViews with the Task object as a parameter. This parameter
	can be and is used by the view to speed up updates depending on
	which Task was executed.
	Task classes are declared in Task.h and implemented in Task.cpp.
	All Document actions are decomposed into Tasks derived from CTask.
	This design pattern is necessary for the Undo/Redo architecture and
	benefits the application for the clarity it imposes on the code.

MFElem.h, MFElem.cpp
	These files implement the base class CMFElem which is derived from
	CDialog. Each scripting item loosely corresponds to Metafile Elements
	and the class CMFElem is used to factor the common functionality 
	each requires. Each scripting item is derived from this class (and CDialog)
	and stores its data in Dialog members, thus eliminating the need for 
	storing	and exchanging data with a Dialog class.
	The class implements the basic virtual methods of a generic element,
	such as its Indentation and Comment state.
	In particular the DoModal method which is used for most elements
	to display its Dialog resource. It also implements the Serialize, 
	operator= and GetString member functions which factor out actions 
	dealing with the Comment and Indent states.

EC.h, EC.cpp
Equal.cpp
Gen.cpp
GetStr.cpp
Serial.cpp
	These files implement the element classes. EC.h is the only header file
	while EC.cpp implements constructors and destructors.
	Equal.cpp implements all operator= member functions, Gen.cpp implements 
	all Generate member functions, GetStr.cpp implements all GetString member 
	functions and Serial.cpp implements all Serialize member functions.
	All classes should use the IMPLEMENT_SERIAL and DECLARE_SERIAL macros.
	Adding a scripting element class is a tricky task and a procedure for
	this work can be found in Procede.txt. 

YYleo.h, YYleo.cpp
	These files implement the CMacro and CParser classes. The CMacro class
	implements a parsable expression which is used by most scripting elements
	in place of simpler CString or CEdit data members. CMacro members behave
	like CString data members when they are associated with CEdit controls in
	dialog resources (for serialization and operator=). However, the CMacro 
	class also implements member functions which help resolve the content of 
	the expression to a real value (double).
	The Document class also stores its own list of CMacro expressions, which
	are accessible from any scripting item's CMacro expression. 
	Resolution of the CMacro can be done to verify syntax or evaluate the 
	expression. Embedded references to other 'global' (at the Document level)
	CMacros are allowed by name by the syntax (via the &escape). 
	Most scripting element's Generate menthos call the CMacro resolve 
	member to evaluate the expression while the AFXAPI DDX_Macro global
	function calls resolve to validate the expression's syntax before closing
	the Dialog. The DDX_Macro function is implemented in YYleo.cpp and is
	declared in CGMScript.clw for inclusion in ClassWizard's variable types list.
	The CParser class is used by the CMacro class to parse the expressions. 
	This class implements member functions for parsing and interpreting 
	predicates of the grammar. The Parser is a Top-Down parser. A readable 
	form of the grammar can be found in the Help file.
	The following two lines must exist in the classwizard configuration file,
	CGMScript.clw to enable support for CMacro types in the [General Info] section.
	ExtraDDXCount=1
	ExtraDDX1=ELIMNn;;Value;CMacro;;Macro;Macro Expression


	


