home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume12 / postscript / part10 < prev    next >
Text File  |  1987-11-05  |  57KB  |  4,190 lines

  1. Subject:  v12i059:  A PostScript interpreter, Part10/18
  2. Newsgroups: comp.sources.unix
  3. Sender: sources
  4. Approved: rs@uunet.UU.NET
  5.  
  6. Submitted-by: Crispin Goswell <caag@vd.rl.ac.uk>
  7. Posting-number: Volume 12, Issue 59
  8. Archive-name: postscript/part10
  9.  
  10. #! /bin/sh
  11. # This is a shell archive.  Remove anything before this line, then unpack
  12. # it by saving it into a file and typing "sh file".  To overwrite existing
  13. # files, type "sh file -c".  You can also feed this as standard input via
  14. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  15. # will see the following message at the end:
  16. #        "End of archive 10 (of 18)."
  17. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  18. if test -f 'postscript/fonts/Gothic/roman.r' -a "${1}" != "-c" ; then 
  19.   echo shar: Will not clobber existing file \"'postscript/fonts/Gothic/roman.r'\"
  20. else
  21. echo shar: Extracting \"'postscript/fonts/Gothic/roman.r'\" \(12937 characters\)
  22. sed "s/^X//" >'postscript/fonts/Gothic/roman.r' <<'END_OF_FILE'
  23. XCharStrings
  24. X/A<C936
  25. X4737
  26. X4539
  27. X443B
  28. X433E
  29. X4341
  30. X4443
  31. X4644
  32. XC53A
  33. X443D
  34. X4441
  35. X4543
  36. XC936
  37. X4738
  38. X463A
  39. X453D
  40. X4540
  41. X4644
  42. X4646
  43. X4548
  44. X4349
  45. XD136
  46. X5336
  47. X5347
  48. X5147
  49. XD436
  50. X5447
  51. XD535
  52. X5548
  53. XC334
  54. X4635
  55. X4C36
  56. X5136
  57. X5535
  58. X5734
  59. XC53E
  60. X533E
  61. XC349
  62. X4648
  63. X4C47
  64. X5147
  65. X5548
  66. X5749
  67. X>
  68. Xput
  69. XMetrics
  70. X/A[-1
  71. X26]
  72. Xput
  73. XCharStrings
  74. X/B<C735
  75. X4748
  76. XC835
  77. X4848
  78. XCB34
  79. X4935
  80. X4948
  81. X4B49
  82. XC338
  83. X4536
  84. X4735
  85. X4B34
  86. X5034
  87. X5335
  88. X5537
  89. X5539
  90. X543B
  91. XD336
  92. X5437
  93. X5439
  94. X533B
  95. XD034
  96. X5235
  97. X5337
  98. X5339
  99. X523A
  100. XCC43
  101. X4A42
  102. X4940
  103. X493E
  104. X4A3C
  105. X4B3B
  106. X4E3A
  107. X513A
  108. X543B
  109. X563D
  110. X573F
  111. X5742
  112. X5645
  113. X5447
  114. X5248
  115. X4F49
  116. X4B49
  117. X4748
  118. X4547
  119. X4345
  120. XD53D
  121. X563F
  122. X5643
  123. X5545
  124. XD13A
  125. X543C
  126. X553F
  127. X5543
  128. X5446
  129. X5248
  130. X>
  131. Xput
  132. XMetrics
  133. X/B[-1
  134. X26]
  135. Xput
  136. XCharStrings
  137. X/C<D734
  138. X5636
  139. X5538
  140. X5336
  141. X5135
  142. X4E34
  143. X4C34
  144. X4935
  145. X4736
  146. X4538
  147. X443A
  148. X433D
  149. X4340
  150. X4443
  151. X4545
  152. X4747
  153. X4948
  154. X4C49
  155. X4E49
  156. X5148
  157. X5347
  158. X5545
  159. X5647
  160. X5749
  161. XD636
  162. X553B
  163. X5542
  164. X5647
  165. XD539
  166. X5438
  167. XD53C
  168. X5439
  169. X5337
  170. X5135
  171. XC539
  172. X443C
  173. X4441
  174. X4544
  175. XC935
  176. X4737
  177. X4639
  178. X453C
  179. X4541
  180. X4644
  181. X4746
  182. X4948
  183. XD445
  184. X5544
  185. XD148
  186. X5346
  187. X5444
  188. X5541
  189. X>
  190. Xput
  191. XMetrics
  192. X/C[-1
  193. X26]
  194. Xput
  195. XCharStrings
  196. X/D<C635
  197. X4648
  198. XC735
  199. X4748
  200. XC934
  201. X4835
  202. X4848
  203. X4949
  204. XC339
  205. X4437
  206. X4635
  207. X4934
  208. X4E34
  209. X5135
  210. X5336
  211. X5538
  212. X563A
  213. X573D
  214. X5740
  215. X5643
  216. X5545
  217. X5347
  218. X5148
  219. X4E49
  220. X4949
  221. X4648
  222. X4446
  223. X4344
  224. XD539
  225. X563C
  226. X5641
  227. X5544
  228. XD135
  229. X5337
  230. X5439
  231. X553C
  232. X5541
  233. X5444
  234. X5346
  235. X5148
  236. X>
  237. Xput
  238. XMetrics
  239. X/D[-1
  240. X26]
  241. Xput
  242. XCharStrings
  243. X/E<D734
  244. X5636
  245. X5538
  246. X5336
  247. X5135
  248. X4E34
  249. X4C34
  250. X4935
  251. X4736
  252. X4538
  253. X443A
  254. X433D
  255. X4340
  256. X4443
  257. X4545
  258. X4747
  259. X4948
  260. X4C49
  261. X4E49
  262. X5148
  263. X5347
  264. X5545
  265. X5647
  266. X5749
  267. XD636
  268. X553B
  269. X5542
  270. X5647
  271. XD539
  272. X5438
  273. XD53B
  274. X5337
  275. X5135
  276. XC539
  277. X443C
  278. X4441
  279. X4544
  280. XC935
  281. X4737
  282. X4639
  283. X453C
  284. X4541
  285. X4644
  286. X4746
  287. X4948
  288. XD445
  289. X5544
  290. XD148
  291. X5346
  292. X5444
  293. X5541
  294. XC53E
  295. X463D
  296. X493D
  297. X503F
  298. X533F
  299. X553E
  300. XCB3E
  301. X4D3F
  302. X5040
  303. X5240
  304. X543F
  305. XC83D
  306. X4D40
  307. X5041
  308. X5241
  309. X5440
  310. X553E
  311. XD53B
  312. X543A
  313. X533A
  314. X523B
  315. X533C
  316. X543B
  317. X>
  318. Xput
  319. XMetrics
  320. X/E[-1
  321. X26]
  322. Xput
  323. XCharStrings
  324. X/F<C536
  325. X4548
  326. XC835
  327. X4636
  328. X4647
  329. XCA34
  330. X4835
  331. X4737
  332. X4747
  333. X4947
  334. XC338
  335. X4536
  336. X4735
  337. X4A34
  338. X4E34
  339. X5135
  340. X5336
  341. X5437
  342. X5734
  343. XD734
  344. X5636
  345. X553A
  346. X553D
  347. X5641
  348. X5743
  349. XD537
  350. X5439
  351. XD135
  352. X5337
  353. X543A
  354. X553D
  355. XC73E
  356. X483D
  357. X4A3D
  358. X4F3E
  359. X523E
  360. X543D
  361. XCC3E
  362. X4F3F
  363. X513F
  364. X533E
  365. XC93D
  366. X4F40
  367. X5140
  368. X533F
  369. X543D
  370. X543A
  371. X5339
  372. X5239
  373. X513A
  374. X523B
  375. X533A
  376. XC349
  377. X4548
  378. X4947
  379. X4E47
  380. X5448
  381. X5749
  382. X>
  383. Xput
  384. XMetrics
  385. X/F[-1
  386. X26]
  387. Xput
  388. XCharStrings
  389. X/G<D734
  390. X5636
  391. X5538
  392. X5336
  393. X5135
  394. X4E34
  395. X4C34
  396. X4935
  397. X4736
  398. X4538
  399. X443A
  400. X433D
  401. X4340
  402. X4443
  403. X4545
  404. X4747
  405. X4948
  406. X4C49
  407. X4F49
  408. X5148
  409. X5347
  410. X5446
  411. X5544
  412. X5647
  413. X5749
  414. XD636
  415. X553B
  416. X5542
  417. X5647
  418. XD539
  419. X5438
  420. XD53C
  421. X5439
  422. X5337
  423. X5135
  424. XC539
  425. X443C
  426. X4441
  427. X4544
  428. XC935
  429. X4737
  430. X4639
  431. X453C
  432. X4541
  433. X4644
  434. X4746
  435. X4948
  436. XD346
  437. X5444
  438. X5440
  439. XD148
  440. X5247
  441. X5344
  442. X533F
  443. XC641
  444. X4740
  445. X4841
  446. X4742
  447. X4642
  448. X4541
  449. XC53E
  450. X463C
  451. X483B
  452. X4A3B
  453. X4D3C
  454. X503E
  455. X523F
  456. XC63D
  457. X483C
  458. X4A3C
  459. X4D3D
  460. X4F3E
  461. XC53E
  462. X473D
  463. X4A3D
  464. X503F
  465. X543F
  466. X553E
  467. X>
  468. Xput
  469. XMetrics
  470. X/G[-1
  471. X26]
  472. Xput
  473. XCharStrings
  474. X/H<C535
  475. X4548
  476. X4349
  477. XC636
  478. X4648
  479. XC936
  480. X4736
  481. X4748
  482. XC334
  483. X4535
  484. X4936
  485. X4E36
  486. X5435
  487. X5734
  488. XC73E
  489. X483C
  490. X4A3A
  491. X4D39
  492. X5139
  493. X543A
  494. X563C
  495. X573F
  496. X5742
  497. X5643
  498. X5444
  499. XD53C
  500. X563E
  501. X5641
  502. X5543
  503. XD139
  504. X533A
  505. X543B
  506. X553D
  507. X5541
  508. X5444
  509. X5446
  510. X5548
  511. X5749
  512. XC349
  513. X4748
  514. X4B48
  515. X5049
  516. X>
  517. Xput
  518. XMetrics
  519. X/H[-1
  520. X26]
  521. Xput
  522. XCharStrings
  523. X/I<CC37
  524. X4C47
  525. XCD38
  526. X4D46
  527. XCE37
  528. X4E47
  529. XC334
  530. X4736
  531. X4B37
  532. X4F37
  533. X5336
  534. X5734
  535. XC349
  536. X4648
  537. X4A47
  538. X5047
  539. X5448
  540. X5749
  541. X>
  542. Xput
  543. XMetrics
  544. X/I[-1
  545. X26]
  546. Xput
  547. XCharStrings
  548. X/J<CF37
  549. X5137
  550. X5146
  551. X5048
  552. X4E49
  553. XD237
  554. X5246
  555. X5147
  556. XD336
  557. X5347
  558. XC334
  559. X4736
  560. X4B37
  561. X4F37
  562. X5336
  563. X5734
  564. XC43D
  565. X433F
  566. X4343
  567. X4446
  568. X4648
  569. X4949
  570. X4E49
  571. X5148
  572. X5347
  573. X5545
  574. X5742
  575. XC443
  576. X4546
  577. X4647
  578. XC341
  579. X4543
  580. X4646
  581. X4748
  582. X4949
  583. X>
  584. Xput
  585. XMetrics
  586. X/J[-1
  587. X26]
  588. Xput
  589. XCharStrings
  590. X/K<C535
  591. X4548
  592. X4349
  593. XC636
  594. X4648
  595. XC936
  596. X4736
  597. X4748
  598. XC334
  599. X4535
  600. X4936
  601. X4E36
  602. X5435
  603. X5734
  604. XC73E
  605. X483C
  606. X4A3A
  607. X4D39
  608. X5039
  609. X533A
  610. X543B
  611. X543D
  612. X533E
  613. X4E40
  614. X4C41
  615. X4B42
  616. X4B43
  617. X4C44
  618. X4D43
  619. X4C42
  620. XD23A
  621. X533B
  622. X533D
  623. X523E
  624. XD039
  625. X523B
  626. X523D
  627. X513E
  628. X4E40
  629. XCE40
  630. X5140
  631. X5441
  632. X5543
  633. X5545
  634. X5446
  635. XD241
  636. X5443
  637. X5445
  638. XCE40
  639. X5141
  640. X5343
  641. X5446
  642. X5548
  643. X5649
  644. X5749
  645. XC349
  646. X4748
  647. X4B48
  648. X5049
  649. X>
  650. Xput
  651. XMetrics
  652. X/K[-1
  653. X26]
  654. Xput
  655. XCharStrings
  656. X/L<C535
  657. X4548
  658. XC636
  659. X4647
  660. XC936
  661. X4736
  662. X4747
  663. X4947
  664. XD739
  665. X553C
  666. X543E
  667. X5341
  668. X5343
  669. X5445
  670. X5646
  671. XD53D
  672. X5440
  673. X5443
  674. X5545
  675. XD739
  676. X563B
  677. X553F
  678. X5542
  679. X5646
  680. X5749
  681. XC334
  682. X4535
  683. X4936
  684. X4E36
  685. X5435
  686. X5734
  687. XC349
  688. X4548
  689. X4947
  690. X4E47
  691. X5448
  692. X5749
  693. X>
  694. Xput
  695. XMetrics
  696. X/L[-1
  697. X26]
  698. Xput
  699. XCharStrings
  700. X/M<CC37
  701. X4C47
  702. XCD38
  703. X4D46
  704. XCE37
  705. X4E47
  706. XC947
  707. X4745
  708. X4544
  709. X4443
  710. X4340
  711. X433B
  712. X4438
  713. X4636
  714. X4835
  715. X4B34
  716. X4F34
  717. X5235
  718. X5436
  719. X5638
  720. X573B
  721. X5740
  722. X5643
  723. X5544
  724. X5345
  725. X5147
  726. XC543
  727. X4440
  728. X443B
  729. X4538
  730. XC745
  731. X4643
  732. X4540
  733. X453A
  734. X4637
  735. X4835
  736. XD538
  737. X563B
  738. X5640
  739. X5543
  740. XD235
  741. X5437
  742. X553A
  743. X5540
  744. X5443
  745. X5345
  746. XC334
  747. X4736
  748. X4B37
  749. X4F37
  750. X5336
  751. X5734
  752. XC349
  753. X4648
  754. X4A47
  755. X5047
  756. X5448
  757. X5749
  758. X>
  759. Xput
  760. XMetrics
  761. X/M[-1
  762. X26]
  763. Xput
  764. XCharStrings
  765. X/N<C536
  766. X4548
  767. X4349
  768. XC736
  769. X4637
  770. X4648
  771. XCA34
  772. X4835
  773. X4737
  774. X4748
  775. XC338
  776. X4536
  777. X4735
  778. X4A34
  779. X4E34
  780. X5135
  781. X5336
  782. X5538
  783. X563A
  784. X573D
  785. X5741
  786. X5643
  787. X5444
  788. XD539
  789. X563C
  790. X5640
  791. X5543
  792. XD135
  793. X5337
  794. X5439
  795. X553C
  796. X5540
  797. X5444
  798. X5446
  799. X5548
  800. X5649
  801. X5749
  802. XC349
  803. X4748
  804. X4B48
  805. X5049
  806. X>
  807. Xput
  808. XMetrics
  809. X/N[-1
  810. X26]
  811. Xput
  812. XCharStrings
  813. X/O<CC34
  814. X4935
  815. X4736
  816. X4538
  817. X443A
  818. X433D
  819. X4340
  820. X4443
  821. X4545
  822. X4747
  823. X4948
  824. X4C49
  825. X4E49
  826. X5148
  827. X5347
  828. X5545
  829. X5643
  830. X5740
  831. X573D
  832. X563A
  833. X5538
  834. X5336
  835. X5135
  836. X4E34
  837. X4C34
  838. XC539
  839. X443C
  840. X4441
  841. X4544
  842. XC935
  843. X4737
  844. X4639
  845. X453C
  846. X4541
  847. X4644
  848. X4746
  849. X4948
  850. XD544
  851. X5641
  852. X563C
  853. X5539
  854. XD148
  855. X5346
  856. X5444
  857. X5541
  858. X553C
  859. X5439
  860. X5337
  861. X5135
  862. X>
  863. Xput
  864. XMetrics
  865. X/O[-1
  866. X26]
  867. Xput
  868. XCharStrings
  869. X/P<C537
  870. X4548
  871. XC836
  872. X4638
  873. X4647
  874. XCC34
  875. X4A35
  876. X4837
  877. X4739
  878. X4747
  879. X4947
  880. XC339
  881. X4537
  882. X4935
  883. X4C34
  884. X4F34
  885. X5235
  886. X5436
  887. X5638
  888. X573B
  889. X573D
  890. X5640
  891. X5442
  892. X5143
  893. X4D43
  894. X4A42
  895. X4840
  896. X473D
  897. XD538
  898. X563A
  899. X563E
  900. X5540
  901. XD235
  902. X5437
  903. X553A
  904. X553E
  905. X5441
  906. X5143
  907. XC349
  908. X4548
  909. X4947
  910. X4E47
  911. X5448
  912. X5749
  913. X>
  914. Xput
  915. XMetrics
  916. X/P[-1
  917. X26]
  918. Xput
  919. XCharStrings
  920. X/Q<CC34
  921. X4935
  922. X4736
  923. X4538
  924. X443A
  925. X433D
  926. X4340
  927. X4443
  928. X4545
  929. X4747
  930. X4948
  931. X4C49
  932. X4E49
  933. X5148
  934. X5347
  935. X5545
  936. X5643
  937. X5740
  938. X573D
  939. X563A
  940. X5538
  941. X5336
  942. X5135
  943. X4E34
  944. X4C34
  945. XC539
  946. X443C
  947. X4441
  948. X4544
  949. XC935
  950. X4737
  951. X4639
  952. X453C
  953. X4541
  954. X4644
  955. X4746
  956. X4948
  957. XD544
  958. X5641
  959. X563C
  960. X5539
  961. XD148
  962. X5346
  963. X5444
  964. X5541
  965. X553C
  966. X5439
  967. X5337
  968. X5135
  969. XC541
  970. X4643
  971. X4944
  972. X4F45
  973. X5645
  974. X5746
  975. X5748
  976. X5649
  977. X5648
  978. X5747
  979. XCB45
  980. X4D45
  981. XC643
  982. X4945
  983. X4C46
  984. X4E46
  985. X4F45
  986. X>
  987. Xput
  988. XMetrics
  989. X/Q[-1
  990. X26]
  991. Xput
  992. XCharStrings
  993. X/R<C537
  994. X4548
  995. X4349
  996. XC637
  997. X4648
  998. XC736
  999. X4748
  1000. XC339
  1001. X4537
  1002. X4736
  1003. X4935
  1004. X4C34
  1005. X5034
  1006. X5435
  1007. X5637
  1008. X5739
  1009. X573C
  1010. X563E
  1011. X553F
  1012. XD436
  1013. X5537
  1014. X5639
  1015. X563C
  1016. X553E
  1017. XD034
  1018. X5235
  1019. X5437
  1020. X5539
  1021. X553D
  1022. X543F
  1023. XD340
  1024. X5041
  1025. X4D41
  1026. X4B40
  1027. X4B3E
  1028. X4D3D
  1029. X503D
  1030. X533E
  1031. X5540
  1032. X5743
  1033. X5745
  1034. X5646
  1035. X5546
  1036. XD33F
  1037. X5440
  1038. X5644
  1039. X5645
  1040. X5542
  1041. XCF3D
  1042. X513E
  1043. X5340
  1044. X5442
  1045. X5546
  1046. X5648
  1047. X5749
  1048. XC349
  1049. X4748
  1050. X4B48
  1051. X5049
  1052. X>
  1053. Xput
  1054. XMetrics
  1055. X/R[-1
  1056. X26]
  1057. Xput
  1058. XCharStrings
  1059. X/S<CF34
  1060. X5535
  1061. X5734
  1062. X5636
  1063. X5638
  1064. X5436
  1065. X5235
  1066. X4F34
  1067. X4B34
  1068. X4835
  1069. X4538
  1070. X443B
  1071. X443D
  1072. X4540
  1073. X4742
  1074. X4A43
  1075. X4D43
  1076. X4F42
  1077. X5041
  1078. X513F
  1079. X513E
  1080. XD635
  1081. X5536
  1082. X5638
  1083. XC53E
  1084. X4640
  1085. X4741
  1086. X4A42
  1087. X4D42
  1088. X4F41
  1089. XC637
  1090. X4539
  1091. X453C
  1092. X463E
  1093. X4840
  1094. X4B41
  1095. X4D41
  1096. X4F40
  1097. X513E
  1098. X523D
  1099. X533D
  1100. XC73F
  1101. X483F
  1102. X493E
  1103. X4B3C
  1104. X4D3B
  1105. X503B
  1106. X523C
  1107. X543E
  1108. X5540
  1109. X5543
  1110. X5446
  1111. X5248
  1112. XCB3B
  1113. X4D3A
  1114. X503A
  1115. X533B
  1116. X553D
  1117. X5640
  1118. X5643
  1119. X5545
  1120. XC445
  1121. X4547
  1122. X4448
  1123. XC93E
  1124. X493D
  1125. X4A3B
  1126. X4B3A
  1127. X4D39
  1128. X5039
  1129. X533A
  1130. X563D
  1131. X5740
  1132. X5742
  1133. X5645
  1134. X5447
  1135. X5248
  1136. X4F49
  1137. X4B49
  1138. X4848
  1139. X4647
  1140. X4445
  1141. X4447
  1142. X4349
  1143. X4548
  1144. X4B49
  1145. X>
  1146. Xput
  1147. XMetrics
  1148. X/S[-1
  1149. X26]
  1150. Xput
  1151. XCharStrings
  1152. X/T<CC36
  1153. X4836
  1154. X4637
  1155. X4538
  1156. X443A
  1157. X433D
  1158. X4341
  1159. X4444
  1160. X4546
  1161. X4647
  1162. X4848
  1163. X4B49
  1164. X4E49
  1165. X5148
  1166. X5347
  1167. X5545
  1168. X5643
  1169. X5740
  1170. X573C
  1171. X5639
  1172. X5437
  1173. X5236
  1174. XD036
  1175. X4F37
  1176. X4F39
  1177. X503A
  1178. X5139
  1179. X5038
  1180. XC441
  1181. X4544
  1182. X4746
  1183. X4947
  1184. X4C48
  1185. X4F48
  1186. X5247
  1187. XC538
  1188. X443C
  1189. X443F
  1190. X4542
  1191. X4745
  1192. X4946
  1193. X4C47
  1194. X4F47
  1195. X5246
  1196. X5445
  1197. X5642
  1198. X5740
  1199. XC334
  1200. X4637
  1201. XC636
  1202. X4735
  1203. XC435
  1204. X4535
  1205. X4634
  1206. X4835
  1207. X4C36
  1208. X5236
  1209. X5535
  1210. X5734
  1211. X>
  1212. Xput
  1213. XMetrics
  1214. X/T[-1
  1215. X26]
  1216. Xput
  1217. XCharStrings
  1218. X/U<C736
  1219. X4538
  1220. X443A
  1221. X433D
  1222. X4340
  1223. X4443
  1224. X4545
  1225. X4747
  1226. X4948
  1227. X4C49
  1228. X5049
  1229. X5348
  1230. X5547
  1231. XC638
  1232. X453A
  1233. X443D
  1234. X4441
  1235. X4544
  1236. XC637
  1237. X4738
  1238. X4739
  1239. X463B
  1240. X453E
  1241. X4541
  1242. X4644
  1243. X4746
  1244. X4948
  1245. XD136
  1246. X5336
  1247. X5346
  1248. X5248
  1249. X5049
  1250. XD436
  1251. X5446
  1252. X5347
  1253. XD535
  1254. X5547
  1255. X5749
  1256. XC334
  1257. X4635
  1258. X4C36
  1259. X5136
  1260. X5535
  1261. X5734
  1262. X>
  1263. Xput
  1264. XMetrics
  1265. X/U[-1
  1266. X26]
  1267. Xput
  1268. XCharStrings
  1269. X/V<C334
  1270. X4D49
  1271. XC435
  1272. X4536
  1273. X4C45
  1274. X4D47
  1275. XC535
  1276. X4636
  1277. X4D45
  1278. X4E46
  1279. XD734
  1280. X4D49
  1281. XD23C
  1282. X5041
  1283. XD43A
  1284. X503F
  1285. X4F42
  1286. X4F44
  1287. XC334
  1288. X4535
  1289. X4A36
  1290. X5036
  1291. X5535
  1292. X5734
  1293. X>
  1294. Xput
  1295. XMetrics
  1296. X/V[-1
  1297. X26]
  1298. Xput
  1299. XCharStrings
  1300. X/W<C736
  1301. X4538
  1302. X443A
  1303. X433D
  1304. X4340
  1305. X4443
  1306. X4545
  1307. X4747
  1308. X4948
  1309. X4C49
  1310. X4E49
  1311. X5148
  1312. X5347
  1313. X5545
  1314. X5643
  1315. X5740
  1316. X573D
  1317. X563A
  1318. X5538
  1319. X5336
  1320. XC53A
  1321. X443D
  1322. X4440
  1323. X4543
  1324. X4645
  1325. XC538
  1326. X4639
  1327. X463A
  1328. X453D
  1329. X4540
  1330. X4644
  1331. X4746
  1332. X4948
  1333. XD445
  1334. X5543
  1335. X5640
  1336. X563D
  1337. X553A
  1338. XD148
  1339. X5346
  1340. X5444
  1341. X5540
  1342. X553D
  1343. X543A
  1344. X5439
  1345. X5538
  1346. XCC37
  1347. X4C49
  1348. XCD38
  1349. X4D48
  1350. XCE37
  1351. X4E49
  1352. XC334
  1353. X4736
  1354. X4B37
  1355. X4F37
  1356. X5336
  1357. X5734
  1358. X>
  1359. Xput
  1360. XMetrics
  1361. X/W[-1
  1362. X26]
  1363. Xput
  1364. XCharStrings
  1365. X/X<C334
  1366. X5347
  1367. X5448
  1368. XC435
  1369. X4636
  1370. X5548
  1371. XC736
  1372. X5749
  1373. XD734
  1374. X4E3E
  1375. XCC40
  1376. X4548
  1377. XCB41
  1378. X4843
  1379. X4745
  1380. XCC40
  1381. X4842
  1382. X4743
  1383. X4645
  1384. X4647
  1385. XC334
  1386. X4736
  1387. X4B37
  1388. X4F37
  1389. X5336
  1390. X5734
  1391. XC349
  1392. X4548
  1393. X4947
  1394. X4E47
  1395. X5448
  1396. X5749
  1397. X>
  1398. Xput
  1399. XMetrics
  1400. X/X[-1
  1401. X26]
  1402. Xput
  1403. XCharStrings
  1404. X/Y<D336
  1405. X5348
  1406. XD436
  1407. X5447
  1408. XD535
  1409. X5547
  1410. XC636
  1411. X4438
  1412. X433B
  1413. X433E
  1414. X4441
  1415. X4643
  1416. X4844
  1417. X4B45
  1418. X4E45
  1419. X5144
  1420. X5343
  1421. XC743
  1422. X4A44
  1423. X5044
  1424. XC33E
  1425. X4440
  1426. X4642
  1427. X4943
  1428. X4F43
  1429. X5144
  1430. XC334
  1431. X4736
  1432. X4B37
  1433. X4F37
  1434. X5336
  1435. X5734
  1436. XC345
  1437. X4547
  1438. X4748
  1439. X4B49
  1440. X4F49
  1441. X5348
  1442. X5746
  1443. X>
  1444. Xput
  1445. XMetrics
  1446. X/Y[-1
  1447. X26]
  1448. Xput
  1449. XCharStrings
  1450. X/Z<C334
  1451. X4435
  1452. X4636
  1453. X4936
  1454. X4E34
  1455. X5134
  1456. X5435
  1457. X5537
  1458. X5539
  1459. X543B
  1460. XD335
  1461. X5437
  1462. X5439
  1463. X533B
  1464. XD134
  1465. X5235
  1466. X5337
  1467. X533A
  1468. XD33C
  1469. X4F3D
  1470. X4D3D
  1471. X4B3C
  1472. X4B3A
  1473. X4D39
  1474. X4F39
  1475. X533A
  1476. XCF39
  1477. X513A
  1478. X523B
  1479. X513C
  1480. X4F3D
  1481. XD43B
  1482. X563D
  1483. X5740
  1484. X5742
  1485. X5645
  1486. X5447
  1487. X5248
  1488. X4F49
  1489. X4B49
  1490. X4848
  1491. X4647
  1492. X4445
  1493. X4342
  1494. X4340
  1495. X443D
  1496. X453C
  1497. X473B
  1498. X493B
  1499. X4B3C
  1500. X4B3E
  1501. X4A3F
  1502. X493E
  1503. X4A3D
  1504. XD33B
  1505. X553D
  1506. X563F
  1507. X5643
  1508. X5545
  1509. XD33C
  1510. X543D
  1511. X553F
  1512. X5543
  1513. X5446
  1514. X5248
  1515. X>
  1516. Xput
  1517. XMetrics
  1518. X/Z[-1
  1519. X26]
  1520. Xput
  1521. XCharStrings
  1522. X/a<C63F
  1523. X4342
  1524. X4346
  1525. X4649
  1526. X4A47
  1527. XC442
  1528. X4446
  1529. X4648
  1530. XC540
  1531. X4545
  1532. X4848
  1533. XC841
  1534. X433C
  1535. X443B
  1536. X453C
  1537. X443D
  1538. XC53C
  1539. X493C
  1540. X4B3B
  1541. X4D3D
  1542. X4D46
  1543. X4E47
  1544. XCB3C
  1545. X4C3D
  1546. X4C46
  1547. X4B47
  1548. X4C48
  1549. X4D47
  1550. X4C46
  1551. XC93C
  1552. X4B3E
  1553. X4B46
  1554. X4A47
  1555. X4C49
  1556. X4E47
  1557. X>
  1558. Xput
  1559. XMetrics
  1560. X/a[-3
  1561. X17]
  1562. Xput
  1563. XCharStrings
  1564. X/b<C536
  1565. X4334
  1566. X4438
  1567. X4446
  1568. X4749
  1569. X4C47
  1570. X4E46
  1571. XC536
  1572. X4546
  1573. X4748
  1574. XC536
  1575. X4734
  1576. X4638
  1577. X4645
  1578. X4948
  1579. XC63D
  1580. X4B3B
  1581. X4E3E
  1582. X4E46
  1583. XCB3C
  1584. X4D3E
  1585. X4D46
  1586. XC93C
  1587. X4C3F
  1588. X4C47
  1589. X>
  1590. Xput
  1591. XMetrics
  1592. X/b[3
  1593. X17]
  1594. Xput
  1595. XCharStrings
  1596. X/c<C33E
  1597. X4347
  1598. X4549
  1599. X4747
  1600. XC43E
  1601. X4447
  1602. X4548
  1603. XC53D
  1604. X4546
  1605. X4647
  1606. X4747
  1607. XC33E
  1608. X493B
  1609. X4B3D
  1610. X493E
  1611. X473C
  1612. XC83C
  1613. X4A3D
  1614. X>
  1615. Xput
  1616. XMetrics
  1617. X/c[-2
  1618. X12]
  1619. Xput
  1620. XCharStrings
  1621. X/d<C83B
  1622. X433E
  1623. X4346
  1624. X4649
  1625. X4848
  1626. X4B47
  1627. X4D47
  1628. XC43E
  1629. X4446
  1630. X4648
  1631. XC53D
  1632. X4545
  1633. X4848
  1634. XC637
  1635. X4634
  1636. X4737
  1637. X4D3E
  1638. X4D47
  1639. XC637
  1640. X4C3E
  1641. X4C46
  1642. XC637
  1643. X4337
  1644. X4638
  1645. X4B3E
  1646. X4B47
  1647. X>
  1648. Xput
  1649. XMetrics
  1650. X/d[4
  1651. X16]
  1652. Xput
  1653. XCharStrings
  1654. X/e<C33E
  1655. X4347
  1656. X4549
  1657. X4747
  1658. XC43E
  1659. X4447
  1660. X4548
  1661. XC53D
  1662. X4546
  1663. X4647
  1664. X4747
  1665. XC33E
  1666. X493B
  1667. X4C3F
  1668. X4543
  1669. XC83C
  1670. X4B3F
  1671. XC73C
  1672. X4A40
  1673. X>
  1674. Xput
  1675. XMetrics
  1676. X/e[-2
  1677. X13]
  1678. Xput
  1679. XCharStrings
  1680. X/f<C437
  1681. X4446
  1682. X4347
  1683. X4549
  1684. XC537
  1685. X4546
  1686. X4447
  1687. X4548
  1688. X4647
  1689. X4546
  1690. XC636
  1691. X4646
  1692. X4747
  1693. X4549
  1694. XC437
  1695. X4A34
  1696. X4C36
  1697. X4A37
  1698. X4835
  1699. XC935
  1700. X4B36
  1701. XC13B
  1702. X443B
  1703. XC63B
  1704. X4A3B
  1705. X>
  1706. Xput
  1707. XMetrics
  1708. X/f[5
  1709. X12]
  1710. Xput
  1711. XCharStrings
  1712. X/g<C33E
  1713. X4346
  1714. X4649
  1715. X4B47
  1716. XC43E
  1717. X4446
  1718. X4648
  1719. XC53D
  1720. X4545
  1721. X4848
  1722. XC33E
  1723. X453D
  1724. X4A3B
  1725. X4D3E
  1726. X4D4B
  1727. X4C4D
  1728. X4B4E
  1729. X494F
  1730. X474F
  1731. X454E
  1732. X434F
  1733. X4550
  1734. X474F
  1735. XCA3C
  1736. X4C3E
  1737. X4C4B
  1738. X4B4D
  1739. XC64F
  1740. X444F
  1741. XC83C
  1742. X4B3F
  1743. X4B4C
  1744. X4A4E
  1745. X494F
  1746. X>
  1747. Xput
  1748. XMetrics
  1749. X/g[-3
  1750. X17]
  1751. Xput
  1752. XCharStrings
  1753. X/h<C536
  1754. X4334
  1755. X4438
  1756. X4446
  1757. X4347
  1758. X4549
  1759. XC536
  1760. X4546
  1761. X4447
  1762. X4548
  1763. X4647
  1764. X4546
  1765. XC536
  1766. X4734
  1767. X4638
  1768. X4646
  1769. X4747
  1770. X4549
  1771. XC63D
  1772. X493C
  1773. X4B3B
  1774. X4E3E
  1775. X4E47
  1776. X4B4B
  1777. X4B4E
  1778. X4C50
  1779. X4D50
  1780. X4B4E
  1781. XCB3C
  1782. X4D3E
  1783. X4D47
  1784. X4C49
  1785. XC93C
  1786. X4C3F
  1787. X4C48
  1788. X4B4B
  1789. X>
  1790. Xput
  1791. XMetrics
  1792. X/h[3
  1793. X18]
  1794. Xput
  1795. XCharStrings
  1796. X/i<C534
  1797. X4336
  1798. X4538
  1799. X4736
  1800. X4534
  1801. XC535
  1802. X4436
  1803. X4537
  1804. X4636
  1805. X4535
  1806. XC53B
  1807. X433D
  1808. X443E
  1809. X4446
  1810. X4347
  1811. X4549
  1812. XC53E
  1813. X463D
  1814. X453C
  1815. X443D
  1816. X453E
  1817. X4546
  1818. X4447
  1819. X4548
  1820. X4647
  1821. X4546
  1822. XC53B
  1823. X473D
  1824. X463E
  1825. X4646
  1826. X4747
  1827. X4549
  1828. X>
  1829. Xput
  1830. XMetrics
  1831. X/i[7
  1832. X10]
  1833. Xput
  1834. XCharStrings
  1835. X/j<C534
  1836. X4336
  1837. X4538
  1838. X4736
  1839. X4534
  1840. XC535
  1841. X4436
  1842. X4537
  1843. X4636
  1844. X4535
  1845. XC53B
  1846. X433D
  1847. X443E
  1848. X4447
  1849. X474B
  1850. XC53E
  1851. X463D
  1852. X453C
  1853. X443D
  1854. X453E
  1855. X4547
  1856. X4649
  1857. XC53B
  1858. X473D
  1859. X463E
  1860. X4648
  1861. X474B
  1862. X474E
  1863. X4550
  1864. X434F
  1865. X4350
  1866. X4550
  1867. X>
  1868. Xput
  1869. XMetrics
  1870. X/j[7
  1871. X10]
  1872. Xput
  1873. XCharStrings
  1874. X/k<C536
  1875. X4334
  1876. X4438
  1877. X4446
  1878. X4347
  1879. X4549
  1880. XC536
  1881. X4546
  1882. X4447
  1883. X4548
  1884. X4647
  1885. X4546
  1886. XC536
  1887. X4734
  1888. X4638
  1889. X4646
  1890. X4747
  1891. X4549
  1892. XC63E
  1893. X493C
  1894. X4B3B
  1895. X4D3E
  1896. X4A40
  1897. X4643
  1898. XCA3C
  1899. X4C3E
  1900. XC93C
  1901. X4B3F
  1902. XC941
  1903. X4A42
  1904. X4B47
  1905. X4D49
  1906. X4F47
  1907. XCA41
  1908. X4B43
  1909. X4C47
  1910. X4D48
  1911. XCA40
  1912. X4B41
  1913. X4D46
  1914. X4E47
  1915. X4F47
  1916. X>
  1917. Xput
  1918. XMetrics
  1919. X/k[3
  1920. X17]
  1921. Xput
  1922. XCharStrings
  1923. X/l<C536
  1924. X4334
  1925. X4438
  1926. X4446
  1927. X4347
  1928. X4549
  1929. XC536
  1930. X4546
  1931. X4447
  1932. X4548
  1933. X4647
  1934. X4546
  1935. XC536
  1936. X4734
  1937. X4638
  1938. X4646
  1939. X4747
  1940. X4549
  1941. X>
  1942. Xput
  1943. XMetrics
  1944. X/l[7
  1945. X10]
  1946. Xput
  1947. XCharStrings
  1948. X/m<C23D
  1949. X433D
  1950. X443E
  1951. X4446
  1952. X4347
  1953. X4549
  1954. XC43C
  1955. X453D
  1956. X4546
  1957. X4447
  1958. X4548
  1959. X4647
  1960. X4546
  1961. XC23D
  1962. X443B
  1963. X463D
  1964. X4646
  1965. X4747
  1966. X4549
  1967. XC63D
  1968. X493C
  1969. X4B3B
  1970. X4E3D
  1971. X4E46
  1972. X4F47
  1973. X4D49
  1974. XCB3C
  1975. X4D3D
  1976. X4D46
  1977. X4C47
  1978. X4D48
  1979. X4E47
  1980. X4D46
  1981. XC93C
  1982. X4C3E
  1983. X4C46
  1984. X4B47
  1985. X4D49
  1986. XCE3D
  1987. X513C
  1988. X533B
  1989. X563D
  1990. X5646
  1991. X5747
  1992. X5549
  1993. XD33C
  1994. X553D
  1995. X5546
  1996. X5447
  1997. X5548
  1998. X5647
  1999. X5546
  2000. XD13C
  2001. X543E
  2002. X5446
  2003. X5347
  2004. X5549
  2005. X>
  2006. Xput
  2007. XMetrics
  2008. X/m[-2
  2009. X26]
  2010. Xput
  2011. XCharStrings
  2012. X/n<C23D
  2013. X433D
  2014. X443E
  2015. X4446
  2016. X4347
  2017. X4549
  2018. XC43C
  2019. X453D
  2020. X4546
  2021. X4447
  2022. X4548
  2023. X4647
  2024. X4546
  2025. XC23D
  2026. X443B
  2027. X463D
  2028. X4646
  2029. X4747
  2030. X4549
  2031. XC63D
  2032. X493C
  2033. X4B3B
  2034. X4E3D
  2035. X4E46
  2036. X4F47
  2037. X4D49
  2038. XCB3C
  2039. X4D3D
  2040. X4D46
  2041. X4C47
  2042. X4D48
  2043. X4E47
  2044. X4D46
  2045. XC93C
  2046. X4C3E
  2047. X4C46
  2048. X4B47
  2049. X4D49
  2050. X>
  2051. Xput
  2052. XMetrics
  2053. X/n[-2
  2054. X18]
  2055. Xput
  2056. XCharStrings
  2057. X/o<C33E
  2058. X4346
  2059. X4649
  2060. X4B47
  2061. X4D46
  2062. XC43E
  2063. X4446
  2064. X4648
  2065. XC53D
  2066. X4545
  2067. X4848
  2068. XC33E
  2069. X453D
  2070. X4A3B
  2071. X4D3E
  2072. X4D46
  2073. XCA3C
  2074. X4C3E
  2075. X4C46
  2076. XC83C
  2077. X4B3F
  2078. X4B47
  2079. X>
  2080. Xput
  2081. XMetrics
  2082. X/o[-3
  2083. X16]
  2084. Xput
  2085. XCharStrings
  2086. X/p<C33B
  2087. X443D
  2088. X4446
  2089. X4247
  2090. X4447
  2091. X444D
  2092. X4350
  2093. X454E
  2094. XC53D
  2095. X454E
  2096. XC33B
  2097. X453C
  2098. X463D
  2099. X4646
  2100. X4847
  2101. X4948
  2102. XC547
  2103. X4647
  2104. X4848
  2105. XC648
  2106. X4749
  2107. X4C47
  2108. X4E46
  2109. XC648
  2110. X464D
  2111. X4750
  2112. X454E
  2113. XC63D
  2114. X493C
  2115. X4B3B
  2116. X4E3E
  2117. X4E46
  2118. XCB3C
  2119. X4D3E
  2120. X4D46
  2121. XC93C
  2122. X4C3F
  2123. X4C47
  2124. X>
  2125. Xput
  2126. XMetrics
  2127. X/p[-2
  2128. X17]
  2129. Xput
  2130. XCharStrings
  2131. X/q<C33E
  2132. X4346
  2133. X4649
  2134. X4B47
  2135. XC43E
  2136. X4446
  2137. X4648
  2138. XC53D
  2139. X4545
  2140. X4848
  2141. XC33E
  2142. X453D
  2143. X4A3B
  2144. X4D3E
  2145. X4D4D
  2146. X4E50
  2147. X4C4E
  2148. XCA3C
  2149. X4C3E
  2150. X4C4E
  2151. XC83C
  2152. X4B3F
  2153. X4B4D
  2154. X4A50
  2155. X4C4E
  2156. X>
  2157. Xput
  2158. XMetrics
  2159. X/q[-3
  2160. X17]
  2161. Xput
  2162. XCharStrings
  2163. X/r<C23D
  2164. X433D
  2165. X443E
  2166. X4446
  2167. X4347
  2168. X4549
  2169. XC43C
  2170. X453D
  2171. X4546
  2172. X4447
  2173. X4548
  2174. X4647
  2175. X4546
  2176. XC23D
  2177. X443B
  2178. X463D
  2179. X4646
  2180. X4747
  2181. X4549
  2182. XC63D
  2183. X4A3B
  2184. X4C3D
  2185. X4A3E
  2186. X483C
  2187. XC93C
  2188. X4B3D
  2189. X>
  2190. Xput
  2191. XMetrics
  2192. X/r[-2
  2193. X13]
  2194. Xput
  2195. XCharStrings
  2196. X/s<C33E
  2197. X4341
  2198. X4543
  2199. X4B40
  2200. X4D42
  2201. X4D46
  2202. XC43E
  2203. X4441
  2204. X4542
  2205. XC53D
  2206. X4541
  2207. X4642
  2208. XCB41
  2209. X4C42
  2210. X4C46
  2211. XCA41
  2212. X4B42
  2213. X4B47
  2214. XC33E
  2215. X493B
  2216. X4C3C
  2217. X4A3D
  2218. X473C
  2219. XC83C
  2220. X4B3C
  2221. XCD46
  2222. X4749
  2223. X4347
  2224. X4546
  2225. X4948
  2226. XC547
  2227. X4748
  2228. X>
  2229. Xput
  2230. XMetrics
  2231. X/s[-3
  2232. X16]
  2233. Xput
  2234. XCharStrings
  2235. X/t<C536
  2236. X4334
  2237. X4438
  2238. X4446
  2239. X4347
  2240. X4549
  2241. XC536
  2242. X4546
  2243. X4447
  2244. X4548
  2245. X4647
  2246. X4546
  2247. XC536
  2248. X4734
  2249. X4638
  2250. X4646
  2251. X4747
  2252. X4549
  2253. XC13B
  2254. X443B
  2255. XC63B
  2256. X493B
  2257. X>
  2258. Xput
  2259. XMetrics
  2260. X/t[7
  2261. X10]
  2262. Xput
  2263. XCharStrings
  2264. X/u<C23D
  2265. X433D
  2266. X443E
  2267. X4447
  2268. X4749
  2269. X4C47
  2270. XC43C
  2271. X453D
  2272. X4547
  2273. X4748
  2274. XC23D
  2275. X443B
  2276. X463D
  2277. X4646
  2278. X4948
  2279. XCD3B
  2280. X4F3D
  2281. X4E3E
  2282. X4E46
  2283. X4F47
  2284. X5047
  2285. XCD3E
  2286. X4E3D
  2287. X4D3C
  2288. X4C3D
  2289. X4D3E
  2290. X4D47
  2291. X4E48
  2292. XCD3B
  2293. X4B3D
  2294. X4C3E
  2295. X4C47
  2296. X4E49
  2297. X5047
  2298. X>
  2299. Xput
  2300. XMetrics
  2301. X/u[-2
  2302. X18]
  2303. Xput
  2304. XCharStrings
  2305. X/v<C33B
  2306. X443D
  2307. X4446
  2308. X4849
  2309. X4A47
  2310. X4E45
  2311. XC43C
  2312. X453D
  2313. X4546
  2314. X4848
  2315. XC33B
  2316. X453C
  2317. X463D
  2318. X4645
  2319. X4947
  2320. X4A47
  2321. XCD3B
  2322. X4F3D
  2323. X4E3E
  2324. X4E45
  2325. XCD3E
  2326. X4E3D
  2327. X4D3C
  2328. X4C3D
  2329. X4D3E
  2330. X4D45
  2331. XCD3B
  2332. X4B3D
  2333. X4C3E
  2334. X4C46
  2335. X>
  2336. Xput
  2337. XMetrics
  2338. X/v[-3
  2339. X18]
  2340. Xput
  2341. XCharStrings
  2342. X/w<C33B
  2343. X443D
  2344. X4446
  2345. X4849
  2346. X4A47
  2347. X4C46
  2348. XC43C
  2349. X453D
  2350. X4546
  2351. X4848
  2352. XC33B
  2353. X453C
  2354. X463D
  2355. X4645
  2356. X4947
  2357. X4A47
  2358. XCD3B
  2359. X4B3D
  2360. X4C3E
  2361. X4C46
  2362. X5049
  2363. X5247
  2364. X5645
  2365. XCD3E
  2366. X4E3D
  2367. X4D3C
  2368. X4C3D
  2369. X4D3E
  2370. X4D46
  2371. X5048
  2372. XCD3B
  2373. X4F3D
  2374. X4E3E
  2375. X4E45
  2376. X5147
  2377. X5247
  2378. XD53B
  2379. X573D
  2380. X563E
  2381. X5645
  2382. XD53E
  2383. X563D
  2384. X553C
  2385. X543D
  2386. X553E
  2387. X5545
  2388. XD53B
  2389. X533D
  2390. X543E
  2391. X5446
  2392. X>
  2393. Xput
  2394. XMetrics
  2395. X/w[-3
  2396. X26]
  2397. Xput
  2398. XCharStrings
  2399. X/x<C33D
  2400. X453E
  2401. X4C48
  2402. X4D49
  2403. X4F47
  2404. XC43C
  2405. X463D
  2406. X4C47
  2407. X4E48
  2408. XC33D
  2409. X453B
  2410. X463C
  2411. X4D46
  2412. X4F47
  2413. XCF3B
  2414. X4D3B
  2415. X4D3D
  2416. X4F3D
  2417. X4F3B
  2418. X4D3D
  2419. X4A41
  2420. XC843
  2421. X4547
  2422. X4349
  2423. X4549
  2424. X4547
  2425. X4347
  2426. X4349
  2427. XC542
  2428. X4842
  2429. XCA42
  2430. X4D42
  2431. X>
  2432. Xput
  2433. XMetrics
  2434. X/x[-3
  2435. X18]
  2436. Xput
  2437. XCharStrings
  2438. X/y<C23D
  2439. X433D
  2440. X443E
  2441. X4447
  2442. X4749
  2443. X4C47
  2444. XC43C
  2445. X453D
  2446. X4547
  2447. X4748
  2448. XC23D
  2449. X443B
  2450. X463D
  2451. X4646
  2452. X4948
  2453. XCD3B
  2454. X4F3D
  2455. X4E3E
  2456. X4E4B
  2457. X4D4D
  2458. X4C4E
  2459. X4A4F
  2460. X484F
  2461. X464E
  2462. X444F
  2463. X4650
  2464. X484F
  2465. XCD3E
  2466. X4E3D
  2467. X4D3C
  2468. X4C3D
  2469. X4D3E
  2470. X4D4C
  2471. X4C4D
  2472. XC74F
  2473. X454F
  2474. XCD3B
  2475. X4B3D
  2476. X4C3E
  2477. X4C4C
  2478. X4B4E
  2479. X4A4F
  2480. X>
  2481. Xput
  2482. XMetrics
  2483. X/y[-2
  2484. X18]
  2485. Xput
  2486. XCharStrings
  2487. X/z<C63C
  2488. X433E
  2489. X433D
  2490. X463C
  2491. X483B
  2492. X4B3D
  2493. X4B41
  2494. X4643
  2495. XC83C
  2496. X4A3D
  2497. X4A41
  2498. XC63C
  2499. X493E
  2500. X4941
  2501. X4842
  2502. XC643
  2503. X4B45
  2504. X4B4B
  2505. X4A4D
  2506. X494E
  2507. X474F
  2508. X454F
  2509. X434E
  2510. X414F
  2511. X4350
  2512. X454F
  2513. XCA45
  2514. X4A4C
  2515. X494D
  2516. XC44F
  2517. X424F
  2518. XC844
  2519. X4945
  2520. X494C
  2521. X484E
  2522. X474F
  2523. X>
  2524. Xput
  2525. XMetrics
  2526. X/z[-1
  2527. X15]
  2528. Xput
  2529. END_OF_FILE
  2530. if test 12937 -ne `wc -c <'postscript/fonts/Gothic/roman.r'`; then
  2531.     echo shar: \"'postscript/fonts/Gothic/roman.r'\" unpacked with wrong size!
  2532. fi
  2533. # end of 'postscript/fonts/Gothic/roman.r'
  2534. fi
  2535. if test -f 'postscript/psrc' -a "${1}" != "-c" ; then 
  2536.   echo shar: Will not clobber existing file \"'postscript/psrc'\"
  2537. else
  2538. echo shar: Extracting \"'postscript/psrc'\" \(11943 characters\)
  2539. sed "s/^X//" >'postscript/psrc' <<'END_OF_FILE'
  2540. X/executive {
  2541. X    {
  2542. X        { (\n) print
  2543. X            prompt flush (%statementedit) (r) file
  2544. X            dup status not {(\n) print quit} if
  2545. X            cvx exec } stopped
  2546. X        { (stopped\n) print } if
  2547. X    } loop
  2548. X } def
  2549. X
  2550. X/bind {} def
  2551. X
  2552. X/save { gsave /save } def
  2553. X/restore { grestore pop } def
  2554. X/raise { errordict exch get exec } def
  2555. X
  2556. X/beep ( ) dup 0 7 put def
  2557. X/stdin (%stdin) (r) file def
  2558. X
  2559. X/imagedict 11 dict def
  2560. X
  2561. X/imagemask { % width height invert matrix proc
  2562. X    imagedict begin
  2563. X        /p exch def /m exch def /i exch def /h exch def /w exch def
  2564. X        
  2565. X        /offset 0 def
  2566. X        /l1 h w 7 add 8 idiv mul offset add def
  2567. X        /s1 l1 string def
  2568. X        {
  2569. X            /s2 p def
  2570. X            /l2 s2 length def
  2571. X            l2 0 eq { exit } if
  2572. X            s1 offset s2 putinterval
  2573. X            /offset offset l2 add def
  2574. X            offset l1 gt { end rangecheck raise } if
  2575. X            offset l1 eq { exit } if
  2576. X        } loop
  2577. X        w h i m s1
  2578. X    end
  2579. X    realimagemask
  2580. X} def
  2581. X
  2582. X/image { % width height depth matrix proc
  2583. X    imagedict begin
  2584. X        /p exch def /m exch def /d exch def /h exch def /w exch def
  2585. X        
  2586. X        /offset 0 def
  2587. X        /l1 h w d mul 7 add 8 idiv mul offset add def
  2588. X        /s1 l1 string def
  2589. X        {
  2590. X            /s2 p def
  2591. X            /l2 s2 length def
  2592. X            l2 0 eq { exit } if
  2593. X            s1 offset s2 putinterval
  2594. X            /offset offset l2 add def
  2595. X            offset l1 gt { end rangecheck raise } if
  2596. X            offset l1 eq { exit } if
  2597. X        } loop
  2598. X        w h d m s1
  2599. X    end
  2600. X    realimage
  2601. X} def
  2602. X
  2603. X/tty (%terminal) (r) file def
  2604. X%/tty (|cat -u </dev/tty) (r) file def
  2605. X
  2606. X/showpage {
  2607. X    copypage initgraphics
  2608. X    beep print flush
  2609. X    false echo
  2610. X    { tty read { pop } if } stopped
  2611. X    true echo
  2612. X    not {
  2613. X        erasepage
  2614. X    } if
  2615. X} def
  2616. X
  2617. X/run { { (r) file } stopped { pop stop } if cvx exec } def
  2618. X/prompt { (PS>) print } def
  2619. X
  2620. X/= {
  2621. X    dup type /stringtype ne { 30 string cvs } if
  2622. X    print (\n) print
  2623. X} def
  2624. X
  2625. X/stack {
  2626. X    count dup
  2627. X    1 add copy
  2628. X    {=} repeat pop
  2629. X} def
  2630. X
  2631. X/pstack {
  2632. X    count dup
  2633. X    1 add copy array astore
  2634. X    {== ( ) print} forall
  2635. X    pop
  2636. X} def
  2637. X
  2638. X/showdict 10 dict def
  2639. X
  2640. X/.show {
  2641. X    showdict begin gsave
  2642. X    currentpoint translate
  2643. X    currentfont dup /FontMatrix get concat
  2644. X        dup /BuildChar get    % string font buildchar
  2645. X        1 index /FontBBox get    % string font buildchar bbox
  2646. X        aload pop    % string font buildchar lx ly hx hy
  2647. X        3 -1 roll sub /height exch def
  2648. X            % string font buildchar lx hx
  2649. X        exch sub /width exch def
  2650. X    3 -1 roll % font buildchar string
  2651. X    {
  2652. X        { % font buildchar char
  2653. X            width 0 setcharwidth
  2654. X            3 copy exch exec
  2655. X            .adjust
  2656. X        } forall
  2657. X    } stopped
  2658. X    0 0 transform grestore itransform moveto end
  2659. X    { stop } if
  2660. X} def
  2661. X
  2662. X/kshow {
  2663. X    showdict begin /p exch def
  2664. X        dup length 0 ne {
  2665. X            dup 0 get /last exch def
  2666. X            dup 0 1 getinterval show
  2667. X            dup length 1 sub 1 exch getinterval {
  2668. X                last exch dup /last exch def
  2669. X                /p load exec
  2670. X            } forall
  2671. X        } if
  2672. X    end
  2673. X} def
  2674. X
  2675. X/stringwidth {
  2676. X    gsave
  2677. X        matrix currentmatrix nulldevice setmatrix
  2678. X        0 0 moveto
  2679. X        show
  2680. X        currentpoint
  2681. X    grestore
  2682. X} def
  2683. X
  2684. X/FontMap 20 dict def
  2685. X
  2686. X/lib { % name
  2687. X    dup length Library length add 1 add string % name s
  2688. X    dup 0 Library putinterval % name s
  2689. X    dup Library length (/) putinterval % name s
  2690. X    exch 1 index exch % s s name
  2691. X    Library length 1 add exch % s s l name
  2692. X    putinterval
  2693. X} def
  2694. X
  2695. X/findfontdict 10 dict def
  2696. X
  2697. Xfindfontdict /FFName 256 string put
  2698. Xfindfontdict /FFBuf 256 string put
  2699. X/font-library (font/) lib def
  2700. X
  2701. X/oldfindfont /findfont load def
  2702. X
  2703. X/findfont {
  2704. X    dup FontMap exch known {
  2705. X        FontMap exch get
  2706. X    } if
  2707. X    dup FontDirectory exch known
  2708. X    {
  2709. X        oldfindfont
  2710. X    } {
  2711. X        dup
  2712. X        findfontdict begin
  2713. X            FFBuf cvs /FFN exch def
  2714. X            FFName 0 font-library putinterval
  2715. X            FFName font-library length FFN putinterval
  2716. X            FFName 0 FFN length font-library length add getinterval
  2717. X                { run } stopped { pop pop /Times-Roman } if
  2718. X        end
  2719. X        findfont
  2720. X    } ifelse
  2721. X} def
  2722. X
  2723. X
  2724. X/StandardEncoding
  2725. X[    /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  2726. X    /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  2727. X    /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  2728. X    /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  2729. X    /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl
  2730. X    /numbersign /dollar /percent /ampersand /quoteright /parenleft
  2731. X    /parenright /asterisk /plus /comma /hyphen /period /slash /zero
  2732. X    /one /two /three /four /five /six /seven /eight /nine /colon
  2733. X    /semicolon /less /equal /greater /question /at /A /B /C /D /E /F
  2734. X    /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z
  2735. X    /bracketleft /backslash /bracketright /asciicircum /underscore
  2736. X    /quoteleft /a /b /c /d /e /f
  2737. X    /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z
  2738. X    /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef
  2739. X    /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  2740. X    /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  2741. X    /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  2742. X    /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  2743. X    /.notdef /.notdef /.notdef /exclamdown /cent /sterling /fraction
  2744. X    /yen /florin /section /currency /quotesingle /quotedblleft
  2745. X    /guillemotleft /guilsinglleft /guilsinglright /fi /fl /.notdef
  2746. X    /endash /dagger /daggerdbl /periodcentered /.notdef /paragraph
  2747. X    /bullet /quotesinglbase /quotedblbase /quotedblright
  2748. X    /guillemotright /ellipsis /perthousand /.notdef /questiondown
  2749. X    /.notdef /grave /acute /circumflex /tilde /macron /breve
  2750. X    /dotaccent /dieresis /.notdef /ring /cedilla /.notdef
  2751. X    /hungarumlaut /ogonek /caron /emdash /.notdef
  2752. X    /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  2753. X    /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  2754. X    /.notdef /AE /.notdef /ordfeminine /.notdef /.notdef /.notdef
  2755. X    /.notdef /Lslash /Oslash /OE /ordmasculine /.notdef /.notdef
  2756. X    /.notdef /.notdef /.notdef /ae /.notdef /.notdef /.notdef
  2757. X    /dotlessi /.notdef /.notdef /lslash /oslash /oe /germandbls
  2758. X    /.notdef /.notdef /.notdef /.notdef
  2759. X ] def
  2760. X
  2761. X/AsciiEncoding
  2762. X[    /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  2763. X    /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  2764. X    /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  2765. X    /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  2766. X    /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl
  2767. X    /numbersign /dollar /percent /ampersand /quoteright /parenleft
  2768. X    /parenright /asterisk /plus /comma /hyphen /period /slash /zero
  2769. X    /one /two /three /four /five /six /seven /eight /nine /colon
  2770. X    /semicolon /less /equal /greater /question /at /A /B /C /D /E /F
  2771. X    /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z
  2772. X    /bracketleft /backslash /bracketright /asciicircum /underscore
  2773. X    /quoteleft /a /b /c /d /e /f
  2774. X    /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z
  2775. X    /braceleft /bar /braceright /asciitilde /.notdef 
  2776. X    /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  2777. X    /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  2778. X    /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  2779. X    /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  2780. X    /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl
  2781. X    /numbersign /dollar /percent /ampersand /quoteright /parenleft
  2782. X    /parenright /asterisk /plus /comma /hyphen /period /slash /zero
  2783. X    /one /two /three /four /five /six /seven /eight /nine /colon
  2784. X    /semicolon /less /equal /greater /question /at /A /B /C /D /E /F
  2785. X    /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z
  2786. X    /bracketleft /backslash /bracketright /asciicircum /underscore
  2787. X    /quoteleft /a /b /c /d /e /f
  2788. X    /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z
  2789. X    /braceleft /bar /braceright /asciitilde /.notdef 
  2790. X ] def
  2791. X
  2792. X{
  2793. X/$pathprocdict 10 dict def
  2794. X/pathproc { % make proc from current path
  2795. X    $pathprocdict begin
  2796. X    /a 0 { pop pop 3 add } { pop pop 3 add } { 6 { pop } repeat 7 add } { 1 add } pathforall
  2797. X    array def
  2798. X    /n 0 def
  2799. X    { exch a exch n exch put a exch n 1 add exch put a n 2 add /moveto load put /n n 3 add def }
  2800. X    { exch a exch n exch put a exch n 1 add exch put a n 2 add /lineto load put /n n 3 add def }
  2801. X    { /n n 6 add def
  2802. X        6 { /n n 1 sub def a exch n exch put } repeat
  2803. X        /n n 6 add def
  2804. X        a n /curveto load put % was cvx rather than load
  2805. X        /n n 1 add def
  2806. X    }
  2807. X    { a n /closepath load put /n n 1 add def }
  2808. X    pathforall
  2809. X    a cvx
  2810. X    end
  2811. X} def
  2812. X} pop
  2813. X/charpath {
  2814. X    temp-dict begin
  2815. X    charpathdict exch /stroking exch put
  2816. X    /met currentfont /Metrics get def
  2817. X    /enc currentfont /Encoding get def
  2818. X    {
  2819. X        dup /ch exch def
  2820. X        gsave
  2821. X            matrix currentmatrix dup
  2822. X            nulldevice setmatrix exch
  2823. X            currentpoint translate
  2824. X            currentfont /FontMatrix get concat
  2825. X%            met enc ch get get 1 get 0 charpathdict /setcharwidth get exec
  2826. X            currentfont exch currentfont /BuildChar get
  2827. X            end
  2828. X            charpathdict begin exec end
  2829. X            temp-dict begin
  2830. X            .currentcharwidth matrix currentmatrix dup 4 0 put dup 5 0 put
  2831. X            transform /y exch def /x exch def
  2832. X            setmatrix
  2833. X            pathproc
  2834. X        grestore
  2835. X        currentpoint 3 -1 roll
  2836. X        exec
  2837. X        moveto x y matrix currentmatrix dup 4 0 put dup 5 0 put itransform  rmoveto
  2838. X    } forall
  2839. X    end
  2840. X} def
  2841. X
  2842. X/charpathdict 10 dict def
  2843. X/temp-dict 10 dict def
  2844. X
  2845. X/settransfer {
  2846. X    temp-dict begin
  2847. X        dup /fn exch def
  2848. X        /n transfersize def
  2849. X        0.0 1 n 1 sub div 1.0 { fn cvr } for n array astore
  2850. X        setrealtransfer
  2851. X    end
  2852. X} def
  2853. X
  2854. X/setscreen {
  2855. X    temp-dict begin
  2856. X        /spot exch def
  2857. X        2 copy screensize /size exch def
  2858. X        2 copy buildscreen /y exch def /x exch def
  2859. X        size array dup
  2860. X        0 1 size 1 sub {
  2861. X            dup dup x exch get exch y exch get /spot load end exec temp-dict begin cvr put dup
  2862. X        } for
  2863. X        pop
  2864. X        /spot load exch setrealscreen
  2865. X    end
  2866. X} def
  2867. X
  2868. X/userdict 200 dict def
  2869. X
  2870. Xuserdict begin % second dictionary to be opened, so cannot be closed by end
  2871. X
  2872. Xcharpathdict begin
  2873. X    /stroke { charpathdict /stroking get { strokepath } if } def
  2874. X    /setcharwidth { temp-dict exch /y exch put temp-dict exch /x exch put } def
  2875. X    /.currentcharwidth { temp-dict /x get temp-dict /y get } def
  2876. X    /setcachedevice { pop pop pop pop setcharwidth } def
  2877. X    /fill {} def
  2878. X    /eofill {} def
  2879. Xend
  2880. X
  2881. Xmarktype begin
  2882. X    /type /marktype def
  2883. X    /== { pop (MARK) print } def
  2884. Xend
  2885. X
  2886. Xarraytype begin
  2887. X    /type /arraytype def
  2888. X    /== {
  2889. X        dup xcheck dup {({ )} {([ )} ifelse print exch
  2890. X        { == ( ) print } forall
  2891. X        {(})} {(])} ifelse print
  2892. X    } def
  2893. Xend
  2894. X
  2895. Xbooleantype begin
  2896. X    /type /booleantype def
  2897. X    /== { 5 string cvs print } def
  2898. Xend
  2899. X
  2900. Xconditiontype begin
  2901. X    /type /conditiontype def
  2902. X    /== { pop (CONDITION type - you should never see this!) print } def
  2903. Xend
  2904. X
  2905. Xdicttype begin
  2906. X    /type /dicttype def
  2907. X    /== {
  2908. X        (< ) print
  2909. X        { exch == (,) print == ( ) print } forall
  2910. X        (>) print
  2911. X    } def
  2912. Xend
  2913. X
  2914. Xfiletype begin
  2915. X    /type /filetype def
  2916. X    /== { pop (FILE) print } def
  2917. Xend
  2918. X
  2919. Xintegertype begin
  2920. X    /type /integertype def
  2921. Xend
  2922. X
  2923. Xnametype begin
  2924. X    /type /nametype def
  2925. Xend
  2926. X
  2927. Xnulltype begin
  2928. X    /type /nulltype def
  2929. X    /== { pop (NULL) print } def
  2930. X    /cvs { exch pop (NULL) exch cvs } def
  2931. Xend
  2932. X
  2933. Xoperatortype begin
  2934. X    /type /operatortype def
  2935. Xend
  2936. X
  2937. Xrealtype begin
  2938. X    /type /realtype def
  2939. Xend
  2940. X
  2941. Xstringtype begin
  2942. X    /type /stringtype def
  2943. Xend
  2944. X
  2945. Xfonttype begin
  2946. X    /type /fonttype def
  2947. X    /== { pop (FONTID) print } def
  2948. Xend
  2949. X
  2950. X/A4-300 {
  2951. X    5 dict begin
  2952. X    /sf 1.13889 300 82 div mul def
  2953. X    /m [sf 0 0 sf neg 0 0] def
  2954. X    /f m 0 get def
  2955. X    /h 11 72 mul f mul cvi def
  2956. X    /w 8.25 72 mul f mul 8 div cvi def
  2957. X    m 5 h put
  2958. X    m w h [] framedevice
  2959. X    end
  2960. X} def
  2961. X
  2962. X/A4 {
  2963. X    5 dict begin
  2964. X    /sf 1.13889 def
  2965. X    /m [sf 0 0 sf neg 0 0] def
  2966. X    /f m 0 get def
  2967. X    /h 11 72 mul f mul cvi def
  2968. X    /w 8.25 72 mul f mul 8 div cvi def
  2969. X    m 5 h put
  2970. X    m w h [] framedevice
  2971. X    end
  2972. X} def
  2973. X
  2974. X/A4-x {
  2975. X    5 dict begin
  2976. X    /m [1.13889 .75 mul 0 0 -1.13889 .75 mul 0 0] def
  2977. X    /f m 0 get def
  2978. X    /h 11 72 mul f mul cvi def
  2979. X    /w 8.25 72 mul f mul 8 div cvi def
  2980. X    m 5 h put
  2981. X    m w h [] framedevice
  2982. X    end
  2983. X} def
  2984. X
  2985. X/A5 {
  2986. X    5 dict begin
  2987. X    /m [1.13889 0 0 -1.13889 0 0] def
  2988. X    /f m 0 get def
  2989. X    /h 8.25 72 mul f mul cvi def
  2990. X    /w 11.75 2 div 72 mul f mul 8 div cvi def
  2991. X    m 5 h put
  2992. X    m w h [] framedevice
  2993. X    end
  2994. X} def
  2995. X
  2996. X/L4 {
  2997. X    5 dict begin
  2998. X    /m [1.13889 0 0 -1.13889 0 0] def
  2999. X    /f m 0 get def
  3000. X    /h 8.25 72 mul f mul cvi def
  3001. X    /w 11.75 72 mul f mul 8 div cvi def
  3002. X    [ 0 f f 0 0 0] w h [] framedevice
  3003. X    end
  3004. X} def
  3005. X
  3006. X/ascii-set ( !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~) def
  3007. X
  3008. X% end of definitions
  3009. X{} settransfer
  3010. X20 0.0 { dup mul exch dup mul add 1 sub } setscreen
  3011. X
  3012. X0 setgray
  3013. X
  3014. X1 setflat
  3015. X
  3016. X1 setstrokemethod
  3017. X
  3018. X(font-map) lib run
  3019. X
  3020. X150000 100 2000 setcache 2000 setcachelimit
  3021. X
  3022. X/Times-Roman findfont 10 scalefont setfont
  3023. X
  3024. Xenableinterrupts
  3025. END_OF_FILE
  3026. if test 11943 -ne `wc -c <'postscript/psrc'`; then
  3027.     echo shar: \"'postscript/psrc'\" unpacked with wrong size!
  3028. fi
  3029. # end of 'postscript/psrc'
  3030. fi
  3031. if test -f 'source/dictionary.c' -a "${1}" != "-c" ; then 
  3032.   echo shar: Will not clobber existing file \"'source/dictionary.c'\"
  3033. else
  3034. echo shar: Extracting \"'source/dictionary.c'\" \(12534 characters\)
  3035. sed "s/^X//" >'source/dictionary.c' <<'END_OF_FILE'
  3036. X/*
  3037. X * Copyright (C) Rutherford Appleton Laboratory 1987
  3038. X * 
  3039. X * This source may be copied, distributed, altered or used, but not sold for profit
  3040. X * or incorporated into a product except under licence from the author.
  3041. X * It is not in the public domain.
  3042. X * This notice should remain in the source unaltered, and any changes to the source
  3043. X * made by persons other than the author should be marked as such.
  3044. X * 
  3045. X *    Crispin Goswell @ Rutherford Appleton Laboratory caag@uk.ac.rl.vd
  3046. X */
  3047. X#include "main.h"
  3048. X
  3049. Xextern int SizeUserDict, SizeSysDict;
  3050. X
  3051. Xstatic Object OpForDict;
  3052. X
  3053. XObject Absent, Nil, SysDict;
  3054. X
  3055. XObject DictLookup (), MakeDict (), DictLoad ();
  3056. X
  3057. Xstatic int LengthDict (), CopyDict (), forDict (), ForDict (), PutDict (), GetDict ();
  3058. Xstatic int PDict (), PBegin (), PEnd (), PDef (), PStore (), PKnown (), PLoad ();
  3059. Xstatic int PrCheck (), PwCheck (), PReadOnly (), EqDict (); 
  3060. Xstatic int PWhere (), PMaxLength (), PCurrentDict (); 
  3061. X
  3062. Xstatic int hash_tries = 0, hash_collisions = 0, hash_attempts = 0;
  3063. Xstatic int PHashStats (), PDictHash ();
  3064. X
  3065. XInitDictionary ()
  3066. X {
  3067. X    
  3068. X    SysDict     = MakeDict (SizeSysDict);
  3069. X    
  3070. X    Absent    = MakeObject (Condition);
  3071. X    
  3072. X     OpForDict    = MakeOp ("(foralldict)", forDict, 0, 2, 3, 5);
  3073. X     
  3074. X     Install ("systemdict",    SysDict);
  3075. X    
  3076. X    InstallOp ("dict",    PDict,        1, 1, 0, 0, Integer);
  3077. X    InstallOp ("begin",    PBegin,        1, 0, 0, 0, Dictionary);
  3078. X    InstallOp ("end",    PEnd,        0, 0, 0, 0);
  3079. X    InstallOp ("def",    PDef,        2, 0, 0, 0, Poly, Poly);
  3080. X    InstallOp ("store",    PStore,        2, 0, 0, 0, Poly, Poly);
  3081. X    InstallOp ("known",    PKnown,        2, 1, 0, 0, Dictionary, Poly);
  3082. X    InstallOp ("load",    PLoad,        1, 1, 0, 0, Poly);
  3083. X    InstallOp ("where",    PWhere,        1, 2, 0, 0, Poly);
  3084. X    InstallOp ("maxlength",    PMaxLength,    1, 1, 0, 0, Dictionary);
  3085. X    InstallOp ("currentdict",PCurrentDict,    0, 1, 0, 0);
  3086. X    InstallOp ("hashstats", PHashStats,    0, 0, 0, 0);
  3087. X    InstallOp ("dicthash",     PDictHash,    1, 0, 0, 0, Dictionary);
  3088. X    
  3089. X    TypeInstallOp (Dictionary, "eq",     EqDict,        2, 1, 0, 0, Dictionary, Dictionary);
  3090. X    TypeInstallOp (Dictionary, "put",     PutDict,    3, 0, 0, 0, Dictionary, Poly, Poly);
  3091. X    TypeInstallOp (Dictionary, "get",     GetDict,    2, 1, 0, 0, Dictionary, Poly);
  3092. X    TypeInstallOp (Dictionary, "length",     LengthDict,    1, 1, 0, 0, Dictionary);
  3093. X    TypeInstallOp (Dictionary, "copy",     CopyDict,    2, 0, 0, 0, Dictionary, Dictionary);
  3094. X    TypeInstallOp (Dictionary, "forall",     ForDict,    2, 0, 0, 4, Dictionary, Array);
  3095. X     TypeInstallOp (Dictionary, "readonly",     PReadOnly,    1, 1, 0, 0, Dictionary);
  3096. X     TypeInstallOp (Dictionary, "rcheck",     PrCheck,    1, 1, 0, 0, Dictionary);
  3097. X     TypeInstallOp (Dictionary, "wcheck",     PwCheck,    1, 1, 0, 0, Dictionary);
  3098. X        
  3099. X    TypeInstallOp (Null, "eq", EqTrue, 2, 1, 0, 0, Null, Null);
  3100. X }
  3101. X
  3102. XType MakeType (size) int size;
  3103. X {
  3104. X    Type dict;
  3105. X    int i;
  3106. X    struct dict_entry *hash;
  3107. X    
  3108. X    dict = (struct dict_struct *) Malloc ((unsigned) sizeof (struct dict_struct));
  3109. X    dict->dict_size = size;
  3110. X    dict->dict_fill = 0;
  3111. X    dict->dict_flags = READABLE | WRITEABLE;
  3112. X    dict->dict_body = hash = (struct dict_entry *) Malloc ((unsigned) sizeof (struct dict_entry) * size);
  3113. X    
  3114. X    for (i = 0; i < size; i++)
  3115. X        hash[i].entry_key = Nil;
  3116. X    return dict;
  3117. X }
  3118. X
  3119. Xvoid EmptyDict (dict) Type dict;
  3120. X {
  3121. X     int i, size = dict->dict_size;
  3122. X     struct dict_entry *hash = dict->dict_body;
  3123. X    
  3124. X    for (i = 0; i < size; i++)
  3125. X        hash[i].entry_key = Nil;
  3126. X }
  3127. X#ifdef notdef
  3128. XType TypeOf (item) Object item;
  3129. X {
  3130. X     return item.type;
  3131. X }
  3132. X#endif
  3133. XObject MakeDict (size) int size;
  3134. X {
  3135. X    Object res;
  3136. X    
  3137. X    res = MakeObject (Dictionary);
  3138. X    res.u.Dictionary = MakeType (size);
  3139. X    return res;
  3140. X }
  3141. X
  3142. XObject DictFrom (dict) Type dict;
  3143. X {
  3144. X     Object res;
  3145. X     
  3146. X     res = MakeObject (Dictionary);
  3147. X     res.u.Dictionary = dict;
  3148. X     return res;
  3149. X }
  3150. X
  3151. X/*ARGSUSED*/
  3152. Xint EqTrue (a, b) Object a, b;
  3153. X {
  3154. X     return Push (OpStack, True);
  3155. X }
  3156. X
  3157. Xstatic Type Body (item) Object item;
  3158. X {
  3159. X    return item.u.Dictionary;
  3160. X }
  3161. X
  3162. XType BodyDict (item) Object item;
  3163. X {
  3164. X    return item.u.Dictionary;
  3165. X }
  3166. X
  3167. Xstatic int PHashStats ()
  3168. X {
  3169. X     extern int name_tries, name_hits;
  3170. X     
  3171. X     printf ("Attempts = %d, Successs = %d, Collisions = %d\n", hash_attempts, hash_tries, hash_collisions);
  3172. X      printf ("Name tries = %d, Name hits = %d\n", name_tries, name_hits);
  3173. X    return TRUE;
  3174. X }
  3175. X
  3176. Xstatic int PDictHash (dict) Object dict;
  3177. X {
  3178. X    struct dict_entry *hash = Body (dict)->dict_body;
  3179. X     int i, l = Body (dict)->dict_size;
  3180. X     
  3181. X     for (i = 0; i < l; i++)
  3182. X         if (TypeOf (hash[i].entry_key) == Null)
  3183. X             putchar (' ');
  3184. X         else
  3185. X             putchar ('@');
  3186. X     putchar ('\n');
  3187. X     return TRUE;
  3188. X }
  3189. X
  3190. Xstatic int EqDict (a, b) Object a, b;
  3191. X {
  3192. X     return Push (OpStack, MakeBoolean (Body (a) == Body (b)));
  3193. X }
  3194. X
  3195. Xint Equal (a, b) Object a, b;
  3196. X {
  3197. X    return TypeOf (a) == TypeOf (b) &&
  3198. X        a.Length == b.Length &&
  3199. X        (a.u.Integer == b.u.Integer || TypeOf (a) == Array && a.Length == 0);
  3200. X }
  3201. X
  3202. Xstatic DictReplace (hash, key, value, size, h) struct dict_entry *hash; Object key, value; int size, h;
  3203. X {
  3204. X     int i;
  3205. X     
  3206. X     for (i = h;;)
  3207. X     {
  3208. X         if (TypeOf (hash[i].entry_key) == Null)
  3209. X             return FALSE;
  3210. X         if (Equal (key, hash[i].entry_key))
  3211. X          {
  3212. X            hash[i].entry_value = value;
  3213. X            return TRUE;
  3214. X         }
  3215. X        if (++i == size)
  3216. X            i = 0;
  3217. X        if (i == h)
  3218. X            return FALSE;
  3219. X     }
  3220. X }
  3221. X
  3222. Xstatic DictAddition (dict, hash, key, value, size, h)
  3223. X        struct dict_struct *dict; struct dict_entry *hash; Object key, value; int size, h;
  3224. X {
  3225. X     int i;
  3226. X     
  3227. X    for (i = h;;)
  3228. X     {
  3229. X         if (TypeOf (hash[i].entry_key) == Null)
  3230. X         {
  3231. X            hash[i].entry_value = value;
  3232. X            hash[i].entry_key = key;
  3233. X            if (TypeOf (key) != Null)
  3234. X                ++dict->dict_fill;
  3235. X            return TRUE;
  3236. X         }
  3237. X        if (++i == size)
  3238. X            i = 0;
  3239. X        if (i == h)
  3240. X            return FALSE;
  3241. X     }
  3242. X }
  3243. X
  3244. XTypeInstall (dict, name, value) Type dict; char *name; Object value;
  3245. X {
  3246. X    struct dict_entry *hash = dict->dict_body;
  3247. X    int h, size = dict->dict_size;
  3248. X    Object key;
  3249. X    
  3250. X    key = NameFrom (name);
  3251. X    
  3252. X    PanicIf (size == 0, "dictionary full in Install");
  3253. X/*    h = BodyInteger (key) % size;    */
  3254. X    h = (key.Length + BodyInteger (key) + (int) TypeOf (key)) % size;
  3255. X    if (TypeOf (key) == String)
  3256. X        key = Cvn (key);
  3257. X    if (DictReplace (hash, key, value, size, h))
  3258. X        return;
  3259. X    if (DictAddition (dict, hash, key, value, size, h))
  3260. X        return;
  3261. X    Panic ("dictionary full in Install");
  3262. X }
  3263. X
  3264. XDictStore (dict, key, value) Object dict, key, value;
  3265. X {
  3266. X    struct dict_entry *hash = Body (dict)->dict_body;
  3267. X    int h, size = Body (dict)->dict_size;
  3268. X    
  3269. X    PanicIf (size == 0, "dictionary full in DictStore");
  3270. X/*    h = BodyInteger (key) % size;    */
  3271. X    h = (key.Length + BodyInteger (key) + (int) TypeOf (key)) % size;
  3272. X    if (TypeOf (key) == String)
  3273. X        key = Cvn (key);
  3274. X    if (DictReplace (hash, key, value, size, h))
  3275. X        return;
  3276. X    if (DictAddition (Body (dict), hash, key, value, size, h))
  3277. X        return;
  3278. X    Panic ("dictionary full in DictStore");
  3279. X }
  3280. X
  3281. XInstall (key, value) char *key; Object value;
  3282. X {
  3283. X    DictStore (SysDict, NameFrom (key), value);
  3284. X }
  3285. X
  3286. Xstatic Object DictFind (hash, key, size) struct dict_entry *hash; Object key; int size;
  3287. X {
  3288. X     int i, h;
  3289. X     
  3290. X     ++hash_attempts;
  3291. X     
  3292. X     if (size == 0)
  3293. X         return Absent;
  3294. X     if (TypeOf (key) == String)
  3295. X        key = Cvn (key);
  3296. X/*    h = BodyInteger (key) % size;    */
  3297. X    h = (key.Length + BodyInteger (key) + (int) TypeOf (key)) % size;
  3298. X    for (i = h;;)
  3299. X     {
  3300. X         if (TypeOf (hash[i].entry_key) == Null)
  3301. X             return Absent;
  3302. X         if (Equal (key, hash[i].entry_key))
  3303. X          {
  3304. X            ++hash_tries;
  3305. X            return hash[i].entry_value;
  3306. X         }
  3307. X        if (++i == size)
  3308. X            i = 0;
  3309. X        if (i == h)
  3310. X            break;
  3311. X        ++hash_collisions;
  3312. X     }
  3313. X    return Absent;
  3314. X }
  3315. X
  3316. XObject DictLoad (dict, key) Object dict, key;
  3317. X {
  3318. X    return DictFind (Body (dict)->dict_body, key, Body (dict)->dict_size);
  3319. X }
  3320. X
  3321. XObject Lookup (dict, key) Type dict; Object key;
  3322. X {
  3323. X    return DictFind (dict->dict_body, key, dict->dict_size);
  3324. X }
  3325. X
  3326. XObject Load (key) Object key;
  3327. X {
  3328. X     int i;
  3329. X     
  3330. X     for (i = Height (DictStack) - 1; i >= 0; i--)
  3331. X      {
  3332. X          Object res;
  3333. X          
  3334. X          res = DictLoad (DictStack->stack_body[i], key);
  3335. X        if (TypeOf (res) != Condition)
  3336. X            return res;
  3337. X     }
  3338. X    return Absent;
  3339. X }
  3340. X
  3341. Xstatic int ForDict (dict, proc) Object dict, proc;
  3342. X {
  3343. X     VOID Push (ExecStack, dict);
  3344. X     VOID Push (ExecStack, MakeInteger (0));
  3345. X     VOID Push (ExecStack, proc);
  3346. X    VOID Push (ExecStack, OpForDict);
  3347. X    
  3348. X    return TRUE;
  3349. X }
  3350. X
  3351. Xstatic int forDict () 
  3352. X {
  3353. X     Object dict, index, proc, t; /* VAX Compiler Broken. SUN optimiser broken */
  3354. X     int i;
  3355. X     
  3356. X     proc =    Pop (ExecStack);
  3357. X     index =    Pop (ExecStack);
  3358. X     dict =    Pop (ExecStack);
  3359. X     
  3360. X     for (i = BodyInteger (index); ; i++)
  3361. X      {
  3362. X         if (i >= maxDict (dict))
  3363. X             return TRUE;
  3364. X         t = Body (dict)->dict_body[i].entry_key;
  3365. X         if (TypeOf (t) != Null)
  3366. X             break;
  3367. X      }
  3368. X     VOID Push (ExecStack, dict);
  3369. X     VOID Push (ExecStack, MakeInteger (i + 1));
  3370. X     VOID Push (ExecStack, proc);
  3371. X     VOID Push (ExecStack, OpForDict);
  3372. X     VOID Push (ExecStack, proc);
  3373. X     
  3374. X     VOID Push (OpStack, t = Body (dict)->dict_body[i].entry_key);
  3375. X     VOID Push (OpStack, t = Body (dict)->dict_body[i].entry_value);
  3376. X     return TRUE;
  3377. X }
  3378. X    
  3379. Xstatic int GetDict (object, key) Object object, key;
  3380. X {
  3381. X     Object res;
  3382. X     
  3383. X    res = DictLoad (object, key);
  3384. X    if (TypeOf (res) != Condition)
  3385. X        return Push (OpStack, res);
  3386. X    else
  3387. X         return Error (PUndefined);
  3388. X }
  3389. X
  3390. Xstatic int PutDict (object, key, value) Object object, key, value;
  3391. X {
  3392. X    if (lengthDict (object) == maxDict (object))
  3393. X     {
  3394. X         Object t;    /* SUN optimiser broken */
  3395. X         
  3396. X         t = DictLoad (object, key);
  3397. X        if (TypeOf (t) == Condition)
  3398. X             return Error (PDictFull);
  3399. X     }
  3400. X    DictStore (object, key, value);
  3401. X    return TRUE;
  3402. X }
  3403. X
  3404. Xstatic int CopyDict (object1, object2) Object object1, object2;
  3405. X {
  3406. X    if (lengthDict (object1) <= maxDict (object2) && lengthDict (object2) == 0)
  3407. X     {
  3408. X        copyDict (object1, object2);
  3409. X        VOID Push (OpStack, object2);
  3410. X        return TRUE;
  3411. X     }
  3412. X    return Error (PRangeCheck);
  3413. X }
  3414. X
  3415. Xint copyDict (from, to) Object from, to;
  3416. X {
  3417. X     int i, l = maxDict (from);
  3418. X     struct dict_entry *body = Body (from)->dict_body;
  3419. X     
  3420. X     for (i = 0; i < l; i++)
  3421. X         if (TypeOf (body[i].entry_key) != Null)
  3422. X             DictStore (to, body[i].entry_key, body[i].entry_value);
  3423. X }
  3424. X
  3425. Xstatic int PDict (size) Object size;
  3426. X {
  3427. X     if (BodyInteger (size) < 0)
  3428. X         return Error (PRangeCheck);
  3429. X    else
  3430. X        return Push (OpStack, MakeDict (BodyInteger (size)));
  3431. X }
  3432. X
  3433. Xstatic int PBegin (dict) Object dict;
  3434. X {
  3435. X     
  3436. X     if (Height (DictStack) == MaxStack (DictStack))
  3437. X         return Error (PDictOverflow);
  3438. X     else
  3439. X      {
  3440. X          VOID Push (DictStack, dict);
  3441. X          return TRUE;
  3442. X      }
  3443. X }
  3444. X
  3445. Xstatic int PEnd ()
  3446. X {
  3447. X     if (Height (DictStack) == 2)
  3448. X          return Error (PDictUnderflow);
  3449. X     else
  3450. X         VOID Pop (DictStack);
  3451. X     return TRUE;
  3452. X }
  3453. X
  3454. Xstatic int PDef (key, value) Object key, value;
  3455. X {
  3456. X     Object dict,t ;    /* SUN optimiser broken */
  3457. X     
  3458. X     if (!wCheck (dict = Top (DictStack)))
  3459. X          return Error (PInvAccess);
  3460. X     else if (maxDict (dict) == lengthDict (dict) && (t = DictLoad (dict, key), TypeOf (t)) == Condition)
  3461. X         return Error (PDictFull);
  3462. X     else
  3463. X      {
  3464. X          DictStore (dict, key, value);
  3465. X          return TRUE;
  3466. X      }
  3467. X }
  3468. X
  3469. Xstatic int PStore (key, value)    Object key, value;
  3470. X {
  3471. X     Object dict, t;    /* SUN optimiser broken */
  3472. X     
  3473. X     dict = Where (key);    /* SUN optimiser broken */
  3474. X     if (TypeOf (dict) == Condition)
  3475. X         dict = Top (DictStack);
  3476. X     if (TypeOf (key) == Null)
  3477. X         return Error (PTypeCheck);
  3478. X     else if (!wCheck (dict))
  3479. X         return Error (PInvAccess);
  3480. X     else if (maxDict (dict) == lengthDict (dict) && (t = DictLoad (dict, key), TypeOf (t)) == Condition)
  3481. X         return Error (PDictFull);
  3482. X     else
  3483. X      {
  3484. X          DictStore (dict, key, value);
  3485. X          return TRUE;
  3486. X      }
  3487. X }
  3488. X
  3489. Xstatic int PKnown (dict, key) Object dict, key;
  3490. X {
  3491. X     Object t;
  3492. X     
  3493. X     t = DictLoad (dict, key);
  3494. X     return Push (OpStack, MakeBoolean (TypeOf (t) != Condition));
  3495. X }
  3496. X
  3497. Xstatic int PLoad (key) Object key;
  3498. X {
  3499. X     Object res;
  3500. X     
  3501. X      res = Load (key);
  3502. X     if (TypeOf (res) == Condition)
  3503. X         return Error (PUndefined);
  3504. X     else if (TypeOf (key) == Null)
  3505. X         return Error (PTypeCheck);
  3506. X     else
  3507. X         return Push (OpStack, res);
  3508. X }
  3509. X
  3510. Xstatic int PWhere (key) Object key;    /* key --- dict true */
  3511. X                /* key --- false */
  3512. X {
  3513. X     Object where;
  3514. X     
  3515. X    if (TypeOf (key) == Null)
  3516. X         return Error (PTypeCheck);
  3517. X     where = Where (key);
  3518. X     if (TypeOf (where) == Condition)
  3519. X         return Push (OpStack, False);
  3520. X     else if (!rCheck (where))
  3521. X         return Error (PInvAccess);
  3522. X     else
  3523. X         return Push (OpStack, where), Push (OpStack, True);
  3524. X }
  3525. X
  3526. Xint maxDict (dict) Object dict;
  3527. X {
  3528. X     return Body (dict)->dict_size;
  3529. X }
  3530. X
  3531. Xstatic int PMaxLength (dict) Object dict;
  3532. X {
  3533. X     return Push (OpStack, MakeInteger (maxDict (dict)));
  3534. X }
  3535. X
  3536. Xint lengthDict (dict) Object dict;
  3537. X {
  3538. X     return Body (dict)->dict_fill;
  3539. X }
  3540. X
  3541. Xstatic int LengthDict (dict) Object dict;
  3542. X {
  3543. X     return Push (OpStack, MakeInteger (lengthDict (dict)));
  3544. X }
  3545. X
  3546. Xstatic int PCurrentDict ()
  3547. X {
  3548. X      return Push (OpStack, Top (DictStack));
  3549. X }
  3550. X
  3551. Xstatic int PReadOnly (item) Object item;
  3552. X {
  3553. X     return Push (OpStack, ReadOnly (item));
  3554. X }
  3555. X
  3556. Xstatic int PrCheck (v) Object v;
  3557. X {
  3558. X     return Push (OpStack, MakeBoolean (rCheck (v)));
  3559. X }
  3560. X
  3561. Xstatic int PwCheck (v) Object v;
  3562. X {
  3563. X     return Push (OpStack, MakeBoolean (wCheck (v)));
  3564. X }
  3565. END_OF_FILE
  3566. if test 12534 -ne `wc -c <'source/dictionary.c'`; then
  3567.     echo shar: \"'source/dictionary.c'\" unpacked with wrong size!
  3568. fi
  3569. # end of 'source/dictionary.c'
  3570. fi
  3571. if test -f 'source/pat.c' -a "${1}" != "-c" ; then 
  3572.   echo shar: Will not clobber existing file \"'source/pat.c'\"
  3573. else
  3574. echo shar: Extracting \"'source/pat.c'\" \(13056 characters\)
  3575. sed "s/^X//" >'source/pat.c' <<'END_OF_FILE'
  3576. X/*
  3577. X * Copyright (C) Rutherford Appleton Laboratory 1987
  3578. X * 
  3579. X * This source may be copied, distributed, altered or used, but not sold for profit
  3580. X * or incorporated into a product except under licence from the author.
  3581. X * It is not in the public domain.
  3582. X * This notice should remain in the source unaltered, and any changes to the source
  3583. X * made by persons other than the author should be marked as such.
  3584. X * 
  3585. X *    Crispin Goswell @ Rutherford Appleton Laboratory caag@uk.ac.rl.vd
  3586. X */
  3587. X#include "main.h"
  3588. X
  3589. X#include "graphics.h"
  3590. X
  3591. X#define MAXPATHELEMENTS 1500
  3592. X
  3593. Xstatic struct path_element *free_pelem = NULL;
  3594. XPath NewPath ();
  3595. XPoint NewPoint (), IntToExt ();
  3596. X
  3597. XHardPoint NewHardPoint (), ExtToInt ();
  3598. X
  3599. XPath NewElem (type) enum pelem_type type;
  3600. X {
  3601. X     Path res = free_pelem;
  3602. X     
  3603. X     if (res != NULL)
  3604. X         free_pelem = res->next;
  3605. X    else
  3606. X         res = (Path) Malloc (sizeof (struct path_element));
  3607. X     res->ptype = type;
  3608. X
  3609. X     return res;
  3610. X }
  3611. X
  3612. Xvoid ElemFree (p) Path p;
  3613. X {
  3614. X     PanicIf (p == NULL, "ElemFree given NULL");
  3615. X     p->next = free_pelem;
  3616. X     free_pelem = p;
  3617. X }
  3618. X
  3619. XPath ElemCopy (p) Path p;
  3620. X {
  3621. X    Path res = NewElem (p->ptype);
  3622. X    res->pe = p->pe;
  3623. X     return res;
  3624. X }
  3625. X
  3626. XPath NewMove (type, point) enum pelem_type type; HardPoint point;
  3627. X {
  3628. X     Path res = NewElem (type);
  3629. X     
  3630. X     res->pe.point = point;
  3631. X     
  3632. X     return res;
  3633. X }
  3634. X
  3635. XPath NewPath ()
  3636. X {
  3637. X     Path res = NewElem (EHeader);
  3638. X     
  3639. X     return res->next = res->last = res;
  3640. X }
  3641. X
  3642. XPathFree (p) Path p;
  3643. X {
  3644. X     while (!EmptyPath (p))
  3645. X         PathDelete (p);
  3646. X     ElemFree (p);
  3647. X }
  3648. X
  3649. XPath PathCopy (path) Path path;
  3650. X {
  3651. X     Path p, new = NewPath ();
  3652. X     
  3653. X     for (p = path->next; p != path; p = p->next)
  3654. X          PathInsert (new, ElemCopy (p));
  3655. X     return new;
  3656. X }
  3657. X
  3658. Xenum pelem_type CurEType (p) Path p;
  3659. X {
  3660. X     return p->last->ptype;
  3661. X }
  3662. X    
  3663. Xint EmptyPath (p) Path p;
  3664. X {
  3665. X     return p->next == p;
  3666. X }
  3667. X
  3668. XPathDelete (p) Path p;
  3669. X {
  3670. X    Path res = p->last;
  3671. X    
  3672. X     PanicIf (p->next == p, "delete from empty path");
  3673. X     ElemFree (PathRemove (res));
  3674. X     
  3675. X     return TRUE;
  3676. X }
  3677. X
  3678. XPath PathRemove (p) Path p;
  3679. X {
  3680. X     p->last->next = p->next;
  3681. X     p->next->last = p->last;
  3682. X     
  3683. X     return p;
  3684. X }
  3685. X
  3686. XPathInsert (p, i) Path p, i;
  3687. X {
  3688. X     PanicIf (i == NULL, "PathInsert given NULL");
  3689. X     i->next = p;
  3690. X     i->last = p->last;
  3691. X     p->last->next = i;
  3692. X     p->last = i;
  3693. X }
  3694. X
  3695. Xint MoveTo (p, np) Path p; HardPoint np;
  3696. X {
  3697. X     Path res = NewMove (EMove, np);
  3698. X     
  3699. X     if (res == NULL)
  3700. X         return Error (PLimitCheck);
  3701. X     if (!EmptyPath (p) && CurEType (p) == EMove)
  3702. X          PathDelete (p);
  3703. X     gstate->cp_defined = TRUE;
  3704. X     gstate->cp = np;
  3705. X     PathInsert (p, res);
  3706. X     return TRUE;
  3707. X }
  3708. X
  3709. Xint LineTo (p, np) Path p; HardPoint np;
  3710. X {
  3711. X     Path res = NewMove (ELine, np);
  3712. X     
  3713. X     if (res == NULL)
  3714. X         return Error (PLimitCheck);
  3715. X      gstate->cp = np;
  3716. X     PathInsert (p, res);
  3717. X     return TRUE;
  3718. X }
  3719. X
  3720. Xint CurveTo (p, p0, p1, p2) Path p; HardPoint p0, p1, p2;
  3721. X {
  3722. X     Path new = NewElem (ECurve);
  3723. X     
  3724. X     if (new == NULL)
  3725. X         return Error (PLimitCheck);
  3726. X     new->pe.curve.x0 = p0;
  3727. X     new->pe.curve.x1 = p1;
  3728. X     new->pe.curve.x2 = p2;
  3729. X     gstate->cp = p2;
  3730. X     PathInsert (p, new);
  3731. X     return TRUE;
  3732. X }
  3733. X
  3734. Xfloat Normalise (ang) float ang;
  3735. X {
  3736. X     while (ang < -PI || ang > PI)
  3737. X         if (ang < PI)
  3738. X             ang += 2 * PI;
  3739. X         else
  3740. X             ang -= 2 * PI;
  3741. X    return ang;
  3742. X  }
  3743. X
  3744. X/*
  3745. X * In ArcBit, Y = 0 goes through P0, and the centre is at the origin.
  3746. X *
  3747. X */
  3748. X
  3749. Xstatic int ArcBit (p, dir, radius, ang) Path p; int dir; float radius, ang;
  3750. X {
  3751. X     HardPoint P3;
  3752. X     Point p3;
  3753. X     float x, y;
  3754. X     
  3755. X     gstate->CTM = Rotate (gstate->CTM, dir * ang / 2);
  3756. X     if (dir < 0)
  3757. X         gstate->CTM = MatMult (NewMatrix (1.0, 0.0, 0.0, -1.0, 0.0, 0.0), gstate->CTM);
  3758. X     
  3759. X     gstate->CTM = Rotate (gstate->CTM, ang / 2);
  3760. X     P3 = ExtToInt (NewPoint (radius, 0.0));
  3761. X     gstate->CTM = Rotate (gstate->CTM, -ang / 2);
  3762. X     
  3763. X     p3 = IntToExt (P3);
  3764. X     x = (4 * radius - p3.x) / 3;
  3765. X     y = p3.y * (radius / cos (ang / 2) - x) / p3.x;
  3766. X    
  3767. X     return CurveTo (p, ExtToInt (NewPoint (x, -y)), ExtToInt (NewPoint (x, y)), P3);
  3768. X }
  3769. X
  3770. Xint Arc (p, dir, centre, radius, ang1, ang2) Path p; int dir; Point centre; float radius, ang1, ang2;
  3771. X {
  3772. X     Matrix old, cent;
  3773. X     int res;
  3774. X     float diff = dir > 0 ? ang2 - ang1 : ang1 - ang2;
  3775. X     float ang;
  3776. X    
  3777. X    while (diff < 0)
  3778. X        diff += 2 * PI;
  3779. X    old = gstate->CTM;
  3780. X    cent = Translate (old, centre.x, centre.y);
  3781. X     for (ang = 0; ang <= diff - PI / 2; ang += PI / 2)
  3782. X     {
  3783. X         gstate->CTM = Rotate (cent, ang1 + ang * dir);
  3784. X         if (!ArcBit (p, dir, radius, PI / 2))
  3785. X          {
  3786. X              gstate->CTM = old;
  3787. X             return FALSE;
  3788. X          }
  3789. X      }
  3790. X     gstate->CTM = Rotate (cent, ang1 + ang * dir);
  3791. X     res = ArcBit (p, dir, radius, diff - ang);
  3792. X     gstate->CTM = old;
  3793. X     return res;
  3794. X }
  3795. X
  3796. XArcTo (path, cp, x1, y1, x2, y2, r, xt1, yt1, xt2, yt2) 
  3797. X        Path path;
  3798. X        HardPoint cp;
  3799. X        float x1, y1, x2, y2, r;
  3800. X        float *xt1, *yt1, *xt2, *yt2;
  3801. X {
  3802. X     Point p0;
  3803. X     float x0, y0, x3, y3, dist,
  3804. X         ang, anga, angb, absang, delta;
  3805. X     int dir;
  3806. X     
  3807. X     p0 = IntToExt (cp); x0 = p0.x, y0 = p0.y;
  3808. X     angb = atan2 (y2 - y1, x2 - x1);
  3809. X     if (angb <= 0)
  3810. X         angb += 2 * PI;
  3811. X     anga = atan2 (y0 - y1, x0 - x1);
  3812. X     if (anga <= 0)
  3813. X         anga += 2 * PI;
  3814. X     ang = angb - anga;
  3815. X     if (ang <= 0)
  3816. X         ang += 2 * PI;
  3817. X     if (ang >= 2 * PI)
  3818. X         ang -= 2 * PI;
  3819. X     if (ang >= PI)
  3820. X         ang -= 2 * PI;
  3821. X     dir = ang <= 0 ? 1 : -1;
  3822. X     dist = fabs (r / sin (ang / 2));
  3823. X     absang = ang / 2 + anga;
  3824. X     x3 = dist * cos (absang) + x1;
  3825. X     y3 = dist * sin (absang) + y1;
  3826. X     absang += PI;
  3827. X     delta = (ang + (ang > 0 ? - PI : PI)) / 2;
  3828. X    *xt1 = x3 + r * cos (absang - delta);
  3829. X    *yt1 = y3 + r * sin (absang - delta);
  3830. X    *xt2 = x3 + r * cos (absang + delta);
  3831. X    *yt2 = y3 + r * sin (absang + delta);
  3832. X    LineTo (path, ExtToInt (NewPoint (*xt1, *yt1)));
  3833. X    Arc (path,
  3834. X        dir,
  3835. X        NewPoint (x3, y3),
  3836. X        r, absang - delta,
  3837. X        absang + delta);
  3838. X    return TRUE;
  3839. X }
  3840. X
  3841. Xint ClosePath (p) Path p;
  3842. X {
  3843. X     Path pp, res = NewMove (EClose, ExtToInt (NewPoint (0.0, 0.0)));
  3844. X     
  3845. X     if (res == NULL)
  3846. X         return Error (PLimitCheck);
  3847. X     if (!gstate->cp_defined)
  3848. X         return TRUE;
  3849. X     for (pp = p; pp->ptype != EMove; pp = pp->last)
  3850. X         ;
  3851. X     PathInsert (p, res);
  3852. X     VOID MoveTo (p, pp->pe.point);
  3853. X    return TRUE;
  3854. X }
  3855. X
  3856. XPoint NewPoint (x, y) float x, y;
  3857. X {
  3858. X     Point res;
  3859. X     
  3860. X     res.x = x; res.y = y;
  3861. X     return res;
  3862. X }
  3863. X
  3864. XHardPoint NewHardPoint (x, y) float x, y;
  3865. X {
  3866. X     HardPoint res;
  3867. X     
  3868. X     res.hx = x; res.hy = y;
  3869. X     return res;
  3870. X }
  3871. X
  3872. XHardPoint MoveHardPoint (a, b) HardPoint a, b;
  3873. X {
  3874. X     return NewHardPoint (a.hx + b.hx, a.hy + b.hy);
  3875. X }
  3876. X
  3877. XPoint MovePoint (a, b) Point a, b;
  3878. X {
  3879. X     return NewPoint (a.x + b.x, a.y + b.y);
  3880. X }
  3881. X
  3882. Xfloat PointX (p) Point p;
  3883. X {
  3884. X     return p.x;
  3885. X }
  3886. X
  3887. Xfloat PointY (p) Point p;
  3888. X {
  3889. X     return p.y;
  3890. X }
  3891. X
  3892. X/*
  3893. X * This algorithm subdivides a Bezier curve.
  3894. X * The algorithm is taken from:
  3895. X *
  3896. X *    "The Beta2-split: A special case of the Beta-spline Curve and
  3897. X *     Surface Representation." B. A. Barsky and A. D. DeRose. IEEE, 1985.
  3898. X *
  3899. X * A vector of control points W is transformed by two matrices into two
  3900. X * Vectors which describe the sub-polygons. This is done twice, once each
  3901. X * for the X and Y coordinates. The matrices required for the 'left' and
  3902. X * 'Right' sub-polygons are as follows:
  3903. X *
  3904. X *     /  1    0    0    0  \             / 1/8  3/8  3/8  1/8 \
  3905. X * W  =    |  1/2  1/2   0    0   |    W  =    |   0   1/4  1/2  1/4  |
  3906. X *  L    |  1/4  1/2  1/4   0   |     R    |   0    0   1/2  1/2  |
  3907. X *     \ 1/8  3/8  3/8  1/8 /             \  0    0    0    1  /
  3908. X *
  3909. X * The algorithm subdivides the curve recursively until each sub-polygon
  3910. X * is deemed to be flat to within the required tolerance. Flatness is
  3911. X * defined as the greater distance of the inner control points (P1 & P2)
  3912. X * from the line through the outer ones (P0 & P3):
  3913. X *
  3914. X *                               P2
  3915. X *                       /-------------X
  3916. X *          P1       ------------             |\_
  3917. X *           _X---------/                 |    \_
  3918. X *         _/    |                     |      \_
  3919. X *       _/    |                     |        \_
  3920. X *       _/    |                     |          \_
  3921. X *     _/    | D1                  D2 |        \_
  3922. X *   _/        |                     |          \_
  3923. X *  /        |                     |            \
  3924. X * X-----------------------------------------------------------------X
  3925. X * P0
  3926. X *                                   P3
  3927. X */
  3928. X
  3929. Xstatic int IsFlat (x0, y0, x1, y1, x2, y2, x3, y3) float x0, y0, x1, y1, x2, y2, x3, y3;
  3930. X {
  3931. X     int flatness = gstate->flatness;
  3932. X     float sa, ca, y, O = y3 - y0, A = x3 - x0, H = sqrt (O*O + A*A);
  3933. X    
  3934. X    if (H == 0)
  3935. X        return TRUE;
  3936. X     
  3937. X     sa = O / H, ca = A / H;
  3938. X     y = - sa * (x1 - x0) + ca * (y1 - y0);
  3939. X     if (y > flatness || y < -flatness)
  3940. X         return FALSE;
  3941. X     y =  - sa * (x2 - x0) + ca * (y2 - y0);
  3942. X     return y <= flatness && y >= -flatness;
  3943. X }
  3944. X
  3945. XBezier (x0, y0, x1, y1, x2, y2, x3, y3, flat) int (*flat)(); float x0, y0, x1, y1, x2, y2, x3, y3;
  3946. X {
  3947. X     if (IsFlat (x0, y0, x1, y1, x2, y2, x3, y3))
  3948. X         return (*flat) (x0, y0, x3, y3);
  3949. X    return Bezier (x0,                     y0,
  3950. X        (x0 + x1) / 2,                 (y0 + y1) / 2,
  3951. X        (x0 + x2) / 4 + x1 / 2,         (y0 + y2) / 4 + y1 / 2,
  3952. X        (x0 + x3) / 8 + 3 * (x1 + x2) / 8,     (y0 + y3) / 8 + 3 * (y1 + y2) / 8,
  3953. X        flat) &&
  3954. X    Bezier ((x0 + x3) / 8 + 3 * (x1 + x2) / 8,     (y0 + y3) / 8 + 3 * (y1 + y2) / 8,
  3955. X        (x1 + x3) / 4 + x2 / 2,         (y1 + y3) / 4 + y2 / 2,
  3956. X        (x2 + x3) / 2,                 (y2 + y3) / 2,
  3957. X        x3,                     y3,
  3958. X        flat);
  3959. X }
  3960. X
  3961. Xstatic int RevSeg (new, p, next) Path new, next; HardPoint p;
  3962. X {
  3963. X     switch (next->ptype)
  3964. X      {
  3965. X          case EClose:
  3966. X          case EHeader:
  3967. X          case EMove:    return MoveTo (new, p);
  3968. X          case ELine:    return LineTo (new, p);
  3969. X          case ECurve:    return CurveTo (new, next->pe.curve.x1, next->pe.curve.x0, p);
  3970. X      }
  3971. X    Panic ("RevSeg: unknown pe type");
  3972. X    return TRUE;
  3973. X }
  3974. X
  3975. XPath ReversePath (path) Path path;
  3976. X {
  3977. X      Path p, new = NewPath (), pnew = new;
  3978. X      int closed = FALSE;
  3979. X      
  3980. X     for (p = path->last; p != path; p = p->last)
  3981. X      switch (p->ptype)
  3982. X       {
  3983. X           case EClose:
  3984. X               closed = TRUE;
  3985. X               break;
  3986. X           
  3987. X           case EMove:
  3988. X                 if (!RevSeg (new, p->pe.point, p->next))
  3989. X                 {
  3990. X                     PathFree (new);
  3991. X                    return NULL;
  3992. X                 }
  3993. X              if (closed)
  3994. X               {
  3995. X                  if (!ClosePath (new))
  3996. X                     {
  3997. X                         PathFree (new);
  3998. X                        return NULL;
  3999. X                     }
  4000. X                 }
  4001. X                 new = new->next;
  4002. X              closed = FALSE;
  4003. X               break;
  4004. X                
  4005. X          case ELine:
  4006. X               if (!RevSeg (new, p->pe.point, p->next))
  4007. X                  {
  4008. X                     PathFree (new);
  4009. X                    return NULL;
  4010. X                 }
  4011. X
  4012. X              break;
  4013. X           
  4014. X           case ECurve:
  4015. X                if (!RevSeg (new, p->pe.curve.x2, p->next))
  4016. X                  {
  4017. X                     PathFree (new);
  4018. X                    return NULL;
  4019. X                 }
  4020. X
  4021. X              break;
  4022. X          
  4023. X          default:
  4024. X              Panic ("ReversePath: unknown element type");
  4025. X      }
  4026. X      PathFree (p);
  4027. X      
  4028. X      return pnew;
  4029. X }
  4030. X
  4031. XPath path;
  4032. X
  4033. X/*ARGSUSED*/
  4034. Xstatic int flatten (x0, y0, x1, y1) float x0, y0, x1, y1;
  4035. X {
  4036. X    return LineTo (path, NewHardPoint (x1, y1));
  4037. X }
  4038. X
  4039. XPath FlattenPath (arg) Path arg;
  4040. X {
  4041. X     Path p, new = NewPath ();
  4042. X     HardPoint lastp;
  4043. X
  4044. X     path = new;
  4045. X     for (p = arg->next; p != arg; p = p->next)
  4046. X      switch (p->ptype)
  4047. X       {
  4048. X           case EMove:
  4049. X               lastp = p->pe.point;
  4050. X               if (!MoveTo (new, lastp))
  4051. X                {
  4052. X                    PathFree (new);
  4053. X                   return NULL;
  4054. X                }
  4055. X               break;
  4056. X               
  4057. X           case ELine:
  4058. X               lastp = p->pe.point;
  4059. X               if (!LineTo (new, lastp))
  4060. X                {
  4061. X                    PathFree (new);
  4062. X                   return NULL;
  4063. X                }
  4064. X               break;
  4065. X               
  4066. X           case EClose:
  4067. X               if (!ClosePath (new))
  4068. X                 {
  4069. X                    PathFree (new);
  4070. X                   return NULL;
  4071. X                }
  4072. X             break;
  4073. X          
  4074. X          case ECurve:
  4075. X              if (!Bezier (lastp.hx, lastp.hy,
  4076. X                      p->pe.curve.x0.hx, p->pe.curve.x0.hy,
  4077. X                      p->pe.curve.x1.hx, p->pe.curve.x1.hy,
  4078. X                      p->pe.curve.x2.hx, p->pe.curve.x2.hy,
  4079. X                      flatten))
  4080. X                 {
  4081. X                    PathFree (new);
  4082. X                   return NULL;
  4083. X                }
  4084. X             lastp = p->pe.curve.x2;
  4085. X              break;
  4086. X          
  4087. X          default:
  4088. X              Panic ("Flattenpath discovers unknown path element type");
  4089. X              break;
  4090. X       }
  4091. X     return path;
  4092. X }
  4093. X
  4094. Xint CloseAll (path) Path path;    /* closes all open portions of a path *in place* */
  4095. X {
  4096. X    Path p;
  4097. X    enum pelem_type last_type = EHeader;
  4098. X    
  4099. X    for (p = path->next; p != path; last_type = p->ptype, p = p->next)
  4100. X     if (p->ptype == EMove && last_type != EClose && last_type != EHeader)
  4101. X         if (!ClosePath (p))
  4102. X             return Error (PLimitCheck);
  4103. X     if (last_type == EMove)
  4104. X         return PathDelete (p);
  4105. X     if (last_type == EHeader || last_type == EClose)
  4106. X         return TRUE;
  4107. X     return ClosePath (p);
  4108. X }
  4109. X
  4110. XSetPath (p, v) Path *p, v;
  4111. X {
  4112. X     PathFree (*p);
  4113. X     *p = v;
  4114. X }
  4115. X
  4116. XBound (left, right, top, bottom, p) float *left, *right, *top, *bottom; HardPoint p;
  4117. X {
  4118. X    if (p.hx < *left)     *left     = p.hx;
  4119. X    if (p.hx > *right)     *right     = p.hx;
  4120. X    if (p.hy < *bottom)     *bottom = p.hy;
  4121. X    if (p.hy > *top)     *top     = p.hy;
  4122. X }
  4123. X
  4124. Xint PathBBox (left, right, top, bottom) float *left, *right, *top, *bottom;
  4125. X {
  4126. X     Path p;
  4127. X     
  4128. X     if (!gstate->cp_defined || EmptyPath (gstate->path))
  4129. X         return Error (PNoCurrentPoint);
  4130. X     
  4131. X     *left = *right = gstate->cp.hx;
  4132. X     *top = *bottom = gstate->cp.hy;
  4133. X     
  4134. X     for (p = gstate->path->next; p != gstate->path; p = p->next)
  4135. X      switch (p->ptype)
  4136. X       {
  4137. X           case EMove:
  4138. X           case ELine:
  4139. X               Bound (left, right, top, bottom, p->pe.point);
  4140. X               break;
  4141. X           case EClose:
  4142. X               break;
  4143. X           case ECurve:
  4144. X               Bound (left, right, top, bottom, p->pe.curve.x0);
  4145. X               Bound (left, right, top, bottom, p->pe.curve.x1);
  4146. X               Bound (left, right, top, bottom, p->pe.curve.x2); 
  4147. X               break;
  4148. X           case EHeader:
  4149. X               Panic ("PathBBox, header found.");
  4150. X               break;
  4151. X           default:
  4152. X               Panic ("PathBBox, unknown path element type.");
  4153. X               break;
  4154. X       }
  4155. X     
  4156. X     return TRUE;
  4157. X }
  4158. X
  4159. XUserBound (left, right, top, bottom, p) float *left, *right, *top, *bottom; Point p;
  4160. X {
  4161. X    if (p.x < *left)     *left     = p.x;
  4162. X    if (p.x > *right)     *right     = p.x;
  4163. X    if (p.y < *bottom)     *bottom = p.y;
  4164. X    if (p.y > *top)     *top     = p.y;
  4165. X }
  4166. END_OF_FILE
  4167. if test 13056 -ne `wc -c <'source/pat.c'`; then
  4168.     echo shar: \"'source/pat.c'\" unpacked with wrong size!
  4169. fi
  4170. # end of 'source/pat.c'
  4171. fi
  4172. echo shar: End of archive 10 \(of 18\).
  4173. cp /dev/null ark10isdone
  4174. MISSING=""
  4175. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ; do
  4176.     if test ! -f ark${I}isdone ; then
  4177.     MISSING="${MISSING} ${I}"
  4178.     fi
  4179. done
  4180. if test "${MISSING}" = "" ; then
  4181.     echo You have unpacked all 18 archives.
  4182.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  4183. else
  4184.     echo You still need to unpack the following archives:
  4185.     echo "        " ${MISSING}
  4186. fi
  4187. ##  End of shell archive.
  4188. exit 0
  4189.