home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / programs / fonts / a_q / fontpool / !Ex-C / h / FontPool
Text File  |  1995-01-10  |  4KB  |  113 lines

  1. /* Copyright (C) Eirik Hansen 1994
  2.  
  3.    Functions to help interact with FontPool v0.12 in C.
  4.  
  5.    (There is no reason this file cannot be set up as a FontPool-library...)
  6.  
  7.    Parameters are mostly passed by means of the FontPool_Struct to prevent
  8.    function-calls from growing to long. These parameters all map to parameters
  9.    the different FontPool-SWIs require.
  10. */
  11.  
  12. /*****  #includes..  **********************************************************/
  13. #include "os.h"
  14.  
  15. /*****  #defines..  ***********************************************************/
  16. #define  SWIBase           0x8D080
  17. #define  FP_Hello          SWIBase+0
  18. #define  FP_Goodbye        SWIBase+1
  19. #define  FP_CreateMenu     SWIBase+2
  20. #define  FP_CreateSubMenu  SWIBase+3
  21. #define  FP_MenuSelection  SWIBase+4
  22. #define  FP_Configure      SWIBase+5
  23.  
  24. #ifndef NULL
  25. #  define NULL 0   /* null pointer constant. */
  26. #endif
  27.  
  28. /*****  The variables..  ******************************************************/
  29. os_regset   r;
  30. os_error    *Error;
  31.  
  32. typedef struct
  33.    {                          /* Relevant when calling FontPool..       */
  34.       unsigned Config;        /* _Hello & _Configure                    */
  35.       int      x,             /* _CreateMenu _CreateSubMenu             */
  36.                y,             /* _CreateMenu _CreateSubMenu             */
  37.                *RootMenu;     /* _Create(Sub)Menu & _MenuSelection      */
  38.       char     *FontName;     /* _MenuSelection & _Create(Sub)Menu.     */
  39.       int      *ParentItem;   /* Set once after parent-menu is created. */
  40.       char     *MenuFont;     /* _Configure                             */
  41.       int      SizeX,         /* _Configure                             */
  42.                SizeY,         /* _Configure                             */
  43.                ItemHgt;       /* _Configure                             */
  44.    } FontPool_Struct;
  45.  
  46. /*****  The functions..  ******************************************************/
  47.  
  48. /*==== 'Config' holds the same as FontPool_Hello Reg#1 =======================*/
  49. os_error *FontPool_Hello(FontPool_Struct *FP)
  50. {
  51.    r.r[1]=FP->Config;
  52.    Error=os_swix(FP_Hello, &r);
  53.    *FP->ParentItem=r.r[0];
  54.    return Error;
  55. }
  56.  
  57. /*==== No input. Tells FontPool to decrease the number of clients. ===========*/
  58. void FontPool_Goodbye(void)
  59. {
  60.    os_swi(FP_Goodbye, &r);
  61.    return;
  62. }
  63.  
  64. /*==== The input conforms with the SWI FontPool_CreateMenu ===================*/
  65. os_error *FontPool_CreateMenu(FontPool_Struct *FP)
  66. {
  67.    r.r[1]=(int) FP->FontName;
  68.    r.r[2]=FP->x;
  69.    r.r[3]=FP->y;
  70.    r.r[4]=(int) FP->RootMenu;
  71.    Error=os_swix(FP_CreateMenu, &r);
  72.    *FP->ParentItem=r.r[0];
  73.    return Error;
  74. }
  75.  
  76. /*==== The input conforms with the SWI FontPool_CreateSubMenu ================*/
  77. os_error *FontPool_CreateSubMenu(FontPool_Struct *FP)
  78. {
  79.    r.r[1]=(int) FP->FontName;
  80.    r.r[2]=FP->x;
  81.    r.r[3]=FP->y;
  82.    r.r[4]=0;
  83.    Error=os_swix(FP_CreateSubMenu, &r);
  84.    *FP->ParentItem=r.r[0];
  85.    return Error;
  86. }
  87.  
  88. /*==== The input conforms with the SWI FontPool_MenuSelection ================*/
  89. /* Returns either a pointer to the font-name or NULL if none selected.        */
  90. char *FontPool_MenuSelection(int *Selections, FontPool_Struct *FP)
  91. {
  92.    r.r[1]=(int) FP->RootMenu;
  93.    r.r[2]=(int) Selections;
  94.    r.r[3]=(int) FP->FontName;
  95.    os_swi(FP_MenuSelection, &r);
  96.    if (r.r[0]) return (char *) r.r[3];
  97.  
  98.    return NULL;
  99. }
  100.  
  101. /*==== 'Config' holds the same as FontPool_Hello Reg#1 =======================*/
  102. /* 'Build' is either TRUE (build font-menu) or FALSE (don't build)            */
  103. os_error *FontPool_Configure(FontPool_Struct *FP, BOOL Build)
  104. {
  105.    r.r[1]=FP->Config;
  106.    r.r[2]=(int) Build;
  107.    r.r[3]=(int) FP->MenuFont;
  108.    r.r[4]=FP->SizeX<<24 | FP->SizeY<<8 | FP->ItemHgt;
  109.    Error=os_swix(FP_Configure, &r);
  110.    *FP->ParentItem=r.r[0];
  111.    return Error;
  112. }
  113.