DTMFAQ

GENERAL INFORMATION about InterSystems' DTM-PC, DT-MAX and Open M		      FAQ Version 1.1.2 25 April 1996 -=-=-=-=-=-=-=-=-=-=-=-=-

Worldwide Support Center From U.S. and most countries Tel: +1 (617) 621 0700 Fax: +1 (617) 494 1631 Internet: support@intersys.com BBS: +1 (617) 494 0867 +1 (617) 225 0475			From Europe Tel: +44 (0)1753 830 077 Fax: +1 (617) 494 1631 BBS: +44 (0)1753 853 534

InterSystems US:       InterSystems Corporation 1 Memorial Drive Cambridge, MA 02142 Tel: +1 (617) 621 0600 Fax: +1 (617) 494 1631 InterSystems Australia 247 Bouverie Street Carlton, Victoria 3053 Australia Tel: +61 3 342 2464 Fax: +61 3 242 2420

InterSystems Brazil    Rua Haddock Lobo, 369 Sala 802 Tijuca - Rio de Janeiro - RJ			CEP 20260-131 Brasil Tel: +55 21 567 3174 Fax: +55 21 567 3137

InterSystems France    Tour Suisse 1 Bld Vivier Merle 69543 Lyon Cedex 03 France Tel: +33 72 11 40 33 Fax: +33 72 11 40 16

InterSystems Germany:  InterSystems Deutschland GmbH Rheinstrasse 16a D-64283 Darmstadt Germany Tel: +49 (0)1651 1747 0 Fax: +49 (0)1651 1747 11

InterSystems Thailand  30th floor, CTI tower 191 Rachadapisek Road KlongToey, Prakanong Bangkok 10110 Thailand Tel: +66 2 261 5012 Fax: +66 2 261 5213

InterSystems UK        InterSystems House, Tangier Lane Eton, Windsor, Berkshire SL4 6BB, England Tel: +44 (0)1753 855 450 Fax: +44 (0)1753 855 290

INTRODUCTION: This document lists some of the Frequently Asked Questions (FAQ) concerning the DTM-PC, DT-MAX and Open M for Windows products. The answers supplied within are designed to give the most direct and probable solutions to the associated queries. However, the answers are not meant to stand as the only possible resolutions, just as the most likely solution to the proposed question. Also, this file is not designed to take the place of the documentation supplied with the DTM product line. Reading the appropriate manuals at all stages of the operation of these products will lead to both fewer problems and to good solutions if difficulties do arise. The purpose of this file is to supplement the documentation; that is, if the resolution of the problem is not available in the the manuals, the DTMFAQ.TXT file and the text file of the latest patch should be referenced. If a viable solution is still unobtainable, the DTM support team should be contacted for further assistance. As supporters of this particular Open M product line, time limitations make it difficult to explore all the aspects and characteristics of the product. Therefore, we ask for your assistance. If you discover a work-around for a problem, un- cover a tip to improve performance or have a hint about any other DTM issue, please contact us by e-mail or fax so that your ideas may be included in this file. Also, upon the discovery of any error in the DTMFAQ.TXT document, inform us of the mistake and we will correct it as soon as possible.

The DTMFAQ.TXT document is available on the InterSystems bulletin board and is also accessible via the Internet.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

TABLE OF CONTENTS

0. List of new and updated questions 1. Patch, Licensing, BBS, and Internet Information 2. Networking Questions 3. Windows, Visual M, and Visual Basic Problems 4. Memory Issues and Errors 5. Routines, Datasets, and Other System Management Hints 6. Printer, Com Port, and Other Device Problems

Appendix 1. Building Protocol Stacks Appendix 2. Eliminating General Protection Faults in Windows

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

0. List of new and updated questions since the last FAQ.

Since version 1.1.0 22 January 1996 Part 1: no changes Part 2: Updated Q21 Added Q50, Q51 Part 3: Added Q22, Q23 Part 4: no changes Part 5: no changes Part 6: Added Q19

Since version 1.0.5 21 October 1995 Part 1: no changes Part 2: Updated Q9, Q14 Added Q38, Q39, Q40, Q41, Q42, Q43, Q44, Q45, Q46, Q47, Q48, Q49 Part 3: Added Q17, Q18, Q19, Q20, Q21 Part 4: Added Q19, Q20 Part 5: Updated Q1, Q10 Added Q18, Q19, Q20, Q21, Q22 Part 6: Added Q18 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

1. Patch, Licensing, BBS, and Internet Information

Q1: How do I install a patch?

DTM patches come in the form of a self-extracting EXE file which can be found in the PATCH SIG in the ISC BBS. The PATCH .EXE file must be executed in the directory where DTM is installed. When asked to overwrite existing files, you must answer "YES". Then, you need to use the %rload utility to load the whole ob- ject code into the DTM systems datasets. The SYS-BASE dataset is by default read only, so you need to modify the .DBD file (in DTM 4.x), or the .INI file (in DTM 6.x), to be able to %rload the object code of %m* routines. In DTM 4.x you need to add the following lines in the .DBD file: DATASET SYS-BASE DATASET SYS-RTN In DTM 6.x you need to remove the /RO flag from the SYSBASE line in the .INI file: SYSBASE = SYS-BASE Then you start DTM using these configuration files and type "d ^%rload", select the name of the object file (for example, 	    60ptch15.obj for DTM 6.0 patch 15) and choose the "File Only", "Object Only" and select "Always" for the overwrite option. Q2: Do I need to have previous patches?

You don't need to have any patch loaded before installing each patch. For example, patch 15 contains all the updated routines to transform DTM 6.0 into DTM 6.0 patch level 15.

Q3: Can I go backwards in patches?

Trying to load patch level X on a system that already has a 	    higher patch level (X+1 or X+2, for example) will lead to un- predictable results and could make the system unstable. If 	    you want to go backwards from patch level X+1 to patch level X, you would need to reinstall DTM 6.0 before applying patch level X to it.

Q4: How do I check the version and the Patch level

"w $zver" returns the DTM version number of the DTM image file (MUMPS.EXE, MAX.EXE, MAXC.EXE or MAXS.EXE). If a patch is installed, the patch level is the number following a dash ("-"). "d ^%zpatch" will return the same information once the object code for the patch has been uploaded in DTM. The patch level should be the same as the one of the DTM image file. Note that since the %zpatch routine has been created after DT-MAX 4.8 patch level 04 and DT-MAX 6.0 patch level 09, it is possible that d ^%zpatch returns "undefined routine" though you have correctly installed the patch. In this event, you should install the latest patch or upgrade to the next DTM version.

Q5: How do I use the BBS?

To use the BBS, you need to have an account for the Bul- letin Board Service. To get an account, speak with one of the BBS Systems Operators. They may be reached at (617) 621-0700. Then, dial into the BBS (see phone number in this file header) and once you have logged in, type "S" for  and "I" for  to go directly to the  directory.

Q6: How do I use the Internet?

InterSystems' Domain name is intersys.com (198.133.74.*). There are a number of ways you can access services. E-mail:           [username]@intersys.com Support E-mail:   support@intersys.com anonymous FTP:     ftp.intersys.com World Wide Web:   http://www.intersys.com

Q7: How can I check that my paper key is what I need?

d report^%mchecklicense gives you all the information about you currently installed paperkey. Some elements of the paperkey have a special meaning: Ux     x is the maximum number of users Jx     x is the maximum number of jobs Px     if this is a client-Pak, x is the maximum number of clients that can use it at the same time. if this is a server key, x is the maximum number of clients that can connect at the same time; if this is a DTM-PC license, you can have up to x*4 network users (users logged in the clients that are connected			to this server). for a DT-MAX license, you can have up to x*6 network users.

There are a number of options: WINDOWS        needed for DT-WINDOWS and Visual M		LAT-x           DT-LAT support for x LAT devices ARNET-x        ARNET support for x ARNET devices (this 				option is available on request for NO CHARGE) GRAPHICS       for DT-GRAPHICS Some options are only relevant in DTM version 4.x:		DDP            for a DDP Client DDPSERVER      for a DDP Server NETWORK        for network support in earlier DTM versions

If your Paperkey is not sufficient for your needs, please contact your sales representative. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

2. Networking Questions

Q1: Why does DDP set fractional numbers to 0? DDP sets all fractional numbers to 0 in DTM version 6.0. This bug is fixed in version 6.2.

Q2: When should I use ISUDP, DDP or Raw Ethernet?

