$Revision:   1.52  $

README.TXT                 Codewright V3.0g
==========

  This README.TXT file contains important information about Premia
  Corporation's Codewright.  Read this file in its entirety for the
  latest information regarding this release of Codewright.  
  
  See also the file CW_QA.TXT for answers to commonly asked questions.

  If you are updating from a previous version of Codewright, you will
  find reading the file UPDATE.TXT to be useful.

  Check out the Tree Control demo on disk 3!  This is the same control
  developed for our built-in Browser.  It can be part of YOUR
  application, too.

  --------------------------------------------------------------------

  This file has been divided into the following six sections for easy
  reference:

        1.  GETTING HELP
        2.  INSTALLATION
        3.  BRIEF KEYMAP EMULATION
        4.  REBUILDING DLLs
        5.  UNDOCUMENTED API FUNCTIONS
        6.  HISTORY

  Suggestions for enhancements and constructive criticism are always
  welcome.  We will continue to add new features and functionality
  based on customer feedback.

  Be sure to register.  This is our only way to validate your
  purchase and notify you of future releases.  It will also allow you
  to access areas on our BBS not available to unregistered users.

  If you are part of a development team or if there are other
  developers at your company that need Codewright, please call us
  about quantity discounts and multi-user licenses.

1. GETTING HELP
---------------
  If you have any problems, please consult this file, the file
  CW_QA.TXT, 'Codewright User Guide' or 'Codewright API Reference'
  manuals first.  If you still have a question and need assistance,
  help is available from the following sources:

  a. CompuServe Section -- We recently "moved in" at section 9 of the
     WINAPA forum on CompuServe.  Tech support and other Codewright
     users can often give you quick help if you logon and leave a
     message.  There are also useful files available for download
     there.

  b. FAX - (503)641-6001

  c. BBS - (503)646-1374.  You are welcome to leave messages report
     bugs or make suggestions here.  File area 3 contains Codewright
     specific add-ons, patches and applications.

  d. Write to us at the following address:

     Premia Corporation
     1075 NW Murray Boulevard, Suite 268
     Portland, Oregon 97229

  e. If you urgently require information to continue using
     Codewright, or if you have an urgent bug report, give us
     a call at (503)641-6000.


2. INSTALLATION
---------------

  You must use the INSTALL.EXE program on 'Disk 1: Install and 
  Executables' to install Codewright.  Most of the files on the
  distribution disks are compressed and need to be properly
  decompressed.

  To start the installation, execute the INSTALL.EXE program on
  Disk 1 from within Windows.  You will be prompted via a dialog
  box for additional disks.  If you don't intend to modify Codewright
  you may choose not to install the DLL C source code.  This will
  save both time and disk space.  The source code may be installed
  later if you need it.


  Expanding Compressed Files:

     If for any reason you find you need to reinstall a particular
     file, the program EXPAND.EXE is provided for this.  It is located
     on Disk 1.  Type 

            EXPAND -r <filename>.<ext>_ <destination-directory>

     For example, the filenames to expand for TEST.C, TEST.RC, and 
     TEST.ASM would be TEST.C_, TEST.RC_, and TEST.AS_, respectively.
     Only files with an '_' appended to the extension are compressed
     files.


3. BRIEF KEYMAP EMULATION
-------------------------

  For Brief aficionados, we include a Brief keymap emulation.
  Although Brief's command set violates Windows rules by using ALT
  key combinations for function invocations, we have duplicated this
  behavior in order to impart the real feel of Brief.  You may access
  menu entries by releasing the ALT key before pressing a letter.  For
  example, pressing <Alt-f> displays the current buffer's filename in
  brief, but pressing <Alt> then <f> will display the File menu.

  A few of the Brief key bindings have been left out of or changed.
  Most notable are the following:

    a. <Shift-F7> - pause keystroke recording (not implemented)

    b. <Ctrl-U>   - remains bound to scroll up instead of redo
       (as in Brief 3.1)

    c. <Alt-y>    - bound to redo

  Also, the mouse button bindings are more CUA compliant in
  Codewright than in Brief 3.1.

  * Brief is a registered trademark of Borland International.  


