home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The World of Computer Software
/
World_Of_Computer_Software-02-387-Vol-3of3.iso
/
p
/
pds93a.zip
/
PDSJAN93.TXT
< prev
next >
Wrap
Text File
|
1993-02-04
|
87KB
|
2,225 lines
*********************************************
*********************************************
Professional Development Series
B U L L E T S
*********************************************
January 1993
Volume 5, Number 1
*********************************************
*********************************************
*********************************************
*********************************************
MAD'S COLUMN
*********************************************
*********************************************
Hello and welcome to the January 1993 issue of Bullets!
In past issues, I have touched on planned enhancements for
developer support and developer programs. An exciting new
enhancement you will soon be seeing in documents like the Novell
Developers Guide is the SDK Grading System.
What is this SDK Grading System, you ask? Quite often, I find a
disparity between the implied maturity of an SDK and the needs of
the developer community. The SDK Grading System is structured to
eliminate the guesswork that is sometimes associated with SDKs.
Some developers don't want to see an SDK unless it has been
completely unit- and system-tested, with documentation either
nicely bound or stored on a CD, and for which education classes and
telephone support are available. Other developers are interested
in an SDK at a very early stage, when the APIs are still forming,
documentation is a less formal collection of header files and
developer notes, and support is not yet provided.
To produce the SDK Grading System, input (in the form of grades)
is gathered from the various groups (Engineering, Documentation,
Marketing, Education, Testing, Support, etc.). This input is then
combined to determine an overall grade for each SDK. An SDK's
"grade" may change over time. We hope that this process will help
Novell's developers establish their expectations for SDKs.
Happy_Programming!
Mad Poarch
Director
Developer Support/Service
*********************************************
*********************************************
ARTICLES:
Getting Started with NetWare 4.0: Directoy Services
*********************************************
*********************************************
With NetWare 4.0, Novell has introduced Directory Services to
replace the traditional NetWare bindery employed by previous
versions. NetWare 4.0 Directory Services provide many new features
and capabilities. Directory Services functionality is provided
through an extensive new Application Program Interface (API).
This article presents a basic introduction to NetWare 4.0 Directory
Services and is not intended to replace a thorough study of the
documentation. It discusses several of the new features and
advantages of Directory Services and offers a few tips and some
general information to help you begin writing Directory Services
applications more quickly. Converting existing applications from
the bindery to Directory Services is also discussed. This article
also includes example code that creates a Directory Services User
class object to provide a starting point for using the Directory
Services API.
*********************************************
Advantages of Directory Services
*********************************************
NetWare 4.0 Directory Services provides a hierarchical database
architecture to store network information. This architecture,
combined with advanced techniques for retrieving and storing
database information, provides a very flexible environment for
application development.
One of the most beneficial Directory Services features is the
network global scope of objects in the directory. An application
with sufficient NetWare rights may retrieve information about any
object in the directory without needing to be attached to any
specific server. Access to a Directory Services object and its
attribute information is limited solely by the access rights of the
client, without regard to server connection status.
Another very useful feature that is built into the Directory
Services API is that changes made to the directory database are
atomic. When an application makes changes to the directory
database, each change is completely defined before the change to
this database is attempted. When the change is actually made to the
database, if any part of the operation fails, the entire operation
fails. This makes it virtually impossible for partially defined
objects to exist in the directory.
With NetWare 4.0 Directory Services, no space is wasted in a
directory database because no minimum size is defined for
information describing objects and attributes. Objects are stored
only once in the directory, reducing the overall size of the
database.
The hierarchical database structure of Directory Services design
reduces network traffic and makes retrieving objects and attributes
very easy and efficient. You need not search the entire database
tree to locate an object; searching may be performed at any level
of the tree. Enhanced searching techniques allow objects to be
located in a variety of ways, such as using relational expressions
and wild cards. Also, objects in the directory do not advertise.
Network traffic is generated only when an application asks the
directory for information.
Finally, the entire NetWare 4.0 Directory Services Schema (the
rules that define how the directory tree is constructed) may be
modified and expanded by applications to suit specific needs. If
the defined schema does not meet your needs, you may define an
entirely new schema, or make modifications to parts of it. This
feature adds greater flexibility to the NetWare 4.0 environment.
*********************************************
Developing Directory Services Applications
*********************************************
Developing Directory Services applications requires an
understanding of concepts and ideas very different from the
knowledge required to use the bindery. When you begin studying the
manuals related to Directory Service applications, there are
several things that you should keep in mind:
* You do not need to understand everything about Directory
Services to use the Directory Services API and begin writing
applications.
* Though writing directory applications may initially seem to
be more complex than writing bindery applications, the
directory is often easier to use.
* Novell will continue to support all bindery APIs for some
time, so you may continue to use bindery calls to perform
operations until you are familiar with their directory
equivalents. If you are already very familiar with the
bindery, it may in some cases be easier to write a bindery
application and then convert it to Directory Services.
Context & Buffer Management
Begin learning how to write applications for the directory by
investigating the APIs for context and buffer management. Almost
all Directory Services functions require a context handle and a
buffer. The context handle provides information about the location
in the directory of the object to be manipulated, while the buffer
defines the operation that you want to perform. Creating a context
handle may only be required once for the life of an application,
but the creation and definition of buffers will probably be
required for each individual operation performed in the directory.
There are several APIs that you can use to manipulate contexts.
NWDSCreateContext() and NWDSFreeContext() are the only two that you
will need to begin writing applications. There are many APIs that
create, manipulate, and free buffers. The functions NWDSAllocBuf(),
NWDSInitBuf(), and NWDSFreeBuf() create and initialize buffers and
are almost always required when performing directory operations.
The NWDSPut...() and NWDSGet...() series of functions are used to
store and retrieve information in the allocated buffers. You will
use some arrangement of these calls to define the buffers which you
will then use as parameters to other functions to perform directory
operations. None of the buffering functions will change any
information stored in the directory. These functions are used only
to define the information required to perform operations. The
directory database is not modified until a directory call is made.
Once you are familiar with contexts and buffers, start making
directory calls. Stay away from the more complex operations at
first (such as defining new attributes or classes, manipulating
access control lists, and creating partitions). Begin with some of
the more straightforward operations, such as creating new objects
and reading attribute information from existing objects.
The functions NWDSAddObject(), NWDSRead(), NWDSSearch(),
NWDSModifyObject(), and NWDSRemoveObject(), are sufficient to
perform many useful directory operations while introducing you to
the capabilities of the directory database.
NWDSRead() and NWDSSearch() perform similar operations: NWDSRead()
is used to get information about an object when you know the
object's name, while NWDSSearch() is used to scan the entire
directory for object names and return information about them.
Remember that all of these functions except NWDSRemoveObject()
require that the buffer initialization and manipulation functions
be used to define the buffers necessary to make the directory call.
NWDSRemoveObject() requires only the name of the object to be
removed.
Constant values (defined in the header file NWDSDEFS.H) are used
in buffer management functions to specify which operation is
desired. For example, the constant DSV_ADD_ENTRY is passed to
NWDSInitBuf() to define a buffer to be used when adding a new
object to the directory. NWDSAddObject() is called with the defined
buffer to add the object. DSV_MODIFY_ENTRY would be passed to
NWDSInitBuf() to define a buffer to be used to change an object's
definition in the database. The actual change is performed by
calling NWDSModifyObject() with the defined buffer.
If attribute values (similar to property values in the bindery) are
to be defined, NWDSPutAttrName() and NWDSPutAttrVal() are required
to place the attribute names and values in the buffers. Attribute
values may be defined when an object is created, or they may be
added to existing objects by using NWDSModifyObject().
To perform these types of operations, review the Directory Services
Schema documentation to learn what attribute information is
available with the various object classes. The User object class
is a good place to begin, since it is a very common class and is
used frequently by the NetWare 4.0 directory. In the directory, the
User object class is analogous to the OT_USER bindery object type
in the bindery, so this class is probably a familiar place to
start.
Client & Server Considerations
There is very little distinction between the server and client
environments when writing applications that use directory services.
The only difference is that, when writing client applications, you
must initialize the Unicode tables by calling the
NWDSInitUnicodeTables() function before calling any Directory
Services functions. The required Unicode files are provided with
NetWare. Consult the documentation to determine where these files
must be located to ensure that applications can find them during
the initialization process.
The Directory Services header files use the constant value NLM to
differentiate between server and client applications. You may also
use this constant to compile conditionally for the two
environments, making it unnecessary to have two versions of the
source code.
Compilation in the two environments requires the use of several new
header files that support the Directory Services APIs. For linking,
there is a new import file for NLMs and there are new libraries for
client applications. NLMs should include the DSAPI.IMP import file
when linking, and client applications should include the NWNET.LIB,
NWCALLS.LIB, and NWLOCALE.LIB libraries.
*********************************************
Converting Bindery-Based Apps
to Directory Services
*********************************************
After becoming familiar with some of the basic Directory Services
APIs, converting a bindery application to use Directory Services
is fairly easy. Although there is no "one-to-one" correspondence
between bindery and directory functions, the subset of directory
functions that replace the functionality of the bindery is
relatively small. When you learn to use the functions required to
control and access objects and attributes in the directory, you
understand the majority of the functions needed to convert a
bindery-based application to run in the Directory Services
environment.
Since the bindery functions will still be supported for some time,
you do not need to convert your entire application to Directory
Services at once. It is possible (and in some cases desirable) for
applications to use a combination of directory and bindery
functions. During the gradual transition from bindery networks to
directory networks, your applications may even need to operate in
both environments.
The most important part of the process of converting to the
directory is determining which directory functions provide the
greatest benefit to your application and implementing those
functions first. You must then decide which bindery functions your
application should continue to use in order to maintain backward
compatibility with previous versions of NetWare. The two sets of
functionality can exist in harmony, but you should upgrade all of
your bindery functions to the directory as time permits, leaving
only those bindery functions that your application requires to
support previous versions of NetWare. Figure 1 below contains
several examples of common bindery functions and directory
functions that perform similar operations.
*********************************************
Figure 1: Common bindery functions and
associated directory functions
Bindery Function Directory Services Function
=============================================================
CreateBinderyObject() NWDSAddObject()
-------------------------------------------------------------
DeleteBinderyObject() NWDSRemoveObject()
-------------------------------------------------------------
ReadPropertyValue() NWDSRead, NWDSSearch()
-------------------------------------------------------------
ScanBinderyObject() NWDSRead, NWDSSearch()
-------------------------------------------------------------
ScanProperty() NWDSRead, NWDSSearch()
-------------------------------------------------------------
WritePropertyValue() NWDSModifyObject()
-------------------------------------------------------------
END of FIGURE 1
*********************************************
Several bindery functions are replaced by NWDSRead() and
NWDSSearch(). This is made possible by the buffer management
concept used by directory functions. The definition of the buffer
controls how an operation will be performed in the directory. Then,
after a buffer is correctly defined, making the directory function
call to perform the operation is very straightforward. If an
operation fails, it is most likely due to an incorrect buffer
definition. This can usually be caught before the directory call
is made by checking the return codes from the buffering functions,
but this is not always the case.
The buffering functions themselves do not affect the directory
database. The buffering functions check for proper syntax when
creating the buffers, but they have no knowledge of what
information exists in the directory. For example, if you define a
buffer that includes attribute information, the buffering functions
will check to ensure that the attribute names and values are
specified in the proper format. However, if you misspell an
attribute name, no error will occur until the directory call is
actually made. If you get an error code from a directory function,
correcting it will probably require changing one of the buffering
function calls, not the directory call.
Example Code
The example code in Figure 2 below illustrates one of the most
common directory service operations: creating a new directory
object of the User class.
*********************************************
Figure 2: Creating a new "User" directory object
#define LOGIN_NAME "Admin"
#define PASSWORD ""
#define OBJECT_NAME "Example User Object"
#define SURNAME "Example Surname"
#define ESUCCESS 0
#include <stdio.h>
#include <stdlib.h>
#include <nwnet.h>
NWDSContextHandle Context;
int ExampleCreateDSObject( char *objectName, char *surName )
{
int ccode;
int32 interationHandle;
Buf_T *attributes;
ccode = NWDSAllocBuf(DEFAULT_MESSAGE_LEN, &attributes);
if(ccode < ESUCCESS)
return ccode;
ccode = NWDSInitBuf(Context, DSV_ADD_ENTRY, attributes);
if(ccode < ESUCCESS)
goto freeBuffers;
ccode = NWDSPutAttrName(Context, attributes, A_OBJECT_CLASS);
if(ccode < ESUCCESS)
goto freeBuffers;
ccode = NWDSPutAttrVal(Context, attributes,
SYN_CLASS_NAME, A_USER);
if(ccode < ESUCCESS)
goto freeBuffers;
ccode = NWDSPutAttrName(Context, attributes, A_SURNAME);
if(ccode < ESUCCESS)
goto freeBuffers;
ccode = NWDSPutAttrVal(Context, attributes,
SYN_CI_STRING, surName);
if(ccode < ESUCCESS)
goto freeBuffers;
interationHandle = NO_MORE_ITERATIONS;
ccode = NWDSAddObject(Context, objectName, &interationHandle,
FALSE, attributes);
freeBuffers:
NWDSFreeBuf(attributes);
return ccode;
}
void main( void )
{
int ccode;
#ifndef NLM
ccode = NWInitUnicodeTables(001, 437);
if(ccode < ESUCCESS)
{
printf("NWDSInitUnicodeTables returned %d\n", ccode);
exit(1);
}
#endif
Context = NWDSCreateContext();
if((long)Context < ESUCCESS)
{
printf("NWDSCreateContext returned %d\n", (int)Context);
exit(1);
}
ccode = NWDSLogin(Context, 0, LOGIN_NAME, PASSWORD, 0);
if(ccode)
{
NWDSFreeContext(Context);
printf("NWDSLogin returned %d\n", ccode);
exit(1);
}
ccode = ExampleCreateDSObject(OBJECT_NAME, SURNAME);
printf("AddNWDSObject returned %d\n", ccode);
NWDSLogout(Context);
NWDSFreeContext(Context);
}
END of FIGURE 2
*********************************************
The mainline performs several operations that are required in most
directory applications:
* Initializing the Unicode tables,
* Creating a context,
* Logging in, and
* Freeing all of these resources after the directory operations
are complete.
Notice that the "#ifndef" operator is used for conditional
compilation of the NWDSInitUnicodeTables() function call. The
example code creates a global context handle that is used
throughout the rest of the program. A login is necessary (using
NWDSLogin()) to obtain the required access rights for creating
objects. Some functions (e.g., functions that read and search
directory information) do not require the application to be logged
in to the directory, since some objects allow access to read their
attributes with no restrictions. For example, no login is required
to read the Network Address attribute of a server when the name of
the server object is known.
ExampleCreateDSObject() provides examples of buffer creation and
initialization. Buffer manipulation functions put into the buffer
the information required to define the object to be created. The
buffer is initialized with the DSV_ADD_ENTRY constant, since a new
object is being added. The only attribute information that must be
placed in the buffer is for the mandatory attributes Object Class
and Surname. The Common Name is also a mandatory attribute, but
this name is supplied as one of the parameters (objectName) to
NWDSAddObject().
The NWDSAddObject() call uses the information defined in the buffer
to add the object to the directory database. Remember that if any
part of the add operation fails (for example, if one of the
attribute names is undefined), the entire operation will fail and
the object will not be created.
As you make changes to the directory database, you will begin to
notice a pattern of function calls that is repeated for most
operations. The table in Figure 3 lists the basic steps required
to accomplish most directory database operations and each
operation's corresponding functions.
*********************************************
Figure 3: Steps required for directory database operations & each
operation's corresponding function calls
Operation Directory Function Call
=============================================================
Initialize the Unicode tables NWDSInitUnicodeTables()
(client applications only)
-------------------------------------------------------------
Create context NWDSCreateContext()
-------------------------------------------------------------
Login NWDSLogin()
-------------------------------------------------------------
Allocate buffers NWDSAllocBuf()
-------------------------------------------------------------
Initialize buffers NWDSInitBuf()
-------------------------------------------------------------
Define buffers NWDSPut...()
-------------------------------------------------------------
Perform the Directory Operation NWDSAddObject()
NWDSModifyObject()
...
-------------------------------------------------------------
Retrieve buffer information NWDSGet...()
-------------------------------------------------------------
Free buffers NWDSFreeBuf()
-------------------------------------------------------------
Logout NWDSLogout()
-------------------------------------------------------------
Free context NWDSFreeContext()
-------------------------------------------------------------
END of FIGURE 3
*********************************************
These steps are not absolute; depending on the operation, more,
fewer, or different steps may be required. This is just a general
outline you can use as a starting point.
NetWare 4.0 Directory Services offers new features and advantages
that make developing in a network environment easier and more
flexible. Writing applications that take advantage of the directory
requires careful planning, but the advantages are well worth the
effort. Converting existing bindery-based applications to Directory
Services gives applications greater flexibility, especially while
hybrid bindery-and-directory networks exist that allow applications
to be converted to the directory in stages. Once you are familiar
with the directory, you will find that the capabilities provided
by NetWare 4.0 Directory Services make NetWare applications
development an even more rewarding and profitable endeavor.
You can gain access to the Directory Services API through the NLM
SDK for NetWare 4.0 and the NetWare Client SDK. You must be a
member of a Novell Developers' Program to purchase these SDKs. For
more information on these SDKs and the Novell Professional
Developers' Program, call 1-800-NETWARE or 1-801-429-5588 (in the
U.S. and Canada), or contact your local international Novell
office.
*********************************************
*********************************************
TECHNICAL INSIGHTS:
Creating Btrieve Quick Libraries for Visual Basic for DOS
(Btrieve (all versions))
*********************************************
*********************************************
When developing Btrieve applications using the Microsoft Visual
Basic for DOS interpreter environment (VBDOS), you must create a
Quick Library that includes the required Btrieve interface. To
create this Quick Library, use the following link command:
Link /q BC7RBTRV.OBJ, BC7.QLB,, VBDOSQLB.LIB;
where BC7RBTRV.OBJ is the Btrieve interface, BC7.QLB is the name
of the Quick Library, and VBDOSQLB.LIB is the name of the required
library. To load the Visual Basic for DOS environment to include
the newly created Quick Library execute the following command:
VBDOS /L BC7
*********************************************
*********************************************
TECHNICAL INSIGHTS:
Header File Inconsistencies
(NetWare C Interface for DOS v1.2)
*********************************************
*********************************************
In DIAG.H, the fields, linkAddress and ESRAddress, in the ECB
structure are defined as an array of WORD. In NXT.H, linkAddress
and ESRAddress are defined as far pointers. These inconsistent ECB
structure definitions can cause some problems if an ESR is defined
in your application and the include file DIAG.H exists before
NXT.H.
To resolve this inconsistency, either avoid including DIAG.H before
NXT.H in applications that make IPX calls, or modify the
linkAddress and ESRAddress fields in DIAG.H as follows:
void far *linkAddress;
void (far *) ();
The above definition should be included for applications that do
not use ESR routines.
*********************************************
*********************************************
TECHNICAL INSIGHTS:
Borland's Default open() Mode
(NetWare C Interface for DOS v1.2)
*********************************************
*********************************************
After writing to a file through the Queue Services API, extra 0x0D
(Carriage Return) characters may be left in the file. These extra
characters remain because the Queue Services API assumes that the
file will be open in Binary mode. For example, in the SERVJOB.C
module, open() is called without specifying the mode in which the
file should be open. If Borland's C++ v3.1 compiler is used to open
the file, it defaults to text filtering which causes some extra
characters to appear in the file.
To prevent the introduction of these extra 0x0D characters, change
Borland's default open() mode by including the following lines in
your code:
extern int _fmode;
_fmode = O_BINARY;
*********************************************
*********************************************
TECHNICAL INSIGHTS:
New Status Codes for NetWare SQL v3.0
(NetWare SQL v3.0)
*********************************************
*********************************************
Several status codes have been added to NetWare SQL since the
release of version 3.0. These status codes are not documented in
NetWare SQL Status Codes and Messages (Jan. 1992 ed.).
350 Security is not enabled on dictionary
You have attempted to perform an operation that can only be
done when security is enabled. Database security is not
enabled at this time.
351 Transaction is not started yet
You must start a transaction before performing a COMMIT or
ROLLBACK operation.
886 Incorrect Btrieve file version for this operation
Referential integrity constraints can only be defined on
Btrieve file versions 6.0 or later. If you wish to add
referential integrity to this file, use BREBUILD to convert
it to the v6.0 file format.
887 CREATE TABLE statement cannot reference the same table more
than once
This status code is returned in place of 568; status code 568
is not actually used. For more details, check the NetWare SQL
Status Codes and Messages manual under "status code 568."
888 A primary key is already defined on this table
A table may contain only one primary key and you have
attempted to define a second primary key on this table.
*********************************************
*********************************************
TECHNICAL INSIGHTS:
Must Scan Salvagable Files Before Purging
(NetWare C Interface for DOS v1.2)
*********************************************
*********************************************
The NetWare C Interface for DOS v1.2 documentation incorrectly
states that an initial search can be performed by setting entryID
to "-1." Setting the entryID parameter in PurgeSalvagableFile() to
"-1" as suggested in the documentation always causes it to fail.
PurgeSalvagableFile() cannot scan for files to be purged.
You must call ScanSalvagableFiles() to get a valid entryID value
before calling PurgeSalvagableFile(). This entryID will allow
PurgeSalvagableFile() to identify the directory entry to be purged.
*********************************************
*********************************************
TECHNICAL INSIGHTS:
readdir API Returns Invalid Date/Time
(Network C for NLMs v2.0(d))
*********************************************
*********************************************
The readdir API is returning date/time fields in a format that is
similar to the DOS date/time format, but not identical. Differences
between the formats cause SetFileInfo() to set the time and date
information incorrectly if the fields are passed directly from
readdir().
The documentation states that dates should be stored in DOS format
for SetFileInfo(). However, to accomplish this, the dates/times
returned from readdir() must be modified. The four-byte date/time
value must have the two WORDs, "AA BB" and "CC DD," swapped, but
the WORDs themselves should not be swapped. For example,
AA BB CC DD
needs to be stored as
CC DD AA BB
Simply using LongSwap does not resolve this situation, since
LongSwap also swaps the values within the WORDS as well. To ensure
that date/ time values are set properly, swap only the location of
the two WORD values. Figure 4 contains an example that assumes the
receiving fields have been defined as character arrays.
*********************************************
Figure 4: Example of Date/Time format change
*(WORD *)lastUpdateDateAndTime = dirP->d_date;
*(WORD *)&lastUpdateDateAndTime[2] = dirP->d_time;
*(WORD *)creationDateAndTime = ((WORD *)(&dirP->d_cdatetime))[1];
*(WORD *)&creationDateAndTime[2] = ((WORD *)(&dirP->d_cdatetime))[0];
*(WORD *)lastAccessDate = ((WORD *)(&dirP->d_adatetime))[1];
*(WORD *)lastArchiveDateAndTime = ((WORD *)(&dirP->d_bdatetime))[1];
*(WORD *)&lastArchiveDateAndTime[2] = ((WORD *)(&dirP->d_bdatetime))[0];
END of FIGURE 4
*********************************************
*********************************************
*********************************************
TECHNICAL INSIGHTS:
Printing Through Xtrieve PLUS - Tabloid Setting Correction
(Xtrieve PLUS v4.11)
*********************************************
*********************************************
In the XTRIEVE.PDB file that ships with NetWare SQL v3.0, the
TABLOID setting is set to EPSON LQ-1500/2.0, rather than IBM PC
Graphics printer. To change the TABLOID setting to IBM PC Graphics
printer, the printer information needs to be altered as follows:
* At the DOS prompt type
"SLATE XTRIEVE.PDB"
* Select "Add/Edit Devices (Ptr Connections)"
- Select "3001 Tabloid" <Press ENTER>
- Tab to "Ptr Mfg"
- Press F9 [Lists]
- Select "IBM" <Press ENTER>
- Tab to "Ptr Type"
- Press F9 [Lists]
- Select "PC Graphics Printer" <Press ENTER>
* Press F10 [Prev Screen]
Press F10 [Prev Screen]
Press F10 [Exit]
*********************************************
*********************************************
TECHNICAL INSIGHTS:
MapDrive() and Windows
(NetWare C Interface for Windows v1.3)
*********************************************
*********************************************
The Windows MapDrive() function can only modify an existing search
drive, it cannot add a new one. In order to add a search drive
under Windows, a dummy search drive is required before bringing up
Windows. Then, this search mapping can be modified using
MapDrive().
*********************************************
*********************************************
TECHNICAL INSIGHTS:
Get Next Extended Operation after Get Key
(NetWare Btrieve v5.15, Btrieve for DOS v5.10a)
*********************************************
*********************************************
If you use the GetKey bias (+50) when establishing positioning
before a Get Next Extended (38) operation, the extended operation
will not function properly, returning either a status 19
(Unrecoverable Error) or erroneous information in the databuffer.
This situation occurs with Btrieve for DOS v5.10a and NetWare
Btrieve v5.15.
Patch #57, available on Novell's NetWire forum on CompuServe
(NOVLIB, LIB 7), resolves the situation for NetWare Btrieve v5.15.
There is currently no patch for Btrieve for DOS v5.10a, so avoid
using the GetKey bias before Get Next Extended operations. Instead,
use a Get First (12), Get Equal (5), or some other operation to
establish positioning without the +50 bias.
*********************************************
*********************************************
TECHNICAL INSIGHTS:
NetWare Btrieve & New Intel NE3200 Driver
(NetWare Btrieve (NLM) v5.15)
*********************************************
*********************************************
File corruption can occur when you use Intel's NE3200.COM driver
(09-03-91, 19242 bytes) in conjunction with Intel's EtherExpress
32bit card on workstations running Btrieve applications. Intel
describes the situation as:
"... a problem with the Ether-Express 32 and applications that
use extended memory or memory managers (i.e. MicroSoft Windows
3.x). Previous versions of this driver would not protect
memory regions from the above mentioned applications. This
could cause files that the EtherExpress 32 stored in memory
to be overwritten (corrupted) if an application wrote to that
address space."
Intel has a new NE3200.COM driver (date: 05-04-92, size: 25967)
which fixes these problems through the use of the keyword "DOUBLE
BUFFER" in the NET.CFG file. This driver is still in Beta and has
not completed certification. This driver defaults to an 802.2 frame
type; if you need a different frame type, include a "FRAME"
statement in the NET.CFG file. Figure 5 contains a sample NET.CFG
file. Note that this file requires the NE3200.COM driver to be in
the same directory as itself.
*********************************************
Figure 5: Sample NET.CFG file for NE3200.COM driver
LINK DRIVER NE3200
SLOT 5
DOUBLE BUFFER
FRAME ETHERNET_802.3
PROTOCOL IPX 0 ETHERNET_802.3
PROTOCOL IPX
BIND NE3200
END of FIGURE 5
*********************************************
*********************************************
*********************************************
TECHNICAL INSIGHTS:
Substitution Variables & NetWare SQL Inserts
(NetWare SQL v3.0a)
*********************************************
*********************************************
When inserting records through a substitution variable, if the data
being inserted contains the "@" character, all subsequent inserts
with the same cursor are given the same data for that field.
NetWare SQL is confusing the "@" in the data with a substitution
variable indicator.
*********************************************
Figure 6: NetWare SQL inserts resulting in incorrect field data
XQLCompile of "INSERT INTO Patients (ID, First^Name, Last^Name, Address)
VALUES (@V1, @V2, @V3, @V4)"
XQLSubst where
V1 = "A11111" V2 = "John" V3 = "Smith" V4 = "100 Main @ 1st"
XQLExec (performs Insert successfully)
XQLSubst where
V1 = "B22222" V2 = "Mary" V3 = "Brown" V4 = "222 Central Ave."
XQLExec (performs Insert successfully)
END of FIGURE 6
*********************************************
For example, in Figure 6, the second insert (and all subsequent
inserts based on the same XQLCompile command) will result in each
record being inserted with the same address as the first record:
"100 Main @ 1st".
This occurs with any application making the above calls, and when
using the Load option of the NetWare SQL Maintenance Utility
(NSUTIL.EXE and NSUTIL.NLM), since it uses these calls. With
NSUTIL, the problem will occur in each file format: SDF, UNF, DIF
or ASC.
To resolve the situation and ensure that each record is inserted
with the correct address, upgrade to the latest release of NetWare
SQL, version 3.0b (avail. Dec. 92). To obtain v3.0b, download
SQL30.ZIP form the NOVLIB forum on CompuServe, or contact Novell
Developer Support (see "Contacting Novell," page 11). Otherwise,
the only work-around is to recompile the statement between
XQLSubst/XQLExec calls, or append the actual data values into the
Insert statement passed in on the XQLCompile command, instead of
using the substitution variables.
*********************************************
*********************************************
TECHNICAL INSIGHTS:
Unique Passwords
(NetWare v3.11)
*********************************************
*********************************************
If the "Unique Passwords" requirement is enabled through SYSCON,
and a password is changed to one of the old passwords through
SYSCON, the password is accepted and no error messages are
returned.
Whenever you change a password through SYSCON, the password
expiration date defaults to January 1, 1985. Unless you change this
expiration date to a date later than the current date, SYSCON will
accept any passwords that were used previously even though the
"Unique Passwords" restriction is on. Therefore, make sure that the
password expiration date is valid.
*********************************************
*********************************************
TECHNICAL INSIGHTS:
Determining If Data Dictionary Files are Corrupted
(Xtrieve PLUS v4.1x)
*********************************************
*********************************************
When you attempt to add fields to a view and when recalling views,
if the .DDF files are damaged, Xtrieve PLUS v4.1x returns status
207 (Field Does Not Exist in Dictionary) or status 240 (Field in
the View Definition Is Not in the Active Dictionary).
In the Xtrieve PLUS User's Manual (for DOS and OS2), Appendix D
lists Dictionary Structures for all of the .DDF files. With Xtrieve
PLUS for NetWare SQL, the Dictionary Structures are shown in
Appendix C. Each description lists the field and index names for
each .DDF file. Specifics are given for field data types and sizes,
and key flags, such as duplicates, case sensitivity, and segments.
To view the .DDF file definitions in Xtrieve PLUS, the CONFIGURE/
SWITCHES/DICTIONARY option must be set to "YES." Then, the .DDF
file definitions can be viewed through the DICTIONARY/SHOW option.
To resolve this situation, use VIEW/FILE to compare the field and
index information described by the user's manual for the .DDF files
with the set of .DDF files you are using. A comparison should be
made of the field and index information. If any of the information
does not match exactly, then the .DDF files are probably corrupted.
One more thing to note is that if a Btrieve BUTIL -STAT is executed
on the DDF files, the results may not match the dictionary file
definitions viewed in Xtrieve if the files are corrupted.
.DDF files created with NetWare SQL will have a supplemental index
defined for X$Field (FIELD.DDF), but this is only shown in the
NetWare SQL Developer's Kit Getting Started manual which shipped
with NetWare SQL 3.0. This fourth supplemental index is not shown
in the Xtrieve PLUS User's Manuals, and is only defined if the
dictionaries were created with NetWare SQL.
To recover corrupted data dictionary files, use MAKE_XTA to extract
each file definition. Then, use XCFP to create a command file to
rebuild each file. This process can be partially automated by
performing the following steps:
1. Using XQLI or any other SQL statement processor, execute
the following statement to extract the file names from
the dictionary files and save the output to an ASCII
file:
SELECT Xe$Name FROM X$File
(to extract file definition names)
Then, edit the ASCII file so that it does not contain any
of the dictionary file names (X$File, X$Field, etc.)
2. Edit the ASCII file so that each file definition is
recoverable using MAKE_XTA and XCFP as follows: The
result from the SELECT statement above was:
FILEDEF1
FILEDEF2
FILEDEF3
Next, edit the ASCII file to look like this (you may have
to cut and paste quite a bit, but it's worth it if you
have many files):
MAKE_XTA /F:"FILEDEF1"
XCFP MAKE_XTA.XTA FILECMD1
MAKE_XTA /F:"FILEDEF2"
XCFP MAKE_XTA.XTA FILECMD2
MAKE_XTA /F:"FILEDEF3"
XCFP MAKE_XTA.XTA FILECMD3
Then, rename the resulting ASCII file with a .BAT
extension.
3. Create a new set of .DDF files in another directory using
the Xtrieve PLUS DICTIONARY/CREATE option.
4. Run the batch file in the directory with the corrupted
.DDF files. It will create command files, with a .XTC
extension, which can be played back against the new .DDF
files created in Step 3.
5. To recover view definitions, repeat Step 1 with the
following statement:
SELECT Xv$Name FROM X$View
Then, repeat Step 2 using the result from the SELECT
statement, editing the ASCII file as follows:
MAKE_XTA /V:"viewname"
XCFP MAKE_XTA.XTA VIEWCMD1
.
.
.
Finally, repeat Step 4.
*********************************************
*********************************************
TECHNICAL INSIGHTS:
Prototype Missing from CLib
(Network C for NLMs SDK v2.0(e))
*********************************************
*********************************************
In the Network C for NLMs SDK, the ioctl() prototype is missing
from the header files of CLIB.NLM v.3.11 b. This generates a
warning message from the compiler. For now, you can safely ignore
this warning message. The prototype will be included in a later
release.
*********************************************
*********************************************
TECHNICAL INSIGHTS:
Create/Drop Index Operations within a Transaction
(NetWare SQL v3.0)
*********************************************
*********************************************
With NetWare SQL, if an application performs a Create Index or Drop
Index operation on a table within a transaction after it has
previously updated the same table within the same transaction, the
updates will be committed when the Create Index or Drop Index
operation completes. The updates cannot be rolled-back, even though
the application has not yet issued the COMMIT/ROLLBACK statement.
This anomaly occurs because NetWare SQL must temporarily disable
transactions to Btrieve in order to perform the Btrieve Create
Index or Drop Index operation. When this operation is complete, all
outstanding updates to the file are committed.
In general, applications should not mix DDL (Data Definition
Language) operations like Create Index or Drop Index and data
updates within a single transaction.
*********************************************
*********************************************
NIBBLES & BITS
Fast answers to common questions
*********************************************
*********************************************
*********************************************
NetWare C Interface for DOS
*********************************************
Q: When I am running IPXODI v2.0, GetServerAddressTable() and
GetServerNameTable() return empty information buffers. The
exact same calls function properly under IPXODI v1.2. What
should I do?
A: This situation is the result of a known problem with IPXODI
v2.0 that will be fixed in the next release. Until then, if
you need to use these calls, use IPXODI v1.2.
Q: The documentation for the NetWare C Interface for DOS for
BroadcastToConsole(), CloseMessagePipe(), and
GetBroadcastMessage() shows an error code "253 (0xFC)
MESSAGE_QUEUE_FULL". However, decimal "253" does not equal hex
"FC."
A: The hex value is correct. The decimal value should be "252."
TIP: The ScanDirEntry() And ScanFileEntry() calls do not return the
originating/owning namespace of a file or directory entry. To
return this information, substitute the NetWare v3.x system
call ObtainFileOrSubdirectoryInformation() using the F2
interface. For example code demonstrating this call, contact
the Developer Support Group.
*********************************************
NetWare C Interface for Windows
*********************************************
Q: Is it possible to login and logout of a NetWare server from
a Windows 3.1 DOS box?
A: In order to log in and out of a NetWare server multiple times
from a DOS window, several conditions must be satisfied:
1. The shell (IPX/ODI and NETX) must be loaded prior to
starting Windows.
2. VIPX.386 should be version 1.13 or later.
3. Set NWShareHandles = TRUE to share drive mappings among
DOS sessions. This parameter is in the [NetWare] section
of the Windows SYSTEM.INI file.
4. A path must be maintained to the \LOGIN subdirectory of
a NetWare server.
Q: When programming under Windows v3.1 using the NetWare C
Interface for Windows SDK v1.3, the error message,
"SPX_NOT_INSTALLED," may be returned when calling the function
SPXInitialize(). Similarly, the error message, "IPX_NOT_
INSTALLED," may be returned when calling IPXInitialize().
A: To prevent these error conditions, make certain that you are
using the appropriate versions of the following files:
* IPX.COM v3.10 and above or IPXODI.COM v 1.20 & above
* VIPX.386 v 1.13 and above
* NWIPXSPX.DLL v1.31 and up
*********************************************
NetWare Client SDK
*********************************************
Q: Working with the NetWare v4.0 Client SDK, the NWCalls DOS
Client Calls don't seem to function. Am I forgetting
something?
A: The NWCalls APIs require a call to NWCallsInit() before they
will function properly. NWCallsInit() initializes the double
byte tables, as well as other lower-level interface functions.
*********************************************
NLM SDK for NetWare v4.0
*********************************************
Q: How can I make my NLM's screen look like a standard Novell NLM
screen?
A: Use the NWSNut libraries that are included with the NLM SDK
for NetWare v4.0.
*********************************************
WATCOM C/386
*********************************************
Q: I am using WATCOM C/386 v9.0 and the WLINK linker will not
export symbols from my NLM. What should I do?
A: Patch the v9.0 linker up to 9.01d, to fix this problem.
Patches for WATCOM C/386 are available from WATCOM's BBS at
519-884-2103.
*********************************************
Network C for NLMs
*********************************************
TIP: In the Network C for NLMs v2.0(d) documentation, the example
for AIOAcquirePort() passes the hardwareType, boardNumber, and
portNumber as integers. However, doing so can result in a
server abend. To fix the example, pass the hardwareType,
boardNumber and portNumber in as pointers to integers.
*********************************************
NetWare Btrieve
*********************************************
TIP: The new NetWare Btrieve v6.0 operation 42, to control
Continuous Operations on a Btrieve file, can only be called
from an NLM application, and not from a workstation
application.
Q: How can I create Data Definition Files (.DDF) files to work
with third-party products that requires them?
A: You can obtain these .DDf file in two ways:
* The software company who sold the product should be able
to provide the .DDF with their software.
* Use Xtrieve PLUS, XQL or NetWare SQL to create the .DDF
files.
*********************************************
*********************************************
NOVELL DEVELOPER RELATIONS
A special supplement to Novell's
Professional Development Series BULLETS
*********************************************
*********************************************
*********************************************
Bundle Up for 1993
*********************************************
You've probably already purchased some warm-weather gear, but have
you purchased the development tools you'll need to make it through
the winter?
Since your development efforts sometimes require more than one
Novell development tool as well as other Novell products, Novell
has designed development tool bundles. These bundles provide you
with everything you need to develop specific types of applications
for the NetWare platform, including tools and comprehensive
documentation that explains how the components of the bundle work
together, installation, service and support, and licensing issues.
Tool bundles are especially useful for new developers or developers
new to a particular type of application development. After
purchasing a single tool bundle, you can begin developing your
application immediately.
Tool bundles are currently available for network management,
NetWare 4.0 client/server application development, and distributed
desktop application development using Novell's TCP/IP protocol. The
specific bundles offered are:
* LAN WorkShop
* NetWare 4.0 tool bundle
* NetWare Management System tool bundle
LAN WorkShop
With the LAN WorkShop, Novell consolidates its TCP/IP
development tools into one package. This bundle includes:
* LAN WorkPlace for DOS Toolkit
* LAN WorkPlace for OS/2 Toolkit
* LAN WorkPlace for Macintosh Toolkit
* Enhanced version of NetWare Transport Independent Remote
Procedure Calls (TIRPC) SDK
All toolkits included with the LAN WorkShop provide both
development tools and end-user software.
The LAN WorkPlace for DOS Toolkit allows you to use TCP/IP to
build custom applications compatible with Novell's LAN
WorkPlace for DOS v4.1. The toolkit software allows you to
write DOS, DR-DOS, and Windows applications that use the
Novell TCP/IP protocol stack for DOS and Windows via an
industry-standard 4.3 BSD socket library API. Applications
using TCP/IP gain access to a wide variety of enterprise
computing resources, such as PCs, Macintoshes, VAX
minicomputers, IBM mainframes, and UNIX workstations.
The LAN WorkPlace for OS/2 Toolkit v3.0 provides the necessary
tools for developing OS/2 v2.0 16-bit and 32-bit
industry-standard 4.3 BSD socket applications that run with
the LAN WorkPlace for OS/2 v3.0. The toolkit includes the LAN
WorkPlace for OS/2 end-user program, a TCP/IP stack for
building applications that access TCP/IP resources, and
requesters for OS/2 v1.3 and v2.0. Applications you develop
using this tookit operate with other Novell products that use
the LAN WorkPlace for OS/2 APIs.
The LAN WorkPlace for Macintosh Toolkit v1.3 allows you to
build applications that use the APIs provided in the Novell
TCP/IP for Macintosh (part of the LAN WorkPlace for Macintosh
product) or the Apple Macintosh TCP. The Toolkit also provides
the necessary development support for building HyperCard
stacks that use TCP/IP.
The last component of the LAN WorkShop is the new TIRPC SDK,
version 1.1, which is based on the Solaris Open Network
Computing Plus TIRPC model from SunSoft, Inc. The TIRPC
libraries allow programs to make function calls that can be
transported across a network using either TCP/IP or IPX,
freeing developers from having to know the semantics of the
underlying network.
NetWare 4.0 Tool Bundle
The NetWare 4.0 tool bundle provides all the necessary tools
for developing client and server applications for the NetWare
4.0 platform. Products in this tool bundle include:
* Pre-release version of the NetWare 4.0 operating system
* NLM SDK for NetWare 4.0
* NetWare Client SDK
* WATCOM C/386 compiler and tools
* LANalyzer for Windows
With this bundle, you can take advantage of all the new
features of NetWare 4.0 in your application development. These
features include (but are not limited to) NetWare Directory
Services (NDS), auditing, memory protection and management,
file compression, data migration, core OS process management,
media manager, international language enabling, NCP (NetWare
Core Protocol) extensions, and backward compatibility with
NetWare 3.x.
The NLM SDK for NetWare 4.0 features the NLM library of APIs
for NetWare 4.0; the NLM transport interfaces for
multiprotocol support in NetWare 4.0; NWSHELL NLM, which
provides DOS-like commands that can be executed on the server;
a complete set of documentation; and support for WATCOM
compiler v9.0 and higher.
The NetWare Client SDK contains software and documentation for
developing DOS, Windows, and OS/2 client applications for
NetWare 2.x, 3.x, and 4.0. The C libaries provided with this
kit have been developed as single set of source code wherever
possible, allowing easy application migration between the
three supported desktop platforms.
The WATCOM C 32-bit Optimizing Compiler and Tools is also
provided with the NetWare 4.0 tool bundle. Tools include a
linker, debugger, execution profiler, utilities,
documentation, and two libraries: the C graphics library and
the C library. The WATCOM compiler can be used to write DOS,
Windows, OS/2, and NetWare applications.
The last component in the NetWare 4.0 Tool Bundle, LANalyzer
for Windows, is a powerful Windows-based application for
monitoring your network on a day-to-day basis, monitoring
long-term network trends, analyzing specific problems, and
capturing network packets for protocol analysis. It uses a
"dashboard" graphical interface consisting of real-time dials
depicting network activity. In addition, LANalyzer for Windows
lets you print station monitor data, decoded packets, detail
graphs, and trend graphs. LANalyzer for Windows installs on
any network PC, runs on Ethernet cards, and supports ODI
drivers operating in promiscuous mode.
NetWare Management Tool Bundle
The NetWare Management tool bundle provides all the software
and documentation necessary for creating network management
applications for NetWare. This tool bundle is based on
Novell's open network management architecture which allows
applications to snap into NetWare's Network Management Map
(NMM) platform. The NetWare Management tool bundle includes:
* NetWare Management System (NMS)
* Network C for NLMs
* LANalyzer for Windows
The NetWare Management System SDK includes the NetWare
Management Map, and a set of tools and interfaces with which
you can create custom management modules that plug into the
NetWare Management Map.
The tools and interfaces consists of a set of Windows 3.x
Dynamic Data Exchange (DDE) interfaces to an SNMP server and
alarm manager, a Btrieve-based database schema, a set of
graphical user interface (GUI) tools that let you represent
network management indicators as graphic elements, and an
application integrator that allows you to create new NMS menu
items and network management objects.
The second tool in this bundle is the Network C for NLMs SDK,
which fully supports development in both the NetWare v3.1 and
v3.11 environments. This SDK includes the NLM library of APIs,
NLM transport interfaces, the WATCOM C/386 Optimizing Compiler
and Tools, and the NLM Certification Kit.
The final component in this bundle is LANalyzer for Windows,
a diagnostic tool that provides a "dashboard" graphical
interface that lets you monitor the network on a day-to-day
basis, review long-term network trends, analyze specific
problems, capture protocol analysis, as well as print station
monitor data and graphs of network statistics.
You must be a member of a Novell Developers' Program to purchase
these tool bundles.
*********************************************
New NetWare Client SDK Features Single Interface
*********************************************
The NetWare Client SDK, which started shipping in January 1993,
features a single interface for writing DOS, DR-DOS, Windows, and
OS/2 client applications in the NetWare 2.x, 3.x, and 4.0
environments. The C libraries provided in this kit have been
developed as a single set of source code whenever possible,
allowing easy application migration between the supported desktop
platforms.
This SDK includes a pre-release version of the NetWare 4.0
operating system, the client API libraries, and an API
documentation set. It will replace four existing Novell products:
NetWare C Interface for DOS, NetWare OS/2 Developer's Kit, NetWare
C Interface for Windows, and NetWare System Calls for DOS.
All developer support for this SDK is provided only electronically
through the NOVDEV forum on CompuServe. Questions can be posted to
NOVDEV twenty-four hours a day, maximizing both domestic and
international developers' time. Questions and answers will be
incorporated into a Q&A database on NOVDEV that developers can
browse at any time.
If you purchased NetWare C Interface for DOS, NetWare OS/2
Developer's Kit, NetWare C Interface for Windows, or NetWare System
Calls for DOS before September 12, 1992, you can purchase the
NetWare Client SDK for a special price for a limited time. If you
purchased one of these SDKs after September 12, 1992 and can show
proof of purchase, you can receive the NetWare Client SDK free of
charge for a limited time.
You must be a member of a Novell Developers' Program to receive
this SDK.
*********************************************
Changes to Network Management Tools
*********************************************
With NetWare v3.11, Novell shipped version 1.0 of the SNMP (Simple
Network Management Protocol) Agent. This release marked the
beginning of the movement toward managing NLMs through SNMP. A new
version of the SNMP Agent (v2.0) and set of developer tools is now
available as a component of the NetWare Management System (NMS)
SDK.
The NMS SDK allows developers to register NLMs with the SNMP agent
for SNMP manageability. These new SNMP Agent developer tools
replace the NetWare Network Management Toolkit. The SNMP Agent
tools define how developers can register an NLM and the SNMP MIB
(Management Information Base) associated with the NLM and the SNMP
Agent on the server. Any SNMP management station can access the
registered NLM's MIB by using the SNMP Agent as a proxy agent for
the developers agent. Developers benefit from the SNMP
Agent through its mechanism of using the NetWare platform for
network management. End users benefit since they have less to learn
beyond NetWare and the usage of NLMs.
As part of Novell's ongoing commitment to SNMP and developers
already using the NetWare Network Management Toolkit, toolkit users
will receive the NMS SDK as well as any future updates.
You must be a member of a Novell Developers' Program to purchase
the NetWare Management System SDK.
*********************************************
Five New Development Tools Announced
*********************************************
At NetWorld Boston, Novell announced the availability of five
NetWare-enabled third party development tools:
* Two C++ compilers
* A FORTRAN compiler
* A tool that facilitates application connectivity
* A breakout switch and interface card for programming and
debugging
The new compilers include the WATCOM C++ compiler, Draiken Software
Inc.'s INTEK C++ v2.1 32-bit compiler, and WATCOM FORTRAN 77/386
compiler.
Additional tools announced include NetWorks! Developer, a
productivity tool that enables developers to hot link DDE-enabled
applications over Novell's IPX without learning any new syntax or
commands, and STOP!, a simple non-maskable interrupt generator that
NetWare developers can use in conjunction with debuggers or user
programs.
For more information on these tools, developers should contact the
individual third-party companies as follows:
* WATCOM, Sales Department at (519) 886-3700 or (800) 265-4555
* Draiken Software, Inc. at (503) 222-5417
* Symbiotics, Inc. at (617) 876-3635 or (800) 989-9174
* Alpha Logic Technologies, Inc. at (206) 644-3094
*********************************************
SMF v71 SDK Meets MHS Developer Requirements
*********************************************
The NetWare SMF v71 SDK provides everything you need to develop
applications and gateways that provide messaging services in
NetWare MHS environments, including access to message routing and
messaging directory services. NetWare SMF, the native API to
Novell's NetWare MHS product line, offers simplicity, reliability,
and inherent multiplatform support. The SDK documents the newest
generation messaging API and builds on earlier versions to meet
developer needs for unlimited recipients, unlimited message size,
expanded distribution lists, and long names with hierarchical
mulitpart workgroups.
This SDK includes one copy of the 20-mailbox version of NetWare
Global Messaging (NGM), one copy of the 100-mailbox version of NGM,
and the SMF v71 Programmer's Reference. The SMF v71 Programmer's
Reference documents the messaging APIs.
NetWare SMF is currently used by over 900 commercial and corporate
developers. Over 150 commercial applications and services are
available for an estimated 2.5 million installed MHS mailboxes.
These messaging applications range from electronic mail and network
fax service to workflow, scheduling, and forms processing.
*********************************************
1993 Begins with New Novell Corporate Developers' Program
*********************************************
In response to the unique development, implementation, and
maintenance requirements developers encounter within large
corporations, Novell will deliver the Novell Corporate Developers'
Program in the second quarter of 1993.
This program is designed to facilitate and accelerate the
development of distributed applications that support, exploit, and
enhance the NetWare platform in the corporate environment. The
program will initially be available worldwide with local
implementations in the U.S., U.K., France, and Germany, with
additional markets to follow.
Membership in this program is available through an annual
subscription and is targeted for large corporations developing
industrial-strength applications on the NetWare platform for
internal use. Members of the Novell Corporate Developers' Program
are entitled to all the benefits available through the Novell
Professional Developers' Program, Univel Professional Developers'
Program with additional benefits such as project support, system
assessment, additional products and development tools, product
support, and education.
Project Support
Each program member is assigned an account representative who
is familiar with the member's environment and project and who
acts as a liaison to other groups within Novell and Univel.
In order to better determine product focus for corporate
developers, members are also invited to Novell and Univel
technical forums, including executive briefings, focus groups,
and product strategy meetings. In addition, membership in the
Novell Corporate Developers' Program includes admission to
BrainShare, Novell's annual technical conference.
Novell System Assessment
Members will be provided system assessment services by
Novell's Consulting Services (NCS). Upon request and at no
additional charge, program members will be invited to review
their existing implementation, business and system needs,
project priorities, goals and objectives, and timelines with
NCS engineering staff.
With the information from the program member, NCS engineers
will use their experience and knowledge of Novell's products
to provide a project recommendation in the form of a statement
of work. This statement of work can be used as a roadmap by
the program member to facilitate their own development effort
or to enlist outside consulting services through Novell's
consulting services group and partners.
Development Products and Tools
Members of Novell's Corporate Developers' Program are provided
with a development copy of Novell's NetWare 2.x, 3.x, or 4.0
or NetWare J, and a copy of UnixWare Personal Edition.
Development copies of the NetWare operating systems are
provided to members to facilitate prototyping, development,
and testing of new applications without impacting existing
business systems. Based on their particular development
efforts, members may also select any ten Novell SDKs from the
full list of available SDK products including the UnixWare SDK
bundled with UnixWare Application Server.
Program members will also receive updates to any of the Novell
products they select through the program, ensuring that the
application development effort for the NetWare platform is
always with the most advanced and current technologies.
Development Product Support
Novell's Developer Support Group offers Novell Corporate
Developers' Program members priority access to customer
support representatives and support engineers. Support calls
from program members will be acknowledged within four hours
(during normal business hours). In addition, program members
have access to an assigned technician for the duration of the
support incident.
Developer Education
The effective transfer of Novell expertise to developers is
vital for successful product use and for accelerating the
application development timeline. As part of the program,
members may attend three Novell technical education
development classes throughout the subscription year.
Ongoing Development Support
Ongoing development support is provided to Novell Corporate
Developers' Program members, including access to the NOVDEV
private forum on CompuServe, the Univel Developer Bulletin
board, admission to the Advisory Council meetings, Novell
developer publications, and all other services offered through
Novell developer programs.
For More Information
For additional information on development tools, developer
support programs, and the Novell Corporate Developers'
Program, call 1-800-NETWARE or 1-801-429-5588 (in the U.S. and
Canada), or contact your local international Novell office.
*********************************************
*********************************************
NOVELL DEVELOPER EDUCATION
*********************************************
*********************************************
Novell Developer Education offers several courses for developers
who use Novell's development & database tools, including NetWare
SQL, Btrieve, Xtrieve PLUS, and the NetWare Client APIs.
904: Btrieve: An Overview
This new course provides a general overview of NetWare Btrieve
v6.x and its new features. It covers file structures,
indexing, data integrity, record and file locking, caching,
operating modes, segmented keys, backward compatibility and
utilities.
905: Programming with Btrieve
This course has been enhanced to cover all Btrieve operations
& environments. It provides a complete introduction to
Novell's server-based record manager. 50% of class time is
spent in programming workshops. Working knowledge of C, BASIC,
Pascal, or COBOL required. Prerequisite: 904: Btrieve: An
Overview.
907: Xtrieve PLUS
This course has been updated to include new features
introduced with NetWare SQL v3.0. It teaches developers to use
Xtrieve PLUS as a Btrieve or NetWare SQL programming utility.
Trains users of Btrieve- or NetWare SQL-based database
applications to work effectively with this menu driven
utility.
911: NetWare Database Administrator
This new course gives a complete, hands-on look at installing
and configuring NetWare SQL and NetWare Btrieve. It covers the
basics of ANSI Standard Structured Query Language (SQL),
focusing on NetWare SQL and key database features like
security, referential integrity (RI), database design, data
normalization and performance.
912: Programming with NetWare SQL
This new course is designed for developers and experienced
network and database administrators who will be developing
NetWare SQL applications or enhancing existing Btrieve
applications with NetWare SQL. It provides an in-depth look
at the functionality of NetWare SQL and discusses optimizing
database systems for development of efficient applications
using Novell database tools.
930: Developing NetWare Loadable Modules (NLMs)
This course introduces C programmers to server-based
application development in the 32-bit NetWare 3.x environment.
It covers basic concepts for writing server-based C
applications that access the NetWare 3.x C library (CLib).
Requires working knowledge of the C language.
940: NetWare Programming: Basic Services
This new lab-oriented class (40 percent lab work) introduces
NetWare programming concepts. It covers topics such as bindery
services, file system services, print services, queue
management, connection and file-server services, and
accounting and synchronization services. This class requires
knowledge of the C programming language.
945: NetWare Programming: Protocol Support
This new class covers protocol support features. It also
discusses network programming concepts and techniques for
developing client-side applications, including Service
Advertising Protocol (SAP) IPX/SPX, diagnostics, NetBIOS, TLI,
and Named Pipes. This class requires strong knowledge of the
C programming language.
To obtain information on pricing, location, scheduling, & course
content for classes held in the US, call 1-800-233-3382,
1-801-429-5508 or 1-800-NETWARE. Customers outside of the US should
call 1-801-429-5508. For information on availability, location, and
prices of classes outside of the US, contact your local Novell
office.
*********************************************
*********************************************
FUN AND FACTS
*********************************************
*********************************************
Test your developing skills with the development products by taking
our Fun & Facts quiz. (See the end of this section for answers.)
1. What is the bandwidth of the current Token Ring technology?
A. Either 4 or 8 MB/sec.
B. Either 4 or 16 MB/sec
C. Either 8 or 16 MB/sec.
2. The NetWare C Interface for DOS function SaveDirectoryHandle()
can be used to save temporary directory handles.
A. True
B. False
3. What was the original name of the "Windows NT" operating
system?
A. Windows v4.0
B. Windows II v1.0
C. OS/2 v3.0
4. Which file does NetWare SQL v3.0 use to store the names of the
named databases?
A. NAMES.DB
B. DBNAMES.CFG
C. NAMEDDB.CFG
5. When a Btrieve file has a key of type Lstring, if the first
byte is set to NULL and the rest of the bytes in the key are
not set to NULL, Btrieve does not treat that key as a NULL
key.
A. True
B. False
6. Event Service Routines (ESRs) are supported in the (NLM)
environment?
A. True
B. False
7. NetWare SQL v3.0 can access Btrieve files on both local and
network drives.
A. True
B. False
*********************************************
FUN AND FACTS ANSWERS
1. B
2. B
3. C
4. B
5. A
6. A
7. B
*********************************************
*********************************************
*********************************************
CURRENTLY SUPPORT VERSIONS OF NOVELL PRODUCTS
*********************************************
*********************************************
Communication Products
NetWare for SAA 1.2
NetWare 3270 LAN Workstation for DOS 2.0
NetWare 3270 LAN Workstation for Macintosh 1.0
NetWare 3270 LAN Workstation for Windows 1.1
NetWare Access Server (NAS) 1.2
NetWare Asynchronous Communication Services (NACS) 3.0
Database Products
NetWare Btrieve (NLM) 5.15
NetWare Btrieve (VAP) 5.15
NetWare SQL (NLM) 3.00b
NetWare SQL (VAP) 2.11
Report Executive for DOS 4.11a
Report Executive for OS/2 4.11a
Xtrieve PLUS for DOS 4.11b
Xtrieve PLUS for OS/2 4.11b
Development Products
Btrieve for DOS 5.10a
Btrieve for OS/2 5.10
Btrieve for Windows 5.10
NetWare C Interface for DOS 1.2
NetWare RPC for DOS 1.1
NetWare RPC 386 1.1
NetWare SQL Developer's Kit 3.00b
NetWare System Calls for DOS 1.0
NetWare System Interface Technical Overview 1.2
Network C for DOS 2.0
XQL for DOS 2.11
XQL for OS/2 2.11
Internetworking Products
NetWare WAN Links 2.0
NetWare MultiProtocol Router 2.0
NetWare Messaging
NetWare Global Messaging 1.0
NetWare MHS Personal Ed. 1.5p
NetWare MHS 10-User 1.5p
NetWare MHS 50-User 1.5b
NetWare MHS Unlimited-Users 1.5n
NetWare Operating System Products
NetWare 3.x 3.11
NetWare 2.x 2.2
NetWare NFS 1.2
NetWare Runtime
NetWare FTAM 1.2
NetWare for Macintosh (NLM) 3.011
NetWare Name Services
Network Management Products
LANalyzer for NetWare 1.0
NetWare Services Manager 1.1
LANalyzer Kit for Ethernet Networks 3.11a
LANalyzer Kit for 4/16 Mbps
Token Ring Networks 3.11a
LANalyzer Kit for Ethernet & 4/16 Mbps
Token Ring Networks 3.11a
Software Developer's Kits
Btrieve v6.0 Developer's Kit Supplement 1.0
LAN WorkPlace for DOS Toolkit 4.0
LAN WorkPlace for Macintosh Toolkit 1.2
LAN WorkPlace for OS/2 Toolkit 3.0
MacIPX 1.0a5
NASI: Programmer Reference Manual
NetWare AppleTalk Interface for NLMs 1.0
Network C for NLMs 2.0 (e)
NetWare C Interface for Macintosh 1.3
NetWare C Interface for Windows 1.3
NetWare Client SDK 1.0a
NetWare for SAA LU6.2 Tools Feb 92
NetWare Management System 1.0b
NetWare Network Management Toolkit 1.0
NetWare OS/2 Developer's Kit 2.0
NetWare SMF v71 Developer's Kit 1.0
NetWare 3270 Tools 1.6
NetWare TIRPC for DOS and NLMs 1.0
NLM SDK for NetWare 4.0 1.0a
Palm DOS SDK 1.0
*********************************************
*********************************************
REQUESTER VERSIONS
*********************************************
*********************************************
NetWare Shells and Requesters
DOS Shell 3.31
IPX (DOS) 3.31
VIPX.386 1.14
NetWare Requester for OS/2 2.0
NETWARE.DRV (Windows) 2.0
VNETWARE.386 (Windows) 1.04
NetWare SQL VAP NLM
Requester for DOS 2.12a 3.00b
Requester for OS/2 2.11 3.00b
Req. Interface for Windows v3.0 2.13 3.00b
NetWare Btrieve v5.15
Requester for DOS 6.0b
Requester for OS/2 6.0b
Requester Interface for Windows v3.0 6.0c
*********************************************
*********************************************
CONTACTING NOVELL
*********************************************
*********************************************
To contact Developer Support, call 1-800-NETWARE
(1-800-638-9273), or 1-801-429-5588. Be prepared to give the
support operator your open incident reference number. Developer
Support questions may also be sent by fax to 1-512-794-1775.
Many international distributors provide technical support. Please
contact your distributor or local Novell office (see list on back
cover) for more information on international support options.
Software patches may be obtained from Novell's NetWire forum on
CompuServe (NOVLIB, LIB 7), or by contacting Developer Support and
specifying the patches you need by product name.
Novell database and development products can be obtained through
Novell Authorized Resellers, or by calling 1-800-NETWARE or
1-801-429-5588.
Software Developer's Kits (SDKs) are available only through
Novell's Developers' Programs. Call 1-800-NETWARE, or
1-801-429-5588.
For more information on Novell Labs' development tools, education
classes and product certification, call 1-800-453-1267 or
1-801-429-5544.
For more information on Novell education classes,
call 1-800-NETWARE or 1-801-429-5588.
*********************************************
*********************************************
ACKNOWLEDGEMENTS
*********************************************
*********************************************
Publisher: Mad Poarch
Editor: Kirk R. Humphries
Design: Creative Services, Provo
Contributing authors: Gaurang Amin
Linda Anderson
Michael Eisa
Neda Eslami
Jack Gumaer
Ross Hopson
Sudz Khawaja
Nancy Kromar
Matt Pinsonneault
Bob Quinlan
Clint McVey
Randy Reddy
Holly Roff
Mike Shoemaker
Aslam Tejani
Special thanks to the Developer Support, Development, Developer
Relations, Product Marketing, and Marketing Communications staff
who contributed time and valuable input.
*********************************************
*********************************************
NOVELL OFFICES
*********************************************
*********************************************
Novell, Inc.
Corporate Headquarters
Brazil, India, Pakistan Sales Office
122 East 1700 South
Provo, Utah 84606-6194 USA
Tel. 1 (801) 429-7000
FAX 1 (801) 429-3944
*********************************************
Novell International Headquarters
2180 Fortune Drive
San Jose, CA 95131
USA
Tel. 1 (408) 434-2300
FAX 1 (408) 434-8697
*********************************************
Novell Australia
Level 2
2 Help Street
Chatswood NSW 2067
AUSTRALIA
Tel. 61 (2) 413-3077
FAX 61 (2) 413-3116
*********************************************
Novell Benelux
Excelsiorlaan 13
1930 Zaventem
BELGIUM
Tel. 32 (2) 7250200
FAX 32 (2) 7250311
*********************************************
Novell France
Tour Anjou
33, Quai De Dion-Bouton
92814 Puteaux Cedex
FRANCE
Tel. 33 (1) 4775-0909
FAX 33 (1) 4778-9472
*********************************************
Novell Germany
Willstätter Strasse 13
4000 Düsseldorf 11
GERMANY
Tel. 49 (211) 59730
FAX 49 (211) 5973250
*********************************************
Novell Hong Kong
China Resources Bldg.
26 Harbour Rd. Room 4601-5
Wanchai
HONG KONG
Tel. 852 8272223
FAX 852 8276555
*********************************************
Novell Japan
Toei Mishuku Bldg.3F
1-13-1 Mishuku
Setagaya-ku, Tokyo 154
JAPAN
Tel. 81 (3) 5481-1161
FAX 81 (3) 5481-1855
*********************************************
Novell Latin America
2180 Fortune Drive
San Jose, CA 95131
USA
Tel. 1 (408) 321-1476/1477
FAX 1 (408) 747-4940
*********************************************
Novell Mexico
Insurgentes Sur
No. 1160 P.H.
Mexico D.F. 03100
MEXICO
Tel. 52 (5) 575 5998/4192
FAX 52 (5) 559 0133
*********************************************
Novell Singapore
Level 36
Hong Leong Bldg.
16 Raffles Quay
Singapore 0104
SINGAPORE
Tel. (65) 322-8503
FAX (65) 321-8966
*********************************************
Novell Spain
Paseo Castellana, 40bis
28046 Madrid
SPAIN
Tel. 34 (1) 577-4941
FAX 34 (1) 577-9053
*********************************************
Novell Sweden
Kottbyjatan 7
16475 Kista
SWEDEN
Tel. 46 (8) 703 2350
FAX 46 (8) 703 9434
*********************************************
Novell Switzerland
vor Ort 21
CH-8104 Weiningen-Zurich
SWITZERLAND
Tel. 41 (1) 750-0504
FAX 41 (1) 750-0957
*********************************************
Novell United Kingdom
Avon House, Sweetwell Road
Bracknell, Berkshire
RG12 1HH
UNITED KINGDOM
Tel. 44 (344) 860 400
FAX 44 (344) 860 353
*********************************************
Novell, the N design, NetWare, Btrieve, XQL, LAN WorkPlace and
LANalyzer are registered trademarks; NetWare Loadable Module (NLM),
NetWare Global Messaging, NetWare System Calls for DOS, NetWare
Runtime, NetWare SQL, NetWare Btrieve, NetWare C Interface for DOS,
NetWare System Interface Technical Overview, NetWare RPC, NetWare
RPC 386, NetWare LU6.2, Report Executive, NetWare MHS, NetWare
Asynchronous Communication Services (NACS), NetWare Management
System, Professional Development Series, NetWare 3270 LAN
Workstation and Xtrieve PLUS are trademarks; and NetWire and
Professional Developers' Program are service marks of Novell, Inc.
IBM and OS/2 are registered trademarks, and NetBIOS and SAA are
trademarks of International Business Machines Corporation.
Microsoft is a registered trademark, and Windows is a trademark of
Microsoft Corporation.
Apple, AppleTalk, HyperCard and Macintosh are registered trademarks
of Apple Computer, Inc.
CompuServe is a registered trademark of CompuServe Corporation.
NFS and Solaris are registered trademarks, and SunSoft is a
trademark of Sun Microsystems, Inc.
UNIX is a trademark of UNIX Systems Laboratories, Inc., a
subsidiary of AT&T. Univel is trademark of Univel, Inc.
(c) 1993 Novell, Inc. All rights reserved.
*********************************************
Professional Development Series
B U L L E T S
JANUARY 1993
END OF FILE
*********************************************