Previous: List Directory, Up: Process Library Samples [Index]
List the (regular) files in the current directory, together with their (in bytes expressed) sizes:
file f; list l; xshell xs, xt; # Setup find(1) to determine the files in the current directory # set path b_cast(xs_path(xs), "find"); # relink the _argv_ list for ease of use l_set(l, xs_argv(xs)); # fill in command lb_p_text(l, "find"); lb_p_text(l, "."); lb_p_text(l, "-maxdepth"); lb_p_text(l, "1"); lb_p_text(l, "-type"); lb_p_text(l, "f"); # start process xs_lead(xs); # Retrieve the file sizes via wc(1), running through xargs(1) on the output of # previously setup find(1) # set path b_cast(xs_path(xt), "xargs"); # relink the _argv_ list for ease of use l_set(l, xs_argv(xt)); # filling in command lb_p_text(l, "xargs"); lb_p_text(l, "wc"); lb_p_text(l, "-c"); # set the output of _find_ as input for _xargs_ xs_fold(xt, xs_output(xs)); # start process xs_lead(xt); # relink output file f_set(f, xs_output(xt)); while (f_list(f, l, 2) ^ -1) { # _wc_ will print a `total' line. Try to remove it. _find_ will prefix # the files names with `./'. Remove that too. if (match("./*", lb_q_text(l))) { # the `total' line? } else { integer x; # the _l_ list should describe two strings, the second the file name, # the first its size o_text(cut(lb_q_text(l), 2, 1048576)); o_space(42 - length(lb_q_text(l))); x = atoi(lf_q_text(l)); # print size with commas separated runs of three digits, # on 16 characters o_wbfxinteger(16, 3, 0, 10, x); o_byte('\n'); } }