No empty .Rs/.Re
[netbsd-mini2440.git] / sys / arch / hpc / stand / hpcboot / hpcmenu.h
blobf3ec425a8a5460a6f87aa0331f00ecda54bdb6b2
1 /* -*-C++-*- $NetBSD: hpcmenu.h,v 1.13 2006/03/05 04:05:39 uwe Exp $ */
3 /*-
4 * Copyright (c) 2001, 2004 The NetBSD Foundation, Inc.
5 * All rights reserved.
7 * This code is derived from software contributed to The NetBSD Foundation
8 * by UCHIYAMA Yasushi.
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
32 #ifndef _HPCBOOT_MENU_H_
33 #define _HPCBOOT_MENU_H_
35 #include <hpcdefs.h>
37 // forward declaration.
38 class Console;
39 class HpcBootApp;
40 class RootWindow;
41 class BootButton;
42 class CancelButton;
43 class ProgressBar;
44 class TabWindowBase;
45 class MainTabWindow;
46 class OptionTabWindow;
47 class ConsoleTabWindow;
48 struct bootinfo;
50 // Application
51 class HpcBootApp {
52 public:
53 HINSTANCE _instance;
54 HWND _cmdbar;
55 RootWindow *_root;
56 Console *_cons;
57 int _cx_char, _cy_char; // 5, 14
59 private:
60 void _get_font_size(void) {
61 HDC hdc = GetDC(0);
62 TEXTMETRIC tm;
63 SelectObject(hdc, GetStockObject(SYSTEM_FONT));
64 GetTextMetrics(hdc, &tm);
65 _cx_char = tm.tmAveCharWidth;
66 _cy_char = tm.tmHeight + tm.tmExternalLeading;
67 ReleaseDC(0, hdc);
70 public:
71 explicit HpcBootApp(HINSTANCE instance) : _instance(instance) {
72 _root = 0;
73 _cmdbar = 0;
74 _get_font_size();
76 virtual ~HpcBootApp(void) { /* NO-OP */ }
78 BOOL registerClass(WNDPROC proc);
79 int run(void);
82 // internal representation of user input.
83 class HpcMenuInterface
85 public:
86 struct HpcMenuPreferences {
87 #define HPCBOOT_MAGIC 0x177d5753
88 int _magic;
89 int _version;
90 size_t _size; // size of HpcMenuPreferences structure.
91 int dir;
92 BOOL dir_user;
93 TCHAR dir_user_path[MAX_PATH];
94 BOOL kernel_user;
95 TCHAR kernel_user_file[MAX_PATH];
96 unsigned platid_hi;
97 unsigned platid_lo;
98 int rootfs;
99 TCHAR rootfs_file[MAX_PATH];
100 // kernel options.
101 BOOL boot_serial;
102 BOOL boot_verbose;
103 BOOL boot_single_user;
104 BOOL boot_ask_for_name;
105 BOOL boot_debugger;
106 // boot loader options.
107 int auto_boot;
108 BOOL reverse_video;
109 BOOL pause_before_boot;
110 BOOL load_debug_info;
111 BOOL safety_message;
112 // serial console speed
113 int serial_speed;
114 #define MAX_BOOT_STR 256
115 TCHAR boot_extra[MAX_BOOT_STR];
117 struct support_status {
118 uint32_t cpu, machine;
119 const TCHAR *cause;
121 static struct support_status _unsupported[];
123 RootWindow *_root;
124 MainTabWindow *_main;
125 OptionTabWindow *_option;
126 ConsoleTabWindow *_console;
127 struct HpcMenuPreferences _pref;
129 struct boot_hook_args {
130 void(*func)(void *);
131 void *arg;
132 } _boot_hook;
134 struct cons_hook_args {
135 void(*func)(void *, unsigned char);
136 void *arg;
137 } _cons_hook [4];
138 int _cons_parameter; // Console tab window check buttons.
140 private:
141 static HpcMenuInterface *_instance;
143 void _set_default_pref(void);
144 enum _platform_op {
145 _PLATFORM_OP_GET,
146 _PLATFORM_OP_SET,
147 _PLATFORM_OP_DEFAULT
149 void *_platform(int, enum _platform_op);
151 protected:
152 HpcMenuInterface(void);
153 virtual ~HpcMenuInterface(void) { /* NO-OP */ }
155 public:
156 static HpcMenuInterface &Instance(void);
157 static void Destroy(void);
159 // preferences.
160 BOOL load(void);
161 BOOL save(void);
163 // Boot button
164 // when user click `boot button' inquires all options.
165 void get_options(void);
166 enum { MAX_KERNEL_ARGS = 16 };
167 int setup_kernel_args(vaddr_t, paddr_t, size_t);
168 void setup_bootinfo(struct bootinfo &bi);
169 void register_boot_hook(struct boot_hook_args &arg) {
170 _boot_hook = arg;
172 // call architecture dependent boot function.
173 void boot(void);
175 // Progress bar.
176 void progress(const char * = NULL);
177 void unprogress(void);
179 // Console window interface.
180 void print(TCHAR *);
181 void register_cons_hook(struct cons_hook_args &arg, int id) {
182 if (id >= 0 && id < 4)
183 _cons_hook[id] = arg;
186 // Main window options
187 TCHAR *dir(int);
188 int dir_default(void);
190 // platform
191 TCHAR *platform_get(int n) {
192 return reinterpret_cast <TCHAR *>
193 (_platform(n, _PLATFORM_OP_GET));
195 int platform_default(void) {
196 return reinterpret_cast <int>
197 (_platform(0, _PLATFORM_OP_DEFAULT));
199 void platform_set(int n) { _platform(n, _PLATFORM_OP_SET); }
202 /* Global access macro */
203 #define HPC_MENU (HpcMenuInterface::Instance())
204 #define HPC_PREFERENCE (HPC_MENU._pref)
206 #endif // _HPCBOOT_MENU_H_