banner.c

     1  //! @file banner.c
     2  //! @author J. Marcel van der Veer
     3  //
     4  //! @section Copyright
     5  //
     6  // This file is part of VIF - vintage FORTRAN compiler.
     7  // Copyright 2020-2025 J. Marcel van der Veer <algol68g@xs4all.nl>.
     8  //
     9  //! @section License
    10  //
    11  // This program is free software; you can redistribute it and/or modify it 
    12  // under the terms of the GNU General Public License as published by the 
    13  // Free Software Foundation; either version 3 of the License, or 
    14  // (at your option) any later version.
    15  //
    16  // This program is distributed in the hope that it will be useful, but 
    17  // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
    18  // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 
    19  // more details. You should have received a copy of the GNU General Public 
    20  // License along with this program. If not, see <http://www.gnu.org/licenses/>.
    21  
    22  //! @section Synopsis
    23  //!
    24  //! Banner for listing files.
    25  
    26  // Loosely based on the public domain SYSV banner source code by Brian Wallis.
    27  
    28  #include <vif.h>
    29  
    30  char *glyphs[] = {
    31    "         ***  *** ***  * *   ***** ***   *  **     ***  ",
    32    "         ***  *** ***  * *  *  *  ** *  *  *  *    ***   ",
    33    "         ***   *   * ********  *   *** *    **      *   ",
    34    "          *            * *   *****    *    ***     *    ",
    35    "                     *******   *  *  * ****   * *       ",
    36    "         ***           * *  *  *  * *  * **    *        ",
    37    "         ***           * *   ***** *   *** **** *       ",
    38  
    39    "   **    **                                            *",
    40    "  *        *   *   *    *                             * ",
    41    " *          *   * *     *                            *  ",
    42    " *          * ******* *****   ***   *****           *   ",
    43    " *          *   * *     *     ***           ***    *    ",
    44    "  *        *   *   *    *      *            ***   *     ",
    45    "   **    **                   *             ***  *      ",
    46  
    47    "  000     1    22222  33333 4      5555555 66666 7777777",
    48    " 0   0   11   2     23     34    4 5      6     67    7 ",
    49    "0     0 1 1         2      34    4 5      6          7  ",
    50    "0     0   1    22222  33333 4444444 55555 666666    7   ",
    51    "0     0   1   2            3     4       56     6  7    ",
    52    " 0   0    1   2      3     3     4 5     56     6  7    ",
    53    "  000   11111 2222222 33333      4  55555  66666   7    ",
    54  
    55    " 88888  99999    *     ***      *           *     ***** ",
    56    "8     89     9  * *    ***     *             *   *     *",
    57    "8     89     9   *            *     *****     *        *",
    58    " 88888  999999         ***   *                 *     ** ",
    59    "8     8      9   *     ***    *     *****     *     *   ",
    60    "8     89     9  * *     *      *             *          ",
    61    " 88888  99999    *     *        *           *       *   ",
    62  
    63    " *****    A   BBBBBB  CCCCC DDDDDD EEEEEEEFFFFFFF GGGGG ",
    64    "*     *  A A  B     BC     CD     DE      F      G     G",
    65    "* *** * A   A B     BC      D     DE      F      G      ",
    66    "* * * *A     ABBBBBB C      D     DEEEEE  FFFFF  G  GGGG",
    67    "* **** AAAAAAAB     BC      D     DE      F      G     G",
    68    "*     *A     AB     BC     CD     DE      F      G     G",
    69    " ***** A     ABBBBBB  CCCCC DDDDDD EEEEEEEF       GGGGG ",
    70  
    71    "H     H  III        JK    K L      M     MN     N OOOOO ",
    72    "H     H   I         JK   K  L      MM   MMNN    NO     O",
    73    "H     H   I         JK  K   L      M M M MN N   NO     O",
    74    "HHHHHHH   I         JKKK    L      M  M  MN  N  NO     O",
    75    "H     H   I   J     JK  K   L      M     MN   N NO     O",
    76    "H     H   I   J     JK   K  L      M     MN    NNO     O",
    77    "H     H  III   JJJJJ K    K LLLLLLLM     MN     N OOOOO ",
    78  
    79    "PPPPPP  QQQQQ RRRRRR  SSSSS TTTTTTTU     UV     VW     W",
    80    "P     PQ     QR     RS     S   T   U     UV     VW     W",
    81    "P     PQ     QR     RS         T   U     UV     VW     W",
    82    "PPPPPP Q     QRRRRRR  SSSSS    T   U     UV     VW  W  W",
    83    "P      Q   Q QR   R        S   T   U     U V   V W  W  W",
    84    "P      Q    Q R    R S     S   T   U     U  V V  W  W  W",
    85    "P       QQQQ QR     R SSSSS    T    UUUUU    V    WW WW ",
    86  
    87    "X     XY     YZZZZZZZ ***** *       *****    *          ",
    88    " X   X  Y   Y      Z  *      *          *   * *         ",
    89    "  X X    Y Y      Z   *       *         *  *   *        ",
    90    "   X      Y      Z    *        *        *               ",
    91    "  X X     Y     Z     *         *       *               ",
    92    " X   X    Y    *      *          *      *               ",
    93    "X     X   Y   ZZZZZZZ *****       * *****        *******",
    94  
    95    "  ***                                                   ",
    96    "  ***     AA   BBBBB   CCCC  DDDDD  EEEEEE FFFFFF  GGGG ",
    97    "   *     A  A  B    B C    C D    D E      F      G    G",
    98    "    *   A    A BBBBB  C      D    D EEEEE  FFFFF  G     ",
    99    "        AAAAAA B    B C      D    D E      F      G  GGG",
   100    "        A    A B    B C    C D    D E      F      G    G",
   101    "        A    A BBBBB   CCCC  DDDDD  EEEEEE F       GGGG ",
   102  
   103    "                                                        ",
   104    " H    H    I        J K    K L      M    M N    N  OOOO ",
   105    " H    H    I        J K   K  L      MM  MM NN   N O    O",
   106    " HHHHHH    I        J KKKK   L      M MM M N N  N O    O",
   107    " H    H    I        J K  K   L      M    M N  N N O    O",
   108    " H    H    I   J    J K   K  L      M    M N   NN O    O",
   109    " H    H    I    JJJJ  K    K LLLLLL M    M N    N  OOOO ",
   110  
   111    "                                                        ",
   112    " PPPPP   QQQQ  RRRRR   SSSS   TTTTT U    U V    V W    W",
   113    " P    P Q    Q R    R S         T   U    U V    V W    W",
   114    " P    P Q    Q R    R  SSSS     T   U    U V    V W    W",
   115    " PPPPP  Q  Q Q RRRRR       S    T   U    U V    V W WW W",
   116    " P      Q   Q  R   R  S    S    T   U    U  V  V  WW  WW",
   117    " P       QQQ Q R    R  SSSS     T    UUUU    VV   W    W",
   118  
   119    "                       ***     *     ***   **    * * * *",
   120    " X    X  Y   Y ZZZZZZ *        *        * *  *  * * * * ",
   121    "  X  X    Y Y      Z  *        *        *     ** * * * *",
   122    "   XX      Y      Z  **                 **        * * * ",
   123    "   XX      Y     Z    *        *        *        * * * *",
   124    "  X  X     Y    Z     *        *        *         * * * ",
   125    " X    X    Y   ZZZZZZ  ***     *     ***         * * * *"
   126  };
   127  
   128  void banner (int_4 proc, int_4 phase, char *arg)
   129  {
   130    int_4 len = strlen (arg);
   131    if (len > 12) {
   132      len = 12;
   133    }
   134    int_4 max = 0;
   135    for (int_4 cyc = 0; cyc < 2; cyc++) {
   136      char str[RECLN], lin[RECLN];
   137      for (int_4 a = 0; a < 7; a++) {
   138        for (int_4 b = 0; b < len; b++) {
   139          int_4 ind;
   140          if ((ind = (arg)[b] - ' ') < 0) {
   141            ind = 0;
   142          }
   143          for (int_4 c = 0; c < 7; c++) {
   144            lin[b * 8 + c] = glyphs[(ind / 8 * 7) + a][(ind % 8 * 7) + c];
   145          }
   146          lin[b * 8 + 7] = ' ';
   147        }
   148        for (int_4 b = len * 8 - 1; b >= 0; b--) {
   149          if (lin[b] != ' ') {
   150            break;
   151          }
   152          lin[b] = '\0';
   153        }
   154        if (cyc == 0) {
   155          if ((int_4) strlen (lin) > max) {
   156            max = strlen (lin);
   157          }
   158        } else {
   159          strcpy (str, "// ");
   160          for (int_4 k = 0; k < (LINE_WIDTH - max) / 2 - 3; k++) {
   161           bufcat (str, " ", LINE_WIDTH);
   162          }
   163         bufcat (str, lin, LINE_WIDTH);
   164         bufcat (str, "\n", LINE_WIDTH);
   165          code (proc, phase, str);
   166        }
   167      }
   168    }
   169  }


© 2002-2025 J.M. van der Veer (jmvdveer@xs4all.nl)