| 32 | 
  | 
 | 
| 33 | 
  | 
char    *progname;                              /* driver name */ | 
| 34 | 
  | 
 | 
| 35 | 
< | 
int     r_clear(), r_paintr(), r_getcur(), r_comout(), r_comin(), r_mycomin(); | 
| 35 | 
> | 
int     r_clear(), r_paintr(), r_getcur(), r_comout(), r_comin(); | 
| 36 | 
  | 
 | 
| 37 | 
  | 
int     (*dev_func[NREQUESTS])() = {            /* request handlers */ | 
| 38 | 
  | 
                r_clear, r_paintr, | 
| 39 | 
  | 
                r_getcur, r_comout, r_comin | 
| 40 | 
  | 
        }; | 
| 41 | 
  | 
 | 
| 42 | 
– | 
char    mybuf[512] = ""; | 
| 42 | 
  | 
 | 
| 44 | 
– | 
char    *mybufp(); | 
| 45 | 
– | 
 | 
| 46 | 
– | 
 | 
| 43 | 
  | 
main(argc, argv)                /* set up communications and main loop */ | 
| 44 | 
  | 
int     argc; | 
| 45 | 
  | 
char    *argv[]; | 
| 62 | 
  | 
        if ((dev = dinit(argv[0], argv[3])) == NULL) | 
| 63 | 
  | 
                quit(1); | 
| 64 | 
  | 
        putw(COM_RECVM, devout);                /* verify initialization */ | 
| 65 | 
+ | 
        fwrite((char *)&dev->pixaspect, sizeof(dev->pixaspect), 1, devout); | 
| 66 | 
  | 
        putw(dev->xsiz, devout); | 
| 67 | 
  | 
        putw(dev->ysiz, devout); | 
| 68 | 
  | 
        fflush(devout); | 
| 103 | 
  | 
        int     xmin, ymin, xmax, ymax; | 
| 104 | 
  | 
 | 
| 105 | 
  | 
        nrays += 5;                     /* pretend */ | 
| 106 | 
< | 
        fread(col, sizeof(COLOR), 1, devin); | 
| 106 | 
> | 
        fread((char *)col, sizeof(COLOR), 1, devin); | 
| 107 | 
  | 
        xmin = getw(devin); ymin = getw(devin); | 
| 108 | 
  | 
        xmax = getw(devin); ymax = getw(devin); | 
| 109 | 
  | 
        (*dev->paintr)(col, xmin, ymin, xmax, ymax); | 
| 145 | 
  | 
 | 
| 146 | 
  | 
r_comin()                               /* read string from command line */ | 
| 147 | 
  | 
{ | 
| 148 | 
< | 
        char    buf[256]; | 
| 148 | 
> | 
        char    buf[256], *prompt; | 
| 149 | 
> | 
                                        /* get prompt */ | 
| 150 | 
> | 
        if (getc(devin)) { | 
| 151 | 
> | 
                mygets(buf, devin); | 
| 152 | 
> | 
                prompt = buf; | 
| 153 | 
> | 
        } else | 
| 154 | 
> | 
                prompt = NULL; | 
| 155 | 
  | 
                                        /* get string */ | 
| 156 | 
< | 
        (*dev->comin)(buf); | 
| 156 | 
> | 
        (*dev->comin)(buf, prompt); | 
| 157 | 
  | 
                                        /* reply */ | 
| 158 | 
  | 
        putc(COM_COMIN, devout); | 
| 159 | 
  | 
        myputs(buf, devout); | 
| 186 | 
  | 
} | 
| 187 | 
  | 
 | 
| 188 | 
  | 
 | 
| 186 | 
– | 
r_mycomin()                             /* get command from my buffer */ | 
| 187 | 
– | 
{ | 
| 188 | 
– | 
        register char   *cp; | 
| 189 | 
– | 
                                                /* get next command */ | 
| 190 | 
– | 
        for (cp = mybuf; *cp != '\n'; cp++) | 
| 191 | 
– | 
                ; | 
| 192 | 
– | 
        *cp++ = '\0'; | 
| 193 | 
– | 
        (*dev->comout)(mybuf);                  /* echo my command */ | 
| 194 | 
– | 
                                                /* send it as reply */ | 
| 195 | 
– | 
        putc(COM_COMIN, devout); | 
| 196 | 
– | 
        myputs(mybuf, devout); | 
| 197 | 
– | 
        fflush(devout); | 
| 198 | 
– | 
                                                /* get next command */ | 
| 199 | 
– | 
        (*dev->comout)("\n"); | 
| 200 | 
– | 
        strcpy(mybuf, cp); | 
| 201 | 
– | 
        if (mybuf[0]) | 
| 202 | 
– | 
                kill(getppid(), SIGIO);                 /* signal more */ | 
| 203 | 
– | 
        else | 
| 204 | 
– | 
                dev_func[COM_COMIN] = r_comin;          /* else reset */ | 
| 205 | 
– | 
} | 
| 206 | 
– | 
 | 
| 207 | 
– | 
 | 
| 189 | 
  | 
stderr_v(s)                             /* put string to stderr */ | 
| 190 | 
  | 
register char  *s; | 
| 191 | 
  | 
{ | 
| 200 | 
  | 
                fflush(stderr); | 
| 201 | 
  | 
                inline = 0; | 
| 202 | 
  | 
        } | 
| 222 | 
– | 
} | 
| 223 | 
– | 
 | 
| 224 | 
– | 
 | 
| 225 | 
– | 
char * | 
| 226 | 
– | 
mybufp()                                /* return buffer for my command */ | 
| 227 | 
– | 
{ | 
| 228 | 
– | 
        if (dev_func[COM_COMIN] != r_mycomin) { | 
| 229 | 
– | 
                dev_func[COM_COMIN] = r_mycomin; | 
| 230 | 
– | 
                kill(getppid(), SIGIO); | 
| 231 | 
– | 
        } | 
| 232 | 
– | 
        return(mybuf+strlen(mybuf)); | 
| 233 | 
– | 
} | 
| 234 | 
– | 
 | 
| 235 | 
– | 
 | 
| 236 | 
– | 
repaint(xmin, ymin, xmax, ymax)         /* repaint section of display */ | 
| 237 | 
– | 
int     xmin, ymin, xmax, ymax; | 
| 238 | 
– | 
{ | 
| 239 | 
– | 
        sprintf(mybufp(), "repaint %d %d %d %d\n", | 
| 240 | 
– | 
                        xmin, ymin, xmax, ymax); | 
| 203 | 
  | 
} |