     1   
    16  
    16  
    16  
    16  
    16  
    16  
    16  
    16  
    16  
    16  
    16  
    16  
    16  
    16  
    16  
    17   
     2  
     3  
     4  
     5   
     2  
     3  
     4  
     5  
     6  
     7  
     8  
     9  
    10  
    11  
    12  
    13  
    14  
    15  
    16  typedef struct
    17  {
    18  int errnum;
    19  char errmess[252];
    20  } os_error;
    21  
    22  
    23  
    24  
    25  
    26  
    27  
    28  
    29  
    30  
    31  
    32  
    33  
    34  
    35  
    36  
    37  
    38  
    39  
    40  
    41  
    42  
    43   
     8  
     8  
     8  
     8  
     8  
     8  
     8  
     9  
    10  
    11  
    12   
    13  
    14  
    15  
    17  
    18  
    19    
     1  ___toplevel 
     1  
     2  
     3   
     7  
     7  
     7  
     7  
     8  
     9  
    10  
    11  
    12  
    13     typedef unsigned int size_t;    
    14  
    15  
    16  typedef struct {
    17     int r[10];             
    18  } _kernel_swi_regs;
    19  
    20  typedef struct {
    21     int load, exec;        
    22     int start, end;        
    23  } _kernel_osfile_block;
    24  
    25  typedef struct {
    26     void * dataptr;        
    27     int nbytes, fileptr;
    28     int buf_len;           
    29     char * wild_fld;       
    30  } _kernel_osgbpb_block;
    31  
    32  typedef struct {
    33     int errnum;            
    34     char errmess[252];     
    35  } _kernel_oserror;
    36  
    37  typedef struct stack_chunk {
    38     unsigned long sc_mark;        
    39     struct stack_chunk *sc_next, *sc_prev;
    40     unsigned long sc_size;
    41     int (*sc_deallocate)();
    42  } _kernel_stack_chunk;
    43  
    44  extern _kernel_stack_chunk *_kernel_current_stack_chunk(void);
    45  
    46  extern void _kernel_setreturncode(unsigned code);
    47  
    48  extern void _kernel_exit(int);
    49  
    50  extern void _kernel_raise_error(_kernel_oserror *);
    51   
    52  
    53  extern void _kernel_exittraphandler(void);
    54  
    55  
    56  
    57  
    58  
    59  
    60  
    61  
    62  
    63  
    64  
    65  
    66  extern int _kernel_hostos(void);
    67   
    70  
    70  
    70  
    71  extern int _kernel_fpavailable(void);
    72   
    75  
    75  
    75  
    76  
    77  extern _kernel_oserror *_kernel_swi(int no, _kernel_swi_regs *in,
    78                                     _kernel_swi_regs *out);
    79   
    85  
    85  
    85  
    85  
    85  
    85  
    86  extern _kernel_oserror *_kernel_swi_c(int no, _kernel_swi_regs *in,
    87                                        _kernel_swi_regs *out, int *carry);
    88   
    93  
    93  
    93  
    93  
    93  
    94  extern char *_kernel_command_string(void);
    95   
    98  
    98  
    98  
    99   
   108  
   108  
   108  
   108  
   108  
   108  
   108  
   108  
   108  
   109  
   110  
   111  extern int _kernel_osbyte(int op, int x, int y);
   112   
   122  
   122  
   122  
   122  
   122  
   122  
   122  
   122  
   122  
   122  
   123  extern int _kernel_osrdch(void);
   124   
   127  
   127  
   127  
   128  extern int _kernel_oswrch(int ch);
   129   
   133  
   133  
   133  
   133  
   134  extern int _kernel_osbget(unsigned handle);
   135   
   139  
   139  
   139  
   139  
   140  extern int _kernel_osbput(int ch, unsigned handle);
   141   
   145  
   145  
   145  
   145  
   146  extern int _kernel_osgbpb(int op, unsigned handle, _kernel_osgbpb_block *inout); 
   153  
   153  
   153  
   153  
   153  
   153  
   153  
   154  extern int _kernel_osword(int op, int *data);
   155   
   160  
   160  
   160  
   160  
   160  
   161  extern int _kernel_osfind(int op, char *name);
   162   
   167  
   167  
   167  
   167  
   167  
   168  extern int _kernel_osfile(int op, const char *name, _kernel_osfile_block *inout);
   169   
   173  
   173  
   173  
   173  
   174  extern int _kernel_osargs(int op, unsigned handle, int arg);
   175   
   181  
   181  
   181  
   181  
   181  
   181  
   182  extern int _kernel_oscli(const char *s);
   183   
   191  
   191  
   191  
   191  
   191  
   191  
   191  
   191  
   192  extern _kernel_oserror *_kernel_last_oserror(void);
   193   
   202  
   202  
   202  
   202  
   202  
   202  
   202  
   202  
   202  
   203  extern _kernel_oserror *_kernel_getenv(const char *name, char *buffer, unsigned size);
   204   
   209  
   209  
   209  
   209  
   209  
   210  extern _kernel_oserror *_kernel_setenv(const char *name, const char *value);
   211   
   215  
   215  
   215  
   215  
   216  extern int _kernel_system(const char *string, int chain);
   217   
   232  
   232  
   232  
   232  
   232  
   232  
   232  
   232  
   232  
   232  
   232  
   232  
   232  
   232  
   232  
   233  
   234  extern unsigned _kernel_alloc(unsigned minwords, void **block);
   235   
   242  
   242  
   242  
   242  
   242  
   242  
   242  
   243  typedef void freeproc(void *);
   244  typedef void * allocproc(unsigned);
   245  
   246  extern void _kernel_register_allocs(allocproc *malloc, freeproc *free);
   247   
   254  
   254  
   254  
   254  
   254  
   254  
   254  
   255  typedef int _kernel_ExtendProc(int  , void**  );
   256  extern _kernel_ExtendProc *_kernel_register_slotextend(_kernel_ExtendProc *proc);
   257   
   264  
   264  
   264  
   264  
   264  
   264  
   264  
   265  extern int _kernel_escape_seen(void);
   266   
   273  
   273  
   273  
   273  
   273  
   273  
   273  
   274  typedef union {
   275      struct {int s:1, u:16, x: 15; unsigned mhi, mlo; } i;
   276      int w[3]; } _extended_fp_number;
   277  
   278  typedef struct {
   279     int r4, r5, r6, r7, r8, r9;
   280     int fp, sp, pc, sl;
   281     _extended_fp_number f4, f5, f6, f7; } _kernel_unwindblock;
   282  
   283  extern int _kernel_unwind(_kernel_unwindblock *inout, char **language);
   284   
   296  
   296  
   296  
   296  
   296  
   296  
   296  
   296  
   296  
   296  
   296  
   296  
   297  extern char *_kernel_procname(int pc);
   298   
   302  
   302  
   302  
   302  
   303  extern char *_kernel_language(int pc);
   304   
   308  
   308  
   308  
   308  
   309   
   319  
   319  
   319  
   319  
   319  
   319  
   319  
   319  
   319  
   319  
   320  extern unsigned _kernel_udiv(unsigned divisor, unsigned dividend);
   321  extern unsigned _kernel_urem(unsigned divisor, unsigned dividend);
   322  extern unsigned _kernel_udiv10(unsigned dividend);
   323  
   324  extern int _kernel_sdiv(int divisor, int dividend);
   325  extern int _kernel_srem(int divisor, int dividend);
   326  extern int _kernel_sdiv10(int dividend);
   327  
   328   
   331  
   331  
   331  
   332  typedef enum { NotHandled, Handled } _kernel_HandledOrNot;
   333  
   334  typedef struct {
   335     int regs [16];
   336  } _kernel_registerset;
   337  
   338  typedef struct {
   339     int regs [10];
   340  } _kernel_eventregisters;
   341  
   342  typedef void (*PROC) (void);
   343  typedef _kernel_HandledOrNot (*_kernel_trapproc) (int code, _kernel_registerset *regs);
   344  typedef _kernel_HandledOrNot (*_kernel_eventproc) (int code, _kernel_registerset *regs);
   345  
   346  typedef struct {
   347     int size;
   348     int codestart, codeend;
   349     char *name;
   350     PROC (*InitProc)(void);
   351     PROC FinaliseProc;
   352     _kernel_trapproc TrapProc;
   353     _kernel_trapproc UncaughtTrapProc;
   354     _kernel_eventproc EventProc;
   355     _kernel_eventproc UnhandledEventProc;
   356     void (*FastEventProc) (_kernel_eventregisters *);
   357     int (*UnwindProc) (_kernel_unwindblock *inout, char **language);
   358     char * (*NameProc) (int pc);
   359  } _kernel_languagedescription;
   360  
   361  typedef int _kernel_ccproc(int, int, int);
   362  
   363  extern int _kernel_call_client(int a1, int a2, int a3, _kernel_ccproc callee);
   364   
   369  
   369  
   369  
   369  
   369  
   370  extern int _kernel_client_is_module(void);
   371   
   375  
   375  
   375  
   375  
   376  extern int _kernel_processor_mode(void);
   377  
   378  extern void _kernel_irqs_on(void);
   379  
   380  extern void _kernel_irqs_off(void);
   381  
   382  extern int _kernel_irqs_disabled(void);
   383   
   384  
   385  extern void *_kernel_RMAalloc(size_t size);
   386  
   387  extern void *_kernel_RMAextend(void *p, size_t size);
   388  
   389  extern void _kernel_RMAfree(void *p);
   390  
   391  
   392   
   393  
    21  
    22  
    23  
    25  
    26   
    27  
    28  typedef void *dll;                       
    29  
    30  typedef struct                           
    31  {
    32    char *name;                            
    33    int version;                           
    34    char *entryNames;                      
    35    void *branchTable;                     
    36  }
    37  dll_table;
    38  
    39  typedef struct                           
    40  {
    41    dll d;                                 
    42    char *name;                            
    43    int version;                           
    44    char *author;                          
    45    unsigned instSize;                     
    46  }
    47  dll_infostr;
    48  
    49   
    67  
    67  
    67  
    67  
    67  
    67  
    67  
    67  
    67  
    67  
    67  
    67  
    67  
    67  
    67  
    67  
    67  
    67  
    68  os_error *dll_find(const char *name,int version,dll *d);
    69  os_error *dll_findFromTable(const dll_table *table,int entries);
    70  os_error *dll_load(void *buffer,const char *name);
    71  os_error *dll_lose(dll d);
    72  os_error *dll_appDying(void);
    73  os_error *dll_giveCLibData(void *data);
    74  os_error *dll_findCLibData(void **p);
    75  os_error *dll_instanceVars(void *buffer,int *size,int *magic);
    76  os_error *dll_setInstanceVars(dll d,void *workspace);
    77  os_error *dll_appData(void);
    78  os_error *dll_readStackPtr(int *sp);
    79  os_error *dll_setStackPtr(int sp);
    80  os_error *dll_nameApp(const char *name);
    81  os_error *dll_info(dll d,dll_infostr *i);
    82  os_error *dll_findEntry(dll d,const char *name,void (**entry)());
    83  os_error *dll_saveHandle(int *handle);
    84  os_error *dll_restoreHandle(int *handle);
    85  os_error *dll_findInstanceVars(dll d,void **addr);
    86  os_error *dll_registerAppEntryTable(void (**btable)(),char *names);
    87  os_error *dll_findAppEntry(char *name,void (**func)());
    88  os_error *dll_setExtensionTable(void (**btable)(),char *names);
    89  
    90   
    91  
    92  
    93  
    94   
    95  
    96  
    97  
    98  void _dll_appspace(void);
    99  void _dll_clibdata(void);
   100  
   101  
   102  
   103  
   104  
   105  
   106  
   107  
   108  
   109  
   110   
   111  
   112  
   113  
   114  int _dll_system(const char *command);
   115  int _dll_ksystem(const char *command,int chain);
   116  os_error *_dll_oscli(const char *command);
   117  os_error *_dll_starttask(const char *command);
   118  
   119  
   120  
   121  
   122  
   123  
   124  
   125  
   126  
   127  
   128   
   129  
   130  dll _dll_loadExtension(const char *name);
   131  void _dll_freeExtension(dll d);
   132  
   133   
   134  
   135  
   136  
   137  int _dll_setjmp(void);
   138  void _dll_longjmped(int sp);
   139  
   140  
   141  
   142  
   143  
   144  
   145  
   146  
   147   
   148  
   149  
   150  
   151  void _dll_giveMemory(void);
   152  
   153  
   154  
   155  
   156  
   157  
   158  
   159   
   160  
   161  
   162  
   163  
   164  
   165  
   166  
   167  
   168  
   169  
   170  
   171  
   172  
   173  
   174  
   175  
   176  
   177  
   178  
   179  
   180  
   181  
   182  
   183  
   184  
    45  
    46  
    47  
    48  
    49  
    50  
    51  
    52  
    53  
     7  
     8  typedef struct
     9  {
    10  int x, y;
    11  } wimp_point;
    12  typedef wimp_point wimp_coord;
    13  typedef struct
    14  {
    15  wimp_point min;
    16  wimp_point max;
    17  } wimp_rect;
    18  typedef wimp_rect wimp_box;
    19  typedef int window_handle;
    20  typedef int icon_handle;
    21  typedef int task_handle;
    22  
    23  
    24  
    25  
    26  
    27  
    28  
    29  
    30  
    31  
    32  
    33  
    34  
    35  
    36  
    37  
    38  
    39  
    40  
    41  typedef union
    42  {
    43  int value;
    44  struct
    45  {
    46  unsigned int wimpcolour : 4;
    47  unsigned int gcolaction : 3;
    48  unsigned int foreback : 1;
    49  unsigned int padding : 24;
    50  } data;
    51  } wimp_colour;
    52  typedef union
    53  {
    54  int value;
    55  struct
    56  {
    57  char gcol;
    58  char red;
    59  char green;
    60  char blue;
    61  } data;
    62  } palette_entry;
    63  typedef struct
    64  {
    65  palette_entry colour[16];
    66  palette_entry border;
    67  palette_entry mouse1;
    68  palette_entry mouse2;
    69  palette_entry mouse3;
    70  } palette_block;
    71  
    72  
    73  
    74  
    75  
    76  
    77  
    78  
    79  
    80  
    81  
    82  
    83  
    84  
    85  
    86  
    87  
    88  
    89  
    90  
    91  
    92  
    93  
    94  
    95  
    96  
    97  
    98  
    99  
   100  
   101  
   102  
   103  
   104  
   105  
   106  
   107  
   108  
   109  
   110  
   111  
   112  
   113  
   114  
   115  
   116  
   117  
   118  typedef union
   119  {
   120  unsigned int value;
   121  struct
   122  {
   123  unsigned int garbage1 : 6; 
   124  unsigned int font : 1; 
   125  unsigned int garbage2 : 17; 
   126  unsigned int handle : 8; 
   127  } font;
   128  struct
   129  {
   130  unsigned int text : 1;
   131  unsigned int sprite : 1;
   132  unsigned int border : 1;
   133  unsigned int hcentre : 1;
   134  unsigned int vcentre : 1;
   135  unsigned int filled : 1;
   136  unsigned int font : 1;
   137  unsigned int needshelp : 1;
   138  unsigned int indirected : 1;
   139  unsigned int rightjustify : 1;
   140  unsigned int allowadjust : 1;
   141  unsigned int halfsize : 1;
   142  unsigned int buttontype : 4;
   143  unsigned int esg : 5;
   144  unsigned int selected : 1;
   145  unsigned int shaded : 1;
   146  unsigned int deleted : 1;
   147  unsigned int foreground : 4;
   148  unsigned int background : 4;
   149  } data;
   150  } icon_flags;
   151  typedef struct
   152  {
   153  char *buffer;
   154  char *validstring;
   155  unsigned int bufflen;
   156  } icon_indtext;
   157  typedef struct
   158  {
   159  const char *name;
   160  void *spritearea;
   161  unsigned int nameisname;
   162  } icon_indsprite;
   163  typedef union
   164  {
   165  char text[ 12 ];
   166  icon_indtext indirecttext;
   167  char spritename[ 12 ];
   168  icon_indsprite indirectsprite;
   169  } icon_data;
   170  typedef struct
   171  {
   172  wimp_box workarearect;
   173  icon_flags flags;
   174  icon_data data;
   175  } icon_block;
   176  typedef struct
   177  {
   178  window_handle window;
   179  icon_block icondata;
   180  } icon_createblock;
   181  typedef union
   182  {
   183  struct
   184  {
   185  unsigned int hastitle : 1; 
   186  unsigned int moveable : 1; 
   187  unsigned int hasvscroll : 1; 
   188  unsigned int hashscroll : 1; 
   189  unsigned int autoredraw : 1; 
   190  unsigned int pane : 1; 
   191  unsigned int nobounds : 1; 
   192  unsigned int nobackclose : 1; 
   193  unsigned int scrollrq : 1;
   194  unsigned int scrollrqdebounced : 1;
   195  unsigned int realcolours : 1;
   196  unsigned int backwindow : 1;
   197  unsigned int hotkeys : 1;
   198  unsigned int keeponscreen : 1;
   199  unsigned int ignoreright : 1;
   200  unsigned int ignorebottom : 1;
   201  unsigned int open : 1;
   202  unsigned int top : 1;
   203  unsigned int fullsize : 1;
   204  unsigned int istoggling : 1;
   205  unsigned int focus : 1;
   206  unsigned int forceonce : 1;
   207  unsigned int dummy22 : 1;
   208  unsigned int dummy23 : 1;
   209  unsigned int backicon : 1;
   210  unsigned int closeicon : 1;
   211  unsigned int titlebar : 1;
   212  unsigned int toggleicon : 1;
   213  unsigned int vscroll : 1;
   214  unsigned int adjusticon : 1;
   215  unsigned int hscroll : 1;
   216  unsigned int newflags : 1; 
   217  } data;
   218  int value;
   219  } window_flags;
   220  typedef struct 
   221  { 
   222  int x : 16; 
   223  int y : 16; 
   224  } window_minsize;
   225  typedef enum
   226  {
   227  windowcol_TITLEFORE = 0,
   228  windowcol_TITLEBACK,
   229  windowcol_WORKFORE,
   230  windowcol_WORKBACK,
   231  windowcol_SCROLLBACK,
   232  windowcol_SCROLLFORE,
   233  windowcol_TITLEHILITE
   234  } window_colourindices;
   235  typedef struct
   236  {
   237  wimp_box screenrect;
   238  wimp_point scroll;
   239  window_handle behind;
   240  window_flags flags;
   241  char colours[8];
   242  wimp_box workarearect;
   243  icon_flags titleflags;
   244  icon_flags workflags;
   245  void *spritearea;
   246  window_minsize minsize;
   247  icon_data title;
   248  unsigned int numicons;
   249  } window_block;
   250  typedef struct
   251  {
   252  window_handle window;
   253  wimp_box screenrect;
   254  wimp_point scroll;
   255  window_handle behind;
   256  } window_openblock;
   257  typedef struct
   258  {
   259  window_openblock openblock;
   260  window_flags flags;
   261  } window_state;
   262  typedef struct
   263  {
   264  window_handle window;
   265  window_block block;
   266  } window_info;
   267  typedef struct
   268  {
   269  window_handle window;
   270  wimp_box rect;
   271  wimp_point scroll;
   272  wimp_box cliprect;
   273  } window_redrawblock;
   274  typedef struct
   275  {
   276  window_handle window;
   277  wimp_box screenrect;
   278  } window_outline;
   279  
   280  
   281  
   282  
   283  
   284  
   285  
   286  typedef union
   287  {
   288  unsigned int value;
   289  struct
   290  {
   291  unsigned int adjust : 1;
   292  unsigned int menu : 1;
   293  unsigned int select : 1;
   294  unsigned int dummy3 : 1;
   295  unsigned int dragadjust : 1;
   296  unsigned int dummy5 : 1;
   297  unsigned int dragselect : 1;
   298  unsigned int dummy7 : 1;
   299  unsigned int clickadjust : 1;
   300  unsigned int dummy9 : 1;
   301  unsigned int clickselect : 1;
   302  } data;
   303  } button_state;
   304  typedef struct
   305  {
   306  wimp_point pos;
   307  button_state button;
   308  window_handle window;
   309  icon_handle icon;
   310  } mouse_block;
   311  typedef struct
   312  {
   313  int shapenumber;
   314  char *shapedata;
   315  unsigned int width;
   316  unsigned int height;
   317  wimp_point active;
   318  } pointer_shapeblock;
   319  typedef enum
   320  {
   321  drag_MOVEWINDOW = 1,
   322  drag_RESIZEWINDOW,
   323  drag_SCROLLX,
   324  drag_SCROLLY,
   325  drag_FIXEDBOX,
   326  drag_RUBBERBOX,
   327  drag_INVISIBLE,
   328  drag_USERFIXEDBBOX,
   329  drag_USERRUBBERBOX,
   330  drag_USERFIXEDNC,
   331  drag_USERRUBBERNC
   332  } drag_type;
   333  typedef struct
   334  {
   335  window_handle window;
   336  drag_type type;
   337  wimp_box screenrect;
   338  wimp_box parent;
   339  } drag_block;
   340  typedef union
   341  {
   342  unsigned int value;
   343  struct
   344  {
   345  unsigned int ok : 1;
   346  unsigned int cancel : 1;
   347  unsigned int highlightcancel : 1;
   348  unsigned int noprompt : 1;
   349  unsigned int noprefix : 1;
   350  unsigned int nowait : 1;
   351  unsigned int closebox : 1;
   352  } data;
   353  } error_flags;
   354  typedef struct menu_block *menu_ptr;
   355  typedef union
   356  {
   357  unsigned int value;
   358  struct
   359  {
   360  unsigned int ticked : 1;
   361  unsigned int dotted : 1;
   362  unsigned int writable : 1;
   363  unsigned int notifysub : 1;
   364  unsigned int openshaded : 1;
   365  unsigned int dummy2 : 2;
   366  unsigned int last : 1;
   367  unsigned int indtitle : 1;
   368  unsigned int dummy13 : 13;
   369  unsigned int shaded : 1;
   370  unsigned int dummy1 : 1;
   371  unsigned int foreground : 4;
   372  unsigned int background : 4;
   373  } data;
   374  } menu_flags;
   375  typedef union
   376  {
   377  menu_ptr menu;
   378  window_handle window;
   379  int value;
   380  } menu_submenu;
   381  typedef struct
   382  {
   383  menu_flags menuflags;
   384  menu_submenu submenu;
   385  icon_flags iconflags;
   386  icon_data icondata;
   387  } menu_item;
   388  typedef struct menu_block
   389  {
   390  char title [ 12 ];
   391  char titlefore, titleback, workfore, workback;
   392  unsigned int width;
   393  unsigned int height;
   394  unsigned int gap;
   395  } menu_block;
   396  typedef int key_press;
   397  typedef struct
   398  {
   399  window_handle window;
   400  icon_handle icon;
   401  wimp_point offset;
   402  int height;
   403  int index;
   404  } caret_block;
   405  typedef struct
   406  {
   407  caret_block caret;
   408  key_press code;
   409  } key_block;
   410  typedef struct
   411  {
   412  int address;
   413  int contents;
   414  } pollword_block;
   415  typedef enum
   416  {
   417  message_QUIT = 0,
   418  message_CLOSEDOWN = 0,
   419  message_DATASAVE = 1,
   420  message_DATASAVEACK = 2,
   421  message_DATASAVEOK = 2,
   422  message_DATALOAD = 3,
   423  message_DATALOADACK = 4,
   424  message_DATALOADOK = 4,
   425  message_DATAOPEN,
   426  message_RAMFETCH,
   427  message_RAMTRANSMIT,
   428  message_PREQUIT,
   429  message_PALETTECHANGE,
   430  message_SAVEDESK,
   431  message_DEVICECLAIM,
   432  message_DEVICEINUSE,
   433  message_DATASAVED,
   434  message_FILEROPENDIR = 0x400,
   435  message_FILERCLOSEDIR,
   436  message_HELPREQUEST = 0x502,
   437  message_HELPREPLY,
   438  message_NOTIFY = 0x40040,
   439  message_MENUWARNING = 0x400C0,
   440  message_MENUWARN = 0x400C0,
   441  message_MODECHANGE,
   442  message_TASKINITIALISE = 0x400C2,
   443  message_INITTASK = 0x400C2,
   444  message_TASKCLOSEDOWN = 0x400C3,
   445  message_CLOSETASK = 0x400C3,
   446  message_SLOTSIZE = 0x400C4,
   447  message_SLOTCHANGE = 0x400C4,
   448  message_SETSLOT = 0x400C5,
   449  message_TASKNAMERQ,
   450  message_TASKNAMEIS,
   451  message_TASKSTARTED,
   452  message_MENUSDELETED, 
   453  message_WINDOWINFO = 0x400CC, 
   454  message_POPUPRQ = 0x46D40, 
   455  message_POPUPREQUEST = 0x46D40,
   456  message_POPUPSTATE,
   457  message_POPUPCLOSED,
   458  message_PRINTFILE = 0x80140,
   459  message_WILLPRINT,
   460  message_PRINTTYPEODD = 0x80145,
   461  message_PRINTTYPEKNOWN,
   462  message_PRINTERCHANGE
   463  } message_action;
   464  typedef int message_destinee; 
   465  typedef struct
   466  {
   467  unsigned int size;
   468  task_handle sender;
   469  unsigned int myref;
   470  unsigned int yourref;
   471  message_action action;
   472  } message_header;
   473  typedef struct
   474  {
   475  window_handle window;
   476  icon_handle icon;
   477  wimp_point pos;
   478  int estsize;
   479  int filetype;
   480  char leafname[12];
   481  } message_datasave;
   482  typedef struct
   483  {
   484  window_handle window; 
   485  icon_handle icon; 
   486  wimp_point pos;
   487  int estsize;
   488  int filetype;
   489  char filename[212];
   490  } message_datasaveack;
   491  typedef struct
   492  {
   493  window_handle window;
   494  icon_handle icon;
   495  wimp_point pos;
   496  int size;
   497  int filetype;
   498  char filename[212];
   499  } message_dataload;
   500  typedef struct 
   501  {
   502  window_handle window;
   503  icon_handle icon;
   504  wimp_point pos;
   505  int size;
   506  int filetype;
   507  char filename[212];
   508  } message_dataloadack;
   509  typedef message_dataload message_dataopen;
   510  typedef struct
   511  {
   512  char *buffer;
   513  int buffsize;
   514  } message_ramfetch;
   515  typedef struct
   516  {
   517  char *buffer; 
   518  int byteswritten;
   519  } message_ramtransmit;
   520  typedef struct
   521  {
   522  mouse_block where; 
   523  } message_helprequest;
   524  typedef struct
   525  {
   526  char text[200];
   527  } message_helpreply;
   528  typedef struct
   529  {
   530  int filler[5];
   531  int filetype;
   532  char filename[212];
   533  } message_print;
   534  typedef struct
   535  {
   536  int id; 
   537  wimp_point openpos; 
   538  int selection[10]; 
   539  } message_menuwarn;
   540  typedef struct
   541  {
   542  window_handle window;
   543  task_handle task;
   544  char title[20];
   545  } message_iconize;
   546  typedef struct
   547  {
   548  window_handle window;
   549  int dummy;
   550  char spritename[8];
   551  char title[20];
   552  } message_windowinfo;
   553  typedef struct
   554  {
   555  message_header header;
   556  union
   557  {
   558  char bytes [236];
   559  int words [59];
   560  message_datasave datasave;
   561  message_datasaveack datasaveack;
   562  message_dataload dataload;
   563  message_dataopen dataopen;
   564  message_ramfetch ramfetch;
   565  message_ramtransmit ramtransmit;
   566  message_helprequest helprequest;
   567  message_helpreply helpreply;
   568  message_print print;
   569  message_menuwarn menuwarn;
   570  message_iconize iconize;
   571  message_windowinfo windowinfo;
   572   0 
   573  
   573  
   574  
   575  
   576  } data;
   577  } message_block;
   578  
   579  typedef enum
   580  {
   581  event_ANY = -99, 
   582  event_NULL = 0,
   583  event_REDRAW,
   584  event_OPEN,
   585  event_CLOSE,
   586  event_PTRLEAVE,
   587  event_PTRENTER,
   588  event_CLICK = 6,
   589  event_BUTTON = 6,
   590  event_USERDRAG,
   591  event_KEY,
   592  event_MENU,
   593  event_SCROLL,
   594  event_LOSECARET,
   595  event_GAINCARET,
   596  event_NONZEROPOLLWORD,
   597  event_USERMESSAGE = 17,
   598  event_SEND = 17,
   599  event_USERMESSAGERECORDED = 18,
   600  event_SENDWANTACK = 18,
   601  event_USERMESSAGEACK = 19,
   602  event_ACK = 19
   603  } event_type;
   604  typedef union
   605  {
   606  unsigned int value;
   607  struct
   608  {
   609  unsigned int null : 1;
   610  unsigned int redraw : 1;
   611  unsigned int open : 1;
   612  unsigned int close : 1;
   613  unsigned int ptrleave : 1;
   614  unsigned int ptrenter : 1;
   615  unsigned int click : 1;
   616  unsigned int userdrag : 1;
   617  unsigned int key : 1;
   618  unsigned int menu : 1;
   619  unsigned int scroll : 1;
   620  unsigned int losecaret : 1;
   621  unsigned int gaincaret : 1;
   622  unsigned int nonzeropollword : 1;
   623  unsigned int dummy14 : 1;
   624  unsigned int dummy15 : 1;
   625  unsigned int dummy16 : 1;
   626  unsigned int usermessage : 1;
   627  unsigned int usermessagerecorded : 1;
   628  unsigned int usermessageack : 1;
   629  unsigned int dummy20 : 1;
   630  unsigned int dummy21 : 1;
   631  unsigned int r3ispollwordptr : 1;
   632  unsigned int highprioritypoll : 1;
   633  unsigned int keepfpregisters : 1;
   634  } data;
   635  } event_pollmask;
   636  typedef struct
   637  {
   638  window_openblock openblock;
   639  wimp_point direction;
   640  } scroll_rq;
   641  typedef union
   642  {
   643  caret_block caret;
   644  key_block key;
   645  pollword_block pollword;
   646  window_openblock openblock;
   647  message_block message;
   648  mouse_block mouse;
   649  wimp_box screenrect;
   650  int selection[10];
   651  scroll_rq scroll;
   652  char bytes [256];
   653  int words [64];
   654  } event_data;
   655  typedef struct
   656  {
   657  event_type type;
   658  event_data data;
   659  } event_pollblock;
   660  typedef struct
   661  {
   662  char fonts[256];
   663  } font_array;
   664  typedef struct
   665  {
   666  window_block *buffer;
   667  char *workfree;
   668  char *workend;
   669  font_array *font;
   670  char *name;
   671  unsigned int index;
   672  } template_block;
   673  typedef struct
   674  {
   675  wimp_point mul;
   676  wimp_point div;
   677  } scale_block;
   678  
   679   
     2  
     3  
     4  
     5  
     6  
     7  
     8  
    10  os_error *SWI(int numregsin, int numregsout, int swicode, ... );
    11  
    12  
    13  
    14  
    15  
    16  
    17  
    18  
    19  
    20  
    21  
    22  
    23  
    24  
    25  
    26  
    27  
    28  
    29  
    30  
    31  
    32  
    33  
    34  
    35  
    36  
    37  
    38  
    39  
    40  
    41  
    42  
    43  
    44  
    45  
    46  
    47  
    48  
    49  
    50  
    51  
    52  
    53  
    54  
    55  
    56  
    57  
    58  
    59  
    60  
    61  
    62  
    63  
    64  
    65  
    66  
    67  
    68  
    69  
    70  
    71  
    72  
    73  
    74  
    75  
    76  
    77  
    78  
    79  
    80  
    81  
    82  
    83  
    84  
    85  
    86  
    87  
    88  
    89  
    90  
    91  
    92  
    93  
    94  
    95  
    96  
    97  
    98  
    99  
   100  
   101  
   102  
   103  
   104  
   105  
   106  
   107  
   108  
   109  
   110  
   111  
   112  
   113  
   114  
   115  
   116  
   117  
   118  
   119  
   120  
   121  
   122  
   123  
   124  
   125  
   126  
   127  
   128  
   129  
   130  
   131  
   132  
   133  
   134  
   135  
   136  
   137  
   138  
   139  
   140  
   141  
   142  
   143  
   144  
   145  
   146  
   147  
   148  
   149  
   150  
   151  
   152  
   153  
   154  
   155  
   156  
   157  
   158  
   159  
   160  
   161  
   162  
   163  
   164  
   165  
   166  
   167  
   168  
   169  
   170  
   171  
   172  
   173  
   174  
   175  
   176  
   177  
   178  
   179  
   180  
   181  
   182  
   183  
   184  
   185  
   186  
   187  
   188  
   189  
   190  
   191  
   192  
   193  
   194  
   195  
   196  
   197  
   198  
   199  
   200  
   201  
   202  
   203  
   204  
   205  
   206  
   207  
   208  
   209  
   210  
   211  
   212  
   213  
   214  
   215  
   216  
   217  
   218  
   219  
   220  
   221  
   222  
   223  
   224  
   225  
   226  
   227  
   228  
   229  
   230  
   231  
   232  
   233  
   234  
   235  
   236  
   237  
   238  
   239  
   240  
   241  
   242  
   243  
   244  
   245  
   246  
   247  
   248  
   249  
   250  
   251  
   252  
   253  
    20   
    24  
    24  
    24  
    24   
     2  
     3  
     4  
     6  
     7  extern int *Screen__Ref_mode( void);
     8  extern wimp_point *Screen__Ref_size( void);
     9  extern wimp_point *Screen__Ref_eig( void);
    10  extern wimp_point *Screen__Ref_delta( void);
    11  extern int *Screen__Ref_bpp( void);
    12  
    13   0  || (  1  && ! 1 )
    14  
    14  
    15  
    16  
    17  
    18  
    19  
    20  extern int screen_mode;
    21  extern wimp_point screen_size;
    22  extern wimp_point screen_eig;
    23  extern wimp_point screen_delta;
    24  extern int screen_bpp;
    25  
    26  extern  unsigned  Screen_CacheModeInfo(void);
    27  
    28  
    26  
    27  int        screen_mode  = -1;
    28  wimp_point screen_size;
    29  wimp_point screen_eig;
    30  wimp_point screen_delta;
    31  int        screen_bpp;
    32  
    33  
    34  int		*Screen__Ref_mode( void)	{ return &screen_mode;	}
    35  wimp_point	*Screen__Ref_size( void)	{ return &screen_size;	}
    36  wimp_point	*Screen__Ref_eig( void)		{ return &screen_eig;	}
    37  wimp_point	*Screen__Ref_delta( void)	{ return &screen_delta;	}
    38  int		*Screen__Ref_bpp( void)		{ return &screen_bpp;	}
    39  
    40  
    41  
    42  
    43  
    44  
    45  
    46  
    47  extern  unsigned  Screen_CacheModeInfo(void)
    48  {
    49    int oldmode = screen_mode;
    50  
    51    SWI(1, 3,  0x20006 , 135,    0 ,  0 , &screen_mode);
    52  
    53    if (oldmode == screen_mode)
    54      return( 0 );
    55  
    56     SWI(3, 3, 0x20035, ( -1 ), ( 9 ), 0, 0, 0, ( &screen_bpp )) ;
    57    screen_bpp = 1 << screen_bpp;
    58  
    59     SWI(3, 3, 0x20035, ( -1 ), ( 4 ), 0, 0, 0, ( &screen_eig.x )) ;
    60     SWI(3, 3, 0x20035, ( -1 ), ( 5 ), 0, 0, 0, ( &screen_eig.y )) ;
    61  
    62    screen_delta.x = 1 << screen_eig.x;
    63    screen_delta.y = 1 << screen_eig.y;
    64  
    65     SWI(3, 3, 0x20035, ( -1 ), ( 11 ), 0, 0, 0, ( &screen_size.x )) ;
    66    screen_size.x = (screen_size.x + 1) << screen_eig.x;
    67  
    68     SWI(3, 3, 0x20035, ( -1 ), ( 12 ), 0, 0, 0, ( &screen_size.y )) ;
    69    screen_size.y = (screen_size.y + 1) << screen_eig.y;
    70  
    71    return( 1 );
    72  }
    73  
