/* myhooks.c -- versione tradotta da A. Prandi */

typedef   LONG   (*PFL)();

struct   hook   {
   LONG   hk_SysFunc;
   PFL      hk_MyFunc;
   PFL      hk_Entry;   /* punto unico d'entrata  */
   WORD   hk_Test;
   LONG   hk_LVO;
};

void   drawShadowSignal();

/* punti unici d'entrata */
long   entry0();
long   entry1();
long   entry2();
long   entry3();
long   entry4();
long   entry5();
long   entry6();

struct hook   myhooks[] = {
   {   0,   
      (PFL) drawShadowSignal,
      entry0,
      0,
      -48,      /* frontale         */
   },
   {   0,   
      (PFL) drawShadowSignal,
      entry1,
      0,
      -42         /* crea il retro   */
   },
   {   0,   
      (PFL) drawShadowSignal,
      entry2,
      0,
      -36         /* crea il frontale   */
   },
   {   0,   
      (PFL) drawShadowSignal,
      entry3,
      0,
      -90         /* cancella         */
   },
   {   0,   
      (PFL) drawShadowSignal,
      entry4,
      0,
      -54         /* retro         */
   },
   {   0,   
      (PFL) drawShadowSignal,
      entry5,
      0,
      -66         /* dimensione          */
   },
   {   0,   
      (PFL) drawShadowSignal,
      entry6,
      0,
      -60         /* muove          */
   }
};

#define NUMHOOKS   (sizeof (myhooks)/ sizeof (struct hook))

extern   long   LayersBase;

setup_hooks()
{
   int      i;

   /* installa gli hooks   */
   Forbid();
   for (i = 0; i < NUMHOOKS; ++i)
   {
      myhooks[i].hk_SysFunc =
         SetFunction(LayersBase, myhooks[i].hk_LVO, myhooks[i].hk_Entry);
   }
   Permit();
}

cleanup_hooks()
{
   int   i;

   /* rimuove gli hooks      */
   for (i = 0; i < NUMHOOKS; ++i)
   {
      SetFunction(LayersBase, myhooks[i].hk_LVO, myhooks[i].hk_SysFunc);
   }

   return (1);      /* gli dice che e' ok per uscire   */
}
