diff options
Diffstat (limited to 'portable/include/pstream.h')
-rw-r--r-- | portable/include/pstream.h | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/portable/include/pstream.h b/portable/include/pstream.h new file mode 100644 index 0000000..7678640 --- /dev/null +++ b/portable/include/pstream.h @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------* + * 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 */ |