4. REBUILDING DLLs:
---------------------
  
  Each Codewright subdirectory contains the source code for the
  like-named DLL.  For example: .\SAMPLE contains the source code for
  SAMPLE.DLL.  Each subdirectory also contains simple make files for
  compiling and linking all of the code in the directory.

  We have built all DLL's with both Microsoft 'C' and Borland 'C'.
  Either compiler will work, provided you use the right make file.
  For example, if you have added something to the source code for
  SAMPLE.DLL, you use the makefile SAMPLE for Microsoft and
  SAMPLE.MAK for Borland.


5. UNDOCUMENTED API FUNCTIONS
-----------------------------

There are now nearly 800 functions in Codewright's DOCUMENTED API.
In order to avoid hiding useful functions among functions that are
rarely useful, we have decided to document some of them only in
Specialized Application Notes. 

There are also functions that there was not time to document.  These
will be added to the help file in the near future.  The new helpfile
will be available via download from our BBS and CompuServe.  Many of
these are briefly documented below:

Browse
BOOL  Browse( int mode );
Open, close, toggle or query status of Browse window.  Returns status.

BrowseQFilename
LPSTR  BrowseQFilename( void );
Query the name of the browser database currently in use.

BrowseSetFile
BOOL  BrowseSetFile( LPSTR fname );
Set the current browser database.

BufSetTempDir
void WINAPI BufSetTempDir( LPSTR );
Set the directory used for temporary files.

CUASelectionType
void CUASelectionType(int cuaType);
Turn "Typing replaces selection" on or off.

ConfigQExtFilename
LPSTR  ConfigQExtFilename( int mode )
Return the extension-specific configuration filename corresponding to
the specified mode, or if -1 is given, the current mode.

mode can be any of the following:

	CONFIG_EXT_NAME			(Named file)
	CONFIG_EXT_PROJ			(Stored in project file)
	CONFIG_EXT_INI			(Stored in Config file)

ConfigSetExtFilename
BOOL  ConfigSetExtFilename( LPSTR fname )
Sets the name of the Extension-Specific configuration file.

ConfigSetExtMode
int 	ConfigSetExtMode( int mode )
Query or set the mode of Extension-specific file location.

mode can be any of the following:

	CONFIG_EXT_NAME			(Named file)
	CONFIG_EXT_PROJ			(Stored in project file)
	CONFIG_EXT_INI			(Stored in Config file)

DlgBrowseDir
LPSTR DlgBrowseDir( HWND, LPSTR );
Call Browse for a directory dialog.
	HWND  Handle of calling window	(if any)
	LPSTR Caption for the dialog

DlgExtensionConfig
BOOL  DlgExtensionConfig( HWND hWndParent );
Call Extension-specific Settings Dialog
    hWndParent  Handle of calling window (if any)

DlgMenuEdit
BOOL  DlgMenuEdit( HWND hWndParent );
Call menu Editor Dialog
    hWndParent  Handle of calling window (if any)

DlgMultiFileSearch
BOOL  DlgMultiFileSearch(HWND hWnd);
Call Multi-File Search and Replace Dialog
    hWnd  Handle of calling window, if any.

DlgSelectFilename
LPSTR  DlgSelectFilename(HWND, LPSTR, LPSTR, LPCustFilter, int, UINT);
Call general purpose dialog for selecting single file.
	HWND    		Handle of calling window
	LPSTR   		Caption for dialog
	LPSTR   		Default filename
	LPCustFilter    Initial file filter	(e.g., *.c)
	int				Selection mode flags
	UINT			Help ID

ExecQCmndDir
LPSTR  ExecQCmndDir(void)
Return the directory in which the last exec command
was executed.