The ISNET protocols are intended for connecting to non-DTM servers. You can only access globals (not routines) through these protocols. If your server is a DTM machine, it can only run 1 server job, and a maximum of 16 clients can connect to it. DDP: this can be used to connect to DSM and MSM systems. Because it does no buffering, it is therefore more network intensive and should be avoided when possible. ISUDP: this can only be used to connect to ISM systems using the UDP/IP protocol. (the UDP protocol is a connectionless		Datagram protocol encapsulated in IP packets. It is part		of the TCP/IP protocol family). This protocol should be used where routability is an issue (Wide Area Network) or Raw Ethernet is not available. The use of this protocol requires TCP/IP support on the PC. Currently DT-MAX 6.x only supports TCP/IP from FTP software for ISNET. (Note that DT-MAX 6.3		also supports Wollongong's TCP/IP but only for the relational 		server, GBI devices or DT-Networking).

Raw Ethernet: This is the fastest protocol and should be used whenever possible. Note however, that by default most routers will filter raw Ethernet packets. Q3: With 3C509 Network Adapter and ODINSUP, LAT and DDP disconnect.

ODINSUP has been designed to provide an NDIS API on top of an ODI protocol stack. This is typically needed to have DDP or DT-LAT running on top of DISKPKTDT (InterSystems' NDIS	    packet driver) on a machine that is a Netware client. The ODINSUP is not designed for the heavy loads that DDP or DT-LAT networking generate. Used with some adapters that do	    not have shared memory (3C509 for example), this causes the whole NDIS part of the protocol stack to 'crash'. The DDP and DT-LAT connection would be lost, but the Netware connection would be intact. To solve this problem, you can replace the Network adapter with one that will use shared memory (we use successfully	    SMC adapters), or use the ODI packet driver (ODIPKTDT) provided in DTM 6.3 and available on our BBS.

Q4: My network job (%mnetsql, %mnetbiosa or %mnetspxa) exits after 10 seconds.

This bug has been observed when the Network section is not at the end of the DTM.INI file. If you experience other similar problems, you should add the line "LOG=DISPLAY, GLOBAL". This logs critical Network Information on the bottom line of the console and in a global. You can display the network log with the utility %mnetlog to check what errors have occurred. This bug has been fixed in DTM 6.2. Q5: Is IPX faster than NetBIOS?

In DTM 4.x (previous to 4.8 patch level 6) and DT-MAX 6.x 	    (previous to 6.0 and 6.1 patch level 15) the IPX networking implemented in DTM is 40% slower than NetBIOS. DTM 4.8 patch 6 and DTM 6.2 contain a new IPX implementation of DTM Networking which is approximately as fast as the DTM NetBIOS implementation. The new DTM IPX code uses more conventional memory and configuring it is an arduous task. Note that NetBEUI from Microsoft is usually faster than other NetBIOS implementations. Q6: What Novell Driver versions should I have?

The current Novell drivers are IPXODI 3.01, LSL 2.14, VLM 1.20, and NetBIOS 3.16. The latest Novell Netware drivers are available from Novell (via NOVLIB on CompuServe or on the Internet; Anonymous FTP	    ftp.novell.com or WWW http://www.novell.com). The latest drivers are in the following self extracting ZIP archives: VLMUP2.EXE     ODI and VLM drivers NWDLL2.EXE     Netware DLL's for Windows DRVUP2.EXE     Netware Drivers for Windows

NetBIOS 3.16 is the latest version of Novell NetBIOS. If you encounter problems with this version (for example	    DTM clients that disconnect), InterSystems recommends that version 3.01 be used. We have found problems when using DTM with NetBIOS versions 3.10-3.15 from Novell: DTM uses NetBIOS to manage large transfers of data through the network, consequentially we have found that problems in Novell NetBIOS version 3.10-3.15 can show up in DTM but not in other software.

Q7: What's wrong if I have a "no connection to server" message using IPX?

Check the frame types in NET.CFG; the order of the frame types in this file is important. The default frame type must appear first, followed by the other frame types that are supported. DTM uses only the first frame type specified in the NET.CFG. Also, prior to DTM version 6.3, if your DTM nodes are on separate network segments you will need to use the /NET and /ID switches which are described in the DTM 6.x Network Configuration Guide. Check that the server is running MAXS.EXE.

Q8: The IPX keywords /NET and /ID do not work.

The "DT-MAX Network Configuration Guide" instructs you to enter the ID as 6 pairs of hexadecimal digits separated by hyphens. This is incorrect; eliminate the hyphens to make this option work. Using the utility %mspxid on the server will allow you to view the correct form of the ID and network address to use.

Q9: The Network Monitor (/MONITOR option) does not work, but the client can connect to the server.

The monitor job uses multicasts to poll other machines on the network. Bridges, routers, or intelligent hubs may filter those packets and prevent the monitor from operating correctly. There is no workaround but to configure the routing devices so that they do not filter broadcasts. In DTM 6.2 and 6.3, the SPX network monitor does not work. A patch is located in NETMGR.RSA in the USER SIG.

Q10: Using zn "user" from the "user/shadow" namespace does not work, or I cannot change namespaces.

If you use namespaces like "user" and "user/shadow", zn "user" will put you in the "user/shadow" namespace. You need to type zn "/user" to go in the "user" namespace. Q11: The shadow does not start because it thinks it's already run- ning. If you use %mhalt to stop a shadow machine, the shadow process may not have time to terminate properly. Thus, it may not clear the global that indicates if it is already running or not. In DTM 6.x, the recommended way to stop a shadow server is to use %mhaltsys. Q12: Can I mix different versions of NetBIOS?

The server and all the clients connected to it should run the same NetBIOS (same Vendor and same version). Because NetBIOS is not a standard, different vendors may implement it differently, and the packets may have a different structure. Furthermore, a single vendor may change some default values between two versions, and this could cause problems when using both versions together.

Q13: How do I set up protocol stacks?

Please refer to the document "DTM Configuration Addendum" or to Appendix 1 of this FAQ file.

Q14: Does DTM support TCP/IP and what version should I use?

Up to version 6.2, DTM supports only FTP Software's TCP/IP protocol stack. TCP/IP can be used for OMI networking or for network devices in versions prior 6.3. DTM Network devices require the use of version 2.22 or higher; OMI requires version 2.05 or later. ISUDP (UDP/IP) requires version 2.2. To order the appropriate TCP/IP product, please contact FTP Software at the address below. FTP Software 2 High Street North Andover, MA 01845 (508) 685-4000	    DT-MAX version 6.3 also supports Wollongong's TCP/IP for OMI, Network Devices and DT Networking (DCP). Wollongong's TCP/IP is not supported for ISUDP Networking in DTM 6.3. Tests have shown that DCP networking is much faster with Wollongong's protocol stack than with FTP software's. The Wollongong Group, Inc.		1129 San Antonio Road Palo Alto, CA 94303-4374 (415) 962-7200	    On the server side, VisualM uses the TCP/IP network devices, so both stacks can be used.

Q15: With which terminal servers does DT-LAT work?

DTM formally supports terminal servers from DEC, XYPLEX, and Ar- net. If you are interested in information about compatibility with specific model numbers, please call DTM support. When using DT-LAT servers to replace an existing VAX, you need to be aware of the following facts: - The DEC terminal servers (series 200 to 700) may need a VAX to download the firmware from it. DEC also offers some terminal servers that can operate without a VAX, like the DEC Server 900TX or DEC Server 90TL+, and sometimes there is an option available to have the firmware on a ROM in the Terminal server. - Some terminal servers do not have a service responder, so you cannot do forward LAT to them from DT-LAT because DT-LAT does not keep a table of all the services available on the Network.

Q16: DT-LAT looses characters since I upgraded to DT-MAX 4.8 patch 06, DT-MAX 6.0 patch 13 or later

In the LAT devices definition of the MUMPS.DEV file, remove the "BUFSIZE" parameter (and recompile the .DEV file if version 4.8). Q17: I'm having DT-LAT problems Upgrade to the latest DT-MAX version and patch level before calling InterSystems Support. A lot of problems were discovered in previous versions of DT-LAT, and all problems we know about have been fixed in the latest patch level of the current release. You should also make sure that you use the packet drivers provided by InterSystems (ODIPKTDT or DISPKTDT). If you need InterSystems to diagnose a problem, this can only be done with a trace. You need to type "d trace^%lat" to start a trace. The trace gets saved in ^%trace, by default in the SYS-GBL dataset, and this may create a vast amount of data (10MB traces are not unusual) so you may want to MAP ^%trace to a scratch dataset. We need a complete trace to be able to analyze it. Incomplete traces are usually of very little help. Best is, when all the "start CIRCUIT" commands is in the trace, i.e. the trace is started before any terminal is connected to the DT-LAT server. Q18: My DTM server recently became slow.

When a server becomes slow, it is usually caused by one of three reasons. The first of these reasons is that the file access mode has defaulted to access mode 1, which is the slowest of the file access modes (for a further explanation of file access mode, see 	    Section 5, Question 11). To discover which file access mode the system is currently using, run the %ftabdisp utility, choosing "summary". If for any file the access mode is 1, you need to run %ftabdisp again and choose "detail". This will give a "Reason 	    Code", indicating the nature of the problem. (The RC might be 	    wrong, see Section 5 Question 11). File access mode 2 or 3 indicate a fast file access mode. The second reason for a slow server is the misuse of the buffer pool. When the system is running with a heavy load, run the %buffer utility on the server and choose the summary option. If 	    the number of buffers in use for a particular sized buffer is 	     high relative to the others, the number of that particular sized buffer must be increased in the DTM.INI file or by running the %mconfig utility. Also, if the number of buffers that need writ- ing is high, more buffers of that size are needed. The limit for the total number of buffers is 1600 for the 4.x series and 1800 for the 6.x series. Be sure not to exceed this limit or DTM may crash at a later time (this DTM 6.0 bug is solved in DTM 6.3).

To check for the third possibility, the %dstest utility needs to be run. Perform the first %dstest on the largest dataset on	    the server while the load is low, and check the number in the random field. If it is greater than 0.020 (20 milliseconds), then the dataset has become too fragmented. You need to use a commercial defragmentation utility to solve the problem.

If the number reported in random field is acceptable, attempt running a %dstest on the dataset from a client. If the random number is greater than 0.070 (70 milliseconds), then check the buffers defined on the client. If the buffer numbers are correct, there may be a underlying network problem (which you may diagnose	    with a Network analyzer). You can also confirm that the problem is related to the Network if you perform a nettest (you just need 	    2 machines to run %mnettest) and compare the results with reference values from another network. Q19: Can I use different versions of DTM on the same network?

InterSystems technical support will not support Networks that combine different versions of the product (or different patch	    levels). We strongly recommend against any production system running in this manner. You can combine DTM-PC clients and DT-MAX clients if the server is DT-MAX. It is impossible to have DT-MAX 4.x and DT-MAX 6.x	    versions on the same Network, because the dataset formats are different. There have been some major changes in the DTM 6.3 SPX code that prevent any combination of DTM 6.2 and DTM 6.3 or later. Q20: What do I do if I want to run my clients under Windows for Workgroups and my server under DOS? One solution is to use the IPX protocol. You need to build an ODI protocol stack for IPX support on the client and the server. Another solution is to use Novell NetBIOS on the DOS server and to Configure the WFW client to run "IPX/SPX transport	    compatible with NetBIOS" as the default protocol, keeping NetBEUI as a secondary protocol (use the "Network Setup" icon	    to change the WFW network configuration). If you absolutely want to keep NetBEUI as the default protocol in WFW, you need to install NETBEUI.DOS on the DOS server. To do this, configure an NDIS 2 protocol stack on the DOS server. The file NETBEUI.DOS is available in the "NETWORK" "SIG" of our BBS. Q21: Why do the clients disconnect in a DTM Network? To find the cause, you need to check for errors in the errlog of both the clients and the server (d ^%errdump), and check the network log of the clients and the server: To do that, add "LOG= DISPLAY, GLOBAL" in their INI files, and d ^%errlog to find problems. If you run the IPX/SPX DTM Networking, you may have following errors on the DTM server when your network grows: - "No send buffer available" - "No answer from target or communication failed -rcv" - "Unable to hangup connection 58301" All these problems can have the same cause: the server processes are too busy to respond fast enough to network requests. Solutions (valid for IPX/SPX and for NetBIOS): * Add more server jobs. 2 is a strict minimum. It seems that for lookup intensive applications, you need approximately 1 job per 8 IPX clients. * Set DT-MAX on the clients. DTM-PC on a client will not do any Network buffering and will create much more network traffic. * Check the buffers on the client as well as on the server. * Look for underlying Network problems: High number of 	    retries, high number of collisions, broadcast storms, or any abnormal network traffic. If you still experience occasional network disconnections, you may want to change some IPX parameters in the NET.CFG of the clients. It seems that the DTM NetBIOS networking is less affected by Network problems than the DTM IPX/SPX networking. Thus, changing from IPX/SPX to NetBIOS may solve the problem. We are currently investigating a severe problem that causes SPX clients to disconnect from the server, in both DTM 4.8 patch 06 and DTM 6.2 and later. The temporary solution is to use NetBIOS. DTM 6.4 should solve this problem.

Q22: What does "Network connection table full" indicate in my SPX or Novell NetBIOS network? The IPX/SPX protocol creates a connection table at startup, using the parameters defined in the NET.CFG. As a default, IPX allows for 20 sockets and 15 sessions. If you need more clients to connect to the DTM server, you can add following lines in the DTM server's NET.CFG: PROTOCOL IPX IPX SOCKETS = 40 SPX CONNECTIONS = 35 This will allow 35 clients to connect at the same time to the DTM server. Note that the keyword "PROTOCOL" must begin in the first row, and the other lines are indented. If you use NetBIOS, the lines to add to the NET.CFG are: PROTOCOL NETBIOS NETBIOS SESSIONS = 35 NETBIOS COMMANDS = 20 When the IPX protocol stack loads, it will "ignore" those parameters (an error message appears on the screen), but the NETBIOS.EXE program will reset the number of sessions and commands to the right values. You should verify with "d ^%mnetbios" that the maximum number of sessions and commands has increased to the correct value. Q23: How can I force a NetBIOS session to terminate ?

Some NetBIOS errors (as for example "session table full") may leave some connections in an intermediate state, preventing a 	    station to log in again (the server believes the client is still 	     connected, and sends a "duplicate license" message to the 	     client). Following command allows you to hang-up a connection from the server: w $$hangup^%mnetbios(ses_num,adap_num) where "ses_num" is the session number, which you can find by running "d ^%mnetbios" on the server. "adap_num" is the network adapter number, usually 0.

Q24: %mspxtest does not work across routers.

This is because the %mspxtest does not allow you to specify the /NET and /ID arguments to reach the DTM server. There is a modified routine in the "NETWORK" SIG of out BBS that solves this problem. The file to download is "MSPXT.RSA". This fix has been put into DTM 6.3.

Q25: My Netware 4 File server shows messages "Router configuration 	     error detected" "NODE AA0004003E1C claims network 952AEF01 	     should be 952AEF01"

This is due to a bug in the SPX Networking of DTM. DTM sends SAP (Service Advertisement Packets) in a wrong format. Because these are not required for DTM Networking, you can comment out following line: DTM 4.x: "wait-1^%mnetspx" (this line contains "g sap") DTM 6.x: "wait+3^%mnetspxs" (this line contains 			 "g sap^%mnetspxs2"). This problem is fixed in DTM 6.3.

Q26: The shadow process does not start, although the status is "caught up", or "running".

The shadow process uses the global ^%jshadow("SHADOWNAME","status") to hold information about the status. If the shadow system crashes, or if it brought down without running "d ^%mhaltsys", it is possible for the ^%jshadow global not to get updated. If this happens, you need to kill the SUBSCRIPT ^%jshadow("SHADOWNAME","status") before starting the shadow process.

Q27: How can I setup 1 server with 2 network adapters ?

You cannot use Novell NetBIOS to address 2 network interface cards. This should work with other NetBIOS implementations, using the /ADAPTER parameter in the MUMPS.DBD (version 4.x) or DTM.INI file (version 6.x). Q28: How can I setup a DTM 6.x server with both IPX/SPX and NetBIOS ? In DTM 6.x the IPX/SPX networking uses adapter 0 by default. Thus, on a DTM server that has both IPX/SPX and NetBIOS enabled, the server processes will collide with each other unless you use /ADAPTER=1 for the NetBIOS protocol. You need to set this parameter in the [NETWORK] section of you DTM.INI file on the server.

Q29: How are line terminators working on the TCP/IP devices?

When you use a TCP/IP device, the default behavior is following: Data may be buffered, writing a '!' will flush the buffer and send the data. '!' signs are always interpreted and stripped. If	    you want to send a  sequence, you need to use "w $c(10)_$c(13),!". You can configure the port so that '!' do not get stripped, with the open parameter VARIABLE=1. By default, the TCP/IP device is configured with no character interpretation. This can be changed the same way as for other devices.

Q30: How should I configure Networking to run DTM under Windows95?

Under Windows95, you should avoid loading any real-mode drivers, because they are less stable and less performant that the 32bit protected-mode drivers provided by Microsoft. Furthermore, the real-mode drivers use conventional memory, leaving less memory available to run DTM. - If you want to use NetBIOS networking, we recommend using the NetBEUI protocol provided with Windows95. For DTM to detect it 	    correctly, you need to check the checkbox "set this protocol to	     be the default protocol" in the Advanced properties of NetBEUI, using the network icon of the control panel. - If you want to use the IPX/SPX protocol, we recommend using the IPX/SPX compatible protocol provided with Windows95. You can enable the NetBIOS over IPX/SPX and use "set this protocol to	    be the default protocol" if you need a Novell compatible NetBIOS, which gets propagated across routers. - If you use other networking (DDP, ISNET, TCP/IP), you will need to load the real-mode drivers (NDIS version 2 or ODI) in the config.sys and autoexec.bat of Windows95. - DT-LAT is not supported under Windows 95.

Q31: Is there a way to Telnet to DTM ? DTM does not include any Telnet, and there are no plans to implement Telnet in DTM. Instead, DTM includes LAT. You can use LAT to connect to DTM from a LAT terminal server, or to print from DTM to a printer attached to a VAX or a LAT terminal server. InterSystems next generation of products, Open M for Windows95 and Open M for Windows NT will include LAT as well as Telnet. John Godfrey from Cornell University has developed a Telnet implementation for DTM, available in the USER SIG of InterSystems BBS (file QTELN1-1.ZIP). InterSystems provides no support for this product.

Q32: How can I check from the server if the shadow is running ?

w $$mcheckdj^%mjserver is 1 if the shadow process has been asking the server for journal file entries in the last 30 seconds, 0 otherwise.

Q33: I get the errors "session timed out" and "network: malformed buffer -rcv", on client startup, the client does not connect to the server.

In DTM 6.x, you need to use MAXS.EXE for the server. If you use MAXC.EXE for the DTM server, the DTM client connects and immediately disconnects with these error messages.

Q34: Why is DTM so slow over Token-Ring NetBIOS ? Why does the %mnettest show that the throughput for packets over 4096 bytes is 3 times higher than for smaller packets ? As a connection oriented transport protocol, NetBIOS uses Acknowledgment packets (for each data packet sent, the receiver 	    sends an ACK packet). Since this can generate a lot of traffic, an enhancement allows the receiver to send the ACK embedded in its response packet (piggyback acknowledgment). If no response is 	    being sent within the next 20 ms (T2 timer), an ACK packet is sent at that time. The %mnettest utility generates a one-way network traffic (it sends packets from one client station to a server station). The %mnettest server is not sending packets back, an therefore will only send the ACK after a 20 ms delay if piggyback acknowledgments are enabled; The client waits for the ACK before sending the next packet. The "/PBA=0" parameter on the "DEVICE=DXMT0C0.SYS /PBA=0" command line of the CONFIG.SYS allows you to disable piggyback acknowledgments, restoring the performance for both %mnettest and normal DTM networking. Q35: What is local routing ? In DTM 6.3, the SPX routing occurs automatically (without 	    specifying /NET and /ID). Thus, if a DTM client and a DTM server are located on the same physical segment and use different frame types (the first frame type specified in the NET.CFG file will be 	    used for DTM), it is possible to generate "local routing": the Netware server attached to that segment will act as a router and translate each packet between the frame types. Each packet will travel on the same physical network twice: from the DTM client to 	    the Netware server using the client's frame type, and then from the Netware server to the DTM server using the DTM server's frame type.

Q36: Can I use LAT on a WAN ?

Digital Corporation's LAT protocol (Local Area Transport) should never be used across a Wide Area Network of any type. Some routers will do transparent bridging and allow you to connect across a WAN (frame relay, T1, etc.), but the LAT protocol has not been designed to do so. Doing this will result in dropped connections due to the network latency (amount of time a packet 	    needs to travel from the terminal server to the DT-LAT server and 	     back): The LAT protocol uses a default keepalive of 85 milliseconds. If you need remote terminal capabilities on a WAN, you have to use the Telnet protocol (implemented in M for 	    UNIX only).

Q37: Why does "^%gd", "^%g", "^%glist" in an ISNET returns "error in 	    gwalk+3^%gwalk: function not implemented" ?

This is because these utilities use a DTM extension, $order on non-subscripted global names, as for example $o(^A). Q38: At ISNET startup, I get "not enough room for this configuration".

This error appears frequently in DTM 6.3: The ISNET.EXE GCALL reserves some memory to store DDP structures. The more volumes you want to access, the more space is needed in the GCALL. You can successively replace the ISNET.EXE GCALL of DTM 6.3 with the files ISNET26.EXE and ISNET28.EXE located in the NETWORK SIG of our BBS, and check if this solves the problem.

Q39: Is the DDP GROUPS option implemented in DTM version 6.x ?

It is implemented in DTM 6.2 and 6.3, but undocumented. If the computer needs to belong to the GROUPS 1,2 and 4, you need to add following line in the [NETWORK] section of your DTM.INI file: ISNETDDPGROUPS 1,2,4

Q40: How can I prevent a routine running on a network client from being suspended when the server is down ?

In DTM 6.x, when a client looses the connection to its server, all the routines get suspended until the connection is restored: this is called "network hardening" and prevents your application from exiting with an error "no connection to server or router". If your routine is stored locally and is not performing any global access, you can issue the command "zzswitch +1024" so that is will not get suspended. Q41: what are "dynamic connections" ?

In DTM 6.x, clients do not need to establish a permanent connection to all the servers they need to access. Dynamic connections work with all DCP protocols (NetBIOS, IPX and 	    TCP/IP), and cannot be used to access the Master server. If a client wants to access server 102 and 103 with a dynamic connection, simply replace the "USE 102" and "USE 103" statements if the client's INI [NETWORK] section with: ROUTE 102-103 And in the MAP file, add a timeout value in seconds: SERVER 102: ARCHIVE1  /TIMEOUT=90 SERVER 103: ARCHIVE2  /TIMEOUT=90 When a process needs to access data located on "ARCHIVE1", a network agent will be started. It will exit after TIMEOUT seconds of idle time. This can be useful to save memory on clients that have to connect alternatively to different servers, or to connect to a server across an ISDN line. Since the master server needs to be unique for the whole network, please contact InterSystems Support if you need to setup such a configuration.

Q43: I have 2 distant sites connected through phone lines, Can I use 2 master servers and 2 MAP files ?

The role of the master server is to read the MAP file and compile it into the ^nspace global. The master server assigns unique numbers (XDSIDs) that reference all the datasets through the network. these XDSIDs are then used by clients to access and update the different datasets. If you use 2 masters, they may assign different XDSID's for the same dataset, and clients may write data to the wrong dataset on the wrong server, creating data corruption on a large scale. Since the master servers keep some history information when compiling the MAP file, using the same MAP file on both master servers is not a solution that guarantees unique XDSIDs. Q44: Do TCP/IP dynamic connections work ? There is a bug in the TCP/IP dynamic connections of DTM 6.3. The patch is in the file DYNATCP.EXE in the USER SIG of the BBS. DTM 6.4 solves the problem.

Q45: My TCP/IP clients and server cannot connect. The server hangs or generates an exception when the client connects.

These seem to be a problem between DTM and the TCP/IP name resolution of certain versions of FTP Software's kernel. This problem is being investigated. In the meantime, we recommend that you use only the TCP/IP addresses to connect, as in: CLIENT 191.9.200.1 USE 191.9.200.2

Q46: In DTM 6.x, why does the SPX client never go back to MS-DOS when it does not find the server ?

This problem has been fixed in the file 63PTCH1.EXE located in the NETWORK SIG of the BBS. DTM 6.4 solves the problem.

Q47: In DTM 6.2 and 6.3, the SPX network manager and does not work, and the broadcast utility fails with an "undefined variable" error.

This problem has been fixed in the file NETMGR.RSA located in the USER SIG of the BBS. DTM 6.4 solves the problem.

Q48: Why does "Reverse LAT" loose characters ?

Reverse LAT is intended for an interactive session (when a user	    types at a slow pace), and includes a typeahead limit: if the typeahead limit is set to 32, the system will never buffer more than 32 incoming characters, and discard the rest. In DTM 6.x, use the command: d settypeahead^%mlat1(1024) to increase the typeahead count.

Q49: If I try to create a server that is both SPX and TCP/IP server, the SPX server process fails after a minute.

This problem has been fixed. Download the file MSTARTN1.RSA from the NETWORK SIG of the BBS. DTM 6.4 solves the problem.

Q50: Some DT-Network NetBIOS clients disconnect, stop working, or the client shutdown does not work properly.

This problem may occur if you use Lantastic Networking or Windows for Workgroups (WFW) peer to peer Networking. These peer to peer networking need a unique NetBIOS name per computer. DTM Networking also needs a unique NetBIOS name for each of the client and server machines. The names used for the peer to peer networking (WFW machine name or Lantastic machine name) cannot be the same as the names used for DT-Networking. You could, for example, name John's PC "JOHN" within Lantastic, but in DTM.INI (or MUMPS.DBD) you should use a different name, e.g. "DTJOHN": [NETWORK] NETBIOS /NORESET CLIENT DTJOHN USE DTSERVER

Q51: Why is ISNET (UDP or Raw Ethernet) Networking very slow between DTM and ISM 6.1 ?

In ISM 6.1, a NEW ANSI collation type (number 1) has been created. This is not supported by DTM. DTM will not use bloc mode networking for any global that uses collation type 1. If	    you need to access your ISM globals from a DTM machine, use collation the OLD ANSI collation type 0 for them. 8

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

3. Windows, Visual M and Visual Basic Problems

Q1: The DDE exchange does not work under DT-WINDOWS, is it an er- ror?

Verify that the DT-MAX Windows name is correct; the name in the title bar of the DTM DOS box must be DT-MAX in order for the DDE exchange to function properly. In version 6.2, you can change the name of this box by adding /WDTMNAME("window name") to your startup line.

Q2: I have bad performance when using DDP with Visual M?

Networking performance via DDP has been improved in both ver- sion 6.2 and patch level 15 for version 6.0; DDP Networking is now faster. Also, it may improve performance if you include following lines in your %ustart routine: zzswitch 4096 v 1:^#windowsversion:$zwc(0)

Q3: I cannot start my VB Server from Visual M.	     You may have this problem if you use a paperkey that InterSystems supplied with DT-WINDOWS. Modify the VISUALM.INI file or the .INI file used to start DTM by adding BACK    = 16k, 32k, 128k or get a new license for 8 background jobs, which will contain J8 on the paperkey instead of J4 as supplied with DT-WINDOWS.

Q4: Does DTM run on Windows NT?

DT-MAX does not run under Windows NT. The difficulties stem from the fact that Windows NT provides only 6 EMS handles, but DT-MAX requires the use of 10 EMS handles. DT-MAX should run under Windows 95. Also, DTM-PC may run under Windows NT, but the performance may be unpredictable.

Q5: Does DTM run on WARP or OS2?

DTM will run under both WARP and OS2, but problems may arise because DTM accesses hardware directly, whereas WARP and OS2 do not allow this: You probably won't be able to use COM ports or SmartPorts in OS/2, and InterSystems does not support these Operating Systems. Q6: I am having difficulty eliminating GPF (General Protection 	     Faults) in Windows. What should I do?

See the document contained in Appendix 2. Remember that the fact that a GPF occurs while Visual M is running does not mean the bug is necessarily in Visual M. Some faulty graphic, sound or keyboard drivers may also cause the GPFs to occur within Visual M.	    Some of the GPFs or "system freezes" may be caused by bugs in the M/Desktop. A few problems have been reported: - If you have a large event routine, and de-select the "event view" checkbox of the M/Desktop, a GPF may occur. A patch for this will be available on the BBS shortly. - in DTM 6.2, if you edit a line longer that 511 characters, a GPF occurs.

Q7: How large can the source code in the M/Desktop be? In DTM 6.2 and DTM 6.3, the maximum size of a routine in the M/Desktop is 16K. This limit has been hardcoded in the M/Desktop and will be increased to 32K in future versions. If you reach the 16K limit in DTM 6.1 and 6.2, your system may truncate the routine, or you may get an "out of memory" error and loose the routine. When you create a form in Visual M, all the M code for all the objects of the form will be stored in only one M routine. An M routine can use a maximum of 5 dataset pages for the source code and 4 dataset pages for the object code; On each dataset page, approximately 128 bytes (this varies with	    the size of the index pages) are reserved for the system and can't be used to store the routine. The maximum routine size is 32K for the code as well as for the object. This limit can be reached only by using 8K data pages.

Q8: Can I use Visual M with Delphi?

Delphi does not recognize some properties of the DTM 6.2 and 6.3 MVB (although the MVB fully complies with the Visual Basic 	    3.0 VBX standard), so it is not possible to use the MVB inside Delphi to access DTM. It is possible to use DLL calls from Delphi to access DTM. This is described in appendix B18 of the "Open M 	    for Windows 6.2 release notes".

Q9: Are any special configuration parameters suggested for the Windows95 ?

In the [GENERAL] section of your DTM.INI file, you must use the options: DISKMODE = DOS SCHEDIO = NO DTM 6.3 does this automatically. For DTM 4.x, you need to use the "/FM=1" startup parameter, and you may add following line in the %ustart routine: v 0:$v(1,276,-3):0

Q10: DTM error 49803 (EMS error 139) under Windows95.

Remove all real-mode drivers and memory managers (EMM386) from the config.sys and autoexec.bat. They may conflict with Win95 and they are less stable. Win95 will autodetect the hardware (plug and play) and load the adequate protected mode drivers.

Q11: Visual M event code is not executed.

This symptom can have one of the following causes: - You may be using an incorrect Visual Basic version. DTM 6.2 and 6.3 are designed to run exclusively with Visual Basic 3.0 and do not run with Visual Basic 4. - The DTM installation may have failed. The VB setup kit has a	      Bug that causes the DTM installation to install the wrong options when you do not select the full installation. - The last upgrade of DTM may be incorrect. You may for example have installed a DOS version of DTM 6.3 on top of an existing Open M for Windows 6.2, or chosen not to overwrite a existing file that needed to be replaced. - Your existing Visual M applications need to be saved as "Text" (see Visual Basic menu "Options", "Environment", "Default save 	      as format") before any upgrade. You also need to recompile existing applications after an upgrade. Q12: When installing Visual M, I get an error trying to copy THREED.VB_ or any other VBX.

There is already an existing VBX of that name in the directory C:\WINDOWS\SYSTEM. Rename the existing VBX, proceed with the installation. If you have already installed some Visual Basic programs that use this VBX and do not work with the new version of the VBX, you may need to replace the VBX that DTM installed with the old version that you previously renamed.

Q13: Some VisualM operations start an M routine that does a very long processing. It seems to freeze Windows. How can I avoid that? When a long processing has to be done for an event, a Modal dialog box containing a single "cancel" button needs to be started first. This prevents the user from clicking on any other button of the application while the long processing takes place. The Modal dialog box allows the use to cancel the operation. If the long operation is done handled by	    Visual Basic code, there must be a call to "Doevents" from time to time. This releases the control to windows to process events (like the clicking on another application to put it in	    the foreground). This will also allow Windows to process a	    possible click on the "cancel" button. If the event code is written in M, you need to call "d DoEvents^%mvb" regularly. (This call has been implemented in DTM 6.3). Q14: Why can't I copy a picture box from VisualM using M code ?

VisualM only recognizes a limited number of Visual Basic data types: numbers, currency and strings. Pictures, sounds, etc. are not recognized and cannot be manipulated from M. This is not a planned enhancement, since the VB data types need to be converted to M strings in order to 	    manipulate them, and the DTM string stack is limited to 32K, which would not allow the system to handle large pictures or sounds. M code like "_picture1.picture=_picture2.picture" has no effect.

Q15: I get the error "invalid control name" when I use dynamic controls.

This may happen when you load and unload controls using Visual Basic. The MVB server accesses Visual Basic controls using a Handle. If you unload and reload a control using Visual Basic code, the MVB server will still use the old handle which has been invalidated. After unloading a control in Visual Basic, you should issue "d ResetCtl^%mvb" to force the MVB server to refresh its list of all valid controls. The next time you will load this control, the MVB server will not have the control in its list of 	    valid controls, and query Visual Basic to get the new handle to access the control.

Q16: How can I check from the VisualM lostfocus event routine, what the next active object will be.

You need to "look ahead" in the event buffer to find out which object will receive the next setfocus event. To do this, you must force VisualM to process all the unprocessed events: d DoEvents^%mvb ; now check the value of "Form.ActiveControl.Caption" Note that the call is only available in DTM 6.3 and later.

Q17: Can I use Visual Basic version 4.0 for Visual M programming ? Visual Basic version 4 is available in both 16- and 32-bit versions. The DTM 6.3 MVB control works with Visual Basic version 4/16-bit. The M/Desktop control does not work with that version of Visual Basic. Neither control work with the 32-bit version for VB4. InterSystems is working on OCX versions of both of these controls for use with VB4. When this is completed (no release date has	    been published yet), both of the VisualM controls will be available for the 16- and the 32-bit versions of VB4.

Q18: Why do I get errors when trying to build an integrated setup kit in DTM 6.3 ?

The "getting started with Open M" manual asks you to define "IS_RUNTIME" for the Tag property. This is not a defined file set of DTM 6.3. The READ63.ME file distributed with DTM 6.3 contains a list of the new pre-defined file sets that you can use instead.

Q19: What Is the Thin-Client? Do I need to install FTP Software's TCP/IP on each machine?

In DTM 6.3, VAX DSM 6.4 and ISM 6.1, the VisualM .EXE file can directly connect to a remote server using TCP/IP. On the client, you only need to install the compiled VisualM .EXE file and some DLLs (the installation kit installs them automatically), as well as a WINSOCK compliant TCP/IP support. Winsock is the most widely used TCP/IP API for Windows, and Microsoft provides it for free, on WFW 3.11 and Windows 95. There seems to be a problem when using the Winsock of FTP Software on the VisualM client side. This problem is being investigated. On the VisualM server side, the proper TCP/IP support needs to be	    loaded: DTM supports only TCP/IP from FTP Software or Wollongong, and can only accept up to 32 concurrent connections.

Q20: Why can DTM not use the WINSOCK interface like the VisualM thin client ?

The Winsock API (Application Programming Interface) is a Windows API. DTM running under DOS could not use it. When running under Windows, DTM runs in a DOS box, and cannot make calls to Windows DLLs. DTM would require a custom written VxD to be able to take advantage of the Winsock DLL. The VisualM thin client is a true Windows program and can make calls to DLLs so it can use Winsock.

Q21: What files are required on a VisualM thin client ?

You can use the DTM installation to automatically perform a thin client installation. Simply copying the necessary files, although not recommended, may be faster:

- The WINSOCK interface needs to be installed and configured. - The DLL's and VBX that are used for your VisualM .EXE file, as	      for example THREED.VBX if you use Three dimensional buttons in your VisualM application. - In DTM 6.3, Following VisualM files need to be copied to: C:\WINDOWS\SYSTEM\CMVISM.DLL C:\WINDOWS\SYSTEM\DWSPYDLL.DLL C:\WINDOWS\SYSTEM\NTI16.DLL C:\WINDOWS\SYSTEM\SSDOCKTB.VBX C:\WINDOWS\SYSTEM\SSIDXTAB.VBX C:\WINDOWS\SYSTEM\VISUALM.VBX C:\WINDOWS\SYSTEM\WINSTUB.DLL C:\WINDOWS\SYSTEM\TRUEGRID.VBX C:\WINDOWS\SYSTEM\VBRUN300.DLL C:\WINDOWS\SYSTEM\DTWX.386 - The File C:\WINDOWS\SYSTEM.INI needs to be edited: Add the line DEVICE=C:\WINDOWS\SYSTEM\DTWX.386 in the [386Enh] section.

Q22: How can the code for a VisualM event execute the wrong label? All the code for all the events and objects of a form is stored in a single M routine. Thus, if you use the same label twice for the event code of different objects of a VB form, the behavior will be unpredictable.

Q23: How can I re-install a previous version of VisualM?

The setup program only replaces .VBX and .DLL files in the Windows directory if the version currently installed is older than the one being installed. Thus, if you attempt to install VisualM 6.2 over a VisualM 6.3 installation, your new VisualM 6.2 won't work properly. Before proceeding with the installation, you need to delete the files manually. You can identify all the VisualM 6.3 files from the WINDOWS\SYSTEM directory through the time of the file: they all have 6.03AM as the last edition time. (VisualM 6.2 files have	    the time 6.02AM). To de-install VisualM 6.3 before installing a previous version, delete following files: C:\WINDOWS\SYSTEM\VISUALM.DLL (if it exists) C:\WINDOWS\SYSTEM\MCTEXT.VBX C:\WINDOWS\SYSTEM\TRUEGRID.VBX C:\WINDOWS\SYSTEM\VISUALM.VBX C:\WINDOWS\SYSTEM\WINSTUB.DLL C:\WINDOWS\SYSTEM\SSIDXTAB.VBX C:\WINDOWS\SYSTEM\SSDOCKTAB.VBX C:\WINDOWS\SYSTEM\NTI16.DLL C:\WINDOWS\SYSTEM\CMVISM.DLL

Q24: I get the error "Invalid MServer Value in OPENM.INI: M Server	    error" when running the VisualM application in the Visual Basic Environment.

This is due to a bug in one of the DLL that are part of the VisualM 6.3 client. This is fixed in DTM 6.4.

Q25: My %mvbserver process exists. No error is logged in the DTM error log.

The MVB server does not log errors in the DTM error log. You will find the errors in the %mvberror global.

Q26: The VisualM timeout does not work.

In DTM 6.3, there was a bug that prevented the VisualM timeout from working. This is solved in further versions. In DTM 6.4 and later, in 16 bits mode, the VisualM timeout is limited to the default TCP/IP timeout (50 seconds) when using the thin client. This is not a DTM bug, but a limitation of the 16 bits Winsocks 1.1 interface. The 32 bits thin client allows you to specify a timeout of more than 50 seconds.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

4. Memory Issues and Errors

Q1: I get an LVMEM overflow when loading large routines. In the [General] section of your .INI file, add the following: APPMEMORY= 160K FOREGROUNDMEM = 16k, 32k, 144k This creates a large partition. Alternatively, you may try adding the following statement in the [GENERAL] section: RESERVEDMEM   = 64k (or less if this is too large).

Q2: When starting DTM 6.x under Windows, I get EMS error 128 or my system freezes. In the \WINDOWS\SYSTEM.INI file, you should add in the [386Enh] section: OVERLAPPEDIO  = OFF In your .INI file (DTM.INI or VISUALM.INI), you should add in  	     the [GENERAL] section: SCHEDIO       = NO 	     If you system uses the DTM Networking features, you can also add NETHEAPSIZE = 24 in [386Enh] section of the \WINDOWS\SYSTEM.INI file. Q3: What is Virtual DMA Services (VDS)?

VDS stands for Virtual DMA Services, where DMA is the acronym for Direct Memory Access. DMA allows peripherals to transfer information to the computer RAM while the CPU does something else. DMA are mostly used by SCSI disk controllers. VDS is a specification that avoids memory conflicts between a	    peripheral that would transfer information to an EMS page, and the EMS handler that could swap this page out at the same time. If your computer uses a SCSI disk controller that uses DMA (most	    of them do), you need to load a VDS compliant driver provided by your disk controller manufacturer. The Adaptec drivers are of	    the form "ASPIxDOS" (the most common is ASPI4DOS) and must be loaded at the very beginning of the CONFIG.SYS. The routine VDSTEST.RSA located in the USER SIG of our BBS lets you check for any VDS problem on your system. Some interesting insider information is provided in: file PW0519.EXE on ftp.microsoft.com directory /Softlib. Extract: VDS are provided through Interrupt 4BH. The VDS provider software sets a bit in the BIOS data area to indicate the availability of the VDS. Before using VDS, an application or driver must load the byte at address 0040:007Bh. If bit 5 of this byte is set, VDS provider software is present. If bit 5 is clear, the VDS are not available. The whole DMA Application Programming Interface is	    described in: file VDS.EXE on ftp.microsoft.com directory /Softlib. Q4: How is memory managed in DTM 6.0, in DTM 6.3?

DT-MAX 6.0 requires at least 2.0MB of expanded memory for opera- tion. The file 60PTCH15.TXT included in patch level 15 for DTM 6.0 contains valuable information on how memory is managed in DTM 6.0 and higher. Because the %config utility of DTM 6.0 patch 15 only reports the memory status as it was at startup time, it is sometimes insufficient to diagnose problems. The %job utility dynamically shows the amount of free memory. The upper left part of the display "Mem Segs:" shows 2 or 3 numbers. The first value is the amount of free EMS, the next values represent the different segment(s) of free conventional memory (below 640K). This can allow you to diagnose why a job does not start (not enough EMS to hold the job's LVMEM, STRSTK, SYSSTK), or why a system job exits or crashes (not enough free 	    conventional memory). Many system jobs use conventional memory while running: It is wise to have 16K of conventional memory free just after startup; compiling, journaling, login process all use some conventional memory.

Q5: I get the error "no EMS manager" when I install DTM 6.1.

When DTM 6.1 is installed over Windows for Workgroups, the 32- bit file access mode must be disabled, otherwise, DTM will not recognize the EMS that is present. This problem is caused by a WFW bug. Once DTM is installed, you can set back the 32 bit file access mode.

Q6: How do I get the meaning of a DTM error number?

When running M, you can obtain the error text from an error code number by typing "w $zename($zerr)", where $zerr is the error code number that was received. Information concerning errors may be also found in the appendices of the appropriate "Programmer's Guide" and some network error code information can be found in the appendices of the appropriate "Network Con-	    figuration Guide".

Q7: What is a "name table overflow"?

This means that the part of the local variable segment which stores names has been filled. The simplest fix is to increase the size of the local variable memory segment (also LVMEM): by default, the name table uses 1/8 of the LVMEM, up to maximum 8700 bytes. To make the name table use 1/4 of the LVMEM, issue following command in the %ustart routine: v 1:296:$c(2) To increase the maximum name table size to approximately 16K, issue following command in the %ustart routine: v 1:294:16300 To increase the actual name table size to over 8K, you need to issue both commands and possibly increase the LVMEM size. You can check the size of the name table for you job by using the "examine" option of the %job utility.

Q8: What is a "new stack overflow"?

The LVMEM (local variable memory) is divided into the name table, the heap, and the New stack. The heap and the New stack grow in the opposite direction to fill up the LVMEM. The new stack size can be increased in size only by increasing the size of the LVMEM. Q9: My system is hanging or rebooting, I get QEMM Exception 6 or 12, what should I check?

System hangs are usually caused by one of five things: memory conflicts, IRQ conflicts, VDS conflicts (see VDS), DTM bugs, or I/O port conflicts. First check for memory conflicts. You need to use MSD.EXE (Microsoft diagnostic, provided with MS-DOS 6.0 and with Windows). You need to start the computer without EMM manager (EMM386.EXE or	    QEMM386.EXE) to run MSD. Every segment marked as "ROM" or	    "possibly available" in the MSD memory map needs to be excluded in the EMM command line. To exclude the area B800 through BFFF, and F000 to FFFF you would modify the CONFIG.SYS like this: device=c:\MDDOS\EMM386.EXE RAM X=B800-BFFF X=F000-FFFF If you run DTM under Windows, you MUST use the same exclude in	    the \WINDOWS\SYSTEM.INI file; This is done with the keyword "EMMExclude" in the [386Enh] section: EMMExclude=B800-BFFF EMMExclude=F000-FFFF Second, check that all IRQ's used on your system are unique. Third, make sure that you are using a VDS compliant driver to ensure that your SCSI controller isn't creating a	    memory conflict (see Q3 of this section). Fourth, check that the I/O addresses being used on your system unique. If you suspect this is caused by a DTM bug, try to isolate the cause: is there a specific action that causes the system to hang? You will find in this document a few major DTM bugs that cause the system to hang.

Q10: Why do I get a message indicating insufficient memory when I file a routine or run %dscompress?

The reason for this error is the compiling process and some dataset utilities cannot use any EMS segment; they require conventional memory instead. Often, a 16k segment of conventional memory must be free to perform these functions. Use the %job utility to check the memory segment sizes. The first segment shown is the LIM 4.0 EMM memory that is available. Sub- sequent segments are for non-LIM 4.0 EMM memory, and it is one of these segments that needs to be 16k or larger in order to perform compilations and some dataset utilities. In DTM 6.0, the keyword "RESERVEDMEMORY" in the .INI file allows you to specify the amount of conventional memory that must remain free for such operations.

Q11: What is an "FDB Table full" error?

The table that DTM uses to track dataset file extents is full. You either have very many datasets or your datasets are very fragmented. More recent versions of DTM (4.8 and 6.0) have a	    larger FDB table. You can also lower your FDB table utilization by defragmenting your disk. The utility %ftabdisp shows the fraction of FDB table utilization in the upper right corner of the dataset file display. For each file, nFAB-1 is the number of 	    fragments: if this is over 20 or a file, you should consider defragmenting. Note that the FDB is only used for file access mode 2 or 3. In DTM 6.0 and later, MAXC.EXE only has 3,000 blocks in the FDB table, while MAXS.EXE has 12,000 blocks in the FDB table. On a 	    system that opens a large number of datasets, we recommend using MAXS.EXE.

Q12: What does the message "Bad index structure" indicate?

Your dataset is corrupt. Recovery can be done with: %dscompress             - be sure to use "Repair" mode %dsbackup & %dsrestore  - be sure to use "Repair" mode %dscompact              - not available in all DTM versions and could cause further problems; You *NEED* to do a backup first!

Q13: My system is performing slowly. What can I do about this?

If your system suddenly got slower then a large dataset probably dropped into file access mode 1 due to dataset fragmentation. Use %ftabdisp to confirm this. Defragment your disk to fix this problem. The second most likely cause of slow performance is the exis- tence of too few buffers. The utility, %mbdt (summary) or %buffer (summary) in version 6.x, reports on buffer counts. Make sure you are running with sufficient buffering. See also question 18 in the networking section.

Q14: How do I shut down DTM automatically? To shut down DTM automatically, use the %mhaltsys utility. This utility has two entry points, "warn" and "nowarn". With the first entry point, warnings will be broadcast on the system that a shut down will occur. With the "nowarn" entry point, the sys- tem will simply come down. Either way, this Automatic Shutdown utility will end DTM background jobs, terminate all other pro- cesses and return the node to the DOS prompt. zzswitch +8 d nowarn^%mhaltsys h

Q15: "Error 53297: undefined variable while setting up DTM memory 	    layout."

This DTM 6.x error occurs if you try to start DTM on a machine that has no EMS support loaded. Check in the CONFIG.SYS if HIMEM.SYS and EMM386.EXE are loaded. You should also remove the "NOEMS" parameter if it is present on the EMM386.EXE command line. If you have: DEVICE=C:\DOS\EMM386.EXE NOEMS Change it to: DEVICE=C:\DOS\EMM386.EXE RAM

Q16: DT-MAX exits back to MS-DOS when "No free job" error occurs.

This bug may occur if you have defined a login with %setlogin. When the job limit is reached, if a user attempts to login with a username that has been defined with %setlogin, the system may exit back to the MS-DOS prompt or hang. The workaround is to avoid defining a system stack in %setlogin for this username. This bug will be fixed in a coming version.

Q17: DTM error "no free job" when I create more than 32 jobs. My license should allow more than 32 jobs. The MAXC.EXE executable only allows you to create 32 jobs. To be able to create more jobs, you need to use MAXS.EXE.

Q18: I get "string stack overflow" or "local variable memory overflow" when using $$files^%dos to list the content of a large directory.

This function will create a string with a listing of all the files in the directory. When used within a small partition, or in 	    a directory with many files, the string gets too large for the partition. the file "DIR.RSA" located in the developer SIG of our BBS provides a routine that puts the result of the "dir" command into a global instead.

Q19: I get a "mismatched procedure return" error when running ^%journal in DTM 6.3

This bug if fixed in the file 63PTCH01.EXE located in the PATCH SIG of the BBS.

Q20: What are the hardware requirements for DTM 6.3 ? For a single user DOS client: 2 MB of RAM minimum. 8 MB recommended for performance. CPU 80386 minimum. For a VisualM client:        4 MB of RAM minimum. 8 MB strongly recommended. CPU 80486 DX 66 MHz minimum. For a Server:                16 MB. The performance is better if the server does not run in Windows. CPU 80486 DX 66 MHz minimum. A full installation of DTM 6.3 fits into 30MB of hard disk. The VisualM thin client requires at least 1MB of free hard disk space.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

5. Routine, Dataset, and Other System Management Hints

Q1: I have a lock on a server that hangs for 60 seconds the first time that I issue it.

In DTM 6.0, the server keeps track of all the locks set by clients in a lock table. You can check its content with the utility %lockexam. If the lock manager is enabled (LOCK=YES in	    DTM.INI), the clients will be able to restore their locks on the server after a server crash. When a server is started (after	    a normal or abnormal shutdown) it will not be able to set any locks during 60 seconds. The client's lock managers can use this time to reconnect to the server and repopulate the server's lock table. This 60 seconds period is hardcoded in the routine %mlockman at the tag lockwait. If you are not planning to run the lock manager on your network (in case of a server crash, the locks owned by clients will be	    lost) and you want to be able to start an application that sets locks on the server just after startup, you can add the following line at the beginning of your routine: v 3:20:$zwc($zh*18.2) Or if this does not fix the problem, you may want to insert a	    "q" just after the tag "lockwait^%mlockman".

Q2: If I type "d ^%mjob" or "d ^%job", DTM hangs.

At the beginning of these routines, the call to cpucal^%mapi could cause busy systems to hang. This error is fixed in patch level 15 for version 6.0 and in version 6.2. If you run another DTM version, you can comment out the first line of the %mjob routine, "d cpucal^%mapi". Q3: How can I enable and disable logins ?

The command "v 1:0:2" will disable logins on your system. Use "v 1:0:-2" to enable logins again.

Q4: Can I use multiple MAP files with DTM 6.x in a networked environ- ment?

The answer is no. The master server is unique on the Network, and it is the only machine that reads the MAP file from disk and compiles it to a global, generating an XDSID (Extended	    Dataset ID) for each dataset accessible over the network. All the servers and clients over the Network will use the XDSID to	    access datasets: if the MASTER were not unique, clients could be writing and reading from the wrong datasets. Only DTM Networking uses the XDSIDs: if you use ONLY the ISNET protocols, serial networking or OMI, each DTM machine needs to be a "master" and have a local MAP file. A machine is a master only when the INI file keywords "MASTER=" and "ID=" have the same value. Q5: I get a "record too long" error at startup, when the system tries to compile the MAP file in DTM 6.x.

The MAP file is compiled into the ^nspace global located in the syscnf (as defined in the DT-MAX .INI file) dataset. The default syscnf dataset, SYS-GBL, has a data page size of 2048 bytes. For large MAP files that contain a high number of "MAP" statements, this data page size should be increased to 4096 or 8192. The easiest way to do this is to create a new dataset with larger data pages and use the syscnf option to point to it on the Master server.

Q6: Is there an equivalent of the /BIG option in DTM 6.0? In the DTM.INI file, add the lines APPMEMORY= 160K FOREGROUNDMEM= 16K, 32K, 144K This will increase the size of the foreground process to the maximum. If you still get "stack overflow" messages, you can increase the first parameter to 32K.

Q7: I can't start a job in DTM 6.0.

If you set passwords on namespaces (using %setlogin), you will have to specify the password each time you start a job, even if it is in the same namespace: job ^routine:nspace="namespacename:password" This problem is corrected in DTM 6.2, where you only need to 	    specify the password when you start a job in a different namespace.

Q8: I get a password lookup failure when trying to login after startup.

There are two noteworthy causes for a password lookup failure. The first is that the system datasets are corrupted. To test for this symptom, re-install DTM into a new directory and run a %dsverify on the system datasets. To do this, rename the possibly corrupted system dataset and reference them in the DTM.MAP (or MUMPS.DBD) file of the newly installed version, before starting and running the %dsverify. The other possibility is that a patch could have been installed incorrectly. See section 1 for the correct patch installation procedure.

Q9: Is there international character support with the DTM product?

DTM currently supports ISO LATIN I international characters. Kanji is also supported and is available in a separate product.

Q10: My international characters do not work.

MAXC does not support the use of international characters in version 6.0. Use MAXS instead. This problem has been fixed in DTM 6.3.

Q11: One of my system jobs does not get started.

Check in the error log (d ^%errdump) for any error message from the job. If this is a network job, the network log should contain the error message. Most of the system jobs (NetBIOS or IPX/SPX server or agent 	    process, M/Desktop ...) need to reserve some conventional memory, and will exit if there is not enough conventional memory available. You can check the amount of conventional memory available with %job (Q10 in section 4). Q12: What are disk access modes and their values?

There are three disk access modes: NORMAL, BIOS, and DOS. DOS disk access mode (also file access mode 1), uses the DOS "File Handle" mode. This is the standard method by which most DOS applications read and write files. It can be quite slow, especially for large files. The BIOS disk access mode (also 	    file access mode 2), uses the BIOS read/write calls that bypass DOS and use the ROM BIOS routines directly to perform disk I/O. Finally, the NORMAL disk access mode, (file access 	    mode 3), uses DOS "Absolute Sector" read/write functions to access the disk. This requires that the disk volume be formatted with 512-byte sectors and needs DOS 4.0 or later for volumes larger than 32Mb. DT-MAX attempts to open files in "Absolute Sector" mode first, then tries "ROM BIOS" mode and uses "File Handle" mode last. Be- cause file handle I/O is usually much slower than the other meth- ods, it is DT-MAX's last choice. Since DT-MAX usually makes the best choice for the method of 	     performing disk I/O automatically, specify DISKMODE in your DTM.INI file only if you need to (if the current disk access mode	    is "DOS", setting DISKMODE to "BIOS" won't have any effect). On a client, you may want to use DISKMODE=DOS to save some conventional memory. Also, if you are running WFW and 32bit file access mode, performance may be better with DISKMODE=DOS than without 32 bit file access mode and with DISKMODE=BIOS.

Q13: Once DTM is running, how can I check the startup parameters ? After DTM has been started, this information is available in 	    the PSP (Program Segment Prefixe) of the DT-MAX .EXE file: w $v(12,128,-5) will display the command line parameters.

Q14: I have the error "attempt to write on read-only dataset" when I try to install M/SQL or a patch.

By default, the SYS-BASE dataset is read-only. All %m* routines are stored in SYS-BASE. M/SQL, patches or other object code may fail to load properly if they contain %m* routines. To allow writes on the system datasets, see Q1 section 1.

Q15: Using DOS variables like %MYNODE% or DTMNODE and DTMID for the DTM.INI file causes the error: "Invalid name - must be 1-15 characters alpha".

MS-DOS does not strip the spaces that you use in the "SET" command: SET MYNODE =SERVER1 will create a DOS variable that has the name "MYNODE " (MYNODE 	    with a trailing space). SET MYNODE= SERVER1 will create the correct DOS variable "MYNODE", but the content will be incorrect. Be aware that MS-DOS even counts the trailing spaces, for example: " SERVER1 " is 9 characters long.

Q16: What are the maximum dataset sizes in DTM 6.0 ? In DTM 6.0, the maximum dataset sizes are related to the page size that you choose: Page size =P Max size in bytes = 127*P*P 512    -> 256MB 1024   -> 1GB 2048   -> 4GB 4096   -> 16GB 8192   -> 256GB We recommend using datasets with 4K data and index page sizes for optimum performance.

Q17: Why do I get EMS error return code 139 when running DTM in a compressed disk under Windows95 ?

This problem comes from the fact that the DTM datasets are compressed. The compression scheme used by Windows95 seems to be incompatible with DTM. You must mark the datasets as 	    "no compression", but you can still compress other files on your disk.

Q18: How can I debug a %m routine ?

You need to type "zzswitch +32768" before you can step through a %m routine.

Q19: How can I get the value of a DOS environment variable ?

w $zzenv shows you a list of DOS variables and their values.

Q20: Some users may need a very large partition for some tasks and a much smaller one for other tasks. How can I configure the system to optimize the memory without the user logging in and out?

Here's a trick that should allow you to configure the partition size "dynamically". This solution is transparent to the user so that he does not need to log out and back in under a different user name. This example works for a user running the M shell at the PC 	    console: zzswitch +8 j ^%mshell:(pdev=1:lvmem="131k":strstk="31k":sysstk="16k") h	    This stops the current job, and immediately restarts a new one with a larger partition size.

Q21: International characters do not display correctly with mode VT=1.

In mode VT=1, DTM uses the translation table 31 (ixxlate=31), and will display the international characters incorrectly on the console if they do not follow the ISO Latin 1 representation. On the console, VT=2 enables VT220 escape sequences emulation but turns of the character interpretation, so that you can specify the value for ixxlate (the default of 2 should work fine) Q22: How can I use International characters in the "ze" editor ?

Create a ^%sys("editor","xcept") global that contains a list of all extended characters that you want to allow in the "ze" editor. For example: s ^%sys("editor","xcept")=$c(164) allows you to use the "¤" character in the "ze" editor.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

6. Printer and Com Port Problems

Q1: I appear to be having flow control problems on my SmartPort device. Some of the symptoms are $c(17) or $c(19) appearing in the input stream and print jobs losing data after 4-10 pages.

This is a common problem with SmartPorts which is the result of incorrectly loaded SmartPort drivers. You can check if your drivers are loaded correctly by running the %smartdata utility. You should contact ARNET Technical Support to get the latest version of the SmartPort drivers.

Q2: My printer tries to login, or I get a "no free user slot" message. If you set the /TERM option at startup, DTM will interpret any incoming characters on serial lines as login attempts (a serial	    printer sending an XOFF can be interpreted as a login attempt). DTM will try to spawn a login job for those devices. This often results in the message "no free user slot" appearing on the console. To solve the problem, you need to add the parameter "nologin=1" in the device definition of the MUMPS.DEV file. For DTM 4.x, don't forget to compile the DEV file after this modification (/CCF startup option).

Q3: I want to be able to test if the printer is on-line, off-line or out of paper.

See the routine PPTR.RSA in the "USER" SIG of our BBS.

Q4: I want to use COM1, COM2, COM3 and COM4.

Usually, COM1 and COM3 are configured to use the same IRQ (4), and COM2 and COM4 share IRQ 3. In standard configurations, DTM does not support IRQ sharing. The only conditions that allow IRQ sharing are: - the use of a PC with and EISA or MCA bus. - the use of an I/O card that is specifically designed for IRQ sharing. This last solution has not been proven to work. We would appreciate any feedback from customers having used this second configuration successfully. If you need to use more than 2 COM ports on a PC, we strongly recommend the use of an Arnet extender. Arnet SmartPorts or	    ClusterPorts provide much more reliable solutions for DTM and avoid loosing characters at high speeds.

Q5: What does a "device not ready" error indicate?

This indicates that the i/o address specified for the particu- lar serial port, which isn't an intelligent port, is incorrect. Typically, this will happen if the device is defined in the MUMPS.DEV, but there is no corresponding definition in the MUMPS.HDW file.

Q6: Why doesn't my new modem answer when I dial into a DTM system? Why does my modem answer and hang-up less than a second later?

Check that the modem has "auto-answer" mode turned on. If your modem is Hayes compatible and connected to device 100, you can try from the DTM prompt: o 100 u 100 w "+++ATS0=1"_$c(13),! Note the "~" signs that send a "wait" for 1/2 second, and the "+++" that switch any Hayes modem in command mode. These have proven to be necessary on some systems. After this command, the modem should pick up the phone after the first ring. If the modem picks up but no login prompt appears, the modem ha probably "quiet mode" turned off. The "Hayes" command to 	    turn on "quiet mode" is ATQ1: o 100 u 100 w "+++ATQ1"_$c(13),! c 100

Q7: Why doesn't any data get to a serial port when I write to it? Also, when I then try to close the port, the close will wait indefinitely.

If the device opens correctly, then the IRQ is probably specie- fed incorrectly in the MUMPS.HDW file. The close will then wait because there is unwritten data in the output queue. This can happen if the interrupts are not serviced for the port's IRQ.

Q8: Why does my modem keep disconnecting when I use the "MODEM =" option of DTM?

The "MODEM =" option is designed to provide for modem security, not to facilitate modem use. This option actually makes it harder to use a modem. The option may be set to disconnect if either a CD or DSR signal is dropped. Try running without the "MODEM =" option. Then, if you need the option, add it again and monitor the serial line signals with a break-out box.

Q9: How can I use %setlogin to configure tied terminals differently on each client?

The %setlogin utility saves the login information in the SYS-GBL dataset located on the master server (in the global ^login), and if you try to configure a tied terminal (device 200 for example) on differently on two clients, the second definition will overwrite the first one. The solution is to set SYSVAR 3,3 to have unique $IO across the network. You will then use CLIENT1_200 and CLIENT2_200 to	    differentiate between the 2 terminals when defining a tied terminal.

Q10: Error in Arnet startup: No error text available for error code 6402.

The File MDOS.OBJ in the USER SIG of the BBS should solve this problem. DTM 6.3 also solves this DTM 6.2 Bug.

Q11: I receive an  when reading characters from a COM port. To prevent DTM from interpreting CTRL+C characters coming from the device you need to do following: u 100:(ixxlate=0:ixinterp=0:editmode=0:modem=0) BREAK -1 Q12: Error in Arnet startup: BIOS failed to execute.

This may happen if there is a problem while accessing the adapter memory located on the ClusterPort. This can be caused by	    faulty hardware or by a memory conflict, possibly with the EMS page frame. Before trying to use an ARNET adapter with DTM, you MUST run the Arnet diagnostic program, and it must succeed entirely.

Q13: "undefined variable, entry point:" while trying to login from a tied terminal.

This error occurs with DTM 6.0 when you try to login on a terminal from a network client. This is solved in DTM 6.0 patch 15 and DTM 6.2.

Q14: When I startup MAXC.EXE with a SmartPort or a ClusterPort, the system hangs, or the port initialization fails.

The MAXC.EXE is a smaller image of DTM that does NOT contain the code for SmartPorts nor ClusterPorts and it cannot be a network server (only a client or a standalone machine). For machines that have SmartPorts or ClusterPorts, you need to use MAXS.EXE.

Q15: I have a routine that writes to a principal device, and I need to run it in the background. Each time it does "u 0" it errors out with "bad device number".

There may be a solution that allows you to run this routine without modifying all the places that have "u 0" or "u $p". You can issue some commands that will open a device, and then declare this device to be your principal device: zzswitch 4096 v 2:^#pPrincipalDevice:$v(2,^#pCurrentDevice,4)

Q16: I get the message "logins are disabled, please try later" when trying to login in DTM 6.x.

This can be because logins have been disabled, either manually, or through a utility like %mhalt. You can usually use "EMERGENCY" on the console to force a login o Please note that there is no echo while you type this in. You can then re-enable logins with a view command (see DTMFAQ.TXT). You may get the message "logins are disabled, network server is 	    down"; In this case, an "EMERGENCY" login is not possible, because some critical information (namespace mappings) is located on the master server that is not reachable. Instead of rebooting the client, you can force a shutdown by typing "DOWNHARD" on the console (not echoed).

Q17: How can I prevent broadcast messages from appearing on printers ? Define the printer ports in the MUMPS.DEV files with the "P" parameter as for example: 200: SMART= P:MYPRINTER /wrcr=1; (add other parameters here)

Q18: The line editor does not allow me to edit a DOS file from a 	    terminal in DTM 6.2 or 4.8

This problem is solved in DTM 6.3. For DTM 6.2 or 4.8, you can download the file EDITORS.RSA from the PATCH SIG of our BBS.

Q19: Why does my serial Printer suddenly stop working ?

It is possible that DTM has changed the baud rate of the port. To make sure this does not happen, replace the "autobaud=1" parameter from the device definition in the MUMPS.DEV with "autobaud=0". If you use DTM 4.x, you must recompile the MUMPS.DEV file when starting up DTM the next time (use 	    the "/CCF" command line option).

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Appendix 1. Building Protocol Stacks

This appendix describes how protocol stacks work and how to configure them for different network setups.

NDIS BINDING

The NDIS specification, developed by Microsoft and 3Com allows multi- ple protocols to co-exist with one or more network adapters. All of 	the drivers are loaded in the CONFIG.SYS (unless you are using the 	32-bit NDIS3, in which case Windows loads the driver itself), starting with the protocol manager, then the MAC drivers, followed by the actu- al protocols themselves. The function of protocol manager PROTMAN.SYS is to provide the drivers with configuration information (from the 	PROTOCOL.INI file) and to link the protocols to the MAC drivers.

When a MAC driver loads, it calls the protocol manager through a well- defined interface (by opening the file PROTMAN$ and using the DOS 	IOCTL calls) and asks for its configuration information. This infor- mation is read from the section in the PROTOCOL.INI file that matches the driver name. The MAC drivers can then initialize and report any errors.

When a protocol driver loads, it makes calls to the protocol manager to load its configuration information and to find out to which MAC drivers it is supposed to be binding. When the NETBIND.EXE utility is 	run in the AUTOEXEC.BAT file, it calls each of the drivers that have successfully "connected" to the protocol manager and the binding pro- cess takes place. Any final errors are reported at this point.

CONFIGURING ODINSUP

More often than not, a single protocol stack is enough, usually ei- ther ODI or NDIS. Occasionally, both stacks will need to be loaded, for example, if an NDIS packet driver is needed as well as a NetWare connection using ODI. The utility ODINSUP.COM allows both protocol stacks to co-exist using the same network interface card. The use of	ODINSUP incurs no performance penalty compared with using the native NDIS MAC drivers. ODINSUP currently supports only Ethernet and Token Ring network topologies.

We are assuming that an SMC Ethernet adapter is present and the ODI drivers have been installed into the C:\NWCLIENT directory on the PC's hard disk. Any NDIS drivers are assumed to be in C:\ETHER. The nec- essary entries in the significant configuration files are as follows.

CONFIG.SYS

DEVICE=C:\ETHER\PROTMAN.SYS /I:C:\NWCLIENT     ;Protocol Manager (1) DEVICE=C:\ETHER\DISPKTDT.DOS                   ;Packet Driver

AUTOEXEC.BAT

C:\NWCLIENT\LSL                                ;Link Support Layer C:\NWCLIENT\SMC8000                            ;MAC Driver (for SMC) C:\NWCLIENT\ODINSUP                            ;Links ODI MAC Drivers ;to NDIS C:\ETHER\NETBIND                               ;Now bind NDIS Stack C:\NWCLIENT\IPXODI                             ;IPX Protocol (ODI)

The ODINSUP driver should be loaded after LSL and the ODI MAC drivers, but before NETBIND is called. Any ODI protocol drivers, such as IPX- ODI, should be loaded after NETBIND.

PROTOCOL.INI

[PROTOCOL MANAGER] DriverName = PROTMAN$                          ;Protocol Manager Sec- ;tion [PKTDRV] DriverName = PKTDRV$                           ;Driver Name Bindings = SMC8000                             ;MAC Driver to bind to	IntVec = 0x62                                   ;Interrupt to use

NET.CFG

PROTOCOL ODINSUP                               ;ODINSUP Protocol BIND SMC8000                                ;SMC8000->ODINSUP->NDIS

LINK DRIVER SMC8000                            ;MAC Driver (for SMC) FRAME Ethernet_802.2                        ;Default frame type ;first FRAME Ethernet_802.3                        ;This supports old ;Netware FRAME Ethernet_II                           ;Other frame types to	   FRAME Ethernet_SNAP                          ;support

Both protocol stacks can now run, accessing the same network adapter through a single MAC driver (the ODI SMC8000 MAC driver). The BIND statement of the PROTOCOL ODINSUP section in NET.CFG controls to which ODI MAC drivers that NDIS protocols can bind. The BIND statement has an optional second argument that specifies the instance number of a particular adapter type (if more than one of a type is present).

For example, if you wish to create a gateway between two dissimilar network topologies, such as Token Ring running NetBEUI (NetBEUI - Net-	BIOS Extended User Interface) and an Ethernet running IPX/SPX, but you had no ODI driver for NetBEUI, then the following configuration using ODINSUP could be used.

CONFIG.SYS

DEVICE=C:\ETHER\PROTMAN.SYS /I:C:\NWCLIENT     ;Protocol Manager (1) DEVICE=C:\ETHER\NETBEUI.DOS                    ;NetBEUI for Token Ring

AUTOEXEC.BAT

C:\NWCLIENT\LSL                                ;Link Support Layer C:\NWCLIENT\SMC8000                            ;Ethernet MAC Driver C:\NWCLIENT\TOKRING                            ;Links ODI MAC Driver ;to NDIS C:\ETHER\NETBIND                               ;Now bind NDIS stack C:\NWCLIENT\IPXODI                             ;IPX Protocol (ODI)

PROTOCOL.INI

[PROTOCOL MANAGER] DriverName = PROTMAN$                          ;Protocol Manager Sec- ;tion [NETBEUI] DriverName = NETBEUI$                          ;Driver Name Bindings = TOKEN                               ;MAC Driver to bind to	Commands = 16                                   ;other parameters Sessions = 12

NET.CFG

PROTOCOL ODINSUP                               ;ODINSUP Protocol BIND TOKEN                                  ;TOKEN->ODINSUP->NDIS

LINK DRIVER SMC8000                            ;MAC Driver (for SMC) FRAME Ethernet_802.2                        ;Default frame type ;first FRAME Ethernet_802.3                        ;This supports old ;Netware FRAME Ethernet_II                           ;Other frame types to							;support

LINK DRIVER TOKEN                              ;Token Ring MAC Driver FRAME Token-Ring                            ;Default Token Ring ;Driver FRAME Token-Ring_SNAP                       ;Necessary

This configuration would only allow the NetBEUI driver access to the Token Ring adapter, not the SMC Ethernet adapter. This kind of config- uration could be used to set up a firewalled gateway between a public TCP/IP network, such as the Internet and a secure Novell Network.

(1)-Don't load this into high memory

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Appendix 2. Eliminating General Protection Faults in Windows

The following list can be expected to eliminate 95% of all General Protection Faults (GPFs) in Windows 3.1. If it is possible, try each item serially rather than simultaneously.

1.  Add MaxBPs=768 to the [386enh] section of SYSTEM.INI.

2.  Use SCANDISK or CHKDSK before starting Windows. Fix all reported errors.

3.  Check that the TEMP directory exists and that there is spare disk space. To find out where this directory resides, check the DOS SET TEMP = environment variable. In the Windows startup batch file, WIN.BAT, delete all *.TMP files in the TEMP directory.

4.  Try loading SMARTDRV into conventional memory with the /L switch.

5.  Remove screen-saver TSRs, like AfterDark.

6.  Set the system to VGA mode rather than a higher resolution mode. Make sure the latest drivers are installed. The Windows VGA dri- ver is known to be very reliable.

7.  Turn off 32-bit disk access.

8.  Turn off 32-bit file access if you are using Windows for Work- groups.

9.  Clean up the CONFIG.SYS and AUTOEXEC.BAT files. Eliminate ANSI. SYS, MOUSE.COM and other unused drivers.

10. Upgrade to Windows 3.11 (for stand-alone Windows).

11. Make sure the correct version of DOS is running on your machine.

12. Make sure that the Windows SETUP has the correct machine type. CD \WINDOWS and run SETUP.

13. Get application maintenance releases.

14. Test for and remove any viruses on your system We recommend using suggestions 1, 2, 3, 9, 10, 11, 12, 13 and 14 under any circumstances. Suggestions 4, 5, 6, 7 and 8 should be tried, but if they don't participate in the resolution, they can be returned to their original settings.

Most of the suggestions from this list came from "Mastering Computers,	Inc.", publishers of the Graunke Report. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=