xref: /inferno-os/appl/cmd/randpass.b (revision 7de2b42d50e3c05cc143e7b51284009b5e185581)
137da2899SCharles.Forsythimplement Randpass;
237da2899SCharles.Forsyth
337da2899SCharles.Forsythinclude "sys.m";
437da2899SCharles.Forsyth	sys: Sys;
537da2899SCharles.Forsyth	stderr: ref Sys->FD;
637da2899SCharles.Forsyth
737da2899SCharles.Forsythinclude "draw.m";
837da2899SCharles.Forsyth
9*7de2b42dSforsythinclude "ipints.m";
10*7de2b42dSforsyth	ipints: IPints;
11*7de2b42dSforsyth	IPint: import ipints;
1237da2899SCharles.Forsyth
1337da2899SCharles.ForsythRandpass: module
1437da2899SCharles.Forsyth{
1537da2899SCharles.Forsyth	init: fn(nil: ref Draw->Context, nil: list of string);
1637da2899SCharles.Forsyth};
1737da2899SCharles.Forsyth
1837da2899SCharles.Forsythinit(nil: ref Draw->Context, args: list of string)
1937da2899SCharles.Forsyth{
2037da2899SCharles.Forsyth	sys = load Sys Sys->PATH;
21*7de2b42dSforsyth	ipints = load IPints IPints->PATH;
2237da2899SCharles.Forsyth
2337da2899SCharles.Forsyth	if(args != nil)
2437da2899SCharles.Forsyth		args = tl args;
2537da2899SCharles.Forsyth	pwlen := 16;
2637da2899SCharles.Forsyth	if(args != nil){
2737da2899SCharles.Forsyth		if(!isnumeric(hd args) || (pwlen = int hd args) <= 8 || pwlen > 256){
2837da2899SCharles.Forsyth			sys->fprint(sys->fildes(2), "Usage: randpass [password-length(<256, default=16)]\n");
2937da2899SCharles.Forsyth			raise "fail:usage";
3037da2899SCharles.Forsyth		}
3137da2899SCharles.Forsyth	}
32*7de2b42dSforsyth	sys->print("%s\n", IPint.random(pwlen*8).iptob64()[0: pwlen]);
3337da2899SCharles.Forsyth}
3437da2899SCharles.Forsyth
3537da2899SCharles.Forsythisnumeric(s: string): int
3637da2899SCharles.Forsyth{
3737da2899SCharles.Forsyth	for(i := 0; i < len s; i++)
3837da2899SCharles.Forsyth		if(!(s[i]>='0' && s[i]<='9'))
3937da2899SCharles.Forsyth			return 0;
4037da2899SCharles.Forsyth	return i > 0;
4137da2899SCharles.Forsyth}
42