********************************************* ********************************************* 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 #include #include 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" - Tab to "Ptr Mfg" - Press F9 [Lists] - Select "IBM" - Tab to "Ptr Type" - Press F9 [Lists] - Select "PC Graphics Printer" * 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 *********************************************