1 /**
2   Mirror _fileobject.h
3   */
4 module deimos.python.fileobject;
5 
6 import core.stdc.stdio;
7 import deimos.python.pyport;
8 import deimos.python.object;
9 
10 extern(C):
11 // Python-header-file: Include/fileobject.h:
12 
13 version(Python_3_0_Or_Later) {
14 }else{
15     /// subclass of PyObject
16     /// Availability: 2.*
17     struct PyFileObject {
18         mixin PyObject_HEAD;
19 
20         /// _
21         FILE* f_fp;
22         /// _
23         PyObject* f_name;
24         /// _
25         PyObject* f_mode;
26         /// _
27         int function(FILE*) f_close;
28         /** Flag used by 'print' command */
29         int f_softspace;
30         /** Flag which indicates whether the file is
31            open in binary (1) or text (0) mode */
32         int f_binary;
33         /** Allocated readahead buffer */
34         char* f_buf;
35         /** Points after last occupied position */
36         char* f_bufend;
37         /** Current buffer position */
38         char* f_bufptr;
39         /** Buffer for setbuf(3) and setvbuf(3) */
40         char* f_setbuf;
41         /** Handle any newline convention */
42         int f_univ_newline;
43         /** Types of newlines seen */
44         int f_newlinetypes;
45         /** Skip next \n */
46         int f_skipnextlf;
47         /// _
48         PyObject* f_encoding;
49         version(Python_2_6_Or_Later){
50             /// Availability: >= 2.6
51             PyObject* f_errors;
52         }
53         /** List of weak references */
54         PyObject* weakreflist;
55         version(Python_2_6_Or_Later){
56             /** Num. currently running sections of code
57                using f_fp with the GIL released. */
58             /// Availability: >= 2.6
59             int unlocked_count;
60             /// Availability: >= 2.6
61             int readable;
62             /// Availability: >= 2.6
63             int writable;
64         }
65     }
66 
67     /// Availability: 2.*
68     mixin(PyAPI_DATA!"PyTypeObject PyFile_Type");
69 
70     // D translation of C macro:
71     /// Availability: 2.*
72     int PyFile_Check()(PyObject* op) {
73         return PyObject_TypeCheck(op, &PyFile_Type);
74     }
75     // D translation of C macro:
76     /// Availability: 2.*
77     int PyFile_CheckExact()(PyObject* op) {
78         return Py_TYPE(op) == &PyFile_Type;
79     }
80 
81     /// Availability: 2.*
82     PyObject* PyFile_FromString(char*, char*);
83     /// Availability: 2.*
84     void PyFile_SetBufSize(PyObject*, int);
85     /// Availability: 2.*
86     int PyFile_SetEncoding(PyObject*, const(char)*);
87     version(Python_2_6_Or_Later){
88         /// Availability: >= 2.6
89         int PyFile_SetEncodingAndErrors(PyObject* , const(char)*, const(char)* errors);
90     }
91     /// Availability: 2.*
92     PyObject* PyFile_FromFile(FILE*, char*, char*, int function(FILE*));
93     /// Availability: 2.*
94     FILE* PyFile_AsFile(PyObject*);
95     version(Python_2_6_Or_Later){
96         /// Availability: >= 2.6
97         void PyFile_IncUseCount(PyFileObject*);
98         /// Availability: >= 2.6
99         void PyFile_DecUseCount(PyFileObject*);
100     }
101     /// Availability: 2.*
102     PyObject_BorrowedRef* PyFile_Name(PyObject*);
103 }
104 version(Python_3_0_Or_Later) {
105     /// Availability: 3.*
106     PyObject* PyFile_FromFd(int, char *, char *, int, char *, char *,
107             char *, int);
108 }
109 /// _
110 PyObject* PyFile_GetLine(PyObject* , int);
111 /// _
112 int PyFile_WriteObject(PyObject*, PyObject*, int);
113 version(Python_3_0_Or_Later) {
114 }else {
115     /// Availability: 2.*
116     int PyFile_SoftSpace(PyObject*, int);
117 }
118 /// _
119 int PyFile_WriteString(const(char)*, PyObject*);
120 /// _
121 int PyObject_AsFileDescriptor(PyObject*);
122 
123 /** The default encoding used by the platform file system APIs
124    If non-NULL, this is different than the default encoding for strings
125 */
126 mixin(PyAPI_DATA!"const(char)* Py_FileSystemDefaultEncoding");
127 
128 version(Python_3_6_Or_Later) {
129     /// _
130     mixin(PyAPI_DATA!"const(char)* Py_FileSystemDefaultEncodeError");
131 }
132 
133 version(Python_3_7_Or_Later) {
134     /// _
135     mixin(PyAPI_DATA!"int Py_UTF8Mode");
136 }
137 
138 /// _
139 enum PY_STDIOTEXTMODE = "b";
140 
141 /// _
142 /* Routine to replace fgets() which accept any of \r, \n
143    or \r\n as line terminators.
144 */
145 char* Py_UniversalNewlineFgets(char*, int, FILE*, PyObject*);
146 version(Python_3_0_Or_Later) {
147     /// Availability: 3.*
148     mixin(PyAPI_DATA!"int Py_HasFileSystemDefaultEncoding");
149     /// Availability: 3.*
150     PyObject* PyFile_NewStdPrinter(int);
151     /// Availability: 3.*
152     mixin(PyAPI_DATA!"PyTypeObject PyStdPrinter_Type");
153 }else{
154     /** Routines to replace fread() and fgets() which accept any of \r, \n
155       or \r\n as line terminators.
156      */
157     /// Availability: 2.*
158     size_t Py_UniversalNewlineFread(char*, size_t, FILE*, PyObject*);
159 }
160 
161 version(Python_3_0_Or_Later) {
162 }else version(Python_2_5_Or_Later) {
163     /** A routine to do sanity checking on the file mode string.  returns
164       non-zero on if an exception occurred
165      */
166     /// Availability: 2.*
167     int _PyFile_SanitizeMode(char *mode);
168 }
169 
170 version(Python_2_7_Or_Later) {
171     //#if defined _MSC_VER && _MSC_VER >= 1400
172     //int _PyVerify_fd(int fd);
173 }