---- SUM UP DOC --- use RapidQ32.Dll v109 ----
Use Examples: NEVER CASE SENSITIVE except for ''pre
- RQPC.EXE Call Example:
RQPC.EXE YourBasPathFile.Ext [PathFileNice.Ico] [options]
RQPC.EXE help or ?
(.Exe is mandatory for version before 0.2200)
- PreCompiler
Within the 30 first non commented lines of the main RapidQ
code file (Line begining with a single Quote are not counted):
''pre cmd ICON NOCONSOLE NOENCRYPT TINY VOFF OPT
''pre cmd EXE RUN SHOW LIBS_SUBDIR=HW2005 DIRICON GICO
''pre cmd RCEXE=RCx.EXE RQ32DLL=RQ_xxx32.DLL
''pre cmd OUTPUT NODONE NOKILL NOBK
''pre cmd ADDDLL UPX PRINTF RTLBUFF=xxxxxx
''pre ICON PathWithSpaces.Ico
''pre LIBS_SUBDIR PathWithSpaces
DefStr BuildCount = "0.000" ''pre + 0.001 3
DefStr BuildCount2 = "1" ''pre + 1
DeFStr JustForFun = "25.6" ''pre - 33.2 1
DefStr CompileDate = "" ''pre Date$
DefStr CompileTime = "" ''pre Time$
DefStr CompileTimer = "" ''pre Timer
LIBS_SUBDIR, RUN/NORUN, HELP/?, SHOW/NOSHOW, EXE/NOEXE, VON/VOFF
OPT/NOOPT, SHELL, OUTPUT/NOOUTPUT apply to Tiny and Long Exe,
the other only to Tiny.
- ' ''RQEXPORT [function|sub|data[:ARRAY|STRING|OTHER]] _
<functionname[:Type]> [argname_1[:RQ_Type[:ByVal|ByRef]], ..., _4]
- To set Icon in your forms with Tiny: (not automatically done anymore)
$RESOURCE FORM_ICO AS "PathFile.Ico"
frmMyForm.IcoHandle = FORM_ICO
This has been solved by Paul in RapidQ32.Dll v109
---- end sum up doc -------------------
- Command Line Parameters list:
----------------------------
HELP, ?
CON, CONSOLE, NOCON, NOCONSOLE
ENC, ENCRYPT, NOENC, NOENCRYPT
TINY, NOTINY
OPT, OPTIMIZE, NOOPT, NOOPTIMIZE
VON, VERBOSE, VOFF, NOVERBOSE
EXE, NOEXE
RUN, NORUN
SHOW, NOSHOW
OUTOUT, NOOUTPUT
NODONE
KILL, NOKILL, KILLFILES, NOKILLFILES
NOBK
DIRICON
GICO
YourIconPathFile.Ico (no path = code path)
LIBS_SUBDIR=HW2005
RCEXE=RCx.EXE
RQ32DLL=RQ_xxx32.DLL
Your_MASM_Main_Code_PathFile.Asm
Your_FreeBasic_Main_Code.Fbb
Your_Gcc_Main_Code.Cpp
Your_Bcc_Main_Code.Bpp
Your_Resource.Rc
Null.Asm, NUll.Fbb, Null.Cpp, Null.Bpp
AddRq32Dll, AddDll, NoAddRq32Dll, NoDll, Upx, NoUpx
Printf, RTLBuff=xxxxxx
- PreCompiler Parameters list (basically the same as Cmd Line)
---------------------------
This is the best way to pass commands to RQPC
Definitions: the "''pre" tag has one FUNCTION followed
by COMMANDS or OPTIONS.
The Separator is a single space.
"''pre cmd" options/commands from ''pre cmd
CON or CONSOLE, NOCON or NOCONSOLE
ENC or ENCRYPT, NOENC or NOENCRYPT
TINY, NOTINY
OPT or OPTIMIZE, NOOPT or NOOPTIMIZE
VON or VERBOSE, VOFF or NOVERBOSE
EXE, NOEXE
RUN, NORUN
SHOW, NOSHOW
OUTOUT, NOOUTPUT
NOADDDONE or NODONE, ADDDONE or DONE
KILL or KILLFILES, NOKILLFILES or NOKILL
NOBK
DIRICON
GICO
YourIconPathFile.Ico (no path = code path)
LIBS_SUBDIR=HW2005
RCEXE=RCx.EXE
RQ32DLL=RQ_xxx32.DLL
Your_MASM_Main_Code_PathFile.Asm
Your_FreeBasic_Main_Code.Fbb
Your_Gcc_Main_Code.Cpp
Your_Bcc_Main_Code.Bpp
Your_Resource.Rc
Null.Asm, NUll.Fbb, Null.Cpp, Null.Bpp
AddRq32Dll or AddDll, NoAddRq32Dll or NoDll, Upx, NoUpx
Printf, RTLBuff=xxxxxx
For RQPC version after 0.2200, space maybe included
in path providing the whole option is placed between
double quotes ie:
"X:\My Path\My File.Ico"
"X:\My Path\My File.Asm"
"LIB_SUBDIR=Lib Path"
the following are obsolete due to previous:
"''pre icon" IconPathFileWithSpaces.ico
"''pre ASM" Your_Masm_Main_Code_PathFile_WithSpace.Asm
"''pre FBB" Your_FreeBasic_Main_Code_PathFile_WithSpace.Fbb
"''pre CPP" Your_Gcc_Main_Code_PathFile_WithSpace.Cpp
"''pre BPP" Your_Bcc_Main_Code_PathFile_WithSpace.Bpp
"''pre LIBS_SUBDIR" LibsSubDirPathWithSpaces
end obsolete
"''pre end"
"''pre +", "''pre -", "''pre Time$", "''pre Date$",
"''pre Timer", "''pre First"
"''pre shell show|hide now|onbuildok" YourShellString
. multiple ''pre cmd lines allowed
. Multiple external compiler allowed. You can mix GCC, FB,
BCC and MASM function but it's possible ... but with some
limitation
. Commands between double quotes can contain spaces that will
not be seen as separator.
. No extra character allowed inside the cmd. Separators
are spaces and quotes.
. Anything after a double space will be ignored?
. Indentation with SPACES is allowed NOT with TABS
. side effect: you can comment an option by adding a
character to it at the head, not for Asm, Fbb, Cpp, Bpp,Ico
where it should be at the end :) of the tag, ie:
nice.ico' 'con con' 'upx upx' ... will be ignored
-----------------------------------------------------------
Detailed Documentation
======================
You can simply compile a code by running:
RQPC.EXE YourBasPathFile.Ext
RQPC is 100% compatible with RC.EXE in original configuration.
It should even be possible to Rename RC.Exe >>> RC_000.EXE
and rename RQPC.EXE >>> RC.EXE and copy it in you RapidQ root
directory. Then in RPPC.INI set: RCEXE=RC_000.EXE
and, theoretically, it should be transparent (not tested).
RQPC will compile according to RQPC.INI file settings, which
default settings are RapidQ long exe as usual. You can change
default setting in RQPC.INI file, to set your own default
values. You must modify RQPC.INI according to your RapidQ
directory installation (Same for Masm, Gcc, Freebasic, Bcc;
if you want to use them only)
If you change the name of RQPC.Exe, it will still load
RQPC.Ini values.
-----------------------------------------------------------
When compiling a code, the compiling parameters are first set
according to RQPC.INI file.
When compiling a code, these default values are overwritten
according to command line content and then overwritten according
to PreCompiler "''pre cmd" lines content of your RapidQ code.
So you can modify these parameters at these three levels.
Command Line and PreCompiler Commands are NEVER case sensitive
except the "''pre" tag of the precompiler.
' ---------------------------------------------------------
Command Line
------------
- The first command Line argument must be 'Help' or '?' or the
'Path+FileName.Ext' of the file to compile (without the
quotes:)
To get help, you can simply start RQPC without argument and
click on "Help" in the error window that pop's up
- Implemented Options/Commands (without the double quotes :)
(all these Options/Commands can be used in the ''pre cmd too)
"CON" or "CONSOLE", "NOCON" or "NOCONSOLE" only for Tiny
Mandatory to compile a console code or a Tiny GUI that
uses the Print command.
(When you use Print in a Tiny GUI, without CON set, it
will hang harmlessly. It happens, remember it)
Default in RQPC.INI is Con.
"ENC" or "ENCRYPT", "NOENC" or "NOENCRYPT" only for Tiny
Encrypt the bytecode. The initialised strings of your
code cannot be read anymore when editing your
Executable anymore. It's a very basic encryption very
easy to crack but it's better than nothing. Default
in RQPC.INI is NOENCRYPT.
"TINY", "NOTINY"
Compile or not a Tiny executable
Default in RQPC.INI is NOTINY usual RapidQ Exe
"OPT" or "OPTIMIZE", "NOOPT" or "NOOPTIMIZE" = RC.EXE -opt
For Long Exe and Tiny default is NOOPT
RC.EXE Optimizes the bytecode for length. (With "OPT"
the bytecode size is typically ?twice smaller, a side
effect is that the compile time is longer when opt is
set, typically ?twice longer to compile)
"VON" or "VERBOSE", "VOFF" or "NOVERBOSE" = RC.EXE -VON/VOFF
For Long Exe and Tiny default is VOFF
RC.EXE feed back text output in enhanced
"EXE", "NOEXE" For Long Exe and Tiny
create or not an executable. If "NOEXE" is set, only the
bytecode is created. Default in is EXE
"RUN", "NORUN" For Long Exe and Tiny
Run or not the created executable after compilation
Default in is NORUN
When NOEXE is set, the bytecode will be RUN. (This can
fail when 'exe' path is used in the code.)
"SHOW", "NOSHOW" For Long Exe and Tiny
Nothing will be showed modally. When all is finished,
it exit process. To ease shell on RQPC. The output
of the compiler is written in a file named "Dump.$$$"
in the directory of the main code file ... very lightly
tested ! Many exceptions ;), many error showmessage
may will pop up even when noshow is set.
Default is SHOW
"OUTPUT", "NOOUTPUT" For Long Exe and Tiny
Will show the compiler output even when compiling is
successfull. Default is "NOOUTPUT"
"<PathFileName>.ICO" only for Tiny
If one of the command line command ends with ".Ico",
then it will be considered to be the path+filename for
the application Icon. Path with space is allowed but
the whole path must then be set between double quotes.
If no path is provided, the icon will be searched in
the path of the RapidQ code Main File (ie: MyIcon.Ico).
If a relative path is provided, it will be relative
to the RapidQ Code Main File (ie Dir1\Dir2\MyIcon.Ico)
Default in RQPC.INI is "". RapidQ default Icon
is used for Long Exe, as usual. For Tiny, special
default icons are build in this software (a black 'C'
for Console and a black 'G' for GUI. GUI with a console
will have the 'C' icon if "GICO" is not set).
"DIRICON" only for Tiny
The first Icon found in the Code Directory will be
used as application Icon
"GICO" it's a very 'cosmetic' feature, it's ONLY effect is
to force the default GUI icon when a console is added
to a Gui code. Without it the Default 'C' icon is set
to a Gui with a console.
"LIBS_SUBDIR" only for long exe
Many Library versions are available for RapidQ. This
makes it easier to compile with a different set of
Libraries. The different set of Libraries must be
stored in Sub directories of main Library directory.
'LIBS_SUBDIR' is the Relative path of these Libraries
to the RQLIBS_DIR set in RQPC.INI
(Default RQLIBS_DIR is c:\RapidQ\Libs\).
example:
"LIBS_SUBDIR=HW2005" long executables will be build
with a library from RapidQ\Libs\HW2005 directory.
I Suggest: Libs\HW2005, Libs\DRELEC, Libs\ORG,
Libs\LIBS_106, Libs\Libs_107 are the most common
library set.
Use double quotes to pass the _WHOLE_command if there
are spaces in the sub dir.
"RCEXE" for Long exe and Tiny
since the RC.EXE patch (Nov 2006), we have multiple
RC.EXE versions available. This will allow you to
compile your code with the RC.EXE version of your
choice. Just rename your RC.EXE with different names.
ie: rename your RC.Exe: RC_000.Exe, RC_106.Exe, 107, ...
then add in the Command line or in a ''pre cmd
"RCEXE=RC_106.Exe"
"RQ32DLL" only for Tiny
since the RapidQ32.Dll have been patched successfully
(Nov 2006), we have multiple RapidQ32.Dll versions
This will help you call a different versions of
RapidQ32.Dll in your Tiny Executable.
WARNING: except for RapidQ32.Dll, the name of the DLL is
a LOCAL NAME that YOU set. That name will be Built in
your Tiny Executable, so it will only work on a Computer
that has a RapidQ32.Dll renamed to the name YOU use. So
to Broadcast an executable always Build it with a Dll
named RapidQ32.Dll. This is just a test and debug tool.
Thanks Paul, with the unpatched Dll, all this was much
less interesting.
"NOADDDONE" or "NODONE", "ADDDONE" or "DONE" only for Tiny
the bytecode launcher does not need to be recompiled each
time the RapidQ Code is recompiled, it slows the compile
process. Once the Launcher.Exe is created, RQPC adds to
your code, in the ''pre cmd line "TinyDone" to tell
RQPC that it don't have to recompile the launcher. To
force the bytecode launcher to be recompiled each time the
RapidQ code is recompiled, add "NODONE" in one of your
''pre cmd lines. "TinyDone" will then be ignored if
present and not set if not.
"ADDDONE" = "DONE" can only inhibit a "NODONE" when set
in RQPC.INI
"NODONE" sets TINYDONE to False
"KILL" or "KILLFILES", "NOKILL" or "NOKILLFILES"
Delete or not all the 'useless' files generated during
compilations. They are usefull to debug
"BK", "NOBK"
When RQPC adds something to your RapidQ code, a back up
of the your original code is made adding .BK to the
original name. "NOBK" will delete that file too when
KILL is set
"UPX", "NOUPX" will upx compress the Tiny.exe.
Downmload it at http://upx.sourceforge.net/ and
copy Upx.exe in the directory of RQPC.EXE
Default: noupx
"ADDRQ32DLL" or "ADDDLL", "NOADDRQ32DLL" or "NODLL"
To use this, the RapidQ32.Dll (v109 preferably) must be
copied in the directory of RQPC and renamed "RQ32.DLL".
ResHacker.Exe from Resource Hacker free software must be
copied in the directory of RQPC.EXE Download it at:
http://www.angusj.com
When ADDDLL is set, RQ32.DLL is include in your
executable as a resource at compile time and extracted
in the directory of the executable at runtime, the
executable uses that dll to Execute the bytecode. This
creates a pseudo 'standalone' executable. When RQ32.DLL
is Upxed the size of the pseudo standalone executable
is 340K plus bytecode.
Default nodll
"RTLBUFF=<size>" set the maximum size of the buffer used
by the Runtime Linker when Masm, FB, Gcc or Bcc
functions must be linked with RapidQ. Default is
32707: approximatily 1000 names can be linked. If
the buffer is overflowed, you will be warned and
you'll have to increase that buffer size with
RTLBUFF=<newsize>
"FBVERSION=<value>" 016, 017, ...
"FBLANG=<text>" QB, deprecated, ...
In RQPC version greater than 2701
Since FB version 017, the compiler accepts a new command
line arguments '-lang' that can be 'QB', 'deprecated', ...
If FBVERSION is greater than 16, 'option EXPLICIT',
'option byval' and variable declared without type
causes error. To avoid this when compiling old code
'-lang deprecated' must be added to command line
These RQPC cmd allow to set these in FreeBasic 017, ...
With FBVERSION greater than 016, Option Explicit and
option byval are not include in the tiny header anymore.
Your FB functions must then fullfill FreeBasic 017 syntax
rules. (The parameters can be set in RQPC.Ini too)
For FB 017 see:
http://www.freebasic.net/wiki/wikka.php?wakka=CVSCompile
"PRINTF" only usefull with Gcc external functions printing
on stdout (the console). Without "PRINTF" nothing will
appear in the console when ie printf("testkjhkjhkjh") is
used in a Gcc code. Printf may helps to debug Cpp code.
The size of the exe with "PRINTF" is increased,min 250K,
80K Upxed.
- RC.EXE extra arguments can be passed such as -GUI, -CON
-g..., -d... . Argument like -B, -opt, vON/vOFF can be
passed that way too, but they may be overwritten by
PreCompiler ??? this applies to Long exe and Tiny.
"<PathFileName>.Asm"
"<PathFileName>.Fbb"
"<PathFileName>.Cpp"
"<PathFileName>.Bpp"
between double quotes when they include spaces
only for Tiny
Here is the new GREAT magic. It will create a Tiny
Header including your Masm/FB/Gcc/Bcc functions and
these functions will be automatically automatically
linked at Runtime with your RapidQ Code.
Example:
'' ---- Start of your FB Code file named "MyFB.Fbb"
' ''RQEXPORT function AddInt (i1, i2)
Function AddInt (i1, i2) As Long
Function = i1 + i2
End Function
'' ---- end of your FB code
'' ---- Start of your RapidQ code named MyRq.bas
''pre cmd console Tiny MyFB.Fbb
Print AddInt (7, 8)
ShowMessage ("Wait")
'' ---- End of your RapidQ code
Then you compile with RQPC.EXE MyRq.Bas
And it will be DONE! AddInt will be a FAST FB function
with all FB functions possible. Same is possible for
MASM, GCC and BCC.
In the created files, you have all the source codes of
your executable launcher, that you can recompile by
yourself then add the bytecode as resource to your
Launcher.Exe, using Resource Hacker free software,
and set another Icon to it.
For all implemented compilers, the ''RQEXPORT statement
has the same syntaxe.
- ''RQEXPORT must be Uppercase, the rest is not case
sensitive
' ''RQEXPORT [function|sub|data[:ARRAY|STRING|OTHER]] _
<functionname[:Type]> [argname_1[:RQ_Type[:ByVal|ByRef]], ..., _4]
- You can EXPORT to RapidQ, Function, Sub and Data.
On the RapidQ side, a file YourCodeTiny.Inc is
generated and automatically included on top of your
RapidQ code. On MASM, FB, GCC, BCC side, a code is
generated creating a string of format:
...;MyFuncName,ptrMyFunctionName;...
That String named Name__Address is passed to RapidQ
via the environment string by two values:
"ptrNameAddress" and "lenNameAddress". So RapidQ can
get a pointer to each of the exported Function, sub or
Data. With the ''RQEXPORT statement, RQPC creates
RQ_YourCodeTiny.Inc including Functions just as needed
to be to fullfill the requirement. Then it's as easy
as showed above. See the files generated for
RTL_FB/Minimum/MyRQ.Bas ...
There maybe are better methods of run time linking with
RapidQ? ... Later maybe ?
In MASM, GCC and BCC the Name__Address string is
set by default at a maximum of 32707 characters?
around 1000 EXPORTED items possible. That limit
can be increased with command RTLBUFF=<size>
You will be warned if the limit is reached.
With FB there is no Limit.
- Bytecode are interpreted by a function in a DLL - here
only RQ_ExecuteMemory in RapidQ32.Dll is used - that
function can be called from any compiler. And the
code calling the bytecode - the Launcher - is in the
same module/process as the Dll, so Header code is part
of RapidQ code, it is just a matter of getting pointer
and address, there is no access violation between each
other.
- the YourCode.Exe is simply YourCode.Bc added as
resource to YourLauncher.Exe and YourLauncher.Exe is
the output of the compiler used to Compile
YourCodeTiny.Fbb|Cpp|Asm|Bpp . Resource Hacker is
a wonder that can add or modify, in a blick, a
resource in an executable.
- With Icon, the Icon is simply linked as a resource.
and then change by Resource Hacker if necessary.
- 'External' functions arguments can be Integer (default),
Single, Double and String
- For String, Double and Single MASM, FB, GCC or BCC
function always receives a pointer to that value.
See the examples.
- FunctionName:Type allows to return String, Double,
Single and Integer (the default type) to RapidQ.
- data[ARRAY|STRING|OTHER] is only used in FB and is
ignored elsewhere. OTHER is the Default value
- ' ''INCLUDE yourpathfile.ext will include an external
file in your MASM, FB, GCC, BCC code. ''INCLUDE must
be in UPPERCASE. With ' ''INCLUDE you can have a
'bank' of Fbb, Gcc, Masm, Bcc functions ready to be
included.
- Null.Asm, Null.Fbb, Null.Cpp, Null.Bpp are used to force
a Launcher compile with an Null = Empty file. This is
usefull to force a Tiny to be compiled ... for test ???
The compiler corresponding to the Null file extension
will be used. The Null file does not exist, even if it
exists, it will be ignored.
- Requires the installation of the compiler you will use.
and some directory setting in joined file RQPC.INI
you dont need all the compilers, you can only have one
installed ... none is possible too.
- the only limitation in code I met, was collision with
declaration made in the Bytecode launcher.
Will be solved later ...
- RQPC is written in RapidQ. Except for few functions
written in FbToRqInc.
- for now you cannot mix Masm, Gcc, Bcc or FB code but
it's possible using .Obj files passed just as .Ico,
.Asm, .Fbb, .Cpp, Bpp files. Same thing could be done
for Resources .RC. There could be a ''BCINCLUDE that
would include a full bytecode and create in the RapidQ
code a Function 'calling' that bytecode. These bytecodes
interpreted by a DLL function are great things ...
From version 0.2000, it is possible to add multiple
.asm, .fbb, .Cpp, .Bpp and even .Rc files in the
command line or the "''pre cmd" line. The first file
set will determine the compiler that will be used. The
others will be compiled to .obj and then a linkage will
be TRIERD with all the .Obj obtained. It works rather
well with MASM as main compiler. Of course you will have
to make all the necessary declaration in the MAIN code.
There are examples of this in MASM\MasmWithXXX\
(This is under construction). Cross linking can easily
be a headake.
For .Rc files it works with all compilers and is
considered finished but still alpha.
- you can do all this without the use of RQPC, just
use the bits and manually write the RTL code in the FB
Gcc, Bcc, Masm code and the RQ.Inc Then compile it and
add resources to the Launcher: bytecode, nice icon ...
It would take me a boring year to write a full clear doc,
I decided to post as it is now. Further version will
come ... maybe later.
I dont publish the source code of RQPC -for now- because
it's under construction, should be cleaned and it's not
usefull. On request, I will upload some parts ... later.
Remember that for the compile with .Asm, .Fbb, .Cpp, Bpp
files, RQPC outputs the FULL source code of your
application Launcher.
Without .Asm, .Fbb, .Cpp or .Bpp file, the Launcher is
built with internal resource (it was the primary goal of
this code :)
' ---------------------------------------------------------
PreCompiler
=========== NEVER CASE SENSITIVE except the "''pre" tag
- leading lines spaces are removed, so indentation with
space is allowed but NOT WITH TABS
- Within the 30 first non commented lines of the main code
file, if a line contain the "''pre " tag, it will be
interpreted by the PreCompiler
- function "cmd" ''pre cmd <options/Commands>
implemented options/commands:
CON or CONSOLE, NOCON or NOCONSOLE
ENC or ENCRYPT, NOENC or NOENCRYPT
TINY, NOTINY
OPT or OPTIMIZE, NOOPT or NOOPTIMIZE
VON or VERBOSE, VOFF or NOVERBOSE
EXE, NOEXE
RUN, NORUN
SHOW, NOSHOW
OUTOUT, NOOUTPUT
DIRICON
GICO
NOADDDONE or NODONE, ADDDONE or DONE
KILL or KILLFILES, NOKILL or NOKILLFILES
NOBK
PathFilename.Ico
LIBS_SUBDIR=LibSubDirPath
RCEXE=RCx.EXE
RQ32DLL=RQ_xxx32.DLL
YourTinyPathFile.Asm
YourTinyPathFile.Fbb
YourTinyPathFile.Cpp
YourTinyPathFile.Bpp
Your_Resource.Rc
Null.Asm, NUll.Fbb, Null.Cpp, Null.Bpp
AddRq32Dll = AddDll, NoAddRq32Dll = NoDll
Upx, NoUpx
Printf, RTLBuff=xxxxxx
same ???evident meanings as in command line.
If an option/command is not recognized, it is dropped.
A double space causes the interpretation of an empty
command/option which means line end. Anything after a
double space, after "''pre", will be ignored
You can disable an option by adding an extra character to
it. Add a quote header ie:
'enc enc will be ignored, default value used
It's an easy way to add/suppress options, it does not
work for .Ico, .Asm, .Fbb, .Cpp, .Bpp, .Rc files where the
PreCompiler look for the last 4 characters of the
command/option; for these, the comment character should
be add ... after :)
ie: MyIcon.Ico' will be ignored :)
- function "ICON", "ASM", "FBB", "CPP", "BPP", "RC" and
"LIB_SUBDIR" are obsolete, from version 0.2700
''pre cmd "pathfile with spaces.ico|Asm|Cpp|Bcc|Fbb|rc" works
''pre cmd "LIB_SUDIR=DirName With Space" works too
--------------------------------------------
- function "ICON" ''pre icon <PathFileName(space ok)>.Ico
If no path is provided, the icon will be searched in
the path of the RapidQ Code Main File
(ie: ''pre icon \with space dir\MyIcon.Ico).
This before V 0.2700 was the only way to set an Icon
whose pathfilename contains spaces.
If a relative path is provided, it will be relative
to the RapidQ Code Main File
(ie ''icon Dir1\Dir2\MyIcon.Ico)
Default sIcoPathFile in UserConfig.Inc is "".
RapidQ default Icon is used for Long Exe. For Tiny,
special default Icons are build in RqPreCompiler (a
black 'C' for Console and a black 'G' for GUI. GUI
with a console will have a 'C' icon if GICO option is
not set.
- function "ASM" ''pre ASM <AsmPathFileName(space ok)>.Asm
For path same as for .Ico but for .Asm code
Do the same as ''pre cmd yourfile.asm
- function "FBB" ''pre Fbb <FbbPathFileName(space ok)>.Fbb
For path same as for .Ico but for .Fbb code
Do the same as ''pre cmd yourfile.Fbb
- function "CPP" ''pre Cpp <CppPathFileName(space ok)>.Cpp
For path same as for .Ico but for .Cpp code
Do the same as ''pre cmd yourfile.Cpp
- function "BPP" ''pre Bpp <BppPathFileName(space ok)>.Bpp
For path same as for .Ico but for .Bpp code
Do the same as ''pre cmd yourfile.Bpp
- function "RC" ''pre Rc <RcPathFileName(space ok)>.Bpp
For path same as for .Ico but for .Rc resource
Do the same as ''pre cmd yourfile.Rc
- function "LIBS_SUBDIR"
''pre LIBS_SUBDIR <Libs Sub dir (space ok)>
Many Libraries versions are available for RapidQ. This
makes it easier to compile with a different set of
Libraries. To use this feature, the different set of
Libraries must be stored in sub directories of the
main Library directory. 'LIBS_SUBDIR' is the Relative
path to these Libraries.
example:
"''pre LIBS_SUBDIR HW2005" long executables will be
build with a library from RapidQ\Libs\HW2005
directory. HW2005, DRELEC, ORG, LIB_106 are the
most common sets of RapidQ libraries.
---------------------------------------------
- function "End" optional ''pre end
will stop line scanning for ''pre lines and save time.
Line scanning automatically stops after a count of 30
non commented lines.
Const PRECOMPILER_MUST_START_BEFORE_LINE = 30
set in RQPC.INI
PreCompiler work takes here less than 5 millisecond
- functions "+" "-" "Date$" "Time$" "Timer" "First"
''pre +, ''pre -, ''pre date$, ''pre Times, ''pre timer,
''pre first
will do 'usual' PreCompiler works.
An example is very clear:
Within the 30 first non commented lines of the main
RapidQ code file, the string of the following lines
will be modified according the ''pre function
DefStr sBuild = "10" ''pre + 1 0
DefStr sSusbtract = "100000" ''pre - 1 0
DefStr sCompileTime = "" ''pre time$
DefStr sCompileTimer = "" ''pre timer
DefStr sCompileDate = "" ''pre date$
DefStr sFirstCompile = "" ''pre first
When using + and - with decimal value, you must add
the number of decimal to be displayed:
DefStr sBuildCount = "10.000" ''pre + 0.001 3
Without the '3', 0.690 is displayed 0.69
These Strings can be initialised.
This can be used to increment a BuildCount, set a
CompileDate or a CompileTime ... These changes must be
saved, so the main source code file is rewritten and
saved. A side effect of this is that single LF are
replaced by CR+LF in the source main code file. Can
this be a issue with some editor ???? I tried some,
all worked !
Before saving the modified code, a back up of the
original file is done. If "nobk" and "kill" are set
that file will be deleted if everything is OK.
in the RQPC file, Default value is BK.
- function "Shell" not tested at all ;)
''pre shell show|hide now|onbuildok YourShellString
- "show/hide" will show/hide the shell screen
- "now" will execute the shell now
- "OnBuildOk" will execute the shell after the
compilation is ok and the executable being build
successfully
- function "Mac" will insert a PreCompiler macro in your
code when you will next run RqPreCompiler YourBasFile.
Before line 30, lines begining with a single Quote
are not counted. Not of great use :)
'
' An Examples (much easier to understand):
' -----------
''pre cmd console encrypt tiny opt NOVERBOSE show EXE
''pre libs_subdir=\Dir1\nospaceallowed\Dir3 NoSpaceDir\Demo.Ico
DefStr sBuild = "0" ''pre + 1 0
DefStr sSusbtract = "100000" ''pre - 1 0
DefStr sCompileTime = "" ''pre time$
DefStr sCompileTimer = "" ''pre timer
DefStr sCompileDate = "" ''pre date$
DefStr sBuildCount = "10.000" ''pre + 0.001 3
''pre shell show now dir /s
''pre shell hide onbuildok whatever.exe with arguments
''pre end
' -------
- RQPC.Exe returns the following values:
1=OK compile OK
100=ERROR_COMPILE compile ERROR
1000=ENDPREMAC return of Insert PreCompiler macro = OK
2000=SHOW_HELP return of show help = OK
Not verified ... yet :)
DOWNLOADING THE COMPILERS and Documlentation
------------------------------------------------
RQPC dont only requires these installation if you want to
include external MASM, C/C++ or FreeBasic Functions in
your RapidQ code.
MASM
----
You can download Masm32 Version 9 for XP only at
http://www.masm32.com
It is a 3.5 MB download and requires 25 MB of HD space.
Masm32 only installs in the root disk directory.
For Win9X version: (V8 works in win98)
http://www.movsd.com/masmdl.htm
MASM contains a documentation but it's not a starter point.
FREEBASIC
---------
Download:
http://www.freebasic.net/forum/ in the News forum
http://sourceforge.net/project/showfiles.php?group_id=122342
Documentation:
http://www.freebasic.net/wiki/wikka.php?wakka=FBWiki
http://downloads.sourceforge.net/fbc/FB-manual-chm-08.dec.2006.zip
Forum
http://www.freebasic.net/forum/
GCC
---
Download: OnLine install:
http://www.mingw.org/MinGWiki/index.php/Install%20MinGW
Forum
http://lists.sourceforge.net/mailman/listinfo/mingw-users
Documentation
http://www.mingw.org/docs.shtml
http://www.acm.uiuc.edu/webmonkeys/book/c_guide/
http://www.cplusplus.com/ref/
http://www.cppreference.com/
BCC
---
Download: (you'll need to register)
http://community.borland.com/cgi-bin/surveys/web_download_survey.cgi?sid=33
UPX:
---
http://upx.sourceforge.net/
RESOURCE HACKER
---------------
http://www.angusj.com/
' --------------------------------------------------------------
' COMMON ERRORS
' -------------
' - the Launcher has not been recompiled: TinyDone in the ''pre
' - the external function have not 4 arguments
' - Tiny is not set
' - noconsole set when a GUI uses Print
'
'---------------------------------------------------------------
' RQPC V 0.1 RqPreCompiler Nov 2006, Jacques
'---------------------------------------------------------------
'
RQPC OUTPUT:
-----------
What is shown in the output window can also be found in a file
named RQPC.$$$ in the directory of your main file code.
The output of RQPC is show on compiling error only by default,
Option ''pre cmd output will show it on success too.
' -------------------------------------
Rapid-Q Compiler Beta by William Yu Copyright 1999-2000
Compiling C:\$$_RQPC\Distribution\PreCompilerDemo.Bas to C:\$$_RQPC\Distribution\PreCompilerDemo.bc
Number of statements: 445 Compile time: 0.160000
Numeric Variables: 399
String Variables: 7
Resource data: 0
Bytes global data: 12104
Bytes sub data: 77
___RQPC__ INFO: Type: INTERNAL RESOURCES ''Pre line found=1
sCodePathFile: C:\$$_RQPC\Distribution\PreCompilerDemo.Bas
sIcoPathFile: C:\$$_RQPC\Distribution\Globe.ico
Tiny Build with INTERNAL RESOURCE
sRcExe: c:\Rapid-Q\RC_107.EXE
sLibDir: c:\Rapid-Q\Libs\LIBS_107
sRq32Dll: RapidQ32.Dll Exe Size: 22016
FLAGS: Console=1 Encrypt=1 Tiny=1 MakeExe=1 Run=1 Output=0 Optim=0
Dll32inExe=0 Upx=0
TIMES: (in ms): CmdLine: 0 PreComp: 11 Valid: 33 RQCmpl: 452
CmplTny: 0 Exe_Bld: 23 ResHack: 1166 Upx:564 Tot: 1685 Run: 75
' -------------------------------------
Outpout doc:
-----------
- Type:INTERNAL RESOURCE|MASM|FB|GCC|BCC|
- Tiny Build Internal Resource or the name of the ain external file
- Flags indicates what options were used to compile the code
- Times: all times are in milliseconds
- CmdLine: time to scan RQPC received command line
- PreComp: time to do pre compiler work. Interpret all the
''pre xxx lines
- Valid: time to check all input validity
- RQCmpl: time to compile RapidQ ByteCode (for Tiny) or
Executable (for 'long exe')
- CmplTny: time to compile (when external compiler is used) or
extract from internal resources (when no external
compiler used) the bytecode launcher.
- Exe_Bld: time to Encrypt bytecode, if necessary and set
some flags in the Tiny Launcher if no external
compiler is used.
- ResHack: time to add the bytecode as a resource to the
Launcher and to change the Icon, of the resulting
executable, this is done by calling an external
utility: ResHacker.Exe
- Upx: time to Upx the resulting executabme. Only shown
if Upx option is set
- Tot: Total compile time
- Run: Time necessary to Shell the resulting Executable
----------------------------------------------------------------