home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1993 #2 / Image.iso / clipper / c52tn1.zip / C52TN1.TXT
Text File  |  1993-06-01  |  8KB  |  225 lines

  1.                       CA-Clipper 5.2 Tech Notes
  2.  
  3.                              ==========
  4.  
  5. QUESTION #1  My pre 5.2 application hangs now that I have upgraded to
  6. MS-DOS 6.0.
  7.  
  8. ANSWER:
  9.  
  10. If the user installs DOS 6 and uses the MEMMAKER utility to help them
  11. load things high it will ask them if they are using programs that use
  12. EMS.  If they answer NO, MEMMAKER will add the NOEMS parameter to the
  13. EMM386 driver line, which increases the amount of high memory by 64K
  14. (i.e., the size of the pageframe - nice if you have lots of drivers
  15. to load high).  Unfortunately this parameter has a different meaning
  16. with DOS 6 than it did with DOS 5.
  17.  
  18. One of the standard ways to determine if an EMS driver is installed
  19. is to check a particular location in memory for the string 'EMMXXXX0'
  20. - well, under DOS 5, with the NOEMS switch, the string isn't there,
  21. so CA-Clipper thinks there is no EMS - which is good - it just
  22. doesn't use any.
  23.  
  24. Under DOS 6 however, even if the NOEMS switch is specified, the
  25. string 'EMMXXXX0' is still present, so CA-Clipper thinks there is
  26. EMS, and in fact there is, but there is no pageframe (which
  27. CA-Clipper needs).  CA-Clipper's detection of the EMS pageframe in
  28. the various versions of 5.0x runs afoul of this scheme.  In 5.01 and
  29. 5.01a the error return code is ignored - and CA-Clipper uses a
  30. 'random' segment address as the pageframe address (actually the
  31. address with these versions is 'number of free EMS pages':0000, which
  32. is usually an address in low memory - when VM kicks in it writes to
  33. this address and trashes low memory which results in a hang), in 5.2
  34. and 5.2a this was corrected.
  35.  
  36. When 'NOVCPI' is used in conjunction with NOEMS, EMM386 leaves out
  37. the signature string 'EMMXXXX0' - so CA-Clipper doesn't think there
  38. is an EMS driver there at all.  That is why NOVCPI solves the
  39. problem.
  40.  
  41. So, if they have NOEMS on the EMS driver line, they *must* have
  42. NOVCPI with *all* versions of CA-Clipper 5.0n (or else set //E:0).
  43.  
  44. There is a similar problem with the EMS driver switch FRAME=NONE (in
  45. fact its the same problem), but in this case the NOVCPI switch has no
  46. effect, so if you have FRAME=NONE, you *must* use //E:0.
  47.  
  48.                              ==========
  49.  
  50. QUESTION # 2  Why do I get :C3049 string space exhausted" when
  51. compiling?
  52.  
  53. ANSWER:
  54.  
  55. The CA-Clipper 5.2 compiler has less space for string constant
  56. storage.  The space was expanded in 5.2A and is explained in detail
  57. in 52A.TXT in LIB 0 of this forum. Download 52A.TXT and either
  58. 52AUS.EXE or 52AINT.EXE, read 52A.TXT and apply the apropriate patch.
  59.  
  60.                              ==========
  61.  
  62. QUESTION #3  The MDX RDD does not perform automatic file locking the
  63. way that dBase IV does.
  64.  
  65. ANSWER:
  66.  
  67. The CA-Clipper 5.2 MDX RDD supports the DBF-MDX file structure and
  68. locking mechanism.  It does not support the dBase IV automatic
  69. locking strategy.  You must explicitly manage locking events.  The
  70. compiler kit for dBase IV does support the dBase IV locking strategy.
  71.  
  72.                              ==========
  73.  
  74. QUESTION #4  Why do I get "DBCMD/1010 Illegal characters in alias"
  75. when I attempt to assign an alias name with a numeric as the first
  76. character?
  77.  
  78. ANSWER:
  79.  
  80. The following is taken from the Clipper 5.01a >> Release Notes Change
  81. Summary
  82.  
  83.  Runtime Errors
  84.  
  85.  DBCMD 1010     Illegal characters in alias (USE command)
  86.  
  87.  PROBLEM:  An attempt was made to create an alias that was not a
  88.            valid identifier.  This occurs if the system creates a
  89.            default alias based on the filename and the filename
  90.            contains illegal characters (i.e., TEST$.DBF) or is
  91.            otherwise an invalid identifier (i.e., 123FILE.DBF).
  92.  
  93.  SOLUTION: Provide a valid alias identifier via the ALIAS clause.
  94.  
  95.  NOTE:     A legal identifier can contain alphabetic characters,
  96.            numbers, or the underscore symbol (_); but must begin with
  97.            an alphabetic character.
  98.  
  99.                              ==========
  100.  
  101. QUESTION #5  The Drivers Guide states that "the default extension for
  102. DBFCDX is (.idx)" but OrdBagExt() always returns "CDX."
  103.  
  104. ANSWER:
  105.  
  106. The documentation is incorrect, (.cdx) is the default extension.
  107. Since (.idx) and (.cdx) files can be opened in the same workarea, the
  108. driver cannot determine which extension should be returned.
  109. Therefore it always returns (.cdx)
  110.  
  111.                              ==========
  112.  
  113. QUESTION #6  I get:
  114.  
  115.    You can't uninstall the Norton Guides
  116.    in pass-through mode.  Exit the
  117.    current application to uninstall.
  118.  
  119. when I try to uninstall the Norton Instant Access engine.
  120.  
  121. ANSWER:
  122.  
  123. The C52G01B.NG that came with 5.2 cannot be uninstalled.  This is due
  124. to the title in the .NG being too long and not NULL terminated.  The
  125. character at offset 47 needs to be changed to a chr(0).  The
  126. following code will fix the problem:
  127.  
  128. #include "Fileio.ch"
  129.  
  130. LOCAL nHandle
  131. nHandle := FOPEN( "C52G01B.NG", FO_READWRITE )
  132. IF nHandle != -1
  133.    FSEEK( nHandle, 24 )
  134.    FWRITE( nHandle, "The Guide To CA-Clipper" + chr(0) )
  135.    FCLOSE( nHandle )
  136.    ? "All done."
  137. ELSE
  138.   " "Error opening the file. DOS error: ", FERROR()
  139. ENDIF
  140.  
  141. RETURN NIL
  142.  
  143.                              ==========
  144.  
  145. QUESTION #7  I get "VM integrity error" when I run a 5.2 application;
  146. I did not get this in 5.01.
  147.  
  148. ANSWER:
  149.  
  150. Many VM integrity errors can be avoided by keeping OBJ file sizes to
  151. well under 64k.  Applications that are compiled via CLP files tend to
  152. generate this error.  CLP files were a good thing in Clipper Summer
  153. 87, but are a definite bad practice in 5.x. Also, many VM integrity
  154. errors that occur due to CA-Clipper subsystem misuse of the VM system
  155. have been fixed.  Download the latest CA-Clipper 5.2 patch.
  156.  
  157.                              ==========
  158.  
  159. QUESTION #8  Why is my index file larger if I INDEX ON an EVAL()?
  160.  
  161. ANSWER:
  162.  
  163. The EVAL() return value becomes the index key which can require more
  164. disk space than a simple character key.
  165.  
  166. The difference in size is typical because different algorithms are
  167. used to create indexes depending on if a clause (EVAL, FOR, WHILE,
  168. etc.) is used or not.
  169.  
  170. When creating indexes WITHOUT a clause:
  171.  
  172. - The entire database is scanned
  173. - A big merge sort is performed on all the key
  174. - An index is built from this sorted list
  175.  
  176. The result is a "balanced" tree.
  177.  
  178. Using this method, all pages in the index are usually full.  When
  179. records are added, new pages will usually have to be created because
  180. the existing pages are so full. (This may cause it to be slow during
  181. updates.)
  182.  
  183. When creating indexes WITH a clause, First, an "empty" index is
  184. created, then, each record is evaluated, and the key is stuck into
  185. the index AS IT GOES, producing a tree that is sparse...  usually
  186. leaving enough space to add new keys to existing pages.  In this
  187. method, index size will not grow as fast when records are appended as
  188. in the previous method.
  189.  
  190. This approach is used because it was felt to be the only way to
  191. produce an accurate progress meter/gauge using EVAL().
  192.  
  193. Although it is slower in creation and creates a larger index, the
  194. updates will generally be faster because it will normally find room
  195. on the page for the new key.  For the same reason, these indexes will
  196. not grow as fast.
  197.  
  198. Summary: Indexes with a clause use a different algorithm than those
  199.          without.  Those indexes using a clause will generally be
  200.          larger in size, but faster during updates, than those not
  201.          using a clause.
  202.  
  203.                              ==========
  204.  
  205. QUESTION #9  I get "UE 650" when I run my 5.2 application.
  206.  
  207. ANSWER:
  208.  
  209. Check for and rename any "SYSINIT" UDFs you may have. "SYSINIT" 
  210. should be considered a reserved word. See question #7 (above) for 
  211. other situations which might generate the UE 650 error.
  212.  
  213.                              ==========
  214.  
  215. QUESTION #10  How do I determine the current NetWare print queue?
  216.  
  217. ANSWER:
  218.  
  219. Use the CA-Tools NNETPJQ() function.
  220.  
  221.                              ==========
  222.  
  223. [End]
  224.  
  225.