Chameleon

Chameleon Svn Source Tree

Root/branches/meklortOld/i386/libsaio/console.c

Source at commit 1146 created 12 years 10 months ago.
By azimutz, Sync with trunk (r1145). Add nVidia dev id's, 0DF4 for "GeForce GT 450M" (issue 99) and 1251 for "GeForce GTX 560M" (thanks to oSxFr33k for testing).
1/*
2 * Copyright (c) 1999-2003 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * Portions Copyright (c) 1999-2003 Apple Computer, Inc. All Rights
7 * Reserved. This file contains Original Code and/or Modifications of
8 * Original Code as defined in and that are subject to the Apple Public
9 * Source License Version 2.0 (the "License"). You may not use this file
10 * except in compliance with the License. Please obtain a copy of the
11 * License at http://www.apple.com/publicsource and read it before using
12 * this file.
13 *
14 * The Original Code and all software distributed under the License are
15 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT. Please see the
19 * License for the specific language governing rights and limitations
20 * under the License.
21 *
22 * @APPLE_LICENSE_HEADER_END@
23 */
24/*
25 * Mach Operating System
26 * Copyright (c) 1990 Carnegie-Mellon University
27 * Copyright (c) 1989 Carnegie-Mellon University
28 * All rights reserved. The CMU software License Agreement specifies
29 * the terms and conditions for use and redistribution.
30 */
31
32/*
33 * INTEL CORPORATION PROPRIETARY INFORMATION
34 *
35 *This software is supplied under the terms of a license agreement or
36 *nondisclosure agreement with Intel Corporation and may not be copied
37 *nor disclosed except in accordance with the terms of that agreement.
38 *
39 *Copyright 1988, 1989 Intel Corporation
40 */
41
42/*
43 * Copyright 1993 NeXT, Inc.
44 * All rights reserved.
45 */
46
47#include "libsaio.h"
48#include "bootstruct.h"
49
50extern intvprf(const char * fmt, va_list ap);
51
52bool gVerboseMode;
53bool gErrors;
54
55/* Kabyl: BooterLog */
56#define BOOTER_LOG_SIZE(64 * 1024)
57#define SAFE_LOG_SIZE80
58
59char *msgbuf = 0;
60char *cursor = 0;
61
62struct putc_info {
63 char * str;
64 char * last_str;
65};
66
67void sputc(int c, struct putc_info * pi)
68{
69if (pi->last_str)
70if (pi->str == pi->last_str)
71{
72*(pi->str) = '\0';
73return;
74}
75*(pi->str)++ = c;
76}
77
78void initBooterLog(void)
79{
80msgbuf = malloc(BOOTER_LOG_SIZE);
81bzero(msgbuf, BOOTER_LOG_SIZE);
82cursor = msgbuf;
83}
84
85void msglog(const char * fmt, ...)
86{
87va_list ap;
88struct putc_info pi;
89
90if (!msgbuf)
91return;
92
93if (((cursor - msgbuf) > (BOOTER_LOG_SIZE - SAFE_LOG_SIZE)))
94return;
95
96va_start(ap, fmt);
97pi.str = cursor;
98pi.last_str = 0;
99prf(fmt, ap, sputc, &pi);
100va_end(ap);
101cursor += strlen((char *)cursor);
102}
103
104void setupBooterLog(void)
105{
106if (!msgbuf)
107return;
108
109Node *node = DT__FindNode("/", false);
110if (node)
111DT__AddProperty(node, "boot-log", strlen((char *)msgbuf) + 1, msgbuf);
112}
113/* Kabyl: !BooterLog */
114
115
116/*
117 * write one character to console
118 */
119void putchar(int c)
120{
121if ( c == '\t' )
122{
123for (c = 0; c < 8; c++) putc(' ');
124return;
125}
126
127if ( c == '\n' )
128 {
129putc('\r');
130 }
131
132putc(c);
133}
134
135int getc()
136{
137 int c = bgetc();
138
139 if ((c & 0xff) == 0)
140 return c;
141 else
142 return (c & 0xff);
143}
144
145// Read and echo a character from console. This doesn't echo backspace
146// since that screws up higher level handling
147
148int getchar()
149{
150register int c = getc();
151
152if ( c == '\r' ) c = '\n';
153
154if ( c >= ' ' && c < 0x7f) putchar(c);
155
156return (c);
157}
158
159int printf(const char * fmt, ...)
160{
161 va_list ap;
162va_start(ap, fmt);
163
164prf(fmt, ap, putchar, 0);
165
166{
167/* Kabyl: BooterLog */
168struct putc_info pi;
169
170if (!msgbuf)
171return 0;
172
173if (((cursor - msgbuf) > (BOOTER_LOG_SIZE - SAFE_LOG_SIZE)))
174return 0;
175pi.str = cursor;
176pi.last_str = 0;
177prf(fmt, ap, sputc, &pi);
178cursor += strlen((char *)cursor);
179}
180
181va_end(ap);
182 return 0;
183}
184
185int verbose(const char * fmt, ...)
186{
187 va_list ap;
188
189va_start(ap, fmt);
190 if (gVerboseMode)
191 {
192prf(fmt, ap, putchar, 0);
193 }
194
195{
196/* Kabyl: BooterLog */
197struct putc_info pi;
198
199if (!msgbuf)
200return 0;
201
202if (((cursor - msgbuf) > (BOOTER_LOG_SIZE - SAFE_LOG_SIZE)))
203return 0;
204pi.str = cursor;
205pi.last_str = 0;
206prf(fmt, ap, sputc, &pi);
207cursor += strlen((char *)cursor);
208}
209
210 va_end(ap);
211 return(0);
212}
213
214int error(const char * fmt, ...)
215{
216 va_list ap;
217 gErrors = true;
218 va_start(ap, fmt);
219
220prf(fmt, ap, putchar, 0);
221
222va_end(ap);
223 return(0);
224}
225
226void stop(const char * fmt, ...)
227{
228va_list ap;
229
230printf("\n");
231va_start(ap, fmt);
232
233prf(fmt, ap, putchar, 0);
234
235va_end(ap);
236printf("\nThis is a non recoverable error! System HALTED!!!");
237halt();
238while (1);
239}
240
241/** Print a "Press a key to continue..." message and wait for a key press. */
242void pause()
243{
244 printf("Press a key to continue...");
245 getc();
246}
247

Archive Download this file

Revision: 1146