Revision: 44843
http://brlcad.svn.sourceforge.net/brlcad/?rev=44843&view=rev
Author: brlcad
Date: 2011-06-08 23:34:42 +0000 (Wed, 08 Jun 2011)
Log Message:
-----------
remove cat-fb because it incurred a maintenance cost. phototypesetting went
out of style 20 years ago, obsolete hardware.
Modified Paths:
--------------
brlcad/trunk/doc/deprecation.txt
brlcad/trunk/src/fb/CMakeLists.txt
brlcad/trunk/src/fb/Makefile.am
Removed Paths:
-------------
brlcad/trunk/src/fb/cat-fb.1
brlcad/trunk/src/fb/cat-fb.c
Modified: brlcad/trunk/doc/deprecation.txt
===================================================================
--- brlcad/trunk/doc/deprecation.txt 2011-06-08 23:22:53 UTC (rev 44842)
+++ brlcad/trunk/doc/deprecation.txt 2011-06-08 23:34:42 UTC (rev 44843)
@@ -210,12 +210,17 @@
* OBSOLETE *
************
-7.20.0
+7.20.2
------
+cat-fb
+ obsolete hardware
include/vmath.h
ELEMENTS_PER_PT -> ELEMENTS_PER_POINT [deprecated 7.12]
HVECT_LEN -> ELEMENTS_PER_HVECT [deprecated 7.12]
HPT_LEN -> ELEMENTS_PER_HPOINT [deprecated 7.12]
+
+7.20.0
+------
include/bu.h
bu_mro and related macros -> bu_attribute_value_set
Modified: brlcad/trunk/src/fb/CMakeLists.txt
===================================================================
--- brlcad/trunk/src/fb/CMakeLists.txt 2011-06-08 23:22:53 UTC (rev 44842)
+++ brlcad/trunk/src/fb/CMakeLists.txt 2011-06-08 23:34:42 UTC (rev 44843)
@@ -13,7 +13,6 @@
)
ENDIF(MSVC)
BRLCAD_ADDEXEC(bw-fb bw-fb.c libfb)
-BRLCAD_ADDEXEC(cat-fb cat-fb.c libfb)
BRLCAD_ADDEXEC(cell-fb cell-fb.c "libfb libbn")
BRLCAD_ADDEXEC(cmap-fb cmap-fb.c libfb)
BRLCAD_ADDEXEC(fb-bw fb-bw.c libfb)
@@ -71,7 +70,6 @@
SET(fb_MANS
bw-fb.1
- cat-fb.1
cell-fb.1
cmap-fb.1
fb-bw.1
Modified: brlcad/trunk/src/fb/Makefile.am
===================================================================
--- brlcad/trunk/src/fb/Makefile.am 2011-06-08 23:22:53 UTC (rev 44842)
+++ brlcad/trunk/src/fb/Makefile.am 2011-06-08 23:34:42 UTC (rev 44843)
@@ -1,7 +1,6 @@
bin_PROGRAMS = \
bw-fb \
- cat-fb \
cell-fb \
cmap-fb \
fb-bw \
@@ -50,9 +49,6 @@
bw_fb_LDADD = ${FB}
bw_fb_SOURCES = bw-fb.c
-cat_fb_LDADD = ${FB}
-cat_fb_SOURCES = cat-fb.c
-
cell_fb_LDADD = ${FB} ${BN}
cell_fb_SOURCES = cell-fb.c
@@ -187,7 +183,6 @@
man_MANS = \
bw-fb.1 \
- cat-fb.1 \
cell-fb.1 \
cmap-fb.1 \
fb-bw.1 \
@@ -232,7 +227,6 @@
FAST_OBJECTS = \
$(bw_fb_OBJECTS) \
- $(cat_fb_OBJECTS) \
$(cell_fb_OBJECTS) \
$(cmap_fb_OBJECTS) \
$(fb_bw_OBJECTS) \
Deleted: brlcad/trunk/src/fb/cat-fb.1
===================================================================
--- brlcad/trunk/src/fb/cat-fb.1 2011-06-08 23:22:53 UTC (rev 44842)
+++ brlcad/trunk/src/fb/cat-fb.1 2011-06-08 23:34:42 UTC (rev 44843)
@@ -1,173 +0,0 @@
-.TH CAT-FB 1 BRL-CAD
-.\" C A T - F B . 1
-.\" BRL-CAD
-.\"
-.\" Copyright (c) 2005-2011 United States Government as represented by
-.\" the U.S. Army Research Laboratory.
-.\"
-.\" Redistribution and use in source (Docbook format) and 'compiled'
-.\" forms (PDF, PostScript, HTML, RTF, etc), with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\"
-.\" 1. Redistributions of source code (Docbook format) must retain the
-.\" above copyright notice, this list of conditions and the following
-.\" disclaimer.
-.\"
-.\" 2. Redistributions in compiled form (transformed to other DTDs,
-.\" converted to PDF, PostScript, HTML, RTF, and other formats) must
-.\" reproduce the above copyright notice, this list of conditions and
-.\" the following disclaimer in the documentation and/or other
-.\" materials provided with the distribution.
-.\"
-.\" 3. The name of the author may not be used to endorse or promote
-.\" products derived from this documentation without specific prior
-.\" written permission.
-.\"
-.\" THIS DOCUMENTATION IS PROVIDED BY THE AUTHOR AS IS'' AND ANY
-.\" EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-.\" ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
-.\" OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-.\" BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-.\" LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
-.\" USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\".\".\"
-.\"
-.\" File name macro to make listing files easier
-.\"
-.de FN
-\fI\|\\$1\|\fP
-..
-.\"
-.\" Begin actual content
-.\"
-.SH NAME
-cat\(hyfb \(em display a troff C/A/T document on a framebuffer
-.SH SYNOPSIS
-.B cat-fb
-.RB [ \-hcoO ]
-.RB [ \-F\ framebuffer]
-.RB [ \-C\ r/g/b]
-.RB [ \-{sS}\ squarescrsize]
-.RB [ \-{wW}\ scr_width]
-.RB [ \-{nN}\ scr_height]
-[troff_files]
-.SH DESCRIPTION
-.I cat-fb
-reads a
-.IR troff (1)
-C/A/T phototypesetter document
-from the named file(s), or from
-standard in if no file is specified.
-The document is converted to a bitmap using the
-Berkeley font files from /usr/lib/vfont and
-.IR libfont (3),
-and is either displayed
-on the currently selected framebuffer,
-or output as a
-.IR pix (5)
-format image.
-The environment variable FB_FILE specifies
-the current framebuffer, see
-.IR brlcad (1).
-Alternatively, the framebuffer may be explicitly specified
-by using the
-.B \-F
-flag.
-.PP
-By default,
-the requested framebuffer size is assumed to be 512x512 pixels.
-Specifying the
-.B \-h
-flag changes the size to 1024x1024.
-.PP
-The
-.BI \-w\ scr_width
-and
-.BI \-W\ scr_width
-flags specifies the width of each scanline for the display device,
-in pixels.
-.PP
-The
-.BI \-n\ scr_height
-and
-.BI \-N\ scr_height
-flags specifies the height of each scanline for the display device.
-.PP
-.BI \-s\ squarescrsize
-and
-.BI \-S\ squarescrsize
-set both the height and width to the size given.
-.PP
-By default, the text bitmaps are overlaid on top of the
-image resident in the current framebuffer.
-However, the
-.B \-c
-flag causes the screen to be cleared before the image is displayed.
-The
-.B \-O
-flag specifies that the background image is to be read instead
-from standard input. This forces the
-.IR troff (1)
-input to be stored in a temporary file which is given as a parameter.
-If the
-.B \-o
-flag is given, then no framebuffer operations are performed, and
-the output image is written to standard output.
-If this option is specified, and the
-.B \-O
-option is not given, then the
-.B \-c
-(clear) operation is silently forced.
-.PP
-The default color of the text is full intensity white.
-This can be changed by specifying the text color option
-.BI \-C r/g/b
-where each of "r", "g", and "b" represent integers from 0 to 255,
-and the slashes (``/'') are entered literally.
-.SH NOTES
-Because the way that text is processed (top to bottom) is different
-from the way that
-.IR pix (5)
-files are processed (bottom to top), any
-.IR pix (5)
-files input or output will need to be processed with an
-inversion
-.B \-i
-flag on other tools.
-.SH EXAMPLES
-Simple white on black typesetting:
-.sp .5
- tbl files | eqn | troff -t - | cat-fb -c
-.LP
-Typesetting on top of a nice shaded background:
-.sp .5
- tbl files | eqn | troff -t - > doc.tr
- pixbackgnd -i 160 200 | cat-fb -O doc.tr
-.LP
-Typesetting upside-down:
-.sp .5
- tbl files | eqn | troff -t - | cat-fb -o | pix-fb
-.SH "SEE ALSO"
-pix-fb(1), fb-pix(1), troff(1), libfb(3), libfont(3), pix(5)
-.SH DIAGNOSTICS
-``cat-fb: -O ignored, stdin used for C/A/T code''.
-An attempt was made to take both the overlay picture and
-the C/A/T code from stdin.
-.PP
-``cat-fb: X off right edge of screen''.
-An attempt was made to typeset the character ``X'' beyond the right
-edge of the screen/file.
-.SH FILES
-.TP
-.FN .railmag
-/usr/lib/vfont/railmag
-.SH "BUG REPORTS"
-Reports of bugs or problems should be submitted via electronic
-mail to <[email protected]>.
Deleted: brlcad/trunk/src/fb/cat-fb.c
===================================================================
--- brlcad/trunk/src/fb/cat-fb.c 2011-06-08 23:22:53 UTC (rev 44842)
+++ brlcad/trunk/src/fb/cat-fb.c 2011-06-08 23:34:42 UTC (rev 44843)
@@ -1,986 +0,0 @@
-/* C A T - F B . C
- * BRL-CAD
- *
- * Copyright (c) 1986-2011 United States Government as represented by
- * the U.S. Army Research Laboratory.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * version 2.1 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this file; see the file named COPYING for more
- * information.
- *
- */
-/** @file cat-fb.c
- *
- * Simulate C/A/T phototypesetter on a framebuffer.
- * Common usage is troff -t files | cat-fb
- *
- * Operation is one-pass, top to bottom, so vertical motion is
- * limited to NLINES scanlines.
- *
- * Fonts are operating at 200 dpi, giving this correspondence between
- * screen pixel widths and troff line lengths:
- * 512 2.56i (2.35i)
- * 1024 5.12i (4.95i)
- * 1280 6.4i (6.2i)
- *
- */
-
-#include "common.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include "bio.h"
-
-#include "bu.h"
-#include "fb.h"
-#include "vfont-if.h"
-
-
-#define NFONTS 25 /* # of font+psize combos in cache */
-#define SPECIALFONT 3
-#define MAXF 4 /* Max fonts mounted in C/A/T -- a
constant */
-
-#define LOCAL_RAILMAG ".railmag"
-
-/* The vfonts are scaled for 200 dpi */
-#define CONVERT(n) ((n)*(200./432.))
-#define RECONVERT(n) ((n)*(432./200.))
-#define COMMA ','
-
-
-unsigned char *scanline;
-FBIO *fbp;
-
-RGBpixel writing_color = {255, 255, 255};
-
-/* Single-bit wide typesetting buffer.
- * NLINES limits maximum backward vertical motion (eg, in tables).
- */
-#define NLINES 1024
-#define BUFFER_SIZE (NLINES*1280/8)
-
-int bytes_per_line; /* # bytes of bitmap per line */
-unsigned char buffer[BUFFER_SIZE]; /* Big bitmap line buffers */
-unsigned char *buf0p = &buffer[0]; /* Zero origin in circular buffer */
-
-struct fontdes {
- int fnum;
- int psize;
- struct vfont *vfp;
-} fontdes[NFONTS] = {
- { -1, 10, VFONT_NULL },
- { -1, 10, VFONT_NULL },
-};
-
-struct point_sizes {
- int stupid_code;
- int real_code;
-} point_sizes[] = {
- {010, 6},
- {0, 7},
- {01, 8},
- {07, 9},
- {02, 10},
- {03, 11},
- {04, 12},
- {05, 14},
- {0211, 16},
- {06, 18},
- {0212, 20},
- {0213, 22},
- {0214, 24},
- {0215, 28},
- {0216, 36},
- {0, 0}
-};
-
-int cur_fb_line; /* Output absolute scanline number */
-
-int cfont = 1; /* current font index in fontdes[] */
-int new_font_num = -1;
-int fontwanted = 1;
-int new_pt_size = 10; /* new point size */
-int last_ssize = 02;
-int xpos, ypos;
-int esc, lead, back, verd, mcase, railmag;
-double row = -31;
-double col; /* position in phototypesetter units */
-char *fontname[MAXF];
-char fnbuf[120];
-
-char asctab[128] = {
- '\0', /*blank*/
- 'h', /*h*/
- 't', /*t*/
- 'n', /*n*/
- 'm', /*m*/
- 'l', /*l*/
- 'i', /*i*/
- 'z', /*z*/
- 's', /*s*/
- 'd', /*d*/
- 'b', /*b*/
- 'x', /*x*/
- 'f', /*f*/
- 'j', /*j*/
- 'u', /*u*/
- 'k', /*k*/
- '\0', /*blank*/
- 'p', /*p*/
- '\06', /*_ 3/4 em dash*/
- ';', /*;*/
- '\0', /*blank*/
- 'a', /*a*/
- '\05', /*rule*/
- 'c', /*c*/
- '`', /*` open*/
- 'e', /*e*/
- '\'', /*' close*/
- 'o', /*o*/
- '\021', /*1/4*/
- 'r', /*r*/
- '\022', /*1/2*/
- 'v', /*v*/
- '-', /*- hyphen*/
- 'w', /*w*/
- 'q', /*q*/
- '/', /* / */
- '.', /*.*/
- 'g', /*g*/
- '\023', /*3/4*/
- COMMA, /*,*/
- '&', /*&*/
- 'y', /*y*/
- '\0', /*blank*/
- '%', /*%*/
- '\0', /*blank*/
- 'Q', /*Q*/
- 'T', /*T*/
- 'O', /*O*/
- 'H', /*H*/
- 'N', /*N*/
- 'M', /*M*/
- 'L', /*L*/
- 'R', /*R*/
- 'G', /*G*/
- 'I', /*I*/
- 'P', /*P*/
- 'C', /*C*/
- 'V', /*V*/
- 'E', /*E*/
- 'Z', /*Z*/
- 'D', /*D*/
- 'B', /*B*/
- 'S', /*S*/
- 'Y', /*Y*/
- '\0', /*blank*/
- 'F', /*F*/
- 'X', /*X*/
- 'A', /*A*/
- 'W', /*W*/
- 'J', /*J*/
- 'U', /*U*/
- 'K', /*K*/
- '0', /*0*/
- '1', /*1*/
- '2', /*2*/
- '3', /*3*/
- '4', /*4*/
- '5', /*5*/
- '6', /*6*/
- '7', /*7*/
- '8', /*8*/
- '9', /*9*/
- '*', /***/
- '\04', /*minus*/
- '\01', /*fi*/
- '\02', /*fl*/
- '\03', /*ff*/
- '\020', /* cent sign */
- '\012', /*ffl*/
- '\011', /*ffi*/
- '(', /*(*/
- ')', /*)*/
- '[', /*[*/
- ']', /*]*/
- '\013', /* degree */
- '\014', /* dagger */
- '=', /*=*/
- '\017', /* registered */
- ':', /*:*/
- '+', /*+*/
- '\0', /*blank*/
- '!', /*!*/
- '\07', /* bullet */
- '?', /*?*/
- '\015', /*foot mark*/
- '|', /*|*/
- '\0', /*blank*/
- '\016', /* copyright */
- '\010', /* square */
- '$', /*$*/
- '\0',
- '\0',
- '"', /*"*/
- '#', /*#*/
- '<', /*<*/
- '>', /*>*/
- '@', /*@*/
- '\\', /*\\*/
- '^', /*^*/
- '{', /*{*/
- '}', /*}*/
- '~' /*~*/
-};
-
-char spectab[128] = {
- '\0', /*blank*/
- 'w', /*psi*/
- 'h', /*theta*/
- 'm', /*nu*/
- 'l', /*mu*/
- 'k', /*lambda*/
- 'i', /*iota*/
- 'f', /*zeta*/
- 'r', /*sigma*/
- 'd', /*delta*/
- 'b', /*beta*/
- 'n', /*xi*/
- 'g', /*eta*/
- 'u', /*phi*/
- 't', /*upsilon*/
- 'j', /*kappa*/
- '\0', /*blank*/
- 'p', /*pi*/
- '@', /*at-sign*/
- '7', /*down arrow*/
- '\0', /*blank*/
- 'a', /*alpha*/
- '|', /*or*/
- 'v', /*chi*/
- '"', /*"*/
- 'e', /*epsilon*/
- '=', /*=*/
- 'o', /*omicron*/
- '4', /*left arrow*/
- 'q', /*rho*/
- '6', /*up arrow*/
- 's', /*tau*/
- '_', /*underrule*/
- '\\', /*\*/
- 'W', /*Psi*/
- '\07', /*bell system sign*/
- '\001', /*infinity*/
- 'c', /*gamma*/
- '\002', /*improper superset*/
- '\003', /*proportional to*/
- '\004', /*right hand*/
- 'x', /*omega*/
- '\0', /*blank*/
- '(', /*gradient*/
- '\0', /*blank*/
- 'U', /*Phi*/
- 'H', /*Theta*/
- 'X', /*Omega*/
- '\005', /*cup (union)*/
- '\006', /*root en*/
- '\014', /*terminal sigma*/
- 'K', /*Lambda*/
- '-', /*minus*/
- 'C', /*Gamma*/
- '\015', /*integral sign*/
- 'P', /*Pi*/
- '\032', /*subset of*/
- '\033', /*superset of*/
- '2', /*approximates*/
- 'y', /*partial derivative*/
- 'D', /*Delta*/
- '\013', /*square root*/
- 'R', /*Sigma*/
- '1', /*approx =*/
- '\0', /*blank*/
- '>', /*>*/
- 'N', /*Xi*/
- '<', /*<*/
- '\016', /*slash (longer)*/
- '\034', /*cap (intersection)*/
- 'T', /*Upsilon*/
- '\035', /*not*/
- '\023', /*right ceiling (rt of ")*/
- '\024', /*left top (of big curly)*/
- '\017', /*bold vertical*/
- '\030', /*left center of big curly bracket*/
- '\025', /*left bottom*/
- '\026', /*right top*/
- '\031', /*right center of big curly bracket*/
- '\027', /*right bot*/
- '\021', /*right floor (rb of ")*/
- '\020', /*left floor (left bot of big sq bract)*/
- '\022', /*left ceiling (lt of ")*/
- '*', /*multiply*/
- '/', /*divide*/
- '\010', /*plus-minus*/
- '\011', /*<=*/
- '\012', /*>=*/
- '0', /*identically equal*/
- '3', /*not equal*/
- '{', /*{*/
- '}', /*}*/
- '\'', /*' acute accent*/
- '\140', /*` grave accent*/
- '^', /*^*/
- '#', /*sharp*/
- '\036', /*left hand*/
- '\037', /*member of*/
- '~', /*~*/
- 'z', /*empty set*/
- '\0', /*blank*/
- 'Y', /*dbl dagger*/
- 'Z', /*box rule*/
- '9', /*asterisk*/
- '[', /*improper subset*/
- ']', /*circle*/
- '\0', /*blank*/
- '+', /*eqn plus*/
- '5', /*right arrow*/
- '8' /*section mark*/
-};
-
-static char *framebuffer = NULL;
-
-static int scr_width = 0; /* use device default size */
-static int scr_height = 0;
-static int clear = 0; /* clear screen before writing */
-static int overlay_from_stdin = 0; /* overlay FROM STDIN rather than fb */
-static int debug = 0;
-static int output_pix = 0; /* output pixfile, rather than to fb */
-
-void ofile(FILE *fp);
-void readrailmag(void);
-void crail(int nrail);
-void slop_lines(int nlines);
-int loadfont(int fnum, int size);
-int findsize(int code);
-int outc(int code);
-int relfont(void);
-int writelines(int nlines, char *buf);
-
-static char usage[] = "\
-Usage: cat-fb [-h -c -O -o] [-F framebuffer] [-C r/g/b]\n\
- [-{sS} squarescrsize] [-{wW} scr_width] [-{nN} scr_height]\n\
- [troff_files]\n";
-int
-get_args(int argc, char **argv)
-{
- int c;
-
- while ( (c = bu_getopt( argc, argv, "odhcOF:s:S:w:W:n:N:C:" )) != -1 ) {
- switch ( c ) {
- case 'o':
- output_pix = 1;
- break;
- case 'd':
- debug++;
- break;
- case 'O':
- overlay_from_stdin = 1;
- break;
- case 'h':
- /* high-res */
- scr_height = scr_width = 1024;
- break;
- case 'c':
- clear = 1;
- break;
- case 'F':
- framebuffer = bu_optarg;
- break;
- case 's':
- case 'S':
- scr_height = scr_width = atoi(bu_optarg);
- break;
- case 'w':
- case 'W':
- scr_width = atoi(bu_optarg);
- break;
- case 'n':
- case 'N':
- scr_height = atoi(bu_optarg);
- break;
- case 'C':
- {
- char *cp = bu_optarg;
- unsigned char *conp = writing_color;
-
- /* premature null => atoi gives zeros */
- for ( c=0; c < 3; c++ ) {
- *conp++ = atoi(cp);
- while ( *cp && *cp++ != '/' )
- ;
- }
- }
- break;
-
- default: /* '?' */
- return 0;
- }
- }
-
- if ( bu_optind >= argc ) {
- /* No file name args */
- if ( isatty(fileno(stdin)) )
- return 0;
- /* mainline will actually do the processing */
- }
- return 1; /* OK */
-}
-
-int
-main(int argc, char **argv)
-{
- char *cp;
-
- if ( !get_args( argc, argv ) ) {
- (void)fputs(usage, stderr);
- return 1;
- }
-
- if ( output_pix && !overlay_from_stdin )
- clear = 1;
- if ( !output_pix ) {
- if ( (fbp = fb_open( framebuffer, scr_width, scr_height )) == FBIO_NULL
)
- return 1;
- scr_width = fb_getwidth(fbp);
- scr_height = fb_getheight(fbp);
- }
- cp = bu_malloc(scr_width*sizeof(RGBpixel), "cp pixels");
- scanline = (unsigned char *)cp;
- bytes_per_line = (scr_width+7)/8;
-
- cur_fb_line = scr_height-1; /* start at top of screen */
-
- readrailmag();
-
- if ( bu_optind >= argc ) {
- /* Process one TROFF file from stdin */
- if ( overlay_from_stdin ) {
- fprintf(stderr, "cat-fb: -O ignored, stdin used for C/A/T code\n");
- overlay_from_stdin = 0;
- }
- ofile(stdin);
- } else {
- for (; bu_optind < argc; bu_optind++ ) {
- FILE *fp;
- if ( (fp = fopen(argv[bu_optind], "rb")) == NULL ) {
- perror(argv[bu_optind]);
- continue;
- }
- ofile(fp);
- fclose(fp);
- }
- }
- slop_lines(NLINES); /* Flush bitmap buffer */
- if ( fbp )
- fb_close(fbp);
- bu_free(cp, "cp pixels");
- return 0;
-}
-
-/*
- * R E A D R A I L M A G
- */
-void
-readrailmag(void)
-{
- int i;
- char *cp;
- int rmfd;
- char c;
-
- if ((rmfd = open(LOCAL_RAILMAG, 0)) < 0)
- if ((rmfd = open(bu_brlcad_data("vfont/railmag", 0), 0)) < 0) {
- /*
- * Provide reasonable default font choices.
- * In the Berkeley VFONT set, the Times
- * fonts actually match the default troff
- * widths much better than the R, I, & B
- * fonts. However, note that the Times fonts
- * don't have ligatures.
- * Also note that the times.s font does not
- * have lots of things that EQN expects out of
- * an "S" font.
- */
- fontname[0] = "times.r";
- fontname[1] = "times.i";
- fontname[2] = "times.b";
- fontname[3] = "S";
- return;
- }
- cp = fnbuf;
- for (i = 0; i < 4; i++) {
- fontname[i] = cp;
- while (read(rmfd, &c, 1) == 1 && c != '\n')
- *cp++ = c;
- *cp++ = '\0';
- }
- close(rmfd);
-}
-
-void
-ofile(FILE *fp)
-{
- int c;
- static int initialized;
-
- while ((c = getc(fp)) != EOF) {
- if (!c)
- continue;
- if (c & 0200) {
- esc += (~c) & 0177;
- if (debug>1)fprintf(stderr, "esc+= %d ", (~c)&0177 );
- continue;
- }
- if (esc) {
- if (back)
- esc = -esc;
- if (debug>1)fprintf(stderr, "esc=%d, back=%d\n", esc, back);
- col += esc;
- ypos = CONVERT(col);
- esc = 0;
- }
- if (debug>1)fprintf(stderr, " 0%o v=%d (row=%g) h=%d (col=%g)\n", c,
xpos, row, ypos, col);
-
- if ((c & 0377) < 0100) /* Purely for efficiency */
- goto normal_char;
- switch (c) {
-
- case 0100:
- if (initialized)
- goto out;
- initialized = 1;
-#if 0
- row = 25; /** original value **/
-#else
- row = -108; /* ignore 1/4 C/A/T inch header */
-#endif
- xpos = CONVERT(row);
- for (c = 0; c < BUFFER_SIZE; c++)
- buffer[c] = 0;
- col = 0;
- esc = 0;
- lead = 0;
- ypos = 0;
- verd = 0;
- back = 0;
- mcase = 0;
- railmag = 0;
- if (loadfont(railmag, fontdes[cfont].psize) < 0)
- fprintf(stderr, "Can't load inital font\n");
- break;
-
- case 0101: /* lower rail */
- crail(railmag &= ~01);
- break;
-
- case 0102: /* upper rail */
- crail(railmag |= 01);
- break;
-
- case 0103: /* upper mag */
- crail(railmag |= 02);
- break;
-
- case 0104: /* lower mag */
- crail(railmag &= ~02);
- break;
-
- case 0105: /* lower case */
- mcase = 0;
- break;
-
- case 0106: /* upper case */
- mcase = 0100;
- break;
-
- case 0107: /* escape forward */
- back = 0;
- break;
-
- case 0110: /* escape backwards */
- back = 1;
- break;
-
- case 0111: /* stop */
- break;
-
- case 0112: /* lead forward */
- verd = 0;
- break;
-
- case 0113: /* undefined */
- break;
-
- case 0114: /* lead backward */
- verd = 1;
- break;
-
- case 0115: /* undefined */
- case 0116:
- case 0117:
- break;
-
- default:
- if ((c & 0340) == 0140) /* leading */ {
- lead = (~c) & 037;
- if (verd)
- lead = -lead;
- row += lead*3; /* Lead is 3 units */
- c = CONVERT(row);
- while (c >= NLINES) {
- slop_lines(15);
- c = CONVERT(row);
- }
- xpos = c;
- if (debug)fprintf(stderr, "v=%d (row=%g)\n", xpos, row);
- continue;
- }
- if ((c & 0360) == 0120) /* size change */ {
- loadfont(railmag, findsize(c & 017));
- continue;
- }
- if (c & 0300)
- continue;
-
- normal_char:
- c = (c & 077) | mcase;
- (void)outc(c);
- }
- }
- out:
- return;
-}
-
-int
-findsize(int code)
-{
- struct point_sizes *psp;
- int delta;
-
- psp = point_sizes;
- while (psp->real_code != 0) {
- if ((psp->stupid_code & 017) == code)
- break;
- psp++;
- }
- /*
- * Due to the optics in the C/A/T, characters appear with an X offset
- * when some of the larger sizes are used.
- */
- delta = 0;
-#define DBL 0200
- if (!(last_ssize & DBL) && (psp->stupid_code & DBL))
- delta = -55; /* Size getting larger */
- else if ((last_ssize & DBL) && !(psp->stupid_code & DBL))
- delta = 55; /* Size getting smaller */
- if (back)
- delta = -delta;
- esc += delta; /* Compensate for C/A/T hardware shift during size
change */
- if (debug)fprintf(stderr, "findsize: changing escapment by %d, code=0%o,
last_ssize=0%o, stupid_code=0%o\n", delta, code, last_ssize, psp->stupid_code);
- last_ssize = psp->stupid_code;
- return psp->real_code;
-}
-
-void
-crail(int nrail)
-{
- int psize;
-
- psize = fontdes[cfont].psize;
- if (fontwanted)
- psize = new_pt_size;
- loadfont(nrail, psize);
-}
-
-
-/* Queue up a request to change to a new font */
-int
-loadfont(int fnum, int size)
-{
- int i;
-
- fontwanted = 0;
- if (fnum < 0 || fnum >= MAXF) {
- fprintf(stderr, "Internal error: illegal font\n");
- return -1;
- }
- if (fnum == fontdes[cfont].fnum && size == fontdes[cfont].psize)
- return 0;
- for (i = 0; i < NFONTS; i++)
- if (fontdes[i].fnum == fnum && fontdes[i].psize == size) {
- cfont = i;
- return 0;
- }
- new_font_num = fnum;
- new_pt_size = size;
- fontwanted++;
- return 0;
-}
-
-
-/*
- * R E A D I N F O N T
- *
- * Returns -
- * -1 FAIL
- * 0 OK
- */
-int
-readinfont(void)
-{
- struct vfont *vfp;
- int fnum, size;
- char cbuf[BUFSIZ];
-
- fnum = new_font_num;
- size = new_pt_size;
- snprintf(cbuf, BUFSIZ, "%s.%d", fontname[fnum], size);
-
- if ( (vfp = vfont_get( cbuf )) == VFONT_NULL ) {
- /* Ignore font change */
- fprintf(stderr, "cat-fb: Unable to acquire font '%s'\n", cbuf);
- fontwanted = 0;
- return -1;
- }
-
- cfont = relfont();
-
- fontdes[cfont].fnum = fnum;
- fontdes[cfont].psize = size;
- fontdes[cfont].vfp = vfp;
- if (debug) fprintf(stderr, "slot %d = %s\n", cfont, cbuf );
-
- fontwanted = 0;
- new_font_num = new_pt_size = -1;
- return 0;
-}
-
-int lastloaded = -1;
-
-int
-relfont(void)
-{
- int newfont;
-
- /* First, see if a font table slot happens to be availible */
- for ( newfont = 0; newfont < NFONTS; newfont++ ) {
- if ( fontdes[newfont].psize > 0 )
- continue;
- return newfont;
- }
-
- /* Reuse an existing slot, with a strange heuristic */
-
- newfont = lastloaded;
- /*
- * optimization for special font. since we think that usually
- * there is only one character at a time from any special math
- * font, make it the candidate for removal.
- */
- if (fontdes[cfont].fnum != SPECIALFONT || fontdes[cfont].vfp==VFONT_NULL)
- if (++newfont>=NFONTS)
- newfont = 0;
- lastloaded = newfont;
- if ( fontdes[newfont].vfp != VFONT_NULL )
- vfont_free(fontdes[newfont].vfp);
-
- fontdes[newfont].vfp = VFONT_NULL;
- fontdes[newfont].fnum = -1;
- fontdes[newfont].psize = -1;
- return newfont;
-}
-
-/*
- * O U T C
- *
- * Returns -
- * 0 FAIL
- * 1 OK
- */
-int
-outc(int code)
-{
- char c; /* character to print */
- struct vfont_dispatch *vdp; /* ptr to character font record */
- unsigned char *addr; /* addr of font data */
- int llen; /* length of each font line */
- int nlines; /* number of font lines */
- unsigned char *scanp; /* ptr to output buffer */
- int scanp_inc; /* increment to start of next buffer */
- int offset; /* bit offset to start of font data */
- int i; /* loop counter */
- int count; /* font data ptr */
- unsigned fontdata; /* font data temporary */
- int off8; /* offset + 8 */
-
- if (fontwanted) {
- if ( readinfont() < 0 ) return 0;
- }
- if (railmag == SPECIALFONT) {
- c = spectab[code];
- } else {
- c = asctab[code];
- }
- vdp = &fontdes[cfont].vfp->vf_dispatch[(int)c];
-
- if (vdp->vd_nbytes <= 0 )
- return 0;
-
- /* xpos is vertical (typ. called Y), ypos is horizontal (typ. X)
- * like a strip-chart recorder */
- if (debug) {
- fprintf(stderr, "%c h=%d v=%d (row=%g col=%g) l=%d r=%d u=%d d=%d
w=%d\n",
- c, ypos, xpos,
- row, col,
- vdp->vd_left, vdp->vd_right,
- vdp->vd_up, vdp->vd_down, vdp->vd_width);
- }
- if ( ypos + vdp->vd_right > bytes_per_line*8 ) {
- fprintf(stderr, "cat-fb: '%c' off right edge of screen\n", c);
- return 0;
- }
- addr = (unsigned char *)&fontdes[cfont].vfp->vf_bits[vdp->vd_addr];
- llen = (vdp->vd_left + vdp->vd_right+7)/8;
- nlines = vdp->vd_up + vdp->vd_down;
- if (xpos+vdp->vd_down >= NLINES)
- slop_lines(xpos + vdp->vd_down - NLINES + 1);
- scanp = ( (xpos-vdp->vd_up-1)*bytes_per_line+
- (ypos-vdp->vd_left)/8 ) + buf0p;
- if (scanp < &buffer[0])
- scanp += BUFFER_SIZE;
- scanp_inc = bytes_per_line-llen;
- offset = (ypos-vdp->vd_left)&07;
- off8 = 8-offset;
- for (i = 0; i < nlines; i++) {
- if (scanp >= &buffer[BUFFER_SIZE])
- scanp -= BUFFER_SIZE;
- count = llen;
- /* This buffer goes left-to-right [0], [1], ... */
- if (scanp + count <= &buffer[BUFFER_SIZE])
- do {
- fontdata = *addr++;
- *scanp |= (fontdata >> offset);
- scanp++;
- *scanp |= (fontdata << off8);
- count--;
- } while (count > 0);
- scanp += scanp_inc+count;
- addr += count;
- }
- return 1;
-}
-
-void
-slop_lines(int nlines)
-{
- int rlines;
-
- rlines = (&buffer[BUFFER_SIZE] - buf0p) / bytes_per_line;
- if (rlines < nlines) {
- if (writelines(rlines, (char *)buf0p) < 0)
- bu_exit(1, NULL);
- memset((char *)buf0p, 0, rlines * bytes_per_line);
- buf0p = buffer;
- nlines -= rlines;
- xpos -= rlines;
- row -= RECONVERT(rlines);
- }
- if (writelines(nlines, (char *)buf0p) < 0)
- bu_exit(1, NULL);
- memset((char *)buf0p, 0, bytes_per_line * nlines);
- buf0p += bytes_per_line * nlines;
- if (buf0p >= &buffer[BUFFER_SIZE])
- buf0p -= BUFFER_SIZE;
- xpos -= nlines;
- row -= RECONVERT(nlines);
-}
-
-/*
- * Overlay framebuffer with indicated lines of bitmap.
- * Output proceeds from top to bottom.
- */
-int
-writelines(int nlines, char *buf)
- /* Number of scan lines to put out. */
- /* Pointer to buffer location. */
-{
- unsigned char *pp;
- int bit;
- int bufval;
- int lpos;
- int l;
-
- for (l = 0; l < nlines; l++) {
- size_t ret;
- if (cur_fb_line < 0 ) {
- /* Ran off bottom of screen */
- if ( fbp )
- fb_close(fbp);
- bu_exit(0, NULL);
- }
- if ( clear ) {
- memset((char *)scanline, 0, scr_width*3);
- } else if ( overlay_from_stdin ) {
- if ( fread( (char *)scanline, scr_width*3, 1, stdin ) != 1 ) {
- clear = 1;
- overlay_from_stdin = 0;
- }
- } else {
- (void)fb_read( fbp, 0, cur_fb_line, scanline, scr_width );
- }
- pp = scanline;
- for ( lpos = 0; lpos < bytes_per_line; lpos++) {
- if ( (bufval = *buf) == 0 ) {
- pp += 8*sizeof(RGBpixel);
- buf++;
- continue;
- }
- for (bit = 0x80; bit; bit >>= 1) {
- if (bufval & bit) {
- COPYRGB( pp, writing_color );
- }
- pp += sizeof(RGBpixel);
- }
- buf++;
- }
- if ( output_pix ) {
- ret = fwrite( scanline, scr_width*3, 1, stdout );
- if (ret != 1)
- perror("fwrite");
- } else {
- ret = fb_write( fbp, 0, cur_fb_line, scanline, scr_width );
- if (ret != (size_t)scanline)
- perror("fwrite");
- }
- cur_fb_line--;
- }
- return 0;
-}
-
-/*
- * Local Variables:
- * mode: C
- * tab-width: 8
- * indent-tabs-mode: t
- * c-file-style: "stroustrup"
- * End:
- * ex: shiftwidth=4 tabstop=8
- */
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
EditLive Enterprise is the world's most technically advanced content
authoring tool. Experience the power of Track Changes, Inline Image
Editing and ensure content is compliant with Accessibility Checking.
http://p.sf.net/sfu/ephox-dev2dev
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits