home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / netpbma.zip / pnm / pnmpad.c < prev    next >
C/C++ Source or Header  |  1993-10-06  |  2KB  |  96 lines

  1. /* pnmpad.c - add border to sides of a portable anymap
  2.  ** AJCD 4/9/90
  3.  */
  4.  
  5. #include <stdio.h>
  6. #include "pnm.h"
  7.  
  8. int
  9. main(argc, argv)
  10.      int argc;
  11.      char *argv[];
  12. {
  13.    FILE *ifd;
  14.    xel *xelrow, *bgrow, background;
  15.    xelval maxval;
  16.    int rows, cols, newcols, row, col, format;
  17.    int left, right, top, bot, black;
  18.    char *usage = "[-white|-black] [-l#] [-r#] [-t#] [-b#] [pnmfile]";
  19.  
  20.  
  21.    pnm_init( &argc, argv );
  22.  
  23.    black = 1;
  24.    left = right = top = bot = 0;
  25.  
  26.    while (argc >= 2 && argv[1][0] == '-') {
  27.       if (strcmp(argv[1]+1,"black") == 0) black = 1;
  28.       else if (strcmp(argv[1]+1,"white") == 0) black = 0;
  29.       else switch (argv[1][1]) {
  30.       case 'l':
  31.      if ((left = atoi(argv[1]+2)) < 0)
  32.         pm_error("left border too small");
  33.      break;
  34.       case 'r':
  35.      if ((right = atoi(argv[1]+2)) < 0)
  36.         pm_error("right border too small");
  37.      break;
  38.       case 'b':
  39.      if ((bot = atoi(argv[1]+2)) < 0)
  40.         pm_error("bottom border too small");
  41.      break;
  42.       case 't':
  43.      if ((top = atoi(argv[1]+2)) < 0)
  44.         pm_error("top border too small");
  45.      break;
  46.       default:
  47.      pm_usage(usage);
  48.       }
  49.       argc--, argv++;
  50.    }
  51.  
  52.    if (argc > 2)
  53.       pm_usage(usage);
  54.    
  55.    if (argc == 2)
  56.       ifd = pm_openr(argv[1]);
  57.    else
  58.       ifd = stdin;
  59.  
  60.  
  61.  
  62.    pnm_readpnminit(ifd, &cols, &rows, &maxval, &format);
  63.    if (black)
  64.       background = pnm_blackxel(maxval, format);
  65.    else
  66.       background = pnm_whitexel(maxval, format);
  67.  
  68.    if (cols == 0 || rows == 0) {
  69.       pm_message("empty bitmap");
  70.       left = right = bot = top = 0;
  71.    }
  72.    newcols = cols+left+right;
  73.    xelrow = pnm_allocrow(newcols);
  74.    bgrow = pnm_allocrow(newcols);
  75.  
  76.    for (col = 0; col < newcols; col++)
  77.       xelrow[col] = bgrow[col] = background;
  78.  
  79.    pnm_writepnminit(stdout, newcols, rows+top+bot, maxval, format, 0);
  80.  
  81.    for (row = 0; row < top; row++)
  82.       pnm_writepnmrow(stdout, bgrow, newcols, maxval, format, 0);
  83.  
  84.    for (row = 0; row < rows; row++) {
  85.       pnm_readpnmrow(ifd, xelrow+left, cols, maxval, format);
  86.       pnm_writepnmrow(stdout, xelrow, newcols, maxval, format, 0);
  87.    }
  88.  
  89.    for (row = 0; row < bot; row++)
  90.       pnm_writepnmrow(stdout, bgrow, newcols, maxval, format, 0);
  91.  
  92.    pm_close(ifd);
  93.  
  94.    exit(0);
  95. }
  96.