I have a list of various items ranging from glitch reports, to
suggestions for the next version, to other things which may just
need some clarification.
The compiler doesn't check array dimensions.
If I declare an array with two dimensions, and later use it with
only one dimension, the compiler does not flag it as an error.
For instance:
The compiler does not catch the error in the second line of code.
Unlike checking for array bounds, array dimensions is something
the compiler should be able to check at compile time. I do see a
potential for this to actually be a feature if you want to access
elements using just one index according to the way it's actually
stored in memory. But this would need to be clearly documented,
and the compiler would still need to produce a warning, in case
this was not my intention. (Just now, I also noticed that you
can declare two arrays with the same name and type, on the same
line, and the compiler doesn't catch it).
Tab setting doesn't work for all blocks.
When I change the tab setting in the Option menu to 3, it works
for things like If/Then, Functions blocks, etc... but not for
some things like TYPE or UNION. Those two ignore the tab setting.
Search engine problem.
If I have lines such as: "Call MySub(Var, MyVar)", there is no
way for me to successfully do a search for "Var" using PB's find
button. If I search for "Var" without "Whole Word" matching,
then it finds "MyVar" also, and if I do Whole Word matching, it
skips over it entirely. This problem appears to be unique to PB.
It makes it impossible to correctly do a global search & replace.
Keyword mixed case doesn’t always work.
In the IDE, if I type a keyword such as "ucase$", PB changes it
to "UCase$" and changes the text color to blue. Ironically
however, of all keywords, it doesn't work for MCase$; same for
for StrDelete$, StrInsert$, or StrReverse$.
F5 in the debugger doesn't work the way I expect.
If I press F5 from the IDE, it doesn't call the debugger. When I
finish running the program, pressing F5 says that the program
must be reset first, which requires several keystrokes or mouse
clicks. So F5 seems to be of limited use. Same goes for the
Run/Debugger button in the debugger. It would be nice for PB to
automatically reset/run when you press F5 or click Run.
Debugger takes extra step for each Dim element.
For instance, for this line: Dim a&, b&, c&, d&, e&, f&, g&, h&
I have to click "Step Over" a bunch of times before moving to the
next line. On the other hand, it skips over multi-statement
lines. If I have a For/Next loop in one line, the debugger
doesn't step through the loop. (That part is no big deal; just an
observation. But the Dim step-over though is what can get
annoying).
Other Debugger suggestions
I'd like to be able to place the cursor on a variable in the
code, and have it display the value, like VB does with the yellow
tool-tip type of thing. This is a great time saver. Then you
don't have to constantly add and/or remove variables to the watch
list. You would just place the cursor on the variable you are
interested in. I think someone suggested drag-and-dropping of
variables to the watch window. I can settle for that too if the
above can't be done.
Commented lines should have a different color in the debugger,
just like in the IDE. Sometimes while debugging, I can't figure
out why it suddenly skips a few lines of code. Then I scroll to
the left and realize that those lines had been commented out.
The limited debugger view compounds this problem.
It would be nice to deal with just one source code listing,
instead of having to switch between the IDE listing, and the
debugger listing (that one being hard to navigate).
PB/CC Execute problem
I haven't really used PB/CC much (I almost forgot I even had it).
But I was trying out the PRINT statement, and the sample Hello
World program. When I run it from the IDE, the DOS box flashes
and disappears. It would be nice for it to wait for you to press
a key before exiting the DOS box if you're running it from the
IDE.
Functions shouldn't need to be declared in order.
If memory serves me correctly, in the DOS version of PB, I could
create functions in any order. But in PB/DLL I either have to
write the functions in order of use, or Declare them at the top.
I noticed that this isn't the case for Subs, so I figure it
shouldn't technically be necessary for functions either.
-- Misc wish items: --
Split-screen editing
Sometimes I make changes towards the top section of the source
code which require changes to an area towards the bottom.
Scrolling back and forth is not too convenient. VB's IDE
provides a good example of split-screen editing which allows you
to work on two sections of the same code simultaneously.
InStr Enhancement
VB has an optional argument for InStr which lets you compare two
strings without regards to their case (upper/lower case). This
would probably be more efficient than something like
"InStr(UCase$(txt1$), UCase$(txt2$)). This concept can be
extended to other PB string functions as well. (For my own math
parser, I've developed a hybrid InStr which supports both PB and
VB's syntax).
Variant MsgBox
I know PB doesn't support variants, and it doesn't need to. But
it would be nice if I could accept a numeric argument for MsgBox
without always having to surround it with Str$(). I want to be
able to use it like the PRINT statement for DOS (I think PB/CC's
PRINT allows this as well).
Wizard.
This doesn't need to be anything too fancy. But sometimes I want
to quickly create a program. But then I have to type a lot of
code before I can start even something simple. PB should provide
several templates. There would be a template for a standard DLL
file, another for .EXEs. It would add the oppropriate LibMain or
PBMain declarations, and Option Explicit (if you set that option
on), and optionally a list of Include files (that I can add or
remove from the template).
End Function automatic completion.
When defining a function, it would be nice if when I pressed
enter after "Function MyFunction() As Long" PB would automatically
add a line which says "End Function", like VB does. Same for
Sub. Also if you have a Sub and later change it to a Function,
it would be nice for PB to change the "End Sub" line to
"End Function". These are small shortcuts but they save time in
the long run.
Combine Option Explicit with Def[...]
A number of my function definition lines are too long with things
like "As Long" (no pun intended) and ByVal appended to each
argument, and Alias followed by the same function name etc...
I'm not sure what kind of syntax you'd implement for it, but
whichever way, with the above option I can do:
"Function MyFunc(ByVal a)"
instead of
"Function MyFunc(ByVal a As Long) if there was a way to combine
DefLng with Option Explicit. See further comments below for
ByVal et al.
#Option ByVal
If most of the arguments in my functions will be passed ByVal
instead of the default ByRef, then I'd like an option like this
so that I don't have a bunch of ByVals in the code. In my code,
a number of lines with ByVals in it are longer than the screen
width. It can be further enhanced by allowing you to specify
which data types would be ByVal or ByRef by default. I actually
have a lot of AsciiZ arguments, and those I pass by reference.
So maybe I'd have two lines like this:
#Option ByVal Long
#Option ByRef Asciiz
Scale down need for Alias
Alias for exported functions is useful. However, when all of my
exported subs/functions require an alias with a duplicate of the
same function name, it seems redundant. PB should export
functions using the literal letter case used in the code,
unless explicitly aliased otherwise.
The Open File menu should remember the current directory.
If I open a file, and then open another, it would be nice for it
to start from the same directory, instead of the C:\ root
directory. Or perhaps there should be a way to set a default
project directory.
Compiler warnings.
If there is a syntax error the compiler stops, and indicates the
error. However, it would be nice for it to also have a list of
warnings for things that aren't a syntax error, but can
potentially cause a problem. A specific example I have in mind
is if I have a global variable, and I declare a local variable of
the same name, it should warn me of the potential problem. A
programmer may specifically want to use the same name for a local
variable, or it might be done accidentally by the programmer as
an oversight.
Don't save before running or compiling.
If I remember correctly, in the DOS version of PB, I could make
temporary changes to a program and run it, without saving those
changes first. I want to be able to do the same in PB/DLL.
Likewise sometimes I want to create a quick program just to do a
simple task, but before I can run it, I unfortunately have to
select a directory, and then make up a file name, and then
erase it afterwards (or else become creative in continually
finding unique names). This isn't very convenient.
Allow CodePtr for a label from a different function.
I made use of this in PB 5 after checking with tech support to
make sure it was safe. But PB 6 removed this feature. Apparently
it was done to allow label names to be local to each function,
which is a fine idea. But the PB 5 feature can be re-instated
without breaking anything if you have it so that the external
function name can be specified. For instance:
I = CodePtr(MyFunction.MyLabel). If you need clarifications on
how and why I want to use this let me know. It has an important
use in something I want to do.
Mention the words "Line" and "Column" at the bottom.
In the bottom right of the IDE, there are two numbers. When
you're towards the top of your source code, or in the case of a
short program, it is not obvious which number represents what.
There is more than plenty of space in the status bar to precede
the numbers with their description. There is probably other
useful info that can be placed on the long mostly empty status
bar.
Equates of local scope
Sometimes I may need equates that are local to a function, for
the same reason I would need to define local variables without
worrying about coordinating names between functions.
Remove need for constant specifiers symbols for equates.
You'd probably make this optional, in case others prefer the
required % before numeric equates.
Equates for other data types
I want to be able to create an equate for floating point and
other types.
Way to comment a block of text.
I use the ' character to comment a line, and $IF 0 for a block.
However $IF 0 is not as good. The IDE changes the case of words
I type in that block, if they happen to be keywords, against my
will. Also it doesn't change the overall color of the commented
block to make it easily identifiable, like other comments.
Assume $Compile Exe implicitly.
If I want to quickly write a simple program and I use PBMain,
then the compiler should implicitely compile as an EXE file
without me having to type that line.
Replace$ function
Sometimes one may need to get a new string with the Replaced
value without modifying the original string. Replace$ should
optionally work as a function (just like MID$ can be a statement
or function).
Enhance Sub/Function box
The Sub/function box at the top right of IDE allows you to jump
directly to a function. This is great. Now if I manually move
into a function, then that box should be updated to reflect the
current function that I'm in also.
Enhance Extract$ and Remain$
Make it support a negative first argument, so it can start from
the end. This would seem like a natural extension to these
functions, which would make it work like other PB string
functions.
StrConv
VB has a StrConv function which does several things, including
converting from Unicode. Such a function might be somewhat handy.
--- Documentation issues: ---
"Regular Expression" links to the REGISTER topic.
There are two links under "Regular Expression" in the help file
index. One of them goes to REGISTER, which seems to be an
unrelated topic.
Is _ (underscore) a valid character for use in variable names?
It appears to be. If so, it should be clearly documented in the
help file for naming convention (for variables, functions, etc...).
Can UDT elements share the same name as a function or PB
keyword?
I haven't tried but it I assume it should work. Either way,
it should be documented.
List the Equate Values for Libmain.
The LibMain topic lists equates, such as %DLL_PROCESS_ATTACH,
etc... I don't want to $Include the large WIN32API.INC for every
project, neither is it fun to fish out that information from that
file when in a hurry. And I shouldn't have to memorize these
values.
Include "All Data Types" or "Data Type Summary" under the
Data Types listing in the Help file Contents section.
This information is actually there, but it's under another
heading, making it harder to find when I need it.
What does "Animate Delay" do?
In the Window / Options / Compiler menu, there's a box which says
"Animate Delay". When I drag the question mark to that box, it
comes up with a blank help topic.
The PB/CC help file should clearly list what sets it apart from
PB/DLL
(likewise with the PB/DLL help file).
Do numeric equates, which are preceded with % support only
16-bit integers?
The answer should be documented.
Group function type listings.
The way the help file is currently organized, it is difficult for
instance to find out all the string-related functions. The
Contents section of the help file, and/or the index should have a
categorized list of functions. For instance "String functions"
would list all string-related functions; Math Functions would
list all math-related functions, etc... The VB help file (VB 5)
has a good example of how it can be organized, under "Keywords by
Task".
Include a "What's New" section.
It would list new features, as well as existing features that
were enhanced. This is very important. There are features that
I stumble upon that I wouldn't have known about simply by browsing
the help file. And sometimes I may already be familiar with a
particular function and miss out an neat enhancements that were
added to it in the latest version.
Change name of VB topic
from "Working with Visual Basic" to "Visual Basic, Working with".
It would be much easier to find in the help index that way.
UDT confusion
The second paragraph seems to say that a User Defined Type cannot
include an array element, but later it gives an example of how to
do just that. Also, later it says that two-dimensional array
elements of a UDT must be defined with constant dimensions. It's
not clear if it's the same or different for a 1 dimensional array.
And can a UDT array element be defined with a lower bound?
Explain how AND and OR do bitwise and boolean double-duty
The document states that these operators serve for both boolean
and bitwise calculations. But it doesn't explain how it determines
which one to use. The explanation is not obvious, and not trivial,
especially if one works back and forth with VB and PB, as they
handle it differently. In VB, if I have A = &B101 and B = &B010,
and then use:
If A AND B Then ...
Instead of doing a boolean operation as I'd expect
(True AND True = True), it does a bitwise AND, and returns a
zero (False). After running across this subtle but potent
problem in VB I always explicitly use relational operators
when AND or OR are present. For instance:
If A>0 AND B>0 Then ...
All this time I assumed that PB had the same problem, but it
seems like PB knows when to do a bitwise calculation, and when to
do a boolean operation. But I haven't really tested it in too much
depth to be sure. So it would help if the documentation could
clearly state how it differentiates between a boolean and a
bitwise expression. And you can mention the difference between
VB and PB on this issue in the doc file.
------------------
Daniel Corbier
UCalc Fast Math Parser
http://www.ucalc.com
suggestions for the next version, to other things which may just
need some clarification.
The compiler doesn't check array dimensions.
If I declare an array with two dimensions, and later use it with
only one dimension, the compiler does not flag it as an error.
For instance:
Code:
Dim MyArray(10, 10) As Long, y as Long y = MyArray(5)
Unlike checking for array bounds, array dimensions is something
the compiler should be able to check at compile time. I do see a
potential for this to actually be a feature if you want to access
elements using just one index according to the way it's actually
stored in memory. But this would need to be clearly documented,
and the compiler would still need to produce a warning, in case
this was not my intention. (Just now, I also noticed that you
can declare two arrays with the same name and type, on the same
line, and the compiler doesn't catch it).
Tab setting doesn't work for all blocks.
When I change the tab setting in the Option menu to 3, it works
for things like If/Then, Functions blocks, etc... but not for
some things like TYPE or UNION. Those two ignore the tab setting.
Search engine problem.
If I have lines such as: "Call MySub(Var, MyVar)", there is no
way for me to successfully do a search for "Var" using PB's find
button. If I search for "Var" without "Whole Word" matching,
then it finds "MyVar" also, and if I do Whole Word matching, it
skips over it entirely. This problem appears to be unique to PB.
It makes it impossible to correctly do a global search & replace.
Keyword mixed case doesn’t always work.
In the IDE, if I type a keyword such as "ucase$", PB changes it
to "UCase$" and changes the text color to blue. Ironically
however, of all keywords, it doesn't work for MCase$; same for
for StrDelete$, StrInsert$, or StrReverse$.
F5 in the debugger doesn't work the way I expect.
If I press F5 from the IDE, it doesn't call the debugger. When I
finish running the program, pressing F5 says that the program
must be reset first, which requires several keystrokes or mouse
clicks. So F5 seems to be of limited use. Same goes for the
Run/Debugger button in the debugger. It would be nice for PB to
automatically reset/run when you press F5 or click Run.
Debugger takes extra step for each Dim element.
For instance, for this line: Dim a&, b&, c&, d&, e&, f&, g&, h&
I have to click "Step Over" a bunch of times before moving to the
next line. On the other hand, it skips over multi-statement
lines. If I have a For/Next loop in one line, the debugger
doesn't step through the loop. (That part is no big deal; just an
observation. But the Dim step-over though is what can get
annoying).
Other Debugger suggestions
I'd like to be able to place the cursor on a variable in the
code, and have it display the value, like VB does with the yellow
tool-tip type of thing. This is a great time saver. Then you
don't have to constantly add and/or remove variables to the watch
list. You would just place the cursor on the variable you are
interested in. I think someone suggested drag-and-dropping of
variables to the watch window. I can settle for that too if the
above can't be done.
Commented lines should have a different color in the debugger,
just like in the IDE. Sometimes while debugging, I can't figure
out why it suddenly skips a few lines of code. Then I scroll to
the left and realize that those lines had been commented out.
The limited debugger view compounds this problem.
It would be nice to deal with just one source code listing,
instead of having to switch between the IDE listing, and the
debugger listing (that one being hard to navigate).
PB/CC Execute problem
I haven't really used PB/CC much (I almost forgot I even had it).
But I was trying out the PRINT statement, and the sample Hello
World program. When I run it from the IDE, the DOS box flashes
and disappears. It would be nice for it to wait for you to press
a key before exiting the DOS box if you're running it from the
IDE.
Functions shouldn't need to be declared in order.
If memory serves me correctly, in the DOS version of PB, I could
create functions in any order. But in PB/DLL I either have to
write the functions in order of use, or Declare them at the top.
I noticed that this isn't the case for Subs, so I figure it
shouldn't technically be necessary for functions either.
-- Misc wish items: --
Split-screen editing
Sometimes I make changes towards the top section of the source
code which require changes to an area towards the bottom.
Scrolling back and forth is not too convenient. VB's IDE
provides a good example of split-screen editing which allows you
to work on two sections of the same code simultaneously.
InStr Enhancement
VB has an optional argument for InStr which lets you compare two
strings without regards to their case (upper/lower case). This
would probably be more efficient than something like
"InStr(UCase$(txt1$), UCase$(txt2$)). This concept can be
extended to other PB string functions as well. (For my own math
parser, I've developed a hybrid InStr which supports both PB and
VB's syntax).
Variant MsgBox
I know PB doesn't support variants, and it doesn't need to. But
it would be nice if I could accept a numeric argument for MsgBox
without always having to surround it with Str$(). I want to be
able to use it like the PRINT statement for DOS (I think PB/CC's
PRINT allows this as well).
Wizard.
This doesn't need to be anything too fancy. But sometimes I want
to quickly create a program. But then I have to type a lot of
code before I can start even something simple. PB should provide
several templates. There would be a template for a standard DLL
file, another for .EXEs. It would add the oppropriate LibMain or
PBMain declarations, and Option Explicit (if you set that option
on), and optionally a list of Include files (that I can add or
remove from the template).
End Function automatic completion.
When defining a function, it would be nice if when I pressed
enter after "Function MyFunction() As Long" PB would automatically
add a line which says "End Function", like VB does. Same for
Sub. Also if you have a Sub and later change it to a Function,
it would be nice for PB to change the "End Sub" line to
"End Function". These are small shortcuts but they save time in
the long run.
Combine Option Explicit with Def[...]
A number of my function definition lines are too long with things
like "As Long" (no pun intended) and ByVal appended to each
argument, and Alias followed by the same function name etc...
I'm not sure what kind of syntax you'd implement for it, but
whichever way, with the above option I can do:
"Function MyFunc(ByVal a)"
instead of
"Function MyFunc(ByVal a As Long) if there was a way to combine
DefLng with Option Explicit. See further comments below for
ByVal et al.
#Option ByVal
If most of the arguments in my functions will be passed ByVal
instead of the default ByRef, then I'd like an option like this
so that I don't have a bunch of ByVals in the code. In my code,
a number of lines with ByVals in it are longer than the screen
width. It can be further enhanced by allowing you to specify
which data types would be ByVal or ByRef by default. I actually
have a lot of AsciiZ arguments, and those I pass by reference.
So maybe I'd have two lines like this:
#Option ByVal Long
#Option ByRef Asciiz
Scale down need for Alias
Alias for exported functions is useful. However, when all of my
exported subs/functions require an alias with a duplicate of the
same function name, it seems redundant. PB should export
functions using the literal letter case used in the code,
unless explicitly aliased otherwise.
The Open File menu should remember the current directory.
If I open a file, and then open another, it would be nice for it
to start from the same directory, instead of the C:\ root
directory. Or perhaps there should be a way to set a default
project directory.
Compiler warnings.
If there is a syntax error the compiler stops, and indicates the
error. However, it would be nice for it to also have a list of
warnings for things that aren't a syntax error, but can
potentially cause a problem. A specific example I have in mind
is if I have a global variable, and I declare a local variable of
the same name, it should warn me of the potential problem. A
programmer may specifically want to use the same name for a local
variable, or it might be done accidentally by the programmer as
an oversight.
Don't save before running or compiling.
If I remember correctly, in the DOS version of PB, I could make
temporary changes to a program and run it, without saving those
changes first. I want to be able to do the same in PB/DLL.
Likewise sometimes I want to create a quick program just to do a
simple task, but before I can run it, I unfortunately have to
select a directory, and then make up a file name, and then
erase it afterwards (or else become creative in continually
finding unique names). This isn't very convenient.
Allow CodePtr for a label from a different function.
I made use of this in PB 5 after checking with tech support to
make sure it was safe. But PB 6 removed this feature. Apparently
it was done to allow label names to be local to each function,
which is a fine idea. But the PB 5 feature can be re-instated
without breaking anything if you have it so that the external
function name can be specified. For instance:
I = CodePtr(MyFunction.MyLabel). If you need clarifications on
how and why I want to use this let me know. It has an important
use in something I want to do.
Mention the words "Line" and "Column" at the bottom.
In the bottom right of the IDE, there are two numbers. When
you're towards the top of your source code, or in the case of a
short program, it is not obvious which number represents what.
There is more than plenty of space in the status bar to precede
the numbers with their description. There is probably other
useful info that can be placed on the long mostly empty status
bar.
Equates of local scope
Sometimes I may need equates that are local to a function, for
the same reason I would need to define local variables without
worrying about coordinating names between functions.
Remove need for constant specifiers symbols for equates.
You'd probably make this optional, in case others prefer the
required % before numeric equates.
Equates for other data types
I want to be able to create an equate for floating point and
other types.
Way to comment a block of text.
I use the ' character to comment a line, and $IF 0 for a block.
However $IF 0 is not as good. The IDE changes the case of words
I type in that block, if they happen to be keywords, against my
will. Also it doesn't change the overall color of the commented
block to make it easily identifiable, like other comments.
Assume $Compile Exe implicitly.
If I want to quickly write a simple program and I use PBMain,
then the compiler should implicitely compile as an EXE file
without me having to type that line.
Replace$ function
Sometimes one may need to get a new string with the Replaced
value without modifying the original string. Replace$ should
optionally work as a function (just like MID$ can be a statement
or function).
Enhance Sub/Function box
The Sub/function box at the top right of IDE allows you to jump
directly to a function. This is great. Now if I manually move
into a function, then that box should be updated to reflect the
current function that I'm in also.
Enhance Extract$ and Remain$
Make it support a negative first argument, so it can start from
the end. This would seem like a natural extension to these
functions, which would make it work like other PB string
functions.
StrConv
VB has a StrConv function which does several things, including
converting from Unicode. Such a function might be somewhat handy.
--- Documentation issues: ---
"Regular Expression" links to the REGISTER topic.
There are two links under "Regular Expression" in the help file
index. One of them goes to REGISTER, which seems to be an
unrelated topic.
Is _ (underscore) a valid character for use in variable names?
It appears to be. If so, it should be clearly documented in the
help file for naming convention (for variables, functions, etc...).
Can UDT elements share the same name as a function or PB
keyword?
I haven't tried but it I assume it should work. Either way,
it should be documented.
List the Equate Values for Libmain.
The LibMain topic lists equates, such as %DLL_PROCESS_ATTACH,
etc... I don't want to $Include the large WIN32API.INC for every
project, neither is it fun to fish out that information from that
file when in a hurry. And I shouldn't have to memorize these
values.
Include "All Data Types" or "Data Type Summary" under the
Data Types listing in the Help file Contents section.
This information is actually there, but it's under another
heading, making it harder to find when I need it.
What does "Animate Delay" do?
In the Window / Options / Compiler menu, there's a box which says
"Animate Delay". When I drag the question mark to that box, it
comes up with a blank help topic.
The PB/CC help file should clearly list what sets it apart from
PB/DLL
(likewise with the PB/DLL help file).
Do numeric equates, which are preceded with % support only
16-bit integers?
The answer should be documented.
Group function type listings.
The way the help file is currently organized, it is difficult for
instance to find out all the string-related functions. The
Contents section of the help file, and/or the index should have a
categorized list of functions. For instance "String functions"
would list all string-related functions; Math Functions would
list all math-related functions, etc... The VB help file (VB 5)
has a good example of how it can be organized, under "Keywords by
Task".
Include a "What's New" section.
It would list new features, as well as existing features that
were enhanced. This is very important. There are features that
I stumble upon that I wouldn't have known about simply by browsing
the help file. And sometimes I may already be familiar with a
particular function and miss out an neat enhancements that were
added to it in the latest version.
Change name of VB topic
from "Working with Visual Basic" to "Visual Basic, Working with".
It would be much easier to find in the help index that way.
UDT confusion
The second paragraph seems to say that a User Defined Type cannot
include an array element, but later it gives an example of how to
do just that. Also, later it says that two-dimensional array
elements of a UDT must be defined with constant dimensions. It's
not clear if it's the same or different for a 1 dimensional array.
And can a UDT array element be defined with a lower bound?
Explain how AND and OR do bitwise and boolean double-duty
The document states that these operators serve for both boolean
and bitwise calculations. But it doesn't explain how it determines
which one to use. The explanation is not obvious, and not trivial,
especially if one works back and forth with VB and PB, as they
handle it differently. In VB, if I have A = &B101 and B = &B010,
and then use:
If A AND B Then ...
Instead of doing a boolean operation as I'd expect
(True AND True = True), it does a bitwise AND, and returns a
zero (False). After running across this subtle but potent
problem in VB I always explicitly use relational operators
when AND or OR are present. For instance:
If A>0 AND B>0 Then ...
All this time I assumed that PB had the same problem, but it
seems like PB knows when to do a bitwise calculation, and when to
do a boolean operation. But I haven't really tested it in too much
depth to be sure. So it would help if the documentation could
clearly state how it differentiates between a boolean and a
bitwise expression. And you can mention the difference between
VB and PB on this issue in the doc file.
------------------
Daniel Corbier
UCalc Fast Math Parser
http://www.ucalc.com
Comment