home *** CD-ROM | disk | FTP | other *** search
/ RISC DISC 1 / RISC_DISC_1.iso / pd_share / code / unixlib / !UnixLib / clib / sys / h / syslib < prev    next >
Encoding:
Text File  |  1994-07-11  |  4.7 KB  |  160 lines

  1. /* sys/syslib.h (c) Copyright 1990 H.Rogers */
  2.  
  3. #ifndef __SYS_SYSLIB_H
  4. #define __SYS_SYSLIB_H
  5.  
  6. #ifndef __SYS_OS_H
  7. #include <sys/os.h>
  8. #endif
  9.  
  10. #ifdef __cplusplus
  11. extern "C" {
  12. #endif
  13.  
  14. extern void __main(void);    /* assembler initialization */
  15. extern void _main(void);    /* C initialization */
  16.  
  17. extern void _exit(int);     /* C exit */
  18. extern void __exit(int);    /* assembler exit */
  19.  
  20.  
  21. #define STAKSIZ 2048
  22.  
  23. /* __break is initialised to __lomem & __stack to __himem - STAKSIZ;
  24.  * __stack is extended downwards in 512 byte chunks by x$stack_overflow()
  25.  * and __break is extended upwards by brk() and sbrk(). The sl
  26.  * register is kept equal to __stack + 256. Should x$stack_overflow()
  27.  * attempt to extend __stack below __break then SIGEMT is raised.
  28.  * Should brk() or sbrk() be asked to extend __break above __stack
  29.  * then they return with ENOMEM. */
  30.  
  31. extern char *__cli;        /* command line from OS_GetEnv */
  32.  
  33. extern void __svccli(char *);    /* strcpy __cli in SVC mode */
  34.  
  35. extern void *__base;        /* BASE = Image$$RO$$Base */
  36. extern void *__lomem;        /* LOMEM = Image$$RW$$Limit */
  37. extern void *__himem;        /* HIMEM from OS_GetEnv */
  38.  
  39. extern void *__break;        /* end of data area */
  40. extern void *__stack;        /* bottom of stack */
  41.  
  42. extern unsigned int __time[2];    /* start time */
  43.  
  44. #define __OS_ARTHUR    0xA0
  45. #define __OS_RISCOS_200    0xA1
  46. #define __OS_RISCOS_201    0xA2
  47. #define __OS_RISCOS_300    0xA3
  48. #define __OS_RISCOS_310    0xA4
  49.  
  50. /* setjmp() and longjmp() modify their behaviour according to __fpflag */
  51.  
  52. extern void __fpinit(void);    /* check FP presence & set/clear FP flag */
  53.  
  54. extern int __fpflag;        /* FP flag */
  55.  
  56. extern void __fptest(void);    /* perform FP test */
  57. extern void __fpclr(int);    /* FP test SIGILL handler */
  58.  
  59.  
  60. /* OS_ChangeEnvironment is used to set up exception handlers. These
  61.  * handlers use OS_CallBack to raise signals in the foreground process.
  62.  * RTFM (RiscOS PRM - 'The Program Environment') for more info. */
  63.  
  64. /* __reset() performs all the functions of exit(), but returns without
  65.  * exiting - note that after a call to __reset() all handlers are
  66.  * in their original state, and *all* stdio & UNIX I/O has been shut down.
  67.  * You should use __exit() to exit after __reset(). */
  68.  
  69. extern void __reset(void);    /* reset handlers, etc. back to orig. state */
  70.  
  71.  
  72. /* struct handler contains all the information about an
  73.  * OS_ChangeEnvironment handler */
  74.  
  75. struct handler
  76.   {
  77.   void            (*h)(void);    /* address of handler (0 = default) */
  78.   unsigned int        r;        /* r12/0 handler arg. (0 = default) */
  79.   void            *b;        /* buffer pointer (0 = default) */
  80.   };
  81.  
  82. /* struct env contains all the info. needed to restore
  83.  * the RiscOS environment prior to a call to OS_Exit */
  84.  
  85. struct env
  86.   {
  87.   struct handler    h[13];        /* handlers 0-12 */
  88.   };
  89.  
  90. extern struct env __Cenv[1];        /* this C environment */
  91. extern struct env __Oenv[1];        /* the old (calling) environment */
  92.  
  93. extern os_error *__rdenv(int,struct handler *); /* OS_ChangeEnvironment */
  94. extern os_error *__wrenv(int,struct handler *); /* OS_ChangeEnvironment */
  95.  
  96. /* The asterisked handlers do nothing; the others raise signals. */
  97.  
  98. extern void __h_sigill(void);    /*   undefined instruction handler */
  99. extern void __h_sigbus(void);    /*   address exception handler */
  100. extern void __h_sigsegv0(void); /*   prefetch abort handler */
  101. extern void __h_sigsegv1(void); /*   data abort handler */
  102.  
  103. extern void __h_sigfpe(void);    /*   FPE handler */
  104.  
  105. extern void __h_error(void);    /*   error handler */
  106. extern void __h_sigint(void);    /*   escape handler */
  107. extern void __h_event(void);    /* * event handler */
  108.  
  109. extern void __h_sigsys(void);    /* * unused SWI handler */
  110.  
  111. extern void __h_sigalrm(void);    /*   SIGALRM handler */
  112.  
  113. extern void __h_cback(void);    /*   CallBack handler */
  114.  
  115.  
  116. extern void __h_exit(void);    /*   exit handler - calls _exit() */
  117.  
  118.  
  119. extern unsigned int __cbreg[16];    /* callback handler register buffer */
  120.  
  121. extern char *__h_errbuf;        /* error handler string buffer */
  122.  
  123.  
  124. /* vfork() & exec() */
  125.  
  126. extern int vfork(void);     /* fork to child - calls __vfork() */
  127. extern void __vret(int);    /* return from child - calls __vexit() */
  128.  
  129. extern int *__vfork(void);    /* fork to child context */
  130. extern int *__vexit(int);    /* restore to parent context */
  131.  
  132. /* execve() execs a RiscOS command - calls __exec() */
  133.  
  134. extern int execve(char *,char **,char **);
  135.  
  136. extern void __exret(void);    /* return from __exec() - calls __vret() */
  137.  
  138. extern void (*__exptr)(char *); /* pointer to __exec() routine */
  139. extern int __exlen;        /* length of __exec() routine */
  140. extern os_error *__exerr;
  141. extern int __exshift;        /* __exec() shift */
  142.  
  143. /* vfork weak link */
  144.  
  145. extern void (*___vret)(int);
  146.  
  147. /* stdio weak links */
  148.  
  149. extern void (*___stdioinit)(void);
  150. extern void (*___stdioexit)(void);
  151.  
  152. /* C++ global constructor weak link */
  153. extern void (*___do_global_ctors)(void);
  154.  
  155. #ifdef __cplusplus
  156.     }
  157. #endif
  158.  
  159. #endif
  160.