diff options
| author | Dirk | 2014-06-10 14:19:40 +0200 |
|---|---|---|
| committer | Dirk | 2014-06-10 14:19:40 +0200 |
| commit | 8bb7ed968db64e9b12a6447e2eec3586ef9e935c (patch) | |
| tree | cd038af0c4b67b2f9a029e4a203fcf102f42aa13 /windows/bootpgm/win32/IO.h | |
| parent | Minor cleanup. (diff) | |
| download | tm-scripts-8bb7ed968db64e9b12a6447e2eec3586ef9e935c.tar.gz tm-scripts-8bb7ed968db64e9b12a6447e2eec3586ef9e935c.tar.xz tm-scripts-8bb7ed968db64e9b12a6447e2eec3586ef9e935c.zip | |
Windows system name changer during bootup.
Diffstat (limited to 'windows/bootpgm/win32/IO.h')
| -rw-r--r-- | windows/bootpgm/win32/IO.h | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/windows/bootpgm/win32/IO.h b/windows/bootpgm/win32/IO.h new file mode 100644 index 00000000..575aef06 --- /dev/null +++ b/windows/bootpgm/win32/IO.h @@ -0,0 +1,102 @@ +/* The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (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.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ *
+ * The Initial Developer of the Original Code is Johannes Rudolph.
+ * Portions created by the Initial Developer are Copyright (C) 2006
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Johannes Rudolph <johannes_rudolph@gmx.de>
+ */
+
+/*
+File: IO.h
+Declaration of IO and Indenter classes
+*/
+
+#pragma once
+
+#define STRINGIFY(x) #x
+#define TOSTRING(x) STRINGIFY(x)
+#define CHECK_STATUS(status,name) io.handleStatus(status, #name,__FILE__ ,TOSTRING(__LINE__),true);
+#define CHECK_STATUSA(status,name) io.handleStatus(status, #name,__FILE__ ,TOSTRING(__LINE__),false);
+
+#define CHECKER(status) ::handle(status, __FILE__ ,TOSTRING(__LINE__));
+void handle(ULONG status,char *file,char *line);
+
+/*
+Class: IO
+Interface for the main input/output functions, contains some helper functions
+*/
+class IO
+{
+ unsigned char indent;
+ unsigned char current;
+public:
+ /*
+ Method: getChar
+ has to be implemented by concrete controllers
+
+ Returns:
+ one char per call from input device (keyboard)
+ */
+ virtual char getChar()=0;
+ /*
+ Method: internalPrint
+ prints buffer to screen, must be implemented by concrete controllers
+
+ Parameters:
+ buffer - null-terminated string to be printed to screen
+ */
+ virtual void internalPrint(char *buffer)=0;
+ /*
+ Method: malloc
+ allocates memory of specified size, must be implemented by concrete controllers
+
+ Parameters:
+ length - length of buffer to allocate
+
+ Returns:
+ pointer to allocated memory
+ */
+ virtual void*malloc(unsigned int length)=0;
+ virtual void free(void *buffer)=0;
+ virtual char *getVersion()=0;
+ virtual void handleCharEcho(char ch,char *buffer,unsigned int length)=0;
+
+ IO(void);
+ ~IO(void);
+
+ void print(char *buffer);
+ void println(char *buffer);
+ void readln(char *buffer,unsigned int length);
+ wchar_t *char2wchar(char *buffer);
+ NT::UNICODE_STRING getUnicodeString(char *buffer);
+ void handleStatus(NTSTATUS status, char *function, char *file, char *line,bool onlyWhenDebugging);
+ void debugout(char *string);
+ void setIndent(unsigned char indent);
+ unsigned char getIndent();
+};
+
+class Indenter
+{
+ unsigned char original;
+ IO &io;
+public:
+ Indenter(IO &pio):io(pio)
+ {
+ original=io.getIndent();
+ io.setIndent(original+2);
+ }
+ ~Indenter()
+ {
+ io.setIndent(original);
+ }
+};
\ No newline at end of file |
