Root/
Source at commit 1406 created 12 years 10 months ago. By meklort, Revert drivers.c so that kexts are only loaded when OSBundleRequired is set and that value is not safe mode. Added some comments about it too. | |
---|---|
1 | /*␊ |
2 | * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.␊ |
3 | *␊ |
4 | * @APPLE_LICENSE_HEADER_START@␊ |
5 | * ␊ |
6 | * The contents of this file constitute Original Code as defined in and␊ |
7 | * are subject to the Apple Public Source License Version 1.1 (the␊ |
8 | * "License"). You may not use this file except in compliance with the␊ |
9 | * License. Please obtain a copy of the License at␊ |
10 | * http://www.apple.com/publicsource and read it before using this file.␊ |
11 | * ␊ |
12 | * This Original Code and all software distributed under the License are␊ |
13 | * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER␊ |
14 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,␊ |
15 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,␊ |
16 | * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the␊ |
17 | * License for the specific language governing rights and limitations␊ |
18 | * under the License.␊ |
19 | * ␊ |
20 | * @APPLE_LICENSE_HEADER_END@␊ |
21 | */␊ |
22 | /*␊ |
23 | * sl_words.c - Forth and C code for the sl_words package.␊ |
24 | *␊ |
25 | * Copyright (c) 1998-2002 Apple Computer, Inc.␊ |
26 | *␊ |
27 | * DRI: Josh de Cesare␊ |
28 | */␊ |
29 | #include <string.h>␊ |
30 | #include <sl.h>␊ |
31 | ␊ |
32 | #if SL_DEBUG␊ |
33 | void InitDebugWords(void);␊ |
34 | #endif␊ |
35 | ␊ |
36 | extern const char gMacParts[];␊ |
37 | extern const char *gControl2Source[];␊ |
38 | ␊ |
39 | CICell SLWordsIH = 0;␊ |
40 | ␊ |
41 | long InitSLWords(void)␊ |
42 | {␊ |
43 | long result, cnt;␊ |
44 | ␊ |
45 | result = Interpret(0, 1,␊ |
46 | " hex"␊ |
47 | " unselect-dev"␊ |
48 | ␊ |
49 | // Create the slWords pseudo-device␊ |
50 | " \" /packages\" find-device"␊ |
51 | " new-device"␊ |
52 | " \" sl_words\" device-name"␊ |
53 | ␊ |
54 | " : open true ;"␊ |
55 | " : close ;"␊ |
56 | ␊ |
57 | // Define all sl words here.␊ |
58 | ␊ |
59 | // init the outputLevel␊ |
60 | " 0 value outputLevel"␊ |
61 | ␊ |
62 | // slw_set_output_level ( level -- )␊ |
63 | " : slw_set_output_level"␊ |
64 | " dup 0= if 0 stdout ! then"␊ |
65 | " to outputLevel"␊ |
66 | " ;"␊ |
67 | ␊ |
68 | // slw_emit ( ch -- )␊ |
69 | " : slw_emit 2 outputLevel <= if emit else drop then ;"␊ |
70 | ␊ |
71 | // slw_cr ( -- )␊ |
72 | " : slw_cr 2 outputLevel <= if cr then ;"␊ |
73 | ␊ |
74 | // Static init stuff for keyboard␊ |
75 | " 0 value keyboardIH"␊ |
76 | " 20 buffer: keyMap"␊ |
77 | ␊ |
78 | // slw_init_keymap ( keyboardIH -- keyMap )␊ |
79 | " : slw_init_keymap"␊ |
80 | " to keyboardIH"␊ |
81 | " keyMap dup 20 0 fill"␊ |
82 | " ;"␊ |
83 | ␊ |
84 | // slw_update_keymap␊ |
85 | " : slw_update_keymap { ; dpth }"␊ |
86 | " depth -> dpth"␊ |
87 | " keyboardIH if"␊ |
88 | " \" get-key-map\" keyboardIH $call-method"␊ |
89 | " depth dpth - 1 = if 20 then"␊ |
90 | " 4 / 0 do"␊ |
91 | " dup i 4 * + l@ keyMap i 4 * + tuck l@ or swap l!"␊ |
92 | " loop drop"␊ |
93 | " then"␊ |
94 | " ;"␊ |
95 | ␊ |
96 | // Set up the spin cursor stuff.␊ |
97 | " 0 value screenIH"␊ |
98 | " 0 value cursorAddr"␊ |
99 | " 0 value cursorX"␊ |
100 | " 0 value cursorY"␊ |
101 | " 0 value cursorW"␊ |
102 | " 0 value cursorH"␊ |
103 | " 0 value cursorFrames"␊ |
104 | " 0 value cursorPixelSize"␊ |
105 | " 0 value cursorStage"␊ |
106 | " 0 value cursorTime"␊ |
107 | " 0 value cursorDelay"␊ |
108 | ␊ |
109 | // slw_spin ( -- )␊ |
110 | " : slw_spin"␊ |
111 | " screenIH 0<> cursorAddr 0<> and if"␊ |
112 | " get-msecs dup cursorTime - cursorDelay >= if"␊ |
113 | " to cursorTime"␊ |
114 | " slw_update_keymap"␊ |
115 | " cursorStage 1+ cursorFrames mod dup to cursorStage"␊ |
116 | " cursorW cursorH * cursorPixelSize * * cursorAddr +"␊ |
117 | " cursorX cursorY cursorW cursorH"␊ |
118 | " \" draw-rectangle\" screenIH $call-method"␊ |
119 | " else"␊ |
120 | " drop"␊ |
121 | " then"␊ |
122 | " then"␊ |
123 | " ;"␊ |
124 | ␊ |
125 | // slw_spin_init ( screenIH cursorAddr cursorX cursorY cursorW cursorH--)␊ |
126 | " : slw_spin_init"␊ |
127 | " dup FFFF and to cursorH 10 >> drop"␊ |
128 | " dup FFFF and to cursorW 10 >> to cursorPixelSize"␊ |
129 | " dup FFFF and to cursorY 10 >> d# 1000 swap / to cursorDelay"␊ |
130 | " dup FFFF and to cursorX 10 >> to cursorFrames"␊ |
131 | " to cursorAddr to screenIH"␊ |
132 | " ['] slw_spin to spin" ␊ |
133 | " ;"␊ |
134 | ␊ |
135 | // slw_pwd ( phandle addr len -- act )␊ |
136 | " : slw_pwd"␊ |
137 | " ['] pwd 138 - execute"␊ |
138 | " ;"␊ |
139 | ␊ |
140 | // slw_sum ( adr len -- sum )␊ |
141 | " : slw_sum { adr len }"␊ |
142 | " len 0 tuck do"␊ |
143 | " dup 1 and if 10000 or then"␊ |
144 | " 1 >> adr i + c@ + ffff and"␊ |
145 | " loop"␊ |
146 | " ;"␊ |
147 | ␊ |
148 | " device-end"␊ |
149 | ␊ |
150 | " 0 0 \" sl_words\" $open-package"␊ |
151 | ␊ |
152 | , &SLWordsIH);␊ |
153 | ␊ |
154 | if (result != kCINoError) return result;␊ |
155 | if (SLWordsIH == 0) return kCIError;␊ |
156 | ␊ |
157 | if (gOFVersion < kOFVersion3x) {␊ |
158 | result = Interpret(1, 0,␊ |
159 | " dev /packages/obp-tftp"␊ |
160 | " ['] load C + l!"␊ |
161 | , kLoadSize);␊ |
162 | if (result != kCINoError) return result;␊ |
163 | }␊ |
164 | ␊ |
165 | if (gOFVersion < kOFVersion3x) {␊ |
166 | result = Interpret(1, 0,␊ |
167 | " dev /packages/mac-parts"␊ |
168 | " \" lame\" device-name"␊ |
169 | " dev /packages"␊ |
170 | " 1 byte-load"␊ |
171 | " device-end"␊ |
172 | , (long)gMacParts);␊ |
173 | if (result != kCINoError) return result;␊ |
174 | }␊ |
175 | ␊ |
176 | if (gOFVersion < kOFVersion2x) {␊ |
177 | for(cnt = 0; gControl2Source[cnt] != '\0'; cnt++) {␊ |
178 | result = Interpret(0, 0, gControl2Source[cnt]);␊ |
179 | if (result == kCIError) return kCIError;␊ |
180 | if (result == kCICatch) return kCINoError;␊ |
181 | }␊ |
182 | }␊ |
183 | ␊ |
184 | #if SL_DEBUG␊ |
185 | InitDebugWords();␊ |
186 | #endif␊ |
187 | ␊ |
188 | return kCINoError;␊ |
189 | }␊ |
190 | ␊ |
191 | #if SL_DEBUG␊ |
192 | void InitDebugWords(void)␊ |
193 | {␊ |
194 | Interpret(0, 0,␊ |
195 | // .sc ( -- )␊ |
196 | " : .sc ?state-valid ci-regs 4+ l@ l@ dup 0= \" Bad Stack\" (abort\")"␊ |
197 | " cr .\" Stack Trace\""␊ |
198 | " begin dup while dup 8 + l@ cr u. l@ repeat drop ;"␊ |
199 | );␊ |
200 | }␊ |
201 | #endif␊ |
202 | ␊ |
203 | void SetOutputLevel(long level)␊ |
204 | {␊ |
205 | CallMethod(1, 0, SLWordsIH, "slw_set_output_level", level);␊ |
206 | }␊ |
207 | ␊ |
208 | ␊ |
209 | char *InitKeyMap(CICell keyboardIH)␊ |
210 | {␊ |
211 | long ret;␊ |
212 | char *keyMap;␊ |
213 | ␊ |
214 | ret = CallMethod(1, 1, SLWordsIH, "slw_init_keymap",␊ |
215 | ␉␉ keyboardIH, (CICell *)&keyMap);␊ |
216 | if (ret != kCINoError) return NULL;␊ |
217 | ␊ |
218 | return keyMap;␊ |
219 | }␊ |
220 | ␊ |
221 | void UpdateKeyMap(void)␊ |
222 | {␊ |
223 | CallMethod(0, 0, SLWordsIH, "slw_update_keymap");␊ |
224 | }␊ |
225 | ␊ |
226 | ␊ |
227 | void SpinInit(CICell screenIH, char *cursorAddr,␊ |
228 | ␉ long cursorX, long cursorY,␊ |
229 | ␉ long cursorW, long cursorH,␊ |
230 | ␉ long frames, long fps,␊ |
231 | ␉ long pixelSize, long spare)␊ |
232 | {␊ |
233 | CallMethod(6, 0, SLWordsIH, "slw_spin_init",␊ |
234 | ␉ screenIH, (long)cursorAddr,␊ |
235 | ␉ cursorX | (frames << 16),␊ |
236 | ␉ cursorY | (fps << 16),␊ |
237 | ␉ cursorW | (pixelSize << 16),␊ |
238 | ␉ cursorH | (spare << 16));␊ |
239 | }␊ |
240 | ␊ |
241 | void Spin(void)␊ |
242 | {␊ |
243 | CallMethod(0, 0, SLWordsIH, "slw_spin");␊ |
244 | }␊ |
245 | ␊ |
246 | ␊ |
247 | long GetPackageProperty(CICell phandle, char *propName,␊ |
248 | ␉␉␉char **propAddr, long *propLen)␊ |
249 | {␊ |
250 | long ret, nameLen = strlen(propName);␊ |
251 | ␊ |
252 | ret = Interpret(3, 2, "get-package-property if 0 0 then",␊ |
253 | ␉␉ (CICell)propName, nameLen, phandle,␊ |
254 | ␉␉ (CICell *)propAddr, (CICell *)propLen);␊ |
255 | if ((ret != kCINoError) || (*propAddr == NULL)) return -1;␊ |
256 | ␊ |
257 | return 0;␊ |
258 | }␊ |
259 |