jbc
jbc {-option {...-option}} file {file ...}
Option |
Description |
-C |
Generate object file (.o) and terminate |
-JO1 |
Optimization level 1. No code optimizations are performed and debug
information is produced for both the C debugger and the jBASE debugger. |
-JO2 |
Optimization level 2 (default) .Debug information is produced for the jBC
debugger but not for the C debugger. Minimal optimization occurs. |
-JO3 |
Optimization level 3. Debug information is produced for the jBC debugger.
Optimization of jBC occurs and matrix boundary checking is removed. The C code is
optimized by the standard optimizations of the resident C compiler. |
-JO4 |
Optimization level 4. Full optimization. No debugging information is
produced. The jBC code is fully optimized and no run time checking is done on array
boundaries and the like. All symbol information is removed from the final executable and
all available (safe) optimizations are performed by the resident C compiler. |
-Jd |
Delete any intermediate object files produced in the compilation process. |
-Ja<lib.a> |
The object files (.o) files produced in the compilation process are placed
in the library lib.a (Unix only) |
-JA<lib.a> |
As -Ja except that the jbcbuildlib command is executed against lib.a. This
option is used on libraries containing subroutines called using CALL @var. (Unix only) |
-JLS |
Force subroutines to be static-linked. This means that the executing
program will have knowledge of the subroutines at compile time. Without this option the
subroutines will be searched for at runtime. ( Unix only ) |
-Jla |
Link with conventional Archive libraries. In modern implementations this
options is fairly useless and in fact some implementations of jbc will ignore this flag
altogether. However it can be useful if the developer wishes to ship and executable
program that is entirely self sufficient. Note that programs linked with archive libraries
are much larger than those linked with shared libraries. (Unix Only) |
-Jo |
This option eliminates the need for the -o destfile option. It names the
destination file by removing the suffix of the first .b file given to the jbc compiler. |
-Jv |
Verbose mode. All compilation stages are reported and the -v option is passed to compilation stages that support it. |
-Js |
Produce compilation statistics for each .b file. |
-JC[Abilm:stuv] |
The -JC option introduces options that are meant only for the jbccom
compiler. |
-Jq{d|i|m|o|x} |
This option tells the compiler that the source code contains embedded SQL
statements for a particular database. The sub-options are:
d |
IBM DB2 |
i |
Ingres |
m |
Microsoft SQL |
o |
Oracle |
x |
Informix |
Also see Embedded SQL for jBC. |
-S |
Generate C code and terminate. |
Notes:
- Optimization levels by default are set to level 2. Once an application has been debugged
and is ready for release then Optimization level 4 should be invoked.
- Some of the options only refer to Unix platforms.
- Any options not listed here are automatically passed to the C compilation system. All
options must be preceded by a hyphen character
Simple Examples
jbc invoices.b
The simplest form of the command compiles the jBC source program invoices.b, held in
the current directory then writes the resultant
executable code into the default file a.out in the same directory.
jbc -JO4 myjbc.b cfunctions.c anobject.o -o myapp
This command compiles the jBC code in the file myjbc.b, the C code in cfunctions.c, and
links the resultant object code with the existing object code anobject.o to produce the
UNIX executable myapp. The optional parameter -JO4 informs the compiler that full
optimization is to be carried out on the jBC and C code.
COMPILATION AND EXECUTION ENVIRONMENT VARIABLES
The jBC compiler and executables produced using jbc recognize a number of UNIX
environment variables. Environment variables are normally maintained using your current
command shell but may also be manipulated from jBC and C programs. They are used to inform
any commands you execute of specific options or configuration requirements. The compiler
uses environment variables to specify runtime emulations, compilation options and
directory paths for locating source code when debugging.
To minimize the effort of using and configuring the compilation system, the jbc command
assumes sensible defaults for all configurable options. Most programmers will only be
concerned with the compilation option for emulation.
JBCEMULATE
When importing code from existing environments, this variable tells the compiler what
system it originally ran on. Note that programs and subroutines imported from different
systems may be freely mixed. The R83 default will suit almost all code. Values: ROS, R83,
PRI, ULT, ADS, FUJ, UNV, UND, SEQ
PATH
The path variable contains a list of all directories that contain executable programs.
The jBASE release path should be included in the path list so as jBASE commands can be
seen and executed. The path for you should also be added to the path list. For example :
export PATH=$HOME/bin:$PATH (Unix )
set path=%home%\bin;%PATH% (Windows)
LIB NT/Win95
LIBPATH AIX
SHLIB_PATH HPUX
LD_LIBRARY_PATH UNIX
This environment variable should be set to contain paths to located shared and archived
libraries, for linking with subroutines and main programs.
COMPILER ERROR MESSAGES
The jbc error messages are not available for users to change. Foreign language versions
of the compiler are however available. The format of a jbc error (or warning) message is
as follows:
[ErrorCount ( RefNum)]: "FileName", LineNum (Offset) Near ..
"ErrorMessage" Line Of Source Code Containing The Error ^
Where:
ErrorCount |
the number of errors seen so far. |
RefNum |
the reference number of the error message. |
FileName |
the name of the source file where the error was found. |
LineNum |
the line number in the file where error was found. |
Offset |
the approx. character offset in the line. Tabs count as 8 chars. |
Near |
the token in error. This may be a KEYWORD. |
ErrorMessage |
meaningful message explaining the error. |
^ |
pointer to the source code where the lexical analyzer stopped. |
JBASE PREPROCESSOR - JPP
The jpp is a sophisticated macro pre processor which provides complex conditional
compilation facilities, supporting compiler directives compatible with C and BASIC
compilers.
EQUATE symbol TO substitute #define symbol or -JCDsymbol
EQUATE Day TO REM(DATE(),7) #ifdef symbol
EQUATE MonDay TO 1
IF Day = MonDay THEN CRT "Monday" #endif
JBASE CROSS COMPILER - JBCCOM CONVERTS BASIC TO C
C preprocessor - cpp C Macro Preprocessor
C Compiler - ccom
Assembler optimiser - coptim
Assembler - as
Linker - ld
Suffix |
Meaning |
.b |
jBASE Basic source file. |
.c |
"C" source file. |
Unix
Suffix |
Meaning |
.o |
Unix Object file. |
.a |
Archive library file. |
.so |
Shared library file. (SVR4) |
.sl |
Shared library file. (HPUX) |
.o |
Shared library file. (AIX) |
.so.el |
Export library |
NT/Win95
Suffix |
Meaning |
.obj |
NT Object file. |
.dll |
Dynamic linked library file. |
.lib |
Linked library for linking. |
.def |
Library definition file. |
.exe |
Executable file. |
.exp |
Export List |
Note: A .el or .exp file built by the CATALOG command is different in structure to a
.el or a .exp file built direct from jBuildSLib.
CFUNCTION EXAMPLE
EncodeKey.b
DEFC INT Crypt(VAR)
LOOP
CRT "Enter key ":
INPUT KEY
WHILE KEY NE " DO
*
* Encrypt key
*
IF Crypt(KEY) THEN
CRT "Encryption successful ":KEY
END ELSE
CRT "Encryption failed ":KEY
END
REPEAT
EncodeKeyC.c
#include jsystem.h
#include crypt.h
INT32 Crypt( UserString )
VAR *UserString;
{
char *Source;
char *Result;
/*
** Check for unassigned variable
*/
if ( UserString == NULL )
return(0);
/*
** Ensure null terminated string
*/
CONV_SFB(UserString);
/*
** Point to Source string
*/
Source = (char *) UserString->VAR_STRING_ADDR;
#ifdef DEBUGX
fprintf(stderr,"String before encryption %s\n",Source);
#endif
/*
** Encrypt Source using "az" as salt
*/
Result = crypt(Source, "az");
#ifdef DEBUGX
fprintf(stderr,"String after encryption %s\n",Result);
#endif
/*
** Copy result back to UserString
*/
STORE_VBS(UserString,(STRING *) Result+2);
return(1);
}
Compiling
|