diff options
Diffstat (limited to 'sys/fmtio/fmtstr.x')
-rw-r--r-- | sys/fmtio/fmtstr.x | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/sys/fmtio/fmtstr.x b/sys/fmtio/fmtstr.x new file mode 100644 index 00000000..197ea2bd --- /dev/null +++ b/sys/fmtio/fmtstr.x @@ -0,0 +1,49 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include <ctype.h> + +# FMTSTR -- Place a string in a field of the given width, left or right +# justifying as indicated, and output to the named file. The length of +# the text string may exceed the field width, in which case there is no +# filling. + +procedure fmtstr (fd, str, col, fill_char, left_justify, maxch, width) + +int fd # output file +char str[ARB] # string to be output +int col # column: both input and output parameter +char fill_char # fill character, if right justify +int left_justify # YES or NO +int maxch # maximum string chars to output +int width # field width +int nchars, nfill, ip +int strlen() +errchk putc, putci + +begin + if (fd <= 0) + return + + if (width > 0) { + nchars = min (maxch, strlen(str)) + nfill = max (0, width - nchars) + } else { + nchars = maxch + nfill = 0 # free format + } + + if (left_justify == NO) # fill at left + for (col=col+nfill; nfill > 0; nfill=nfill-1) + call putc (fd, fill_char) + + for (ip=1; str[ip] != EOS && ip <= nchars; ip=ip+1) { # put string + call putc (fd, str[ip]) + if (IS_PRINT (str[ip])) + col = col + 1 + else + call fmt_setcol (str[ip], col) + } + + for (col=col+nfill; nfill > 0; nfill=nfill-1) # fill at right + call putci (fd, ' ') +end |