+++ /dev/null
-*.o
-*.sym
-*.coff
-*.exe
-*.ini
-*.bat
-ChangeLog
-*.map
+++ /dev/null
-/********************************************************************
-* Class: CList.cpp. This is part of WinUI.
-*
-* Purpose: A simple way to create doubly linked lists.
-*
-* Authors: Originally coded by Claude Catonio.
-*
-* License: Original code was public domain.
-* Present revised CList classes are covered by GNU General Public License.
-*
-* Revisions:
-* Manu B. 10/05/01 Terms was translated to English.
-* Manu B. 10/16/01 Add CList::Destroy(CNode *node) method.
-* Manu B. 11/12/01 Add InsertBefore/InsertAfter methods.
-* Manu B. 11/17/01 First() & Last() now returns an integer value.
-* Manu B. 11/19/01 CNode::Destroy() returns next node by default.
-* Manu B. 12/28/01 Simplify CList, add InsertSorted().
-* Manu B. 03/13/02 Suppress CNode methods, next and prev are public.
-* Manu B. 03/28/02 Add Compare().
-*
-********************************************************************/
-#include "CList.h"
-
-/********************************************************************
-* Class: CList.
-*
-* Purpose: List management.
-*
-* Revisions:
-*
-********************************************************************/
-CList::~CList(){
- //MessageBox (0, "CList", "destructor", MB_OK);
- while (first != NULL){
- current = first;
- first = first->next;
- delete current;
- }
- current = last = first;
- count = 0;
-}
-
-/********************************************************************
-* Browse the list.
-********************************************************************/
-CNode * CList::First(){
- current = first;
-return current;
-}
-
-CNode * CList::Last(){
- current = last;
-return current;
-}
-
-CNode * CList::Prev(){
- // Empty list ?
- if (first != NULL){
- if(current->prev == NULL){
- // No previous node.
- return NULL;
- }else{
- // A previous one.
- current = current->prev;
- return current;
- }
- }
-return NULL;
-}
-
-CNode * CList::Next(){
- // Empty list ?
- if (first != NULL){
- if(current->next == NULL){
- // No next node.
- return NULL;
- }else{
- // A next one.
- current = current->next;
- return current;
- }
- }
-return NULL;
-}
-
-/********************************************************************
-* Insert nodes.
-********************************************************************/
-void CList::InsertFirst(CNode *node){
- if(first == NULL){
- // Empty list.
- first = last = node;
- }else{
- // Set node pointers.
- node->prev = NULL;
- node->next = first;
- // Insert in the list.
- first->prev = node;
- first = node;
- }
- // Set current node, increment the node counter.
- current = node;
- count++;
-}
-
-void CList::InsertLast(CNode *node){
- if(first == NULL){
- // Empty list.
- first = last = node;
- }else{
- // Set node pointers.
- node->prev = last;
- node->next = NULL;
- // Insert in the list.
- last->next = node;
- last = node;
- }
- // Set current node, increment the node counter.
- current = node;
- count++;
-}
-
-void CList::InsertBefore(CNode *node){
- if(first == NULL){
- // Empty list.
- first = last = node;
- }else{
- if (current == first)
- first = node;
- // Set node pointers.
- node->prev = current->prev;
- node->next = current;
- // Insert in the list.
- if (node->prev)
- node->prev->next = node;
- current->prev = node;
- }
- // Set current node, increment the node counter.
- current = node;
- count++;
-}
-
-void CList::InsertAfter(CNode *node){
- if(first == NULL){
- // Empty list.
- first = last = node;
- }else{
- if (current == last)
- last = node;
- // Set node pointers.
- node->prev = current;
- node->next = current->next;
- // Insert in the list.
- if (node->next)
- node->next->prev = node;
- current->next = node;
- }
- // Set current node, increment the node counter.
- current = node;
- count++;
-}
-
-bool CList::InsertSorted(CNode * newNode){
- // Get the current node.
- CNode * currentNode = GetCurrent();
- int cmpResult;
-
- if(!currentNode){
- // The list is empty, InsertFirst() and return.
- InsertFirst(newNode);
- return true;
- }
-
- // Compare new node and current node data to know if we must parse Up
- // or Down from current node.
- cmpResult = Compare(newNode, currentNode);
-
- // Search Up -----------------------------------------------------------------
- if (cmpResult == -1){
- // Parse the list while there's a previous node.
- while (Prev()){
- currentNode = GetCurrent();
- cmpResult = Compare(newNode, currentNode);
-
- if (cmpResult == 1){
- // Correct position found.
- InsertAfter(newNode);
- return true;
- }else if (cmpResult == 0){
- // Don't add a file twice.
- return false;
- }
- }
- // There's no previous node, so insert first.
- InsertFirst(newNode);
- return true;
- }
- // Search Down --------------------------------------------------------------
- else if (cmpResult == 1){
- // Parse the list while there's a next node.
- while (Next()){
- currentNode = GetCurrent();
- cmpResult = Compare(newNode, currentNode);
-
- if (cmpResult == -1){
- // Correct position found.
- InsertBefore(newNode);
- return true;
- }else if (cmpResult == 0){
- // Don't add a file twice.
- return false;
- }
- }
- // There's no next node, so insert last.
- InsertLast(newNode);
- return true;
- }
- // Don't add a file twice (cmpResult == 0) -------------------------------------
-return false;
-}
-
-
-int CList::InsertSorted_New(CNode * newNode){
- int cmpResult;
-
- /* Get the current node */
- CNode * currentNode = GetCurrent();
- if(!currentNode)
- return EMPTY_LIST;
-
- /* Parse up or down ? */
- cmpResult = Compare(newNode, currentNode);
-
- /* -Up- */
- if (cmpResult == -1){
- // Parse the list while there's a previous node.
- while (Prev()){
- currentNode = GetCurrent();
- cmpResult = Compare(newNode, currentNode);
-
- if (cmpResult == 1){
- // Correct position found.
- return INSERT_AFTER;
- }else if (cmpResult == 0){
- // Don't add a file twice.
- return FILE_FOUND;
- }
- }
- // There's no previous node, so insert first.
- return INSERT_FIRST;
-
- /* -Down- */
- }else if (cmpResult == 1){
- // Parse the list while there's a next node.
- while (Next()){
- currentNode = GetCurrent();
- cmpResult = Compare(newNode, currentNode);
-
- if (cmpResult == -1){
- // Correct position found.
- return INSERT_BEFORE;
- }else if (cmpResult == 0){
- // Don't add a file twice.
- return FILE_FOUND;
- }
- }
- // There's no next node, so insert last.
- return INSERT_LAST;
- }
- // Don't add a file twice (cmpResult == 0) -------------------------------------
-return FILE_FOUND;
-}
-
-
-/********************************************************************
-* Destroy nodes.
-********************************************************************/
-void CList::DestroyCurrent(){
-// CNode * node = current;
- Destroy(current);
-}
-
-void CList::Destroy(CNode * node){
- // Empty list ?
- if (current != NULL){
- // Detach node from the list.
- if (node->next != NULL)
- node->next->prev = node->prev;
- if (node->prev != NULL)
- node->prev->next = node->next;
-
- // Set current node.
- if(node->next != NULL)
- current = node->next;
- else
- current = node->prev;
-
- if (current == NULL){
- // Now, the list is empty.
- first = last = NULL;
-
- }else if (first == node){
- // Detached node was first.
- first = current;
-
- }else if (last == node){
- // Detached node was last.
- last = current;
- }
- delete node;
- count--;
- }
-}
-
-void CList::DestroyList(){
- while (first != NULL){
- current = first;
- first = first->next;
- delete current;
- }
- current = last = first;
- count = 0;
-}
-
-int CList::Length(){
-return count;
-}
-
+++ /dev/null
-/********************************************************************
-* Module: CList.h. This is part of WinUI.
-*
-* License: WinUI is covered by GNU General Public License,
-* Copyright (C) 2001 Manu B.
-* See license.htm for more details.
-*
-********************************************************************/
-#ifndef CLIST_H
-#define CLIST_H
-
-#include <stdlib.h>
-
-/********************************************************************
-* Generic CNode.
-********************************************************************/
-class CNode
-{
- public:
- CNode() {next = prev = NULL; /*type = 0;*/};
- virtual ~CNode() {};
-
- CNode * prev;
- CNode * next;
- long type;
-
- protected:
-
- private:
-};
-
-/********************************************************************
-* Generic List.
-********************************************************************/
-#define FILE_FOUND 0
-#define EMPTY_LIST 1
-#define INSERT_FIRST 2
-#define INSERT_LAST 3
-#define INSERT_BEFORE 4
-#define INSERT_AFTER 5
-
-class CList
-{
- public:
- CList() {first = last = current = NULL; count = 0;};
- virtual ~CList();
-
- CNode * GetCurrent() {return current;};
- CNode * First();
- CNode * Last();
- CNode * Prev();
- CNode * Next();
-
- void InsertFirst(CNode *node);
- void InsertLast(CNode *node);
- void InsertBefore(CNode *node);
- void InsertAfter(CNode *node);
- bool InsertSorted(CNode * newNode);
- int InsertSorted_New(CNode * newNode);
-
- void DestroyCurrent();
- void Destroy(CNode * node);
- void DestroyList();
-
- int Length();
-
- protected:
- virtual int Compare(CNode *, CNode *) {return 0;};
-
- CNode *first;
- CNode *last;
- CNode *current;
- int count;
-
- private:
-};
-
-#endif
-
+++ /dev/null
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place - Suite 330, Boston, MA
- 02111-1307, USA.
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-\f
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-\f
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-\f
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-\f
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-\f
- Appendix: How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) 19yy <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) 19yy name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
+++ /dev/null
-# $Id: Makefile.ros,v 1.1 2003/01/07 17:59:20 robd Exp $
-#
-
-PATH_TO_TOP = ../../../reactos
-
-TARGET_TYPE = program
-
-TARGET_APPTYPE = console
-
-TARGET_NAME = vmingw
-
-TARGET_CFLAGS = -D_WIN32_IE=0x0400
-
-TARGET_SDKLIBS = user32.a comctl32.a ole32.a
-
-TARGET_OBJECTS = \
- CList.o\
- editor.o\
- main.o\
- process.o\
- project.o\
- rsrc.o\
- winui.o
-
-include $(PATH_TO_TOP)/rules.mak
-
-include $(TOOLS_PATH)/helper.mk
-
-# EOF
+++ /dev/null
-// Scintilla source code edit control
-/** @file SciLexer.h
- ** Interface to the added lexer functions in the SciLexer version of the edit control.
- **/
-// Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-// Most of this file is automatically generated from the Scintilla.iface interface definition
-// file which contains any comments about the definitions. HFacer.py does the generation.
-
-#ifndef SCILEXER_H
-#define SCILEXER_H
-
-// SciLexer features - not in standard Scintilla
-
-//++Autogenerated -- start of section automatically generated from Scintilla.iface
-#define SCLEX_CONTAINER 0
-#define SCLEX_NULL 1
-#define SCLEX_PYTHON 2
-#define SCLEX_CPP 3
-#define SCLEX_HTML 4
-#define SCLEX_XML 5
-#define SCLEX_PERL 6
-#define SCLEX_SQL 7
-#define SCLEX_VB 8
-#define SCLEX_PROPERTIES 9
-#define SCLEX_ERRORLIST 10
-#define SCLEX_MAKEFILE 11
-#define SCLEX_BATCH 12
-#define SCLEX_XCODE 13
-#define SCLEX_LATEX 14
-#define SCLEX_LUA 15
-#define SCLEX_DIFF 16
-#define SCLEX_CONF 17
-#define SCLEX_PASCAL 18
-#define SCLEX_AVE 19
-#define SCLEX_ADA 20
-#define SCLEX_LISP 21
-#define SCLEX_RUBY 22
-#define SCLEX_EIFFEL 23
-#define SCLEX_EIFFELKW 24
-#define SCLEX_TCL 25
-#define SCLEX_AUTOMATIC 1000
-#define SCE_P_DEFAULT 0
-#define SCE_P_COMMENTLINE 1
-#define SCE_P_NUMBER 2
-#define SCE_P_STRING 3
-#define SCE_P_CHARACTER 4
-#define SCE_P_WORD 5
-#define SCE_P_TRIPLE 6
-#define SCE_P_TRIPLEDOUBLE 7
-#define SCE_P_CLASSNAME 8
-#define SCE_P_DEFNAME 9
-#define SCE_P_OPERATOR 10
-#define SCE_P_IDENTIFIER 11
-#define SCE_P_COMMENTBLOCK 12
-#define SCE_P_STRINGEOL 13
-#define SCE_C_DEFAULT 0
-#define SCE_C_COMMENT 1
-#define SCE_C_COMMENTLINE 2
-#define SCE_C_COMMENTDOC 3
-#define SCE_C_NUMBER 4
-#define SCE_C_WORD 5
-#define SCE_C_STRING 6
-#define SCE_C_CHARACTER 7
-#define SCE_C_UUID 8
-#define SCE_C_PREPROCESSOR 9
-#define SCE_C_OPERATOR 10
-#define SCE_C_IDENTIFIER 11
-#define SCE_C_STRINGEOL 12
-#define SCE_C_VERBATIM 13
-#define SCE_C_REGEX 14
-#define SCE_C_COMMENTLINEDOC 15
-#define SCE_C_WORD2 16
-#define SCE_H_DEFAULT 0
-#define SCE_H_TAG 1
-#define SCE_H_TAGUNKNOWN 2
-#define SCE_H_ATTRIBUTE 3
-#define SCE_H_ATTRIBUTEUNKNOWN 4
-#define SCE_H_NUMBER 5
-#define SCE_H_DOUBLESTRING 6
-#define SCE_H_SINGLESTRING 7
-#define SCE_H_OTHER 8
-#define SCE_H_COMMENT 9
-#define SCE_H_ENTITY 10
-#define SCE_H_TAGEND 11
-#define SCE_H_XMLSTART 12
-#define SCE_H_XMLEND 13
-#define SCE_H_SCRIPT 14
-#define SCE_H_ASP 15
-#define SCE_H_ASPAT 16
-#define SCE_H_CDATA 17
-#define SCE_H_QUESTION 18
-#define SCE_H_VALUE 19
-#define SCE_H_XCCOMMENT 20
-#define SCE_H_SGML 21
-#define SCE_HJ_START 40
-#define SCE_HJ_DEFAULT 41
-#define SCE_HJ_COMMENT 42
-#define SCE_HJ_COMMENTLINE 43
-#define SCE_HJ_COMMENTDOC 44
-#define SCE_HJ_NUMBER 45
-#define SCE_HJ_WORD 46
-#define SCE_HJ_KEYWORD 47
-#define SCE_HJ_DOUBLESTRING 48
-#define SCE_HJ_SINGLESTRING 49
-#define SCE_HJ_SYMBOLS 50
-#define SCE_HJ_STRINGEOL 51
-#define SCE_HJ_REGEX 52
-#define SCE_HJA_START 55
-#define SCE_HJA_DEFAULT 56
-#define SCE_HJA_COMMENT 57
-#define SCE_HJA_COMMENTLINE 58
-#define SCE_HJA_COMMENTDOC 59
-#define SCE_HJA_NUMBER 60
-#define SCE_HJA_WORD 61
-#define SCE_HJA_KEYWORD 62
-#define SCE_HJA_DOUBLESTRING 63
-#define SCE_HJA_SINGLESTRING 64
-#define SCE_HJA_SYMBOLS 65
-#define SCE_HJA_STRINGEOL 66
-#define SCE_HJA_REGEX 67
-#define SCE_HB_START 70
-#define SCE_HB_DEFAULT 71
-#define SCE_HB_COMMENTLINE 72
-#define SCE_HB_NUMBER 73
-#define SCE_HB_WORD 74
-#define SCE_HB_STRING 75
-#define SCE_HB_IDENTIFIER 76
-#define SCE_HB_STRINGEOL 77
-#define SCE_HBA_START 80
-#define SCE_HBA_DEFAULT 81
-#define SCE_HBA_COMMENTLINE 82
-#define SCE_HBA_NUMBER 83
-#define SCE_HBA_WORD 84
-#define SCE_HBA_STRING 85
-#define SCE_HBA_IDENTIFIER 86
-#define SCE_HBA_STRINGEOL 87
-#define SCE_HP_START 90
-#define SCE_HP_DEFAULT 91
-#define SCE_HP_COMMENTLINE 92
-#define SCE_HP_NUMBER 93
-#define SCE_HP_STRING 94
-#define SCE_HP_CHARACTER 95
-#define SCE_HP_WORD 96
-#define SCE_HP_TRIPLE 97
-#define SCE_HP_TRIPLEDOUBLE 98
-#define SCE_HP_CLASSNAME 99
-#define SCE_HP_DEFNAME 100
-#define SCE_HP_OPERATOR 101
-#define SCE_HP_IDENTIFIER 102
-#define SCE_HPA_START 105
-#define SCE_HPA_DEFAULT 106
-#define SCE_HPA_COMMENTLINE 107
-#define SCE_HPA_NUMBER 108
-#define SCE_HPA_STRING 109
-#define SCE_HPA_CHARACTER 110
-#define SCE_HPA_WORD 111
-#define SCE_HPA_TRIPLE 112
-#define SCE_HPA_TRIPLEDOUBLE 113
-#define SCE_HPA_CLASSNAME 114
-#define SCE_HPA_DEFNAME 115
-#define SCE_HPA_OPERATOR 116
-#define SCE_HPA_IDENTIFIER 117
-#define SCE_HPHP_DEFAULT 118
-#define SCE_HPHP_HSTRING 119
-#define SCE_HPHP_SIMPLESTRING 120
-#define SCE_HPHP_WORD 121
-#define SCE_HPHP_NUMBER 122
-#define SCE_HPHP_VARIABLE 123
-#define SCE_HPHP_COMMENT 124
-#define SCE_HPHP_COMMENTLINE 125
-#define SCE_HPHP_HSTRING_VARIABLE 126
-#define SCE_HPHP_OPERATOR 127
-#define SCE_PL_DEFAULT 0
-#define SCE_PL_ERROR 1
-#define SCE_PL_COMMENTLINE 2
-#define SCE_PL_POD 3
-#define SCE_PL_NUMBER 4
-#define SCE_PL_WORD 5
-#define SCE_PL_STRING 6
-#define SCE_PL_CHARACTER 7
-#define SCE_PL_PUNCTUATION 8
-#define SCE_PL_PREPROCESSOR 9
-#define SCE_PL_OPERATOR 10
-#define SCE_PL_IDENTIFIER 11
-#define SCE_PL_SCALAR 12
-#define SCE_PL_ARRAY 13
-#define SCE_PL_HASH 14
-#define SCE_PL_SYMBOLTABLE 15
-#define SCE_PL_REGEX 17
-#define SCE_PL_REGSUBST 18
-#define SCE_PL_LONGQUOTE 19
-#define SCE_PL_BACKTICKS 20
-#define SCE_PL_DATASECTION 21
-#define SCE_PL_HERE_DELIM 22
-#define SCE_PL_HERE_Q 23
-#define SCE_PL_HERE_QQ 24
-#define SCE_PL_HERE_QX 25
-#define SCE_PL_STRING_Q 26
-#define SCE_PL_STRING_QQ 27
-#define SCE_PL_STRING_QX 28
-#define SCE_PL_STRING_QR 29
-#define SCE_PL_STRING_QW 30
-#define SCE_L_DEFAULT 0
-#define SCE_L_COMMAND 1
-#define SCE_L_TAG 2
-#define SCE_L_MATH 3
-#define SCE_L_COMMENT 4
-#define SCE_LUA_DEFAULT 0
-#define SCE_LUA_COMMENT 1
-#define SCE_LUA_COMMENTLINE 2
-#define SCE_LUA_COMMENTDOC 3
-#define SCE_LUA_NUMBER 4
-#define SCE_LUA_WORD 5
-#define SCE_LUA_STRING 6
-#define SCE_LUA_CHARACTER 7
-#define SCE_LUA_LITERALSTRING 8
-#define SCE_LUA_PREPROCESSOR 9
-#define SCE_LUA_OPERATOR 10
-#define SCE_LUA_IDENTIFIER 11
-#define SCE_LUA_STRINGEOL 12
-#define SCE_ERR_DEFAULT 0
-#define SCE_ERR_PYTHON 1
-#define SCE_ERR_GCC 2
-#define SCE_ERR_MS 3
-#define SCE_ERR_CMD 4
-#define SCE_ERR_BORLAND 5
-#define SCE_ERR_PERL 6
-#define SCE_ERR_NET 7
-#define SCE_ERR_LUA 8
-#define SCE_ERR_DIFF_CHANGED 10
-#define SCE_ERR_DIFF_ADDITION 11
-#define SCE_ERR_DIFF_DELETION 12
-#define SCE_ERR_DIFF_MESSAGE 13
-#define SCE_BAT_DEFAULT 0
-#define SCE_BAT_COMMENT 1
-#define SCE_BAT_WORD 2
-#define SCE_BAT_LABEL 3
-#define SCE_BAT_HIDE 4
-#define SCE_BAT_COMMAND 5
-#define SCE_BAT_IDENTIFIER 6
-#define SCE_BAT_OPERATOR 7
-#define SCE_MAKE_DEFAULT 0
-#define SCE_MAKE_COMMENT 1
-#define SCE_MAKE_PREPROCESSOR 2
-#define SCE_MAKE_IDENTIFIER 3
-#define SCE_MAKE_OPERATOR 4
-#define SCE_MAKE_TARGET 5
-#define SCE_MAKE_IDEOL 9
-#define SCE_CONF_DEFAULT 0
-#define SCE_CONF_COMMENT 1
-#define SCE_CONF_NUMBER 2
-#define SCE_CONF_IDENTIFIER 3
-#define SCE_CONF_EXTENSION 4
-#define SCE_CONF_PARAMETER 5
-#define SCE_CONF_STRING 6
-#define SCE_CONF_OPERATOR 7
-#define SCE_CONF_IP 8
-#define SCE_CONF_DIRECTIVE 9
-#define SCE_AVE_DEFAULT 0
-#define SCE_AVE_COMMENT 1
-#define SCE_AVE_NUMBER 2
-#define SCE_AVE_WORD 3
-#define SCE_AVE_KEYWORD 4
-#define SCE_AVE_STATEMENT 5
-#define SCE_AVE_STRING 6
-#define SCE_AVE_ENUM 7
-#define SCE_AVE_STRINGEOL 8
-#define SCE_AVE_IDENTIFIER 9
-#define SCE_AVE_OPERATOR 10
-#define SCE_ADA_DEFAULT 0
-#define SCE_ADA_COMMENT 1
-#define SCE_ADA_NUMBER 2
-#define SCE_ADA_WORD 3
-#define SCE_ADA_STRING 4
-#define SCE_ADA_CHARACTER 5
-#define SCE_ADA_OPERATOR 6
-#define SCE_ADA_IDENTIFIER 7
-#define SCE_ADA_STRINGEOL 8
-#define SCE_LISP_DEFAULT 0
-#define SCE_LISP_COMMENT 1
-#define SCE_LISP_NUMBER 2
-#define SCE_LISP_KEYWORD 3
-#define SCE_LISP_STRING 6
-#define SCE_LISP_STRINGEOL 8
-#define SCE_LISP_IDENTIFIER 9
-#define SCE_LISP_OPERATOR 10
-#define SCE_EIFFEL_DEFAULT 0
-#define SCE_EIFFEL_COMMENTLINE 1
-#define SCE_EIFFEL_NUMBER 2
-#define SCE_EIFFEL_WORD 3
-#define SCE_EIFFEL_STRING 4
-#define SCE_EIFFEL_CHARACTER 5
-#define SCE_EIFFEL_OPERATOR 6
-#define SCE_EIFFEL_IDENTIFIER 7
-#define SCE_EIFFEL_STRINGEOL 8
-//--Autogenerated -- end of section automatically generated from Scintilla.iface
-
-#endif
+++ /dev/null
-// Scintilla source code edit control
-/** @file Scintilla.h
- ** Interface to the edit control.
- **/
-// Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-// Most of this file is automatically generated from the Scintilla.iface interface definition
-// file which contains any comments about the definitions. HFacer.py does the generation.
-
-#ifndef SCINTILLA_H
-#define SCINTILLA_H
-
-// Compile-time configuration options
-#define MACRO_SUPPORT 1 // Comment out to remove macro hooks
-
-#if PLAT_WIN
-#ifdef STATIC_BUILD
-void Scintilla_RegisterClasses(HINSTANCE hInstance);
-#endif
-#endif
-
-// Here should be placed typedefs for uptr_t, an unsigned integer type large enough to
-// hold a pointer and sptr_t, a signed integer large enough to hold a pointer.
-// May need to be changed for 64 bit platforms.
-typedef unsigned long uptr_t;
-typedef long sptr_t;
-
-typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam, sptr_t lParam);
-
-//++Autogenerated -- start of section automatically generated from Scintilla.iface
-#define INVALID_POSITION -1
-#define SCI_START 2000
-#define SCI_OPTIONAL_START 3000
-#define SCI_LEXER_START 4000
-#define SCI_ADDTEXT 2001
-#define SCI_ADDSTYLEDTEXT 2002
-#define SCI_INSERTTEXT 2003
-#define SCI_CLEARALL 2004
-#define SCI_CLEARDOCUMENTSTYLE 2005
-#define SCI_GETLENGTH 2006
-#define SCI_GETCHARAT 2007
-#define SCI_GETCURRENTPOS 2008
-#define SCI_GETANCHOR 2009
-#define SCI_GETSTYLEAT 2010
-#define SCI_REDO 2011
-#define SCI_SETUNDOCOLLECTION 2012
-#define SCI_SELECTALL 2013
-#define SCI_SETSAVEPOINT 2014
-#define SCI_GETSTYLEDTEXT 2015
-#define SCI_CANREDO 2016
-#define SCI_MARKERLINEFROMHANDLE 2017
-#define SCI_MARKERDELETEHANDLE 2018
-#define SCI_GETUNDOCOLLECTION 2019
-#define SCWS_INVISIBLE 0
-#define SCWS_VISIBLEALWAYS 1
-#define SCWS_VISIBLEAFTERINDENT 2
-#define SCI_GETVIEWWS 2020
-#define SCI_SETVIEWWS 2021
-#define SCI_POSITIONFROMPOINT 2022
-#define SCI_POSITIONFROMPOINTCLOSE 2023
-#define SCI_GOTOLINE 2024
-#define SCI_GOTOPOS 2025
-#define SCI_SETANCHOR 2026
-#define SCI_GETCURLINE 2027
-#define SCI_GETENDSTYLED 2028
-#define SC_EOL_CRLF 0
-#define SC_EOL_CR 1
-#define SC_EOL_LF 2
-#define SCI_CONVERTEOLS 2029
-#define SCI_GETEOLMODE 2030
-#define SCI_SETEOLMODE 2031
-#define SCI_STARTSTYLING 2032
-#define SCI_SETSTYLING 2033
-#define SCI_GETBUFFEREDDRAW 2034
-#define SCI_SETBUFFEREDDRAW 2035
-#define SCI_SETTABWIDTH 2036
-#define SCI_GETTABWIDTH 2121
-#define SC_CP_UTF8 65001
-#define SCI_SETCODEPAGE 2037
-#define SCI_SETUSEPALETTE 2039
-#define MARKER_MAX 31
-#define SC_MARK_CIRCLE 0
-#define SC_MARK_ROUNDRECT 1
-#define SC_MARK_ARROW 2
-#define SC_MARK_SMALLRECT 3
-#define SC_MARK_SHORTARROW 4
-#define SC_MARK_EMPTY 5
-#define SC_MARK_ARROWDOWN 6
-#define SC_MARK_MINUS 7
-#define SC_MARK_PLUS 8
-#define SC_MARK_VLINE 9
-#define SC_MARK_LCORNER 10
-#define SC_MARK_TCORNER 11
-#define SC_MARK_BOXPLUS 12
-#define SC_MARK_BOXPLUSCONNECTED 13
-#define SC_MARK_BOXMINUS 14
-#define SC_MARK_BOXMINUSCONNECTED 15
-#define SC_MARK_LCORNERCURVE 16
-#define SC_MARK_TCORNERCURVE 17
-#define SC_MARK_CIRCLEPLUS 18
-#define SC_MARK_CIRCLEPLUSCONNECTED 19
-#define SC_MARK_CIRCLEMINUS 20
-#define SC_MARK_CIRCLEMINUSCONNECTED 21
-#define SC_MARKNUM_FOLDEREND 25
-#define SC_MARKNUM_FOLDEROPENMID 26
-#define SC_MARKNUM_FOLDERMIDTAIL 27
-#define SC_MARKNUM_FOLDERTAIL 28
-#define SC_MARKNUM_FOLDERSUB 29
-#define SC_MARKNUM_FOLDER 30
-#define SC_MARKNUM_FOLDEROPEN 31
-#define SCI_MARKERDEFINE 2040
-#define SCI_MARKERSETFORE 2041
-#define SCI_MARKERSETBACK 2042
-#define SCI_MARKERADD 2043
-#define SCI_MARKERDELETE 2044
-#define SCI_MARKERDELETEALL 2045
-#define SCI_MARKERGET 2046
-#define SCI_MARKERNEXT 2047
-#define SCI_MARKERPREVIOUS 2048
-#define SC_MARGIN_SYMBOL 0
-#define SC_MARGIN_NUMBER 1
-#define SCI_SETMARGINTYPEN 2240
-#define SCI_GETMARGINTYPEN 2241
-#define SCI_SETMARGINWIDTHN 2242
-#define SCI_GETMARGINWIDTHN 2243
-#define SCI_SETMARGINMASKN 2244
-#define SCI_GETMARGINMASKN 2245
-#define SCI_SETMARGINSENSITIVEN 2246
-#define SCI_GETMARGINSENSITIVEN 2247
-#define STYLE_DEFAULT 32
-#define STYLE_LINENUMBER 33
-#define STYLE_BRACELIGHT 34
-#define STYLE_BRACEBAD 35
-#define STYLE_CONTROLCHAR 36
-#define STYLE_INDENTGUIDE 37
-#define STYLE_MAX 127
-#define SC_CHARSET_ANSI 0
-#define SC_CHARSET_DEFAULT 1
-#define SC_CHARSET_BALTIC 186
-#define SC_CHARSET_CHINESEBIG5 136
-#define SC_CHARSET_EASTEUROPE 238
-#define SC_CHARSET_GB2312 134
-#define SC_CHARSET_GREEK 161
-#define SC_CHARSET_HANGUL 129
-#define SC_CHARSET_MAC 77
-#define SC_CHARSET_OEM 255
-#define SC_CHARSET_RUSSIAN 204
-#define SC_CHARSET_SHIFTJIS 128
-#define SC_CHARSET_SYMBOL 2
-#define SC_CHARSET_TURKISH 162
-#define SC_CHARSET_JOHAB 130
-#define SC_CHARSET_HEBREW 177
-#define SC_CHARSET_ARABIC 178
-#define SC_CHARSET_VIETNAMESE 163
-#define SC_CHARSET_THAI 222
-#define SCI_STYLECLEARALL 2050
-#define SCI_STYLESETFORE 2051
-#define SCI_STYLESETBACK 2052
-#define SCI_STYLESETBOLD 2053
-#define SCI_STYLESETITALIC 2054
-#define SCI_STYLESETSIZE 2055
-#define SCI_STYLESETFONT 2056
-#define SCI_STYLESETEOLFILLED 2057
-#define SCI_STYLERESETDEFAULT 2058
-#define SCI_STYLESETUNDERLINE 2059
-#define SC_CASE_MIXED 0
-#define SC_CASE_UPPER 1
-#define SC_CASE_LOWER 2
-#define SCI_STYLESETCASE 2060
-#define SCI_STYLESETCHARACTERSET 2066
-#define SCI_SETSELFORE 2067
-#define SCI_SETSELBACK 2068
-#define SCI_SETCARETFORE 2069
-#define SCI_ASSIGNCMDKEY 2070
-#define SCI_CLEARCMDKEY 2071
-#define SCI_CLEARALLCMDKEYS 2072
-#define SCI_SETSTYLINGEX 2073
-#define SCI_STYLESETVISIBLE 2074
-#define SCI_GETCARETPERIOD 2075
-#define SCI_SETCARETPERIOD 2076
-#define SCI_SETWORDCHARS 2077
-#define SCI_BEGINUNDOACTION 2078
-#define SCI_ENDUNDOACTION 2079
-#define INDIC_MAX 7
-#define INDIC_PLAIN 0
-#define INDIC_SQUIGGLE 1
-#define INDIC_TT 2
-#define INDIC_DIAGONAL 3
-#define INDIC_STRIKE 4
-#define INDIC0_MASK 32
-#define INDIC1_MASK 64
-#define INDIC2_MASK 128
-#define INDICS_MASK INDIC0_MASK | INDIC1_MASK | INDIC2_MASK
-#define SCI_INDICSETSTYLE 2080
-#define SCI_INDICGETSTYLE 2081
-#define SCI_INDICSETFORE 2082
-#define SCI_INDICGETFORE 2083
-#define SCI_SETSTYLEBITS 2090
-#define SCI_GETSTYLEBITS 2091
-#define SCI_SETLINESTATE 2092
-#define SCI_GETLINESTATE 2093
-#define SCI_GETMAXLINESTATE 2094
-#define SCI_GETCARETLINEVISIBLE 2095
-#define SCI_SETCARETLINEVISIBLE 2096
-#define SCI_GETCARETLINEBACK 2097
-#define SCI_SETCARETLINEBACK 2098
-#define SCI_AUTOCSHOW 2100
-#define SCI_AUTOCCANCEL 2101
-#define SCI_AUTOCACTIVE 2102
-#define SCI_AUTOCPOSSTART 2103
-#define SCI_AUTOCCOMPLETE 2104
-#define SCI_AUTOCSTOPS 2105
-#define SCI_AUTOCSETSEPARATOR 2106
-#define SCI_AUTOCGETSEPARATOR 2107
-#define SCI_AUTOCSELECT 2108
-#define SCI_AUTOCSETCANCELATSTART 2110
-#define SCI_AUTOCGETCANCELATSTART 2111
-#define SCI_AUTOCSETFILLUPS 2112
-#define SCI_AUTOCSETCHOOSESINGLE 2113
-#define SCI_AUTOCGETCHOOSESINGLE 2114
-#define SCI_AUTOCSETIGNORECASE 2115
-#define SCI_AUTOCGETIGNORECASE 2116
-#define SCI_USERLISTSHOW 2117
-#define SCI_AUTOCSETAUTOHIDE 2118
-#define SCI_AUTOCGETAUTOHIDE 2119
-#define SCI_SETINDENT 2122
-#define SCI_GETINDENT 2123
-#define SCI_SETUSETABS 2124
-#define SCI_GETUSETABS 2125
-#define SCI_SETLINEINDENTATION 2126
-#define SCI_GETLINEINDENTATION 2127
-#define SCI_GETLINEINDENTPOSITION 2128
-#define SCI_GETCOLUMN 2129
-#define SCI_SETHSCROLLBAR 2130
-#define SCI_GETHSCROLLBAR 2131
-#define SCI_SETINDENTATIONGUIDES 2132
-#define SCI_GETINDENTATIONGUIDES 2133
-#define SCI_SETHIGHLIGHTGUIDE 2134
-#define SCI_GETHIGHLIGHTGUIDE 2135
-#define SCI_GETLINEENDPOSITION 2136
-#define SCI_GETCODEPAGE 2137
-#define SCI_GETCARETFORE 2138
-#define SCI_GETUSEPALETTE 2139
-#define SCI_GETREADONLY 2140
-#define SCI_SETCURRENTPOS 2141
-#define SCI_SETSELECTIONSTART 2142
-#define SCI_GETSELECTIONSTART 2143
-#define SCI_SETSELECTIONEND 2144
-#define SCI_GETSELECTIONEND 2145
-#define SCI_SETPRINTMAGNIFICATION 2146
-#define SCI_GETPRINTMAGNIFICATION 2147
-#define SC_PRINT_NORMAL 0
-#define SC_PRINT_INVERTLIGHT 1
-#define SC_PRINT_BLACKONWHITE 2
-#define SC_PRINT_COLOURONWHITE 3
-#define SC_PRINT_COLOURONWHITEDEFAULTBG 4
-#define SCI_SETPRINTCOLOURMODE 2148
-#define SCI_GETPRINTCOLOURMODE 2149
-#define SCFIND_WHOLEWORD 2
-#define SCFIND_MATCHCASE 4
-#define SCFIND_WORDSTART 0x00100000
-#define SCFIND_REGEXP 0x00200000
-#define SCI_FINDTEXT 2150
-#define SCI_FORMATRANGE 2151
-#define SCI_GETFIRSTVISIBLELINE 2152
-#define SCI_GETLINE 2153
-#define SCI_GETLINECOUNT 2154
-#define SCI_SETMARGINLEFT 2155
-#define SCI_GETMARGINLEFT 2156
-#define SCI_SETMARGINRIGHT 2157
-#define SCI_GETMARGINRIGHT 2158
-#define SCI_GETMODIFY 2159
-#define SCI_SETSEL 2160
-#define SCI_GETSELTEXT 2161
-#define SCI_GETTEXTRANGE 2162
-#define SCI_HIDESELECTION 2163
-#define SCI_POINTXFROMPOSITION 2164
-#define SCI_POINTYFROMPOSITION 2165
-#define SCI_LINEFROMPOSITION 2166
-#define SCI_POSITIONFROMLINE 2167
-#define SCI_LINESCROLL 2168
-#define SCI_SCROLLCARET 2169
-#define SCI_REPLACESEL 2170
-#define SCI_SETREADONLY 2171
-#define SCI_NULL 2172
-#define SCI_CANPASTE 2173
-#define SCI_CANUNDO 2174
-#define SCI_EMPTYUNDOBUFFER 2175
-#define SCI_UNDO 2176
-#define SCI_CUT 2177
-#define SCI_COPY 2178
-#define SCI_PASTE 2179
-#define SCI_CLEAR 2180
-#define SCI_SETTEXT 2181
-#define SCI_GETTEXT 2182
-#define SCI_GETTEXTLENGTH 2183
-#define SCI_GETDIRECTFUNCTION 2184
-#define SCI_GETDIRECTPOINTER 2185
-#define SCI_SETOVERTYPE 2186
-#define SCI_GETOVERTYPE 2187
-#define SCI_SETCARETWIDTH 2188
-#define SCI_GETCARETWIDTH 2189
-#define SCI_SETTARGETSTART 2190
-#define SCI_GETTARGETSTART 2191
-#define SCI_SETTARGETEND 2192
-#define SCI_GETTARGETEND 2193
-#define SCI_REPLACETARGET 2194
-#define SCI_REPLACETARGETRE 2195
-#define SCI_SEARCHINTARGET 2197
-#define SCI_SETSEARCHFLAGS 2198
-#define SCI_GETSEARCHFLAGS 2199
-#define SCI_CALLTIPSHOW 2200
-#define SCI_CALLTIPCANCEL 2201
-#define SCI_CALLTIPACTIVE 2202
-#define SCI_CALLTIPPOSSTART 2203
-#define SCI_CALLTIPSETHLT 2204
-#define SCI_CALLTIPSETBACK 2205
-#define SCI_VISIBLEFROMDOCLINE 2220
-#define SCI_DOCLINEFROMVISIBLE 2221
-#define SC_FOLDLEVELBASE 0x400
-#define SC_FOLDLEVELWHITEFLAG 0x1000
-#define SC_FOLDLEVELHEADERFLAG 0x2000
-#define SC_FOLDLEVELNUMBERMASK 0x0FFF
-#define SCI_SETFOLDLEVEL 2222
-#define SCI_GETFOLDLEVEL 2223
-#define SCI_GETLASTCHILD 2224
-#define SCI_GETFOLDPARENT 2225
-#define SCI_SHOWLINES 2226
-#define SCI_HIDELINES 2227
-#define SCI_GETLINEVISIBLE 2228
-#define SCI_SETFOLDEXPANDED 2229
-#define SCI_GETFOLDEXPANDED 2230
-#define SCI_TOGGLEFOLD 2231
-#define SCI_ENSUREVISIBLE 2232
-#define SCI_SETFOLDFLAGS 2233
-#define SCI_ENSUREVISIBLEENFORCEPOLICY 2234
-#define SCI_SETTABINDENTS 2260
-#define SCI_GETTABINDENTS 2261
-#define SCI_SETBACKSPACEUNINDENTS 2262
-#define SCI_GETBACKSPACEUNINDENTS 2263
-#define SC_TIME_FOREVER 10000000
-#define SCI_SETMOUSEDWELLTIME 2264
-#define SCI_GETMOUSEDWELLTIME 2265
-#define SCI_LINEDOWN 2300
-#define SCI_LINEDOWNEXTEND 2301
-#define SCI_LINEUP 2302
-#define SCI_LINEUPEXTEND 2303
-#define SCI_CHARLEFT 2304
-#define SCI_CHARLEFTEXTEND 2305
-#define SCI_CHARRIGHT 2306
-#define SCI_CHARRIGHTEXTEND 2307
-#define SCI_WORDLEFT 2308
-#define SCI_WORDLEFTEXTEND 2309
-#define SCI_WORDRIGHT 2310
-#define SCI_WORDRIGHTEXTEND 2311
-#define SCI_HOME 2312
-#define SCI_HOMEEXTEND 2313
-#define SCI_LINEEND 2314
-#define SCI_LINEENDEXTEND 2315
-#define SCI_DOCUMENTSTART 2316
-#define SCI_DOCUMENTSTARTEXTEND 2317
-#define SCI_DOCUMENTEND 2318
-#define SCI_DOCUMENTENDEXTEND 2319
-#define SCI_PAGEUP 2320
-#define SCI_PAGEUPEXTEND 2321
-#define SCI_PAGEDOWN 2322
-#define SCI_PAGEDOWNEXTEND 2323
-#define SCI_EDITTOGGLEOVERTYPE 2324
-#define SCI_CANCEL 2325
-#define SCI_DELETEBACK 2326
-#define SCI_TAB 2327
-#define SCI_BACKTAB 2328
-#define SCI_NEWLINE 2329
-#define SCI_FORMFEED 2330
-#define SCI_VCHOME 2331
-#define SCI_VCHOMEEXTEND 2332
-#define SCI_ZOOMIN 2333
-#define SCI_ZOOMOUT 2334
-#define SCI_DELWORDLEFT 2335
-#define SCI_DELWORDRIGHT 2336
-#define SCI_LINECUT 2337
-#define SCI_LINEDELETE 2338
-#define SCI_LINETRANSPOSE 2339
-#define SCI_LOWERCASE 2340
-#define SCI_UPPERCASE 2341
-#define SCI_LINESCROLLDOWN 2342
-#define SCI_LINESCROLLUP 2343
-#define SCI_MOVECARETINSIDEVIEW 2401
-#define SCI_LINELENGTH 2350
-#define SCI_BRACEHIGHLIGHT 2351
-#define SCI_BRACEBADLIGHT 2352
-#define SCI_BRACEMATCH 2353
-#define SCI_GETVIEWEOL 2355
-#define SCI_SETVIEWEOL 2356
-#define SCI_GETDOCPOINTER 2357
-#define SCI_SETDOCPOINTER 2358
-#define SCI_SETMODEVENTMASK 2359
-#define EDGE_NONE 0
-#define EDGE_LINE 1
-#define EDGE_BACKGROUND 2
-#define SCI_GETEDGECOLUMN 2360
-#define SCI_SETEDGECOLUMN 2361
-#define SCI_GETEDGEMODE 2362
-#define SCI_SETEDGEMODE 2363
-#define SCI_GETEDGECOLOUR 2364
-#define SCI_SETEDGECOLOUR 2365
-#define SCI_SEARCHANCHOR 2366
-#define SCI_SEARCHNEXT 2367
-#define SCI_SEARCHPREV 2368
-#define CARET_SLOP 0x01
-#define CARET_CENTER 0x02
-#define CARET_STRICT 0x04
-#define CARET_XEVEN 0x08
-#define CARET_XJUMPS 0x10
-#define SCI_SETCARETPOLICY 2369
-#define SCI_LINESONSCREEN 2370
-#define SCI_USEPOPUP 2371
-#define SCI_SELECTIONISRECTANGLE 2372
-#define SCI_SETZOOM 2373
-#define SCI_GETZOOM 2374
-#define SCI_CREATEDOCUMENT 2375
-#define SCI_ADDREFDOCUMENT 2376
-#define SCI_RELEASEDOCUMENT 2377
-#define SCI_GETMODEVENTMASK 2378
-#define SCI_SETFOCUS 2380
-#define SCI_GETFOCUS 2381
-#define SCI_SETSTATUS 2382
-#define SCI_GETSTATUS 2383
-#define SCI_SETMOUSEDOWNCAPTURES 2384
-#define SCI_GETMOUSEDOWNCAPTURES 2385
-#define SC_CURSORNORMAL -1
-#define SC_CURSORWAIT 3
-#define SCI_SETCURSOR 2386
-#define SCI_GETCURSOR 2387
-#define SCI_WORDPARTLEFT 2390
-#define SCI_WORDPARTLEFTEXTEND 2391
-#define SCI_WORDPARTRIGHT 2392
-#define SCI_WORDPARTRIGHTEXTEND 2393
-#define VISIBLE_SLOP 0x01
-#define VISIBLE_STRICT 0x04
-#define SCI_SETVISIBLEPOLICY 2394
-#define SCI_DELLINELEFT 2395
-#define SCI_DELLINERIGHT 2396
-#define SCI_GRABFOCUS 2400
-#define SCI_STARTRECORD 3001
-#define SCI_STOPRECORD 3002
-#define SCI_SETLEXER 4001
-#define SCI_GETLEXER 4002
-#define SCI_COLOURISE 4003
-#define SCI_SETPROPERTY 4004
-#define SCI_SETKEYWORDS 4005
-#define SCI_SETLEXERLANGUAGE 4006
-#define SC_MOD_INSERTTEXT 0x1
-#define SC_MOD_DELETETEXT 0x2
-#define SC_MOD_CHANGESTYLE 0x4
-#define SC_MOD_CHANGEFOLD 0x8
-#define SC_PERFORMED_USER 0x10
-#define SC_PERFORMED_UNDO 0x20
-#define SC_PERFORMED_REDO 0x40
-#define SC_LASTSTEPINUNDOREDO 0x100
-#define SC_MOD_CHANGEMARKER 0x200
-#define SC_MOD_BEFOREINSERT 0x400
-#define SC_MOD_BEFOREDELETE 0x800
-#define SC_MODEVENTMASKALL 0xF77
-#define SCEN_CHANGE 768
-#define SCEN_SETFOCUS 512
-#define SCEN_KILLFOCUS 256
-#define SCK_DOWN 300
-#define SCK_UP 301
-#define SCK_LEFT 302
-#define SCK_RIGHT 303
-#define SCK_HOME 304
-#define SCK_END 305
-#define SCK_PRIOR 306
-#define SCK_NEXT 307
-#define SCK_DELETE 308
-#define SCK_INSERT 309
-#define SCK_ESCAPE 7
-#define SCK_BACK 8
-#define SCK_TAB 9
-#define SCK_RETURN 13
-#define SCK_ADD 310
-#define SCK_SUBTRACT 311
-#define SCK_DIVIDE 312
-#define SCMOD_SHIFT 1
-#define SCMOD_CTRL 2
-#define SCMOD_ALT 4
-#define SCN_STYLENEEDED 2000
-#define SCN_CHARADDED 2001
-#define SCN_SAVEPOINTREACHED 2002
-#define SCN_SAVEPOINTLEFT 2003
-#define SCN_MODIFYATTEMPTRO 2004
-#define SCN_KEY 2005
-#define SCN_DOUBLECLICK 2006
-#define SCN_UPDATEUI 2007
-#define SCN_CHECKBRACE 2007
-#define SCN_MODIFIED 2008
-#define SCN_MACRORECORD 2009
-#define SCN_MARGINCLICK 2010
-#define SCN_NEEDSHOWN 2011
-#define SCN_POSCHANGED 2012
-#define SCN_PAINTED 2013
-#define SCN_USERLISTSELECTION 2014
-#define SCN_URIDROPPED 2015
-#define SCN_DWELLSTART 2016
-#define SCN_DWELLEND 2017
-//--Autogenerated -- end of section automatically generated from Scintilla.iface
-
-// Optional module for macro recording
-#ifdef MACRO_SUPPORT
-typedef void (tMacroRecorder)(unsigned int iMessage, unsigned long wParam,
- long lParam, void *userData);
-#endif
-
-// These structures are defined to be exactly the same shape as the Win32
-// CHARRANGE, TEXTRANGE, FINDTEXTEX, FORMATRANGE, and NMHDR structs.
-// So older code that treats Scintilla as a RichEdit will work.
-
-struct CharacterRange {
- long cpMin;
- long cpMax;
-};
-
-struct TextRange {
- struct CharacterRange chrg;
- char *lpstrText;
-};
-
-struct TextToFind {
- struct CharacterRange chrg;
- char *lpstrText;
- struct CharacterRange chrgText;
-};
-
-#ifdef PLATFORM_H
-
-// This structure is used in printing and requires some of the graphics types
-// from Platform.h. Not needed by most client code.
-
-struct RangeToFormat {
- SurfaceID hdc;
- SurfaceID hdcTarget;
- PRectangle rc;
- PRectangle rcPage;
- CharacterRange chrg;
-};
-
-#endif
-
-struct NotifyHeader {
- // hwndFrom is really an environment specifc window handle or pointer
- // but most clients of Scintilla.h do not have this type visible.
- //WindowID hwndFrom;
- void *hwndFrom;
- unsigned int idFrom;
- unsigned int code;
-};
-
-struct SCNotification {
- struct NotifyHeader nmhdr;
- int position; // SCN_STYLENEEDED, SCN_MODIFIED, SCN_DWELLSTART, SCN_DWELLEND
- int ch; // SCN_CHARADDED, SCN_KEY
- int modifiers; // SCN_KEY
- int modificationType; // SCN_MODIFIED
- const char *text; // SCN_MODIFIED
- int length; // SCN_MODIFIED
- int linesAdded; // SCN_MODIFIED
-#ifdef MACRO_SUPPORT
- int message; // SCN_MACRORECORD
- uptr_t wParam; // SCN_MACRORECORD
- sptr_t lParam; // SCN_MACRORECORD
-#endif
- int line; // SCN_MODIFIED
- int foldLevelNow; // SCN_MODIFIED
- int foldLevelPrev; // SCN_MODIFIED
- int margin; // SCN_MARGINCLICK
- int listType; // SCN_USERLISTSELECTION
- int x; // SCN_DWELLSTART, SCN_DWELLEND
- int y; // SCN_DWELLSTART, SCN_DWELLEND
-};
-
-#define SC_MASK_FOLDERS ((1<<SC_MARKNUM_FOLDER) | \
- (1<<SC_MARKNUM_FOLDEROPEN) | \
- (1<<SC_MARKNUM_FOLDERSUB) | \
- (1<<SC_MARKNUM_FOLDERTAIL) | \
- (1<<SC_MARKNUM_FOLDERMIDTAIL) | \
- (1<<SC_MARKNUM_FOLDEROPENMID) | \
- (1<<SC_MARKNUM_FOLDEREND))
-
-// Deprecation section listing all API features that are deprecated and will
-// will be removed completely in a future version.
-// To enable these features define INCLUDE_DEPRECATED_FEATURES
-
-#ifdef INCLUDE_DEPRECATED_FEATURES
-
-#endif
-
-#endif
+++ /dev/null
-/********************************************************************
-* Module: editor.cpp. This is part of Visual-MinGW.
-*
-* Purpose: Procedures to manage Scintilla editor.
-*
-* Authors: These classes are based on SciTE release 1.39.
-* http://www.scintilla.org/
-* SciTE original code by Neil Hodgson.
-* Present revised code by Manu B.
-*
-* License: Both SciTE and Scintilla are covered by
-* "License for Scintilla and SciTE" agreement terms detailed in license.htm.
-* Present revised code is covered by GNU General Public License.
-*
-* Revisions:
-*
-********************************************************************/
-#include <windows.h>
-#include <stdio.h>
-#include "commctrl.h"
-#include "commdlg.h"
-#include "editor.h"
-#include "rsrc.h"
-
-extern CMessageBox MsgBox;
-
-int Minimum(int a, int b);
-int Maximum(int a, int b);
-
-int Minimum(int a, int b){
- if (a < b)
- return a;
- else
- return b;
-}
-
-int Maximum(int a, int b){
- if (a > b)
- return a;
- else
- return b;
-}
-
-void EnsureRangeVisible(HWND hwndCtrl, int posStart, int posEnd, bool enforcePolicy){
- int lineStart = SendMessage(hwndCtrl, SCI_LINEFROMPOSITION, Minimum(posStart, posEnd), 0);
- int lineEnd = SendMessage(hwndCtrl, SCI_LINEFROMPOSITION, Maximum(posStart, posEnd), 0);
- for (int line = lineStart; line <= lineEnd; line++){
- SendMessage(hwndCtrl,
- enforcePolicy ? SCI_ENSUREVISIBLEENFORCEPOLICY : SCI_ENSUREVISIBLE, line, 0);
- }
-}
-
-int LengthDocument(HWND hwndCtrl){
-return SendMessage(hwndCtrl, SCI_GETLENGTH, 0, 0);
-}
-
-CharacterRange GetSelection(HWND hwndCtrl){
- CharacterRange crange;
- crange.cpMin = SendMessage(hwndCtrl, SCI_GETSELECTIONSTART, 0, 0);
- crange.cpMax = SendMessage(hwndCtrl, SCI_GETSELECTIONEND, 0, 0);
-return crange;
-}
-
-
-/********************************************************************
-* Class: CChooseFontDlg.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CChooseFontDlg::CChooseFontDlg(){
- ZeroMemory(&lf, sizeof(LOGFONT));
-/* lf.lfHeight;
- lf.lfWidth;
- lf.lfEscapement;
- lf.lfOrientation;
- lf.lfWeight;
- lf.lfItalic;
- lf.lfUnderline;
- lf.lfStrikeOut;
- lf.lfCharSet;
- lf.lfOutPrecision;
- lf.lfClipPrecision;
- lf.lfQuality;
- lf.lfPitchAndFamily;
- lf.lfFaceName[LF_FACESIZE];*/
-
- cf.lStructSize = sizeof(CHOOSEFONT);
- cf.hwndOwner = 0;
- cf.hDC = NULL;
- cf.lpLogFont = &lf;//&(Profile.LogFont);
- cf.iPointSize = 0;
- cf.Flags = /*CF_INITTOLOGFONTSTRUCT
- |*/ CF_SCREENFONTS | CF_EFFECTS
- /*| CF_ENABLEHOOK*/;
- cf.rgbColors = 0;//Profile.rgbForeColor;
- cf.lCustData = 0;
- cf.lpfnHook = NULL;
- cf.lpTemplateName = NULL;
- cf.hInstance = NULL;
- cf.lpszStyle = NULL;
- cf.nFontType = SCREEN_FONTTYPE;
- cf.nSizeMin = 0;
- cf.nSizeMax = 0;
-}
-
-CChooseFontDlg::~CChooseFontDlg(){
-}
-
-bool CChooseFontDlg::Create(CWindow * pWindow){
- cf.hwndOwner = pWindow->_hWnd;
-return ChooseFont(&cf);
-}
-
-
-/*bool ChooseNewFont(HWND hWndListBox){
- static CHOOSEFONT cf;
- static BOOL bFirstTime = TRUE;
- HFONT hFont;
- if(bFirstTime){
- bFirstTime = false;
- }
- if(ChooseFont(&cf)){
- HDC hDC;
- hFont = CreateFontIndirect( &(Profile.LogFont) );
- hDC = GetDC( hWndListBox );
- SelectObject( hDC, hFont );
- Profile.rgbForeColor = cf.rgbColors;
- InvalidateRect( hWndListBox, NULL, TRUE );
- SendMessage( hWndListBox, WM_CTLCOLORLISTBOX, (DWORD) hDC, (LONG) hWndListBox );
- SendMessage( hWndListBox, WM_SETFONT, (DWORD) hFont, TRUE );
- ReleaseDC( hWndListBox, hDC );
- }
-return true;
-}*/
-
-
-/********************************************************************
-* Class: CFindReplaceDlg.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CFindReplaceDlg::CFindReplaceDlg(){
- pEditor = NULL;
- hEditor = 0;
- resId = 0;
- *findWhat = '\0';
- *replaceWhat = '\0';
-
- bWholeWord = false;
- bMatchCase = true;
- bRegExp = false;
- bWrapFind = false;
- bUnSlash = false;
- bReverseFind = false;
- bHavefound = false;
-}
-
-CFindReplaceDlg::~CFindReplaceDlg(){
-}
-
-HWND CFindReplaceDlg::Find(CScintilla * pEditor){
- if (_hWnd || !pEditor)
- return 0;
-return CreateParam(pEditor, IDD_FIND, (long) IDD_FIND);
-}
-
-HWND CFindReplaceDlg::Replace(CScintilla * pEditor){
- if (_hWnd || !pEditor)
- return 0;
-return CreateParam(pEditor, IDD_REPLACE, (long) IDD_REPLACE);
-}
-
-LRESULT CALLBACK CFindReplaceDlg::CDlgProc(UINT Message, WPARAM wParam, LPARAM lParam){
- switch(Message){
- case WM_INITDIALOG:
- return OnInitDialog((HWND) wParam, lParam);
-
- case WM_COMMAND:
- OnCommand(HIWORD(wParam), LOWORD(wParam), (HWND) lParam);
- break;
-
- case WM_CLOSE:
- EndDlg(0);
- break;
- }
-return FALSE;
-}
-
-BOOL CFindReplaceDlg::OnInitDialog(HWND, LPARAM lInitParam){
- // Set pointers.
- pEditor = (CEditor *) _pParent;
- if (pEditor == NULL)
- return TRUE;
-
- hEditor = pEditor->_hWnd;
- resId = lInitParam;
-
- hFindWhat = GetItem(IDC_FINDWHAT);
- hWholeWord = GetItem(IDC_WHOLEWORD);
- hMatchCase = GetItem(IDC_MATCHCASE);
- hRegExp = GetItem(IDC_REGEXP);
- hWrap = GetItem(IDC_WRAP);
- hUnSlash = GetItem(IDC_UNSLASH);
-
- if (resId == IDD_FIND)
- return Find_OnInitDialog();
- else if (resId == IDD_REPLACE)
- return Replace_OnInitDialog();
-return FALSE;
-}
-
-BOOL CFindReplaceDlg::Find_OnInitDialog(void){
-
- hUp = GetItem(IDC_DIRECTIONUP);
- hDown = GetItem(IDC_DIRECTIONDOWN);
-
- SetItemText(hFindWhat, findWhat);
- //FillComboFromMemory(wFindWhat, memFinds);
- if (bWholeWord)
- ::SendMessage(hWholeWord, BM_SETCHECK, BST_CHECKED, 0);
- if (bMatchCase)
- ::SendMessage(hMatchCase, BM_SETCHECK, BST_CHECKED, 0);
- if (bRegExp)
- ::SendMessage(hRegExp, BM_SETCHECK, BST_CHECKED, 0);
- if (bWrapFind)
- ::SendMessage(hWrap, BM_SETCHECK, BST_CHECKED, 0);
- if (bUnSlash)
- ::SendMessage(hUnSlash, BM_SETCHECK, BST_CHECKED, 0);
-
- if (bReverseFind) {
- ::SendMessage(hUp, BM_SETCHECK, BST_CHECKED, 0);
- } else {
- ::SendMessage(hDown, BM_SETCHECK, BST_CHECKED, 0);
- }
-return TRUE;
-}
-
-BOOL CFindReplaceDlg::Replace_OnInitDialog(void){
- SetItemText(hFindWhat, findWhat);
- //FillComboFromMemory(wFindWhat, sci->memFinds);
-
- hReplaceWith = GetItem(IDC_REPLACEWITH);
- SetItemText(hReplaceWith, replaceWhat);
- //FillComboFromMemory(wReplaceWith, sci->memReplaces);
-
- if (bWholeWord)
- ::SendMessage(hWholeWord, BM_SETCHECK, BST_CHECKED, 0);
- if (bMatchCase)
- ::SendMessage(hMatchCase, BM_SETCHECK, BST_CHECKED, 0);
- if (bRegExp)
- ::SendMessage(hRegExp, BM_SETCHECK, BST_CHECKED, 0);
- if (bWrapFind)
- ::SendMessage(hWrap, BM_SETCHECK, BST_CHECKED, 0);
- if (bUnSlash)
- ::SendMessage(hUnSlash, BM_SETCHECK, BST_CHECKED, 0);
- if ((findWhat) != '\0'){
- ::SetFocus(hReplaceWith);
- return FALSE;
- }
-return TRUE;
-}
-
-BOOL CFindReplaceDlg::OnCommand(WORD, WORD wID, HWND){
- if (resId == IDD_FIND)
- return Find_OnCommand(wID);
- else if (resId == IDD_REPLACE)
- return Replace_OnCommand(wID);
-return FALSE;
-}
-
-BOOL CFindReplaceDlg::Find_OnCommand(WORD wID){
- switch (wID){
- case IDOK:
- char s[200];
- GetItemText(hFindWhat, s, sizeof(s));
- strcpy(findWhat, s);
- //memFinds.Insert(s);
- bWholeWord = BST_CHECKED ==
- ::SendMessage(hWholeWord, BM_GETCHECK, 0, 0);
- bMatchCase = BST_CHECKED ==
- ::SendMessage(hMatchCase, BM_GETCHECK, 0, 0);
- bRegExp = BST_CHECKED ==
- ::SendMessage(hRegExp, BM_GETCHECK, 0, 0);
- bWrapFind = BST_CHECKED ==
- ::SendMessage(hWrap, BM_GETCHECK, 0, 0);
- bUnSlash = BST_CHECKED ==
- ::SendMessage(hUnSlash, BM_GETCHECK, 0, 0);
- bReverseFind = BST_CHECKED ==
- ::SendMessage(hUp, BM_GETCHECK, 0, 0);
-
- FindNext(bReverseFind, true);
- return TRUE;
-
- case IDCANCEL:
- EndDlg(IDCANCEL);
- return FALSE;
- }
-return FALSE;
-}
-
-BOOL CFindReplaceDlg::Replace_OnCommand(WORD wID){
- if (wID == IDCANCEL){
- EndDlg(IDCANCEL);
- return FALSE;
- }else{
- return HandleReplaceCommand(wID);
- }
-return FALSE;
-}
-
-void CFindReplaceDlg::FindNext(bool reverseDirection, bool showWarnings){
- if (!hEditor){
- MsgBox.DisplayWarning("Can't get editor handle");
- return;
- }
-
- if (!findWhat[0]) { // nothing to found
- //Find(hEditor);
- return;
- }
- char findTarget[FR_MAX_LEN + 1];
- strcpy(findTarget, findWhat);
-
- // for C conversions -> int lenFind = UnSlashAsNeeded(findTarget, unSlash, regExp);
- int lenFind = strlen(findTarget); // normal return of UnSlashAsNeeded
-
- if (lenFind == 0)
- return;
-
- CharacterRange cr = GetSelection(hEditor);
- int startPosition = cr.cpMax;
- int endPosition = LengthDocument(hEditor);
-
- if (reverseDirection){
- startPosition = cr.cpMin - 1;
- endPosition = 0;
- }
-
- int flags = (bWholeWord ? SCFIND_WHOLEWORD : 0) |
- (bMatchCase ? SCFIND_MATCHCASE : 0) |
- (bRegExp ? SCFIND_REGEXP : 0);
-
- ::SendMessage(hEditor, SCI_SETTARGETSTART, startPosition, 0);
- ::SendMessage(hEditor, SCI_SETTARGETEND, endPosition, 0);
- ::SendMessage(hEditor, SCI_SETSEARCHFLAGS, flags, 0);
- int posFind = ::SendMessage(hEditor, SCI_SEARCHINTARGET, lenFind, (LPARAM) findTarget);
-
- if (posFind == -1 && bWrapFind){ // not found with wrapFind
-
- // Failed to find in indicated direction
- // so search from the beginning (forward) or from the end (reverse)
- // unless wrapFind is false
- if (reverseDirection){
- startPosition = LengthDocument(hEditor);
- endPosition = 0;
- } else {
- startPosition = 0;
- endPosition = LengthDocument(hEditor);
- }
- ::SendMessage(hEditor, SCI_SETTARGETSTART, startPosition, 0);
- ::SendMessage(hEditor, SCI_SETTARGETEND, endPosition, 0);
- posFind = ::SendMessage(hEditor, SCI_SEARCHINTARGET, lenFind, (LPARAM) findTarget);
- }
- if (posFind == -1){ // not found
- bHavefound = false;
- if (showWarnings){
-
- /*warn that not found
- WarnUser(warnNotFound);*/
-
- if (strlen(findWhat) > FR_MAX_LEN)
- findWhat[FR_MAX_LEN] = '\0';
- char msg[FR_MAX_LEN + 50];
- strcpy(msg, "Cannot find the string \"");
- strcat(msg, findWhat);
- strcat(msg, "\".");
- if (_hWnd){
- MsgBox.DisplayWarning(msg);
- }else{
- MessageBox(0, msg, "Message", MB_OK);
- }
- }
- }else{ // found
- bHavefound = true;
- int start = ::SendMessage(hEditor, SCI_GETTARGETSTART, 0, 0);
- int end = ::SendMessage(hEditor, SCI_GETTARGETEND, 0, 0);
- EnsureRangeVisible(hEditor, start, end, true);
- ::SendMessage(hEditor, SCI_SETSEL, start, end);
- }
-}
-
-BOOL CFindReplaceDlg::HandleReplaceCommand(int cmd){
- if (!hEditor){
- MsgBox.DisplayWarning("Can't get editor handle");
- return false;
- }
-
- if ((cmd == IDOK) || (cmd == IDC_REPLACE) || (cmd == IDC_REPLACEALL) || (cmd == IDC_REPLACEINSEL)) {
- GetItemText(hFindWhat, findWhat, sizeof(findWhat));
- //props.Set("find.what", findWhat);
- //memFinds.Insert(findWhat);
-
- bWholeWord = BST_CHECKED ==
- ::SendMessage(hWholeWord, BM_GETCHECK, 0, 0);
- bMatchCase = BST_CHECKED ==
- ::SendMessage(hMatchCase, BM_GETCHECK, 0, 0);
- bRegExp = BST_CHECKED ==
- ::SendMessage(hRegExp, BM_GETCHECK, 0, 0);
- bWrapFind = BST_CHECKED ==
- ::SendMessage(hWrap, BM_GETCHECK, 0, 0);
- bUnSlash = BST_CHECKED ==
- ::SendMessage(hUnSlash, BM_GETCHECK, 0, 0);
- }
- if ((cmd == IDC_REPLACE) || (cmd == IDC_REPLACEALL) || (cmd == IDC_REPLACEINSEL)) {
- GetItemText(hReplaceWith, replaceWhat, sizeof(replaceWhat));
- //memReplaces.Insert(replaceWhat);
- }
-
- if (cmd == IDOK) {
- FindNext(bReverseFind, true); // Find next
- } else if (cmd == IDC_REPLACE) {
- if (bHavefound){
- ReplaceOnce();
- } else {
- CharacterRange crange = GetSelection(hEditor);
- ::SendMessage(hEditor, SCI_SETSEL, crange.cpMin, crange.cpMin);
- FindNext(bReverseFind, true);
- if (bHavefound){
- ReplaceOnce();
- }
- }
- } else if ((cmd == IDC_REPLACEALL) || (cmd == IDC_REPLACEINSEL)){
- ReplaceAll(cmd == IDC_REPLACEINSEL);
- }
-return TRUE;
-}
-
-void CFindReplaceDlg::ReplaceOnce(void){
- if (bHavefound){
- char replaceTarget[FR_MAX_LEN + 1];
- strcpy(replaceTarget, replaceWhat);
- // for C conversions -> int replaceLen = UnSlashAsNeeded(replaceTarget, unSlash, regExp);
- int replaceLen = strlen(replaceTarget); // normal return of UnSlashAsNeeded
-
- CharacterRange cr = GetSelection(hEditor);
- ::SendMessage(hEditor, SCI_SETTARGETSTART, cr.cpMin, 0);
- ::SendMessage(hEditor, SCI_SETTARGETEND, cr.cpMax, 0);
- int lenReplaced = replaceLen;
- if (bRegExp)
- lenReplaced = ::SendMessage(hEditor, SCI_REPLACETARGETRE, replaceLen, (LPARAM) replaceTarget);
- else // Allow \0 in replacement
- ::SendMessage(hEditor, SCI_REPLACETARGET, replaceLen, (LPARAM) replaceTarget);
- ::SendMessage(hEditor, SCI_SETSEL, cr.cpMin + lenReplaced, cr.cpMin);
- bHavefound = false;
- }
- FindNext(bReverseFind, true);
-}
-
-void CFindReplaceDlg::ReplaceAll(bool inSelection){
- char findTarget[FR_MAX_LEN + 1];
- strcpy(findTarget, findWhat);
-
- // for C conversions -> int findLen = UnSlashAsNeeded(findTarget, unSlash, regExp);
- int findLen = strlen(findTarget); // normal return of UnSlashAsNeeded
-
- if (findLen == 0) {
- MessageBox(_hWnd, "Find string for \"Replace All\" must not be empty.", "Message", MB_OK | MB_ICONWARNING);
- return;
- }
-
- CharacterRange cr = GetSelection(hEditor);
- int startPosition = cr.cpMin;
- int endPosition = cr.cpMax;
- if (inSelection) {
- if (startPosition == endPosition) {
- MessageBox(_hWnd, "Selection for \"Replace in Selection\" must not be empty.", "Message", MB_OK | MB_ICONWARNING);
- return;
- }
- } else {
- endPosition = LengthDocument(hEditor);
- if (bWrapFind) {
- // Whole document
- startPosition = 0;
- }
- // If not wrapFind, replace all only from caret to end of document
- }
-
- char replaceTarget[FR_MAX_LEN + 1];
- strcpy(replaceTarget, replaceWhat);
-
- // for C conversions -> int replaceLen = UnSlashAsNeeded(replaceTarget, unSlash, regExp);
- int replaceLen = strlen(replaceTarget); // normal return of UnSlashAsNeeded
-
- int flags = (bWholeWord ? SCFIND_WHOLEWORD : 0) |
- (bMatchCase ? SCFIND_MATCHCASE : 0) |
- (bRegExp ? SCFIND_REGEXP : 0);
- ::SendMessage(hEditor, SCI_SETTARGETSTART, startPosition, 0);
- ::SendMessage(hEditor, SCI_SETTARGETEND, endPosition, 0);
- ::SendMessage(hEditor, SCI_SETSEARCHFLAGS, flags, 0);
- int posFind = ::SendMessage(hEditor, SCI_SEARCHINTARGET, findLen, (LPARAM) findTarget);
- if ((findLen == 1) && bRegExp && (findTarget[0] == '^')) {
- // Special case for replace all start of line so it hits the first line
- posFind = startPosition;
- ::SendMessage(hEditor, SCI_SETTARGETSTART, startPosition, 0);
- ::SendMessage(hEditor, SCI_SETTARGETEND, startPosition, 0);
- }
- if ((posFind != -1) && (posFind <= endPosition)) {
- int lastMatch = posFind;
- ::SendMessage(hEditor, SCI_BEGINUNDOACTION, 0, 0);
- while (posFind != -1) {
- int lenTarget = ::SendMessage(hEditor, SCI_GETTARGETEND, 0, 0) - ::SendMessage(hEditor, SCI_GETTARGETSTART, 0, 0);
- int lenReplaced = replaceLen;
- if (bRegExp)
- lenReplaced = ::SendMessage(hEditor, SCI_REPLACETARGETRE, replaceLen, (LPARAM) replaceTarget);
- else
- ::SendMessage(hEditor, SCI_REPLACETARGET, replaceLen, (LPARAM) replaceTarget);
- // Modify for change caused by replacement
- endPosition += lenReplaced - lenTarget;
- lastMatch = posFind + lenReplaced;
- // For the special cases of start of line and end of line
- // Something better could be done but there are too many special cases
- if (lenTarget <= 0)
- lastMatch++;
- ::SendMessage(hEditor, SCI_SETTARGETSTART, lastMatch, 0);
- ::SendMessage(hEditor, SCI_SETTARGETEND, endPosition, 0);
- posFind = ::SendMessage(hEditor, SCI_SEARCHINTARGET, findLen, (LPARAM) findTarget);
- }
- if (inSelection)
- ::SendMessage(hEditor, SCI_SETSEL, startPosition, endPosition);
- else
- ::SendMessage(hEditor, SCI_SETSEL, lastMatch, lastMatch);
- ::SendMessage(hEditor, SCI_ENDUNDOACTION, 0, 0);
- } else {
- if (strlen(findWhat) > FR_MAX_LEN)
- findWhat[FR_MAX_LEN] = '\0';
- char msg[FR_MAX_LEN + 50];
- strcpy(msg, "No replacements because string \"");
- strcat(msg, findWhat);
- strcat(msg, "\" was not present.");
- MessageBox(_hWnd, msg, "Message", MB_OK | MB_ICONWARNING);
- }
-}
-
-
-/********************************************************************
-* Class: CEditor.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CEditor::CEditor(){
- caretPos = 1;
-}
-
-CEditor::~CEditor(){
-}
-
-void CEditor::LoadFile(CFileItem * file){
- if (!file || !_hWnd)
- return;
-
- if (file->nFileOffset == 0)
- return; // Untitled file.
-
- SetLexer(file->type);
- ::SendMessage(_hWnd, SCI_CANCEL, 0, 0);
- ::SendMessage(_hWnd, SCI_SETUNDOCOLLECTION, 0, 0);
-
- FILE *fp = fopen(file->szFileName, "rb");
- if (fp){
- char data[blockSize];
- int lenFile = fread(data, 1, sizeof(data), fp);
-
- while (lenFile > 0){
- ::SendMessage(_hWnd, SCI_ADDTEXT, lenFile, (LPARAM) data);
- lenFile = fread(data, 1, sizeof(data), fp);
- }
-
- fclose(fp);
-
- }else{
- MsgBox.DisplayWarning("Can't load file %s", file->szFileName);
- }
-
- ::SendMessage(_hWnd, SCI_SETUNDOCOLLECTION, 1, 0);
- ::SendMessage(_hWnd, EM_EMPTYUNDOBUFFER, 0, 0);
- ::SendMessage(_hWnd, SCI_SETSAVEPOINT, 0 , 0);
- ::SendMessage(_hWnd, SCI_GOTOPOS, 0, 0);
-}
-
-void GetFileType(CFileItem * file){
- if (!file)
- return;
-
- if (file->nFileExtension){
- char * ext = file->szFileName + file->nFileExtension;
- // H_FILE ?
- if (!stricmp(ext, "h")){
- file->type = H_FILE;
- return;
- }else if (!stricmp(ext, "hpp")){
- file->type = H_FILE;
- return;
- }else if (!stricmp(ext, "hxx")){
- file->type = H_FILE;
- return;
- // C_FILE ?
- }else if (!stricmp(ext, "c")){
- file->type = C_FILE;
- return;
- }else if (!stricmp(ext, "cpp")){
- file->type = C_FILE;
- return;
- }else if (!stricmp(ext, "cxx")){
- file->type = C_FILE;
- return;
- // RC_FILE ?
- }else if (!stricmp(ext, "rc")){
- file->type = RC_FILE;
- return;
- }
- }
- file->type = U_FILE;
-return;
-}
-
-void CEditor::SaveFile(char * fullPath){
- if (!_hWnd)
- return;
-
- FILE *fp = fopen(fullPath, "wb");
- if (fp){
- char data[blockSize + 1];
- int lengthDoc = ::SendMessage(_hWnd, SCI_GETLENGTH, 0, 0);
- for (int i = 0; i < lengthDoc; i += blockSize) {
- int grabSize = lengthDoc - i;
- if (grabSize > blockSize)
- grabSize = blockSize;
- GetRange(i, i + grabSize, data);
- fwrite(data, grabSize, 1, fp);
- }
- fclose(fp);
- ::SendMessage(_hWnd, SCI_SETSAVEPOINT, 0, 0);
-
- }else{
- MsgBox.DisplayWarning("Can't save file %s", fullPath);
- }
-}
-
-int CEditor::GetCurrentPos(void){
- int currentPos = ::SendMessage(_hWnd, SCI_GETCURRENTPOS, 0,0);
- caretPos = ::SendMessage(_hWnd, SCI_LINEFROMPOSITION, currentPos, 0) + 1;
-return caretPos;
-}
-
-void CEditor::GetRange(int start, int end, char *text){
- TextRange tr;
- tr.chrg.cpMin = start;
- tr.chrg.cpMax = end;
- tr.lpstrText = text;
- ::SendMessage(_hWnd, SCI_GETTEXTRANGE, 0, (LPARAM) &tr);
-}
-
-void CEditor::SetAStyle(int style, COLORREF fore, COLORREF back, int size, const char *face){
- ::SendMessage(_hWnd, SCI_STYLESETFORE, style, fore);
- ::SendMessage(_hWnd, SCI_STYLESETBACK, style, back);
- if (size >= 1)
- ::SendMessage(_hWnd, SCI_STYLESETSIZE, style, size);
- if (face)
- ::SendMessage(_hWnd, SCI_STYLESETFONT, style, (LPARAM) face);
-}
-
-void CEditor::DefineMarker(int marker, int markerType, COLORREF fore, COLORREF back) {
- ::SendMessage(_hWnd, SCI_MARKERDEFINE, marker, markerType);
- ::SendMessage(_hWnd, SCI_MARKERSETFORE, marker, fore);
- ::SendMessage(_hWnd, SCI_MARKERSETBACK, marker, back);
-}
-
-void CEditor::SetLexer(int fileType){
- switch (fileType){
-
- case H_FILE:
- case C_FILE:
- case RC_FILE:
- SetCppLexer();
- return;
-
- default:
- // Global default style.
- SetAStyle(STYLE_DEFAULT, black, white, 10, "Verdana");
- ::SendMessage(_hWnd, SCI_STYLECLEARALL, 0, 0); // Copies to all other styles.
-
- }
-}
-
-void CEditor::SetCppLexer(void){
- ::SendMessage(_hWnd, SCI_SETLEXER, SCLEX_CPP, 0);
- ::SendMessage(_hWnd, SCI_SETSTYLEBITS, 5, 0);
-
- ::SendMessage(_hWnd, SCI_SETKEYWORDS, 0, (LPARAM) cppKeyWords);
-
- // Global default style.
- SetAStyle(STYLE_DEFAULT, black, white, 10, "Verdana");
- ::SendMessage(_hWnd, SCI_STYLECLEARALL, 0, 0); // Copies to all other styles.
-
- // C Styles.
- SetAStyle(SCE_C_DEFAULT, black, white, 10, "Verdana"); //0
- SetAStyle(SCE_C_COMMENT, Green, white, 0, 0); //1
- SetAStyle(SCE_C_COMMENTLINE, Green, white, 0, 0); //2
- SetAStyle(SCE_C_COMMENTDOC, darkGreen, white, 0, 0); //3
- SetAStyle(SCE_C_NUMBER, Ice, white, 0, 0); //4
- SetAStyle(SCE_C_WORD, darkBlue, white, 0, 0); //5
- ::SendMessage(_hWnd, SCI_STYLESETBOLD, SCE_C_WORD, 1);
- SetAStyle(SCE_C_STRING, Purple, white, 0, 0); //6
- SetAStyle(SCE_C_CHARACTER, Purple, white, 0, 0); //7
- SetAStyle(SCE_C_PREPROCESSOR, Olive, white, 0, 0); //9
- SetAStyle(SCE_C_OPERATOR, black, white, 0, 0); //10
- ::SendMessage(_hWnd, SCI_STYLESETBOLD, SCE_C_OPERATOR, 1);
-// SetAStyle(SCE_C_STRINGEOL, darkBlue, white, 0, 0); //12
-// SetAStyle(SCE_C_COMMENTLINEDOC, darkBlue, white, 0, 0); //15
-// SetAStyle(SCE_C_WORD2, darkBlue, white, 0, 0); //16
- ::SendMessage(_hWnd, SCI_SETPROPERTY, (long)"fold", (long)"1");
- ::SendMessage(_hWnd, SCI_SETPROPERTY, (long)"fold.compact", (long)"1");
- ::SendMessage(_hWnd, SCI_SETPROPERTY, (long)"fold.symbols", (long)"1");
-
- ::SendMessage(_hWnd, SCI_SETFOLDFLAGS, 16, 0);
-
- // To put the folder markers in the line number region
- //SendEditor(SCI_SETMARGINMASKN, 0, SC_MASK_FOLDERS);
-
- ::SendMessage(_hWnd, SCI_SETMODEVENTMASK, SC_MOD_CHANGEFOLD, 0);
-
- // Create a margin column for the folding symbols
- ::SendMessage(_hWnd, SCI_SETMARGINTYPEN, 2, SC_MARGIN_SYMBOL);
-
- ::SendMessage(_hWnd, SCI_SETMARGINWIDTHN, 2, /*foldMargin ? foldMarginWidth :*/ 16);
-
- ::SendMessage(_hWnd, SCI_SETMARGINMASKN, 2, SC_MASK_FOLDERS);
- ::SendMessage(_hWnd, SCI_SETMARGINSENSITIVEN, 2, 1);
-
- DefineMarker(SC_MARKNUM_FOLDEROPEN, SC_MARK_MINUS, white, black);
- DefineMarker(SC_MARKNUM_FOLDER, SC_MARK_PLUS, white, black);
- DefineMarker(SC_MARKNUM_FOLDERSUB, SC_MARK_EMPTY, white, black);
- DefineMarker(SC_MARKNUM_FOLDERTAIL, SC_MARK_EMPTY, white, black);
- DefineMarker(SC_MARKNUM_FOLDEREND, SC_MARK_EMPTY, white, black);
- DefineMarker(SC_MARKNUM_FOLDEROPENMID, SC_MARK_EMPTY, white, black);
- DefineMarker(SC_MARKNUM_FOLDERMIDTAIL, SC_MARK_EMPTY, white, black);
-
-return;
-}
-
-void CEditor::GotoLine(int line, char * /*fileName*/){
- ::SendMessage(_hWnd, SCI_ENSUREVISIBLEENFORCEPOLICY, line, 0);
- ::SendMessage(_hWnd, SCI_GOTOLINE, line, 0);
-}
-
-bool CEditor::MarginClick(int position, int modifiers){
- int lineClick = ::SendMessage(_hWnd, SCI_LINEFROMPOSITION, position, 0);
- //Platform::DebugPrintf("Margin click %d %d %x\n", position, lineClick,
- // ::SendMessage(_hWnd, SCI_GETFOLDLEVEL, lineClick) & SC_FOLDLEVELHEADERFLAG);
-/* if ((modifiers & SCMOD_SHIFT) && (modifiers & SCMOD_CTRL)) {
- FoldAll();
- } else {*/
- int levelClick = ::SendMessage(_hWnd, SCI_GETFOLDLEVEL, lineClick, 0);
- if (levelClick & SC_FOLDLEVELHEADERFLAG) {
- if (modifiers & SCMOD_SHIFT) {
- // Ensure all children visible
- ::SendMessage(_hWnd, SCI_SETFOLDEXPANDED, lineClick, 1);
- Expand(lineClick, true, true, 100, levelClick);
- } else if (modifiers & SCMOD_CTRL) {
- if (::SendMessage(_hWnd, SCI_GETFOLDEXPANDED, lineClick, 0)) {
- // Contract this line and all children
- ::SendMessage(_hWnd, SCI_SETFOLDEXPANDED, lineClick, 0);
- Expand(lineClick, false, true, 0, levelClick);
- } else {
- // Expand this line and all children
- ::SendMessage(_hWnd, SCI_SETFOLDEXPANDED, lineClick, 1);
- Expand(lineClick, true, true, 100, levelClick);
- }
- } else {
- // Toggle this line
- ::SendMessage(_hWnd, SCI_TOGGLEFOLD, lineClick, 0);
- }
- }
-/* }*/
- return true;
-}
-
-void CEditor::Expand(int &line, bool doExpand, bool force, int visLevels, int level){
- int lineMaxSubord = ::SendMessage(_hWnd, SCI_GETLASTCHILD, line, level & SC_FOLDLEVELNUMBERMASK);
- line++;
- while (line <= lineMaxSubord) {
- if (force) {
- if (visLevels > 0)
- ::SendMessage(_hWnd, SCI_SHOWLINES, line, line);
- else
- ::SendMessage(_hWnd, SCI_HIDELINES, line, line);
- } else {
- if (doExpand)
- ::SendMessage(_hWnd, SCI_SHOWLINES, line, line);
- }
- int levelLine = level;
- if (levelLine == -1)
- levelLine = ::SendMessage(_hWnd, SCI_GETFOLDLEVEL, line, 0);
- if (levelLine & SC_FOLDLEVELHEADERFLAG) {
- if (force) {
- if (visLevels > 1)
- ::SendMessage(_hWnd, SCI_SETFOLDEXPANDED, line, 1);
- else
- ::SendMessage(_hWnd, SCI_SETFOLDEXPANDED, line, 0);
- Expand(line, doExpand, force, visLevels - 1);
- } else {
- if (doExpand) {
- if (!::SendMessage(_hWnd, SCI_GETFOLDEXPANDED, line, 0))
- ::SendMessage(_hWnd, SCI_SETFOLDEXPANDED, line, 1);
- Expand(line, true, force, visLevels - 1);
- } else {
- Expand(line, false, force, visLevels - 1);
- }
- }
- } else {
- line++;
- }
- }
-}
-
+++ /dev/null
-/********************************************************************
-* Module: editor.h. This is part of Visual-MinGW.
-*
-* License: Visual-MinGW is covered by GNU General Public License,
-* Copyright (C) 2001 Manu B.
-* See license.htm for more details.
-*
-*******************************************************************/
-#ifndef EDITOR_H
-#define EDITOR_H
-
-#include "Scintilla.h"
-#include "SciLexer.h"
-#include "winui.h"
-
-#define U_FILE 3
-#define H_FILE (U_FILE+1)
-#define C_FILE (U_FILE+2)
-#define RC_FILE (U_FILE+3)
-
-// Default block size.
-const int blockSize = 131072;
-
-// Default colors.
-const COLORREF black = RGB(0,0,0);
-const COLORREF white = RGB(0xff,0xff,0xff);
-const COLORREF darkBlue = RGB(0, 0, 0x7f);
-const COLORREF Green = RGB(0, 0x7f, 0);
-const COLORREF darkGreen = RGB(0x3f, 0x70, 0x3f);
-const COLORREF Purple = RGB(0x7f, 0x00, 0x7f);
-const COLORREF Ice = RGB(0x00, 0x7f, 0x7f);
-const COLORREF Olive = RGB(0x7f, 0x7f, 0x00);
-
-// Default Cpp keywords.
-const char cppKeyWords[] =
-"asm auto bool break case catch char class const const_cast continue "
-"default delete do double dynamic_cast else enum explicit export extern false float for "
-"friend goto if inline int long mutable namespace new operator private protected public "
-"register reinterpret_cast return short signed sizeof static static_cast struct switch "
-"template this throw true try typedef typeid typename union unsigned using "
-"virtual void volatile wchar_t while";
-
-void EnsureRangeVisible(HWND hwndCtrl, int posStart, int posEnd, bool enforcePolicy);
-int LengthDocument(HWND hwndCtrl);
-CharacterRange GetSelection(HWND hwndCtrl);
-
-class CFileItem : public CNode
-{
- public:
- CFileItem();
- ~CFileItem();
-
- // File name.
- char szFileName[MAX_PATH];
- WORD nFileOffset;
- WORD nFileExtension;
-
- // Owner tree view.
- CTreeView * pTreeView;
- HTREEITEM _hItem;
- HTREEITEM _hDirItem;
-
- // Owner child window.
- CMDIChild * pMdiChild;
- int show;
- bool isInProject;
-
- protected:
-
- private:
-};
-
-void GetFileType(CFileItem * file);
-
-class CEditor : public CScintilla
-{
- public:
- CEditor();
- ~CEditor();
-
- void LoadFile(CFileItem * file);
- void SaveFile(char * fullPath);
- int GetCurrentPos(void);
- void GotoLine(int line, char * fileName = NULL);
- int caretPos;
- void SetLexer(int fileType);
- void SetCppLexer(void);
- bool MarginClick(int position, int modifiers);
-
- protected:
-
- private:
- void DefineMarker(int marker, int markerType, COLORREF fore, COLORREF back);
- void GetRange(int start, int end, char *text);
- void SetAStyle(int style, COLORREF fore, COLORREF back, int size, const char *face);
- void Expand(int &line, bool doExpand, bool force = false,
- int visLevels = 0, int level = -1);
-};
-
-#define FR_MAX_LEN 200
-
-class CFindReplaceDlg : public CDlgBase
-{
- public:
- CFindReplaceDlg();
- virtual ~CFindReplaceDlg();
-
- HWND Find(CScintilla * pEditor);
- HWND Replace(CScintilla * pEditor);
-
- protected:
- void FindNext(bool reverseDirection, bool showWarnings);
- virtual LRESULT CALLBACK CDlgProc(UINT Message, WPARAM wParam, LPARAM lParam);
- BOOL OnInitDialog(HWND hwndFocus, LPARAM lInitParam);
- BOOL Find_OnInitDialog(void);
- BOOL Replace_OnInitDialog(void);
- BOOL OnCommand(WORD wNotifyCode, WORD wID, HWND hwndCtl);
- BOOL Find_OnCommand(WORD wIDl);
- BOOL Replace_OnCommand(WORD wID);
- BOOL HandleReplaceCommand(int cmd);
- void ReplaceOnce(void);
- void ReplaceAll(bool inSelection);
-
- private:
- HWND hFindWhat;
- HWND hReplaceWith;
- HWND hWholeWord;
- HWND hMatchCase;
- HWND hRegExp;
- HWND hWrap;
- HWND hUnSlash;
- HWND hUp;
- HWND hDown;
- char findWhat[FR_MAX_LEN + 1];
- char replaceWhat[FR_MAX_LEN + 1];
-
- bool bWholeWord;
- bool bMatchCase;
- bool bRegExp;
- bool bWrapFind;
- bool bUnSlash;
- bool bReverseFind;
- bool bHavefound;
-
- CEditor * pEditor;
- HWND hEditor;
- int resId;
-};
-
-class CChooseFontDlg : public CWindow
-{
- public:
- CChooseFontDlg();
- ~CChooseFontDlg();
-
- bool Create(CWindow * pWindow);
-
- protected:
- CHOOSEFONT cf;
- LOGFONT lf;
-
- private:
-};
-
-#endif
+++ /dev/null
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>Visual-MinGW license agreement.</title>
-<meta name="generator" content="Namo WebEditor v3.0">
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red" style="font-family:Arial; font-size:12;">
-
-<div align="center"><table border="0" cellspacing="0" bgcolor="teal">
- <tr>
- <td width="597"><p align="center"><font size="5" color="white"><b>Visual-MinGW's
- license</b></font></td>
- </tr>
- <tr>
- <td width="597"><table border="0" cellpadding="5" bgcolor="white">
- <tr>
- <td width="591" valign="top"><p align="center">
- <table border="0">
- <tr>
- <td width="55"><p> </td>
- <td width="518"><p><font size="2">Visual-MinGW
- is a C/C++ Integrated Development Environment.<br>
- Copyright (C) 2001 Manu B.</font></p>
- <p><font size="2">The following license
- terms applies to Visual-MinGW:</font></p>
- <p><font size="2">This program is free software;
- you can redistribute it and/or modify it
- under the<br> terms of the GNU General Public
- License version 2 as published by the Free
- <br>
- Software Foundation.</font></p>
- <p><font size="2">This program is distributed
- in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied
- warranty of MERCHANTABILITY or <br>
- FITNESS FOR A PARTICULAR PURPOSE.<br> See
- the </font><a href="GNU-GPL.txt"><font size="2">GNU
- General Public License</font></a><font size="2">
- for more details.</font></p>
- <p><font size="2">You should have received
- a copy of the </font><a href="GNU-GPL.txt"><font
- size="2">GNU General Public License</font></a><font
- size="2"><br> along with this program;
- if not, write to the Free Software<br> Foundation,
- Inc., 59 Temple Place - Suite 330, Boston,
- MA 02111-1307,USA.</font></p>
- <p> </td>
- </tr>
- <tr>
- <td width="577" colspan="2"><p><hr size="1" width="80%"
- noshade></td>
- </tr>
- <tr>
- <td width="55"><p> </td>
- <td width="518"><p><font size="2">Visual-MinGW
- uses Neil Hodgson's</font><font size="2">
- </font><a href="http://www.scintilla.org/"><font
- size="2">Scintilla</font></a><font size="2">
- </font><font size="2">editing component</font><font
- size="2"> a</font><font size="2">s source
- code <br>
- editor. </font></p>
- <p><font size="2">Th</font><font size="2">e
- following license terms applies to both
- </font><a href="http://www.scintilla.org/"><font
- size="2">Scintilla</font></a><font size="2">
- and </font><a href="http://www.scintilla.org/"><font
- size="2">SciTE</font></a><font size="2">.</font></p>
- <p> </td>
- </tr>
- </table></td>
- </tr>
- </table></td>
- </tr>
- <tr>
- <td width="597"><p align="center"><font size="5" color="white"><b>License
- for Scintilla and SciTE</b></font></td>
- </tr>
- <tr>
- <td width="597"><table border="0" cellpadding="5" bgcolor="white">
- <tr>
- <td width="591" valign="top"><table border="0">
- <tr>
- <td width="55"><p> </p>
- <p> </td>
- <td width="518"><p><font size="2">Copyright
- 1998-2001 by Neil Hodgson <neilh@scintilla.org></font></p>
- <p><font size="2">All Rights Reserved </font></p>
- <p><font size="2">Permission to use, copy,
- modify, and distribute this software and
- its <br> documentation for any purpose and
- without fee is hereby granted, <br> provided
- that the above copyright notice appear in
- all copies and that <br> both that copyright
- notice and this permission notice appear
- in <br> supporting documentation. </font></p>
- <p><font size="2">NEIL HODGSON DISCLAIMS
- ALL WARRANTIES WITH REGARD TO THIS <br>
- SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
- OF MERCHANTABILITY <br> AND FITNESS, IN
- NO EVENT SHALL NEIL HODGSON BE LIABLE FOR
- ANY <br> SPECIAL, INDIRECT OR CONSEQUENTIAL
- DAMAGES OR ANY DAMAGES <br> WHATSOEVER RESULTING
- FROM LOSS OF USE, DATA OR PROFITS, <br>
- WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- OR OTHER <br> TORTIOUS ACTION, ARISING OUT
- OF OR IN CONNECTION WITH THE USE <br> OR
- PERFORMANCE OF THIS SOFTWARE.</font></p>
- <p> </td>
- </tr>
- </table></td>
- </tr>
- </table></td>
- </tr>
-</table></div>
-<p> </p>
-<p> </p>
-</body>
-
-</html>
\ No newline at end of file
+++ /dev/null
-Visual-MinGW's license
-----------------------
-
-Visual-MinGW is a C/C++ Integrated Development Environment.
-Copyright (C) 2001 Manu B.
-
-The following license terms applies to Visual-MinGW:
-
-This program is free software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License version 2 as published by the Free
-Software Foundation.
-
-This program is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,USA.
-
---------------------------------------------------------------------------------
-
-Visual-MinGW uses Neil Hodgson's Scintilla editing component as source code
-editor.
-
-The following license terms applies to both Scintilla and SciTE.
-
-
-License for Scintilla and SciTE
--------------------------------
-
-Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
-
-All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation.
-
-NEIL HODGSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
-SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS, IN NO EVENT SHALL NEIL HODGSON BE LIABLE FOR ANY
-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
-OR PERFORMANCE OF THIS SOFTWARE.
-
-
-
-
-
-
-
-
-
+++ /dev/null
-/********************************************************************
-* Module: main.cpp. This is part of Visual-MinGW.
-*
-* Purpose: Main module.
-*
-* Authors: Manu B.
-*
-* License: Visual-MinGW is a C/C++ Integrated Development Environment.
-* Copyright (C) 2001 Manu.
-*
-* This program is free software; you can redistribute it and/or modify
-* it under the terms of the GNU General Public License as published by
-* the Free Software Foundation; either version 2 of the License, or
-* (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-* USA.
-*
-* (See license.htm for more details.)
-*
-* Revisions:
-* Manu B. 12/15/01 CFileList created.
-*
-********************************************************************/
-#include <windows.h>
-#include <commctrl.h>
-#include <stdio.h>
-#include <ctype.h>
-#include "process.h"
-#include "project.h"
-#include "main.h"
-#include "rsrc.h"
-
-#define MSG_MODIFIED "Modified"
-
-CCriticalSection CriticalSection;
-extern CMessageBox MsgBox;
-CFindReplaceDlg EditorDlg;
-void Main_CmdTest(HWND hwnd);
-
-/* Globals */
-char * g_env_path = NULL;
-char * g_vm_path = NULL;
-CWinApp winApp;
-CProject Project;
-CChrono Chrono;
-
-// File filters & flags.
-DWORD singleFileOpen = OFN_EXPLORER | OFN_FILEMUSTEXIST;
-DWORD multipleFileOpen = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT;
-DWORD fileSave = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY |
- OFN_OVERWRITEPROMPT;
-
-char * defFilter = "All Sources\0*.c;*.cpp;*.cxx;*.h;*.hpp;*.hxx;*.rc;*.mingw;*.prj\0"
- "C Files\0*.c;*.cpp;*.cxx;*.rc\0"
- "Headers\0*.h;*.hpp;*.hxx\0"
- "Ini file\0*.ini\0"
- "All Files (*.*)\0*.*\0\0";
-
-char * prjFilter = "Project Files (*.prj)\0*.prj\0All Files (*.*)\0*.*\0\0";
-char * prjDefExt = "prj";
-
-char * srcFilter = "All Sources\0*.c;*.cpp;*.cxx;*.h;*.hpp;*.hxx;*.rc\0"
- "C Files\0*.c;*.cpp;*.cxx;*.rc\0"
- "Headers\0*.h;*.hpp;*.hxx\0"
- "All Files (*.*)\0*.*\0\0";
-char * srcDefExt = "cpp";
-
-/* For tests */
- CChooseFontDlg CChooseFont;
-void Main_CmdTest(HWND){
- winApp.Process.AddTask(
- "sh.exe",
- IN_PIPE || OUTERR_PIPE,
- LVOUT_ERROR);
- winApp.Process.Run();
-/* CChooseFont.Create(&winApp);*/
-return;
-}
-
-
-/********************************************************************
-* Class: CFileDlg.
-*
-* Purpose: A CFileDlgBase for Open/Save dlg boxes.
-*
-* Revisions:
-*
-********************************************************************/
-CFileDlg::CFileDlg(){
-}
-
-CFileDlg::~CFileDlg(){
-}
-
-bool CFileDlg::Open(CWindow * pWindow, char * pszFileName, DWORD nMaxFile, int fileflag){
-
- switch(fileflag){
- // Project file.
- case PRJ_FILE:
- SetData(prjFilter, prjDefExt, singleFileOpen);
- break;
-
- // Add multiple files to project.
- case ADD_SRC_FILE:
- Reset();
- SetTitle("Add files to project");
- nMaxFile = 2048;
- SetFilterIndex(1);
- SetData(srcFilter, srcDefExt, multipleFileOpen);
- break;
-
- default: // SRC_FILE
- SetData(defFilter, srcDefExt, singleFileOpen);
- SetFilterIndex(1);
- break;
- }
-return OpenFileName(pWindow, pszFileName, nMaxFile);
-}
-
-bool CFileDlg::Save(CWindow * pWindow, char * pszFileName, DWORD nMaxFile, int fileflag){
- Reset();
-
- switch(fileflag){
- case SRC_FILE:
- SetData(defFilter, srcDefExt, fileSave);
- SetFilterIndex(1);
- break;
-
- default: // PRJ_FILE
- SetData(prjFilter, prjDefExt, fileSave);
- break;
- }
-return SaveFileName(pWindow, pszFileName, nMaxFile);
-}
-
-
-/********************************************************************
-* Class: CPreferencesDlg.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CPreferencesDlg::CPreferencesDlg(){
-}
-
-CPreferencesDlg::~CPreferencesDlg(){
-}
-
-int CPreferencesDlg::Create(void){
-return CreateModal(&winApp, IDD_PREFERENCES, (LPARAM) this);
-}
-
-LRESULT CALLBACK CPreferencesDlg::CDlgProc(UINT Message, WPARAM wParam, LPARAM lParam){
- switch(Message){
- case WM_INITDIALOG:
- return OnInitDialog((HWND) wParam, lParam);
-
- case WM_NOTIFY:
- OnNotify((int) wParam, (LPNMHDR) lParam);
- break;
-
- case WM_COMMAND:
- OnCommand(HIWORD(wParam), LOWORD(wParam), (HWND) lParam);
- break;
-
- case WM_CLOSE:
- EndDlg(0);
- break;
- }
-return FALSE;
-}
-
-BOOL CPreferencesDlg::OnInitDialog(HWND, LPARAM){
- // Tab control handle and TCITEM.
- _hWndTab = ::GetDlgItem(_hWnd, IDC_PREF_TABS);
- tcitem.mask = TCIF_TEXT | TCIF_PARAM;
-
- // Insert tabs.
- HWND hwndChild = EnvDlg.Create(this, IDD_ENVIRON, NULL, (long) NULL);
- tcitem.pszText = "Environment";
- tcitem.lParam = (long) &EnvDlg;
- ::SendMessage(_hWndTab, TCM_INSERTITEM, 0, (LPARAM)&tcitem);
- SetChildPosition(hwndChild);
-
-/* tcitem.pszText = "General";
- tcitem.lParam = (long) NULL;
- ::SendMessage(_hWndTab, TCM_INSERTITEM, 1, (LPARAM)&tcitem);
-
- tcitem.pszText = "Find in files";
- tcitem.lParam = (long) NULL;
- ::SendMessage(_hWndTab, TCM_INSERTITEM, 2, (LPARAM)&tcitem);*/
-
- // Show the dialog and default pane.
- Show();
- EnvDlg.Show();
- EnvDlg.SetFocus();
-return TRUE;
-}
-
-BOOL CPreferencesDlg::OnCommand(WORD, WORD wID, HWND){
- switch (wID){
- case IDOK:
- EnvDlg.OnCommand(0, wID, 0);
- EndDlg(IDOK);
- return TRUE;
-
- case IDCANCEL:
- EndDlg(IDCANCEL);
- return FALSE;
-
- case IDAPPLY:
- EnvDlg.OnCommand(0, wID, 0);
- return TRUE;
- }
-return FALSE;
-}
-
-BOOL CPreferencesDlg::EndDlg(int nResult){
- EnvDlg.EndDlg(0);
- EnvDlg.bIsVisible = false;
- if (_hWnd){
- BOOL result = ::EndDialog(_hWnd, nResult);
- _hWnd = 0;
- return result;
- }
-return false;
-}
-
-
-/********************************************************************
-* Class: CEnvDlg.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CEnvDlg::CEnvDlg(){
-}
-
-CEnvDlg::~CEnvDlg(){
-}
-
-LRESULT CALLBACK CEnvDlg::CDlgProc(UINT Message, WPARAM wParam, LPARAM lParam){
- switch(Message){
- case WM_INITDIALOG:
- return OnInitDialog((HWND) wParam, lParam);
-
- case WM_COMMAND:
- OnCommand(HIWORD(wParam), LOWORD(wParam), (HWND) lParam);
- break;
- }
-return FALSE;
-}
-
-BOOL CEnvDlg::OnInitDialog(HWND, LPARAM){
- bIsVisible = false;
- bModified = false;
- /* Get control handles */
- hApply = ::GetDlgItem(_pParent->_hWnd, IDAPPLY);
- hSetCcBin = GetItem(IDC_SET_CCBIN);
- hCcBinDir = GetItem(IDC_CCBIN);
- hBrowseCc = GetItem(IDC_BROWSE_CC);
- hSetCmdBin = GetItem(IDC_SET_CMDBIN);
- hCmdBinDir = GetItem(IDC_CMDBIN);
- hBrowseCmd = GetItem(IDC_BROWSE_CMD);
- hAutoexec = GetItem(IDC_AUTOEXEC);
- hEnvView = GetItem(IDC_ENV_VIEW);
-
- if (winApp.bSetCcEnv)
- ::SendMessage(hSetCcBin, BM_SETCHECK, BST_CHECKED, 0);
- if (winApp.bSetCmdEnv)
- ::SendMessage(hSetCmdBin, BM_SETCHECK, BST_CHECKED, 0);
- if (winApp.bSetDefEnv)
- ::SendMessage(hAutoexec, BM_SETCHECK, BST_CHECKED, 0);
-
- SetItemText(hCcBinDir, winApp.szCcBinDir);
- SetItemText(hCmdBinDir, winApp.szCmdBinDir);
- SetEnvText();
-/* hCcIncDir = GetItem(IDC_CC_INCDIR);
-
- SetItemText(hCcIncDir, winApp.includeDir);*/
- bIsVisible = true;
-return TRUE;
-}
-
-BOOL CEnvDlg::OnCommand(WORD wNotifyCode, WORD wID, HWND){
- char directory[MAX_PATH];
-
- switch (wID){
- case IDC_BROWSE_CC:
- if (winApp.ShellDlg.BrowseForFolder(&winApp, directory, "Browse",
- BIF_RETURNONLYFSDIRS)){
- SetItemText(hCcBinDir, directory);
- }
- return TRUE;
-
- case IDC_BROWSE_CMD:
- if (winApp.ShellDlg.BrowseForFolder(&winApp, directory, "Browse",
- BIF_RETURNONLYFSDIRS)){
- SetItemText(hCmdBinDir, directory);
- }
- return TRUE;
-
- case IDOK:
- winApp.bSetCcEnv =
- (BST_CHECKED==::SendMessage(hSetCcBin, BM_GETCHECK, 0, 0));
- winApp.bSetCmdEnv =
- (BST_CHECKED==::SendMessage(hSetCmdBin, BM_GETCHECK, 0, 0));
- winApp.bSetDefEnv =
- (BST_CHECKED==::SendMessage(hAutoexec, BM_GETCHECK, 0, 0));
-
- GetItemText(hCcBinDir, winApp.szCcBinDir, MAX_PATH);
- GetItemText(hCmdBinDir, winApp.szCmdBinDir, MAX_PATH);
-// GetItemText(hCcIncDir, winApp.includeDir, MAX_PATH);
- if (bModified)
- winApp.SetEnv();
- return TRUE;
-
- case IDCANCEL:
- return FALSE;
-
- case IDAPPLY:
- if (bModified){
- winApp.bSetCcEnv =
- (BST_CHECKED==::SendMessage(hSetCcBin, BM_GETCHECK, 0, 0));
- winApp.bSetCmdEnv =
- (BST_CHECKED==::SendMessage(hSetCmdBin, BM_GETCHECK, 0, 0));
- winApp.bSetDefEnv =
- (BST_CHECKED==::SendMessage(hAutoexec, BM_GETCHECK, 0, 0));
-
- GetItemText(hCcBinDir, winApp.szCcBinDir, MAX_PATH);
- GetItemText(hCmdBinDir, winApp.szCmdBinDir, MAX_PATH);
- winApp.SetEnv();
- SetEnvText();
- bModified = false;
- ::EnableWindow(hApply, false);
- }
- return TRUE;
-
- default:
- if (bIsVisible && !bModified){
- switch(wNotifyCode){
- case EN_CHANGE:
- case BN_CLICKED:
- bModified = true;
- ::EnableWindow(hApply, true);
- return TRUE;
- }
- }
- break;
- }
-return FALSE;
-}
-
-void CEnvDlg::SetEnvText(void){
- if (g_vm_path){
- char * text = (char *) malloc(strlen(g_vm_path)+20); // 10 lines max.
- char * start = text;
- char * parse = g_vm_path;
- while (*parse){
- if (*parse == ';'){
- // Change ';' into CR/LF.
- *text = '\r';
- text++;
- *text = '\n';
- text++;
- parse++;
- }else if (*parse == '='){
- // Rewind buffer.
- text = start;
- parse++;
- }else{
- // Copy one char.
- *text = *parse;
- text++;
- parse++;
- }
- }
- *text = '\0';
- SetItemText(hEnvView, start);
- free(start);
- }
-}
-
-
-/********************************************************************
-* Class: CGrepDlg.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CGrepDlg::CGrepDlg(){
- *findWhat = '\0';
- *gDir = '\0';
-}
-
-CGrepDlg::~CGrepDlg(){
-}
-
-int CGrepDlg::Create(void){
-return CreateModal(&winApp, IDD_GREP, (LPARAM) this);
-}
-
-LRESULT CALLBACK CGrepDlg::CDlgProc(UINT Message, WPARAM wParam, LPARAM lParam){
- switch(Message){
- case WM_INITDIALOG:
- return OnInitDialog((HWND) wParam, lParam);
-
- case WM_COMMAND:
- OnCommand(HIWORD(wParam), LOWORD(wParam), (HWND) lParam);
- break;
-
- case WM_CLOSE:
- EndDlg(0);
- break;
- }
-return FALSE;
-}
-
-BOOL CGrepDlg::OnInitDialog(HWND, LPARAM){
- hFindWhat = GetItem(IDC_FINDWHAT);
- hgDir = GetItem(IDC_GFILTER);
-
- SetItemText(hFindWhat, findWhat);
- SetItemText(hgDir, gDir);
- // Show the dialog and default pane.
- Show();
-return TRUE;
-}
-
-BOOL CGrepDlg::OnCommand(WORD, WORD wID, HWND){
- switch (wID){
- case IDOK:
- GetItemText(hFindWhat, findWhat, sizeof(findWhat));
- GetItemText(hgDir, gDir, sizeof(gDir));
- FindInFiles(findWhat, gDir);
- return TRUE;
-
- case IDCANCEL:
- EndDlg(IDCANCEL);
- return FALSE;
- }
-return FALSE;
-}
-
-void CGrepDlg::FindInFiles(char * findWhat, char * fileFilter){
- if (!findWhat || !fileFilter || winApp.Process.isRunning())
- return;
-
- winApp.Report.Clear();
- winApp.Report.Append("Grep search...", LVOUT_NORMAL);
-
- winApp.Process.AddTask("grep -G -n -H ", OUTERR_PIPE, LVOUT_ERROR);
- winApp.Process.CmdCat(findWhat);
- winApp.Process.CmdCat(" ");
- winApp.Process.CmdCat(fileFilter);
-
- winApp.Process.Run();
-}
-
-
-/********************************************************************
-* Functions: WinMain procedure.
-*
-* Purpose: Runs the application.
-*
-* Revisions:
-*
-********************************************************************/
-int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
-return winApp.Run(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
-}
-
-
-/********************************************************************
-* Class: CWinApp.
-*
-* Purpose: Manages the all application.
-*
-* Revisions:
-*
-********************************************************************/
-CWinApp::CWinApp(){
- *iniFileName = '\0';
- hmod = NULL;
- *openFilesDir ='\0';
- *projectDir = '\0';
- *includeDir = '\0';
- bSetCcEnv = false;
- bSetCmdEnv = false;
- bSetDefEnv = false;
- *szCcBinDir = '\0';
- *szCmdBinDir = '\0';
-
- firstRun = false;
- // Child windows dimensions.
- deltaY = 0;
- tbarHeight = 26;
- sbarHeight = 20;
- tvWidth = 140;
- lvHeight = 120;
-
- hSplitter = 4;
- vSplitter = 4;
-}
-
-CWinApp::~CWinApp(){
-}
-
-bool CWinApp::CustomInit(void){
- /* Get PATH environment variable */
- char * env_path = getenv("PATH");
- if (env_path)
- g_env_path = strdup(env_path);
-
- SetName("Visual MinGW", APP_VERSION);
- MsgBox.SetCaption("Visual MinGW");
- IsWinNT();
- ReadIniFile("visual-mingw.ini");
-
- hAccel = LoadAccelerators(_hInst, "ACCELS");
- hmod = LoadLibrary("SciLexer.DLL");
- if (!hmod){
- MsgBox.DisplayFatal("Unable to load SciLexer.DLL");
- return false;
- }
-return true;
-}
-
-bool CWinApp::Release(void){
- WriteIniFile();
- if (hmod)
- FreeLibrary(hmod);
- if (g_env_path)
- free(g_env_path);
-return true;
-}
-
-bool CWinApp::ReadIniFile(char * fileName){
- ParseCmdLine(iniFileName);
- strcat(iniFileName, fileName);
-
- if (!IniFile.Load(iniFileName)){
- /* Create an empty file and fill it */
- firstRun = true;
- MsgBox.DisplayWarning("Visual-MinGW first run !\n"
- "Step 1: User interface initialization.\n"
- "Please report bugs to Visual-MinGW home page.\n"
- "See the Readme text for more information.");
- FILE * file = fopen(iniFileName, "wb");
- if (!file)
- return false;
- SaveIniFile(file);
- fclose(file);
- return false;
- }
- // [General] section
- IniFile.GetString(openFilesDir, "FilesDirectory", "General" );
- IniFile.GetString(projectDir, "ProjectDirectory" );
- bSetDefEnv = IniFile.GetInt( "SetDefEnv" );
- bSetCmdEnv = IniFile.GetInt( "SetBinDir" );
- IniFile.GetString(szCmdBinDir, "BinDir" );
- // [Compiler] section
- IniFile.GetString(includeDir, "IncludeDir", "Compiler" );
- bSetCcEnv = IniFile.GetInt( "SetBinDir" );
- IniFile.GetString(szCcBinDir, "BinDir" );
-
- SetEnv();
-return true;
-}
-
-void CWinApp::SaveIniFile(FILE * file){
- // [General]
- fprintf (file, "\t; Generated automatically by Visual-MinGW.\n");
- fprintf (file, "\t ; http://visual-mingw.sourceforge.net/\n");
- fprintf (file, "[General]\nSignature = 40");
- fprintf (file, "\nFilesDirectory = %s", openFilesDir);
- fprintf (file, "\nProjectDirectory = %s", projectDir);
- fprintf (file, "\nTvWidth = %d", tvWidth);
- fprintf (file, "\nLvHeight = %d", lvHeight);
- fprintf (file, "\nSetDefEnv = %d", bSetDefEnv);
- fprintf (file, "\nSetBinDir = %d", bSetCmdEnv);
- fprintf (file, "\nBinDir = %s", szCmdBinDir);
- // [Compiler]
- fprintf (file, "\n\n[Compiler]\nIncludeDir = %s", includeDir);
- fprintf (file, "\nSetBinDir = %d", bSetCcEnv);
- fprintf (file, "\nBinDir = %s", szCcBinDir);
-}
-
-bool CWinApp::WriteIniFile(void){
- if (*iniFileName == '\0')
- return false;
- FILE * file = fopen(iniFileName, "wb");
- if (!file)
- return false;
- SaveIniFile(file);
- fclose(file);
- IniFile.Close();
-return true;
-}
-
-bool CWinApp::SetEnv(void){
- // Free previous variable.
- //getenv("PATH=");
- // Malloc a buffer.
- int len = 0;
- if (bSetCcEnv)
- len += strlen(winApp.szCcBinDir);
- if (bSetCmdEnv)
- len += strlen(winApp.szCmdBinDir);
- if (bSetDefEnv && g_env_path)
- len += strlen(g_env_path);
- g_vm_path = (char *) malloc(len+8);
-
- // Copy the environment variable.
- strcpy(g_vm_path, "PATH=");
- if (bSetCcEnv && *winApp.szCcBinDir){
- strcat(g_vm_path, winApp.szCcBinDir);
- strcat(g_vm_path, ";");
- }
- if (bSetCmdEnv && *winApp.szCmdBinDir){
- strcat(g_vm_path, winApp.szCmdBinDir);
- strcat(g_vm_path, ";");
- }
- if (bSetDefEnv && g_env_path)
- strcat(g_vm_path, g_env_path);
-
- len = strlen(g_vm_path) - 1;
- if (g_vm_path[len] == ';')
- g_vm_path[len] = '\0';
- if (putenv(g_vm_path) == -1){
- free(g_vm_path);
- g_vm_path = NULL;
- return false;
- }
-return true;
-}
-
-
-/********************************************************************
-* CWinApp: Create each application's window.
-********************************************************************/
-bool CWinApp::CreateUI(void){
-
- InitCommonControls();
-
- // Custom values.
- wc.style = 0;
- wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
- wc.hCursor = NULL;
- wc.hbrBackground = //NULL;
- (HBRUSH)(COLOR_INACTIVEBORDER + 1);
- wc.lpszMenuName = MAKEINTRESOURCE(ID_MENU);
- wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
-
- if(!MainRegisterEx("main_class")) {
- MsgBox.DisplayFatal("Can't Register Main Window");
- return false;
- }
-
- // Custom values.
- wc.hbrBackground = NULL;
- wc.lpszMenuName = 0;
-
- if(!ChildRegisterEx("child_class")) {
- MsgBox.DisplayFatal("Can't Register MDI Class");
- return false;
- }
-
- // Use a CreateWindowEx like procedure.
- HWND hwnd = CreateEx(
- this, // Owner class.
- 0,
- mainClass,
- appName,
- WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- 0,
- NULL);
-
- if(!hwnd) {
- MsgBox.DisplayFatal("Can't create Main window");
- return false;
- }
- MsgBox.SetParent(hwnd);
-
- // SW_SHOWMAXIMIZED.
- ::ShowWindow(hwnd, SW_SHOWMAXIMIZED);
- ::UpdateWindow(hwnd);
- if (firstRun)
- FirstRunTest();
- firstRun = false;
-return true;
-}
-
-void CWinApp::FirstRunTest(void){
- MsgBox.DisplayWarning("Visual-MinGW first run !\n"
- "Step 2: You will now set your environment variables.\n"
- "\"Use default environment variables\" should be checked.\n"
- "Then Visual-MinGW will try to launch the compiler.");
- PreferencesDlg.Create();
- MsgBox.DisplayWarning("Visual-MinGW first run !\n"
- "Step 3: Installation checking.\n"
- "Try to launch rm and gcc.\n"
- "See \"Main\" or \"Log\" report views for results.\n");
- winApp.Report.Clear();
- winApp.Report.Append("Testing for first run...", LVOUT_NORMAL);
-
- // Put the command line and the run flag in the command stack.
- winApp.Process.AddTask("gcc -v", OUTERR_PIPE, LVOUT_NORMAL);
- winApp.Process.AddTask("rm --version", OUTERR_PIPE, LVOUT_NORMAL);
- winApp.Process.Run();
-return;
-}
-
-void CWinApp::CreateToolbar(void){
- Toolbar.CreateEx(
- this,
- 0,
- WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS
- |TBSTYLE_FLAT | TBSTYLE_TOOLTIPS
- | CCS_NORESIZE);
-
- Toolbar.AddBitmap(IDB_TOOLBAR, 15);
-
- TBBUTTON tbButtons [] =
- { { 0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, {0, 0}, 0, 0},
- { 0, IDM_NEW, TBSTATE_ENABLED, TBSTYLE_BUTTON, {0, 0}, 0, 0},
- { 1, IDM_OPEN, TBSTATE_ENABLED, TBSTYLE_BUTTON, {0, 0}, 0, 0},
- { 2, IDM_SAVE, TBSTATE_ENABLED, TBSTYLE_BUTTON, {0, 0}, 0, 0},
- { 0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, {0, 0}, 0, 0},
- { 3, IDM_CUT, TBSTATE_ENABLED, TBSTYLE_BUTTON, {0, 0}, 0, 0},
- { 4, IDM_COPY, TBSTATE_ENABLED, TBSTYLE_BUTTON, {0, 0}, 0, 0},
- { 5, IDM_PASTE, TBSTATE_ENABLED, TBSTYLE_BUTTON, {0, 0}, 0, 0},
- { 0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, {0, 0}, 0, 0},
- { 6, IDM_UNDO, TBSTATE_ENABLED, TBSTYLE_BUTTON, {0, 0}, 0, 0},
- { 7, IDM_REDO, TBSTATE_ENABLED, TBSTYLE_BUTTON, {0, 0}, 0, 0} };
-
- int numbutton = sizeof tbButtons/sizeof tbButtons[0];
-
- Toolbar.AddButtons(&tbButtons[0], numbutton);
-}
-
-void CWinApp::CreateSplitter(void){
- MainSplitter.Init(&ChildSplitter, &Report, SPLSTYLE_HORZ, lvHeight, SPLMODE_2);
- ChildSplitter.Init(&Manager, &MdiClient, SPLSTYLE_VERT, tvWidth, SPLMODE_1);
-
- // File Manager.
- Manager.Create(this);
- // MDI client.
- CreateMDI();
- // ListView.
- Report.Create(this);
-}
-
-void CWinApp::CreateMDI(void){
- MdiClient.Init(3, ID_FIRSTCHILD);
- MdiClient.CreateEx(
- this,
- WS_EX_CLIENTEDGE,
- WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS
- | WS_VSCROLL | WS_HSCROLL
- );
-}
-
-HWND CWinApp::CreateChild(char * caption, LPVOID lParam){
-
- CChildView * mdiChild = new CChildView;
-
- HWND hwnd = mdiChild->CreateEx(
- &MdiClient, // MUST be an MdiClient *.
- WS_EX_MDICHILD,
- MDIS_ALLCHILDSTYLES | WS_CHILD | WS_SYSMENU | WS_CAPTION
- | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX
- | WS_MAXIMIZE,
- caption,
- 0,
- lParam);
-
- if (!hwnd)
- delete mdiChild;
-return hwnd;
-}
-
-void CWinApp::CreateStatusBar(void){
- Sbar.CreateEx(
- this,
- 0,
- WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | SBARS_SIZEGRIP);
-
- int sbWidths[] = {60, 120, -1};
-
- int numparts = sizeof sbWidths/sizeof sbWidths[0];
-
- Sbar.SetParts(numparts, &sbWidths[0]);
-}
-
-void CWinApp::SendCaretPos(int caretPos) {
- // To display the "Line : xxxx" message, we use our standard msgBuf[256].
- sprintf(msgBuf, "Line : %d", caretPos);
- Sbar.SendMessage(SB_SETTEXT, 0, (LPARAM) msgBuf);
-return;
-}
-
-
-/********************************************************************
-* CWinApp: Message handling procedures.
-********************************************************************/
-LRESULT CALLBACK CWinApp::CMainWndProc(UINT Message, WPARAM wParam, LPARAM lParam){
- switch(Message){
- case WM_CREATE:
- return OnCreate((LPCREATESTRUCT) lParam);
-
- case WM_PAINT:
- return OnPaint((HDC) wParam);
-
- case WM_SIZE:
- return OnSize(wParam, LOWORD(lParam), HIWORD(lParam));
-
- case WM_DESTROY:
- return OnDestroy();
-
- case WM_COMMAND:
- return OnCommand(wParam, lParam);
-
- case WM_CLOSE:
- return OnClose();
-
- case WM_NOTIFY:
- return OnNotify((int) wParam, (LPNMHDR) lParam);
-
- case WM_LBUTTONDOWN:
- return OnLButtonDown((short) LOWORD(lParam), (short) HIWORD(lParam), wParam);
-
- case WM_MOUSEMOVE:
- return OnMouseMove((short) LOWORD(lParam), (short) HIWORD(lParam), wParam);
-
- case WM_LBUTTONUP:
- return OnLButtonUp((short) LOWORD(lParam), (short) HIWORD(lParam), wParam);
-
- case WM_SETCURSOR:
- OnSetCursor((HWND) wParam, (UINT) LOWORD(lParam), (UINT) HIWORD(lParam));
- return DefWindowProc(_hWnd, Message, wParam, lParam);
-
- default:
- return DefFrameProc(_hWnd, MdiClient.GetId(), Message, wParam, lParam);
- }
-return 0;
-}
-
-BOOL CWinApp::OnCreate(LPCREATESTRUCT){
- // Toolbar.
- CreateToolbar();
- // Splitter.
- CreateSplitter();
- // Statusbar.
- CreateStatusBar();
-return TRUE;
-}
-
-BOOL CWinApp::OnPaint(HDC){
- PAINTSTRUCT ps;
- BeginPaint(_hWnd, &ps);
- EndPaint(_hWnd, &ps);
-return 0;
-}
-
-BOOL CWinApp::OnSize(UINT, int width, int height){
- // TreeView and MDI Client delta-height.
- deltaY = height-sbarHeight-lvHeight-vSplitter-tbarHeight;
-
- if (deltaY>3){
- Toolbar.SetPosition(0,
- 0, 0,
- width, tbarHeight,
- 0);
-
- MainSplitter.SetPosition(0,
- 0, tbarHeight,
- width, height-tbarHeight-sbarHeight,
- 0);
-
- Sbar.SetPosition(0,
- 0, height-sbarHeight,
- width, sbarHeight,
- 0);
- }
- InvalidateRect(_hWnd, NULL, false);
-return 0;
-}
-
-BOOL CWinApp::OnDestroy(void){
- PostQuitMessage(0);
-return 0;
-}
-
-BOOL CWinApp::OnClose(void){
- if (IDCANCEL == Manager.SaveAll(IDASK)) // Ask to save.
- return TRUE; // Cancelled by user.
- ::DestroyWindow(_hWnd);
-return 0;
-}
-
-BOOL CWinApp::OnNotify(int idCtrl, LPNMHDR notify){
- Manager.OnNotify(idCtrl, notify);
- Report.OnNotify(idCtrl, notify);
-return 0;
-}
-
-BOOL CWinApp::OnLButtonDown(short xPos, short yPos, UINT){
- MainSplitter.OnLButtonDown(_hWnd, xPos, yPos);
- ChildSplitter.OnLButtonDown(_hWnd, xPos, yPos);
-return 0;
-}
-
-BOOL CWinApp::OnMouseMove(short xPos, short yPos, UINT){
- MainSplitter.OnMouseMove(_hWnd, xPos, yPos);
- ChildSplitter.OnMouseMove(_hWnd, xPos, yPos);
-return 0;
-}
-
-BOOL CWinApp::OnLButtonUp(short xPos, short yPos, UINT){
- MainSplitter.OnLButtonUp(_hWnd, xPos, yPos);
- ChildSplitter.OnLButtonUp(_hWnd, xPos, yPos);
-return 0;
-}
-
-BOOL CWinApp::OnSetCursor(HWND, UINT nHittest, UINT){
- if (nHittest == HTCLIENT) {
- if (MainSplitter.OnSetCursor(_hWnd, 0)){
- return 0;
- }else if (ChildSplitter.OnSetCursor(_hWnd, 0)){
- return 0;
- }else{
- ::SetCursor(::LoadCursor(NULL, IDC_ARROW));
- }
- }
-return 0;
-}
-
-
-/********************************************************************
-* CWinApp: Dispatch command messages.
-********************************************************************/
-BOOL CWinApp::OnCommand(WPARAM wParam, LPARAM lParam){
- int wID = LOWORD(wParam);
-
- switch (wID){
- /* File Menu */
- case IDM_NEW:
- Manager.FilesView.New();
- break;
-
- case IDM_OPEN:
- Manager.OpenFileDialog();
- break;
-
- case IDM_NEW_PROJECT:
- Manager.NewProjectDialog();
- break;
-
- case IDM_OPEN_PROJECT:
- Manager.OpenProjectDialog();
- break;
-
- case IDM_SAVE_PROJECT:
- Manager.SaveProjectFiles(IDYES);
- break;
-
- case IDM_CLOSE_PROJECT:
- Manager.CloseProject();
- break;
-
- case IDM_PREFERENCES:
- PreferencesDlg.Create();
- break;
-
- case IDM_QUIT:
- PostMessage(_hWnd, WM_CLOSE, 0, 0);
- break;
-
- /* Find Menu */
- case IDM_GREP:
- GrepDlg.Create();
- break;
-
- /* Window Menu */
- case IDM_CASCADE:
- PostMessage(MdiClient.GetId(), WM_MDICASCADE, 0, 0);
- break;
- case IDM_TILEHORZ:
- PostMessage(MdiClient.GetId(), WM_MDITILE, MDITILE_HORIZONTAL, 0);
- break;
- case IDM_TILEVERT:
- PostMessage(MdiClient.GetId(), WM_MDITILE, MDITILE_VERTICAL, 0);
- break;
- case IDM_ARRANGE:
- PostMessage(MdiClient.GetId(), WM_MDIICONARRANGE, 0, 0);
- break;
-
- /* Project Menu */
- case IDM_NEW_MODULE:
- Project.NewModuleDlg();
- break;
-
- case IDM_ADD:
- Project.AddFiles();
- break;
-
- case IDM_REMOVE_FILE:
- Manager.RemoveProjectFile();
- break;
-
- case IDM_REMOVE_MODULE:
- Manager.RemoveProjectModule();
- break;
-
- case IDM_OPTION:
- Project.OptionsDlg();
- break;
-
- case IDM_ZIP_SRCS:
- Project.ZipSrcs();
- break;
-
- case IDM_EXPLORE:
- Project.Explore(_hWnd);
- break;
-
- /* Build Menu */
- case IDM_BUILD:
- Project.Build();
- break;
-
- case IDM_REBUILDALL:
- Project.RebuildAll();
- break;
-
- case IDM_RUN_TARGET:
- Project.RunTarget();
- break;
-
- case IDM_MKCLEAN:
- Project.MakeClean();
- break;
-
- case IDM_MKF_BUILD:
- Project.BuildMakefile();
- break;
-
- case IDM_RUN_CMD:
- winApp.Process.CommandDlg.Create();
- break;
-
- case IDM_TEST:
- Main_CmdTest(_hWnd);
- break;
-
- default:{
- if (wID >= ID_FIRSTCHILD){
- DefFrameProc(_hWnd, MdiClient.GetId(), WM_COMMAND, wParam, lParam);
- }else{
- HWND hChildWindow = (HWND) MdiClient.SendMessage(WM_MDIGETACTIVE);
-
- if (hChildWindow)
- ::SendMessage(hChildWindow, WM_COMMAND, wParam, lParam);
- }
- }
- }
-return TRUE;
-}
-
-
-/********************************************************************
-* CWinApp: Handles child messages.
-********************************************************************/
-LRESULT CALLBACK CWinApp::CChildWndProc(CWindow * pWnd, UINT Message, WPARAM wParam, LPARAM lParam){
-
- CChildView * childView = (CChildView *) pWnd;
- HWND hwndChild = childView->_hWnd;
-
- switch(Message){
- case WM_CREATE:
- childView->OnCreate((LPCREATESTRUCT) lParam);
- break;
-
- case WM_SIZE:
- childView->OnSize(wParam, LOWORD(lParam), HIWORD(lParam));
- break;
-
- case WM_COMMAND:
- childView->OnCommand(wParam, lParam);
- break;
-
- case WM_DESTROY:
- childView->OnDestroy();
- break;
-
- case WM_CLOSE:
- if (childView->OnClose()){
- MdiClient.SendMessage(WM_MDIDESTROY,(WPARAM) hwndChild, 0);
- }
- return true;
-
- case WM_NOTIFY:
- childView->OnNotify((int) wParam, (LPNMHDR) lParam);
- break;
-
- case WM_SETFOCUS:
- childView->OnSetFocus((HWND) wParam);
- break;
-
- case WM_MDIACTIVATE:
- childView->OnActivate((HWND) wParam, (HWND) lParam);
- break;
- }
-return DefMDIChildProc(hwndChild, Message, wParam, lParam);
-}
-
-
-/********************************************************************
-* Class: CChildView.
-*
-* Purpose: MDI child window class.
-*
-* Revisions:
-*
-********************************************************************/
-CChildView::CChildView(){
- modified = false;
-}
-
-CChildView::~CChildView(){
-}
-
-bool CChildView::OnCreate(LPCREATESTRUCT){
- CFileItem * file = (CFileItem *) GetLong(GWL_USERDATA);
-
- // Create Scintilla Editor Control.
- HWND hwnd = Editor.CreateEx(
- this,
- 0,
- WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS
- | WS_VSCROLL | WS_HSCROLL);
-
- if (!hwnd)
- return false; // @@TODO need to manage creation failure.
-
- // Set window handles
- file->pMdiChild = this;
-
- // Load a file if there is one to load.
- Editor.LoadFile(file);
-return true;
-}
-
-bool CChildView::OnSize(UINT wParam, int width, int height){
- if(wParam != SIZE_MINIMIZED){
- Editor.SetPosition(0,
- 0,
- 0,
- width,
- height,
- 0);
- }
-return true;
-}
-
-BOOL CChildView::OnClose(void){
- if (modified){
- int decision = MsgBox.AskToSave(true);
- switch (decision){
- case IDCANCEL:
- return FALSE;
-
- case IDYES:
- CmdSave();
- break;
- }
- }
-return TRUE;
-}
-
-BOOL CChildView::OnDestroy(void){
- CFileItem * file = (CFileItem*) GetLong(GWL_USERDATA);
-
- if (file){
- if (!file->isInProject){
- // A simple file.
- winApp.Manager.FilesView.CloseFile(file);
- }else{
- // A project one.
- file->pMdiChild = NULL;
- //modified = false;
- }
- }
-return 0;
-}
-
-BOOL CChildView::OnNotify(int, LPNMHDR notify){
- SCNotification * notification = (SCNotification *) notify;
-
- // Notify Message from Current Editor Control.
- if (notify->hwndFrom == Editor._hWnd){
- switch (notify->code){
- case SCN_UPDATEUI:
- Editor.GetCurrentPos();
- winApp.SendCaretPos(Editor.caretPos);
- break;
-
- case SCN_SAVEPOINTREACHED:
- modified = false;
- winApp.Sbar.WriteString("", 1);
- break;
-
- case SCN_SAVEPOINTLEFT:
- modified = true;
- winApp.Sbar.WriteString(MSG_MODIFIED, 1);
- break;
-
- case SCN_MARGINCLICK:
- if (notification->margin == 2)
- Editor.MarginClick(notification->position, notification->modifiers);
- break;
- }
- }
-return 0;
-}
-
-BOOL CChildView::OnSetFocus(HWND){
- CFileItem * file = (CFileItem*) GetLong(GWL_USERDATA);
- if (!file)
- return false;
- // Select corresponding TreeView item.
- CTreeView * pTreeView = file->pTreeView;
-
- if(!pTreeView)
- return false;
-
- pTreeView->SendMessage(TVM_SELECTITEM, (WPARAM)TVGN_CARET, (LPARAM)file->_hItem);
-
- // Set Focus on Editor Control.
- Editor.SetFocus();
-
- // Display "Modified" message or nothing in the Status Bar.
- winApp.SendCaretPos(Editor.caretPos);
-
- if(modified)
- winApp.Sbar.SendMessage(SB_SETTEXT, 1, (LPARAM) MSG_MODIFIED);
- else
- winApp.Sbar.SendMessage(SB_SETTEXT, 1, (LPARAM) "");
-
- int selectedTab = winApp.Manager.SendMessage(TCM_GETCURSEL);
-
- if (file->isInProject == true && selectedTab != PROJECT_TAB){
- winApp.Manager.SendMessage(TCM_SETCURFOCUS, PROJECT_TAB);
- }else if (file->isInProject == false && selectedTab != FILES_TAB){
- winApp.Manager.SendMessage(TCM_SETCURFOCUS, FILES_TAB);
- }
-return 0;
-}
-
-BOOL CChildView::OnActivate(HWND, HWND hwndChildAct){
- HMENU hMenu;
- HMENU hFileMenu;
- BOOL EnableFlag;
- HWND hwndMain = winApp._hWnd;
-
- hMenu = GetMenu(hwndMain);
-
- if(_hWnd == hwndChildAct){
- EnableFlag = TRUE; //being activated
- }else{
- EnableFlag = FALSE; //being de-activated
- }
- // Menu items.
- EnableMenuItem(hMenu, 1, MF_BYPOSITION | (EnableFlag ? MF_ENABLED : MF_GRAYED));
- EnableMenuItem(hMenu, 3, MF_BYPOSITION | (EnableFlag ? MF_ENABLED : MF_GRAYED));
-
- // Sub-menu items.
- hFileMenu = GetSubMenu(hMenu, 0);
- EnableMenuItem(hFileMenu, IDM_SAVE, MF_BYCOMMAND | (EnableFlag ? MF_ENABLED : MF_GRAYED));
- EnableMenuItem(hFileMenu, IDM_SAVEAS, MF_BYCOMMAND | (EnableFlag ? MF_ENABLED : MF_GRAYED));
- hFileMenu = GetSubMenu(hMenu, 2);
- EnableMenuItem(hFileMenu, IDM_FIND, MF_BYCOMMAND | (EnableFlag ? MF_ENABLED : MF_GRAYED));
- EnableMenuItem(hFileMenu, IDM_REPLACE, MF_BYCOMMAND | (EnableFlag ? MF_ENABLED : MF_GRAYED));
- DrawMenuBar(hwndMain);
-return 0;
-}
-
-void CChildView::CmdSave(void){
- CFileItem * file = (CFileItem*) GetLong(GWL_USERDATA);
-
- if (!file)
- return;
- /* Untitled file ? */
- if (file->nFileOffset == 0){
- CmdSaveAs();
- return;
- }
-
- if (!file->isInProject){
- // A simple file.
- Editor.SaveFile(file->szFileName);
- }else{
- // A project one.
- Project.szDirBuffer[Project.nFileOffset - 1] = '\\';
- strcpy(&Project.szDirBuffer[Project.nFileOffset], file->szFileName);
- Editor.SaveFile(Project.szDirBuffer);
- Project.szDirBuffer[Project.nFileOffset - 1] = '\0';
- }
-}
-
-void CChildView::CmdSaveAs(void){
- CFileItem * file = (CFileItem*) GetLong(GWL_USERDATA);
- if (!file)
- return;
-
- char fileName[MAX_PATH];
- if (!winApp.FileDlg.Save(&winApp, fileName, MAX_PATH, SRC_FILE)) //@@
- return; // canceled by user
-
- ::SetWindowText(_hWnd, fileName);
- strcpy(file->szFileName, fileName);
-
- Editor.SaveFile(file->szFileName);
- //@@ TODO we need to check for errors
-}
-
-BOOL CChildView::OnCommand(WPARAM wParam, LPARAM){
- CFileItem * file = (CFileItem*) GetLong(GWL_USERDATA);
-
- if(!file)
- return false;
-
- switch (LOWORD(wParam)){
- case IDM_SAVE:
- CmdSave();
- break;
-
- case IDM_SAVEAS:
- CmdSaveAs();
- break;
-
- case IDM_SAVEALL:
- winApp.Manager.SaveAll(IDYES); // Silent.
- break;
-
-/* case IDM_CLOSE:
- PostMessage(pWnd, WM_CLOSE, 0, 0);
- break;
-*/
- // To Scintilla control.
- case IDM_FIND:
- EditorDlg.Find(&Editor);
- break;
-
- case IDM_REPLACE:
- EditorDlg.Replace(&Editor);
- break;
-
- case IDM_CUT:
- Editor.SendMessage(SCI_CUT);
- break;
- case IDM_COPY:
- Editor.SendMessage(SCI_COPY);
- break;
- case IDM_PASTE:
- Editor.SendMessage(SCI_PASTE);
- break;
- case IDM_UNDO:
- Editor.SendMessage(SCI_UNDO);
- break;
- case IDM_REDO:
- Editor.SendMessage(SCI_REDO);
- break;
- case IDM_SELECTALL:
- Editor.SendMessage(SCI_SELECTALL);
- break;
- }
-return TRUE;
-}
-
-
-/********************************************************************
-* Class: CManager.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CManager::CManager(){
-}
-
-CManager::~CManager(){
-}
-
-void CManager::OpenFileDialog(void){
- CFileItem * file = new CFileItem;
-
- /* Show the "Open file" dialog */
- winApp.FileDlg.Reset();
- winApp.FileDlg.SetInitialDir(winApp.openFilesDir);
-
- if(!winApp.FileDlg.Open(&winApp, file->szFileName, MAX_PATH, SRC_FILE)){
- delete file;
- return; // canceled by user
- }
-
- /* Get file information */
- file->nFileExtension = winApp.FileDlg.GetFileExtension();
- file->nFileOffset = winApp.FileDlg.GetFileOffset();
- GetFileType(file);
- // Copy file directory.
- strncpy(winApp.openFilesDir, file->szFileName, (file->nFileOffset - 1));
- winApp.openFilesDir[file->nFileOffset-1] = '\0';
-
- /* Load the file */
- if(!OpenFile(file)){
- delete file;
- MsgBox.DisplayString("This file is already opened.");
- }
-}
-
-bool CManager::OpenFile(CFileItem * file){
- if (!file)
- return false;
-
- if (!file->isInProject){
- if (!FilesView.OpenFile(file))
- return false;
- }else{
- if (!ProjectView.OpenFile(file))
- return false;
- }
-return true;
-}
-
-bool CManager::NewProjectDialog(void){
- if(IDYES == Project.CloseDecision())
- CloseProject();
-
- char fileName[MAX_PATH];
- WORD fileOffset;
- *fileName = '\0';
-
-
- if (!winApp.FileDlg.Save(&winApp, fileName, MAX_PATH, PRJ_FILE)){
- return false; // canceled by user
- }
- // Copy prj file's directory.
- fileOffset = winApp.FileDlg.GetFileOffset();
-
- ProjectView.CreateRoot("Project");
- if (!Project.New(fileName, fileOffset)){
- ProjectView.DestroyRoot();
- ProjectView.DestroyList();
- return false;
- }
-return true;
-}
-
-bool CManager::OpenProjectDialog(void){
- if(IDYES == Project.CloseDecision())
- CloseProject();
-
- char fileName[MAX_PATH];
- WORD offset;
- *fileName = '\0';
-
- // Load default values.
- winApp.FileDlg.Reset();
- winApp.FileDlg.SetInitialDir(winApp.projectDir);
-
- if (!winApp.FileDlg.Open(&winApp, fileName, MAX_PATH, PRJ_FILE)){
- return false; // canceled by user
- }
- // Copy project file's directory.
- offset = winApp.FileDlg.GetFileOffset();
-
- // Initialize project tree view.
- ProjectView.CreateRoot(fileName+offset);
-
- if (!Project.Open(fileName, offset)){
- ProjectView.DestroyRoot();
- ProjectView.DestroyList();
- return false;
- }
-return true;
-}
-
-bool CManager::CloseProject(void){
-return ProjectView.Close();
-}
-
-void CManager::RemoveProjectFile(void){
- ProjectView.RemoveFile();
-}
-
-void CManager::RemoveProjectModule(void){
- ProjectView.RemoveModule();
-}
-
-int CManager::SaveProjectFiles(int decision){
-return ProjectView.SaveAll(decision);
-}
-
-int CManager::SaveAll(int decision){
- /* Save open files ? */
- decision = FilesView.SaveAll(decision);
- /* Save project files ? */
- decision = ProjectView.SaveAll(decision);
-return decision;
-}
-
-void CManager::CreateImageList(void){
- // Create an empty image list.
- ImgList.Create(16, 16, ILC_COLORDDB|ILC_MASK, 8, 1);
-
- // Load treeview bmp and add it to the image list.
- CBitmap tvBitmap;
- tvBitmap.Load(this, IDB_TREEVIEW);
- ImgList.AddMasked(&tvBitmap, RGB(255,0,255));
-
- // We no longer need treeview bmp.
- tvBitmap.Destroy();
-}
-
-void CManager::Create(CWindow * pParent){
- // Create the Tab Control.
- CreateEx(
- pParent,
- WS_EX_CLIENTEDGE,
- WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS
- | TCS_BOTTOM | TCS_FOCUSNEVER);
-
- // Give it the default font, create tabs, select first one and show the control.
- SendMessage(WM_SETFONT, (long) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- InsertItem(FILES_TAB, TCIF_TEXT, 0, 0, "Files", 16, 0, 0);
- InsertItem(PROJECT_TAB, TCIF_TEXT, 0, 0, "Project", 16, 0, 0);
- Show();
-
- // Create an Image list and then the Project TreeView.
- CreateImageList();
- ProjectView.Create(this, &ImgList);
- SetItem_Param(PROJECT_TAB, (long) &ProjectView);
- FilesView.Create(this, &ImgList);
- SetItem_Param(FILES_TAB, (long) &FilesView);
-}
-
-bool CManager::SetPosition(HWND, int x, int y, int width, int height, UINT){
- /* Overwrites CTabCtrl::SetPosition() so that all child windows are also resized */
-
- // Tab Control.
- ::SetWindowPos(_hWnd, 0,
- x,
- y,
- width,
- height,
- 0);
- // Child windows.
- RECT Rect;
- ::GetClientRect(_hWnd, &Rect);
- ProjectView.SetPosition(0, Rect.top +5, Rect.left +5,
- Rect.right-10, Rect.bottom-30, 0);
-
- FilesView.SetPosition(0, Rect.top +5, Rect.left +5,
- Rect.right-10, Rect.bottom-30, 0);
-return true;
-}
-
-BOOL CManager::OnNotify(int, LPNMHDR notify){
- // Dispatch messages.
- switch (notify->code){
- // Tab Control.
- case TCN_SELCHANGING:
- OnSelChanging(notify);
- break;
-
- case TCN_SELCHANGE:
- OnSelChange(notify);
- break;
-
- // TreeView.
- case TVN_SELCHANGED:
- Tv_OnSelchanged((LPNMTREEVIEW) notify);
- break;
- }
-return TRUE;
-}
-
-void CManager::OnSelChanging(LPNMHDR notify){
- if (_hWnd == notify->hwndFrom){
- CTreeView * pTreeView = (CTreeView *) GetItem_Param(GetCurSel());
- if (pTreeView){
- pTreeView->Hide();
- }
- }
-}
-
-void CManager::OnSelChange(LPNMHDR notify){
- if (_hWnd == notify->hwndFrom){
- CTreeView * pTreeView = (CTreeView *) GetItem_Param(GetCurSel());
- if (pTreeView){
- pTreeView->Show();
- }
- }
-}
-
-void CManager::Tv_OnSelchanged(LPNMTREEVIEW notify){
- // Get lParam of current tree item.
- CFileItem * file = (CFileItem *) notify->itemNew.lParam;
-
- if (file){
- CChildView * pMdiChild = (CChildView *) file->pMdiChild;
-
- if(pMdiChild){
- // An editor, focus it.
- ::SetFocus((HWND) pMdiChild->_hWnd);
- }else{
- // No editor, the item is part of a project.
- Project.SwitchCurrentDir();
- winApp.CreateChild(file->szFileName, file);
- }
- }
-}
-
-
-/********************************************************************
-* Class: CFilesView.
-*
-* Purpose: Open files TreeView.
-*
-* Revisions:
-*
-********************************************************************/
-CFilesView::CFilesView(){
- hRoot = NULL;
-}
-
-CFilesView::~CFilesView(){
-}
-
-void CFilesView::New(void){
- CFileItem * file = new CFileItem;
- if(!winApp.Manager.OpenFile(file)){
- delete file;
- MsgBox.DisplayString("Untitled file already exist.");
- }
-}
-
-bool CFilesView::OpenFile(CFileItem * file){
- if (!file)
- return false;
-
- int listAction;
- char * fileName = file->szFileName + file->nFileOffset;
-
- /* Untitled file ? */
- if (file->nFileOffset == 0){
- //@@TODO add a counter to get Untitled01, 02, etc...
- strcpy(file->szFileName, "Untitled");
- }
-
- /* Check if this file is already opened */
- listAction = InsertSorted_New(file);
-
- if (listAction == FILE_FOUND){
- /* Focus the editor window */
- CFileItem * currentFile = (CFileItem *) GetCurrent();
- if (currentFile){
- CMDIChild * pMdiChild = currentFile->pMdiChild;
- if (pMdiChild)
- pMdiChild->SetFocus();
- }
- return false;
- }
-
- /* Create the editor window */
- if (!winApp.CreateChild(file->szFileName, file)){
- MsgBox.DisplayFatal("Can't create child window");
- return false;
- }
- // Note: A WM_SETFOCUS message will be send to the child window.
-
- /* Append the file to the list */
- InsertLast(file);
-
- /* Create a Tree View item */
- file->_hItem = CreateItem(
- hRoot, //@@ use a GetRootItem() ?
- TVI_LAST,
- file->type,
- fileName,
- (LPARAM) file);
-
- file->pTreeView = this;
-return true;
-}
-
-void CFilesView::CloseFile(CFileItem * file){
- SendMessage(TVM_DELETEITEM, 0, (LPARAM) file->_hItem);
- Destroy(file);
-}
-
-int CFilesView::SaveAll(int decision){
- if (decision == IDNO || decision == IDCANCEL)
- return decision;
- CFileItem * file = (CFileItem*) First();
- while (file){
- if (file->pMdiChild){
- CChildView * childView = (CChildView *) file->pMdiChild;
- /* Modified ? */
- if (childView->modified){
- /* Ask ? */
- if (decision == IDASK){
- decision = MsgBox.AskToSave(true); // Cancel button.
- if (decision != IDYES)
- return decision; // IDNO or IDCANCEL.
- }
- childView->CmdSave();
- }
- }
- file = (CFileItem*) Next();
- }
-return decision;
-}
-
-HWND CFilesView::Create(CWindow * pParent, CImageList * imgList){
- // Create TreeView.
- CreateEx(
- pParent,
- WS_EX_CLIENTEDGE,
- WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS
- | TVS_EDITLABELS | TVS_HASLINES | TVS_HASBUTTONS,
- 0,
- (void*) 12);
-
- // Assign the image list to the treeview control.
- SendMessage(TVM_SETIMAGELIST, (long)TVSIL_NORMAL, (long) imgList->GetId());
- hRoot = CreateItem(TVI_ROOT, TVI_LAST, WORKSPACE, "Workspace", 0);
-return _hWnd;
-}
-
-
-/********************************************************************
-* Class: CProjectView.
-*
-* Purpose: Project TreeView.
-*
-* Revisions:
-*
-********************************************************************/
-CProjectView::CProjectView(){
- hRoot = NULL;
-}
-
-CProjectView::~CProjectView(){
-}
-
-CFileItem * CProjectView::NewFile(char * name){
- CFileItem * current = (CFileItem *) GetCurrent();
- CFileItem * srcFile = new CFileItem;
-
- // Copy directory name.
- if (current){
- strncpy(srcFile->szFileName, current->szFileName, current->nFileOffset);
- srcFile->nFileOffset = current->nFileOffset;
- }else{
- // No files in the project yet, use makefile directory.
- strcpy(srcFile->szFileName, Project.Makefile.mkfDir);
- srcFile->nFileOffset = strlen(srcFile->szFileName)+1;
- }
-
- srcFile->szFileName[srcFile->nFileOffset - 1] = '\\';
-
- // Append file name.
- strcpy(&srcFile->szFileName[srcFile->nFileOffset], name);
- //MsgBox.DisplayString(srcFile->szFileName);
-
- if (::CheckFile(srcFile)){
- ::GetFileType(srcFile);
- srcFile->isInProject = true;
- HANDLE hFile;
- hFile = ::CreateFile(srcFile->szFileName,
- 0,
- 0,
- NULL,
- CREATE_NEW,
- FILE_ATTRIBUTE_ARCHIVE,
- NULL);
-
- if (hFile != INVALID_HANDLE_VALUE){
- CloseHandle(hFile);
- // Try to add new file to the project.
- if(OpenFile(srcFile)){
- Project.modified = true;
- return srcFile;
- }
- }
- }
- delete srcFile;
-return NULL;
-}
-
-bool CProjectView::OpenFile(CFileItem * file){
- if (!file)
- return false;
-
- int listAction;
- char * fileName = file->szFileName + file->nFileOffset;
-
- /* Check if this file is already opened */
- listAction = InsertSorted_New(file);
-
- if (listAction == FILE_FOUND){
- /* Focus the editor window */
- CFileItem * currentFile = (CFileItem *) GetCurrent();
- if (currentFile){
- CMDIChild * pMdiChild = currentFile->pMdiChild;
- if (!pMdiChild){
- /* Create a child window */
- Project.SwitchCurrentDir();
- winApp.CreateChild(file->szFileName, file);
- }else{
- pMdiChild->SetFocus();
- }
- }
- return false;
- }
-
- file->_hDirItem = hRoot;
- CreateSubDirItem(file);
-
- if (listAction == EMPTY_LIST){
- InsertFirst(file);
- }else if (listAction == INSERT_FIRST){
- InsertFirst(file);
- }else if (listAction == INSERT_LAST){
- InsertLast(file);
- }else if (listAction == INSERT_BEFORE){
- InsertBefore(file);
- }else if (listAction == INSERT_AFTER){
- InsertAfter(file);
- }
-
- /* Create the file icon */
- file->_hItem = CreateItem(
- file->_hDirItem,
- TVI_SORT,
- file->type,
- fileName,
- (LPARAM) file);
-
- file->pTreeView = this;
-
- /* Create an editor view */
- if (file->show){
- winApp.CreateChild(file->szFileName, file);
- }
-return true;
-}
-
-bool CProjectView::Close(){
- if (Project.NoProject())
- return false;
-
- int decision = IDASK;
- decision = SaveAll(decision);
- if (decision == IDCANCEL)
- return false;
-
- // Parse the list while there's a next node.
- CFileItem * srcFile = (CFileItem *) First();
- while(srcFile){
- DestroyFile(srcFile, decision);
- srcFile = (CFileItem *) Next();
- }
- Project.loaded = false;
-
- DestroyRoot();
- DestroyList();
- winApp.Report.Clear();
-return true;
-}
-
-void CProjectView::RemoveFile(void){
- if (Project.NoProject())
- return;
-
- CFileItem * srcFile = (CFileItem *) GetSelectedItemParam();
-
- if (srcFile){
- if (srcFile->pMdiChild)
- DestroyFile(srcFile);
- TreeView_DeleteItem(_hWnd, srcFile->_hItem);
- if (!TreeView_GetChild(_hWnd, srcFile->_hDirItem))
- TreeView_DeleteItem(_hWnd, srcFile->_hDirItem);
-/* else
- TreeView_SelectItem(_hWnd, srcFile->_hDirItem);*/
- Destroy(srcFile);
-
- // we need to save prj file before exit.
- //@@ Project.CloseFile, modified & buildMakefile should be private.
- Project.modified = true;
- Project.buildMakefile = true;
- }else{
- MsgBox.DisplayWarning("No project file selected");
- }
-}
-
-void CProjectView::RemoveModule(void){
- if (Project.NoProject())
- return;
-
- CFileItem * srcFile = (CFileItem *) GetSelectedItemParam();
- CFileItem * otherFile;
-
- if (srcFile){
- if (srcFile->prev){
- otherFile = (CFileItem *) srcFile->prev;
- if (otherFile->nFileExtension != 0){
- if (0 == strnicmp(srcFile->szFileName, otherFile->szFileName, otherFile->nFileExtension)){
- if (otherFile->pMdiChild)
- DestroyFile(otherFile);
- TreeView_DeleteItem(_hWnd, otherFile->_hItem);
- Destroy(otherFile);
- }
- }
- }
- if (srcFile->next){
- otherFile = (CFileItem *) srcFile->next;
- if (otherFile->nFileExtension != 0){
- if (0 == strnicmp(srcFile->szFileName, otherFile->szFileName, otherFile->nFileExtension)){
- if (otherFile->pMdiChild)
- DestroyFile(otherFile);
- TreeView_DeleteItem(_hWnd, otherFile->_hItem);
- Destroy(otherFile);
- }
- }
- }
- if (srcFile->pMdiChild)
- DestroyFile(srcFile);
- TreeView_DeleteItem(_hWnd, srcFile->_hItem);
- Destroy(srcFile);
-
- // we need to save prj file before exit.
- //@@ Project.CloseFile, modified & buildMakefile should be private.
- Project.modified = true;
- Project.buildMakefile = true;
- }else{
- MsgBox.DisplayWarning("No project file selected");
- }
-}
-
-int CProjectView::DestroyFile(CFileItem * file, int decision){
- if (file && file->pMdiChild){
- CChildView * pMdiChild = (CChildView *) file->pMdiChild;
-
- if (pMdiChild->modified && decision != IDNO){
- // Ask ?
- if (decision == IDASK){
- decision = MsgBox.AskToSave(true); // (Cancel button)
- if (decision == IDCANCEL)
- return decision;
- }
- pMdiChild->CmdSave();
- }
-
- if (pMdiChild->_hWnd) // have an editor window, so destroy it.
- winApp.MdiClient.SendMessage(WM_MDIDESTROY, (WPARAM)pMdiChild->_hWnd, 0);
- }
-return decision;
-}
-
-int CProjectView::SaveAll(int decision){
- if (!Project.loaded)
- return 0;
-
- if (decision == IDNO || decision == IDCANCEL)
- return decision;
-
- CFileItem * file = (CFileItem*) First();
- while (file){
- if (file->pMdiChild){
- CChildView * childView = (CChildView *) file->pMdiChild;
- /* Modified ? */
- if (childView->modified){
- /* Ask ? */
- if (decision == IDASK){
- decision = MsgBox.AskToSave(true); // Cancel button.
- if (decision != IDYES)
- return decision; // IDNO or IDCANCEL.
- }
- childView->CmdSave();
- }
- }
- file = (CFileItem*) Next();
- }
-
- if (Project.modified)
- return Project.SavePrjFile(decision);
-return decision;
-}
-
-bool CProjectView::CreateSubDirItem(CFileItem * file){
- /* Initialize _hDirItem and get a pointer to current file */
- file->_hDirItem = hRoot;
- CFileItem * currentFile = (CFileItem *) GetCurrent();
-
- /* See if our new file is in the same directory than current file */
- if (currentFile){
- // There's some files in the list.
- if (file->nFileOffset == currentFile->nFileOffset){
- // Same directory length, we may have found the directory.
- if (0 == strnicmp(file->szFileName, currentFile->szFileName, currentFile->nFileOffset)){
- /* We have found the directory, then copy _hDirItem */
- file->_hDirItem = currentFile->_hDirItem;
- return true;
- }
- }
- }
-
- /* We need to parse the tree view and create directory icons */
- char * parse = file->szFileName;
- if (*parse == '.' && *(parse+1) == '\\'){
- /* This is a valid relative path */
- char dir[MAX_PATH];
- strcpy(dir, file->szFileName);
- parse = dir+2;
- char * dirStart;
- HTREEITEM hParent = hRoot;
- HTREEITEM hFound;
- if (*parse){
- for ( ; ; ){
- /* Found each backslash */
- dirStart = parse;
- parse = strchr(parse, '\\');
- if (!parse)
- break; // No more backslash.
- else if (parse == dirStart)
- return false; // Avoids an endless loop.
- *parse = '\0';
-
- /* Find the directory */
- hFound = FindDirItem(hParent, dirStart);
- if (!hFound){
- /* Append a new directory icon */
- hParent = CreateDirItem(hParent, dirStart);
- }
- parse++;
- }
- }
- file->_hDirItem = hParent;
- }
-return true;
-}
-
-HTREEITEM CProjectView::FindDirItem(HTREEITEM hItem, char * dir){
- char buffer[_MAX_DIR];
- HTREEITEM hNext = TreeView_GetChild(_hWnd, hItem);
- while (hNext){
- _TvItem.hItem = hNext;
- _TvItem.mask = TVIF_HANDLE | TVIF_TEXT;
- _TvItem.pszText = buffer;
- _TvItem.cchTextMax = _MAX_DIR;
- if (TreeView_GetItem(_hWnd, &_TvItem)){
- if (!stricmp(dir, buffer))
- return hNext;
- }
- hNext = TreeView_GetNextSibling(_hWnd, hNext);
- }
-return NULL;
-}
-
-HWND CProjectView::Create(CWindow * pParent, CImageList * imgList){
- // Create TreeView.
- CreateEx(
- pParent,
- WS_EX_CLIENTEDGE,
- WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS
- | TVS_EDITLABELS | TVS_HASLINES | TVS_HASBUTTONS);
-
- // Assign the image list to the treeview control.
- SendMessage(TVM_SETIMAGELIST, (long)TVSIL_NORMAL, (long) imgList->GetId());
-return _hWnd;
-}
-
-void CProjectView::CreateRoot(char * projectName){
-
- _pParent->SendMessage(TCM_SETCURFOCUS, 1, 0);
-
- // Create Root Item.
- hRoot = CreateItem(TVI_ROOT, TVI_LAST, PROJECT, projectName, 0);
- SendMessage(TVM_EXPAND, (long) TVE_EXPAND, (long) hRoot);
-}
-
-void CProjectView::DestroyRoot(void){
- TreeView_DeleteItem(_hWnd, hRoot);
- hRoot = 0;
-
- _pParent->SendMessage(TCM_SETCURFOCUS, 0, 0);
-}
-
-HTREEITEM CProjectView::CreateDirItem(HTREEITEM hParent, char * dir){
-return CreateItem(hParent, TVI_SORT, DIR, dir, 0);
-}
-
-CFileItem * CProjectView::FindFile(char * szFileName){
- if (!szFileName || !*szFileName)
- return NULL;
-
- char * currentFile;
- bool stripDir = true;
- if (*szFileName == '.')
- stripDir = false;
- // Get the current node.
- CFileItem * currentNode = (CFileItem *) GetCurrent();
-
- if(!currentNode)
- return NULL; // The list is empty.
-
- currentFile = GetFileName(currentNode, stripDir);
- int cmpResult = stricmp(szFileName, currentFile);
- // Compare names to know if we must parse Up
- // or Down from current node.
- if (cmpResult == 0){
- return currentNode; // Found !
- }
- // Search Up -----------------------------------------------------------------
- else if (cmpResult == -1){
- // Parse the list while there's a previous node.
- while (Prev()){
- currentNode = (CFileItem *) GetCurrent();
- currentFile = GetFileName(currentNode, stripDir);
- if(!stricmp(szFileName, currentFile))
- return currentNode; // Found !
- }
- }
- // Search Down --------------------------------------------------------------
- else if (cmpResult == 1){
- // Parse the list while there's a next node.
- while (Next()){
- currentNode = (CFileItem *) GetCurrent();
- currentFile = GetFileName(currentNode, stripDir);
- if(!stricmp(szFileName, currentFile))
- return currentNode; // Found !
- }
- }
-return NULL;
-}
-
-char * CProjectView::GetFileName(CFileItem * currentNode, bool flag){
- char * fileName = currentNode->szFileName;
- if (flag == true){
- fileName += currentNode->nFileOffset;
- }
-return fileName;
-}
-
-
-/********************************************************************
-* Class: CReport.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CReport::CReport(){
-}
-
-CReport::~CReport(){
-}
-
-void CReport::Create(CWindow * pParent){
- // Create the Tab Control.
- CreateEx(
- pParent,
- WS_EX_CLIENTEDGE,
- WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS
- /*| TCS_BOTTOM*/ | TCS_MULTILINE | TCS_VERTICAL
- | TCS_FOCUSNEVER);
-
- // Give it a smart font, create tabs, select first one and show the control.
- SendMessage(WM_SETFONT, (long) GetStockObject(DEFAULT_GUI_FONT), 0);
-
- InsertItem(REPORT_MAIN_TAB, TCIF_TEXT, 0, 0, "Main", 16, 0, 0);
- InsertItem(REPORT_LOG_TAB, TCIF_TEXT, 0, 0, "Log", 16, 0, 0);
- Show();
-
- // Create an Image list and then the Project TreeView.
- MainList.Create(this);
- SetItem_Param(REPORT_MAIN_TAB, (long) &MainList);
- LogList.Create(this);
- SetItem_Param(REPORT_LOG_TAB, (long) &LogList);
-}
-
-bool CReport::SetPosition(HWND, int x, int y, int width, int height, UINT){
- /* Overwrites CTabCtrl::SetPosition() so that all child windows are also resized */
-
- // Tab Control.
- ::SetWindowPos(_hWnd, 0,
- x,
- y,
- width,
- height,
- 0);
-
- // Get tab's display area.
- RECT area;
- area.left = 0;
- area.top = 0;
- area.right = width;
- area.bottom = height;
- ::SendMessage(_hWnd, TCM_ADJUSTRECT, FALSE, (LPARAM) &area);
- area.right -= area.left;
- area.bottom -= area.top;
- /* WS_EX_CLIENTEDGE correction */
- area.top -= 2;
- area.right -= 2;
- // Borders.
- area.left += 3;
- area.top += 3;
- area.right -= 6;
- area.bottom -= 6;
-
- // Child windows.
- MainList.SetPosition(0, area.left, area.top,
- area.right, area.bottom, 0);
- LogList.SetPosition(0, area.left, area.top,
- area.right, area.bottom, 0);
-return true;
-}
-
-BOOL CReport::OnNotify(int, LPNMHDR notify){
- // Dispatch messages.
- switch (notify->code){
- // Tab Control.
- case TCN_SELCHANGING:
- OnSelChanging(notify);
- break;
-
- case TCN_SELCHANGE:
- OnSelChange(notify);
- break;
-
- // Main list.
- case NM_DBLCLK:
- MainList.Lv_OnDbClick((LPNMLISTVIEW) notify);
- break;
- }
-return TRUE;
-}
-
-void CReport::OnSelChanging(LPNMHDR notify){
- if (_hWnd == notify->hwndFrom){
- CWindow * pWindow = (CWindow *) GetItem_Param(GetCurSel());
- if (pWindow){
- pWindow->Hide();
- }
- }
-}
-
-void CReport::OnSelChange(LPNMHDR notify){
- if (_hWnd == notify->hwndFrom){
- CWindow * pWindow = (CWindow *) GetItem_Param(GetCurSel());
- if (pWindow){
- pWindow->Show();
- }
- }
-}
-
-void CReport::Clear(void){
- MainList.Clear();
- LogList.Clear();
-}
-
-bool CReport::Append(char * line, WORD outputFlag){
- LogList.Append(line, outputFlag);
- MainList.Append(line, outputFlag);
-return true;
-}
-
-
-/********************************************************************
-* Class: CMainList.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CMainList::CMainList(){
-}
-
-CMainList::~CMainList(){
-}
-
-void CMainList::Create(CWindow * pParent){
- CreateEx(
- pParent,
- WS_EX_CLIENTEDGE,
- WS_VISIBLE | WS_CHILD| WS_CLIPCHILDREN | WS_CLIPSIBLINGS
- | LVS_REPORT);
-
- SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE,
- LVS_EX_GRIDLINES, LVS_EX_GRIDLINES);
- SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE,
- LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
-
- // Insert columns.
- LVCOLUMN lvc;
- lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
- lvc.fmt = LVCFMT_LEFT;
-
- lvc.iSubItem = 0;
- lvc.cx = 35;
- lvc.pszText = "Line";
- SendMessage(LVM_INSERTCOLUMN, 0, (LPARAM) &lvc);
-
- lvc.iSubItem = 1;
- lvc.cx = 70;
- lvc.pszText = "Unit";
- SendMessage(LVM_INSERTCOLUMN, 1, (LPARAM) &lvc);
-
- lvc.iSubItem = 2;
- lvc.cx = 640;
- lvc.pszText = "Message";
- SendMessage(LVM_INSERTCOLUMN, 2, (LPARAM) &lvc);
-}
-
-void CMainList::Lv_OnDbClick(LPNMLISTVIEW lpnmlv){
- if (_hWnd == lpnmlv->hdr.hwndFrom){
- char lineBuff[256];
- *lineBuff = '\0';
- char * c = lineBuff;
- LV_ITEM lvi;
- lvi.mask = LVIF_TEXT;
- lvi.iItem = lpnmlv->iItem;
- lvi.iSubItem = 0;
- lvi.pszText = lineBuff;
- lvi.cchTextMax = 256;
- lvi.lParam = 0;
- if (!SendMessage(LVM_GETITEMTEXT, lpnmlv->iItem, (long) &lvi))
- return;
- while(*c){
- if (!isdigit(*c))
- return;
- c++;
- }
- int line = atoi(lineBuff);
-
- //MsgBox.DisplayLong((long) line);
-
- lvi.iSubItem = 1;
- if (!SendMessage(LVM_GETITEMTEXT, lpnmlv->iItem, (long) &lvi))
- return;
- CFileItem * item = winApp.Manager.ProjectView.FindFile(lineBuff);
- if (item && item->isInProject){
- CChildView * pMdiChild = (CChildView *) item->pMdiChild;
-
- if(pMdiChild){
- // An editor, focus it.
- ::SetFocus((HWND) pMdiChild->_hWnd);
- }else{
- // No editor, the item is part of a project.
- Project.SwitchCurrentDir();
- winApp.CreateChild(item->szFileName, item);
- }
- pMdiChild = (CChildView *) item->pMdiChild;
- if (pMdiChild)
- pMdiChild->Editor.GotoLine(line-1);
- }
- }
-}
-
-bool CMainList::Append(char * line, WORD outputFlag){
- int row;
-
- *szLine = '\0';
- *szUnit = '\0';
- *szMsg = '\0';
-
- if (outputFlag == LVOUT_ERROR){
- if (!SplitErrorLine(line))
- return false;
- }else if (outputFlag == LVOUT_NORMAL){
- strcpy (szMsg, line);
- }else{
- strcpy (szMsg, "Unrecognized outputFlag");
- }
-
- // Fill in List View columns, first is column 0.
- LV_ITEM lvi;
- lvi.mask = LVIF_TEXT; // | LVIF_PARAM;
- lvi.iItem = 0x7FFF;
- lvi.iSubItem = 0;
- lvi.pszText = szLine;
- lvi.cchTextMax = strlen(lvi.pszText)+1;
- lvi.lParam = 0;
-
- row = SendMessage(LVM_INSERTITEM, 0, (LPARAM) &lvi);
-
- // Continue with column 1.
- lvi.iSubItem = 1;
- lvi.pszText = szUnit;
- lvi.cchTextMax = strlen(lvi.pszText)+1;
- SendMessage(LVM_SETITEMTEXT, (WPARAM)row, (LPARAM)&lvi);
-
- // Continue with column 2.
- lvi.iSubItem = 2;
- lvi.pszText = szMsg;
- lvi.cchTextMax = strlen(lvi.pszText)+1;
- SendMessage(LVM_SETITEMTEXT, (WPARAM)row, (LPARAM)&lvi);
-
- // Save last row position
- lastRow = row+1;
-
-return true;
-}
-
-bool CMainList::SplitErrorLine(char * line){
- char * chr = line;
- char * col;
- // line => [unit]:[line_n°]: [error message]
- // or => [unit]: [error message]
-
- if (!*line)
- return false;
-
- /* Unit */
- col = szUnit;
- for ( ; ; ){
- if (!*chr){
- /* Not an error line */
- //strcpy(szMsg, szUnit);
- *szUnit = '\0';
- return false;
- }else if (*chr == ':'){
- if (*(chr+1) == '\\'){
- *col = *chr;
- col++;
- chr++;
- continue;
- }else{
- chr++;
- break;
- }
- }
- *col = *chr;
- col++;
- chr++;
- }
- *col = '\0';
-
- /* Line number ? */
- col = szLine;
- if (*chr && isdigit(*chr)){ //@@ *chr=0 ?
- while (*chr && *chr != ':'){
- *col = *chr;
- col++;
- chr++;
- }
- *col = '\0';
- chr++;
- }
-
- /* Message */
- col = szMsg;
- if (isspace(*chr)){
- /**col = '>';
- col++;
- *col = ' ';
- col++;*/
- chr++;
- }
-
- while (*chr){
- *col = *chr;
- col++;
- chr++;
- }
- *col = '\0';
-return true;
-}
-
-
-/********************************************************************
-* Class: CLogList.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CLogList::CLogList(){
-}
-
-CLogList::~CLogList(){
-}
-
-void CLogList::Create(CWindow * pParent){
- CreateEx(
- pParent,
- WS_EX_CLIENTEDGE,
- WS_CHILD| WS_CLIPCHILDREN | WS_CLIPSIBLINGS | LVS_REPORT
- | LVS_NOCOLUMNHEADER);
-
- SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE,
- LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
-
- // Insert columns.
- LVCOLUMN lvc;
- lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
- lvc.fmt = LVCFMT_LEFT;
-
- lvc.iSubItem = 0;
- lvc.cx = 100;
- lvc.pszText = "Message";
- SendMessage(LVM_INSERTCOLUMN, 0, (LPARAM) &lvc);
-}
-
-bool CLogList::SetPosition(HWND hInsertAfter, int x, int y, int width, int height, UINT uFlags){
- ::SendMessage(_hWnd, WM_SETREDRAW, FALSE, 0);
- ::SetWindowPos(_hWnd, hInsertAfter, x, y, width, height, uFlags);
- ::SendMessage(_hWnd, LVM_SETCOLUMNWIDTH, 0, MAKELPARAM((int) width-22, 0));
- ::SendMessage(_hWnd, WM_SETREDRAW, TRUE, 0);
-return true;
-}
-
-bool CLogList::Append(char * line, WORD /*outputFlag*/){
- int row;
-
- *szMsg = '\0';
-
-/* if (outputFlag != LVOUT_ERROR)
- return false;
-*/
- // Fill in List View columns, first is column 0.
- LV_ITEM lvi;
- lvi.mask = LVIF_TEXT; // | LVIF_PARAM;
- lvi.iItem = 0x7FFF;
- lvi.iSubItem = 0;
- lvi.pszText = line;
- lvi.cchTextMax = strlen(lvi.pszText)+1;
- lvi.lParam = 0;
-
- row = SendMessage(LVM_INSERTITEM, 0, (LPARAM) &lvi);
-
- // Save last row position
- lastRow = row+1;
-
-return true;
-}
-
-
-/********************************************************************
-* Class: CFileItem.
-*
-* Purpose: Linked List Node for file parameters.
-*
-* Revisions:
-*
-********************************************************************/
-CFileItem::CFileItem(){
- type = U_FILE;
-
- *szFileName = '\0';
- szFileName[MAX_PATH - 1] = '\0'; // security.
- nFileOffset = 0;
- nFileExtension = 0;
-
- pTreeView = NULL;
- _hDirItem = 0;
- _hItem = 0;
-
- pMdiChild = NULL;
- show = 0;
- isInProject = false;
-}
-
-CFileItem::~CFileItem(){
-}
-
-
-/********************************************************************
-* Class: CFileList.
-*
-* Purpose: A CList with a dedicated Compare() procedure.
-*
-* Revisions:
-*
-********************************************************************/
-CFileList::CFileList(){
-}
-
-CFileList::~CFileList(){
-}
-
-int CFileList::Compare(CNode *node1, CNode *node2){
-return stricmp(((CFileItem *)node1)->szFileName, ((CFileItem *)node2)->szFileName);
-}
-
+++ /dev/null
-/********************************************************************
-* Module: main.h. This is part of Visual-MinGW.
-*
-* License: Visual-MinGW is covered by GNU General Public License,
-* Copyright (C) 2001 Manu B.
-* See license.htm for more details.
-*
-********************************************************************/
-#ifndef MAIN_H
-#define MAIN_H
-
-#include "CList.h"
-#include "winui.h"
-#include "editor.h"
-#include "process.h"
-
-#define LVOUT_NORMAL (STDOUT_USER)
-#define LVOUT_ERROR (STDOUT_USER+1)
-#define IDASK 21
-
-#define WORKSPACE 0
-#define PROJECT 1
-#define DIR 2
-
-#define PRJ_FILE 0
-#define SRC_FILE 1
-#define ADD_SRC_FILE 2
-
-#define FILES_TAB 0
-#define PROJECT_TAB 1
-
-#define REPORT_MAIN_TAB 0
-#define REPORT_LOG_TAB 1
-
-
-class CChildView : public CMDIChild
-{
- public:
- CChildView();
- virtual ~CChildView();
-
- bool modified;
-
- bool OnCreate(LPCREATESTRUCT lParam);
- bool OnSize(UINT wParam, int width, int height);
- BOOL OnClose(void);
- BOOL OnDestroy(void);
-
- BOOL OnCommand(WPARAM wParam, LPARAM lParam);
- BOOL OnNotify(int idCtrl, LPNMHDR notify);
- BOOL OnSetFocus(HWND hwndLoseFocus);
- BOOL OnActivate(HWND hwndChildDeact, HWND hwndChildAct);
-
- void CmdSave(void);
- void CmdSaveAs(void);
- CEditor Editor;
-
- protected:
-
- private:
-};
-
-class CFileList : public CList
-{
- public:
- CFileList();
- ~CFileList();
-
- protected:
- virtual int Compare(CNode *node1, CNode *node2);
-
- private:
-};
-
-class CProjectView : public CTreeView, public CFileList
-{
- public:
- CProjectView();
- ~CProjectView();
-
- CFileItem * NewFile(char * name);
- bool OpenFile(CFileItem * file);
- void RemoveFile(void);
- void RemoveModule(void);
- int DestroyFile(CFileItem * file, int decision=IDASK);
- int SaveAll(int decision);
- bool Close();
-
- void CreateRoot(char * projectName);
- void DestroyRoot(void);
- CFileItem * FindFile(char * szFileName);
- char * GetFileName(CFileItem * currentNode, bool flag);
-
- HWND Create(CWindow * pParent, CImageList * imgList);
- HTREEITEM CreateDirItem(HTREEITEM hParent, char * dir);
-
- protected:
-
- private:
- bool CreateSubDirItem(CFileItem * file);
- HTREEITEM FindDirItem(HTREEITEM hItem, char * dir);
- HTREEITEM hRoot;
-};
-
-class CFilesView : public CTreeView, public CFileList
-{
- public:
- CFilesView();
- ~CFilesView();
-
- bool OpenFile(CFileItem * file);
- void New (void);
- void CloseFile(CFileItem * file);
- int SaveAll(int decision);
-
- HWND Create(CWindow * pParent, CImageList * imgList);
-
- protected:
-
- private:
- HTREEITEM hRoot;
-};
-
-class CManager : public CTabCtrl
-{
- public:
- CManager();
- ~CManager();
-
- void OpenFileDialog(void);
- bool OpenFile(CFileItem * file);
- int SaveAll(int silent);
-
- bool NewProjectDialog(void);
- bool OpenProjectDialog(void);
- bool CloseProject(void);
- int SaveProjectFiles(int decision);
- void RemoveProjectFile(void);
- void RemoveProjectModule(void);
-
- void Create(CWindow * pParent);
- bool SetPosition(HWND hInsertAfter, int x, int y, int width, int height, UINT uFlags);
-
- BOOL OnNotify(int idCtrl, LPNMHDR notify);
- void Tv_OnDeleteItem(LPNMTREEVIEW notify);
- void Tv_OnSelchanged(LPNMTREEVIEW notify);
- void OnSelChanging(LPNMHDR notify);
- void OnSelChange(LPNMHDR notify);
-
- CImageList ImgList;
- CFilesView FilesView;
- CProjectView ProjectView;
-
- protected:
-
- private:
- void CreateImageList(void);
-
-};
-
-class CLogList : public CListView
-{
- public:
- CLogList();
- ~CLogList();
-
- void Create(CWindow * pParent);
- bool SetPosition(HWND hInsertAfter, int x, int y, int width, int height, UINT uFlags);
- bool Append(char * line, WORD outputFlag);
-
- protected:
-
- private:
- char szMsg[1024];
-};
-
-class CMainList : public CListView
-{
- public:
- CMainList();
- ~CMainList();
-
- void Create(CWindow * pParent);
- void Lv_OnDbClick(LPNMLISTVIEW lpnmlv);
- bool Append(char * line, WORD outputFlag);
-
- protected:
-
- private:
- char szLine[512];
- char szUnit[512];
- char szMsg[512];
-
- bool SplitErrorLine(char * line);
-};
-
-class CReport : public CTabCtrl
-{
- public:
- CReport();
- ~CReport();
-
- bool Append(char * line, WORD outputFlag);
- void Clear(void);
- void Create(CWindow * pParent);
- bool SetPosition(HWND hInsertAfter, int x, int y, int width, int height, UINT uFlags);
-
- BOOL OnNotify(int idCtrl, LPNMHDR notify);
- void OnSelChanging(LPNMHDR notify);
- void OnSelChange(LPNMHDR notify);
-
- CMainList MainList;
- CLogList LogList;
-
- protected:
-
- private:
- void CreateImageList(void);
-};
-
-class CFileDlg : public CFileDlgBase
-{
- public:
- CFileDlg();
- ~CFileDlg();
-
- bool Open(CWindow * pWindow, char * pszFileName, DWORD nMaxFile, int fileflag);
- bool Save(CWindow * pWindow, char * pszFileName, DWORD nMaxFile, int fileflag);
-
- protected:
-
- private:
-};
-
-class CGrepDlg : public CDlgBase
-{
- public:
- CGrepDlg();
- ~CGrepDlg();
-
- int Create(void);
- LRESULT CALLBACK CDlgProc(UINT Message, WPARAM wParam, LPARAM lParam);
- BOOL OnInitDialog(HWND hwndFocus, LPARAM lInitParam);
- BOOL OnCommand(WORD wNotifyCode, WORD wID, HWND hwndCtl);
- void FindInFiles(char * findWhat, char * fileFilter);
- char gDir[MAX_PATH];
- char findWhat[200];
-
- protected:
-
- private:
- HWND hFindWhat;
- HWND hgDir;
-};
-
-class CEnvDlg : public CDlgBase
-{
- public:
- CEnvDlg();
- virtual ~CEnvDlg();
-
- virtual LRESULT CALLBACK CDlgProc(UINT Message, WPARAM wParam, LPARAM lParam);
- BOOL OnInitDialog(HWND hwndFocus, LPARAM lInitParam);
- BOOL OnCommand(WORD wNotifyCode, WORD wID, HWND hwndCtl);
- void SetEnvText(void);
- bool bIsVisible;
- bool bModified;
-
- protected:
-
- private:
- HWND hApply;
- HWND hSetCcBin;
- HWND hCcBinDir;
- HWND hBrowseCc;
- HWND hSetCmdBin;
- HWND hCmdBinDir;
- HWND hBrowseCmd;
- HWND hAutoexec;
- HWND hEnvView;
-};
-
-class CPreferencesDlg : public CTabbedDlg
-{
- public:
- CPreferencesDlg();
- virtual ~CPreferencesDlg();
-
- int Create(void);
- BOOL EndDlg(int nResult);
- virtual LRESULT CALLBACK CDlgProc(UINT Message, WPARAM wParam, LPARAM lParam);
- BOOL OnInitDialog(HWND hwndFocus, LPARAM lInitParam);
- BOOL OnCommand(WORD wNotifyCode, WORD wID, HWND hwndCtl);
-
- protected:
-
- private:
- CEnvDlg EnvDlg;
-};
-
-class CWinApp : public CMDIBase
-{
- public:
- CWinApp();
- ~CWinApp();
-
- void FirstRunTest(void);
- bool ReadIniFile(char * iniFile);
- void SaveIniFile(FILE * file);
- bool WriteIniFile(void);
- bool CustomInit(void);
- bool Release(void);
- bool SetEnv(void);
-
- bool CreateUI(void);
- void CreateToolbar(void);
- void CreateSplitter(void);
- void CreateMDI(void);
- HWND CreateChild(char * caption, LPVOID lParam);
- void CreateStatusBar(void);
-
- void SendCaretPos(int caretPos);
-
- // Main window.
- LRESULT CALLBACK CMainWndProc(UINT Message, WPARAM wParam, LPARAM lParam);
-
- BOOL OnCreate(LPCREATESTRUCT lParam);
- BOOL OnPaint(HDC wParam);
- BOOL OnSize(UINT wParam, int width, int height);
- BOOL OnDestroy(void);
- BOOL OnClose (void);
- BOOL OnNotify(int idCtrl, LPNMHDR notify);
-
- BOOL OnLButtonDown(short xPos, short yPos, UINT fwKeys);
- BOOL OnMouseMove(short xPos, short yPos, UINT fwKeys);
- BOOL OnLButtonUp(short xPos, short yPos, UINT fwKeys);
- BOOL OnSetCursor(HWND hwnd, UINT nHittest, UINT wMouseMsg);
-
- BOOL OnCommand(WPARAM wParam, LPARAM lParam);
-
- // Child window.
- LRESULT CALLBACK CChildWndProc(CWindow * pWnd, UINT Message, WPARAM wParam, LPARAM lParam);
-
- HMODULE hmod;
- char iniFileName[MAX_PATH];
- CIniFile IniFile;
- CPreferencesDlg PreferencesDlg;
- CGrepDlg GrepDlg;
- CShellDlg ShellDlg;
- CFileDlg FileDlg;
- CProcess Process;
-
- CToolBar Toolbar;
- CSplitter MainSplitter;
- CSplitter ChildSplitter;
- CManager Manager;
- CReport Report;
- CStatusBar Sbar;
-
- /* Preferences */
- char openFilesDir[MAX_PATH];
- char projectDir[MAX_PATH];
- bool bSetCcEnv;
- bool bSetCmdEnv;
- bool bSetDefEnv;
- char szCcBinDir[MAX_PATH];
- char szCmdBinDir[MAX_PATH];
- char includeDir[MAX_PATH];
-
- protected:
-
- private:
- bool firstRun;
- // Child windows dimensions.
- int deltaY;
- int tbarHeight;
- int sbarHeight;
- int tvWidth;
- int lvHeight;
-
- int hSplitter;
- int vSplitter;
-};
-
-#endif
+++ /dev/null
-/********************************************************************
-* Module: process.cpp. This is part of Visual-MinGW.
-*
-* Purpose: Procedures to invoke MinGW compiler.
-*
-* Authors: Manu B.
-*
-* License: Visual-MinGW is covered by GNU General Public License,
-* Copyright (C) 2001 Manu B.
-* See license.htm for more details.
-*
-* Note: The following article from MSDN explanes how to handle Callback
-* procedures :
-* Calling All Members: Member Functions as Callbacks.
-* by Dale Rogerson.
-* Microsoft Developer Network Technology Group.
-* April 30, 1992.
-* http://msdn.microsoft.com/archive/default.asp
-*
-* Revisions:
-*
-********************************************************************/
-#include <windows.h>
-#include <stdio.h>
-#include <process.h>
-#include <time.h>
-#include <process.h>
-#include "process.h"
-#include "project.h"
-#include "main.h"
-#include "rsrc.h"
-
-extern CCriticalSection CriticalSection;
-extern CMessageBox MsgBox;
-char errmsg[128];
-
-// For winApp.isWinNT and winApp.Report.Append
-extern CWinApp winApp;
-
-/********************************************************************
-* Class: CCommandDlg.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CCommandDlg::CCommandDlg(){
- *cmdLine = '\0';
-}
-
-CCommandDlg::~CCommandDlg(){
-}
-
-HWND CCommandDlg::Create(void){
-return CreateParam(&winApp, IDD_COMMAND, 0);
-}
-
-LRESULT CALLBACK CCommandDlg::CDlgProc(UINT Message, WPARAM wParam, LPARAM lParam){
- switch(Message){
- case WM_INITDIALOG:
- return OnInitDialog((HWND) wParam, lParam);
-
- case WM_COMMAND:
- OnCommand(HIWORD(wParam), LOWORD(wParam), (HWND) lParam);
- break;
-
- case WM_CLOSE:
- EndDlg(0);
- break;
- }
-return FALSE;
-}
-
-BOOL CCommandDlg::OnInitDialog(HWND, LPARAM){
- hCmdLine = GetItem(IDC_CMDLINE);
-
- SetItemText(hCmdLine, cmdLine);
- // Show the dialog.
- Show();
-return TRUE;
-}
-
-BOOL CCommandDlg::OnCommand(WORD, WORD wID, HWND){
- switch (wID){
- case IDOK:
- GetItemText(hCmdLine, cmdLine, sizeof(cmdLine));
- //MsgBox.DisplayString(cmdLine);
- winApp.Process.CommandLine(cmdLine);
- return TRUE;
-
- case IDCANCEL:
- EndDlg(IDCANCEL);
- return FALSE;
- }
-return FALSE;
-}
-
-
-/********************************************************************
-* Class: CTask.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CTask::CTask(){
- *cmdLine = '\0';
- *szFileName = '\0';
- creationFlag = 0;
- outputFlag = 0;
-}
-
-CTask::~CTask(){
-}
-
-
-/********************************************************************
-* Class: CStack.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CStack::CStack(){
- retBuf = NULL;
-}
-
-CStack::~CStack(){
- DestroyList();
- if (retBuf)
- delete retBuf;
-}
-
-void CStack::DetachCurrent(void){
- // Empty list ?
- if (current != NULL){
- CNode * node = current;
-
- // Detach node from the list.
- if (node->next != NULL)
- node->next->prev = node->prev;
- if (node->prev != NULL)
- node->prev->next = node->next;
-
- // Set current node.
- if(node->next != NULL)
- current = node->next;
- else
- current = node->prev;
-
- if (current == NULL){
- // Now, the list is empty.
- first = last = NULL;
-
- }else if (first == node){
- // Detached node was first.
- first = current;
-
- }else if (last == node){
- // Detached node was last.
- last = current;
- }
- count--;
- }
-}
-
-/********************************************************************
-* Push/Pop/Flush.
-********************************************************************/
-int CStack::Push(CTask * newTask){
- InsertLast(newTask);
-return Length();
-}
-
-CTask * CStack::Pop(void){
- // Delete return buffer.
- if (retBuf){
- delete retBuf;
- retBuf = NULL;
- }
-
- // Get first node. (FIFO stack)
- retBuf = (CTask*) First();
-
- // The Stack is empty ?
- if (!retBuf)
- return NULL;
-
- // Detach current node from the list. Return a pointer to it.
- DetachCurrent();
-return retBuf;
-}
-
-void CStack::Flush(void){
- DestroyList();
- if (retBuf)
- delete retBuf;
- retBuf = NULL;
-}
-
-
-/********************************************************************
-* Class: CPipes.
-*
-* Purpose: Creates needed pipes, depending on creationFlag.
-* Like GNU Make does, we use an Handle array for our pipes.
-* Parent Process Side is stdXXX[0] and Child Process Side is stdXXX[1].
-*
-* Ex: PARENT ->[0]IN_PIPE[1]-> CHILD_IO ->[1]OUT_PIPE[0]-> PARENT
-* ->[1]ERR_PIPE[0]-> PARENT
-* Revisions:
-*
-********************************************************************/
-CPipes::CPipes(){
- hIn[0] = NULL;
- hIn[1] = NULL;
- hOut[0] = NULL;
- hOut[1] = NULL;
- hErr[0] = NULL;
- hErr[1] = NULL;
-}
-
-CPipes::~CPipes(){
-}
-
-bool CPipes::Create(WORD creationFlag, bool winNT){
- /* Create needed pipes according to creationFlag */
- /* Parent side of pipes is [0], child side is [1] */
- HANDLE hDup;
- SECURITY_ATTRIBUTES sa;
- sa.nLength = sizeof(SECURITY_ATTRIBUTES);
- sa.bInheritHandle = TRUE;
- sa.lpSecurityDescriptor = NULL;
-
- if (winNT){
- /* Create a security descriptor for Windows NT */
- SECURITY_DESCRIPTOR sd;
- if (!InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION)){
- sprintf(errmsg, "vm error: Process.cpp InitializeSecurityDescriptor(winNT) failed (e=%d)", (int)GetLastError());
- winApp.Report.Append(errmsg, LVOUT_ERROR);
- return false;
- }
- if (!SetSecurityDescriptorDacl(&sd, TRUE, NULL, FALSE)){
- sprintf(errmsg, "vm error: Process.cpp SetSecurityDescriptorDacl(winNT) failed (e=%d)", (int)GetLastError());
- winApp.Report.Append(errmsg, LVOUT_ERROR);
- return false;
- }
- sa.lpSecurityDescriptor = &sd;
- }
-
- /* Input pipe */
- if (!CreatePipe(&hIn[1], &hIn[0], &sa, 0)){
- sprintf(errmsg, "vm error: Process.cpp CreatePipe(In) failed (e=%d)", (int)GetLastError());
- winApp.Report.Append(errmsg, LVOUT_ERROR);
- return false;
- }
-
- if (!DuplicateHandle(GetCurrentProcess(),
- hIn[0],
- GetCurrentProcess(),
- &hDup,
- 0,
- FALSE,
- DUPLICATE_SAME_ACCESS)){
- sprintf(errmsg, "vm error: Process.cpp DuplicateHandle(In) failed (e=%d)", (int)GetLastError());
- winApp.Report.Append(errmsg, LVOUT_ERROR);
- return false;
- }
- CloseHandle(hIn[0]);
- hIn[0] = hDup;
-
- /* Output pipe */
- if (!CreatePipe(&hOut[0], &hOut[1], &sa, 0)){
- sprintf(errmsg, "vm error: Process.cpp CreatePipe(Out) failed (e=%d)", (int)GetLastError());
- winApp.Report.Append(errmsg, LVOUT_ERROR);
- return false;
- }
-
- if (!DuplicateHandle(GetCurrentProcess(),
- hOut[0],
- GetCurrentProcess(),
- &hDup,
- 0,
- FALSE,
- DUPLICATE_SAME_ACCESS)){
- sprintf(errmsg, "vm error: Process.cpp DuplicateHandle(Out) failed (e=%d)", (int)GetLastError());
- winApp.Report.Append(errmsg, LVOUT_ERROR);
- return false;
- }
- CloseHandle(hOut[0]);
- hOut[0] = hDup;
-
- /* Error pipe */
- if (!(creationFlag & OUTERR_PIPE) && (creationFlag & ERR_PIPE)){
- if (!CreatePipe(&hErr[0], &hErr[1], &sa, 0)){
- sprintf(errmsg, "vm error: Process.cpp CreatePipe(Err) failed (e=%d)", (int)GetLastError());
- winApp.Report.Append(errmsg, LVOUT_ERROR);
- return false;
- }
-
- if (!DuplicateHandle(GetCurrentProcess(),
- hErr[0],
- GetCurrentProcess(),
- &hDup,
- 0,
- FALSE,
- DUPLICATE_SAME_ACCESS)){
- sprintf(errmsg, "vm error: Process.cpp DuplicateHandle(Err) failed (e=%d)", (int)GetLastError());
- winApp.Report.Append(errmsg, LVOUT_ERROR);
- return false;
- }
- CloseHandle(hErr[0]);
- hErr[0] = hDup;
- }
-return true;
-}
-
-bool CPipes::CloseChildSide(void){
-return Close(1);
-}
-
-bool CPipes::CloseParentSide(void){
-return Close(0);
-}
-
-bool CPipes::Close(int side){
-
- if (side < 0 || side > 1)
- return false;
-
- if (hIn[side]){
- CloseHandle(hIn[side]);
- hIn[side] = NULL;
- }
-
- if (hOut[side]){
- CloseHandle(hOut[side]);
- hOut[side] = NULL;
- }
-
- if (hErr[side]){
- CloseHandle(hErr[side]);
- hErr[side] = NULL;
- }
-return true;
-}
-
-
-/********************************************************************
-* Class: CProcess.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CProcess::CProcess(){
- Running = false;
- exitCode = 0;
-
- pi.hProcess = 0;
- pi.hThread = 0;
- pi.dwProcessId = 0;
- pi.dwThreadId = 0;
-}
-
-CProcess::~CProcess(){
-}
-
-/********************************************************************
-* Manage Tasks.
-********************************************************************/
-bool CProcess::isRunning(void){
- if (Running){
- MsgBox.DisplayWarning("A process is already running !");
- return true;
- }
-return false;
-}
-
-CTask * CProcess::AddTask(char * cmdLine, WORD creationFlag, WORD outputFlag){
- CTask * newTask = new CTask;
-
- strcpy(newTask->cmdLine, cmdLine);
- newTask->creationFlag = creationFlag;
- newTask->outputFlag = outputFlag;
- Push(newTask);
-return newTask;
-}
-
-bool CProcess::CmdCat(char * cmdLine){
- CTask * task = (CTask*) GetCurrent();
- if (!task)
- return false;
-
- strcat(task->cmdLine, cmdLine);
-return true;
-}
-
-/********************************************************************
-* RunNext/Run/RunProcess.
-********************************************************************/
-void __cdecl call_thread(void * ptr){
- /* C++ adapter */
- ((CProcess *) ptr)->Run_Thread_Internal();
-}
-
-void CProcess::Run(void){
- // Check if something is already running before creating a thread.
- if (!Running){
- // Call Run_Thread_Internal()
- _beginthread(call_thread, 1024 * 1024, (void *) this);
- }
-}
-
-void CProcess::Run_Thread_Internal(void){
- exitCode = 0;
- /* Execute each task */
- for ( ; ; ){
- /* If previous task returns an error code, abort */
- if (exitCode != 0)
- break;
-
- // Get one task to execute.
- currTask = Pop();
-
- // Nothing to run.
- if (!currTask)
- break;
-
- /* Show command lines ?*/
- winApp.Report.Append(currTask->cmdLine, LVOUT_NORMAL);
-
- if (RunProcess(currTask)){
- winApp.Report.Append("Abort !", LVOUT_NORMAL);
- exitCode = 1;
- break;
- }
- }
-
- // Successful ?
- if (exitCode == 0)
- winApp.Report.Append("Performed successfully.", LVOUT_NORMAL);
-
- Flush();
- Running = false;
-return;
-}
-
-bool CProcess::RunProcess(CTask * task){
- if (!task)
- return false;
-
- bool usePipes = task->creationFlag;
- STARTUPINFO si = {sizeof(STARTUPINFO), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0};
-
- /* PROCESS_INFORMATION */
- pi.hProcess = 0;
- pi.hThread = 0;
- pi.dwProcessId = 0;
- pi.dwThreadId = 0;
-
- /* Process creation with pipes */
- if (usePipes){
- /* Create needed pipes according to creationFlag */
- if(!Pipes.Create(task->creationFlag, winApp.isWinNT)){
- Pipes.CloseChildSide();
- Pipes.CloseParentSide();
- return false;
- }
-
- si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
- si.wShowWindow = SW_HIDE;
- //si.wShowWindow = SW_SHOWNORMAL;
-
- /* Set pipe handles */
- if (Pipes.hIn[1] != NULL && Pipes.hOut[1] != NULL){
- si.hStdInput = Pipes.hIn[1];
- si.hStdOutput = Pipes.hOut[1];
- if (Pipes.hErr[1] == NULL)
- si.hStdError = Pipes.hOut[1];
- else
- si.hStdError = Pipes.hErr[1];
- }else{
- sprintf(errmsg, "vm error: Process.cpp Invalid pipe handle");
- winApp.Report.Append(errmsg, LVOUT_ERROR);
- Pipes.CloseChildSide();
- Pipes.CloseParentSide();
- return false;
- }
- }
-
- /* Create the child process */
- Running = CreateProcess(NULL,
- task->cmdLine,
- NULL,
- NULL,
- usePipes,
- 0,
- NULL,
- /*startDir[0] ? startDir :*/ NULL,
- &si,
- &pi);
-
- if (!Running){
- /* CreateProcess failed. Close handles and return */
- Pipes.CloseChildSide();
- Pipes.CloseParentSide();
- sprintf(errmsg, "vm error: Process.cpp CreateProcess failed (e=%d)", (int)GetLastError());
- winApp.Report.Append(errmsg, LVOUT_ERROR);
- return false;
- }else{
- /* Close child process handles */
- Pipes.CloseChildSide();
-
- if (!(usePipes & IN_PIPE)){
- /* Don't use the Input pipe */
- ::CloseHandle(Pipes.hIn[0]);
- Pipes.hIn[0] = NULL;
- }
- }
-
- //sprintf(errmsg, "vm debug: enter io loop");
- //winApp.Report.Append(errmsg, LVOUT_ERROR);
- if (usePipes){
- /* Initialize buffers */
- *outBuf = 0;
- chr = outBuf;
- bool bResult;
- for ( ; ; ){
- Sleep(100L);
-
- bResult = ReadStdOut(task, Pipes.hOut[0]);
- if (bResult != NO_ERROR)
- break;
-
- ::GetExitCodeProcess(pi.hProcess, &exitCode);
- if (exitCode != STILL_ACTIVE){
- break;
- }
- }
- }
- //sprintf(errmsg, "vm debug: exit io loop");
- //winApp.Report.Append(errmsg, LVOUT_ERROR);
-
- /* The child process is running. Perform I/O until terminated */
- ::WaitForSingleObject(pi.hProcess, INFINITE);
- /* Process terminated. Get exit code. */
- ::GetExitCodeProcess(pi.hProcess, &exitCode);
- if (exitCode == NO_ERROR){
- return NO_ERROR;
- }
- /* Close handles */
- Pipes.CloseParentSide();
- ::CloseHandle(pi.hProcess);
- if (pi.hThread){
- ::CloseHandle(pi.hThread);
- pi.hThread = NULL;
- }
-return exitCode;
-}
-
-/********************************************************************
-* Pipes input/output.
-********************************************************************/
-void CProcess::WriteStdIn(HANDLE hPipe, WORD){
- if (!hPipe)
- return;
-
-return;
-}
-
-void CProcess::ReadStdErr(HANDLE hPipe, WORD){
- if (!hPipe)
- return;
-
-return;
-}
-
-long CProcess::ReadStdOut(CTask * task, HANDLE hPipe){
- if (!task || !hPipe)
- return ERROR_INVALID_FUNCTION;
-
- /* Copy each char and output lines while there is something to read */
- for ( ; ; ){
- // Copy one char, return if nothing available.
- if (!ReadOneChar(hPipe, chr))
- break;
-
- // Ignore CR.
- if (*chr == '\r')
- continue;
-
- if (*chr != '\n'){
- chr++;
- /* @@TODO Overflow
- if ((chr - outBuf) >= max_len)
- realloc(buffer);*/
- // End of line
- }else if (*chr =='\n'){
- *chr = '\0';
- // Output error lines to List View.
- if (task->outputFlag == STDOUT_FILE_APPEND){
- WriteFileAppend(task->szFileName, outBuf, (chr - outBuf));
- }else{
- OutputLine(task->outputFlag, outBuf, (chr - outBuf));
- }
- *outBuf = '\0';
- chr = outBuf;
- }
- }
-return NO_ERROR;
-}
-
-int CProcess::ReadOneChar(HANDLE hPipe, char * chrin){
- DWORD bytesRead = 0;
- DWORD bytesAvail = 0;
-
- if (!PeekNamedPipe(hPipe, chrin, (DWORD)1, &bytesRead, &bytesAvail, NULL))
- return 0;
-
- if (bytesAvail == 0)
- return 0;
-
- if (!ReadFile(hPipe, chrin, (DWORD)1, &bytesRead, NULL))
- return 0;
-
-return bytesRead;
-}
-
-bool CProcess::CommandLine(char * cmdLine){
- if (!Pipes.hIn[0])
- return false;
- if (!Running || !currTask || !currTask->creationFlag)
- return false;
- int len = strlen(cmdLine);
- if (len){
- strcpy(inBuf, cmdLine);
- char * s = inBuf;
- s+=len;
- *s = '\r';
- s++;
- *s = '\n';
- s++;
- *s = '\0';
- }
- DWORD written;
-
- if (!WriteFile(Pipes.hIn[0], inBuf, strlen(inBuf), &written, 0))
- return false;
-
-return true;
-}
-
-bool CProcess::WriteFileAppend(char * fileName, char * line, int /*len*/){
- if (!*fileName)
- return false;
-
- /* Append one line of text to a file */
- FILE * file = fopen(fileName, "a");
- if (file){
- fprintf(file, line);
- fprintf(file, "\n");
- fclose(file);
- return true;
- }
-return false;
-}
-
-bool CProcess::OutputLine(WORD outputFlag, char * line, int /*len*/){
- /* Output error lines to List View */
-
- CriticalSection.Enter();
- winApp.Report.Append(line, outputFlag);
- CriticalSection.Leave();
-return true;
-}
-
+++ /dev/null
-/********************************************************************
-* Module: process.h. This is part of Visual-MinGW.
-*
-* License: Visual-MinGW is covered by GNU General Public License,
-* Copyright (C) 2001 Manu B.
-* See license.htm for more details.
-*
-********************************************************************/
-#ifndef PROCESS_H
-#define PROCESS_H
-#include "winui.h"
-#include "CList.h"
-
-
-class CCommandDlg : public CDlgBase
-{
- public:
- CCommandDlg();
- ~CCommandDlg();
-
- HWND Create(void);
- LRESULT CALLBACK CDlgProc(UINT Message, WPARAM wParam, LPARAM lParam);
- BOOL OnInitDialog(HWND hwndFocus, LPARAM lInitParam);
- BOOL OnCommand(WORD wNotifyCode, WORD wID, HWND hwndCtl);
- char cmdLine[1024];
-
- protected:
-
- private:
- HWND hCmdLine;
-};
-
-/********************************************************
- creationFlag truth table
- -----------------------------------
- 8 4 2 1
- ------------------
- NO_PIPE 0 0 0 0
- IN_PIPE 0 0 0 1
- OUT_PIPE 0 0 1 0
- ERR_PIPE 0 1 0 0
- OUTERR_PIPE 1 0 1 0
-
-*********************************************************/
-#define NO_PIPE 0x0000
-#define IN_PIPE 0x0001
-#define OUT_PIPE 0x0002
-#define ERR_PIPE 0x0004
-#define OUTERR_PIPE 0x000A
-
-#define STDOUT_NONE 0
-#define STDOUT_FILE_APPEND 1
-#define STDOUT_USER 2
-
-class CTask : public CNode
-{
- public:
- CTask();
- ~CTask();
-
- char cmdLine[MAX_PATH];
- char szFileName[MAX_PATH];
- WORD creationFlag;
- WORD outputFlag;
-
- protected:
-
- private:
-
-};
-
-class CStack : public CList
-{
- public:
- CStack();
- ~CStack();
-
- int Push(CTask * newTask);
- CTask * Pop(void);
- void Flush(void);
-
- protected:
-
- private:
- CTask * retBuf;
- void DetachCurrent(void);
-};
-
-class CPipes
-{
- public:
- CPipes();
- ~CPipes();
-
- HANDLE hIn[2];
- HANDLE hOut[2];
- HANDLE hErr[2];
-
- bool Create(WORD creationFlag, bool winNT);
- bool CloseChildSide(void);
- bool CloseParentSide(void);
- protected:
-
- private:
- bool Close(int side);
-};
-
-class CProcess : public CStack
-{
- public:
- CProcess();
- ~CProcess();
-
- bool CommandLine(char * cmdLine);
- bool isRunning(void);
- CTask * AddTask(char * cmdLine, WORD creationFlag, WORD outputFlag/* = STDOUT_NONE*/);
- bool CmdCat(char * cmdLine);
- void Run(void);
- void Run_Thread_Internal(void);
-
- CCommandDlg CommandDlg;
- protected:
-
- private:
- PROCESS_INFORMATION pi;
- bool Running;
- DWORD exitCode;
- CTask * currTask;
- CPipes Pipes;
- char * chr;
- char inBuf[1024];
- char outBuf[1024];
- char errBuf[1024];
-
- bool RunProcess(CTask * task);
-
- void WriteStdIn(HANDLE hPipe, WORD creationFlag);
- void ReadStdErr(HANDLE hPipe, WORD creationFlag);
- long ReadStdOut(CTask * task, HANDLE hPipe);
- int ReadOneChar(HANDLE hPipe, char * chrin);
-
- bool WriteFileAppend(char * fileName, char * line, int len=-1);
- bool OutputLine(WORD outputFlag, char * line, int len=-1);
-};
-
-#endif
+++ /dev/null
-/********************************************************************
-* Module: project.cpp. This is part of Visual-MinGW.
-*
-* Purpose: Procedures to manage a loaded project.
-*
-* Authors: Manu B.
-*
-* License: Visual-MinGW is covered by GNU General Public License,
-* Copyright (C) 2001 Manu B.
-* See license.htm for more details.
-*
-* Revisions:
-*
-********************************************************************/
-#include <windows.h>
-#include <stdio.h>
-
-#include "project.h"
-#include "rsrc.h"
-
-extern CMessageBox MsgBox;
-
-// For dialogs.
-extern CWinApp winApp;
-
-WORD AppendPath(char * dirBuffer, WORD offset, char * absolutePath);
-
-bool CheckFile(CFileItem * file){
- if (!file)
- return false;
-
- char * fileName = file->szFileName;
- char * s = fileName;
- char * dot = fileName;
- char * bkslash = fileName+1;
- // Valid relative path ?
- if (*dot == '.' && *bkslash == '\\'){
- s+=2;
- // Find backslashes & dots.
- while (*s != '\0'){
- if (*s == '\\'){
- bkslash = s;
- }else if (*s == '.'){
- dot = s;
- }
- s++;
- }
- if (*bkslash != '\0'){
- file->nFileOffset = (bkslash - fileName) +1;
- }else{
- file->nFileOffset = 0;
- return false;
- }
-
- if (dot != fileName)
- file->nFileExtension = (dot - fileName) +1;
- else
- file->nFileExtension = 0;
- return true;
- }
-return false;
-}
-
-WORD AppendPath(char * dirBuffer, WORD offset, char * absolutePath){
- WORD len = 0;
- if (absolutePath[0] == '.'){
- if (absolutePath[1] == '\\' && absolutePath[2] != '\0'){
- dirBuffer[offset-1] = '\\';
- strcpy(&dirBuffer[offset], &absolutePath[2]);
- len = strlen(&dirBuffer[offset]);
- len++;
- }
- }
-return len;
-}
-
-
-/********************************************************************
-* Class: COptionsDlg.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-COptionsDlg::COptionsDlg(){
- pProject = NULL;
- pMakefile = NULL;
-}
-
-COptionsDlg::~COptionsDlg(){
-}
-
-LRESULT CALLBACK COptionsDlg::CDlgProc(UINT Message, WPARAM wParam, LPARAM lParam){
- switch(Message){
- case WM_INITDIALOG:
- return OnInitDialog((HWND) wParam, lParam);
-
- case WM_NOTIFY:
- OnNotify((int) wParam, (LPNMHDR) lParam);
- break;
-
- case WM_COMMAND:
- OnCommand(HIWORD(wParam), LOWORD(wParam), (HWND) lParam);
- break;
-
- case WM_CLOSE:
- EndDlg(0);
- break;
- }
-return FALSE;
-}
-
-BOOL COptionsDlg::OnInitDialog(HWND, LPARAM lInitParam){
- // Set pointers.
- pProject = (CProject *) lInitParam;
- if (pProject == NULL)
- return TRUE;
-
- // Tab control handle and TCITEM.
- _hWndTab = ::GetDlgItem(_hWnd, IDC_OPTION_TABS);
- tcitem.mask = TCIF_TEXT | TCIF_PARAM;
-
- // Insert General tab.
- HWND hwndChild = GeneralDlg.Create(this, IDD_GENERAL_PANE, NULL, (long) pProject);
- tcitem.pszText = "General";
- tcitem.lParam = (long) &GeneralDlg;
- ::SendMessage(_hWndTab, TCM_INSERTITEM, 0,
- (LPARAM)&tcitem);
- SetChildPosition(hwndChild);
-
- // Insert Compiler tab item.
- CompilerDlg.Create(this, IDD_COMPILER, &Pos, (long) pProject);
- tcitem.pszText = "Compiler";
- tcitem.lParam = (long) &CompilerDlg;
- ::SendMessage(_hWndTab, TCM_INSERTITEM, 1,
- (LPARAM)&tcitem);
-
- // Insert Linker tab.
- LinkerDlg.Create(this, IDD_LINKER, &Pos, (long) pProject);
- tcitem.pszText = "Linker";
- tcitem.lParam = (long) &LinkerDlg;
- ::SendMessage(_hWndTab, TCM_INSERTITEM, 2,
- (LPARAM)&tcitem);
-
- // Insert Archives tab.
- ZipDlg.Create(this, IDD_ZIP, &Pos, (long) pProject);
- tcitem.pszText = "Archives";
- tcitem.lParam = (long) &ZipDlg;
- ::SendMessage(_hWndTab, TCM_INSERTITEM, 3,
- (LPARAM)&tcitem);
-
- // Show the dialog and default pane.
- Show();
- GeneralDlg.Show();
- GeneralDlg.SetFocus();
-return TRUE;
-}
-
-BOOL COptionsDlg::OnCommand(WORD wNotifyCode, WORD wID, HWND hwndCtl){
- switch (wID){
- case IDOK:
- GeneralDlg.OnCommand(wNotifyCode, wID, hwndCtl);
- CompilerDlg.OnCommand(wNotifyCode, wID, hwndCtl);
- LinkerDlg.OnCommand(wNotifyCode, wID, hwndCtl);
- ZipDlg.OnCommand(wNotifyCode, wID, hwndCtl);
- pProject->buildMakefile = true;
- pProject->modified = true;
- EndDlg(IDOK);
- return TRUE;
-
- case IDCANCEL:
- EndDlg(IDCANCEL);
- break;
- }
-return 0;
-}
-
-BOOL COptionsDlg::EndDlg(int nResult){
- GeneralDlg.EndDlg(0);
- CompilerDlg.EndDlg(0);
- LinkerDlg.EndDlg(0);
- ZipDlg.EndDlg(0);
- if (_hWnd){
- BOOL result = ::EndDialog(_hWnd, nResult);
- _hWnd = 0;
- return result;
- }
-return false;
-}
-
-
-/********************************************************************
-* Class: CGeneralDlg.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CGeneralDlg::CGeneralDlg(){
- pProject = NULL;
- pMakefile = NULL;
-}
-
-CGeneralDlg::~CGeneralDlg(){
-}
-
-LRESULT CALLBACK CGeneralDlg::CDlgProc(UINT Message, WPARAM wParam, LPARAM lParam){
- switch(Message){
- case WM_INITDIALOG:
- return OnInitDialog((HWND) wParam, lParam);
-
- case WM_COMMAND:
- OnCommand(HIWORD(wParam), LOWORD(wParam), (HWND) lParam);
- break;
-
- case WM_CLOSE:
- EndDlg(0);
- break;
- }
-return FALSE;
-}
-
-BOOL CGeneralDlg::OnInitDialog(HWND, LPARAM lInitParam){
- /* Set pointers */
- pProject = (CProject *) lInitParam;
- if (pProject == NULL || &pProject->Makefile == NULL)
- return TRUE;
- pMakefile = &pProject->Makefile;
-
- /* Get control handles */
- hStatLib = GetItem(IDC_STATLIB);
- hDll = GetItem(IDC_DLL);
- hConsole = GetItem(IDC_CONSOLE);
- hGuiExe = GetItem(IDC_GUIEXE);
- hDbgSym = GetItem(IDC_DBGSYM);
- hLangC = GetItem(IDC_LANGC);
- hLangCpp = GetItem(IDC_LANGCPP);
- hMkfName = GetItem(IDC_MKF_NAME);
- hMkfDir = GetItem(IDC_MKF_DIR);
- hUserMkf = GetItem(IDC_USER_MKF);
- hTgtName = GetItem(IDC_TGT_NAME);
- hTgtDir = GetItem(IDC_TGT_DIR);
-
- /* Set buttons state */
- switch(pMakefile->buildWhat){
- case BUILD_STATLIB:
- ::SendMessage(hStatLib, BM_SETCHECK, BST_CHECKED, 0);
- break;
- case BUILD_DLL:
- ::SendMessage(hDll, BM_SETCHECK, BST_CHECKED, 0);
- break;
- case BUILD_EXE:
- ::SendMessage(hConsole, BM_SETCHECK, BST_CHECKED, 0);
- break;
- case BUILD_GUIEXE:
- ::SendMessage(hGuiExe, BM_SETCHECK, BST_CHECKED, 0);
- break;
- }
- if (pMakefile->debug)
- ::SendMessage(hDbgSym, BM_SETCHECK, BST_CHECKED, 0);
-
- if (pMakefile->lang == LANGCPP)
- ::SendMessage(hLangCpp, BM_SETCHECK, BST_CHECKED, 0);
- else
- ::SendMessage(hLangC, BM_SETCHECK, BST_CHECKED, 0);
-
- /* Set text */
- char name[64];
- if (pMakefile->nFileOffset){
- strcpy(name, &pMakefile->szFileName[pMakefile->nFileOffset]);
- }else{
- strcpy(name, "noname");
- }
-
- SetItemText(hMkfName, name);
- SetItemText(hMkfDir, pMakefile->mkfDir);
- SetItemText(hTgtName, pMakefile->target);
- SetItemText(hTgtDir, pMakefile->tgtDir);
-return TRUE;
-}
-
-BOOL CGeneralDlg::OnCommand(WORD, WORD wID, HWND){
- switch (wID){
- case IDOK:{
- /* Get text */
- char name[64];
- GetItemText(hMkfName, name, 64);
- GetItemText(hMkfDir, pMakefile->mkfDir, MAX_PATH);
- GetItemText(hTgtName, pMakefile->target, 64);
- GetItemText(hTgtDir, pMakefile->tgtDir, MAX_PATH);
-
- pMakefile->GetFullPath(pMakefile->szFileName, pProject->nFileOffset, name);
- //@@TODO check if directories exist.
-
- /* Get buttons state */
- char * pExt = strrchr(pMakefile->target, '.');
- if (!pExt){
- int len = strlen(pMakefile->target);
- if (!len){
- strcpy(pMakefile->target, "noname");
- len = strlen(pMakefile->target);
- }
- pExt = pMakefile->target + len;
- }
- if (BST_CHECKED == ::SendMessage(hStatLib, BM_GETCHECK, 0, 0)){
- pMakefile->buildWhat = BUILD_STATLIB;
- strcpy(pExt, ".a");
- }else if (BST_CHECKED == ::SendMessage(hDll, BM_GETCHECK, 0, 0)){
- pMakefile->buildWhat = BUILD_DLL;
- strcpy(pExt, ".dll");
- }else if (BST_CHECKED == ::SendMessage(hConsole, BM_GETCHECK, 0, 0)){
- pMakefile->buildWhat = BUILD_EXE;
- strcpy(pExt, ".exe");
- }else if (BST_CHECKED == ::SendMessage(hGuiExe, BM_GETCHECK, 0, 0)){
- pMakefile->buildWhat = BUILD_GUIEXE;
- strcpy(pExt, ".exe");
- }
- pMakefile->debug =
- (BST_CHECKED==::SendMessage(hDbgSym, BM_GETCHECK, 0, 0));
-
- if (BST_CHECKED == ::SendMessage(hLangCpp, BM_GETCHECK, 0, 0)){
- pMakefile->lang = LANGCPP;
- strcpy(pMakefile->cc, "g++");
- }else{
- pMakefile->lang = LANGC;
- strcpy(pMakefile->cc, "gcc");
- }
- }
- return TRUE;
-
- case IDCANCEL:
- return FALSE;
- }
-return FALSE;
-}
-
-
-/********************************************************************
-* Class: CCompilerDlg.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CCompilerDlg::CCompilerDlg(){
- pProject = NULL;
- pMakefile = NULL;
-}
-
-CCompilerDlg::~CCompilerDlg(){
-}
-
-LRESULT CALLBACK CCompilerDlg::CDlgProc(UINT Message, WPARAM wParam, LPARAM lParam){
- switch(Message){
- case WM_INITDIALOG:
- return OnInitDialog((HWND) wParam, lParam);
-
- case WM_COMMAND:
- OnCommand(HIWORD(wParam), LOWORD(wParam), (HWND) lParam);
- break;
-
- case WM_CLOSE:
- EndDlg(0);
- break;
- }
-return FALSE;
-}
-
-BOOL CCompilerDlg::OnInitDialog(HWND, LPARAM lInitParam){
- // Set pointers.
- pProject = (CProject *) lInitParam;
- if (pProject == NULL || &pProject->Makefile == NULL)
- return TRUE;
- pMakefile = &pProject->Makefile;
-
- hCppFlags = GetItem(IDC_CPPFLAGS);
- hWarning = GetItem(IDC_WARNING);
- hOptimiz = GetItem(IDC_OPTIMIZ);
- hCFlags = GetItem(IDC_CFLAGS);
- hIncDirs = GetItem(IDC_INCDIRS);
-
- SetItemText(hCppFlags, pMakefile->cppFlags);
- SetItemText(hWarning, pMakefile->warning);
- SetItemText(hOptimiz, pMakefile->optimize);
- SetItemText(hCFlags, pMakefile->cFlags);
- SetItemText(hIncDirs, pMakefile->incDirs);
-return TRUE;
-}
-
-BOOL CCompilerDlg::OnCommand(WORD, WORD wID, HWND){
- switch (wID){
- case IDOK:
- GetItemText(hCppFlags, pMakefile->cppFlags, 256);
- GetItemText(hWarning, pMakefile->warning, 64);
- GetItemText(hOptimiz, pMakefile->optimize, 64);
- GetItemText(hCFlags, pMakefile->cFlags, 64);
- GetItemText(hIncDirs, pMakefile->incDirs, 256);
- return TRUE;
-
- case IDCANCEL:
- return FALSE;
- }
-return FALSE;
-}
-
-
-/********************************************************************
-* Class: CLinkerDlg.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CLinkerDlg::CLinkerDlg(){
- pProject = NULL;
- pMakefile = NULL;
-}
-
-CLinkerDlg::~CLinkerDlg(){
-}
-
-LRESULT CALLBACK CLinkerDlg::CDlgProc(UINT Message, WPARAM wParam, LPARAM lParam){
- switch(Message){
- case WM_INITDIALOG:
- return OnInitDialog((HWND) wParam, lParam);
-
- case WM_COMMAND:
- OnCommand(HIWORD(wParam), LOWORD(wParam), (HWND) lParam);
- break;
-
- case WM_CLOSE:
- EndDlg(0);
- break;
- }
-return FALSE;
-}
-
-BOOL CLinkerDlg::OnInitDialog(HWND, LPARAM lInitParam){
- // Set pointers.
- pProject = (CProject *) lInitParam;
- if (pProject == NULL || &pProject->Makefile == NULL)
- return TRUE;
- pMakefile = &pProject->Makefile;
-
- hLdStrip = GetItem(IDC_LDSTRIP);
- hLdOpts = GetItem(IDC_LDOPTS);
- hLdLibs = GetItem(IDC_LDLIBS);
- hLibsDirs = GetItem(IDC_LIBDIRS);
-
- SetItemText(hLdStrip, pMakefile->ldStrip);
- SetItemText(hLdOpts, pMakefile->ldOpts);
- SetItemText(hLdLibs, pMakefile->ldLibs);
- SetItemText(hLibsDirs, pMakefile->libDirs);
-return TRUE;
-}
-
-BOOL CLinkerDlg::OnCommand(WORD, WORD wID, HWND){
- switch (wID){
- case IDOK:
- GetItemText(hLdStrip, pMakefile->ldStrip, 32);
- GetItemText(hLdOpts, pMakefile->ldOpts, 64);
- GetItemText(hLdLibs, pMakefile->ldLibs, 64);
- GetItemText(hLibsDirs, pMakefile->libDirs, 256);
- return TRUE;
-
- case IDCANCEL:
- return FALSE;
- }
-return FALSE;
-}
-
-
-/********************************************************************
-* Class: CZipDlg.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CZipDlg::CZipDlg(){
- pProject = NULL;
- pMakefile = NULL;
-}
-
-CZipDlg::~CZipDlg(){
-}
-
-LRESULT CALLBACK CZipDlg::CDlgProc(UINT Message, WPARAM wParam, LPARAM lParam){
- switch(Message){
- case WM_INITDIALOG:
- return OnInitDialog((HWND) wParam, lParam);
-
- case WM_COMMAND:
- OnCommand(HIWORD(wParam), LOWORD(wParam), (HWND) lParam);
- break;
-
- case WM_CLOSE:
- EndDlg(0);
- break;
- }
-return FALSE;
-}
-
-BOOL CZipDlg::OnInitDialog(HWND, LPARAM lInitParam){
- // Set pointers.
- pProject = (CProject *) lInitParam;
- if (pProject == NULL || &pProject->Makefile == NULL)
- return TRUE;
- pMakefile = &pProject->Makefile;
-
- hZipDir = GetItem(IDC_ZIP_DIR);
- hZipFlags = GetItem(IDC_ZIPFLAGS);
- SetItemText(hZipDir, pProject->zipDir);
- SetItemText(hZipFlags, pProject->zipFlags);
-return TRUE;
-}
-
-BOOL CZipDlg::OnCommand(WORD, WORD wID, HWND){
- switch (wID){
- case IDOK:
- GetItemText(hZipDir, pProject->zipDir, MAX_PATH);
- GetItemText(hZipFlags, pProject->zipFlags, 256);
- return TRUE;
-
- case IDCANCEL:
- return FALSE;
- }
-return FALSE;
-}
-
-
-/********************************************************************
-* Class: CNewModuleDlg.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CNewModuleDlg::CNewModuleDlg(){
- pProject = NULL;
-}
-
-CNewModuleDlg::~CNewModuleDlg(){
-}
-
-LRESULT CALLBACK CNewModuleDlg::CDlgProc(UINT Message, WPARAM wParam, LPARAM lParam){
-
- char fileName[64];
- bool createHeader = true;
- HWND wCreateHeader = GetItem(IDC_HEADER);
-
- switch(Message){
- case WM_INITDIALOG:
- pProject = (CProject *) lParam;
- if (createHeader)
- ::SendMessage(wCreateHeader, BM_SETCHECK, BST_CHECKED, 0);
- strcpy(fileName, "new.cpp");
- ::SetDlgItemText(_hWnd, 301, fileName);
- return TRUE;
-
- case WM_COMMAND:
- if (LOWORD(wParam) == IDCANCEL){
- fileName[0] = 0;
- EndDlg(IDCANCEL);
- return FALSE;
- }else if(LOWORD(wParam) == IDOK){
- ::GetDlgItemText(_hWnd, 301, fileName, 64);
- createHeader = BST_CHECKED ==
- ::SendMessage(wCreateHeader, BM_GETCHECK, 0, 0);
- pProject->NewModule(fileName, createHeader);
- EndDlg(IDCANCEL);
- return TRUE;
- }
- break;
-
- case WM_CLOSE:
- EndDlg(0);
- break;
- }
-return FALSE;
-}
-
-
-/********************************************************************
-* Class: CProject.
-*
-* Purpose: Project management.
-*
-* Revisions:
-*
-********************************************************************/
-//@@TODO close project Dlg's before closing Project.
-CProject::CProject(){
- prjVer = 40;
-}
-
-CProject::~CProject(){
-}
-
-void CProject::Reset(){
- szFileName[MAX_PATH - 1] = '\0'; // security.
- szFileName[0] = '\0';
- szDirBuffer[0] = '\0';
- nFileOffset = 0;
- nFileExtension = 0;
-
- strcpy (zipDir, ".");
- strcpy (zipFlags, "*.*");
- numFiles = 0;
- loaded = false;
- modified = false;
- buildMakefile = true;
-
- compilerName[0] = '\0';
-
- Makefile.Init();
-}
-
-bool CProject::NoProject(void){
- if (!loaded){
- MsgBox.DisplayWarning("No project loaded");
- // Or directly show open project dlg.
- return true;
- }
-return false;
-}
-
-int CProject::CloseDecision(void){
- if (loaded){
- return MsgBox.Ask("Close current project ?", false);
- }
-return IDNO;
-}
-
-bool CProject::SwitchCurrentDir(void){
- // Switch to Project Directory
- szDirBuffer[nFileOffset-1] = '\0';
-return ::SetCurrentDirectory(szDirBuffer);
-}
-
-bool CProject::RelativeToAbsolute(char * relativePath){
- if (*szDirBuffer && nFileOffset){
- if (relativePath[0] == '.' && relativePath[1] == '\\'
- && relativePath[2] != '\0'){
- szDirBuffer[nFileOffset-1] = '\\';
- strcpy(&szDirBuffer[nFileOffset], &relativePath[2]);
- return true;
- }
- }
-return false;
-}
-
-
-/********************************************************************
-* New Project.
-********************************************************************/
-bool CProject::New(char * fileName, WORD fileOffset){
- // Load default values.
- Reset();
-
- // Copy project file's directory.
- strcpy(szFileName, fileName);
- nFileOffset = fileOffset;
-
- strncpy(szDirBuffer, szFileName, (nFileOffset - 1));
- szDirBuffer[nFileOffset-1] = '\0';
- strcpy(winApp.projectDir, szDirBuffer);
-
- // Makefile: Get target name.
- nFileExtension = winApp.FileDlg.GetFileExtension();
- strcpy(Makefile.target, &szFileName[nFileOffset]);
- char * pExt = strrchr(Makefile.target, '.');
- if (pExt){
- *pExt='\0';
- }
- loaded = true;
-
- AddFiles();
-
- Makefile.GetFullPath(szFileName, nFileOffset, "makefile");
-
- buildMakefile = true;
- OptionsDlg();
- SavePrjFile(IDYES);
-return true;
-}
-
-/********************************************************************
-* Open Project.
-********************************************************************/
-bool CProject::Open(char * fileName, WORD fileOffset){
- // Initialize project tree view.
- Reset();
-
- // Copy project file's directory.
- strcpy(szFileName, fileName);
- nFileOffset = fileOffset;
-
- strncpy(szDirBuffer, szFileName, (nFileOffset - 1));
- szDirBuffer[nFileOffset-1] = '\0';
- strcpy(winApp.projectDir, szDirBuffer);
-
- // Load project file in a buffer.
- if (!PrjFile.Load(szFileName)){
- MsgBox.DisplayFatal("Can't load project file !");
- //@@ should close inifile ?
- return false;
- }
-
- char name[64];
- *name = '\0';
- // [Project] section
- int signature = PrjFile.GetInt( "Signature", "Project" );
- if (signature != prjVer){
- MsgBox.DisplayFatal("Bad signature in the project file !");
- return false;
- }
-
- numFiles = PrjFile.GetInt( "NumFiles" );
- PrjFile.GetString(compilerName, "Compiler" );
- buildMakefile = PrjFile.GetInt( "BuildMakefile" );
-
- // [Archives] section
- PrjFile.GetString(zipDir, "Directory", "Archives" );
- PrjFile.GetString(zipFlags, "Flags");
-
- // [Makefile] section
- PrjFile.GetString(Makefile.make, "Make", "Makefile" );
- PrjFile.GetString(Makefile.cc, "CC" );
- PrjFile.GetString(Makefile.wres, "WRES" );
- PrjFile.GetString(Makefile.test, "TEST" );
- PrjFile.GetString(name, "Makefile" );
- PrjFile.GetString(Makefile.mkfDir, "MakefileDir");
- PrjFile.GetString(Makefile.target, "Target" );
- PrjFile.GetString(Makefile.tgtDir, "TargetDir" );
- Makefile.buildWhat = PrjFile.GetInt( "Build" );
- Makefile.debug = PrjFile.GetInt( "Debug" );
- Makefile.lang = PrjFile.GetInt( "Lang" );
- PrjFile.GetString(Makefile.cppFlags, "CppFlags" );
- PrjFile.GetString(Makefile.warning, "CcWarning");
- PrjFile.GetString(Makefile.optimize, "CcOptimize");
- PrjFile.GetString(Makefile.cFlags, "CcFlags" );
- PrjFile.GetString(Makefile.incDirs, "IncDirs" );
- PrjFile.GetString(Makefile.ldStrip, "LdStrip" );
- PrjFile.GetString(Makefile.ldOpts, "LdOptions" );
- PrjFile.GetString(Makefile.ldLibs, "LdLibraries");
- PrjFile.GetString(Makefile.libDirs, "LdLibDirs" );
-
- Makefile.GetFullPath(szFileName, nFileOffset, name);
-
- if (numFiles){
- CFileItem * srcFile;
- // [FileXX] section
- char fileNumber [8];
- char fileSection [16];
-
- for (int n=1; n<=numFiles; n++){
- itoa(n, fileNumber, 10);
- strcpy(fileSection, "File");
- strcat(fileSection, fileNumber);
-
- // SrcFile
- srcFile = new CFileItem;
- srcFile->isInProject = true;
- PrjFile.GetString(srcFile->szFileName, "Name", fileSection);
- CheckFile(srcFile);
- ::GetFileType(srcFile);
- srcFile->show = PrjFile.GetInt( "Show" );
-
- if(!winApp.Manager.OpenFile(srcFile)){
- delete srcFile;
- return false;
- }
- }
- }
- loaded = true;
-return true;
-}
-
-int CProject::SavePrjFile(int decision){
- if (!loaded || !modified)
- return decision;
- if (decision == IDNO || decision == IDCANCEL)
- return decision;
-
- /* Ask ? */
- if (decision == IDASK){
- decision = MsgBox.AskToSave(true); // Cancel button.
- if (decision != IDYES)
- return decision; // IDNO or IDCANCEL.
- }
-
- CProjectView * pProjectView = &winApp.Manager.ProjectView;
- FILE * file;
- CFileItem * srcFile;
- int count = 0;
-
- numFiles = pProjectView->Length();
-
- file = fopen(szFileName, "w");
- if (!file){
- MsgBox.DisplayFatal("Can't save project file !");
- return decision;
- }
-
- // [Project]
- fprintf (file, "[Project]\nSignature = %d" , prjVer );
- fprintf (file, "\nNumFiles = %d" , numFiles );
- fprintf (file, "\nCompiler = %s" , compilerName );
- fprintf (file, "\nBuildMakefile = %d" , buildMakefile );
-
- // [Archives]
- fprintf (file, "\n\n[Archives]\nDirectory = %s" , zipDir );
- fprintf (file, "\nFlags = %s" , zipFlags );
-
- // [Makefile]
- fprintf (file, "\n\n[Makefile]\nMAKE = %s" , Makefile.make );
- fprintf (file, "\nCC = %s" , Makefile.cc );
- fprintf (file, "\nWRES = %s" , Makefile.wres );
- fprintf (file, "\nTEST = %s" , Makefile.test );
- fprintf (file, "\nMakefile = %s" , &Makefile.szFileName[Makefile.nFileOffset]);
- fprintf (file, "\nMakefileDir = %s" , Makefile.mkfDir );
- fprintf (file, "\nTarget = %s" , Makefile.target );
- fprintf (file, "\nTargetDir = %s" , Makefile.tgtDir );
- fprintf (file, "\nBuild = %d" , Makefile.buildWhat );
- fprintf (file, "\nDebug = %d" , Makefile.debug );
- fprintf (file, "\nLang = %d" , Makefile.lang );
- fprintf (file, "\nCppFlags = %s" , Makefile.cppFlags );
- fprintf (file, "\nCcWarning = %s" , Makefile.warning );
- fprintf (file, "\nCcOptimize = %s" , Makefile.optimize );
- fprintf (file, "\nCcFlags = %s" , Makefile.cFlags );
- fprintf (file, "\nIncDirs = %s" , Makefile.incDirs );
- fprintf (file, "\nLdStrip = %s" , Makefile.ldStrip );
- fprintf (file, "\nLdOptions = %s" , Makefile.ldOpts );
- fprintf (file, "\nLdLibraries = %s" , Makefile.ldLibs );
- fprintf (file, "\nLdLibDirs = %s" , Makefile.libDirs );
-
- /* [Filexx] */
- srcFile = (CFileItem *) pProjectView->First();
- while (srcFile){
- count++;
- fprintf (file, "\n\n[File%d" , count );
- fprintf (file, "]\nName = %s" , srcFile->szFileName );
- fprintf (file, "\nShow = %d" , 0 );
- srcFile = (CFileItem *) pProjectView->Next();
- }
- fprintf (file, "\n");
- fclose(file);
- modified = false;
-return decision;
-}
-
-bool CProject::NewModule(char * name, bool createHeader){
- if (NoProject())
- return false;
-
- SwitchCurrentDir();
-
- CFileItem * srcFile = winApp.Manager.ProjectView.NewFile(name);
- if (!srcFile){
- MsgBox.DisplayWarning("Can't create file : %s", name);
- return false;
- }
- if (createHeader && srcFile->type != H_FILE){
- char header[64];
- strcpy(header, name);
- char ext[] = "h";
- ChangeFileExt(header, ext);
-
- if (!winApp.Manager.ProjectView.NewFile(header)){
- MsgBox.DisplayWarning("Can't create file : %s", header);
- return false;
- }
- }
-return true;
-}
-
-bool CProject::AddFiles(void){
- if (NoProject())
- return false;
-
- CFileItem * srcFile;
- char srcFiles[2048];
- srcFiles [0] = 0;
- WORD fileOffset;
-
- // Show Open dialog.
- if (!winApp.FileDlg.Open(&winApp, srcFiles, 2048, ADD_SRC_FILE))
- return false; // canceled by user
-
- // Check if srcFiles path includes projectDir.
- int n = 0;
- int maxlen = nFileOffset - 1;
- while (n<maxlen){
- // @@ shouldn't be case sensitive.
- if (srcFiles[n] != szFileName[n])
- break;
- n++;
- }
-
- if (srcFiles[n] == '\\' || srcFiles[n] == '\0'){
- // We are in the project, copy directory name.
- n++;
- char relativePath[MAX_PATH];
- relativePath[0] = '.';
- relativePath[1] = '\\';
- int nn = 2;
-
- fileOffset = winApp.FileDlg.GetFileOffset();
- maxlen = fileOffset - 1;
- while (n<maxlen){
- relativePath[nn] = srcFiles[n];
- n++;
- nn++;
- }
- if (nn > 2){
- relativePath[nn] = '\\';
- nn++;
- }
- relativePath[nn] = '\0';
-
- // Append each file name.
- fileOffset = winApp.FileDlg.GetFileOffset();
-
- while (fileOffset){
- // Try to add each file to the project.
- srcFile = new CFileItem;
- strcpy(srcFile->szFileName, relativePath);
-
- strcat(srcFile->szFileName, &srcFiles[fileOffset]);
-
- CheckFile(srcFile);
- ::GetFileType(srcFile);
- srcFile->show = 0;
- srcFile->isInProject = true;
-
- if(!winApp.Manager.ProjectView.OpenFile(srcFile)){
- delete srcFile;
- return false;
- }
-
- fileOffset = winApp.FileDlg.GetNextFileOffset();
- }
- modified = true;
- buildMakefile = true;
- return true;
- }
- MsgBox.DisplayString("Out of the project");
-return false;
-}
-
-/********************************************************************
-* Dialogs.
-********************************************************************/
-bool CProject::OptionsDlg(void){
-/**/ if (NoProject())
- return false;
-
- _OptionsDlg.CreateModal(&winApp, IDD_OPTION, (LPARAM) this);
-return true;
-}
-
-bool CProject::NewModuleDlg(void){
- if (NoProject())
- return false;
-
- _NewModuleDlg.CreateModal(&winApp, IDD_NEW_MODULE, (LPARAM) this);
-return true;
-}
-
-/********************************************************************
-* Project Commands.
-********************************************************************/
-void CProject::ZipSrcs(void){
- if (NoProject() || winApp.Process.isRunning())
- return;
-
- // Switch to Project Directory
- SwitchCurrentDir();
-
- winApp.Report.Clear();
-
- char fileName[64];
- char date[16];
- date[0] = 0;
-
- // Archive name = zipDir\month+day+year+src.zip
- GetDateFormat(LOCALE_USER_DEFAULT, 0, NULL, "MMddyyyy",
- date, 16);
-
- if (*zipDir == '\0')
- strcpy (zipDir, ".");
- strcpy (fileName, zipDir);
- strcat (fileName, "\\");
- strcat (fileName, date);
- strcat (fileName, "src");
- strcat (fileName, ".zip");
-
- char msgBuf[128];
- sprintf(msgBuf, "Create archive > %s", fileName);
- winApp.Report.Append(msgBuf, LVOUT_NORMAL);
-
- // Put the command line and the run flag in the command stack.
- winApp.Process.AddTask(
- "zip ",
- OUTERR_PIPE,
- LVOUT_NORMAL);
-
- winApp.Process.CmdCat(fileName);
- if (*zipFlags){
- winApp.Process.CmdCat(" ");
- winApp.Process.CmdCat(zipFlags);
- }
-
- winApp.Process.Run();
-}
-
-void CProject::Explore(HWND hwnd){
- if (NoProject())
- return;
-
- if(ShellExecute(hwnd, "explore", szDirBuffer, NULL, NULL, SW_SHOWMAXIMIZED)
- < (HINSTANCE) 32){
- MsgBox.DisplayString("Can't launch Explorer");
- return;
- }
-}
-
-/********************************************************************
-* Compiler Commands.
-********************************************************************/
-void CProject::Build(void){
- if (NoProject() || winApp.Process.isRunning())
- return;
-
- winApp.Report.Clear();
- winApp.Report.Append("Invoking compiler...", LVOUT_NORMAL);
-
- // Save modified files
- winApp.Manager.ProjectView.SaveAll(IDYES); // Silent.
-
- // Switch to Makefile Directory
- Makefile.SwitchCurrentDir();
-
- /* Build makefile ? */
- if (buildMakefile){
- winApp.Report.Append("Building makefile...", LVOUT_NORMAL);
-
- // Fill buffers and initialize a new process.
- Makefile.Build(&winApp.Manager.ProjectView, &winApp.Process);
- buildMakefile = false;
- modified = true;
- }
-
- // Put the command line and the run flag in the command stack.
- winApp.Process.AddTask(
- Makefile.make,
- OUTERR_PIPE,
- LVOUT_ERROR);
-
- winApp.Process.CmdCat(" -f ");
- winApp.Process.CmdCat(&Makefile.szFileName[Makefile.nFileOffset]);
- if (Makefile.debug)
- winApp.Process.CmdCat(" debug");
-
- winApp.Process.Run();
-}
-
-void CProject::RebuildAll(void){
- if (NoProject() || winApp.Process.isRunning())
- return;
-
- // Switch to Makefile Directory
- Makefile.SwitchCurrentDir();
-
- winApp.Report.Clear();
- winApp.Report.Append("Invoking compiler...", LVOUT_NORMAL);
-
- // Save modified files
- winApp.Manager.ProjectView.SaveAll(IDYES); // Silent.
-
- // Build makefile.
- Makefile.Build(&winApp.Manager.ProjectView, &winApp.Process);
- buildMakefile = false;
- modified = true;
-
- // Make clean.
- winApp.Process.AddTask(
- Makefile.make,
- OUTERR_PIPE,
- LVOUT_ERROR);
-
- winApp.Process.CmdCat(" -f ");
- winApp.Process.CmdCat(&Makefile.szFileName[Makefile.nFileOffset]);
- winApp.Process.CmdCat(" clean");
-
- // Build.
- winApp.Process.AddTask(
- Makefile.make,
- OUTERR_PIPE,
- LVOUT_ERROR);
-
- winApp.Process.CmdCat(" -f ");
- winApp.Process.CmdCat(&Makefile.szFileName[Makefile.nFileOffset]);
- if (Makefile.debug)
- winApp.Process.CmdCat(" debug");
-
- winApp.Process.Run();
-}
-
-void CProject::RunTarget(void){
- if (NoProject() || winApp.Process.isRunning())
- return;
-
- if (Makefile.buildWhat == BUILD_STATLIB
- || Makefile.buildWhat ==BUILD_DLL)
- return;
-
- winApp.Report.Clear();
- winApp.Report.Append("Run target...", LVOUT_NORMAL);
-
- // Put the command line and the run flag in the command stack.
- winApp.Process.AddTask(szDirBuffer, NO_PIPE, STDOUT_NONE);
- winApp.Process.CmdCat("\\");
- if (Makefile.tgtDir[0] == '.'){
- if (Makefile.tgtDir[1] == '.' && Makefile.tgtDir[2] == '\\'
- && Makefile.tgtDir[3] != '\0'){
- winApp.Process.CmdCat(&Makefile.tgtDir[3]);
- }else{
- // Invalid dir, try ".\target".
- winApp.Process.CmdCat(".");
- }
- }
- winApp.Process.CmdCat("\\");
- winApp.Process.CmdCat(Makefile.target);
-
- winApp.Process.Run();
-}
-
-void CProject::MakeClean(void){
- if (NoProject() || winApp.Process.isRunning())
- return;
-
- // Switch to Makefile Directory
- Makefile.SwitchCurrentDir();
-
- winApp.Report.Clear();
- winApp.Report.Append("Deleting objects...", LVOUT_NORMAL);
-
- // Put the command line and the output flag in the command stack.
- winApp.Process.AddTask(
- Makefile.make,
- OUTERR_PIPE,
- LVOUT_ERROR);
-
- winApp.Process.CmdCat(" -f ");
- winApp.Process.CmdCat(&Makefile.szFileName[Makefile.nFileOffset]);
- winApp.Process.CmdCat(" clean");
-
- winApp.Process.Run();
-}
-
-void CProject::BuildMakefile(void){
- if (NoProject() || winApp.Process.isRunning())
- return;
-
- // Switch to Project Directory
- Makefile.SwitchCurrentDir();
-
- winApp.Report.Clear();
- winApp.Report.Append("Building makefile...", LVOUT_NORMAL);
-
- // Fill buffers and initialize a new process.
- Makefile.Build(&winApp.Manager.ProjectView, &winApp.Process);
- buildMakefile = false;
- modified = true;
- // Run the process.
- winApp.Process.Run();
-}
-
-
-/********************************************************************
-* Class: CMakefile.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CMakefile::CMakefile(){
- Init();
-}
-
-CMakefile::~CMakefile(){
-}
-
-void CMakefile::Init(void){
- szFileName[MAX_PATH - 1] = '\0'; // security.
- szFileName[0] = '\0';
- nFileOffset = 0;
- strcpy (mkfDir, ".");
-
- strcpy (cc, "gcc");
- strcpy (make, "make");
- strcpy (wres, "windres");
- strcpy (test, "gcc -v");
-
- target[0] = '\0';
- strcpy (tgtDir, ".");
- buildWhat = BUILD_EXE;
- debug = false;
- lang = LANGC;
-
- cppFlags[0] = '\0';
- strcpy (warning, "-W -Wall -pedantic");
- strcpy (optimize, "-O2");
- cFlags[0] = '\0';
- incDirs[0] = '\0';
-
- strcpy (ldStrip, "-s");
- ldOpts[0] = '\0';
- ldLibs[0] = '\0';
- libDirs[0] = '\0';
- *arFlags = '\0';
-}
-
-void CMakefile::GetFullPath(char * prjFileName, WORD offset, char * name){
- // Copy project directory and append makefile relative dir.
- strncpy(szFileName, prjFileName, offset);
- WORD len = AppendPath(szFileName, offset, mkfDir);
- // Increment file offset.
- if (len){
- offset += len;
- }else{
- strcpy(mkfDir, ".");
- }
- // Append makefile name.
- szFileName[offset-1] = '\\';
- if (*name){
- strcpy(&szFileName[offset], name);
- }else{
- strcpy(name, "makefile");
- }
- nFileOffset = offset;
-}
-
-bool CMakefile::SwitchCurrentDir(void){
- // Switch to Makefile Directory.
- if (nFileOffset < 2)
- return false;
- szFileName[nFileOffset-1] = '\0';
- bool result = SetCurrentDirectory(szFileName);
- szFileName[nFileOffset-1] = '\\';
-return result;
-}
-
-void CMakefile::Build(CProjectView * Tree, CProcess* /*Process*/){
- SrcList2Buffers(Tree);
- // Write the first part of the Makefile.
- Write();
-
- /* Invokes compiler to get dependencies with something like:
- "gcc -MM file1.cpp file2.cpp ..." */
-
- CTask * task = winApp.Process.AddTask(
- depBuf,
- OUTERR_PIPE,
- STDOUT_FILE_APPEND);
- strcpy(task->szFileName, szFileName);
-}
-
-void CMakefile::SrcList2Buffers(CProjectView * Tree){
-
- // 1. Begin to fill each buffer.
- strcpy(depBuf, cc);
- if (*cppFlags != '\0'){
- strcat(depBuf, " ");
- strcat(depBuf, cppFlags);
- }
- strcat(depBuf, " -MM ");
- if (*incDirs != '\0'){
- strcat(depBuf, incDirs);
- strcat(depBuf, " ");
- }
-
- strcpy(srcBuf, "\nSRCS\t=\\\n");
- strcpy(objBuf, "\nOBJS\t=\\\n");
- resBuf [0] = 0;
-
- // 2. Parse the module list and retrieve sources files names.
- CFileItem* srcFile;
-
- if(!Tree->First())
- return; // The list is empty, nothing to search.
-
- do { srcFile = (CFileItem *) Tree->GetCurrent();
-
- if (srcFile->type == C_FILE || srcFile->type == RC_FILE){
- // Source files and objects buffers.
- strcat (srcBuf, "\t");
- strcat (srcBuf, &srcFile->szFileName[srcFile->nFileOffset]);
- strcat (srcBuf, "\\\n");
-
- // Change file extension.
- char ext[] = "o";
- strcpy(objFile, &srcFile->szFileName[srcFile->nFileOffset]);
- ChangeFileExt(objFile, ext);
- strcat (objBuf, "\t");
- strcat (objBuf, objFile);
- strcat (objBuf, "\\\n");
-
- if (srcFile->type == C_FILE){
- // Dependencies buffer.
- strcat(depBuf, &srcFile->szFileName[srcFile->nFileOffset]);
- strcat(depBuf, " ");
- }else if (srcFile->type == RC_FILE){
- // Resource buffer.
- strcat (resBuf, objFile);
- strcat (resBuf, ": ");
- strcat (resBuf, &srcFile->szFileName[srcFile->nFileOffset]);
- strcat (resBuf, "\n\n");
- }
- }
- } while (Tree->Next());
-
- int len = strlen(srcBuf);
- srcBuf[len-2] = '\n';
- srcBuf[len-1] = 0;
-
- len = strlen(objBuf);
- objBuf[len-2] = '\n';
- objBuf[len-1] = 0;
-}
-
-void CMakefile::Write(void){
- FILE * file;
-
- file = fopen(szFileName, "w");
- if (!file){
- MsgBox.DisplayString("Can't open file :\r\n%s", szFileName);
- return;
- }
-
- /* Signature */
- fprintf (file, "# Generated automatically by Visual-MinGW.\n");
- fprintf (file, "# http://visual-mingw.sourceforge.net/\n");
-
- /* Standard defines */
- fprintf (file, "\nCC = %s", cc);
- fprintf (file, "\nWRES = %s", wres );
- fprintf (file, "\nDLLWRAP = dllwrap" );
- fprintf (file, "\nCPPFLAGS = %s", cppFlags );
-
- if (buildWhat == BUILD_GUIEXE)
- fprintf (file, "\nLDBASEFLAGS = -mwindows %s %s", ldOpts, ldLibs );
- else
- fprintf (file, "\nLDBASEFLAGS = %s %s", ldOpts, ldLibs );
- fprintf (file, "\nINCDIRS = %s", incDirs );
- fprintf (file, "\nOPTIMIZ = %s", optimize );
- fprintf (file, "\nSTRIP = %s", ldStrip );
- /* Debug symbols ? Language ? */
- fprintf (file, "\n\nifeq ($(MAKECMDGOALS),debug)");
- if (lang == LANGCPP){
- fprintf (file, "\nCXXFLAGS = %s $(INCDIRS) -g %s", warning, cFlags);
- fprintf (file, "\nLDFLAGS = $(LDBASEFLAGS)");
- fprintf (file, "\nelse");
- fprintf (file, "\nCXXFLAGS = %s $(INCDIRS) $(OPTIMIZ) %s", warning, cFlags);
- fprintf (file, "\nLDFLAGS = $(STRIP) $(LDBASEFLAGS)");
- fprintf (file, "\nendif");
- }else{
- fprintf (file, "\nCFLAGS = %s $(INCDIRS) -g %s", warning, cFlags);
- fprintf (file, "\nLDFLAGS = $(LDBASEFLAGS)");
- fprintf (file, "\nelse");
- fprintf (file, "\nCFLAGS = %s $(INCDIRS) $(OPTIMIZ) %s", warning, cFlags);
- fprintf (file, "\nLDFLAGS = $(STRIP) $(LDBASEFLAGS)");
- fprintf (file, "\nendif");
- }
- /* Directories */
- fprintf (file, "\n\nSRCDIR = %s", mkfDir );
- fprintf (file, "\nBINDIR = %s", tgtDir );
- fprintf (file, "\nLIBDIRS = %s", libDirs );
- /* Rule to compile rc files */
- fprintf (file, "\n\n%c.o : %c.rc\n\t$(WRES) $(CPPFLAGS) $< $@", '%', '%' );
- /* List of objects */
- fprintf (file, "\n%s", objBuf );
- /* Target */
- fprintf (file, "\nTARGET =\t$(BINDIR)\\%s" , target );
- /* all, alldebug */
- fprintf (file, "\n\n# Targets\n" );
- fprintf (file, "all:\t$(TARGET)\n\ndebug:\t$(TARGET)\n\n" );
- /* clean */
- fprintf (file, "cleanobjs:\n\trm -f $(OBJS)\n\n" );
- fprintf (file, "cleanbin:\n\trm -f $(TARGET)\n\n" );
- fprintf (file, "clean:\tcleanobjs cleanbin\n\n" );
- /* Dependencies */
- fprintf (file, "# Dependency rules\n" );
- /* Language */
- if (buildWhat == BUILD_STATLIB){
- fprintf (file, "$(TARGET): $(OBJS)\n\t$(AR) -ru $(BINDIR)\\%s", target);
- fprintf (file, " $(OBJS) $(INCDIRS) $(LIBDIRS)\n\n%s", resBuf);
- }else if (buildWhat == BUILD_DLL){
- fprintf (file, "$(TARGET): $(OBJS)\n\t$(DLLWRAP) -o $@ $(OBJS) $(LDFLAGS)\n\n" );
- }else if (lang == LANGCPP){
- fprintf (file, "$(TARGET): $(OBJS)\n\t$(CXX) -o $(BINDIR)\\%s", target);
- fprintf (file, " $(OBJS) $(INCDIRS) $(LIBDIRS) $(LDFLAGS)\n\n%s",resBuf);
- }else{
- fprintf (file, "$(TARGET): $(OBJS)\n\t$(CC) -o $(BINDIR)\\%s", target);
- fprintf (file, " $(OBJS) $(INCDIRS) $(LIBDIRS) $(LDFLAGS)\n\n%s",resBuf);
- }
- fclose(file);
-}
-
-
-/********************************************************************
-* Class: CCompiler.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CCompiler::CCompiler(){
- make[0] = '\0';
- cc[0] = '\0';
- cFlags[0] = '\0';
- ldFlags[0] = '\0';
- wres[0] = '\0';
- debug[0] = '\0';
- test[0] = '\0';
-}
-
-CCompiler::~CCompiler(){
-}
-
-bool CCompiler::LoadData(char * fullpath){
- Load(fullpath);
- // [Common] section
- GetString(make, "MAKE", "Common");
- GetString(cc, "CC" );
- GetString(cFlags, "CFLAGS" );
- GetString(ldFlags, "LDFLAGS" );
- GetString(wres, "WRES" );
- GetString(debug, "DEBUG" );
- GetString(test, "TEST" );
-return true;
-}
-
+++ /dev/null
-/********************************************************************
-* Module: project.h. This is part of Visual-MinGW.
-*
-* License: Visual-MinGW is covered by GNU General Public License,
-* Copyright (C) 2001 Manu B.
-* See license.htm for more details.
-*
-********************************************************************/
-#ifndef PROJECT_H
-#define PROJECT_H
-
-#include "winui.h"
-#include "main.h"
-#include "process.h"
-
-#define BUILD_STATLIB 0
-#define BUILD_DLL 1
-#define BUILD_EXE 2
-#define BUILD_GUIEXE 3
-#define LANGC 0
-#define LANGCPP 1
-
-class CProject;
-class CMakefile;
-
-bool CheckFile(CFileItem * file);
-
-class CGeneralDlg : public CDlgBase
-{
- public:
- CGeneralDlg();
- virtual ~CGeneralDlg();
-
- virtual LRESULT CALLBACK CDlgProc(UINT Message, WPARAM wParam, LPARAM lParam);
- BOOL OnInitDialog(HWND hwndFocus, LPARAM lInitParam);
- BOOL OnCommand(WORD wNotifyCode, WORD wID, HWND hwndCtl);
-
- protected:
-
- private:
- CProject *pProject;
- CMakefile *pMakefile;
- HWND hStatLib;
- HWND hDll;
- HWND hConsole;
- HWND hGuiExe;
- HWND hDbgSym;
- HWND hLangC;
- HWND hLangCpp;
- HWND hMkfName;
- HWND hMkfDir;
- HWND hUserMkf;
- HWND hTgtName;
- HWND hTgtDir;
-};
-
-class CCompilerDlg : public CDlgBase
-{
- public:
- CCompilerDlg();
- virtual ~CCompilerDlg();
-
- virtual LRESULT CALLBACK CDlgProc(UINT Message, WPARAM wParam, LPARAM lParam);
- BOOL OnInitDialog(HWND hwndFocus, LPARAM lInitParam);
- BOOL OnCommand(WORD wNotifyCode, WORD wID, HWND hwndCtl);
-
- protected:
-
- private:
- CProject *pProject;
- CMakefile *pMakefile;
- HWND hCppFlags;
- HWND hWarning;
- HWND hOptimiz;
- HWND hCFlags;
- HWND hIncDirs;
-};
-
-class CZipDlg : public CDlgBase
-{
- public:
- CZipDlg();
- virtual ~CZipDlg();
-
- virtual LRESULT CALLBACK CDlgProc(UINT Message, WPARAM wParam, LPARAM lParam);
- BOOL OnInitDialog(HWND hwndFocus, LPARAM lInitParam);
- BOOL OnCommand(WORD wNotifyCode, WORD wID, HWND hwndCtl);
-
- protected:
-
- private:
- CProject *pProject;
- CMakefile *pMakefile;
- HWND hZipDir;
- HWND hZipFlags;
-};
-
-class CLinkerDlg : public CDlgBase
-{
- public:
- CLinkerDlg();
- virtual ~CLinkerDlg();
-
- virtual LRESULT CALLBACK CDlgProc(UINT Message, WPARAM wParam, LPARAM lParam);
- BOOL OnInitDialog(HWND hwndFocus, LPARAM lInitParam);
- BOOL OnCommand(WORD wNotifyCode, WORD wID, HWND hwndCtl);
-
- protected:
-
- private:
- CProject *pProject;
- CMakefile *pMakefile;
- HWND hLdStrip;
- HWND hLdOpts;
- HWND hLdLibs;
- HWND hLibsDirs;
-};
-
-class COptionsDlg : public CTabbedDlg
-{
- public:
- COptionsDlg();
- virtual ~COptionsDlg();
-
- BOOL EndDlg(int nResult);
- virtual LRESULT CALLBACK CDlgProc(UINT Message, WPARAM wParam, LPARAM lParam);
- BOOL OnInitDialog(HWND hwndFocus, LPARAM lInitParam);
- BOOL OnCommand(WORD wNotifyCode, WORD wID, HWND hwndCtl);
-
- protected:
-
- private:
- CProject *pProject;
- CMakefile *pMakefile;
- CGeneralDlg GeneralDlg;
- CCompilerDlg CompilerDlg;
- CLinkerDlg LinkerDlg;
- CZipDlg ZipDlg;
-};
-
-class CNewModuleDlg : public CDlgBase
-{
- public:
- CNewModuleDlg();
- virtual ~CNewModuleDlg();
-
- virtual LRESULT CALLBACK CDlgProc(UINT Message, WPARAM wParam, LPARAM lParam);
-
- protected:
-
- private:
- CProject *pProject;
-};
-
-class CCompiler : public CIniFile
-{
- public:
- CCompiler();
- ~CCompiler();
-
- bool LoadData(char * fullpath);
-
- char make[64];
-
- char cc[16];
- char cFlags[64];
- char ldFlags[64];
- char wres[16];
-
- char debug[16];
- char test[16];
-
- protected:
-
- private:
-};
-
-class CMakefile
-{
- public:
- CMakefile();
- ~CMakefile();
-
- void Init(void);
- bool SwitchCurrentDir(void);
- void GetFullPath(char * prjFileName, WORD offset, char * name);
- void Build(CProjectView * Tree, CProcess* Process);
- void SrcList2Buffers(CProjectView * Tree);
- void Write(void);
-
- // File.
- char szFileName[MAX_PATH];
- WORD nFileOffset;
- char mkfDir[MAX_PATH];
-
- // Compiler dependent.
- char cc[4];
- char make[64];
- char wres[16];
- char test[16];
-
- char target[64];
- char tgtDir[MAX_PATH];
- UINT buildWhat;
- bool debug;
- UINT lang;
-
- // Compiler data.
- char cppFlags[256];
- char warning[64];
- char optimize[64];
- char cFlags[64];
- char incDirs[256];
-
- // Linker data.
- char ldStrip[32];
- char ldOpts[64];
- char ldLibs[64];
- char libDirs[256];
-
- // Archiver.
- char arFlags[64];
-
- protected:
-
- private:
- // Buffers.
- char objFile[64];
- char srcBuf [1024];
- char objBuf [1024];
- char resBuf [1024];
- char depBuf [256];
-};
-
-class CProject //: public CIniFile
-{
- public:
- CProject();
- ~CProject();
-
- bool NoProject(void);
- int CloseDecision(void);
- bool New(char * fileName, WORD fileOffset);
- bool Open(char * fileName, WORD fileOffset);
-
- bool RelativeToAbsolute(char * relativePath);
- bool AddFiles(void);
-
- bool OptionsDlg(void);
- bool NewModuleDlg(void);
- bool NewModule(char * srcFile, bool createHeader);
-
- void ZipSrcs(void);
- void Explore(HWND hwnd);
-
- void Build(void);
- void RebuildAll(void);
- void RunTarget(void);
- void MakeClean(void);
- void BuildMakefile(void);
-
- bool SwitchCurrentDir(void);
-
- CMakefile Makefile;
-
- /* May be private members */
- int numFiles;
- bool loaded;
- bool modified;
- bool buildMakefile;
- int SavePrjFile(int decision);
-
- char szFileName[MAX_PATH];
- WORD nFileOffset;
- WORD nFileExtension;
- char szDirBuffer[MAX_PATH];
-
- char zipDir[MAX_PATH];
- char zipFlags[256];
-
- char compilerName[64];
-
- protected:
-
- private:
- void Reset();
-
-CIniFile PrjFile;
- COptionsDlg _OptionsDlg;
- CNewModuleDlg _NewModuleDlg;
-
- int prjVer;
-};
-
-#endif
+++ /dev/null
-/********************************************************************
-* Module: resource.h. This is part of Visual-MinGW.
-*
-* License: Visual-MinGW is covered by GNU General Public License,
-* Copyright (C) 2001 Manu B.
-* See license.htm for more details.
-*
-********************************************************************/
-#define APP_VERSION "0.43a"
-#define FULL_APP_VERSION "0.43 alpha"
-
-// Static control ----------------------------
-#define IDC_STATIC -1
-
-// Bitmaps ----------------------------------
-#define IDB_TOOLBAR 10
-#define IDB_TREEVIEW 11
-
-#define IDAPPLY 20
-
-// Preferences Dialog -----------------------
-#define IDD_PREFERENCES 100
-#define IDC_PREF_TABS 101
-
-#define IDD_ENVIRON 110
-#define IDC_SET_CCBIN 111
-#define IDC_CCBIN 112
-#define IDC_BROWSE_CC 113
-#define IDC_SET_CMDBIN 114
-#define IDC_CMDBIN 115
-#define IDC_BROWSE_CMD 116
-#define IDC_AUTOEXEC 117
-#define IDC_ENV_VIEW 118
-/*#define IDC_CC_INCDIR 101
-#define IDC_BROWSE 102*/
-
-// Find Dialog -------------------------------
-#define IDD_FIND 120
-#define IDC_FINDWHAT 121
-#define IDC_WHOLEWORD 122
-#define IDC_MATCHCASE 123
-#define IDC_REGEXP 124
-#define IDC_WRAP 125
-#define IDC_UNSLASH 126
-#define IDC_DIRECTIONUP 127
-#define IDC_DIRECTIONDOWN 128
-
-// Replace ----------------------------------
-#define IDD_REPLACE 130
-#define IDC_REPLACEWITH 131
-#define IDC_REPLACE 132
-#define IDC_REPLACEALL 133
-#define IDC_REPLACEINSEL 134
-
-// Find in files -------------------------------
-#define IDD_GREP 135
-#define IDC_GFILTER 136
-#define IDC_GDIR 137
-#define IDC_GBROWSE 139
-
-// New module ------------------------------
-#define IDD_NEW_MODULE 140
-#define IDC_HEADER 141
-
-// Options ----------------------------------
-#define IDD_OPTION 150
-#define IDC_OPTION_TABS 151
-#define IDC_HELP_BTN 152
-
-// General tab ---------------------------------
-#define IDD_GENERAL_PANE 160
-#define IDC_STATLIB 161
-#define IDC_DLL 162
-#define IDC_CONSOLE 163
-#define IDC_GUIEXE 164
-#define IDC_DBGSYM 165
-#define IDC_LANGC 166
-#define IDC_LANGCPP 167
-#define IDC_MKF_NAME 168
-#define IDC_MKF_DIR 169
-#define IDC_USER_MKF 170
-#define IDC_TGT_NAME 171
-#define IDC_TGT_DIR 172
-
-// Compiler tab -----------------------------
-#define IDD_COMPILER 180
-#define IDC_CPPFLAGS 181
-#define IDC_WARNING 182
-#define IDC_OPTIMIZ 183
-#define IDC_CFLAGS 184
-#define IDC_INCDIRS 185
-
-// Linker tab --------------------------------
-#define IDD_LINKER 190
-#define IDC_LDSTRIP 191
-#define IDC_LDOPTS 192
-#define IDC_LDLIBS 193
-#define IDC_LIBDIRS 194
-
-#define IDD_ZIP 200
-#define IDC_INFOZIP 201
-#define IDC_TAR_GZIP 202
-#define IDC_TAR_BZ2 203
-#define IDC_ZIP_TEST 204
-#define IDC_ZIP_DIR 205
-#define IDC_ZIPFLAGS 206
-// About ------------------------------------
-#define IDD_ABOUT 210
-
-#define IDD_COMMAND 220
-#define IDC_CMDLINE 221
-// Menu -------------------------------------
-#define ID_MENU 1000
-#define IDM_NEW 1001
-#define IDM_OPEN 1002
-//#define IDM_CLOSE 1003
-#define IDM_NEW_PROJECT 1004
-#define IDM_OPEN_PROJECT 1005
-#define IDM_SAVE_PROJECT 1006
-#define IDM_CLOSE_PROJECT 1007
-#define IDM_SAVE 1008
-#define IDM_SAVEAS 1009
-#define IDM_SAVEALL 1010
-#define IDM_PREFERENCES 1011
-#define IDM_PAGESETUP 1012
-#define IDM_PRINT 1013
-#define IDM_QUIT 1014
-
-#define IDM_UNDO 1020
-#define IDM_REDO 1021
-#define IDM_CUT 1022
-#define IDM_COPY 1023
-#define IDM_PASTE 1024
-#define IDM_SELECTALL 1025
-
-#define IDM_FIND 1030
-#define IDM_REPLACE 1031
-#define IDM_GREP 1032
-
-#define IDM_CASCADE 1040
-#define IDM_TILEHORZ 1041
-#define IDM_TILEVERT 1042
-#define IDM_ARRANGE 1043
-
-#define IDM_NEW_MODULE 1050
-#define IDM_ADD 1051
-#define IDM_REMOVE_FILE 1052
-#define IDM_REMOVE_MODULE 1053
-#define IDM_OPTION 1054
-#define IDM_ZIP_SRCS 1055
-#define IDM_EXPLORE 1056
-
-#define IDM_BUILD 1060
-#define IDM_REBUILDALL 1061
-#define IDM_RUN_TARGET 1062
-#define IDM_MKCLEAN 1063
-#define IDM_MKF_BUILD 1064
-#define IDM_RUN_CMD 1065
-
-#define IDM_TEST 1070
-
-#define IDM_HELP 1080
-#define IDM_ABOUT 1081
-
-#define ID_POPMENU 1100
-
-#define ID_FIRSTCHILD 2000
-
+++ /dev/null
-[Project]
-Signature = 40
-NumFiles = 15
-Compiler = mingw
-BuildMakefile = 0
-
-[Archives]
-Directory = .\zip
-Flags = *.prj .\bin\*.dll .\src\*.* .\include\*.h -x *.o
-
-[Makefile]
-MAKE = make
-CC = g++
-WRES = windres
-TEST = gcc -v
-Makefile = makefile
-MakefileDir = .\src
-Target = visual-mingw.exe
-TargetDir = ..\bin
-Build = 3
-Debug = 0
-Lang = 1
-CppFlags = -D_WIN32_IE=0x0400
-CcWarning = -W -Wall -pedantic
-CcOptimize = -O2
-CcFlags = -fvtable-thunks -fno-rtti
-IncDirs = -I ../include
-LdStrip = -s
-LdOptions =
-LdLibraries = -lcomctl32 -lole32
-LdLibDirs =
-
-[File1]
-Name = .\src\ChangeLog
-Show = 0
-
-[File2]
-Name = .\src\CList.cpp
-Show = 0
-
-[File3]
-Name = .\src\CList.h
-Show = 0
-
-[File4]
-Name = .\src\editor.cpp
-Show = 0
-
-[File5]
-Name = .\src\editor.h
-Show = 0
-
-[File6]
-Name = .\src\main.cpp
-Show = 0
-
-[File7]
-Name = .\src\main.h
-Show = 0
-
-[File8]
-Name = .\src\process.cpp
-Show = 0
-
-[File9]
-Name = .\src\process.h
-Show = 0
-
-[File10]
-Name = .\src\project.cpp
-Show = 0
-
-[File11]
-Name = .\src\project.h
-Show = 0
-
-[File12]
-Name = .\src\rsrc.h
-Show = 0
-
-[File13]
-Name = .\src\rsrc.rc
-Show = 0
-
-[File14]
-Name = .\src\winui.cpp
-Show = 0
-
-[File15]
-Name = .\src\winui.h
-Show = 0
+++ /dev/null
-/********************************************************************
-* Module: rsrc.rc. This is part of Visual-MinGW.
-*
-* Purpose: Resource file.
-*
-* Authors: Manu B.
-*
-* License: Visual-MinGW is covered by GNU General Public License,
-* Copyright (C) 2001 Manu B.
-* See license.htm for more details.
-*
-* Revisions: 11/06/01.
-*
-********************************************************************/
-// For Borland Resource Workshop. (It doesn't like windows.h)
-#ifndef WORKSHOP_INVOKED
-#include "windows.h"
-#endif
-#include "rsrc.h"
-
-ID_MENU MENU
-BEGIN
- POPUP "&File"
- BEGIN
- MENUITEM "&New" , IDM_NEW
- MENUITEM "&Open" , IDM_OPEN
- MENUITEM "&Close" , IDM_OPEN, GRAYED
- MENUITEM SEPARATOR
- MENUITEM "&New Project" , IDM_NEW_PROJECT
- MENUITEM "&Open Project" , IDM_OPEN_PROJECT
- MENUITEM "&Save Project" , IDM_SAVE_PROJECT
- MENUITEM "&Close Project" , IDM_CLOSE_PROJECT
- MENUITEM SEPARATOR
- MENUITEM "&Save\tCtrl+S" , IDM_SAVE, GRAYED
- MENUITEM "Save as" , IDM_SAVEAS, GRAYED
- MENUITEM "&Save all" , IDM_SAVEALL
- MENUITEM SEPARATOR
- MENUITEM "Preferences" , IDM_PREFERENCES
- MENUITEM "Page setup" , IDM_PAGESETUP, GRAYED
- MENUITEM "&Print" , IDM_PRINT, GRAYED
- MENUITEM SEPARATOR
- MENUITEM "&Quit" , IDM_QUIT
- END
-
- POPUP "&Edit", GRAYED
- BEGIN
- MENUITEM "&Undo" , IDM_UNDO
- MENUITEM "&Redo" , IDM_REDO
- MENUITEM SEPARATOR
- MENUITEM "&Cut" , IDM_CUT
- MENUITEM "&Copy" , IDM_COPY
- MENUITEM "&Paste" , IDM_PASTE
- MENUITEM SEPARATOR
- MENUITEM "&Select all" , IDM_SELECTALL
- END
-
- POPUP "&Find"
- BEGIN
- MENUITEM "&Search..." , IDM_FIND, GRAYED
- MENUITEM "&Replace" , IDM_REPLACE, GRAYED
- MENUITEM "Find in files" , IDM_GREP
- END
-
- POPUP "&Window", GRAYED
- BEGIN
- MENUITEM "&Cascade" , IDM_CASCADE
- MENUITEM "Tile &Horizontal" , IDM_TILEHORZ
- MENUITEM "Tile &Vertical" , IDM_TILEVERT
- MENUITEM "Arrange &Icons" , IDM_ARRANGE
- END
-
- POPUP "&Project"
- BEGIN
- MENUITEM "&New Module" , IDM_NEW_MODULE
- MENUITEM "&Add files" , IDM_ADD
- MENUITEM "&Remove File" , IDM_REMOVE_FILE
- MENUITEM "&Remove Module" , IDM_REMOVE_MODULE
- MENUITEM "&Options" , IDM_OPTION
- MENUITEM "&Create archive" , IDM_ZIP_SRCS
- MENUITEM "&Explore" , IDM_EXPLORE
- END
-
- POPUP "&Build"
- BEGIN
- MENUITEM "&Build" , IDM_BUILD
- MENUITEM "&Rebuild All" , IDM_REBUILDALL
- MENUITEM "&Run" , IDM_RUN_TARGET
- MENUITEM "&Make Clean" , IDM_MKCLEAN
- MENUITEM "&Build Makefile" , IDM_MKF_BUILD
-#ifdef DEBUG
- MENUITEM "&Run command" , IDM_RUN_CMD
-#endif
- END
-
-#ifdef DEBUG
- POPUP "&Testing"
- BEGIN
- MENUITEM "a_new_procedure" , IDM_TEST
- END
-#endif
-
- POPUP "&?"
- BEGIN
- MENUITEM "&Help" , IDM_HELP, GRAYED
- MENUITEM "&About" , IDM_ABOUT
- END
-END
-
-PopupMenu MENU
-BEGIN
- POPUP "&Editer"
- BEGIN
- MENUITEM "&Remove" , IDM_REMOVE_MODULE
- END
-END
-
-STRINGTABLE DISCARDABLE
-BEGIN
- IDM_NEW "New"
- IDM_OPEN "Open"
- IDM_SAVE "Save"
-
- IDM_CUT "Cut"
- IDM_COPY "Copy"
- IDM_PASTE "Paste"
-
- IDM_UNDO "Undo"
- IDM_REDO "Redo"
- IDM_FIND "Search"
-
- IDM_PRINT "Print"
-END
-
-IDB_TOOLBAR BITMAP DISCARDABLE "toolbar.bmp"
-IDB_TREEVIEW BITMAP DISCARDABLE "treeview.bmp"
-
-IDD_PREFERENCES DIALOG 0, 0, 283, 197
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Program Preferences"
-FONT 8, "MS Sans Serif"
-BEGIN
- PUSHBUTTON "Ok", IDOK, 115, 179, 50, 14
- PUSHBUTTON "Cancel", IDCANCEL, 172, 179, 50, 14
- CONTROL "", IDC_PREF_TABS, "SysTabControl32", 0x0 | WS_CLIPSIBLINGS, 4, 4, 275, 169
- PUSHBUTTON "Apply", IDAPPLY, 229, 179, 50, 14, WS_DISABLED
-END
-
-// "NOT WS_POPUP" is a workaround for windres prior version 2.11.92.
-// LCC's weditres doesn't recognize this flag.
-IDD_ENVIRON DIALOG 0, 0, 259, 148
-#ifdef __LCC__
-STYLE DS_CONTROL | WS_CHILD
-#else
-STYLE DS_CONTROL | WS_CHILD | NOT WS_POPUP
-#endif
-FONT 8, "MS Sans Serif"
-BEGIN
- GROUPBOX "Path variable", IDC_STATIC, 3, 3, 252, 140
- EDITTEXT IDC_CCBIN, 20, 26, 165, 12, ES_AUTOHSCROLL
- AUTOCHECKBOX "Compiler bin directory", IDC_SET_CCBIN, 8, 16, 86, 10
- PUSHBUTTON "Browse", IDC_BROWSE_CC, 197, 25, 45, 14
- EDITTEXT IDC_CMDBIN, 20, 55, 165, 12, ES_AUTOHSCROLL
- AUTOCHECKBOX "Default bin directory", IDC_SET_CMDBIN, 8, 45, 86, 10
- PUSHBUTTON "Browse", IDC_BROWSE_CMD, 197, 54, 45, 14
- AUTOCHECKBOX "Use default environment variables", IDC_AUTOEXEC, 8, 75, 125, 10
- EDITTEXT IDC_ENV_VIEW, 8, 88, 242, 49, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY, WS_EX_TRANSPARENT
-END
-
-IDD_FIND DIALOG 0, 0, 236, 92
-STYLE DS_MODALFRAME | WS_VISIBLE | DS_CENTER | DS_3DLOOK | WS_POPUP | WS_CAPTION
-CAPTION "Find"
-FONT 8, "MS Sans Serif"
-BEGIN
- LTEXT "Fi&nd what:",-1,4,8,42,8
- COMBOBOX IDC_FINDWHAT,47,7,128,50, WS_TABSTOP | CBS_DROPDOWN | CBS_AUTOHSCROLL
- AUTOCHECKBOX "Match &whole word only", IDC_WHOLEWORD,4,26,100,10, WS_GROUP | WS_TABSTOP
- AUTOCHECKBOX "Match &case", IDC_MATCHCASE,4,38,100,10, WS_GROUP | WS_TABSTOP
- AUTOCHECKBOX "Regular &expression", IDC_REGEXP,4,50,100,10, WS_GROUP | WS_TABSTOP
- AUTOCHECKBOX "Wrap aroun&d", IDC_WRAP,4,62,100,10, WS_GROUP | WS_TABSTOP
- AUTOCHECKBOX "Transform &backslash expressions", IDC_UNSLASH,4,74,150,10, WS_GROUP | WS_TABSTOP
- GROUPBOX "Direction",1072,107,26,68,28,WS_GROUP
- AUTORADIOBUTTON "&Up",IDC_DIRECTIONUP,111,38,25,12, WS_GROUP
- AUTORADIOBUTTON "&Down",IDC_DIRECTIONDOWN,138,38,35,12
- DEFPUSHBUTTON "&Find Next",IDOK,182,5,50,14,WS_GROUP
- PUSHBUTTON "Cancel",IDCANCEL,182,23,50,14
-END
-
-IDD_REPLACE DIALOG 0, 0, 260, 108
-STYLE DS_MODALFRAME | WS_VISIBLE | DS_CENTER | DS_3DLOOK | WS_POPUP | WS_CAPTION
-CAPTION "Replace"
-FONT 8, "MS Sans Serif"
-BEGIN
- LTEXT "Fi&nd what:",-1,4,9,48,8
- COMBOBOX IDC_FINDWHAT,54,7,114,50,WS_TABSTOP | CBS_DROPDOWN | CBS_AUTOHSCROLL
- LTEXT "Re&place with:",-1,4,26,48,8
- COMBOBOX IDC_REPLACEWITH,54,24,114,50,WS_TABSTOP | CBS_DROPDOWN | CBS_AUTOHSCROLL
- AUTOCHECKBOX "Match &whole word only", IDC_WHOLEWORD,4,44,100,10, WS_GROUP | WS_TABSTOP
- AUTOCHECKBOX "Match &case", IDC_MATCHCASE,4,56,100,10, WS_GROUP | WS_TABSTOP
- AUTOCHECKBOX "Regular &expression", IDC_REGEXP,4,68,100,10, WS_GROUP | WS_TABSTOP
- AUTOCHECKBOX "Wrap aroun&d", IDC_WRAP,4,80,100,10, WS_GROUP | WS_TABSTOP
- AUTOCHECKBOX "Transform &backslash expressions", IDC_UNSLASH,4,92,150,10, WS_GROUP | WS_TABSTOP
- DEFPUSHBUTTON "&Find Next",IDOK,174,4,80,14,WS_GROUP
- PUSHBUTTON "&Replace",IDC_REPLACE,174,21,80,14
- PUSHBUTTON "Replace &All",IDC_REPLACEALL,174,38,80,14
- PUSHBUTTON "Replace in &Selection",IDC_REPLACEINSEL,174,55,80,14
- PUSHBUTTON "Close",IDCANCEL,174,72,80,14
-END
-
-IDD_GREP DIALOG 26, 41, 226, 66
-STYLE DS_MODALFRAME | DS_CENTER | DS_3DLOOK | WS_POPUP | WS_CAPTION
-CAPTION "Find in Files"
-FONT 8, "MS Sans Serif"
-BEGIN
- LTEXT "Fi&nd what:", IDC_STATIC, 5, 8, 35, 8, NOT WS_GROUP
- COMBOBOX IDC_FINDWHAT, 40, 7, 120, 50, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
- LTEXT "F&iles:", IDC_STATIC, 5, 28, 30, 8, NOT WS_GROUP
- COMBOBOX IDC_GFILTER, 40, 27, 120, 50, CBS_DROPDOWN | WS_BORDER | WS_TABSTOP
- LTEXT "&Directory:", IDC_STATIC, 5, 48, 30, 8, NOT WS_GROUP
- DEFPUSHBUTTON "&Find", IDOK, 168, 6, 50, 14
- PUSHBUTTON "Cancel", IDCANCEL, 168, 26, 50, 14
- COMBOBOX 138, 40, 47, 120, 50, CBS_DROPDOWN | WS_BORDER | WS_TABSTOP
- PUSHBUTTON "Browse", IDC_GBROWSE, 168, 46, 50, 14
-END
-
-IDD_OPTION DIALOGEX 0, 0, 252, 202
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-EXSTYLE WS_EX_CONTROLPARENT
-CAPTION "Project options"
-FONT 8, "MS Sans Serif"
-BEGIN
- CONTROL "", IDC_OPTION_TABS, "SysTabControl32", 0x8000, 4, 5, 244, 173
- PUSHBUTTON "Ok", IDOK, 79, 184, 50, 14
- PUSHBUTTON "Cancel", IDCANCEL, 141, 184, 50, 14
- PUSHBUTTON "Help", IDC_HELP_BTN, 198, 184, 50, 14
-END
-
-IDD_GENERAL_PANE DIALOG 0, 0, 230, 139
-#ifdef __LCC__
-STYLE DS_CONTROL | WS_CHILD
-#else
-STYLE DS_CONTROL | WS_CHILD | NOT WS_POPUP
-#endif
-FONT 8, "MS Sans Serif"
-BEGIN
- GROUPBOX "Build what ?", IDC_STATIC, 5, 3, 107, 79
- AUTORADIOBUTTON "Static library", IDC_STATLIB, 12, 15, 59, 10, WS_GROUP | WS_TABSTOP
- AUTORADIOBUTTON "Dll", IDC_DLL, 12, 28, 59, 10
- AUTORADIOBUTTON "Console executable", IDC_CONSOLE, 12, 41, 78, 10
- AUTORADIOBUTTON "GUI executable", IDC_GUIEXE, 12, 54, 65, 10
- AUTOCHECKBOX "Generate debug symbols", IDC_DBGSYM, 12, 67, 97, 10
- GROUPBOX "Language", IDC_STATIC, 5, 86, 107, 46
- AUTORADIOBUTTON "C", IDC_LANGC, 12, 101, 25, 10, WS_GROUP | WS_TABSTOP
- AUTORADIOBUTTON "C++", IDC_LANGCPP, 12, 114, 29, 10
- GROUPBOX "Makefile", IDC_STATIC, 120, 3, 104, 67
- LTEXT "Name", IDC_STATIC, 124, 18, 23, 9
- EDITTEXT IDC_MKF_NAME, 156, 16, 61, 12, ES_AUTOHSCROLL
- LTEXT "Directory", IDC_STATIC, 124, 35, 30, 9
- EDITTEXT IDC_MKF_DIR, 156, 33, 61, 12, ES_AUTOHSCROLL
- AUTOCHECKBOX "User makefile", IDC_USER_MKF, 125, 52, 62, 10, WS_DISABLED
- GROUPBOX "Output file", IDC_STATIC, 120, 76, 104, 56
- LTEXT "Name", IDC_STATIC, 124, 95, 23, 9
- EDITTEXT IDC_TGT_NAME, 156, 93, 61, 12, ES_AUTOHSCROLL
- LTEXT "Directory", 133, 123, 112, 30, 9
- EDITTEXT IDC_TGT_DIR, 156, 110, 61, 12, ES_AUTOHSCROLL
-END
-
-IDD_COMPILER DIALOG 0, 0, 230, 139
-#ifdef __LCC__
-STYLE DS_CONTROL | WS_CHILD
-#else
-STYLE DS_CONTROL | WS_CHILD | NOT WS_POPUP
-#endif
-FONT 8, "MS Sans Serif"
-BEGIN
- GROUPBOX "Compiler options", IDC_STATIC, 17, 11, 194, 111
- LTEXT "Preprocessor", IDC_STATIC, 22, 25, 46, 9
- EDITTEXT IDC_CPPFLAGS, 67, 24, 138, 12, ES_AUTOHSCROLL
- LTEXT "Warning", IDC_STATIC, 22, 42, 31, 9
- EDITTEXT IDC_WARNING, 67, 40, 138, 12, ES_AUTOHSCROLL
- LTEXT "Optimization", IDC_STATIC, 22, 58, 42, 9
- EDITTEXT IDC_OPTIMIZ, 67, 56, 138, 12, ES_AUTOHSCROLL
- LTEXT "C/C++", IDC_STATIC, 23, 73, 24, 9
- EDITTEXT IDC_CFLAGS, 67, 72, 138, 12, ES_AUTOHSCROLL
- LTEXT "Include directories", IDC_STATIC, 22, 92, 61, 9
- EDITTEXT IDC_INCDIRS, 22, 101, 183, 12, ES_AUTOHSCROLL
-END
-
-IDD_LINKER DIALOG 0, 0, 230, 139
-#ifdef __LCC__
-STYLE DS_CONTROL | WS_CHILD
-#else
-STYLE DS_CONTROL | WS_CHILD | NOT WS_POPUP
-#endif
-FONT 8, "MS Sans Serif"
-BEGIN
- GROUPBOX "Linker", IDC_STATIC, 17, 16, 194, 103
- LTEXT "Strip", IDC_STATIC, 23, 37, 18, 9
- EDITTEXT IDC_LDSTRIP, 53, 36, 53, 12, ES_AUTOHSCROLL
- LTEXT "Options", IDC_STATIC, 23, 53, 29, 9
- EDITTEXT IDC_LDOPTS, 53, 52, 151, 12, ES_AUTOHSCROLL
- LTEXT "Libraries", IDC_STATIC, 23, 69, 34, 9
- EDITTEXT IDC_LDLIBS, 53, 68, 151, 12, ES_AUTOHSCROLL
- LTEXT "Library directories", IDC_STATIC, 23, 88, 61, 9
- EDITTEXT IDC_LIBDIRS, 22, 98, 182, 12, ES_AUTOHSCROLL
-END
-
-IDD_ZIP DIALOG 0, 0, 230, 139
-#ifdef __LCC__
-STYLE DS_CONTROL | WS_CHILD
-#else
-STYLE DS_CONTROL | WS_CHILD | NOT WS_POPUP
-#endif
-FONT 8, "MS Sans Serif"
-BEGIN
- GROUPBOX "Archiver", 304, 15, 7, 87, 58
- AUTORADIOBUTTON "Info-ZIP", IDC_INFOZIP, 20, 17, 39, 10, WS_GROUP
- AUTORADIOBUTTON "Tar/Gzip", IDC_TAR_GZIP, 20, 32, 46, 10, WS_DISABLED
- AUTORADIOBUTTON "Tar/Bz2", IDC_TAR_BZ2, 20, 47, 44, 10, WS_DISABLED
- GROUPBOX "Output File", IDC_STATIC, 15, 71, 195, 56
- LTEXT "Directory", IDC_STATIC, 21, 86, 30, 9
- EDITTEXT IDC_ZIP_DIR, 56, 84, 61, 12, ES_AUTOHSCROLL
- LTEXT "Options", IDC_STATIC, 21, 109, 29, 9
- EDITTEXT IDC_ZIPFLAGS, 51, 108, 151, 12, ES_AUTOHSCROLL
- GROUPBOX "Date format", 207, 112, 7, 97, 58
- AUTORADIOBUTTON "mmddyyyy", 208, 117, 17, 53, 10
- AUTORADIOBUTTON "ddmmyyyy", 209, 117, 32, 49, 10, WS_DISABLED
- AUTORADIOBUTTON "yyyymmdd", 211, 117, 47, 50, 10, WS_DISABLED
-END
-
-IDD_NEW_MODULE DIALOG 226, 122, 142, 39
-STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "New module"
-FONT 8, "MS Sans Serif"
-BEGIN
- EDITTEXT 301, 6, 4, 84, 12, ES_AUTOHSCROLL
- AUTOCHECKBOX "Create header", IDC_HEADER, 21, 22, 58, 10
- PUSHBUTTON "Ok", IDOK, 97, 3, 40, 14
- PUSHBUTTON "Cancel", IDCANCEL, 97, 22, 40, 14
-END
-
-IDD_ABOUT DIALOG 14, 26, 200, 78
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "About this software..."
-FONT 8, "MS Sans Serif"
-BEGIN
- DEFPUSHBUTTON "&OK", IDOK, 140, 18, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
- ICON 500, IDC_STATIC, 16, 24, 18, 20, WS_GROUP
- GROUPBOX "Informations", IDC_STATIC, 4, 3, 192, 70
- LTEXT "Version 0.42a", IDC_STATIC, 57, 15, 67, 52
-END
-
-IDD_COMMAND DIALOG 0, 0, 216, 45
-STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Dialog Title"
-FONT 8, "MS Sans Serif"
-BEGIN
- LTEXT "Command line", IDC_STATIC, 5, 8, 48, 9
- EDITTEXT IDC_CMDLINE, 59, 7, 148, 12, ES_AUTOHSCROLL
- PUSHBUTTON "Enter", IDOK, 157, 25, 50, 14
-END
-
-ACCELS ACCELERATORS
-BEGIN
- "S", IDM_SAVE, VIRTKEY, CONTROL
-END
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION 0,43,0,0
- PRODUCTVERSION 0,43,0,0
- FILEFLAGSMASK 0x3fL
-#ifdef DEBUG
- FILEFLAGS VS_FF_PRERELEASE
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS VOS_NT_WINDOWS32
- FILETYPE VFT_APP
- FILESUBTYPE VFT2_UNKNOWN
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "04090000"
- BEGIN
- VALUE "CompanyName", "Visual-MinGW project\0"
- VALUE "FileDescription", "Visual-MinGW\0"
- VALUE "FileVersion", FULL_APP_VERSION
- VALUE "InternalName", "visual-mingw\0"
- VALUE "LegalCopyright", "Copyright (C) 2001 Manu B\0"
- VALUE "OriginalFilename", "visual-mingw.exe\0"
- VALUE "ProductName", "Visual-MinGW\0"
- VALUE "ProductVersion", FULL_APP_VERSION
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 0
- END
-END
-
+++ /dev/null
-/********************************************************************
-* Module: winui.cpp. This is part of WinUI.
-*
-* Purpose: WinUI main module. Contains procedures relative to User Interface
-* and general purpose procedures.
-*
-* Authors: Manu B.
-*
-* License: WinUI is covered by GNU General Public License,
-* Copyright (C) 2001 Manu B.
-* See license.htm for more details.
-*
-* Revisions:
-* Manu B. 11/19/01 OpenDlg & SaveDlg enhancement.
-* Manu B. 12/07/01 CIniFile created.
-* Manu B. 12/15/01 CWinApp created.
-*
-********************************************************************/
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <commctrl.h>
-#include <ctype.h>
-#include "winui.h"
-
-// Callback procedures.
-LRESULT CALLBACK MainWndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam);
-LRESULT CALLBACK ChildWndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam);
-LRESULT CALLBACK DlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam);
-
-// Declare a CMessageBox instance to use anywhere in the whole app.
-CMessageBox MsgBox;
-
-
-/********************************************************************
-* Function: char *StpCpy(char *dest, const char *src).
-*
-* Purpose: stpcpy clone.
-*
-* Revisions:
-*
-********************************************************************/
-char *StpCpy(char *dest, const char *src){
- while (*src != '\0'){
- *dest = *src;
- src++;
- dest++;
- }
-return dest;
-}
-
-size_t strcpylen(char *dest, const char *src){
- char * start = dest;
- while (*src != '\0'){
- *dest = *src;
- dest++;
- src++;
- }
- *dest = '\0';
-return (dest-start);
-}
-
-
-/********************************************************************
-* Class: CChrono.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CChrono::CChrono(){
- _time = 0;
-}
-
-CChrono::~CChrono(){
-}
-
-void CChrono::Start(void){
- _time = ::GetTickCount();
-}
-
-DWORD CChrono::Stop(void){
- DWORD diff = ::GetTickCount() - _time;
- _time = 0;
-return diff;
-}
-
-
-/********************************************************************
-* Class: Base Window class.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CWindow::CWindow(){
- _pParent = NULL;
- _hInst = 0;
- _hWnd = 0;
- _lParam = NULL;
-}
-
-CWindow::~CWindow(){
-}
-
-HWND CWindow::CreateEx(
- CWindow * pWindow,
- DWORD dwExStyle,
- LPCTSTR lpClassName,
- LPCTSTR lpWindowName,
- DWORD dwStyle,
- int x, int y, int nWidth, int nHeight,
- HMENU hMenu,
- LPVOID lpParam){
-
- // Store a pointer to parent class and to lpParam.
- _pParent = pWindow;
- _lParam = lpParam;
-
- // Get parent class handles.
- HWND hParent;
- HINSTANCE hInst;
-
- if(_pParent){
- // Have a parent window.
- hParent = _pParent->_hWnd;
- hInst = _pParent->_hInst;
- }else{
- // Parent window is desktop.
- hParent = 0;
- hInst = GetModuleHandle(NULL);
- }
-
- _hWnd = CreateWindowEx(
- dwExStyle,
- lpClassName,
- lpWindowName,
- dwStyle,
- x,
- y,
- nWidth,
- nHeight,
- hParent,
- (HMENU) hMenu,
- hInst,
- this); // Retrieve lpParam using this->_lParam.
-
-return _hWnd;
-}
-
-HWND CWindow::GetId(void){
-return _hWnd;
-}
-
-LONG CWindow::SetLong(int nIndex, LONG dwNewLong){
-return ::SetWindowLong(_hWnd, nIndex, dwNewLong);
-}
-
-LONG CWindow::GetLong(int nIndex){
-return ::GetWindowLong(_hWnd, nIndex);
-}
-
-LRESULT CWindow::SendMessage(UINT Msg, WPARAM wParam, LPARAM lParam){
-return ::SendMessage(_hWnd, Msg, wParam, lParam);
-}
-
-bool CWindow::SetPosition(HWND hInsertAfter, int x, int y, int width, int height, UINT uFlags){
-return ::SetWindowPos(_hWnd, hInsertAfter, x, y, width, height, uFlags);
-}
-
-bool CWindow::Show(int nCmdShow){
-return ::ShowWindow(_hWnd, nCmdShow);
-}
-
-bool CWindow::Hide(void){
-return ::ShowWindow(_hWnd, SW_HIDE);
-}
-
-HWND CWindow::SetFocus(void){
-return ::SetFocus(_hWnd);
-}
-
-/********************************************************************
-* Class: CWinBase.
-*
-* Purpose: Base Application class.
-*
-* Revisions:
-*
-********************************************************************/
-CWinBase::CWinBase(){
- hPrevInst = 0;
- lpCmdLine = NULL;
- nCmdShow = SW_SHOW;
-
- isWinNT = false;
- strcpy( appName, "CWinBase");
-}
-
-CWinBase::~CWinBase(){
-}
-
-bool CWinBase::Init(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
- int nCmdShow){
- _hInst = hInstance;
- hPrevInst = hPrevInstance;
- lpCmdLine = lpCmdLine;
- nCmdShow = nCmdShow;
-return true;
-}
-
-bool CWinBase::SetName(char * name, char * version){
- strcpy(appName, name);
- strcat(appName, " ");
-
- if(version)
- strcat(appName, version);
-return true;
-}
-
-bool CWinBase::IsWinNT(void){
-
- OSVERSIONINFO osv = {sizeof(OSVERSIONINFO), 0, 0, 0, 0, ""};
- GetVersionEx(&osv);
-
- isWinNT = (osv.dwPlatformId == VER_PLATFORM_WIN32_NT);
-return isWinNT;
-}
-
-void CWinBase::ParseCmdLine(char * outBuff){
- int len = 0;
- outBuff[len] = '\0';
-
- LPTSTR cmdLine = GetCommandLine();
-
- while (*cmdLine){
- if (*cmdLine == '\"'){
- cmdLine++;
- while (*cmdLine && *cmdLine != '\"'){
- outBuff[len] = *cmdLine;
- len++;
- cmdLine++;
- }
- break;
- }else{
- while (*cmdLine && *cmdLine != ' '){
- outBuff[len] = *cmdLine;
- len++;
- cmdLine++;
- }
- break;
- }
- }
- outBuff[len] = '\0';
- SplitFileName(outBuff, 0);
-return;
-}
-
-
-/********************************************************************
-* Class: CSDIBase.
-*
-* Purpose: Base SDI class.
-*
-* Revisions:
-*
-********************************************************************/
-CSDIBase::CSDIBase(){
-mainClass[0] = 0;
-hAccel = NULL;
-}
-
-CSDIBase::~CSDIBase(){
-}
-
-int CSDIBase::Run(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
- int nCmdShow){
- Init(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
- if (!CustomInit()){
- Release();
- return 1;
- }
-
- MSG Msg;
- if (CreateUI()){
- while(GetMessage(&Msg, NULL, 0, 0)){
- if (!TranslateAccelerator(_hWnd, hAccel, &Msg)){
- TranslateMessage(&Msg);
- DispatchMessage(&Msg);
- }
- }
- }else{
- MsgBox.DisplayFatal("CreateUI() failed !");
- }
-
- Release();
-return Msg.wParam;
-}
-
-bool CSDIBase::CustomInit(void){
-return true;
-}
-
-bool CSDIBase::Release(void){
-return true;
-}
-
-bool CSDIBase::CreateUI(void){
-return false;
-}
-
-bool CSDIBase::MainRegisterEx(const char * className){
- strcpy(mainClass, className);
-
- // Default values.
- wc.cbSize = sizeof(WNDCLASSEX);
- wc.lpfnWndProc = MainWndProc;
- wc.hInstance = _hInst;
- wc.lpszClassName = mainClass;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = sizeof(CSDIBase *);
-return RegisterClassEx(&wc);
-}
-
-LRESULT CALLBACK CSDIBase::CMainWndProc(UINT Message, WPARAM wParam, LPARAM lParam){
-
- switch (Message){
- case WM_DESTROY:
- PostQuitMessage (0);
- return 0;
- }
-
-return DefWindowProc(_hWnd, Message, wParam, lParam);
-}
-
-/********************************************************************
-* Callback procedure.
-********************************************************************/
-LRESULT CALLBACK MainWndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam){
- // Get a pointer to the CWindow class that owns this window.
- CSDIBase * pSdiBase = (CSDIBase *) (GetWindowLong(hwnd, 0));
-
- if (pSdiBase == 0){ // The pointer isn't set yet.
- if (Message == WM_NCCREATE){
- // First, get the CSDIBase pointer.
- pSdiBase = (CSDIBase *) ((CREATESTRUCT *)lParam)->lpCreateParams;
-
- // Attach pSdiBase and lParam to the window.
- SetWindowLong(hwnd, 0, (LONG)(pSdiBase));
- SetWindowLong(hwnd, GWL_USERDATA, (LONG) pSdiBase->_lParam);
-
- // Store window handle.
- pSdiBase->_hWnd = hwnd;
-
- // Let Windows continue the job.
- return pSdiBase->CMainWndProc(Message, wParam, lParam);
- }else{
- return DefWindowProc(hwnd, Message, wParam, lParam);
- }
- }
-return pSdiBase->CMainWndProc(Message, wParam, lParam);
-}
-
-
-/********************************************************************
-* Class: CMDIBase.
-*
-* Purpose: Base MDI class.
-*
-* Revisions:
-*
-********************************************************************/
-CMDIBase::CMDIBase(){
-}
-
-CMDIBase::~CMDIBase(){
-}
-
-bool CMDIBase::ChildRegisterEx(const char * className){
- strcpy(MdiClient.childClass, className);
-
- // Default values.
- wc.cbSize = sizeof(WNDCLASSEX);
- wc.lpfnWndProc = ChildWndProc;
- wc.hInstance = _hInst;
- wc.lpszClassName = className;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 8;//sizeof(CMDIBase *);
-return RegisterClassEx(&wc);
-}
-
-int CMDIBase::Run(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
- int nCmdShow){
- Init(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
- if (!CustomInit()){
- Release();
- return 1;
- }
-
- MSG Msg;
- if (CreateUI()){
- while(GetMessage(&Msg, NULL, 0, 0)){
- if (!TranslateAccelerator(_hWnd, hAccel, &Msg)){
- if (!TranslateMDISysAccel(MdiClient.GetId(), &Msg)){
- TranslateMessage(&Msg);
- DispatchMessage(&Msg);
- }
- }
- }
- }else{
- MsgBox.DisplayFatal("CreateUI() failed !");
- }
-
- Release();
-return Msg.wParam;
-}
-
-bool CMDIBase::CustomInit(void){
-return true;
-}
-
-bool CMDIBase::Release(void){
-return true;
-}
-
-bool CMDIBase::CreateUI(void){
-return false;
-}
-
-LRESULT CALLBACK CMDIBase::CMainWndProc(UINT, WPARAM, LPARAM){
-return 0;
-}
-
-LRESULT CALLBACK CMDIBase::CChildWndProc(CWindow *, UINT, WPARAM, LPARAM){
-return 0;
-}
-
-/********************************************************************
-* Child window callback procedure.
-********************************************************************/
-LRESULT CALLBACK ChildWndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam){
- // Get a pointer to the CWindow class that owns this window.
- CMDIChild * pMdiChild = (CMDIChild *) (GetWindowLong(hwnd, 0));
-
- if (pMdiChild == 0){ // The pointer isn't set yet.
- if (Message == WM_NCCREATE){
- // First, get the CMDIChild pointer.
- pMdiChild = (CMDIChild *) ((MDICREATESTRUCT *) ((CREATESTRUCT *)lParam)->lpCreateParams)->lParam;
-
- // Attach pMdiChild and lParam to the window.
- //MsgBox.DisplayLong((long) pMdiChild);
-
- SetWindowLong(hwnd, 0, (long)(pMdiChild));
- SetWindowLong(hwnd, GWL_USERDATA, (long) pMdiChild->_lParam);
-
- // Store window handle.
- pMdiChild->_hWnd = hwnd;
-
- // Attach to a childList so that the list can destroy all MdiChild objects.
- ((CMDIClient *) pMdiChild->_pParent)->childList.InsertFirst(pMdiChild);
-
- // Let Windows continue the job.
- return pMdiChild->_pFrame->CChildWndProc(pMdiChild, Message, wParam, lParam);
- }else{
- return DefWindowProc(hwnd, Message, wParam, lParam);
- }
-
- // Free pMdiChild object.
- }else if (Message == WM_NCDESTROY){
- ((CMDIClient *) pMdiChild->_pParent)->childList.Destroy(pMdiChild);
- }
-return pMdiChild->_pFrame->CChildWndProc(pMdiChild, Message, wParam, lParam);
-}
-
-
-/********************************************************************
-* Class: CMDIClient.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CMDIClient::CMDIClient(){
- initialized = false;
- childClass[0] = 0;
-}
-
-CMDIClient::~CMDIClient(){
-}
-
-void CMDIClient::Init(int menuIndex, UINT idFirstChild){
- nPos = menuIndex;
-
- // ID of first created child.
- ccs.idFirstChild = idFirstChild;
- initialized = true;
-}
-
-HWND CMDIClient::CreateEx(CWindow * pWindow, DWORD dwExStyle, DWORD dwStyle, UINT resId){
-
- if (!pWindow || !initialized)
- return 0;
-
- // Store a pointer to parent class.
- _pParent = pWindow;
-
- // Get parent class handles.
- _hInst = _pParent->_hInst;
-
- // Get our "Window menu" handle.
- ccs.hWindowMenu = GetSubMenu(GetMenu(_pParent->_hWnd), nPos);
-
- _hWnd = CreateWindowEx(
- dwExStyle,
- "mdiclient",
- NULL,
- dwStyle,
- 0,
- 0,
- 100,
- 100,
- _pParent->_hWnd,
- (HMENU) resId,
- _hInst,
- (LPVOID) &ccs);
-
-return _hWnd;
-}
-
-LPARAM CMDIClient::GetParam(LPARAM lParam){
- MDICREATESTRUCT *mcs = (MDICREATESTRUCT *) ((CREATESTRUCT *) lParam)->lpCreateParams;
-return mcs->lParam;
-}
-
-
-/********************************************************************
-* Class: CMDIChild.
-*
-* Purpose: Base Windows Class.
-*
-* Revisions:
-*
-********************************************************************/
-CMDIChild::CMDIChild(){
- _pFrame = NULL;
-}
-
-CMDIChild::~CMDIChild(){
-}
-
-HWND CMDIChild::CreateEx(CMDIClient * pMdiClient, DWORD dwExStyle, DWORD dwStyle, char * caption, UINT resId, LPVOID lParam){
-
- if (!pMdiClient || !pMdiClient->initialized)
- return 0;
-
- // Store pointers, lParam and _hInst.
- _pParent = pMdiClient;
- _pFrame = (CMDIBase *) pMdiClient->_pParent; // Owner of CChildWndProc.
- _lParam = lParam;
- _hInst = _pParent->_hInst;
-
- HWND hwnd = CreateWindowEx(
- dwExStyle,
- pMdiClient->childClass,
- caption,
- dwStyle,
- 0,
- 0,
- 100,
- 100,
- _pParent->_hWnd,
- (HMENU) resId,
- _hInst,
- this);
-
-return hwnd;
-}
-
-
-/********************************************************************
-* Class: CDlgBase.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CDlgBase::CDlgBase(){
-}
-
-CDlgBase::~CDlgBase(){
-}
-
-HWND CDlgBase::Create(CWindow * pWindow, WORD wResId, RECT * Pos, LPARAM lParam){
- HWND hwnd = 0;
- if (pWindow){
- hwnd = CreateParam(pWindow, wResId, lParam);
- if (Pos)
- SetPosition(0, Pos->left, Pos->top, Pos->right, Pos->bottom, 0);
- }
-return hwnd;
-}
-
-int CDlgBase::CreateModal(CWindow * pWindow, WORD wResId, LPARAM lParam){
- if (pWindow == NULL)
- return 0;
-
- // Don't create a modal dialog if a modeless one already exists.
- else if (_hWnd != 0)
- return 0;
-
- // Store a pointer to parent class.
- _pParent = pWindow;
- _lParam = (LPVOID) lParam;
-
- // Get parent class handles.
- _hInst = _pParent->_hInst;
-
-return ::DialogBoxParam(_hInst, MAKEINTRESOURCE(wResId), _pParent->_hWnd,
- (DLGPROC) DlgProc, (long) this);
-}
-
-HWND CDlgBase::CreateParam(CWindow * pWindow, WORD wResId, LPARAM lParam){
- if (pWindow == NULL)
- return 0;
- // Don't create a dialog twice.
- else if (_hWnd != 0)
- return _hWnd;
-
- // Store a pointer to parent class.
- _pParent = pWindow;
- _lParam = (LPVOID) lParam;
-
- // Get parent class handles.
- _hInst = _pParent->_hInst;
-
- HWND hwnd = CreateDialogParam(_hInst,
- MAKEINTRESOURCE(wResId),
- _pParent->_hWnd,
- (DLGPROC) DlgProc,
- (long) this);
-return hwnd;
-}
-
-BOOL CDlgBase::EndDlg(int nResult){
- if (_hWnd){
- BOOL result = ::EndDialog(_hWnd, nResult);
- _hWnd = 0;
- return result;
- }
-return false;
-}
-
-HWND CDlgBase::GetItem(int nIDDlgItem){
-return ::GetDlgItem(_hWnd, nIDDlgItem);
-}
-
-BOOL CDlgBase::SetItemText(HWND hItem, LPCTSTR lpString){
-return ::SendMessage(hItem, WM_SETTEXT, 0, (long)lpString);
-}
-
-UINT CDlgBase::GetItemText(HWND hItem, LPTSTR lpString, int nMaxCount){
-return ::SendMessage(hItem, WM_GETTEXT, nMaxCount, (long)lpString);
-}
-
-LRESULT CALLBACK CDlgBase::CDlgProc(UINT Message, WPARAM, LPARAM){
-
- switch(Message){
- case WM_INITDIALOG:
- return TRUE;
-
- case WM_CLOSE:
- EndDlg(0);
- break;
- }
-return FALSE;
-}
-
-
-/********************************************************************
-* Class: CTabbedDlg.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CTabbedDlg::CTabbedDlg(){
- _hWndTab = 0;
- Pos.left = 0;
- Pos.top = 0;
- Pos.right = 100;
- Pos.bottom = 100;
-}
-
-CTabbedDlg::~CTabbedDlg(){
-}
-
-bool CTabbedDlg::SetChildPosition(HWND hChild){
- if (!_hWndTab)
- return false;
- // Get tab's display area.
- RECT area;
- ::GetWindowRect(_hWndTab, &area);
- ::ScreenToClient(_hWnd, (POINT *) &area.left);
- ::ScreenToClient(_hWnd, (POINT *) &area.right);
- ::SendMessage(_hWndTab, TCM_ADJUSTRECT, FALSE, (LPARAM) &area);
- ::CopyRect(&Pos, &area);
-
- // Get child dialog's rect.
- RECT child;
- ::GetWindowRect(hChild, &child);
- ::ScreenToClient(_hWnd, (POINT *) &child.left);
- ::ScreenToClient(_hWnd, (POINT *) &child.right);
-
- // Center child dialog.
- int childWidth = child.right-child.left;
- int childHeight = child.bottom-child.top;
- int hMargin = ((area.right-area.left)-childWidth)/2;
- int vMargin = ((area.bottom-area.top)-childHeight)/2;
- Pos.left += hMargin;
- Pos.top += vMargin;
- Pos.right = childWidth;
- Pos.bottom = childHeight;
-
-return ::SetWindowPos(hChild, 0, Pos.left, Pos.top, Pos.right, Pos.bottom, 0);
-}
-
-void CTabbedDlg::OnNotify(int, LPNMHDR notify){
- // Dispatch tab control messages.
- switch (notify->code){
- case TCN_SELCHANGING:
- OnSelChanging(notify);
- break;
-
- case TCN_SELCHANGE:
- OnSelChange(notify);
- break;
- }
-}
-
-void CTabbedDlg::OnSelChanging(LPNMHDR notify){
- // Hide child dialog that is deselected.
- if (notify->hwndFrom == _hWndTab){
- CWindow * pPaneDlg = (CWindow *) GetParam();
- if (pPaneDlg){
- if (pPaneDlg->_hWnd)
- pPaneDlg->Hide();
- }
- }
-}
-
-void CTabbedDlg::OnSelChange(LPNMHDR notify){
- // Show child dialog that is selected.
- if (notify->hwndFrom == _hWndTab){
- CWindow * pPaneDlg = (CWindow *) GetParam();
- if (pPaneDlg){
- if (pPaneDlg->_hWnd)
- pPaneDlg->Show();
- pPaneDlg->SetFocus();
- }
- }
-}
-
-LPARAM CTabbedDlg::GetParam(void){
- if (!_hWndTab)
- return false;
- int iItem = ::SendMessage(_hWndTab, TCM_GETCURSEL, 0, 0);
-
- tcitem.mask = TCIF_PARAM;
- BOOL result = ::SendMessage(_hWndTab, TCM_GETITEM, iItem, (long) &tcitem);
- if (result)
- return tcitem.lParam;
-return 0;
-}
-
-
-/********************************************************************
-* Callback procedure.
-********************************************************************/
-LRESULT CALLBACK DlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam){
- // Get a pointer to the CWindow class that owns this window.
- CDlgBase * pDlgBase = (CDlgBase *) (GetWindowLong(hwnd, DWL_USER));
-
- if (pDlgBase == 0){ // The pointer isn't set yet.
- if (Message == WM_INITDIALOG){
- // First, get the CDlgBase pointer.
- pDlgBase = (CDlgBase *) lParam;
-
- // Attach pDlgBase and lParam to the window.
- SetWindowLong(hwnd, DWL_USER, (LONG) pDlgBase);
- SetWindowLong(hwnd, GWL_USERDATA, (LONG) pDlgBase->_lParam);
-
- // Store window handle.
- pDlgBase->_hWnd = hwnd;
-
- // Let Windows continue the job.
- return pDlgBase->CDlgProc(Message, wParam, (LONG) pDlgBase->_lParam);
- }else{
- return FALSE;
- }
- }
-return pDlgBase->CDlgProc(Message, wParam, lParam);
-}
-
-
-/********************************************************************
-* Class: CToolBar.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CToolBar::CToolBar(){
-}
-
-CToolBar::~CToolBar(){
-}
-
-HWND CToolBar::CreateEx(CWindow * pWindow, DWORD dwExStyle, DWORD dwStyle, UINT resId){
-
- if (!pWindow)
- return 0;
-
- // Store a pointer to parent class.
- _pParent = pWindow;
-
- // Get parent class handles.
- _hInst = _pParent->_hInst;
-
- _hWnd = CreateWindowEx(
- dwExStyle,
- TOOLBARCLASSNAME,
- NULL,
- dwStyle,
- 0,
- 0,
- 100,
- 100,
- _pParent->_hWnd,
- (HMENU) resId,
- _hInst,
- NULL);
-
- if(_hWnd)
- // For backward compatibility.
- ::SendMessage(_hWnd, TB_BUTTONSTRUCTSIZE, (WPARAM) sizeof(TBBUTTON), 0);
-return _hWnd;
-}
-
-LRESULT CToolBar::AddBitmap(UINT resId, int nBmp, HINSTANCE hInstance){
- if (!_hWnd)
- return -1;
-
- // Add the bitmap containing button images to the toolbar.
- TBADDBITMAP tbab;
- if (hInstance == HINST_COMMCTRL)
- tbab.hInst = hInstance;
- else
- tbab.hInst = _hInst;
- tbab.nID = resId;
-return ::SendMessage(_hWnd, TB_ADDBITMAP, (WPARAM) nBmp, (WPARAM) &tbab);
-}
-
-BOOL CToolBar::AddButtons(TBBUTTON * tbButtons, UINT numButtons){
- if (!_hWnd)
- return FALSE;
-
- // Add the buttons to the toolbar.
-return ::SendMessage(_hWnd, TB_ADDBUTTONS, (WPARAM) numButtons, (LPARAM) tbButtons);
-}
-
-
-/********************************************************************
-* Class: CStatusBar.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CStatusBar::CStatusBar(){
- numParts = 0;
-}
-
-CStatusBar::~CStatusBar(){
-}
-
-HWND CStatusBar::CreateEx(CWindow * pWindow, DWORD dwExStyle, DWORD dwStyle, UINT resId){
-
- if (!pWindow)
- return 0;
-
- // Store a pointer to parent class.
- _pParent = pWindow;
-
- // Get parent class handles.
- _hInst = _pParent->_hInst;
-
- _hWnd = CreateWindowEx(
- dwExStyle,
- STATUSCLASSNAME,
- NULL,
- dwStyle,
- 0,
- 0,
- 100,
- 100,
- _pParent->_hWnd,
- (HMENU) resId,
- _hInst,
- NULL);
-
-return _hWnd;
-}
-
-void CStatusBar::SetParts(int nParts, int * aWidths){
- numParts = nParts;
- ::SendMessage(_hWnd, SB_SETPARTS, nParts, (LPARAM) aWidths);
-}
-
-void CStatusBar::WriteString(char * string, int part){
- if (part <= numParts)
- ::SendMessage(_hWnd, SB_SETTEXT, part, (LPARAM) string);
-}
-
-void CStatusBar::WriteLong(long number, int part){
- char longbuf[10];
- itoa (number, longbuf, 10);
- WriteString(longbuf, part);
-}
-
-
-/********************************************************************
-* Class: CTabCtrl.
-*
-* Purpose: Tab control.
-*
-* Revisions:
-*
-********************************************************************/
-CTabCtrl::CTabCtrl(){
-}
-
-CTabCtrl::~CTabCtrl(){
-}
-
-HWND CTabCtrl::CreateEx(CWindow * pWindow, DWORD dwExStyle, DWORD dwStyle, UINT resId, LPVOID lpParam){
-
- if (!pWindow)
- return 0;
-
- // TODO also use lpParam for each control ?
- // Store a pointer to parent class and to lpParam.
- _pParent = pWindow;
- _lParam = lpParam;
-
- // Get parent class handles.
- _hInst = _pParent->_hInst;
-
- _hWnd = CreateWindowEx(
- dwExStyle,
- WC_TABCONTROL,
- NULL,
- dwStyle,
- 0,
- 0,
- 100,
- 100,
- _pParent->_hWnd,
- (HMENU) resId,
- _hInst,
- lpParam);
-
-return _hWnd;
-}
-
-int CTabCtrl::InsertItem(int iItem, UINT mask, DWORD dwState, DWORD dwStateMask,
- LPTSTR pszText, int cchTextMax, int iImage, LPARAM lParam){
-
- tcitem.mask = mask;
-
- #if (_WIN32_IE >= 0x0300)
- tcitem.dwState = dwState;
- tcitem.dwStateMask = dwStateMask;
- #else
- tcitem.lpReserved1 = 0;
- tcitem.lpReserved2 = 0;
- #endif
-
- tcitem.pszText = pszText;
- tcitem.cchTextMax = cchTextMax;
- tcitem.iImage = iImage;
- tcitem.lParam = lParam;
-
-return ::SendMessage(_hWnd, TCM_INSERTITEM, iItem, (long) &tcitem);
-}
-
-BOOL CTabCtrl::SetItem_Param(int iItem, LPARAM lParam){
-
- tcitem.mask = TCIF_PARAM;
- tcitem.lParam = lParam;
-
-return ::SendMessage(_hWnd, TCM_SETITEM, iItem, (long) &tcitem);
-}
-
-int CTabCtrl::GetCurSel(void){
-
-return ::SendMessage(_hWnd, TCM_GETCURSEL, 0, 0);
-}
-
-LPARAM CTabCtrl::GetItem_Param(int iItem){
-
- tcitem.mask = TCIF_PARAM;
- BOOL result = ::SendMessage(_hWnd, TCM_GETITEM, iItem, (long) &tcitem);
- if (result)
- return tcitem.lParam;
-return 0;
-}
-
-
-/********************************************************************
-* Class: CTreeView.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CTreeView::CTreeView(){
-}
-
-CTreeView::~CTreeView(){
-}
-
-HWND CTreeView::CreateEx(CWindow * pWindow, DWORD dwExStyle, DWORD dwStyle, UINT resId, LPVOID lpParam){
-
- if (!pWindow)
- return 0;
-
- // Store a pointer to parent class.
- _pParent = pWindow;
-
- // Get parent class handles.
- _hInst = _pParent->_hInst;
-
- _hWnd = CreateWindowEx(
- dwExStyle,
- WC_TREEVIEW,
- NULL,
- dwStyle,
- 0,
- 0,
- 100,
- 100,
- _pParent->_hWnd,
- (HMENU) resId,
- _hInst,
- lpParam);
-
-return _hWnd;
-}
-
-HTREEITEM CTreeView::CreateItem(HTREEITEM hParent, HTREEITEM hInsertAfter, int iImage, LPTSTR pszText, LPARAM lParam){
-
- tvi.hParent = hParent;
- tvi.hInsertAfter = hInsertAfter;
-
- tvi.item.mask = TVIF_STATE | TVIF_TEXT | TVIF_IMAGE
- | TVIF_SELECTEDIMAGE | TVIF_PARAM ;
- tvi.item.stateMask = TVIS_EXPANDED;
- tvi.item.state = TVIS_EXPANDED;
- tvi.item.pszText = pszText;
- tvi.item.iImage = iImage;
- tvi.item.iSelectedImage = iImage;
- tvi.item.lParam = (LPARAM) lParam;
-
-return (HTREEITEM) ::SendMessage(_hWnd, TVM_INSERTITEM, 0, (LPARAM)&tvi);
-}
-
-LPARAM CTreeView::GetSelectedItemParam(void){
- _TvItem.hItem = TreeView_GetSelection(_hWnd);
- _TvItem.mask = TVIF_PARAM;
- _TvItem.lParam = 0;
- TreeView_GetItem(_hWnd, (long) &_TvItem);
-return _TvItem.lParam;
-}
-
-/********************************************************************
-* Class: CListView.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CListView::CListView(){
- lastRow = 0;
-}
-
-CListView::~CListView(){
-}
-
-HWND CListView::CreateEx(CWindow * pWindow, DWORD dwExStyle, DWORD dwStyle, UINT resId){
-
- if (!pWindow)
- return 0;
-
- // Store a pointer to parent class.
- _pParent = pWindow;
-
- // Get parent class handles.
- _hInst = _pParent->_hInst;
-
- _hWnd = CreateWindowEx(
- dwExStyle,
- WC_LISTVIEW,
- NULL,
- dwStyle,
- 0,
- 0,
- 100,
- 100,
- _pParent->_hWnd,
- (HMENU) resId,
- _hInst,
- NULL);
-
-return _hWnd;
-}
-
-void CListView::Clear(void){
- // Win9x ListView clear is too slow.
- int numitems = ::SendMessage(_hWnd, LVM_GETITEMCOUNT, 0, 0);
- for (int n = 0; n < numitems; n++){
- ::SendMessage(_hWnd, LVM_DELETEITEM, (WPARAM) 0, 0);
- }
- lastRow = 0;
-}
-
-
-/********************************************************************
-* Class: CScintilla.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CScintilla::CScintilla(){
-}
-
-CScintilla::~CScintilla(){
-}
-
-HWND CScintilla::CreateEx(CWindow * pWindow, DWORD dwExStyle, DWORD dwStyle, UINT resId, LPVOID lpParam){
-
- if (!pWindow)
- return 0;
-
- // Store a pointer to parent class.
- _pParent = pWindow;
-
- // Get parent class handles.
- _hInst = _pParent->_hInst;
-
- _hWnd = CreateWindowEx(
- dwExStyle,
- "Scintilla",
- NULL,
- dwStyle,
- 0,
- 0,
- 100,
- 100,
- _pParent->_hWnd,
- (HMENU) resId,
- _hInst,
- lpParam);
-
-return _hWnd;
-}
-
-
-/********************************************************************
-* Class: CSplitter.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CSplitter::CSplitter(){
- Pane1 = NULL;
- Pane2 = NULL;
- size = 4;
- p = 0;
- isActive = false;
- initialized = false;
-}
-
-CSplitter::~CSplitter(){
-}
-
-void CSplitter::Init(CWindow * pane1, CWindow * pane2, bool vertical,
- int barPos, int barMode){
- Pane1 = pane1;
- Pane2 = pane2;
-
- if(Pane1 && Pane2)
- initialized = true;
-
- isVertical = vertical;
-
- p = barPos;
- mode = barMode;
-}
-
-bool CSplitter::Show(int){
-return false;
-}
-
-bool CSplitter::Hide(void){
-return false;
-}
-
-bool CSplitter::SetPosition(HWND, int x, int y, int width, int height, UINT){
- pos.left = x;
- pos.top = y;
- pos.right = width;
- pos.bottom = height;
-
- if(isVertical)
- SetVertPosition();
- else
- SetHorzPosition();
-return true;
-}
-
-void CSplitter::SetVertPosition(void){
- psize = p+size;
-
- barPos.left = pos.left+p;
- barPos.top = pos.top;
- barPos.right = size;
- barPos.bottom = pos.bottom;
-
- Pane1->SetPosition(0,
- pos.left,
- pos.top,
- p,
- pos.bottom,
- 0);
-
- Pane2->SetPosition(0,
- pos.left +psize,
- pos.top,
- pos.right -psize,
- pos.bottom,
- 0);
-}
-
-void CSplitter::SetHorzPosition(void){
- psize = p+size;
-
- barPos.left = pos.left;
- barPos.top = pos.top+pos.bottom-psize;
- barPos.right = pos.right;
- barPos.bottom = size;
-
- Pane1->SetPosition(0,
- pos.left,
- pos.top,
- pos.right,
- pos.bottom -psize,
- 0);
-
- Pane2->SetPosition(0,
- pos.left,
- pos.top +pos.bottom-p,
- pos.right,
- p,
- 0);
-}
-
-bool CSplitter::HaveMouse(HWND hwnd, short, short){
- POINT ptCursor;
- ::GetCursorPos(&ptCursor);
- POINT ptClient = ptCursor;
- ::ScreenToClient(hwnd, &ptClient);
-
- if ( ptClient.x >= barPos.left
- && ptClient.x <= barPos.left+barPos.right
- && ptClient.y >= barPos.top
- && ptClient.y <= barPos.top+barPos.bottom){
- return true;
- }
-return false;
-}
-
-bool CSplitter::OnSetCursor(HWND hwnd, LPARAM){
- if(HaveMouse(hwnd, 0, 0)){
- if (isVertical){
- ::SetCursor(::LoadCursor(NULL, IDC_SIZEWE));
- return true;
- }else{
- ::SetCursor(::LoadCursor(NULL, IDC_SIZENS));
- return true;
- }
- }
-return false;
-}
-
-bool CSplitter::OnLButtonDown(HWND hwnd, short xPos, short yPos){
- if (HaveMouse(hwnd, 0, 0)){
- // Begin of mouse capture.
- isActive = true;
- ::SetCapture(hwnd);
-
- // Save initial mouse position.
- initialPos.x = xPos;
- initialPos.y = yPos;
-
- // Converts bar position for Xor bar.
- POINT xorPos;
- RECT rect;
- xorPos.x = barPos.left;
- xorPos.y = barPos.top;
-
- ClientToWindow(hwnd, &xorPos, &rect);
-
- // Draw the Xor bar.
- HDC hdc;
- hdc = GetWindowDC(hwnd);
- DrawXorBar(hdc, xorPos.x, xorPos.y, barPos.right, barPos.bottom);
-
- // Save initial position for future erasing.
- initialXorPos.x = xorPos.x;
- initialXorPos.y = xorPos.y;
-
- ReleaseDC(hwnd, hdc);
- }
-return isActive;
-}
-
-void CSplitter::OnLButtonUp(HWND hwnd, short xPos, short yPos){
- if (isActive) {
-
- // Erase the Xor bar *********************
- HDC hdc;
- hdc = GetWindowDC(hwnd);
- DrawXorBar(hdc, initialXorPos.x, initialXorPos.y, barPos.right, barPos.bottom);
- ReleaseDC(hwnd, hdc);
-
- // Move Splitter to new position *******************
- newPos.x = xPos;
- newPos.y = yPos;
-
- if(isVertical)
- deltaPos = newPos.x - initialPos.x;
- else
- deltaPos = newPos.y - initialPos.y;/**/
-
- if (deltaPos != 0)
- Move(barPos.left + deltaPos, barPos.top + deltaPos);
-
- // End of capture.
- ::ReleaseCapture();
- isActive = false;
- }
-}
-
-void CSplitter::OnMouseMove(HWND hwnd, short xPos, short yPos){
- if (isActive) {
- newPos.x = xPos;
- newPos.y = yPos;
-
- // Draw the Xor bar *********************
- POINT xorPos;
- RECT rect;
-
- if(isVertical){
- deltaPos = newPos.x - initialPos.x;
- xorPos.x = barPos.left + deltaPos;
- xorPos.y = barPos.top;
-
- // Convert coordinates.
- ClientToWindow(hwnd, &xorPos, &rect);
-
- // Convert rect.
- OffsetRect(&rect, -rect.left, -rect.top);
-
- if(xorPos.x < 20)
- xorPos.x = 20;
- if(xorPos.x > rect.right-24)
- xorPos.x = rect.right-24;
- }else{
- deltaPos = newPos.y - initialPos.y;
- xorPos.x = barPos.left;
- xorPos.y = barPos.top + deltaPos;
-
- // Convert coordinates.
- ClientToWindow(hwnd, &xorPos, &rect);
-
- // Convert rect.
- OffsetRect(&rect, -rect.left, -rect.top);
-
- if(xorPos.y < 20)
- xorPos.y = 20;
- if(xorPos.y > rect.bottom-24)
- xorPos.y = rect.bottom-24;
- }
-
- HDC hdc;
- hdc = GetWindowDC(hwnd);
- DrawXorBar(hdc, initialXorPos.x, initialXorPos.y, barPos.right, barPos.bottom);
- DrawXorBar(hdc, xorPos.x, xorPos.y, barPos.right, barPos.bottom);
- initialXorPos.x = xorPos.x;
- initialXorPos.y = xorPos.y;
- ReleaseDC(hwnd, hdc);
- }
-}
-
-void CSplitter::Move(int mouseX, int mouseY){
-
- if(isVertical){
- p = mouseX;
- SetVertPosition();
- }else{
- p = pos.bottom - size - mouseY+pos.top;
- SetHorzPosition();
- }
-}
-
-void CSplitter::ClientToWindow(HWND hwnd, POINT * pt, RECT * rect){
- // Bar position.
- ClientToScreen(hwnd, pt);
- // Window rect.
- GetWindowRect(hwnd, rect);
-
- // Convert the bar coordinates relative to the top-left of the window.
- pt->x -= rect->left;
- pt->y -= rect->top;
-}
-
-void CSplitter::DrawXorBar(HDC hdc, int x1, int y1, int width, int height){
- static WORD _dotPatternBmp[8] =
- {
- 0x00aa, 0x0055, 0x00aa, 0x0055,
- 0x00aa, 0x0055, 0x00aa, 0x0055
- };
-
- HBITMAP hbm;
- HBRUSH hbr, hbrushOld;
-
- hbm = CreateBitmap(8, 8, 1, 1, _dotPatternBmp);
- hbr = CreatePatternBrush(hbm);
-
- SetBrushOrgEx(hdc, x1, y1, 0);
- hbrushOld = (HBRUSH)SelectObject(hdc, hbr);
-
- PatBlt(hdc, x1, y1, width, height, PATINVERT);
-
- SelectObject(hdc, hbrushOld);
-
- DeleteObject(hbr);
- DeleteObject(hbm);
-}
-
-
-/********************************************************************
-* Class: CBitmap.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CBitmap::CBitmap(){
- hBitmap = NULL;
-}
-
-CBitmap::~CBitmap(){
- if (hBitmap)
- DeleteObject(hBitmap);
-}
-
-HBITMAP CBitmap::Load(CWindow * pWindow, LPCTSTR lpBitmapName){
- if (!hBitmap) // Don't create twice.
- hBitmap = ::LoadBitmap(pWindow->_hInst, lpBitmapName);
-return hBitmap;
-}
-
-HBITMAP CBitmap::Load(CWindow * pWindow, WORD wResId){
- if (!hBitmap) //Don't create twice.
- hBitmap = ::LoadBitmap(pWindow->_hInst, MAKEINTRESOURCE(wResId));
-return hBitmap;
-}
-
-BOOL CBitmap::Destroy(void){
- BOOL result = false;
- if (hBitmap)
- result = DeleteObject(hBitmap);
-return result;
-}
-
-
-/********************************************************************
-* Class: CImageList.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CImageList::CImageList(){
- hImgList = NULL;
-}
-
-CImageList::~CImageList(){
- if (hImgList)
- ImageList_Destroy(hImgList);
-}
-
-HIMAGELIST CImageList::Create(int cx, int cy, UINT flags, int cInitial, int cGrow){
- if (!hImgList) // Don't create twice.
- hImgList = ::ImageList_Create(cx, cy, flags, cInitial, cGrow);
-return hImgList;
-}
-
-int CImageList::AddMasked(CBitmap * pBitmap, COLORREF crMask){
-return ImageList_AddMasked(hImgList, pBitmap->hBitmap, crMask);
-}
-
-
-/********************************************************************
-* Class: CMessageBox.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CMessageBox::CMessageBox(){
- hParent = 0;
- strcpy(caption, "CMessageBox");
-}
-
-CMessageBox::~CMessageBox(){
-}
-
-void CMessageBox::SetParent(HWND hwnd){
- hParent = hwnd;
-}
-
-void CMessageBox::SetCaption(char * string){
- strcpy(caption, string);
-}
-
-void CMessageBox::DisplayString(char * string, char * substring, UINT uType){
- if(!substring){
- MessageBox (hParent, string, caption, uType);
- }else{
- sprintf(msgBuf, string, substring);
- MessageBox (hParent, msgBuf, caption, uType);
- }
-}
-
-void CMessageBox::DisplayFatal(char * string, char * substring){
- DisplayString(string, substring, MB_OK | MB_ICONERROR);
-}
-
-void CMessageBox::DisplayWarning(char * string, char * substring){
- DisplayString(string, substring, MB_OK | MB_ICONWARNING);
-}
-
-void CMessageBox::DisplayLong(long number){
- char longbuf[10];
- itoa (number, longbuf, 10);
- DisplayString(longbuf);
-}
-
-void CMessageBox::DisplayRect(RECT * rect){
- if (!rect)
- return;
- sprintf(msgBuf, "left: %ld top: %ld right: %ld bottom: %ld", rect->left, rect->top, rect->right, rect->bottom);
- MessageBox (hParent, msgBuf, caption, MB_OK);
-}
-
-int CMessageBox::Ask(char * question, bool canCancel){
-
- if (canCancel){
- // Cancel button.
- return MessageBox(hParent, question, caption, MB_YESNOCANCEL | MB_ICONWARNING);
- }else{
- // No cancel.
- return MessageBox(hParent, question, caption, MB_YESNO | MB_ICONWARNING);
- }
-}
-
-int CMessageBox::AskToSave(bool canCancel){
-
- char question[] = "Save changes ?";
-
- if (canCancel){
- // Cancel button.
- return Ask(question, true);
- }else{
- // No cancel.
- return Ask(question, false);
- }
-}
-
-
-/********************************************************************
-* Class: CFileDlgBase.
-*
-* Purpose: Open/Save Dlg.
-*
-* Revisions:
-*
-********************************************************************/
-CFileDlgBase::CFileDlgBase(){
- ofn.lStructSize = sizeof(OPENFILENAME); // DWORD
- Reset();
-}
-
-CFileDlgBase::~CFileDlgBase(){
-}
-
-void CFileDlgBase::Reset(void){
- // Set methods.
- ofn.lpstrTitle = 0; // LPCTSTR
- ofn.nFilterIndex = 0; // DWORD
- ofn.lpstrFilter = 0; // LPCTSTR
- ofn.lpstrDefExt = 0; // LPCTSTR
- ofn.Flags = 0; // DWORD
-
- ofn.lpstrInitialDir = 0; // LPCTSTR
-
- // Get methods.
- nNextFileOffset = 0;
- ofn.nFileOffset = 0; // WORD
- ofn.nFileExtension = 0; // WORD
-
- // Unused.
- ofn.hInstance = 0; // HINSTANCE
- ofn.lpstrCustomFilter = 0; // LPTSTR
- ofn.nMaxCustFilter = 0; // DWORD
- ofn.lpstrFileTitle = 0; // LPTSTR
- ofn.nMaxFileTitle = 0; // DWORD
- ofn.lCustData = 0; // DWORD
- ofn.lpfnHook = 0; // LPOFNHOOKPROC
- ofn.lpTemplateName = 0; // LPCTSTR
-}
-
-void CFileDlgBase::SetData(char * filter, char * defExt, DWORD flags){
- SetFilter(filter);
- SetDefExt(defExt);
- SetFlags(flags);
-}
-
-void CFileDlgBase::SetTitle(char * title){
- ofn.lpstrTitle = title;
-}
-
-void CFileDlgBase::SetFilterIndex(DWORD filterIndex){
- ofn.nFilterIndex = filterIndex;
-}
-
-void CFileDlgBase::SetFilter(char * filter){
- ofn.lpstrFilter = filter;
-}
-
-void CFileDlgBase::SetDefExt(char * defExt){
- ofn.lpstrDefExt = defExt;
-}
-
-void CFileDlgBase::SetFlags(DWORD flags){
- ofn.Flags = flags;
-}
-
-void CFileDlgBase::SetInitialDir(char * lpstrInitialDir){
- ofn.lpstrInitialDir = lpstrInitialDir;
-}
-
-WORD CFileDlgBase::GetFileOffset(void){
-return ofn.nFileOffset;
-}
-
-WORD CFileDlgBase::GetFileExtension(void){
-return ofn.nFileExtension;
-}
-
-WORD CFileDlgBase::GetNextFileOffset(void){
- // Analyses a "path\0file1\0file2\0file[...]\0\0" string returned by Open/SaveDlg.
- char * srcFiles = ofn.lpstrFile;
- if (srcFiles){
- if ((ofn.Flags & OFN_ALLOWMULTISELECT) == OFN_ALLOWMULTISELECT){
- // Initialize first call.
- if (!nNextFileOffset)
- nNextFileOffset = ofn.nFileOffset;
- // Parse the string.
- while (srcFiles[nNextFileOffset] != '\0')
- nNextFileOffset++;
- // Get next char.
- nNextFileOffset++;
- // End of string ?
- if (srcFiles[nNextFileOffset] == '\0')
- nNextFileOffset = 0;
- return nNextFileOffset;
- }
- }
-return 0;
-}
-
-bool CFileDlgBase::OpenFileName(CWindow * pWindow, char * pszFileName, DWORD nMaxFile){
- if (!pWindow)
- return false;
-
- ofn.hwndOwner = pWindow->_hWnd; // HWND
- ofn.lpstrFile = pszFileName; // LPTSTR
- ofn.nMaxFile = nMaxFile; // DWORD
-
-return ::GetOpenFileName(&ofn);
-}
-
-bool CFileDlgBase::SaveFileName(CWindow * pWindow, char * pszFileName, DWORD nMaxFile){
- if (!pWindow)
- return false;
- pszFileName[0] = '\0';
- ofn.hwndOwner = pWindow->_hWnd; // HWND
- ofn.lpstrFile = pszFileName; // LPTSTR
- ofn.nMaxFile = nMaxFile; // DWORD
-
-return ::GetSaveFileName(&ofn);
-}
-
-
-/********************************************************************
-* Class: CPath.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CPath::CPath(){
-}
-
-CPath::~CPath(){
-}
-
-bool CPath::ChangeDirectory(char * dir){
- return SetCurrentDirectory(dir);
-}
-
-
-/********************************************************************
-* Paths.
-********************************************************************/
-void SplitFileName(char * dirName, char * fileName){
- int n;
- int len = strlen (dirName);
-
- for (n = len; n > 2; n--){
- if (dirName[n] == '\\' ){
- if (fileName)
- strcpy (fileName, &dirName[n+1]);
- dirName[n+1] = 0;
- break;
- }
- }
-}
-
-bool ChangeFileExt(char * fileName, char * ext){
- int len = strlen(fileName);
- for (int n=len; n > 0; n--){
- if (fileName[n] == '.'){
- fileName[n+1] = 0;
- strcat(fileName, ext);
- return true;
- }
- }
-return false; // No file extension.
-}
-
-
-/********************************************************************
-* Class: CIniFile.
-*
-* Purpose: "GetPrivateProfileString()" like procedure.
-*
-* Revisions:
-*
-********************************************************************/
-CIniFile::CIniFile(){
- buffer = NULL;
- pcurrent = NULL;
- psection = NULL;
-}
-
-CIniFile::~CIniFile(){
- Close();
-}
-
-void CIniFile::Close(void){
- if (buffer)
- free(buffer);
- buffer = NULL;
- pcurrent = NULL;
- psection = NULL;
-}
-
-bool CIniFile::Load(char * fullPath){
- if (buffer)
- Close();
-
- FILE * file;
-
- /* FIXME: ZeroMemory because open/close projects can cause
- GetString to found data from previous projects. */
-// ZeroMemory(buffer, MAX_BLOC_SIZE);
-
- file = fopen(fullPath, "rb");
- if (file){
- buffer = (char *) malloc(MAX_BLOC_SIZE);
- if (!buffer)
- return false;
- fread(buffer, 1, MAX_BLOC_SIZE, file);
- if (0 != fread(buffer, 1, sizeof(buffer), file)){
- MsgBox.DisplayString("CIniFile ERROR: OVERFOW");
- fclose(file);
- Close();
- return false;
- }
- fclose(file);
-
- // Initialize current pointer.
- pcurrent = buffer;
- return true;
- }
-return false;
-}
-
-int CIniFile::GetInt(char * key, char * section){
-
- char integer[32];
-
- if (GetString(integer, key, section)){
- return atoi(integer);
- }
-
-return 0;
-}
-
-//******************************************************
-// Reminder :
-// GetPrivateProfileString("Section", "Key", "default_string", data, size, iniFilePath);
-//******************************************************
-bool CIniFile::GetString(char * data, char * key, char * section){
- /* Copies data and returns true if successfull */
- char *pstop;
- if (section){
- /* Parse from pcurrent until the end of buffer */
- pstop = pcurrent;
- for ( ; ; ){
- if (*pcurrent == '\0'){
- /* Parse again from beginning to pstop */
- pcurrent = buffer;
- for ( ; ; ){
- if (FindSection(pcurrent, section))
- break; // Found !
- if (pcurrent >= pstop)
- return false; // Not found !
- }
- }
- if (FindSection(pcurrent, section))
- break; // Found !
- }
- }
-
- if (psection){
- /* Section Found */
- pstop = pcurrent;
- //MsgBox.DisplayString(pcurrent);
- for ( ; ; ){
- if (*pcurrent == '\0' || *pcurrent == '['){
- /* Parse again from beginning to pstop */
- pcurrent = psection;
- for ( ; ; ){
- if (FindData(pcurrent, key, data))
- break; // Found !
- if (pcurrent >= pstop)
- return false; // Not found !
- }
- }
- if (FindData(pcurrent, key, data))
- break; // Found !
- }
- }
- //MsgBox.DisplayString(pcurrent);
-return true;
-}
-
-bool CIniFile::FindSection(char * s, char * section){
- /* Search the section through one line of text */
- /* Returns true if successful, false otherwise */
- /* This procedure increments current pointer to the end of line */
-
- if (!section)
- return false;
-
- bool sectionFound = false;
- psection = NULL;
-
- /* Skip spaces and comments */
- s = SkipUnwanted(s);
-
- /* End of buffer ? */
- if (*s == '\0'){
- pcurrent = s;
- return false;
-
- /* A section ? */
- }else if (*s == '['){
- s++;
- if (*s == '\0'){
- pcurrent = s;
- return false;
- }
-
- /* Parse the section name */
- int len = strlen(section);
- if (!strncmp(s, section, len)){
- s+=len;
- if (*s == ']'){
- /* Section found ! */
- sectionFound = true;
- }
- }
- }
-
- /* Increment current pointer until the end of current line */
- while (*s != '\0' && *s != '\n')
- s++;
- pcurrent = s;
-
- if (sectionFound)
- psection = pcurrent;
-return sectionFound;
-}
-
-bool CIniFile::FindData(char * s, char * key, char * data){
- /* Search the key through one line of text */
- /* Returns true if successful, false otherwise */
- /* This procedure increments current pointer to the end of line */
-
- bool keyFound = false;
- /* Skip spaces and comments */
- s = SkipUnwanted(s);
-
- /* End of buffer ? End of section ? */
- if (*s == '\0' || *s == '['){
- pcurrent = s;
- return false;
-
- /* Search the key */
- }else{
- int len = strlen(key);
- /* Compare key and s */
- if (!strncmp(s, key, len)){
- s+=len;
- /* Search an '=' sign */
- while (isspace(*s)){
- if (*s == '\n')
- break;
- s++;
- }
-
- if (*s == '='){
- /* Key found ! */
- keyFound = true;
- s++;
- while (isspace(*s)){
- if (*s == '\n')
- break;
- s++;
- }
-
- /* Copy data ! */
- s += CopyData(data, s);
- }
- }
- }
-
- /* Increment current pointer until the end of current line */
- while (*s != '\0' && *s != '\n')
- s++;
- pcurrent = s;
-return keyFound;
-}
-
-long CIniFile::CopyData(char * data, char * s){
-/* Returns the number of characters copied not including the terminating null char */
- char *pdata = data;
- while (*s != '\0' && *s != '\r' && *s != '\n'){
- *pdata = *s;
- pdata++;
- s++;
-
- /* @@ Overflow @@
- n++;
- if (n == n_max){
- *data = '\0';
- return
- }*/
- }
- *pdata = '\0';
-return (pdata-data);
-}
-
-char * CIniFile::SkipUnwanted(char *s){
- for ( ; ; ){
- /* End of buffer ? */
- if (*s == '\0')
- return s;
- if (isspace(*s)){
- /* Skip spaces */
- s++;
- }else if (*s == ';'){
- /* Skip comments */
- char * end_of_line = strchr(s, '\n');
- if (end_of_line){
- /* End of comment */
- s = end_of_line+1;
- continue;
- }else{
- /* End of buffer */
- return end_of_line;
- }
- /* Done */
- }else{
- return s;
- }
- }
-}
-
-
-/********************************************************************
-* Class: CShellDlg.
-*
-* Purpose:
-*
-* Revisions:
-*
-********************************************************************/
-CShellDlg::CShellDlg(){
- // Get shell task allocator.
- if(SHGetMalloc(&pMalloc) == (HRESULT) E_FAIL)
- pMalloc = NULL;
-}
-
-CShellDlg::~CShellDlg(){
- // Decrements the reference count.
- if (pMalloc)
- pMalloc->Release();
-}
-
-bool CShellDlg::BrowseForFolder(CWindow * pWindow, LPSTR pszDisplayName,
- LPCSTR lpszTitle, UINT ulFlags, BFFCALLBACK lpfn, LPARAM lParam, int iImage){
-
- // Initialize output buffer.
- *pszDisplayName = '\0';
- // BROWSEINFO.
- if (!pWindow)
- bi.hwndOwner = 0;
- else
- bi.hwndOwner = pWindow->_hWnd;
- bi.pidlRoot = NULL;
- bi.pszDisplayName = pszDisplayName;
- bi.lpszTitle = lpszTitle;
- bi.ulFlags = ulFlags;
- bi.lpfn = lpfn;
- bi.lParam = lParam;
- bi.iImage = iImage;
-
- LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
- if(!pidl)
- return false;
-
- if(!SHGetPathFromIDList(pidl, pszDisplayName))
- return false;
-
- pMalloc->Free(pidl);
-return true;
-}
-
-CCriticalSection::CCriticalSection(){
- ::InitializeCriticalSection(&cs);
-}
-
-CCriticalSection::~CCriticalSection(){
- ::DeleteCriticalSection(&cs);
-}
-
-void CCriticalSection::Enter(){
- ::EnterCriticalSection(&cs);
-}
-
-void CCriticalSection::Leave(){
- ::LeaveCriticalSection(&cs);
-}
-
+++ /dev/null
-/********************************************************************
-* Module: winui.h. This is part of WinUI.
-*
-* License: WinUI is covered by GNU General Public License,
-* Copyright (C) 2001 Manu B.
-* See license.htm for more details.
-*
-********************************************************************/
-#ifndef WINUI_H
-#define WINUI_H
-
-/* These are patched headers */
-#include "commdlg.h"
-#include "commctrl.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-// OLE.
-#include <shlobj.h>
-
-#include "CList.h"
-
-#define SPLSTYLE_HORZ 0
-#define SPLSTYLE_VERT 1
-#define SPLMODE_1 0
-#define SPLMODE_2 1
-
-char *StpCpy(char *dest, const char *src);
-size_t strcpylen(char *dest, const char *src);
-
-void SplitFileName(char * dirName, char * fileName);
-bool ChangeFileExt(char * fileName, char * ext);
-
-class CMessageBox
-{
- public:
- CMessageBox();
- ~CMessageBox();
-
- void SetParent(HWND hwnd);
- void SetCaption(char * string);
- void DisplayString(char * string, char * substring = NULL, UINT uType = MB_OK);
- void DisplayWarning(char * string, char * substring = NULL);
- void DisplayFatal(char * string, char * substring = NULL);
- void DisplayLong(long number);
- void DisplayRect(RECT * rect);
- int Ask(char * question, bool canCancel);
- int AskToSave(bool canCancel);
-
- protected:
- HWND hParent;
- char msgBuf[256];
- char caption[64];
-
- private:
-};
-
-class CPath
-{
- public:
- CPath();
- ~CPath();
-
- bool ChangeDirectory(char * dir);
-
- protected:
-
- private:
- char pathBuf[MAX_PATH];
-};
-
-class CWindow
-{
- public:
- CWindow();
- virtual ~CWindow();
-
- virtual HWND CreateEx(CWindow * pWindow, DWORD dwExStyle,
- LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y,
- int nWidth, int nHeight, HMENU hMenu, LPVOID lpParam);
-
- HWND GetId(void);
- LONG SetLong(int nIndex, LONG dwNewLong);
- LONG GetLong(int nIndex);
- LRESULT SendMessage(UINT msg, WPARAM wParam = 0, LPARAM lParam = 0);
-
- virtual bool SetPosition(HWND hInsertAfter, int x, int y, int width, int height, UINT uFlags);
- virtual bool Show(int nCmdShow = SW_SHOWNORMAL);
- virtual bool Hide(void);
- HWND SetFocus(void);
- CWindow * _pParent;
- HWND _hWnd;
- HINSTANCE _hInst;
- LPVOID _lParam;
-
- protected:
-
- private:
-};
-
-class CWinBase : public CWindow
-{
- public:
- CWinBase();
- ~CWinBase();
-
- HINSTANCE hPrevInst;
- LPSTR lpCmdLine;
- int nCmdShow;
-
- char appName[64];
- char msgBuf[256];
- bool isWinNT;
-
- bool Init(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
- int nCmdShow);
- bool SetName(char * name, char * version = NULL);
- void ParseCmdLine(char * outBuff);
- bool IsWinNT(void);
-
- bool ChangeDirectory(char * dir);
-
- protected:
-
- private:
-};
-
-class CSDIBase : public CWinBase
-{
- public:
- CSDIBase();
- virtual ~CSDIBase();
-
- virtual int Run(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);
- virtual bool CustomInit(void);
- virtual bool Release(void);
- virtual bool CreateUI(void);
- bool MainRegisterEx(const char * className);
- virtual LRESULT CALLBACK CMainWndProc(UINT Message, WPARAM wParam, LPARAM lParam);
-
- protected:
- WNDCLASSEX wc;
- HACCEL hAccel;
- char mainClass[16];
-
- private:
-};
-
-class CMDIChild;
-
-class CMDIClient : public CWindow
-{
- public:
- CMDIClient();
- ~CMDIClient();
-
- void Init(int menuIndex, UINT idFirstChild);
- HWND CreateEx(CWindow * pWindow, DWORD dwExStyle, DWORD dwStyle = WS_CHILD, UINT resId = 0);
- LPARAM GetParam(LPARAM lParam);
-
- bool initialized;
- char childClass[16];
- CList childList;
-
- protected:
- CLIENTCREATESTRUCT ccs;
- int nPos;
-
- private:
-};
-
-class UseOle
-{
- public:
- UseOle(){oleError = OleInitialize(NULL);}
- ~UseOle(){OleUninitialize();}
- HRESULT GetError(void){return oleError;}
- protected:
- HRESULT oleError;
- private:
-};
-
-class CMDIBase : public CSDIBase
-{
- public:
- CMDIBase();
- virtual ~CMDIBase();
-
- virtual int Run(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);
- virtual bool CustomInit(void);
- virtual bool Release(void);
- virtual bool CreateUI(void);
- bool ChildRegisterEx(const char * className);
- virtual LRESULT CALLBACK CMainWndProc(UINT Message, WPARAM wParam, LPARAM lParam);
- virtual LRESULT CALLBACK CChildWndProc(CWindow * pWnd, UINT Message, WPARAM wParam, LPARAM lParam);
-
- CMDIClient MdiClient;
-
- protected:
- UseOle useOle;
-
- private:
-};
-
-class CMDIChild : public CNode, public CWindow
-{
- public:
- CMDIChild();
- virtual ~CMDIChild();
-
- HWND CreateEx(CMDIClient * pMdiClient, DWORD dwExStyle, DWORD dwStyle, char * caption, UINT resId = 0, LPVOID lParam = NULL);
-
- CMDIBase * _pFrame;
-
- protected:
-
- private:
-};
-
-class CFileDlgBase : public CWindow
-{
- public:
- CFileDlgBase();
- ~CFileDlgBase();
-
- void Reset(void);
- void SetData(char * filter, char * defExt, DWORD flags);
- void SetTitle(char * title);
- void SetFilterIndex(DWORD filterIndex);
- void SetFilter(char * filter);
- void SetDefExt(char * defExt);
- void SetFlags(DWORD flags);
- void SetInitialDir(char * lpstrInitialDir);
-
- WORD GetFileOffset(void);
- WORD GetFileExtension(void);
- WORD GetNextFileOffset(void);
-
- bool OpenFileName(CWindow * pWindow, char * pszFileName, DWORD nMaxFile);
- bool SaveFileName(CWindow * pWindow, char * pszFileName, DWORD nMaxFile);
- OPENFILENAME ofn;
-
- protected:
-
- WORD nNextFileOffset;
- private:
-};
-
-class CDlgBase : public CWindow
-{
- public:
- CDlgBase();
- virtual ~CDlgBase();
-
- HWND Create(CWindow * pWindow, WORD wResId, RECT * Pos, LPARAM lParam);
- int CreateModal(CWindow * pWindow, WORD wResId, LPARAM lParam);
- HWND CreateParam(CWindow * pWindow, WORD wResId, LPARAM lParam);
- BOOL EndDlg(int nResult);
- virtual LRESULT CALLBACK CDlgProc(UINT Message, WPARAM wParam, LPARAM lParam);
- HWND GetItem(int nIDDlgItem);
- BOOL SetItemText(HWND hItem, LPCTSTR lpString);
- UINT GetItemText(HWND hItem, LPTSTR lpString, int nMaxCount);
-/* BOOL SetItemInt(HWND hItem, UINT uValue, BOOL bSigned);
- UINT GetItemInt(HWND hItem, BOOL *lpTranslated, BOOL bSigned);
-*/
- protected:
-
- private:
-};
-
-class CTabbedDlg : public CDlgBase
-{
- public:
- CTabbedDlg();
- virtual ~CTabbedDlg();
-
- virtual void OnNotify(int idCtrl, LPNMHDR notify);
- virtual void OnSelChanging(LPNMHDR notify);
- virtual void OnSelChange(LPNMHDR notify);
- virtual bool SetChildPosition(HWND hChild);
-
- protected:
- LPARAM GetParam(void);
- HWND _hWndTab;
- RECT Pos;
- TCITEM tcitem;
-
- private:
-};
-
-class CToolBar : public CWindow
-{
- public:
- CToolBar();
- ~CToolBar();
-
- HWND CreateEx(CWindow * pWindow, DWORD dwExStyle, DWORD dwStyle = WS_CHILD, UINT resId = 0);
- LRESULT AddBitmap(UINT resId, int nBmp, HINSTANCE hInstance = 0);
- BOOL AddButtons(TBBUTTON * tbButtons, UINT numButtons);
-
- protected:
-
- private:
-};
-
-class CBitmap
-{
- public:
- CBitmap();
- ~CBitmap();
-
- HBITMAP Load(CWindow * pWindow, LPCTSTR lpBitmapName);
- HBITMAP Load(CWindow * pWindow, WORD wResId);
- BOOL Destroy(void);
-
- HBITMAP hBitmap;
-
- protected:
-
- private:
-};
-
-class CImageList
-{
- public:
- CImageList();
- ~CImageList();
-
- HIMAGELIST Create(int cx, int cy, UINT flags, int cInitial, int cGrow);
- int AddMasked(CBitmap * pBitmap, COLORREF crMask);
- HIMAGELIST GetId(void){return hImgList;};
-
- protected:
- HIMAGELIST hImgList;
-
- private:
-};
-
-class CTabCtrl : public CWindow
-{
- public:
- CTabCtrl();
- ~CTabCtrl();
-
- HWND CreateEx(CWindow * pWindow, DWORD dwExStyle, DWORD dwStyle = WS_CHILD, UINT resId = 0, LPVOID lParam = NULL);
- BOOL SetItem_Param(int iItem, LPARAM lParam);
- LPARAM GetItem_Param(int iItem);
- int GetCurSel(void);
- int InsertItem(int iItem, UINT mask, DWORD dwState, DWORD dwStateMask,
- LPTSTR pszText, int cchTextMax, int iImage, LPARAM lParam);
-
- protected:
- TCITEM tcitem;
-
- private:
-};
-
-class CTreeView : public CWindow
-{
- public:
- CTreeView();
- ~CTreeView();
-
- TVINSERTSTRUCT tvi;
- TVITEM _TvItem;
- HWND CreateEx(CWindow * pWindow, DWORD dwExStyle, DWORD dwStyle = WS_CHILD, UINT resId = 0, LPVOID lParam = NULL);
- HTREEITEM CreateItem(HTREEITEM hParent, HTREEITEM hInsertAfter, int iImage, LPTSTR pszText, LPARAM lParam);
- LPARAM GetSelectedItemParam(void);
-
- protected:
- private:
-};
-
-class CScintilla : public CWindow
-{
- public:
- CScintilla();
- ~CScintilla();
-
- HWND CreateEx(CWindow * pWindow, DWORD dwExStyle, DWORD dwStyle = WS_CHILD, UINT resId = 0, LPVOID lParam = NULL);
-
- protected:
- private:
-};
-
-class CListView : public CWindow
-{
- public:
- CListView();
- ~CListView();
-
- HWND CreateEx(CWindow * pWindow, DWORD dwExStyle, DWORD dwStyle = WS_CHILD, UINT resId = 0);
- void Clear(void);
-
- protected:
- DWORD lastRow;
-
- private:
-};
-
-class CStatusBar : public CWindow
-{
- public:
- CStatusBar();
- ~CStatusBar();
-
- HWND CreateEx(CWindow * pWindow, DWORD dwExStyle, DWORD dwStyle = WS_CHILD, UINT resId = 0);
- void SetParts(int nParts, int * aWidths);
-
- void WriteString(char * string, int part);
- void WriteLong(long number, int part);
-
- protected:
-
- private:
- int numParts;
-};
-
-class CSplitter : public CWindow
-{
- public:
- CSplitter();
- ~CSplitter();
-
- void Init(CWindow * pane1, CWindow * pane2, bool vertical,
- int barPos, int barMode);
- bool SetPosition(HWND hInsertAfter, int x, int y, int width, int height, UINT uFlags);
- bool Show(int nCmdShow = SW_SHOWNORMAL);
- bool Hide(void);
- bool HaveMouse(HWND hwnd, short xPos, short yPos);
- void Move(int mouseX, int mouseY);
- bool OnLButtonDown(HWND hwnd, short xPos, short yPos);
- void OnMouseMove(HWND hwnd, short xPos, short yPos);
- void OnLButtonUp(HWND hwnd, short xPos, short yPos);
- bool OnSetCursor(HWND hwnd, LPARAM lParam);
-
- protected:
- void SetVertPosition(void);
- void SetHorzPosition(void);
- void DrawXorBar(HDC hdc, int x1, int y1, int width, int height);
- void ClientToWindow(HWND hwnd, POINT * pt, RECT * rect);
-
- CWindow * Pane1;
- CWindow * Pane2;
- int p;
- int size;
- int psize;
- bool isVertical;
- int mode;
- bool isActive;
- RECT pos;
- RECT barPos;
- int deltaPos;
- POINT initialXorPos;
-
- POINT initialPos;
- POINT newPos;
- private:
- bool initialized;
-};
-
-#define MAX_BLOC_SIZE 16384
-class CIniFile
-{
- public:
- CIniFile();
- ~CIniFile();
-
- bool Load(char * fullPath);
- void Close(void);
- bool GetString(char * data, char * key, char * section = NULL);
- int GetInt(char * key, char * section = NULL);
-
- protected:
-
- private:
-
- char * buffer;
- char * pcurrent;
- char * psection;
-
- bool FindSection(char * pcurrent, char * section);
- bool FindData(char * s, char * key, char * data);
- long CopyData(char * data, char * s);
- char *SkipUnwanted(char *s);
-};
-
-class CChrono
-{
- public:
- CChrono();
- ~CChrono();
-
- void Start(void);
- DWORD Stop(void);
-
- protected:
- DWORD _time;
-
- private:
-};
-
-class CShellDlg
-{
- public:
- CShellDlg();
- ~CShellDlg();
- bool BrowseForFolder(CWindow * pWindow, LPSTR pszDisplayName, LPCSTR lpszTitle,
- UINT ulFlags, BFFCALLBACK lpfn=0, LPARAM lParam=0, int iImage=0);
-
- protected:
- IMalloc* pMalloc;
- BROWSEINFO bi;
-
- private:
-};
-
-class CCriticalSection
-{
-public:
- CCriticalSection();
- ~CCriticalSection();
- void Enter();
- void Leave();
-private:
- CRITICAL_SECTION cs;
-};
-
-#endif