[BACK]Return to unixpc.trm CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gnuplot / term

Annotation of OpenXM_contrib/gnuplot/term/unixpc.trm, Revision 1.1.1.1

1.1       maekawa     1: /*
                      2:  * $Id: unixpc.trm,v 1.14 1998/04/14 00:18:12 drd Exp $
                      3:  *
                      4:  */
                      5:
                      6: /* GNUPLOT - unixpc.trm */
                      7:
                      8: /*[
                      9:  * Copyright 1990 - 1993, 1998
                     10:  *
                     11:  * Permission to use, copy, and distribute this software and its
                     12:  * documentation for any purpose with or without fee is hereby granted,
                     13:  * provided that the above copyright notice appear in all copies and
                     14:  * that both that copyright notice and this permission notice appear
                     15:  * in supporting documentation.
                     16:  *
                     17:  * Permission to modify the software is granted, but not the right to
                     18:  * distribute the complete modified source code.  Modifications are to
                     19:  * be distributed as patches to the released version.  Permission to
                     20:  * distribute binaries produced by compiling modified sources is granted,
                     21:  * provided you
                     22:  *   1. distribute the corresponding source modifications from the
                     23:  *    released version in the form of a patch file along with the binaries,
                     24:  *   2. add special version identification to distinguish your version
                     25:  *    in addition to the base release version number,
                     26:  *   3. provide your name and address as the primary contact for the
                     27:  *    support of your modified version, and
                     28:  *   4. retain our contact information in regard to use of the base
                     29:  *    software.
                     30:  * Permission to distribute the released version of the source code along
                     31:  * with corresponding source modifications in the form of a patch file is
                     32:  * granted with same provisions 2 through 4 for binary distributions.
                     33:  *
                     34:  * This software is provided "as is" without express or implied warranty
                     35:  * to the extent permitted by applicable law.
                     36: ]*/
                     37:
                     38: /*
                     39:  * This file is included by ../term.c.
                     40:  *
                     41:  * This terminal driver supports:
                     42:  *  Unix PC's (ATT 3b1)
                     43:  *
                     44:  * AUTHORS
                     45:  *    John Campbell
                     46:  *
                     47:  * send your comments or suggestions to (info-gnuplot@dartmouth.edu).
                     48:  *
                     49:  */
                     50:
                     51: /*
                     52: >From: John Campbell (...!arizona!naucse!jdc)
                     53:
                     54: I originally ported gnuplot to the ATT 3b1 (ATT7300) on 12/4/88, and then
                     55: added the minimal code needed to bring it up to 2.0 level on 1/28/90.  The
                     56: 3b1, as I view it, is a 720x300 bitmapped, monochrome display (often people
                     57: don't use the top 12 scan lines and thus the effective size is 720x288).  I
                     58: tried to maximize the size of the graph area, by using these top 12 lines
                     59: (normally reserved) and set up a signal handler to restore them upon exit,
                     60: abort, etc.
                     61:
                     62: Line styles were "fudged" (they do not know the aspect ratio).  The same
                     63: line style may look different depending upon the slope of the curve.  Due to
                     64: this only 4 line styles were implemented.  While more line types are possible,
                     65: the current styles were chosen as distinguishable.
                     66:
                     67: The 3b1 has 4 "special" rows at the bottom that I could not use in graphics
                     68: mode.  It has been suggested that we use these lines for command prompting.
                     69: Others have requested that we have a graphics window and a command window.
                     70: My experience with gnuplot only includes relatively dumb graphics devices--
                     71: hence gnuplot "looks and feels" normal to me the way I implemented it.
                     72: I welcome either of these changes from someone else, however.
                     73: */
                     74:
                     75: /*
                     76:  * adapted to the new terminal layout by Stefan Bodewig (Dec. 1995)
                     77:  */
                     78:
                     79: #include "driver.h"
                     80:
                     81: #ifdef TERM_REGISTER
                     82: register_term(unixpc)
                     83: #endif
                     84:
                     85: #ifdef TERM_PROTO
                     86: TERM_PUBLIC void uPC_init __PROTO((void));
                     87: TERM_PUBLIC void uPC_graphics __PROTO((void));
                     88: TERM_PUBLIC void uPC_text __PROTO((void));
                     89: TERM_PUBLIC void uPC_linetype __PROTO((int linetype));
                     90: TERM_PUBLIC void uPC_move __PROTO((unsigned int x, unsigned int y));
                     91: TERM_PUBLIC void uPC_vector __PROTO((unsigned int x, unsigned int y));
                     92: TERM_PUBLIC void uPC_put_text __PROTO((unsigned int x, unsigned int y, char str[]));
                     93: TERM_PUBLIC int uPC_text_angle __PROTO((int ang));
                     94: TERM_PUBLIC void uPC_reset __PROTO((void));
                     95: #define uPC_XMAX 720
                     96: #define uPC_YMAX 300
                     97: #define uPC_VCHAR FNT5X9_VCHAR
                     98: #define uPC_HCHAR FNT5X9_HCHAR
                     99: #define uPC_VTIC  uPC_VCHAR/2  /* Was 8  */
                    100: #define uPC_HTIC  uPC_HCHAR    /* Was 12 */
                    101: #endif /* TERM_PROTO */
                    102:
                    103: #ifndef TERM_PROTO_ONLY
                    104: #ifdef TERM_BODY
                    105: void uPC_fixwind __PROTO((int signo));
                    106: void uPC_putc __PROTO((unsigned int x, unsigned int y, int c, int angle));
                    107: void uPC_plot_word __PROTO((unsigned short *a, unsigned short b));
                    108: #include <sys/window.h>                /* Started with tam.h--too much trouble. */
                    109: #include <sys/signal.h>
                    110: #include <errno.h>
                    111:
                    112: #define uPC_HIGH_BIT    (0x8000)
                    113:
                    114: typedef unsigned short Scr_type;
                    115: typedef unsigned char Scr_kluge;
                    116:
                    117:
                    118: #define uPC_XSIZE       45     /* Short ints. */
                    119: #define uPC_YSIZE uPC_YMAX
                    120:
                    121: Scr_type uPC_display[uPC_YSIZE][uPC_XSIZE];
                    122: int uPC_width = 2 * uPC_XSIZE;
                    123: int uPC_sx = 0, uPC_sy = 0;
                    124: int uPC_cur_linetype = 0;
                    125: int uPC_angle = 0;
                    126: unsigned short uPC_raster_count = 0;
                    127: static Scr_type lookup[] =
                    128: {
                    129:     0x0001, 0x0002, 0x0004, 0x0008,
                    130:     0x0010, 0x0020, 0x0040, 0x0080,
                    131:     0x0100, 0x0200, 0x0400, 0x0800,
                    132:     0x1000, 0x2000, 0x4000, 0x8000,
                    133: };
                    134:
                    135: #define uPC_XLAST (uPC_XMAX - 1)
                    136: #define uPC_YLAST (uPC_YMAX - 1)
                    137:
                    138:
                    139: static struct urdata uPC_ur = { (unsigned short *) uPC_display,
                    140:                                2 * uPC_XSIZE, 0, 0, 0, 0, 0, 0,
                    141:                                uPC_XMAX, uPC_YMAX, SRCSRC, DSTOR, 0
                    142: };
                    143:
                    144: #define IfErrOut(e1,e2,s1,s2) if (e1 e2) {\
                    145: fprintf(stderr, "%s:: %s %s\n", sys_errlist[errno], s1, s2);\
                    146: uPC_fixwind(0);\
                    147: exit(-1);}
                    148:
                    149: TERM_PUBLIC void uPC_init()
                    150: {
                    151:     /* This routine will ioctl to change 0 size */
                    152:     int i;
                    153:     struct uwdata uw;
                    154:     int uPC_fixwind();
                    155:     short gw;
                    156:
                    157:     /* Check that we are on the bitmapped window. */
                    158:     if (iswind() != 0) {
                    159:        fputs("Sorry--must run from the bitmapped terminal\n", stderr);
                    160:        exit(-1);
                    161:     }
                    162:     for (i = 1; i <= 16; i++) {
                    163:        if (i != SIGINT && i != SIGFPE)         /* Two are caught in plot.c */
                    164:            signal(i, uPC_fixwind);
                    165:     }
                    166:
                    167: /* Increase the screen size */
                    168:     uw.uw_x = 0;
                    169:     uw.uw_y = 0;               /* Leave room for top status line. */
                    170:     uw.uw_width = uPC_XMAX;    /* 720 */
                    171:     uw.uw_height = uPC_YMAX;   /* 288 normal--we clobber 12 (top row) */
                    172:     uw.uw_uflags = 1;          /* Creates with no border */
                    173:
                    174:     IfErrOut(ioctl(1, WIOCSETD, &uw), <0, "ioctl failed on", "WIOCSETD");
                    175: }
                    176:
                    177:
                    178: TERM_PUBLIC void uPC_graphics()
                    179: {
                    180: /* This routine will clear the uPC_display buffer and window. */
                    181:     register Scr_type *j;
                    182:     register int i;
                    183:
                    184:     j = (Scr_type *) uPC_display;
                    185:     i = uPC_YSIZE * uPC_XSIZE + 1;
                    186:
                    187:     while (--i)
                    188:        *j++ = 0;
                    189:    /* Position the cursor to the bottom of the screen so when we come back to
                    190:     * text mode we are just below the graph.
                    191:     */
                    192:     fputs("\033[25;1H", stdout);
                    193:
                    194:     uPC_ur.ur_dstop = DSTSRC;  /* replace (clear screen). */
                    195:     IfErrOut(ioctl(1, WIOCRASTOP, &uPC_ur), <0,
                    196:             "ioctl failed", "WIOCRASTOP");
                    197:     uPC_ur.ur_dstop = DSTOR;   /* Or in (show text) */
                    198: }
                    199:
                    200:
                    201: TERM_PUBLIC void uPC_text()
                    202: {
                    203: /* This routine will flush the display. */
                    204:
                    205:     IfErrOut(ioctl(1, WIOCRASTOP, &uPC_ur), <0,
                    206:             "ioctl failed", "WIOCRASTOP");
                    207: }
                    208:
                    209:
                    210: TERM_PUBLIC void uPC_linetype(linetype)
                    211: int linetype;
                    212: {
                    213: /* This routine records the current linetype. */
                    214:     if (uPC_cur_linetype != linetype) {
                    215:        uPC_raster_count = 0;
                    216:        uPC_cur_linetype = linetype;
                    217:     }
                    218: }
                    219:
                    220:
                    221: TERM_PUBLIC void uPC_move(x, y)
                    222: unsigned int x, y;
                    223: {
                    224: /* This routine just records x and y in uPC_sx, uPC_sy */
                    225:     uPC_sx = x;
                    226:     uPC_sy = y;
                    227: }
                    228:
                    229:
                    230: /* Was just (*(a)|=(b)) */
                    231: #define uPC_PLOT(a,b)   (uPC_cur_linetype != 0 ? uPC_plot_word (a,b) :\
                    232:                                 (*(a)|=(b)))
                    233:
                    234: void uPC_plot_word(a, b)
                    235: Scr_type *a, b;
                    236: /*
                    237:    Weak attempt to make line styles.  The real problem is the aspect
                    238:    ratio.  This routine is called only when a bit is to be turned on in
                    239:    a horizontal word.  A better line style routine would know something
                    240:    about the slope of the line around the current point (in order to
                    241:    change weighting).
                    242:
                    243:    This yields 3 working linetypes plus a usable axis line type.
                    244: */
                    245: {
                    246: /* Various line types */
                    247:     switch (uPC_cur_linetype) {
                    248:     case -1:
                    249:        /* Distinguish between horizontal and vertical axis. */
                    250:        if (uPC_sx > uPC_XMAX / 8 && uPC_sx < 7 * uPC_XMAX / 8) {
                    251:            /* Fuzzy tolerance because we don't know exactly where the y axis is */
                    252:            if (++uPC_raster_count % 2 == 0)
                    253:                *(a) |= b;
                    254:        } else {
                    255:            /* Due to aspect ratio, take every other y pixel and every third x. */
                    256:            *(a) |= (b & 0x9999);
                    257:        }
                    258:        break;
                    259:     case 1:
                    260:     case 5:
                    261:        /* Make a |    |----|    |----| type of line. */
                    262:        if ((1 << uPC_raster_count) & 0xF0F0)
                    263:            *(a) |= b;
                    264:        if (++uPC_raster_count > 15)
                    265:            uPC_raster_count = 0;
                    266:        break;
                    267:     case 2:
                    268:     case 6:
                    269:        /* Make a |----|----|----|--- |    | type of line. */
                    270:        if ((1 << uPC_raster_count) & 0x0EFFF)
                    271:            *(a) |= b;
                    272:        if (++uPC_raster_count > 19)
                    273:            uPC_raster_count = 0;
                    274:        break;
                    275:     case 3:
                    276:     case 7:
                    277:        /* Make a | -  | -  | -  | -  | type of line. */
                    278:        if ((1 << uPC_raster_count) & 0x4444)
                    279:            *(a) |= b;
                    280:        if (++uPC_raster_count > 15)
                    281:            uPC_raster_count = 0;
                    282:        break;
                    283:     case 4:
                    284:     case 8:
                    285:     default:
                    286:        *(a) |= b;
                    287:        break;
                    288:     }
                    289: }
                    290:
                    291: TERM_PUBLIC void uPC_vector(x, y)
                    292: unsigned int x, y;
                    293: {
                    294: /* This routine calls line with x,y */
                    295:     int x1 = uPC_sx, y1 = uPC_sy, x2 = x, y2 = y;
                    296:     register int c, e, dx, dy, width;
                    297:     register Scr_type mask, *a;
                    298:
                    299: /* Record new sx, sy for next call to the vector routine. */
                    300:     uPC_sx = x2;
                    301:     uPC_sy = y2;
                    302:
                    303:     a = &uPC_display[(uPC_YSIZE - 1) - y1][x1 >> 4];
                    304:     mask = lookup[x1 & 0x0f];
                    305:     width = uPC_width;
                    306:
                    307:     if ((dx = x2 - x1) > 0) {
                    308:        if ((dy = y2 - y1) > 0) {
                    309:            if (dx > dy) {      /* dx > 0, dy > 0, dx > dy */
                    310:                dy <<= 1;
                    311:                e = dy - dx;
                    312:                c = dx + 2;
                    313:                dx <<= 1;
                    314:
                    315:                while (--c) {
                    316:                    uPC_PLOT(a, mask);
                    317:                    if (e >= 0) {
                    318:                        (Scr_kluge *) a -= width;
                    319:                        e -= dx;
                    320:                    }
                    321:                    if (mask & uPC_HIGH_BIT) {
                    322:                        mask = 1;
                    323:                        a++;
                    324:                    } else
                    325:                        mask <<= 1;
                    326:                    e += dy;
                    327:                }
                    328:            } else {            /* dx > 0, dy > 0, dx <= dy */
                    329:                dx <<= 1;
                    330:                e = dx - dy;
                    331:                c = dy + 2;
                    332:                dy <<= 1;
                    333:
                    334:                while (--c) {
                    335:                    uPC_PLOT(a, mask);
                    336:                    if (e >= 0) {
                    337:                        if (mask & uPC_HIGH_BIT) {
                    338:                            mask = 1;
                    339:                            a++;
                    340:                        } else
                    341:                            mask <<= 1;
                    342:                        e -= dy;
                    343:                    }
                    344:                    (Scr_kluge *) a -= width;
                    345:                    e += dx;
                    346:                }
                    347:            }
                    348:        } else {
                    349:            dy = -dy;
                    350:            if (dx > dy) {      /* dx > 0, dy <= 0, dx > dy */
                    351:                dy <<= 1;
                    352:                e = dy - dx;
                    353:                c = dx + 2;
                    354:                dx <<= 1;
                    355:
                    356:                while (--c) {
                    357:                    uPC_PLOT(a, mask);
                    358:                    if (e >= 0) {
                    359:                        (Scr_kluge *) a += width;
                    360:                        e -= dx;
                    361:                    }
                    362:                    if (mask & uPC_HIGH_BIT) {
                    363:                        mask = 1;
                    364:                        a++;
                    365:                    } else
                    366:                        mask <<= 1;
                    367:                    e += dy;
                    368:                }
                    369:            } else {            /* dx > 0, dy <= 0, dx <= dy */
                    370:                dx <<= 1;
                    371:                e = dx - dy;
                    372:                c = dy + 2;
                    373:                dy <<= 1;
                    374:
                    375:                while (--c) {
                    376:                    uPC_PLOT(a, mask);
                    377:                    if (e >= 0) {
                    378:                        if (mask & uPC_HIGH_BIT) {
                    379:                            mask = 1;
                    380:                            a++;
                    381:                        } else
                    382:                            mask <<= 1;
                    383:                        e -= dy;
                    384:                    }
                    385:                    (Scr_kluge *) a += width;
                    386:                    e += dx;
                    387:                }
                    388:            }
                    389:        }
                    390:     } else {
                    391:        dx = -dx;
                    392:        if ((dy = y2 - y1) > 0) {
                    393:            if (dx > dy) {      /* dx <= 0, dy > 0, dx > dy */
                    394:                dy <<= 1;
                    395:                e = dy - dx;
                    396:                c = dx + 2;
                    397:                dx <<= 1;
                    398:
                    399:                while (--c) {
                    400:                    uPC_PLOT(a, mask);
                    401:                    if (e >= 0) {
                    402:                        (Scr_kluge *) a -= width;
                    403:                        e -= dx;
                    404:                    }
                    405:                    if (mask & 1) {
                    406:                        mask = uPC_HIGH_BIT;
                    407:                        a--;
                    408:                    } else
                    409:                        mask >>= 1;
                    410:                    e += dy;
                    411:                }
                    412:            } else {            /* dx <= 0, dy > 0, dx <= dy */
                    413:                dx <<= 1;
                    414:                e = dx - dy;
                    415:                c = dy + 2;
                    416:                dy <<= 1;
                    417:
                    418:                while (--c) {
                    419:                    uPC_PLOT(a, mask);
                    420:                    if (e >= 0) {
                    421:                        if (mask & 1) {
                    422:                            mask = uPC_HIGH_BIT;
                    423:                            a--;
                    424:                        } else
                    425:                            mask >>= 1;
                    426:                        e -= dy;
                    427:                    }
                    428:                    (Scr_kluge *) a -= width;
                    429:                    e += dx;
                    430:                }
                    431:            }
                    432:        } else {
                    433:            dy = -dy;
                    434:            if (dx > dy) {      /* dx <= 0, dy <= 0, dx > dy */
                    435:                dy <<= 1;
                    436:                e = dy - dx;
                    437:                c = dx + 2;
                    438:                dx <<= 1;
                    439:
                    440:                while (--c) {
                    441:                    uPC_PLOT(a, mask);
                    442:                    if (e >= 0) {
                    443:                        (Scr_kluge *) a += width;
                    444:                        e -= dx;
                    445:                    }
                    446:                    if (mask & 1) {
                    447:                        mask = uPC_HIGH_BIT;
                    448:                        a--;
                    449:                    } else
                    450:                        mask >>= 1;
                    451:                    e += dy;
                    452:                }
                    453:            } else {            /* dx <= 0, dy <= 0, dx <= dy */
                    454:                dx <<= 1;
                    455:                e = dx - dy;
                    456:                c = dy + 2;
                    457:                dy <<= 1;
                    458:
                    459:                while (--c) {
                    460:                    uPC_PLOT(a, mask);
                    461:                    if (e >= 0) {
                    462:                        if (mask & 1) {
                    463:                            mask = uPC_HIGH_BIT;
                    464:                            a--;
                    465:                        } else
                    466:                            mask >>= 1;
                    467:                        e -= dy;
                    468:                    }
                    469:                    (Scr_kluge *) a += width;
                    470:                    e += dx;
                    471:                }
                    472:            }
                    473:        }
                    474:     }
                    475: }
                    476:
                    477:
                    478: #ifdef uPC_NOT_USED
                    479: /* Added by Russell Lang, eln272v@monu1.cc.monash.oz
                    480:    This placement to the nearest character cell worked, and I'm leaving
                    481:    it here so the calculations involved won't be lost!  (jdc)
                    482: */
                    483: TERM_PUBLIC void uPC_put_text(x, y, str)
                    484: unsigned int x, y;
                    485: char str[];
                    486: {
                    487: /* This routine puts the text at the cursor location nearest
                    488:    to (x,y).  Obviously the exact postion would look better */
                    489:
                    490: /* Just use the ANSI escape sequence CUP (iswind said that was ok!) */
                    491:     printf("\033[%d;%dH%s\033[25;1H",
                    492:           (int) (24 - (y - uPC_VCHAR / 2) * 25 / uPC_YMAX),
                    493:           (int) (x * 80 / uPC_XMAX), str);
                    494:     fflush(stdout);
                    495: }
                    496:
                    497: #endif
                    498:
                    499:
                    500: TERM_PUBLIC void uPC_put_text(x, y, str)
                    501: unsigned int x, y;
                    502: char str[];
                    503: {
                    504:     if (uPC_angle == 1)
                    505:        x += uPC_VCHAR / 2;
                    506:     else
                    507:        y -= uPC_VCHAR / 2;
                    508:
                    509:     switch (uPC_angle) {
                    510:     case 0:
                    511:        for (; *str; ++str, x += uPC_HCHAR)
                    512:            uPC_putc(x, y, *str, uPC_angle);
                    513:        break;
                    514:     case 1:
                    515:        for (; *str; ++str, y += uPC_HCHAR)
                    516:            uPC_putc(x, y, *str, uPC_angle);
                    517:        break;
                    518:     }
                    519: }
                    520:
                    521:
                    522: void uPC_putc(x, y, c, angle)
                    523: unsigned int x, y;
                    524: int c, angle;
                    525: /*
                    526:    Put a character at an x,y location in the bit map (using the fnt5x9
                    527:    array.  This is mostly just copied from the bitmap.c driver.
                    528: */
                    529: {
                    530:     int i, j, k;
                    531:     register Scr_type mask, *a;
                    532:     char_row fc;
                    533:     unsigned int pixelon;
                    534:
                    535:     i = c - ' ';
                    536:     for (j = 0; j < FNT5X9_VBITS; j++) {
                    537:        fc = fnt5x9[i][j];
                    538:        for (k = 0; k < FNT5X9_HBITS; k++) {
                    539:            pixelon = ((unsigned int) (fc)) >> k & 1;
                    540:            if (pixelon) {
                    541:                switch (angle) {
                    542:                case 0:
                    543:                    mask = lookup[x + k + 1 & 0x0f];
                    544:                    a = &uPC_display[(uPC_YSIZE - 1) - (y + j)][(x + k + 1) >> 4];
                    545:                    break;
                    546:                case 1:
                    547:                    mask = lookup[x - j & 0x0f];
                    548:                    a = &uPC_display[(uPC_YSIZE - 1) - (y + k + 1)][(x - j) >> 4];
                    549:                    break;
                    550:                }
                    551:                *(a) |= (mask); /* see uPC_PLOT macro */
                    552:            }
                    553:        }
                    554:     }
                    555: }
                    556:
                    557:
                    558: TERM_PUBLIC int uPC_text_angle(ang)
                    559: int ang;
                    560: {
                    561:     uPC_angle = ang;
                    562:     return TRUE;
                    563: }
                    564:
                    565:
                    566: TERM_PUBLIC void uPC_reset()
                    567: {
                    568: /* Reset window to normal size. */
                    569:     uPC_fixwind(0);
                    570: }
                    571:
                    572:
                    573:
                    574: void uPC_fixwind(signo)
                    575: int signo;
                    576: {
                    577:     static struct uwdata wreset =
                    578:     {0, 12, 720, 288, 0x1};
                    579:     struct utdata ut;
                    580:
                    581: /* Reset the window to the right size. */
                    582:     ioctl(1, WIOCSETD, &wreset);       /* 0, not wncur here! */
                    583:
                    584: /* Scroll the screen once. (avoids typing over the same line) */
                    585:     putc('\n', stderr);
                    586:
                    587:     if (signo) {
                    588:        if (signo == SIGILL || signo == SIGTRAP || signo == SIGPWR)
                    589:            signal(signo, SIG_DFL);
                    590:        kill(0, signo);         /* Redo the signal (as if we never trapped it). */
                    591:     }
                    592: }
                    593: #endif /* TERM_BODY */
                    594:
                    595: #ifdef TERM_TABLE
                    596:
                    597: TERM_TABLE_START(unixpc_driver)
                    598:     "unixpc", "AT&T 3b1 or AT&T 7300 Unix PC",
                    599:     uPC_XMAX, uPC_YMAX, uPC_VCHAR, uPC_HCHAR,
                    600:     uPC_VTIC, uPC_HTIC, options_null, uPC_init, uPC_reset,
                    601:     uPC_text, null_scale, uPC_graphics, uPC_move, uPC_vector,
                    602:     uPC_linetype, uPC_put_text, uPC_text_angle,
                    603:     null_justify_text, line_and_point, do_arrow, set_font_null
                    604: TERM_TABLE_END(unixpc_driver)
                    605:
                    606: #undef LAST_TERM
                    607: #define LAST_TERM unixpc_driver
                    608:
                    609: #endif /* TERM_TABLE */
                    610: #endif /* TERM_PROTO_ONLY */
                    611:
                    612: #ifdef TERM_HELP
                    613: START_HELP(unixpc)
                    614: "1 unixpc",
                    615: "?commands set terminal unixpc",
                    616: "?set terminal unixpc",
                    617: "?set term unixpc",
                    618: "?terminal unixpc",
                    619: "?term unixpc",
                    620: "?unixpc",
                    621: " The `unixpc` terminal driver supports AT&T 3b1 and AT&T 7300 Unix PC.  It has",
                    622: " no options."
                    623: END_HELP(unixpc)
                    624: #endif /* TERM_HELP */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>