Motorola Mobility, Inc. v. Microsoft Corporation
Filing
125
NOTICE by Microsoft Corporation re #124 Defendant's MOTION Claim Construction of Filing Exhibits (Attachments: #1 Appendix (Index to Exhibits), #2 Exhibit 101, #3 Exhibit 102, #4 Exhibit 201, #5 Exhibit 301, #6 Exhibit 302, #7 Exhibit 304, #8 Exhibit 305, #9 Exhibit 501, #10 Exhibit 502, #11 Exhibit 504, #12 Exhibit 601, #13 Exhibit 801 (Part 1), #14 Exhibit 801 (Part 2), #15 Exhibit 901, #16 Exhibit 902, #17 Exhibit 903, #18 Exhibit 904, #19 Exhibit 905, #20 Exhibit 1101, #21 Exhibit 1102, #22 Exhibit 1105, #23 Exhibit 1110, #24 Exhibit 1114, #25 Exhibit 1115, #26 Exhibit 1116, #27 Exhibit 1201, #28 Exhibit 1301, #29 Exhibit 1302, #30 Exhibit 1303, #31 Exhibit 1304, #32 Exhibit 1305, #33 Exhibit 1401, #34 Exhibit 1402, #35 Exhibit 1403, #36 Exhibit 1404, #37 Exhibit 1405, #38 Exhibit 1406, #39 Exhibit 1407, #40 Exhibit 1408, #41 Exhibit 1409)(Miner, Curtis)
Exhibit 801
(Part 2 of 2)
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
14 54
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
14 "10
1471
1472
1473
1474
1475
1476
1477
1478
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
W
CO
1479
1480
1481
init window(screen,node,output,title,row,col,out clr,out fi11,out pat,pane c1r)
reglster SC~EEN
*screen;
reqlster MAPNODE
*node;
CONNECTOR
*output'
register short
row L coi;
reglster char
*ti~le;
reglster char
out c1r, out fill, out pat, pane cir;
{
reqister char
*msg '
Int
resu i t = NO~
if (node->style == '5' && (screen->colors < 7 I I !screen->bit map))
node->styl~ = lSI;
,
If (nOde-~outllne}
out llnefnode i
if (nod~->pa ette
node->left = node->palette'
if (node->r~slze box I I node->vscroll)
node->rlght T~ VcAAR WDi
if (node->corner && Inode->palette)
node->left t= VCHAR WD~
if (node->menu I I node-~general use)
nQde->bottom = VCHAR HT * 2T
else If (node->Hscroll) nod~->bottom = VCHAR liT;
align wlndow(screen1nQdeT;
msg =-Newms g (30 Q
O'''jnIt U ,
"poS=#2S; SlZe= 2S; outl=#5b; ~ane=#2b; rnarg=,4s; scrn='4s: outp='C; \
self""#C; map"'#C 25' name:::#S; 1:" ly"
node->row,node->coi,node->h~ig t,n6de->width,
out clr,node->outllne,out fIll,out pat,noQe->style,pane clr,node->pane,
node->top,node->bottom,node->left,node->rlgQt O,O,screen->height,
. , screen->wIdth~out~ut,&node->wlndow,&node->plcture,row,col,node->name) :
In It frame(msq noae,tltle,out clr):
msg
Call (DIRECT,node->wlndow.pla,msg, 0,0) ;
result = sErcmp(mS9,"failed ll ) ;
Free (msg) ;
return(result) :
=
~
~
~
VI
~
J3
00
w
\0
~
~
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
14 92
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
out line(nodel
~egtster MAPNODE
*node;
(
node->outer = node->outline + node->pane + (node->outline && node->pane)
(nQde->heightjlOO + nOde->Wldth/lOO + 2);
if (node->tlght)
(
node->toQ = node->bottam ~ node->outer;
node->left = node->rlght = node->outer+ node->widthj200;
)
else
{
node->top ::: VCHAR HT;
node->bottom = node->outer;
node->left ~ node->right = VCHAR WD;
l
if (node->style ~~ 's')
(
node->bQttom += 5;
node->rlght t= 5;
*
....
l'..)
....
lJ\
VI
J3
00
w
\0
....
~
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
W
CD
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
]525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
s::
en
s::
I
1542
1543
1544
1545
1546
o
-I
1547
1
1549
0
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
-Iloo
o
1548
init frame(msqhnode,title,out clr)
reg1ster MAPNOvE
*node;
regIster char
*rnsg, *title, out clr;
(
char
*n, *frame bar('i'
reglster char
scroll clr-"" (4~ 6)tYELLOW, title clr = WHITE;
reql!?ter P E IIDR
*hdr; statlc shortup arrowr] = (7 0,0,6,7,12 7 9 10,9,10 3,7 3 7 O)~.
statJc short
down arrowrl = f3,O,3,J,o,1,6'~63£9i3,i2~16115~1~o 1"
stat-l-C short
l~ft-arrow [ = {6 0 0 7 3 7 3 1
~
0 9 I It I I, () /
:
statlc short
rlg~t arrow 1 ;;:; {3bO,j6j~6~j615616ti2~1~~,1,9L063~O ;
static long
reSize symb lrl = Oxo OU7I8
X7[80/f~O Ox7rS 7r8
OX7f807fc4,OxOOeco 7c,Ox003Co67c,OxOOfcOaOO,oxoo000600}:
if (node->title)
(
n "" fr9.me bar(mS "top",400,'T',O O,node->title,lOOO D,out elr 0 NO)l
draw filled rect tn6oio,nOde->tlti'L1000~NULL(OiOlout clr,o,o,6,6,"a ' ):
draw-rect(&n,5,1 1
0 "CLQSEr ll tiele c+r 's
, "S") ....
Qraw-text (&n, 0,3 *VCAAR WD, tltle, (INAME"7t1 tie eir, 0, NuLL, NULL) ;
1 E (lnode->nonmod)
[
hdr = (P E HDR *\ start macro(&n 0 1000
VCRAR HT-2,2~VCHAR WD,IN' "Fil.Lf ll 0'0 "Sa ll ) i
draw r~ct\&n,3,OIVCHAR-HT-7A2!VCHAR WD-~{NULL6title cIr, 'S',l,NULL) i
draw-fllled re9tI&n,6,J6vCH R HT-14T2*VC IAR W -10, .
NULL,Olo,tlt e cIr, ,O,O,O,NULL};
end macro(~n,hdr);~raw- end(&n)1
}
lE (node->Vscroll)
(
n = frame bar(m,gLllrght",400, 'V',node->paDe-1Anode->pane-l~790,
node->rignt-node->Qane-node->outllnet~,out clr,BlAcK,l,NO):
draw rect(&o,node->Qane,noae->pane,VCIIAR HT-4,
node->rlaht-(noae->pane\-l node ->outline),
"SCROLL! Ii scroll clr, lSi
, "Sb ll ) ;
draw poly(&n,A75 node->panetl
g , u~ arrow I. IIOpfll scroll cir 0 0 IS' " 1 liSa")'
0 ,
0'
,
draw po y(&n,9~O,node->Dane~1 " ,
8" ' down arrow I "DoWn!" , scroil eir , 0 , 0 I IS' I0 1 "Sa ll ) ,•
dC&)
"
n;
d raw_en
~
~
~
b
U\
'th
o
to
00
w
\0
~
~
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
)567
1568
1569
1570
1571
1572
1573
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
1'1>
o
o
o
o
o
o
.....
o
01
-Iloo
.....
1574
1575
1576
1577
1578
1579
1580
1581
1582
15B3
1584
if (node->lIscroll)
{
n
~
frame bar(msq "bot II 400, 'H' node->pane-l,O,
node->bottom-(no~e->panef-(node->outllne)+2,
910,out clr,BLACK,l,NO);
draw rect(&n node->pane,node->Qane,
node->bottom-noBe->pane-noae->outline
2*VCHAR WD-2,"5CROLL!" scroll clr,'S';1,"5b tl ) ,
draw polv(&n,node->pan~ 95~,
g , left arrow I IILEFT!{' J.. scroll cir " , '5' " 1 "Sa")'
0 0
0 ,
,
draw po+y(~n,node->pane ~90,
ll
B'd
rl(lltr ' "RIGHtl" , scroll - cir " t '51 , ,1 "Sa ) .
arrow
0 0
0 ,
d raw en &n;
(node->menu)
frame bar(msq "bot II 200,'M' node->pane-l,O,
node->bottom-(node->pane~-(node->outllne)+2,
lOOO,out clr,8LACK,1,YES);
(node->general use)
frame oar(msq-lIbot " 200,'G' node->pane-l,O,
node->bottom-(node->pane~-(node->outllne)+2,
lOOOlout clr,BLACK,l,YES)i
(node->pa ette)
frame bar(msq "left",200,'p'lO,n o de->pane,lOOOO,
node-~left-(node->pane}-{node->outline)-1,out_clr,8LACK,l,YES);
(node->res~ze box)
n = frame bar(rnsg IIrbox",200,NULL,O 0 0 0 scroll clr,BIcACK,l NO)'
draw symbol (&n, 0 1 6,16,16, reSlze symbol I ('RESI ZET lI,scroll cIr, 6, liS II) i
draw-end(&n):
(node->corner)
frame - bar(msg,"lbox",200,NULL,O,O,O,O,out- clr,BLACK,l,YES);
~
l>.J
til
I
}
If
·
If
·
If
·
If
(
}
If
Ul
1A
o
J0
00
w
\0
~
l>.J
="
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
] 602
1603
1604
1605
1606
1607
1608
1609
1610
1611
J612
1613
1614
cllar *frame bar(msg,keywLsize,type,row,col,height,width,color,fill,thick,end)
reglster char
*IDSg, *Keyw; ,
char
type, color, ,flll, ~nd;
,
regIster short
row, col, helght, Width, sIze, thick;
(
~
~
~
char
*n;
n = Append triple(msg,keyw,size,NULL);
*11++ :;; type;
draw filled rect(&Dlrow,COl,heigQttwidth,
.
NULL,cotor,O,fl 1,0, 'S',O,tfilcK,"a");
lf (end)
drawend(&n};
return(nri
U\
"vi
o
set user(narne,buf,size)
tv
register NAME
*narne;
regIster long
buf, size;
(
register char
*p;
if (p = Find triple(buf,"name",size,NULL,2,NULL))
(
strc1v(name->user,p) :
Note l1s1 ned onll, ):
Put( LL/~III",Newm~g(128,"u",lIname=:#SIl/P});
~oo
W
\D
~
~
QC
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
1'1>
o
o
o
o
o
o
.....
o
01
-Iloo
I\)
1615
16]6
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
}634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
-Iloo
W
1647
1648
1649
1650
]651
1652
chanqe(screen,map,msg)
SCREEN
*screen;
LIST
*mapi
NESSAGE
-Amsg;
{
regtster CONNECTOR *window, towner ~ NULL;
regtster short
*p;
register MAPNODE
*node;
if (window = (CONNECTOR*)Find triple(rnsg->buf,"conn ll ,Insg->size,NULL,8,NULL))
{
for (node = rnap->firsti n~de &~ node->window.pid !~ window->pid
&& node->terrnlnal.pid
wlndow->pidi node = node->nxt) ;
if (node)
if (p =. (short*) Find triple(msg->buf," s ize",Insg->size,none,4,NULL»
{
.
r~slze(~creen,node,*p *(p+I);
.
). f (F lnd tr lple (msg->buf I ('actv" I msg->slze, NULL, 0 HULL)
&& !node->neyer)
map->actlve = node;
if (owner =
.
(CONl;lECTOR*) Find triple(msg->buf,"ownr",msg->slze,NULL,O,NULL»
1f ((long)own~r ~= 1)
owner == &rnsg->sender;
if (owner)
{
node->owner = *ownerj
if (node->terminal.pld)
{
Forward(OIRECT/node->terminal.pid,msg->buf);
msg->buf == NULL;
"'"
~
r=
tit
tit
o
tv
I
)
blip window(map->last)i
00
W
\0
"'"
~
o
1653
]654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
l~igl~light
(node ma p )
reg1ster MAPNO 6E
*node:
reglster LIST
*map;
{ if (node && node 1= map->last active)
{
if (!node->metaphor)
{
Put (LOCAL "Window"
.
NewmS4(r;i4 "hlghliqht","bar=fb' tag=#S",'T',"CLOSE!"));
if (node-5wlndow,Rld &~ node-~tltie)
Put(DIRECT,noCle->WlndQw.pld
}
Newmsg(128,"highllght",('off; bar=#b; tag=#S",'T',"CLOSE!"))i
I-'
~
I-'
IJ1
V.
If (node->window.~id\
Put(DIRE C'r,naae->window.pid,Newmsg(32,"keys?II,NULL)) ;
map->1ast_actlve = node;
o
N
00
w
\0
mov~
mark(rowLcal,picture)
teglster shor~
ro~, col;
reglster CONNECTOR
*plcture:
(
Put (DIRECT,picture->pid,Newmsg(32, "mark ll ,"at=#2s",row,c al)};
1680
I-'
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
-Iloo
-Iloo
ld
1681
1682
168)
1684
1685
1686
1687
1688
]689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
nOD
1701
1702
170)
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
s::
s::
1716
1717
1718
en
1719
o
-I
1721
1722
1723
I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
-Iloo
01
1720
clip window(node)
reglster MAPNODE
"'node;
{
regjster MAPNODE
)\t~mp;
priO ~ 127, count, *count addr, *n;
regIster short
)m;
char
for ( ; node; node ~ node->pre)
{
m = Newmsg{lOOO "cut" tlinljI==#s#$#A" priQ-- 0 950 NULL);
count addr .", (short *j (Flnd trlpletm,l1lnHi u ;O,NULL,O,NULL) + 2)
n = count addr + I:
count = OT
for (temp = node->pre; tempI temp = temp->pre)
(
*n++ ~ temp->row;
"'n++ ::: temp->col:
*n'.+ = temp->out ht;
*n++ "" temp->out-wd;
count++:
lcount addr ~ count:
Put(DIRECT,node->wlndow.pid,m) ;
.....
w
w
i
Ut
'tA
o
Jv
00
W
}
*find window(map,window,row,col)
regtster LIST- *m~p'
reg+ster WINDOW *WlndOW "
reglster short row, co i ;
register MAPNODE
*node;
{
for (node = map->first; node; node ~ node->nxt)
l
..
.
query wlndow(wlndow,node->wln d ow/row,co l} ;
If (window->area 1= 'N')
break;
1.
.
.
Wln d ow->preVIOus ~ Wln d ow->no d e;
return(wlndow->node = node);
\0
MAP~ODE
~
...
(.H
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
-Iloo
0)
1759
1760
1761
1762
1763
1764
1765
1766
que~y window(window"conn,row,col)
reqister WINDOW *wIndow;
CONNECTOR
conn;
register short row, col;
{
register char
~p, *reply;
if (window->hdr)
Free(window->hdr};
window->Hdr = NULL;
wlndow->elem row ~ window->elern col = -t.:
repl y . = cal l1 DIRECT Cont,l. pid, Newrnsg (64,_ 'w" e" inU!=" 2s" , row, col) , 0,0) ;
p ::; FInd tJ;lPlelrep 1Y{"l.nIlI",O,none,l,NULL,;
p += 2 *-slzeof short,;
~tndow->area = p++;
wlndow->bar = *t 1 +;
wlndow->row = * (short *) p)++:
wlndow->col = * (short *) p)++;
~ong a11gn(o);
.
If l*(short~)p)
{ window->l).dr:= (P E HDR *l Alloc(*(short*}p,YES);
rnemcPy(wlndow->hdr,p,*(snort*)p)i
Pree(reply);
MAPNODE *new node(map,narne)
register LIST
*map;
reglster char
*name;
{
regi.ster MAPNODE
'Anode = NULL;
reglster short
ii
for (i = POOL SIZE, node = rnap->pool; node->pool && i; ++node, --i)
If (.I)
.
node = (MAP~ODE *) Alloc(sl.zeof(MAPNODE),YES);
memset(node,O,slzeof(MAPNODE)) ;
nOde->rOOl = 1;
strcpy node->name,name);
return node);
/-01
~
!II
lit
Vt
o
tv
00
!..N
\0
/-01
~
C'\
1767
1768
1769
1770
1771
177 2
1'773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
17B6
1787
1788
)789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
180)
1804
1805
1806
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
-Iloo
......
1807
1808
1809
1810
1811
1812
1813
1814
1815
fre~ node(node)
*node;
regIster MAPNoDE
(
if (node->pool)
node->pool "" NULL:
else
Free(node) ;
map after(node~pred,map)
regtster MAPNOuE
*noas, *pred;
reglster LIST
*rnap;
{
if (pred)
(
node~>nxt = pred->nxt;
node->pre ; pred;
if (pred->nxtl
lpred->nxtl->pre ~ node;
pred->nxt ; noae;
}
else
{
if (node->nxt = map->firstl
(map->firstl->pre ~ noae;
node->pre ~ NULL:
)
1 f (I node->pre)
map->first = node;
if (! node->nxt)
map->last = node;
++map->count;
'"'"
t.H
-...l
til
'tll
o
N
00
W
\C)
unmGlP(node map)
teg~ster MApNODE
Anode;
regIster LIST
Amapi
(
.
if (node->pre)
(node->pre)->nxt ~ node->nxt;
else
rnap->first ~ node->nxt;
if (noBe->nxt)
(node->nxt)->pre ~ node->prei
else
map->1ast = node->pre;
--map->count;
't.H"
"'
QC
1816
1817
18]8
1819
1820
1821
1822
1823
1824
1825
1826
]827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
rem~p(window
node new oiQture,rnap,sell
regIster CON~ECTOh
-~wlndow, *new picture;
reglster MAPNODE
*node;
reqlster SELECTION
*se1;
LIST
*map;
{
if (window)
for (node = map->firstj
node && wlndow->pld 1= node->window.pid; node = node->nxt)
if (node)
(
~nd edit(node, 'x' O/O,NU~L);
If lDewpicture
new plcture->pid 1= node->picture.pid)
If thode == sel->rnap)
{
sel->rnap = NULL:
sel->pehding ~ NO;
node1>picture ~ *new_picture;
~
f.I,;I
I,C
&&
VI
U.
o
00
w
N
\D
~
,J::..
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
-Iloo
co
==
1830
1839
]940
IBH
1842
1843
]844
1845
1846
1847
I B4 8
1849
1850
1851
1852
1853
1854
1855
1856
align window(screen,node)
teglster SCREEN
*screen;
regIster MAPNODE
*node;
(
register short temp;
if (screen->char align)
{
if (node->ti~ht)
(
temp:;;;; «node->row % VCHAR IIT) It node->outer
node->row = (node->row / VCHA~ H') * VCHAR HT
temp ~ «(node->col , VCHAR WD)-I node->outer
node->col = (node->col I VCHAR W ).* VCHAR WD
(node->outer + node->wldth/200r +
{
}
If
if
if
if
if
{
1860
1861
1862
1863
1864
1865
1866
1867
1868
}869
1870
1871
1872
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
-Iloo
CD
1875
1876
1877
187B
- node-50uter + tempi
? VCHAR_WD : O)i
tempi
}
1859
s::
en
s::
? VCHAR lIT : 0);
else
1857
1858
1873
1874
'"""
'"""
,j:;o.
)
node->row = «node->row + VCHAR HT-I) I VCHAR ]['1'j * VCHAR lIT;
node->col'" ((node->col + VCHAR-WD-l) '/ VCHARWD * VCHAR-WDi
- (node->row < screen->meta row)
node->row += (screen->meta row + VCHAR_It'r-l) / VCHAR_liT * VCHAR lIT i
(node->col < screen->meta col)
node->col += (screen->meta col + VClIAR WD-l) / VCHAR WD * VCIIAR WDi
(node->out ht > screen->meta ht)
node->helght = screen->llIeta-ht - (node->top -I- node->bottom) ;
(node->0t.tt wd > screen->meta-wd)
node->wl~th = screen->meta wd - (node->left + node->right) 1
(!node->tlght)
temp = (node->height % VI;HAR liT ? VCHAR liT : 0)'
node->height = (node->helght1VCHAR BTl "1r VCHAR {IT + temp;
temp = (nOde->wldth % YCHAR WD ? VCIlAR WD : O)-r
node->wldth = (node->Wldth/VCHAR_WD) *-VCHAR WD + temp;
)
node->out ht
node-)out--wd
= node->hl;!iqht ++node->left
node->top
= node->Wldth
+ node->bQttom;
+ llode->rlght;
1Il
Ut
o
J0
00
W
'D
',j:;o.
"""
l~
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
01
o
1879
]880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
190B
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
S.tatus(msg size)
reg+ster cnar
*~sg;
regIster long
SIze;
{
register char
*rn;
*(m = Allo~(size,YES») = NUL~;
,
strcat m,Flnd trlple(msg,"orlg",slZe,none,l,NULL});
5 trca t m TI II) ~
strcat m~ Fil;}(]' triple (msg, "stat" , size, none, 1, NULL) ) ;
strcat m " In-")'
strcat m~Find triple(msg,"req ",size,none,l,NULL»;
Note(m IIJ:;RROR");
Free(mJ i
~
.a;:.
toll
reply status(req,roid,stat,code)
reg+ster char
*req, *rn~d, *stat;
regIster long
*code;
(
register char
*type, *msg;
type = "failed'"
It (!mid)
,
tyge = "status'"
else +1 l*rnid == ,_I)
mld+-f.· ,
else If (*mld == '+')
{
tyge = "done'!;
}
lJ1
"vt
o
J0
00
UJ
\0
mlcl++ ;
rnsg =
N~wmjq(strlen(stat)+10i
tyne,
"nrlg= S· stat=nS' code= 111 "console" stat code)'
if ( m I d ) '
,
,
" ,
(
Append triple(rnsg,lIreq ",strlen(rnid)+l,rnid);
Reply(req,msg) ;
J
else
~
Put (DIRECT, (long)req,rnsg);
info(dialogue,string,window)
dlalogue, wlndow;
reglster char
*strlng;
(
Put (DIRECT.I. dialogue Lpid, NfilW1D?,Q (strl/i!n (strl'ng) +100 ( II info",
"text=IIS; near=jfC; walt=nS",stnng,&w ndow,5)};
CON~ECTOR
~
y
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
3~
35
36
37
313
39
40
41
42
4J
44
45
46
41
s::
en
,
s::
0
-I
0
1
en
0
"'T1
r
I:t:-
0
0
0
0
0
0
.....
0
01
01
.....
48
49
50
51
52
5]
5~
55
56
57
58
59
60
Module
Date submitted
AuthQr
OngIn
Description
%M% %1%
%E% %U%
Frank Kolnick
cX
Picture Nanager
***~************************************************** ************1
#irllQef lint
statIc char Srcld(]
~el1dlf
1* Picttifi'manager:
'I include
Illclude
Include
= "%z% %M%:%I%";
global
dat~
~
,f:..
r.I'I
'I
I' cX definitions *L
'/* picture, etc. definitions *1
<111.11>
.
Illc,Jude
statId long none = 0;
typedef struct element node
1* links picture elements: *1
{
->next n«de *1
struct element node *nxt;
->precedlnq node *1
~:
strvct elepent-node *pre;
'element bas chanqed' AI
tmslgned char cf1anged~
'element 15 markea' *1
~:
t1lls1gned char
markedt
'no longer in use' *1
ullsl,gned char
deletea;
'local Duffer pool' *1
~:
unsIqlled cllar
pooli
(start of element) *1
shore
lengeh;
'/*
1***** lfO'l'E: 'length' must start all a long-word boundary '****1
ELENENT;
lypedef struct current state
(
*msq;
char.
s~nder~
CONNECTOR
SIze;
long
appl;
long
appl row, appl col;
short
owner:
CONNECTOR
*marki
char
'old mark;
char
,Iqi!rase mark'
char
dl!ilplay mark:
unslgned char
pnvateT
\lnS 19ned char
check;
ullslgned char
dr;>buqj
unsIgned char
char
char
chor
long
char
CUHHENT~
hlghllqht;
J2!'
n 9 me 64 ,
file
stat b 'oelej
s
*status_s trlllS1;
'"0
::u
0
§ci
~
t.I\
r-'
1A
H
0
tv
(fl
>-'l
H
00
Z
W
\0
G')
to
1* current data: *1
;!
~:
~:
~:
~:
~z
~:
~:
~:
-)current msg. *1
cQnn. to msg. sender 'III
SIze of msg. *1
relevant appliC9t~on */
appllcatioh 'origin' *1
conn. to owning proe. *1
current mark element *1
copy of previous mark */
Tl~ment to erase mark *1
dl~play mqrk' */.
'prlvate pIcture' *1
'ch~ck sl~e' *1
'prInt dl?gno~tic~' */
type of hIghlightIng *1
Plcture's name AI
pIcture file's name *1
current status •.. *1
. ,. */
...
="
~
61
62
63
61
65
66
67
63
69
70
71
72
73
7<1
75
76
77
78
79
80
81
82
83
84
85
86
87
BB
89
90
91
92
93
94
95
96
97
98
99
100
]01
102
10J
s::
en
s::
I
I
0
-I
0
en
0
"'T1
r
I:t:-
0
0
0
0
0
0
.....
0
01
01
I\)
104
105
JOG
107
100
109
)10
111
1.12
113
114
115
116
typedef struct view node
I
struct view node
*nxt;
CONNECTOR
owner;
short
row, col;
short
height, width:
1* links viewports: *1
typedef struct appl node
I
struct appl node
*nxti
lon~
name:
CONfECTOR
conn;
short
row, col:
1* links applications: */
->next node *1
name of appli9atiQn */
~:
cOQn, to applIcatIon *1
typedef struct anim node
(
struct aoim node
*nxt;
lon~
name;
CON ECTOR
conn;
1* links _animation processes: */
->next node *1
name of element */
~:
conn. to process *1
/*
typedef struct affected area
l
short
rl, e1;
short
r2 e2;
char
co 1or;
char
pattern;
short
max h~i~hti
short
~alCv-lld hi
short
leight, Width;
AHEA:
typedef struct lists
(
*first;
ELEr1EHT
*last;
ELE~1EIIT
*C\1rrent;
ELEI1ENT
*VIews;
VIEW
*applsj
APPJ.
*anlms;
AIHH
changes;
111t
erases;
~Ilt
SIze;
lilt
struct
(
11'
long
size;
lon~
*ptr;
ELm ENT
pool;
1* area changed
VIEI-l;
APPL;
AlUM;
) LIST:
~:
~:
~:
~:
~:
~:
1*
->next nod~ */
owner of viewport */
start of v ewport *1
extent *1
~
,j::o.
~
orIgIn */
by a request: */
lJI
upper l~ft front *1
lower rIght back */
background color *1
backgr01.,lIld pattern */
max. hfi!l~ht *1
max. Wid h */
current size *1
Ut
0
"tV
00
w
\0
1* list pointers, etc.: *1
~:
~:
~:
~:
~:
~~
1*
->pict. element list */
->end of p.e. list *1
->l~st p.e. yhan~ed */
->Vlew~ort lIst .1
->appl c~tion~ lIst *1
->anImat191l llst *1
IChanges 1n 11~t *1
erasures in llst *!
£Icture elements *1
e ement pool deser.! *1
hlements *1
SIze of elements *1
->elernent buffer *1
~
,j;:"
00
J17
] 18
119
)20
121
122
123
124
)25
126
]2"1
128
]29
130
]31
)]2
133
]34
135
136
137
138
])9
140
1*
113
144
115
146
147
148
149
150
) 51
)52
15)
] 54
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
01
W
J55
156
157
)58
159
*1
*value(), "'tarO i
*rn'ilrk number{ I "'mark area() J
chill:'
ELEHF:11T
l' E IIDR
*flrst_macro(, *next=macro(;
lie Picture manager:
"'mark e.lements(), *new_elcment();
-
main-line 'hI
PROCESS (Picture)
(
CURRENT
cur;
AREA
a~ea;
LIST
11~t;
reglster VIEW
*Vl~W;
regIster ANIM
"'an1m;
$et event key("Picturfi'l ~qr. ") ;
Inlt P~(&cur,'area &llst)
draw~Plcturel~cur,'area,&llst); .
for lVlew; lst,vlews; view; VIew = view->nxt)
PlI t (DIRECT t VIew;>owner, pld t N~wrnsg (3? I "unmap" , NULL) ) ;
for (aolm ~ 11st.~nIms; ani" anlm = anlm->nxt)
. Put (IJIHEcrr I aJllhl->conn. p1d, Newmsg (32, "quit" I NULL) ) ;
',j;;o,.
"""
~
'f
Ex 1 t ()
141
)42
local functions
V\
lh
o
j
N
00
ini~
PH(cuL{area,llst)
reglster CU~REHT
*cur;
regtster ~REA
*area;
reglster LIST
*llst;
{
area->color = BLACK;
area->paltern ~ 0;
*cur->name m *cur->file = NULL;
area->max height = area->max wl~th = 0;
11 st ->cyrrent = list->first ~ llst->last = NULL;
11 st ->vlew5 "" HULL;
] I st->ap!;lls ~ IHlLI.:
] 1st->al1lms == NULl.;
llst->size = list->pool.n == 0;
HO;
cur->debug = cur->check ~ cur->pnvate "" cllr->cl1splay- mark =
== cur->erase_mark == NULL;
cur->mark = cur->old mark
I
•
w
\D
'til
"""
=
]60
161
]62
16)
164
165
]66
167
168
169
170
171
172
]73
174
175
176
177
178
179
180
181
]82
183
184
185
186
187
}88
]89
190
191
]92
193
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
01
-Iloo
194
195
196
]97
198
199
200
?Ol
202
203
draw nicture(currarea,list)
GURBENT
*cur:
regtster AREA
*area;
regLster LIST
*llst;
{
register char
""msgi
transaction = 0, result == 0, go = YES;
reglster short
*element·
register ELEMENT
statu5[li], list size = 0, *req ~ NULL;
long
while (go)
(
9 ur ->msg = msg = Get(O,&cur->sender,&cur->size);
If (!transactIon)
(
list->changes = list->erases ~ area->r2 ~ area->c2 ~ 0;
area->rl ~ area->cl = 32767;
9ur->~ppl = NULLt
If (llst->appls)
,
check appl(cur,llst->appls);
)
If (*rnsq == 'f' && tr~nsaction < 10)
status(++transactlon) = 0;
else If (*msg ~= 'l')
--transactIon;
else
.
qo = Requ~st(cur/area,list,msg,cur->size,cur->appl);
If (!transaction)
(
if (list->chrtnges)
notlfy(cur,area,ll~t) ,
for (element = 11st->flrs~; element; element = element->nxt)
{
~lernent->chanqed = element->marked = NO;
If (element->aeleted,&& IAny msg(NULL))
delete- element(llst,element};
}
.
if (Find triple(rnsg,"rplY",cur->size,No,OlNULL) && result >== o}
reply status (msg, msg I "completed '1 , resu t) ~
tree_requests(rnsg,cur->size,&req,&list_size) ;
f
~
!.II
~
l.Jl
-
'tit
o
tv
00
tJ.l
\0
~
i!l
204
205
206
207
208
209
210
211
2)2
cheyk appl(cur app1)
regjster CORRE~T
tcur1'
regIster APPL
Aapp ;
(
for ( ; appl && (appl->conn.pld
If (aprl)
(
227
228
229
230
231
232
233
234
2J5
236
237
238
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
01
01
~
~
fre~ requests(msg,size,req,list size)
reqp;ter char
*qlSg, Breg: ,reglster long
slze, 'lISE Slze;
(
register char
*temp, *next;
if (msg)
(
*(char**)msg == *req;
* r~q == s Tsg; += SJze;
,
*llst
ze
if (fnny msg(NULL) I I *list size> 10QO)
for 1temp ::= *req, *req ~ NULL, *llst size
next ::= * (Ghar*"") temp;
Free(temp) ;
Ul
"ut
o
N
00
w
1.0
=
0;
temp; temp
::=
next)
~
1Il
239
240
241
242
Reqvest(cur~area,list,msg,size,appl)
244
(
243
~
appl->name))
cur->app1 "" -1;
cllr->appl row:::: app]->rowi
cur->appl=cQl = appl->col;
214
215
219
220
221
222
223
224
225
226
cur->sender.pid): appl = appl->nxt);
!.It
if (! (cur->appl
213
216
217
2]8
!~
rcglster CU!cRENT
reQlster AREA
req1 s ter LIST
reglster long
*cur;
*area;
*list;
msg, size, applJ
~
248
249
go ~ YES;
if (!strcmp(msg," wrlte"))
Draw(11st,rnsg,slZe) .
else 1f (1 strcmp(msg, "edlt"»
251
else If llstrcmp(msg,"mark" )
253
else 1-f Ilstrcmp(ID!?g,nilltll)
Iqt( tst/msg,slze~applll
245
246
247
250
252
254
255
256
257
258
259
260
261
262
263
264
265
266
267
260
269
270
271
272
273
274
275
276
2'77
278
279
280
281
282
283
284
s::
en
,
s::
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
01
0)
285
286
287
288
289
290
291
292
293
re~i~~er
shorl
.
E~lt text(cu~,area'llst!mSg'SlZe,appl);
MQve mark(cur,area lIst;
else If { strcm!;) (msg, 'move '} )
MQve area,llst,ms~,slzeflappl); .
else If !strcmp(msg, era~e')}
Eraserarea,l1st,IDsg,slze,uppl) :
else 1f {.strcmp(msg,tlreadll)J
CQQY cur,area,llst,mSg,Slze(appl);
else If !strcmp(mf?g "replaQe")}
R~Qlace(area,lls~flmsg,sl~e,appl) ;
else 1I (! strcmp!lJIsq, 'change")}
C~ange{area, lst,msg,slzB,Sppl);
else If {!strcrnp!IJISgj"anlmate l } }
Anlmate(cur, 1St •
else if (lstrcmp(msg, "alter") II Istrcmp(ms9, "cancelli»)
Alterfcur,llst);
else 1f (.strcrnPJJn$gL"nUrnberll»
Qver number llse msg slze,appl);
else .If t"!s trclI1p lIls9 ('mark?") )
Qvery mark(c r),
else If (t~trcmp{msg'''~avell»
S9ve PIcture cur,l1st~·
else 1f
strcmp msg, "s'?t 'f)
s~t mark(cur,area llst);
else 1 f- ( I s trcmp msg, (, restore") )
R~store ~ark cur,area 11st);
else If (!strcmp msg "bkgd ll »)
D9 ckground(area,iist,msg,size) ;
else lf l!strcJ)'lp(msgl"create')l
99 = New plcture(cvr,area, 1st}:
else If (!strcmp(msg,"lnlt"»),
.
cvr->private = go ~ New I1cture(cur,area,llst);
else If (1strcIJ1P(msg "open':r
99 = Old plcture(cur,lh s )1
else 1f {!strcIJlP(msg'''apPl I»~
J\I? 1 ur,llst);
else 1~ Tstrcmp(msg,"qult ll »
{
if (qo ~ (cu~->sender.pid !~ cur->owner.uid»
feply status(msg,msg,"not authorized ',O} ;
}
-
~
til
til
I.J\
"ut
o
to
00
w
I
-n
\CI
l
l
~
til
~
294
295
296
297
290
299
300
301
302
303
304
305
306
307
308
309
310
else if (!strcmp(msg,tlquery")}
Ql,lery(cur,llst) ;
else If t fstrcmp[msg, "failed"»
S~atus(msg,slZe) ;
else 1f: (!strcmp(msg,"done") II !strcmp(msg,"status ll »
else; if(! change attribute (list,rnsg, s.1 ze, appl»
(
If (!~trcmp(msgiliviewlill
~
!.J1
......
VtewgQrt(cur,area Ist)~
else If {Istrcmp(msg,fidebug')
cur->debug = !cur->debug;
else
reply status(msg,"-\'unknown\''',msg,O);
)
returll(go) :
Ul.
Ul.
o
LV
00
W
\0
~
IJI
00
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
01
......
311
3J2
313
314
315
3]6
317
318
319
320
321
322
323
321\
325
326
327
328
]29
330
3)1
332
3)3
331\
335
3JG
337
JJ8
JJ9
340
341
342
30
344
315
]46
34 'J
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
01
CO
348
349
350
351
352
35J
354
355
356
eha r~ge a ttri btl te (li!? t L msg, 81 ze, appl)
reg 1 s ter 1,rS'1'
*llsq
reg.Lster long
(
static char
I
rnsg, SIze, appl;
msgids[] =: "select\Oblink\oinvert\Ohide\Ohighlight\O";
reglster char
'p:
reg~ster sbort
new state, changed, type;
regIster ELEMENT
*element;
regIster P E !lIJR
*hdr;
for fD a msgids, type = 0: *p && strcrnp(rnsg,p); p += strlen(p)+l, ++type);
1 [ (. ~p)
return(HO) :
list->current = element = rn~rk elernentS(list,NuLL6NuI~~msg,size,appl);
new state::::: !(short)Find trlPle(msg,"off ",slze,1t ,0;UuLL/;
10r-( : element; element"·: elernent->J1xt)
]f (element->rnarked)
{
bdr "'" (P E I1DR *) &element->length;
sWItch (type)
{
9hanged = hdr->attr.selected I I new state;
case 0:
lf (hJr->attr.selected ~ new ~tate)
Ptlt(NEXTLtlconsole"~Niwmsq(hdL->lenqth+50,
"wrlc:e" ' Itdata'" e e' tYI)e""lI c " , hdr / HULL , 'Pi)).
,,,
,
b rea k ;
.
chanqed === hdt"->attr.blink !"'" new state:
case 1:
hdr-5attr.bllnk === new state;
break;
chanqed = bdr->attr.invert 1= new state:
case 2:
hdr-5at tr. UlVert = new sta te;
break;
chanqed == 11c,Ir->attr.hidden != new state;
case 3:
hdr-5attr. lldden = oe\>1 state;
break;
.
challged = hGlttr.higllllght != new state;
case 4:
hdr->attr.lnghllght = new_state;
J
If (element->chanqed ::= changed)
1Ist->cl1anqes++'
elernent->rnarked : : : 116;
}
return (YES) ;
....
til
~
VI
v.
~8
00
w
\Cl
....
=
Q\
J5'l
358
359
360
361
362
JG)
364
365
366
367
368
369
370
371
372
373
374
375
3'16
377
)78
]79
380
301
]82
38)
38~
]85
3UG
387
Qllery (cur, List)
CUR~E~T
)
396
391
s::
en
,
s::
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
01
CD
J90
399
400
401
402
40)
404
405
406
407
408
-
-
.....
=-.
.....
U1
Vt
-
else
pi y h t = tJ i c wd,:-: ma}{ r "" ma ~ c
for (VieW ~ list=>Vlews; VIew; VIew
RcpJv(cur->msq"
1
= 11\ n r
o
~N
00
== mill C =;= 0;
Vlew->nxt, nVlews++);
.
N~WmSg(256,ltstgtlls",ltortq;:,#s; ,size==1l2Si !ow""#2s; high=~2s; cnt=#s; \
vle\.J= 5; ,naJllC=#9; fll~==nSIl,"plcturel\,
p.1C h ,PIC \>Jd,Ulll) r(mlll_C,max r,max_c,n elem,l1 views,
cur=>name,cur->fIleJ);
--
388
]89
390
]91
392
39]
394
395
*c~r'
regIster LIST
*llSf;
l
'd
n elem BOn vi~ws ~ 0;
uI1s1gne
min r ~ 65~357 mIn c = 65535;
,
reglster unsigned
max-r = 0, max c =-0, pic ht = 0, pIC wd = 0;
reg~ster unslqned
*el~ment;
regjsler ELEMENT
reglster P E IIDR
*h~r:
*Vlew;
regIster VIEW
for (element = list->first; element: element = element->nxt)
(
hdr = (P E IIDR *l &elemr;:nt->lenqth;
if Ihdr-:->row < nlln-c l]lln--c == har->row;
mpl r) mlll r =
1f
hdr->col <
hdr->col:
~ f
hdr->row + hdr=> Wlqht > max r) max r ~ hdr->row + hdr->llei(Jht;
If hdr->col + hdr->Wldeh > max c) max c := hdr->col + hdr->widtl1;
n e emH·;
}
If (n elem)
{
pte ht ~ max r - min r;
plc-wd = max'-c - mln'c;
query
~
w
\0
number'111ist,ms~1~iz~,appl)
1'ee1l ster I,IS
1st,
register long
msg, size, app1;
{
regjster unsigned
n = 0;
regIster ELEMENT
*element, *temp;
if (element = mark elements(list,NULL,NULL,msg,size,appl))
(
for (temp ~ li;t->first; temp != element: temp ~ temp->Ilxt, ni+);
Hepl y (111sq, N~wmsglelemel1L -> 1ength+3 2,1' number" ,
"num"'ns; e em=#e",Il,&element->length));
}
else
reply_status (IIISg, "-number", "too high",O);
.....
=-.
N
409
4)0
411
4] 2
413
414
415
416
417
4 18
419
420
121
422
423
424
425
426
427
428
429
430
431
4)2
4)3
4)4
435
436
437
438
419
440
441
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
0)
o
442
443
444
445
446
447
44B
449
450
451
452
453
454
455
456
457
Dra~(list mSq,Sizel
reg1steJ: LIS'!'
'" 1st;
reglster long
msg, size;
(
.
register ELEMENT' lafter;
reglster long
"'p:
if (p = (long *) rind triple(lllsg,"data",s1ze,UULL,4,NULL»
(
if (Find tripleLmsg,"back",size,No,O,NULL))
after::: NUL ;
else
after = list->lasti
if (!draw elements(p,*(p-1),list,after)}
reply~sta tus (msg, "-Wrl te" , IIbad length/type/macro II, 0)
}
else
reply_status(msg, II-write" ,1I)l1issing \ 'data\ 111,0);
elements(p,list len,list,after)
*p:
regIster long
ll~t len;
regtster LIST
*IIst;
regIster ELEMENT
*after;
(
register ELEMENT
"'element;
reglster short
length, number
while (leng~h ~ * (short *) Pj
&& (llst len -'" length '>= 0
.....
=-.
CN
;
dra~
VI
reglster char
&&
{
if
Vt
o
p
00
UJ
1.0
:=;
0;
F>trchr("tlreacdslI1n", (P--- E- !IDR*)p)->type))
«( (P
E HDR"')p) ->type ,.,,'"
'm'
&&
!check lllacro(p»)
element ='new element(llstllength+sizeOf(ELEMENT) ,after);
~emCPYi&element->lengt~'f)f ength) I
If (1 ( P E IIDH*)Pl->helg) .)
de lne-bo}{(~e ement->lcngth);
number+'I-; p += 1er.lgth;
Long allgn{p) ;
Ijst->si;e +m number!
11 st->changes += llu)l1ber;
llst->current = elementreturn (length? NO : YEE;j;
Dreak~
.....
=-.
,f;:o.
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
47)
474
475
476
477
478
479
400
481
482
403
484
485
486
487
488
489
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
0)
.....
490
491
492
deflne box(hdrl
reglster P--- E--- llDR
(
*hclr;
~
register char
*val:
val = vallle(hdr) ;
l[
(hdr.->type
==
~
til
't')
(
hdr->hr;ight = VClIAR Il'l'i
lldr->wldth = VCJlAH ND -I< strlen(val+8) ;
)
else if ((hdr->type
In') II (hdr->type == 'm'))
=;;::;
U\
che<,~k
"ut
o
nlacrO (hdrl
10
regIster P- r~ ._- fIOn
{
*hdr;
register P E lIDR
*temp, *firstj
short
- --.
len;
char
*p mClcro__ type;
00
W
\0
f
for (first =' temp"'" first macro(hc1r,¯o type,&len,&p);
temp = next_macro (&len I &p) )
-
temp:
if (macro type == IL')
temp--;S:'attr.hidden = YES;
if (ftef)1p->helgl1t)
defllle_box(temp) ;
If (m~cro type =~, '1')
tlt-st=>attr.hlddell =: NO;
return (p ? YES : NO);
}
~
'"
'"
493
494
495
496
497
4~)
8
499
500
501
502
50J
504
505
506
507
508
509
510
511
512
513
514
51.5
5]6
51'7
518
519
520
521
522
523
524
525
526
527
528
s::
en
,
s::
o
-I
,0
en
o
"'T1
r
,:t:o
o
o
o
o
o
.....
o
01
0)
I\)
529
530
531
532
533
534
535
P E 1I0R *first macro(hdr,type,len,p)
reglster P E IIOH
.,\hdr;
reglster char
*type;
reglster short
*Ieh;
reg lster char
.up;
( register P E lIDn.
.
t
-Ie elOp;
""p = va111e(hdr) i
ir (type)
""type::::: **p;
~
="
~
(Ap)+-I··
LOllg aiiqn(-A-nl1.
temp-:=< (P E IDl-< *l *p;
""len = hdr-~lenqth - (*p -
(char *) hdr}'
if (ternp->lengtFl && temp->1ength < *len ~& strchr("tlreacdsmn",temp->type))
re turn ( temp) ;
*P "" NULIJ'
return umf.q ;
VI
"ut
J~
"'next rnacro(len,p)
regjster short
*len;
regIster char
up:
l
. t-er P_E_IIDR
regIS
*temp;
P E 1I0R
00
W
10
if (*1')
(
temp == (P E BOR *) *P;
*p t= t~lt1p-~length;
Long all1n(*P);
*1el1---= *p - (chCl.r *) temp)'
t_emp == ( E IIDn *) *Pi
If
(tellll?-~lellgth)
If (tel1lP->length < A1en && strchr("tlreacdsmn",temp->type))
return(temp);
else
*p "" NULL:
}
return (HUL,L) r
~
="
00
536
537
538
539
540
511
542
50
544
545
546
50
548
549
550
551
552
553
554
555
556
557
558
559
560
561
%2
56]
56iJ
565
566
567
568
569
5.,0
571
572
573
!J74
5'75
576
s::
s::
en
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
0)
W
577
570
579
580
581
5132
5133
584
585
Hep,l ace (area, 1 is t, 1115g , size, appl)
AR~A
'area;
IJIST
"'l1sti.
reglster long
msg, SIze, appI;
l
reqjster char
"'Pi
regIster short
length = 0;
regIster ELEMENT
*temp,
reglster r E HDR
*bdr, Atemp hdr = NULL;
regIster long
lIst len; ELEMENT
*after = NULL:
j f (Find triple (msg I "~\O\O\O\O" , size, NO, 0, NULL) )
(
.
Erase(are?, I' t ,msg,slze/appI) i
IS
If
(
after
c
~
~
llst->current;
(p = Find triple(msg,"data",slze,HULL,l,lIULL))
li~t len = * ( lonet *) (p-4 \ ) ;
willIe «length"" *(short ~) p) && (list len -= length) > 0)
(
hdr '=' (P E 1I0I< *) p'1
if (hdr--.:>type == '111 && 1check macro (hdr) )
break;
.
~
for (temp = llst->last; temp &&
((P E IIDR*)&temp->Jength)->row I"" hdr->row &&
•
( (lr-E-mm*) & temp-> leng th} ->col • = hclr->col: temp
temp->pre) ;
]f (temp]
(
lit
VI
o
tv
00
W
1.0
~
temp hdr = (P E IIOB *) &temp->length;
temp=>deleted'-'::::~YES
after = temp->pre;
;
Jraw(temp hdr ~& ((ldr-5type 1= t: I hdr->height!=
elements(hdr lenqth,list,afterl;
If
I
{
}
I I hdr->wldth 1= teJllp hdr->wldth)
change area (area, temp hdr->l"Oy,', temp hdr->col (
,
temp hdr--.:>helght, temp htlr->\-ridth);
llst->erasesff' ,
+= lengtl);
Long_align(p) :
P
)
If (lcllqth)
reply status(msg,"-replace","bad
length/type/macro",O);
temp hdr->height
~
...,J
o
586
58"}
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
G03
604
605
606
60"}
608
609
610
6)1
612
6)]
611
6]5
6lG
617
618
619
620
621
622
623
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
0)
-Iloo
624
62S
626
627
628
629
630
631
632
Erase(area,list,~sg,size,appl)
AREA
*area:
regjster LIST
*llst;.
reglster long
lnsg, sloze, appl;
{
register ELEMENT
*element ~ NULL;
reqlster P E llDR
*hdr;
inE
- number;
if (element = ~ark elements(list,NuLL,&number,msg,size,appl))
(
list->current = element->pre'
for ( ; element; element = eiement->nxt)
If (element->marked)
{
element->deleted = YES;
hdr "" (P E HDR*) &elelTll?nt-> lenqth·
change area:(area r hdr->row,hdr-:>col,hdr->height,hdr->wictth):
J
Jlst->erases += number:
llst->changes += number;
~
....:t
~
VI
"vi
o
to
00
copy(cur,area,list,msg,size,appl)
CUR~ENT
*cur;
regt sler AREA
*area;
regIster LIST
*llst;
regIster long
lnsg, size, appl;
{
register ELEMENT
*element;
regIster short
bkgd, *p;
short
*g;
unsIgned illt
length::: 0;
if (bJcgd = (short) Find triple(msg,"bkgd",size,NO,O,HULL))
(
p "" (short *) F1nd tdple(ll1sg,l1@pos",sjze,&none,O,lItJLIJ);
q = (short *) Fllld·-tnple(lus g ,"@end ll SlZe,&llOne,O,NULL);
change area(area, *p, 'Ie (p+l), "'g-*p, '" (g--I) -"II (pU));
f
I
1 f (( element =: mark elements (1 ist & len Q th NUL1I 1 msq r size, appl) ) II bkgd}
send(cur,area,list,o,length,e 1ement,H 6 ,NO,okga,;
else
ReplY(ll1sg,Hewlllsg(64,"write",NULL)) ;
W
\0
~
~
633
634
635
636
63"7
6)0
639
640
641
642
643
614
645
646
60
648
649
650
651
652
65J
654
655
656
G5"J
658
659
6GO
661
662
663
664
665
666
667
668
669
670
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
0)
01
671
672
673
674
675
676
677
678
Move(area,list,msg,size,appl)
lIHEA
"'area;
LlS'£
*llstj,
long
msg, slze, appl;
(
rogister ELEMENT
*element;
reglster \' E IIDR
*hdr;
reglster lntdelta row, delta col, by offset ~ NO, row e:: 0, col = Oi
reqlster char
*p; lnt
n;
if (p = Find triple(ms9,"by ",size,NUIJI..,4,1IULL))
(
by offset·= YESi
delta row = ~((short *) p)++;
delta=col = *(short *) Pi
~lse if (p = Find triple(msg,ttto ",size,NULL,4,NlJJ.L))
(
row = *((short *) p}++;
col ::=: *(short *) p;
~[ (list->current := element = mark elements(list,NULL,&n,msg,slze,appl))
{
if (!by offset)
l
hdr :::: (P E IJDR 'II) &element->length;
delta row ~ row - hdr->row;
delta-col = col - hdr->col;
lor ( ; e]-ement; element::: element->nxt)
]f (element->marked)
{
hdr = (P E rlOR *) &element->length;
,
chanqe area(area,hdr->row,hdr->col,hdr->height,hdr->Wldth);
hdr-5rOw += delta row~
hdr->col +:= delta-col'
element->changed ~ YES;
element->marked = NO;
element->deleted = (hdr->row < 0 I I hdr->col < 0);
]jst!>changes +~ n;
llst->e.rases +"'" 11;
.......
""""
f..I,)
lit
'til
o
J-.:l
00
W
1.0
.......
""""
-I:>.
679
680
681
682
683
684
685
686
687
688
6B9
690
691
692
693
694
695
696
697
69B
699
700
701
702
70)
704
705
706
707
ChaQge(area~list,msg,size,appl)
reglster AR~A
*area;
reglster I,IST
*llst;
regIster long
meg, size, appl:
(
register ELEMENT
*element = NULL;
regIster P E llDR
*hdr;
char
- *calor, *bkgd, *fill, *pat;
color =- find triple(msg "colTi" ,~ize NUI,L 1 NUI,l,):
b~gd ::: Flnd tq.ple(msg, ('bk,gd' ,slze,imI,IJ, 1, NULL) i
ful == fInd-trIple (meg "fIll" Iliilze NUIJL 1 NUL,I,) i
J;1at = Flnd trlple(msg "pat ",SIze NULL,i,NULl,);
.
If (list->current ; element == mark elements(llst,lfULL,NuLL,msg,slze,appl))
for ( ; element; element = element->nxt)
If (element->marked)
(
hdr "" iP E HDR*) &element->length;
if (co or)-hdr->color = *eolor;
if (bkgdl
h~r-~bkgrnd = *bkgd;
if (fIll) .
.
hdr-~flll ~ *fl1l;
if (pa t)
hdr->pattern = *pat;
cl,lange area(area,hdr->row,hdr->col,hdr->height,hdr->width) i
llst->changes++;
~
til
VI
U.
o
.N
00
l.JJ
\0
708
709
7]0
711
712
713
714
715
s::
en
s::
7]7
0
720
I
o
-I
1
en
o
"'T1
r
I:t:-
o
o
o
o
o
o
.....
o
01
0)
0)
716
7]8
719
Bac~ground(area,listlmsg,size)
re91ster ~nEA
~area;
Ieglster LIST
*llst;
reglster long
msg, size;
{
area->color = *Fin~ trip1eIms g , "colr" ,siz~,&area->color I,NULL)'
area->pattern "" *Flnd triP e(msq "gat", slze, &area->patte.tn, I, HlJLL) ~
c~~nge area(area Q
,o,MAX ROW/MAX C L);
11st->changes = 1lst->erases = IT
I
~
~
721
722
723
724
725
726
727
728
729
730
731
7]2
733
734
735
736
737
738
739
740
711
712
713
711
715
746
717
718
7,19
750
751
752
751
754
s::
en
s::
I
o
-I
0
1
en
o
"'T1
r
I:t:-
o
o
o
o
o
o
.....
o
01
0)
......
755
7 ~)6
757
758
759
700
761
762
76J
764
New picture(cur area list)
regtster cunRENt
'cur;
regtster AREA
*area:
reglster LIST
*llst;
(
register ELEMENT
*element;
regIster long
max, maxe;
short
def f11ax : : : 20 I ~ def maxe = 10° '
def-bkgd ." BL1\CK, - def pa t =
ella r
~
::j
6;
for (element ~ list->first; element; element = element->nxt)
element->deleted = YES;
.
llst->current = l~st->flrsc = l]~t->la~t = NULL;
~lst->chang~s = llst->erase~ = llst->slze = o·
If (Find trlPle(<;:ur->msg,"flle"rcur->Slze,No,6,NULL))
return(Old plcture(cur,llst}) ~
else
(
eur->owner = cur->~enderl
strcpy(cur->l)ame,Fll1d trlple(cur->rnsg,"n a me",cur->size,&none,l,NULL));
area-~max helqbt =
,",,(short~)Flnd tnple(cur->msg,"size",cur->size,&none t 4,NULL);
area->max w1ath ",,"" ( s h or t "') ( find t rip 1 e (eu r - >msg ( "s i z e" , cur - >;;i Z e , &11 0 ne 1_ 4 l, NU f,L) + 2 i
area->color = *f'111<;1 trIPleicur->lnsg, 'bkgd", ellr->slz~, ecdef bKga 1 NOLL'
area->patt~rll = ""Flnd trlJi e(cur->msg,"p,at II Cl1r->Sl~e,&def pat,i NUL ~;
cllr->tllghllght = '" Find trIple (cur->msg, '111gh (I cur->s lze I &none I I, NULL) ;
LIt
LIt
o
J,)
00
w
L
eur->chec}<.
=
1.0
f
(area->JIIax heIght: l= 0);
max =
"
.
d
("'(short*)FlnQ tnplelcur->msg,1I111ax ",cur->SlzEi!,& ef max,2,UULL))IU
~laxe = *(short"") FIIld trIp e(cur->msg, "maxe",cur->slze, &def ma){e,2,IlULL);
If (ma){e & 1)
++l\1axe;
] jst->pool.n = max;
11st->~OOJ .. size = ma){e + siZBOflELEMENTl + 10;
llst-> oQl.ptr = (ELEMENT *) ~l oc(max* Ist->pool.size,YES);
memset 11st->pool.ptrho~maX.llst->gOOl.S1Ze);
cl~ange area(area Q,o,MA1I. ROH,I1AX C L);
llst->changes = 1lst->erases = IT
reply sta tus (cur->msg, "+crea te" , i, comple te" , 0) i
return (YES) ;
~
....:J
QCl
765
766
767
768
Old pictund cur-Il ist \
register CUIowner
cllr->sender;
If {p == Call(DIRECT file.Pi1'
.
Newm$q(64,"re q d","c(;mf1= C: slze=#l",&flle,-ll tala))
If (R = FInd trIple ol"data""O,(WLf.,r4f.H(J~,)
araw elements{r.,!J.(long*)(p-4) 115 ,NUl.L ;
Put( DIRECT If ile. pld, Newmsg (32, 'close" ,"conn="c" r &f11e ) ) ;
reply status(cur->msg,"+open","complece",O) ;
w1111~
785
786
787
788
789
}
else
790
792
79~
795
796
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
0)
co
flle;
~
(char*)l;
"name=NS; omod=~S; amOd=#S(',cllr-5.tlle,"R",NULL) ,&file))
7n~
793
==
I-l
strcpy (cllr->n(;lme, F jnd tr 1
pIe (Cllr->msg, "rl'i me " , Cllr->s 1ze, &nol1e, 1 , HULL) )L'
9trcIJy (cllr-> f 11 e, FlIldo-tr Iple (cur->msg, "t lIe" , CUr->SlZe I cur->name 11, frO L));
If (~cllr->file)
{ if (connect to(HEXT "File TIlgt" Newmsq(\i4,lopen"
780
781
782
78J
791
*llS~;
}
(p)
Vl
==
"ut
S
00
w
\0
return{'iES) ;
,
reply_status(cur->msg,lI-open"/"canlt open f11e",0);
else
reply status(cur->msg,"-open","no fIle name",O);
return{NO)";
I
I-l
QCl
Q
797
798
799
800
001
802
00)
BO~
805
ROG
807
B08
809
810
011
S~ve
IJicture(cur,list)
*c~r'
.
LIST·
"'11st:
*file name, *m, *p1
{
register char
*~lement;
reqlster ELEMENT
fl1e'
CONHECTOR
leng~h = 0, num;
unsigned int
if (! (file name == Find triple(cur->nlsg, "file",cur->size/NULL,l,lIULL)))
file nallle == cur->file;
if (*flle name)
if (element ~
.
ll1ark_elements(llst,&length,&num,cur->msg,cur->size,cur->appl))
CURnE~T
OJ2
814
U)6
B17
818
aJJ
815
(f 11 e . p 1d)
l
819
822
823
824
1125
[126
827
028
829
830
'II
OJ1
I
o
-I
,0
en
o1
"'T
r
,:t:o
o
o
o
o
o
.....
o
01
0)
CD
832
033
834
835
836
8J7
83B
839
840
841
}
else
else
~N
00
.
N~wmsq(num+50,"wrlte" ('conn=flc; data=#A",&flle,l1Uffi,llULL);
=:;
(short
*1
w
1.0
p :::: NU~tL;
PLltlDIREC'l'rIlle'Pld,m) ;
Put IHHECT, flle.pld,Newmsg(32, "c~ose", "conn=llC" (&file));
rep y status(cur->msg,l!+save","plcture savedll,O};
reply_slatus(cur->msg,"-save","can't open/create filen,O)
)
else
Ul
"Ut
o
-
lengt.h + 4 "* nu1l' + 4'
p =: Flnd triple(m,"datn",D,NLlLL,lLNULLli
lor ( ; element; element ~ elemenc.->nxt)
If (elernent->marked)
(
memcpy{p,element,element->length) ;
p += e ~ment->length;
Long al~gn(p);
}
num
Tn =
820
021
s::
en
s::
QC)
if ('ConneQt to(NEX! "File mgt" N~wmsg(64 "open"
j'name=nSr omod== Si amo~=nS"~ft.le name;"w'fNULL)/&file))
Connect to(~EXl',"Flle mgt' NlifWlnsq(64, 'create",
•
.
• "name""RS; omod,"'ffSr amod=="S",flle name,"\>JH,lIULL) ,&file);
]f
....
....
reply_status(cur->msg,"- save ","no elements",O):
reply_status(cur->msg,"-save"," no file name",O):
....
QC)
N
i
042
84J
844
845
846
017
U48
849
850
851
852
853
854
855
856
857
858
859
060
861
862
863
864
865
866
867
e6G
869
870
811
072
073
874
015
B76
877
878
879
8BO
s::
en
s::
I
o
-I
881
8U2
883
884
885
0
8136
087
en
DU9
1
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
......
o
ons
890
Appl (cur list)
CUHI;H!:H'l' '
*cl,Ir
reglster LIST
*llsf;
{
register APPL
~appl;
regIster long
name;
regIster short *p;
name =- *f1ong.*} Find tdplefcur->rnsg,"name",c\lr->size,&nOne,4,NULL)i
for (app "" llst->appls; app && appl->name "" name; appl :: appi->nxc) ;
If (.appl)
.
appl = (APPL *) Alloc(slzeof(APPL) ,YES};
appl->col1n = cm;->sender;
.
p = (short 'Ill FInd triple(cur->msg,"org ",cur->slZ9,&none,2,JlULL);
appl->row = ip++: appl->col = *p;
appl->name = hamel
appl->conn ~
,
,
I
~
QC
lJl
*(CONHECTQR ,q Flnd trlple(cur->msg,"appl",cur->size,&none,4,IHILL);
appl->nxt =
11st-~applsT
llst->appis = appi;
tit
Vt
o
tv
Mov~
mark(ctlrJ.Rrea,list)
reglster CURR~HT
*cut;
reYlster AREA
*area~
reglster LIST
*llst;
{
regi ster P E IIOH
~hdr;
reglster short
*pos;
char
*q;
if (pos == (short II) Find triple(cur->msg,"at " ,cur->size, NULL, 4, NULL) )
{
if (cur->markl
erase mark(cur,aren) 1
else
(
q :: cur->ll1ark = Alloc(si,z,eof(P .E_HQPl+30,Yf-S):
1
draw_llne(&q,O,o,VCllAi'{__llI,O,IlULL,YEL ,ow, S ,O,l,NULL);
hdr"" (P E IIDR *) cur->marJ<:
hdr->ro,,/=-*pos+l- - ((hdr->ileight
hdr->cQl ~ *pos;
CVr->dlsplay mark
11st->challgesl-+ ;
= YES:
-
VClIAR
-
.
lIT) / 2);
00
W
10
~
QC
,j::>.
891
892
89J
894
895
896
897
898
899
900
901
902
90)
904
905
906
907
908
909
9]0
9] 1
912
913
914
9] 5
9JG
9J7
9JB
919
920
921
s::
en
s::
I
0
-I
0
1
en
0
"'T1
r
I:t:-
0
0
0
0
0
0
.....
0
01
......
.....
922
923
924
925
926
927
928
929
930
931
932
Query mark(cur)
regIster CURRENT
*cur;
(
register P_E_I1DH
*hdr;
if {hdr ::;; (P E m)}1 *) cur->mark)
else
.
Heply (cur-:;>ntsg, Newrnsg (64 r "mark " , "a t== H 2s" , hdr->row , hdr->col) ) ;
reply status(cur->msg,
II-mark?", "no mark defined",O)
if (cur->old ma~k)
Free(cur=>old mark) ;
clIr->old mark = cur->marki
cur->mark = NULL;
list~>challges++;
QQ
tit
i
Set mark(ctlr,l,area,list)
reg1ster CURKENT
*cur;
regJster AREA
*area;
regIster LIST
'lIst;
(
register P E liOR
*hdr;
if ((hdl' ::: (P E HDR*) Find triple (cur->msg, "da ta" I cur->s ize, llULL, 1 t NULL) )
&& hdr->length)
if (cllr->mark)
(
erase mark{cur(area);
Free (cUl~->lTlarkJ ;
Free(cur->erase mal'kLL"
CUr->erase mark-= HU ;
}
cllr->mark "" Jl.lloc(hrlr->lengthIYES);
memcpy (cur->markkhdr ,.hdr-> length) ;
cur-~aIsplay mar
::: yES;
J
else
(
...
lIJ
In
o
tv
00
W
\0
...
QQ
=--
9))
934
935
9)6
937
938
9J9
940
941
942
943
944
945
946
947
948
949
950
951
Rest-ore ll1arJ«c\lr,area,list)
reglster CUHHENT
*cur;
reg1ster AREA
*ar ea :
regIster LIST
*llst;
{ if (cur->old mark)
{
if (cur->rnark)
(
erase mark(cUr,area);
Free(cllr->mark, ;
Free(cUr->erase markl '
cur->erase mark-= NUL L:
}
cur->mark = cur->old mark;
C\lr->old mark = NlJLl,-r
1Ist->changesl+i
~
QQ
....;J
Ul
'Ut
o
952
953
9511
955
956
957
958
959
960
961
962
963
9611
965
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
......
I\)
966
967
968
969
970
971
to
00
W
era~e
\D
mark(curharea)
reglster CORRENT
*cur;
reglster AREA
tarea;
{
if (!cur->erase mark)
cur->erase mark = Alloc(*(short*lcur->rnark,YES) .
memcpy(cur->erase rnark,cur->mark t (short*)cur->markj;
((P_E_I1DR *)cur->t!rase_mark)->co 1or :=: area->color;
Edit text (cur I area, l.ist, msg, size, appl)
*cur;
AHEA
*a rea;
register LIST
*llst;,
regIster long
ms g SIze;
CURRENT
long
{
app_1;
~
QQ
QQ
972
973
974
975
976
977
978
979
980
981
982
983
984
985
98G
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
100)
]004
1005
1006
1007
]008
]009
]010
s::
en
,
s::
o
-I
0
1
en
o1
"'T
r
1'1>
o
o
o
o
o
o
.....
o
01
......
W
] 011
10] 2
] 0 1)
1014
lOIS
]0]6
1017
1018
1019
l-eglster char
regIster short
short
ELEMENT
*p, c, *text start, "'new'
shlft, offset, sel offsef, ok
sel lenqtll ; _ .
*element;
p E IlDR
=
YES;
"'lIdr;
if (list->current = element = mark elements(list,HULL,NULL,msg,size,appl))
{
offset:= *(short *l rind once(mSQ(" o ffs ll ,size,&nOne,2,HULL);
hdr. ;::: (P E !lOR *) &e ,ement->lengE 1;
if (hdr-:?type "'= 't')
(
text start = (p = va]u~(hctr) + sizeof(long) l + 2 '" sizeof(short);
If (slq ft '" '" (short*lFllld oncelmsb' "shft", sIze, &none, 2,0»
ShIft text(p I tex' rtar~ sh ft ,.
'"
'r,
1£ (FInd once(rnsg,"set ",slze,HO, ,NULL»)
(
sel offset == *«short *) 12)++;
sel-lenqth "'" *(silort *) Pc
ok ~ (offset < sel lengtll/;
I
...
QQ
\C
oJ
I
offset += sel offset;
&& (offset < strlen(text start))))
p ~ text st~rt + offset;
Ul
'Vl
I
If (ok'" (ok
{
o
~tv
00
w
If (new ~ F'lnd once(msg,"new ",slze,HULL,l,ItULL))
1.0
\Vhil~ (c =-*newl
I)
If (c > 31 && c < 127 && *p)
(
"'pH == c;
else If (c == 8 && P > text start)
*--p '" , ';
If
(F:ind
*r'
-
once(mscr,"blnk",size,NO,O,IIULL))
19 r '( .
;(p++ "" , ,).
If (FInd trIp e(msg,"by ",size,Ho,O,HULL))
r
,
•
,
,
MoVe(6rea,list,Wsqrsize,appl)
Draw(l st,msg,slz~/;
(
}
1
else
{
element->chanqed = YES;
llst->cllangesf+ ;
}
~ove ,ark(cur,area list);
i f (r~l1d once(lnsg,"fast',size,Ho,O,NULL))
Ilst;>erases = 0;
,
...
\C
Q
1020
1021
]022
]023
1024
J
else
)025
1026
J027
J028
1029
]030
]031
1032
1033
1034
)035
1036
]037
] 038
10)9
1040
]011
]012
1013
J 04 4
1045
1016
)011
1018
)049
1050
)051
]052
1053
]054
lOSS
s::
en
s::
I
]056
1057
J058
]059
o
-I
1060
1
1062
0
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
......
-Iloo
)061
J
else
J
else
reply_status(msg,"~edit","outside
text string",O)i
reply_status(msg,lI-edit","not a te}{t element",O);
reply_status(msg,"- edit","not found",O);
"'"
'=
"'"
shift text(sel,text,lldlars)
reg 1 ste L slJOrt
*sel L nchars;
regIster char
*tex~:
(
register short
length, n:
if (length = strlen(text»
= length'" nchars) >
memcpy(text,text+n,-nchars);
Ipemset (text-nchars,' ',n);
If (*8e1 - n >= 0)
IIsel
Jli
else
(
*sel "" 0;
*(sel~l) += *sel - n;
l.f {nchars < 0 && (n
(
VI
0)
'tit
0
N
00
\J.l
\0
-:0:
)
)
else if (nchars > 0 && (n == length - l1chars) > 0)
(
mel1lcpy(text+length,textlnchars,l1chars) i
Ipemset(text,' 'n);
If (*5e1 + n < iength)
*se1 -:= H;
else
(
*sel = length - n'
*(se1+1) -= *sel ~. n - length1
""'.
~
)OG3
1064
1065
]066
)067
]068
]069
Ani~ate(cur~list)
register CUl{REN'I'
regIster LIST
*cyq
{
*anim;
*name;
oid;
regjster AHTM
reglster char
*11S[';
}070
)072
reglster10ng
char
if (J;1ame = Find trirle(cllr->msg,"name",cur->size,HULL,2,HULL))
if (strlen(nameJ < 16)
{
for (anim = li~t->anims: anim && strcmp(name,anim->name):
alllrn = a111m->nxt):
i f (I a 111 m}
,
If (pid = HewProc(name,"//processes/anunate",YES,-l))
{
anim == (1\IHH *) Alloc(sizeof(ANIH), YES);
anlm->conn.pld ~ pId;
strcpy(anirn->J;1arne,na~e);
anlm-)nxt = llst->anlms;
list->alllms = anlm;
m ~ Alloc(cur->slze,YES) i
ll\p.lncpy (m cUr->msq, cur->~ 1 ze) ;
put (IJIHECT,anilTl-5conll.pld,JII) ;
}
else
reply status(cnr->rnsg,"-allimate","not supported",O);
else
reply_status(cur->msg,"-animate","duplicate narne",O);
J 071
] 073
]074
]015
]076
Ion
]078
]079
]080
]081
]OB2
lOU]
]08~
]085
]08G
]087
]088
]089
1090
]091
]092
]093
)09~
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
......
01
]095
1096
1097
~
~m;
VI
'tJl
o
~N
00
til
\0
~
\C
)
l~lse
~
\C
reply __ st.alus (cur->rnsg r "-animate", Itname too long", 0) ;
"""
~
]098
1099
]]00
11 01
]]02
llOJ
]]04
1]05
11 O(i
] IO}
1108
] ] 09
] 1] 0
] ) ]l
] 11.2
]] n
]114
)]]5
11]6
] ] J7
) J J8
) 1 19
1120
] ) 2]
1 1 22
]123
] J 24
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
......
0)
1125
l\lt~r(cur
\C
!.Il
list)
reglster tURRENT
t eg 1S ter LIS1'
l
,
regls t er MUM
reqlster char
*ct)r i
*11SC;
*anim;
*name;
conn;
CONNEC'l'OH
if (name == Find trlple (cur->rnsg, "name", cur->size, HULL, 2 ,HULl. ) )
{
for ( ' = li$t->anims; anim && strcmp(narne,anim->name);
anlm
alum
alllrn->nxt) :
if (anlm)
(
90nn = anim->conn;
If (!strcmp(cur->msg,"cancel"))
(
I' t '
,
IS ->an1ll1S == alllm->nx t ;
F'ree(allim);
~orward (DnmcrfLconn. pid, cnr->msg) ;
cur->rnsg = NUL ;
}
else
reply_status(cur->msg,cur->msg,"not found", 0) ;
Vl
"Vl
o
!!::
tv
"00
w
\0
~
\CI
="
1]26
1127
1 J 28
]129
) l 30
ll31
llJ 2
11)]
I ] 34
]J35
] ]JG
]J)7
(
-
*p tolerance;
*element;
ELbMEUT
*fllld_box() i
regIster P E flDR
~. olerance
)140
J ] 41
1 J4 2
1143
= ($hort
] 14 5
]116
1 } 41
]14[l
J} 49
1150
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
......
......
Ul
U.
S
00
UJ
\0
J
else
1151
o
-I
I
if ((hdr-~type :::::=" 'm') &&. (*value(hdr) ,,-,= IV))
sel 1Ist(hdr);
element~>chanqed = YES;
llst->changesf+;
}\eplY (m5g r Newtnsg (hdr-> lengthl50, "wr i te" , !Ida ta= He ~ e" ,hdr ,lIUL[J) ) ;
1114
I
*hc;l.r-
::: """ (short *) Find triple ~mGg, "tolr" si ze, &110ne 2 {NULL) :
*) Fina trlpte(msg,'pos ",sl2e,&none 4 HU LL})
]f (llst->current ~ elemeJ\t::: find box(*p,*(p·l-lj,iist,appl))
{
l,)(Jr =;, (P E I,fDR *) &element->length:
If O'lnd-trIple(msg,"sel ",s ze,NO,O,NULL} && hdr->attr.selectable)
{
hdr->attr.selected ~ YES'
If (p
]139
s::
en
s::
.
short
regIster ELEMENT
reg~ster
J138
1]52
1 153
]} 54
1155
....
IC
'""-I
IIi t( list, msq ~size,al?pl)
rcg.]stcr 1,IS'1
*lIst;,
regIster long
mS9, SIze, appl;
else
reply status(msg,msg/"not found",O);
reply_status(msg,msg,"missing \'pos\"',O};
....
IC
GO
] ] 56
1157
lJ 58
1159
1160
1161
]162
1163
1.164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
]176
lJ77
] 178
11'79
1180
]J 81
]]82
J) 8)
] 184
1185
11 !J 6
s::
en
s::
I
o
-I
0
1
en
o
"'T1
r
I:t:-
o
o
o
o
o
o
.....
o
01
......
CO
ll8 ']
1188
)l89
)]90
1 ] 91
1192
119]
)]94
]) 95
) 196
1197
1] 98
1199
1200
]201
1202
120J
ELE~fENT "'find box(row,col,list,appl)
reglster s~ort r~v, col;
regIster I~ST
*llSt;
reglster long
appl;
(
register P E IIDR
*hdri
reglster EGEMENT
"'element;
for (element:::: list->lasti element; element = element->pre)
(
hdr ~ (P E IIDR "") &element-> 1ength; .
if (in boxthdr->rOW1hdr->COl,hdr->he19ht,hdr->widlh1rOW,eOl)
&&-!~lement->deeted)
if (!appl
(appl == -1 && ! *(lonq*) (hdr+l)
appl ::::= *(10ng*) (hdrtl»)
break;
)
return (element) i
I-l
I.e
I.e
I
in 1~ox(r,c,h,w,Cl,e2)
register short r, e, el, e2, h, w;
{
UJ
'til
if «el < r) j I (c2 < c))
.
return (NO ,
If «(el > r + h) II (c2 > c + w»)
S
00
w
1.0
return(l>1O) ;
return(YES);
sel list(hdr)
register P E IIDR
)l;hdr;
{
- register P E BOR
*temp, *first;
short
- len)
char
*p;
[or (fir~t == temp = firs~ macro(hdr,lfULL,&len,&p)·
.
temp && telTlp->attr.llldden: temp::::: next_macro(&len, &p));
If (temp)
(
temp->attr.hidden:::: YES:
1f I! (temp ~ next maero(&len,&p)))
temp "" fh'-5t~temp->a ttr.llldden := NO;
~
=
1201
1205
]206
1207
1200
1209
J210
] 211 .
1212
1213
1214
1215
] 2 J6
12]7
12)8
]219
1220
) 221
] 222
] 22'3
]224
1225
]226
1227
]228
1229
1230
1231
]232
] 23 J
) 2] 4
)235
J236
12]1
]238
1239
]240
) 24 1
s::
s::
en
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
......
CD
] 242
121J
124~
1245
1246
1247
124B
1249
v i(!\~port (cur{ area, list)
rcg1ster cun~EHT
*cur;
regtsler AREA
*area;
regIster LIST
*llst;
(
reClister VIEW
'view, 'prev = NULL;
cutNECTOR
'conn;
ELEMENT
*element:
unsigned lilt
length'" 0;
char
"'p:
if (p "" Find triple(cur->msg,"area",cur->size,HULL,B,HULL])
(
for (v~e; = ll'st->views; view && (view->owner.pid != cur->sender.pid);
Yle~ = V ew->nxt) ;
if (view),
.
rnerncpy(&vlew->row,p,4*slzeof(short)) ;
else
(
v~ew = (VIEW ~) AIIQc(sizeof(VIEW) ,YES) ;
vlew->nxt = 11st->Vlews;
vlew->owner = cur->send,r;
m~mcpY(~Vlew->n;>w,p,4*s.tzeof(short)) ;
11st-~vlews = view;
6hange area(area,view->row1vjew->coliview->height,view->wjdth);
element = mark area(area->rl~area->c ,area->r2,area->c2 list,
HAX P E NOLI., NULL, NULL, &lenq th, NULL Qur->appll •
send(cur,area7Iis~,o,lengtll(element,YES,cur->~lsplay malk,YES) r
I
J
'"'"
U't
U't
o
J-l
00
W
\0
-
else
(
~
Q
conn "", (COHNE~TOR * 1 F ina ~rlp 1 e (cUJ;->msg, II conn',' ,Or &cur->senc)er, B, HULL) ;
for (VIew
ltst->vl8ws; vlew && (vlew->owner.~l1d ."" conn->pld);
=
prey = v1ew, Vlew = Vlew->nxt) ;
J f (Vlew)
(
if (prev)
prev->nxt = vlew->nxt;
else
li~t->vlews ~ view->nxt;
Free(vlew)r
,
I
I
~
Q
~
1250
1251
]252
]253
]254
]255
}256
1257
]258
1259
]200
]261
1262
126)
1264
]265
]266
J267
J268
1269
]270
chaQge area(area,row,col,height,width)
reglster AREA
*area:
regIster short 1:'0\1, col, height, widthr
(
if (row < area->rl)
area->rl "" row'
if (col < area->c1f
area->cl = col:
if (row + height> area->r2)
area->r? = row + height;
if (col + wldth > area->c2)
area->c2 = col + width;
register C6RRENt
regIster AREA
IJIST
{
]27)
]2132
1283
]284
1285
1236
]287
]288
]289
s::
en
s::
I
o
-I
]290
]291
1292
1293
]294
1295
0
1296
en
]298
1299
1
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
CO
o
1297
~
notjfy(cur area list\
1271
] 272
]274
)275
]276
1277
]278
]279
1280
1281
~
"'hsti
register VIEW
register lnt
"'vieW;
length;
for (view = list->views; view; view"" view->nxt)
(
length"" mark changes(1is~->firsL
view->row;vlew->C91,new->helght view->width) .
Send(CUr,area,llst &Vlew->owneL,18n g fh,list->flrst,
VES,cur->dlsp 1ay_mark,list->erases);
VI
U.
S
"00
w
\0
chan g es(element,r c,h,w)
*e 1ament;
mar~
reglster ELEMENT
register short
{
~cur;
*area;
reglster
r
E 1I0R
reglster Int-
r, c , h, WI
*l}dr:
lIst_length
~
0;
for ( : element && ! element->chanqed; element", elemsnt->nxt)
fOI:" ( ; elemel1t; element = element->nxt)
(
;
hdr :: (P E IIDR *) &element->lenqth;
.
if (element->marked ;: (~lement-5changed && ! hdr->at tr .Illdden & &
(hdr->row + hdr->h~lqht >= r) && (hdr->row <"" r + h) &&
(hdr->col + hdr->wldth >"" c) && (hdr->col <= c + w)))
list length += hdr->length + 3;
)
return(list_Iength) :
~
1] 00
)JOl
]]02
]]0]
]J04
1305
1]06
]307
1]08
13 09
13] 0
13] I
]]] 2
1 J] 3
1311\
1)}5
13] 6
]317
13] 8
1)]9
])20
lJ21
]322
sell() (cu r, ar.ea ,). ist, proe,
AREA
LIST
regIster
leqlster
regl ster
regIster
(
.
regls t er P E IIDR
reglster short
char
EL8MENT
1327
1328
1 )29
1]]0
) ] Jl
)]]2
]]]]
1334
lJJ5
]336
13)7
1J38
1339
]]40
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
CO
.....
1)46
redraw_hkgd 0
pt= element length;
Long_al1gn(pT:
I
}
if (mark)
p
:=
set rnark(p cur);
13n
]349
1J50
1351
~(short *) p "" NOLL;
If (proc)
else
1340
1352
Q
~
;
+ 24;
for ( ; element: element ~ element->nxt)
(
if (element->marked && lelement->deleted)
(
element->marked = HO;
elemellt length'" element->length;
rnemCPYJJ:lt &eJement-> length, (long) element length);
hdr:= r E IlDH *) p;
if (lnO Ifyt
l
if (hdr->attr. selected)
element length"" set selectfhdr !.cur->h i ghlight} ;
i f ((hdr->type == 'mIl &li (*yalue(hur) === fl.')}
element length :::: ~acro llst(hdr);
if ((l1dl."->type =::: 't'))
.
element length:::: check text{hdr,hdr->length);
If (cur->appl)
element length ::
change origin(hdr,cur-->appl l"OW,cut"->appl col);
)
-
1325
1326
I
,I.-
p '" (m = Hewmsa(lenqlhl-JOO
.
Itwritelf,"data==#A~ type=nc",lengthI250,HULL,'P'))
i f (element)
] ) 21
s::
en
s::
N
*hdr;
element lenqth; .
*ro, "'p,--,l.-fleC mark();
if (redra\~)
element = redraw bkgd(area,llst/&m,&p);
else
-
]]2]
] 311
]3 4 2
]34'3
13 4 4
] ] 45
length, element, mmllfy, mark, redraw)
*cut;
*area:
*llst:
CONNECTOR
'proe:
unsiqned illt
length;
ELEMENT
*el~ment;
unsigned short modIfy, mark, redraw;
recpster CUHHr;NT
rut(DIRECT,proc->pid,m) ;
Reply(cur->msg,m) ;
lJl
"Vl
o
~N
00
W
\0
N
Q
Q\
US)
1)54
]]55
1356
1357
]]58
lJ59
1360
)361
1362
1363
JJ64
))65
]366
]367
)] 68
]]69
1370
1371
]]72
] 373
chaiNe origln(hdr,row col)
regIster P E nDR
*ldr;
r
re(Jls tet sHort
row I col;
l
if «hdr->ro w -= row) < 0)
.
return(Ol;
If «hdr~>co -= col) < 0)
retlJrn(Ol:
retut"n(hdr-> ength};
char *set mark(p,cur\
reglster char
~p;
reglster
{
.
If
{
CURRENT
*cur;
(cur->erase mark)
melncpV(Ptcur->erase mark, * (short*)cur->erase mark) i
P += .(slort *) Pi -
)
13 74
If (cnr->Jnark)
1377
JJ 78
memCPV(Ptcur->mark,*(Shortlr)Cur->rnark) ;
p ~= ~(slort *) p:
J
return(p) i
13 75
1376
]]79
1380
1]81
)382
lJ8 J
1384
1385
1386
s::
en
s::
I
13B7
1308
1389
)390
1391
1392
0
]39)
1394
1395
}396
en
1397
1398
o
-I
1
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
CO
I\)
~
""-l
VI
U.
o
(
N
00
w
\D
ELE~ENT *redraw bkgd(area,list,buf,ptr)
regtster AREA -*area;
reg~ster LIST
*lIst:
regIster char
**buf, **ptr:
{
~LEHENT
*element;
lilt
lellgth, flumi
elemen t
miil rk area (area->r 1,. a.rea ->01, a rea-::> r2 l area ->c2 c
11st7HAX P EiNULLf~ULLtNULL,&length,~num,NULLJ:
lenqth +::: (4 * Iluml" T 50:
*buf. :::: Ncwmsq(length+50 "write" "data=MA; type=#c" length HULL IPI).
*ptr = *buf f 24;
"
"
,
draw filled rect(ptr,area->rl area->cl, (area->r2)-(area->rl),
t a rea->c2)-(area->cl),NULL,o,o,area->color / atea->pattern,O,O,O/NULL);
return(element) :
I
~
~
1399
]400
1401
14 02
1403
1104
1405
1406
1407
1408
]409
1410
I'll J
J412
1-113
l'Il tI
1415
1116
1417
1418
1419
set se 1 ect (hd r. J}l igh option)
reg1ster P E HuH
-*I}dr:
.
regIster char
hIgh optlon;
{
register short length;
length = hdr->length;
If (fhigh optiqn)
hc;lr->CI~tr.Inv~rt = Ihdr->attr.invert:
else If (Illqh 9ptlOn ; : = I I I)
14 22
142)
H24
]425
14 26
1tI27
H28
]129
]4JO
1431
1tI J 2
J41J
1434
]435
H36
1437
14 38
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
CO
W
J439
14 4 0
]40
14 4 2
144 J
14 4 4
14 4 5
1446
144'7
11\11 8
o
11c;lr->a~tr7lhvert == Ihdr->attr.invert;
else If (l11gh option "'== '11'1
hQ r->n t tr71nql) 1 19h t '= ! htlr-> a t tr. highligh t;
else If (h1gh opE1on == 'e')
{
if (htlr->type != ' m')
{
hdr->color = (hdr->co}or 1 1) % 7 + 1;
if (hdr->( jl ] )
hdr->f111 == (hdr->fill + 1) % 7 + 1;
}
1420
14 21
N
I,C
IJt
IJt
else
macro color(hdr);
-,
else if (Ildr->type :== 't')
se t text (hdr, high option) :
return (length) ;
-
S
}
be
liJ
\0
macro 1 ist (hdrl
l'og l.Gter l'- E- lI()R
*hdr:
{
regjster P E 1I0R
*temp;
teglster; sllort
row, col:
short
lell:
char
*p;
row = hdr->row,
col ;;; hdr->co~;
for (temp = filst macro(~dr/NULL/&len,&p) •
.
temp && temp-)'attr.lndden; temp = nex~ macro(&len,&p)):
If (temp)
(
)
memcpy(hdr,templt~mp->length)
hdr->tow := row;
hdr->col ::: col:
return(hdr->length) ;
:
N
~
o
1449
]450
1451
]452
)453
1454
1455
]456
1457
1458
1159
]460
1461
1462
macro color(hdr)
regIster P e llDR
"'hdr~
(
-- "'temp;
register P E IIDR
short
- len;
*p;
char
for (temp::::: first_llIacro(hdr,NULL,&len,&p); temp; temp = next_.l1Iacro(&len,&p)
{
temp->color.~ (temp->color + 1) , 7 + 1;
If (temp->flll)
.
temp->flll = (ternp->flll + I) % 7 + 1;
N
io-ol
io-ol
1463
1461
1465
1466
14 67
1468
1469
1470
1471
H72
1473
1474
]175
)4"76
}01
14 '7 fJ
1479
1480
14 91
1402
14 83
14 64
14 85
H86
1187
1488
14 89
1490
s::
en
s::
1491
1492
14 93
0
1495
1496
I
o
-I
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
CO
-Iloo
}494
1497
119B
1499
1500
sel text (hdr, high option)
reg1ster P E 1I0H - *hdr;
regIster char
high option:
{
register TEXT_OPTIONS
hopt:
Qpt ~. (TEXT OPTIONS *l value(hdr);
II (lllqh optIon === '.b )
opt-~bQrder ~,YES;
else If (hIqh optlon === 'U')
opt->underlln, ~ YES'
else If (high optIon == 18')
opt->bold-= YES;
VI
'tit
o
tv
00
w
\0
che9k text(hdr~lengthl
regjster P E IIIJR
*hdr'
regIster short
lengLh;
(
.
regIS t er char
'lip;
cbar
"'h;
regIster 'l'EXT_OPTIOHS
"'opt;
QRt = (TEXT OPTIONS 'Ill value(hdr);
] f (opr.->border && hdr->flll)
{
opt->border = NO:
p = (ch~r *) hdr + length;
Long align (p) ;
n = p;
draw l-ect (&n, hdr->roW-34 hdr->col-J ,hdr->heightt6 I hdr->width+6,
NULL,hdr->flll , 'S'L1,HULL);
length ~ n - (char*)hdr:
~eturn(length) :
~
io-ol
N
1501
]502
150)
1504
1505
]506
]507
]508
1509
1510
1511
15)2
15]3
1514
15]5
1516
1517
EI~.·MENT
*mnrk elements(list,length,num,msg,size,appl)
'1<1 1st'
unslgned jnt
*leng£:l), *num;
long
msg, SIze, app1:
(
register short
row ~ 0, col ~ 0, number = 01 count = 1;
regIster short
to row'" HA,X ROH, to col'" MAX COL, *p;
reg~ster ELEMENT
*element;
regIster char
*tag pat = NULL;
cilar
wha~-= HULL, tag buQ200), *text pat = NULL, dOt "" YES;
long
*triple, atcr = NULL,
el~ment = NULL;
,
whIle (p =: (shor.t~ I.) Find triple (msg, "P\O\O\Oll, size, NULL, 0, &tnple) )
L1ST
(
switch ("'triple)
(
JS1B
)519
1520
case Keypack ( I
@' ,
I
c' ,
I
h' ,
I
t ') :
case Keypack('@I,'s','e','l'):
case Keypack ( '@ I , 'n I
1525
1526
1527
1528
1529
15)0
1531
case Keypack ( I (l'
,
I
,
p' ,
'u I
, I
'0 ' ,
m') :
's') :
case Keypack ( I @' , 'e' , In' 1 I d') :
15)2
IS))
1534
)5]5
case !{eypuck ( , @, ,
15]6
't' 1 I }{ , , , t' ) :
1537
lSJU
lS40
15]9
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
CO
01
1545
1546
J 541
1548
1549
]550
1551
]552
1553
1554
1555
1556
count == *p:
break'
attr
*(long *) pi
break
attr
OXBOOO;
break,
number::: *p;
what ::: HULL;
break;
row = *p++;
col == *p..
what = 'A';
break;
to row '" *~H;
to-col "" * ;
what"" 'A',
break;
text pat = Alloc(500,YF.S);
If (1makpat(p,text pat)
(
Free (text pot)L'
1=
1=
text pat
) 511
]542
] 543
]544
~
-
case Keypack(' @I, 'a I , 't I , 't') :
] 521
]522
1523
1524
N
~
case KeypC1ck('~',
't' ,'a', 'g'):
~reak; -
~
Ul
Ut
o
J0
00
W
\0
NUL ;
If (!makpat(p{ (ta9 pat
tag_pat a 10LL,-
~
tag buf»)}
-
N
...
~
ltriple '" HULL;
dflt :: 1I0i
if
(dOt
counl ::: MAX P E;
if (!wi1'lt)
- -
element ::: m~rk number(number,taq pat,text ~at,
,
llst,count, attr, lengtfi;num, applJ,
else] f (wl1at :::::: '1\')
element::: mark area(row,col,to row,to COl r list cQunt,
attr,tag_pat,t:ext_pat,lengtl1,num,app 1);
if (text pat)
Free'rtext pat);
return(e ement};
] 557
] 558
]559
1560
1561
1562
ELEMENT "'mark area(row,col/to row,to col, list,
]564
1565
1566
]567
lonq
1563
1568
1569
] 570
1571
1572
1573
] 574
]575
1576
1577
] 578
1579
1580
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
CO
0)
1581
1582
158 J
1584
1585
1586
1587
1588
] 589
1590
] 591
1592
J 59)
] 594
]595
)596
1597
1596
. .
regIster short
count,actr;tag pat,text pa1:./1ength,num,appl)
row, col, to row, to col-;- count;
LIST
*llst;
at~r'
-
-
char.
"'tag pat, "'text pat;
unslgned lnt '
*length, "'num; {
reglster P E HDR
""!ldri
regIster ELEMENT
""element = "ULt "'temp;
regIster long
total lenqth::: 6;
unsIgned lnt
orlg_counE;
if (row >= 0 && col >~ 0 && to row >= 0 && to col >= 0)
(
orig count = count'
.
for ltemp = 11st->tirst; temp && count; temp = temp->nxt)
{
hdr "., (P E IlDR *) &temp->lenqth;
if (bdr-:5'row <= to row'&.& hdf->Qol <= to col
&& row < hdr->row + hdt"->helqht && col < hdr->col + hdr->width
&& valid(hdr,tag pat/text pat,attr,appl) && !temp->deleted)
(
- total length +~ temp->length:
temQ-~marRed = YES;
If {!element}
element = temp;
count--;
]
If (length)
.
*length = total length;
If (I1tlm)
•
*num =: orlg count - count;
)
return(element)i
~
....
!.II
U\
'tll
o
tv
00
w
\D
N
....
="
]599
1600
1601
1602
]603
1604
]605
]606
1607
J60A
]609
16]0
1611
] 612
] 6 jJ
16)4
]615
J6]6
] 617
1618
)619
1620
)621
1622
)623
1624
]625
1626
)627
1628
ELE~ENT
*mark number(n,taq pat, text pat,list,cQunt,attr,length,num,appl)
short
n, countT
lonq
tag pat, text pat, attr;
lols'r
*llst·
.lnt
*leng~h, *num;
reg~ ster ELEHENT
*element = IlULt.6 ""temp = NULL;
reglster l0l19
total lenqt) == ;
unsIgned lnt
orlg_t!ounE;
if (n ==:
temp c ist->last;
else
for (temp = list->first; temp && n--' temp = temp->nxt);
for (or ig cQIH1t ::::: count ~ temp & & count; temp =: temp-:>nxt)
If (valld(&temp->lengtll,tag pat/text pat,attr,bppl) && Itemp->deleted)
(
-total length += temp->length;
temp-~marRed = YES;
If I !element)
element == temp;
reglster
regIster
l"eglster
unslgned
(
N
~
....;J
-11
VI
'tit
8
"00
VJ
\0
count--~
if dengthl
.
*length ~ total length;
,
Anum = orlg countJ- count;
If (num)
return(element}T
N
~
Qe
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
co
......
] 629
1630
] 6Jl
1632
163)
1634
1635
)636
1637
163 B
1639
1610
1641
1642
160
1644
1645
1646
] 647
]643
val~d(hdr~tag
patrtext pat,attrrappl)
reglster l' E IIUR
*hd1:':
reglster char
*taq pat, *text pat;
register long
attf; appl;
(
register char
*target, ok :::: YES;
long
temp,
if (~ag pat)
1f ltarget = tag(hdr)l
ok = amatch{target,tag pat);
else
ok :: NO;
if (text ~atl
1f (llOr->type == 't')
ok ,.. ok. && 8Illatch(value(hdr)+8,text pat);
else
ok = NO;
(
J11p.mcpy(&temp,&hdr->attr(sizeof(long)) ;
ok = ok && l~emp & attr,;
] 650
]65l
)652
1653
1654
1655
]656
]f
{
1659
1660
return(ok) ;
)
1657
1658
1661
1662
1663
1664
1665
I
o
-I
0
1
en
o
"'T1
r
I:t:-
o
o
o
o
o
o
.....
o
01
CO
CO
\0
if (attr)
1649
s::
en
s::
~
I-'
1666
]667
1668
] 669
1670
1671
1672
]67J
}674
1675
1676
1677
)
Ut
Ut
o
(appl)
.tv
if (g~P~ ok && (!*(long:lr)(hdr~-l));
else
ok = ok && (appl :::::= * (10ng*) (hdrl-l)) i
-1 )
00
UJ
I.D
Sta~U5(msg,l size}
regl.ster cnar
*~5q;
reg lster. long
(
SlZe r
register char
*m;
*(rn = Allo9(slze, YES)) "" puq,;
strcat m,r.ltld tnple(msg, 'or1g",9ize,&nol1e,1,IIULL));
strcat m," ")T
strcat m,Fina trip1e(msg,"stat",size,&none,1,llULL));
strcat m, it in-II) i
.
strca t ml..Find thple (ll1sg, "reg ", size, &l1one, 1, ttuLL) ) :
Note(m "r:HnOR");
f'ree(mj;
~
1678
]679
1680
1681
1682
168)
1694
1685
1686
]687
]688
1699
1690
)691
1692
1693
)694
1695
1696
]697
1698
1699
]700
}701
1702
1703
1704
1705
J706
1707
]700
1709
)710
1711
1712
]713
1714
1715
]716
1717
]718
s::
en
s::
I
o
-I
0
1
en
o1
"'T
r
I:t:-
o
o
o
o
o
o
.....
o
01
CO
CD
1119
]720
1721
1722
]723
)724
1125
1726
1727
]728
1729
reply status(cur,rnid,stat1code)
register char
'cur, *m d, 'stat;
reg1ster long
*code;
{
register char
'type;
= "failed'"I J
type
1
f
(I. lr i d
=::::
l1qd++ •
,-
else 1f (~mid ~~ '+')
(
tyne :::: "done":
~
~
m1aH- ;
~ePlv(cyr,Newmsq(strlen(mldl+strlen(~tHt'+50 type,
ll
1I 0
1'.lg=#8; req=#S; stat==WS; code-'-'U",('plctute ,mid,stat,code));
ELEBEHT 'new element{list,siz9,after)
l-eglster I,IST
..lUst;
reglster lonq
SIze:
regIster ELEMENT
'after;
(
register BLEMEliT
*element;
regls ter long
i := 0;
if (size <=
9t ->pool.size)
for (i == lst->pool.n'jelem ent ~ list->pool.ptr;
element->pbol && _ &, lelement->delet~d;
( char*)element +'" list->pool.size, --1) :
IJ\
IJ\
S
11
00
UJ
\0
if (i)
(
if (element->deleted)
delete element(llst,element):
element->pOol = YES;
}
else
(
element == (ELEHElI'r -It) 1\110c (size, YES) :
elemcnt->pool "" HO:
}
~ lement->nxt ..., mJIJI,'
If (el~ment->pre ~ iist->last)
(llst->last)->nxt = elemeht;
else
llst->first ~ element:
list->last = element·
element->chanqed ::: YES;
element->deleted = element->marked = NO;
return(element):
~
1730
]731
1732
173 3
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
174 6
l717
1748
3749
J750
1751
1752
1753
J754
]755
1756
]'] 5 '7
1758
1759
s::
en
s::
I
o
-I
,0
en
o1
"'T
r
,:t:o
o
o
o
o
o
.....
o
01
CD
o
1760
1761
1762
1763
1764
17G5
1766
1767
1768
1769
1770
1771
1772
l77 )
1774
177 5
1776
1777
del~te
elementflist,element)
reglster ELEME~T
*elementF
regIster LIST
jllst;
{ if (element->pre)
(element->pre)->nxt ~ elernen~->nxt;
else
,
Ijst->first ~ element->nxt;
If (element->nKt)
(element->md::) ->pre = elelllent->pre;
else
list->last = element->pre;
if (element->po61)
e1ement->pool :;;: NULL;
else
,Free(li!lement) ;
--llst->slze;
~
char *value(hdr)
*hclr;
regIst.er P E lIDR
(
-register char
*p:
p == (char *) hdr + sizeof(P E IIDR);
If (hdr->attr.appl)
- p 1= 4'
if (hdr->attr.ta9ged)
whlle (*p-H),
Long a l1gn (p J ;
return(Pl;
char *tag(hdr)
*hdr:
regIster P E llDR
(
- register char
*P;
);J :;;: (char 'II;) hdr;- sizeof(P E IIDR);
if (hdr->attr.appl)
- P += 4'
if (hdr->attr.tagged)
retu:r.nfp);
return(NULLI;
lJl
lh
o
~N
00
lJ,)
\0
.
~
5,502,839
225
What is claimed is:
1. A virtual input interface in a data processing system,
said interface comprising:
means for accepting input from at least one physical
device and for converting said physical device input
into virtual input, said means comprising a virtual input
manager process responsive to said at least one physical input device for generating a picture, said picture
comprising one or more picture elements, each picture
clcmcnt comprising a plurality of dcvicc-independent
data structures in a predetermined, standard data format, at least one of said data smlctures comprising a
plurality of different data fields each containing information describing said picture element; and
means responsive to said virtual input for performing
processing operations upon said virtual input, said
means comprising a console manager process for performing processing operations on said one or more
picture elements_
2. The virtual input interface as recited in claim 1, wherein
said input accepting means accepts input in the form of
keystrokes.
3. The virtual input interface as recited in claim 1, wherein
said input accepting means accepts input in the form of
cursor position.
4. The virtual input interface as recited in claim 1, wherein
said input accepting means accepts input in the form of
system-defined actions.
5. The virtual input interface as recited in claim 1, wherein
said input accepting means accepts input in the form of
user-defined functions.
6. The virtual input interface as recited in claim 1, wherein
said input accepting means accepts input in the form of
menu selections.
7. The virtual input interface as recited in claim 1, wherein
said at least one physical device can be removed from said
system without affecting the operation of the remainder of
said system.
8. The virtual input interface as recited in claim 1, wherein
at least one additional physical device can be added to said
system without affecting the operation of the remainder of
said system.
9. A virtual output interface in a data processing system,
said intcrfacc comprising:
a source of virtual input, said virtual input comprising one
or more picture elements, each picture element comprising a plurality of device-independent data structures in a predetermined, standard data format, at least
one of said data structures comprising a plurality of
different data fields each containing information
describing said pieture element;
means for performing processing operations on said virtual input and for generating virtual output;
means for accepting said virtual output; and
means for converting said virtual output into at least one
physical output suitable for use by at least one physical
output device_
10. The virtual output interface as recited in claim 9,
wherein said virtual input comprises a plurality of related
picture elements and wherein said virtual output accepting
means comprises a picture manager process for controlling
said plurality of related picture elements.
226
S
10
15
20
2S
30
35
40
4S
50
SS
60
11. The virtual output interface as recited in claim 10 and
further comprising a display device, wherein said virtual
output accepting means further comprises a window manager process for controlling the display of said plurality of
related picture elements on said display device.
12. The virtual output interface as recited in claim 9,
wherein said virtual output converting means comprises a
virtual output manager process responsive to said one or
more processed picture elements for coupling said one or
more processed picture elements to said at least one physical
output device.
13. The virtual output interface as recited in claim 9,
whcrein said at lcast onc physical device can bc removed
from said system without affecting the operation of the
remainder of said system.
14. The virtual output interface as recited in claim 9,
wherein at least one additional physical device can be added
to said system without affecting the operation of the remainder of said system.
15. In a data processing system, an interface between
processes and data in said system and physical input and
output devices coupled to said system, said interface comprising:
mcans rcsponsivc to one of said physical input deviccs for
generating a picture, said picture comprising one or
more picture elements, each picture element comprising a plurality of device-independent data structures in
a predetermined, standard data format, at least one of
said data structures comprising a plurality of different
data fields each containing information describing said
picture element;
means for performing processing operations on said one
or more picture elements; and
means responsive to said one or more processed picture
elements for coupling said one or more processed
picture elements to one of said physical output devices.
16. The data processing system as recited in claim 15,
wherein said one or more picture elements define a graphical
object and at least one attribute thereof.
17. The data processing system as recited in claim 16,
wherein one of said data fields describes the length of the
associated picture clement.
18. The data processing system as recited in claim 16,
wherein one of said data fields identifies the particular type
of the associated picture element.
19. The data processing system as recited in claim 16,
wherein one of said data fields describes the position of the
associated picture element relative to row and column
coordinates on a picture of which said picturc clcmcnt forms
a part.
20_ The data processing system as recited in claim 16,
wherein one of said data fields describes the size of the
associated picture element.
21. The data processing system as recited in claim 16,
wherein one of said data fields describes the color of the
associated picture element.
22. The data processing system as recited in claim 15,
wherein said means responsive to one of said physical input
devices comprises a virtual input manager process.
23. The data processing system as recited in claim 15,
wherein said means responsive to said one or more processed picture elements comprises a virtual output manager
process.
*
* * * *
MS-MOTO_SDFLA_00000010591
Disclaimer: Justia Dockets & Filings provides public litigation records from the federal appellate and district courts. These filings and docket sheets should not be considered findings of fact or liability, nor do they necessarily reflect the view of Justia.
Why Is My Information Online?