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