blob: acfc8e08ea7473fb252d29cc457481a8edd70cc7 [file] [log] [blame]
* 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
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* 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" {
#if 0
/* *********************************************************/
/* general defines and typedefs (used to be in picodefs.h) */
/* *********************************************************/
#define TRUE 1
#define FALSE 0
#ifndef NULL
#define NULL 0
#define NULLC '\000'
/* "strange" defines to switch variants... */
/* used by picocep*/
#if defined(PICO_DEBUG)
extern int numlongmult, numshortmult;
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_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 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
'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
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 /*PICOPAL_H_*/