|
|
1.1 ! root 1: /* ! 2: %Z% %M% version %I% %Q%of %H% %T% ! 3: Last Delta: %G% %U% to %P% ! 4: */ ! 5: ! 6: #include "cip.h" ! 7: ! 8: #define Xbut1 (Xbut+(Xmax-Xbut)/6) ! 9: #define Xbut2 ((Xmax+Xbut)>>1) ! 10: #define Xbut3 (Xmax-(Xmax-Xbut)/6) ! 11: #define Ybut123 (Ybut+((ButSize*3)>>2)) ! 12: ! 13: Point jchar(); ! 14: ! 15: int gridState = GRIDoff; ! 16: int videoState = WHITEfield; ! 17: Rectangle brushes[NUMBR+2]; ! 18: int currentBrush = {-1}; ! 19: ! 20: int copyFlag = 0; ! 21: int thingSelected = 0; ! 22: int editDepth = 0; ! 23: int buttonState = 0; ! 24: fontBlk *fonts = {(fontBlk *)NULL}; ! 25: ! 26: char *but1text[numButtonStates] = ! 27: {"select","select","select","","","","select","select","no","center"}; ! 28: char *but2text[numButtonStates] = ! 29: {"","draw","edit","draw","","draw box","copy","move","no","move box"}; ! 30: char *but3text[numButtonStates] = ! 31: {"menu","menu","menu","end spline","","","menu","menu","yes",""}; ! 32: extern insertFont (); ! 33: extern void message (); ! 34: extern struct macro *macroList; ! 35: extern Word *saveBase; ! 36: extern Rectangle saveScreenmap; ! 37: extern Cursor hourglass; ! 38: short noSpace; /* Indicates out of initial amount of memory */ ! 39: char *dgetenv(); ! 40: char *strcat(); ! 41: ! 42: #define HEIGHT 10.0 ! 43: #define WIDTH 7.0 ! 44: #define MM_INCH 25.4 ! 45: #define MINBORDER 20 ! 46: ! 47: #ifdef X11 ! 48: jerqsizehints() ! 49: { ! 50: double pix_inch; ! 51: int width, height; ! 52: ! 53: pix_inch = (XDisplayHeight(dpy, 0) * MM_INCH)/XDisplayHeightMM(dpy, 0); ! 54: width = pix_inch * WIDTH; ! 55: if (width > (XDisplayWidth(dpy, 0) - MINBORDER)) ! 56: width = XDisplayWidth(dpy, 0) - MINBORDER; ! 57: height = pix_inch * HEIGHT; ! 58: if (height > XDisplayHeight(dpy, 0) - MINBORDER) ! 59: height = XDisplayHeight(dpy, 0) - MINBORDER; ! 60: setsizehints (width, height, 1); ! 61: } ! 62: #endif X11 ! 63: ! 64: main(argc, argv) ! 65: char *argv[]; ! 66: { ! 67: register struct thing *currentThing = TNULL ; ! 68: ! 69: request(MOUSE|KBD); ! 70: initdisplay(argc, argv); ! 71: initcursors(); ! 72: initFontList (); ! 73: noSpace = 0; ! 74: for (;;) { ! 75: currentThing = doMouseButtons(currentThing,Pt(Xmin,YPIC)); ! 76: nap(2); ! 77: } ! 78: } ! 79: ! 80: brushInit() ! 81: { ! 82: register int x; ! 83: register int i; ! 84: ! 85: x=Xmin; ! 86: for (i=0; i<NUMBR; i++) { ! 87: brushes[i].origin.x = x; ! 88: x += DXBR; ! 89: brushes[i].corner.x = x-LW; ! 90: brushes[i].origin.y = Ymin; ! 91: brushes[i].corner.y = YBR; ! 92: } ! 93: brushes[PIC].origin.x = Xmin+LW; ! 94: brushes[PIC].origin.y = YPIC+LW; ! 95: brushes[PIC].corner.x = Xmax-LW; ! 96: brushes[PIC].corner.y = YBOT-LW; ! 97: brushes[ED].origin.x = XeditD; ! 98: brushes[ED].origin.y = Ybut; ! 99: brushes[ED].corner.x = Xbut - LW; ! 100: brushes[ED].corner.y = Ymax; ! 101: } ! 102: ! 103: drawFrame() ! 104: { ! 105: register int i; ! 106: ! 107: for (i=0; i<NUMBR; i++) { ! 108: rectf(&display, brushes[i],F_XOR); ! 109: rectf(&display, inset(brushes[i],LW),F_XOR); ! 110: drawBrush(i); ! 111: } ! 112: rectf(&display, brushes[PIC],F_XOR); ! 113: rectf(&display, inset(brushes[PIC],-LW),F_XOR); ! 114: /* Init message frame */ ! 115: rectf (&display, Rect(Xmin, Ybut, XeditD-LW, Ymax), F_XOR); ! 116: rectf (&display, inset(Rect (Xmin, Ybut, XeditD-LW, Ymax),LW), F_XOR); ! 117: Buttons(); ! 118: } ! 119: ! 120: drawBrush(i) ! 121: register int i; ! 122: { ! 123: register int r; ! 124: Point m; ! 125: Point p[6]; ! 126: ! 127: r = (YBR-Ymin)*3>>3; ! 128: m = div( add( brushes[i].origin, brushes[i].corner), 2); ! 129: switch (i) { ! 130: case CIRCLE: { ! 131: circle(&display, m,r,F_XOR); ! 132: break; ! 133: } ! 134: case BOX: { ! 135: box(Rect(m.x-r,m.y-r,m.x+r,m.y+r)); ! 136: break; ! 137: } ! 138: case ELLIPSE: { ! 139: Ellipse(m,(r<<1),r*3); ! 140: break; ! 141: } ! 142: case LINE: { ! 143: segment(&display, Pt(m.x-r,m.y),Pt(m.x+r,m.y),F_XOR); ! 144: break; ! 145: } ! 146: case ARC: { ! 147: arc(&display, Pt(m.x,m.y+r),Pt(m.x+r,m.y),Pt(m.x-r,m.y),F_XOR); ! 148: break; ! 149: } ! 150: case SPLINE: { ! 151: p[1] = sub(m,Pt(r,r)); ! 152: p[2] = add(m,Pt(r>>1,-r)); ! 153: p[3] = sub(m,Pt(r>>1,-r)); ! 154: p[4] = add(m,Pt(r,r)); ! 155: spline(Pt(0,0),p,5); ! 156: break; ! 157: } ! 158: case TEXT: { ! 159: centeredText(sub(m,Pt(0,10)),"Text"); ! 160: break; ! 161: } ! 162: } ! 163: } ! 164: ! 165: Rectangle * ! 166: Select(t, m, offset) ! 167: struct thing *t; ! 168: Point m; ! 169: Point offset; ! 170: { ! 171: register int i; ! 172: ! 173: for (i=0; ((i<NUMBR+2)&&(!ptinrect(m,brushes[i]))); i++) ; ! 174: if (i==PIC) { ! 175: return(&brushes[PIC]); /* temporary */ ! 176: } ! 177: else if (i==ED) { ! 178: if (editDepth>0) { ! 179: drawEDbutton(editDepth); /* Undraw edit button */ ! 180: if ((--editDepth)!=0) { ! 181: drawEDbutton(editDepth); ! 182: } ! 183: } ! 184: changeBrush(-1); ! 185: if (thingSelected) { ! 186: drawSelectionLines (t, offset); ! 187: thingSelected = 0; ! 188: } ! 189: changeButtons(INITbuttons); ! 190: return( (Rectangle *) NULL); ! 191: } ! 192: else if (i==NUMBR+2) { ! 193: changeBrush(-1); ! 194: changeButtons(INITbuttons); ! 195: return( (Rectangle *) NULL); ! 196: } ! 197: else { ! 198: changeBrush(i); ! 199: return(&brushes[i]); ! 200: } ! 201: } ! 202: ! 203: Buttons() ! 204: { ! 205: rectf(&display, Rect(Xbut,Ybut,Xmax,Ymax),F_XOR); ! 206: rectf(&display, inset(Rect(Xbut,Ybut,Xmax,Ymax),LW),F_XOR); ! 207: centeredText(Pt(Xbut2,Ytext), "Mouse Buttons"); ! 208: writeButtonLabels(INITbuttons); ! 209: buttonState = INITbuttons; ! 210: } ! 211: ! 212: labeledButton(p,s) ! 213: Point p; ! 214: register char *s; ! 215: { ! 216: register int w; ! 217: ! 218: w = (strwidth(&defont,s)+8)>>1; ! 219: if (w<=4) { ! 220: w=butHt; ! 221: } ! 222: centeredText(add(p,Pt(0,(butHt>>1)-10)),s); ! 223: box(Rpt(sub(p,Pt(w,butHt)),add(p,Pt(w,butHt)))); ! 224: } ! 225: ! 226: Point PtCurrent; ! 227: void ! 228: jMoveTo (xy) ! 229: Point xy; ! 230: { ! 231: PtCurrent = xy; ! 232: } ! 233: ! 234: Point ! 235: jString(s) ! 236: register char *s; ! 237: { ! 238: return PtCurrent=string(&defont,s,&display,PtCurrent,F_XOR); ! 239: } ! 240: ! 241: Point ! 242: jchar(c) ! 243: register char c; ! 244: { ! 245: char s[2]; ! 246: ! 247: s[0]=c; s[1] = '\0'; ! 248: return(jString(s)); ! 249: } ! 250: ! 251: drawSelectionLines(t,p) ! 252: register struct thing *t; ! 253: Point p; ! 254: { ! 255: Point p1; ! 256: ! 257: if (t!=TNULL) { ! 258: if (t->type==SPLINE) { ! 259: drawZigZag(p,t->otherValues.spline.plist, ! 260: t->otherValues.spline.used); ! 261: } ! 262: else if (t->type==ARC) { ! 263: p1 = add(t->origin,p); ! 264: xsegment(p1,add(p,t->otherValues.arc.start)); ! 265: xsegment(p1,add(p,t->otherValues.arc.end)); ! 266: } ! 267: } ! 268: } ! 269: ! 270: drawGrid() ! 271: { ! 272: cursinhibit(); ! 273: texture(&display,inset (Rect(Xmin,YPIC,Xmax,YBOT), LW),&grid,F_XOR); ! 274: cursallow(); ! 275: } ! 276: ! 277: drawEDbutton(depth) ! 278: int depth; ! 279: { ! 280: char s[5]; ! 281: Point p; ! 282: register int dy; ! 283: ! 284: rectf (&display, brushes[ED], F_XOR); ! 285: rectf (&display, inset(brushes[ED],LW),F_XOR); ! 286: p.x = (brushes[ED].corner.x + brushes[ED].origin.x)>>1; ! 287: dy = (brushes[ED].corner.y - brushes[ED].origin.y)/3; ! 288: p.y = brushes[ED].origin.y + dy - 10; ! 289: centeredText(p,"edit depth"); ! 290: p.y = brushes[ED].origin.y + (dy<<1) - 10; ! 291: sprintf(s,"%d",depth); ! 292: centeredText(p,s); ! 293: } ! 294: ! 295: changeBrush(new) ! 296: register int new; ! 297: { ! 298: if (currentBrush>-1) { ! 299: flash(&brushes[currentBrush],Pt(0,0)); ! 300: } ! 301: if (new>-1) { ! 302: flash(&brushes[new],Pt(0,0)); ! 303: } ! 304: currentBrush = new; ! 305: } ! 306: ! 307: changeButtons(new) ! 308: register int new; ! 309: { ! 310: if (buttonState != new) { ! 311: writeButtonLabels(buttonState); ! 312: writeButtonLabels(new); ! 313: buttonState = new; ! 314: } ! 315: } ! 316: ! 317: writeButtonLabels(i) ! 318: register int i; ! 319: { ! 320: labeledButton(Pt(Xbut1,Ybut123),but1text[i]); ! 321: labeledButton(Pt(Xbut2,Ybut123),but2text[i]); ! 322: labeledButton(Pt(Xbut3,Ybut123),but3text[i]); ! 323: } ! 324: ! 325: beep() ! 326: { ! 327: ringbell(); ! 328: } ! 329: ! 330: ! 331: ! 332: initFontList () ! 333: { ! 334: if ((fonts=(fontBlk *)getSpace(sizeof(fontBlk))) == (fontBlk *) NULL) { ! 335: message ("No memory"); ! 336: sleep (5); ! 337: exit (1); ! 338: } ! 339: fonts->f = &defont; ! 340: fonts->ps = 10; ! 341: fonts->num = DEFONT; ! 342: fonts->useCount = 0; ! 343: fonts->next = fonts; ! 344: fonts->last = fonts; ! 345: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.