Files
amiwm-neo/libami/libami.h
Adrian Chadd 631176c9a2 [amiwm] Implement a keyboard shortcut to move a client to a different screen
This allows a keyboard shortcut to move a client to a different amiwm
screen.  That way when you have things like Firefox restart every window
in a single screen, you can quickly move screens to where they should be.
2022-09-05 16:06:18 -07:00

400 lines
12 KiB
C

#ifndef LIBAMI_H
#define LIBAMI_H
#include <X11/Xlib.h>
#include <X11/Xmd.h>
#ifdef AMIGAOS
#include <exec/types.h>
#include <exec/nodes.h>
#include <exec/lists.h>
#include <utility/hooks.h>
#include <dos/dos.h>
#include <dos/rdargs.h>
#include <proto/exec.h>
#include <proto/dos.h>
#include <proto/icon.h>
#include <proto/iffparse.h>
#include <proto/locale.h>
#else
#define GLOBAL extern
#define IMPORT extern
#define STATIC static
#define REGISTER register
#ifndef VOID
#define VOID void
#endif
#ifndef BYTE
#define BYTE Amiga_BYTE
#endif
#ifndef BOOL
#define BOOL Amiga_BOOL
#endif
typedef void *APTR;
typedef INT32 LONG;
typedef CARD32 ULONG;
typedef BITS32 LONGBITS;
typedef INT16 WORD;
typedef CARD16 UWORD;
typedef BITS16 WORDBITS;
typedef INT8 BYTE;
typedef CARD8 UBYTE;
typedef CARD8 BYTEBITS;
typedef CARD16 RPTR;
typedef unsigned char *STRPTR;
typedef INT16 BOOL;
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#ifndef NULL
#define NULL 0L
#endif
#define WF_NOICONIFY 1
struct Node {
struct Node *ln_Succ;
struct Node *ln_Pred;
UBYTE ln_Type;
BYTE ln_Pri;
char *ln_Name;
};
struct MinNode {
struct MinNode *mln_Succ;
struct MinNode *mln_Pred;
};
struct List {
struct Node *lh_Head;
struct Node *lh_Tail;
struct Node *lh_TailPred;
UBYTE lh_Type;
UBYTE l_pad;
};
struct MinList {
struct MinNode *mlh_Head;
struct MinNode *mlh_Tail;
struct MinNode *mlh_TailPred;
};
extern void AddHead(struct List *, struct Node *);
extern void AddTail(struct List *, struct Node *);
extern void Enqueue(struct List *, struct Node *);
extern struct Node *FindName(struct List *, STRPTR);
extern void Insert(struct List *, struct Node *, struct Node *);
extern struct Node *RemHead(struct List *);
extern void Remove(struct Node *);
extern struct Node *RemTail(struct List *);
extern void NewList(struct List *);
struct CSource {
UBYTE *CS_Buffer;
LONG CS_Length;
LONG CS_CurChr;
};
struct RDArgs {
struct CSource RDA_Source;
void *RDA_DAList;
UBYTE *RDA_Buffer;
LONG RDA_BufSiz;
UBYTE *RDA_ExtHelp;
LONG RDA_Flags;
};
struct Image
{
WORD LeftEdge, TopEdge, Width, Height, Depth;
UWORD *ImageData;
UBYTE PlanePick, PlaneOnOff;
struct Image *NextImage;
};
struct Gadget
{
struct Gadget *NextGadget;
WORD LeftEdge, TopEdge, Width, Height;
UWORD Flags, Activation, GadgetType;
APTR GadgetRender, SelectRender;
struct IntuiText *GadgetText;
LONG MutualExclude;
APTR SpecialInfo;
UWORD GadgetID;
APTR UserData;
};
struct NewWindow
{
WORD LeftEdge, TopEdge, Width, Height;
UBYTE DetailPen, BlockPen;
ULONG IDCMPFlags, Flags;
struct Gadget *FirstGadget;
struct Image *CheckMark;
UBYTE *Title;
struct Screen *Screen;
struct BitMap *BitMap;
WORD MinWidth, MinHeight;
UWORD MaxWidth, MaxHeight;
UWORD Type;
};
struct DrawerData {
struct NewWindow dd_NewWindow;
LONG dd_CurrentX;
LONG dd_CurrentY;
ULONG dd_Flags;
UWORD dd_ViewModes;
};
struct DiskObject {
UWORD do_Magic;
UWORD do_Version;
struct Gadget do_Gadget;
UBYTE do_Type;
char *do_DefaultTool;
char **do_ToolTypes;
LONG do_CurrentX;
LONG do_CurrentY;
struct DrawerData *do_DrawerData;
char *do_ToolWindow;
LONG do_StackSize;
};
struct Hook
{
struct MinNode h_MinNode;
ULONG (*h_Entry)(); /* assembler entry point */
ULONG (*h_SubEntry)(); /* often HLL entry point */
APTR h_Data; /* owner specific */
};
struct IFFHandle
{
ULONG iff_Stream;
ULONG iff_Flags;
LONG iff_Depth; /* Depth of context stack */
/* private fields */
struct Hook *iff_Hook;
};
struct IFFStreamCmd
{
LONG sc_Command; /* Operation to be performed (IFFCMD_) */
APTR sc_Buf; /* Pointer to data buffer */
LONG sc_NBytes; /* Number of bytes to be affected */
};
#define RDAB_STDIN 0 /* Use "STDIN" rather than "COMMAND LINE" */
#define RDAF_STDIN 1
#define RDAB_NOALLOC 1 /* If set, do not allocate extra string space.*/
#define RDAF_NOALLOC 2
#define RDAB_NOPROMPT 2 /* Disable reprompting for string input. */
#define RDAF_NOPROMPT 4
#define ITEM_EQUAL -2 /* "=" Symbol */
#define ITEM_ERROR -1 /* error */
#define ITEM_NOTHING 0 /* *N, ;, endstreamch */
#define ITEM_UNQUOTED 1 /* unquoted item */
#define ITEM_QUOTED 2 /* quoted item */
#define MAX_TEMPLATE_ITEMS 100
#define MAX_MULTIARGS 128
#define ERROR_NO_FREE_STORE 103
#define ERROR_BAD_TEMPLATE 114
#define ERROR_BAD_NUMBER 115
#define ERROR_REQUIRED_ARG_MISSING 116
#define ERROR_KEY_NEEDS_ARG 117
#define ERROR_TOO_MANY_ARGS 118
#define ERROR_LINE_TOO_LONG 120
#define IFFERR_EOF -1L /* Reached logical end of file */
#define IFFERR_EOC -2L /* About to leave context */
#define IFFERR_NOSCOPE -3L /* No valid scope for property */
#define IFFERR_NOMEM -4L /* Internal memory alloc failed */
#define IFFERR_READ -5L /* Stream read error */
#define IFFERR_WRITE -6L /* Stream write error */
#define IFFERR_SEEK -7L /* Stream seek error */
#define IFFERR_MANGLED -8L /* Data in file is corrupt */
#define IFFERR_SYNTAX -9L /* IFF syntax error */
#define IFFERR_NOTIFF -10L /* Not an IFF file */
#define IFFERR_NOHOOK -11L /* No call-back hook provided */
#define IFF_RETURN2CLIENT -12L /* Client handler normal return */
#define IFFF_READ 0L /* read mode - default */
#define IFFF_WRITE 1L /* write mode */
#define IFFF_RWBITS (IFFF_READ | IFFF_WRITE) /* read/write bits */
#define IFFF_FSEEK (1L<<1) /* forward seek only */
#define IFFF_RSEEK (1L<<2) /* random seek */
#define IFFF_RESERVED 0xFFFF0000L /* Don't touch these bits */
#define IFFCMD_INIT 0 /* Prepare the stream for a session */
#define IFFCMD_CLEANUP 1 /* Terminate stream session */
#define IFFCMD_READ 2 /* Read bytes from stream */
#define IFFCMD_WRITE 3 /* Write bytes to stream */
#define IFFCMD_SEEK 4 /* Seek on stream */
#define IFFCMD_ENTRY 5 /* You just entered a new context */
#define IFFCMD_EXIT 6 /* You're about to leave a context */
#define IFFCMD_PURGELCI 7 /* Purge a LocalContextItem */
extern void FreeArgs(struct RDArgs *);
extern LONG ReadItem(STRPTR, LONG, struct CSource *);
extern LONG FindArg(STRPTR, STRPTR);
extern struct RDArgs * ReadArgs(STRPTR, LONG *, struct RDArgs *);
extern UBYTE ToUpper(UBYTE);
extern LONG StrToLong(STRPTR, LONG *);
extern LONG Stricmp(STRPTR, STRPTR);
extern char *BumpRevision(char *, char *);
extern BOOL DeleteDiskObject(char *);
extern void FreeDiskObject(struct DiskObject *);
extern struct DiskObject *GetDefDiskObject(LONG);
extern struct DiskObject *GetDiskObject(char *);
extern struct DiskObject *GetDiskObjectNew(char *);
extern BOOL MatchToolValue(char *, char *);
extern BOOL PutDiskObject(char *, struct DiskObject *);
extern BOOL Fault(LONG, UBYTE *, UBYTE *, LONG);
extern BOOL PrintFault(LONG, UBYTE *);
extern LONG IoErr();
extern LONG SetIoErr(LONG);
extern struct IFFHandle *AllocIFF( void );
extern LONG OpenIFF( struct IFFHandle *iff, long rwMode );
extern LONG ParseIFF( struct IFFHandle *iff, long control );
extern void CloseIFF( struct IFFHandle *iff );
extern void FreeIFF( struct IFFHandle *iff );
extern LONG ReadChunkBytes( struct IFFHandle *iff, APTR buf, long numBytes );
extern LONG WriteChunkBytes( struct IFFHandle *iff, APTR buf, long numBytes );
extern LONG ReadChunkRecords( struct IFFHandle *iff, APTR buf, long bytesPerRecord, long numRecords );
extern LONG WriteChunkRecords( struct IFFHandle *iff, APTR buf, long bytesPerRecord, long numRecords );
extern LONG PushChunk( struct IFFHandle *iff, long type, long id, long size );
extern LONG PopChunk( struct IFFHandle *iff );
extern LONG EntryHandler( struct IFFHandle *iff, long type, long id, long position, struct Hook *handler, APTR object );
extern LONG ExitHandler( struct IFFHandle *iff, long type, long id, long position, struct Hook *handler, APTR object );
extern LONG PropChunk( struct IFFHandle *iff, long type, long id );
extern LONG PropChunks( struct IFFHandle *iff, LONG *propArray, long numPairs );
extern LONG StopChunk( struct IFFHandle *iff, long type, long id );
extern LONG StopChunks( struct IFFHandle *iff, LONG *propArray, long numPairs );
extern LONG CollectionChunk( struct IFFHandle *iff, long type, long id );
extern LONG CollectionChunks( struct IFFHandle *iff, LONG *propArray, long numPairs );
extern LONG StopOnExit( struct IFFHandle *iff, long type, long id );
extern struct StoredProperty *FindProp( struct IFFHandle *iff, long type, long id );
extern struct CollectionItem *FindCollection( struct IFFHandle *iff, long type, long id );
extern struct ContextNode *FindPropContext( struct IFFHandle *iff );
extern struct ContextNode *CurrentChunk( struct IFFHandle *iff );
extern struct ContextNode *ParentChunk( struct ContextNode *contextNode );
extern struct LocalContextItem *AllocLocalItem( long type, long id, long ident, long dataSize );
extern APTR LocalItemData( struct LocalContextItem *localItem );
extern void SetLocalItemPurge( struct LocalContextItem *localItem, struct Hook *purgeHook );
extern void FreeLocalItem( struct LocalContextItem *localItem );
extern struct LocalContextItem *FindLocalItem( struct IFFHandle *iff, long type, long id, long ident );
extern LONG StoreLocalItem( struct IFFHandle *iff, struct LocalContextItem *localItem, long position );
extern void StoreItemInContext( struct IFFHandle *iff, struct LocalContextItem *localItem, struct ContextNode *contextNode );
extern void InitIFF( struct IFFHandle *iff, long flags, struct Hook *streamHook );
extern LONG GoodID( long id );
extern LONG GoodType( long type );
extern STRPTR IDtoStr( long id, STRPTR buf );
#endif
extern LONG OpenIFFasFile( struct IFFHandle *iff, char *fn, char *mode );
struct ColorStore { unsigned long *colors; int ncolors; Colormap cmap; };
extern Pixmap image_to_pixmap(Display *, Window, GC, unsigned long,
unsigned long *, int, struct Image *, int, int,
struct ColorStore *);
extern void free_color_store(Display *, struct ColorStore *);
typedef union { LONG num; APTR ptr; } Argtype;
extern void initargs(int, char **);
extern char *amiwm_version;
extern int md_fd;
extern Window md_root;
#define WINDOW_EVENT(e) ((e)->xany.display==(Display *)1)
#define FRAME_EVENT(e) ((e)->xany.display==(Display *)2)
#define ICON_EVENT(e) ((e)->xany.display==(Display *)3)
#define IN_ROOT_MASK 1
#define IN_WINDOW_MASK 2
#define IN_FRAME_MASK 4
#define IN_ICON_MASK 8
#define IN_ANYTHING_MASK (~0)
/* module.c */
extern void md_exit(int);
extern int md_handle_input(void);
extern void md_process_queued_events(void);
extern void md_main_loop(void);
extern int md_connection_number(void);
extern int md_command(XID, int, void *, int, char **);
extern int md_command0(XID, int, void *, int);
extern int md_command00(XID, int);
extern Display *md_display(void);
extern char *md_init(int, char *[]);
/* broker.c */
extern int cx_broker(unsigned long, void (*)(XEvent *, unsigned long));
extern int cx_send_event(unsigned long, XEvent *);
/* mdscreen.c */
extern int md_rotate_screen(Window);
extern int md_front(Window);
extern int md_back(Window);
extern int md_iconify(Window);
extern int md_errormsg(Window, char *);
extern int md_rotate_window_raise(Window);
extern int md_rotate_window_lower(Window);
extern int md_rotate_window_desktop(Window);
/* eventdispatcher.c */
extern void cx_event_broker(int, unsigned long, int (*)(XEvent*));
/* kbdsupport.c */
extern int md_grabkey(int, unsigned int);
extern int md_ungrabkey(int);
/* hotkey.c */
extern void cx_hotkey(KeySym, unsigned int, int, int,
void (*)(XEvent*,void*), void*);
/* mdicon.c */
extern Window md_create_appicon(Window, int, int, char *,
Pixmap, Pixmap, Pixmap);
extern Pixmap md_image_to_pixmap(Window, unsigned long, struct Image *,
int, int, struct ColorStore *);
extern char *get_current_icondir(void);
/* mdbattery.c */
extern void md_update_battery(int pct, int time, int ac);
/* mdwindow.c */
extern int md_set_appwindow(Window);
#endif