home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / monitors / rsys / rsyssrc.lha / RSysHelp.c < prev    next >
C/C++ Source or Header  |  1993-09-24  |  10KB  |  387 lines

  1. /*
  2. ***************************************************************************
  3. *
  4. * Datei:
  5. *      RSysHelp.c
  6. *
  7. * Inhalt:
  8. *
  9. *      --- Globale Routinen ---
  10. *
  11. *    int CloseHelpOnScreen ( void );
  12. *    void HandleHelp ( enum RSysNumbers Link );
  13. *    void Help ( void );
  14. *    void OpenHelpOnScreen ( int openit );
  15. *    void ShowStatus ( void );
  16. *
  17. *      --- Lokale  Routinen ---
  18. *
  19. *    static void DisplayError ( LONG err1 , LONG err2 );
  20. *    static void HandleAmigaGuide ( void );
  21. *    static void HandleFirstAmigaGuideMsg ( void );
  22. *    static void InitAsyncAGuide ( void );
  23. *    static void RemoveAsyncAGuide ( void );
  24. *    static void WaitForAGuideActivated ( void );
  25. *    static void WaitForAGuideCmdReady ( void );
  26. *
  27. * Bemerkungen:
  28. *      Prozeduren zur Verwaltung der Hilfefunktion von RSys.
  29. *
  30. * Erstellungsdatum:
  31. *      07-Jul-93     Rolf Böhme
  32. *
  33. * Änderungen:
  34. *      07-Jul-93     Rolf Böhme      Erstellung
  35. *
  36. ***************************************************************************
  37. */
  38.  
  39. #include "RSys.h"
  40.  
  41. /* RSysHelp.c (statische Prototypen) */
  42. static void RemoveAsyncAGuide ( void );
  43. static void HandleAmigaGuide ( void );
  44. static void DisplayError ( LONG err1, LONG err2 );
  45. static void WaitForAGuideCmdReady ( void );
  46. static void WaitForAGuideActivated ( void );
  47. static void HandleFirstAmigaGuideMsg ( void );
  48. static void InitAsyncAGuide ( void );
  49.  
  50. static struct NewAmigaGuide *nag = NULL;
  51. static AMIGAGUIDECONTEXT AmigaGuide_context = NULL;
  52.  
  53. static struct Screen *lasthelpscreen;
  54.  
  55. static TEXT PortName[]= (STRPTR) NAME "-AGuide-Port";
  56. static TEXT BaseName[]= (STRPTR) NAME "Guide";
  57.  
  58.  
  59. /********************************************************************
  60.  *                                                                  *
  61.  *    ******************** AGuide entfernen ********************    *
  62.  *                                                                  *
  63.  ********************************************************************/
  64.  
  65. static void
  66. RemoveAsyncAGuide(void)
  67. {
  68.    Flags.helpmode = 0;
  69.  
  70.    PrintInfo("Close AGuide document...", SPEAK, 0);
  71.  
  72.    if (AmigaGuide_context)
  73.    {
  74.       HandleAmigaGuide();
  75.  
  76.       ExpungeDataBases((BOOL)TRUE);
  77.  
  78.       CloseAmigaGuide(AmigaGuide_context);
  79.  
  80.       AmigaGuide_context = NULL;
  81.    }
  82.  
  83.    MyFreeVec(nag);
  84.  
  85.    if(AmigaGuideBase) CloseLibrary((struct Library *) AmigaGuideBase);
  86.  
  87.    return;
  88. }
  89.  
  90.  
  91.  
  92. /********************************************************************
  93.  *                                                                  *
  94.  *   ******************** AGuide verarbeiten ********************   *
  95.  *                                                                  *
  96.  ********************************************************************/
  97.  
  98. static void
  99. DisplayError(LONG err1, LONG err2)
  100. {
  101.    UBYTE *errstr1 = GetAmigaGuideString(err1), *errstr2 = GetAmigaGuideString(err2);
  102.  
  103.    MyEasyRequest(SysWnd, (UBYTE *) NAME " - AmigaGuide error message",
  104.                  (UBYTE *) "Continue",
  105.                  (UBYTE *) "Primary Number  : %lD\n"
  106.                            "Secondary Error : %s (Nr.: %lD)",
  107.                  err1, errstr2, err2);
  108.  
  109.    return;
  110. }
  111.  
  112. static void
  113. HandleAmigaGuide(void)
  114. {
  115.    struct AmigaGuideMsg *agm;
  116.  
  117.    while (agm = GetAmigaGuideMsg(AmigaGuide_context))
  118.    {
  119.       if (agm->agm_Pri_Ret || agm->agm_Sec_Ret) DisplayError(agm->agm_Pri_Ret, agm->agm_Sec_Ret);
  120.  
  121.       ReplyAmigaGuideMsg(agm);
  122.    }
  123.  
  124.    return;
  125. }
  126.  
  127. static void
  128. WaitForAGuideCmdReady(void)
  129. {
  130.    struct AmigaGuideMsg *agm;
  131.    BYTE out = FALSE;
  132.  
  133.    do
  134.    {
  135.       while (agm = GetAmigaGuideMsg(AmigaGuide_context))
  136.       {
  137.          if(agm->agm_Type == ToolCmdReplyID) out = TRUE;
  138.  
  139.          if (agm->agm_Pri_Ret || agm->agm_Sec_Ret)
  140.             DisplayError(agm->agm_Pri_Ret, agm->agm_Sec_Ret);
  141.  
  142.          ReplyAmigaGuideMsg(agm);
  143.       }
  144.    } while(!out);
  145.  
  146.    return;
  147. }
  148.  
  149. static void
  150. WaitForAGuideActivated(void)
  151. {
  152.    struct AmigaGuideMsg *agm;
  153.    BYTE out = FALSE;
  154.  
  155.    do
  156.    {
  157.       while (agm = GetAmigaGuideMsg(AmigaGuide_context))
  158.       {
  159.          if(agm->agm_Type == ActiveToolID) out = TRUE;
  160.  
  161.          if (agm->agm_Pri_Ret || agm->agm_Sec_Ret)
  162.             DisplayError(agm->agm_Pri_Ret, agm->agm_Sec_Ret);
  163.  
  164.          ReplyAmigaGuideMsg(agm);
  165.       }
  166.    } while(!out);
  167.  
  168.    return;
  169. }
  170.  
  171.    /*
  172.     * HandleFirstAmigaGuideMsg() wartet auf eine AGuide-Nachricht
  173.     * vom Typ ActiveToolID. Ist diese Nachricht angekommen, kann
  174.     * sofort mit entsprechenden Aktionen begonnen werden.
  175.     * Hier wird sofort das AGuide-Window mit dem Main-Node
  176.     * geöffnet.
  177.     */
  178. static void
  179. HandleFirstAmigaGuideMsg(void)
  180. {
  181.    WaitForAGuideActivated();
  182.  
  183.    if(SetAmigaGuideContext(AmigaGuide_context, (long)MAIN_HELP, NULL))
  184.       SendAmigaGuideContext(AmigaGuide_context, NULL);
  185.  
  186.    if(SysWnd)
  187.    {
  188.       WaitForAGuideCmdReady();
  189.  
  190.       WaitTOF();
  191.  
  192.       WindowToFront(SysWnd);
  193.  
  194.       lasthelpscreen = SysWnd->WScreen;
  195.    }
  196.  
  197.    return;
  198. }
  199.  
  200. void
  201. HandleHelp(enum RSysNumbers Link)
  202. {
  203.    if (!Flags.helpmode) return;
  204.  
  205.    HandleAmigaGuide();
  206.  
  207.    if (Link >= 0)
  208.    {
  209.       if(SetAmigaGuideContext(AmigaGuide_context, (long)Link, NULL))
  210.          SendAmigaGuideContext(AmigaGuide_context, NULL);
  211.    }
  212.  
  213.    HandleAmigaGuide();
  214.  
  215.    return;
  216. }
  217.  
  218.  
  219.  
  220. /********************************************************************
  221.  *                                                                  *
  222.  *  ******************** AGuide installieren ********************   *
  223.  *                                                                  *
  224.  ********************************************************************/
  225.  
  226. static void
  227. InitAsyncAGuide(void)
  228. {
  229.    if (AmigaGuideBase = (struct AmigaGuideBase *)
  230.                         OpenLibrary((STRPTR) "amigaguide.library", 33))
  231.    {
  232.       Flags.helpmode = 1;
  233.  
  234.       PrintInfo("Please wait! Loading AGuide document...", SPEAK, 0);
  235.  
  236.       nag = MyAllocVec(sizeof(struct NewAmigaGuide), MEMF_PUBLIC | MEMF_CLEAR, NO_KILL);
  237.       if(nag)
  238.       {
  239.          nag->nag_Lock        = NULL;
  240.          nag->nag_Name        = RSysFiles.Guide;
  241.          nag->nag_PubScreen   = namebuffer;
  242.          nag->nag_ClientPort  = PortName;
  243.          nag->nag_BaseName    = BaseName;
  244.          nag->nag_Flags       = HTF_NOACTIVATE;
  245.          nag->nag_Context     = context;
  246.          nag->nag_Client      = NULL;
  247.  
  248.          if (AmigaGuide_context = OpenAmigaGuideAsync(nag, NULL))
  249.          {
  250.             SetAmigaGuideContext(AmigaGuide_context, 0L, NULL);
  251.             HandleFirstAmigaGuideMsg();
  252.          }
  253.       }
  254.       else
  255.       {
  256.          RemoveAsyncAGuide();
  257.          ErrorHandle("Alloc NewAmigaGuide", MEMORY_ERR, ALLOC_FAIL, NO_KILL);
  258.       }
  259.    }
  260.  
  261.    return;
  262. }
  263.  
  264.  
  265. /********************************************************************
  266.  *                                                                  *
  267.  *     ******************** AGuide Support ********************     *
  268.  *                                                                  *
  269.  ********************************************************************/
  270.  
  271. void
  272. Help(void)
  273. {
  274.    DisableSysRequest(TRUE);
  275.  
  276.    if (!Flags.helpmode)
  277.    {
  278.       OffMenu(SysWnd,FULLMENUNUM(7,3,0));
  279.  
  280.       InitAsyncAGuide();
  281.  
  282.          /*
  283.           * Iconify() und erneutes Laden der Nodes verbieten
  284.           */
  285.       if(AmigaGuide_context) OffMenu(SysWnd,FULLMENUNUM(0,0,0));
  286.       else
  287.          OnMenu(SysWnd,FULLMENUNUM(7,3,0));
  288.    }
  289.    else
  290.    {
  291.       RemoveAsyncAGuide();
  292.  
  293.          /*
  294.           * Iconify() und erneutes Laden der Nodes zulassen
  295.           */
  296.       OnMenu(SysWnd,FULLMENUNUM(0,0,0));
  297.       OnMenu(SysWnd,FULLMENUNUM(7,3,0));
  298.    }
  299.  
  300.    DisableSysRequest(FALSE);
  301.  
  302.    PrintStatistics();
  303.  
  304.    return;
  305. }
  306.  
  307. int
  308. CloseHelpOnScreen(void)
  309. {
  310.    if(Flags.helpmode && (Scr != lasthelpscreen))
  311.    {
  312.       Help();
  313.  
  314.       Flags.helpmode = 1;
  315.  
  316.       return TRUE;
  317.    }
  318.  
  319.    return FALSE;
  320. }
  321.  
  322. void
  323. OpenHelpOnScreen(int openit)
  324. {
  325.    if(openit)
  326.    {
  327.       Flags.helpmode = 0;
  328.  
  329.       Help();
  330.  
  331.       HandleHelp(GD_JumpGad);
  332.    }
  333.  
  334.    return;
  335. }
  336.  
  337.  
  338. void
  339. ShowStatus(void)
  340. {
  341.    extern long maxentries;
  342.    extern int newlvh;
  343.    long cnt = 0;
  344.    struct Node *node;
  345.    char *onoff[]= { "OFF", "ON" };
  346.  
  347.    HandleHelp(MN_ShowStatus);
  348.  
  349.    for(node = Libraries.lh_Head; node->ln_Succ; node = node->ln_Succ)
  350.       cnt += CountNodes(&(((LIBRARY *)node)->l_functions));
  351.  
  352.    MyEasyRequest(SysWnd, (UBYTE *) NAME " - Status information",
  353.                  (UBYTE *) "Ok",
  354.                  (UBYTE *) "--- Flags ---\n"
  355.                  "Fast mode  : %3s  Sorting       : %3s  Work bar     : %3s\n"
  356.                  "Speaking   : %3s  Auto front    : %3s  Mouse window : %3s\n"
  357.                  "Topaz font : %3s  Save asking   : %3s  App Icon     : %3s\n"
  358.                  "WB Start   : %3s\n"
  359.                  "\n--- Memory ---\n"
  360.                  "Current entries : %5lD  Max entries    : %5lD\n"
  361.                  "Hardware types  : %5lD  Context nodes  : %5lD\n"
  362.                  "Library nodes   : %5lD  Function nodes : %5lD\n"
  363.                  "Listviewheight  : %5lD\n"
  364.                  "\n--- Files ---\n"
  365.                  "Hardware data       : %s (%s)\n"
  366.                  "Library offset data : %s (%s)\n"
  367.                  "Guide file          : %s (%s)\n"
  368.                  "Guide context       : %s (%s)\n"
  369.                  "Action file         : %s (%s)\n",
  370.                  onoff[Flags.fastmode], onoff[Flags.sortmode],
  371.                  onoff[Flags.workingbar], onoff[Flags.speakmode],
  372.                  onoff[Flags.autofront], onoff[Flags.mousewindow],
  373.                  onoff[Flags.sysfont], onoff[Flags.saveasking],
  374.                  onoff[Flags.appicon], onoff[Flags.wb_start],
  375.                  countentries, maxentries, CNT_DEVELOPER,
  376.                  sizeof(context)/sizeof(char *), CountNodes(&Libraries), cnt,
  377.                  newlvh,
  378.                  RSysFiles.Hardware, (Flags.dummy1 ? "loaded" : "unload"),
  379.                  RSysFiles.LibOffsets, (Flags.dummy2 ? "loaded" : "unload"),
  380.                  RSysFiles.Guide, (Flags.dummy3 ? "loaded" : "unload"),
  381.                  RSysFiles.GuideContext, (Flags.dummy3 ? "loaded" : "unload"),
  382.                  RSysFiles.ActionFile, (Actions ? "loaded" : "unload"));
  383.  
  384.    return;
  385. }
  386.  
  387.