[CONFIGURATION]

* BUG: Configuration summary should be printed correctly again.
* NEW: README file was updated.

[INTERPRETER]
* BUG: The Error information should not be lost anymore during error 
  propagation through constructors.
* NEW: Natural comparison is now always language-aware.

[GB.QT4]
* BUG: TextArea selection methods work correctly now.
* BUG: TreeView.Count and ColumnView.Count now return the number of items 
  in the view like in gb.gtk, not just the number of root items.


git-svn-id: svn://localhost/gambas/trunk@2643 867c0c6c-44f3-4631-809d-bfa615b0a4ec
This commit is contained in:
Benoît Minisini 2010-01-27 03:28:06 +00:00
parent fc7e755733
commit 0665d5f720
16 changed files with 116 additions and 210 deletions

153
README
View file

@ -1,149 +1,32 @@
WELCOME TO GAMBAS!
GAMBAS is a free implementation of a graphical development
environment based on a BASIC interpreter. It is very
GAMBAS is a free implementation of a graphical development environment
based on a BASIC interpreter and a full development platform. It is very
inspired by Visual Basic and Java.
More information on http://gambas.sourceforge.net
Go to http://gambas.sourceforge.net to get more information: how to compile
and install it, where to find binary packages, how to report a bug...
Go to http://gambasdoc.org for language documentation.
** IMPORTANT NOTES
The following pieces of code were borrowed and adapted:
Before downloading Gambas, compiling it and then complaining, please read the
following remarks CAREFULLY!
- The natural string comparison algorithme was adapted from the algorithm
made by Martin Pol. See http://sourcefrog.net/projects/natsort/ for more
details.
To compile Gambas, you must install the following libraries on your system :
+=================================+==========================================+
| COMPONENTS | LIBRARIES |
+=================================+==========================================+
| gb.compress.bzlib2 | libbz2.so |
+---------------------------------+------------------------------------------+
| gb.compress.zlib | libz.so |
+---------------------------------+------------------------------------------+
| gb.corba | libACE.so libomniORB4.so |
| | libomniDynamic4.so |
+---------------------------------+------------------------------------------+
| gb.crypt | libcrypt.so |
+---------------------------------+------------------------------------------+
| gb.db.firebird | libibpp.so libfbclient.so |
+---------------------------------+------------------------------------------+
| gb.db.mysql | libmysqlclient.so libz.so |
+---------------------------------+------------------------------------------+
| gb.db.odbc | libodbc.so |
+---------------------------------+------------------------------------------+
| gb.db.postgresql | libpq.so |
+---------------------------------+------------------------------------------+
| gb.db.sqlite | libsqlite.so |
+---------------------------------+------------------------------------------+
| gb.db.sqlite3 | libsqlite3.so |
+---------------------------------+------------------------------------------+
| gb.gtk | All GTK+ libraries |
+---------------------------------+------------------------------------------+
| gb.ldap | libldap.so |
+---------------------------------+------------------------------------------+
| gb.net | - |
+---------------------------------+------------------------------------------+
| gb.net.curl | libcurl.so |
+---------------------------------+------------------------------------------+
| gb.opengl | libGL.so libGLU.so |
+---------------------------------+------------------------------------------+
| gb.pcre | libpcre.so |
+---------------------------------+------------------------------------------+
| gb.qt | libqt-mt.so.3 |
+---------------------------------+------------------------------------------+
| gb.qt.kde | All KDE libraries |
+---------------------------------+------------------------------------------+
| gb.sdl | libSDL.so |
+---------------------------------+------------------------------------------+
| gb.sdl.sound | libSDL.so libSDL_mixer.so |
+---------------------------------+------------------------------------------+
| gb.sdl.image | libSDL.so libSDL_image.so libSDL_gfx.so |
| | libSDL_ttf.so |
+---------------------------------+------------------------------------------+
| gb.sdl.opengl | libSDL.so libGL.so libGLU.so |
+---------------------------------+------------------------------------------+
| gb.v4l | libjpeg.so libpng.so video4linux >= 2.0 |
+---------------------------------+------------------------------------------+
| gb.xml | libxml-2.0 |
+---------------------------------+------------------------------------------+
| gb.xml.xslt | libxslt |
+---------------------------------+------------------------------------------+
- The hash table implementation was adapted from the glib one.
And you must install all related development packages.
- The HTML entities parsing in gb.gtk comes from KHTML sources.
Try to always use a recent version of these libraries.
- The gb.net.smtp component is a debugged and reworked version of an
unmaintained library made by Kevin Read <obsidian@berlios.de> in 2002.
You must of course install the GCC compiler.
- The gb.image.effect sources are adapted from KDE 3 image effect routines.
You must compile gb.qt and gb.qt.ext components to have a working development
environment.
If I forget some borrowed code in the list above, just tell me.
Qt 3.2 is now required because of one Qt function that was missing in older
versions of Qt. Gambas will compile with Qt 3.1, but the function Picture.Copy()
will fail in some case. Gambas does not compile with previous versions of Qt.
Enjoy Gambas!
You must have the right to write to /tmp, otherwise Gambas will not work.
This package was done with the following versions of GNU tools:
- automake 1.9.4
- autoconf 2.59
- libtool 1.5.12 (this tool is not required as it is included in the package)
Each sub-directory of this source package is actually independent. You can
configure, make and install each of them independently.
** DISTRIBUTION SPECIFIC PROBLEMS
Read the README.REDHAT or README.FEDORA files.
** HOW TO COMPILE GAMBAS ?
1) First, check that you installed all the needed development packages
2) When done, type the following magic sentences in a shell.
'#' represents your shell prompt, and "..." are the
messages printed during the configuration and compilation.
This command analyzes the system and configure the package:
# ./configure -C
...
This command compiles the programs:
# make
...
And finally this command installs everything:
# su -c "make install"
Password: <Type the root password here>
...
If something fails during this process, try to type the
following command before ./configure :
# ./reconf
If it does not work, I need to know what happened exactly.
To do so, type the following command :
# ( ./configure; make; make install ) > output.txt 2>&1
And send me the file "output.txt" by mail, with every other
detail about your computer and your distribution you find
useful.
3) If everything was fine, type "gambas2" to run the development
environment. There are a few examples in the "examples"
directory.
4) There are more 'configure' specific explanations in the "INSTALL" file.
I invite you to read them.
Enjoy it !
Benoît.
--
Benoît

