/*---------------------------------------------------------------------------*
* pstream.h *
* *
* Copyright 2007, 2008 Nuance Communciations, Inc. *
* *
* 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. *
* *
*---------------------------------------------------------------------------*/
#ifndef _PORTSTREAM_H_
#define _PORTSTREAM_H_
#ifdef __cplusplus
extern "C"
{
#endif
#include <stdio.h>
#include "ptypes.h"
#ifdef PFILE_VIRTUAL_SUPPORT
struct FileBufferFrame;
typedef struct PORT_FILE_HANDLE
{
const char *filename;
struct FileBufferFrame *startFrame;
struct FileBufferFrame *endFrame;
struct FileBufferFrame *curFrame; /* current buffer; useful for writable file */
const unsigned char *curPos;
const unsigned char *endPos;
unsigned int size; /* total buffer size; useful for writable file */
unsigned int frame_size; /* buffer size in current frame; useful for writable file */
int eof;
int mode; /* 0 readonly text; 1 readonly binary; 2 writable text; 3 writalbe binary */
}
PORT_FILE_HANDLE;
typedef PORT_FILE_HANDLE* PORT_FILE;
typedef struct _FileRecord
{
char name[80];
unsigned char *start;
int end; /* offset of the end of the file */
int size; /* total buffer size */
int mode;
}
FileRecord;
typedef struct VirtualFileTable_t
{
const FileRecord* pFileTable;
const unsigned char* pFirstFile;
}
VirtualFileTable;
/* Function prototypes */
PORTABLE_API void PortFileInit(void);
PORTABLE_API PORT_FILE PortFopen(const char* filename, const char* mode);
PORTABLE_API int PortFclose(PORT_FILE PortFile);
PORTABLE_API size_t PortFread(void* buffer, size_t size, size_t count, PORT_FILE PortFile);
PORTABLE_API size_t PortFwrite(const void* buffer, size_t size, size_t count, PORT_FILE PortFile);
PORTABLE_API int PortFseek(PORT_FILE PortFile, long offset, int origin);
PORTABLE_API long PortFtell(PORT_FILE PortFile);
PORTABLE_API int PortFprintf(PORT_FILE PortFile, const char* format, ...);
PORTABLE_API char* PortFgets(char* string, int n, PORT_FILE PortFile);
PORTABLE_API int PortFflush(PORT_FILE PortFile);
PORTABLE_API int PortFeof(PORT_FILE PortFile);
PORTABLE_API int PortFgetc(PORT_FILE PortFile);
PORTABLE_API int PortFscanf(PORT_FILE PortFile, const char *format, ...);
PORTABLE_API int PortFerror(PORT_FILE PortFile);
PORTABLE_API void PortClearerr(PORT_FILE PortFile);
PORTABLE_API void PortRewind(PORT_FILE PortFile);
PORTABLE_API PORT_FILE PortFreopen(const char *path, const char *mode, PORT_FILE PortFile);
PORTABLE_API char* PortGetcwd(char *buffer, int maxlen);
PORTABLE_API int PortMkdir(const char *dirname);
/* this function is to create a file with the limit size */
PORTABLE_API int PortFcreate(const char *fname, void *pBuffer, int size);
PORTABLE_API void PortFdelete(const char *fname);
PORTABLE_API void PortSetFileTable(const FileRecord* pFileTable, const unsigned char* pFirstFile);
void SetFileTable(VirtualFileTable *table);
#endif /* #ifdef PFILE_VIRTUAL_SUPPORT */
#ifdef __cplusplus
}
#endif
#endif /* _PORTSTREAM_H */