|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include <signal.h> ! 3: #include "pico.h" ! 4: ! 5: extern struct SRC src[MANY]; ! 6: extern short CURSCRATCH, CUROLD; ! 7: extern void onquit(); ! 8: ! 9: #define lowbyte(A) (A)&0377 ! 10: #define higbyte(A) ((A) >> 8) & 07 ! 11: ! 12: int om_fd; ! 13: char om_buf[1024]; ! 14: ! 15: char * setxy(p,x,y) ! 16: char *p; ! 17: { ! 18: *p++ = x&0377; ! 19: *p++ = (x >> 8) & 07; ! 20: *p++ = y&0377; ! 21: *p++ = (y >> 8) & 07; ! 22: return(p); ! 23: } ! 24: ! 25: om_open(dev) ! 26: { char buf[10]; ! 27: extern char metheus; ! 28: ! 29: sprintf(buf, "/dev/om%d", dev); ! 30: if ((om_fd = open(buf, 2)) == -1) ! 31: { perror("om_open"); ! 32: metheus = 0; ! 33: return 0; ! 34: } ! 35: reloadmaps(); ! 36: return 1; ! 37: } ! 38: ! 39: om_close() ! 40: { ! 41: close(om_fd); ! 42: } ! 43: ! 44: om_flush(pp) ! 45: char *pp; ! 46: { ! 47: if ((pp-om_buf)%2) *pp++ = 0; ! 48: write(om_fd, om_buf, pp-om_buf); ! 49: } ! 50: ! 51: metreset() ! 52: { register char *pp = om_buf; ! 53: ! 54: *pp++ = 'O'; ! 55: *pp++ = 0377; /* WRMASK */ ! 56: signal(SIGINT, SIG_IGN); ! 57: metfill(0, Old->sx, Old->sy, Old->ex, Old->ey); ! 58: om_flush(pp); ! 59: } ! 60: ! 61: metfill(col, x1, y1, x2, y2) ! 62: { ! 63: register char *pp = om_buf; ! 64: ! 65: *pp++ = 'N'; ! 66: *pp++ = col; ! 67: *pp++ = 'R'; pp = setxy(pp, x1, y1); ! 68: *pp++ = 'S'; pp = setxy(pp, x2, y2); ! 69: *pp++ = 'd'; om_flush(pp); ! 70: } ! 71: ! 72: set_color(n) ! 73: { ! 74: register char *pp; ! 75: pp = om_buf; ! 76: *pp++ = 'N'; ! 77: *pp++ = n; ! 78: om_flush(pp); ! 79: } ! 80: ! 81: metwi(row, length, xoff, height) ! 82: unsigned char *row; ! 83: short length, xoff, height; ! 84: { ! 85: unsigned char mcode[16]; ! 86: short xend; ! 87: ! 88: xend = xoff + length; ! 89: ! 90: mcode[0] = 0x4F; ! 91: mcode[1] = 0377; /* WRMASK */ ! 92: ! 93: mcode[2] = 0x52; /* set P1 */ ! 94: mcode[3] = lowbyte(xoff); mcode[4] = higbyte(xoff); ! 95: ! 96: mcode[5] = mcode[10] = lowbyte(height); ! 97: mcode[6] = mcode[11] = higbyte(height); ! 98: mcode[7] = 0x53; /* set P2 */ ! 99: mcode[8] = lowbyte(xend); mcode[9] = higbyte(xend); ! 100: ! 101: mcode[12] = 0; ! 102: mcode[13] = 'o'; ! 103: ! 104: signal(SIGINT, SIG_IGN); ! 105: write(om_fd, mcode, 14); ! 106: write(om_fd, row, length); ! 107: signal(SIGINT, onquit); ! 108: } ! 109: ! 110: metri(b, x, y, d) ! 111: char *b; ! 112: { ! 113: char *bp = b; ! 114: char *pp = om_buf; ! 115: ! 116: signal(SIGINT, SIG_IGN); ! 117: *pp++ = 'R'; pp = setxy(pp, x, y); ! 118: *pp++ = 'S'; pp = setxy(pp, x+d-1, y); ! 119: *pp++ = 'n'; om_flush(pp); ! 120: read(om_fd, bp, d); ! 121: signal(SIGINT, onquit); ! 122: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.