1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*
2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland
3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown *
4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License");
5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * you may not use this file except in compliance with the License.
6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * You may obtain a copy of the License at
7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown *
8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown *     http://www.apache.org/licenses/LICENSE-2.0
9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown *
10b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * Unless required by applicable law or agreed to in writing, software
11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS,
12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * See the License for the specific language governing permissions and
14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * limitations under the License.
15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */
16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/**
17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * @file picopal.h
18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown *
19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * pico plattform abstraction layer
20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown *
21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland
22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * All rights reserved.
23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown *
24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * History:
25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * - 2009-04-20 -- initial version
26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown *
27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */
28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/**
29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * @addtogroup picoos
30436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
31b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov * <b> Operating system Platform Specific implementation module </b>\n
32b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov *
33b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov*/
34b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#ifndef PICOPAL_H_
35b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define PICOPAL_H_
36b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
37b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include <stdio.h>
38b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include <stdlib.h>
39b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include <stdarg.h>
40b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include <math.h>
41b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include <stddef.h>
42b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "picopltf.h"
43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "picodefs.h"
44b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __cplusplus
46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern "C" {
47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif
48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if 0
49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif
51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
52b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
53ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* *********************************************************/
54ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* general defines and typedefs (used to be in picodefs.h) */
55ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* *********************************************************/
56ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
57ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define TRUE 1
58ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define FALSE 0
59ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
60ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef NULL
61ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define NULL 0
62ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif
63ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
64ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define NULLC '\000'
65ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
66ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
67ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* "strange" defines to switch variants... */
68ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define PICOPAL_DIV_USE_INV 0
69ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
70ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
71ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*---------------Externals-----------------------*/
72b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* used by picocep*/
73b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined(PICO_DEBUG)
74b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    extern int numlongmult, numshortmult;
75b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif
76b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
77b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
78b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovtypedef signed int pico_status_t;
79b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
80b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
81436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/* unfortunately, ANSI-C uses eof for results and exceptional results .. */
82436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/* in the context of reading from a CharBuffer, eof means "no more
83ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   input available FOR NOW" */
84ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
85ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define PICO_EOF                        (pico_status_t)    -1
86ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
87ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
88ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* *************************************************/
89b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* constants                                       */
90ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* *************************************************/
91ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
92ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
93ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  /* operating system identifications */
94ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define PICOPAL_OS_NIL        0  /* just an unchangeable first value */
95ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define PICOPAL_OS_WINDOWS    1
96ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* ... */
97ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define PICOPAL_OS_GENERIC   99 /* must always be the last value */
98ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
99ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* *************************************************/
100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* types                                           */
101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* *************************************************/
102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned char   picopal_uint8;
104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned short  picopal_uint16;
105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int    picopal_uint32;
106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef signed char     picopal_int8;
108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef signed short    picopal_int16;
109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef signed int      picopal_int32;
110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef float           picopal_single;
112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef double          picopal_double;
113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned char     picopal_char;
115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned char   picopal_uchar;
117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef size_t    picopal_objsize_t;
119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef ptrdiff_t picopal_ptrdiff_t;
120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* *************************************************/
122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* functions                                       */
123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* *************************************************/
124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpicopal_int32 picopal_atoi(const picopal_char *);
126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpicopal_int32 picopal_strcmp(const picopal_char *, const picopal_char *);
128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpicopal_int32 picopal_strncmp(const picopal_char *a, const picopal_char *b, picopal_objsize_t siz);
129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpicopal_objsize_t picopal_strlen(const picopal_char *);
130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpicopal_char * picopal_strchr(const picopal_char *, picopal_char);
131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpicopal_char * picopal_strcpy(picopal_char *d, const picopal_char *s);
132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpicopal_char *picopal_strstr(const picopal_char *s, const picopal_char *substr);
133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpicopal_char *picopal_strcat(picopal_char *dest, const picopal_char *src);
134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpicopal_int16 picopal_sprintf(picopal_char * dst, const picopal_char *fmt, ...);
135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* copies 'length' bytes from 'src' to 'dest'. (regions may be overlapping) no error checks! */
137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid * picopal_mem_copy(const void * src, void * dst,  picopal_objsize_t length);
138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* sets 'length' bytes starting at dest[0] to 'byte_val' */
140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid * picopal_mem_set(void * dest, picopal_uint8 byte_val, picopal_objsize_t length);
141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* safe versions */
143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpicopal_objsize_t picopal_vslprintf(picopal_char * dst, picopal_objsize_t siz, const picopal_char *fmt, va_list args);
144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpicopal_objsize_t picopal_slprintf(picopal_char * dst, picopal_objsize_t siz, const picopal_char *fmt, /*args*/ ...);
145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpicopal_objsize_t picopal_strlcpy(picopal_char *dst, const picopal_char *src, picopal_objsize_t siz);
146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*Fixed point computation*/
148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*
149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpicopal_int32 picopal_fixptdiv(picopal_int32 a, picopal_int32 b, picopal_uint8 bigpow);
150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpicopal_int32 picopal_fixptmult(picopal_int32 x, picopal_int32 y, picopal_uint8 bigpow);
151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpicopal_int32 picopal_fixptdivORinv(picopal_int32 a, picopal_int32 b, picopal_int32 invb, picopal_uint8 bigpow);
152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpicopal_int32 picopal_fixptmultdouble(picopal_int32 x, picopal_int32 y, picopal_uint8 bigpow);
153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpicopal_uint8 picopal_highestBit(picopal_int32 x);
154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown*/
155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* *************************************************/
157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* math                                            */
158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* *************************************************/
159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpicopal_double picopal_cos (const picopal_double cos_arg);
161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpicopal_double picopal_sin (const picopal_double sin_arg);
162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpicopal_double picopal_fabs (const picopal_double fabs_arg);
163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* *************************************************/
168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* file access                                     */
169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* *************************************************/
170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern picopal_char picopal_eol(void);
172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define picopal_FILE      FILE
174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* seek modes to be used with the 'FSeek' procedure */
177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define PICOPAL_SEEK_SET     0   /* absolut seek position */
178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define PICOPAL_SEEK_CUR     1   /* relative to current */
179ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define PICOPAL_SEEK_END     2   /* relative to the end of the file */
180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
181ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
182ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef enum {PICOPAL_BINARY_READ, PICOPAL_BINARY_WRITE, PICOPAL_TEXT_READ, PICOPAL_TEXT_WRITE}  picopal_access_mode;
183ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
184ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef picopal_FILE * picopal_File;
185ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
186ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern picopal_File picopal_fopen (picopal_char fileName[], picopal_access_mode mode);
187ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* 'FOpen' opens the file with name 'filename'. Depending on
188ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   'mode' :
189ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      'TextRead'    : Opens an existing text file for reading.
190436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov                      The file is positioned at the beginning of the file.
191436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      'TextWrite'   : Opens and truncates an existing file or creates a new
192436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov                      text file for writing. The file is positioned at the
193436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov                      beginning.
194436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      'BinaryRead'  : Opens an existing binary file for reading.
195436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov                      The file is positioned at the beginning of the file.
196436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      'BinaryWrite' : Opens and truncates an existing file or creates a new
197436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov                      binary file for writing. The file is positioned at the
198436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov                      beginning.
199436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov    If the opening of the file is successful a file pointer is given
200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    back. Otherwise a NIL-File is given back.
201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown*/
202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern picopal_File picopal_get_fnil (void);
205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
207436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovextern  picopal_int8 picopal_is_fnil (picopal_File f);
208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern pico_status_t picopal_fclose (picopal_File f);
211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern picopal_uint32 picopal_flength (picopal_File f);
214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern  picopal_uint8 picopal_feof (picopal_File f);
217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern pico_status_t picopal_fseek (picopal_File f, picopal_uint32 offset, picopal_int8 seekmode);
220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
222436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovextern pico_status_t picopal_fget_char (picopal_File f, picopal_char * ch);
223436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
224436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
225436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovextern picopal_objsize_t picopal_fread_bytes (picopal_File f, void * ptr, picopal_objsize_t objsize, picopal_uint32 nobj);
226b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
227b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovextern picopal_objsize_t picopal_fwrite_bytes (picopal_File f, void * ptr, picopal_objsize_t objsize, picopal_uint32 nobj);
228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern pico_status_t picopal_fflush (picopal_File f);
231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*
233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern pico_status_t picopal_fput_char (picopal_File f, picopal_char ch);
234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown*/
235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*
238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern pico_status_t picopal_remove (picopal_char filename[]);
239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern pico_status_t picopal_rename (picopal_char oldname[], picopal_char newname[]);
242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown*/
244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* *************************************************/
246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* functions for debugging/testing purposes only   */
247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* *************************************************/
248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/**
250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Returns a pointer to a newly allocated chunk of 'size' bytes, aligned
251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * to the system page size.
252ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Memory allocated by this routine may be protected by calling function
253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * picopal_mrp_protect().
254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */
255ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid *picopal_mpr_alloc(picopal_objsize_t size);
256ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
257ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/**
258ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Releases the chunk of memory pointed to by '*p'. 'p' must be previously
259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * allocated by a call to picopal_mpr_alloc().
260ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */
261ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid picopal_mpr_free(void **p);
262ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
263ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define PICOPAL_PROT_NONE   0   /* the memory cannot be accessed at all */
264b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define PICOPAL_PROT_READ   1   /* the memory can be read */
265ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define PICOPAL_PROT_WRITE  2   /* the memory can be written to */
266ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
267b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/**
268ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Specifies the desired protection 'prot' for the memory page(s) containing
269ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * part or all of the interval [addr, addr+len-1]. If an access is disallowed
270ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * by the protection given it, the program receives a SIGSEGV.
271ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */
272ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpico_status_t picopal_mpr_protect(void *addr, picopal_objsize_t len, picopal_int16 prot);
273ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
274ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Fast, Compact Approximation of the Exponential Function */
275ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownpicopal_double picopal_quick_exp(const picopal_double y);
276ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
277ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* *************************************************/
278ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* types functions for time measurement            */
279ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* *************************************************/
280ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
281ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void picopal_get_timer(picopal_uint32 * sec, picopal_uint32 * usec);
282ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
283ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef __cplusplus
284ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
285ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif
286ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
287ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
288ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif /*PICOPAL_H_*/
289ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown