ref: 3efb5bbb4061056e523858b134c555949591efe2
dir: /appl/cmd/zeros.b/
implement Zeros; include "sys.m"; sys: Sys; include "arg.m"; arg: Arg; include "string.m"; str: String; include "keyring.m"; include "security.m"; random: Random; include "draw.m"; Zeros: module { init: fn(nil: ref Draw->Context, argv: list of string); }; init(nil: ref Draw->Context, argv: list of string) { z: array of byte; i: int; sys = load Sys Sys->PATH; arg = load Arg Arg->PATH; str = load String String->PATH; if(sys == nil || arg == nil) return; bs := 0; n := 0; val := 0; rflag := 0; arg->init(argv); while ((c := arg->opt()) != 0) case c { 'r' => rflag = 1; 'v' => (val, nil) = str->toint(arg->arg(), 16); * => raise sys->sprint("fail:unknown option (%c)\n", c); } argv = arg->argv(); if(len argv >= 1) bs = int hd argv; else bs = 1; if (len argv >= 2) n = int hd tl argv; else n = 1; if(bs == 0 || n == 0) { sys->fprint(sys->fildes(2), "usage: zeros [-r] [-v value] blocksize [number]\n"); raise "fail:usage"; } if (rflag) { random = load Random Random->PATH; if (random == nil) raise "fail:no security module\n"; z = random->randombuf(random->NotQuiteRandom, bs); } else { z = array[bs] of byte; for(i=0;i<bs;i++) z[i] = byte val; } for(i=0;i<n;i++) sys->write(sys->fildes(1), z, bs); }