home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional / OS2PRO194.ISO / os2 / info / document / access / accsswps.txt next >
Encoding:
Text File  |  1993-11-12  |  27.9 KB  |  772 lines

  1.  
  2.  
  3.                        ACCESS WPS INFORMATION
  4.  
  5.                          GENERAL DESCRIPTION
  6.  
  7. AccessWPS is a set of files that allow any PM program to access any
  8. WPS method, that can be legally used by a WPS application. 
  9.  
  10. AccessWPS has been developed by Carry Associates, 990 Ironwood Court,
  11. Marco Island, FL 33937. Our phone number is 813-642-9126 and the fax
  12. number is 813-642-1007. We are on Compuserve virtually everyday and
  13. our Compuserve ID is 71435,470. If you have any questions or
  14. problems with this application, you should contact Carry Associates.
  15.  
  16. Normally, any developer that needs to use one of the methods of a WPS
  17. Object must use the SOM Compiler to develop their own WPS Object and
  18. then use that Object to actually call one of the WPS Object methods.
  19. The reason for this is that WPS runs as a separate process and it is
  20. only possible to call one of the WPS methods while running as part of
  21. the WPS process. The only way to run as part of the WPS process is to
  22. create a WPS Object.
  23.  
  24. AccessWPS solves this problem by creating a general purpose WPS Agent
  25. Object that can call any WPS Object method. The Agent Object can be
  26. invoked from any PM program by calling an API that is exactly the
  27. same as the WPS or SOM method, except that 'Acs' is appended to the
  28. front of the method name. For example, _somInit is called via
  29. AccessWPS by calling the Acs_somInit API. All of the 'Acs' API's
  30. return the exact same return as the corresponding WPS or SOM method,
  31. so it is as if it was possible to call the method directly from the
  32. PM application.
  33.  
  34.                      THE PROBLEM WITH POINTERS
  35.  
  36. The biggest with a general purpose WPS Agent concerns the area of
  37. pointers to various memory objects. Since WPS runs as a separate
  38. process, it cannot access any memory that belongs to the calling
  39. process and the calling process cannot access and memory that belongs
  40. to the WPS process. Therefore, a mechanism must be provided to
  41. address this problem.
  42.  
  43. Any developer using AccessWPS must be aware of 'hidden' pointers that
  44. are not obvious because the are hidden by some of the typedefs in the
  45. SOM and WPS header files. An example of this is the somId type. If
  46. you review the somtypes.h file, you will see that somId is actually a
  47. pointer to a pointer to the name of a Class or Object. What this
  48. means is that the developer must be careful to place the actual
  49. string pointed to in the shared memory area, see discussion below,
  50. before calling any of the SOM or WPS methods that use the somId data
  51. type. Failure to do this will result in either a NULL return from a
  52. method or, and worse, a protection violation in the WPS process.
  53.  
  54. AccessWPS provides two API's, AcsHeapAlloc and AcsHeapFree, which
  55. resolve the problem of how to pass memory objects to WPS. These two
  56. API's will allocate memory in a dynamically allocated memory pool
  57. that is shared between the WPS process and the user's process. This
  58. memory pool is allocated during the processing of the AcsInit API and
  59. is deleted during the processing of the AcsTerminate API. It is the
  60. responsibility of the developer that is using AccessWPS to insure
  61. that every pointer passed to WPS is a pointer that was returned by a
  62. call to the AcsHeapAlloc API. For example, to pass a string to WPS it
  63. is necessary to:
  64.  
  65. 1. Use AcsHeapAlloc to get a memory block that equals the length of
  66. the string plus one byte for the null character.
  67.  
  68. 2. Copy the string to the memory allocated via AcsHeapAlloc.
  69.  
  70. The above would also apply to any structure which is passed to WPS or
  71. a pointer that is passed and is pointing to an area that will contain
  72. returned information, this is done a lot with the _wpQuery type
  73. methods.
  74.  
  75. If a pointer to a structure is passed, after copying the structure to
  76. the memory block returned by AcsHeapAlloc, and the structure contains
  77. a pointer to another memory object or structure, the embedded pointer
  78. must also point to a memory block returned via AcsHeapAlloc.
  79.  
  80. Once the API call is complete, it is the responsibility of the
  81. developer to release any memory obtained via AcsHeapAlloc via the
  82. AcsHeapFree API. This memory should be treated more like stack space
  83. that as a heap. In other words, any memory obtained via AcsHeapAlloc
  84. should be returned via AcsHeapFree as quickly as possible.
  85.  
  86. The other memory problem concerns pointers that are returned as a
  87. result of calling one of the WPS methods.  It is possible that the
  88. returned value will be a pointer to memory that is allocated to the
  89. WPS process. This pointer cannot be used by the PM Application to
  90. access the memory object that is being pointed to, since the PM
  91. Application cannot access memory that belongs to a different process.
  92. The call to the 'Acs' API makes no attempt to resolve this problem.
  93. The reason no attempt is made is because it will often be the case
  94. that the returned pointer is only going to be used in a subsequent
  95. call to another WPS or SOM method, and the PM Application has no need
  96. to access the actual memory pointed to.  However, there are cases
  97. where the PM application needs access to the memory pointed to so an
  98. API has been provided, AcsResolvePointer, that will return a pointer
  99. to a memory object that can be used by the PM process that is a copy
  100. of the same memory in the WPS process. This memory object is
  101. allocated via DosAllocMem and it is the responsibility of the callin
  102. application to free the memory via DosFreeMem.
  103.  
  104. **********************************************************************
  105.  
  106.                         API PROCESSING FLOW
  107.  
  108. AccessWPS actually runs as two DLL's. One of the DLL's, AccssWPS.DLL
  109. runs as part of the user's process. The second DLL, AcsAgentDLL, runs
  110. as part of the WPS process. 
  111.  
  112. Before any WPS or SOM method can be called, the AccessWPS Agent
  113. Object must be created via the AcsIniT API call. This API will cause
  114. the Agent Class to be registered with WPS, will create an instance of
  115. the AccessWPS Object and the Agent Object will open an Object Window
  116. which will be used by both DLL's to communicate with each other. In
  117. addition, some shared memory areas and semaphores are created by the
  118. AccssWPS.DLL and the AcsAgent.DLL will get a pointer to these areas
  119. by using their names.
  120.  
  121. Once all processing is completed, the PM Application must issue the
  122. AcsTerminate API. This API will destroy the AcsAgent Object,
  123. unregister the AccessWPS class and free the shared memory objects and
  124. semaphores.
  125.  
  126. The actual processing flow for each WPS or SOM method is as follows:
  127.  
  128. 1. The call of the 'Acs' API actually calls a subroutine for that
  129. specific method in the AccssWPS.DLL.
  130.  
  131. 2. The AccssWPS.DLL routine will allocate shared memory to hold the
  132. passed parameters and the return and fill in the parameters to be
  133. passed to the WPS or SOM method. In addition, any API that requires
  134. the SOMClassManager object ID as one of the parameters will check
  135. this parameter for a NULL and, if a NULL is found, will substitute
  136. the actual SOMClassManager value. This is necessary because it is not
  137. possible to access this constant value except when running as part of
  138. the WPS process.
  139.  
  140. 3. Once the shared memory is filled, the AccssWPS.DLL file will post a
  141. message to the AcsAgent Object Window and then wait on an Event
  142. Semaphore.
  143.  
  144. 4. When the AcsAgent.DLL Object Window receives the message, it will
  145. call a routine that will actually invoke the requested method and put
  146. the value returned from the method, if there is one, in the
  147. appropriate place in the shared memory.
  148.  
  149. 5. The AcsAgent.DLL code will then post the Event Semaphore.
  150.  
  151. 6. The posting of the Event Semaphore will cause the AccssWPS.DLL
  152. code to fall through the Wait.
  153.  
  154. 7. The AccssWPS.DLL code will save the returned value, if there is
  155. any, free the shared memory allocated for this API call and return to
  156. the calling PM application.
  157.  
  158. **********************************************************************
  159.  
  160.                         INSTALLATION
  161.  
  162. AccessWPS consists of three DLL's, an Import Library, an Include
  163. file and a Test program.
  164.  
  165. The three DLL's must be copied into a directory that is in the LIBPATH
  166. for the PM Application that will use them.
  167.  
  168. The Import Library, AccssWPS.LIB, must be copied to a directory that
  169. will make it available to the linker. This is normally a directory
  170. that is in the LIB= entry in the CONFIG.SYS file.
  171.  
  172. The Include file, AccssWPS.H, must be copied into a directory that
  173. will make it available to the compiler as an #include file. This is
  174. normally on of the directories in the INCLUDE= entry in the
  175. CONFIG.SYS file.
  176.  
  177. The Test program, AcsTest.exe, must be copied into a directory that
  178. will make it directly executable. This is normally a Directory that
  179. is in the PATH= entry in the CONFIG.SYS file.
  180.  
  181. The link of the PM Application must be modified so that the
  182. AccssWPS.LIB is included along with the other libraries.
  183.  
  184. Any C source module that calls any of the 'Acs' API's must include
  185. the AccssWPS.H include file. In addition, the source module must
  186. include the appropriate SOM or WPS #include file and the SOM and/or
  187. WPS include file must preceed the AccssWPS.H file. The reason the SOM
  188. and/or WPS include files are required is because the 'Acs' API's use
  189. the same data types as the actual WPS and SOM methods and these data
  190. types are defined in the SOM and WPS include files. There are tests
  191. in the AccssWPS.H include file that will only include the AccessWPS
  192. API's that correspond to the SOM and/or WPS include files that
  193. preceed it. If none of these files preceed the AccssWPS.H file, then
  194. none of the API's...except the special ones like AcsInit...will be
  195. defined.
  196.  
  197. **********************************************************************
  198.  
  199.                     VALIDATING INSTALLATION
  200.  
  201. Once the DLL's and the AcsTest program have been installed, it is
  202. suggested that the AcsTest program be run to verify that everything
  203. is working correctly. The AcsTest program has no command line
  204. parameters and, if everything is working correctly it will:
  205.  
  206. 1. Sound a rising series of tones that indicate the program
  207. is starting.
  208.  
  209. 2. A window will appear with a Listbox as the Client area.
  210.  
  211. 3. You will see a series of messages that will appear as the test
  212. program goes through it's cycle. There should be no messages that
  213. indicate that any of the functions was completed unsuccessfully.
  214.  
  215. 4. There will normally be a delay of a few seconds from the time you
  216. see the message that the creation of the Agent Object is starting and
  217. the message that it is complete. This is because the AcsAgent and
  218. Accsswps DLL's are loaded at this point.
  219.  
  220. 5. Once the Object is created. You will see a line with the Version
  221. information on it. If there are any problems, you might be asked for
  222. this version information, so it is worht while noting it.
  223.  
  224. 6. Once the version information has been displayed, several lines of
  225. internal variable information will be displayed. These are the
  226. internal variables for both the Agent Object and the AccssWPS module.
  227. This is done primarily to give the developer some idea of the kind of
  228. information that is returned when the dump lines are requested. It
  229. also provides a sample of how to get the dump information, since the
  230. source code for the AcsTest program is now included in the package.
  231.  
  232. 7. To terminate the AcsTest program, simply use the Close entry on
  233. the System Menu. You will hear a faliing series of tones as the
  234. program terminates indicating that the termination was successful.
  235.  
  236. **********************************************************************
  237.  
  238.                          RECOVERY
  239.  
  240. If the AcsTest program will not run, then it is possible that some
  241. partial data has been left in the INI files. The purpose of this
  242. section is to discuss the places where one might look to manually fix
  243. the INI files, so that AccessWPS will work correctly. The intention
  244. is to continue to improve AccessWPS so that the initialization and
  245. termination routines will be able to handle these conditions
  246. automatically. However, a number of different kinds of things could
  247. happen to change things at any one time, including a new release of
  248. OS/2.
  249.  
  250. This section is starting small, but will be added to as time goes on.
  251. The section also assumes that the developer has a tool, such as
  252. IniMaint, for searching and editing the INI files.
  253.  
  254. If AcsTest will not run all the way through without an error:
  255.  
  256. 1. The most common problem is an entry in the PM_Workplace:Location
  257. Application in the OS2.INI file. If you see a Key Name with
  258. <AccessWPSObject>, then there is residual information. You should
  259. manually remove this Key Name. Once this is done you should probably
  260. remove any invalid WPS entries in the OS2.INI and OS2SYS.INI files by
  261. using the Repair function of IniMaint or some similar program.
  262.  
  263. 2. The PM_Objects Application in the OS2SYS.INI file lists all of the
  264. registered classes. After AccessWPS has run successfully, there
  265. should not be any reference to a Class with the name AcsAgent. If
  266. there is, then the Class has not be Deregistered. I have not tried to
  267. remove the AcsAgent information manually becuace it has not been
  268. necessary. Running AcsTest should remove the information, even if the
  269. Creation of the Class and/or the Object is not successful. AcsTest
  270. attempt to do the normal termination functions even if the creation
  271. functions were not successful and this will normally clean up this
  272. entry.
  273.  
  274. 3. If none of the above fix the problem, then the Find capability of
  275. IniMaint or some similar program should be used to search both the
  276. Key Names and the Key Values of both the OS2.INI and OS2SYS.INI files
  277. to look for instances of AccessWPSObject or AcsAgent. If any
  278. instances are found, then two things should be done. First, you
  279. should notify Carry Associates so that the condition you have found
  280. can be incorporated into this section of the documentation. Second,
  281. you should, after insuring that you have a backup of your Desktop,
  282. manually remove the information. If you are not sure about the effect
  283. of the manual removal, it is strongly suggested that you perform a
  284. Shutdown and a Reboot to insure that the contents of the INI files
  285. and WPS are current with each other.
  286.  
  287. **********************************************************************
  288.  
  289.                      SPECIAL AccessWPS API's
  290.  
  291. In order to accomplish all of the necessary functions, there is a set
  292. of AccessWPS API's that do not parallel a corresponding SOM or WPS
  293. API. They are as follows:
  294.  
  295. BOOL AcsInit()
  296.  
  297. Purpose: Initialize the AccessWPS Agent Class and Object.
  298.  
  299. Returns: 0     - No error
  300.          non 0 - Error, see error code list
  301. Notes:
  302.  
  303. 1. This API must be called as the first API call. If it is not called
  304. all of the other API's will return the Not Initialized error code.
  305.  
  306. **********************************************************************
  307.  
  308. BOOL AcsTerminate()
  309.  
  310. Purpose: Terminate the AccessWPS Agent Class and Object and free the
  311.          shared memory objects.
  312.  
  313. Returns: 0     - No error
  314.          non 0 - Error - error code will appear in a message box on screen
  315.  
  316. Notes:
  317.  
  318. 1. There is no way to check to verify that this API has been called
  319. before the PM Application terminates. If it is not called, the Agent
  320. Object will be left and the shared memory will be left allocated.
  321.  
  322. **********************************************************************
  323.  
  324. PVOID AcsHeapAlloc(ULONG ulLength)
  325.  
  326. Purpose: To allocate a memory block in the Heap that is shared
  327.          between the Agent Object's process and the user's process
  328.          so that both processes can use it.
  329.  
  330. Returns: Valid Pointer - Successful Completion
  331.          NULL Pointer  - Allocation Error - error code will appear in
  332.                                             a message box on screen
  333.  
  334. Parameters:
  335.  
  336. ulLength  - The size of the memory object requested.
  337.  
  338. **********************************************************************
  339.  
  340. BOOL AcsHeapFree(PVOID pvMemory)
  341.  
  342. Purpose: To allocate a memory block in the Heap that is shared
  343.          between the Agent Object's process and the user's process
  344.          so that both processes can use it.
  345.  
  346. Returns: NO_ERROR      - Successful Completion
  347.          Anthing Else  - Error - see Error List
  348.  
  349. Parameters:
  350.  
  351.  
  352. **********************************************************************
  353.  
  354. PVOID AcsResolvePointer(PVOID pvWPS, LONG lFixed, BOOL fVariable)
  355.  
  356. Purpose: To make available to the PM process an area of memory that
  357.          belongs to the WPS process. This is normally a pointer that
  358.          has been returned from a claa to a WPS or SOM method.
  359.  
  360. Returns: Valid Pointer - Successful Completion
  361.          NULL Pointer  - Error - see AcsReturnError API
  362.  
  363. Parameters:
  364.  
  365. pvWPS     - The pointer to the WPS memory area. This is normally a
  366.             pointer returned from a call to a WPS or SOM method.
  367.  
  368. lFixed    - The length of the fixed area pointed to by the pointer
  369.             above. See the notes below.
  370.  
  371. fVariable - A flag indicating whether or not there is a variable
  372.             component to the memory object. This must always be a
  373.             valid C string that is terminated with a NULL character.
  374.             TRUE  - There is a variable portion.
  375.             FALSE - There is not a variable portion.
  376.  
  377. Notes:
  378.  
  379. 1. Since the WPS memory object could be a structure entry whose
  380. length cannot be determined by using the string length API, all
  381. memory objects whose length is known, should be requested using the
  382. lFixed field to specify the length.
  383.  
  384. 2. If the WPS memory object is a variable length string, then the
  385. lFixed value must be zero.
  386.  
  387. 3. Many of the WPS structure entries are compound entries. There is a
  388. fixed portion followed by a variable length name field. These
  389. pointers should be resolved by passing a non-zero lFixed length and
  390. TRUE as the fVariable entry. In this case, it is assumed that the
  391. fixed portion is first and is immediately followed by the variable
  392. string portion.
  393.  
  394. 4. The returned pointer is one that is allocated using AcsHeapAlloc.
  395. It is the responsibility of the calling application to free this
  396. memory using AcsHeapFree. If the memory is not freed before the
  397. returned pointer is used for a different purpose, the memory will be
  398. orphaned until the PM application terminates. The advantage of using
  399. AcsHeapAlloc for the returned pointer is that the pointer can then be
  400. used to pass the memory on to another WPS method without further
  401. processing.
  402.  
  403. Examples:
  404.  
  405. For all of the examples below, it is assumed that the pointer
  406. pvNotMine has been returned from a call to a WPS or SOM method.
  407.  
  408. If pvNotMine points to a variable length string:
  409.  
  410. pvReturn = AcsResolvePointer(pvNotMine, 0, TRUE);
  411.  
  412. If pvNotMine points to a fixed length 30 byte structure entry:
  413.  
  414. pvReturn = AcsResolvePointer(pvNotMine, 30, FALSE);
  415.  
  416. If pvNotMine points to a fixed length 40 byte structure entry that
  417. is followed by a variable length string:
  418.  
  419. pvReturn = AcsResolvePointer(pvNotMine, 40, TRUE);
  420.  
  421. **********************************************************************
  422.  
  423. BOOL AcsReturnError()
  424.  
  425. Purpose: Initialize the AccessWPS Agent Class and Object.
  426.  
  427. Returns: 0     - No error
  428.          non 0 - Error, see error code list
  429. Notes:
  430.  
  431. 1. This API is provided so that the Acs Error code can be accessed in
  432. those situations where is cannot be returned directly by the Acs API,
  433. such as for the AcsResolvePointer API.
  434.  
  435. 2. This API will only return the internal AccessWPS Logic Error Code,
  436. there are two other possible error codes, the one returned from a
  437. call to a Control Program API, the DOS Error Code, and the error
  438. caused by a call to a PM API, the PM Error code. Whenever any error
  439. is encountered, all three error codes are preserved. The additional
  440. error codes can be obtained by calling the AcsDumpLine API, which
  441. will format the error information into normal text lines.
  442.  
  443. **********************************************************************
  444.  
  445. VOID AcsVersion(PCHAR pchDataLine)
  446.  
  447. Purpose: To get the version of both the AcsAgent.DLL and the
  448.          AccssWPS.DLL.
  449.  
  450. Parameters:
  451.  
  452. pchDataLine - Pointer to a memory area that is at least 255 bytes
  453.               long, the returned version information will be
  454.               placed in this area.
  455.  
  456.  
  457. **********************************************************************
  458.  
  459. BOOL AcsDumpLine(PCHAR pchDataLine)
  460.  
  461. Purpose: If an error is returned, this API provides for a method of
  462.          obtaining a series of Ascii Text lines of data that reflect
  463.          the contents of the internal variables used by both DLL's.
  464.  
  465. Returns: FALSE         - This is the last line of dump data
  466.          TRUE          - There are more lines of dump data, so the same
  467.                          routine needs to be called again
  468.          Anything Else - Error, see error code list
  469.  
  470. Parameters:
  471.  
  472. pchDataLine - Pointer to a memory area that is at least 255 bytes
  473.               long, the returned line of dump information will be
  474.               placed in this area.
  475.  
  476. Notes:
  477.  
  478. 1. Once this routine is called the first time, it should be called
  479. over and over until it no longer returns TRUE. If this is not done,
  480. then next time the routine is called, it will try to pick up where it
  481. left off and the results could be unpredictable.
  482.  
  483. **********************************************************************
  484.  
  485.                  INCORRECTLY DOCUMENTED METHODS
  486.  
  487. For the following methods the documentation and the *.h files do not
  488. agree. AccessWPS has been implemented to agree with the *.h files.
  489. Refer to the AccssWPS.h file for the detailed prototype for these
  490. methods.
  491.  
  492. SOMObject methods:
  493.  
  494. Acs_somInitClass - There is an additional parameter passed to this
  495. method as the 2nd parameter. It is a zString and is the name of the
  496. Class.
  497.  
  498. WPObject methods:
  499.  
  500. Acs_wpCnrRemoveObject - The third parameter is not present in the *.h
  501. file. This method is only passed the first two parameters.
  502.  
  503. Acs_wpclsFindObjectFirst - There is an additional parameter, a
  504. pointer to a Class List, which is the second parameter which must be
  505. passed to the method.
  506.  
  507. Acs_wpAllocMem - The third parameter is a pointer to a long and will
  508. contain the return code...I think.
  509.  
  510. WPPalette methods:
  511.  
  512. Acs_wpPaintCell - There is an additional parameter that is passed as
  513. the third parameter, a Presentation space to be used for the Paint.
  514. Also there is no return from the method, it is defined as VOID.
  515.  
  516. WPFileSystem methods:
  517.  
  518. Acs_wpSetType - There is third parameter, which is a pointer to a
  519. FEA2LIST structure.
  520.  
  521. WPFolder methods:
  522.  
  523. Acs_wpPopulate - The second parameter is a pointer to a zero
  524. terminated string, not a pointer to a folder object.
  525.  
  526. **********************************************************************
  527.  
  528.                      UNPROTOTYPED METHODS
  529.  
  530. The following methods are defined in the Documentation as being
  531. available for use. However, they do not have a prototype defined for
  532. them in the *.h file, although they are listed in the method table.
  533. This normally means they are defined as private methods. Therefore,
  534. they are not implemented in AccessWPS.
  535.  
  536. SOMObject methods:
  537.  
  538. _somGetMethodOffset 
  539.  
  540. WPPalette methods:
  541.  
  542. _wpShowPalettePointer
  543.  
  544. **********************************************************************
  545.  
  546.                      NOT INCLUDED METHODS
  547.  
  548. The following methods are in the documentation and defined in the *.h
  549. files. However, they are not included in AccessWPS because they do
  550. not appear to be available to be called except by the System or
  551. during the processing of another method. If any developer believes
  552. there is a need for one of these methods, they can easily be included
  553. as part of AccessWPS.
  554.  
  555. SOMObject methods:
  556.  
  557. _somClassReady
  558. _somDispatchX
  559. _somEnvironmentNew
  560. _somPrintf
  561.  
  562. WPObject methods:
  563.  
  564. _wpAddObjectGeneralPage
  565. _wpAddObjectWindowPage
  566. _wpInsertPopupMenuItems
  567. _wpInsertSettingsPage
  568. _wpRestoreData
  569. _wpRestoreLong
  570. _wpRestoreString
  571. _wpSaveData
  572. _wpSaveLong
  573. _wpSaveString
  574.  
  575. WPDataFile methods:
  576.  
  577. _wpAddFileTypePage
  578.  
  579. WPDisk methods:
  580.  
  581. _wpAddDiskDetailsPage
  582.  
  583. WPDesk methods:
  584.  
  585. _wpAddDesktopLockup1Page
  586. _wpAddDesktopLockup2Page
  587. _wpAddDesktopLockup3Page
  588.  
  589. WPFileSystem methods:
  590.  
  591. _wpAddFile1Page
  592. _wpAddFile2Page
  593. _wpAddFile3Page
  594. _wpAddFileMenuPage
  595. _wpAddUserItemsToPopupMenu
  596.  
  597. WPFolder methods:
  598.  
  599. _wpAddFolderView1Page
  600. _wpAddFolderView2Page
  601. _wpAddFolderView3Page
  602. _wpAddFolderIncludePage
  603. _wpAddFolderSortPage
  604. _wpAddFolderBackgroundPage
  605.  
  606. WPProgram and WPProgramFile methods:
  607.  
  608. _wpAddProgramAssociationPage
  609. _wpAddProgramPage
  610. _wpAddProgramSessionPage
  611.  
  612. The following methods are not in the documentation but are defined in
  613. the *.h files. However, they are not included in AccessWPS because
  614. they do not appear to be available to be called except by the System
  615. or during the processing of another method. If any developer believes
  616. there is a need for one of these methods, they can easily be included
  617. as part of AccessWPS.
  618.  
  619. SOMObject methods:
  620.  
  621. _somTotalRegIds
  622. _somSetExpectedIds
  623. _somUniqueKey
  624. _somBeginPersistentIds
  625. _somEndPersistentIds
  626. _somConstructClass
  627. _somGenericApply
  628. _somVprintf
  629. _somPrefixLevel
  630. _somLPrintfsomLPrintf
  631. _somGetInstanceToken
  632. _somGetMemberToken
  633. _somGetInitFunction
  634. _somGetRelatedClasses
  635.  
  636. WPFolder methods:
  637.  
  638. _wpRestoreFldrRunObjs
  639. _wpStoreFldrRunObjs
  640.  
  641. **********************************************************************
  642.  
  643.                        MACRO METHODS
  644.  
  645. The following methods are documented as macros that start with SOM_.
  646. However, these methods are actually implemented via a normal method
  647. and are implemented in AccessWPS in the same way, that is, as normal
  648. Acs_som... methods
  649.  
  650. SOM_Resolve
  651. SOM_ResolveNoCheck
  652. SOM_ParentResolve
  653. SOM_CheckId
  654. SOM_CompareIds
  655. SOM_StringFromId
  656. SOM_IdFromString
  657.  
  658. **********************************************************************
  659.  
  660.                      UNDOCUMENTED METHODS
  661.  
  662. The following methods are present in the *.h files, but are not
  663. listed in the documentation. They are defined in all of the files, so
  664. they can be accessed via AccessWPS.
  665.  
  666. SOMObject methods:
  667.  
  668. Acs_somDataResolve
  669. Acs_somNewNoInit
  670. Acs_somRenewNoInit
  671. Acs_somGetMethodDescriptor
  672. Acs_somFindSMethod
  673. Acs_somFindSMethodOk
  674.  
  675. WPObject methods:
  676.  
  677. Acs_wpAppendObject
  678. Acs_wpAssertObjectMutexSem
  679. Acs_wpConfirmObjectTitle
  680. Acs_wpCreateAnother
  681. Acs_wpFindTaskRec
  682. Acs_wpModifyStyle
  683. Acs_wpQueryButtonAppearance
  684. Acs_wpQueryConcurrentView
  685. Acs_wpQueryMinWindow
  686. Acs_wpQueryNameClashOptions
  687. Acs_wpQueryTrueStyle
  688. Acs_wpReleaseObjectMutexSem
  689. Acs_wpReplaceObject
  690. Acs_wpRequestObjectMutexSem
  691. Acs_wpSetButtonAppearance
  692. Acs_wpSetConcurrentView
  693. Acs_wpSetMinWindow
  694. Acs_wpSetTaskRec
  695. Acs_wpViewObject
  696. Acs_wpclsQueryButtonAppearance
  697. Acs_wpclsQueryExtendedCriteria
  698. Acs_wpclsQuerySearchInfo
  699.  
  700. WPDataFile methods:
  701.  
  702. Acs_wpQueryAssociatedProgram
  703. Acs_wpSetAssociatedFileIcon
  704.  
  705. WPDisk methods:
  706.  
  707. Acs_wpQueryDriveLockStatus
  708. Acs_wpEjectDisk
  709. Acs_wpLockDrive
  710.  
  711. WPFileSystem methods:
  712.  
  713. Acs_wpConfirmRenameFileWithExt
  714. Acs_wpQueryAttr
  715. Acs_wpQueryCreation
  716. Acs_wpQueryLastAccess
  717. Acs_wpQueryLastWrite
  718. Acs_wpQueryFileSize
  719. Acs_wpQueryEASize
  720. Acs_wpQueryRefreshFlags
  721. Acs_wpSetAttr
  722. Acs_wpSetDateInfo
  723. Acs_wpSetFileSizeInfo
  724. Acs_wpSetRefreshFlags
  725. Acs_wpSetTitleAndRenameFile
  726. Acs_wpVerifyUpdateAccess
  727. Acs_wpclsQueryObjectFromPath
  728.  
  729. WPFolder methods:
  730.  
  731. Acs_wpContainsFolders
  732. Acs_wpFreeIconPosData
  733. Acs_wpInitIconPosData
  734. Acs_wpQueryFldrSort
  735. Acs_wpQueryIconPosition
  736. Acs_wpQueryOpenFolders
  737. Acs_wpSearchFolder
  738. Acs_wpSetFldrSort
  739. Acs_wpStoreIconPosData
  740.  
  741. **********************************************************************
  742.  
  743.                      AccessWPS ERROR CODES
  744.  
  745. 10101 - Creation of Shared Heap failed.
  746.  
  747. 10102 - Creation of Shared Information Structure failed.
  748.  
  749. 10103 - Agent Object Window Pointer NULL.
  750.  
  751. 10104 - Free of Shared Heap failed.
  752.  
  753. 10105 - Free of Shared Information Structure failed.
  754.  
  755. 10106 - DosAllocMem failed.
  756.  
  757. 10107 - Null pointer passed to AcsResolvePointer.
  758.  
  759. 10108 - Agent Object not active.
  760.  
  761. 10200 - Registration of Agent Class failed.
  762.  
  763. 10201 - Creation of Agent Object failed.
  764.  
  765. 10202 - Removal of Agent Object failed.
  766.  
  767. 10203 - Unable to Post Message to Agent Object Window.
  768.  
  769. 10204 - Error posting or waiting on Semaphore
  770.  
  771. 10205 - Null pointer passed to AcsDumpLine.
  772.