home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / banners-1.1 / part02 < prev    next >
Text File  |  1993-04-11  |  90KB  |  3,495 lines

  1. Newsgroups: comp.sources.unix
  2. From: fkk@stasys.sta.sub.org (Frank Kaefer)
  3. Subject: v26i142: banners - a collection of banner programs, V1.1, Part02/07
  4. Sender: unix-sources-moderator@vix.com
  5. Approved: paul@vix.com
  6.  
  7. Submitted-By: fkk@stasys.sta.sub.org (Frank Kaefer)
  8. Posting-Number: Volume 26, Issue 142
  9. Archive-Name: banners-1.1/part02
  10.  
  11. #! /bin/sh
  12. # This is a shell archive.  Remove anything before this line, then unpack
  13. # it by saving it into a file and typing "sh file".  To overwrite existing
  14. # files, type "sh file -c".  You can also feed this as standard input via
  15. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  16. # will see the following message at the end:
  17. #        "End of archive 2 (of 7)."
  18. # Contents:  banner-01/banner.c banner-04/sysvbanner.c banner-05/kban.c
  19. #   banner-05/lban.c banner-05/sban.c banner-07/banner.c
  20. #   banner-11/MB_Font.uu banner-11/Read.Me banner-11/mb.c
  21. #   banner-13/cyrban.c cursive-01/cursive.c cursive-02/cursive.c
  22. # Wrapped by vixie@gw.home.vix.com on Sun Apr 11 23:19:19 1993
  23. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  24. if test -f 'banner-01/banner.c' -a "${1}" != "-c" ; then 
  25.   echo shar: Will not clobber existing file \"'banner-01/banner.c'\"
  26. else
  27. echo shar: Extracting \"'banner-01/banner.c'\" \(5255 characters\)
  28. sed "s/^X//" >'banner-01/banner.c' <<'END_OF_FILE'
  29. X/*
  30. X * The ultimative banner.
  31. X *
  32. X * Written in 1987 by Wolfgang Ocker, reccoware systems, Puchheim
  33. X *
  34. X * It's *not* fast, but nice ...
  35. X *
  36. X * Tested on OS-9/68000, SunOS
  37. X */
  38. X
  39. X#include <stdio.h>
  40. X#ifdef OSK
  41. X#include <modes.h>
  42. X#else
  43. X#define S_IREAD 0
  44. X#endif
  45. X
  46. X
  47. X#define TRUE  1
  48. X#define FALSE 0
  49. X
  50. extern unsigned char charset;      /* Zeichensatz */
  51. extern int           errno;
  52. X
  53. X#ifdef OSK
  54. X/*
  55. X * Signal Handler (Dummy)
  56. X */
  57. int sighandler()
  58. X{
  59. X}
  60. X#endif
  61. X
  62. X/*
  63. X * m a i n
  64. X */
  65. main(argc, argv)
  66. X  int  argc;
  67. X  char *argv[];
  68. X{
  69. X  char          *str, strbuf[200];
  70. X  int           linenum, chnum, i, j, k, count, strnum;
  71. X  unsigned char ch;
  72. X  int           ch_off;
  73. X  unsigned char *ch_addr;
  74. X  unsigned char *font;
  75. X  int           italic, dblsize, samechar;
  76. X  char          bannerchar;
  77. X  FILE          *infp;  
  78. X  char          *from, *plife;
  79. X
  80. X  italic     = dblsize = samechar = FALSE;
  81. X  strnum     = 0;
  82. X  from       = NULL;
  83. X  bannerchar = '*';
  84. X  plife      = NULL;
  85. X
  86. X  /*
  87. X   * Get the arguments. I *hate* getopt(:-). This works nice (and is
  88. X   * simpler).
  89. X   */
  90. X  for (i = 1; i < argc; i++)
  91. X    if (argv[i][0] == '-')
  92. X      for (j = 1; j < strlen(argv[i]); j++)
  93. X        switch(tolower(argv[i][j])) {
  94. X          case '?':
  95. X            usage();
  96. X            exit(1);
  97. X            
  98. X          case 'i':     /* italic printing */
  99. X            italic = TRUE;
  100. X            break;          
  101. X
  102. X          case 'd':     /* double sized characters */
  103. X            dblsize = TRUE;
  104. X            break;
  105. X  
  106. X          case 's':     /* use character to build large char, e.g.
  107. X                         * c becomes
  108. X                         *
  109. X                         *  ccc
  110. X                         * c   
  111. X                         * c          (or so ...)
  112. X                         *  ccc
  113. X                         */
  114. X            samechar = TRUE;
  115. X            break;
  116. X
  117. X#ifdef OSK          
  118. X          case 'l':
  119. X            plife = argv[i] + j + (argv[i][j+1] == '=' ? 2 : 1);
  120. X            j = strlen(argv[i]);
  121. X            break;
  122. X#endif
  123. X  
  124. X          case 'c':       /* character for banner */
  125. X            j += argv[i][j+1] == '=' ? 2 : 1;
  126. X            bannerchar = argv[i][j];
  127. X            break;
  128. X          case 'z':       /* get text from ... */
  129. X            if (from) {
  130. X              usage();
  131. X              fputs("multiple 'z' option not allowed\n", stderr);
  132. X              exit(1);
  133. X            }
  134. X
  135. X            from = argv[i] + j + (argv[i][j+1] == '=' ? 2 : 1);
  136. X            j = strlen(argv[i]);
  137. X            break;
  138. X
  139. X          default:
  140. X            usage();
  141. X            fprintf(stderr, "banner: unknown option '%c'\n", argv[i][j]);
  142. X            exit(1);
  143. X        }
  144. X    else
  145. X      strnum++;     /* count number of strings */
  146. X
  147. X  if (strnum == 0 && from == NULL) {
  148. X    usage();
  149. X#ifdef OSK
  150. X    exit(_errmsg(1, "no string given\n"));
  151. X#else
  152. X    exit(fputs("no string given\n", stderr), 1);
  153. X#endif
  154. X  }
  155. X
  156. X  if (strnum && from) {
  157. X    usage();
  158. X#ifdef OSK
  159. X    exit(_errmsg(1, "'z' option not allowed if string(s) given\n"));
  160. X#else
  161. X  exit(fputs("'z' option not allowed if string(s) given\n", stderr), 1);
  162. X#endif
  163. X  }
  164. X
  165. X  if (from) {
  166. X    if (from[0]) {
  167. X      if ((infp = fopen(from, "r")) == NULL)
  168. X#ifdef OSK
  169. X        exit(_errmsg(errno, "can't open '%s'\n", from));
  170. X#else
  171. X        exit(fprintf(stderr, "can't open '%s'\n", from), errno);
  172. X#endif
  173. X    }
  174. X    else
  175. X      infp = stdin;
  176. X
  177. X  }
  178. X
  179. X#ifdef OSK
  180. X  if (plife && !strcmp(plife, "dont_kill_me"))
  181. X    intercept(sighandler);
  182. X#endif
  183. X
  184. X  font = &charset;
  185. X  str  = strbuf;
  186. X
  187. X  i = 1;
  188. X  while (TRUE) {
  189. X    if (from) {     /* read strings from file/stdin */
  190. X      if (fgets(strbuf, sizeof(strbuf)-1, infp) == NULL)
  191. X        break;
  192. X      strbuf[strlen(strbuf)-1] = '\0';
  193. X    }
  194. X    else {        /* get strings from argument line */
  195. X      if ((str = argv[i++]) == NULL)
  196. X        break;
  197. X      if (str[0] == '-')
  198. X        continue;
  199. X    }
  200. X       
  201. X    for (linenum = 0; linenum < 8; linenum++) {     /* 8 lines per char */
  202. X      for (j = 0; j < (dblsize ? 2 : 1); j++) {
  203. X        putchar('\n');
  204. X
  205. X        if (italic)     /* shift for italics */
  206. X          for (k = linenum; k < 7; k++)
  207. X            fputs(dblsize ? "  " : " ", stdout);
  208. X
  209. X        for (chnum = 0; chnum < strlen(str); chnum++) {
  210. X          ch      = str[chnum];
  211. X          ch_off  = (int) ch * 8;
  212. X          ch_addr = font + ch_off + linenum;
  213. X          outline(ch, *ch_addr, dblsize, bannerchar, samechar);
  214. X        }
  215. X      } 
  216. X    }
  217. X  }
  218. X
  219. X  putchar('\n');
  220. X}
  221. X
  222. X/*
  223. X * o u t l i n e
  224. X */
  225. outline(outchar, outbyte, dblsize, bannerchar, samechar)
  226. X  char outchar, outbyte, bannerchar;
  227. X  int  dblsize, samechar;
  228. X
  229. X{
  230. X  int bc, j;
  231. X
  232. X  for (bc = 7; bc >= 0; bc--)
  233. X    for (j = 0; j < (dblsize ? 2 : 1); j++)
  234. X      if (outbyte & (0x01 << bc))
  235. X        putchar((samechar) ? outchar : bannerchar);
  236. X      else
  237. X        putchar(' ');
  238. X}
  239. X
  240. X/*
  241. X * u s a g e
  242. X */
  243. usage()
  244. X{
  245. X  fputs("Syntax: banner [<opts>] {<string>} [<opts>]\n", stderr);
  246. X  fputs("Function: prints a banner to stdout\n", stderr);
  247. X  fputs("Options:\n", stderr);
  248. X  fputs("     -i          prints italic\n", stderr);
  249. X  fputs("     -d          double size\n", stderr);
  250. X  fputs("     -c=<char>   character\n", stderr);
  251. X  fputs("     -s          use same character\n", stderr);
  252. X  fputs("     -z          read strings from standard input\n", stderr);
  253. X  fputs("     -z=<file>   read strings from <file>\n", stderr);
  254. X}
  255. END_OF_FILE
  256. if test 5255 -ne `wc -c <'banner-01/banner.c'`; then
  257.     echo shar: \"'banner-01/banner.c'\" unpacked with wrong size!
  258. fi
  259. # end of 'banner-01/banner.c'
  260. fi
  261. if test -f 'banner-04/sysvbanner.c' -a "${1}" != "-c" ; then 
  262.   echo shar: Will not clobber existing file \"'banner-04/sysvbanner.c'\"
  263. else
  264. echo shar: Extracting \"'banner-04/sysvbanner.c'\" \(6293 characters\)
  265. sed "s/^X//" >'banner-04/sysvbanner.c' <<'END_OF_FILE'
  266. X/*****************************************************************
  267. X * 
  268. X * SYSVbanner.c
  269. X * 
  270. X * This is a PD version of the SYS V banner program (at least I think 
  271. X * it is compatible to SYS V) which I wrote to use with the clock 
  272. X * program written by:
  273. X **     DCF, Inc.
  274. X **     14623 North 49th Place
  275. X **     Scottsdale, AZ 85254
  276. X * and published in the net comp.sources.misc newsgroup in early July 
  277. X * since the BSD banner program works quite differently.
  278. X * 
  279. X * There is no copyright or responsibility accepted for the use
  280. X * of this software.
  281. X * 
  282. X * Brian Wallis, brw@jim.odr.oz, 4 July 1988
  283. X *
  284. X *****************************************************************/
  285. X
  286. char *glyphs[] = {
  287. X"         @@@  @@@ @@@  @ @   @@@@@ @@@   @  @@     @@@  ",
  288. X"         @@@  @@@ @@@  @ @  @  @  @@ @  @  @  @    @@@   ",
  289. X"         @@@   @   @ @@@@@@@@  @   @@@ @    @@      @   ",
  290. X"          @            @ @   @@@@@    @    @@@     @    ",
  291. X"                     @@@@@@@   @  @  @ @@@@   @ @       ",
  292. X"         @@@           @ @  @  @  @ @  @ @@    @        ",
  293. X"         @@@           @ @   @@@@@ @   @@@ @@@@ @       ",
  294. X
  295. X"   @@    @@                                            @",
  296. X"  @        @   @   @    @                             @ ",
  297. X" @          @   @ @     @                            @  ",
  298. X" @          @ @@@ @@@ @@@@@   @@@   @@@@@           @   ",
  299. X" @          @   @ @     @     @@@           @@@    @    ",
  300. X"  @        @   @   @    @      @            @@@   @     ",
  301. X"   @@    @@                   @             @@@  @      ",
  302. X
  303. X"  @@@     @    @@@@@  @@@@@ @      @@@@@@@ @@@@@ @@@@@@@",
  304. X" @   @   @@   @     @@     @@    @ @      @     @@    @ ",
  305. X"@ @   @ @ @         @      @@    @ @      @          @  ",
  306. X"@  @  @   @    @@@@@  @@@@@ @@@@@@@ @@@@@ @@@@@@    @   ",
  307. X"@   @ @   @   @            @     @       @@     @  @    ",
  308. X" @   @    @   @      @     @     @ @     @@     @  @    ",
  309. X"  @@@   @@@@@ @@@@@@@ @@@@@      @  @@@@@  @@@@@   @    ",
  310. X
  311. X" @@@@@  @@@@@    @     @@@      @           @     @@@@@ ",
  312. X"@     @@     @  @ @    @@@     @             @   @     @",
  313. X"@     @@     @   @            @     @@@@@     @        @",
  314. X" @@@@@  @@@@@@         @@@   @                 @     @@ ",
  315. X"@     @      @   @     @@@    @     @@@@@     @     @   ",
  316. X"@     @@     @  @ @     @      @             @          ",
  317. X" @@@@@  @@@@@    @     @        @           @       @   ",
  318. X
  319. X" @@@@@    @   @@@@@@  @@@@@ @@@@@@ @@@@@@@@@@@@@@ @@@@@ ",
  320. X"@     @  @ @  @     @@     @@     @@      @      @     @",
  321. X"@ @@@ @ @   @ @     @@      @     @@      @      @      ",
  322. X"@ @ @ @@     @@@@@@@ @      @     @@@@@@  @@@@@  @  @@@@",
  323. X"@ @@@@ @@@@@@@@     @@      @     @@      @      @     @",
  324. X"@     @@     @@     @@     @@     @@      @      @     @",
  325. X" @@@@@ @     @@@@@@@  @@@@@ @@@@@@ @@@@@@@@       @@@@@ ",
  326. X
  327. X"@     @  @*@        @@    @ @      @     @@     @@@@@@@@",
  328. X"@     @   @         @@   @  @      @@   @@@@    @@     @",
  329. X"@     @   @         @@  @   @      @ @ @ @@ @   @@     @",
  330. X"@@@@@@@   @         @@@@    @      @  @  @@  @  @@     @",
  331. X"@     @   @   @     @@  @   @      @     @@   @ @@     @",
  332. X"@     @   @   @     @@   @  @      @     @@    @@@     @",
  333. X"@     @  @@@   @@@@@ @    @ @@@@@@@@     @@     @@@@@@@@",
  334. X
  335. X"@@@@@@  @@@@@ @@@@@@  @@@@@ @@@@@@@@     @@     @@     @",
  336. X"@     @@     @@     @@     @   @   @     @@     @@  @  @",
  337. X"@     @@     @@     @@         @   @     @@     @@  @  @",
  338. X"@@@@@@ @     @@@@@@@  @@@@@    @   @     @@     @@  @  @",
  339. X"@      @   @ @@   @        @   @   @     @ @   @ @  @  @",
  340. X"@      @    @ @    @ @     @   @   @     @  @ @  @  @  @",
  341. X"@       @@@@ @@     @ @@@@@    @    @@@@@    @    @@ @@ ",
  342. X
  343. X"@     @@     @@@@@@@@ @@@@@ @       @@@@@    @          ",
  344. X" @   @  @   @      @  @      @          @   @ @         ",
  345. X"  @ @    @ @      @   @       @         @  @   @        ",
  346. X"   @      @      @    @        @        @               ",
  347. X"  @ @     @     @     @         @       @               ",
  348. X" @   @    @    @      @          @      @               ",
  349. X"@     @   @   @@@@@@@ @@@@@       @ @@@@@        @@@@@@@",
  350. X
  351. X"  @@@                                                   ",
  352. X"  @@@     @@   @@@@@   @@@@  @@@@@  @@@@@@ @@@@@@  @@@@ ",
  353. X"   @     @  @  @    @ @    @ @    @ @      @      @    @",
  354. X"    @   @    @ @@@@@  @      @    @ @@@@@  @@@@@  @     ",
  355. X"        @@@@@@ @    @ @      @    @ @      @      @  @@@",
  356. X"        @    @ @    @ @    @ @    @ @      @      @    @",
  357. X"        @    @ @@@@@   @@@@  @@@@@  @@@@@@ @       @@@@ ",
  358. X"                                                        ",
  359. X" @    @    @        @ @    @ @      @    @ @    @  @@@@ ",
  360. X" @    @    @        @ @   @  @      @@  @@ @@   @ @    @",
  361. X" @@@@@@    @        @ @@@@   @      @ @@ @ @ @  @ @    @",
  362. X" @    @    @        @ @  @   @      @    @ @  @ @ @    @",
  363. X" @    @    @   @    @ @   @  @      @    @ @   @@ @    @",
  364. X" @    @    @    @@@@  @    @ @@@@@@ @    @ @    @  @@@@ ",
  365. X"                                                        ",
  366. X" @@@@@   @@@@  @@@@@   @@@@   @@@@@ @    @ @    @ @    @",
  367. X" @    @ @    @ @    @ @         @   @    @ @    @ @    @",
  368. X" @    @ @    @ @    @  @@@@     @   @    @ @    @ @    @",
  369. X" @@@@@  @  @ @ @@@@@       @    @   @    @ @    @ @ @@ @",
  370. X" @      @   @  @   @  @    @    @   @    @  @  @  @@  @@",
  371. X" @       @@@ @ @    @  @@@@     @    @@@@    @@   @    @",
  372. X"                       @@@     @     @@@   @@    @ @ @ @",
  373. X" @    @  @   @ @@@@@@ @        @        @ @  @  @ @ @ @ ",
  374. X"  @  @    @ @      @  @        @        @     @@ @ @ @ @",
  375. X"   @@      @      @  @@                 @@        @ @ @ ",
  376. X"   @@      @     @    @        @        @        @ @ @ @",
  377. X"  @  @     @    @     @        @        @         @ @ @ ",
  378. X" @    @    @   @@@@@@  @@@     @     @@@         @ @ @ @"};
  379. X
  380. X
  381. main(argc,argv)
  382. X     int argc;
  383. X     char *argv[];
  384. X{
  385. X  int a,b,c,len,ind;
  386. X  char line[80];
  387. X
  388. X  for(argv++;--argc;argv++){
  389. X    len=strlen(*argv);
  390. X    if(len>10)
  391. X      len=10;
  392. X    for(a=0;a<7;a++){
  393. X      for(b=0;b<len;b++){
  394. X        if((ind=(*argv)[b]-' ')<0)
  395. X          ind=0;
  396. X        for(c=0;c<7;c++){
  397. X          line[b*8+c] = glyphs[(ind/8*7)+a][(ind%8*7)+c];
  398. X        }
  399. X        line[b*8+7] = ' ';
  400. X      }
  401. X      for(b=len*8-1;b>=0;b--){
  402. X        if(line[b]!=' ')
  403. X          break;
  404. X        line[b]='\0';
  405. X      }
  406. X      puts(line);
  407. X    }
  408. X    puts("");
  409. X  }
  410. X}
  411. END_OF_FILE
  412. if test 6293 -ne `wc -c <'banner-04/sysvbanner.c'`; then
  413.     echo shar: \"'banner-04/sysvbanner.c'\" unpacked with wrong size!
  414. fi
  415. # end of 'banner-04/sysvbanner.c'
  416. fi
  417. if test -f 'banner-05/kban.c' -a "${1}" != "-c" ; then 
  418.   echo shar: Will not clobber existing file \"'banner-05/kban.c'\"
  419. else
  420. echo shar: Extracting \"'banner-05/kban.c'\" \(5312 characters\)
  421. sed "s/^X//" >'banner-05/kban.c' <<'END_OF_FILE'
  422. X/********************************************************/
  423. X/*                            */
  424. X/*    SEMI's BANNER ( Ver 1.21- ) :            */
  425. X/*                            */
  426. X/*        made    by Koh,BongGyun            */
  427. X/*            in '91.4 ( Ver 1.0- )        */
  428. X/*               '91.5 ( Ver 1.11- )        */
  429. X/*               '91.9            */
  430. X/*                            */
  431. X/*        e-mail to e910017@xserver.kaist.ac.kr    */
  432. X/*                            */
  433. X/********************************************************/
  434. X
  435. X#include <stdio.h>
  436. X
  437. X#define    END    '\0'
  438. X#define    NO    -1
  439. X#define DATFILE    "kbandat.c"
  440. X
  441. X#include DATFILE
  442. X
  443. char    *data;                /* data inputed */
  444. short    font[ _WIDTH+2 ][ MAX_LEN ];    /* font data to output */
  445. X    /* font[ _WIDTH ] : width of letter, font[ _WIDTH+1 ] : cmode */
  446. X
  447. short    count;    /* pass1: now reading count-th character in data */
  448. X        /* output: now reading count-th font */
  449. short    digit;    /* pass1: now making digit-th font */
  450. X        /* output: total digits of font */
  451. X
  452. main( argc, argv )
  453. X    short    argc;
  454. X    char    *argv[];
  455. X{
  456. X    int    i;
  457. X    void    pass1(), output();
  458. X
  459. X    if ( argc == 1 )    puts( ":)" );    /* refuse if no strings */
  460. X    else    for ( i=1 ; i < argc ; ++i ) {
  461. X            data = argv[ i ];    /* data is the i-th string */
  462. X            count = digit = 0;
  463. X
  464. X            pass1();    /* making font */
  465. X            output();    /* output font with compression */
  466. X        }
  467. X}
  468. X
  469. void    pass1()        /* making font following data */
  470. X{
  471. X    short    kor =NO, i;
  472. X    void    make_eng(), make_kor();
  473. X
  474. X    while ( data[ count ] != END )
  475. X        if ( data[ count ] == CMD_CHR )
  476. X            if ( data[ ++count ] == CMD_CHR )    /* double CMD_CHR is one normal character */
  477. X                make_eng();
  478. X            else
  479. X            switch ( instr( mod_chr, data[ count ] ) + 1 ) {
  480. X              case 0:    /* toggle Korean mode */
  481. X                kor = -kor;    break;
  482. X              case 1:    /* change choice char's */
  483. X                if ( ( i = data[ ++count ] - '0' ) < 0 || i >= N_CMODE )
  484. X                    cmode = 0;
  485. X                else {    cmode = i;        ++count; }
  486. X                break;
  487. X              case 2:    /* change English letter types */
  488. X                if ( ( i = data[ ++count ] - '0' ) < 0 || i >= N_MODE )
  489. X                    mode = 0;
  490. X                else {    mode = i;        ++count; }
  491. X            }
  492. X        else if ( kor == NO )    make_eng();
  493. X        else            make_kor();
  494. X}
  495. X
  496. void    output()    /* output font with compression */
  497. X{
  498. X    short    i;
  499. X    void    output1();
  500. X
  501. X    for ( i=0 ; i < WIDTH ; i+=2 ) {
  502. X        output1( font[ i ], font[ i+1 ] );    /* compress two lines into one line and output it */
  503. X        putchar( '\n' );
  504. X    }
  505. X}
  506. X
  507. void    output1( font1, font2 )        /* compress two lines and output */
  508. X    short    *font1, *font2;
  509. X{
  510. X    short    i;
  511. X    void    output2();
  512. X
  513. X    for ( i=0 ; i < digit ; ++i )
  514. X        output2( font1[ i ], font2[ i ], font[ _WIDTH ][ i ], font[ _WIDTH+1 ][ i ] );    /* output one digit font in two lines with compression */
  515. X}
  516. X
  517. void    output2( f1, f2, len, cmode )        /* output a digit font with compression */
  518. X    short    f1, f2;
  519. X    short    len;
  520. X    short    cmode;
  521. X{
  522. X    short    choice, i;
  523. X
  524. X    for ( i=stepspace ; i > 0 ; --i )
  525. X        putchar( font_choice[ cmode ][ 0 ] );
  526. X    while ( ( len /= 2 ) > 0 ) {
  527. X        choice = ( f1 / len ) * 2 + ( f2 / len );    /* get the choice determining the character to output */
  528. X        putchar( font_choice[ cmode ][ choice ] );    /* output a bit character */
  529. X        f1 %= len; f2 %= len;
  530. X    }
  531. X}
  532. X
  533. void    make_eng()    /* making font in English mode */
  534. X{
  535. X    short    i, in;
  536. X
  537. X    if ( ( in = instr( eng_chr, data[ count++ ] ) ) != NO ) {
  538. X        for ( i=0 ; i < WIDTH ; ++i )
  539. X            font[ i ][ digit ] = eng_fnt[ mode ][ in ][ i ];    /* read font */
  540. X        font[ _WIDTH ][ digit ] = eng_fnt[ mode ][ in ][ i ];        /* read the width */
  541. X        font[ _WIDTH+1 ][ digit++ ] = cmode;
  542. X    }
  543. X}
  544. X
  545. void    make_kor()    /* making font in Korean mode */
  546. X{
  547. X    short    fir, sec, thi, i;
  548. X    short    att_f =0, att_s =0;
  549. X
  550. X    if ( ( fir = instr( kor_key[ 0 ], data[ count ] ) ) != NO )
  551. X        ++count;
  552. X    if ( ( sec = instr( kor_key[ 1 ], data[ count ] ) ) != NO ) {
  553. X        if ( sec >= 9 ) {
  554. X            ++att_f;
  555. X            switch ( instr( "hnm", data[ count++ ] ) + 1 ) {
  556. X              case 1:
  557. X                if ( ( i = instr( "kol", data[ count ] ) ) != NO ) {
  558. X                    sec += i+1;    ++count;    ++att_f;
  559. X                }
  560. X                break;
  561. X              case 2:
  562. X                if ( ( i = instr( "jpl", data[ count ] ) ) != NO ) {
  563. X                    sec += i+1;    ++count;    ++att_f;
  564. X                }
  565. X                break;
  566. X              case 3:
  567. X                if ( data[ count ] == 'l' ) {
  568. X                    ++sec;        ++count;    ++att_f;
  569. X                }
  570. X            }
  571. X        }
  572. X        else    ++count;
  573. X        if ( ( thi = instr( kor_key[ 2 ], data[ count ] ) ) != NO &&
  574. X             instr( kor_key[ 1 ], data[ count+1 ] ) == NO ) {
  575. X            att_f += 3;    att_s = 1;
  576. X            if ( ( i = instr( "rsfq", data[ count++ ] ) ) != NO &&
  577. X                 instr( kor_key[ 1 ], data[ count+1 ] ) == NO ) {
  578. X                switch ( i ) {
  579. X                  case 0:
  580. X                    if ( data[ count ] == 't' ) {
  581. X                        ++thi;        ++count;
  582. X                    }
  583. X                    break;
  584. X                  case 1:
  585. X                    if ( ( i = instr( "wg", data[ count ] ) ) != NO ) {
  586. X                        thi += i+1;    ++count;
  587. X                    }
  588. X                    break;
  589. X                  case 2:
  590. X                    if ( ( i = instr( "raqtxvg", data[ count ] ) ) != NO ) {
  591. X                        thi += i+1;    ++count;
  592. X                    }
  593. X                    break;
  594. X                  case 3:
  595. X                    if ( data[ count ] == 't' ) {
  596. X                        ++thi;        ++count;
  597. X                    }
  598. X                }
  599. X            }
  600. X        }
  601. X    }
  602. X
  603. X    if ( fir == NO && sec == NO )
  604. X        make_eng();    /* if not Korean letter, deal it as English */
  605. X    else {
  606. X        for ( i=0 ; i < WIDTH ; ++i ) {
  607. X            font[ i ][ digit ] = ( fir != NO ) ? fir_fnt[ att_f ][ fir ][ i ] : 0;
  608. X            if ( sec != NO ) {
  609. X                font[ i ][ digit ] |= sec_fnt[ att_s ][ sec ][ i ];
  610. X                if ( att_s != 0 )    font[ i ][ digit ] |= thi_fnt[ 0 ][ thi ][ i ];
  611. X            }
  612. X        }
  613. X        font[ _WIDTH ][ digit ] = KOR_LEN;
  614. X        font[ _WIDTH+1 ][ digit++ ] = cmode;
  615. X    }
  616. X}
  617. X
  618. instr( str, ch )    /* return the position of ch in str, if no position, NO */
  619. X    char    *str;
  620. X    char    ch;
  621. X{
  622. X    short    i =0;
  623. X
  624. X    while ( ch != str[ i ] && str[ i ] != END )    ++i;
  625. X    if ( str[ i ] == END )    i = NO;        /* if no position, return NO */
  626. X    return( i );
  627. X}
  628. X
  629. END_OF_FILE
  630. if test 5312 -ne `wc -c <'banner-05/kban.c'`; then
  631.     echo shar: \"'banner-05/kban.c'\" unpacked with wrong size!
  632. fi
  633. # end of 'banner-05/kban.c'
  634. fi
  635. if test -f 'banner-05/lban.c' -a "${1}" != "-c" ; then 
  636.   echo shar: Will not clobber existing file \"'banner-05/lban.c'\"
  637. else
  638. echo shar: Extracting \"'banner-05/lban.c'\" \(6638 characters\)
  639. sed "s/^X//" >'banner-05/lban.c' <<'END_OF_FILE'
  640. X/* Large Korean Banner */
  641. X
  642. X#include <stdio.h>
  643. X
  644. X#define TOTAL 37
  645. X
  646. X#define CW   6   /* character width */
  647. X#define CL   3   /* character length */ 
  648. X
  649. X#define SD   2   /* shift down */ 
  650. X#define SR   3   /* shift right */ 
  651. X#define SB   1   /* shift below */
  652. X
  653. X#define MC   6  /* max characters */
  654. X
  655. X#define DFName "/ufo2/fcode/e880505/Bin/lban.dat"    /* data file name */
  656. X
  657. static char alpha[]={"abcdefghijklmnopqrstuvwxyzQWERTOP?!.,"};
  658. static char c[]={"acdefgqrstvwxzQWERT"};  /* consonant */
  659. static char v1[]={"ijklopuOP"}; 
  660. static char v2[]={"bhmny"};
  661. static char s[]={"?!.,"};
  662. X
  663. struct FONT  {
  664. X    int   address;
  665. X    short type;
  666. X    }  a[TOTAL];  
  667. X
  668. int  b[MC*4];    /*  board  */
  669. int  t[MC*4];    /*  taget  */
  670. X
  671. char board[2*CL+3][(CW*2-1)*MC+3]; 
  672. char *receiver;
  673. X
  674. short  word_counter = 0;
  675. X
  676. main(argc,argv)
  677. int argc;
  678. char *argv[];
  679. X{ 
  680. X    int number ; 
  681. X    
  682. X    if( argc != 2 && argc !=3 ) {Error("?"); Quit();} 
  683. X    if(argc == 3 )  receiver = argv[2];
  684. X    make_font(); 
  685. X    clear_board();
  686. X    number=make_board(argv[1]);
  687. X    load_board(number);
  688. X    print_board(argc-2);
  689. X    fflush(stdout);
  690. X}
  691. clear_board()
  692. X{
  693. X    int i,j;
  694. X
  695. X    for(i=0;i<2*CL+3; i++ ){
  696. X        for( j=0; j< (CW*2-1)*MC; j++)
  697. X            board[i][j] = ' ';
  698. X        board[i][j] = 0;
  699. X    }
  700. X}
  701. X
  702. contractor( index ,num)
  703. int index;
  704. int num;
  705. X{
  706. X    int i,j;
  707. X    int what, mwhat;
  708. X            
  709. X    switch( t[index] ){
  710. X        case 3:
  711. X            return 0;
  712. X            break;
  713. X        case 1: 
  714. X            if( index > 0 ) {
  715. X                    if( t[index-1] ==2 ) return 2;
  716. X                    else return 1;
  717. X                    }
  718. X            else return 1;
  719. X            break;
  720. X        case 2:
  721. X            return 3;
  722. X            break;
  723. X        case 0:
  724. X            if(index==0 ) return 0;
  725. X            if( index <num-1 ) { 
  726. X                what = contractor(index+1, num );
  727. X                if( what ==1 || what ==2 || what == 3 ) return 0;
  728. X                if( what == 0 ) {
  729. X                    mwhat = t[index-1] ;
  730. X                    if( mwhat== 1 ) {
  731. X                        mwhat = contractor(index-1, num );
  732. X                        if( mwhat== 1) return 8;
  733. X                        if(mwhat == 2) return 9;
  734. X                        }
  735. X                    if( mwhat == 2) {
  736. X                            return 6;
  737. X                        }
  738. X                    if( mwhat== 0) {
  739. X                        mwhat = contractor( index-2);
  740. X                        if(mwhat == 1) return 5;
  741. X                        if(mwhat == 2) return 7;
  742. X                        if(mwhat == 3) return 7;
  743. X                        }
  744. X                    } /* if */
  745. X                  else{ 
  746. X                    mwhat = contractor( index-1, num );
  747. X                    if(mwhat == 1 ) return 4;
  748. X                    if(mwhat == 2 ) return 6;
  749. X                    if(mwhat == 3 ) return 6;
  750. X                    }
  751. X                }    /*  if */
  752. X            else { 
  753. X                what = t[index-1];
  754. X                if(what == 0) {
  755. X                    mwhat = contractor(index-2, num);
  756. X                    if( mwhat == 3 )  return 7;
  757. X                    if( mwhat == 1 ) return 5;
  758. X                    if(mwhat ==2 ) return 7;
  759. X                    }
  760. X                what = contractor( index-1 , num );
  761. X                if( what == 3 ) return 6;
  762. X                if( what == 1 ) return 8;
  763. X                if( what == 2 ) return 9;
  764. X                }
  765. X        break;
  766. X        } /* swtich */
  767. X} /* end of procedure */
  768. X
  769. X
  770. X
  771. load_board( num )
  772. int num;
  773. X{
  774. X    int i;
  775. X    int x=0 ,y=0 ;    /* location of a charcater */
  776. X    int tx, ty ;   /* location of a alphabet */ 
  777. X    short  what;
  778. X    
  779. X    for( i=0; i< num ; i++ ){ 
  780. X        what = contractor(i,num); 
  781. X        switch( what ){
  782. X            case 0:
  783. X                if(i!=0) { x+=CW*2-1 ;  }
  784. X                tx=x; ty = y;
  785. X                word_counter++;
  786. X                if( word_counter > MC ) {Error("Too many characters");Quit();}
  787. X                break;
  788. X            case 1:
  789. X                tx = x+CW ;
  790. X                ty=y;
  791. X                break;
  792. X            case 2: 
  793. X                tx= x+CW;
  794. X                ty= y+SB ;
  795. X                break; 
  796. X            case 3: 
  797. X                tx = x; 
  798. X                ty = y+CL ;
  799. X                break;
  800. X            case 4:
  801. X                tx = x ;
  802. X                ty = y+CL ;
  803. X                break; 
  804. X            case 5:
  805. X                tx= x+CW ;
  806. X                ty = y+CL;
  807. X                break;
  808. X            case 6:
  809. X                tx = x;
  810. X                ty = y+CL+SD ;
  811. X                break;
  812. X            case 7:
  813. X                tx = x+CW;
  814. X                ty = y+CL+SD;
  815. X                break;
  816. X            case 8:
  817. X                tx = x+ SR;
  818. X                ty = y+CL;
  819. X                break;
  820. X            case 9:
  821. X                tx = x +SR;
  822. X                ty= y+CL+SD;
  823. X                break;
  824. X            default:
  825. X                break;
  826. X                }  /* switch */
  827. X        sculpture( tx,ty, b[i] );
  828. X        }   /*  for */
  829. X}   /*  end of function */    
  830. X
  831. sculpture( x, y, index )
  832. int x,y, index;
  833. X{
  834. X    FILE *fptr;
  835. X    char str[20],len;
  836. X    int i,j;
  837. X
  838. X    if( NULL == (fptr=fopen(DFName,"r"))) { Error("!"); Quit();}
  839. X    fseek(fptr, (long)(a[index].address), 0 );
  840. X    for(i=0; i< CL ; i++ ){
  841. X        fgets( str, CW+5, fptr);
  842. X        len = strlen( str );
  843. X        str[ len-1] =' '; len--;
  844. X        for(j=0 ; j <len ; j++ ){
  845. X            board[y+i][x+j] = str[j] ; 
  846. X        }  /*  for */
  847. X    }  /* for */
  848. X    fclose(fptr);
  849. X}
  850. compress(str)
  851. char *str;
  852. X{
  853. X    int i,len ;
  854. X    len = strlen(str);
  855. X    for(i=0; i<len ; i++ )
  856. X        if( str[i] != ' ')  return 1;
  857. X    return 0;
  858. X}
  859. X
  860. X
  861. print_board(mode)
  862. short mode;
  863. X{
  864. X    int i,  limit;
  865. X
  866. X    for(i=0; i < CL*2+3 ; i++ )
  867. X        if( compress(board[i]) ) limit=i;
  868. X
  869. X    board_optimize( limit );
  870. X    board_compress( limit );
  871. X        
  872. X    if(mode == 0 ) {
  873. puts("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
  874. X        for(i=0 ; i <= limit ; i++ ){
  875. X                    puts( board[i]);
  876. X                    fflush(stdout);
  877. X                    }
  878. puts("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
  879. X    fflush(stdout);
  880. X                }
  881. X    else if( mode==1 )   for(i=0 ; i <= limit ; i++ )
  882. X                            printf("%s:%s\n",receiver,board[i]);
  883. X}
  884. X
  885. board_compress( max )
  886. int max;
  887. X{
  888. X    int i,j;
  889. X    int end;
  890. X    int sw = 0;
  891. X    char tablet[CL*3+2];
  892. X
  893. X    end = strlen(board[0]);
  894. X
  895. X    for(i=0 ; i<end-1 ; i++ ){
  896. X        for(j=0; j<= max ; j++ ) tablet[j]= board[j][i];
  897. X        tablet[j] = 0;
  898. X        if( strClen(tablet) ==0 ){ 
  899. X            sw++; 
  900. X            if (sw==3){
  901. X                exec_compress(i,max,end);
  902. X                sw--;
  903. X                end--;
  904. X                i--;  } /* if */
  905. X                }  /* if */
  906. X        else sw=0;
  907. X        }  /* for i */
  908. X}
  909. X
  910. exec_compress( i, max, end)
  911. int i,max,end;
  912. X{
  913. X    int j,k;
  914. X
  915. X    for(j=0 ; j<=max ; j++ ){
  916. X        for(k=i; k<end-1; k++ )
  917. X            board[j][k]=board[j][k+1];
  918. X        board[j][k] = 0 ;
  919. X        }
  920. X}
  921. strClen(str)
  922. char *str;
  923. X{
  924. X    int len, i;
  925. X    len=strlen(str);
  926. X    for(i=0 ; i<len ; i++)
  927. X        if(str[i]!=' ') return 1;
  928. X    return 0;
  929. X}
  930. board_optimize( max )
  931. int max;
  932. X{
  933. X    int i,j,k;
  934. X    int local_max;
  935. X    int delta ;
  936. X
  937. X    for(i=0; i< word_counter ; i++ ){
  938. X        local_max= local_scan(i,max);
  939. X        if( local_max <= max-2) {
  940. X            delta = (max-local_max)/2 ;
  941. X            for( j=i*(CW*2-1); j< (i+1)*(CW*2-1) ; j++) 
  942. X                for(k=local_max ; k>=0 ; k--){
  943. X                    board[k+delta][j] = board[k][j];
  944. X                    board[k][j]=' ';
  945. X                    }  /*  for k */
  946. X                } /*  if  */
  947. X        } /* for i */
  948. X}
  949. X
  950. local_scan(i,max)
  951. int i;
  952. int max;
  953. X{
  954. X    int j,k;
  955. X    int local=0;
  956. X
  957. X    for( j=i*(CW*2-1); j< (i+1)*(CW*2-1) ; j++) 
  958. X        for(k=max; k>0 ; k--) 
  959. X            if( board[k][j] != ' ') { if(k>local) local=k ; break; }
  960. X    return local;
  961. X}
  962. X        
  963. make_board(str)
  964. char *str;
  965. X{
  966. X    int i,len,defect=0 ;
  967. X
  968. X    len = strlen(str); 
  969. X    
  970. X    for(i=0; i<len ; i++ ) { 
  971. X        b[i+defect] = where( str[i], alpha );
  972. X        if( b[i+defect] == -1 ) defect--;
  973. X        else t[i+defect] = a[b[i+defect]].type;
  974. X        }
  975. X    return i+defect; 
  976. X}
  977. make_font()
  978. X{
  979. X    int i;
  980. X    for(i=0; i<TOTAL ; i++ ) { 
  981. X        a[i].type = exist( alpha[i] );
  982. X        a[i].address = i*(CL*(CW+1)+1) ;
  983. X        }
  984. X}
  985. X    
  986. exist( ch )
  987. X{
  988. X    if( where(ch, c ) >-1 )  return 0;
  989. X    else if( where( ch, v1) > -1 ) return 1;
  990. X    else if( where(ch, v2) >-1 ) return 2;
  991. X    return 3;
  992. X}
  993. where( ch, str )
  994. char ch;
  995. char *str;
  996. X{
  997. X    int i, len;
  998. X
  999. X    len=strlen(str);
  1000. X    for(i=0; i<len ; i++ ) 
  1001. X        if( ch == str[i] )  return i;
  1002. X    return -1;
  1003. X}
  1004. XError(str)
  1005. char *str;
  1006. X{
  1007. X}
  1008. Quit()
  1009. X{
  1010. X    puts("-------");
  1011. X    exit(0);
  1012. X}
  1013. X
  1014. X
  1015. END_OF_FILE
  1016. if test 6638 -ne `wc -c <'banner-05/lban.c'`; then
  1017.     echo shar: \"'banner-05/lban.c'\" unpacked with wrong size!
  1018. fi
  1019. # end of 'banner-05/lban.c'
  1020. fi
  1021. if test -f 'banner-05/sban.c' -a "${1}" != "-c" ; then 
  1022.   echo shar: Will not clobber existing file \"'banner-05/sban.c'\"
  1023. else
  1024. echo shar: Extracting \"'banner-05/sban.c'\" \(7705 characters\)
  1025. sed "s/^X//" >'banner-05/sban.c' <<'END_OF_FILE'
  1026. X
  1027. X/* Small Korean Banner */
  1028. X
  1029. X#include <stdio.h>
  1030. X
  1031. X#define TOTAL 60
  1032. X#define BufSize 255
  1033. X
  1034. X#define CW   2   /* character width */
  1035. X#define CL   2   /* character length */ 
  1036. X
  1037. X#define SD   1   /* shift down */ 
  1038. X#define SR   1   /* shift right */ 
  1039. X#define SB   1   /* shift below */
  1040. X
  1041. X#define MC   15  /* max characters */
  1042. X
  1043. X#define DFName     "/ufo2/fcode/e880505/Bin/sban.dat"    /* data file name */
  1044. X
  1045. static char alpha[]={"abcdefghijklmnopqrstuvwxyzQWERTOP?!.,:_AZSXDCFVGB1234567890"};
  1046. static char c[]={"acdefgqrstvwxzQWERT"};  /* consonant */
  1047. static char v1[]={"ijklopuOP"}; 
  1048. static char v2[]={"bhny"};
  1049. static char v3[]={"m"};
  1050. static char s[]={"?!.,:_AZSXDCFVGB1234567890"};
  1051. X
  1052. struct FONT  {
  1053. X    int   address;
  1054. X    short type;
  1055. X    }  a[TOTAL];  
  1056. X
  1057. int  b[BufSize];    /*  board  */
  1058. int  t[BufSize];    /*  taget  */
  1059. X
  1060. char board[2*CL+3][(CW*2+1)*MC+3]; 
  1061. char *receiver;   /*  special receiver  */
  1062. char *message;
  1063. X
  1064. short  word_counter ;
  1065. X
  1066. main(argc,argv)
  1067. int argc;
  1068. char *argv[];
  1069. X{ 
  1070. X    int number , station = 0; 
  1071. X    
  1072. X    if( argc != 2 && argc !=3 ) {Error(":)"); Quit();} 
  1073. X    if(argc == 3 )  receiver = argv[2];
  1074. X    make_font(); 
  1075. X    message = argv[1];
  1076. X    number=make_board(message);
  1077. X    while(1){
  1078. X        word_counter=0;
  1079. X        clear_board();
  1080. X        station=load_board(station,number);
  1081. X        print_board(argc-2);
  1082. X        fflush(stdout);
  1083. X        if(station == number) break;
  1084. X    }
  1085. X}
  1086. clear_board()
  1087. X{
  1088. X    int i,j;
  1089. X
  1090. X    for(i=0;i<2*CL+3; i++ ){
  1091. X        for( j=0; j< (CW*2+1)*MC; j++)
  1092. X            board[i][j] = ' ';
  1093. X        board[i][j] = 0;
  1094. X    }
  1095. X}
  1096. X
  1097. contractor( index ,num)
  1098. int index;
  1099. int num;
  1100. X{
  1101. X    int i,j;
  1102. X    int what, mwhat, twhat;
  1103. X            
  1104. X    switch( t[index] ){
  1105. X        case 4:   /** symbolic  */
  1106. X            return 0;
  1107. X            break;
  1108. X        case 1:    /* */
  1109. X            if( index > 0 ) {
  1110. X                    if( t[index-1] ==2 ) return 2;
  1111. X                    else if( t[index-1] == 3) return 11;
  1112. X                    else return 1;
  1113. X                    }
  1114. X            else return 1;
  1115. X            break;
  1116. X        case 2:   /** velar */ 
  1117. X            return 3;
  1118. X            break;
  1119. X        case 3:   /*  case of m */
  1120. X            return 10;
  1121. X            break;
  1122. X        case 0:   /*  consonant */
  1123. X            if(index==0 ) return 0;
  1124. X            if( index <num-1 ) { 
  1125. X                what = contractor(index+1, num );
  1126. X                if( what==1||what==2||what==3||what==10||what==11) return 0;
  1127. X                if( what == 0 ) {
  1128. X                    twhat = t[index-1] ;
  1129. X                    if( twhat== 1 ) {
  1130. X                        mwhat = contractor(index-1, num );
  1131. X                        if( mwhat== 1) return 8;
  1132. X                        if(mwhat == 2) return 9;
  1133. X                        if( mwhat == 11 ) return 14;
  1134. X                        }
  1135. X                    if( twhat == 2) {
  1136. X                            return 6;
  1137. X                        }
  1138. X                    if( twhat == 3) {
  1139. X                        return 12;
  1140. X                        }
  1141. X                    if( twhat== 0) {
  1142. X                        mwhat = contractor( index-2);
  1143. X                        if(mwhat == 1) return 5;
  1144. X                        if(mwhat == 11) return 13;
  1145. X                        if(mwhat == 2) return 7;
  1146. X                        if(mwhat == 3) return 7;
  1147. X                        if(mwhat == 10) return 13;
  1148. X                        }
  1149. X                    } /* if */
  1150. X                  else{ 
  1151. X                    mwhat = contractor( index-1, num );
  1152. X                    if(mwhat == 1 ) return 4;
  1153. X                    if(mwhat == 11) return 12;
  1154. X                    if(mwhat == 2 ) return 6;
  1155. X                    if(mwhat == 3 ) return 6;
  1156. X                    if(mwhat == 10) return 12;
  1157. X                    }
  1158. X                }    /*  if */
  1159. X            else { 
  1160. X                twhat = t[index-1];
  1161. X                if(twhat == 0) {
  1162. X                    mwhat = contractor(index-2, num);
  1163. X                    if( mwhat == 3 )  return 7;
  1164. X                    if( mwhat == 10) return 13;
  1165. X                    if( mwhat == 1 ) return 5;
  1166. X                    if( mwhat == 11) return 13;
  1167. X                    if(mwhat ==2 ) return 7;
  1168. X                    }
  1169. X                mwhat = contractor( index-1 , num );
  1170. X                if( mwhat == 3 ) return 6;
  1171. X                if( mwhat == 10) return 12;
  1172. X                if( mwhat == 1 ) return 8;
  1173. X                if( mwhat == 11) return 14;
  1174. X                if( mwhat == 2 ) return 9;
  1175. X                }
  1176. X        break;
  1177. X        } /* swtich */
  1178. X} /* end of procedure */
  1179. X
  1180. X
  1181. X
  1182. load_board(stop, num )
  1183. int stop;
  1184. int num;
  1185. X{
  1186. X    int i;
  1187. X    int x=0 ,y=0 ;    /* location of a charcater */
  1188. X    int tx, ty ;   /* location of a alphabet */ 
  1189. X    short  what;
  1190. X    
  1191. X    for( i= stop ; i< num ; i++ ){ 
  1192. X        what = contractor(i,num); 
  1193. X        switch( what ){
  1194. X            case 0:
  1195. X                if(i!=stop) { x+=CW*2+1 ;  }
  1196. X                tx=x; ty = y;
  1197. X                word_counter++;
  1198. X                if( word_counter > MC )  return i;
  1199. X                break;
  1200. X            case 1:
  1201. X                tx = x+CW ;
  1202. X                ty=y;
  1203. X                break;
  1204. X            case 2: 
  1205. X            case 11:
  1206. X                tx= x+CW;
  1207. X                ty= y+SB ;
  1208. X                break; 
  1209. X            case 3: 
  1210. X                tx = x; 
  1211. X                ty = y+CL ;
  1212. X                break;
  1213. X            case 10:
  1214. X                tx = x;
  1215. X                ty = y+CL-1;
  1216. X                break;
  1217. X            case 4:
  1218. X                tx = x ;
  1219. X                ty = y+CL ;
  1220. X                break; 
  1221. X            case 12:
  1222. X                tx=x;
  1223. X                ty = y+CL+1;
  1224. X                break;
  1225. X            case 5:
  1226. X                tx= x+CW ;
  1227. X                ty = y+CL;
  1228. X                break;
  1229. X            case 13:
  1230. X                tx= x+CW ;
  1231. X                ty = y+CL+1;
  1232. X                break;
  1233. X            case 6:
  1234. X                tx = x;
  1235. X                ty = y+CL+SD ;
  1236. X                break;
  1237. X            case 7:
  1238. X                tx = x+CW;
  1239. X                ty = y+CL+SD;
  1240. X                break;
  1241. X            case 8:
  1242. X                tx = x+ SR;
  1243. X                ty = y+CL;
  1244. X                break;
  1245. X            case 14:
  1246. X                tx = x+ SR;
  1247. X                ty = y+CL+1;
  1248. X                break;
  1249. X            case 9:
  1250. X                tx = x +SR;
  1251. X                ty= y+CL+SD;
  1252. X                break;
  1253. X            default:
  1254. X                break;
  1255. X                }  /* switch */
  1256. X        sculpture( tx,ty, b[i] );
  1257. X        }   /*  for */
  1258. X        return i;
  1259. X}   /*  end of function */    
  1260. X
  1261. sculpture( x, y, index )
  1262. int x,y, index;
  1263. X{
  1264. X    FILE *fptr;
  1265. X    char str[20],len;
  1266. X    int i,j;
  1267. X
  1268. X    if( NULL == (fptr=fopen(DFName,"r"))) { Error("8)"); Quit();}
  1269. X    fseek(fptr, (long)(a[index].address), 0 );
  1270. X    for(i=0; i< CL ; i++ ){
  1271. X        fgets( str, CW+5, fptr);
  1272. X        len = strlen( str );
  1273. X        str[ len-1] =' '; len--;
  1274. X        for(j=0 ; j <len ; j++ ){
  1275. X            if( str[j] != ' ') board[y+i][x+j] = str[j] ; 
  1276. X        }  /*  for */
  1277. X    }  /* for */
  1278. X    fclose(fptr);
  1279. X}
  1280. compress(str)
  1281. char *str;
  1282. X{
  1283. X    int i,len ;
  1284. X    len = strlen(str);
  1285. X    for(i=0; i<len ; i++ )
  1286. X        if( str[i] != ' ')  return 1;
  1287. X    return 0;
  1288. X}
  1289. X
  1290. X
  1291. print_board(mode)
  1292. short mode;
  1293. X{
  1294. X    int i,  limit;
  1295. X
  1296. X    for(i=0; i < CL*2+3 ; i++ )
  1297. X        if( compress(board[i]) ) limit=i;
  1298. X
  1299. X    board_optimize( limit );
  1300. X    board_compress( limit );
  1301. X    space_check( limit );
  1302. X        
  1303. X    if(mode == 0 ) {
  1304. X        for(i=0 ; i <= limit ; i++ ){
  1305. X                    puts( board[i]);
  1306. X                    fflush(stdout);
  1307. X                    }
  1308. X    fflush(stdout);
  1309. X                }
  1310. X    else if( mode==1 )   for(i=0 ; i <= limit ; i++ )
  1311. X                            printf("%s:%s\n",receiver,board[i]);
  1312. X}
  1313. X
  1314. space_check(max)
  1315. X{
  1316. X    int i,j;
  1317. X
  1318. X    for(i=0;i<=max ; i++ )
  1319. X        for( j=0; j< (CW*2+1)*MC-1; j++)
  1320. X            if(board[i][j] == 'A')  board[i][j]=' ';
  1321. X}
  1322. board_compress( max )
  1323. int max;
  1324. X{
  1325. X    int i,j;
  1326. X    int end;
  1327. X    int sw = 0;
  1328. X    char tablet[CL*3+2];
  1329. X
  1330. X    end = strlen(board[0]);
  1331. X
  1332. X    for(i=0 ; i<end-1 ; i++ ){
  1333. X        for(j=0; j<= max ; j++ ) tablet[j]= board[j][i];
  1334. X        tablet[j] = 0;
  1335. X        if( strClen(tablet) ==0 ){ 
  1336. X            sw++; 
  1337. X            if (sw==3){
  1338. X                exec_compress(i,max,end);
  1339. X                sw--;
  1340. X                end--;
  1341. X                i--;  } /* if */
  1342. X                }  /* if */
  1343. X        else sw=0;
  1344. X        }  /* for i */
  1345. X}
  1346. X
  1347. exec_compress( i, max, end)
  1348. int i,max,end;
  1349. X{
  1350. X    int j,k;
  1351. X
  1352. X    for(j=0 ; j<=max ; j++ ){
  1353. X        for(k=i; k<end-1; k++ )
  1354. X            board[j][k]=board[j][k+1];
  1355. X        board[j][k] = 0 ;
  1356. X        }
  1357. X}
  1358. strClen(str)
  1359. char *str;
  1360. X{
  1361. X    int len, i;
  1362. X    len=strlen(str);
  1363. X    for(i=0 ; i<len ; i++)
  1364. X        if(str[i]!=' ') return 1;
  1365. X    return 0;
  1366. X}
  1367. board_optimize( max )
  1368. int max;
  1369. X{
  1370. X    int i,j,k;
  1371. X    int local_max;
  1372. X    int delta ;
  1373. X
  1374. X    for(i=0; i< word_counter ; i++ ){
  1375. X        local_max= local_scan(i,max);
  1376. X        if( local_max <= max-2) {
  1377. X            delta = (max-local_max)/2 ;
  1378. X            for( j=i*(CW*2+1); j< (i+1)*(CW*2+1) ; j++) 
  1379. X                for(k=local_max ; k>=0 ; k--){
  1380. X                    board[k+delta][j] = board[k][j];
  1381. X                    board[k][j]=' ';
  1382. X                    }  /*  for k */
  1383. X                } /*  if  */
  1384. X        } /* for i */
  1385. X}
  1386. X
  1387. local_scan(i,max)
  1388. int i;
  1389. int max;
  1390. X{
  1391. X    int j,k;
  1392. X    int local=0;
  1393. X
  1394. X    for( j=i*(CW*2+1); j< (i+1)*(CW*2+1) ; j++) 
  1395. X        for(k=max; k>0 ; k--) 
  1396. X            if( board[k][j] != ' ') { if(k>local) local=k ; break; }
  1397. X    return local;
  1398. X}
  1399. X        
  1400. make_board(str)
  1401. char *str;
  1402. X{
  1403. X    int i,len,defect=0 ;
  1404. X
  1405. X    len = strlen(str); 
  1406. X    
  1407. X    for(i=0; i<len ; i++ ) { 
  1408. X        b[i+defect] = where( str[i], alpha );
  1409. X        if( b[i+defect] == -1 ) defect--;
  1410. X        else t[i+defect] = a[b[i+defect]].type;
  1411. X        }
  1412. X    return i+defect; 
  1413. X}
  1414. make_font()
  1415. X{
  1416. X    int i;
  1417. X    for(i=0; i<TOTAL ; i++ ) { 
  1418. X        a[i].type = exist( alpha[i] );
  1419. X        a[i].address = i*(CL*(CW+1)+1) ;
  1420. X        }
  1421. X}
  1422. X    
  1423. exist( ch )
  1424. X{
  1425. X    if( where(ch, c ) >-1 )  return 0;
  1426. X    else if( where( ch, v1) > -1 ) return 1;
  1427. X    else if( where(ch, v2) >-1 ) return 2;
  1428. X    else if( where(ch, v3) >-1 ) return 3;
  1429. X    return 4;
  1430. X}
  1431. where( ch, str )
  1432. char ch;
  1433. char *str;
  1434. X{
  1435. X    int i, len;
  1436. X
  1437. X    len=strlen(str);
  1438. X    for(i=0; i<len ; i++ ) 
  1439. X        if( ch == str[i] )  return i;
  1440. X    return -1;
  1441. X}
  1442. XError(str)
  1443. char *str;
  1444. X{
  1445. X    puts(str);
  1446. X}
  1447. Quit()
  1448. X{
  1449. X    exit(0);
  1450. X}
  1451. X
  1452. END_OF_FILE
  1453. if test 7705 -ne `wc -c <'banner-05/sban.c'`; then
  1454.     echo shar: \"'banner-05/sban.c'\" unpacked with wrong size!
  1455. fi
  1456. # end of 'banner-05/sban.c'
  1457. fi
  1458. if test -f 'banner-07/banner.c' -a "${1}" != "-c" ; then 
  1459.   echo shar: Will not clobber existing file \"'banner-07/banner.c'\"
  1460. else
  1461. echo shar: Extracting \"'banner-07/banner.c'\" \(6380 characters\)
  1462. sed "s/^X//" >'banner-07/banner.c' <<'END_OF_FILE'
  1463. X#include <stdio.h>
  1464. X
  1465. static char *chars[][4] = {
  1466. X/***************/
  1467. X"  ",
  1468. X"  ",
  1469. X"  ",
  1470. X"  ",
  1471. X/***************/
  1472. X".",
  1473. X"|",
  1474. X"|",
  1475. X".",
  1476. X/***************/
  1477. X"_ _",
  1478. X"| |",
  1479. X"   ",
  1480. X"   ",
  1481. X/***************/
  1482. X" . . ",
  1483. X"_|_|_",
  1484. X"_|_|_",
  1485. X" | | ",
  1486. X/***************/
  1487. X" ___",
  1488. X"| | ",
  1489. X" \\| ",
  1490. X" _|)",
  1491. X/***************/
  1492. X" _ ",
  1493. X" -/",
  1494. X" / ",
  1495. X"/ =",
  1496. X/***************/
  1497. X"  _  ",
  1498. X" | | ",
  1499. X" /\\  ",
  1500. X"(__|\\",
  1501. X/***************/
  1502. X" _",
  1503. X" /",
  1504. X"  ",
  1505. X"  ",
  1506. X/***************/
  1507. X"  _",
  1508. X" / ",
  1509. X"|  ",
  1510. X" \\_",
  1511. X/***************/
  1512. X"_  ",
  1513. X" \\ ",
  1514. X"  |",
  1515. X"_/ ",
  1516. X/***************/
  1517. X"      ",
  1518. X"  \\|/ ",
  1519. X" --*--",
  1520. X"  /|\\ ",
  1521. X/***************/
  1522. X"     ",
  1523. X"  |  ",
  1524. X"--+--",
  1525. X"  |  ",
  1526. X/***************/
  1527. X" ",
  1528. X" ",
  1529. X"_",
  1530. X"/",
  1531. X/***************/
  1532. X"    ",
  1533. X"____",
  1534. X"    ",
  1535. X"    ",
  1536. X/***************/
  1537. X"   ",
  1538. X"   ",
  1539. X"___",
  1540. X"|_|",
  1541. X/***************/
  1542. X"    _",
  1543. X"   / ",
  1544. X"  /  ",
  1545. X"_/   ",
  1546. X/***************/
  1547. X"  ___/ ",
  1548. X" /  /\\ ",
  1549. X"| /   |",
  1550. X"/\\___/ ",
  1551. X/***************/
  1552. X" . ",
  1553. X"/| ",
  1554. X" | ",
  1555. X"_|_",
  1556. X/***************/
  1557. X"  __  ",
  1558. X" /  ) ",
  1559. X"   /  ",
  1560. X"  /___",
  1561. X/***************/
  1562. X" ___ ",
  1563. X" __/ ",
  1564. X"   \\ ",
  1565. X"\\___)",
  1566. X/***************/
  1567. X"  _. ",
  1568. X" / | ",
  1569. X"/__|_",
  1570. X"  _|_",
  1571. X/***************/
  1572. X".___",
  1573. X"|__ ",
  1574. X"   \\",
  1575. X"\\__/",
  1576. X/***************/
  1577. X"  __ ",
  1578. X" /__ ",
  1579. X"/   \\",
  1580. X"\\___/",
  1581. X/***************/
  1582. X"___.",
  1583. X"  / ",
  1584. X" /  ",
  1585. X"/   ",
  1586. X/***************/
  1587. X" __ ",
  1588. X"(__)",
  1589. X"/  \\",
  1590. X"\\__/",
  1591. X/***************/
  1592. X" ___ ",
  1593. X"(___|",
  1594. X"   / ",
  1595. X"__/  ",
  1596. X/***************/
  1597. X"  ",
  1598. X"||",
  1599. X"  ",
  1600. X"||",
  1601. X/***************/
  1602. X"  ",
  1603. X"||",
  1604. X"  ",
  1605. X"|/",
  1606. X/***************/
  1607. X"  .",
  1608. X" / ",
  1609. X" \\ ",
  1610. X"  \\",
  1611. X/***************/
  1612. X"    ",
  1613. X"____",
  1614. X"____",
  1615. X"    ",
  1616. X/***************/
  1617. X".  ",
  1618. X" \\ ",
  1619. X" / ",
  1620. X"/  ",
  1621. X/***************/
  1622. X" __ ",
  1623. X"/  )",
  1624. X"  | ",
  1625. X"  . ",
  1626. X/***************/
  1627. X"  ___  ",
  1628. X" ___ \\ ",
  1629. X"| |_\\ |",
  1630. X" \\___/ ",
  1631. X/***************/
  1632. X  "   _   ",
  1633. X  "  / \\  ",
  1634. X  " /___\\ ",
  1635. X  "/     \\",
  1636. X/***************/
  1637. X  "___ ",
  1638. X  "|__)",
  1639. X  "|  \\",
  1640. X  "|__/",
  1641. X/***************/
  1642. X  "  __ ",
  1643. X  " /  \\",
  1644. X  "|    ",
  1645. X  " \\__/",
  1646. X/***************/
  1647. X  " __  ",
  1648. X  "|  \\ ",
  1649. X  "|   |",
  1650. X  "|__/ ",
  1651. X/***************/
  1652. X  " ___",
  1653. X  "|__ ",
  1654. X  "|   ",
  1655. X  "|___",
  1656. X/***************/
  1657. X  " ___",
  1658. X  "|__ ",
  1659. X  "|   ",
  1660. X  "|   ",
  1661. X/***************/
  1662. X  "  __ ",
  1663. X  " /  \\",
  1664. X  "|  __",
  1665. X  " \\__|",
  1666. X/***************/
  1667. X  "_   _",
  1668. X  "|___|",
  1669. X  "|   |",
  1670. X  "|   |",
  1671. X/***************/
  1672. X  "___",
  1673. X  " | ",
  1674. X  " | ",
  1675. X  "_|_",
  1676. X/***************/
  1677. X  " ___",
  1678. X  "   |",
  1679. X  "   |",
  1680. X  "\\_/ ",
  1681. X/***************/
  1682. X  "_  _",
  1683. X  "| / ",
  1684. X  "|/\\ ",
  1685. X  "|  \\",
  1686. X/***************/
  1687. X  "_   ",
  1688. X  "|   ",
  1689. X  "|   ",
  1690. X  "|___",
  1691. X/***************/
  1692. X  "_    _",
  1693. X  "|\\  /|",
  1694. X  "| \\/ |",
  1695. X  "|    |",
  1696. X/***************/
  1697. X  "__   _",
  1698. X  "| \\  |",
  1699. X  "|  \\ |",
  1700. X  "|   \\|",
  1701. X/***************/
  1702. X  "  ___  ",
  1703. X  " /   \\ ",
  1704. X  "|     |",
  1705. X  " \\___/ ",
  1706. X/***************/
  1707. X  "____ ",
  1708. X  "|   \\",
  1709. X  "|___/",
  1710. X  "|    ",
  1711. X/***************/
  1712. X  "  ___  ",
  1713. X  " /   \\ ",
  1714. X  "|   \\ |",
  1715. X  " \\___\\ ",
  1716. X/***************/
  1717. X  "____ ",
  1718. X  "|   \\",
  1719. X  "|___/",
  1720. X  "|  \\ ",
  1721. X/***************/
  1722. X  " __  ",
  1723. X  "|  \\ ",
  1724. X  " \\__ ",
  1725. X  "\\___|",
  1726. X/***************/
  1727. X  "_____",
  1728. X  "  |  ",
  1729. X  "  |  ",
  1730. X  "  |  ",
  1731. X/***************/
  1732. X  "_    _",
  1733. X  "|    |",
  1734. X  "|    |",
  1735. X  " \\__/ ",
  1736. X/***************/
  1737. X  "_      _",
  1738. X  " \\    / ",
  1739. X  "  \\  /  ",
  1740. X  "   \\/   ",
  1741. X/***************/
  1742. X  "_          _",
  1743. X  " \\        / ",
  1744. X  "  \\  /\\  /  ",
  1745. X  "   \\/  \\/   ",
  1746. X/***************/
  1747. X  "_   _",
  1748. X  " \\ / ",
  1749. X  " / \\ ",
  1750. X  "/   \\",
  1751. X/***************/
  1752. X  "_   _",
  1753. X  " \\ / ",
  1754. X  "  /  ",
  1755. X  " /   ",
  1756. X/***************/
  1757. X  "____ ",
  1758. X  "   / ",
  1759. X  "  /  ",
  1760. X  " /___",
  1761. X/***************/
  1762. X" __",
  1763. X"|  ",
  1764. X"|  ",
  1765. X"|__",
  1766. X/***************/
  1767. X".   ",
  1768. X" \\  ",
  1769. X"  \\ ",
  1770. X"   \\",
  1771. X/***************/
  1772. X"__ ",
  1773. X"  |",
  1774. X"  |",
  1775. X"__|",
  1776. X/***************/
  1777. X" . ",
  1778. X"/ \\",
  1779. X"   ",
  1780. X"   ",
  1781. X/***************/
  1782. X"    ",
  1783. X"    ",
  1784. X"    ",
  1785. X"____",
  1786. X/***************/
  1787. X"_ ",
  1788. X"\\ ",
  1789. X"  ",
  1790. X"  ",
  1791. X/***************/
  1792. X  "   _   ",
  1793. X  "  / \\  ",
  1794. X  " /___\\ ",
  1795. X  "/     \\",
  1796. X/***************/
  1797. X  "___ ",
  1798. X  "|__)",
  1799. X  "|  \\",
  1800. X  "|__/",
  1801. X/***************/
  1802. X  "  __ ",
  1803. X  " /  \\",
  1804. X  "|    ",
  1805. X  " \\__/",
  1806. X/***************/
  1807. X  " __  ",
  1808. X  "|  \\ ",
  1809. X  "|   |",
  1810. X  "|__/ ",
  1811. X/***************/
  1812. X  " ___",
  1813. X  "|__ ",
  1814. X  "|   ",
  1815. X  "|___",
  1816. X/***************/
  1817. X  " ___",
  1818. X  "|__ ",
  1819. X  "|   ",
  1820. X  "|   ",
  1821. X/***************/
  1822. X  "  __ ",
  1823. X  " /  \\",
  1824. X  "|  __",
  1825. X  " \\__|",
  1826. X/***************/
  1827. X  "_   _",
  1828. X  "|___|",
  1829. X  "|   |",
  1830. X  "|   |",
  1831. X/***************/
  1832. X  "___",
  1833. X  " | ",
  1834. X  " | ",
  1835. X  "_|_",
  1836. X/***************/
  1837. X  " ___",
  1838. X  "   |",
  1839. X  "   |",
  1840. X  "\\_/ ",
  1841. X/***************/
  1842. X  "_  _",
  1843. X  "| / ",
  1844. X  "|/\\ ",
  1845. X  "|  \\",
  1846. X/***************/
  1847. X  "_   ",
  1848. X  "|   ",
  1849. X  "|   ",
  1850. X  "|___",
  1851. X/***************/
  1852. X  "_    _",
  1853. X  "|\\  /|",
  1854. X  "| \\/ |",
  1855. X  "|    |",
  1856. X/***************/
  1857. X  "__   _",
  1858. X  "| \\  |",
  1859. X  "|  \\ |",
  1860. X  "|   \\|",
  1861. X/***************/
  1862. X  "  ___  ",
  1863. X  " /   \\ ",
  1864. X  "|     |",
  1865. X  " \\___/ ",
  1866. X/***************/
  1867. X  "____ ",
  1868. X  "|   \\",
  1869. X  "|___/",
  1870. X  "|    ",
  1871. X/***************/
  1872. X  "  ___  ",
  1873. X  " /   \\ ",
  1874. X  "|   \\ |",
  1875. X  " \\___\\ ",
  1876. X/***************/
  1877. X  "____ ",
  1878. X  "|   \\",
  1879. X  "|___/",
  1880. X  "|  \\ ",
  1881. X/***************/
  1882. X  " __  ",
  1883. X  "|  \\ ",
  1884. X  " \\__ ",
  1885. X  "\\___|",
  1886. X/***************/
  1887. X  "_____",
  1888. X  "  |  ",
  1889. X  "  |  ",
  1890. X  "  |  ",
  1891. X/***************/
  1892. X  "_    _",
  1893. X  "|    |",
  1894. X  "|    |",
  1895. X  " \\__/ ",
  1896. X/***************/
  1897. X  "_      _",
  1898. X  " \\    / ",
  1899. X  "  \\  /  ",
  1900. X  "   \\/   ",
  1901. X/***************/
  1902. X  "_          _",
  1903. X  " \\        / ",
  1904. X  "  \\  /\\  /  ",
  1905. X  "   \\/  \\/   ",
  1906. X/***************/
  1907. X  "_   _",
  1908. X  " \\ / ",
  1909. X  " / \\ ",
  1910. X  "/   \\",
  1911. X/***************/
  1912. X  "_   _",
  1913. X  " \\ / ",
  1914. X  "  /  ",
  1915. X  " /   ",
  1916. X/***************/
  1917. X  "____ ",
  1918. X  "   / ",
  1919. X  "  /  ",
  1920. X  " /___",
  1921. X/***************/
  1922. X"  __",
  1923. X"_(  ",
  1924. X" (  ",
  1925. X"  \\_",
  1926. X/***************/
  1927. X".",
  1928. X"|",
  1929. X"|",
  1930. X"|",
  1931. X/***************/
  1932. X"__  ",
  1933. X"  )_",
  1934. X"  ) ",
  1935. X"_/  ",
  1936. X/***************/
  1937. X" _  .",
  1938. X"/ \\/ ",
  1939. X"     ",
  1940. X"     ",
  1941. X};
  1942. X
  1943. X#define LINLEN 79
  1944. static int filled;
  1945. static char buf[4][LINLEN+1];
  1946. X
  1947. main(argc, argv)
  1948. int argc;
  1949. char *argv[];
  1950. X{
  1951. X  int i,j,max;
  1952. X
  1953. X  for (i=1; i<argc; i++) {
  1954. X    for (j=0, max=strlen(argv[i]); j<max; j++) {
  1955. X      print1char(argv[i][j]);
  1956. X    }
  1957. X    flushit();
  1958. X  }
  1959. X}
  1960. X
  1961. print1char(ch) 
  1962. char ch;
  1963. X{
  1964. X  int c=ch-' ';
  1965. X  int charlen;
  1966. X
  1967. X
  1968. X  charlen=strlen(chars[c][0]);
  1969. X
  1970. X  if (charlen+filled+(filled?1:0) > LINLEN) flushit();
  1971. X
  1972. X  strcat(buf[0]," ");
  1973. X  strcat(buf[0],chars[c][0]);
  1974. X  strcat(buf[1]," ");
  1975. X  strcat(buf[1],chars[c][1]);
  1976. X  strcat(buf[2]," ");
  1977. X  strcat(buf[2],chars[c][2]);
  1978. X  strcat(buf[3]," ");
  1979. X  strcat(buf[3],chars[c][3]);
  1980. X  filled+=charlen+1;
  1981. X}
  1982. X
  1983. flushit()
  1984. X{
  1985. X  puts(buf[0]);
  1986. X  puts(buf[1]);
  1987. X  puts(buf[2]);
  1988. X  puts(buf[3]);
  1989. X  putchar('\n');
  1990. X  buf[0][0]=buf[1][0]=buf[2][0]=buf[3][0]='\0';
  1991. X  filled=0;
  1992. X}
  1993. END_OF_FILE
  1994. if test 6380 -ne `wc -c <'banner-07/banner.c'`; then
  1995.     echo shar: \"'banner-07/banner.c'\" unpacked with wrong size!
  1996. fi
  1997. # end of 'banner-07/banner.c'
  1998. fi
  1999. if test -f 'banner-11/MB_Font.uu' -a "${1}" != "-c" ; then 
  2000.   echo shar: Will not clobber existing file \"'banner-11/MB_Font.uu'\"
  2001. else
  2002. echo shar: Extracting \"'banner-11/MB_Font.uu'\" \(8721 characters\)
  2003. sed "s/^X//" >'banner-11/MB_Font.uu' <<'END_OF_FILE'
  2004. begin 644 MB_Font
  2005. M2OP``0``&#P````!```8,`55!`"````1````````````````````````````3
  2006. M`#1+````````````````````````````$#A\5!`0$````````````!`0$%1\'
  2007. M.!`````````````8#/X,&```````````````,&#^8#```````````'PXNI+6"
  2008. MQM:2NCA\``````#^_O[\_/CZ\O;F[@``````[L;6DKHXNI+6QNX```````$!B
  2009. M`P,&!HR,V%AP,"``````/&;#D9&=@<-F/``````````8/#P\/#Q^_Q`X$```]
  2010. M``@.#PD("'CX<`````````!X0'!`0``>$!P0$```````.$!`0#@`'!(<%!(`0
  2011. M````!04%!0T-'3EY<7%A00```*"@H*"PL+B<GHZ.AH(```!\NL;&QH(`@L;&/
  2012. MQKI\``````(&!@8"``(&!@8"`````'PZ!@8&.GRXP,#`N'P```!\.@8&!CI\0
  2013. M.@8&!CI\`````(+&QL:Z?#H&!@8"`````'RXP,#`N'PZ!@8&.GP```!\N,#`X
  2014. MP+A\NL;&QKI\````?+K&QL:"``(&!@8"`````'RZQL;&NGRZQL;&NGP```!\2
  2015. MNL;&QKI\.@8&!CI\`````````'Q^!@9^9F9^/`````!X0'!`>``.$`P"'```V
  2016. M````````````!P\?&!@0'A<``````````/#X[`0$!#Q4$0L-!@<N.3@`````O
  2017. M``````0HV"C0$.``````````````````````````````````````&!@8&!@8\
  2018. M```8&````-C8;&PV````````````````````1$3^1$1$_D1$`````"@H?.[HH
  2019. MZ'@\+B[N?"@H````````QL8,&#!@QL8````````X;&PX,'[,S,QV````````.
  2020. M&!@8,#`````````````.&#`P,#`P,#`P,#`8#@``<!@,#`P,#`P,#`P,&'``<
  2021. M`````$)")#S^/"1"0@``````````&!@8?A@8&```````````````````&!@8<
  2022. M&#`@`````````'X````````````````````````8&!@````````&!@P,&!@PR
  2023. M,&!@````````/&9F9F9F9F9F/````````!@X.!@8&!@8&'X````````\9F8,"
  2024. M#!@P,&!^````````?@8,&!@,#&9F/`````````P<'#PL;&Q^#`P```````!^:
  2025. M8&!\!@8&!F8\````````/&!@8'QF9F9F/````````'X&!@P,&!@P,#``````$
  2026. M```\9F9F/&9F9F8\````````/&9F9F8^!@8&/```````````&!@8```8&!@`N
  2027. M`````````!@8&````!@8&#`@````#A@P8,!@,!@.````````````?@```'X`(
  2028. M``````````#@,!@,!@P8,.``````````/&9F#`P8&``8&````````'S&PMK6B
  2029. MUMS`XGP```````!\QL;&QO[&QL;&````````_,;&QOS&QL;&_````````'S&:
  2030. MP,#`P,#`QGP```````#\QL;&QL;&QL;\````````_L#`P/S`P,#`_@``````B
  2031. M`/[`P,#XP,#`P,````````!^P,#`WL;&QL9^````````QL;&QO[&QL;&Q@``<
  2032. M`````'X8&!@8&!@8&'X```````!^!@8&!@8&QL9\````````QLS,V/#8S,S&"
  2033. MQ@```````,#`P,#`P,#`P/X```````#&[N[6UL;&QL;&````````QL;FYM;6T
  2034. MSL[&Q@```````'S&QL;&QL;&QGP```````#\QL;&QL;\P,#`````````?,;&N
  2035. MQL;&QM;<;@```````/S&QL;\V,S,QL8```````!\QL#`<!P&!L9\````````:
  2036. M?A@8&!@8&!@8&````````,;&QL;&QL;&QGP```````#&QL;&QL;&;#@0````F
  2037. M````QL;&QL;6_N[&@@```````,;&;'PX.'QLQL8```````!F9F8D/!@8&!@8*
  2038. M````````_@8&#!@P8,#`_@```````#XP,#`P,#`P,#X```````!@8#`P&!@,4
  2039. M#`8&````````?`P,#`P,#`P,?``````0.#AL;,;&````````````````````4
  2040. M`````````/X``&`P&`P``````````````````````'P&?L;&QGX```````#`"
  2041. MP,#\QL;&QL;\````````````?,;`P,#&?`````````8&!G[&QL;&QGX`````&
  2042. M``````!\QL;^P,!^````````#A@8?A@8&!@8&````````````'S&QL;&QGX&N
  2043. M!GP```#`P,#\QL;&QL;&````````&!@`>!@8&!@8?@````````P,`'P,#`P,$
  2044. M#`P,#/@```#`P,#&S-CPV,S&````````>!@8&!@8&!@8?@```````````&S^,
  2045. MUM;&QL8```````````#\QL;&QL;&````````````?,;&QL;&?```````````T
  2046. M`/S&QL;&QOS`P,````````!^QL;&QL9^!@8&````````_,;&P,#`P```````*
  2047. M`````'S&P'P&QGP`````````,##\,#`P,#`<````````````QL;&QL;&?@``0
  2048. M`````````,;&QFQL.#@```````````#&QL;6_N[&````````````QL9\.'S&V
  2049. MQ@```````````,;&QL;&QGX&!GP```````#^!@PX8,#^``````X8&!@8,.#@T
  2050. M,!@8&!@.```8&!@8&!@8&!@8&!@8&```X#`P,#`8#@X8,#`P,.````````!B<
  2051. M\KZ<`````````,"@H*#`."`P(#@$!`0$!P```````````````#8V;&S8``!LK
  2052. M;```QL;&QL;&?@```````#AL8#AL;#@,;#@`````&#QF`#P^!CY^9F9^/@``(
  2053. M``!F9@``?`9^QL;&?@````!@,!@`/#X&/GYF9GX^````'#8<`#P^!CY^9F9^\
  2054. M/@`````````\?&!@8&!@?CX,.``8/&8`/'YF9GY@8'X^`````&9F`#Q^9F9^@
  2055. M8&!^/@```&`P&``\?F9F?F!@?CX`````9F8`.#@8&!@8&#P\````&#QF`#@XZ
  2056. M&!@8&!@\/````&`P&``X.!@8&!@8/#P```!L;`!\QL;&_L;&QL8````\9CP8J
  2057. M/'YF9GY^9F9F9@``!@P8?GY@8'Q\8&!@?GX`````````=G\;>__8V/]_````,
  2058. M/G[XV-C>WOCXV-C>W@```!@\9@`\?F9F9F9F?CP`````;&P``'S&QL;&QGP`6
  2059. M````8#`8`#Q^9F9F9F9^/````!@\9@!F9F9F9F9F?CX```!@,!@`9F9F9F9FF
  2060. M9GX^`````&9F`&9F9F9F9GX^!GY\`&QL`'S&QL;&QL;&?`````!L;`#&QL;&X
  2061. MQL;&QGP``````!@8/'YF8&!F?CP8&```````.&Q@.&QL.`QL.```````9F9FB
  2062. M9GX\&'X8&!@8```````\9F9F?&9F9GQ@8&`````.'A@8&'X8&!@8&'!@`%6`=
  2063. M`8`!@`&``8`!@`&``:H````8&```&!@8&!@8````````$!!\UM#0T-9\$!``%
  2064. M`````!PB("#X("`@('X```````"!?F9F9F9F?H$`````````9F9F)#P8&'X8(
  2065. M&````!@8&!@8&!@``!@8&!@8&!@````X;&`X;&PX#&PX``````!L;```````\
  2066. M`````````````'[#O:6AH:6]PWX``````'P&?L;&QGX`_@```````````!(V>
  2067. M;-AL-A(``````````````````'X&!@8&`````````````!(\2```````````D
  2068. M?L.YI:6YJ:7#?@``````?@``````````````````&"0D&```````````````"
  2069. M```````8&!A^&!@8`'X``#QF!APP9GX```````````!XS`PX#,QX````````\
  2070. M``````8,&#```````````````````````,;&QL;&QGY@8,```#Q45%0T%!04D
  2071. M%!04```````````8&!@````````````````````````X.!@8,"`P<#`P,#!X,
  2072. M``````````````!\QL;&QL9\`/X```````````"0V&PV;-B0```````P<#`PR
  2073. M,#!['G#.'C9F?P8/,'`P,#`P>QYP_&8&'#!C?WC,##@,S'L><,X>-F9_!@\`)
  2074. M```8&``8&`P,9F8\````,!@`?,;&QL;^QL;&Q@```!@P`'S&QL;&_L;&QL8`D
  2075. M```0.&P`?,;&QO[&QL;&````8O*\F'S&QL;^QL;&Q@````!L;`!\QL;&_L;&4
  2076. MQL8````X1#@`?,;&QO[&QL;&````````#Q@8."]H2/B(CP```````'S&P,#`+
  2077. MP,#`QGP8#!@P&`#^P,#`_,#`P,#^````&#``_L#`P/S`P,#`_@```!`X;`#\N
  2078. MP,#`^,#`P/X`````;&P`_,#`P/C`P,#^````,!@,`'X8&!@8&!@8?@````P8<
  2079. M,`!^&!@8&!@8&'X````8/&8`_A@8&!@8&!C^`````&9F`'X8&!@8&!@8?@``B
  2080. M`````#XC(?DA(SX```````!B\KZ<`.;FUM;.SL;&````8#`8`'S&QL;&QL;&9
  2081. M?`````P8,`!\QL;&QL;&QGP````0.&P`?,;&QL;&QL9\````8O*^C'S&QL;&Z
  2082. MQL;&?`````!L;`!\QL;&QL;&QGP`````````QL9\.'S&Q@````````(&?,[.P
  2083. MSM[VYN;F?,"``&`P&`#&QL;&QL;&QGP````,&#``QL;&QL;&QL9\````$#AL8
  2084. M`,;&QL;&QL;&?`````!L;`#&QL;&QL;&QGP````,&#``9F8D/!@8&!@8````H
  2085. M````<"`X)#@@("`@<````````#QF9F9\9F9F?&!@8````#`8#`!\!G[&QL9^P
  2086. M```````,&#``?`9^QL;&?@``````$#AL`'P&?L;&QGX`````8O*^G`!\!G[&<
  2087. MQL9^``````!F9@``?`9^QL;&?@`````8)"08`'P&?L;&QGX```````````!^L
  2088. M&1E_3$P_````````````?,;`P,#&?!@,&```8#`8`'S&QO[`P'X```````P88
  2089. M,`!\QL;^P,!^```````0.&P`?,;&_L#`?@```````&QL`'S&QO[`P'X`````(
  2090. M`#`8#`!X&!@8&!A^```````,&#``>!@8&!@8?@``````$#AL`'@8&!@8&'X`F
  2091. M``````!L;`!X&!@8&!A^```````($"A$1@D)"08`````````8O*^G`#\QL;&M
  2092. MQL8``````&`P&`!\QL;&QL9\```````,&#``?,;&QL;&?```````$#AL`'S&J
  2093. MQL;&QGP``````&+ROIP`?,;&QL9\``````!L;```?,;&QL;&?````````````
  2094. M&!@`?@`8&````````````@9\SL[6YN9\P(````!@,!@`QL;&QL;&?@``````F
  2095. M#!@P`,;&QL;&QGX``````!`X;`#&QL;&QL9^``````!L;```QL;&QL;&?@``&
  2096. M````#!@P`,;&QL;&QGX&!GP`````<"`X)"0X("!P````````;&P`QL;&QL;&R
  2097. M?@8&?```````````?H&E@;V9@7Y^_]O_P^?_?FS^_OY\.!``$#A\_GPX$``XF
  2098. M?#C^_GPX?!`0.'S^?#A\```8/#P8``#__^?#P^?__P`\9D)"9CP`_\.9O;V90
  2099. MP_\/!P]]S,S,>#QF9F8\&'X8/S,_,#!P\.!_8W]C8V?FP)E:/.?G/%J9@.#XA
  2100. M_OC@@``"#C[^/@X"`!@\?A@8?CP89F9F9F8`9@!_V]M[&QL;`#YC.&QL.,QX6
  2101. M`````'Y^?@`8/'X8?CP8_Q@\?A@8&!@`&!@8&'X\&```&`S^#!@````P8/Y@-
  2102. M,`````#`P,#^````)&;_9B0````8/'[__P```/__?CP8`````````````#!X)
  2103. M>#`P`#``;&QL``````!L;/YL_FQL`#!\P'@,^#```,;,&#!FQ@`X;#AVW,QVR
  2104. M`&!@P```````&#!@8&`P&`!@,!@8&#!@``!F//\\9@```#`P_#`P````````7
  2105. M`#`P8````/P````````````P,``&#!@P8,"``'S&SM[VYGP`,'`P,#`P_`!XP
  2106. MS`PX8,S\`'C,##@,S'@`'#QLS/X,'@#\P/@,#,QX`#A@P/C,S'@`_,P,&#`P$
  2107. M,`!XS,QXS,QX`'C,S'P,&'```#`P```P,```,#```#`P8!@P8,!@,!@```#\4
  2108. M``#\``!@,!@,&#!@`'C,#!@P`#``?,;>WM[`>``P>,S,_,S,`/QF9GQF9OP`4
  2109. M/&;`P,!F/`#X;&9F9FSX`/YB:'AH8OX`_F)H>&A@\``\9L#`SF8^`,S,S/S,^
  2110. MS,P`>#`P,#`P>``>#`P,S,QX`.9F;'AL9N8`\&!@8&)F_@#&[O[^UL;&`,;F&
  2111. M]M[.QL8`.&S&QL9L.`#\9F9\8&#P`'C,S,S<>!P`_&9F?&QFY@!XS.!P',QXX
  2112. M`/RT,#`P,'@`S,S,S,S,_`#,S,S,S'@P`,;&QM;^[L8`QL9L.#ALQ@#,S,QX@
  2113. M,#!X`/[&C!@R9OX`>&!@8&!@>`#`8#`8#`8"`'@8&!@8&'@`$#ALQ@``````$
  2114. M````````_S`P&`````````!X#'S,=@#@8&!\9F;<````>,S`S'@`'`P,?,S,-
  2115. M=@```'C,_,!X`#AL8/!@8/````!VS,Q\#/C@8&QV9F;F`#``<#`P,'@`#``,T
  2116. M#`S,S'C@8&9L>&SF`'`P,#`P,'@```#,_O[6Q@```/C,S,S,````>,S,S'@`\
  2117. M``#<9F9\8/```';,S'P,'@``W'9F8/````!\P'@,^``0,'PP,#08````S,S,T
  2118. MS'8```#,S,QX,````,;6_OYL````QFPX;,8```#,S,Q\#/@``/R8,&3\`!PP"
  2119. M,.`P,!P`&!@8`!@8&`#@,#`<,##@`';<`````````!`X;,;&_@```````&QL@
  2120. MV`#,`,S,S'X`/F,X;&PXS'A^PSP&/F8_`,P`>`Q\S'X`X`!X#'S,?@`P,'@,]
  2121. M?,Q^````>,#`>`PX?L,\9GY@/`#,`'C,_,!X`.``>,S\P'@`S`!P,#`P>`!\3
  2122. MQC@8&!@\`.``<#`P,'@`QCALQO[&Q@`P,`!XS/S,`!P`_&!X8/P```!_#'_,B
  2123. M?P`^;,S^S,S.`'C,`'C,S'@``,P`>,S,>```X`!XS,QX`'C,`,S,S'X``.``G
  2124. MS,S,?@``S`#,S'P,^,,8/&9F/!@`S`#,S,S,>``8&'[`P'X8&#YC.&QL.,QXZ
  2125. MS,QX_##\,##XS,SZQL_&QPX;&#P8&-AP58`!@`&``:H`,``P,'AX,``0?-#07
  2126. M?!```!@D<"!\``"!?F9F9GZ!`,S,S'@P>#``&!@8```8&!@^8SAL;#C,>`#,!
  2127. M`````````#Q:4EH\``!X#'S,=O\````2)$@D$@``````?@8&`````")^1```A
  2128. M```\6GIF/````'X````````0*!`````````P,/PP,`#\8!`@<`````#`(&`@0
  2129. MP`````P,&`````````#,S,S,=L``/%0T%!04`````#`P``````````!P,&`@6
  2130. M8"!P`````'C,S,QX_````$@D$B1(```@8"1Z%B\"`"!@)'@<(@0.P"!$*M8O.
  2131. M`@``,``P&`S,>#``>,S\S,P`,`!XS/S,S``P`'C,_,S,`"A0>,S\S,P`QCAL<
  2132. MQO[&Q@`0.&S&_L;&`!X8*"YX2(X`/&;`P,!F/!C^8FAX:&+^`/YB:'AH8OX`:
  2133. M_F)H>&AB_@#^8FAX:&+^`'@P,#`P,'@`>#`P,#`P>`!X,#`P,#!X`'@P,#`PH
  2134. M,'@``#XA^2$^```4*/;>SL;&`#ALQL;&;#@`.&S&QL9L.``X;,;&QFPX`#AL[
  2135. MQL;&;#@`PQ@\9F8\&```QFPX;,8``#ILSM;F;+@`S,S,S,S,_`#,S,S,S,S\E
  2136. M`,S,S,S,S/P`S`#,S,S,>`#,S,QX,#!X``!P.#@@('```'C,^,SXP,```'@,`
  2137. M?,QV````>`Q\S'8```!X#'S,=@```'@,?,QV`,P`>`Q\S'X```!X#'S,=@``<
  2138. M9F9F9GQ@P```>,S`S'@P``!XS/S`>````'C,_,!X````>,S\P'@```!XS/S`4
  2139. M>``P`'`P,#!X`#``<#`P,'@`,`!P,#`P>`#8`'`P,#!X``````````````#XX
  2140. MS,S,S````'C,S,QX````>,S,S'@```!XS,S,>````'C,S,QX``#,`'C,S'@`4
  2141. M```8?A@``````GS,W.QX@```S,S,S'8```#,S,S,=@```,S,S,QV``#,`,S,.
  2142. GS'X`&#``S,Q\#/@`(#@D."```,P`S,S,?`SX:7-O9F]N=```TOCLF
  2143. X``
  2144. end
  2145. size 6204
  2146. END_OF_FILE
  2147. if test 8721 -ne `wc -c <'banner-11/MB_Font.uu'`; then
  2148.     echo shar: \"'banner-11/MB_Font.uu'\" unpacked with wrong size!
  2149. fi
  2150. # end of 'banner-11/MB_Font.uu'
  2151. fi
  2152. if test -f 'banner-11/Read.Me' -a "${1}" != "-c" ; then 
  2153.   echo shar: Will not clobber existing file \"'banner-11/Read.Me'\"
  2154. else
  2155. echo shar: Extracting \"'banner-11/Read.Me'\" \(5204 characters\)
  2156. sed "s/^X//" >'banner-11/Read.Me' <<'END_OF_FILE'
  2157. mb - and just another banner program.
  2158. X
  2159. No makefile, No manualpage included.
  2160. X
  2161. It's just another senseless program but I couldn't resist in writing
  2162. it. It should just compile ok under OS-9/68k, any *IX flavour and on
  2163. nearly every other system (with same small changes...). I could only
  2164. test it on OS-9/68k.
  2165. X
  2166. The main difference to other programs: It uses an external font-file,
  2167. so you can change this as you want. The format is very easy:
  2168. X256 characters each in a size of 16 byte, displaying in following
  2169. order
  2170. bit     7 6 5 4 3 2 1 0
  2171. byte 0  X X X X X X X X
  2172. byte 1  X X X X X X X X
  2173. byte 2  X X X X X X X X
  2174. byte 3  X X X X X X X X
  2175. byte 4  X X X X X X X X
  2176. byte 5  X X X X X X X X
  2177. byte 6  X X X X X X X X
  2178. byte 7  X X X X X X X X
  2179. byte 8  X X X X X X X X
  2180. byte 9  X X X X X X X X
  2181. byte 10 X X X X X X X X
  2182. byte 11 X X X X X X X X
  2183. byte 12 X X X X X X X X
  2184. byte 13 X X X X X X X X
  2185. byte 14 X X X X X X X X
  2186. byte 15 X X X X X X X X
  2187. X
  2188. Then 256 characters with a size of 8 bytes each follows, order is the
  2189. same as above (but only 8 lines).
  2190. X
  2191. This file may be prefixed by an OS-9/68k module header of 48 bytes
  2192. X(these font files are used on an OS-9 implementation for the Atari ST).
  2193. X
  2194. The format itself can be found in the Atari ST TOS world very often,
  2195. so it's easy to get other fonts (I haven't included any, 'cause I
  2196. don't if they are copyrighted, sigh).
  2197. X
  2198. There is no difference to other programs of the same type, the most
  2199. common options are available:
  2200. X-o=<file>  use this fontfile instead of $HOME/.font or
  2201. X           /dd/SYS/MB_Font (OS-9) / /etc/MB_Font (*IX) / \MB_FONT (DOS)
  2202. X-l         use the larger (16x8) font (default is 8x8 font)
  2203. X-w=<num>   width multiplicator
  2204. X-h=<num>   hight multiplicator
  2205. X-c         print the letters cursive (well not really cursive...)
  2206. X-C         make the banner cursive in other direction
  2207. X-i         invert the printing (exchange for- and background pattern)
  2208. X-f=<char>  use <char> as the forground (i.e. write) pattern
  2209. X           (default `*')
  2210. X-b=<char>  the background (default ` ')
  2211. X-s         use the character itself as the forground pattern
  2212. X
  2213. If no string is given, the strings are read in from stdin until
  2214. an EOF is detected.
  2215. X
  2216. You can print a leading `-' with a construct `--'
  2217. X
  2218. The included font file represents roughly the ISO 8859/1 character
  2219. set.
  2220. X
  2221. Bug: if a fontfile starts with the bytes 0x4a 0xfc then it is assumed
  2222. to be a OS-9 Module and the first 48 bytes are skipped...
  2223. X
  2224. Some expamples:
  2225. X% mb Foo Bar
  2226. X*******                 
  2227. X **   *                 
  2228. X ** *    ****    ****   
  2229. X ****   **  **  **  **  
  2230. X ** *   **  **  **  **  
  2231. X **     **  **  **  **  
  2232. X****     ****    ****   
  2233. X                        
  2234. X******                  
  2235. X **  **                 
  2236. X **  **  ****   ** ***  
  2237. X *****      **   *** ** 
  2238. X **  **  *****   **  ** 
  2239. X **  ** **  **   **     
  2240. X******   *** ** ****    
  2241. X                        
  2242. X
  2243. X$ mb "Foo Bar"
  2244. X*******                         ******                  
  2245. X **   *                          **  **                 
  2246. X ** *    ****    ****            **  **  ****   ** ***  
  2247. X ****   **  **  **  **           *****      **   *** ** 
  2248. X ** *   **  **  **  **           **  **  *****   **  ** 
  2249. X **     **  **  **  **           **  ** **  **   **     
  2250. X****     ****    ****           ******   *** ** ****    
  2251. X                                                        
  2252. X$ mb -lcfXb. "--Foo Bar"
  2253. X...............................................................................
  2254. X...............................................................................
  2255. X...............................................................................
  2256. X....................XXXXXXX.........................XXXXXX.....................
  2257. X...................XX..............................XX...XX.....................
  2258. X..................XX..............................XX...XX......................
  2259. X.................XX.......XXXXX...XXXXX..........XX...XX..XXXXX..XXXXXX........
  2260. X.........XXXXXX.XXXXX...XX...XX.XX...XX.........XXXXXX.......XX.XX...XX........
  2261. X...............XX......XX...XX.XX...XX.........XX...XX..XXXXXX.XX...XX.........
  2262. X..............XX......XX...XX.XX...XX.........XX...XX.XX...XX.XX...............
  2263. X.............XX......XX...XX.XX...XX.........XX...XX.XX...XX.XX................
  2264. X............XX......XX...XX.XX...XX.........XX...XX.XX...XX.XX.................
  2265. X...........XX.......XXXXX...XXXXX..........XXXXXX...XXXXXX.XX..................
  2266. X...............................................................................
  2267. X...............................................................................
  2268. X...............................................................................
  2269. X
  2270. X$ mb -w=3 Foo
  2271. X*********************                                                   
  2272. X   ******         ***                                                   
  2273. X   ******   ***            ************            ************         
  2274. X   ************         ******      ******      ******      ******      
  2275. X   ******   ***         ******      ******      ******      ******      
  2276. X   ******               ******      ******      ******      ******      
  2277. X************               ************            ************         
  2278. X                                                                        
  2279. END_OF_FILE
  2280. if test 5204 -ne `wc -c <'banner-11/Read.Me'`; then
  2281.     echo shar: \"'banner-11/Read.Me'\" unpacked with wrong size!
  2282. fi
  2283. # end of 'banner-11/Read.Me'
  2284. fi
  2285. if test -f 'banner-11/mb.c' -a "${1}" != "-c" ; then 
  2286.   echo shar: Will not clobber existing file \"'banner-11/mb.c'\"
  2287. else
  2288. echo shar: Extracting \"'banner-11/mb.c'\" \(7453 characters\)
  2289. sed "s/^X//" >'banner-11/mb.c' <<'END_OF_FILE'
  2290. X/*
  2291. X *    mb:    another banner program with external fontfiles
  2292. X *
  2293. X *    (C) Copyrighted 1992 by Ulrich Dessauer, Germering, Germany
  2294. X *
  2295. X *    You can copy, forward, redistribute the whole package as long
  2296. X *    as you make no profit and this copyright messages stays untouched!
  2297. X */
  2298. X# include    <stdio.h>
  2299. X# include    <errno.h>
  2300. X# ifdef        OSK
  2301. X# include    <modes.h>
  2302. X# include    <module.h>
  2303. X# define    R_OK        S_IREAD
  2304. X# define    MODHEADSIZ    sizeof (struct modhcom)
  2305. X# else        /* OSK */
  2306. X# include    <fcntl.h>
  2307. X# ifndef    R_OK
  2308. X# define    R_OK        O_RDONLY
  2309. X# endif        /* R_OK */
  2310. X# define    MODSYNC        ((unsigned long) 0x4afc)
  2311. X# define    MODHEADSIZ    0x30
  2312. X# if        defined (USG) || defined (SYSV) || defined (SYS5) || defined (HAS_STRCHR)
  2313. X# define    index        strchr
  2314. X# endif        /* defined (USG) || defined (SYSV) || defined (SYS5) || defined (HAS_STRCHR) */
  2315. X# endif        /* OSK */
  2316. X
  2317. X    /* binary read for fopen */
  2318. X# if        defined (MSDOS) || defined (msdos) || defined (TOS)
  2319. X# define    READ_BINARY    "rb"
  2320. X# else        /* defined (MSDOS) || defined (msdos) || defined (TOS) */
  2321. X# define    READ_BINARY    "r"
  2322. X# endif        /* defined (MSDOS) || defined (msdos) || defined (TOS) */
  2323. X
  2324. X# define    FALSE        (0 == 1)
  2325. X# define    TRUE        (1 == 1)
  2326. X
  2327. X# ifdef        OSK
  2328. X# define    DEF_FONTFILE    "/dd/SYS/MB_Font"
  2329. X# else        /* OSK */
  2330. X# if        defined (MSDOS) || defined (msdos) || defined (TOS)
  2331. X# define    DEF_FONTFILE    "\\MB_FONT"
  2332. X# else        /* defined (MSDOS) || defined (msdos) || defined (TOS) */
  2333. X# define    DEF_FONTFILE    "/etc/MB_Font"
  2334. X# endif        /* defined (MSDOS) || defined (msdos) || defined (TOS) */
  2335. X# endif        /* OSK */
  2336. X
  2337. X# define    NO_MEM        exit (_errmsg (errno, "Out of memory!\n"));
  2338. X
  2339. extern char    *getenv ();
  2340. extern char    *index ();
  2341. extern char    *malloc ();
  2342. X
  2343. typedef unsigned char    byte;
  2344. X
  2345. static char        *fontfile;
  2346. static int        large;
  2347. static int        width;
  2348. static int        hight;
  2349. static int        cursive;
  2350. static int        backcursive;
  2351. static int        invers;
  2352. static char        forground;
  2353. static char        background;
  2354. X
  2355. X# ifndef    OSK
  2356. X/*
  2357. X *    Not very portable....
  2358. X */
  2359. int
  2360. X_errmsg (error, fmt, a, b, c)
  2361. int error;
  2362. char *fmt;
  2363. void *a, *b, *c;
  2364. X{
  2365. X    fputs ("mb: ", stderr);
  2366. X    fprintf (stderr, fmt, a, b, c);
  2367. X    return (error);
  2368. X}
  2369. X# endif        /* OSK */
  2370. X
  2371. static void
  2372. banner (s, cset)
  2373. char *s;
  2374. byte *cset;
  2375. X{
  2376. X    register byte    *ptr;
  2377. X    register int    n;
  2378. X    register int    t;
  2379. X    register byte    b;
  2380. X    register int    ch;
  2381. X    int        u, v;
  2382. X    int        max;
  2383. X    static char    *space = NULL;
  2384. X    static int    spcsiz = 0;
  2385. X
  2386. X    if (! space) {
  2387. X        spcsiz = (large ? 16 : 8) * hight;
  2388. X        if (! (space = malloc (spcsiz + 4)))
  2389. X            return;
  2390. X    }
  2391. X    if (cursive || backcursive) {
  2392. X        memset (space, invers ? forground : background, spcsiz);
  2393. X        space[spcsiz] = '\0';
  2394. X    }
  2395. X    max = (large ? 16 : 8) * hight;
  2396. X    for (n = 0; n < max; ++n) {
  2397. X        if (cursive) {
  2398. X            space[max - n - 1] = '\0';
  2399. X            fputs (space, stdout);
  2400. X        } else if (backcursive)
  2401. X            for (t = 0; t < n; ++t)
  2402. X                putchar (invers ? forground : background);
  2403. X        ptr = (byte *) s;
  2404. X        while (*ptr) {
  2405. X            b = cset[(*ptr << (large ? 4 : 3)) + (n / hight)];
  2406. X                for (t = 7; t >= 0; --t) {
  2407. X                    if (((b & (1 << t)) != 0) ^ invers)
  2408. X                        ch = forground ? forground : (int) *ptr;
  2409. X                    else
  2410. X                        ch = background;
  2411. X                    for (u = 0; u < width; ++u)
  2412. X                        putchar (ch);
  2413. X                }
  2414. X            ++ptr;
  2415. X        }
  2416. X        if (cursive)
  2417. X            for (t = 0; t < n; ++t)
  2418. X                putchar (invers ? forground : background);
  2419. X        else if (backcursive) {
  2420. X            space[max - n - 1] = '\0';
  2421. X            fputs (space, stdout);
  2422. X        }
  2423. X        putchar ('\n');
  2424. X    }
  2425. X}
  2426. X
  2427. static char    *help[] = {
  2428. X    "Syntax: mb [<opts>] [<string(s)] [<opts>]\n",
  2429. X    "Function: prints a string in large letter\n",
  2430. X    "Options:\n",
  2431. X    "     -o=<file> Use <file> instead of default font-file\n",
  2432. X    "     -l        print an even larger banner than default\n",
  2433. X    "     -w=<num>  prints banner with <num> width\n",
  2434. X    "     -h=<num>  prints banner with <num> hight\n",
  2435. X    "     -c        make the banner cursive (eek, not real cursive...)\n",
  2436. X    "     -C        make the banner cursive in other direction\n",
  2437. X    "     -i        invert the characters\n",
  2438. X    "     -f=<char> use <char> as the forground pattern\n",
  2439. X    "     -b=<char> use <char> as the background pattern\n",
  2440. X    "     -s        use the printed character as the forground pattern\n",
  2441. X    NULL
  2442. X};
  2443. X
  2444. static void
  2445. usage ()
  2446. X{
  2447. X    register int    t;
  2448. X
  2449. X    for (t = 0; help[t]; ++t)
  2450. X        fputs (help[t], stderr);
  2451. X}
  2452. X
  2453. int
  2454. main (ac, av)
  2455. int ac;
  2456. char *av[];
  2457. X{
  2458. X    FILE    *fp;
  2459. X    byte    msync[2];
  2460. X    byte    *csetl, *csets;
  2461. X    int    t, err;
  2462. X    char    *ptr, *tmp;
  2463. X    int    use_char;
  2464. X    int    found_string;
  2465. X
  2466. X    fontfile = NULL;
  2467. X    large = FALSE;
  2468. X    width = 1;
  2469. X    hight = 1;
  2470. X    cursive = FALSE;
  2471. X    backcursive = FALSE;
  2472. X    invers = FALSE;
  2473. X    forground = '*';
  2474. X    background = ' ';
  2475. X    use_char = FALSE;
  2476. X    found_string = FALSE;
  2477. X    for (t = 1; t < ac; ++t)
  2478. X        if ((av[t][0] == '-') && (av[t][1] != '-')) {
  2479. X            ptr = av[t] + 1;
  2480. X            while (*ptr) {
  2481. X                switch (*ptr) {
  2482. X                    case 'o':
  2483. X                        ptr += *(ptr + 1) == '=' ? 2 : 1;
  2484. X                        fontfile = ptr;
  2485. X                        while (*ptr)
  2486. X                            ++ptr;
  2487. X                        break;
  2488. X                    case 'l':
  2489. X                        large = TRUE;
  2490. X                        break;
  2491. X                    case 'w':
  2492. X                        ptr += *(ptr + 1) == '=' ? 2 : 1;
  2493. X                        if ((width = atoi (ptr)) < 1)
  2494. X                            width = 1;
  2495. X                        while (*ptr)
  2496. X                            ++ptr;
  2497. X                        break;
  2498. X                    case 'h':
  2499. X                        ptr += *(ptr + 1) == '=' ? 2 : 1;
  2500. X                        if ((hight = atoi (ptr)) < 1)
  2501. X                            hight = 1;
  2502. X                        while (*ptr)
  2503. X                            ++ptr;
  2504. X                        break;
  2505. X                    case 'c':
  2506. X                        cursive = TRUE;
  2507. X                        break;
  2508. X                    case 'C':
  2509. X                        backcursive = TRUE;
  2510. X                        break;
  2511. X                    case 'i':
  2512. X                        invers = TRUE;
  2513. X                        break;
  2514. X                    case 'f':
  2515. X                        ptr += *(ptr + 1) == '=' ? 2 : 1;
  2516. X                        forground = *ptr;
  2517. X                        break;
  2518. X                    case 'b':
  2519. X                        ptr += *(ptr + 1) == '=' ? 2 : 1;
  2520. X                        background = *ptr;
  2521. X                        break;
  2522. X                    case 's':
  2523. X                        use_char = TRUE;
  2524. X                        break;
  2525. X                    case '?':
  2526. X                    default:
  2527. X                        usage ();
  2528. X                        exit (((*ptr == '?') || (*ptr == 'h')) ? 0 :
  2529. X                            _errmsg (1, "Unknown option '%c'.\n", *ptr));
  2530. X                }
  2531. X                if (*ptr)
  2532. X                    ++ptr;
  2533. X            }
  2534. X        } else
  2535. X            found_string = TRUE;
  2536. X    if (use_char)
  2537. X        forground = '\0';
  2538. X    if (large) {
  2539. X        if (! (csetl = (byte *) malloc (256 * 16)))
  2540. X            NO_MEM
  2541. X        csets = NULL;
  2542. X    } else {
  2543. X        if (! (csets = (byte *) malloc (256 * 8)))
  2544. X            NO_MEM
  2545. X        csetl = NULL;
  2546. X    }
  2547. X    if (! fontfile) {
  2548. X        if (ptr = getenv ("HOME"))
  2549. X            if (tmp = malloc (strlen (ptr) + 16)) {
  2550. X                sprintf (tmp, "%s/.font", ptr);
  2551. X                if (access (tmp, R_OK) != -1)
  2552. X                    fontfile = tmp;
  2553. X                else
  2554. X                    free (tmp);
  2555. X            }
  2556. X        if (! fontfile)
  2557. X            fontfile = DEF_FONTFILE;
  2558. X    }
  2559. X    if (! (fp = fopen (fontfile, READ_BINARY)))
  2560. X        exit (_errmsg (errno, "Can't open %s.\n", fontfile));
  2561. X    if (fread (msync, sizeof (byte), 2, fp) != 2) {
  2562. X        fclose (fp);
  2563. X        exit (_errmsg (errno, "Can't read first %d byte%s.\n",
  2564. X            sizeof (short), sizeof (short) > 1 ? "s" : ""));
  2565. X    }
  2566. X    if ((msync[0] == (byte) ((MODSYNC >> 8) & 0xff)) && (msync[1] == (byte) (MODSYNC & 0xff)))
  2567. X        err = fseek (fp, MODHEADSIZ, 0);
  2568. X    else
  2569. X        err = fseek (fp, 0, 0);
  2570. X    if (err == -1) {
  2571. X        fclose (fp);
  2572. X        exit (_errmsg (errno, "Can't fseek to start of font data!\n"));
  2573. X    }
  2574. X    if (large) {
  2575. X        if (fread (csetl, sizeof (byte), 16 * 256, fp) != 16 * 256) {
  2576. X            fclose (fp);
  2577. X            exit (_errmsg (errno, "Can't read font data (large).\n"));
  2578. X        }
  2579. X    } else {
  2580. X        if (fseek (fp, 256 * 16, 1) == -1) {
  2581. X            fclose (fp);
  2582. X            exit (_errmsg (errno, "Can't fseek to font data.\n"));
  2583. X        }
  2584. X        if (fread (csets, sizeof (byte), 8 * 256, fp) != 8 * 256) {
  2585. X            fclose (fp);
  2586. X            exit (_errmsg (errno, "Can't read font data (small).\n"));
  2587. X        }
  2588. X    }
  2589. X    fclose (fp);
  2590. X    if (found_string) {
  2591. X        for (t = 1; t < ac; ++t)
  2592. X            if ((av[t][0] != '-') || (av[t][1] == '-'))
  2593. X                banner (av[t] + (av[t][0] == '-' ? 1 : 0), large ? csetl : csets);
  2594. X    } else if (ptr = malloc (130)) {
  2595. X        while (fgets (ptr, 128, stdin)) {
  2596. X            if (tmp = index (ptr, '\n'))
  2597. X                *tmp = '\0';
  2598. X            banner (ptr, large ? csetl : csets);
  2599. X        }
  2600. X        free (ptr);
  2601. X    }
  2602. X}
  2603. END_OF_FILE
  2604. if test 7453 -ne `wc -c <'banner-11/mb.c'`; then
  2605.     echo shar: \"'banner-11/mb.c'\" unpacked with wrong size!
  2606. fi
  2607. # end of 'banner-11/mb.c'
  2608. fi
  2609. if test -f 'banner-13/cyrban.c' -a "${1}" != "-c" ; then 
  2610.   echo shar: Will not clobber existing file \"'banner-13/cyrban.c'\"
  2611. else
  2612. echo shar: Extracting \"'banner-13/cyrban.c'\" \(7519 characters\)
  2613. sed "s/^X//" >'banner-13/cyrban.c' <<'END_OF_FILE'
  2614. X/* 
  2615. X *  ####  #   #  ####   ####     #    #   # 
  2616. X * #      #  ##  #   #   #      # #   #   # 
  2617. X * #      # # #  ####    ####  #####  ##### 
  2618. X * #      ##  #  #       #  #  #   #  #   # 
  2619. X *  ####  #   #  #      #####  #   #  #   # 
  2620. X * 
  2621. X * cyrban.c by Matt Welsh: a big hack to do Cyrillic banners.
  2622. X * Handles all Cyrillic letters except Yo (because the dots won't fit--
  2623. X * Russians usu. don't use the dots anyway!).
  2624. X * The keyboard mapping is very straighforward, except:
  2625. X *  ~ = eh              / = myaknii znak    w = sha 
  2626. X *  ` = yoo             | = ih              x = scha
  2627. X *  \ = tvordnii zhak   q = tse             > = i-kratkoe
  2628. X *
  2629. X * Problems: doesn't do numbers and some punctuation, or
  2630. X * capital letters. This program can easily be generalized
  2631. X * into a 'multibanner' program to read in a BUAF character
  2632. X * file, however, this was a quickie to churn out alt.fan.warlord bait.
  2633. X *
  2634. X * v1.1  welshm@dg-rtp.dg.com
  2635. X * (c)1992 Matt Welsh
  2636. X * This program is free software.
  2637. X * You may distribute copies of the source and executable for this program
  2638. X * free of charge, as long as the copyright notice is kept intact and
  2639. X * any modifactions bear the original copyright notice.
  2640. X */
  2641. X
  2642. X#include <stdio.h>
  2643. X#include <string.h>
  2644. X
  2645. enum {lA=0, lB, lC, lD, lE, lF, lG, lH, lI, lJ, lK, lL, lM, lN, lO, lP,
  2646. X      lQ, lR, lS, lT, lU, lV, lW, lX, lY, lZ, 
  2647. X      lBS, lFS, lPI, lTL, lBQ, lGR, lSP};
  2648. X#define NUMLETTERS lSP           /* Keep lSP as last letter in series! */
  2649. char *letters[NUMLETTERS][5];
  2650. X
  2651. void printline(c,line) char c; int line; {
  2652. X  
  2653. X  if ((c<='z') && (c>='a')) {
  2654. X    printf("%s",letters[(int)(c-'a')][line]);
  2655. X  } else {
  2656. X    switch(c) {
  2657. X      case '\\': printf("%s",letters[lBS][line]); break;
  2658. X      case '/': printf("%s",letters[lFS][line]); break;
  2659. X      case '|': printf("%s",letters[lPI][line]); break;
  2660. X      case '~': printf("%s",letters[lTL][line]); break;
  2661. X      case '`': printf("%s",letters[lBQ][line]); break;
  2662. X      case ' ': printf("%s",letters[lSP][line]); break;
  2663. X      case '>': printf("%s",letters[lGR][line]); break;
  2664. X    }
  2665. X  }
  2666. X}
  2667. X
  2668. X
  2669. void printstring(s) char *s; { 
  2670. X  
  2671. X  int n,i,j,c;
  2672. X  n=strlen(s); if (n>11) n=11;
  2673. X  for (i=0; i<5; i++) {
  2674. X    for (j=0; j<n; j++) {
  2675. X      c=tolower(s[j]);
  2676. X      printline(c,i);
  2677. X    }
  2678. X   printf("\n");
  2679. X  }
  2680. X}
  2681. X
  2682. void initletters();
  2683. X
  2684. void main(argc,argv) int argc; char **argv; {
  2685. X  int i;
  2686. X  initletters();
  2687. X  if (argc<2) exit(1);
  2688. X  for (i=1; i<argc; i++) {
  2689. X    printstring(argv[i]);
  2690. X   printf("\n\n");
  2691. X  }
  2692. X}
  2693. X
  2694. X
  2695. void initletters() {      
  2696. X/* I know this is ugly and redundant. As I said, this can
  2697. X * easily be read into a file, but I didn't feel like messing
  2698. X * with it at 3 in the morning. 
  2699. X */ 
  2700. X  letters[lA][0]="   #   ";      
  2701. X  letters[lA][1]="  # #  ";
  2702. X  letters[lA][2]=" ##### ";
  2703. X  letters[lA][3]=" #   # ";
  2704. X  letters[lA][4]=" #   # ";
  2705. X  letters[lB][0]=" ####  ";      
  2706. X  letters[lB][1]="  #    ";
  2707. X  letters[lB][2]="  #### ";
  2708. X  letters[lB][3]="  #  # ";
  2709. X  letters[lB][4]=" ##### ";
  2710. X
  2711. X  letters[lC][0]=" #   # ";      
  2712. X  letters[lC][1]=" #   # ";
  2713. X  letters[lC][2]="  #### ";
  2714. X  letters[lC][3]="     # ";
  2715. X  letters[lC][4]="     # ";
  2716. X  
  2717. X  letters[lD][0]=" ##### ";      
  2718. X  letters[lD][1]="  #  # ";
  2719. X  letters[lD][2]="  #  # ";
  2720. X  letters[lD][3]="  #### ";
  2721. X  letters[lD][4]=" #    #";
  2722. X  
  2723. X  letters[lE][0]=" ##### ";     
  2724. X  letters[lE][1]=" #     ";
  2725. X  letters[lE][2]=" ####  ";
  2726. X  letters[lE][3]=" #     ";
  2727. X  letters[lE][4]=" ##### ";
  2728. X  
  2729. X  letters[lF][0]="   #   ";      
  2730. X  letters[lF][1]="  ###  ";
  2731. X  letters[lF][2]=" # # # ";
  2732. X  letters[lF][3]="  ###  ";
  2733. X  letters[lF][4]="   #   ";
  2734. X  
  2735. X  letters[lG][0]=" ##### ";      
  2736. X  letters[lG][1]=" #   # ";
  2737. X  letters[lG][2]=" #     ";
  2738. X  letters[lG][3]=" #     ";
  2739. X  letters[lG][4]=" #     ";
  2740. X  
  2741. X  letters[lH][0]=" #   # ";      
  2742. X  letters[lH][1]="  # #  ";
  2743. X  letters[lH][2]="   #   ";
  2744. X  letters[lH][3]="  # #  ";
  2745. X  letters[lH][4]=" #   # ";
  2746. X  
  2747. X  letters[lI][0]=" #   # ";      
  2748. X  letters[lI][1]=" #  ## ";
  2749. X  letters[lI][2]=" # # # ";
  2750. X  letters[lI][3]=" ##  # ";
  2751. X  letters[lI][4]=" #   # ";
  2752. X  
  2753. X  letters[lJ][0]=" # # # ";      
  2754. X  letters[lJ][1]="  ###  ";
  2755. X  letters[lJ][2]="   #   ";
  2756. X  letters[lJ][3]="  ###  ";
  2757. X  letters[lJ][4]=" # # # ";
  2758. X  
  2759. X  letters[lK][0]=" #   # ";      
  2760. X  letters[lK][1]=" #  #  ";
  2761. X  letters[lK][2]=" ###   ";
  2762. X  letters[lK][3]=" #  #  ";
  2763. X  letters[lK][4]=" #   # ";
  2764. X  
  2765. X  letters[lL][0]=" ##### ";     
  2766. X  letters[lL][1]="  #  # ";
  2767. X  letters[lL][2]="  #  # ";
  2768. X  letters[lL][3]="  #  # ";
  2769. X  letters[lL][4]=" #   # ";
  2770. X  
  2771. X  letters[lM][0]=" #   # ";      
  2772. X  letters[lM][1]=" ## ## ";
  2773. X  letters[lM][2]=" # # # ";
  2774. X  letters[lM][3]=" #   # ";
  2775. X  letters[lM][4]=" #   # ";
  2776. X  
  2777. X  letters[lN][0]=" #   # ";     
  2778. X  letters[lN][1]=" #   # ";
  2779. X  letters[lN][2]=" ##### ";
  2780. X  letters[lN][3]=" #   # ";
  2781. X  letters[lN][4]=" #   # ";
  2782. X  
  2783. X  letters[lO][0]="  ###  ";     
  2784. X  letters[lO][1]=" #   # ";
  2785. X  letters[lO][2]=" #   # ";
  2786. X  letters[lO][3]=" #   # ";
  2787. X  letters[lO][4]="  ###  ";
  2788. X  
  2789. X  letters[lP][0]=" ##### ";     
  2790. X  letters[lP][1]=" #   # ";
  2791. X  letters[lP][2]=" #   # ";
  2792. X  letters[lP][3]=" #   # ";
  2793. X  letters[lP][4]=" #   # ";
  2794. X  
  2795. X  letters[lQ][0]=" #   # ";     
  2796. X  letters[lQ][1]=" #   # ";
  2797. X  letters[lQ][2]=" #   # ";
  2798. X  letters[lQ][3]=" ##### ";
  2799. X  letters[lQ][4]="     # ";
  2800. X  
  2801. X  letters[lR][0]=" ####  ";     
  2802. X  letters[lR][1]=" #   # ";
  2803. X  letters[lR][2]=" ####  ";
  2804. X  letters[lR][3]=" #     ";
  2805. X  letters[lR][4]=" #     ";
  2806. X  
  2807. X  letters[lS][0]="  #### ";     
  2808. X  letters[lS][1]=" #     ";
  2809. X  letters[lS][2]=" #     ";
  2810. X  letters[lS][3]=" #     ";
  2811. X  letters[lS][4]="  #### ";
  2812. X  
  2813. X  letters[lT][0]=" ##### ";     
  2814. X  letters[lT][1]="   #   ";
  2815. X  letters[lT][2]="   #   ";
  2816. X  letters[lT][3]="   #   ";
  2817. X  letters[lT][4]="   #   ";
  2818. X  
  2819. X  letters[lU][0]=" #   # ";     
  2820. X  letters[lU][1]="  # #  ";
  2821. X  letters[lU][2]="   #   ";
  2822. X  letters[lU][3]="  #    ";
  2823. X  letters[lU][4]=" #     ";
  2824. X  
  2825. X  letters[lV][0]=" ####  ";     
  2826. X  letters[lV][1]=" #   # ";
  2827. X  letters[lV][2]=" ####  ";
  2828. X  letters[lV][3]=" #   # ";
  2829. X  letters[lV][4]=" ####  ";
  2830. X  
  2831. X  letters[lW][0]=" #   # ";     
  2832. X  letters[lW][1]=" # # # ";
  2833. X  letters[lW][2]=" # # # ";
  2834. X  letters[lW][3]=" # # # ";
  2835. X  letters[lW][4]="  ###  ";
  2836. X  
  2837. X  letters[lX][0]=" #   # ";     
  2838. X  letters[lX][1]=" # # # ";
  2839. X  letters[lX][2]=" # # # ";
  2840. X  letters[lX][3]=" # # # ";
  2841. X  letters[lX][4]="  #####";
  2842. X  
  2843. X  letters[lY][0]="  #### ";     
  2844. X  letters[lY][1]=" #   # ";
  2845. X  letters[lY][2]="  #### ";
  2846. X  letters[lY][3]="  #  # ";
  2847. X  letters[lY][4]=" #   # ";
  2848. X  
  2849. X  letters[lZ][0]=" ####  ";     
  2850. X  letters[lZ][1]="     # ";
  2851. X  letters[lZ][2]="  ###  ";
  2852. X  letters[lZ][3]="     # ";
  2853. X  letters[lZ][4]=" ####  ";
  2854. X  
  2855. X  letters[lBS][0]=" ##  ";    
  2856. X  letters[lBS][1]=" #   ";
  2857. X  letters[lBS][2]=" ##  ";
  2858. X  letters[lBS][3]=" # # ";
  2859. X  letters[lBS][4]=" ##  ";
  2860. X  
  2861. X  letters[lFS][0]=" #   ";     
  2862. X  letters[lFS][1]=" #   ";
  2863. X  letters[lFS][2]=" ##  ";
  2864. X  letters[lFS][3]=" # # ";
  2865. X  letters[lFS][4]=" ##  ";
  2866. X  
  2867. X  letters[lPI][0]=" #   # ";     
  2868. X  letters[lPI][1]=" #   # ";
  2869. X  letters[lPI][2]=" ##  # ";
  2870. X  letters[lPI][3]=" # # # ";
  2871. X  letters[lPI][4]=" ##  # ";
  2872. X  
  2873. X  letters[lTL][0]=" ####  ";     
  2874. X  letters[lTL][1]="     # ";
  2875. X  letters[lTL][2]=" ##### ";
  2876. X  letters[lTL][3]="     # ";
  2877. X  letters[lTL][4]=" ####  ";
  2878. X  
  2879. X  letters[lBQ][0]=" #  ##  ";     
  2880. X  letters[lBQ][1]=" # #  # ";
  2881. X  letters[lBQ][2]=" ###  # ";
  2882. X  letters[lBQ][3]=" # #  # ";
  2883. X  letters[lBQ][4]=" #  ##  ";
  2884. X
  2885. X  letters[lGR][0]=" # # # ";
  2886. X  letters[lGR][1]=" #  ## ";
  2887. X  letters[lGR][2]=" # # # ";
  2888. X  letters[lGR][3]=" ##  # ";
  2889. X  letters[lGR][4]=" #   # ";
  2890. X
  2891. X  letters[lSP][0]="      ";
  2892. X  letters[lSP][1]="      ";
  2893. X  letters[lSP][2]="      ";
  2894. X  letters[lSP][3]="      ";
  2895. X  letters[lSP][4]="      ";
  2896. X}
  2897. END_OF_FILE
  2898. if test 7519 -ne `wc -c <'banner-13/cyrban.c'`; then
  2899.     echo shar: \"'banner-13/cyrban.c'\" unpacked with wrong size!
  2900. fi
  2901. # end of 'banner-13/cyrban.c'
  2902. fi
  2903. if test -f 'cursive-01/cursive.c' -a "${1}" != "-c" ; then 
  2904.   echo shar: Will not clobber existing file \"'cursive-01/cursive.c'\"
  2905. else
  2906. echo shar: Extracting \"'cursive-01/cursive.c'\" \(6630 characters\)
  2907. sed "s/^X//" >'cursive-01/cursive.c' <<'END_OF_FILE'
  2908. X/*        CURSIVE SIGNATURE PROGRAM        Version 0.10
  2909. X *              (c) 1985 - Jan Wolter
  2910. X *
  2911. X *  Purpose:    This program translates text into crude cursive script.
  2912. X *        It works on any terminal with a fairly normal character
  2913. X *        set (must have backslashes and underscores and suchlike).
  2914. X *        The font includes all upper and lower case letters, most
  2915. X *        punctuation, and a few symbols.  No numbers are included
  2916. X *        (It's difficult to make a nice italicized set of numbers).
  2917. X *        Cursive was originally written to generate fancy signatures
  2918. X *        for electronic mail messages, but other uses may occur to
  2919. X *        you.  The attractiveness of the font varies greatly with
  2920. X *        the display device.
  2921. X *
  2922. X *  Usage:    If no command line arguments are given, cursive reads the
  2923. X *        text to translate from standard input.  Otherwise the args
  2924. X *        are translated (e.g. "cursive Jan Wolter" prints my name).
  2925. X *        Output is always to standard output.  A couple command line
  2926. X *        arguments are recognized:
  2927. X *
  2928. X *          -in    Sets the amount of space to insert between letters.
  2929. X *            The default is "-i1".  "-i0" gives interesting
  2930. X *            results.
  2931. X *          -tn    Sets the length of the trailing line off the end
  2932. X *            of each word.  The default is "-t1".
  2933. X *
  2934. X *        One character in the text is treated in a special way:
  2935. X *
  2936. X *          '_'   Can be inserted in text to slightly lengthen the
  2937. X *            the spacing between two letters, or add a longer
  2938. X *            tail to the end of a word.
  2939. X *
  2940. X *  Internals:    Unfortunately, the program is a kludge and the font is
  2941. X *        somewhat difficult to edit.  It should be easy to port
  2942. X *        though.  Systems with short integers or unsigned characters
  2943. X *        should be no problem.  You should probably run "xstr" on the
  2944. X *        font.c file, but if you haven't got "xstr", just compiling it
  2945. X *        the usual way works fine.
  2946. X *
  2947. X *  Copyright:    Both the cursive program and the font it generates are
  2948. X *        copyrighted by yours truly.  However, both may be used
  2949. X *        and distributed freely.  You even have my permission to
  2950. X *        sell it, or include in it a system that you sell.  I only
  2951. X *        ask that my name be retained on this program, or any direct
  2952. X *        decendents of this program with approximately the same
  2953. X *        visibility as in this posting.
  2954. X *
  2955. X *  Mail:    I'm interested in any comments you have on this program.
  2956. X *        I can be mailed at "janc@crim.eecs.umich.edu".  Better yet,
  2957. X *        if you are into teleconferencing, call M-Net at (313) 994-6333
  2958. X *        and type "newuser" at the "login:" prompt to give yourself an
  2959. X *        account.  Send mail to janc, or join the "ugames" conference.
  2960. X *
  2961. X *        Have fun,
  2962. X *                  ___                _     __  _
  2963. X *                 (   >              ' )   /   // _/_
  2964. X *                  __/___.  ____      / / / __|/  /  _  __
  2965. X *                 / / (_/|_/ / <__   (_(_/ (_) \_<__</_/ (__
  2966. X *                <_/
  2967. X */
  2968. X
  2969. X#include <stdio.h>
  2970. X#include "cursive.h"
  2971. X
  2972. char *buffer[6];    /* memory buffers to build up line in */
  2973. int c[6];        /* current index in each of the buffer lines */
  2974. int tail[6];        /* which buffer lines have tails in them */
  2975. int lasttail;        /* which line was the last letter's tail */
  2976. int space;        /* how much white space before the next letter */
  2977. int interspace = 1;    /* how much to spread adjacent letters out */
  2978. int taillen = 1;    /* how long the tails on ends of words should be */
  2979. char firstletter;    /* is this the first letter on the line? */
  2980. char message[256] = "";    /* message to print */
  2981. X
  2982. char *malloc();
  2983. X
  2984. main(argc,argv)
  2985. int argc;
  2986. char **argv;
  2987. X{
  2988. int i;
  2989. char *s,*m;
  2990. char ch;
  2991. X
  2992. X    m = message;
  2993. X    for (i = 1; i < argc; i++)
  2994. X    {
  2995. X        if (*argv[i] == '-')
  2996. X            switch(ch = argv[i][1])
  2997. X            {
  2998. X            case 'i':
  2999. X            case 't':
  3000. X                s = argv[i]+2;
  3001. X                if (*s == '\000')
  3002. X                    if (++i < argc)
  3003. X                        s = argv[i];
  3004. X                if (*s < '0' || *s > '9')
  3005. X                {
  3006. X                    printf("%s: Illegal value %s\n",
  3007. X                        argv[0],s);
  3008. X                    exit(1);
  3009. X                }
  3010. X                if (ch == 'i')
  3011. X                    interspace = atoi(s);
  3012. X                else
  3013. X                    taillen = atoi(s);
  3014. X                break;
  3015. X            default:
  3016. X                printf("usage: %s [-tn] [-in] message\n",
  3017. X                    argv[0]);
  3018. X                exit(1);
  3019. X            }
  3020. X        else
  3021. X        {
  3022. X            if (m != message)
  3023. X                *(m++) = ' ';
  3024. X            for (s=argv[i]; *s != '\000'; s++)
  3025. X                *(m++) = *s;
  3026. X        }
  3027. X    }
  3028. X    /* Do the deed */
  3029. X    if (m != message)
  3030. X    {
  3031. X        /* Message from the arg list */
  3032. X        *(m++) = 0;
  3033. X        prline(message);
  3034. X    }
  3035. X    else
  3036. X    {
  3037. X        /* Message from standard input */
  3038. X        while (gets(message) != NULL)
  3039. X            prline(message);
  3040. X    }
  3041. X}
  3042. X
  3043. X
  3044. X/* Add the given letter to the end of the current line */
  3045. X
  3046. place(let)
  3047. struct letter *let;
  3048. X{
  3049. int i,j,n;
  3050. int col;
  3051. int max = -10000;
  3052. char pad;
  3053. char *l;
  3054. X
  3055. X    if (firstletter)
  3056. X    {
  3057. X        col = space;        /* Leading spaces */
  3058. X        firstletter = 0;
  3059. X    }
  3060. X    else
  3061. X    {
  3062. X        /* Find the furthest left position we can place this letter */
  3063. X        for(i=0; i<6; i++)
  3064. X        {
  3065. X            if (let->line[i][0] != '\000' &&
  3066. X                (col = c[i] - let->spcs[i]) > max)
  3067. X                max = col;
  3068. X        }
  3069. X
  3070. X        /* Insert some spaces between letters */
  3071. X        col = max + space + interspace;
  3072. X    }
  3073. X
  3074. X    for(i=0; i<6; i++)
  3075. X
  3076. X        /* If Nothing on this Line, Skip It */
  3077. X        if (let->line[i][0] != '\000')
  3078. X        {
  3079. X            /* Number of Spaces to Put on this Line? */
  3080. X            n = col - c[i] + let->spcs[i];
  3081. X
  3082. X            /* Flyers off Ends of Letters */
  3083. X            if (tail[i])
  3084. X                for (j = 0;
  3085. X                     j < 5 && n > space + 2; j++,n--)
  3086. X                    buffer[i][c[i]++] = '_';
  3087. X
  3088. X            /* Connecting Lines Between Letters */
  3089. X            pad = (lasttail == i && let->tailin == i) ? '_' : ' ';
  3090. X
  3091. X            /* In the middle of the intersection of South and */
  3092. X            /* East University, someone is playing the piano. */
  3093. X            for ( ; n > 0; n--)
  3094. X                buffer[i][c[i]++] = pad;
  3095. X
  3096. X            /* Copy in the letter text */
  3097. X            for (l = let->line[i]; *l != '\000'; l++)
  3098. X                buffer[i][c[i]++] = *l;
  3099. X
  3100. X            tail[i] = (i == let->tailout);
  3101. X        }
  3102. X
  3103. X    lasttail = let->tailout;
  3104. X    space = 0;
  3105. X}
  3106. X
  3107. X/* Lengthen the last trailer by n */
  3108. tailer(n)
  3109. int n;
  3110. X{
  3111. int j;
  3112. X    if (lasttail >= 0)
  3113. X        for (j = 0; j < n; j++)
  3114. X            buffer[lasttail][c[lasttail]++] = '_';
  3115. X}
  3116. X
  3117. X/* Handle a line */
  3118. prline(s)
  3119. char *s;
  3120. X{
  3121. int l,i;
  3122. char *ch;
  3123. short lcode;
  3124. X
  3125. X    lasttail = -1;
  3126. X    firstletter = 1;
  3127. X    space = 0;
  3128. X    /* Get some memory to put the output into */
  3129. X    l = strlen(s) * (CHARWIDTH + interspace);
  3130. X    for (i=0;i<6;i++)
  3131. X    {
  3132. X        buffer[i] = malloc((unsigned)l);
  3133. X        tail[i] = c[i] = 0;
  3134. X    }
  3135. X
  3136. X    /* do each letter */
  3137. X    for (ch=s; *ch != '\000'; ch++)
  3138. X    {
  3139. X
  3140. X        *ch &= '\177';
  3141. X        /* Find the letter */
  3142. X        lcode = (lasttail != 2) ? code1[*ch] : code2[*ch];
  3143. X        if (lcode >= 0)
  3144. X            place(&list[lcode]);
  3145. X        else
  3146. X            /* Various Special characters */
  3147. X            switch(lcode)
  3148. X            {
  3149. X            case SP:
  3150. X                /* Insert white space before next letter */
  3151. X                tailer(taillen);
  3152. X                space += 3;
  3153. X                lasttail = -1;
  3154. X                break;
  3155. X            case ST:
  3156. X                /* Lengthen the last tail */
  3157. X                if (lasttail >= 0)
  3158. X                    buffer[lasttail][c[lasttail]++] = '_';
  3159. X                break;
  3160. X            }
  3161. X    }
  3162. X    tailer(taillen);
  3163. X
  3164. X    /* print the line and release the memory */
  3165. X    for (i=0;i<6;i++)
  3166. X    {
  3167. X        buffer[i][c[i]++] = '\n';
  3168. X        write(1,buffer[i],c[i]);
  3169. X        free(buffer[i]);
  3170. X    }
  3171. X}
  3172. END_OF_FILE
  3173. if test 6630 -ne `wc -c <'cursive-01/cursive.c'`; then
  3174.     echo shar: \"'cursive-01/cursive.c'\" unpacked with wrong size!
  3175. fi
  3176. # end of 'cursive-01/cursive.c'
  3177. fi
  3178. if test -f 'cursive-02/cursive.c' -a "${1}" != "-c" ; then 
  3179.   echo shar: Will not clobber existing file \"'cursive-02/cursive.c'\"
  3180. else
  3181. echo shar: Extracting \"'cursive-02/cursive.c'\" \(7070 characters\)
  3182. sed "s/^X//" >'cursive-02/cursive.c' <<'END_OF_FILE'
  3183. X/*        CURSIVE SIGNATURE PROGRAM        Version 0.10
  3184. X *              (c) 1985 - Jan Wolter
  3185. X *
  3186. X *  Purpose:    This program translates text into crude cursive script.
  3187. X *        It works on any terminal with a fairly normal character
  3188. X *        set (must have backslashes and underscores and suchlike).
  3189. X *        The font includes all upper and lower case letters, most
  3190. X *        punctuation, and a few symbols.  No numbers are included
  3191. X *        (It's difficult to make a nice italicized set of numbers).
  3192. X *        Cursive was originally written to generate fancy signatures
  3193. X *        for electronic mail messages, but other uses may occur to
  3194. X *        you.  The attractiveness of the font varies greatly with
  3195. X *        the display device.
  3196. X *
  3197. X *  Usage:    If no command line arguments are given, cursive reads the
  3198. X *        text to translate from standard input.  Otherwise the args
  3199. X *        are translated (e.g. "cursive Jan Wolter" prints my name).
  3200. X *        Output is always to standard output.  A couple command line
  3201. X *        arguments are recognized:
  3202. X *
  3203. X *          -in    Sets the amount of space to insert between letters.
  3204. X *            The default is "-i1".  "-i0" gives interesting
  3205. X *            results.
  3206. X *          -tn    Sets the length of the trailing line off the end
  3207. X *            of each word.  The default is "-t1".
  3208. X *
  3209. X *        One character in the text is treated in a special way:
  3210. X *
  3211. X *          '_'   Can be inserted in text to slightly lengthen the
  3212. X *            the spacing between two letters, or add a longer
  3213. X *            tail to the end of a word.
  3214. X *
  3215. X *  Internals:    Unfortunately, the program is a kludge and the font is
  3216. X *        somewhat difficult to edit.  It should be easy to port
  3217. X *        though.  Systems with short integers or unsigned characters
  3218. X *        should be no problem.  You should probably run "xstr" on the
  3219. X *        font.c file, but if you haven't got "xstr", just compiling it
  3220. X *        the usual way works fine.
  3221. X *
  3222. X *  Copyright:    Both the cursive program and the font it generates are
  3223. X *        copyrighted by yours truly.  However, both may be used
  3224. X *        and distributed freely.  You even have my permission to
  3225. X *        sell it, or include in it a system that you sell.  I only
  3226. X *        ask that my name be retained on this program, or any direct
  3227. X *        decendents of this program with approximately the same
  3228. X *        visibility as in this posting.
  3229. X *
  3230. X *  Mail:    I'm interested in any comments you have on this program.
  3231. X *        I can be mailed at "janc@crim.eecs.umich.edu".  Better yet,
  3232. X *        if you are into teleconferencing, call M-Net at (313) 994-6333
  3233. X *        and type "newuser" at the "login:" prompt to give yourself an
  3234. X *        account.  Send mail to janc, or join the "ugames" conference.
  3235. X *
  3236. X *        Have fun,
  3237. X *                  ___                _     __  _
  3238. X *                 (   >              ' )   /   // _/_
  3239. X *                  __/___.  ____      / / / __|/  /  _  __
  3240. X *                 / / (_/|_/ / <__   (_(_/ (_) \_<__</_/ (__
  3241. X *                <_/
  3242. X */
  3243. X
  3244. X/*
  3245. X * $Log:    cursive.c,v $
  3246. X * Revision 1.2  87/12/05  09:18:09  hyc
  3247. X * Added #ifdef's for MTS CBell, or Bell Labs C in MTS.
  3248. X * (The Michigan Terminal System, our homegrown IBM 370 OS. Funstuff.
  3249. X *  But hey, it was the first 370 OS with a real filesystem...  }-)
  3250. X * 
  3251. X */
  3252. X
  3253. X#include <stdio.h>
  3254. X#include "cursive.h"
  3255. X
  3256. char *buffer[6];    /* memory buffers to build up line in */
  3257. int c[6];        /* current index in each of the buffer lines */
  3258. int tail[6];        /* which buffer lines have tails in them */
  3259. int lasttail;        /* which line was the last letter's tail */
  3260. int space;        /* how much white space before the next letter */
  3261. int interspace = 1;    /* how much to spread adjacent letters out */
  3262. int taillen = 1;    /* how long the tails on ends of words should be */
  3263. char firstletter;    /* is this the first letter on the line? */
  3264. char message[256] = "";    /* message to print */
  3265. X
  3266. char *malloc();
  3267. X
  3268. main(argc,argv)
  3269. int argc;
  3270. char **argv;
  3271. X{
  3272. int i;
  3273. char *s,*m;
  3274. char ch;
  3275. X
  3276. X    m = message;
  3277. X    for (i = 1; i < argc; i++)
  3278. X    {
  3279. X        if (*argv[i] == '-')
  3280. X            switch(ch = argv[i][1])
  3281. X            {
  3282. X            case 'i':
  3283. X            case 't':
  3284. X                s = argv[i]+2;
  3285. X                if (*s == '\000')
  3286. X                    if (++i < argc)
  3287. X                        s = argv[i];
  3288. X                if (*s < '0' || *s > '9')
  3289. X                {
  3290. X                    printf("%s: Illegal value %s\n",
  3291. X                        argv[0],s);
  3292. X                    exit(1);
  3293. X                }
  3294. X                if (ch == 'i')
  3295. X                    interspace = atoi(s);
  3296. X                else
  3297. X                    taillen = atoi(s);
  3298. X                break;
  3299. X            default:
  3300. X                printf("usage: %s [-tn] [-in] message\n",
  3301. X                    argv[0]);
  3302. X                exit(1);
  3303. X            }
  3304. X        else
  3305. X        {
  3306. X            if (m != message)
  3307. X                *(m++) = ' ';
  3308. X            for (s=argv[i]; *s != '\000'; s++)
  3309. X                *(m++) = *s;
  3310. X        }
  3311. X    }
  3312. X    /* Do the deed */
  3313. X    if (m != message)
  3314. X    {
  3315. X        /* Message from the arg list */
  3316. X        *(m++) = 0;
  3317. X        prline(message);
  3318. X    }
  3319. X    else
  3320. X    {
  3321. X        /* Message from standard input */
  3322. X        while (gets(message) != NULL)
  3323. X            prline(message);
  3324. X    }
  3325. X}
  3326. X
  3327. X
  3328. X/* Add the given letter to the end of the current line */
  3329. X
  3330. place(let)
  3331. struct letter *let;
  3332. X{
  3333. int i,j,n;
  3334. int col;
  3335. int max = -10000;
  3336. char pad;
  3337. char *l;
  3338. X
  3339. X    if (firstletter)
  3340. X    {
  3341. X        col = space;        /* Leading spaces */
  3342. X        firstletter = 0;
  3343. X    }
  3344. X    else
  3345. X    {
  3346. X        /* Find the furthest left position we can place this letter */
  3347. X        for(i=0; i<6; i++)
  3348. X        {
  3349. X            if (let->line[i][0] != '\000' &&
  3350. X                (col = c[i] - let->spcs[i]) > max)
  3351. X                max = col;
  3352. X        }
  3353. X
  3354. X        /* Insert some spaces between letters */
  3355. X        col = max + space + interspace;
  3356. X    }
  3357. X
  3358. X    for(i=0; i<6; i++)
  3359. X
  3360. X        /* If Nothing on this Line, Skip It */
  3361. X        if (let->line[i][0] != '\000')
  3362. X        {
  3363. X            /* Number of Spaces to Put on this Line? */
  3364. X            n = col - c[i] + let->spcs[i];
  3365. X
  3366. X            /* Flyers off Ends of Letters */
  3367. X            if (tail[i])
  3368. X                for (j = 0;
  3369. X                     j < 5 && n > space + 2; j++,n--)
  3370. X                    buffer[i][c[i]++] = '_';
  3371. X
  3372. X            /* Connecting Lines Between Letters */
  3373. X            pad = (lasttail == i && let->tailin == i) ? '_' : ' ';
  3374. X
  3375. X            /* In the middle of the intersection of South and */
  3376. X            /* East University, someone is playing the piano. */
  3377. X            for ( ; n > 0; n--)
  3378. X                buffer[i][c[i]++] = pad;
  3379. X
  3380. X            /* Copy in the letter text */
  3381. X            for (l = let->line[i]; *l != '\000'; l++)
  3382. X                buffer[i][c[i]++] = *l;
  3383. X
  3384. X            tail[i] = (i == let->tailout);
  3385. X        }
  3386. X
  3387. X    lasttail = let->tailout;
  3388. X    space = 0;
  3389. X}
  3390. X
  3391. X/* Lengthen the last trailer by n */
  3392. tailer(n)
  3393. int n;
  3394. X{
  3395. int j;
  3396. X    if (lasttail >= 0)
  3397. X        for (j = 0; j < n; j++)
  3398. X            buffer[lasttail][c[lasttail]++] = '_';
  3399. X}
  3400. X
  3401. X/* Handle a line */
  3402. prline(s)
  3403. char *s;
  3404. X{
  3405. int l,i;
  3406. char *ch;
  3407. short lcode;
  3408. X
  3409. X#ifdef mts
  3410. X
  3411. int mode=&0x040, lnum=0;
  3412. X
  3413. X    etoa(s,strlen(s));
  3414. X#endif
  3415. X    lasttail = -1;
  3416. X    firstletter = 1;
  3417. X    space = 0;
  3418. X    /* Get some memory to put the output into */
  3419. X    l = strlen(s) * (CHARWIDTH + interspace);
  3420. X    for (i=0;i<6;i++)
  3421. X    {
  3422. X        buffer[i] = malloc((unsigned)l);
  3423. X        tail[i] = c[i] = 0;
  3424. X    }
  3425. X
  3426. X    /* do each letter */
  3427. X    for (ch=s; *ch != '\000'; ch++)
  3428. X    {
  3429. X
  3430. X        *ch &= '\177';
  3431. X        /* Find the letter */
  3432. X        lcode = (lasttail != 2) ? code1[*ch] : code2[*ch];
  3433. X        if (lcode >= 0)
  3434. X            place(&list[lcode]);
  3435. X        else
  3436. X            /* Various Special characters */
  3437. X            switch(lcode)
  3438. X            {
  3439. X            case SP:
  3440. X                /* Insert white space before next letter */
  3441. X                tailer(taillen);
  3442. X                space += 3;
  3443. X                lasttail = -1;
  3444. X                break;
  3445. X            case ST:
  3446. X                /* Lengthen the last tail */
  3447. X                if (lasttail >= 0)
  3448. X                    buffer[lasttail][c[lasttail]++] = '_';
  3449. X                break;
  3450. X            }
  3451. X    }
  3452. X    tailer(taillen);
  3453. X
  3454. X    /* print the line and release the memory */
  3455. X    for (i=0;i<6;i++)
  3456. X    {
  3457. X#ifdef mts
  3458. X        lcode=(short)c[i];
  3459. X        mtswrite(buffer[i],&lcode,&mod,&lnum,"SPRINT  ");
  3460. X#else mts
  3461. X        buffer[i][c[i]++] = '\n';
  3462. X        write(1,buffer[i],c[i]);
  3463. X#endif mts
  3464. X        free(buffer[i]);
  3465. X    }
  3466. X}
  3467. END_OF_FILE
  3468. if test 7070 -ne `wc -c <'cursive-02/cursive.c'`; then
  3469.     echo shar: \"'cursive-02/cursive.c'\" unpacked with wrong size!
  3470. fi
  3471. # end of 'cursive-02/cursive.c'
  3472. fi
  3473. echo shar: End of archive 2 \(of 7\).
  3474. cp /dev/null ark2isdone
  3475. MISSING=""
  3476. for I in 1 2 3 4 5 6 7 ; do
  3477.     if test ! -f ark${I}isdone ; then
  3478.     MISSING="${MISSING} ${I}"
  3479.     fi
  3480. done
  3481. if test "${MISSING}" = "" ; then
  3482.     echo You have unpacked all 7 archives.
  3483.     rm -f ark[1-9]isdone
  3484. else
  3485.     echo You still need to unpack the following archives:
  3486.     echo "        " ${MISSING}
  3487. fi
  3488. ##  End of shell archive.
  3489. exit 0
  3490.