Chameleon Applications

Chameleon Applications Svn Source Tree

Root/branches/iFabio/Chameleon/i386/libsaio/console.c

Source at commit 307 created 12 years 11 months ago.
By ifabio, merge changes from trunk (929). Also merge the module changes from Azimutz branche (fix compile error) Also edited the info.plist into AHCIPortInjector.kext: http://forum.voodooprojects.org/index.php/topic,1170.0.html
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#include <vers.h>
50
51extern intvprf(const char * fmt, va_list ap);
52
53bool gVerboseMode;
54bool gErrors;
55
56/** Kabyl: BooterLog
57
58Azi: Doubled available log size; this seems to fix some hangs and instant reboots caused by
59booting with -f (ignore caches). 96kb are enough to hold full log, booting with -f; even so,
60this depends on how much we "play" at the boot prompt and with what patches we're playing,
61depending on how much they print to the log.
62**/ //Azi: closing **/ alows colapse/expand... is this desirable?? colapsing an entire page
63 // will also colapse comments....
64#define BOOTER_LOG_SIZE(128 * 1024)
65#define SAFE_LOG_SIZE134
66
67char *msgbuf = 0;
68char *cursor = 0;
69
70struct putc_info //Azi: same as below
71{
72 char * str;
73 char * last_str;
74};
75
76static int
77sputc(int c, struct putc_info * pi) //Azi: exists on printf.c & gui.c
78{
79if (pi->last_str)
80if (pi->str == pi->last_str)
81{
82*(pi->str) = '\0';
83return 0;
84}
85*(pi->str)++ = c;
86 return c;
87}
88
89void initBooterLog(void)
90{
91msgbuf = malloc(BOOTER_LOG_SIZE);
92bzero(msgbuf, BOOTER_LOG_SIZE);
93cursor = msgbuf;
94msglog("%s\n", "Chameleon " I386BOOT_CHAMELEONVERSION " (svn-r" I386BOOT_CHAMELEONREVISION ")" " [" I386BOOT_BUILDDATE "]");
95}
96
97void msglog(const char * fmt, ...)
98{
99va_list ap;
100struct putc_info pi;
101
102if (!msgbuf)
103return;
104
105if (((cursor - msgbuf) > (BOOTER_LOG_SIZE - SAFE_LOG_SIZE)))
106return;
107
108va_start(ap, fmt);
109pi.str = cursor;
110pi.last_str = 0;
111prf(fmt, ap, sputc, &pi);
112va_end(ap);
113cursor += strlen((char *)cursor);
114}
115
116void setupBooterLog(void)
117{
118if (!msgbuf)
119return;
120
121Node *node = DT__FindNode("/", false);
122if (node)
123DT__AddProperty(node, "boot-log", strlen((char *)msgbuf) + 1, msgbuf);
124}
125/* Kabyl: !BooterLog */
126
127/*
128 * write one character to console
129 */
130int putchar(int c)
131{
132if ( c == '\t' )
133{
134for (c = 0; c < 8; c++) bios_putchar(' ');
135return c;
136}
137
138if ( c == '\n' )
139 {
140bios_putchar('\r');
141 }
142
143bios_putchar(c);
144
145 return c;
146}
147
148int getc()
149{
150 int c = bgetc();
151
152 if ((c & 0xff) == 0)
153 return c;
154 else
155 return (c & 0xff);
156}
157
158// Read and echo a character from console. This doesn't echo backspace
159// since that screws up higher level handling
160
161int getchar()
162{
163register int c = getc();
164
165if ( c == '\r' ) c = '\n';
166
167if ( c >= ' ' && c < 0x7f) putchar(c);
168
169return (c);
170}
171
172int printf(const char * fmt, ...)
173{
174 va_list ap;
175va_start(ap, fmt);
176if (bootArgs->Video.v_display == VGA_TEXT_MODE)
177prf(fmt, ap, putchar, 0);
178else
179vprf(fmt, ap);
180
181{
182// Kabyl: BooterLog
183struct putc_info pi;
184
185if (!msgbuf)
186return 0;
187
188if (((cursor - msgbuf) > (BOOTER_LOG_SIZE - SAFE_LOG_SIZE)))
189return 0;
190pi.str = cursor;
191pi.last_str = 0;
192prf(fmt, ap, sputc, &pi);
193cursor += strlen((char *)cursor);
194}
195
196va_end(ap);
197 return 0;
198}
199
200int verbose(const char * fmt, ...)
201{
202 va_list ap;
203
204va_start(ap, fmt);
205 if (gVerboseMode)
206 {
207if (bootArgs->Video.v_display == VGA_TEXT_MODE)
208prf(fmt, ap, putchar, 0);
209else
210vprf(fmt, ap);
211 }
212
213{
214// Kabyl: BooterLog
215struct putc_info pi;
216
217if (!msgbuf)
218return 0;
219
220if (((cursor - msgbuf) > (BOOTER_LOG_SIZE - SAFE_LOG_SIZE)))
221return 0;
222pi.str = cursor;
223pi.last_str = 0;
224prf(fmt, ap, sputc, &pi);
225cursor += strlen((char *)cursor);
226}
227
228 va_end(ap);
229 return(0);
230}
231
232int error(const char * fmt, ...)
233{
234 va_list ap;
235 gErrors = true;
236 va_start(ap, fmt);
237if (bootArgs->Video.v_display == VGA_TEXT_MODE)
238prf(fmt, ap, putchar, 0);
239 else
240vprf(fmt, ap);
241va_end(ap);
242 return(0);
243}
244
245void stop(const char * fmt, ...)
246{
247va_list ap;
248
249printf("\n");
250va_start(ap, fmt);
251if (bootArgs->Video.v_display == VGA_TEXT_MODE) {
252prf(fmt, ap, putchar, 0);
253} else {
254vprf(fmt, ap);
255}
256va_end(ap);
257printf("\nThis is a non recoverable error! System HALTED!!!");
258halt();
259while (1);
260}
261
262/** Print a "Press a key to continue..." message and wait for a key press. */
263void pause()
264{
265 printf("Press a key to continue...\n");
266 getc();
267}
268

Archive Download this file

Revision: 307