JUNE 1992 VOLUME 4 NUMBER 6
INDEX
Hello and welcome to the June 1992 issue of Bullets!
The First Article Customer Inspection (FACI) is the process through which all Novell products
must successfully pass before they are shipped to customers. For example, with NetWare SQL
3.0 (shipping since May 26, 1992), a certain number of copies of the software were built and then
the assembly process was halted. One copy was sent to each support site where the support
person responsible for monitoring the product through development stages received the
shrink-wrapped product.
Both Austin and Walnut Creek support personnel performed the NetWare SQL v3.0 FACI. The
Austin support team installed each version of NetWare SQL v3.0 on the current operating
system, ran preliminary tests, and checked diskette contents, labeling, documentation, licensing,
etc. Simultaneously, Walnut Creek personnel performed the same process for the DAL Server
component of NetWare SQL v3.0. After both teams approved the product, Novell Operations
was notified to start the assembly process.
The last minute Service/Support FACI inspection assures us that the product is ready to go
out the door and ensures the quality of the Novell development and database products we ship to
you. It's just another way that Novell Support/ Services supports you, the Novell developer.
Happy_Programming!
Mad Poarch Director Developer Support/Service
Continuous Operations & NetWare Btrieve v6.0
NetWare Btrieve v6.0 is a core component of NetWare SQL v3.0, the latest version of
Novell's relational data access system for NetWare v3.11. In the March 1992 issue of Bullets, a
special supplement on NetWare SQL v3.0 briefly mentioned the enhancements to the product.
One of the new features of the NetWare Btrieve v6.0 engine, Continuous Operations, allows you
to back up Btrieve files while they are in use by Btrieve or NetWare SQL applications. This
article will discuss the new design in more detail and explain how to implement Continuous
Operations to provide uninterrupted access to Btrieve files, even during backups.
In the past, Btrieve users were unable to back up Btrieve databases while running
applications because, if Btrieve files were in use during a backup, a file (or set of files) could be
in an inconsistent state when the file was backed up. Backups do not occur instantaneously; they
take time, so one file could be backed up, then a change could be made to a group of files before
the other files were backed up. The backup would then be useless since the files would be out of
sync.
Versions of Btrieve prior to v6.0 used pre-image files to record changes being made to
corresponding Btrieve files. To maintain pre-v6.0 Btrieve file consistency, the pre-image files
also would have had to be backed up. Then, after restoring the database, the pre-image files could
be used to restore the Btrieve files to their original state (i.e., the state they were in before the
changes that occurred while the backup was being performed).
Novell also recommended that files created with earlier versions of Btrieve should always be
flagged Non-Sharable to the operating system. This flag prevented file corruption by allowing
only one entity (such as the NetWare Btrieve NLM) to access a Btrieve file at a time. This
precaution also prevented software from backing up Btrieve files whenever an application was
accessing them. The operating system would return a "sharing" error and the backup would fail.
Each of these issues is addressed in NetWare Btrieve v6.0. Some understanding of the new
design is required before discussing how to implement these online backups using Continuous
Operations.
Shadow Pages & PATs
Versions of Btrieve prior to v6.0 used pre-image files extensively;any change made to a
Btrieve file required the creation of a pre-image file. The NetWare Btrieve v6.0 file structure has
been altered to eliminate the need for pre-image files. The new design uses a technique called
shadow paging and a structure called a Page Allocation Table (PAT). With shadow paging, each
page involved in write operations is duplicated and any changes made to the file are written to
the duplicate copy. In the event of a system failure,recovery is accomplished by invalidating the
duplicate copy of all pages. If a change is completed successfully, the altered copy of the page
becomes "current."
The PAT structure is integral to this file management scheme. PAT pages keep a record of which
physical pages are copies, and which copies are "current" at any given time. This design
maintains Btrieve files in a consistent state and data integrity is managed within the file itself, not
in a pre-image file.
Continuous Operations
When Btrieve files are placed in Continuous Operation mode, NetWare Btrieve
immediately creates a "DELTA" file for each Btrieve file.This DELTA file is given the same
name as the Btrieve file except that it has a ".^^^" extension. So, if the file "patients.btr" was
placed in Continuous Operation mode, then the resulting DELTA file would be named
"patients.^^^."
Next, if the Btrieve file is not already open (for some application), NetWare Btrieve opens it in
"Read-Only, Sharable"mode, so that the file can be accessed by a Btrieve application while it is
in Continuous Operation mode. If the Btrieve file is already open, the open mode for the Btrieve
file is switched to"Read-Only, Sharable." Backup software can then begin to back up all Btrieve
files that are in Continuous Operation mode.
While files are in Continuous Operation mode, NetWare Btrieve uses the DELTA files
mentioned above to record all changes made to Btrieve files. If a user accesses Btrieve files while
they are open in Continuous Operation mode, NetWare Btrieve v6.0 writes all user modifications
to the DELTA files. DELTA files are NetWare sparse files, and their sizes (as seen in a DIR
command) are usually be larger than the space they occupy on disk.
Because NetWare Btrieve writes all modifications to DELTA files,the original Btrieve files can
be kept in a consistent state while the file is in Continuous Operations mode. Btrieve v6.0 files
can then be backed up without the consistency problems that would arise with files created with
previous versions.
After a backup is completed, the files can be removed from Continuous Operation mode. When
NetWare Btrieve v6.0 receives a request to remove files from Continuous Operation mode, it:
- Begins a TTS transaction,
- Transfers all changes recorded in all DELTA files to the Btrieve files,
- Deletes the DELTA files, and
- Ends the TTS transaction.
TTS transactions are used to ensure that either each of these steps are executed or none are
executed. Because this is when NetWare Btrieve actually writes to the Btrieve files, it is very
important to keep the files in sync.
Implementing Continuous Operations using BUTIL and NSUTIL
BUTIL and NSUTIL are two utilities included with NetWare SQL v3.0 which can be used
to activate Continuous Operations. BUTIL and NSUTIL are both NetWare Loadable Modules
(NLMs) and can be used at the NetWare server console.
If you want to place a single Btrieve file in Continuous Operation mode, you can use the
following command:
load butil -startbu Btrfilename
In this command, "startbu" stands for "start backup" and"Btrfilename" refers to the fully
qualified path and filename of the Btrieve file, including the volume name. So, if "test1.btr"were
a file in the "dir1" directory off the root level of the SYS volume, the command would be:
load butil -startbu sys:dir1\test1.btr
If you wish to place a group of Btrieve files in Continuous Operation mode, list each filename in
an ASCII file, and issue the following command at your server console:
load butil -startbu @ASCIIfilename
In this command, "ASCIIfilename" refers to the complete path and name of the ASCII file.
To remove Btrieve files from Continuous Operation mode, use one of the following commands:
load butil -endbu Btrfilename
or
load butil -endbu @ASCIIfilename
where "endbu" stands for "end backup."
NetWare SQL v3.0 also includes support for named databases. NSUTIL uses this feature to
implement Continuous Operations. The named database feature allows a user to link a name with
a particular database, so that operations can be performed on the database without specifying the
location of the data dictionary and each data file.
The following command will place all files that are part of the"Dbname" database into
Continuous Operation mode:
load nsutil -startbu dbname
Because of the way named databases are implemented, "dbname" does not have to contain a path
pointing to the location of the database; only the name of the database is required.
If you want to place multiple named databases in Continuous Operation mode, use the following
command:
load nsutil -startbu @ASCIIfilename
where "ASCIIfilename" is the complete path and name of the ASCII file that lists the
named databases.
To remove the databases from Continuous Operation mode, use one of the following commands:
load nsutil -endbu dbname
or
load nsutil -endbu @ASCIIfilename
Implementing Continuous Operations Using a TSA
NetWare SQL v3.0 includes a Target Service Agent (TSA) that allows you to use any
backup utility that complies with Novell's SMS(Storage Management Services) architecture to
backup named databases. This component of NetWare SQL v3.0 is called TSA-NWS.NLM and
it uses TSA.NLM (provided with NetWare 3.11) to communicate with the backup utility.
TSA.NLM and TSA-NWS.NLM are designed to be loaded at the target server (the server where
the databases to be backed up reside). The backup utility should be loaded at the host server (the
server where the backup device resides).
TSA-NWS allows the user to specify the names of the databases that are to be backed up. These
databases are then individually placed in Continuous Operation mode, backed up, and then
removed from Continuous Operation mode. Additional documentation is included in the
NetWare SQL Installation and Operation manual. This method cannot be used to back up
individual Btrieve files.
Additional Tips
- Placing files in and removing files from Continuous Operation mode is an
atomic process; either all of the files specified or none of the files specified are effected. If, for
any reason, NetWare Btrieve encounters an error in either of these mode change procedures, it
returns a status 88 (Incompatible Mode Error) at the server console.
- Do not delete DELTA files. These files contain all changes made to the Btrieve files since
they were placed in Continuous Operation mode.
- Do not back up the DELTA files. If this occurs and the DELTA files are later restored
with the backed up Btrieve files, then any subsequent access to the associated Btrieve files will
make NetWare Btrieve read the DELTA files first, and "roll-in" the changes.
- If Btrieve files have been assigned Btrieve owner names, BUTIL, NSUTIL, and
TSA-NWS can still perform their Continuous Operation functions without the owner names
being specified. (This is not considered to be a security violation since these functions can only
be performed at the server console or through RCONSOLE, and this implies that the user has
SUPERVISOR rights on the file server's resources.)
- As with previous versions of NetWare Btrieve, all Btrieve files should have unique
names. Files with different extensions are not considered unique. For example, if files named
"file1.btr" and "file1.dat" were part of a set of files that were placed in Continuous Operation
mode, NetWare Btrieve would create the DELTA file, "file1.^^^," for the first file it encountered.
For the second file, however, NetWare Btrieve would detect that a DELTA file already existed
and return a status 88 to the server console. As a result, neither file would be placed in
Continuous Operation mode.
NetWare SQL v3.0 has been released only for the NetWare 3.11 environment. The
NetWare SQL VAP for NetWare v2.x and XQL client runtimes have not been upgraded to v3.0
at this time. NetWare Btrieve v6.0 is currently available as a component of NetWare SQL v3.0,
not as a standalone product. For questions on availability and future product releases, please
contact 1-800-RED-WORD(1-800-733-9673) or 1-512-794-1796. For technical and developer
support questions regarding any released Novell products, please call 1-800-NETWARE
(1-800-638-9273) or 801-429-5588.
DAL Syntax for Field Names (NetWare SQL v3.0)
DAL, Apple Computer's Data Access Language, provides Macintosh users with a standard
method of accessing databases. When trying to access field names that contain a blank from a
DAL application,DALSVR.NLM returns an "error in line 1" message if the syntax is not correct.
Even if the field in question is on line 20 of the statement, the message will still read "error in
line 1." This error is returned even when you use the default blank replacement character (^) in
the field name. In addition, the blank can not beset to a character other than the caret from a DAL
client, and tables with field names containing blanks cannot be created from a DAL client.
A special syntax supported by DAL allows access to field names containing blanks. Such fields
must have a "@" character before and after the field name and use the "^" in place of the blanks.
For example, the Appointments table, one of the sample data files included with NetWare SQL
v3.0, consists of the following fields:
ID Doctor
Appointment Date Code
Appointment Time Amount Paid
AM/PM Date Paid
The syntax required for a DAL client to access these fields would be:
SELECT ID, @Appointment^Date@, @Appointment^Time@
FROM Appointments;
SpxTerminateConnection( ) loses ECB (NetWare v3.11)
An SPX bug in NetWare v3.11 can cause an Event Control Block (ECB)to be used during
a call to SpxTerminateConnection( ). In this situation, the ECB is not returned to the listening
pool and your NLM eventually will run out of ECBs.
A patch called SPXFIX1.NLM, included with 311PT5.ZIP corrects this situation. This file can
be downloaded from NetWire (NOVLIB, LIB1).
Required Changes to ScanFileEntry API (NetWare C Interface DOS v1.2)
ScanFileEntry( ) does not function properly with NetWare 2.x. The API tries to make both
NetWare 3.x- specific and NetWare 2.x-specific NetWare Core Protocol (NCP) calls. The
NetWare 2.x NCP was intended to be identical to the ScanFileInformation API,although several
problems are evident in the source.
To make ScanFileEntry( ) work properly, modify the file, SCFILE.C(in the \CLIENT directory
of the NetWare C Interface for DOS v1.2),as shown in Figure 1.
FIGURE 1: Necessary Modifications to SCFILE.C
:
:
if (!isV3)
{
/* - Send out the package for a NW 2.x request -*/
:
:
memmove( &requestBuff[8], searchPath, searchLength );
/* MODIFICATIONS required for NW 2.x NCP to function correctly
*/
*(WORD *)&requestBuff[0] = searchLength + 6;
*(WORD *)&replyBuff[0] = 94;
replyLength = 94;
/**** end of changes *****/
/*...send the NW 2.x NCP...*/
ccode = _NCPConnRequest( serverConnID, 0x17, requestLength,
&requestBuff[0], replyLength,
&replyBuff[2] );
}
:
:
if( !ccode )
if( !isV3 )
{
/* - Fill in fileEntry according to NW 2.x return values -*/
/* changed LONG to WORD since NW 2.x only requires 2 bytes */
fileEntry->attributes = *( (WORD *)&replyBuff[18] );
:
:
}
else
:
:
(End of Figure 1)
Printing In Landscape Mode with SLATE (Xtrieve PLUS for DOS v4.10)
You can use the SLATE utility to print in landscape mode in XtrievePLUS for DOS
v4.10. Start SLATE as follows:
SLATE xtrieve.pdb
If your workstation hangs, consult the README.DOC file on the Xtrieve PLUS diskette which
contains a section on the -V startup parameter. When SLATE starts, the SLATE Main Menu
screen will appear.
In SLATE, select "Add/Edit Devices (Ptr Connections)" to enter the SLATE Devices screen.
Move the cursor down to an unused line and enter an unused number (e.g. 4001). The SLATE
Device Data screen will then be displayed. Set the options to the values listed below(use the
down arrow key to move through the options):
- Dev. Code: 4001 (already entered)
- Function: LandScape (and any other desired definitions)
- Ptr Mfg: use F9 key to see options and select one, e.g. Hewlett Packard
- Ptr Type: use F9 key to see options and select one, (e.g. LaserJet II (LS) where "LS"
indicates "LandScape")
You do not need to change the options between Ptr Type and Paper Length.
- Paper Length: change "11.00 inches" to "8.50 inches"
- Paper Width: change "8.50 inches" to "11.00 inches"
- Top Margin: must be at least "0.25 inches"
- Bottom Margin: must be at least "0.25 inches"
- Left Margin: any value
- Right Margin: any value
After entering each of these definitions, press the F10 key to return to the Device Data
screen. Press F10 again to return to the SLATE Main Menu and a third time to exit from the
utility.
Next, start Xtrieve PLUS. Make sure the "Printers" switch in the Main/ Configure/Switches
menu is set to "ON." From the Main/Configure/Print menu, select the "Database" option and
enter the location of XTRIEVE.PDB (which SLATE will use to define landscape printing). Then,
select the "Printer" option and choose the proper printer (the Hewlett Packard III is not on this
list choose Hewlett Packard II (LS) instead). Finally, select "Device"from the
Main/Configure/Print menu and choose the "LandScape"definition (this option will be the one
that was used for the Function option in SLATE). Xtrieve PLUS will now print in LandScape
mode.
Modifications for UNLOADNO example (Network C for NLMs v2.0(c))
UNLOADNO is an example program supplied with v2.0(c) which prevents NLMs from
unloading. The example does not set and restore the ThreadGroupID inside the CHECK
function. (The example also appeared in Bullets, March 1992, on page 7.)
To ensure that the program functions properly, save one NLM's ThreadGroupID in a global
variable or any place from which the CHECK function can retrieve it. For example, create a
global variable called "MyThreadGroupID." Store the ThreadGroupID of the main( ) thread in
this global variable when the NLM starts. Inside the CHECK function, set the ThreadGroupID to
the value in MyThreadGroupID. Before exiting, reset the ThreadGroupID to the value it held
before the CHECK function was called.
IPX/SPX "In-Use" Flag (NetWare C Interface for DOS v1.2)
Sometimes, after a program performs an IPX or SPX send and then polls the "in-use" flag,
your workstation may appear to lock up while the program waits for the flag to be set to zero. In
this case, the flag is never set to zero; it is set to 0xF8, which means that the send was attempted
while IPX was busy and the ECB has been put on a queue for later processing.
This situation usually occurs with code that runs off the Timer tick or some other interrupt. The
code posts a "Listen" with an Event Service Routine (ESR), which re-enables interrupts. Code
that runs off the Timer tick sends a packet and then waits for the "in-use" flag to clear. If the
timer triggers while the "Listen" code is in the ESR , the send polls forever with the "in-use" flag
set to 0xF8. The machine appears to be locked up.
The simplest way to avoid this situation is to avoid polling the"in-use" flag. Either use an ESR or
leave the timer interrupt unchecked and check it the next time around.
Btrieve for OS/2 Prototypes (Btrieve for OS/2 v5.10)
The local version of Btrieve for OS/2 v5.10 (BTRCALLS.DLL) works with OS/2 v2.0,
but OS/2 v2.0 developers writing 32-bit applications or DLLs to call the 16-bit
BTRCALLS.DLL must modify the interface in order to alias the 32-bit pointer and integer
parameters. IBM C Set/2 provides macros you can use to make these changes.
Calling the 16-bit Btrieve for OS/2 v5.10 DLL is a simple matter of rewriting the BTRCALL()
prototype. The current prototype for OS/2 v1.X is shown in part A of Figure 2. The prototype for
a 32-bit application or DLL is shown in part B. With IBM C Set/2,everything else is handled by
the compiler and linker. (Btrieve for OS/2 applications written for OS/2 v1.X will run
successfully under OS/2 v2.0.)
FIGURE 2: BTRCALL prototypes for OS/2
Part A: Prototype for OS/2 v1.x
extern int APIENTRY BTRCALL (USHORT, PSZ, PSZ, PUSHORT, PSZ, CHAR,UCHAR);
Part B: Prototype for a 32-bit application or DLL
extern SHORT APIENTRY16 BTRCALL (USHORT, UCHAR _Seg16 *, UCHAR _Seg16 *,
USHORT _Seg16 *, UCHAR _Seg16 *, CHAR, UCHAR);
End of Figure 2
Print Server File Specifications (NetWare v3.x)
Figure 3 contains the specifications for three files that are created by a NetWare Print
Server. The three files are:
- PRINT.00X
- QUEUE.00X
- NOTIFY.00X.
FIGURE 3: Specifications for files created by NetWare Print Server
QUEUE.000
struct /* Queue to be serviced structure */
{
BYTE name[48]; /* Name of queue */
BYTE priority; /* Priority of this queue */
} queue;
NOTIFY.000
struct /* Object to be notified structure */
{
BYTE name[48]; /* Name of object */
WORD type; /* Type of object */
intial, /* Time before first notice */
repeat; /* Time between notices */
} notify;
PRINT.000
struct
{
char name[48]; /* Name of printer */
WORD printerSubtype, /* Subtype of printer */
useInterrupts, /* Use interrupts or polling? */
irqNumber, /* IRQ number for printer interrupt */
serviceMode, /* Queue service mode */
buffersize, /* Buffer size in K */
baudRate, /* Baud rate (Serial only) */
dataBits, /* Data bits (Serial only) */
stopBits, /* Stop bits (Serial only) */
parity, /* Parity type (Serial only) */
useXonXoff, /* Use X-On/X-Off protocol? (Serial Only)
*/
currentForm; /* Currently mounted form */
} PCONFIG;
End of Figure 3
These files are located under the SYS:\SYSTEM\PRINTERSERVERID directory of the
Print Server. The exact extension depends on the queue number in sequence. The files are simple
flat files that store data sequentially.
Each printer will have a unique file, PRINT.XXX, that will contain the printer name. One
QUEUE.XXX file and a NOTIFY.XXX file will be associated with each printer. For example: if
PRINT.010 corresponds to the HPLaser, associated with it will be a QUEUE.010, which contains
all the queues for that printer, as well as a NOTIFY.010 file, which will contain any objects to be
notified. (If no notification objects are selected, NOTIFY.XXX will not exist.)
NSUTIL.NLM Usage (NetWare SQL v3.0)
When using the NSUTIL.NLM utility provided with NetWare SQL v3.0,many of the
commands require one or more filenames as parameters or options. For example, the syntax for
the BLOAD (bulk load)option is:
LOAD NSUTIL -BLOAD
table sequential_file
[Options]
All file names must be specified with their volume:path. In addition, the options that indicate a
particular path (such as /D:for the dictionary path and /F: for the data file location) also must be
specified with volume:path. If the volume is not included,a status 91 - Server Error will be
returned.The following example would only be valid if it were entered on a single command line:
LOAD NSUTIL -BLOAD
Patients SYS:\DB\input.txt
SDF /D:SYS:\DB /F:SYS:\DB
When running NSUTIL at the server, the command line is limited to 80 characters, so there may
not be enough room to type the entire command with fully qualified path names. In this case,
there are two options: either put the entire command in a NetWare Command File (NCF) or use
an NSUTIL command file.
To use a NCF file, create an ASCII file with a .NCF extension.Place the entire command as it
would be entered at the console on a single line in this file. If the command is split over multiple
lines in the NCF file, various errors might occur, including a status 12 (File Not Found). The line
in the NCF file can be up to 130 characters long. If the entire command is more than 130
characters, an NSUTIL command file must be used, as described below.
An NSUTIL command file is used by specifying an @FileName after the LOAD NSUTIL
command, either at the server console prompt or within a NCF file. The command file name
must be fully qualified,including the volume and path name. For example,
LOAD NSUTIL @sys:\db\bload1.txt
The command line can consist of multiple lines, each up to 130 characters. The only restriction is
that any one parameter must reside entirely on a single line.
The first entry in the NSUTIL command file must be the command to be performed. This syntax
allows for the longer paths to be specified for the various parameters. NSUTIL command files
can be used with the NLM and client versions (DOS and OS/2) of NSUTIL.
As a final note, BUTIL.NLM v6.0 (a Btrieve utility does NOT require a volume name when
specifying a file or path parameter. The SYS:volume will be assumed. The volume only needs to
be specified if the file is on a different volume than SYS:. Also, if you do not specify a path, the
root of the SYS: volume is assumed. BUTIL also supports the command file syntax.
Validating Key Buffers with Btrieve for Windows & OS/2 (Btrieve for Windows
v5.10)(Btrieve for OS/2 v5.10)
The client version of Btrieve for Windows will validate pointers when using the
"tracefile= " line in the [Btrieve]paragraph of WIN.INI. When using NetWare Btrieve
and the requester for Windows, setting "chkparms=yes" in the [BrequestDPMI] paragraph will
validate pointers. Client versions of Btrieve for OS/2 will validate pointers when the
environment variable, "BTRPARMSCHK," is set equal to "Yes."
Btrieve validates the pointer parameters passed in for read/write access over certain ranges. If the
pointers passed to Btrieve do not have access to memory specified by the pointers, a status 1015
will be returned. If you are using the "tracefile=" method, Btrieve for Windows will return
"INVALID POINTER parameter #?" in your tracefile, where "?" would be one to four referring
to the position block, data buffer, data buffer length, and key buffer respectively.
The key buffer parameter is always evaluated for the maximum number of bytes (255) regardless
of what is specified in the key buffer length parameter. So, to use pointer validation
effectively,allocate the key buffer parameter as a pointer to a block of 255 bytes.
Sessions & NetWare SQL (NetWare SQL v3.0)
As stated in "Sessions and NetWare SQL" in Bullets (May 1992),NetWare SQL v3.0 is
stratified by session count. A session is defined as a login to NetWare SQL. A connection is
defined as a login to the NetWare operating system.
On the RESOURCE USAGE screen in the NetWare SQL Monitor Utility(NDBMON.NLM),
several values are displayed indicating how many NetWare SQL logins are active, what the peak
login count has been,and the maximum number of logins allowed. This maximum number is
determined by the session count of each copy of NetWare SQL. A 50-user system will have "50"
displayed for the maximum number of sessions. RESOURCE USAGE uses the word "session"
when referring to the number of NetWare SQL logins.
SPX sessions are displayed in the Communication Statistics screen in NDBMON.NLM. This
session count indicates the number of SPX connections that NSSPXCOM has in use, not the
number of logins to NetWare SQL. If an OS/2 or Windows workstation runs multiple NetWare
SQL applications, there is one SPX session per workstation.
Figure 4 contains a table illustrating the relationship between NetWare SQL and SPX sessions.
You cannot configure NetWare SQL sessions, which are based on the number of sessions
purchased.However, SPX sessions can be configured from NDBSETUP.NLM. The option to
configure the SPX sessions is "SET NETWARE SQL CONFIGURATION."
FIGURE 4: Relationship between NetWare SQL & SPX sessions
Resource Usage Comm. Statistics
OS/2 Workstation 3 Sessions 1 SPX Connection3 NetWare SQL Apps.Running
Windows Workstation 3 Sessions 1 SPX Connection3 NetWare SQL Apps.Running
DOS Workstation 1 Session 1 SPX Connection1 NetWare SQL App.Running
TOTAL: 7 Sessions 3 SPX Connections
End of Figure 4
Fast Answers to Common Questions
NetWare SQL
Q - Once Referential Integrity (RI) has been defined on a NetWare SQL v3.0 database
and referential constraints have been defined on the tables, is there an easy way to disable RI for
that database?
A - No, there is no quick way to disable RI. Deleting RELATE.DDF will not disable
RI because there will still be an entry in FILE.DDF and the table definitions will still contain
referential constraints. Also, you cannot drop x$Relate from the dictionaries. To successfully
disable RI, you must alter all table definitions.
Xtrieve PLUS
Q - With Xtrieve PLUS v4.x, can I use the double quote (") character as part of a
string constant?
A - Since Xtrieve PLUS v4.x uses the double quote (") character to delimit string
constants, you can not specify a constant containing a double quote. For example, a restriction
such as 'StringField CONTAINS ' where the constant is a double quote (") character
returns a status 298 (Mismatched Quotes) when the restriction is completed. You can, however,
use single quotes in any string constant.
Btrieve
Q - Can a supplemental index be created through Btrieve or NetWare SQL at the time
that the Btrieve file is created?
A - No. Btrieve ignores bit 7 of the key flags at create time, and this is the bit that
designates an index as supplemental. As a result all indexes are created as permanent.
Q - Does a user need create rights in the directory where a Btrieve file is stored, in
order to open that file in accelerated mode?
A - Yes, create rights are necessary because, even in accelerated mode, Btrieve may
create a pre-image file. For example, during an Insert (2), if an index does not allow duplicates
and the record being inserted causes a duplicates error to be returned, any pages that have already
been updated for the Insert would need to be rolled back. The pages to be rolled back would
remain in cache until the cache is full and needs to be flushed, and the operation would not be
completed.
Q - When I am attached to a lot of NetWare v3.11 servers (24), each running the
NetWare Btrieve NLM v5.15, I get a status 38 (Transaction Control File I/O) even though each
Btrieve NLM is configured for transactions. What should I do?
A - Check the /s parameter (number of file servers) on Brequest to see if it is large
enough. A higher setting may stop the status 38.
NetWare C Interface for Windows
Q - When I am running a DOS application from a Windows DOS box, can I make
windowed DOS sessions display more than the usual 25 lines?
A - Yes, you can make windowed DOS sessions display 50 lines by adding the line,
"ScreenLines=50," to the [NonWindowsApp] section of your SYSTEM.INI file.
Network C for NLMs
Q - If any of the API functions exported by PATCH311.NLM is used in another
NLM, my linker issues unresolved linker errors. What should I do?
A - There is no .IMP file associated with the APIs exported by PATCH311.NLM.
Therefore, if any of these APIs are used in an NLM, make sure to import the appropriate symbol
names in the .LNK file of the NLM. Otherwise, the linker will return unresolved linker errors.
These symbols are resolved at load time.
Q - From an NLM, how can I force a file write( ) to the disk?
A - Use FEFlushWrite( ), or open the file with FEsopen( ) with the flagBits parameter
set to FILE_WRITE_THROUGH_BIT.
Q - Which API returns the screen handles of all loaded NLMs?
A - ScanScreens( ) (Available with PATCH311.NLM).
NetWare System Calls for DOS
Q - The NetWare System Call, IPXGetInternetworkAddress( ), returns invalid data in
the ES:SI register, instead of returning the Internetwork Address. Why does this occur?
A - The documentation for IPXGetInternetworkAddress (function 09) contains an
error. It states that ES:SI register will point to the Internetwork Address on return from the
function. However, ES:SI should also point to the reply buffer on entry to the call.
NetWare for SAA
Q - When I run NetWare for SAA with NetWare v3.11 in an environment with heavy
network traffic, the server sends system warning messages indicating that the Alloc Short Term
Memory pool has reached its limit. What should I do?
A - If this happens, increase the memory pool by increments of one MB until the
system warnings no longer appear.
Btrieve for DOS v5.10 Patches
For a description of patches 1 through 114, refer to earlier issues of Bullets.
115. Btrieve (DOS, Windows, OS/2) If Btrieve is configured with no compression
buffer, or with a compression buffer that is not large enough ( /u parameter ), the Step operations
will incorrectly return a status 54 (Variable Page Error). This patch ensures that the correct return
code, status 58 (Compression Buffer Too Short) is returned.
NetWare Btrieve (VAP, NLM) v5.15 Patches
For a description of patches 1 through 52, refer to earlier issues of Bullets.
53. (BTRIEVE.NLM) Reading or updating a particular corrupted file caused an
unrecoverable error but did not return a status code. This patch returns a status 19 in that case.
54. (BTRIEVE.NLM) On a key-only file, if an autoincrement field does not begin at
the first byte, the second insert with binary zero value in that field does not work and Btrieve
returns a status 5 (Duplicate Key). This patch resolves the situation.
55. (BTRIEVE.NLM) After adding two supplemental indexes and removing one of
them, the other index can no longer be accessed. This patch ensures that the second index can
still be accessed.
56. (BTRIEVE.NLM) If you use BREQUEST.EXE v6.0 (included with NetWare
SQL v3.0) and attempt to open a file in Read-only mode, and you only have Read rights in the
file's directory, Btrieve will incorrectly deny the Open call and return status 94 (Permission
Error). This patch resolves the situation.
57. (BTRIEVE.NLM) A Get Next Extended (36) operation following a
GreaterThanOrEqual with Key-only bias (59) returns a status 19 (Unrecoverable Error). This
patch ensures that the Get Next Extended operation will complete successfully.
58. (BTRIEVE.NLM, BSERVER.VAP) If you set up an extended step/get operation
to only return record positions (NumOfFields = 0) and no record data, BTRIEVE.NLM will
return a status 62 (Incorrect Descriptor). The operation will work with BSERVER.VAP, but the
VAP may return a status 22 if the data buffer is the exact length required to return the data. This
patch corrects both situations and returns the record positions.
59. (BTRIEVE.NLM, BSERVER.VAP) If a workstation tries to update or delete a
record which a second workstation has changed since the first workstation read that record,
Btrieve returns a status 80 (Conflict). However, Btrieve incorrectly allows the Conflict condition
to be cleared after the first workstation performs any of the following operations: Stat (15),
Unlock (27), Set Owner (29), Clear Owner (30), Create Supplemental Index (31), or Drop
Supplemental Index (32). This patch corrects the situation; the first workstation must reread the
record before changing it.
60. (BTRIEVE.NLM) When NetWare TTS, working on disk I/O, detects a hardware
error, it dismounts the volume. Sometimes Btrieve does not detect this action, and as a result,
hangs the server. This patch ensures that Btrieve detects when a volume is dismounted.
61. (BTRIEVE.NLM, BSERVER.VAP) If an application updates a record and
changes a Zstring or Lstring key (flagged with the NULL or MANUAL attribute) from NULL to
non-NULL (or vice versa) by changing bytes beyond the end of the Zstring/Lstring from the null
character to any other character (or vice versa), the index is not updated to reflect the change in
the key. This patch ensures that the index is updated.
62. (BTRIEVE.NLM) This patch corrects a situation in which, under very heavy use
with many Open (0) and Close (1) operations on the same file by several different threads, a
thread can enter an infinite loop.
63. (BTRIEVE.NLM, BSERVER.VAP) If a client application receives a status 80 on
an Update (3) operation because a second client has updated the record since the first client read
it, and then the first client performs a Get Position (22) operation, an incorrect status 8 (Invalid
Positioning) is returned. This patch ensures that a status 0 (Successful Operation) and a valid
record address will be returned by the Get Position operation.
Xtrieve PLUS for DOS v4.10 Patches
For a description of patches 1-15, refer to earlier issues of Bullets.
16. This patch ensures that Xtrieve PLUS v4.10 always translates date values properly
when you print a report to Lotus 1-2-3.
Novell Education offers classes for many of the database &development products including
Btrieve, XQL, NetWare SQL, XtrievePLUS and the NetWare Client APIs. These classes are
designed to introduce participants to the powerful features of Novell's development tools,
database products, and NetWare services. Nearly 50% of class time is devoted to hands-on
activities.
- 901 - Programming with NetWare Client APIs
- 920 - Programming with NetWare Communication Services
901 and 920 classes can be scheduled through a Novell Authorized Education Center. Call
1-800-233-3382 or 801-429-5508 for more information.
- 904 - Btrieve: An Overview
Aug. 11 Sunnyvale, CA Sept. 15 Chicago, IL
- 905 - Programming with Btrieve
Aug. 12-14 Sunnyvale, CA Sept. 16-18 Chicago, IL
- 907 - Xtrieve PLUS
July 14-15 Dallas, TX Sept. 15-16 Washington, DC
- 930 - Developing NetWare Loadable Modules (NLMs)
July 15-17 Washington, DC Sept. 15-17 Washington, DC
To register or obtain information on pricing, location and course content for classes held
in the US, call 1-800-233-3382,1-801-429-5508 or 1-800-NETWARE. International customers
should call 1-801-429-5508.
All courses are subject to cancellation or rescheduling within two weeks of the scheduled date,
depending on enrollment.
For information on availability, location, and prices of international classes, contact your local
Novell office.
Test your "developing" skills by taking our Fun & Facts quiz. Have fun and good luck! (See the
end of this section for answers.)
1. A reentrant NLM executes the _Prelude function the first time the NLM is loaded
and does not execute it on subsequent loads.
A. True
B. False
2. How many simultaneous Named Pipes connections does the OS/2 Requester v1.3
support?
A. 255
B. 254
C. 250
3. The filter portion of a Btrieve Extended Get operation must be an index value.
A. True
B. False
4. What NLM is loaded to configure SPX parameters like "timeout," and "retries?"
A. SPXCFG
B. SPXCON
C. SPXCONFG
D. INSTALL
5. What socket number is used by NetBIOS packets?
A. 0x451
B. 0x452
C. 0x453
D. 0x455
6. What is the sequence of keystrokes in Xtrieve PLUS to switch between Edit mode and
Browse mode?
A. Alt-F7
B. Ctrl-F8
C. Ctrl-M
D. Alt-M
7. Under NetWare 2.x, which API allows a VAP to accept a user response to an error
condition?
A. DisplayError()
B. ConsoleError()
C. DoConsoleError()
D. VAPError()
8. In the NetWare 2.x VAP environment, what is returned by an AllocateSegment call when
the call is made in protected mode?
A. Fragment descriptor
B. Segment descriptor
C. Offset
D. Pointer to a function
9. What is the default stack size in a NetWare Loadable Module?
A. 1024 bytes
B. 4096 bytes
C. 8192 bytes
D. None
10. What console command is used to view the protocols registered on your file server?
A. Secure Console
B. Protocol
C. Modules
D. Display
11. What is the maximum possible size for a Btrieve file?
A. 540 Megabytes
B. 2 Gigabytes
C. 4 Gigabytes
12. In the NetWare environment, which IPC protocol does Named Pipes use?
A. NetBIOS
B. IPX
C. SPX
D. TCP/IP
FUN & FACTS ANSWERS
1. A
2. A
3. B
4. C
5. D
6. B
7. C
8. B
9. C
10. B
11. C
12. C
Developer Support
Developers in the U.S. and Canada may contact Novell Developer Support via telephone, fax,
BBS or electronic mail via CompuServe, MHS or the Internet.
Voice
For both presales and postsales support, call Novell Developer Support between 8:00 a.m. and
5:00 p.m. Mountain Time at 1-801-429-5588. Many calls to Novell Developer Support are
passed to a software support engineer immediately. Calls to Novell Developer Support generally
will be acknowledged or answered within four hours.
Fax
If you prefer, you may contact Novell Developer Support via fax at 1-801-429-2990. Faxed
questions are acknowledged or answered within 24 hours.
Developer BBS
If you do not have access to either CompuServe or the Internet, send test cases to our BBS. Set
your communication software to N-8-1 and call 1-801-429-5836.
E-mail: CompuServe
Post your messages in the appropriate section addressed to Novell at 76701,171. These messages
will receive a response within 24 hours.
E-mail: MHS
You may direct your questions and comments to Novell Developer Support via Novell's Message
Handling Service E-mail facility. Address your messages to devsup@novell. These messages
will receive a response within 24 hours.
E-mail: Internet (SMTP)
An alternative method of contacting Novell Developer Support is through the Internet E-mail
system. Send your messages to devsup@novell.com. These messages will receive a response
within 24 hours.
NetWire on CompuServe
Novell's NetWire forum is open to all registered CompuServe subscribers. Through the
NDEVSUP forum, professional developers writing applications with Novell development tools
can gain access to information specific to Novell development. Support, patches, periodicals and
product information, as well as information on all of the programs and services provided for
Novell developers are accessible through this forum. Post your messages in the appropriate
section addressed to Novell at 76701,171. Technical questions will be acknowledged or
answered by Novell Developer Support within 24 hours.
Novell Products and SDKs
Novell products on the "Currently Shipping Developer Products" list (see page 15 of this
issue), including the Red Box Products, are available to Novell Professional Developer's
Program members. Call 1-800-RED-WORD (1-800-733-9673) or 1-303-894-4135 to order these
products or to receive additional information. To order other Red Box Products not listed,
contact your local Novell office or Novell Authorized Reseller.
DeveloperNet Labs
For information on DeveloperNet Labs development tools, education classes and product certification,
in the U.S. and Canada call 1-800-453-1267 ext. 5544 or 1-801-429-5544, or call your local
Novell office (see back cover of this issue).
Novell Developer Relations
Novell Professional Developers or those wishing to become members may contact Novell
Developer Relations via telephone, fax, or electronic mail via Compuserve, MHS or the Internet.
Voice
For general information or questions on Novell Developer Relations programs, in the U.S.
or Canada call 1-800-RED-WORD (1-800-733-9673). All others call 1-801-429-5281.
Fax
If you prefer, you may contact Novell Developer Relations via fax at 1-801-429-7207.
NetWire on CompuServe
Novell's NetWire forum is open to all registered Compuserve subscribers. Through the
NDEVREL forum, Novell Professional Developer's Program-related issues or general questions
may be posted. Through the NDEVINFO forum, customers who do not have products may post
pre-sales product information questions on all Novell SDKs.
E-mail: MHS or Internet (SMTP)
You may direct your questions and comments to Novell Developer Relations via Novell's
Message Handling Service E-mail facility. Address your messages to devprog@novell.com. Use
the same address when going through the Internet E-mail system.
Publisher: Mad Poarch Editor: Kirk R. Humphries Design: Creative Services, Provo
Contributors: Linda Anderson Vitek Boruvka Michael Eisa David Harris Laura Heater Sudz
Khawaja Ken Lowrie Rudy McNeese Paige Parker Randy Reddy John E. Stewart Aslam Tejani
Brenda Wallace
Special thanks to the Developer Support, Development,Developer Relations, Product
Marketing, and Marketing Communications staff who contributed time and valuable input.
(c) 1992 Novell, Inc. All rights reserved.
Novell, the N design, NetWare, Btrieve, XQL and LAN WorkPlace are registered trademarks,
NetWare Lite, NetWare System Calls for DOS,NetWare Loadable Module (NLM), NetWare
SQL, NetWare Btrieve,Xtrieve PLUS, NetWare C Interface for DOS, NetWare System Interface
Technical Overview, NetWare RPC, NetWare RPC 386, NetWare LU6.2,Report Executive, and
Professional Development Series (PDS) are trademarks, and NetWire and Professional
Developers' Program (PDP)are service marks of Novell, Inc. Apple, Macintosh and AppleTalk
are registered trademarks of Apple Computer, Inc. CompuServe is registered trademark of
CompuServe Corporation. Microsoft is a registered trademark, and Windows is a trademark of
Microsoft, Inc.IBM and OS/2 are registered trademarks, and NetBIOS and SAA are trademarks
of International Business Machines Corporation. SunMicrosystems and NFS are registered
trademarks of Sun Microsystems,Inc. WATCOM is a trademark of WATCOM Systems, Inc.
|