288 lines
9.2 KiB
C
288 lines
9.2 KiB
C
/*
|
|
* Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
/**
|
|
* @file picopal.h
|
|
*
|
|
* pico plattform abstraction layer
|
|
*
|
|
* Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland
|
|
* All rights reserved.
|
|
*
|
|
* History:
|
|
* - 2009-04-20 -- initial version
|
|
*
|
|
*/
|
|
/**
|
|
* @addtogroup picoos
|
|
|
|
* <b> Operating system Platform Specific implementation module </b>\n
|
|
*
|
|
*/
|
|
#ifndef PICOPAL_H_
|
|
#define PICOPAL_H_
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <stdarg.h>
|
|
#include <math.h>
|
|
#include <stddef.h>
|
|
#include "picopltf.h"
|
|
#include "picodefs.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
#if 0
|
|
}
|
|
#endif
|
|
|
|
|
|
/* *********************************************************/
|
|
/* general defines and typedefs (used to be in picodefs.h) */
|
|
/* *********************************************************/
|
|
|
|
#define TRUE 1
|
|
#define FALSE 0
|
|
|
|
#ifndef NULL
|
|
#define NULL 0
|
|
#endif
|
|
|
|
#define NULLC '\000'
|
|
|
|
|
|
/* "strange" defines to switch variants... */
|
|
#define PICOPAL_DIV_USE_INV 0
|
|
|
|
|
|
/*---------------Externals-----------------------*/
|
|
/* used by picocep*/
|
|
#if defined(PICO_DEBUG)
|
|
extern int numlongmult, numshortmult;
|
|
#endif
|
|
|
|
|
|
typedef signed int pico_status_t;
|
|
|
|
|
|
/* unfortunately, ANSI-C uses eof for results and exceptional results .. */
|
|
/* in the context of reading from a CharBuffer, eof means "no more
|
|
input available FOR NOW" */
|
|
|
|
#define PICO_EOF (pico_status_t) -1
|
|
|
|
|
|
/* *************************************************/
|
|
/* constants */
|
|
/* *************************************************/
|
|
|
|
|
|
/* operating system identifications */
|
|
#define PICOPAL_OS_NIL 0 /* just an unchangeable first value */
|
|
#define PICOPAL_OS_WINDOWS 1
|
|
/* ... */
|
|
#define PICOPAL_OS_GENERIC 99 /* must always be the last value */
|
|
|
|
/* *************************************************/
|
|
/* types */
|
|
/* *************************************************/
|
|
|
|
typedef unsigned char picopal_uint8;
|
|
typedef unsigned short picopal_uint16;
|
|
typedef unsigned int picopal_uint32;
|
|
|
|
typedef signed char picopal_int8;
|
|
typedef signed short picopal_int16;
|
|
typedef signed int picopal_int32;
|
|
|
|
typedef float picopal_single;
|
|
typedef double picopal_double;
|
|
|
|
typedef unsigned char picopal_char;
|
|
|
|
typedef unsigned char picopal_uchar;
|
|
|
|
typedef size_t picopal_objsize_t;
|
|
typedef ptrdiff_t picopal_ptrdiff_t;
|
|
|
|
/* *************************************************/
|
|
/* functions */
|
|
/* *************************************************/
|
|
|
|
picopal_int32 picopal_atoi(const picopal_char *);
|
|
|
|
picopal_int32 picopal_strcmp(const picopal_char *, const picopal_char *);
|
|
picopal_int32 picopal_strncmp(const picopal_char *a, const picopal_char *b, picopal_objsize_t siz);
|
|
picopal_objsize_t picopal_strlen(const picopal_char *);
|
|
picopal_char * picopal_strchr(const picopal_char *, picopal_char);
|
|
picopal_char * picopal_strcpy(picopal_char *d, const picopal_char *s);
|
|
picopal_char *picopal_strstr(const picopal_char *s, const picopal_char *substr);
|
|
picopal_char *picopal_strcat(picopal_char *dest, const picopal_char *src);
|
|
picopal_int16 picopal_sprintf(picopal_char * dst, const picopal_char *fmt, ...);
|
|
|
|
/* copies 'length' bytes from 'src' to 'dest'. (regions may be overlapping) no error checks! */
|
|
void * picopal_mem_copy(const void * src, void * dst, picopal_objsize_t length);
|
|
|
|
/* sets 'length' bytes starting at dest[0] to 'byte_val' */
|
|
void * picopal_mem_set(void * dest, picopal_uint8 byte_val, picopal_objsize_t length);
|
|
|
|
/* safe versions */
|
|
picopal_objsize_t picopal_vslprintf(picopal_char * dst, picopal_objsize_t siz, const picopal_char *fmt, va_list args);
|
|
picopal_objsize_t picopal_slprintf(picopal_char * dst, picopal_objsize_t siz, const picopal_char *fmt, /*args*/ ...);
|
|
picopal_objsize_t picopal_strlcpy(picopal_char *dst, const picopal_char *src, picopal_objsize_t siz);
|
|
|
|
/*Fixed point computation*/
|
|
/*
|
|
picopal_int32 picopal_fixptdiv(picopal_int32 a, picopal_int32 b, picopal_uint8 bigpow);
|
|
picopal_int32 picopal_fixptmult(picopal_int32 x, picopal_int32 y, picopal_uint8 bigpow);
|
|
picopal_int32 picopal_fixptdivORinv(picopal_int32 a, picopal_int32 b, picopal_int32 invb, picopal_uint8 bigpow);
|
|
picopal_int32 picopal_fixptmultdouble(picopal_int32 x, picopal_int32 y, picopal_uint8 bigpow);
|
|
picopal_uint8 picopal_highestBit(picopal_int32 x);
|
|
*/
|
|
|
|
/* *************************************************/
|
|
/* math */
|
|
/* *************************************************/
|
|
|
|
picopal_double picopal_cos (const picopal_double cos_arg);
|
|
picopal_double picopal_sin (const picopal_double sin_arg);
|
|
picopal_double picopal_fabs (const picopal_double fabs_arg);
|
|
|
|
|
|
|
|
|
|
/* *************************************************/
|
|
/* file access */
|
|
/* *************************************************/
|
|
|
|
extern picopal_char picopal_eol(void);
|
|
|
|
#define picopal_FILE FILE
|
|
|
|
|
|
/* seek modes to be used with the 'FSeek' procedure */
|
|
#define PICOPAL_SEEK_SET 0 /* absolut seek position */
|
|
#define PICOPAL_SEEK_CUR 1 /* relative to current */
|
|
#define PICOPAL_SEEK_END 2 /* relative to the end of the file */
|
|
|
|
|
|
typedef enum {PICOPAL_BINARY_READ, PICOPAL_BINARY_WRITE, PICOPAL_TEXT_READ, PICOPAL_TEXT_WRITE} picopal_access_mode;
|
|
|
|
typedef picopal_FILE * picopal_File;
|
|
|
|
extern picopal_File picopal_fopen (picopal_char fileName[], picopal_access_mode mode);
|
|
/* 'FOpen' opens the file with name 'filename'. Depending on
|
|
'mode' :
|
|
'TextRead' : Opens an existing text file for reading.
|
|
The file is positioned at the beginning of the file.
|
|
'TextWrite' : Opens and truncates an existing file or creates a new
|
|
text file for writing. The file is positioned at the
|
|
beginning.
|
|
'BinaryRead' : Opens an existing binary file for reading.
|
|
The file is positioned at the beginning of the file.
|
|
'BinaryWrite' : Opens and truncates an existing file or creates a new
|
|
binary file for writing. The file is positioned at the
|
|
beginning.
|
|
If the opening of the file is successful a file pointer is given
|
|
back. Otherwise a NIL-File is given back.
|
|
*/
|
|
|
|
|
|
extern picopal_File picopal_get_fnil (void);
|
|
|
|
|
|
extern picopal_int8 picopal_is_fnil (picopal_File f);
|
|
|
|
|
|
extern pico_status_t picopal_fclose (picopal_File f);
|
|
|
|
|
|
extern picopal_uint32 picopal_flength (picopal_File f);
|
|
|
|
|
|
extern picopal_uint8 picopal_feof (picopal_File f);
|
|
|
|
|
|
extern pico_status_t picopal_fseek (picopal_File f, picopal_uint32 offset, picopal_int8 seekmode);
|
|
|
|
|
|
extern pico_status_t picopal_fget_char (picopal_File f, picopal_char * ch);
|
|
|
|
|
|
extern picopal_objsize_t picopal_fread_bytes (picopal_File f, void * ptr, picopal_objsize_t objsize, picopal_uint32 nobj);
|
|
|
|
extern picopal_objsize_t picopal_fwrite_bytes (picopal_File f, void * ptr, picopal_objsize_t objsize, picopal_uint32 nobj);
|
|
|
|
|
|
extern pico_status_t picopal_fflush (picopal_File f);
|
|
|
|
/*
|
|
extern pico_status_t picopal_fput_char (picopal_File f, picopal_char ch);
|
|
*/
|
|
|
|
|
|
/*
|
|
extern pico_status_t picopal_remove (picopal_char filename[]);
|
|
|
|
|
|
extern pico_status_t picopal_rename (picopal_char oldname[], picopal_char newname[]);
|
|
|
|
*/
|
|
|
|
/* *************************************************/
|
|
/* functions for debugging/testing purposes only */
|
|
/* *************************************************/
|
|
|
|
/**
|
|
* Returns a pointer to a newly allocated chunk of 'size' bytes, aligned
|
|
* to the system page size.
|
|
* Memory allocated by this routine may be protected by calling function
|
|
* picopal_mrp_protect().
|
|
*/
|
|
void *picopal_mpr_alloc(picopal_objsize_t size);
|
|
|
|
/**
|
|
* Releases the chunk of memory pointed to by '*p'. 'p' must be previously
|
|
* allocated by a call to picopal_mpr_alloc().
|
|
*/
|
|
void picopal_mpr_free(void **p);
|
|
|
|
#define PICOPAL_PROT_NONE 0 /* the memory cannot be accessed at all */
|
|
#define PICOPAL_PROT_READ 1 /* the memory can be read */
|
|
#define PICOPAL_PROT_WRITE 2 /* the memory can be written to */
|
|
|
|
/**
|
|
* Specifies the desired protection 'prot' for the memory page(s) containing
|
|
* part or all of the interval [addr, addr+len-1]. If an access is disallowed
|
|
* by the protection given it, the program receives a SIGSEGV.
|
|
*/
|
|
pico_status_t picopal_mpr_protect(void *addr, picopal_objsize_t len, picopal_int16 prot);
|
|
|
|
/* Fast, Compact Approximation of the Exponential Function */
|
|
picopal_double picopal_quick_exp(const picopal_double y);
|
|
|
|
/* *************************************************/
|
|
/* types functions for time measurement */
|
|
/* *************************************************/
|
|
|
|
extern void picopal_get_timer(picopal_uint32 * sec, picopal_uint32 * usec);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
#endif /*PICOPAL_H_*/
|