View file

@ -369,19 +369,19 @@ msgstr ""
msgid "Thanks to"
msgstr ""
#: FAbout.class:494
#: FAbout.class:500
msgid "About Gambas..."
msgstr ""
#: FAbout.class:502
#: FAbout.class:508
msgid "About"
msgstr ""
#: FAbout.class:519
#: FAbout.class:525
msgid "Gambas Almost Means Basic!"
msgstr ""
#: FAbout.class:532
#: FAbout.class:538
msgid ""
"<h2 align=center>Licence</h2>\n"
"\n"
@ -396,37 +396,41 @@ msgid ""
"Public License for more details.</p>\n"
msgstr ""
#: FAbout.class:538
#: FAbout.class:544
msgid "<h2 align=center>Authors</h2>\n"
msgstr ""
#: FAbout.class:562
#: FAbout.class:568
msgid "Make a gift!"
msgstr ""
#: FAbout.class:566
#: FAbout.class:572
msgid "Hall Of Fame"
msgstr ""
#: FAbout.class:580
#: FAbout.class:586
msgid "System information"
msgstr ""
#: FAbout.class:593 FConflict.class:25 FFindList.class:203
#: FAbout.class:597 FList.class:310 FMain.class:2299
msgid "&Copy"
msgstr ""
#: FAbout.class:605 FConflict.class:25 FFindList.class:203
#: FIconEditor.class:1412 FImportTable.class:656 FInfo.class:427
#: FMakeInstall.class:260 FOption.class:1211 FTips.class:232
msgid "Close"
msgstr ""
#: FAbout.class:611 FWelcome.class:513
#: FAbout.class:623 FWelcome.class:513
msgid "Gambas"
msgstr ""
#: FAbout.class:628 FWelcome.class:525
#: FAbout.class:640 FWelcome.class:525
msgid "http://gambas.sourceforge.net"
msgstr ""
#: FAbout.class:635
#: FAbout.class:647
msgid "(c) 2000-2007 Benoît Minisini"
msgstr ""
@ -1986,10 +1990,6 @@ msgstr ""
msgid "Cl&ear"
msgstr ""
#: FList.class:310 FMain.class:2299
msgid "&Copy"
msgstr ""
#: FList.class:316 FMain.class:2306
msgid "&Paste"
msgstr ""

