home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / smxbs100.zip / SOMXBASE.INF (.txt) < prev    next >
OS/2 Help File  |  1995-09-25  |  26KB  |  1,091 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. SOMXBASE -  Object-Oriented Access to dBase Databases. ΓòÉΓòÉΓòÉ
  3.  
  4. Version 1.00 SOMXBase is a dBase database engine for programmers interested in 
  5. using SOM. 
  6.  
  7. SOM - System Object Module is a object-oriented programming interface that 
  8. remains language neutral. For more information on SOM please review IBM 
  9. documentation and other user guides. 
  10.  
  11. By providing a language neutral interface, SOMXBase allows any language that is 
  12. SOM aware to access dBase files. 
  13.  
  14.  
  15. ΓòÉΓòÉΓòÉ 1.1. American Coders Ltd. ΓòÉΓòÉΓòÉ
  16.  
  17. American Coders, LTD. 
  18.  
  19. Post Office Box 97462 
  20.  
  21. Raleigh, NC   27624 
  22.  
  23. (919); 846-2014 
  24.  
  25. Compuserve ID: 74150,2370 
  26.  
  27. Internet ID: joe@usacoder.rtp.nc.us. 
  28.  
  29. Copyright 1995 American Coders LTD Raleigh NC USA 
  30.  
  31. Programming Solutions For Your Business 
  32.  
  33.  
  34. ΓòÉΓòÉΓòÉ 1.2. How To Register Your Copy ΓòÉΓòÉΓòÉ
  35.  
  36. We have several methods for you to register your copy of SOMXBase. 
  37.  
  38. o Registration Form. 
  39.  
  40. The cost for registering SOMXBase is $95.00.At this time, the program is 
  41. limited in functionality so the price may seem high. But we will grant early 
  42. registers of the product an extension on the number of updates and not just 
  43. fixes. 
  44.  
  45. If registed before Jan.31, 1996 a registered user will receive updates 
  46. throughout 1996. 
  47.  
  48. There is also a shipping and handling charge. For U.S.and Canada registrations 
  49. it is $10.00, all other international orders $15.00. 
  50.  
  51. If you are planning to order ten (10); or more copies use the SITELICE.DOC in 
  52. your package. 
  53.  
  54.  
  55. ΓòÉΓòÉΓòÉ 1.2.1. Registration Form. ΓòÉΓòÉΓòÉ
  56.  
  57. Print out the file REGISTER.FRM. Attach a check and mail to us using the 
  58. address on the form (or see above);. 
  59.  
  60.  
  61. ΓòÉΓòÉΓòÉ 1.3. Version Changes. ΓòÉΓòÉΓòÉ
  62.  
  63. Version 1.00 Sept 30,1995. 
  64.  
  65. Initial release. 
  66.  
  67.  
  68. ΓòÉΓòÉΓòÉ 2. What Is SOMXBase & What It Isn't ΓòÉΓòÉΓòÉ
  69.  
  70. SOMXBase is a programmer's tool to access dBase III and IV files. It provides a 
  71. object-oriented interface to DBF, MDX and DBT files. 
  72.  
  73. By providing a class object, known as xdbf, a program is provided a simple API 
  74. to read, write, and update the database. 
  75.  
  76. Using an object-oriented tool, we will be able to enhance and extend the 
  77. functionality of SOMXBase through the use of such features as Inheritance and 
  78. Polymorhphism. And by encapsulating the data and methods of SOMXBase we can 
  79. provide an upwardly compatible interface without comprimising future 
  80. development. 
  81.  
  82. There is one exception to the above statement. In the future we may introduce a 
  83. new class for database fields. With this in mind, it may be necessary to alter 
  84. some of these datatypes. 
  85.  
  86. Though SOMXBase is an object-oriented programming tool, the database is not and 
  87. should not be considered object-oriented. Though, hopefully, over the life of 
  88. this project we will be able to allow these types of database to become 
  89. object-oriented-like. 
  90.  
  91.  
  92. ΓòÉΓòÉΓòÉ 2.1. Requirements. ΓòÉΓòÉΓòÉ
  93.  
  94. The following is a brief discussion of what is needed to develop with SOMXBase. 
  95.  
  96. An operating system environment. 
  97.           OS/2 Version 2.x and Warp. 
  98. A SOM Enabled Compiler 
  99.           At this time, SOMXBase has been tested with IBM C/Set++. 
  100. A Requirement To Develop An Object-Oriented Application. 
  101.           Sorry, we can't help you there. 
  102.  
  103.  
  104. ΓòÉΓòÉΓòÉ 3. Included Code. ΓòÉΓòÉΓòÉ
  105.  
  106. Along with the SOMXBASE.DLL there are several other files that you will need to 
  107. compile a client program. At this time only c-language based files are 
  108. included. 
  109.  
  110.  
  111. ΓòÉΓòÉΓòÉ 3.1. Public INCLUDE File To Access xdbf Class. ΓòÉΓòÉΓòÉ
  112.  
  113. The following is a copy of the somxbase.h file. 
  114.  
  115. /*
  116.  * This file was generated by the SOM Compiler.
  117.  * FileName: somxbase.h.
  118.  * Generated using:
  119.  *     SOM Precompiler spc: 1.22
  120.  *     SOM Emitter emith: 1.11
  121.  */
  122.  
  123. /*
  124.  *    somxbase.csc
  125.  *
  126.  *    a class defining a set of objects (somxbases)
  127.  */
  128.  
  129.  
  130. #ifndef somxbase_h
  131. #define somxbase_h
  132.  
  133.  
  134. #include <som.h>
  135.  
  136. /*
  137.  * Define the class name as an object type
  138.  */
  139. #ifndef xdbf
  140. #define xdbf SOMAny
  141. #endif
  142. #include <somobj.h>
  143.  
  144. #define xdbf_MajorVersion 0
  145. #define xdbf_MinorVersion 0
  146.  
  147. /*
  148.  * External name shortening if required
  149.  */
  150. #ifdef SOM_USE_SHORT_EXTERNAL_NAMES
  151. #define xdbfNewClass c
  152. #pragma linkage(c, system)
  153. #define xdbfClassData d
  154. #define xdbfCClassData x
  155. #endif /* SOM_USE_SHORT_EXTERNAL_NAMES */
  156. /*--------------Migration------------*/
  157. #define xdbf_classObj xdbfClassData.classObject
  158. #define _xdbf xdbf_classObj
  159.  
  160. /*
  161.  * New and Renew macros for xdbf
  162.  */
  163. #define _xdbfNew() (_somNew(xdbfClassData.classObject))
  164. #define xdbfNew() \
  165.      ( xdbfClassData.classObject \
  166.           ? _xdbfNew() \
  167.           : ( xdbfNewClass(xdbf_MajorVersion, xdbf_MinorVersion), _xdbfNew() ) )
  168. #define xdbfRenew(buf) \
  169.      ( _somRenew(xdbfClassData.classObject, buf) )
  170.  
  171. /*
  172.  * New Method: open
  173.  */
  174. typedef short    SOMLINK somTP_xdbf_open(xdbf *somSelf,
  175.           char *dbfname);
  176. #pragma linkage(somTP_xdbf_open, system)
  177. typedef somTP_xdbf_open *somTD_xdbf_open;
  178. #define somMD_xdbf_open "----"
  179. #define xdbf_open(somSelf,dbfname) \
  180.     (SOM_Resolve(somSelf, xdbf, open) \
  181.      (somSelf,dbfname))
  182. #define _open xdbf_open
  183.  
  184. /*
  185.  * New Method: read
  186.  */
  187. typedef short    SOMLINK somTP_xdbf_read(xdbf *somSelf);
  188. #pragma linkage(somTP_xdbf_read, system)
  189. typedef somTP_xdbf_read *somTD_xdbf_read;
  190. #define somMD_xdbf_read "----"
  191. #define xdbf_read(somSelf) \
  192.     (SOM_Resolve(somSelf, xdbf, read) \
  193.      (somSelf))
  194. #define _read xdbf_read
  195.  
  196. /*
  197.  * New Method: write
  198.  */
  199. typedef short    SOMLINK somTP_xdbf_write(xdbf *somSelf);
  200. #pragma linkage(somTP_xdbf_write, system)
  201. typedef somTP_xdbf_write *somTD_xdbf_write;
  202. #define somMD_xdbf_write "----"
  203. #define xdbf_write(somSelf) \
  204.     (SOM_Resolve(somSelf, xdbf, write) \
  205.      (somSelf))
  206. #define _write xdbf_write
  207.  
  208. /*
  209.  * New Method: go_to
  210.  */
  211. typedef short    SOMLINK somTP_xdbf_go_to(xdbf *somSelf,
  212.           int recno);
  213. #pragma linkage(somTP_xdbf_go_to, system)
  214. typedef somTP_xdbf_go_to *somTD_xdbf_go_to;
  215. #define somMD_xdbf_go_to "----"
  216. #define xdbf_go_to(somSelf,recno) \
  217.     (SOM_Resolve(somSelf, xdbf, go_to) \
  218.      (somSelf,recno))
  219. #define _go_to xdbf_go_to
  220.  
  221. /*
  222.  * New Method: update
  223.  */
  224. typedef short    SOMLINK somTP_xdbf_update(xdbf *somSelf);
  225. #pragma linkage(somTP_xdbf_update, system)
  226. typedef somTP_xdbf_update *somTD_xdbf_update;
  227. #define somMD_xdbf_update "----"
  228. #define xdbf_update(somSelf) \
  229.     (SOM_Resolve(somSelf, xdbf, update) \
  230.      (somSelf))
  231. #define _update xdbf_update
  232.  
  233. /*
  234.  * New Method: close
  235.  */
  236. typedef short    SOMLINK somTP_xdbf_close(xdbf *somSelf);
  237. #pragma linkage(somTP_xdbf_close, system)
  238. typedef somTP_xdbf_close *somTD_xdbf_close;
  239. #define somMD_xdbf_close "----"
  240. #define xdbf_close(somSelf) \
  241.     (SOM_Resolve(somSelf, xdbf, close) \
  242.      (somSelf))
  243. #define _close xdbf_close
  244.  
  245. /*
  246.  * New Method: getfld
  247.  */
  248. typedef short    SOMLINK somTP_xdbf_getfld(xdbf *somSelf,
  249.           char *fldname,
  250.           char *flddata);
  251. #pragma linkage(somTP_xdbf_getfld, system)
  252. typedef somTP_xdbf_getfld *somTD_xdbf_getfld;
  253. #define somMD_xdbf_getfld "----"
  254. #define xdbf_getfld(somSelf,fldname,flddata) \
  255.     (SOM_Resolve(somSelf, xdbf, getfld) \
  256.      (somSelf,fldname,flddata))
  257. #define _getfld xdbf_getfld
  258.  
  259. /*
  260.  * New Method: setfld
  261.  */
  262. typedef short    SOMLINK somTP_xdbf_setfld(xdbf *somSelf,
  263.           char *fldname,
  264.           char *flddata);
  265. #pragma linkage(somTP_xdbf_setfld, system)
  266. typedef somTP_xdbf_setfld *somTD_xdbf_setfld;
  267. #define somMD_xdbf_setfld "----"
  268. #define xdbf_setfld(somSelf,fldname,flddata) \
  269.     (SOM_Resolve(somSelf, xdbf, setfld) \
  270.      (somSelf,fldname,flddata))
  271. #define _setfld xdbf_setfld
  272.  
  273. /*
  274.  * New Method: whaterror
  275.  */
  276. typedef char *   SOMLINK somTP_xdbf_whaterror(xdbf *somSelf);
  277. #pragma linkage(somTP_xdbf_whaterror, system)
  278. typedef somTP_xdbf_whaterror *somTD_xdbf_whaterror;
  279. #define somMD_xdbf_whaterror "----"
  280. #define xdbf_whaterror(somSelf) \
  281.     (SOM_Resolve(somSelf, xdbf, whaterror) \
  282.      (somSelf))
  283. #define _whaterror xdbf_whaterror
  284.  
  285. /*
  286.  * Declare the class creation procedure
  287.  */
  288. SOMEXTERN SOMAny * SOMLINK xdbfNewClass(integer4 scemajorVersion,
  289.           integer4 sceminorVersion);
  290. #pragma linkage(xdbfNewClass, system)
  291.  
  292. /*
  293.  * Declare the class data structure
  294.  */
  295. SOMEXTERN struct xdbfClassDataStructure {
  296.      SOMAny *classObject;
  297.      somMToken open;
  298.      somMToken read;
  299.      somMToken write;
  300.      somMToken go_to;
  301.      somMToken update;
  302.      somMToken close;
  303.      somMToken getfld;
  304.      somMToken setfld;
  305.      somDToken file;
  306.      somDToken error;
  307.      somMToken whaterror;
  308. } xdbfClassData;
  309.  
  310. /*
  311.  * Declare the C specific class data structure
  312.  */
  313. SOMEXTERN struct xdbfCClassDataStructure {
  314.      somMethodTab *parentMtab;
  315.      somDToken instanceDataToken;
  316. } xdbfCClassData;
  317.  
  318. #endif       /* somxbase_h */
  319.  
  320.  
  321. ΓòÉΓòÉΓòÉ 3.2. Language-Neutral  Form. ΓòÉΓòÉΓòÉ
  322.  
  323. IBM recommends that this file be published to users of the class. 
  324.  
  325. # This file was generated by the SOM Compiler.
  326. # FileName: somxbase.sc.
  327. # Generated using:
  328. #     SOM Precompiler spc: 1.22
  329. #     SOM Emitter emitcsc: 1.10
  330.  
  331. --    somxbase.csc
  332. --
  333. --    a class defining a set of objects (somxbases)
  334.  
  335. #include <somobj.sc>
  336.  
  337. class: xdbf,
  338.     file stem = somxbase;
  339.  
  340.  
  341. parent class: SOMObject;
  342.  
  343.  
  344. release order:
  345.     open, read, write,
  346.     go_to, update, close,
  347.     getfld, setfld, file,
  348.     error, whaterror;
  349.  
  350. methods:
  351.  
  352.  
  353.     --  group: access_methods
  354.  
  355.     short    open(char *dbfname);
  356.  
  357.     short    read();
  358.  
  359.     short    write();
  360.  
  361.     short    go_to(int recno);
  362.  
  363.     short    update();
  364.  
  365.     short    close();
  366.  
  367.     short    getfld(char *fldname,
  368.           char *flddata);
  369.  
  370.     short    setfld(char *fldname,
  371.           char *flddata);
  372.  
  373.     char *   whaterror();
  374.  
  375.  
  376. ΓòÉΓòÉΓòÉ 3.3. Sample Make File ΓòÉΓòÉΓòÉ
  377.  
  378. This is a sample make file that can be used with NMAKE. 
  379.  
  380.  
  381. # Created by IBM WorkFrame/2 MakeMake at 05:01:26 on 09/21/95
  382. #
  383. # This makefile should be run in the following directory:
  384. #   d:\somxbase
  385. #
  386. # The actions included in this makefile are:
  387. #   COMPILE::C Set ++ Compile
  388. #   LINK::Link
  389.  
  390. .all: \
  391.   .\sample.EXE
  392.  
  393. .SUFFIXES: .c
  394.  
  395. .c.obj:
  396.       icc.exe /Ss /Q /Ti /G4 /C %s
  397.  
  398. .\sample.EXE: \
  399.     .\sample.obj \
  400.     {$(LIB)}somxbase.lib \
  401.     {$(LIB)}som.lib \
  402.     sample.mak
  403.       link386.exe @<<
  404.          /PM:VIO /DE /NOI /NOLOGO +
  405.         .\sample.obj
  406.         sample.EXE
  407.  
  408.         somxbase +
  409.         som
  410.         ;
  411. <<
  412.  
  413. .\sample.obj: \
  414.     d:\somxbase\sample.c \
  415.     {d:\somxbase;$(INCLUDE);}somxbase.h \
  416.     sample.mak
  417.  
  418.  
  419. ΓòÉΓòÉΓòÉ 4. The Class Interface ΓòÉΓòÉΓòÉ
  420.  
  421. In SOM, an application program that defines and uses a SOM class is a Client 
  422. program. 
  423.  
  424. Like all SOM enabled objects SOMXBase provides you with a class to build your 
  425. objects on. The class, xdbf, is used to define your database object.This object 
  426. is defined in the C include file "somxbase.h" which is included with your 
  427. package. You define the database class as a pointer to the class xdbf. This 
  428. pointer is known as  an "Instance" of the class. 
  429.  
  430. Also SOMXBase provides the functions, or in SOM-speak,  methods,  to access a 
  431. database. Methods are referenced in your program by prefixing the method name 
  432. with the underscore '_' character. Most methods require one parameter, usually 
  433. the defined class object. 
  434.  
  435.  
  436. ΓòÉΓòÉΓòÉ 4.1. Defining A Pointer To The Class Instance ΓòÉΓòÉΓòÉ
  437.  
  438. Description. 
  439.  
  440. Defines an addres placeholder for the class instance. 
  441.  
  442. Purpose. 
  443.  
  444. The program needs to be able to address the instance to be processed by the 
  445. class methods. 
  446.  
  447. Format. using the C format 
  448.  
  449. It's rather simple: 
  450.  
  451.    #include "somxbase.h"
  452.    int main();
  453.        { xdbf  *database; ...
  454.  
  455. In the above example we have defined a class instance known as database. 
  456.  
  457.  
  458. ΓòÉΓòÉΓòÉ 4.2. Creating An Instance of a Database Object ΓòÉΓòÉΓòÉ
  459.  
  460. Description. 
  461.  
  462. Assigns an addres to the class instance. Purpose. 
  463.  
  464. The program completes the addressability to the instance . 
  465.  
  466. Format. 
  467.  
  468. name = _xdbfNew(); 
  469.  
  470. Parameters. 
  471.  
  472. N/A 
  473.  
  474. Return Value in name  Description 
  475.  
  476. NULL 
  477.           SOM error 
  478.  
  479. some address 
  480.           normal 
  481.  
  482. An example: 
  483.  
  484.    #include "somxbase.h"
  485.    int main();
  486.        { xdbf  *database;
  487.          database = xdbfNew();...
  488.  
  489.  
  490. ΓòÉΓòÉΓòÉ 4.3. _open ΓòÉΓòÉΓòÉ
  491.  
  492. Description. 
  493.  
  494. Prior to processing a database file, the file must be opened. When your 
  495. procedure opens the database file several activities occur. 
  496.  
  497. o The database file is opened. 
  498. o MDX files, if dBase IV format dbf,  are opened. 
  499.  
  500. Purpose. 
  501.  
  502. To open the database for processing. 
  503.  
  504. Format. 
  505.  
  506. _open(instance, dbfname); 
  507.  
  508. Parameters. 
  509.  
  510. instance 
  511.           The pointer to the instance of the class object. 
  512. dbfname 
  513.           The name of your database as it is known to the operating system. 
  514.  
  515. Return Value  Description 
  516.  
  517.           Normal 
  518.  
  519.           Failure 
  520.  
  521. The following example opens the machines database. 
  522.  
  523.    #include "somxbase.h"
  524.    int main();
  525.        { xdbf  *database;
  526.          int rc;
  527.          database = xdbfNew();
  528.          rc = _open(database, "x:\machines.dbf");
  529.          if (rc); {
  530.              printf("Something not right\n");
  531.              exit;
  532.            }...
  533.  
  534.  
  535. ΓòÉΓòÉΓòÉ 4.4. _read ΓòÉΓòÉΓòÉ
  536.  
  537. Description. 
  538.  
  539. To read data from the database. 
  540.  
  541. Purpose. 
  542.  
  543. This method will read a record from the database.  Your program will need to 
  544. use the _getfld method to processes the data. 
  545.  
  546. Format. 
  547.  
  548. _read(instance); 
  549.  
  550. Parameters. 
  551.  
  552. instance 
  553.           The pointer to the instance of the class object. 
  554.  
  555. Return Value  Description 
  556.  
  557.           Normal 
  558.  
  559.           Failure 
  560.  
  561.    int main();
  562.        { xdbf  *database;
  563.          int rc;
  564.          database = xdbfNew();
  565.          rc = _open(database, "x:\machines.dbf");
  566.          if (rc); {
  567.              printf("Something not right\n");
  568.              exit;
  569.            }
  570.          rc = _read(database);
  571.          if (rc); {
  572.              printf("Something not right\n");
  573.              exit;
  574.            }...
  575.  
  576.            }...
  577.  
  578.  
  579. ΓòÉΓòÉΓòÉ 4.5. _getfld ΓòÉΓòÉΓòÉ
  580.  
  581. Description. 
  582.  
  583. Load the contents of a database field into memory. 
  584.  
  585. Purpose. 
  586.  
  587. To make the  data available to your program. 
  588.  
  589. Format. 
  590.  
  591. _getfld(instance, name, data); 
  592.  
  593. Parameters. 
  594.  
  595. instance 
  596.           The pointer to the instance of the class object. 
  597. name 
  598.           The name of the field in the database. 
  599. data 
  600.           Some character pointer. 
  601.  
  602. Return Value  Description 
  603.  
  604.           Normal 
  605.  
  606.           Failure 
  607.  
  608. The following example shows how data is assign to a database. 
  609.  
  610.    #include "somxbase.h"
  611.    int main();
  612.        { xdbf  *database;
  613.          int rc;
  614.          char *name, *location;
  615.          database = xdbfNew();
  616.          rc = _open(database, "x:\machines.dbf");
  617.          if (rc); {
  618.              printf("Something not right\n");
  619.              exit;
  620.            }
  621.          rc = _read(database);
  622.          if (rc); {
  623.              printf("Something not right\n");
  624.              exit;
  625.            }...
  626.          rc = _getfld(database, "Name", name);
  627.          if (rc); {
  628.              printf("Something not right\n");
  629.              exit;
  630.            }
  631.          rc = _getfld(database, "Location", location);
  632.          if (rc); {...
  633.  
  634.  
  635. ΓòÉΓòÉΓòÉ 4.6. _setfld ΓòÉΓòÉΓòÉ
  636.  
  637. Description. 
  638.  
  639. Sets the contents of a database field. 
  640.  
  641. Purpose. 
  642.  
  643. To prepare data for the database. 
  644.  
  645. Format. 
  646.  
  647. _setfld(instance, name, data); 
  648.  
  649. Parameters. 
  650.  
  651. instance 
  652.           The pointer to the instance of the class object. 
  653. name 
  654.           The name of the field in the  database to receive the data. 
  655. data 
  656.           Some character string. 
  657.  
  658. Return Value  Description 
  659.  
  660.           Normal 
  661.  
  662.           Failure 
  663.  
  664. The following example shows how data is assign to a database. 
  665.  
  666.    #include "somxbase."h
  667.    int main();
  668.        { xdbf  *database;
  669.          int rc;
  670.          database = xdbfNew();
  671.          rc = _open(database, "x:\machines.dbf");
  672.          if (rc); {
  673.              printf("Something not right\n");
  674.              exit;
  675.            }
  676.          rc = _setfld(database, "Name", "Springer");
  677.          if (rc); {
  678.              printf("Something not right\n");
  679.              exit;
  680.            }
  681.          rc = _setfld(database, "Location", "Building 6 Room A");
  682.          if (rc); {...
  683.  
  684.  
  685. ΓòÉΓòÉΓòÉ 4.7. _write ΓòÉΓòÉΓòÉ
  686.  
  687. Description. 
  688.  
  689. To place data into the database. 
  690.  
  691. Purpose. 
  692.  
  693. The  _write method physically commits the data to the database.  The data is 
  694. appended to the file. 
  695.  
  696. Format. 
  697.  
  698. _write(instance); 
  699.  
  700. Parameters. 
  701.  
  702. instance 
  703.           The pointer to the instance of the class object. 
  704.  
  705. Return Value  Description 
  706.  
  707.           Normal 
  708.  
  709.           Failure 
  710.  
  711.    int main();
  712.        { xdbf  *database;
  713.          int rc;
  714.          database = xdbfNew();
  715.          rc = _open(database, "x:\machines.dbf");
  716.          if (rc); {
  717.              printf("Something not right\n");
  718.              exit;
  719.            }
  720.          rc = _setfld(database, "Name", "Springer");
  721.          if (rc); {
  722.              printf("Something not right\n");
  723.              exit;
  724.            }
  725.          rc = _setfld(database, "Location", "Building 6 Room A");
  726.          if (rc); {
  727.              printf("Something not right\n");
  728.              exit;
  729.            }
  730.          rc = _write(database);
  731.          if (rc); {
  732.              printf("Something not right\n");
  733.              exit;
  734.            }...
  735.  
  736.  
  737. ΓòÉΓòÉΓòÉ 4.8. _update ΓòÉΓòÉΓòÉ
  738.  
  739. Description. 
  740.  
  741. To update existing data in the database. 
  742.  
  743. Purpose. 
  744.  
  745. The _update physically commits the data to the database.  The data is replaced 
  746. in  the file. 
  747.  
  748. Format. 
  749.  
  750. _update(instance); 
  751.  
  752. Parameters. 
  753.  
  754. instance 
  755.           The pointer to the instance of the class object. 
  756.  
  757. Return Value  Description 
  758.  
  759.           Normal 
  760.  
  761.           Failure 
  762.  
  763.    int main();
  764.        { xdbf  *database;
  765.          int rc;
  766.          database = xdbfNew();
  767.          rc = _open(database, "x:\machines.dbf");
  768.          if (rc); {
  769.              printf("Something not right\n");
  770.              exit;
  771.            }
  772.          rc = _read(database);
  773.          if (rc); {
  774.              printf("Something not right\n");
  775.              exit;
  776.            }
  777.          rc = _setfld(database, "Location", "Building 7 Room D Aisle 14B");
  778.          if (rc); {
  779.              printf("Something not right\n");
  780.              exit;
  781.            }
  782.          rc = _update(database);
  783.          if (rc); {
  784.              printf("Something not right\n");
  785.              exit;
  786.            }...
  787.  
  788.  
  789. ΓòÉΓòÉΓòÉ 4.9. _go_to ΓòÉΓòÉΓòÉ
  790.  
  791. Description. 
  792.  
  793. Allows to reposition the record pointers. 
  794.  
  795. Purpose. 
  796.  
  797. To read a particular record by its record number. 
  798.  
  799. Format. 
  800.  
  801. _go_to(instance, recno); 
  802.  
  803. Parameters. 
  804.  
  805. instance 
  806.           The pointer to the instance of the class object. 
  807. recno 
  808.           signed long record number. 
  809.  
  810. Return Value  Description 
  811.  
  812.           Normal 
  813.  
  814.           Failure 
  815.  
  816.    int main();
  817.        { xdbf  *database;
  818.          int rc;
  819.          char *name, willbe[] = "Springer - 100";
  820.          database = xdbfNew();
  821.          rc = _open(database, "x:\machines.dbf");
  822.          if (rc); {
  823.              printf("Something not right\n");
  824.              exit;
  825.            }
  826.          rc = _go_to(database,100);
  827.          if (rc); {
  828.              printf("Something not right\n");
  829.              exit;
  830.            }
  831.          rc = _getfld(database, "Name", name);
  832.          if (rc); {
  833.              printf("Something not right\n");
  834.              exit;
  835.            }
  836.         printf("Changing record 100 from %s to %s\n",name, willbe);
  837.          rc = _setfld(database, "Name", willbe);
  838.          if (rc); {
  839.              printf("Something not right\n");
  840.              exit;
  841.            }
  842.          rc = _update(database);
  843.          if (rc); {
  844.              printf("Something not right\n");
  845.              exit;
  846.            }...
  847.  
  848.  
  849. ΓòÉΓòÉΓòÉ 4.10. _whaterror ΓòÉΓòÉΓòÉ
  850.  
  851. Description. 
  852.  
  853. To get a more specific error other than 1. 
  854.  
  855. Purpose. 
  856.  
  857. The error handling is weak at best (for the time being).  To get specific error 
  858. messages use this function. 
  859.  
  860. Format. 
  861.  
  862. _whaterror(instance) 
  863.  
  864. Parameters. 
  865.  
  866. instance 
  867.           The pointer to the instance of the class object. 
  868.  
  869. Return Value  Description 
  870.  
  871. some character string. 
  872.           Normal 
  873.  
  874.    int main();
  875.        { xdbf  *database;
  876.          int rc;
  877.          char *name, willbe[] = "Springer - 100";
  878.          database = xdbfNew();
  879.          rc = _open(database, ".dbf");
  880.          if (rc); {
  881.             printf("open failed with a reason of %s\n",_whaterror(database));
  882.             exit;
  883.           }
  884.  
  885.  
  886. ΓòÉΓòÉΓòÉ 4.11. _close ΓòÉΓòÉΓòÉ
  887.  
  888. Description. 
  889.  
  890. To close the database correctly. 
  891.  
  892. Purpose. 
  893.  
  894. To free the database for other applications to use and update all database 
  895. information 
  896.  
  897. Format. 
  898.  
  899. _close(instance) 
  900.  
  901. Parameters. 
  902.  
  903. instance 
  904.           The pointer to the instance of the class object. 
  905.  
  906. Return Value  Description 
  907.  
  908.           Normal 
  909.  
  910.           Failure 
  911.  
  912.    int main();
  913.        { xdbf  *database;
  914.          int rc;
  915.          database = xdbfNew();
  916.          rc = _open(database, "x:\machines.dbf");
  917.          if (rc); {
  918.             printf("open failed with a reason of %s\n",_close(database));
  919.             exit;
  920.           }
  921.           rc = _close(database);
  922.            if (rc); {
  923.               printf("close failed with a reason of %s\n",_close(database));
  924.               exit;
  925.             }
  926.  
  927.  
  928. ΓòÉΓòÉΓòÉ 5. Error Messages. ΓòÉΓòÉΓòÉ
  929.  
  930. This is a list of possible error messages and the offending method 
  931.  
  932. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  933. ΓöéError Message       ΓöéMethod    ΓöéDescription                                       Γöé
  934. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  935. ΓöéError will opening  Γöé_open     ΓöéAn operating system error occurred while trying toΓöé
  936. Γöéfile XX             Γöé          Γöéopen the file.  XX represents the return code fromΓöé
  937. Γöé                    Γöé          Γöéthe operating system.                             Γöé
  938. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  939. ΓöéError will opening  Γöé_open     ΓöéAn operating system error occurred while trying toΓöé
  940. Γöéproduction mdx file Γöé          Γöéopen the mdx file associated with the DBF file.   Γöé
  941. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  942. Γöéend of file         Γöé_read     ΓöéNormal end of file                                Γöé
  943. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  944. ΓöéInvalid record      Γöé_go_to    ΓöéRecord number parameter is either less than 1 or  Γöé
  945. Γöénumber              Γöé          Γöégreater than the total number of records in the   Γöé
  946. Γöé                    Γöé          Γöédatabase.                                         Γöé
  947. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  948. Γöéinvalid record      Γöé_update   ΓöéThe record pointer was not positioned on a valid  Γöé
  949. Γöéposition            Γöé          Γöérecord.  This usually occurs if no record has beenΓöé
  950. Γöé                    Γöé          Γöéread or when an end of file occurred.             Γöé
  951. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  952. ΓöéUnknown field       Γöé_getfld   ΓöéThe field identified by the second parameter is   Γöé
  953. Γöé                    Γöé          Γöénot part of the database.                         Γöé
  954. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  955. ΓöéUnknown field       Γöé_setfld   ΓöéThe field identified by the second parameter is   Γöé
  956. Γöé                    Γöé          Γöénot part of the database.                         Γöé
  957. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  958. Γöélogic fldptr value  Γöé_setfld   ΓöéThe field associated with a logic field is either Γöé
  959. Γöéinvalid, value set  Γöé          Γöénot 0, 1, 'T', 'F', 'Y' or 'N'.                   Γöé
  960. Γöéto 'F'              Γöé          Γöé                                                  Γöé
  961. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  962. ΓöéCan't allocate memo Γöé_setfld   ΓöéInternal processing error. Please contact us if   Γöé
  963. Γöéspace               Γöé          Γöéthis occurs.                                      Γöé
  964. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  965. ΓöéBad field type when Γöé_setfld   ΓöéField type is not defined to SOMXBASE. At this    Γöé
  966. Γöégetting field value Γöé          Γöétime the only valid field types are C,  D,  L,  M Γöé
  967. Γöé                    Γöé          Γöéand N.                                            Γöé
  968. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  969. ΓöéBad date found,     Γöé_setfld   ΓöéThe field is not in the format of CCYYMMDD.  WhereΓöé
  970. Γöéchanged to all      Γöé          ΓöéCC  is century, YY is year, MM is month and DD is Γöé
  971. Γöéspaces              Γöé          Γöéday.                                              Γöé
  972. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  973.  
  974.  
  975. ΓòÉΓòÉΓòÉ 6. Shareware ΓòÉΓòÉΓòÉ
  976.  
  977. DEFINITION OF SHAREWARE 
  978.  
  979. Shareware distribution gives users a chance to try software before buying it. 
  980. If you try a Shareware program and continue using it, you are expected to 
  981. register. Individual programs differ on details -- some request registration 
  982. while others require it, some specify a maximum trial period. With 
  983. registration, you get anything from the simple right to continue using the 
  984. software to an updated program with printed manual. 
  985.  
  986.  
  987. ΓòÉΓòÉΓòÉ 6.1. Copyright ΓòÉΓòÉΓòÉ
  988.  
  989. Copyright laws apply to both Shareware and commercial software, and the 
  990. copyright holder retains all rights, with a few specific exceptions as stated 
  991. below. Shareware authors are accomplished programmers, just like commercial 
  992. authors, and the programs are of comparable quality. (In both cases, there are 
  993. good programs and bad ones!) The main difference is in the method of 
  994. distribution. The author specifically grants the right to copy and distribute 
  995. the software, either to all and sundry or to a specific group. For example, 
  996. some authors require written permission before a commercial disk vendor may 
  997. copy their Shareware. 
  998.  
  999.  
  1000. ΓòÉΓòÉΓòÉ 6.2. Distribution. ΓòÉΓòÉΓòÉ
  1001.  
  1002. Shareware is a distribution method, not a type of software. You should find 
  1003. software that suits your needs and pocketbook, whether it's commercial or 
  1004. Shareware. The Shareware system makes fitting your needs easier, because you 
  1005. can try before you buy. And because the overhead is low, prices are low also. 
  1006. Shareware has the ultimate money-back guarantee -- if you don't use the 
  1007. product, you don't pay for it. 
  1008.  
  1009.  
  1010. ΓòÉΓòÉΓòÉ 7. Disclaimer ΓòÉΓòÉΓòÉ
  1011.  
  1012. DISCLAIMER - AGREEMENT 
  1013.  
  1014. Users of SOMXBase  must accept this disclaimer of warranty: "SOMXBase  is 
  1015. supplied as is. The author disclaims all warranties, expressed or implied, 
  1016. including, without limitation, the warranties of merchantability and of fitness 
  1017. for any purpose. The author assumes no liability for damages, direct or 
  1018. consequential, which may result from the use of SOMXBase ." 
  1019.  
  1020.  
  1021. ΓòÉΓòÉΓòÉ 8. Sharing SOMXBase ΓòÉΓòÉΓòÉ
  1022.  
  1023. SOMXBase  is a "shareware program" and is provided at no charge to the user for 
  1024. evaluation. Feel free to share it with your friends, but please do not give it 
  1025. away altered or as part of another system. The essence of "user-supported" 
  1026. software is to provide personal computer users with quality software without 
  1027. high prices, and yet to provide incentive for programmers to continue to 
  1028. develop new products. If you find this program useful and find that you are 
  1029. using SOMXBase  and continue to use SOMXBase  after a reasonable trial period, 
  1030. you must make a registration payment of $95.00 to American Coders, Ltd. The 
  1031. $95.00 registration fee will license one copy for use on any one computer at 
  1032. any one time. You must treat this software just like a book. An example is that 
  1033. this software may be used by any number of people and may be freely moved from 
  1034. one computer location to another, so long as there is no possibility of it 
  1035. being used at one location while it's being used at another. Just as a book 
  1036. cannot be read by two different persons at the same time. 
  1037.  
  1038.  
  1039. ΓòÉΓòÉΓòÉ 8.1. Commercial Users ΓòÉΓòÉΓòÉ
  1040.  
  1041. Commercial users of SOMXBase  must register and pay for their copies of 
  1042. SOMXBase  within 30 days of first use or their license is withdrawn. 
  1043. Site-License arrangements may be made by contacting American Coders, Ltd. 
  1044.  
  1045.  
  1046. ΓòÉΓòÉΓòÉ 8.2. Distributing ΓòÉΓòÉΓòÉ
  1047.  
  1048. Anyone distributing SOMXBase  for any kind of remuneration must first contact 
  1049. American Coders, Ltd. at our address. below for authorization. This 
  1050. authorization will be automatically granted to distributors recognized by the 
  1051. (ASP) as adhering to its guidelines for shareware distributors, and such 
  1052. distributors may begin offering SOMXBase  immediately (However American Coders, 
  1053. Ltd. must still be advised so that the distributor can be kept up-to-date with 
  1054. the latest version of SOMXBase .). 
  1055.  
  1056.  
  1057. ΓòÉΓòÉΓòÉ 8.3. Pass Along ΓòÉΓòÉΓòÉ
  1058.  
  1059. You are encouraged to pass a copy of SOMXBase  along to your friends for 
  1060. evaluation. Please encourage them to register their copy if they find that they 
  1061. can use it. All registered users will receive a copy of the latest version of 
  1062. the SOMXBase system. 
  1063.  
  1064.  
  1065. ΓòÉΓòÉΓòÉ 9. Ombudsman Statement ΓòÉΓòÉΓòÉ
  1066.  
  1067. This program is produced by American Coders, LTD, a member of the Association 
  1068. of Shareware Professionals (ASP).  ASP wants to make sure that the shareware 
  1069. principle works for you.  If you are unable to resolve a shareware-related 
  1070. problem with an ASP member by contacting the member directly, ASP may be able 
  1071. to help.  The ASP Ombudsman can help you resolve a dispute or problem with an 
  1072. ASP member, but does not provide technical support for members' products. 
  1073. Please write to the ASP Ombudsman at 545 Grover Road, Muskegon, MI 49442-9427 
  1074. USA, FAX 616-788-2765 or send a CompuServe message via CompuServe Mail to ASP 
  1075. Ombudsman 70007,3536.