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