3 unsigned int scan_nbblong(s
,n
,base
,bext
,u
)
4 char *s
; unsigned int n
; unsigned int base
; unsigned int bext
; unsigned long *u
;
5 /* Note that n == 0 means scan forever. Hopefully this is a good choice. */
7 unsigned int pos
; unsigned long result
; unsigned long c
;
9 while (((c
= (unsigned long) (unsigned char) (s
[pos
] - '0')) < base
)
10 ||(((c
= (unsigned long) (unsigned char) (s
[pos
] - 'a')) < bext
)
12 ||(((c
= (unsigned long) (unsigned char) (s
[pos
] - 'A')) < bext
)
14 ) /* this gets the job done */
15 { result
= result
* (base
+ bext
) + c
; ++pos
; if (pos
== n
) break; }
16 *u
= result
; return pos
;
19 unsigned int scan_nbbint(s
,n
,base
,bext
,u
)
20 char *s
; unsigned int n
; unsigned int base
; unsigned int bext
; unsigned int *u
;
22 unsigned int pos
; unsigned long result
;
23 pos
= scan_nbblong(s
,n
,base
,bext
,&result
);
24 *u
= result
; return pos
;
27 unsigned int scan_nbbshort(s
,n
,base
,bext
,u
)
28 char *s
; unsigned int n
; unsigned int base
; unsigned int bext
; unsigned short *u
;
30 unsigned int pos
; unsigned long result
;
31 pos
= scan_nbblong(s
,n
,base
,bext
,&result
);
32 *u
= result
; return pos
;