home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / gbmos2pm.zip / gbmv2 / help.c < prev    next >
C/C++ Source or Header  |  1996-11-14  |  5KB  |  198 lines

  1. /*
  2.  
  3. help.c - PM Help
  4.  
  5. */
  6.  
  7. /*...sincludes:0:*/
  8. #define    INCL_DOS
  9. #define    INCL_WIN
  10. #define    INCL_GPI
  11. #define    INCL_DEV
  12. #include <os2.h>
  13. #include <stdio.h>
  14. #include <stdarg.h>
  15. #include <string.h>
  16. #include <malloc.h>
  17. #include <memory.h>
  18. #include "gbmv2hlp.h"
  19.  
  20. /*...vgbmv2hlp\46\h:0:*/
  21. /*...e*/
  22.  
  23. /*...sHlpWarning:0:*/
  24. static VOID HlpWarning(HWND hwnd, const CHAR *szFmt, ...)
  25.     {
  26.     va_list vars;
  27.     CHAR sz[256+1];
  28.  
  29.     va_start(vars, szFmt);
  30.     vsprintf(sz, szFmt, vars);
  31.     va_end(vars);
  32.     WinMessageBox(HWND_DESKTOP, hwnd, sz, "Help system", 0, MB_OK | MB_WARNING | MB_MOVEABLE);
  33.     }
  34. /*...e*/
  35. /*...sHlpInit:0:*/
  36. static HELPINIT hinit;
  37.  
  38. HWND HlpInit(
  39.     HWND hwnd,
  40.     HMODULE hmod, USHORT idHelpTable,
  41.     const CHAR *szHelpFile,
  42.     const CHAR *szTitle
  43.     )
  44.     {
  45.     HAB hab = WinQueryAnchorBlock(hwnd);
  46.     HWND hwndHelp;
  47.     CHAR sz[256+1];
  48.  
  49.     hinit.cb                       = sizeof(HELPINIT);
  50.     hinit.ulReturnCode             = 0L;
  51.  
  52.     /* HELPTABLE resource handle */
  53.     hinit.hmodHelpTableModule      = hmod;
  54.     hinit.phtHelpTable             = (HELPTABLE *) (0xffff0000L | idHelpTable);
  55.  
  56.     /* Help window title bar */
  57.     strcpy(sz, szTitle);
  58.     strcat(sz, " Help");
  59.     hinit.pszHelpWindowTitle       = sz;
  60.  
  61.     /* Not showing panel IDs */
  62.     hinit.fShowPanelId             = CMIC_HIDE_PANEL_ID;
  63.  
  64.     /* No tutorial program */
  65.     hinit.pszTutorialName          = NULL;
  66.  
  67.     /* Action bar is not tailored */
  68.     hinit.hmodAccelActionBarModule = (HMODULE) NULL;
  69.     hinit.idAccelTable             = (USHORT) NULL;
  70.     hinit.idActionBar              = (USHORT) NULL;
  71.  
  72.     /* No default librarys */
  73.     hinit.pszHelpLibraryName       = "";
  74.  
  75.     if ( (hwndHelp = WinCreateHelpInstance(hab, &hinit)) == (HWND) NULL )
  76.         {
  77.         HlpWarning(hwnd, "Unable to create help instance");
  78.         return (HWND) NULL;
  79.         }
  80.  
  81.     if ( WinSendMsg(hwndHelp, HM_SET_HELP_LIBRARY_NAME, MPFROMP(szHelpFile), NULL) )
  82.         {
  83.         WinDestroyHelpInstance(hwndHelp);
  84.         HlpWarning(hwnd, "Unable to find help libraries");
  85.         return (HWND) NULL;
  86.         }
  87.  
  88.     return hwndHelp;
  89.     }
  90. /*...e*/
  91. /*...sHlpDeinit:0:*/
  92. VOID HlpDeinit(HWND hwndHelp)
  93.     {
  94.     WinDestroyHelpInstance(hwndHelp);
  95.     }
  96. /*...e*/
  97. /*...sHlpActivate:0:*/
  98. VOID HlpActivate(HWND hwndHelp, HWND hwndFrame)
  99.     {
  100.     if ( !WinAssociateHelpInstance(hwndHelp, hwndFrame))
  101.         HlpWarning(hwndFrame, "Unable to associate help instance");
  102.     }
  103. /*...e*/
  104. /*...sHlpWndProc:0:*/
  105. MRESULT _System HlpWndProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
  106.     {
  107.     CHAR sz[256+1];
  108.  
  109.     switch ( (int) msg )
  110.         {
  111. /*...sHM_ERROR:16:*/
  112. case HM_ERROR:
  113.     switch( SHORT1FROMMP(mp1) )
  114.         {
  115.         case HMERR_HELPITEM_NOT_FOUND:
  116.             sprintf(sz, "Item 0x%08lx not found", LONGFROMMP(mp2));
  117.             HlpWarning(hwnd, sz);
  118.             break;
  119.         case HMERR_HELPSUBITEM_NOT_FOUND:
  120.             sprintf(sz, "Sub-Item 0x%08lx not found", LONGFROMMP(mp2));
  121.             HlpWarning(hwnd, sz);
  122.             break;
  123.         case HMERR_INDEX_NOT_FOUND:
  124.             HlpWarning(hwnd, "No index in library file" );
  125.             break;
  126.         case HMERR_CONTENT_NOT_FOUND:
  127.             HlpWarning(hwnd, "Library file does not have any contents");
  128.             break;
  129.         case HMERR_OPEN_LIB_FILE:
  130.             HlpWarning(hwnd, "Cannot open library file");
  131.             break;
  132.         case HMERR_READ_LIB_FILE:
  133.             HlpWarning(hwnd, "Cannot read library file");
  134.             break;
  135.         case HMERR_CLOSE_LIB_FILE:
  136.             HlpWarning(hwnd, "Cannot close library file");
  137.             break;
  138.         case HMERR_INVALID_LIB_FILE:
  139.             HlpWarning(hwnd, "Improper library file provided");
  140.             break;
  141.         case HMERR_NO_MEMORY:
  142.             HlpWarning(hwnd, "Unable to allocate the requested amount of memory");
  143.             break;
  144.         case HMERR_ALLOCATE_SEGMENT:
  145.             HlpWarning(hwnd, "Unable to allocate memory for IPF");
  146.             break;
  147.         case HMERR_FREE_MEMORY:
  148.             HlpWarning(hwnd, "Unable to free allocated memory");
  149.             break;
  150.         case HMERR_PANEL_NOT_FOUND:
  151.             HlpWarning(hwnd, "Unable to find help panel requested");
  152.             break;
  153.         case HMERR_DATABASE_NOT_OPEN:
  154.             HlpWarning(hwnd, "Unable to read the unopened database");
  155.             break;
  156.         default:
  157.             sprintf(sz, "Error mp1=0x%08lx mp2=0x%08lx",LONGFROMMP(mp1), LONGFROMMP(mp2));
  158.             HlpWarning(hwnd, sz);
  159.             break;
  160.         }
  161.     break;
  162. /*...e*/
  163. /*...sHM_INFORM:16:*/
  164. case HM_INFORM:
  165.     sprintf(sz, "Inform 0x%08lx 0x%08lx",
  166.         LONGFROMMP(mp1), LONGFROMMP(mp2));
  167.     HlpWarning(hwnd, sz);
  168.     break;
  169. /*...e*/
  170. /*...sHM_QUERY_KEYS_HELP:16:*/
  171. case HM_QUERY_KEYS_HELP:
  172.     return (MRESULT) HID_HELPKEYS;    
  173. /*...e*/
  174. /*...sHM_EXT_HELP_UNDEFINED:16:*/
  175. case HM_EXT_HELP_UNDEFINED:
  176.     sprintf(sz, "Extended help undefined mp1=0x%08lx mp2=0x%08lx",
  177.         LONGFROMMP(mp1), LONGFROMMP(mp2));
  178.     HlpWarning(hwnd, sz);
  179.     break;
  180. /*...e*/
  181. /*...sHM_HELPSUBITEM_NOT_FOUND:16:*/
  182. case HM_HELPSUBITEM_NOT_FOUND:
  183.     sprintf(sz, "Sub-Item 0x%08lx 0x%08lx not found",
  184.         LONGFROMMP(mp1), LONGFROMMP(mp2));
  185.     HlpWarning(hwnd, sz);
  186.     break;
  187. /*...e*/
  188.         }
  189.     return WinDefWindowProc(hwnd, msg, mp1, mp2);
  190.     }
  191. /*...e*/
  192. /*...sHlpHelpForHelp:0:*/
  193. VOID HlpHelpForHelp(HWND hwndHelp)
  194.     {
  195.     WinPostMsg(hwndHelp, HM_DISPLAY_HELP, NULL, NULL);
  196.     }
  197. /*...e*/
  198.