ExtDelayedColoring
int  ExtDelayedColoring( int on )
Turns on, off or toggles delayed coloring
(On newly loaded files should we color first and then display, 
or display and then color?  Set with this function.)

ExtGetTemplateMacro
LPSTR  ExtGetTemplateMacro( int number, LPSTR ext )
Retrieves the value associated with a numbered % macro
       	   number   the number of the macro desired
		   ext      the extension it is associated with
		            (numbers 0 through 9 are extension specific)

ExtQIndenting
int 	ExtQIndenting( LPSTR ext )
Query extension-specific indenting mode.

ExtSetBufFlags
void ExtSetBufFlags( DWORD bflags, DWORD mask )
Set extension-specific buffer flags

ExtSetStyle
int ExtSetStyle( LPSTR ext, int level )
Set or query extension-specific indentation style
       ext     the affected extension.
	   level   number indicating the desired style

ExtSetWrap
int ExtSetWrap( LPSTR ext, int level )
Set or query extension-specific word wrap
       ext     the affected extension.
	   level   number indicating the desired wrap level

FileSortMode
int FileSortMode(int mode)
Set or query the file list sorting mode.

KeyQStrCount
UINT KeyQStrCount(void)
Return the number of keystrings that may be stored.

LibFunctionExecOrig
DWORD LibFunctionExecOrig( LPSTR );
Execute original function even if replacement function exists.

TagFileBuild
BOOL TagFileBuild( LPSTR fname )
Given the tag filename, generates a compiled tags database 
for the current project

TagQFilename
LPSTR TagQFilename( void )
Returns the name of the standard Tags database.

WinRedrawLines
void WINAPI WinRedrawLines( HWINDOW, long, long );
Given beginning and ending lines, redraws a range of lines.


