1 /*---------------------------------------------------------------------------* 2 * pstream.h * 3 * * 4 * Copyright 2007, 2008 Nuance Communciations, Inc. * 5 * * 6 * Licensed under the Apache License, Version 2.0 (the 'License'); * 7 * you may not use this file except in compliance with the License. * 8 * * 9 * You may obtain a copy of the License at * 10 * http://www.apache.org/licenses/LICENSE-2.0 * 11 * * 12 * Unless required by applicable law or agreed to in writing, software * 13 * distributed under the License is distributed on an 'AS IS' BASIS, * 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * 15 * See the License for the specific language governing permissions and * 16 * limitations under the License. * 17 * * 18 *---------------------------------------------------------------------------*/ 19 20 21 22 #ifndef _PORTSTREAM_H_ 23 #define _PORTSTREAM_H_ 24 25 #ifdef __cplusplus 26 extern "C" 27 { 28 #endif 29 30 #include <stdio.h> 31 #include "ptypes.h" 32 33 #ifdef PFILE_VIRTUAL_SUPPORT 34 35 struct FileBufferFrame; 36 typedef struct PORT_FILE_HANDLE 37 { 38 const char *filename; 39 struct FileBufferFrame *startFrame; 40 struct FileBufferFrame *endFrame; 41 struct FileBufferFrame *curFrame; /* current buffer; useful for writable file */ 42 const unsigned char *curPos; 43 const unsigned char *endPos; 44 unsigned int size; /* total buffer size; useful for writable file */ 45 unsigned int frame_size; /* buffer size in current frame; useful for writable file */ 46 int eof; 47 int mode; /* 0 readonly text; 1 readonly binary; 2 writable text; 3 writalbe binary */ 48 } 49 PORT_FILE_HANDLE; 50 51 typedef PORT_FILE_HANDLE* PORT_FILE; 52 53 typedef struct _FileRecord 54 { 55 char name[80]; 56 unsigned char *start; 57 int end; /* offset of the end of the file */ 58 int size; /* total buffer size */ 59 int mode; 60 } 61 FileRecord; 62 63 typedef struct VirtualFileTable_t 64 { 65 const FileRecord* pFileTable; 66 const unsigned char* pFirstFile; 67 } 68 VirtualFileTable; 69 70 /* Function prototypes */ 71 PORTABLE_API void PortFileInit(void); 72 PORTABLE_API PORT_FILE PortFopen(const char* filename, const char* mode); 73 PORTABLE_API int PortFclose(PORT_FILE PortFile); 74 PORTABLE_API size_t PortFread(void* buffer, size_t size, size_t count, PORT_FILE PortFile); 75 PORTABLE_API size_t PortFwrite(const void* buffer, size_t size, size_t count, PORT_FILE PortFile); 76 PORTABLE_API int PortFseek(PORT_FILE PortFile, long offset, int origin); 77 PORTABLE_API long PortFtell(PORT_FILE PortFile); 78 PORTABLE_API int PortFprintf(PORT_FILE PortFile, const char* format, ...); 79 PORTABLE_API char* PortFgets(char* string, int n, PORT_FILE PortFile); 80 PORTABLE_API int PortFflush(PORT_FILE PortFile); 81 PORTABLE_API int PortFeof(PORT_FILE PortFile); 82 PORTABLE_API int PortFgetc(PORT_FILE PortFile); 83 PORTABLE_API int PortFscanf(PORT_FILE PortFile, const char *format, ...); 84 PORTABLE_API int PortFerror(PORT_FILE PortFile); 85 PORTABLE_API void PortClearerr(PORT_FILE PortFile); 86 PORTABLE_API void PortRewind(PORT_FILE PortFile); 87 PORTABLE_API PORT_FILE PortFreopen(const char *path, const char *mode, PORT_FILE PortFile); 88 PORTABLE_API char* PortGetcwd(char *buffer, int maxlen); 89 PORTABLE_API int PortMkdir(const char *dirname); 90 91 /* this function is to create a file with the limit size */ 92 PORTABLE_API int PortFcreate(const char *fname, void *pBuffer, int size); 93 PORTABLE_API void PortFdelete(const char *fname); 94 95 PORTABLE_API void PortSetFileTable(const FileRecord* pFileTable, const unsigned char* pFirstFile); 96 97 void SetFileTable(VirtualFileTable *table); 98 99 #endif /* #ifdef PFILE_VIRTUAL_SUPPORT */ 100 101 #ifdef __cplusplus 102 } 103 #endif 104 105 #endif /* _PORTSTREAM_H */ 106