Chameleon

Chameleon Svn Source Tree

Root/branches/azimutz/trunkGraphicsEnablerModules/i386/util/fdisk/misc.c

1/*
2 * Copyright (c) 2002 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23
24
25/*
26 * Copyright (c) 1997 Tobias Weingartner
27 * All rights reserved.
28 *
29 * Redistribution and use in source and binary forms, with or without
30 * modification, are permitted provided that the following conditions
31 * are met:
32 * 1. Redistributions of source code must retain the above copyright
33 * notice, this list of conditions and the following disclaimer.
34 * 2. Redistributions in binary form must reproduce the above copyright
35 * notice, this list of conditions and the following disclaimer in the
36 * documentation and/or other materials provided with the distribution.
37 * 3. All advertising materials mentioning features or use of this software
38 * must display the following acknowledgement:
39 * This product includes software developed by Tobias Weingartner.
40 * 4. The name of the author may not be used to endorse or promote products
41 * derived from this software without specific prior written permission.
42 *
43 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
44 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
45 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
46 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
47 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
48 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
49 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
50 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
51 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
52 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
53 */
54
55#include <err.h>
56#include <stdio.h>
57#include <ctype.h>
58#include <stdlib.h>
59#include <string.h>
60#include "misc.h"
61
62
63int
64ask_cmd(cmd)
65cmd_t *cmd;
66{
67char lbuf[100], *cp, *buf;
68
69/* Get input */
70if (fgets(lbuf, sizeof lbuf, stdin) == NULL)
71errx(1, "eof");
72lbuf[strlen(lbuf)-1] = '\0';
73
74/* Parse input */
75buf = lbuf;
76buf = &buf[strspn(buf, " \t")];
77cp = &buf[strcspn(buf, " \t")];
78*cp++ = '\0';
79strncpy(cmd->cmd, buf, 10);
80buf = &cp[strspn(cp, " \t")];
81strncpy(cmd->args, buf, 100);
82
83return (0);
84}
85
86int
87ask_num(str, flags, dflt, low, high, help)
88const char *str;
89int flags;
90int dflt;
91int low;
92int high;
93void (*help) __P((void));
94{
95char lbuf[100], *cp;
96int num;
97
98do {
99again:
100num = dflt;
101if (flags == ASK_HEX)
102printf("%s [%X - %X]: [%X] ", str, low, high, num);
103else
104printf("%s [%d - %d]: [%d] ", str, low, high, num);
105if (help)
106printf("(? for help) ");
107
108if (fgets(lbuf, sizeof lbuf, stdin) == NULL)
109errx(1, "eof");
110lbuf[strlen(lbuf)-1] = '\0';
111
112if (help && lbuf[0] == '?') {
113(*help)();
114goto again;
115}
116
117/* Convert */
118cp = lbuf;
119num = strtol(lbuf, &cp, ((flags==ASK_HEX)?16:10));
120
121/* Make sure only number present */
122if (cp == lbuf)
123num = dflt;
124if (*cp != '\0') {
125printf("'%s' is not a valid number.\n", lbuf);
126num = low - 1;
127} else if (num < low || num > high) {
128printf("'%d' is out of range.\n", num);
129}
130} while (num < low || num > high);
131
132return (num);
133}
134
135int
136ask_yn(str, default_answer)
137const char *str;
138int default_answer;
139{
140int ch, first;
141
142printf("%s [%c] ", str, default_answer ? 'y' : 'n');
143fflush(stdout);
144
145first = ch = getchar(); //Azi: what about these ?
146while (ch != '\n' && ch != EOF)
147ch = getchar(); //Azi: not messing them :P
148
149if (ch == EOF || first == EOF)
150errx(1, "eof");
151
152if (first == '\n')
153 return default_answer;
154
155return (first == 'y' || first == 'Y');
156}
157
158u_int16_t
159getshort(p)
160void *p;
161{
162unsigned char *cp = p;
163
164return (cp[0] | (cp[1] << 8));
165}
166
167void
168putshort(p, l)
169void *p;
170u_int16_t l;
171{
172unsigned char *cp = p;
173
174*cp++ = l;
175*cp++ = l >> 8;
176}
177
178u_int32_t
179getlong(p)
180void *p;
181{
182unsigned char *cp = p;
183
184return (cp[0] | (cp[1] << 8) | (cp[2] << 16) | (cp[3] << 24));
185}
186
187void
188putlong(p, l)
189void *p;
190u_int32_t l;
191{
192unsigned char *cp = p;
193
194*cp++ = l;
195*cp++ = l >> 8;
196*cp++ = l >> 16;
197*cp++ = l >> 24;
198}
199

Archive Download this file

Revision: 1022