1 #ifndef LIBAMI_H 2 #define LIBAMI_H 3 4 #include <X11/Xlib.h> 5 #include <X11/Xmd.h> 6 7 #ifdef AMIGAOS 8 #include <exec/types.h> 9 #include <exec/nodes.h> 10 #include <exec/lists.h> 11 #include <utility/hooks.h> 12 #include <dos/dos.h> 13 #include <dos/rdargs.h> 14 #include <proto/exec.h> 15 #include <proto/dos.h> 16 #include <proto/icon.h> 17 #include <proto/iffparse.h> 18 #include <proto/locale.h> 19 #else 20 21 #define GLOBAL extern 22 #define IMPORT extern 23 #define STATIC static 24 #define REGISTER register 25 26 #ifndef VOID 27 #define VOID void 28 #endif 29 30 #ifndef BYTE 31 #define BYTE Amiga_BYTE 32 #endif 33 #ifndef BOOL 34 #define BOOL Amiga_BOOL 35 #endif 36 37 typedef void *APTR; 38 typedef INT32 LONG; 39 typedef CARD32 ULONG; 40 typedef BITS32 LONGBITS; 41 typedef INT16 WORD; 42 typedef CARD16 UWORD; 43 typedef BITS16 WORDBITS; 44 typedef INT8 BYTE; 45 typedef CARD8 UBYTE; 46 typedef CARD8 BYTEBITS; 47 typedef CARD16 RPTR; 48 typedef unsigned char *STRPTR; 49 typedef INT16 BOOL; 50 51 #ifndef TRUE 52 #define TRUE 1 53 #endif 54 #ifndef FALSE 55 #define FALSE 0 56 #endif 57 #ifndef NULL 58 #define NULL 0L 59 #endif 60 61 #define WF_NOICONIFY 1 62 63 struct Node { 64 struct Node *ln_Succ; 65 struct Node *ln_Pred; 66 UBYTE ln_Type; 67 BYTE ln_Pri; 68 char *ln_Name; 69 }; 70 71 struct MinNode { 72 struct MinNode *mln_Succ; 73 struct MinNode *mln_Pred; 74 }; 75 76 struct List { 77 struct Node *lh_Head; 78 struct Node *lh_Tail; 79 struct Node *lh_TailPred; 80 UBYTE lh_Type; 81 UBYTE l_pad; 82 }; 83 84 struct MinList { 85 struct MinNode *mlh_Head; 86 struct MinNode *mlh_Tail; 87 struct MinNode *mlh_TailPred; 88 }; 89 90 extern void AddHead(struct List *, struct Node *); 91 extern void AddTail(struct List *, struct Node *); 92 extern void Enqueue(struct List *, struct Node *); 93 extern struct Node *FindName(struct List *, STRPTR); 94 extern void Insert(struct List *, struct Node *, struct Node *); 95 extern struct Node *RemHead(struct List *); 96 extern void Remove(struct Node *); 97 extern struct Node *RemTail(struct List *); 98 extern void NewList(struct List *); 99 100 struct CSource { 101 UBYTE *CS_Buffer; 102 LONG CS_Length; 103 LONG CS_CurChr; 104 }; 105 106 struct RDArgs { 107 struct CSource RDA_Source; 108 void *RDA_DAList; 109 UBYTE *RDA_Buffer; 110 LONG RDA_BufSiz; 111 UBYTE *RDA_ExtHelp; 112 LONG RDA_Flags; 113 }; 114 115 struct Image 116 { 117 WORD LeftEdge, TopEdge, Width, Height, Depth; 118 UWORD *ImageData; 119 UBYTE PlanePick, PlaneOnOff; 120 struct Image *NextImage; 121 }; 122 123 struct Gadget 124 { 125 struct Gadget *NextGadget; 126 WORD LeftEdge, TopEdge, Width, Height; 127 UWORD Flags, Activation, GadgetType; 128 APTR GadgetRender, SelectRender; 129 struct IntuiText *GadgetText; 130 LONG MutualExclude; 131 APTR SpecialInfo; 132 UWORD GadgetID; 133 APTR UserData; 134 }; 135 136 struct NewWindow 137 { 138 WORD LeftEdge, TopEdge, Width, Height; 139 UBYTE DetailPen, BlockPen; 140 ULONG IDCMPFlags, Flags; 141 struct Gadget *FirstGadget; 142 struct Image *CheckMark; 143 UBYTE *Title; 144 struct Screen *Screen; 145 struct BitMap *BitMap; 146 WORD MinWidth, MinHeight; 147 UWORD MaxWidth, MaxHeight; 148 UWORD Type; 149 }; 150 151 struct DrawerData { 152 struct NewWindow dd_NewWindow; 153 LONG dd_CurrentX; 154 LONG dd_CurrentY; 155 ULONG dd_Flags; 156 UWORD dd_ViewModes; 157 }; 158 159 struct DiskObject { 160 UWORD do_Magic; 161 UWORD do_Version; 162 struct Gadget do_Gadget; 163 UBYTE do_Type; 164 char *do_DefaultTool; 165 char **do_ToolTypes; 166 LONG do_CurrentX; 167 LONG do_CurrentY; 168 struct DrawerData *do_DrawerData; 169 char *do_ToolWindow; 170 LONG do_StackSize; 171 }; 172 173 struct Hook 174 { 175 struct MinNode h_MinNode; 176 ULONG (*h_Entry)(); /* assembler entry point */ 177 ULONG (*h_SubEntry)(); /* often HLL entry point */ 178 APTR h_Data; /* owner specific */ 179 }; 180 181 struct IFFHandle 182 { 183 ULONG iff_Stream; 184 ULONG iff_Flags; 185 LONG iff_Depth; /* Depth of context stack */ 186 /* private fields */ 187 struct Hook *iff_Hook; 188 }; 189 190 struct IFFStreamCmd 191 { 192 LONG sc_Command; /* Operation to be performed (IFFCMD_) */ 193 APTR sc_Buf; /* Pointer to data buffer */ 194 LONG sc_NBytes; /* Number of bytes to be affected */ 195 }; 196 197 198 #define RDAB_STDIN 0 /* Use "STDIN" rather than "COMMAND LINE" */ 199 #define RDAF_STDIN 1 200 #define RDAB_NOALLOC 1 /* If set, do not allocate extra string space.*/ 201 #define RDAF_NOALLOC 2 202 #define RDAB_NOPROMPT 2 /* Disable reprompting for string input. */ 203 #define RDAF_NOPROMPT 4 204 205 #define ITEM_EQUAL -2 /* "=" Symbol */ 206 #define ITEM_ERROR -1 /* error */ 207 #define ITEM_NOTHING 0 /* *N, ;, endstreamch */ 208 #define ITEM_UNQUOTED 1 /* unquoted item */ 209 #define ITEM_QUOTED 2 /* quoted item */ 210 211 #define MAX_TEMPLATE_ITEMS 100 212 #define MAX_MULTIARGS 128 213 214 #define ERROR_NO_FREE_STORE 103 215 #define ERROR_BAD_TEMPLATE 114 216 #define ERROR_BAD_NUMBER 115 217 #define ERROR_REQUIRED_ARG_MISSING 116 218 #define ERROR_KEY_NEEDS_ARG 117 219 #define ERROR_TOO_MANY_ARGS 118 220 #define ERROR_LINE_TOO_LONG 120 221 222 #define IFFERR_EOF -1L /* Reached logical end of file */ 223 #define IFFERR_EOC -2L /* About to leave context */ 224 #define IFFERR_NOSCOPE -3L /* No valid scope for property */ 225 #define IFFERR_NOMEM -4L /* Internal memory alloc failed */ 226 #define IFFERR_READ -5L /* Stream read error */ 227 #define IFFERR_WRITE -6L /* Stream write error */ 228 #define IFFERR_SEEK -7L /* Stream seek error */ 229 #define IFFERR_MANGLED -8L /* Data in file is corrupt */ 230 #define IFFERR_SYNTAX -9L /* IFF syntax error */ 231 #define IFFERR_NOTIFF -10L /* Not an IFF file */ 232 #define IFFERR_NOHOOK -11L /* No call-back hook provided */ 233 #define IFF_RETURN2CLIENT -12L /* Client handler normal return */ 234 235 #define IFFF_READ 0L /* read mode - default */ 236 #define IFFF_WRITE 1L /* write mode */ 237 #define IFFF_RWBITS (IFFF_READ | IFFF_WRITE) /* read/write bits */ 238 #define IFFF_FSEEK (1L<<1) /* forward seek only */ 239 #define IFFF_RSEEK (1L<<2) /* random seek */ 240 #define IFFF_RESERVED 0xFFFF0000L /* Don't touch these bits */ 241 242 #define IFFCMD_INIT 0 /* Prepare the stream for a session */ 243 #define IFFCMD_CLEANUP 1 /* Terminate stream session */ 244 #define IFFCMD_READ 2 /* Read bytes from stream */ 245 #define IFFCMD_WRITE 3 /* Write bytes to stream */ 246 #define IFFCMD_SEEK 4 /* Seek on stream */ 247 #define IFFCMD_ENTRY 5 /* You just entered a new context */ 248 #define IFFCMD_EXIT 6 /* You're about to leave a context */ 249 #define IFFCMD_PURGELCI 7 /* Purge a LocalContextItem */ 250 251 252 extern void FreeArgs(struct RDArgs *); 253 extern LONG ReadItem(STRPTR, LONG, struct CSource *); 254 extern LONG FindArg(STRPTR, STRPTR); 255 extern struct RDArgs * ReadArgs(STRPTR, LONG *, struct RDArgs *); 256 257 extern UBYTE ToUpper(UBYTE); 258 extern LONG StrToLong(STRPTR, LONG *); 259 extern LONG Stricmp(STRPTR, STRPTR); 260 261 extern char *BumpRevision(char *, char *); 262 extern BOOL DeleteDiskObject(char *); 263 extern void FreeDiskObject(struct DiskObject *); 264 extern struct DiskObject *GetDefDiskObject(LONG); 265 extern struct DiskObject *GetDiskObject(char *); 266 extern struct DiskObject *GetDiskObjectNew(char *); 267 extern BOOL MatchToolValue(char *, char *); 268 extern BOOL PutDiskObject(char *, struct DiskObject *); 269 270 extern BOOL Fault(LONG, UBYTE *, UBYTE *, LONG); 271 extern BOOL PrintFault(LONG, UBYTE *); 272 extern LONG IoErr(); 273 extern LONG SetIoErr(LONG); 274 275 extern struct IFFHandle *AllocIFF( void ); 276 extern LONG OpenIFF( struct IFFHandle *iff, long rwMode ); 277 extern LONG ParseIFF( struct IFFHandle *iff, long control ); 278 extern void CloseIFF( struct IFFHandle *iff ); 279 extern void FreeIFF( struct IFFHandle *iff ); 280 281 extern LONG ReadChunkBytes( struct IFFHandle *iff, APTR buf, long numBytes ); 282 extern LONG WriteChunkBytes( struct IFFHandle *iff, APTR buf, long numBytes ); 283 extern LONG ReadChunkRecords( struct IFFHandle *iff, APTR buf, long bytesPerRecord, long numRecords ); 284 extern LONG WriteChunkRecords( struct IFFHandle *iff, APTR buf, long bytesPerRecord, long numRecords ); 285 286 extern LONG PushChunk( struct IFFHandle *iff, long type, long id, long size ); 287 extern LONG PopChunk( struct IFFHandle *iff ); 288 289 extern LONG EntryHandler( struct IFFHandle *iff, long type, long id, long position, struct Hook *handler, APTR object ); 290 extern LONG ExitHandler( struct IFFHandle *iff, long type, long id, long position, struct Hook *handler, APTR object ); 291 292 extern LONG PropChunk( struct IFFHandle *iff, long type, long id ); 293 extern LONG PropChunks( struct IFFHandle *iff, LONG *propArray, long numPairs ); 294 extern LONG StopChunk( struct IFFHandle *iff, long type, long id ); 295 extern LONG StopChunks( struct IFFHandle *iff, LONG *propArray, long numPairs ); 296 extern LONG CollectionChunk( struct IFFHandle *iff, long type, long id ); 297 extern LONG CollectionChunks( struct IFFHandle *iff, LONG *propArray, long numPairs ); 298 extern LONG StopOnExit( struct IFFHandle *iff, long type, long id ); 299 300 extern struct StoredProperty *FindProp( struct IFFHandle *iff, long type, long id ); 301 extern struct CollectionItem *FindCollection( struct IFFHandle *iff, long type, long id ); 302 extern struct ContextNode *FindPropContext( struct IFFHandle *iff ); 303 extern struct ContextNode *CurrentChunk( struct IFFHandle *iff ); 304 extern struct ContextNode *ParentChunk( struct ContextNode *contextNode ); 305 306 extern struct LocalContextItem *AllocLocalItem( long type, long id, long ident, long dataSize ); 307 extern APTR LocalItemData( struct LocalContextItem *localItem ); 308 extern void SetLocalItemPurge( struct LocalContextItem *localItem, struct Hook *purgeHook ); 309 extern void FreeLocalItem( struct LocalContextItem *localItem ); 310 extern struct LocalContextItem *FindLocalItem( struct IFFHandle *iff, long type, long id, long ident ); 311 extern LONG StoreLocalItem( struct IFFHandle *iff, struct LocalContextItem *localItem, long position ); 312 extern void StoreItemInContext( struct IFFHandle *iff, struct LocalContextItem *localItem, struct ContextNode *contextNode ); 313 314 extern void InitIFF( struct IFFHandle *iff, long flags, struct Hook *streamHook ); 315 316 extern LONG GoodID( long id ); 317 extern LONG GoodType( long type ); 318 extern STRPTR IDtoStr( long id, STRPTR buf ); 319 320 #endif 321 322 extern LONG OpenIFFasFile( struct IFFHandle *iff, char *fn, char *mode ); 323 324 struct ColorStore { unsigned long *colors; int ncolors; Colormap cmap; }; 325 extern Pixmap image_to_pixmap(Display *, Window, GC, unsigned long, 326 unsigned long *, int, struct Image *, int, int, 327 struct ColorStore *); 328 extern void free_color_store(Display *, struct ColorStore *); 329 330 typedef union { LONG num; APTR ptr; } Argtype; 331 332 extern void initargs(int, char **); 333 334 extern char *amiwm_version; 335 336 extern int md_fd; 337 extern Window md_root; 338 339 #define WINDOW_EVENT(e) ((e)->xany.display==(Display *)1) 340 #define FRAME_EVENT(e) ((e)->xany.display==(Display *)2) 341 #define ICON_EVENT(e) ((e)->xany.display==(Display *)3) 342 343 #define IN_ROOT_MASK 1 344 #define IN_WINDOW_MASK 2 345 #define IN_FRAME_MASK 4 346 #define IN_ICON_MASK 8 347 #define IN_ANYTHING_MASK (~0) 348 349 /* module.c */ 350 extern void md_exit(int); 351 extern int md_handle_input(void); 352 extern void md_process_queued_events(void); 353 extern void md_main_loop(void); 354 extern int md_connection_number(void); 355 extern int md_command(XID, int, void *, int, char **); 356 extern int md_command0(XID, int, void *, int); 357 extern int md_command00(XID, int); 358 extern Display *md_display(void); 359 extern char *md_init(int, char *[]); 360 361 /* broker.c */ 362 extern int cx_broker(unsigned long, void (*)(XEvent *, unsigned long)); 363 extern int cx_send_event(unsigned long, XEvent *); 364 365 /* mdscreen.c */ 366 extern int md_rotate_screen(Window); 367 extern int md_front(Window); 368 extern int md_back(Window); 369 extern int md_iconify(Window); 370 extern int md_errormsg(Window, char *); 371 372 /* eventdispatcher.c */ 373 extern void cx_event_broker(int, unsigned long, int (*)(XEvent*)); 374 375 /* kbdsupport.c */ 376 extern int md_grabkey(int, unsigned int); 377 extern int md_ungrabkey(int); 378 379 /* hotkey.c */ 380 extern void cx_hotkey(KeySym, unsigned int, int, int, 381 void (*)(XEvent*,void*), void*); 382 383 /* mdicon.c */ 384 extern Window md_create_appicon(Window, int, int, char *, 385 Pixmap, Pixmap, Pixmap); 386 extern Pixmap md_image_to_pixmap(Window, unsigned long, struct Image *, 387 int, int, struct ColorStore *); 388 extern char *get_current_icondir(void); 389 390 /* mdwindow.c */ 391 extern int md_set_appwindow(Window); 392 393 #endif 394