-+-+-+-+-+-+-+-+ START OF PART 128 -+-+-+-+-+-+-+-+ X(vector)g Fi(p1-p2)i Fq(and)e(returns)g(the)g(result)f(in)h XFi(p3)p Fq(.)p 1569 490 298 2 v 1569 569 2 80 v 1583 544 a XFb(ptkf_subv3)p 1864 569 V 1569 571 298 2 v 11 645 a Fq(SUBROUTINE)h XFp(ptkf_subv3)f Fq(\(p1,)g(p2,)g(p3\))25 734 y(IN)91 b(REAL)50 Xb Fa(p1\(3\))e Fq(3D)12 b(vector)n(.)25 784 y(IN)91 b(REAL)50 Xb Fa(p2\(3\))e Fq(3D)12 b(vector)n(.)25 833 y(OUT)50 b(REAL)g XFa(p3\(3\))e Fq(3D)12 b(vector)n(.)0 902 y(This)f(function)f(evaluates)i(the V) Xf(3D)g(vector)g Fi(p1-p2)i Fq(and)e(returns)g(the)g(result)f(in)h XFi(p3)p Fq(.)p 1479 1000 387 2 v 1479 1079 2 80 v 1493 1053 Xa Fb(ptkf_transform)p 1864 1079 V 1479 1081 387 2 v 11 1155 Xa Fq(SUBROUTINE)h Fp(ptkf_transform)f Fq(\(matrix,)g(point,)f(tpoint\))25 X1243 y(IN)91 b(REAL)50 b Fa(matrix\(3,)9 b(3\))49 b Fq(3x3)11 Xb(matrix.)25 1293 y(IN)91 b(REAL)50 b Fa(point\(2\))107 b Fq(2D)12 Xb(point.)25 1343 y(OUT)50 b(REAL)g Fa(tpoint\(2\))97 b Fq(2D)12 Xb(point.)0 1412 y(This)f(function)f(transforms)h(the)g(2D)g(point)f XFi(point)i Fq(by)f(the)g(3)e Fl(\264)g Fq(3)i(matrix)g Fi(matrix)i XFq(and)e(returnes)g(the)g(result)g(in)g Fi(tpoint)p Fq(.)p X1449 1509 417 2 v 1449 1588 2 80 v 1464 1563 a Fb(ptkf_transform3)p X1864 1588 V 1449 1590 417 2 v 11 1664 a Fq(SUBROUTINE)h Fp(ptkf_transform3)e XFq(\(matrix,)h(point,)f(tpoint\))25 1753 y(IN)91 b(REAL)50 Xb Fa(matrix\(4,)9 b(4\))49 b Fq(4x4)11 b(matrix.)25 1803 y(IN)91 Xb(REAL)50 b Fa(point\(3\))107 b Fq(3D)12 b(point.)25 1853 y(OUT)50 Xb(REAL)g Fa(tpoint\(3\))97 b Fq(3D)12 b(point.)0 1922 y(This)k(function)e X(transforms)h(the)h(3D)g(point)e Fi(point)j Fq(by)e(the)h(4)d XFl(\264)f Fq(4)k(matrix)f Fi(matrix)p Fq(,)k(including)13 b(homogeneous)j X(division.)0 1971 y(The)c(result)f(is)g(returned)f(in)h Fi(tpoint)p XFq(.)p 1449 2069 V 1449 2148 2 80 v 1464 2122 a Fb(ptkf_transform4)p X1864 2148 V 1449 2150 417 2 v 11 2224 a Fq(SUBROUTINE)h Fp(ptkf_transform4)e XFq(\(matrix,)h(point,)f(tpoint\))25 2313 y(IN)91 b(REAL)50 Xb Fa(matrix\(4,)9 b(4\))49 b Fq(4x4)11 b(matrix.)25 2362 y(IN)91 Xb(REAL)50 b Fa(point\(4\))107 b Fq(4D)12 b(point.)25 2412 y(OUT)50 Xb(REAL)g Fa(tpoint\(4\))97 b Fq(4D)12 b(point.)0 2481 y(This)i(function)f X(performs)h(the)h(4D)f(transformation)f(\(that)g(is,)j(with)d(no)h X(homogeneous)g(division\))e(of)i(the)g(point)f Fi(point)j Fq(by)0 X2531 y(the)11 b(4)e Fl(\264)g Fq(4)i(matrix)g Fi(matrix)p Fq(,)i(and)e X(returns)g(the)g(result)g(in)f Fi(tpoint)p Fq(.)0 2956 y(13th)22 Xb(May)m(,)12 b(1992)626 b(180)828 b(2.01)p eop X%%Page: 181 182 Xbop 0 -137 a Fq(PHIGS)11 b(T)m(oolkit)f(User)i(Manual)1235 Xb(PTK/100)p 1330 -19 537 2 v 1330 60 2 80 v 1344 35 a Fb(ptkf_transposematri V) Xo(x)p 1864 60 V 1330 62 537 2 v 11 136 a Fq(SUBROUTINE)12 b XFp(ptkf_transposematrix)e Fq(\(matrix,)h(result\))25 225 y(IN)91 Xb(REAL)50 b Fa(matrix\(3,)9 b(3\))49 b Fq(3x3)11 b(matrix.)25 X275 y(OUT)50 b(REAL)g Fa(result\(3,)8 b(3\))59 b Fq(3x3)11 Xb(matrix.)0 350 y(This)k(function)f(transposes)h Fi(matrix)p XFq(,)j(and)d(returns)g(the)g(result)g(in)g Fi(result)p Fq(.)28 Xb(Note)15 b(that)g Fi(result)h Fq(can)g(be)g(the)f(same)i(vari-)0 X400 y(able)12 b(as)g Fi(matrix)g Fq(since)g(a)g(copy)f(is)g(made)h(\256rst.) Vp X1300 497 567 2 v 1300 576 2 80 v 1314 551 a Fb(ptkf_transposematri)o(x3)p X1864 576 V 1300 578 567 2 v 11 652 a Fq(SUBROUTINE)g Fp X(ptkf_transposematrix3)e Fq(\(matrix,)h(result\))25 741 y(IN)91 Xb(REAL)50 b Fa(matrix\(4,)9 b(4\))49 b Fq(4x4)11 b(matrix.)25 X791 y(OUT)50 b(REAL)g Fa(result\(4,)8 b(4\))59 b Fq(4x4)11 Xb(matrix.)0 866 y(This)k(function)f(transposes)h Fi(matrix)p XFq(,)j(and)d(returns)g(the)g(result)g(in)g Fi(result)p Fq(.)28 Xb(Note)15 b(that)g Fi(result)h Fq(can)g(be)g(the)f(same)i(vari-)0 X915 y(able)12 b(as)g Fi(matrix)g Fq(since)g(a)g(copy)f(is)g(made)h(\256rst.) Vp X1463 1013 404 2 v 1463 1092 2 80 v 1477 1066 a Fb(ptkf_unitmatri)o(x)p X1864 1092 V 1463 1094 404 2 v 11 1168 a Fq(SUBROUTINE)g Fp(ptkf_unitmatrix)d XFq(\(matrix\))25 1267 y(IN)50 b(REAL)g Fa(matrix\(3,)9 b(3\))49 Xb Fq(3x3)11 b(matrix.)0 1367 y(This)g(procedure)h(creates)g(a)g(unit)e(3)f XFl(\264)g Fq(3)i(matrix,)g(and)h(stores)f(it)g(in)f Fi(matrix)p XFq(.)p 1433 1464 434 2 v 1433 1543 2 80 v 1447 1518 a Fb(ptkf_unitmatri)o(x3 V) Xp 1864 1543 V 1433 1545 434 2 v 11 1619 a Fq(SUBROUTINE)i Fp X(ptkf_unitmatrix3)d Fq(\(matrix\))25 1719 y(IN)50 b(REAL)g XFa(matrix\(4,)9 b(4\))49 b Fq(4x4)11 b(matrix.)0 1819 y(This)g(procedure)h X(creates)g(a)g(unit)e(4)f Fl(\264)g Fq(4)i(matrix,)g(and)h(stores)f(it)g(in) Vf XFi(matrix)p Fq(.)p 1589 1916 278 2 v 1589 1995 2 80 v 1603 X1969 a Fb(ptkf_unitv)p 1864 1995 V 1589 1997 278 2 v 11 2070 Xa Fq(SUBROUTINE)i Fp(ptkf_unitv)e Fq(\(vec,)i(uvec\))25 2159 Xy(IN)91 b(REAL)50 b Fa(vec\(2\))68 b Fq(2D)11 b(vector)n(.)25 X2209 y(OUT)50 b(REAL)g Fa(uvec\(2\))e Fq(2D)11 b(vector)n(.)0 X2284 y(This)g(function)f(generates)i(and)g(returns)e(a)i(unit)e(vector)h(in) Vg XFi(uvec)h Fq(from)f(the)g(supplied)f(2D)i(vector)f Fi(vec)p XFq(.)0 2956 y(13th)22 b(May)m(,)12 b(1992)626 b(181)828 b(2.01)p Xeop X%%Page: 182 183 Xbop 0 -137 a Fq(PHIGS)11 b(T)m(oolkit)f(User)i(Manual)1235 Xb(PTK/100)p 1559 -19 308 2 v 1559 60 2 80 v 1573 35 a Fb(ptkf_unitv3)p X1864 60 V 1559 62 308 2 v 11 136 a Fq(SUBROUTINE)12 b Fp(ptkf_unitv3)e XFq(\(vec,)i(uvec\))25 225 y(IN)91 b(REAL)50 b Fa(vec\(3\))68 Xb Fq(3D)11 b(vector)n(.)25 274 y(OUT)50 b(REAL)g Fa(uvec\(3\))e XFq(3D)11 b(vector)n(.)0 349 y(This)g(function)f(generates)i(and)g(returns)e X(a)i(unit)e(vector)h(in)g Fi(uvec)h Fq(from)f(the)g(supplied)f(3D)i(vector)f XFi(vec)p Fq(.)p 1373 447 494 2 v 1373 526 2 80 v 1387 500 a XFb(ptkf_unstackmatri)o(x)p 1864 526 V 1373 528 494 2 v 11 602 Xa Fq(SUBROUTINE)h Fp(ptkf_unstackmatrix)e Fq(\(matrix\))25 X701 y(OUT)50 b(REAL)g Fa(matrix\(3,)9 b(3\))49 b Fq(3x3)11 Xb(matrix.)0 801 y(This)g(function)f(pops)h(a)h(3)d Fl(\264)g XFq(3)i(matrix)g(from)g(the)g(transformation)f(stack)h(and)h(returns)e(it)h X(in)g Fi(matrix)p Fq(.)p 1343 898 523 2 v 1343 977 2 80 v 1357 X952 a Fb(ptkf_unstackmatri)o(x3)p 1864 977 V 1343 979 523 2 Xv 11 1053 a Fq(SUBROUTINE)h Fp(ptkf_unstackmatrix3)e Fq(\(matrix\))25 X1153 y(OUT)50 b(REAL)g Fa(matrix\(4,)9 b(4\))49 b Fq(4x4)11 Xb(matrix.)0 1253 y(This)g(function)f(pops)h(a)h(4)d Fl(\264)g XFq(4)i(matrix)g(from)g(the)g(transformation)f(stack)h(and)h(returns)e(it)h X(in)g Fi(matrix)p Fq(.)0 2956 y(13th)22 b(May)m(,)12 b(1992)626 Xb(182)828 b(2.01)p eop X%%Page: 183 184 Xbop 0 349 a Fj(Chapter)24 b(27)0 585 y Fs(Hashstrings)29 b(functions)p X1343 820 523 2 v 1343 900 2 80 v 1357 874 a Fb(ptkf_createhasht)o(abl)o(e)p X1864 900 V 1343 902 523 2 v 11 976 a Fq(SUBROUTINE)12 b Fp(ptkf_cr)o X(eatehashtable)g Fq(\(tablestr)n(,)f(minid,)g(maxid\))25 1064 Xy(IN)50 b(CHARACTER*\(*\))e Fa(tablestr)f Fq(hashtable)12 b(name.)25 X1114 y(IN)50 b(INTEGER)193 b Fa(minid)80 b Fq(lower)11 b(limit)f(of)h X(string-integer)e(range.)25 1164 y(IN)50 b(INTEGER)193 b Fa(maxid)70 Xb Fq(upper)11 b(limit)f(of)h(string-integer)e(range.)0 1233 Xy(This)15 b(function)f(creates)j(a)f(new)g(hashtable,)h(with)d(the)h(name)i XFi(tablestr)p Fq(.)29 b Fi(minid)17 b Fq(and)e Fi(maxid)i Fq(respectively)e X(specify)g(the)0 1283 y(lower)c(and)g(upper)g(limits)f(of)h(the)g(range)h(of V) Xf(integers)g(to)g(which)f(strings)h(hashed)g(into)f(the)h(hashtable)h(will)e X(be)h(mapped.)p 1413 1380 454 2 v 1413 1459 2 80 v 1427 1434 Xa Fb(ptkf_delhashtabl)o(e)p 1864 1459 V 1413 1461 454 2 v 0 X1535 a Fq(LOGICAL)h(FUNCTION)f Fp(ptkf_delhashtable)g Fq(\(tablestr\))25 X1635 y(IN)50 b(CHARACTER*\(*\))e Fa(tablestr)f Fq(name)13 b(of)e(table)g(to) Vg X(be)g(deleted.)0 1734 y(This)f(function)f(deletes)i(hashtable)g XFi(tablestr)h Fq(from)e(the)g(table)h(of)f(hashtables,)h(returning)e(TRUE)i X(if)f(the)g(table)h(was)g(deleted,)0 1784 y(otherwise)g(F)m(ALSE.)p X1503 1881 364 2 v 1503 1960 2 80 v 1517 1935 a Fb(ptkf_delstring)p X1864 1960 V 1503 1962 364 2 v 0 2036 a Fq(LOGICAL)h(FUNCTION)f XFp(ptkf_delstring)g Fq(\(tablestr)n(,)g(str\))25 2125 y(IN)50 Xb(CHARACTER*\(*\))e Fa(tablestr)f Fq(name)13 b(of)e(hashtable.)25 X2175 y(IN)50 b(CHARACTER*\(*\))e Fa(delstr)77 b Fq(string)10 Xb(to)h(be)h(deleted)f(from)g(string)f(table.)0 2250 y(This)k(function)f X(deletes)i(the)f(string)f Fi(delstr)j Fq(from)e(hashtable)g XFi(tablestr)p Fq(.)26 b(The)16 b(result)d(of)h(the)h(function)d(is)j(TRUE)g X(if)e(the)0 2300 y(string)d(was)i(deleted,)g(otherwise)e(F)m(ALSE.)902 X2956 y(183)p eop X%%Page: 184 185 Xbop 0 -137 a Fq(PHIGS)11 b(T)m(oolkit)f(User)i(Manual)1235 Xb(PTK/100)p 1376 -19 490 2 v 1376 60 2 80 v 1390 35 a Fb(ptkf_hashtableused) Vp X1864 60 V 1376 62 490 2 v 0 136 a Fq(LOGICAL)12 b(FUNCTION)f XFp(ptkf_hashtableused)g Fq(\(str\))25 235 y(IN)50 b(CHARACTER*\(*\))e XFa(str)h Fq(name)12 b(of)f(hashtable.)0 335 y(This)16 b(function)f(checks)j X(if)e(a)g(hashtable)h(named)g Fi(str)g Fq(already)g(exists)f(in)g(the)g X(table)g(of)g(hashtables,)i(returning)d(TRUE)i(if)0 385 y(the)11 Xb(hashtable)g(exists,)h(otherwise)f(F)m(ALSE.)p 1383 482 484 X2 v 1383 561 2 80 v 1397 536 a Fb(ptkf_inithashtabl)o(es)p X1864 561 V 1383 563 484 2 v 11 637 a Fq(SUBROUTINE)h Fp(ptkf_inithashtables) Ve XFq(\(\))0 786 y(This)k(function)g(initialises)e(the)j(table)f(in)g(which)g X(the)h(details)f(of)g(hashtables)h(created)g(by)f(the)h(application)e(are)i X(kept.)25 b(This)0 836 y(function)10 b(must)h(be)h(called)f(before)h(any)f X(other)g(hashtable)g(functions.)p 1466 933 401 2 v 1466 1012 X2 80 v 1480 987 a Fb(ptkf_inttostring)p 1864 1012 V 1466 1014 X401 2 v 11 1088 a Fq(SUBROUTINE)h Fp(ptkf_inttostring)d Fq(\(tablestr)n(,)j X(stint,)e(size,)i(strbuf)o(fer)n(,)g(buf)o(fersize\))25 1177 Xy(IN)91 b(CHARACTER*\(*\))48 b Fa(tablestr)85 b Fq(hashtable)11 Xb(name.)25 1227 y(IN)91 b(INTEGER)193 b Fa(stint)137 b Fq(string)10 Xb(identi\256er)g(to)h(search)h(hashtable)f(for)n(.)25 1277 Xy(IN)91 b(INTEGER)193 b Fa(size)139 b Fq(number)11 b(of)g(bytes)g(allocated) Vg X(by)g(the)g(user)h(for)f(the)g(string.)25 1326 y(OUT)50 b(CHARACTER*\(*\))e XFa(strbuf)o(fer)72 b Fq(pointer)10 b(to)g(space)j(allocated)e(by)g(the)g X(user)h(for)f(the)g(string.)25 1376 y(OUT)50 b(INTEGER)193 Xb Fa(buf)o(fersize)48 b Fq(actual)11 b(size)h(of)f(buf)o(fer)g(required.)0 X1445 y(This)h(function)f(returns)h(the)h(string)e(in)h(hashtable)g XFi(tablestr)i Fq(which)e(has)h(been)g(allocated)g(the)f(integer)g XFi(stint)p Fq(.)20 b(The)14 b(string)0 1495 y(is)e(returned)f(in)h(the)g(buf V) Xo(fer)f Fi(strbuffer)p Fq(,)k(which)c(must)h(be)h(allocated)f(by)f(the)h X(application.)k(The)d(number)f(of)g(bytes)g(actually)0 1545 Xy(used)g(in)e(the)h(buf)o(fer)g(is)h(returned)e(in)h Fi(buffersize)p XFq(,)i(as)f(the)g(length)e(of)h(string)f(+)i(1)f(\(for)f(`60)0 X1595 y(0')h(character\),)i(or)e(0)g(if)g(no)g(string)f(was)i(returned.)p X1240 1692 626 2 v 1240 1771 2 80 v 1254 1746 a Fb(ptkf_restoreallha)o(shtabl V) Xo(es)p 1864 1771 V 1240 1773 626 2 v 11 1847 a Fq(SUBROUTINE)g XFp(ptkf_r)o(estor)o(eallhashtables)f Fq(\(\256leptr\))25 1947 Xy(IN)50 b(INTEGER)g Fa(\256leptr)e Fq(pointer)10 b(to)h(a)h(\256le.)0 X2046 y(This)h(function)e(restores)i(all)f(hashtables)h(from)g(a)g(\256le.)20 Xb(Ef)o(fectively)m(,)14 b Fi(ptk_restorehashtable)i Fq(\(q.v)m(.\))k(is)13 Xb(called)g(for)f(each)0 2096 y(hashtable)f(in)g(the)g(\256le.)16 Xb(The)c(\256le)f(should)f(be)i(open)f(for)g(reading)g(when)g(this)f(function V) Xg(is)h(called.)p 1323 2193 543 2 v 1323 2272 2 80 v 1337 2247 Xa Fb(ptkf_restorehashtabl)o(e)p 1864 2272 V 1323 2274 543 2 Xv 11 2348 a Fq(SUBROUTINE)h Fp(ptkf_r)o(estor)o(ehashtable)g XFq(\(\256leptr)n(,)f(tablestr\))25 2437 y(IN)50 b(INTEGER)193 Xb Fa(\256leptr)77 b Fq(pointer)10 b(to)h(a)h(\256le.)25 2487 Xy(IN)50 b(CHARACTER*\(*\))e Fa(tablestr)f Fq(hashtable)12 b(to)e(insert)h X(data)h(from)f(\256le.)0 2562 y(This)h(function)e(reads)j(a)f(hashtable)g X(from)f(the)h(\256le)g Fi(fileptr)p Fq(,)i(and)e(creates)h(it)e(with)g(the)h X(name)g Fi(tablestr)p Fq(.)19 b(If)12 b(the)f(hashtable)0 2612 Xy(already)16 b(exists,)g(it)f(is)g(deleted,)i(and)e(then)g(recreated)i(from) Ve X(the)g(\256le.)28 b(The)16 b(\256le)g(should)e(be)i(open)f(for)g(reading)g X(when)g(this)0 2662 y(function)10 b(is)h(called.)0 2956 y(13th)22 Xb(May)m(,)12 b(1992)626 b(184)828 b(2.01)p eop X%%Page: 185 186 Xbop 0 -137 a Fq(PHIGS)11 b(T)m(oolkit)f(User)i(Manual)1235 Xb(PTK/100)p 1287 -19 580 2 v 1287 60 2 80 v 1301 35 a Fb(ptkf_storeallha)o X(shtabl)o(es)p 1864 60 V 1287 62 580 2 v 11 136 a Fq(SUBROUTINE)12 Xb Fp(ptkf_stor)o(eallhashtables)e Fq(\(\256leptr\))25 236 y(IN)50 Xb(INTEGER)g Fa(\256leptr)e Fq(pointer)10 b(to)h(a)h(\256le.)0 X335 y(The)j(function)e(writes)g(all)h(the)g(hashtables)h(in)e(the)i(table)f X(of)g(hashtables)g(to)g(the)g(\256le)g Fi(fileptr)p Fq(,)j(which)d(should)f X(be)h(opened)0 385 y(for)d(writing.)p 1370 482 497 2 v 1370 X561 2 80 v 1384 536 a Fb(ptkf_storehashtabl)o(e)p 1864 561 XV 1370 563 497 2 v 11 637 a Fq(SUBROUTINE)h Fp(ptkf_stor)o(ehashtable)f XFq(\(\256leptr)n(,)g(tablestr\))25 726 y(IN)50 b(INTEGER)193 Xb Fa(\256leptr)48 b Fq(pointer)10 b(to)h(a)h(\256le.)25 776 Xy(IN)50 b(CHARACTER*\(*\))e Fa(table)58 b Fq(hashtable)11 b(to)g(store.)0 X851 y(The)h(function)e(writes)h(the)g(hashtable)g Fi(tablestr)i XFq(to)d(the)i(\256le)f Fi(fileptr)p Fq(,)i(which)e(should)f(be)i(opened)f X(for)g(writing.)p 1466 948 401 2 v 1466 1027 2 80 v 1480 1002 Xa Fb(ptkf_stringtoint)p 1864 1027 V 1466 1029 401 2 v 0 1103 Xa Fq(INTEGER)h(FUNCTION)f Fp(ptkf_stringtoint)f Fq(\(tablestr)n(,)h(str\))25 X1192 y(IN)50 b(CHARACTER*\(*\))e Fa(tablestr)f Fq(name)13 b(of)e(hashtable.) X25 1242 y(IN)50 b(CHARACTER*\(*\))e Fa(str)125 b Fq(string)10 Xb(to)h(be)h(searched)g(for)f(in)g(string)f(table.)0 1317 y(This)k(function)f X(returns)h(the)g(integer)g(allocated)h(for)e(the)i(string)e XFi(str)i Fq(in)f(hashtable)g Fi(tablestr)p Fq(.)26 b(If)15 Xb(the)f(string)f(has)i(not)e(al-)0 1367 y(ready)f(been)f(allocated)h(an)f X(integer)n(,)h(then)f(it)f(is)h(allocated)g(one)h(and)f(this)g(value)g(is)g X(returned.)p 1466 1464 V 1466 1543 2 80 v 1480 1518 a Fb(ptkf_stringused)p X1864 1543 V 1466 1545 401 2 v 0 1619 a Fq(LOGICAL)h(FUNCTION)f XFp(ptkf_stringused)g Fq(\(tablestr)n(,)g(str\))25 1708 y(IN)50 Xb(CHARACTER*\(*\))e Fa(tablestr)f Fq(name)13 b(of)e(hashtable.)25 X1758 y(IN)50 b(CHARACTER*\(*\))e Fa(str)125 b Fq(string)10 Xb(to)h(search)i(for)d(in)h(string)f(table.)0 1833 y(This)i(function)f(checks V) Xi(if)f(the)g(string)f Fi(str)i Fq(has)g(already)g(been)g(used)f(in)g X(hashtable)g Fi(tablestr)p Fq(,)i(Returning)d(TRUE)i(if)f(string)0 X1883 y(was)g(used)f(in)g(the)g(hashtable,)h(otherwise)f(F)m(ALSE.)0 X2956 y(13th)22 b(May)m(,)12 b(1992)626 b(185)828 b(2.01)p eop X%%Page: 186 187 Xbop 0 349 a Fj(Chapter)24 b(28)0 585 y Fs(PHIGS)30 b(Utilities)d(Library)h +-+-+-+-+-+-+-+- END OF PART 128 +-+-+-+-+-+-+-+-