1. HISTORY
----------
    Version 3.0    - Released 9/14/93

      - IDs within the 'Change Item Attribute' dialog of the Menu Editor
        were not being corrected read resulting in invalid IDs.

      - Once menu information was saved from the Menu Editor,  Project names
        listed under the Project menu were not selectable.

      - UNIX style EOLs were not always interpreted correctly in compressed 
        mode.

      - If a tagfile name was not specified for a new project, an invalid 
        path was created if the PATH environment variable was not set 
        correctly.

      - The Menu Editor function was not bound to the Menu Editor button on 
        the side bar.

      - Due to an incorrect call to SysSetSystemFlags(), it was possible to
        disable chromacoding by resizing the browser window using the 
        splitter bar.

    Version 3.0a   - Released 9/27/93

      - Error source files were occasionally not found

      - Corrections to compressed mode which worked for UNIX EOLs but not
        DOS CR/LF.

      - Pressing the 'Accept' button in the Buffer/Settings/Extensions dialog
        wouldn't update the Word delimiters or buffer tabs for the existing
        buffers.

      - If the File sort mode was set, incorrect command lines were passed
        on to any VCS command line invocation.

    Version 3.0b   - Released 10/11/93

      - Browser was sped up 10x when used with tag files.

      - StrSplitPath() was incorrectly returning an extension when a 
        directory name include a '.'

      - Backups could cause a crash if an invalid backup specification was used.

      - More Buffers and More Windows were disabled if a menu was restored from 
        the .ini file.

      - Keyboard buffer overflow when used with KeyUnGet() caused characters 
        to be lost.

      - Because of the differences between Brief's next word functions and
        CUA's, the Brief keymap now has its own next and delete word functions.
        The delimiters are handle differently for each.

      - When a printer font was specified from the print dialog, immediately 
        entering the 'Print Setup' dialog caused Codewright to lose the selected
	font.

      - The 'Buffer Select' dialog now automatically selects first item in list.

      - The 'Project/Edit' dialog wasn't always recognizing <Enter> to 
        display files with specified filter.

      - Search/File Grep now has a directory browse dialog box now.

      - Nested #ifdef's weren't working with preprocess().

      - The 'tag file has been changed' message suppressed when a new 
        project is loaded

      - Paragraph wrapping wasn't working correctly when in overtype mode.

      - Next error wasn't working when same error parser name listed for 
        multiple parsers and no errors found.  It was also possible to get
        into a situation when after searching through the list once, it was
        unable to find any more errors.

      - The 'Save Settings' button in the Print dialog will now always save
        the settings to the .ini file.

      - The function ExecMakePrompt() was added to invoke a make command
        line but prompting first for the specific line to invoke.

      - vi:
         > Corrected undo which included line motion
         > No search delay during operator search (i.e. d/f)
         > dw and cw search for same word delimiters
         > Template and smarting indenting keymap only in effect 
           when in insert mode
         > Repeat counts weren't always working for '.' after
           commands such as cw and dw if motion was performed between commands.

	  
    Version 3.0c   - Released 11/8/93

      - The default value for CUA_tab() is now TRUE.  This will cause
        all blocks to be indented when TAB is pressed.

      - When Codewright receives the focus from another application, not only
        is the timestamp checked on the file, but also the Read-Only bit and
        the buffer is set accordingly.

      - When the save-files-on-focus-loss was enabled, buffers with no output
        names would cause Codewright to hang while prompting for a filename.
        This is avoided by not saving buffers without filenames.

      - Added support for dragging the right margin marker with the mouse.

      - Corrected WinExec() length error.  This problem occurs whenever a
        command line is exactly 127 characters long.  126 or 128 characters
        work fine (128 is truncated to 127).

      - Repeated keystrokes would sometimes generate a spurious trailing key.
        This is believed to be corrected.

      - Corrected mouse positioning.  There is no longer a delay between when
        the mouse pressed and where a selection starts.

      - Added 'TagSetBuildFlags( LPSTR )' which accepts a string of optional
        parameters to the wtags.exe call from 'Utility/Build Tags' menu entry.

      - Added code to strip trailing whitespace from lines before they are 
        wrapped when word wrap is enabled.

      - Fixed a problem when deleting column selections which began in virtual
        space.

      - Added the ability to execute menu handlers directly.

      - Correction for ErrorNext() not changing from grep output to error output.

      - No longer saving state information for files on removable drives.

      - Saving mark state information in the workspace state.

      - Corrected missing chromacoding lines in COBOL source files.

      - Corrected disappearing list box items in file open sidebar.

      - Added default menu handler ExecIDSection( HWND hWnd , WORD id ) to invoke
        a specified section in the menusect.ini file corresponding to the id.
        
    Version 3.0d   - Released 1/17/94

      - Correction in file open sidebar not always displaying the correct
        directory.

      - The read-only status bit was not maintained when a file was reopened
        by Codewright.

    Version 3.0e   - Released 1/21/94

      - After dragging a selected block of text to a new location which
        caused the current window to scroll, the window was not always redrawn
        correctly.

      - Deleting a selected column block didn't set the buffer modified flag.

      - Possible lockup could occur if a non-system key was pressed while a
        mouse button was depressed.  Now, an ESCAPE will cancel the mouse 
        operation.  All other keys will be ignored.

      - A \ at the end of a C/C++ line was not recognized as a string
        continuation character.

      - CUA tab was not indenting as often as user's requested.  It now
        indents for all multi-line selections.

      - Correction in word wrap when a line ending in spaces was wrapped when
        it was followed by a non-wrappable line.

      - The correct auto-indent mode was not always sticking in the Buffer/
        Settings/Extension specific dialog.

    Version 3.0f   - Released 3/29/94

      - Corrected possible system hang when using combinations of \ and \\
        within strings which didn't span lines.

      - Addition of PrepareSelectionForReplacement() handles typing when
        a selection exists.

    Version 3.0g   - Released 4/04/94
