scroll mode for very long start menus
[reactos.git] / reactos / apps / utils / pice / module / utils.h
1 /*++
2
3 Copyright (c) 1998-2001 Klaus P. Gerlicher
4
5 Module Name:
6
7 utils.h
8
9 Abstract:
10
11 HEADER for utils.c
12
13 Environment:
14
15 LINUX 2.2.X
16 Kernel mode only
17
18 Author:
19
20 Klaus P. Gerlicher
21
22 Revision History:
23
24 15-Nov-2000: general cleanup of source files
25
26 Copyright notice:
27
28 This file may be distributed under the terms of the GNU Public License.
29
30 --*/
31 #include <stdarg.h>
32 #include "../../../../ntoskrnl/include/internal/ps.h"
33 #define __STR(x) #x
34 #define STR(x) __STR(x)
35
36 typedef enum {
37 kbDE,
38 kbUS,
39 kbDK,
40 kbMaximum
41 } KeyboardLayout;
42
43 // scancode to ASCII conversion
44 typedef struct tagSCANTOASCII
45 {
46 UCHAR s; // 0 terminates the table
47 UCHAR a;
48 }SCANTOASCII, *PSCANTOASCII;
49
50 typedef struct tagKEYBOARD_LAYOUT
51 {
52 LPSTR name;
53 PSCANTOASCII normal;
54 PSCANTOASCII shifted;
55 PSCANTOASCII alted;
56 } KEYBOARD_LAYOUT, *PKEYBOARD_LAYOUT;
57
58 extern PKEYBOARD_LAYOUT CurrentKeyboard;
59
60 typedef struct _FRAME
61 {
62 ULONG error_code;
63 ULONG eip;
64 ULONG cs;
65 ULONG eflags;
66 }FRAME;
67
68 #define SHOW_FIELD_BYTE(ptr,field,wait)\
69 {\
70 if(wait && WaitForKey()==FALSE)\
71 return TRUE;\
72 PICE_sprintf(tempCmd,#field" = %.2x\n",ptr->##field);\
73 Print(OUTPUT_WINDOW,tempCmd);\
74 }
75
76 #define SHOW_FIELD_WORD(ptr,field,wait)\
77 {\
78 if(wait && WaitForKey()==FALSE)\
79 return TRUE;\
80 PICE_sprintf(tempCmd,#field" = %.4x\n",ptr->##field);\
81 Print(OUTPUT_WINDOW,tempCmd);\
82 }
83
84 #define SHOW_FIELD_DWORD(ptr,field,wait)\
85 {\
86 if(wait && WaitForKey()==FALSE)\
87 return TRUE;\
88 PICE_sprintf(tempCmd,#field" = %.8x\n",ptr->##field);\
89 Print(OUTPUT_WINDOW,tempCmd);\
90 }
91
92 #define SHOW_FIELD_SEG_OFS(ptr,field1,field2,wait)\
93 {\
94 if(wait && WaitForKey()==FALSE)\
95 return TRUE;\
96 PICE_sprintf(tempCmd,#field1":"#field2" = %.4x:%.8x\n",ptr->##field1,ptr->##field2);\
97 Print(OUTPUT_WINDOW,tempCmd);\
98 }
99
100 typedef struct _PCI_NUMBER
101 {
102 union {
103 struct
104 {
105 ULONG res2 : 2;
106 ULONG reg : 6; // 64 regs per function
107 ULONG func : 3; // 8 functions per device
108 ULONG dev : 5; // 32 device per bus
109 ULONG bus : 8; // 256 buses
110 ULONG res1 : 7;
111 ULONG ce : 1; // 1 to enable
112 }bits;
113 ULONG AsUlong;
114 }u;
115 }PCI_NUMBER;
116 /*
117 typedef struct _PCI_COMMON_CONFIG {
118 USHORT VendorID; // (ro)
119 USHORT DeviceID; // (ro)
120 USHORT Command; // Device control
121 USHORT Status;
122 UCHAR RevisionID; // (ro)
123 UCHAR ProgIf; // (ro)
124 UCHAR SubClass; // (ro)
125 UCHAR BaseClass; // (ro)
126 UCHAR CacheLineSize; // (ro+)
127 UCHAR LatencyTimer; // (ro+)
128 UCHAR HeaderType; // (ro)
129 UCHAR BIST; // Built in self test
130 ULONG BaseAddresses[6];
131 ULONG CIS;
132 USHORT SubVendorID;
133 USHORT SubSystemID;
134 ULONG ROMBaseAddress;
135 UCHAR CapabilitiesPtr;
136 UCHAR Reserved1[3];
137 ULONG Reserved2;
138 UCHAR InterruptLine; //
139 UCHAR InterruptPin; // (ro)
140 UCHAR MinimumGrant; // (ro)
141 UCHAR MaximumLatency; // (ro)
142 }PCI_COMMON_CONFIG;
143 */
144
145 typedef struct tagPageDir
146 {
147 ULONG P :1;
148 ULONG RW :1;
149 ULONG US :1;
150 ULONG PWT :1;
151 ULONG PCD :1;
152 ULONG A :1;
153 ULONG dummy :1;
154 ULONG PS :1;
155 ULONG G :1;
156 ULONG Avail :3;
157 ULONG PTBase :20;
158 }PAGEDIR,*PPAGEDIR;
159
160 typedef struct tagGdt
161 {
162 ULONG Limit_15_0 :16;
163 ULONG Base_15_0 :16;
164 ULONG Base_23_16 :8;
165 ULONG SegType :4;
166 ULONG DescType :1;
167 ULONG Dpl :2;
168 ULONG Present :1;
169 ULONG Limit_19_16 :4;
170 ULONG Avl :1;
171 ULONG Reserved :1;
172 ULONG DefOp :1;
173 ULONG Gran :1;
174 ULONG Base_31_24 :8;
175 }GDT,*PGDT;
176
177 typedef struct tagIdt
178 {
179 ULONG Offset_15_0 :16;
180 ULONG Selector :16;
181 ULONG Reserved :8;
182 ULONG DescType :5;
183 ULONG Dpl :2;
184 ULONG Present :1;
185 ULONG Offset_31_16 :16;
186 }IDT,*PIDT;
187
188 typedef struct tagDESCRIPTOR
189 {
190 USHORT Cpl :2; // current privilege level
191 USHORT Ti :1; // table index (GDT=0 LDT=1)
192 USHORT Val :13; // index into table
193 }DESCRIPTOR,*PDESCRIPTOR;
194
195 PKEYBOARD_LAYOUT GetKeyboardLayout();
196 PKEYBOARD_LAYOUT SetKeyboardLayoutByName(LPSTR Name);
197 void PICE_memset(void* p,unsigned char c,int sz);
198 void PICE_memcpy(void* t,void* s,int sz);
199 char *PICE_strrev(char *);
200 ULONG PICE_strcmp(char* s1,char* s2);
201 ULONG PICE_strcmpi(char* s1,char* s2);
202 ULONG PICE_strncmpi(char* s1,char* s2,ULONG len);
203 USHORT PICE_strlen(const char* s);
204 char* PICE_strcat(char* s1,char* s2);
205 BOOLEAN PICE_isprint(char c);
206 char* PICE_strcpy(char* s1,char* s2);
207 char* PICE_strncpy(char* s1,char* s2,int len);
208 char* PICE_strchr(char* s,char c);
209 int PICE_isdigit( int c );
210 int PICE_isxdigit( int c );
211 int PICE_islower( int c );
212 int PICE_isalpha( int c );
213
214 int PICE_sprintf(char * buf, const char *fmt, ...);
215 int PICE_vsprintf(char *buf, const char *fmt, va_list args);
216
217 BOOLEAN IsAddressValid(ULONG Addr);
218 BOOLEAN IsAddressWriteable(ULONG Addr);
219 BOOLEAN SetAddressWriteable(ULONG address,BOOLEAN bSet);
220 BOOLEAN IsRangeValid(ULONG addr,ULONG Length);
221 void IntelStackWalk(ULONG pc,ULONG ebp,ULONG esp);
222
223 ULONG ReadPhysMem(ULONG Address,ULONG ulSize);
224 void WritePhysMem(ULONG Address,ULONG Datum,ULONG ulSize);
225
226 BOOLEAN IsRetAtEIP(void);
227 BOOLEAN IsCallInstrAtEIP(void);
228
229 ULONG GetLinearAddress(USHORT Segment,ULONG Offset);
230
231 #define OUTPUT_BUFFER_FULL 0x01
232 #define INPUT_BUFFER_FULL 0x02
233 #define MOUSE_OUTPUT_BUFFER_FULL 0x20
234
235 void ShowStoppedMsg(void);
236 void ShowRunningMsg(void);
237
238 void SetHardwareBreakPoints(void);
239 void SetHardwareBreakPoint(ULONG ulAddress,ULONG ulReg);
240
241 // this should be in disasm.h but someone misused the header files
242 BOOLEAN Disasm(PULONG pOffset, PUCHAR pchDst);
243 //////////////////////////////////////////////////////////////////
244
245 //segments defined in \include\napi\i386\segment.h
246 #define GLOBAL_CODE_SEGMENT (KERNEL_CS)
247 #define GLOBAL_DATA_SEGMENT (KERNEL_DS)
248
249 //#define OVR_CS .byte 0x2e
250 //#define OVR_FS .byte 0x64
251
252 void DisplayRegs(void);
253 void SaveOldRegs(void);
254
255 BOOLEAN CheckLoadAbort(void);
256
257 UCHAR KeyboardGetKeyPolled(void);
258 void KeyboardFlushKeyboardQueue(void);
259
260 #define _PAGE_PRESENT 0x001
261 #define _PAGE_RW 0x002
262 #define _PAGE_USER 0x004
263 #define _PAGE_PWT 0x008
264 #define _PAGE_PCD 0x010
265 #define _PAGE_ACCESSED 0x020
266 #define _PAGE_DIRTY 0x040
267 #define _PAGE_PSE 0x080
268 #define _PAGE_4M _PAGE_PSE
269 #define _PAGE_SIZE 0x1000
270
271
272 UCHAR AsciiFromScan(UCHAR s);
273 UCHAR AsciiToScan(UCHAR s);
274
275 void outportb(PUCHAR port,UCHAR data);
276 UCHAR inportb(PUCHAR port);
277
278 void outb_p(UCHAR data, PUCHAR port);
279 UCHAR inb_p(PUCHAR port);
280
281 VOID outl(ULONG l, PULONG port);
282 ULONG inl(PULONG port);
283
284
285 #define save_flags(x) __asm__ __volatile__("pushfl ; popl %0":"=g" (x): /* no input */)
286 #define restore_flags(x) __asm__ __volatile__("pushl %0 ; popfl": /* no output */ :"g" (x):"memory", "cc")
287 #define cli() __asm__ __volatile__("cli": : :"memory")
288 #define sti() __asm__ __volatile__("sti": : :"memory")
289
290 #ifdef NDEBUG
291 #define ASSERT(x)
292 #else
293 #define ASSERT(x) if (!(x)) { DbgPrint("Assertion "#x" failed at %s:%d\n", __FILE__, __LINE__); KeBugCheck(0); }
294 #endif
295
296 //extern unsigned long sys_call_table[];
297
298 //struct mm_struct *GetInitMm(void);
299
300 PMADDRESS_SPACE my_init_mm;
301 LIST_ENTRY* pPsProcessListHead;
302
303 void EnablePassThrough(void);
304
305 #define PAGEDPOOL (1)
306 #define NONPAGEDPOOL (0)
307
308 void * PICE_malloc( size_t numBytes, BOOLEAN fromPaged );
309 void PICE_free( void* p );
310
311 HANDLE PICE_open (LPCWSTR lpPathName, int iReadWrite);
312 long PICE_read(HANDLE hFile, LPVOID lpBuffer, long lBytes);
313 int PICE_close (HANDLE hFile);
314 size_t PICE_len( HANDLE hFile );
315 WCHAR * PICE_wcscpy(WCHAR * str1,const WCHAR * str2);
316 INT
317 STDCALL
318 PICE_MultiByteToWideChar (
319 UINT CodePage,
320 DWORD dwFlags,
321 LPCSTR lpMultiByteStr,
322 int cchMultiByte,
323 LPWSTR lpWideCharStr,
324 int cchWideChar
325 );