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

Annotation of OpenXM_contrib/gnuplot/term/pm.trm, Revision 1.1

1.1     ! maekawa     1: /*
        !             2:  * $Id: $
        !             3:  */
        !             4:
        !             5: /* GNUPLOT - pm.trm */
        !             6:
        !             7: /*[
        !             8:  * Copyright 1992, 1993, 1998
        !             9:  *
        !            10:  * Permission to use, copy, and distribute this software and its
        !            11:  * documentation for any purpose with or without fee is hereby granted,
        !            12:  * provided that the above copyright notice appear in all copies and
        !            13:  * that both that copyright notice and this permission notice appear
        !            14:  * in supporting documentation.
        !            15:  *
        !            16:  * Permission to modify the software is granted, but not the right to
        !            17:  * distribute the complete modified source code.  Modifications are to
        !            18:  * be distributed as patches to the released version.  Permission to
        !            19:  * distribute binaries produced by compiling modified sources is granted,
        !            20:  * provided you
        !            21:  *   1. distribute the corresponding source modifications from the
        !            22:  *    released version in the form of a patch file along with the binaries,
        !            23:  *   2. add special version identification to distinguish your version
        !            24:  *    in addition to the base release version number,
        !            25:  *   3. provide your name and address as the primary contact for the
        !            26:  *    support of your modified version, and
        !            27:  *   4. retain our contact information in regard to use of the base
        !            28:  *    software.
        !            29:  * Permission to distribute the released version of the source code along
        !            30:  * with corresponding source modifications in the form of a patch file is
        !            31:  * granted with same provisions 2 through 4 for binary distributions.
        !            32:  *
        !            33:  * This software is provided "as is" without express or implied warranty
        !            34:  * to the extent permitted by applicable law.
        !            35: ]*/
        !            36:
        !            37: /*
        !            38:  *    pm.trm  --- inboard terminal driver for Presentation Manager
        !            39:  *            --- after X-11 driver, by R.W.Fearick 31/1/92.
        !            40:  *    v1.1 11/8/92 -- speed things up
        !            41:  */
        !            42:
        !            43: #include "driver.h"
        !            44:
        !            45: #ifdef TERM_REGISTER
        !            46: register_term(pm)
        !            47: #endif
        !            48:
        !            49: #ifdef TERM_PROTO
        !            50: TERM_PUBLIC void PM_init __PROTO((void));
        !            51: TERM_PUBLIC void PM_options __PROTO((void));
        !            52: TERM_PUBLIC void PM_reset __PROTO((void));
        !            53: TERM_PUBLIC void PM_text __PROTO((void));
        !            54: TERM_PUBLIC void PM_graphics __PROTO((void));
        !            55: TERM_PUBLIC void PM_linetype __PROTO((int lt));
        !            56: TERM_PUBLIC void PM_move __PROTO((unsigned int x, unsigned int y));
        !            57: TERM_PUBLIC void PM_vector __PROTO((unsigned int x, unsigned int y));
        !            58: TERM_PUBLIC int PM_text_angle __PROTO((int ang));
        !            59: TERM_PUBLIC void PM_put_text __PROTO((unsigned int x, unsigned int y, char *str));
        !            60: TERM_PUBLIC int PM_justify_text __PROTO((enum JUSTIFY mode));
        !            61: TERM_PUBLIC void PM_point __PROTO((unsigned int x, unsigned int y, int number));
        !            62: TERM_PUBLIC void PM_suspend __PROTO((void));
        !            63: TERM_PUBLIC void PM_resume __PROTO((void));
        !            64: TERM_PUBLIC void PM_linewidth __PROTO((double linewidth));
        !            65:
        !            66: /* define PM world coordinate limits */
        !            67:
        !            68: #define PM_XMAX 19500
        !            69: #define PM_YMAX 12500
        !            70:
        !            71: /* approximations for typical font/screen sizes */
        !            72: #define PM_VCHAR (550)
        !            73: #define PM_HCHAR (220)
        !            74: #define PM_VTIC (200)
        !            75: #define PM_HTIC (200)
        !            76: #endif
        !            77:
        !            78: #ifdef TERM_BODY
        !            79:
        !            80: #include <stdio.h>
        !            81: #include <process.h>
        !            82: #include <io.h>
        !            83: #define INCL_DOSPROCESS
        !            84: #define INCL_DOSSEMAPHORES
        !            85: #define INCL_DOSMISC
        !            86: #define INCL_DOSMODULEMGR
        !            87: #include <os2.h>
        !            88:
        !            89:
        !            90: /* graphics commands */
        !            91: #define SET_GRAPHICS    'G'
        !            92: #define SET_TEXT        'E'
        !            93: #define SET_LINE        'L'
        !            94: #define SET_LINEWIDTH   'W'
        !            95: #define SET_ANGLE       'A'
        !            96: #define SET_JUSTIFY     'J'
        !            97: #define SET_POINTMODE   'D'
        !            98: #define SET_FONT        'F'
        !            99: #define SET_OPTIONS     'O'
        !           100: #define GR_QUERY        'Q'
        !           101: #define GR_SUSPEND      'E'    /*'s' */
        !           102: #define GR_RESUME       'r'
        !           103: #define GR_MOVE         'M'
        !           104: #define GR_DRAW         'V'
        !           105: #define GR_RESET        'R'
        !           106: #define GR_TEXT         'T'
        !           107: #define GR_PAUSE        'P'
        !           108: #define GR_HELP         'H'
        !           109: #define PM_nopts 1
        !           110:
        !           111: /* path for pm program */
        !           112: static char PM_path[256] = "";
        !           113: /* track mode to avoid redraw after hitting break */
        !           114: static int PM_mode = 0;
        !           115: static HEV hev;
        !           116: static int PM_termmode = 0;
        !           117: static int PM_must_reset_opts = FALSE;
        !           118: static int PM_must_abort = 0;
        !           119:
        !           120: static char PM_opts[256] = "";
        !           121: static int PM_optargs = 0;
        !           122: static int PM_plot_number = 0;
        !           123: static char PM_term_title[128] = "";
        !           124:
        !           125: FILE *fopen();
        !           126: static FILE *PM_pipe = NULL;
        !           127: static FILE *PM_savepipe = NULL;
        !           128:
        !           129: int PM_pause __PROTO((char *str));
        !           130: void PM_setup(void);
        !           131: static void PM_reset_opts(void);
        !           132: static void PM_query(void);
        !           133: static void PM_make_servername(char *);
        !           134: static void PM_abortplot();
        !           135:
        !           136: TERM_PUBLIC void PM_init()
        !           137: {
        !           138:     static char buffer[1024];
        !           139:     int pid;
        !           140:     int rc;
        !           141:     int spawnmode;
        !           142:     PPIB pib;
        !           143:     PTIB tib;
        !           144:     char semname[32];
        !           145:     char pipename[32];
        !           146:     char tempname[32];
        !           147:
        !           148:     term_force_init = TRUE;
        !           149:     if (PM_savepipe != NULL && PM_termmode == 0) {
        !           150:        PM_pipe = PM_savepipe;
        !           151:     }
        !           152:     if ((PM_pipe == NULL) && (PM_termmode & 2)) {
        !           153:        /* check if term is running */
        !           154:        PM_make_servername(tempname);
        !           155:        strcpy(pipename, "\\pipe\\");
        !           156:        strcat(pipename, tempname);
        !           157: //        sprintf( pipename, "\\pipe\\gpServ%d", PM_plot_number ) ;
        !           158:        DosGetInfoBlocks(&tib, &pib);
        !           159:        PM_pipe = fopen(pipename, "r+b");
        !           160:        if (PM_pipe != NULL) {
        !           161:            setvbuf(PM_pipe, buffer, _IOFBF, 1024);
        !           162:            pid = pib->pib_ulpid;
        !           163:            fwrite(&pid, 1, 4, PM_pipe);
        !           164:            fflush(PM_pipe);
        !           165:            /* set new options */
        !           166: //            PM_reset_opts() ;
        !           167:        }
        !           168:     }
        !           169:     /* else we start up term here */
        !           170:     if (PM_pipe == NULL) {
        !           171:        if (PM_termmode & 2) {
        !           172:            PM_make_servername(tempname);
        !           173: //            sprintf( tempname, "gpServ%d", PM_plot_number ) ;
        !           174:        } else {
        !           175:            static int gpid = 0;
        !           176:            gpid++;
        !           177:            sprintf(tempname, "gp%X%d", getpid(), gpid);
        !           178:        }
        !           179:        strcpy(semname, "\\sem32\\");
        !           180:        strcpy(pipename, "\\pipe\\");
        !           181:        strcat(semname, tempname);
        !           182:        strcat(pipename, tempname);
        !           183:        strcat(PM_path, "\\gnupmdrv.exe");
        !           184:        rc = access(PM_path, 0);
        !           185:        /* find exe file */
        !           186:        if (rc != 0)
        !           187:            rc = DosSearchPath(0x0002,  /* search GNUPLOT environment */
        !           188:                               "GNUPLOT",
        !           189:                               "gnupmdrv.exe",
        !           190:                               PM_path,
        !           191:                               256);
        !           192:
        !           193:        if (rc != 0)
        !           194:            rc = DosSearchPath(0x0003,  /* then try current directory & path */
        !           195:                               "PATH",
        !           196:                               "gnupmdrv.exe",
        !           197:                               PM_path,
        !           198:                               256);
        !           199:        if (rc != 0) {
        !           200:            fputs("Cannot find gnupmdrv.exe !\n", stderr);
        !           201:            exit(3);
        !           202:        }
        !           203:        rc = DosCreateEventSem(semname, &hev, 1, 0);
        !           204:        if (rc != 0) {
        !           205:            fputs("Cannot create semaphore !\n", stderr);
        !           206:            exit(3);
        !           207:        }
        !           208:        spawnmode = P_SESSION | P_DEFAULT;
        !           209:        if (PM_optargs != 0)
        !           210:            spawnmode |= P_UNRELATED;
        !           211:        pid = spawnl(spawnmode, PM_path, "GnuplotPM", tempname, PM_opts, NULL);
        !           212:        if (pid == -1) {
        !           213:            fputs("Cannot spawn gnupmdrv.exe !\n", stderr);
        !           214:            exit(3);
        !           215:        }
        !           216:        DosGetInfoBlocks(&tib, &pib);
        !           217:        DosWaitEventSem(hev, 10000);
        !           218:        DosCloseEventSem(hev);
        !           219:        PM_pipe = fopen(pipename, "r+b");
        !           220:        if (PM_pipe == NULL) {
        !           221:            fputs("Cannot open pipe to gnupmdrv.exe !\n", stderr);
        !           222:            exit(3);
        !           223:        } else if (PM_termmode == 0)
        !           224:            PM_savepipe = PM_pipe;
        !           225:        setvbuf(PM_pipe, buffer, _IOFBF, 1024);
        !           226:        pid = pib->pib_ulpid;
        !           227:        fwrite(&pid, 1, 4, PM_pipe);
        !           228:        fflush(PM_pipe);
        !           229:     } else {
        !           230:        if (PM_must_reset_opts)
        !           231:            PM_reset_opts();
        !           232:     }
        !           233:     PM_query();
        !           234: }
        !           235:
        !           236: static void PM_make_servername(char *str)
        !           237: {
        !           238:     if (PM_term_title[0]) {
        !           239:        int hash = 0;
        !           240:        char *p = PM_term_title + 1;
        !           241:        int match = PM_term_title[0];
        !           242:        while (*p != match) {
        !           243:            hash = (hash << 1) + hash + *p++;
        !           244:        }
        !           245:        hash %= (256 * 256 * 256 - 1);
        !           246:        sprintf(str, "gp%x", hash);
        !           247:     } else
        !           248:        sprintf(str, "gpServ%d", PM_plot_number);
        !           249: }
        !           250:
        !           251:
        !           252: TERM_PUBLIC void PM_options()
        !           253: {
        !           254:     int old_termmode = PM_termmode;
        !           255:     PM_termmode = 0;
        !           256:     term_options[0] = NUL;
        !           257:     PM_term_title[0] = NUL;
        !           258:     PM_opts[0] = NUL;
        !           259:     PM_optargs = 0;
        !           260:     while (!END_OF_COMMAND) {
        !           261:        if (almost_equals(c_token, "pe$rsist")) {
        !           262:            strcat(PM_opts, "-p ");
        !           263:            strcat(term_options, "persist ");
        !           264:            PM_termmode |= 1;
        !           265:            PM_optargs = 1;
        !           266:            if (!(old_termmode & 1))
        !           267:                PM_pipe = NULL;
        !           268:        } else if (almost_equals(c_token, "s$erver")) {
        !           269:            strcat(PM_opts, "-s ");
        !           270:            strcat(term_options, "server ");
        !           271:            PM_termmode |= 2;
        !           272:            PM_optargs = 1;
        !           273:            if (!(old_termmode & 2))
        !           274:                PM_pipe = NULL;
        !           275:            if (isanumber(c_token + 1)) {
        !           276:                struct value t;
        !           277:                char *p = PM_opts + strlen(PM_opts);
        !           278:                c_token++;
        !           279:                PM_plot_number = (int) real(const_express(&t));
        !           280:                sprintf(p, "%d", PM_plot_number);
        !           281:                sprintf(term_options + strlen(term_options), "%d", PM_plot_number);
        !           282:            }
        !           283:        } else if (almost_equals(c_token, "w$idelines")) {
        !           284:            strcat(PM_opts, "-w ");
        !           285:            strcat(term_options, "widelines ");
        !           286:            PM_optargs = 1;
        !           287:        } else if (almost_equals(c_token, "e$nhanced")) {
        !           288:            strcat(PM_opts, "-e ");
        !           289:            strcat(term_options, "enhanced ");
        !           290:            PM_optargs = 1;
        !           291:        } else if (isstring(c_token)) {
        !           292:            copy_str(PM_term_title, c_token, 127);
        !           293:        }
        !           294: #if 0
        !           295:        else if (almost_equals(c_token, "po$rtrait")) {
        !           296:            strcat(PM_opts, "-l ");
        !           297:            strcat(term_options, "portrait ");
        !           298:            PM_optargs = 1;
        !           299:        }
        !           300: #endif
        !           301:        c_token++;
        !           302:     }
        !           303:     if (PM_term_title[0]) {
        !           304:        strcat(PM_opts, " ");
        !           305:        strcat(term_options, " ");
        !           306:        strcat(PM_opts, PM_term_title);
        !           307:        strcat(term_options, PM_term_title);
        !           308:     }
        !           309:     PM_must_reset_opts = TRUE;
        !           310: }
        !           311:
        !           312: static void PM_reset_opts()
        !           313: {
        !           314:     int len;
        !           315:     putc(SET_OPTIONS, PM_pipe);
        !           316:     len = strlen(PM_opts) + 1;
        !           317:     fwrite(&len, sizeof(int), 1, PM_pipe);
        !           318:     fwrite(PM_opts, 1, len, PM_pipe);
        !           319:     for (len = sizeof(int) - len % sizeof(int); len > 0; len--) {
        !           320:        /* pad rest of int with zeros */
        !           321:        putc(NUL, PM_pipe);
        !           322:     }
        !           323:     fflush(PM_pipe);
        !           324:     PM_must_reset_opts = FALSE;
        !           325: }
        !           326:
        !           327: static void PM_query()
        !           328: {
        !           329:     int rc;
        !           330:     ULONG cbR;
        !           331:     putc(GR_QUERY, PM_pipe);
        !           332:     fflush(PM_pipe);
        !           333:     rc = DosRead(fileno(PM_pipe), &term->h_char, sizeof(int), &cbR);
        !           334:     rc = DosRead(fileno(PM_pipe), &term->v_char, sizeof(int), &cbR);
        !           335: }
        !           336:
        !           337: TERM_PUBLIC void PM_reset()
        !           338: {
        !           339:     putc(GR_RESET, PM_pipe);
        !           340:     fflush(PM_pipe);
        !           341:     term_force_init = FALSE;
        !           342:     if (PM_termmode > 0) {
        !           343:        fclose(PM_pipe);
        !           344:        PM_pipe = NULL;
        !           345:     }
        !           346: }
        !           347:
        !           348: TERM_PUBLIC void PM_suspend()
        !           349: {
        !           350:     putc(GR_SUSPEND, PM_pipe);
        !           351:     fflush(PM_pipe);
        !           352: }
        !           353:
        !           354: TERM_PUBLIC void PM_resume()
        !           355: {
        !           356:     putc(GR_RESUME, PM_pipe);
        !           357:     fflush(PM_pipe);
        !           358: }
        !           359:
        !           360: TERM_PUBLIC void PM_text()
        !           361: {
        !           362:     fflush(PM_pipe);
        !           363:     if (PM_mode != SET_TEXT) {
        !           364:        putc(SET_TEXT, PM_pipe);
        !           365:        fflush(PM_pipe);
        !           366: //        keep_term_initialised = term_initialised ;
        !           367: //        term_initialised = FALSE ; /* need to force init */
        !           368:     }
        !           369:     PM_mode = SET_TEXT;
        !           370: }
        !           371:
        !           372: TERM_PUBLIC void PM_graphics()
        !           373: {
        !           374:     putc(SET_GRAPHICS, PM_pipe);
        !           375:     fflush(PM_pipe);
        !           376:     PM_mode = SET_GRAPHICS;
        !           377: }
        !           378:
        !           379: TERM_PUBLIC void PM_move(unsigned int x, unsigned int y)
        !           380: {
        !           381:     if (PM_must_abort)
        !           382:        PM_abortplot();
        !           383:     putc(GR_MOVE, PM_pipe);
        !           384:     fwrite(&x, sizeof(int), 1, PM_pipe);
        !           385:     fwrite(&y, sizeof(int), 1, PM_pipe);
        !           386: }
        !           387:
        !           388: TERM_PUBLIC void PM_vector(unsigned int x, unsigned int y)
        !           389: {
        !           390:     if (PM_must_abort)
        !           391:        PM_abortplot();
        !           392:     putc(GR_DRAW, PM_pipe);
        !           393:     fwrite(&x, sizeof(int), 1, PM_pipe);
        !           394:     fwrite(&y, sizeof(int), 1, PM_pipe);
        !           395: }
        !           396:
        !           397: TERM_PUBLIC void PM_linetype(int lt)
        !           398: {
        !           399:     putc(SET_LINE, PM_pipe);
        !           400:     fwrite(&lt, sizeof(int), 1, PM_pipe);
        !           401: }
        !           402:
        !           403: TERM_PUBLIC int PM_text_angle(int ang)
        !           404: {
        !           405:     putc(SET_ANGLE, PM_pipe);
        !           406:     fwrite(&ang, sizeof(int), 1, PM_pipe);
        !           407:     return (TRUE);
        !           408: }
        !           409:
        !           410: TERM_PUBLIC void PM_put_text(unsigned int x, unsigned int y, char *str)
        !           411: {
        !           412:     int len;
        !           413:     if (PM_must_abort)
        !           414:        PM_abortplot();
        !           415:     putc(GR_TEXT, PM_pipe);
        !           416:     fwrite(&x, sizeof(int), 1, PM_pipe);
        !           417:     fwrite(&y, sizeof(int), 1, PM_pipe);
        !           418:     len = strlen(str) + 1;
        !           419:     fwrite(&len, sizeof(int), 1, PM_pipe);
        !           420:     fwrite(str, 1, len, PM_pipe);
        !           421:     for (len = sizeof(int) - len % sizeof(int); len > 0; len--) {
        !           422:        /* pad rest of int with zeros */
        !           423:        putc(NUL, PM_pipe);
        !           424:     }
        !           425: }
        !           426:
        !           427: TERM_PUBLIC int PM_justify_text(enum JUSTIFY mode)
        !           428: {
        !           429:     putc(SET_JUSTIFY, PM_pipe);
        !           430:     fwrite(&mode, sizeof(int), 1, PM_pipe);
        !           431:     return (TRUE);
        !           432: }
        !           433:
        !           434: TERM_PUBLIC int PM_set_font(font) /* Entry font added by DJL */
        !           435: char *font;
        !           436: {
        !           437:     int len, fontsize;
        !           438:     char *p;
        !           439:     p = strchr(font, ',');
        !           440:     if (p == NULL || *p == NUL)
        !           441:        fontsize = 14;
        !           442:     else
        !           443:        fontsize = strtol(p + 1, NULL, 10);
        !           444:     if (fontsize <= 0)
        !           445:        fontsize = 14;
        !           446:     putc(SET_FONT, PM_pipe);
        !           447:     len = strlen(font) + 1;
        !           448:     fwrite(&len, sizeof(int), 1, PM_pipe);
        !           449:     fwrite(font, 1, len, PM_pipe);
        !           450:     for (len = sizeof(int) - len % sizeof(int); len > 0; len--) {
        !           451:        /* pad rest of int with zeros */
        !           452:        putc(NUL, PM_pipe);
        !           453:     }
        !           454:     return TRUE;
        !           455: }
        !           456:
        !           457:
        !           458: TERM_PUBLIC void PM_point(unsigned int x, unsigned int y, int number)
        !           459: /*
        !           460: ** tell the driver we are plotting a point so it can decide whether to
        !           461: ** use colour or not
        !           462: */
        !           463: {
        !           464:     int mode;
        !           465:     mode = 1;
        !           466:     putc(SET_POINTMODE, PM_pipe);
        !           467:     fwrite(&mode, sizeof(int), 1, PM_pipe);
        !           468:     do_point(x, y, number);
        !           469:     mode = 0;
        !           470:     putc(SET_POINTMODE, PM_pipe);
        !           471:     fwrite(&mode, sizeof(int), 1, PM_pipe);
        !           472: }
        !           473:
        !           474: void PM_abortplot()
        !           475: {
        !           476:     PM_must_abort = 0;
        !           477:     term_reset();
        !           478:     (void) putc('\n', stderr);
        !           479:     bail_to_command_line();
        !           480: }
        !           481:
        !           482: void PM_intc_cleanup()
        !           483: {
        !           484:     if (PM_pipe == NULL || PM_mode == SET_TEXT)
        !           485:        PM_abortplot();
        !           486:     PM_must_abort = 1;
        !           487: }
        !           488:
        !           489: void PM_setup(void)
        !           490: /*
        !           491: ** Initial terminal setup
        !           492: */
        !           493: {
        !           494:     char *envpath;
        !           495:     PPIB pib;
        !           496:     PTIB tib;
        !           497:     char path[256], *p;
        !           498:     DosGetInfoBlocks(&tib, &pib);
        !           499:     DosQueryModuleName(pib->pib_hmte, 256, path);
        !           500:     if (PM_path[0] == NUL) {
        !           501:        strcpy(PM_path, path);
        !           502:        p = strrchr(PM_path, '\\');
        !           503:        if (p != NULL)
        !           504:            *p = NUL;
        !           505:        else {
        !           506:            p = strrchr(PM_path, ':');
        !           507:            if (p != NULL)
        !           508:                *(p + 1) = NUL;
        !           509:        }
        !           510:        if (p == NULL)
        !           511:            _getcwd2(PM_path, 256);
        !           512:     }
        !           513:     if (getenv("GNUHELP") == NULL) {
        !           514:        int n = strlen("GNUHELP") + strlen(PM_path) + strlen("gnuplot.gih") + 3;
        !           515:        envpath = (char *) malloc(n);
        !           516:        if (envpath != NULL) {
        !           517:            strcpy(envpath, "GNUHELP");
        !           518:            strcat(envpath, "=");
        !           519:            strcat(envpath, PM_path);
        !           520:            strcat(envpath, "/");
        !           521:            strcat(envpath, "gnuplot.gih");
        !           522:            putenv(envpath);
        !           523:        }
        !           524:     }
        !           525:     if (getenv("GNUPLOT") == NULL) {
        !           526:        int n = strlen("GNUPLOT") + strlen(PM_path) + 2;
        !           527:        envpath = (char *) malloc(n);
        !           528:        if (envpath != NULL) {
        !           529:            strcpy(envpath, "GNUPLOT");
        !           530:            strcat(envpath, "=");
        !           531:            strcat(envpath, PM_path);
        !           532:            putenv(envpath);
        !           533:        }
        !           534:     }
        !           535: }
        !           536:
        !           537: int PM_pause(char *str)
        !           538: /*
        !           539: ** pause - using message box on PM screen
        !           540: */
        !           541: {
        !           542:     int len, rc;
        !           543:     ULONG cbR;
        !           544:     char buf[256];
        !           545:     char *bp;
        !           546:
        !           547:     if (PM_pipe == NULL)
        !           548:        return 2;
        !           549:     bp = buf;
        !           550:     putc(GR_PAUSE, PM_pipe);
        !           551:     len = strlen(str) + 1;
        !           552:     fwrite(&len, sizeof(int), 1, PM_pipe);
        !           553:     fwrite(str, 1, len, PM_pipe);
        !           554:     for (rc = sizeof(int) - len % sizeof(int); rc > 0; rc--) {
        !           555:        /* pad rest of int with zeros */
        !           556:        putc(NUL, PM_pipe);
        !           557:     }
        !           558:     fflush(PM_pipe);
        !           559:     rc = DosRead(fileno(PM_pipe), &len, sizeof(int), &cbR);
        !           560:     return len;
        !           561: }
        !           562:
        !           563: TERM_PUBLIC void PM_linewidth(double linewidth)
        !           564: {
        !           565:     int lw;
        !           566:     lw = linewidth * 100;
        !           567:     putc(SET_LINEWIDTH, PM_pipe);
        !           568:     fwrite(&lw, sizeof(int), 1, PM_pipe);
        !           569: }
        !           570:
        !           571: #endif
        !           572:
        !           573: #ifdef TERM_TABLE
        !           574: TERM_TABLE_START(PM_driver)
        !           575:     "pm", "OS/2 Presentation Manager",
        !           576:     PM_XMAX, PM_YMAX, PM_VCHAR, PM_HCHAR,
        !           577:     PM_VTIC, PM_HTIC, PM_options, PM_init, PM_reset,
        !           578:     PM_text, null_scale, PM_graphics, PM_move, PM_vector,
        !           579:     PM_linetype, PM_put_text, PM_text_angle,
        !           580:     PM_justify_text, PM_point, do_arrow, PM_set_font,
        !           581:     0 /*pointsize */ , TERM_CAN_MULTIPLOT, PM_suspend, PM_resume,
        !           582:     0 /*fillbox */ , PM_linewidth
        !           583: TERM_TABLE_END(PM_driver)
        !           584:
        !           585: #undef LAST_TERM
        !           586: #define LAST_TERM PM_driver
        !           587:
        !           588: #endif /* TERM_TABLE */
        !           589:
        !           590: #ifdef TERM_HELP
        !           591: START_HELP(pm)
        !           592: "1 pm",
        !           593: "?commands set terminal pm",
        !           594: "?set terminal pm",
        !           595: "?set term pm",
        !           596: "?terminal pm",
        !           597: "?term pm",
        !           598: "?pm",
        !           599: " The `pm` terminal driver provides an OS/2 Presentation Manager window in",
        !           600: " which the graph is plotted.  The window is opened when the first graph is",
        !           601: " plotted.  This window has its own online help as well as facilities for",
        !           602: " printing, copying to the clipboard and some line type and color adjustments.",
        !           603: " The `multiplot` option is supported.",
        !           604: "",
        !           605: " Syntax:",
        !           606: "       set terminal pm {server {n}} {persist} {widelines} {enhanced} {\"title\"}",
        !           607: "",
        !           608: " If `persist` is specified, each graph appears in its own window and all",
        !           609: " windows remain open after `gnuplot` exits.  If `server` is specified, all",
        !           610: " graphs appear in the same window, which remains open when `gnuplot` exits.",
        !           611: " This option takes an optional numerical argument which specifies an instance",
        !           612: " of the server process.  Thus multiple server windows can be in use at the",
        !           613: " same time.",
        !           614: "",
        !           615: " If `widelines` is specified, all plots will be drawn with wide lines.  If",
        !           616: " `enhanced` is specified, sub- and superscripts and multiple fonts are",
        !           617: " enabled using the same syntax as the `enhanced postscript` option (see",
        !           618: " `set terminal postscript enhanced` for details).  Font names for the basic",
        !           619: " PostScript fonts may be abbreviated to single letters.",
        !           620: "",
        !           621: " If `title` is specified, it will be used as the title of the plot window.",
        !           622: " It will also be used as the name of the server instance, and will override",
        !           623: " the optional numerical argument.",
        !           624: "",
        !           625: " Linewidths may be changed with `set linestyle`."
        !           626: END_HELP(pm)
        !           627: #endif /* TERM_HELP */

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