View file

@ -452,8 +452,13 @@ Public Sub tabAbout_Click()
Copy "report-ng.sh" To sTemp
Shell "chmod a+x " & Shell$(sTemp) Wait
Exec [sTemp] To txtInfo.Text
Clipboard.Copy(txtInfo.Text)
Endif
End
Public Sub btnCopy_Click()
Clipboard.Copy(txtInfo.Text)
End

View file

@ -82,11 +82,16 @@
Index = 2
Text = ("System information")
{ txtInfo TextArea
MoveScaled(1,1,77,42)
MoveScaled(1,6,77,37)
Font = Font["Monospace"]
Text = ("")
ReadOnly = True
}
{ btnCopy Button
MoveScaled(1,1,15,4)
Text = ("&Copy")
Picture = Picture["icon:/small/copy"]
}
Index = 0
}
{ btnClose Button

View file

@ -1,5 +1,5 @@
# Gambas Project File 3.0
# Compiled with Gambas 2.99.0 (r2485)
# Compiled with Gambas 2.99.0 (r2637)
Title=gb.web
Startup=Main
Version=2.99.0

View file

@ -82,6 +82,7 @@ Public Sub Begin()
Else
Print $sHeader
$sHeader = ""
Endif
@ -103,6 +104,7 @@ Public Sub End()
AddHeader("Content-Length", Lof($hFile))
Print $sHeader
$sHeader = ""
While Not Eof($hFile)
sBuffer = Read #$hFile, -4096

View file

@ -64,7 +64,7 @@ AC_OUTPUT(Makefile)
GB_SUMMARY=""
for comp in gb.*; do
if test -e $comp/DISABLED; then
GB_SUMMARY="$GB_SUMMARY$'\n'- $comp"
GB_SUMMARY="$GB_SUMMARY"$'\n'"- $comp"
fi
done

View file

@ -12,7 +12,7 @@ If you want the origianl, you can find it at:
http://libsmtp.berlios.de/
--
Benoît.
Benoît.

View file

@ -385,7 +385,9 @@ END_PROPERTY
BEGIN_METHOD_VOID(CTEXTAREA_sel_clear)
WIDGET->textCursor().clearSelection();
QTextCursor cursor = WIDGET->textCursor();
cursor.clearSelection();
WIDGET->setTextCursor(cursor);
END_METHOD
@ -407,6 +409,8 @@ BEGIN_METHOD(CTEXTAREA_sel_select, GB_INTEGER start; GB_INTEGER length)
cursor.setPosition(VARG(start));
cursor.setPosition(VARG(start) + VARG(length), QTextCursor::KeepAnchor);
WIDGET->setTextCursor(cursor);
}
END_METHOD
@ -414,7 +418,9 @@ END_METHOD
BEGIN_METHOD_VOID(CTEXTAREA_sel_all) //, GB_BOOLEAN sel)
WIDGET->textCursor().select(QTextCursor::Document);
QTextCursor cursor = WIDGET->textCursor();
cursor.select(QTextCursor::Document);
WIDGET->setTextCursor(cursor);
END_METHOD

View file

@ -776,7 +776,7 @@ END_PROPERTY
BEGIN_PROPERTY(CTREEVIEW_count)
GB.ReturnInteger(WIDGET->childCount());
GB.ReturnInteger(THIS->dict->count());
END_PROPERTY

View file

