## diffname gnot/screen.c 1990/03091
## diff -e /dev/null /n/bootesdump/1990/03091/sys/src/9/68020/screen.c
0a
#include "u.h"
#include "lib.h"
#include "mem.h"
#include "dat.h"
#include "fns.h"
#include "io.h"
#include "gnot.h"
#define MINX 8
extern Font defont0;
struct{
Point pos;
int bwid;
}out;
Bitmap screen =
{
(ulong*)(2*1024*1024|KZERO), /* BUG */
0,
64,
0,
0, 0, 1024, 1024,
0
};
void
screeninit(void)
{
bitblt(&screen, Pt(0, 0), &screen, screen.rect, 0);
out.pos.x = MINX;
out.pos.y = 0;
out.bwid = defont0.info[' '].width;
}
void
screenputc(int c)
{
char buf[2];
int nx;
if(c == '\n'){
out.pos.x = MINX;
out.pos.y += defont0.height;
if(out.pos.y > screen.rect.max.y-defont0.height)
out.pos.y = screen.rect.min.y;
bitblt(&screen, Pt(0, out.pos.y), &screen,
Rect(0, out.pos.y, screen.rect.max.x, out.pos.y+2*defont0.height), 0);
}else if(c == '\t'){
nx = out.pos.x + (8-(out.pos.x/out.bwid&7))*out.bwid;
out.pos.x = nx;
if(out.pos.x >= screen.rect.max.x)
screenputc('\n');
}else if(c == '\b'){
if(out.pos.x >= out.bwid+MINX){
out.pos.x -= out.bwid;
screenputc(' ');
out.pos.x -= out.bwid;
}
}else{
if(out.pos.x >= screen.rect.max.x-out.bwid)
screenputc('\n');
buf[0] = c&0x7F;
buf[1] = 0;
out.pos = string(&screen, out.pos, &defont0, buf, S);
}
}
/*
* Register set for half the duart. There are really two sets.
*/
struct Duart{
uchar mr1_2; /* Mode Register Channels 1 & 2 */
uchar sr_csr; /* Status Register/Clock Select Register */
uchar cmnd; /* Command Register */
uchar data; /* RX Holding / TX Holding Register */
uchar ipc_acr; /* Input Port Change/Aux. Control Register */
uchar is_imr; /* Interrupt Status/Interrupt Mask Register */
uchar ctur; /* Counter/Timer Upper Register */
uchar ctlr; /* Counter/Timer Lower Register */
};
enum{
CHAR_ERR =0x00, /* MR1x - Mode Register 1 */
EVEN_PAR =0x00,
ODD_PAR =0x04,
NO_PAR =0x10,
CBITS8 =0x03,
CBITS7 =0x02,
CBITS6 =0x01,
CBITS5 =0x00,
NORM_OP =0x00, /* MR2x - Mode Register 2 */
TWOSTOPB =0x0F,
ONESTOPB =0x07,
ENB_RX =0x01, /* CRx - Command Register */
DIS_RX =0x02,
ENB_TX =0x04,
DIS_TX =0x08,
RESET_MR =0x10,
RESET_RCV =0x20,
RESET_TRANS =0x30,
RESET_ERR =0x40,
RESET_BCH =0x50,
STRT_BRK =0x60,
STOP_BRK =0x70,
RCV_RDY =0x01, /* SRx - Channel Status Register */
FIFOFULL =0x02,
XMT_RDY =0x04,
XMT_EMT =0x08,
OVR_ERR =0x10,
PAR_ERR =0x20,
FRM_ERR =0x40,
RCVD_BRK =0x80,
IM_IPC =0x80, /* IMRx/ISRx - Interrupt Mask/Interrupt Status */
IM_DBB =0x40,
IM_RRDYB =0x20,
IM_XRDYB =0x10,
IM_CRDY =0x08,
IM_DBA =0x04,
IM_RRDYA =0x02,
IM_XRDYA =0x01,
};
uchar keymap[]={
/*80*/ 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58,
0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x8e, 0x58,
/*90*/ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
0x98, 0x99, 0x9a, 0x9b, 0x58, 0x58, 0x58, 0x58,
/*A0*/ 0x58, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0xae, 0xaf,
/*B0*/ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0x80, 0xb7,
0xb8, 0xb9, 0x00, 0xbb, 0x1e, 0xbd, 0x60, 0x1f,
/*C0*/ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0x58, 0xc6, 0x0d,
0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
/*D0*/ 0x09, 0x08, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x7f, 0x58,
/*E0*/ 0x58, 0x58, 0xe2, 0x1b, 0x0a, 0xe5, 0x58, 0x0d,
0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
/*F0*/ 0x09, 0x08, 0xb2, 0x1b, 0x0a, 0xf5, 0x81, 0x58,
0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x7f, 0xb2,
};
void
duartintr(void)
{
int cause, status, c;
Duart *duart;
duart = DUARTREG;
cause = duart->is_imr;
/*
* I can guess your interrupt.
*/
/*
* Is it 1?
*/
if(cause & IM_RRDYA){ /* keyboard input */
status = duart->sr_csr;
c = duart->data;
if(status & (FRM_ERR|OVR_ERR|PAR_ERR))
duart->cmnd = RESET_ERR;
if(c == 0x7F)
c = 0xFF; /* VIEW key (bizarre) */
if(c & 0x80)
c = keymap[c&0x7F];
kbdchar(c);
}
/*
* Is it 2?
*/
if(cause & IM_RRDYB) /* pen input */
c = duart[1].data;
}
.
## diffname gnot/screen.c 1990/0320
## diff -e /n/bootesdump/1990/03091/sys/src/9/68020/screen.c /n/bootesdump/1990/0320/sys/src/9/68020/screen.c
21c
(ulong*)((4*1024*1024-256*1024)|KZERO), /* BUG */
.
## diffname gnot/screen.c 1990/0321
## diff -e /n/bootesdump/1990/0320/sys/src/9/68020/screen.c /n/bootesdump/1990/0321/sys/src/9/68020/screen.c
164,168c
if(status & PAR_ERR) /* control word: caps lock (0x4) or repeat (0x10) */
kbdrepeat((c&0x10) == 0);
else{
if(c == 0x7F)
c = 0xFF; /* VIEW key (bizarre) */
if(c & 0x80)
c = keymap[c&0x7F];
kbdchar(c);
}
.
## diffname gnot/screen.c 1990/0329
## diff -e /n/bootesdump/1990/0321/sys/src/9/68020/screen.c /n/bootesdump/1990/0329/sys/src/9/68020/screen.c
180d
178a
/*
* Is it 4?
*/
if(cause & IM_XRDYB)
duart[1].cmnd = DIS_TX;
/*
* Is it 3?
*/
if(cause & IM_IPC)
mousebuttons((~duart[0].ipc_acr) & 7);
.
145a
duartinit(void)
{
Duart *duart;
duart = DUARTREG;
/*
* Keyboard
*/
duart[0].cmnd = RESET_RCV|DIS_TX|DIS_RX;
duart[0].cmnd = RESET_TRANS;
duart[0].cmnd = RESET_ERR;
duart[0].cmnd = RESET_MR;
duart[0].mr1_2 = CHAR_ERR|PAR_ENB|EVEN_PAR|CBITS8;
duart[0].mr1_2 = NORM_OP|ONESTOPB;
duart[0].sr_csr = BD4800;
/*
* Pen
*/
duart[1].cmnd = RESET_RCV|DIS_TX|DIS_RX;
duart[1].cmnd = RESET_TRANS;
duart[1].cmnd = RESET_ERR;
duart[1].cmnd = RESET_MR;
duart[1].mr1_2 = CHAR_ERR|NO_PAR|CBITS8;
duart[1].mr1_2 = NORM_OP|ONESTOPB;
duart[1].sr_csr = BD2400;
/*
* Output port
*/
duart[0].ipc_acr = 0xBF; /* allow change of state interrupt */
duart[1].ip_opcr = 0x00;
duart[1].scc_ropbc = 0xFF; /* make sure the port is reset first */
duart[1].scc_sopbc = 0x04; /* dtr = 1, pp = 01 */
duart[0].is_imr = IM_IPC|IM_RRDYB|IM_XRDYB|IM_RRDYA;
duart[0].cmnd = ENB_TX|ENB_RX; /* enable TX and RX last */
duart[1].cmnd = ENB_TX|ENB_RX;
/*
* Initialize keyboard
*/
while (!(duart[0].sr_csr & (XMT_EMT|XMT_RDY)))
;
duart[0].data = 0x02;
}
void
.
115a
BD9600 =0xBB,
BD4800 =0x99,
BD2400 =0x88,
.
86a
PAR_ENB =0x00,
.
82a
#define scc_ropbc ctlr /* Stop Counter Command/Reset Output Port Bits Command */
.
81a
#define scc_sopbc ctur /* Start Counter Command/Set Output Port Bits Command */
.
80a
#define ip_opcr is_imr /* Input Port/Output Port Configuration Register */
.
79a
#define ivr ivr /* Interrupt Vector Register */
.
63c
if(out.pos.x >= screen.r.max.x-out.bwid)
.
54c
if(out.pos.x >= screen.r.max.x)
.
50c
Rect(0, out.pos.y, screen.r.max.x, out.pos.y+2*defont0.height), 0);
.
47,48c
if(out.pos.y > screen.r.max.y-defont0.height)
out.pos.y = screen.r.min.y;
.
32c
duartinit();
bitblt(&screen, Pt(0, 0), &screen, screen.r, 0);
.
18a
void duartinit(void);
.
## diffname gnot/screen.c 1990/0330
## diff -e /n/bootesdump/1990/0329/sys/src/9/68020/screen.c /n/bootesdump/1990/0330/sys/src/9/68020/screen.c
214a
/*
* Is it 0?
*/
if(cause & IM_CRDY){
kproftimer(ur->pc);
c = duart[1].scc_ropbc;
duart[0].ctur = (Kptime)>>8;
duart[0].ctlr = (Kptime)&255;
c = duart[1].scc_sopbc;
return;
}
.
206a
Duart *duart;
char x;
duart = DUARTREG;
duart[0].ctur = (Kptime)>>8;
duart[0].ctlr = (Kptime)&255;
duart[0].is_imr = IM_IPC|IM_RRDYB|IM_XRDYB|IM_RRDYA|IM_CRDY;
x = duart[1].scc_sopbc;
}
void
duartstoptimer(void)
{
Duart *duart;
char x;
duart = DUARTREG;
x = duart[1].scc_ropbc;
duart[0].is_imr = IM_IPC|IM_RRDYB|IM_XRDYB|IM_RRDYA;
}
void
duartintr(Ureg *ur)
{
.
205c
duartstarttimer(void)
.
203a
enum{
Kptime=200 /* about once per ms */
};
.
6a
#include "ureg.h"
.
## diffname gnot/screen.c 1990/05313
## diff -e /n/bootesdump/1990/0330/sys/src/9/68020/screen.c /n/bootesdump/1990/05313/sys/src/9/68020/screen.c
283c
* Is it 4?
*/
if(cause & IM_XRDYA)
duart[0].cmnd = DIS_TX;
/*
* Is it 5?
.
281a
}
.
280c
if(cause & IM_XRDYB){
.
278c
* Is it 3?
.
189c
duart[0].ipc_acr = 0xB7; /* allow change of state interrupt */
.
71c
out.pos = string(&screen, out.pos, defont, buf, S);
.
35a
/*
* Read HEX switch to set ldepth
*/
if(*(uchar*)MOUSE & (1<<4)){
screen.ldepth = 1;
defont = &defont1;
}else
defont = &defont0;
.
13a
extern Font defont1;
Font *defont;
.
## diffname gnot/screen.c 1990/0629
## diff -e /n/bootesdump/1990/05313/sys/src/9/68020/screen.c /n/bootesdump/1990/0629/sys/src/9/68020/screen.c
290,292c
if(cause & IM_XRDYB) /* rs232 output */
duartrs232intr();
.
286a
if(status & (FRM_ERR|OVR_ERR|PAR_ERR))
duart[1].cmnd = RESET_ERR;
else
rs232ichar(c);
}
.
285c
if(cause & IM_RRDYB){ /* rs232 input */
status = duart[1].sr_csr;
.
242a
duartrs232intr(void)
{
int c;
Duart *duart;
duart = DUARTREG;
c = getrs232o();
if(c == -1)
duart[1].cmnd = DIS_TX;
else
duart[1].data = c;
}
void
duartstartrs232o(void)
{
DUARTREG[1].cmnd = ENB_TX;
duartrs232intr();
}
void
.
194c
duart[1].sr_csr = BD9600;
.
186c
* RS232
.
## diffname gnot/screen.c 1990/0707
## diff -e /n/bootesdump/1990/0629/sys/src/9/68020/screen.c /n/bootesdump/1990/0707/sys/src/9/68020/screen.c
203c
duart[0].is_imr = IM_IPC|IM_RRDYB|IM_XRDYB|IM_RRDYA|IM_XRDYA;
.
## diffname gnot/screen.c 1990/0709
## diff -e /n/bootesdump/1990/0707/sys/src/9/68020/screen.c /n/bootesdump/1990/0709/sys/src/9/68020/screen.c
278c
/* kproftimer(ur->pc);/**/
.
## diffname gnot/screen.c 1990/0808
## diff -e /n/bootesdump/1990/0709/sys/src/9/68020/screen.c /n/bootesdump/1990/0808/sys/src/9/68020/screen.c
212a
}
void
duartbaud(int b)
{
int x;
Duart *duart;
duart = DUARTREG;
switch(b){
case 38400:
x = BD38400;
break;
case 19200:
x = BD19200;
break;
case 9600:
x = BD9600;
break;
case 4800:
x = BD4800;
break;
case 2400:
x = BD2400;
break;
case 1200:
x = BD1200;
break;
case 300:
x = BD300;
break;
default:
error(0, Ebadarg);
}
if(x & 0x0100)
duart[0].ipc_acr = duartacr |= 0x80;
else
duart[0].ipc_acr = duartacr &= ~0x80;
duart[1].sr_csr = x;
.
199c
duart[0].ipc_acr = duartacr = 0xB7; /* allow change of state interrupt */
.
135,137c
BD38400 =0xCC|0x0000,
BD19200 =0xCC|0x0100,
BD9600 =0xBB|0x0000,
BD4800 =0x99|0x0000,
BD2400 =0x88|0x0000,
BD1200 =0x66|0x0000,
BD300 =0x44|0x0000,
.
22a
int duartacr;
.
7a
#include "errno.h"
.
## diffname gnot/screen.c 1990/08101
## diff -e /n/bootesdump/1990/0808/sys/src/9/68020/screen.c /n/bootesdump/1990/08101/sys/src/9/68020/screen.c
68,69c
out.pos.x += (8-((out.pos.x-MINX)/out.bwid&7))*out.bwid;
.
## diffname gnot/screen.c 1990/0825
## diff -e /n/bootesdump/1990/08101/sys/src/9/68020/screen.c /n/bootesdump/1990/0825/sys/src/9/68020/screen.c
168c
/*F0*/ 0x09, 0x08, 0xb2, 0x1b, 0x0d, 0xf5, 0x81, 0x58,
.
166c
/*E0*/ 0x58, 0x58, 0xe2, 0x1b, 0x0d, 0xe5, 0x58, 0x0a,
.
162c
/*C0*/ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0x58, 0xc6, 0x0a,
.
## diffname gnot/screen.c 1990/0830
## diff -e /n/bootesdump/1990/0825/sys/src/9/68020/screen.c /n/bootesdump/1990/0830/sys/src/9/68020/screen.c
284c
duart[0].is_imr = duartimr &= ~IM_CRDY;
.
272c
duart[0].is_imr = duartimr |= IM_CRDY;
.
259a
void
duartdtr(int val)
{
Duart *duart = DUARTREG;
if (val)
duart[1].scc_ropbc=0x01;
else
duart[1].scc_sopbc=0x01;
}
void
duartbreak(int ms)
{
static QLock brk;
Duart *duart = DUARTREG;
if (ms<=0 || ms >20000)
error(0, Ebadarg);
qlock(&brk);
duart[0].is_imr = duartimr &= ~IM_XRDYB;
duart[1].cmnd = STRT_BRK|ENB_TX;
tsleep(&u->p->sleep, return0, 0, ms);
duart[1].cmnd = STOP_BRK|ENB_TX;
duart[0].is_imr = duartimr |= IM_XRDYB;
qunlock(&brk);
}
.
226,227d
224c
Duart *duart = DUARTREG;
.
219a
int
duartinputport(void)
{
Duart *duart = DUARTREG;
return duart[1].ip_opcr;
}
.
208c
duart[0].is_imr = duartimr = IM_IPC|IM_RRDYB|IM_XRDYB|IM_RRDYA|IM_XRDYA;
.
24a
int duartimr;
.
## diffname gnot/screen.c 1990/0902
## diff -e /n/bootesdump/1990/0830/sys/src/9/68020/screen.c /n/bootesdump/1990/0902/sys/src/9/68020/screen.c
83c
out.pos = gstring(&screen, out.pos, defont, buf, S);
.
66c
gbitblt(&screen, Pt(0, out.pos.y), &screen,
.
49c
gbitblt(&screen, Pt(0, 0), &screen, screen.r, 0);
.
27c
GBitmap screen =
.
14,16c
extern GFont defont0;
extern GFont defont1;
GFont *defont;
.
10c
#include <gnot.h>
.
## diffname gnot/screen.c 1990/0912
## diff -e /n/bootesdump/1990/0902/sys/src/9/68020/screen.c /n/bootesdump/1990/0912/sys/src/9/68020/screen.c
83c
out.pos = gstring(&gscreen, out.pos, defont, buf, S);
.
79c
if(out.pos.x >= gscreen.r.max.x-out.bwid)
.
70c
if(out.pos.x >= gscreen.r.max.x)
.
64,67c
if(out.pos.y > gscreen.r.max.y-defont0.height)
out.pos.y = gscreen.r.min.y;
gbitblt(&gscreen, Pt(0, out.pos.y), &gscreen,
Rect(0, out.pos.y, gscreen.r.max.x, out.pos.y+2*defont0.height), 0);
.
49c
gbitblt(&gscreen, Pt(0, 0), &gscreen, gscreen.r, 0);
.
45c
gscreen.ldepth = 1;
.
27c
GBitmap gscreen =
.
9a
#include <libg.h>
.
## diffname gnot/screen.c 1990/0914
## diff -e /n/bootesdump/1990/0912/sys/src/9/68020/screen.c /n/bootesdump/1990/0914/sys/src/9/68020/screen.c
84c
out.pos = gbitbltstring(&gscreen, out.pos, defont, buf, S);
.
47,49c
defont = &defont0; /* save space; let bitblt do the conversion work */
.
45c
if(*(uchar*)MOUSE & (1<<4))
.
16d
## diffname gnot/screen.c 1990/1004
## diff -e /n/bootesdump/1990/0914/sys/src/9/68020/screen.c /n/bootesdump/1990/1004/sys/src/9/68020/screen.c
352c
if(kprofp)
(*kprofp)(ur->pc);
.
290c
Kptime=200
.
26a
void (*kprofp)(ulong);
.
## diffname gnot/screen.c 1990/11211
## diff -e /n/bootesdump/1990/1004/sys/src/9/68020/screen.c /n/bootesdump/1990/11211/sys/src/9/68020/screen.c
281c
error(Ebadarg);
.
256c
error(Ebadarg);
.
## diffname gnot/screen.c 1990/1126
## diff -e /n/bootesdump/1990/11211/sys/src/9/68020/screen.c /n/bootesdump/1990/1126/sys/src/9/68020/screen.c
232a
x = 0; /* set */
.
## diffname gnot/screen.c 1991/0105
## diff -e /n/bootesdump/1990/1126/sys/src/9/68020/screen.c /n/bootesdump/1991/0105/sys/src/9/68020/screen.c
374,378c
if(c == 0x7F) /* VIEW key (bizarre) */
c = 0xFF;
if(c == 0xB6) /* NUM PAD */
kbdstate = 1;
else{
if(c & 0x80)
c = keymap[c&0x7F];
switch(kbdstate){
case 1:
k1 = c;
kbdstate = 2;
break;
case 2:
k2 = c;
c = latin1(k1, k2);
if(c == 0){
kbdchar(k1);
c = k2;
}
/* fall through */
default:
kbdstate = 0;
kbdchar(c);
}
}
.
344a
static int kbdstate, k1, k2;
.
339a
struct latin
{
uchar l;
char c[2];
}latintab[] = {
'', "!!", /* spanish initial ! */
'', "c|", /* cent */
'', "c$", /* cent */
'', "l$", /* pound sterling */
'', "g$", /* general currency */
'', "y$", /* yen */
'', "j$", /* yen */
'', "||", /* broken vertical bar */
'', "SS", /* section symbol */
'', "\"\"", /* dieresis */
'', "cr", /* copyright */
'', "cO", /* copyright */
'', "sa", /* super a, feminine ordinal */
'', "<<", /* left angle quotation */
'', "no", /* not sign, hooked overbar */
'', "--", /* soft hyphen */
'', "rg", /* registered trademark */
'', "__", /* macron */
'', "s0", /* degree (sup o) */
'', "+-", /* plus-minus */
'', "s2", /* sup 2 */
'', "s3", /* sup 3 */
'', "''", /* grave accent */
'', "mu", /* mu */
'', "pg", /* paragraph (pilcrow) */
'', "..", /* centered . */
'', ",,", /* cedilla */
'', "s1", /* sup 1 */
'', "so", /* sup o */
'', ">>", /* right angle quotation */
'', "14", /* 1/4 */
'', "12", /* 1/2 */
'', "34", /* 3/4 */
'', "??", /* spanish initial ? */
'', "A`", /* A grave */
'', "A'", /* A acute */
'', "A^", /* A circumflex */
'', "A~", /* A tilde */
'', "A\"", /* A dieresis */
'', "A:", /* A dieresis */
'', "Ao", /* A circle */
'', "AO", /* A circle */
'', "Ae", /* AE ligature */
'', "AE", /* AE ligature */
'', "C,", /* C cedilla */
'', "E`", /* E grave */
'', "E'", /* E acute */
'', "E^", /* E circumflex */
'', "E\"", /* E dieresis */
'', "E:", /* E dieresis */
'', "I`", /* I grave */
'', "I'", /* I acute */
'', "I^", /* I circumflex */
'', "I\"", /* I dieresis */
'', "I:", /* I dieresis */
'', "D-", /* Eth */
'', "N~", /* N tilde */
'', "O`", /* O grave */
'', "O'", /* O acute */
'', "O^", /* O circumflex */
'', "O~", /* O tilde */
'', "O\"", /* O dieresis */
'', "O:", /* O dieresis */
'', "OE", /* O dieresis */
'', "Oe", /* O dieresis */
'', "xx", /* times sign */
'', "O/", /* O slash */
'', "U`", /* U grave */
'', "U'", /* U acute */
'', "U^", /* U circumflex */
'', "U\"", /* U dieresis */
'', "U:", /* U dieresis */
'', "UE", /* U dieresis */
'', "Ue", /* U dieresis */
'', "Y'", /* Y acute */
'', "P|", /* Thorn */
'', "Th", /* Thorn */
'', "TH", /* Thorn */
'', "ss", /* sharp s */
'', "a`", /* a grave */
'', "a'", /* a acute */
'', "a^", /* a circumflex */
'', "a~", /* a tilde */
'', "a\"", /* a dieresis */
'', "a:", /* a dieresis */
'', "ao", /* a circle */
'', "ae", /* ae ligature */
'', "c,", /* c cedilla */
'', "e`", /* e grave */
'', "e'", /* e acute */
'', "e^", /* e circumflex */
'', "e\"", /* e dieresis */
'', "e:", /* e dieresis */
'', "i`", /* i grave */
'', "i'", /* i acute */
'', "i^", /* i circumflex */
'', "i\"", /* i dieresis */
'', "i:", /* i dieresis */
'', "d-", /* eth */
'', "n~", /* n tilde */
'', "o`", /* o grave */
'', "o'", /* o acute */
'', "o^", /* o circumflex */
'', "o~", /* o tilde */
'', "o\"", /* o dieresis */
'', "o:", /* o dieresis */
'', "oe", /* o dieresis */
'', "-:", /* divide sign */
'', "o/", /* o slash */
'', "u`", /* u grave */
'', "u'", /* u acute */
'', "u^", /* u circumflex */
'', "u\"", /* u dieresis */
'', "u:", /* u dieresis */
'', "ue", /* u dieresis */
'', "y'", /* y acute */
'', "th", /* thorn */
'', "p|", /* thorn */
'', "y\"", /* y dieresis */
'', "y:", /* y dieresis */
0, 0,
};
int
latin1(int k1, int k2)
{
int i;
struct latin *l;
for(l=latintab; l->l; l++)
if(k1==l->c[0] && k2==l->c[1])
return l->l;
return 0;
}
.
## diffname gnot/screen.c 1991/0112
## diff -e /n/bootesdump/1991/0105/sys/src/9/68020/screen.c /n/bootesdump/1991/0112/sys/src/9/68020/screen.c
170c
0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x7f, 0x80,
.
161c
/*B0*/ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
.
## diffname gnot/screen.c 1991/0423
## diff -e /n/bootesdump/1991/0201/sys/src/9/68020/screen.c /n/bootesdump/1991/0423/sys/src/9/gnot/screen.c
551a
cause = duart->is_imr;
.
545c
while(cause & IM_RRDYB){ /* rs232 input */
.
373c
'', "so", /* sup o */
.
336,337c
int s;
Duart *duart;
duart = DUARTREG;
s = splduart();
duart[1].cmnd = ENB_TX;
if(duart[1].sr_csr & (XMT_RDY|XMT_EMT))
duartrs232intr();
splx(s);
.
233d
230c
int x = 0;
.
## diffname gnot/screen.c 1991/0605
## diff -e /n/bootesdump/1991/0423/sys/src/9/gnot/screen.c /n/bootesdump/1991/0605/sys/src/9/gnot/screen.c
176,574c
while(n-- > 0)
screenputc(*s++);
.
174c
screenputs(char *s, int n)
.
87,172d
42d
23,28d
## diffname gnot/screen.c 1991/0706
## diff -e /n/bootesdump/1991/0605/sys/src/9/gnot/screen.c /n/bootesdump/1991/0706/sys/src/9/gnot/screen.c
85a
int
screenbits(void)
{
if(*(uchar*)MOUSE & (1<<4))
return 2;
else
return 1;
}
void
getcolor(ulong p, ulong *pr, ulong *pg, ulong *pb)
{
ulong ans;
/*
* The gnot says 0 is white (max intensity)
*/
if(gscreen.ldepth == 0){
if(p == 0)
ans = ~0;
else
ans = 0;
}else{
switch(p){
case 0: ans = ~0; break;
case 1: ans = 0xAAAAAAAA; break;
case 2: ans = 0x55555555; break;
default: ans = 0; break;
}
*pr = *pg = *pb = ans;
}
int
setcolor(ulong p, ulong r, ulong g, ulong b)
{
return 0; /* can't change mono screen colormap */
}
int
hwcursset(uchar *s, uchar *c, int ox, int oy)
{
return 0;
}
int
hwcursmove(int x, int y)
{
return 0;
}
.
## diffname gnot/screen.c 1991/0707
## diff -e /n/bootesdump/1991/0706/sys/src/9/gnot/screen.c /n/bootesdump/1991/0707/sys/src/9/gnot/screen.c
134a
}
void
mouseclock(void) /* called spl6 */
{
++mouse.clock;
}
void
mousetry(Ureg *ur)
{
int s;
if(mouse.clock && mouse.track && (ur->sr&SPL(7)) == 0 && canlock(&cursor)){
s = spl1();
mouseupdate(0);
splx(s);
unlock(&cursor);
wakeup(&mouse.r);
}
.
114a
}
.
80a
gbitblt(GBitmap *d, Point p, GBitmap *s, Rectangle r, Fcode f)
{
balubitblt(d, p, s, r, f);
}
void
.
79a
/* Use the balu version */
.
11a
#include "mouse.h"
.
## diffname gnot/screen.c 1991/0708
## diff -e /n/bootesdump/1991/0707/sys/src/9/gnot/screen.c /n/bootesdump/1991/0708/sys/src/9/gnot/screen.c
79,85d
13a
/* gnot screen.h defines gbitblt to use balu; doesn't work here */
#undef gbitblt
.
12c
#include "screen.h"
.
## diffname gnot/screen.c 1991/0710
## diff -e /n/bootesdump/1991/0708/sys/src/9/gnot/screen.c /n/bootesdump/1991/0710/sys/src/9/gnot/screen.c
63c
kbitblt(&gscreen, Pt(0, out.pos.y), &gscreen,
.
46c
kbitblt(&gscreen, Pt(0, 0), &gscreen, gscreen.r, 0);
.
14,16d
## diffname gnot/screen.c 1991/0809
## diff -e /n/bootesdump/1991/0710/sys/src/9/gnot/screen.c /n/bootesdump/1991/0809/sys/src/9/gnot/screen.c
85a
unlock(&printq);
splx(x);
.
83a
int x;
x = splhi();
lock(&printq);
.
## diffname gnot/screen.c 1991/1222
## diff -e /n/bootesdump/1991/0809/sys/src/9/gnot/screen.c /n/bootesdump/1991/1222/sys/src/9/gnot/screen.c
77c
out.pos = gstring(&gscreen, out.pos, defont, buf, S);
.
## diffname gnot/screen.c 1991/1225
## diff -e /n/bootesdump/1991/1222/sys/src/9/gnot/screen.c /n/bootesdump/1991/1225/sys/src/9/gnot/screen.c
79,91d
72,77c
memmove(buf, s, i);
buf[i] = 0;
n -= i;
s += i;
if(r == '\n'){
out.pos.x = MINX;
out.pos.y += defont0.height;
if(out.pos.y > gscreen.r.max.y-defont0.height)
out.pos.y = gscreen.r.min.y;
gbitblt(&gscreen, Pt(0, out.pos.y), &gscreen,
Rect(0, out.pos.y, gscreen.r.max.x, out.pos.y+2*defont0.height), 0);
}else if(r == '\t'){
out.pos.x += (8-((out.pos.x-MINX)/out.bwid&7))*out.bwid;
if(out.pos.x >= gscreen.r.max.x)
screenputs("\n", 1);
}else if(r == '\b'){
if(out.pos.x >= out.bwid+MINX){
out.pos.x -= out.bwid;
screenputs(" ", 1);
out.pos.x -= out.bwid;
}
}else{
if(out.pos.x >= gscreen.r.max.x-out.bwid)
screenputs("\n", 1);
out.pos = gstring(&gscreen, out.pos, defont, buf, S);
}
.
55,70c
while(n > 0){
i = chartorune(&r, s);
if(i == 0){
s++;
--n;
continue;
.
52,53c
Rune r;
int i;
char buf[4];
.
50c
screenputs(char *s, int n)
.
43c
gbitblt(&gscreen, Pt(0, 0), &gscreen, gscreen.r, 0);
.
## diffname gnot/screen.c 1991/1228
## diff -e /n/bootesdump/1991/1225/sys/src/9/gnot/screen.c /n/bootesdump/1991/1228/sys/src/9/gnot/screen.c
89a
unlock(&screenlock);
.
86c
screenputnl();
.
81,82c
gstring(&gscreen, out.pos, defont, " ", S);
.
77c
screenputnl();
.
67,74c
if(r == '\n')
screenputnl();
else if(r == '\t'){
.
55a
lock(&screenlock);
.
49a
screenputnl(void)
{
out.pos.x = MINX;
out.pos.y += defont0.height;
if(out.pos.y > gscreen.r.max.y-defont0.height)
out.pos.y = gscreen.r.min.y;
gbitblt(&gscreen, Pt(0, out.pos.y), &gscreen,
Rect(0, out.pos.y, gscreen.r.max.x, out.pos.y+2*defont0.height), 0);
}
void
.
23a
Lock screenlock;
.
## diffname gnot/screen.c 1992/0111
## diff -e /n/bootesdump/1991/1228/sys/src/9/gnot/screen.c /n/bootesdump/1992/0111/sys/src/9/gnot/screen.c
8c
#include "../port/error.h"
.
## diffname gnot/screen.c 1992/0208
## diff -e /n/bootesdump/1992/0111/sys/src/9/gnot/screen.c /n/bootesdump/1992/0208/sys/src/9/gnot/screen.c
95c
out.pos = gsubfstring(&gscreen, out.pos, defont, buf, S);
.
90c
gsubfstring(&gscreen, out.pos, defont, " ", S);
.
16,17c
extern GSubfont defont0;
GSubfont *defont;
.
## diffname gnot/screen.c 1992/0209
## diff -e /n/bootesdump/1992/0208/sys/src/9/gnot/screen.c /n/bootesdump/1992/0209/sys/src/9/gnot/screen.c
10c
#include <libng.h>
.
## diffname gnot/screen.c 1992/0211
## diff -e /n/bootesdump/1992/0209/sys/src/9/gnot/screen.c /n/bootesdump/1992/0211/sys/src/9/gnot/screen.c
10c
#include <libg.h>
.
## diffname gnot/screen.c 1992/0321
## diff -e /n/bootesdump/1992/0211/sys/src/9/gnot/screen.c /n/bootesdump/1992/0321/sys/src/9/gnot/screen.c
2c
#include "../port/lib.h"
.
## diffname gnot/screen.c 1992/0604
## diff -e /n/bootesdump/1992/0321/sys/src/9/gnot/screen.c /n/bootesdump/1992/0604/sys/src/9/gnot/screen.c
32c
{ 0, 0, 1024, 1024, },
{ 0, 0, 1024, 1024, },
.
## diffname gnot/screen.c 1992/0630
## diff -e /n/bootesdump/1992/0604/sys/src/9/gnot/screen.c /n/bootesdump/1992/0630/sys/src/9/gnot/screen.c
28c
(ulong*)((1*1024*1024)|KZERO), /* bootrom puts it here; changed by mmuinit */
.
## diffname gnot/screen.c 1992/0711
## diff -e /n/bootesdump/1992/0630/sys/src/9/gnot/screen.c /n/bootesdump/1992/0711/sys/src/9/gnot/screen.c
149a
USED(x, y);
.
143a
USED(s, c, ox, oy);
.
137a
USED(p, r, g, b);
.
## diffname gnot/screen.c 1992/0914
## diff -e /n/bootesdump/1992/0711/sys/src/9/gnot/screen.c /n/bootesdump/1992/0914/sys/src/9/gnot/screen.c
70c
if(getsr() & 0x0700){
if(!canlock(&screenlock))
return; /* don't deadlock trying to print in interrupt */
}else
lock(&screenlock);
.
## diffname gnot/screen.c 1992/1012
## diff -e /n/bootesdump/1992/0914/sys/src/9/gnot/screen.c /n/bootesdump/1992/1012/sys/src/9/gnot/screen.c
24a
void screenupdate(void);
.
18a
.
## diffname gnot/screen.c 1992/1020
## diff -e /n/bootesdump/1992/1012/sys/src/9/gnot/screen.c /n/bootesdump/1992/1020/sys/src/9/gnot/screen.c
180a
/* only 1 flavor mouse */
void
mousectl(char *x)
{
USED(x);
}
.
## diffname gnot/screen.c 1992/1030
## diff -e /n/bootesdump/1992/1020/sys/src/9/gnot/screen.c /n/bootesdump/1992/1030/sys/src/9/gnot/screen.c
186a
}
void
screenupdate(Rectangle r)
{
USED(r);
.
26d
## diffname gnot/screen.c 1992/1104
## diff -e /n/bootesdump/1992/1030/sys/src/9/gnot/screen.c /n/bootesdump/1992/1104/sys/src/9/gnot/screen.c
187,192d
## diffname gnot/screen.c 1993/0226
## diff -e /n/bootesdump/1992/1104/sys/src/9/gnot/screen.c /n/bootesdump/1993/0226/sys/src/9/gnot/screen.c
161,180d
## diffname gnot/screen.c 1993/0501 # deleted
## diff -e /n/bootesdump/1993/0226/sys/src/9/gnot/screen.c /n/fornaxdump/1993/0501/sys/src/brazil/gnot/screen.c
1,166d
|