home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / banners-1.1 / part01 / banner-09 / block.c next >
C/C++ Source or Header  |  1993-04-11  |  1KB  |  90 lines

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #define LINES          10
  5. #define BUFFERSIZE    1024
  6.  
  7. extern char    *data[][LINES];
  8.  
  9. char        buffer[LINES][BUFFERSIZE+1];
  10.  
  11. int min(a,b)
  12. int    a,
  13.     b;
  14. {
  15.     if (a>b)
  16.     return(b);
  17.     return(a);
  18. }
  19.  
  20. main(argc,argv)
  21. int    argc;
  22. char    **argv;
  23. {
  24.     short    i,
  25.         j,
  26.         k,
  27.         l,
  28.         m,
  29.         idx,
  30.         idx2,
  31.         al,
  32.         sw,
  33.         tmp,
  34.         tmp2;
  35.     char    *p,
  36.         *ptr;
  37.  
  38.     while (--argc) {
  39.     argv++;
  40. /*
  41.     for (i=0; i<LINES; i++) {
  42.         p = *argv;
  43.         while (*p != '\0')
  44.         printf("%s ",data[*p++][i]);
  45.         printf("\n");
  46.     }
  47. */
  48.     p = *argv;
  49.     idx = 0;
  50.     idx2 = 0;
  51.     for (i=0; i<LINES; i++)
  52.         for (j=0; j<BUFFERSIZE; j++)
  53.         buffer[i][j] = ' ';
  54.     while (*p != '\0') {
  55.         al = strlen(data[*p][0]);
  56.         sw = al;
  57.         l = 0; m = 0;
  58.         for (i=0; i<LINES; i++) {
  59.         for (j=1; j<=idx2 && buffer[i][idx-j]==' '; j++);
  60.         for (k=0; *p!=' ' && k<al && data[*p][i][k]==' '; k++);
  61.         sw = min(sw,j+k);
  62.         if (i) {
  63.             sw = min(sw,j+m);
  64.             sw = min(sw,l+k);
  65.         }
  66.         l = j; m = k;
  67.         }
  68.         if (sw)
  69.         --sw;
  70.         tmp = idx + al - sw;
  71.         tmp2 = idx-sw+1;
  72.         for (i=0; i<LINES; i++)
  73.         for (j=0; j<min(al,BUFFERSIZE-tmp); j++)
  74.             if (data[*p][i][j]!=' ')
  75.             buffer[i][tmp2+j]=data[*p][i][j];
  76.         idx2 = ( *p==' ' ? 0 : tmp);
  77.         idx = tmp + 1;
  78.         p++;
  79.         if (idx>=BUFFERSIZE) {
  80.         idx = BUFFERSIZE;
  81.         *p = '\0';
  82.         }
  83.     }
  84.     for (i=0; i<LINES; i++) {
  85.         buffer[i][idx] = '\0';
  86.         printf("%s\n",buffer[i]);
  87.     }
  88.     }
  89. }
  90.