@ -213,8 +213,11 @@ void ERROR_leave(ERROR_CONTEXT *err)
#if DEBUG_ERROR
fprintf(stderr, "ERROR_leave: (%p)\n", ERROR_current);
#endif
ERROR_reset(&ERROR_current->info);
ERROR_current->info = err->info;
if (err->info.code)
{
ERROR_reset(&ERROR_current->info);
ERROR_current->info = err->info;
}
}
else
ERROR_reset(&err->info);

View file

@ -283,7 +283,7 @@ static int strnatcmp_compare_left(const char *a, int la, const char *b, int lb)
return 0;
}
int COMPARE_string_natural(const char *a, int la, const char *b, int lb, bool nocase, bool lang)
int COMPARE_string_natural(const char *a, int la, const char *b, int lb, bool nocase)
{
int ai, bi, lca, lcb;
unsigned char ca, cb;
@ -342,31 +342,29 @@ int COMPARE_string_natural(const char *a, int la, const char *b, int lb, bool no
return 0;
}
if (lang)
lca = STRING_get_utf8_char_length(ca);
lcb = STRING_get_utf8_char_length(cb);
if (lca > 1 || lcb > 1)
{
lca = STRING_get_utf8_char_length(ca);
lcb = STRING_get_utf8_char_length(cb);
if (lca > 1 || lcb > 1)
if ((result = COMPARE_string_lang(&a[ai], lca, &b[bi], lcb, nocase, FALSE)))
return result;
ai += lca;
bi += lcb;
}
else
{
if (nocase)
{
if ((result = COMPARE_string_lang(&a[ai], lca, &b[bi], lcb, nocase, FALSE)))
return result;
ai += lca;
bi += lcb;
continue;
ca = toupper(ca);
cb = toupper(cb);
}
if (ca < cb)
return -1;
else if (ca > cb)
return +1;
++ai; ++bi;
}
if (nocase)
{
ca = toupper(ca);
cb = toupper(cb);
}
if (ca < cb)
return -1;
else if (ca > cb)
return +1;
++ai; ++bi;
}
}
@ -409,7 +407,12 @@ static int compare_string_lang_case(char **pa, char **pb)
int COMPARE_string_like(const char *s1, int l1, const char *s2, int l2)
{
return REGEXP_match(s2, l2, s1, l1) ? 0 : TABLE_compare_ignore_case(s1, l1, s2, l2);
int result;
if (REGEXP_match(s2, l2, s1, l1))
return 0;
result = TABLE_compare_ignore_case(s1, l1, s2, l2);
return (result < 0) ? -1 : (result > 0) ? 1 : 0;
}
static int compare_string_like(char **pa, char **pb)
@ -420,18 +423,16 @@ static int compare_string_like(char **pa, char **pb)
//return REGEXP_match(*pb, lb, *pa, la) ? 0 : TABLE_compare_ignore_case(*pa, la, *pb, lb);
}
#define IMPLEMENT_COMPARE_STRING_NATURAL(_name, _nocase, _lang) \
#define IMPLEMENT_COMPARE_STRING_NATURAL(_name, _nocase) \
static int compare_string_##_name(char **pa, char **pb) \
{ \
int la = *pa ? strlen(*pa) : 0; \
int lb = *pb ? strlen(*pb) : 0; \
return COMPARE_string_natural(*pa, la, *pb, lb, _nocase, _lang); \
return COMPARE_string_natural(*pa, la, *pb, lb, _nocase); \
}
IMPLEMENT_COMPARE_STRING_NATURAL(natural, FALSE, FALSE)
IMPLEMENT_COMPARE_STRING_NATURAL(natural_case, TRUE, FALSE)
IMPLEMENT_COMPARE_STRING_NATURAL(natural_lang, FALSE, TRUE)
IMPLEMENT_COMPARE_STRING_NATURAL(natural_lang_case, TRUE, TRUE)
IMPLEMENT_COMPARE_STRING_NATURAL(natural, FALSE)
IMPLEMENT_COMPARE_STRING_NATURAL(natural_case, TRUE)
int COMPARE_object(void **a, void **b)
{
@ -506,18 +507,15 @@ COMPARE_FUNC COMPARE_get(TYPE type, int mode)
return (COMPARE_FUNC)compare_date;
case T_STRING:
switch(mode)
{
case GB_COMP_LANG | GB_COMP_TEXT: return (COMPARE_FUNC)compare_string_lang_case;
case GB_COMP_LANG: return (COMPARE_FUNC)compare_string_lang;
case GB_COMP_TEXT: return (COMPARE_FUNC)compare_string_case;
case GB_COMP_LIKE: return (COMPARE_FUNC)compare_string_like;
case GB_COMP_NATURAL: return (COMPARE_FUNC)compare_string_natural;
case GB_COMP_NATURAL | GB_COMP_TEXT: return (COMPARE_FUNC)compare_string_natural_case;
case GB_COMP_NATURAL | GB_COMP_LANG: return (COMPARE_FUNC)compare_string_natural_lang;
case GB_COMP_NATURAL | GB_COMP_LANG | GB_COMP_TEXT: return (COMPARE_FUNC)compare_string_natural_lang_case;
default: return (COMPARE_FUNC)compare_string_binary;
}
if (mode & GB_COMP_NATURAL)
return (COMPARE_FUNC)((mode & GB_COMP_TEXT) ? compare_string_natural_case : compare_string_natural);
else if (mode & GB_COMP_LIKE)
return (COMPARE_FUNC)compare_string_like;
else if (mode & GB_COMP_LANG)
return (COMPARE_FUNC)((mode & GB_COMP_TEXT) ? compare_string_lang_case : compare_string_lang);
else
return (COMPARE_FUNC)((mode & GB_COMP_TEXT) ? compare_string_case : compare_string_binary);
default:
return (COMPARE_FUNC)compare_nothing;

View file

@ -46,7 +46,7 @@ COMPARE_FUNC COMPARE_get(TYPE type, int mode);
int COMPARE_object(void **a, void **b);
int COMPARE_string_lang(const char *s1, int l1, const char *s2, int l2, bool nocase, bool throw);
int COMPARE_string_like(const char *s1, int l1, const char *s2, int l2);
int COMPARE_string_natural(const char *a, int la, const char *b, int lb, bool nocase, bool lang);
int COMPARE_string_natural(const char *a, int la, const char *b, int lb, bool nocase);
#endif
#endif

View file

@ -848,9 +848,11 @@ void EXEC_function_loop()
fprintf(stderr, "#3\n");
fprintf(stderr, "NOTHING\n");
#endif
//ERROR_INFO save = { 0 };
//ERROR_save(&save);
ERROR_set_last();
if (EXEC_debug && !STACK_has_error_handler())
{
if (TP && TC)
@ -882,11 +884,10 @@ void EXEC_function_loop()
{
/*printf("try to propagate\n");*/
STACK_pop_frame(&EXEC_current);
//ERROR_restore(&save);
//ERROR_set_last();
PROPAGATE();
/*ERROR_print();
exit(1);*/
/*retry = FALSE;*/
}
if (EP != NULL)
@ -909,6 +910,9 @@ void EXEC_function_loop()
retry = TRUE;
}
//ERROR_restore(&save);
//ERROR_set_last();
}
while (SP < EXEC_super)

View file

@ -1578,7 +1578,7 @@ _END_TRY:
fprintf(stderr, "exec END TRY %p\n", PC);
#endif
/* If EP was reset to null, then there was an error */
// If EP was reset to null, then an error occurred
EXEC_got_error = (EP == NULL);
EP = NULL;
EC = ET;

View file

@ -664,7 +664,7 @@ void SUBR_strcomp(void)
SUBR_get_string_len(&PARAM[1], &s2, &l2);
if (mode & GB_COMP_NATURAL)
ret = COMPARE_string_natural(s1, l1, s2, l2, mode & GB_COMP_TEXT, mode & GB_COMP_LANG);
ret = COMPARE_string_natural(s1, l1, s2, l2, mode & GB_COMP_TEXT);
else if (mode & GB_COMP_LIKE)
ret = COMPARE_string_like(s1, l1, s2, l2);
else if (mode & GB_COMP_LANG)