00001
00002
00003
00004
00005
00006
00007
00008 #ifndef _NLIBC_UNISTD_H
00009 #define _NLIBC_UNISTD_H
00010
00011 #include <nlibc.h>
00012 #include <errno.h>
00013 #include <stddef.h>
00014
00015
00050
00051
00052 #ifndef __HAS_MAIN
00053 extern void *w_sbrk(ptrdiff_t words);
00054 #else
00055 #if !defined(__cflow_processed) || defined(_uses_w_sbrk_unistd_h)
00056 void *w_sbrk(ptrdiff_t words)
00057 {
00058 register void *newHP;
00059
00060 asm("\tatr $HP 0.$HP.-%0" :: "r" (words));
00061 asm("\tlutmove %0 $HP" : "=r" (newHP));
00062 asm("\tipushandbislt.L $HP $SP\n"
00063 "\t pragma_stk_c5\n"
00064 "\t sex <$SEX_NLCC_STK_OVFL>\n"
00065 "\t pragma_stk_e5\n"
00066 "\tspop\n");
00067
00068 return newHP;
00069 }
00070 #endif // _uses_w_sbrk_unistd_h
00071 #endif // Has Main
00072
00073
00074 #ifndef __HAS_MAIN
00075 extern void *sbrk(ptrdiff_t inc_bytes);
00076 #else
00077 #if !defined(__cflow_processed) || defined(_uses_sbrk_unistd_h)
00078 void *sbrk(ptrdiff_t inc_bytes)
00079 {
00080 int words = (inc_bytes+15)>>4;
00081 return w_sbrk(words);
00082 }
00083 #endif // _uses_sbrk_unistd_h
00084 #endif // Has Main
00085
00086
00087
00113
00114
00115 enum {
00116 _SC_CLK_TCK=2,
00117 };
00118
00119 #ifndef __HAS_MAIN
00120 extern long sysconf(int name);
00121 #else
00122 #if !defined(__cflow_processed) || defined(_uses_sysconf_unistd_h)
00123 long sysconf(int name)
00124 {
00125 register long ret;
00126
00127 switch (name) {
00128 case _SC_CLK_TCK:
00129 {
00130 register double clk_normfac;
00131 asm("\tLMTR %0 :1 $MEM_CLK_NORMFAC\n" : "=r" (clk_normfac));
00132 ret = (long) (1000. / clk_normfac);
00133 break;
00134 }
00135 default:
00136 errno = EINVAL;
00137 ret = -1;
00138 }
00139
00140 return ret;
00141 }
00142 #endif // _uses_sysconf_unistd_h
00143 #endif // Has Main
00144
00145
00146 #ifdef _OS_
00147 #include <os1/unistd.h>
00148 #endif
00149
00150 #endif // _NLIBC_UNISTD_H