home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 1 / ARM_CLUB_CD.iso / contents / apps / clib / progs / haswinlib / h / haswin next >
Encoding:
Text File  |  1991-02-04  |  50.3 KB  |  1,085 lines

  1. /* -> $.CLIB.H.haswin
  2.  *
  3.  *      HASWIN library main includes file.
  4.  */
  5. #ifndef __haswin_h
  6. #define __haswin_h
  7. #include <stdio.h>
  8. #include <kernel.h>
  9. /*
  10.  *      chunks that I know about (10 Sep. 1990)
  11.  *      0x40000           Econet
  12.  *      0x40040           NetFS
  13.  *      0x40080           Font
  14.  *      0x400C0           WIMP
  15.  *      0x40100
  16.  *      0x40140           Sound
  17.  *      0x40180           Sound
  18.  *      0x401C0           Sound
  19.  *      0x40200           NetPrint
  20.  *      0x40240           ADFS
  21.  *      0x40280           Podule
  22.  *      0x402C0
  23.  *      0x40300           WaveSynth
  24.  *      0x40340           IEEE488
  25.  *      0x40380           Debugger
  26.  *      0x403C0
  27.  *      0x40400
  28.  *      0x40440
  29.  *      0x40480           FPEmulator
  30.  *      0x404C0
  31.  *      0x40500           I/O Podule
  32.  *      0x40540           FileCore
  33.  *      0x40580
  34.  *      0x405C0           Shell
  35.  *      0x40600
  36.  *      0x40640
  37.  *      0x40680
  38.  *      0x406C0           HourGlass
  39.  *      0x40700           Draw
  40.  *      0x40740           ColourTrans
  41.  *      0x40780           RamFS
  42.  *      0x407C0
  43.  *
  44.  *      0x80000
  45.  *      0x80040
  46.  *      0x80080
  47.  *      0x800C0
  48.  *      0x80100
  49.  *      0x80140           Pdriver
  50.  *      0x80180
  51.  *      0x801C0           Toolkit
  52.  *      0x80200
  53.  *      0x80240
  54.  *      0x80280
  55.  *      0x802C0
  56.  *      0x80300
  57.  *      0x80340
  58.  *      0x80380
  59.  *      0x803C0
  60.  *      0x80400
  61.  *      0x80440
  62.  *      0x80480
  63.  *      0x804C0
  64.  *      0x80500
  65.  *      0x80540
  66.  *      0x80580
  67.  *      0x805C0
  68.  *      0x80600
  69.  *      0x80640
  70.  *      0x80680           Shared C Library
  71.  *      0x806C0
  72.  *      0x80700           Haswin
  73.  */
  74.  
  75. /*
  76.  *      these are the HASWIN mouse button codes.  They should be
  77.  *      independent of work area button type, or icon button type and
  78.  *      are returned by the routine "haswin_buttonWIMPtoHASWIN()".
  79.  *      The routine "haswin_buttonHASWINtoWIMP() converts back to
  80.  *      WIMP button codes.
  81.  */
  82. #define HASWIN_MOUSE_R             0x001
  83. #define HASWIN_MOUSE_M             0x002
  84. #define HASWIN_MOUSE_L             0x004
  85. #define HASWIN_MOUSE_RDRAG         0x010
  86. #define HASWIN_MOUSE_MDRAG         0x020
  87. #define HASWIN_MOUSE_LDRAG         0x040
  88. #define HASWIN_MOUSE_RDOUB         0x100
  89. #define HASWIN_MOUSE_MDOUB         0x200
  90. #define HASWIN_MOUSE_LDOUB         0x400
  91.  
  92.  
  93.  
  94. #define HASWIN_WIMP_Swi            0x400C0
  95. #define HASWIN_DRAW_Swi            0x40700
  96. #define HASWIN_PDRIVE_Swi          0x80140
  97. #define HASWIN_HASWIN_Swi          0x80700
  98.  
  99. #define HASWIN_PD_Info             HASWIN_PDRIVE_Swi+0x00
  100. /*
  101.  * #define HASWIN_PD_SetInfo       HASWIN_PDRIVE_Swi+0x01
  102.  */
  103. #define HASWIN_PD_CheckFeatures    HASWIN_PDRIVE_Swi+0x02
  104. #define HASWIN_PD_PageSize         HASWIN_PDRIVE_Swi+0x03
  105. /*
  106.  * #define HASWIN_PD_SetPageSize   HASWIN_PDRIVE_Swi+0x04
  107.  */
  108. #define HASWIN_PD_SelectJob        HASWIN_PDRIVE_Swi+0x05
  109. #define HASWIN_PD_CurrentJob       HASWIN_PDRIVE_Swi+0x06
  110. /*
  111.  * #define HASWIN_PD_FontSWI          HASWIN_PDRIVE_Swi+0x07
  112.  */
  113. #define HASWIN_PD_EndJob           HASWIN_PDRIVE_Swi+0x08
  114. #define HASWIN_PD_AbortJob         HASWIN_PDRIVE_Swi+0x09
  115. #define HASWIN_PD_Reset            HASWIN_PDRIVE_Swi+0x0A
  116. #define HASWIN_PD_GiveRectangle    HASWIN_PDRIVE_Swi+0x0B
  117. #define HASWIN_PD_DrawPage         HASWIN_PDRIVE_Swi+0x0C
  118. #define HASWIN_PD_GetRectangle     HASWIN_PDRIVE_Swi+0x0D
  119. #define HASWIN_PD_CancelJob        HASWIN_PDRIVE_Swi+0x0E
  120. #define HASWIN_PD_ScreenDump       HASWIN_PDRIVE_Swi+0x0F
  121. #define HASWIN_PD_EnumerateJobs    HASWIN_PDRIVE_Swi+0x10
  122. /*
  123.  * #define HASWIN_PD_SetPrinter       HASWIN_PDRIVE_Swi+0x11
  124.  */
  125. #define HASWIN_PD_CancelJobWithError       HASWIN_PDRIVE_Swi+0x12
  126. #define HASWIN_PD_SelectIllustration       HASWIN_PDRIVE_Swi+0x13
  127. #define HASWIN_PD_InsertIllustration       HASWIN_PDRIVE_Swi+0x14
  128.  
  129. #define HASWIN_Initialise          HASWIN_WIMP_Swi+0x00
  130. #define HASWIN_Create_window       HASWIN_WIMP_Swi+0x01
  131. #define HASWIN_Create_icon         HASWIN_WIMP_Swi+0x02
  132. #define HASWIN_Delete_window       HASWIN_WIMP_Swi+0x03
  133. #define HASWIN_Delete_icon         HASWIN_WIMP_Swi+0x04
  134. #define HASWIN_Open_window         HASWIN_WIMP_Swi+0x05
  135. #define HASWIN_Close_window        HASWIN_WIMP_Swi+0x06
  136. #define HASWIN_Poll                HASWIN_WIMP_Swi+0x07
  137. #define HASWIN_Redraw_window       HASWIN_WIMP_Swi+0x08
  138. #define HASWIN_Update_window       HASWIN_WIMP_Swi+0x09
  139. #define HASWIN_Get_rectangle       HASWIN_WIMP_Swi+0x0A
  140. #define HASWIN_Get_window_state    HASWIN_WIMP_Swi+0x0B
  141. #define HASWIN_Get_window_info     HASWIN_WIMP_Swi+0x0C
  142. #define HASWIN_Set_icon_state      HASWIN_WIMP_Swi+0x0D
  143. #define HASWIN_Get_icon_state      HASWIN_WIMP_Swi+0x0E
  144. #define HASWIN_Get_pointer_info    HASWIN_WIMP_Swi+0x0F
  145. #define HASWIN_Drag_box            HASWIN_WIMP_Swi+0x10
  146. #define HASWIN_Force_redraw        HASWIN_WIMP_Swi+0x11
  147. #define HASWIN_Set_caret           HASWIN_WIMP_Swi+0x12
  148. #define HASWIN_Get_caret           HASWIN_WIMP_Swi+0x13
  149. #define HASWIN_Create_menu         HASWIN_WIMP_Swi+0x14
  150. #define HASWIN_Decode_menu         HASWIN_WIMP_Swi+0x15
  151. #define HASWIN_Which_icon          HASWIN_WIMP_Swi+0x16
  152. #define HASWIN_Set_extent          HASWIN_WIMP_Swi+0x17
  153. #define HASWIN_Set_pointer_shape   HASWIN_WIMP_Swi+0x18
  154. #define HASWIN_Open_template       HASWIN_WIMP_Swi+0x19
  155. #define HASWIN_Close_template      HASWIN_WIMP_Swi+0x1A
  156. #define HASWIN_Load_template       HASWIN_WIMP_Swi+0x1B
  157. #define HASWIN_Process_key         HASWIN_WIMP_Swi+0x1C
  158. #define HASWIN_Closedown           HASWIN_WIMP_Swi+0x1D
  159. #define HASWIN_Start_task          HASWIN_WIMP_Swi+0x1E
  160. #define HASWIN_Report_error        HASWIN_WIMP_Swi+0x1F
  161. #define HASWIN_Get_window_outline  HASWIN_WIMP_Swi+0x20
  162. #define HASWIN_Poll_idle           HASWIN_WIMP_Swi+0x21
  163. #define HASWIN_Plot_icon           HASWIN_WIMP_Swi+0x22
  164. #define HASWIN_Set_mode            HASWIN_WIMP_Swi+0x23
  165. #define HASWIN_Set_palette         HASWIN_WIMP_Swi+0x24
  166. #define HASWIN_Read_palette        HASWIN_WIMP_Swi+0x25
  167. #define HASWIN_Set_colour          HASWIN_WIMP_Swi+0x26
  168. #define HASWIN_Send_message        HASWIN_WIMP_Swi+0x27
  169. #define HASWIN_Create_sub_menu     HASWIN_WIMP_Swi+0x28
  170. #define HASWIN_Sprite_operation    HASWIN_WIMP_Swi+0x29
  171. #define HASWIN_Base_of_sprites     HASWIN_WIMP_Swi+0x2A
  172. #define HASWIN_Block_copy          HASWIN_WIMP_Swi+0x2B
  173. #define HASWIN_Slot_size           HASWIN_WIMP_Swi+0x2C
  174. #define HASWIN_Read_pix_trans      HASWIN_WIMP_Swi+0x2D
  175. #define HASWIN_Claim_free_memory   HASWIN_WIMP_Swi+0x2E
  176. #define HASWIN_Command_window      HASWIN_WIMP_Swi+0x2F
  177. #define HASWIN_Text_colour         HASWIN_WIMP_Swi+0x30
  178. #define HASWIN_Transfer_block      HASWIN_WIMP_Swi+0x31
  179. #define HASWIN_Read_sys_info       HASWIN_WIMP_Swi+0x32
  180. #define HASWIN_Set_font_colours    HASWIN_WIMP_Swi+0x33
  181. #define HASWIN_Hourglass_on        0x406C0
  182. #define HASWIN_Hourglass_off       0x406C1
  183.  
  184. #define HASWIN_UNKNOWN             (-1)
  185. #define HASWIN_FALSE                 0
  186. #define HASWIN_TRUE                  1
  187.  
  188. /*
  189.  *      haswin_poll() user routine action flags.
  190.  */
  191. #define HASWIN_POLL_Nothing          0
  192. #define HASWIN_POLL_Redraw           1
  193. #define HASWIN_POLL_Open             2
  194. #define HASWIN_POLL_Close            3
  195. #define HASWIN_POLL_Leaving          4
  196. #define HASWIN_POLL_Entering         5
  197. #define HASWIN_POLL_Mouse            6
  198. #define HASWIN_POLL_Drag             7    
  199. #define HASWIN_POLL_Key              8
  200. #define HASWIN_POLL_Menu             9
  201. #define HASWIN_POLL_Scroll          10
  202. #define HASWIN_POLL_Lose_Caret      11
  203. #define HASWIN_POLL_Gane_Caret      12
  204. #define HASWIN_POLL_Message         17
  205.   #define MESSAGE_Quit              0x00000
  206.   #define MESSAGE_DataSave          0x00001
  207.   #define MESSAGE_DataSaveAck       0x00002
  208.   #define MESSAGE_DataLoad          0x00003
  209.   #define MESSAGE_DataLoadAck       0x00004
  210.   #define MESSAGE_DataOpen          0x00005
  211.   #define MESSAGE_RAMFetch          0x00006
  212.   #define MESSAGE_RAMTransmit       0x00007
  213.   #define MESSAGE_PreQuit           0x00008
  214.   #define MESSAGE_Palette           0x00009
  215.   #define MESSAGE_FilerOpenDir      0x00400
  216.   #define MESSAGE_FilerCloseDir     0x00401
  217.   #define MESSAGE_HelpRequest       0x00502
  218.   #define MESSAGE_HelpReply         0x00503
  219.   #define MESSAGE_Notify            0x40040
  220.   #define MESSAGE_MenuWarning       0x400C0
  221.   #define MESSAGE_ModeChange        0x400C1
  222.   #define MESSAGE_TaskInitialise    0x400C2
  223.   #define MESSAGE_TaskClosedown     0x400C3
  224.   #define MESSAGE_SlotSize          0x400C4
  225.   #define MESSAGE_SetSlot           0x400C5
  226.   #define MESSAGE_TaskNameRq        0x400C6
  227.   #define MESSAGE_TaskNameIs        0x400C7
  228.   #define MESSAGE_PrintFile         0x80140
  229.   #define MESSAGE_WillPrint         0x80141
  230.   #define MESSAGE_PrintSave         0x80142
  231.   #define MESSAGE_PrintInit         0x80143
  232.   #define MESSAGE_PrintBusy         0x80144
  233.   #define MESSAGE_PrintTypeOdd      0x80145
  234.   #define MESSAGE_PrintTypeKnown    0x80146
  235.   #define MESSAGE_SetPrinter        0x80147
  236. /*
  237.  * HASWINs own internal message types.
  238.  */
  239. #define MESSAGE_Haswin_          HASWIN_HASWIN_Swi+0x00
  240.  
  241. #define HASWIN_POLL_Message_Rec     18
  242. #define HASWIN_POLL_Message_Ack     19
  243.  
  244. /*
  245.  *      HASWINs own reason codes.
  246.  */
  247. #define HASWIN_POLL_poll_Open    101 /* poll is going to open a window     */
  248. #define HASWIN_POLL_poll_Close   102 /* poll is going to close a window    */
  249. #define HASWIN_POLL_poll_Menu    103 /* poll is going to open a menu       */
  250. #define HASWIN_POLL_poll_Re_Menu 104 /* poll is going to re-open a menu    */
  251. #define HASWIN_POLL_poll_IHelp   105 /* poll is going to display Icon Help */
  252.                                      /* for 106 see above                  */
  253. #define HASWIN_POLL_poll_MHelp   107 /* poll is going to display Menu Help */
  254. #define HASWIN_POLL_poll_WHelp   108 /* poll is going to display Wind Help */
  255. #define HASWIN_POLL_poll_UQuit   109 /* poll is going to force user QUIT   */
  256. #define HASWIN_POLL_poll_MQuit   110 /* poll has received QUIT message     */
  257. #define HASWIN_POLL_PostRedraw   111 /* called AFTER redraw has been done  */
  258. #define HASWIN_POLL_TimeStep     112 /* a time period has passed           */
  259. #define HASWIN_POLL_poll_Load    113 /* going to load a file               */
  260. #define HASWIN_POLL_poll_Save    114 /* going to save a file               */
  261. #define HASWIN_POLL_Done         115 /* some other routine has done this   */
  262. #define HASWIN_POLL_Scrolled     116 /* after HASWIN has worked out the new
  263.                                         scroll position it used this reason
  264.                                         code to see if it should move the
  265.                                         window                             */
  266. #define HASWIN_POLL_poll_RAMrx   117 /* going to transfer data in via RAM  */
  267. #define HASWIN_POLL_poll_RAMtx   118 /* going to transfer data out via RAM */
  268. #define HASWIN_POLL_poll_Print   119 /* going to print a file              */
  269.  
  270. /*
  271.  *      useful data buffer for all routines
  272.  */
  273. typedef union buffer {
  274.         char    c[256];
  275.         int     i[ 64];
  276. } buffer;
  277.  
  278. /*
  279.  *      this structure holds a menu.  There may be many menus attached to
  280.  *      things such as windows or icons.
  281.  *
  282.  */
  283. typedef struct menu {
  284. /* these things SHOULD NOT BE ALTERED BY THE USER, THEY ARE FOR HASWIN     */
  285.         char            *menu;       /* menu string                        */
  286.         int             *actual;     /* menu data block for menu_decode()  */
  287.         char            *extra;      /* extras string                      */
  288.         int             ifrom;       /* icon and window this menu          */
  289.         int             wfrom;       /* came from ( for haswin_poll() )    */
  290.         short           topx, topy;  /* x, y of top level menu.            */
  291. /* these things are for the user */
  292.         short           x, y;        /* x, y to adjust mouse by            */
  293.         struct window   *mhelp;      /* help information window for MENU   */
  294.         struct window   *ihelp;      /* help information window for ICON   */
  295.         struct window   *whelp;      /* help information window for WINDOW */
  296.         int             (*makemenu)(struct menu *);
  297.                                      /* pointer to routine to call on menu
  298.                                         creation.  This routine changes or
  299.                                         creates the fields of the given menu
  300.                                         block.  If it returns HASWIN_TRUE
  301.                                         the WIMP will create the menu.     */
  302.         int             (*domenu)(char *, struct menu *);
  303.                                      /* pointer to routine to call on menu
  304.                                         selection.  It returns HASWIN_FALSE
  305.                                         to force the menu to close, else
  306.                                         close menu if SELECT clicked, but
  307.                                         not if ADJUST clicked.  The first
  308.                                         parameter is the menu selection as
  309.                                         decoded by SWI(Wimp_DecodeMenu) and
  310.                                         the second is a pointer to the
  311.                                         updated menu block for this menu.  */
  312.         int             (*message)(buffer *, struct menu *);
  313.                                      /* pointer to routine to call if this
  314.                                         open menu has a 'generate message'
  315.                                         bit set somewhere.  The first
  316.                                         parameter is a pointer to the
  317.                                         message block, and the second is a
  318.                                         pointer to the menu itself.        */
  319. } menu;
  320.  
  321. /*
  322.  *      This structure holds a colour palette.  It is mainly used by the
  323.  *      pointer selection bits.
  324.  */
  325. typedef struct palette {
  326.         int             colour[20];
  327. } palette;
  328.  
  329. /*
  330.  *      the pointer structure is returned by haswin_getpointerinfo
  331.  *      and is used by windows to select a pointer automatically on mouse
  332.  *      over the window etc.
  333.  *      Before use call haswin_getpointerinfo() to fill a pointer structure
  334.  *      in.  To move/change the pointer set up a pointer structure and then
  335.  *      use haswin_setpointer().  haswin_pushpointer() and
  336.  *      haswin_poppointer() provide a pointer stack system for temparary
  337.  *      pointers within windows.
  338.  *      The order of items within this structure is to word align things.
  339.  */
  340. typedef struct pointer {
  341.         short           mx, my;      /* mouse X/Y coords (0-1280 max)      */
  342.         int             ihandle, whandle;
  343.                                      /* window/icon handles                */
  344.         struct window   *win;        /* window pointer is over             */
  345.         struct icon     *ic;         /* icon pointer is over               */
  346. #define POINTER_MAXDATA 16
  347.         char            name[POINTER_MAXDATA];
  348.                                      /* pointer sprite name                */
  349.         signed char     activex;     /* active x coord.                    */
  350.         signed char     activey;     /* active y coord.                    */
  351.         unsigned char   number;      /* pointer number 1-4                 */
  352.         unsigned char   buttons;     /* button and key state               */
  353. #define POINTER_MOUSE_R 0x01   /*   right mouse button */
  354. #define POINTER_MOUSE_M 0x02   /*  middle mouse button */
  355. #define POINTER_MOUSE_L 0x04   /*    left mouse button */
  356. #define POINTER_MOUSEBUTTONS   0x07
  357. #define POINTER_MOUSE_S 0x08   /*   Shift pressed down */
  358. #define POINTER_MOUSE_C 0x10   /* Control pressed down */
  359. #define POINTER_MOUSE_A 0x20   /*     Alt pressed down */
  360.         palette         *palette;    /* pointer palette colours.           */
  361.         /* if palette is non-zero and the sprite does not have its own
  362.            palette then use HASWIN_Set_palette on this one on pointer
  363.            selection. */
  364. } pointer;
  365.  
  366. /*
  367.  *      to allow carets to be switched between windows within HASWIN we
  368.  *      have a caret stack.  We may move the caret with haswin_setcaret(),
  369.  *      get the current caret with haswin_getcaret(), and push/pop the
  370.  *      stack with haswin_pushcaret() and haswin_popcaret().
  371.  */
  372. typedef struct caret {
  373. /* these things are for the user */
  374.         struct window   *win;        /* for non-HASWIN windows this is int */
  375.         struct icon     *ic;         /* for non-HASWIN windows this is int */
  376.         int             x, y, height;
  377.         int             colour;
  378.         int             flags;
  379. #define CARET_HEIGHT    0x0000FFFF   /* hieght of caret in OS units        */
  380. #define CARET_COLOUR    0x00FF0000   /* colour if USECOLOUR bit set        */
  381. #define CARET_VDU5      0x01000000   /* use a VDU type 5 caret             */
  382. #define CARET_INVIS     0x02000000   /* invisible caret                    */
  383. #define CARET_USECOLOUR 0x04000000   /* use COLOUR else use WIMP colour 11 */
  384. #define CARET_WIMPCOL   0x08000000   /* COLOUR real else WIMP translates   */
  385. #define CARET_WIMPUSE   0x0F000000   /* flags in "flags" used by WIMP      */
  386. #define CARET_REALCOL   0x10000000   /* make colour ACTUAL colour by EOR   */
  387. #define CARET_HASWIN    0x20000000   /* if set caret in a HASWIN window    */
  388.         int             index;
  389. } caret;
  390.  
  391. /*
  392.  *      windows are kept in a linked list of these things.
  393.  */
  394. typedef struct window {
  395. /* these things SHOULD NOT BE ALTERED BY THE USER, THEY ARE FOR HASWIN */
  396.         char            *win;        /* actual window definition block     */
  397.         int             handle;      /* window handle                      */
  398.         char            *name;       /* window name as read in.            */
  399.         short           numicons;    /* icons in window defn.              */
  400.         char            button;      /* button type 0-15 for click decode  */
  401.         int             flags;       /* WIMP window flags                  */
  402.         short           orgx, orgy;  /* graphics origin in WIMP coords.    */
  403. /*
  404.  *      flags used internally by WIMP system
  405.  *      use haswin routines to alter these.
  406.  *      The flags WIMP does not use, or those always ON or OFF may be used
  407.  *      for other things, and ANDed out.
  408.  *      1= force to '1'      0= force to '0'
  409.  *      X= user setable      R= returned by WIMP routines
  410.  *      .= not used at all
  411.  *      1XXX XXXX 000R RRRR 0001 XX01 .X00 ..X.
  412.  */
  413. #define WINDOW_HASWINUSE 0xFFFFFF72   /* WIMP uses these under HASWIN      */
  414. #define WINDOW_MOVEABLE  0x00000002   /* window may move                   */
  415. /*                       0x00000010      WIMP redraws, NEVER on in HASWIN  */
  416. /*                       0x00000020      PANE window, NEVER on in HASWIN   */
  417. #define WINDOW_TRESPASS  0x00000040   /* window may move off screen        */
  418. /*                       0x00000100      user scroll ALWAYS on in HASWIN   */
  419. /*                       0x00000200      user scroll NEVER on in HASWIN    */
  420. #define WINDOW_GCOL      0x00000400   /* window colours are GCOL numbers   */
  421. #define WINDOW_BACKDROP  0x00000800   /* window cannot have things under it*/
  422. /*                       0x00001000      pass HOT keys thru haswin_processkey
  423.                                          ALWAYS on in HASWIN               */
  424.                       /* 0x0000E000      These MUST always be zero         */
  425. /*
  426.  *      these are set by the WIMP but can be read
  427.  */
  428. #define WINDOW_OPEN      0x00010000   /* this window is open               */
  429. #define WINDOW_TOP       0x00020000   /* this window is on top             */
  430. #define WINDOW_FULL_SIZE 0x00040000   /* this window is toggled full size  */
  431. #define WINDOW_TOGGLED   0x00080000   /* current Open_window_request caused
  432.                                          by toggle to full size            */
  433. #define WINDOW_INPUT     0x00100000   /* window is input focus             */
  434.                       /* 0x00E00000      These MUST always be zero         */
  435. /*
  436.  *      HASWIN always uses the new format window icon flags
  437.  */
  438. #define WINDOW_BACKICON  0x01000000   /* window has a back icon            */
  439. #define WINDOW_CLOSEICON 0x02000000   /* window has a close icon           */
  440. #define WINDOW_TITLE_BAR 0x04000000   /* window has a title bar            */
  441. #define WINDOW_FULLICON  0x08000000   /* window has a toggle size icon     */
  442. #define WINDOW_V_SCROLL  0x10000000   /* window has a vertical scroll bar  */
  443. #define WINDOW_SIZEICON  0x20000000   /* window has a adjust size icon     */
  444. #define WINDOW_H_SCROLL  0x40000000   /* window has a horizontal scroll bar*/
  445. /*                       0x80000000      use bits 24-30 ALWAYS on in HASWIN*/
  446. /* flags for a standard window */
  447. #define WINDOW_STDWINDOW  WINDOW_TITLE_BAR|WINDOW_SIZEICON|WINDOW_CLOSEICON|\
  448.                         WINDOW_BACKICON|WINDOW_H_SCROLL|WINDOW_V_SCROLL|\
  449.                         WINDOW_MOVEABLE|WINDOW_FULLICON
  450.  
  451.  
  452. /*
  453.  *      HASWIN forces some flags on and off as it sees fit, and some are
  454.  *      not used (yet).  To set the flags correctly do the following:
  455.  *
  456. flags = (((wanted_flags & WINDOW_WIMPFLAGS) | WINDOW_FLAGS_OR) & ~WINDOW_FLAGS_AND)
  457.  */
  458.  
  459.  
  460. #define WINDOW_WIMPFLAGS 0x7F000C42   /* HASWIN allows user to change these*/
  461. #define WINDOW_FLAGS_OR  0x80001100   /* HASWIN uses  OR to force these  ON*/
  462. #define WINDOW_FLAGS_AND 0x00E0E230   /* HASWIN uses AND to force these OFF*/
  463.  
  464. /*
  465.  *      Since the WIMP does not use all the flags, or some are forced to
  466.  *      TRUE or FALSE, HASWIN can take a few for itself.
  467.  *
  468. win->flags = (wanted_flags & WINDOW_HASFLAGS)
  469.  */
  470. #define WINDOW_HASFLAGS  0x80E0F3BD   /* HASWIN allows user to change these*/
  471. #define WINDOW_TEMP      0x00000001   /* delete window on close            */
  472. #define WINDOW_DRAGSEL   0x00000004   /* we may drag select in this window */
  473. #define WINDOW_DRAGADJ   0x00000008   /* we may drag adjust in this window */
  474. #define WINDOW_FILER     0x00000010   /* open a filer on ADJUST close      */
  475. #define WINDOW_AUTOTEXT  0x00000020   /* text contents automatic entry     */
  476. #define WINDOW_SELECT    0x00000080   /* select window on mouse entry      */
  477. #define WINDOW_HELPFUL   0x00000100   /* respond to !Help application      */
  478. #define WINDOW_DOCODE    0x00000200   /* execute user code on all actions  */
  479. #define WINDOW_BUTTON_NEVER          (ICON_BUTTON_NEVER       << 12)
  480. #define WINDOW_BUTTON_ALWAYS         (ICON_BUTTON_ALWAYS      << 12)
  481. #define WINDOW_BUTTON_REPEAT         (ICON_BUTTON_REPEAT      << 12)
  482. #define WINDOW_BUTTON_CLICK          (ICON_BUTTON_CLICK       << 12)
  483. #define WINDOW_BUTTON_RELEASE        (ICON_BUTTON_RELEASE     << 12)
  484. #define WINDOW_BUTTON_DCLICK         (ICON_BUTTON_DCLICK      << 12)
  485. #define WINDOW_BUTTON_CLICKDRAG      (ICON_BUTTON_CLICKDRAG   << 12)
  486. #define WINDOW_BUTTON_RELEASEDRAG    (ICON_BUTTON_RELEASEDRAG << 12)
  487. #define WINDOW_BUTTON_DOUBLEDRAG     (ICON_BUTTON_DOUBLEDRAG  << 12)
  488. #define WINDOW_BUTTON_MENU           (ICON_BUTTON_MENU        << 12)
  489. #define WINDOW_BUTTON_EVERYTHING     (ICON_BUTTON_EVERYTHING  << 12)
  490. #define WINDOW_BUTTON_RADIO          (ICON_BUTTON_RADIO       << 12)
  491. #define WINDOW_BUTTON_SILENT         (ICON_BUTTON_SILENT      << 12)
  492. #define WINDOW_BUTTON_13             (ICON_BUTTON_13          << 12)
  493. #define WINDOW_BUTTON_WRITECLICK     (ICON_BUTTON_WRITECLICK  << 12)
  494. #define WINDOW_BUTTON_WRITABLE       (ICON_BUTTON_WRITABLE    << 12)
  495. /* default window work area type to use */
  496. #define WINDOW_BUTTON_DEFAULT        WINDOW_BUTTON_EVERYTHING
  497.  
  498. /*                       0x80000000      not used (yet)                    */
  499. /*                       0x00E00000      these are used by SPRITE_AREA_MASK
  500.                                          to enable spriteareas to be passed
  501.                                          in windows.                       */
  502.         char            *picture;    /* graphics string for window data    */
  503.         struct text     *text;       /* text area or zero for no area      */
  504.         struct window   *pane;       /* pointer to panes                   */
  505.         struct window   *slide;      /* ptr to slides                      */
  506.         struct window   *master;     /* ptr to top window of slides/panes  */
  507.         struct window   *next;       /* ptr to next window                 */
  508.         struct icon     *icons;      /* ptr to list of icons for window    */
  509. /* these things are for the user */
  510.         short           pagex, pagey;
  511.         short           scrollx, scrolly;
  512.                                      /* scroll amounts page/scroll         */
  513.         pointer         *pointer;    /* for SetPointerShape in window      */
  514.         caret           *caret;      /* for caret selection                */
  515.         menu            *menu;       /* menu to open on mouse MENU         */
  516.         struct window   *help;       /* help information window            */
  517.         char            *helpmsg;    /* help string for !Help application  */
  518.  
  519.             /* pointer to routine to call on mouse button press if there is
  520.                no other action to perform.                                 */
  521.             /* paramenter 1 - pointer to window structure                  */
  522.             /* paramenter 2 - pointer to HASWIN_POLL_Mouse buffer          */
  523.         int     (*mousebutton)(struct window *, buffer *);
  524.  
  525.             /* pointer to routine to call on window redraw                 */
  526.             /* parameter 1 - pointer to window structure                   */
  527.             /* parameter 2 - pointer to HASWIN_POLL_Redraw buffer          */
  528.         int     (*drawroutine)(struct window *, buffer *);
  529.  
  530.             /* pointer to routine to call on window open                   */
  531.             /* parameter 1 - pointer to window structure                   */
  532.             /* parameter 2 - pointer to HASWIN_POLL_Open buffer            */
  533.         int     (*openroutine)(struct window *, buffer *);
  534.  
  535.             /* pointer to routine to call on keypress in window            */
  536.             /* parameter 1 - pointer to window structure                   */
  537.             /* parameter 2 - pointer to HASWIN_POLL_Key buffer             */
  538.         int     (*keyroutine)(struct window *, buffer *);
  539.  
  540.             /* pointer to routine to call on drag in window                */
  541.             /* parameter 1 - pointer to window structure                   */
  542.             /* parameter 2 - pointer to icon structure                     */
  543.             /* parameter 3 - pointer to pointer structure                  */
  544.             /* parameter 4 - pointer to HASWIN_POLL_Drag buffer            */
  545.         int     (*dragroutine)(struct window *, struct icon *, struct pointer *, buffer *);
  546.                 /* this routine is called with buffer == 0 at the start of
  547.                    a drag.  If it returns HASWIN_TRUE at this point the
  548.                    default drag action is performed.  This currently makes
  549.                    a rubber band drag box.  At the end of the drag the
  550.                    routine is called again, with buffer pointing to a
  551.                    valid HASWIN_POLL_Drag buffer.                          */
  552.  
  553.  
  554. } window;
  555.  
  556. typedef struct text {
  557.         char            *text;       /* pointer to character data area     */
  558.         int             xsize,ysize; /* X and Y sizes of data area         */
  559.         int             xposn,yposn; /* cursor is before this position     */
  560.         char            fcol, bcol;  /* foreground and background colours  */
  561. } text;
  562.  
  563. #define ICONBAR_LEFT    (struct window *)(-2)
  564. #define ICONBAR_RIGHT   (struct window *)(-1)
  565.  
  566. /*
  567.  *      icons are kept in a linked list of these things
  568.  */
  569. typedef struct icon {
  570. /* these things SHOULD NOT BE ALTERED BY THE USER, THEY ARE FOR HASWIN     */
  571.         int             whandle;     /* window handle                      */
  572.         int             ihandle;     /* icon handle                        */
  573.         char            *name;       /* icon name as read in               */
  574.         char            flags;
  575. #define ICON_CANQUIT      0x01       /* add Quit to menu for this icon     */
  576. #define ICON_DRAGSEL      0x02       /* icon can be dragged with select    */
  577. #define ICON_DRAGADJ      0x04       /* icon can be dragged with adjust    */
  578. #define ICON_DOCODE       0x08       /* execute user code on all actions   */
  579.         char            button;      /* button type 0-15 for click decode  */
  580. #define ICON_BUTTON_NEVER          0x00   /* does respond to MENU however  */
  581. #define ICON_BUTTON_ALWAYS         0x01
  582. #define ICON_BUTTON_REPEAT         0x02
  583. #define ICON_BUTTON_CLICK          0x03
  584. #define ICON_BUTTON_RELEASE        0x04
  585. #define ICON_BUTTON_DCLICK         0x05
  586. #define ICON_BUTTON_CLICKDRAG      0x06
  587. #define ICON_BUTTON_RELEASEDRAG    0x07
  588. #define ICON_BUTTON_DOUBLEDRAG     0x08
  589. #define ICON_BUTTON_MENU           0x09
  590. #define ICON_BUTTON_EVERYTHING     0x0A
  591. #define ICON_BUTTON_RADIO          0x0B
  592. #define ICON_BUTTON_SILENT         0x0C   /* special responds to NOTHING   */
  593. #define ICON_BUTTON_13             0x0D
  594. #define ICON_BUTTON_WRITECLICK     0x0E
  595. #define ICON_BUTTON_WRITABLE       0x0F
  596. /* default icon button type to use */
  597. #define ICON_BUTTON_DEFAULT        ICON_BUTTON_EVERYTHING
  598.         int             *ic;         /* pointer to icon data block         */
  599.  
  600. /* these things are for the user */
  601.         window          *window;     /* window to open on mouse SELECT     */
  602.         menu            *menu;       /* menu to open on mouse MENU         */
  603.         window          *help;       /* help window for icon               */
  604.         char            *helpmsg;    /* help string for !Help application  */
  605.                 /* pointer to routine to call on mouse button press        */
  606.                 /* parameter 1 - pointer to mouse block                    */
  607.                 /* parameter 2 - pointer to icon structure                 */
  608.         int             (*mousebutton)(struct icon *, buffer *);
  609.  
  610.             /* pointer to routine to call on drag of icon in window        */
  611.             /* parameter 1 - pointer to window structure                   */
  612.             /* parameter 2 - pointer to icon structure                     */
  613.             /* parameter 3 - pointer to pointer structure                  */
  614.             /* parameter 4 - pointer to HASWIN_POLL_Drag buffer            */
  615.         int     (*dragroutine)(struct window *, struct icon *, struct pointer *, buffer *);
  616.                 /* this routine is called with buffer == 0 at the start of
  617.                    a drag.  If it returns HASWIN_TRUE at this point the
  618.                    default drag action is performed.  This currently makes
  619.                    a fixed size drag box, the size of the icon.  At the
  620.                    end of the drag the routine is called again, with buffer
  621.                    pointing to a valid HASWIN_POLL_Drag buffer.            */
  622.         struct icon     *next;       /* pointer to next icon               */
  623. } icon;
  624.  
  625. /*
  626.  *      this structure holds the information for printer drivers
  627.  */
  628. typedef struct pdriver {
  629. /* information from SWI(PDriver_Info) */
  630.         int             version;     /* version number                     */
  631.         int             xres, yres;  /* X and Y resolutions in dots/inch   */
  632.         int             features;    /* features word                      */
  633.         char            *name;       /* description of printer             */
  634.         int             xhres,yhres; /* X and Y halftone resolution        */
  635.         int             ident;       /* driver internal identity number    */
  636. /* information from SWI(PDriver_PageSize) */
  637.         int           xpaper,ypaper; /* X and Y size of paper              */
  638.         int           lprint,bprint; /* left, bottom of paper print area   */
  639.         int           rprint,tprint; /* right,   top of paper print area   */
  640. /* information from SWI(PDriver_CurrentJob) */
  641.         int             jobid;       /* file handle of this job. (or 0)    */
  642. /* general HASWIN information */
  643.         char            *title;      /* title string for job               */
  644.         char            *fname;      /* filename associated with job.      */
  645.         int           xscale,yscale; /* scale factors <<16                 */
  646.         int             xsize,ysize; /* current size of picture in printer
  647.                                         units.                             */
  648.         short           rotate;      /* angle of Y axes, clockwise, 0=up   */
  649. } pdriver;
  650.  
  651. /*
  652.  *      VDU variables codes.
  653.  *
  654.  *      VDUVAR_<name> are the codes to give the HASWIN routines to get the
  655.  *      VDU variable <name>.
  656.  */
  657.  
  658. #define VDUVAR_ModeFlags        0
  659. #define VDUVAR_ScrRCol          1
  660. #define VDUVAR_ScrBRow          2
  661. #define VDUVAR_NColour          3
  662. #define VDUVAR_XEigFactor       4
  663. #define VDUVAR_YEigFactor       5
  664. #define VDUVAR_LineLength       6
  665. #define VDUVAR_ScreenSize       7
  666. #define VDUVAR_YShftFactor      8
  667. #define VDUVAR_Log2BPP          9
  668. #define VDUVAR_Log2BPC         10
  669. #define VDUVAR_XWindLimit      11
  670. #define VDUVAR_YWindLimit      12
  671. #define VDUVAR_GWLCol          13
  672. #define VDUVAR_GWBRow          14
  673. #define VDUVAR_GWRCol          15
  674. #define VDUVAR_GWTRow          16
  675. #define VDUVAR_TWLCol          17
  676. #define VDUVAR_TWBRow          18
  677. #define VDUVAR_TWRCol          19
  678. #define VDUVAR_TWTRow          20
  679. #define VDUVAR_OrgX            21
  680. #define VDUVAR_OrgY            22
  681. #define VDUVAR_GCsX            23
  682. #define VDUVAR_GCsY            24
  683. #define VDUVAR_OlderGCsX       25
  684. #define VDUVAR_OlderGCsY       26
  685. #define VDUVAR_OldGCsX         27
  686. #define VDUVAR_OldGCsY         28
  687. #define VDUVAR_GCsIX           29
  688. #define VDUVAR_GCsIY           30
  689. #define VDUVAR_NewPtX          31
  690. #define VDUVAR_NewPtY          32
  691. #define VDUVAR_ScreenStart     33
  692. #define VDUVAR_DisplayStart    34
  693. #define VDUVAR_TotalScreenSize 35
  694. #define VDUVAR_GPLFMD          36
  695. #define VDUVAR_GPLBMD          37
  696. #define VDUVAR_GFCOL           38
  697. #define VDUVAR_GBCOL           39
  698. #define VDUVAR_TForeCol        40
  699. #define VDUVAR_TBackCol        41
  700. #define VDUVAR_GFTint          42
  701. #define VDUVAR_GBTint          43
  702. #define VDUVAR_TFTint          44
  703. #define VDUVAR_TBTint          45
  704. #define VDUVAR_MaxMode         46
  705. #define VDUVAR_GCharSizeX      47
  706. #define VDUVAR_GCharSizeY      48
  707. #define VDUVAR_GCharSpaceX     49
  708. #define VDUVAR_GCharSpaceY     50
  709. #define VDUVAR_HLineAddr       51
  710. #define VDUVAR_TCharSizeX      52
  711. #define VDUVAR_TCharSizeY      53
  712. #define VDUVAR_TCharSpaceX     54
  713. #define VDUVAR_TCharSpaceY     55
  714. #define VDUVAR_GcolOraEorAddr  56
  715. #define VDUVAR_WindowWidth     57
  716. #define VDUVAR_WindowHeight    58
  717. #define VDUVAR_ModeNumber      59 /* current mode, updated by OS_BYTE(135) */
  718. #define VDUVAR_CharXsize       60 /* current width of text characters      */
  719. #define VDUVAR_CharYsize       61 /* current hieght of text characters     */
  720. #define VDUVAR_ScreenXsize     62 /* total width of screen on OS units     */
  721. #define VDUVAR_ScreenYsize     63 /* total hieght of screen on OS units    */
  722.  
  723. #define VDUVAR_MAXVARS         64
  724.  
  725. #define TASK_MAXNAME       32  /* max length of a name of a task           */
  726. #define HASWIN_ACTIVEMAX  256  /* max windows in active list               */
  727. #define HASWIN_SPRITEFILE      "<HASwin$Path>Sprites"
  728. #define HASWIN_TEMPLATEFILE    "<HASwin$Path>Templates"
  729.  
  730. /*
  731.  *      forward definitions of all haswin routines for users
  732.  *      (some of these are actually #defines)
  733.  */
  734. #define haswin_bell() {\
  735.                               _kernel_swi_regs regs, ans;\
  736.                               _kernel_swi(0x107, ®s, &ans);\
  737.                       }
  738. int     haswin_addactivelist(int);
  739. int     haswin_addgraphics(window *, char *);
  740. int     haswin_addhaswinsprites(char *);
  741. int     haswin_addspritearea(int **);
  742. int     *haswin_addsprites(char *, int *);
  743. int     haswin_addusersprites(char *);
  744. int     haswin_buttonHASWINtoWIMP(window *, icon *, int);
  745. int     haswin_buttonWIMPtoHASWIN(window *, icon *, int);
  746. int     haswin_canbuttondouble(int);
  747. int     haswin_canbuttondrag(int);
  748. int     haswin_canbuttonselect(int);
  749. int     haswin_canbuttonwrite(int);
  750. int     haswin_canbuttontwice(int);
  751. void    haswin_circle(window *, int, int, int);
  752. int     haswin_clearfileoptions(int);
  753. void    haswin_circlefill(window *, int, int, int);
  754. int     haswin_clearflags(int);
  755. int     haswin_cleargraphics(window *);
  756. void    haswin_clearhaswinsprites(int);
  757. int     haswin_cleariconflags(icon *, int);
  758. int     *haswin_clearsprites(int, int *);
  759. void    haswin_clearusersprites(int);
  760. int     haswin_clearwindowflags(window *, int);
  761. int     haswin_closefiler(char *, char *);
  762. void    haswin_closetemplate(void);
  763. void    haswin_closewindow(window *);
  764. int     haswin_convertscrxtotxt(window *, int);
  765. int     haswin_convertscrxytotxt(window *, int *, int *);
  766. int     haswin_convertscrytotxt(window *, int);
  767. int     haswin_convertscrxtowin(window *, int);
  768. int     haswin_convertscrxytowin(window *, int *, int *);
  769. int     haswin_convertscrytowin(window *, int);
  770. int     haswin_converttxtxtoscr(window *, int);
  771. int     haswin_converttxtytoscr(window *, int);
  772. int     haswin_converttxtxytoscr(window *, int *, int *);
  773. int     haswin_converttxtxtowin(window *, int);
  774. int     haswin_converttxtytowin(window *, int);
  775. int     haswin_converttxtxytowin(window *, int *, int *);
  776. int     haswin_convertwinxtoscr(window *, int);
  777. int     haswin_convertwinxtotxt(window *, int);
  778. int     haswin_convertwinxytoscr(window *, int *, int *);
  779. int     haswin_convertwinxytotxt(window *, int *, int *);
  780. int     haswin_convertwinytoscr(window *, int);
  781. int     haswin_convertwinytotxt(window *, int);
  782. window  *haswin_copywindow(window *);
  783. icon    *haswin_createicon(window *, char *, int, int, int,  int, int, int,
  784.                 int);
  785. int     haswin_createmenu(window *, icon *, char *, int (*)(char *, menu *),
  786.                 int, int);
  787. void    haswin_decodefiletype(int, char *);
  788. int     haswin_deletehaswinsprite(char *);
  789. int     haswin_deletesprite(char *, int *);
  790. int     haswin_deleteusersprite(char *);
  791. void    haswin_deletewindow(window *);
  792. int     haswin_doespdriverexist(void);
  793. void    haswin_draw(window *, int, int);
  794. void    haswin_drawby(window *, int, int);
  795. int     haswin_encodefiletype(char *);
  796. void    haswin_errorbox(char *);
  797. int     haswin_errorprintf(char *, ...);
  798. void    haswin_execcommand(char *);
  799. void    haswin_exit(int);
  800. int     haswin_fileinitialise(void);
  801. void    haswin_fill(window *, int, int);
  802. int     haswin_findallwindows(int *, int);
  803. int     haswin_findfont(char *, int, int, int, int);
  804. icon    *haswin_findiconhandle(window *, int);
  805. icon    *haswin_findiconname(window *, char *);
  806. icon    *haswin_findicontitle(window *, char *);
  807. window  *haswin_findmasterhandle(int);
  808. window  *haswin_findmasterwindow(window *);
  809. int     haswin_findsprite(char *);
  810. #define SPRITE_AREA_MASK             0x00E00000
  811. #define SPRITE_HASWIN_AREA           0x00200000
  812. #define SPRITE_RISCOS_AREA           0x00400000
  813. #define SPRITE_SYSTEM_AREA           0x00600000
  814. #define SPRITE_USER_AREA             0x00800000
  815. #define SPRITE_WIMP_AREA             0x00A00000
  816.  
  817. int     haswin_findtaskid(int);
  818. int     haswin_findtaskidwin(int);
  819. char    *haswin_findtasknamewin(int);
  820. window  *haswin_findwindowhandle(int);
  821. window  *haswin_findwindowname(char *);
  822. void    haswin_finishedfonts(void);
  823. int     haswin_freeblock(void *);
  824. int     haswin_freemenu(menu *);
  825.  
  826. /*
  827.  *      is there a bug in the compiler that does not allow implicit casts
  828.  *      to void** but does allow cast to void* ??
  829.  *      the #define gets around this by casting explicitly
  830.  */
  831. #define haswin_freeptr(x)    _haswin_freeptr((void **)(x))
  832. int     _haswin_freeptr(void **);
  833.  
  834. int     haswin_free(void *);
  835. int     haswin_forceredraw(window *, int, int, int, int);
  836. void    haswin_gcol(window *, int, int);
  837. caret   *haswin_getcaretinfo(caret *);
  838. char    *haswin_getcommandline(void);
  839. int     haswin_getexternaltaskname(char **, int);
  840. int     haswin_getfileoptions(void);
  841. #define HASWIN_OPTIONS_ADD    0x0001 /* if set add data files, not replace */
  842. int     haswin_getflags(void);
  843. int     haswin_getfreespacesize(void);
  844. int     haswin_geticonflags(icon *);
  845. char    *haswin_geticonname(icon *);
  846. char    *haswin_geticontitle(icon *);
  847. int     haswin_geticonxmax(icon *);
  848. int     haswin_geticonxmin(icon *);
  849. int     haswin_geticonymax(icon *);
  850. int     haswin_geticonymin(icon *);
  851. int     haswin_getnextslotsize(void);
  852. palette *haswin_getpalette(palette *);
  853. pdriver *haswin_getpdriverinfo(pdriver *);
  854. pointer *haswin_getpointerinfo(pointer *);
  855. int     haswin_getprogramtop(void);
  856. int     haswin_getspritearea(int);
  857. int     *haswin_getstarttime(void);
  858. int     haswin_gettaskid(void);
  859. int     haswin_getthisslotsize(void);
  860. char    *haswin_gettaskname(void);
  861. int     haswin_getuserheapsize(void);
  862. int     haswin_getversion(void);
  863. int     haswin_getwindowbhandle(window *);
  864. int     haswin_getwindowcaret(window *, int *, int *);
  865. int     haswin_getwindowflags(window *);
  866. char    *haswin_getwindowname(window *);
  867. char    *haswin_getwindowtitle(window *);
  868. int     haswin_getwindowxextent(window *);
  869. int     haswin_getwindowxorigin(window *);
  870. int     haswin_getwindowxmax(window *);
  871. int     haswin_getwindowxmin(window *);
  872. int     haswin_getwindowxscroll(window *);
  873. int     haswin_getwindowyextent(window *);
  874. int     haswin_getwindowyorigin(window *);
  875. int     haswin_getwindowymax(window *);
  876. int     haswin_getwindowymin(window *);
  877. int     haswin_getwindowyscroll(window *);
  878. int     haswin_graphicsprintf(window *, char *, ...);
  879. int     haswin_helpreply(char *, buffer *);
  880. int     haswin_holdmousetowindow(window *);
  881. int     haswin_hourglass(int);
  882. int     haswin_icontosprite(icon *, char *, int *);
  883. int     haswin_inactivelist(int);
  884. int     haswin_initerrorhandlers(void);
  885.  
  886. int     haswin_initialise(char *, int, int);
  887. #define HASWIN_FLAGS_USED     0xFFFF7F /* used HASWIN flags                */
  888. #define HASWIN_FLAGS_STARTED  0x800000 /* initialised WIMP                 */
  889. #define HASWIN_FLAGS_TEMPLATE 0x400000 /* a template file is open          */
  890. #define HASWIN_FLAGS_DRAG     0x200000 /* dragbox is on                    */
  891. #define HASWIN_FLAGS_EHANDLER 0x100000 /* an error handler is installed    */
  892. #define HASWIN_FLAGS_QUITING  0x080000 /* performing a quit operation      */
  893. #define HASWIN_FLAGS_SAVING   0x040000 /* doing an auto save               */
  894. #define HASWIN_FLAGS_LOADING  0x020000 /* doing an auto load               */
  895. #define HASWIN_FLAGS_PRINTING 0x010000 /* doing an auto print              */
  896. #define HASWIN_FLAGS_KILLWS   0x008000 /* kill <Wimp$Scrap> after autosave */
  897. #define HASWIN_FLAGS_MEMORY   0x004000 /* memory manager is running        */
  898. #define HASWIN_FLAGS_FILEAUTO 0x002000 /* auto file load/save facility     */
  899. #define HASWIN_FLAGS_TASKIS   0x001000 /* task name required message sent  */
  900. #define HASWIN_FLAGS_RAMGO    0x000800 /* ram transfer in progress         */
  901. #define HASWIN_FLAGS_FILEMENU 0x000400 /* add File> to iconbar icon menus  */
  902. #define HASWIN_FLAGS_INFOWIN  0x000200 /* add Info> to iconbar icon menus  */
  903. #define HASWIN_FLAGS_PRINTER  0x000100 /* printer system initialised       */
  904. /*                            0x000080    not used (yet)                   */
  905.  
  906.         /* above are internal to HASWIN, below are user setable            */
  907. #define HASWIN_INIT_USERFLAGS 0x00007F /* user parts of haswin_flags       */
  908. #define HASWIN_FLAGS_FASTPOLL 0x000040 /* use WIMP_Poll not WIMP_PollIdle  */
  909.                            /* gives fast return from haswin_poll() routine */
  910. #define HASWIN_FLAGS_HELPFUL  0x000020 /* respond to Help requests         */
  911. #define HASWIN_FLAGS_PROFILE  0x000010 /* produce profile output           */
  912. #define HASWIN_FLAGS_ONEPROG  0x000008 /* once running prevent any other   */
  913. #define HASWIN_FLAGS_SETSLOT  0x000004 /* we can change memory slot size   */
  914. #define HASWIN_FLAGS_SINGLE   0x000002 /* single tasking operation         */
  915. #define HASWIN_FLAGS_VERBOSE  0x000001 /* error windows from haswin_poll   */
  916.  
  917. int     haswin_initmemorymanager(void);
  918. int     haswin_initialisepdriver(void);
  919. int     haswin_initialiseuserheap(int);
  920. void    haswin_internalerror(char *);
  921. int     haswin_interrorprintf(char *, ...);
  922. int     haswin_killmemorymanager(void);
  923. window  *haswin_loadpanewindow(window *, char *, int);
  924. window  *haswin_loadslidewindow(window *, char *, int);
  925. int     haswin_loadusersprites(char *);
  926. window  *haswin_loadwindow(char *, int);
  927. caret   *haswin_makecaret(window *, icon *, int, int, int, int, int, int);
  928. int     haswin_makehaswinsprite(char *, int, int, int);
  929. menu    *haswin_makemenu(menu *, char *, int (*)(struct menu *),
  930.                 int (*)(char *, struct menu *),
  931.                 int (*)(buffer *, struct menu *));
  932. window  *haswin_makepanewindow(window *, char *, int, int, int, int, int,
  933.                 int, int);
  934. pointer *haswin_makepointer(char *, int, int);
  935. window  *haswin_makeslidewindow(window *, char *, int, int, int, int, int,
  936.                 int, int);
  937. int     haswin_makesprite(char *, int *,int, int, int);
  938. int     haswin_makeusersprite(char *, int, int, int);
  939. int     haswin_maketextoverlay(window *, int, int, char, char);
  940. window  *haswin_makewindow(char *, int, int, int, int, int, int, int);
  941. void    *haswin_mallocblock(void *, size_t, char *, char *);
  942. void    *haswin_malloc(size_t, char *, char *);
  943. int     haswin_newiconflags(icon *, int);
  944. int     haswin_newwindowflags(window *, int);
  945. int     haswin_ok_cancel(char *);
  946. int     haswin_ok_cancelprintf(char *, ...);
  947. #define HASWIN_OK                 1
  948. #define HASWIN_CANCEL             2
  949.  
  950. int     haswin_openfiler(char *, char *);
  951. int     haswin_opentemplate(char *);
  952. int     haswin_openwindow(window *, int, int, int, int, int, int, int);
  953. void    haswin_pdriverclosedown(void);
  954. int     haswin_pdriverendjob(pdriver *);
  955. pdriver *haswin_pdriverfindjob(int );
  956. int     haswin_pdriverkilljob(pdriver *);
  957. pdriver *haswin_pdrivermakejob(char *, char *, pdriver *);
  958. int     haswin_pdriverselect(int);
  959. int     haswin_pdriverselectjob(pdriver *);
  960. int     haswin_placepointer(window *, int, int);
  961. int     haswin_poll(void);
  962. int     haswin_pollcomplete(void);
  963. int     haswin_popautofileroutine(void);
  964. int     haswin_popcaret(void);
  965. int     haswin_poploadfileroutine(void);
  966. int     haswin_poppointer(int);
  967. int     haswin_popsavefileroutine(void);
  968. int     haswin_poptemplate(void);
  969. int     haswin_printwindow(window *, char *, char *);
  970. int     haswin_pushautofileroutine(int (*)(char *,buffer *), char *, char *);
  971. int     haswin_pushcaret(caret *);
  972. int     haswin_pushloadfileroutine(int (*)(char *,buffer *), char *, char *);
  973. int     haswin_pushpointer(pointer *, int);
  974. int     haswin_pushsavefileroutine(int (*)(char *,buffer *), char *, char *);
  975. int     haswin_pushtemplate(char *);
  976. int     haswin_readvduvariable(int);
  977. void    *haswin_realloc(void *, size_t, char *, char *);
  978. int     haswin_recreatemenu(void);
  979. void    haswin_rectangle(window *, int, int, int, int);
  980. void    haswin_rectanglefill(window *, int, int, int, int);
  981. void    haswin_redrawwindow(window *, int, int, int, int);
  982. int     haswin_removeactivelist(int);
  983. #define haswin_removemenu()       haswin_createmenu(0, 0, 0, 0, 0, 0)
  984. int     haswin_removespritearea(int **);
  985. int     haswin_reopenwindow(window *);
  986. int     haswin_resizewindow(window *, int, int, int);
  987. void    haswin_restoreerrorhandlers(void);
  988. void    haswin_loadfilemugwatch(int);
  989. void    haswin_savefilemugwatch(int);
  990. #define HASWIN_MUGWATCH_DOWN      (-1)
  991. #define HASWIN_MUGWATCH_OFF       0
  992. #define HASWIN_MUGWATCH_UP        (+1)
  993.  
  994. int     haswin_saveusersprites(char *);
  995. #define haswin_selecticon(ic)\
  996.                 haswin_seticonstate(ic, 0x00200000, 0x00200000)
  997. void    haswin_setautoloadroutine(int (*)(char *, buffer *), char *);
  998. int     haswin_setcaret(caret *);
  999. int     haswin_setexittrap(int (*)(int));
  1000. int     haswin_setfiletype(char *, int);
  1001. int     haswin_setfileoptions(int);
  1002. int     haswin_setflags(int);
  1003. #define haswin_seticonbcol(ic, col)\
  1004.                 haswin_seticonstate(ic, 0xF0000000, ( col & 0x0F)<<28)
  1005. int     haswin_seticondata(icon *, char *);
  1006. #define haswin_seticonesg(ic, esg)\
  1007.                 haswin_seticonstate(ic, 0x001F0000, ( esg & 0x1F)<<16)
  1008. #define haswin_seticonfcol(ic, col)\
  1009.                 haswin_seticonstate(ic, 0x0F000000, ( col & 0x0F)<<24)
  1010. int     haswin_seticonflags(icon *, int);
  1011. void    haswin_seticonstate(icon *, int, int);
  1012. int     haswin_setinfowindow(char *, char *, char *, char *);
  1013. void    haswin_setloadfileroutine(int (*)(char *, buffer *), char *, char *);
  1014. void    haswin_setpalette(palette *);
  1015. int     haswin_setpointer(pointer *, int);
  1016. void    haswin_setprintfileroutine(int (*)(char *, buffer *));
  1017. void    haswin_setsavefileroutine(int (*)(char *, buffer *), char *, char *);
  1018. void    haswin_setramtxroutine(int (*)(void *, int, int, buffer *), int);
  1019. void    haswin_setramrxroutine(int (*)(void *, int, int, buffer *), int);
  1020. int     haswin_setuserpollroutine(int (*)(int, buffer *));
  1021. int     haswin_setwindowflags(window *, int);
  1022. int     haswin_setwindoworigin(window *, int, int);
  1023. int     haswin_spriteop(char *, _kernel_swi_regs *);
  1024. int     haswin_swi(int, _kernel_swi_regs *);
  1025. void    haswin_taskclosedown(void);
  1026. int     haswin_taskinitialise(char *);
  1027. int     haswin_textclearmark(window *, int, int, int, int);
  1028. int     haswin_textdeletechar(window *, int, int);
  1029. int     haswin_textdeleteline(window *, int);
  1030. int     haswin_textgetchar(window *, int, int);
  1031. int     haswin_textgetxposn(window *);
  1032. int     haswin_textgetyposn(window *);
  1033. int     haswin_textgetxsize(window *);
  1034. int     haswin_textgetysize(window *);
  1035. int     haswin_textinsertchar(window *, int, int);
  1036. int     haswin_textinsertline(window *, int);
  1037. text    *haswin_textmakearea(text *, int, int, char, char);
  1038. int     haswin_textmove(window *, int, int);
  1039. int     haswin_textprintf(window *, char *, ...);
  1040. int     haswin_textredraw(window *, int, int, int, int);
  1041. int     haswin_textscrolldown(window *);
  1042. int     haswin_textscrollleft(window *);
  1043. int     haswin_textscrollright(window *);
  1044. int     haswin_textscrollup(window *);
  1045. int     haswin_textsetmark(window *, int, int, int, int);
  1046. int     haswin_textvdu(window *, char);
  1047. int     haswin_updateallvduvariables(int *);
  1048. void    haswin_updatefullwindowinfo(window *);
  1049. int     haswin_updatevduvariable(int);
  1050. void    haswin_updatewindowinfo(window *);
  1051. #define haswin_unselecticon(ic)\
  1052.                 haswin_seticonstate(ic, 0x00200000, 0x00000000)
  1053. int     haswin_userfree(void *);
  1054. void    *haswin_usermalloc(size_t, char *, char *);
  1055. void    *haswin_userrealloc(void *, size_t, char *, char *);
  1056. int     haswin_validpointer(void *);
  1057. int     haswin_windowtosprite(window *, char *, int *);
  1058.  
  1059. /*
  1060.  *      useful graphics primitives
  1061.  */
  1062. void    graphics_plotxy(int, int, int);
  1063. #define graphics_circle(x, y, r)           graphics_move(x, y);\
  1064.         graphics_plotxy(149, x+r, y)
  1065. #define graphics_circlefill(x, y, r)       graphics_move(x, y);\
  1066.         graphics_plotxy(157, x+r, y)
  1067. #define graphics_draw(x, y)                graphics_plotxy(5, x, y)
  1068. #define graphics_drawby(x, y)              graphics_plotxy(1, x, y)
  1069. #define graphics_fill(x, y)                graphics_plotxy(133, x, y)
  1070. #define graphics_gcol(c, g)                haswin_swi(OS_WriteI+18, 0);\
  1071.         haswin_swi(0x100+(c & 0xFF), 0);\
  1072.         haswin_swi(0x100+(g & 0xFF), 0)
  1073. #define graphics_move(x, y)                graphics_plotxy(4, x, y)
  1074. #define graphics_moveby(x, y)              graphics_plotxy(0, x, y)
  1075. #define graphics_rectangle(x, y, w, h)     graphics_move(x, y);\
  1076.         graphics_draw(x+w, y);\
  1077.         graphics_draw(x+w, y+h);\
  1078.         graphics_draw(x, y+h);\
  1079.         graphics_draw(x, y)
  1080. #define graphics_rectanglefill(x, y, w, h) graphics_move(x, y);\
  1081.         graphics_plotxy(101, x+w, y+h)
  1082.  
  1083. #endif
  1084.  
  1085.