From mboxrd@z Thu Jan 1 00:00:00 1970 Date: Tue, 10 Mar 1998 17:36:41 +0900 From: Kenji Arisawa arisawa@ar.aichi-u.ac.jp Subject: [9fans] cursor editor Topicbox-Message-UUID: 731c4d2a-eac8-11e9-9e20-41e7f4b1d025 Message-ID: <19980310083641.-4ND3NF5I-hLExWARRakv4ldt0AFhZFqZmlAu--Imi4@z> Hello 9fans! I have written a mouse cursor editor. Please use if you need it. If the following string "8遜" (eight half) is not recognized on your Plan9 terminal, you must amend winit() in this program or get correct program from: plan9.aichi-u.ac.jp/cedit.l This is a subproduct for my another project: I would like to have a grab program that enables to cut a screen. Kenji Arisawa E-mail: arisawa@aichi-u.ac.jp ------------------ cedit.l -------------------- /* * cedit: Cursor Editor forr map: * 1-bit color: gwhite=0, gblack=1, ggray=0; * 2-bit color: gwhite=0, gblack=3, ggray=1; * 4-bit color: gwhite=0, gblack=15, ggray=3; * 8-bit color: gwhite=0, gblack=255, ggray=85; * We can get screen.ldepth values 0, 1, 2, 3 corresponding * to these bits value respectively. */ int pblack[4, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0x00} }; Cursor boxcurs = { {-7, -7}, {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, , 0x00,} }; Cursor whitearrow = { {0, 0}, {0xFF, 0xE0, 0xFF, 0xE0, 0xFF, 0xC0, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x80, 0xFF, 0xC0, 0xFF, 0xE0, 0xE7, 0xF0, 0xE3, 0xF8, 0xC1, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x3E, 0x00, 0x1C, 0x00, 0x08,}, Dr(r) get size of rectangle r. */ #define Rt(p,s) (Rectangle)(p, add(p, s)) #define Rs(p, s) raddp(Rt(p,s), screen.r.min) #define Dr(r) sub(r.max,r.min) #define gputs(p,size,strorS); else{ Bitmap *b; b = balloc(Rt(p, size), screen.ldepth); string(b, p, font, s, S); bitblt(&screen, add(screen.r.min, p), b, Rt(p, size), DorS)ize){ gfbox(p, size, ggray); gbox(p, size, gbabel, int mode){ gbutton(p, size, mode); if(label) glabel(p, size, label, CC); return size; } /* ---- end of g functions --------- */ /* * A general mousn; i++) if(ptinrect(e.Point, mc[i].r)){ mc[i].c <-= e; break; } } } } adt TextField { Rectangle r;); self->n = n; self->num = malloc(n*sizeof(int)); gtext(p, size, nil); return self; } void NumField.set(NumField *self, ...){ /* see "The documents" p.99 for the usage ... */ int i; reen. r.min); r = raddp(self->r,p); bitblt(&screen, p, &screen, r, F); if(op == 0) { p = add(p, Pt(2,2)); bitblt(&screen, p, &screen, inset(r,2), Zero); } } adt Bmatrix { Rectangle r; Cell* e; Point csize; /* cell size */ byte** cell; min,(1,1)), add(sub(self->r.max, self->r.min),(2,2)), gwhite); bflush(); return self; } void Bmatrix.draw(Bmatrix *self){ int i,j; int mbx, mby; Cell *t; (mbx, mby) = sfor(i = 0; i < 16; i++){ for(j = 0; j< 8; j++) if(t[i][j]) s[2*i] |= (a << (7 - j)); for(j = 0; j< 8; j++) if(t[i][j + 8]) s[2*i + 1] |= (a << (7 - j)); } } void Bmatr } bflush(); } } adt Button { Rectangle r; byte *label; int type;/* radio or not */ int status; void (*action)(int); Button *init(*Button, Point, Point size, byte *label, int (*(self->action))(self->status); if(!(self->type)){ self->status = !(self->status); glbutton(self->r.min, sub(self->r.max, self->r.min), self->label, self->status); bflush(); } } } Bmatrix clrmat, setmat; void try(int status){ Cursor cur; int++) print(" 0x%.02X,", cur.clr[8*i + j]); if(i != 3) print("¥n"); } print("},¥n"); print("{"); for(i = 0; i < 4; i++){ for(j = 0; j