OILS / cpp / core.h View on Github | oils.pub

128 lines, 76 significant
1// core.h: Replacement for core/*.py
2
3#ifndef CORE_H
4#define CORE_H
5
6#include <pwd.h> // passwd
7#include <termios.h>
8
9#include "_gen/frontend/syntax.asdl.h"
10#include "cpp/pgen2.h"
11#include "mycpp/runtime.h"
12
13// Hacky forward declaration
14namespace completion {
15class RootCompleter;
16};
17
18namespace pyos {
19
20const int TERM_ICANON = ICANON;
21const int TERM_ECHO = ECHO;
22const int EOF_SENTINEL = 256;
23const int NEWLINE_CH = 10;
24
25Tuple2<int, int> WaitPid(int waitpid_options);
26Tuple2<int, int> Read(int fd, int n, List<BigStr*>* chunks);
27Tuple2<int, int> ReadByte(int fd);
28BigStr* ReadLineBuffered();
29Dict<BigStr*, BigStr*>* Environ();
30int Chdir(BigStr* dest_dir);
31BigStr* GetMyHomeDir();
32BigStr* GetHomeDir(BigStr* user_name);
33
34class ReadError {
35 public:
36 explicit ReadError(int err_num_) : err_num(err_num_) {
37 }
38
39 static constexpr ObjHeader obj_header() {
40 return ObjHeader::ClassFixed(kZeroMask, sizeof(ReadError));
41 }
42
43 int err_num;
44};
45
46class PasswdEntry {
47 public:
48 explicit PasswdEntry(const passwd* entry)
49 : pw_name(StrFromC(entry->pw_name)),
50 pw_uid(entry->pw_uid),
51 pw_gid(entry->pw_gid) {
52 }
53
54 static constexpr ObjHeader obj_header() {
55 return ObjHeader::ClassFixed(field_mask(), sizeof(PasswdEntry));
56 }
57
58 BigStr* pw_name;
59 int pw_uid;
60 int pw_gid;
61
62 static constexpr uint32_t field_mask() {
63 return maskbit(offsetof(PasswdEntry, pw_name));
64 }
65};
66
67List<PasswdEntry*>* GetAllUsers();
68
69BigStr* GetUserName(int uid);
70
71BigStr* OsType();
72
73Tuple2<mops::BigInt, mops::BigInt> GetRLimit(int resource);
74
75void SetRLimit(int resource, mops::BigInt soft, mops::BigInt hard);
76
77Tuple3<double, double, double> Time();
78
79void PrintTimes();
80
81bool InputAvailable(int fd);
82
83List<int>* WaitForReading(List<int>* fd_list);
84
85IOError_OSError* FlushStdout();
86
87Tuple2<int, void*> PushTermAttrs(int fd, int mask);
88void PopTermAttrs(int fd, int orig_local_modes, void* term_attrs);
89
90Tuple2<BigStr*, int>* MakeDirCacheKey(BigStr* path);
91
92} // namespace pyos
93
94namespace pyutil {
95
96double infinity();
97double nan();
98
99bool IsValidCharEscape(BigStr* c);
100BigStr* ChArrayToString(List<int>* ch_array);
101
102class _ResourceLoader {
103 public:
104 _ResourceLoader() {
105 }
106
107 virtual BigStr* Get(BigStr* path);
108
109 static constexpr ObjHeader obj_header() {
110 return ObjHeader::ClassFixed(kZeroMask, sizeof(_ResourceLoader));
111 }
112};
113
114_ResourceLoader* GetResourceLoader();
115
116BigStr* GetVersion(_ResourceLoader* loader);
117
118void PrintVersionDetails(_ResourceLoader* loader);
119
120BigStr* strerror(IOError_OSError* e);
121
122BigStr* BackslashEscape(BigStr* s, BigStr* meta_chars);
123
124grammar::Grammar* LoadYshGrammar(_ResourceLoader*);
125
126} // namespace pyutil
127
128#endif // CORE_H