home *** CD-ROM | disk | FTP | other *** search
- Subject: v12i058: A PostScript interpreter, Part09/18
- Newsgroups: comp.sources.unix
- Sender: sources
- Approved: rs@uunet.UU.NET
-
- Submitted-by: Crispin Goswell <caag@vd.rl.ac.uk>
- Posting-number: Volume 12, Issue 58
- Archive-name: postscript/part09
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 9 (of 18)."
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'postscript/fonts/Times/russian.r' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'postscript/fonts/Times/russian.r'\"
- else
- echo shar: Extracting \"'postscript/fonts/Times/russian.r'\" \(11645 characters\)
- sed "s/^X//" >'postscript/fonts/Times/russian.r' <<'END_OF_FILE'
- XCharStrings
- X/2901
- X<C53D
- X453E
- X443E
- X443D
- X453C
- X473B
- X4B3B
- X4D3C
- X4E3D
- X4F3F
- X4F46
- X5048
- X5149
- XCE3D
- X4E46
- X4F48
- X5149
- X5249
- XCE3F
- X4D40
- X4741
- X4442
- X4344
- X4346
- X4448
- X4749
- X4A49
- X4C48
- X4E46
- XC741
- X4542
- X4444
- X4446
- X4548
- X4749
- X>
- Xput
- XMetrics
- X/2901
- X[-3
- X20]
- Xput
- XCharStrings
- X/2902
- X<D034
- X4F35
- X4937
- X4639
- X443C
- X433F
- X4343
- X4446
- X4648
- X4949
- X4B49
- X4E48
- X5046
- X5143
- X5141
- X503E
- X4E3C
- X4B3B
- X493B
- X463C
- X443E
- X4341
- XD034
- X4F36
- X4D37
- X4938
- X463A
- X443C
- XC93B
- X473C
- X453E
- X4441
- X4443
- X4546
- X4748
- X4949
- XCB49
- X4D48
- X4F46
- X5043
- X5041
- X4F3E
- X4D3C
- X4B3B
- X>
- Xput
- XMetrics
- X/2902
- X[2
- X20]
- Xput
- XCharStrings
- X/2903
- X<C53B
- X4549
- XC63B
- X4649
- XC23B
- X4D3B
- X503C
- X513E
- X513F
- X5041
- X4D42
- XCD3B
- X4F3C
- X503E
- X503F
- X4F41
- X4D42
- XC642
- X4D42
- X5043
- X5145
- X5146
- X5048
- X4D49
- X4249
- XCD42
- X4F43
- X5045
- X5046
- X4F48
- X4D49
- X>
- Xput
- XMetrics
- X/2903
- X[-2
- X20]
- Xput
- XCharStrings
- X/2904
- X<C53B
- X4549
- XC63B
- X4649
- XC23B
- X503B
- X5040
- X4F3B
- XC249
- X4949
- X>
- Xput
- XMetrics
- X/2904
- X[-2
- X18]
- Xput
- XCharStrings
- X/2905
- X<C83B
- X483F
- X4745
- X4648
- X4549
- XD13B
- X5149
- XD23B
- X5249
- XC53B
- X553B
- XC349
- X424E
- X4249
- X5549
- X554E
- X5449
- X>
- Xput
- XMetrics
- X/2905
- X[-2
- X23]
- Xput
- XCharStrings
- X/2906
- X<C441
- X5041
- X503F
- X4F3D
- X4E3C
- X4C3B
- X493B
- X463C
- X443E
- X4341
- X4343
- X4446
- X4648
- X4949
- X4B49
- X4E48
- X5046
- XCF41
- X4F3E
- X4E3C
- XC93B
- X473C
- X453E
- X4441
- X4443
- X4546
- X4748
- X4949
- X>
- Xput
- XMetrics
- X/2906
- X[-3
- X19]
- Xput
- XCharStrings
- X/2907
- X<CD3B
- X4D49
- XCE3B
- X4E49
- XCA3B
- X513B
- XC53C
- X443D
- X433C
- X443B
- X453B
- X463C
- X4840
- X4941
- X4B42
- X5042
- X5241
- X5340
- X553C
- X563B
- X573B
- X583C
- X573D
- X563C
- XCB42
- X4943
- X4844
- X4648
- X4549
- XCB42
- X4944
- X4748
- X4649
- X4449
- X4348
- X4246
- XD042
- X5243
- X5344
- X5548
- X5649
- XD042
- X5244
- X5448
- X5549
- X5749
- X5848
- X5946
- XCA49
- X5149
- X>
- Xput
- XMetrics
- X/2907
- X[-2
- X27]
- Xput
- XCharStrings
- X/2908
- X<C43D
- X433B
- X433F
- X443D
- X453C
- X473B
- X4B3B
- X4E3C
- X4F3E
- X4F3F
- X4E41
- X4B42
- XCB3B
- X4D3C
- X4E3E
- X4E3F
- X4D41
- X4B42
- XC842
- X4B42
- X4E43
- X4F45
- X4F46
- X4E48
- X4B49
- X4749
- X4448
- X4346
- X4345
- X4444
- X4545
- X4446
- XCB42
- X4D43
- X4E45
- X4E46
- X4D48
- X4B49
- X>
- Xput
- XMetrics
- X/2908
- X[-3
- X18]
- Xput
- XCharStrings
- X/2909
- X<C53B
- X4549
- XC63B
- X4649
- XD03B
- X5049
- XD13B
- X5149
- XC23B
- X493B
- XCD3B
- X543B
- XC249
- X4949
- XCD49
- X5449
- XD03C
- X4648
- X>
- Xput
- XMetrics
- X/2909
- X[-2
- X22]
- Xput
- XCharStrings
- X/2910
- X<C53B
- X4549
- XC63B
- X4649
- XD03B
- X5049
- XD13B
- X5149
- XC23B
- X493B
- XCD3B
- X543B
- XC249
- X4949
- XCD49
- X5449
- XD03C
- X4648
- XC835
- X4834
- X4734
- X4735
- X4837
- X4A38
- X4C38
- X4E37
- X4F35
- X>
- Xput
- XMetrics
- X/2910
- X[1
- X22]
- Xput
- XCharStrings
- X/2911
- X<C53B
- X4549
- XC63B
- X4649
- XC23B
- X493B
- XC642
- X4842
- X4B41
- X4C40
- X4E3C
- X4F3B
- X503B
- X513C
- X503D
- X4F3C
- XC842
- X4B43
- X4C44
- X4E48
- X4F49
- XC842
- X4A43
- X4B44
- X4D48
- X4E49
- X5049
- X5148
- X5246
- XC249
- X4949
- X>
- Xput
- XMetrics
- X/2911
- X[-2
- X20]
- Xput
- XCharStrings
- X/2912
- X<C73B
- X473F
- X4645
- X4548
- X4449
- X4349
- X4248
- X4347
- X4448
- XD03B
- X5049
- XD13B
- X5149
- XC43B
- X543B
- XCD49
- X5449
- X>
- Xput
- XMetrics
- X/2912
- X[-2
- X22]
- Xput
- XCharStrings
- X/2913
- X<C53B
- X4549
- XC53B
- X4B49
- XC63B
- X4B47
- XD13B
- X4B49
- XD13B
- X5149
- XD23B
- X5249
- XC23B
- X463B
- XD13B
- X553B
- XC249
- X4849
- XCE49
- X5549
- X>
- Xput
- XMetrics
- X/2913
- X[-2
- X23]
- Xput
- XCharStrings
- X/2914
- X<C53B
- X4549
- XC63B
- X4649
- XD03B
- X5049
- XD13B
- X5149
- XC23B
- X493B
- XCD3B
- X543B
- XC642
- X5042
- XC249
- X4949
- XCD49
- X5449
- X>
- Xput
- XMetrics
- X/2914
- X[-2
- X22]
- Xput
- XCharStrings
- X/2915
- X<C93B
- X463C
- X443E
- X4341
- X4343
- X4446
- X4648
- X4949
- X4B49
- X4E48
- X5046
- X5143
- X5141
- X503E
- X4E3C
- X4B3B
- X493B
- XC93B
- X473C
- X453E
- X4441
- X4443
- X4546
- X4748
- X4949
- XCB49
- X4D48
- X4F46
- X5043
- X5041
- X4F3E
- X4D3C
- X4B3B
- X>
- Xput
- XMetrics
- X/2915
- X[-3
- X20]
- Xput
- XCharStrings
- X/2916
- X<C53B
- X4549
- XC63B
- X4649
- XD03B
- X5049
- XD13B
- X5149
- XC23B
- X543B
- XC249
- X4949
- XCD49
- X5449
- X>
- Xput
- XMetrics
- X/2916
- X[-2
- X22]
- Xput
- XCharStrings
- X/2917
- X<C53B
- X4550
- XC63B
- X4650
- XC63E
- X483C
- X4A3B
- X4C3B
- X4F3C
- X513E
- X5241
- X5243
- X5146
- X4F48
- X4C49
- X4A49
- X4848
- X4646
- XCC3B
- X4E3C
- X503E
- X5141
- X5143
- X5046
- X4E48
- X4C49
- XC23B
- X463B
- XC250
- X4950
- X>
- Xput
- XMetrics
- X/2917
- X[-2
- X21]
- Xput
- XCharStrings
- X/2918
- X<CF3E
- X4E3F
- X4F40
- X503F
- X503E
- X4E3C
- X4C3B
- X493B
- X463C
- X443E
- X4341
- X4343
- X4446
- X4648
- X4949
- X4B49
- X4E48
- X5046
- XC93B
- X473C
- X453E
- X4441
- X4443
- X4546
- X4748
- X4949
- X>
- Xput
- XMetrics
- X/2918
- X[-3
- X19]
- Xput
- XCharStrings
- X/2919
- X<C93B
- X4949
- XCA3B
- X4A49
- XC43B
- X4340
- X433B
- X503B
- X5040
- X4F3B
- XC649
- X4D49
- X>
- Xput
- XMetrics
- X/2919
- X[-3
- X19]
- Xput
- XCharStrings
- X/2920
- X<C33B
- X4949
- XC43B
- X4947
- XCF3B
- X4949
- X474D
- X454F
- X4350
- X4250
- X414F
- X424E
- X434F
- XC13B
- X473B
- XCB3B
- X513B
- X>
- Xput
- XMetrics
- X/2920
- X[-1
- X18]
- Xput
- XCharStrings
- X/2921
- X<CA34
- X4A50
- XCB34
- X4B50
- XC734
- X4B34
- XCA3E
- X493C
- X483B
- X463B
- X443C
- X433F
- X4345
- X4448
- X4649
- X4849
- X4948
- X4A46
- XC63B
- X453C
- X443F
- X4445
- X4548
- X4649
- XCF3B
- X503C
- X513F
- X5145
- X5048
- X4F49
- XCB3E
- X4C3C
- X4D3B
- X4F3B
- X513C
- X523F
- X5245
- X5148
- X4F49
- X4D49
- X4C48
- X4B46
- XC750
- X4E50
- X>
- Xput
- XMetrics
- X/2921
- X[2
- X21]
- Xput
- XCharStrings
- X/2922
- X<C43B
- X4F49
- XC53B
- X5049
- XD03B
- X4449
- XC23B
- X483B
- XCC3B
- X523B
- XC249
- X4849
- XCC49
- X5249
- X>
- Xput
- XMetrics
- X/2922
- X[-2
- X20]
- Xput
- XCharStrings
- X/2923
- X<C53B
- X4549
- XC63B
- X4649
- XD03B
- X5049
- XD13B
- X5149
- XC23B
- X493B
- XCD3B
- X543B
- XC249
- X5449
- X544E
- X5349
- X>
- Xput
- XMetrics
- X/2923
- X[-2
- X22]
- Xput
- XCharStrings
- X/2924
- X<C53B
- X4542
- X4644
- X4945
- X4B45
- X4E44
- X5042
- XC63B
- X4642
- X4744
- X4945
- XD03B
- X5049
- XD13B
- X5149
- XC23B
- X493B
- XCD3B
- X543B
- XCD49
- X5449
- X>
- Xput
- XMetrics
- X/2924
- X[-2
- X22]
- Xput
- XCharStrings
- X/2925
- X<C53B
- X4549
- XC63B
- X4649
- XCF3B
- X4F49
- XD03B
- X5049
- XD93B
- X5949
- XDA3B
- X5A49
- XC23B
- X493B
- XCC3B
- X533B
- XD63B
- X5D3B
- XC249
- X5D49
- X>
- Xput
- XMetrics
- X/2925
- X[-2
- X31]
- Xput
- XCharStrings
- X/2926
- X<C53B
- X4549
- XC63B
- X4649
- XCF3B
- X4F49
- XD03B
- X5049
- XD93B
- X5949
- XDA3B
- X5A49
- XC23B
- X493B
- XCC3B
- X533B
- XD63B
- X5D3B
- XC249
- X5D49
- X5D4E
- X5C49
- X>
- Xput
- XMetrics
- X/2926
- X[-2
- X31]
- Xput
- XCharStrings
- X/2927
- X<C93B
- X4949
- XCA3B
- X4A49
- XC43B
- X4340
- X433B
- X4D3B
- XCA42
- X4E42
- X5143
- X5245
- X5246
- X5148
- X4E49
- X4649
- XCE42
- X5043
- X5145
- X5146
- X5048
- X4E49
- X>
- Xput
- XMetrics
- X/2927
- X[-3
- X21]
- Xput
- XCharStrings
- X/2928
- X<C53B
- X4549
- XC63B
- X4649
- XC23B
- X493B
- XC642
- X4A42
- X4D43
- X4E45
- X4E46
- X4D48
- X4A49
- X4249
- XCA42
- X4C43
- X4D45
- X4D46
- X4C48
- X4A49
- XD43B
- X5449
- XD53B
- X5549
- XD13B
- X583B
- XD149
- X5849
- X>
- Xput
- XMetrics
- X/2928
- X[-2
- X26]
- Xput
- XCharStrings
- X/2929
- X<C53B
- X4549
- XC63B
- X4649
- XC23B
- X493B
- XC642
- X4A42
- X4D43
- X4E45
- X4E46
- X4D48
- X4A49
- X4249
- XCA42
- X4C43
- X4D45
- X4D46
- X4C48
- X4A49
- X>
- Xput
- XMetrics
- X/2929
- X[-2
- X17]
- Xput
- XCharStrings
- X/2930
- X<C43D
- X433B
- X433F
- X443D
- X453C
- X473B
- X4A3B
- X4D3C
- X4F3E
- X5041
- X5043
- X4F46
- X4D48
- X4A49
- X4749
- X4548
- X4346
- X4345
- X4444
- X4545
- X4446
- XCA3B
- X4C3C
- X4E3E
- X4F41
- X4F43
- X4E46
- X4C48
- X4A49
- XC942
- X4F42
- X>
- Xput
- XMetrics
- X/2930
- X[-3
- X19]
- Xput
- XCharStrings
- X/2931
- X<C53B
- X4549
- XC63B
- X4649
- XC23B
- X493B
- XC249
- X4949
- XD23B
- X4F3C
- X4D3E
- X4C41
- X4C43
- X4D46
- X4F48
- X5249
- X5449
- X5748
- X5946
- X5A43
- X5A41
- X593E
- X573C
- X543B
- X523B
- XD23B
- X503C
- X4E3E
- X4D41
- X4D43
- X4E46
- X5048
- X5249
- XD449
- X5648
- X5846
- X5943
- X5941
- X583E
- X563C
- X543B
- XC642
- X4C42
- X>
- Xput
- XMetrics
- X/2931
- X[-2
- X29]
- Xput
- XCharStrings
- X/2932
- X<CF3B
- X4F49
- XD03B
- X5049
- XD33B
- X483B
- X453C
- X443E
- X443F
- X4541
- X4842
- X4F42
- XC83B
- X463C
- X453E
- X453F
- X4641
- X4842
- XCD42
- X4A43
- X4944
- X4748
- X4649
- XCD42
- X4B43
- X4A44
- X4848
- X4749
- X4549
- X4448
- X4346
- XCC49
- X5349
- X>
- Xput
- XMetrics
- X/2932
- X[-3
- X21]
- Xput
- XCharStrings
- X/2801
- X<CA34
- X4349
- XCA34
- X5149
- XCA37
- X5049
- XC543
- X4E43
- XC149
- X4749
- XCD49
- X5349
- X>
- Xput
- XMetrics
- X/2801
- X[2
- X20]
- Xput
- XCharStrings
- X/2802
- X<C534
- X4549
- XC634
- X4649
- XC234
- X5234
- X523A
- X5134
- XC63E
- X4E3E
- X513F
- X5240
- X5342
- X5345
- X5247
- X5148
- X4E49
- X4249
- XCE3E
- X503F
- X5140
- X5242
- X5245
- X5147
- X5048
- X4E49
- X>
- Xput
- XMetrics
- X/2802
- X[1
- X22]
- Xput
- XCharStrings
- X/2803
- X<C534
- X4549
- XC634
- X4649
- XC234
- X4E34
- X5135
- X5236
- X5338
- X533A
- X523C
- X513D
- X4E3E
- XCE34
- X5035
- X5136
- X5238
- X523A
- X513C
- X503D
- X4E3E
- XC63E
- X4E3E
- X513F
- X5240
- X5342
- X5345
- X5247
- X5148
- X4E49
- X4249
- XCE3E
- X503F
- X5140
- X5242
- X5245
- X5147
- X5048
- X4E49
- X>
- Xput
- XMetrics
- X/2803
- X[1
- X22]
- Xput
- XCharStrings
- X/2804
- X<C534
- X4549
- XC634
- X4649
- XC234
- X5134
- X513A
- X5034
- XC249
- X4949
- X>
- Xput
- XMetrics
- X/2804
- X[3
- X18]
- Xput
- XCharStrings
- X/2805
- X<C834
- X483A
- X4742
- X4646
- X4548
- X4449
- XD234
- X5249
- XD334
- X5349
- XC534
- X5634
- XC149
- X5649
- XC149
- X4150
- XC249
- X4150
- XD549
- X5650
- XD649
- X5650
- X>
- Xput
- XMetrics
- X/2805
- X[0
- X24]
- Xput
- XCharStrings
- X/2806
- X<C534
- X4549
- XC634
- X4649
- XCC3A
- X4C42
- XC234
- X5234
- X523A
- X5134
- XC63E
- X4C3E
- XC249
- X5249
- X5243
- X5149
- X>
- Xput
- XMetrics
- X/2806
- X[1
- X21]
- Xput
- XCharStrings
- X/2807
- X<CF34
- X4F49
- XD034
- X5049
- XCC34
- X5334
- XC435
- X4536
- X4437
- X4336
- X4335
- X4434
- X4534
- X4635
- X4737
- X483B
- X493D
- X4B3E
- X543E
- X563D
- X573B
- X5837
- X5935
- X5A34
- X5B34
- X5C35
- X5C36
- X5B37
- X5A36
- X5B35
- XCB3E
- X493F
- X4841
- X4746
- X4648
- X4549
- XCB3E
- X4A3F
- X4941
- X4846
- X4748
- X4649
- X4449
- X4348
- X4246
- XD43E
- X563F
- X5741
- X5846
- X5948
- X5A49
- XD43E
- X553F
- X5641
- X5746
- X5848
- X5949
- X5B49
- X5C48
- X5D46
- XCC49
- X5349
- X>
- Xput
- XMetrics
- X/2807
- X[-2
- X31]
- Xput
- XCharStrings
- X/2808
- X<C437
- X4334
- X433A
- X4437
- X4635
- X4834
- X4C34
- X4F35
- X5037
- X503A
- X4F3C
- X4C3D
- X493D
- XCC34
- X4E35
- X4F37
- X4F3A
- X4E3C
- X4C3D
- XCC3D
- X4E3E
- X5040
- X5142
- X5145
- X5047
- X4F48
- X4C49
- X4749
- X4548
- X4447
- X4345
- X4344
- X4443
- X4544
- X4445
- XCF3F
- X5042
- X5045
- X4F47
- X4E48
- X4C49
- X>
- Xput
- XMetrics
- X/2808
- X[2
- X20]
- Xput
- XCharStrings
- X/2809
- X<C534
- X4549
- XC634
- X4649
- XD234
- X5249
- XD334
- X5349
- XC234
- X4934
- XCF34
- X5634
- XD236
- X4647
- XC249
- X4949
- XCF49
- X5649
- X>
- Xput
- XMetrics
- X/2809
- X[0
- X24]
- Xput
- XCharStrings
- X/2810
- X<C534
- X4549
- XC634
- X4649
- XD234
- X5249
- XD334
- X5349
- XC234
- X4934
- XCF34
- X5634
- XD236
- X4647
- XC249
- X4949
- XCF49
- X5649
- XC82E
- X482D
- X472D
- X472E
- X4830
- X4A31
- X4E31
- X5030
- X512E
- X>
- Xput
- XMetrics
- X/2810
- X[7
- X24]
- Xput
- XCharStrings
- X/2811
- X<C534
- X4549
- XC634
- X4649
- XC234
- X4934
- XC63E
- X4D3E
- X4F3D
- X503B
- X5137
- X5235
- X5334
- X5434
- X5535
- X5536
- X5437
- X5336
- X5435
- XCD3E
- X4F3F
- X5041
- X5146
- X5248
- X5349
- XCD3E
- X4E3F
- X4F41
- X5046
- X5148
- X5249
- X5449
- X5548
- X5646
- XC249
- X4949
- X>
- Xput
- XMetrics
- X/2811
- X[0
- X24]
- Xput
- XCharStrings
- X/2812
- X<C834
- X483A
- X4742
- X4646
- X4548
- X4449
- X4349
- X4248
- X4247
- X4346
- X4447
- X4348
- XD334
- X5349
- XD434
- X5449
- XC534
- X5734
- XD049
- X5749
- X>
- Xput
- XMetrics
- X/2812
- X[-1
- X25]
- Xput
- XCharStrings
- X/2813
- X<C534
- X4549
- XC634
- X4C46
- XC534
- X4C49
- XD334
- X4C49
- XD334
- X5349
- XD434
- X5449
- XC234
- X4634
- XD334
- X5734
- XC249
- X4849
- XD049
- X5749
- X>
- Xput
- XMetrics
- X/2813
- X[0
- X25]
- Xput
- XCharStrings
- X/2814
- X<C534
- X4549
- XC634
- X4649
- XD234
- X5249
- XD334
- X5349
- XC234
- X4934
- XCF34
- X5634
- XC63E
- X523E
- XC249
- X4949
- XCF49
- X5649
- X>
- Xput
- XMetrics
- X/2814
- X[0
- X24]
- Xput
- XCharStrings
- X/2815
- X<CA34
- X4735
- X4537
- X4439
- X433D
- X4340
- X4444
- X4546
- X4748
- X4A49
- X4C49
- X4F48
- X5146
- X5244
- X5340
- X533D
- X5239
- X5137
- X4F35
- X4C34
- X4A34
- XCA34
- X4835
- X4637
- X4539
- X443D
- X4440
- X4544
- X4646
- X4848
- X4A49
- XCC49
- X4E48
- X5046
- X5144
- X5240
- X523D
- X5139
- X5037
- X4E35
- X4C34
- X>
- Xput
- XMetrics
- X/2815
- X[1
- X22]
- Xput
- XCharStrings
- X/2816
- X<C534
- X4549
- XC634
- X4649
- XD234
- X5249
- XD334
- X5349
- XC234
- X5634
- XC249
- X4949
- XCF49
- X5649
- X>
- Xput
- XMetrics
- X/2816
- X[0
- X24]
- Xput
- XCharStrings
- X/2817
- X<C534
- X4549
- XC634
- X4649
- XC234
- X4E34
- X5135
- X5236
- X5338
- X533B
- X523D
- X513E
- X4E3F
- X463F
- XCE34
- X5035
- X5136
- X5238
- X523B
- X513D
- X503E
- X4E3F
- XC249
- X4949
- X>
- Xput
- XMetrics
- X/2817
- X[1
- X22]
- Xput
- XCharStrings
- X/2818
- X<D137
- X523A
- X5234
- X5137
- X4F35
- X4C34
- X4A34
- X4735
- X4537
- X4439
- X433C
- X4341
- X4444
- X4546
- X4748
- X4A49
- X4C49
- X4F48
- X5146
- X5244
- XCA34
- X4835
- X4637
- X4539
- X443C
- X4441
- X4544
- X4646
- X4848
- X4A49
- X>
- Xput
- XMetrics
- X/2818
- X[1
- X21]
- Xput
- XCharStrings
- X/2819
- X<C934
- X4949
- XCA34
- X4A49
- XC334
- X423A
- X4234
- X5134
- X513A
- X5034
- XC649
- X4D49
- X>
- Xput
- XMetrics
- X/2819
- X[3
- X19]
- Xput
- XCharStrings
- X/2820
- X<C334
- X4A44
- XC434
- X4B44
- XD234
- X4B44
- X4947
- X4848
- X4649
- X4549
- X4448
- X4447
- X4546
- X4647
- X4548
- XC134
- X4734
- XCE34
- X5434
- X>
- Xput
- XMetrics
- X/2820
- X[2
- X21]
- Xput
- XCharStrings
- X/2821
- X<CC34
- X4C49
- XCD34
- X4D49
- XC934
- X5034
- XCA37
- X4638
- X443A
- X433D
- X4340
- X4443
- X4645
- X4A46
- X4F46
- X5345
- X5543
- X5640
- X563D
- X553A
- X5338
- X4F37
- X4A37
- XCA37
- X4738
- X453A
- X443D
- X4440
- X4543
- X4745
- X4A46
- XCF46
- X5245
- X5443
- X5540
- X553D
- X543A
- X5238
- X4F37
- XC949
- X5049
- X>
- Xput
- XMetrics
- X/2821
- X[0
- X25]
- Xput
- XCharStrings
- X/2822
- X<C334
- X5049
- XC434
- X5149
- XD134
- X4349
- XC134
- X4734
- XCD34
- X5334
- XC149
- X4749
- XCD49
- X5349
- X>
- Xput
- XMetrics
- X/2822
- X[2
- X20]
- Xput
- XCharStrings
- X/2823
- X<C534
- X4549
- XC634
- X4649
- XD234
- X5249
- XD334
- X5349
- XC234
- X4934
- XCF34
- X5634
- XC249
- X5649
- XD549
- X5650
- XD649
- X5650
- X>
- Xput
- XMetrics
- X/2823
- X[0
- X24]
- Xput
- XCharStrings
- X/2824
- X<C534
- X453F
- X4641
- X4942
- X4C42
- X4F41
- X513F
- XC634
- X463F
- X4741
- X4942
- XD134
- X5149
- XD234
- X5249
- XC234
- X4934
- XCE34
- X5534
- XCE49
- X5549
- X>
- Xput
- XMetrics
- X/2824
- X[0
- X23]
- Xput
- XCharStrings
- X/2825
- X<C534
- X4549
- XC634
- X4649
- XD034
- X5049
- XD134
- X5149
- XDB34
- X5B49
- XDC34
- X5C49
- XC234
- X4934
- XCD34
- X5434
- XD834
- X5F34
- XC249
- X5F49
- X>
- Xput
- XMetrics
- X/2825
- X[-2
- X33]
- Xput
- XCharStrings
- X/2826
- X<C534
- X4549
- XC634
- X4649
- XD034
- X5049
- XD134
- X5149
- XDB34
- X5B49
- XDC34
- X5C49
- XC234
- X4934
- XCD34
- X5434
- XD834
- X5F34
- XC249
- X5F49
- XDE49
- X5F50
- XDF49
- X5F50
- X>
- Xput
- XMetrics
- X/2826
- X[-2
- X33]
- Xput
- XCharStrings
- X/2827
- X<CA34
- X4A49
- XCB34
- X4B49
- XC334
- X423A
- X4234
- X4E34
- XCB3E
- X523E
- X553F
- X5640
- X5742
- X5745
- X5647
- X5548
- X5249
- X4749
- XD23E
- X543F
- X5540
- X5642
- X5645
- X5547
- X5448
- X5249
- X>
- Xput
- XMetrics
- X/2827
- X[0
- X26]
- Xput
- XCharStrings
- X/2828
- X<C534
- X4549
- XC634
- X4649
- XC234
- X4934
- XC63E
- X4D3E
- X503F
- X5140
- X5242
- X5245
- X5147
- X5048
- X4D49
- X4249
- XCD3E
- X4F3F
- X5040
- X5142
- X5145
- X5047
- X4F48
- X4D49
- XD834
- X5849
- XD934
- X5949
- XD534
- X5C34
- XD549
- X5C49
- X>
- Xput
- XMetrics
- X/2828
- X[-2
- X30]
- Xput
- XCharStrings
- X/2829
- X<C534
- X4549
- XC634
- X4649
- XC234
- X4934
- XC63E
- X4D3E
- X503F
- X5140
- X5242
- X5245
- X5147
- X5048
- X4D49
- X4249
- XCD3E
- X4F3F
- X5040
- X5142
- X5145
- X5047
- X4F48
- X4D49
- X>
- Xput
- XMetrics
- X/2829
- X[2
- X21]
- Xput
- XCharStrings
- X/2830
- X<C437
- X4334
- X433A
- X4437
- X4635
- X4934
- X4B34
- X4E35
- X5037
- X5139
- X523C
- X5241
- X5144
- X5046
- X4E48
- X4B49
- X4849
- X4548
- X4447
- X4345
- X4344
- X4443
- X4544
- X4445
- XCB34
- X4D35
- X4F37
- X5039
- X513C
- X5141
- X5044
- X4F46
- X4D48
- X4B49
- XC83E
- X513E
- X>
- Xput
- XMetrics
- X/2830
- X[2
- X21]
- Xput
- XCharStrings
- X/2831
- X<C534
- X4549
- XC634
- X4649
- XC234
- X4934
- XC249
- X4949
- XD334
- X5035
- X4E37
- X4D39
- X4C3D
- X4C40
- X4D44
- X4E46
- X5048
- X5349
- X5549
- X5848
- X5A46
- X5B44
- X5C40
- X5C3D
- X5B39
- X5A37
- X5835
- X5534
- X5334
- XD334
- X5135
- X4F37
- X4E39
- X4D3D
- X4D40
- X4E44
- X4F46
- X5148
- X5349
- XD549
- X5748
- X5946
- X5A44
- X5B40
- X5B3D
- X5A39
- X5937
- X5735
- X5534
- XC63E
- X4C3E
- X>
- Xput
- XMetrics
- X/2831
- X[-2
- X31]
- Xput
- XCharStrings
- X/2832
- X<D034
- X5049
- XD134
- X5149
- XD434
- X4834
- X4535
- X4436
- X4338
- X433A
- X443C
- X453D
- X483E
- X503E
- XC834
- X4635
- X4536
- X4438
- X443A
- X453C
- X463D
- X483E
- XCB3E
- X493F
- X4840
- X4547
- X4448
- X4348
- X4247
- XC93F
- X4841
- X4648
- X4549
- X4349
- X4247
- X4246
- XCD49
- X5449
- X>
- Xput
- XMetrics
- X/2832
- X[1
- X22]
- Xput
- END_OF_FILE
- if test 11645 -ne `wc -c <'postscript/fonts/Times/russian.r'`; then
- echo shar: \"'postscript/fonts/Times/russian.r'\" unpacked with wrong size!
- fi
- # end of 'postscript/fonts/Times/russian.r'
- fi
- if test -f 'source/image.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'source/image.c'\"
- else
- echo shar: Extracting \"'source/image.c'\" \(11874 characters\)
- sed "s/^X//" >'source/image.c' <<'END_OF_FILE'
- X/*
- X * Copyright (C) Rutherford Appleton Laboratory 1987
- X *
- X * This source may be copied, distributed, altered or used, but not sold for profit
- X * or incorporated into a product except under licence from the author.
- X * It is not in the public domain.
- X * This notice should remain in the source unaltered, and any changes to the source
- X * made by persons other than the author should be marked as such.
- X *
- X * Crispin Goswell @ Rutherford Appleton Laboratory caag@uk.ac.rl.vd
- X */
- X#include "main.h"
- X#include "graphics.h"
- X
- Xstatic int RealImage ();
- Xstatic int RealImageMask ();
- X
- Xstruct hardware *ScaleBitmap ();
- X
- XInitImage ()
- X {
- X InstallOp ("realimage", RealImage, 5, 0, 0, 0, Integer, Integer, Integer, Array, String);
- X InstallOp ("realimagemask", RealImageMask, 5, 0, 0, 0, Integer, Integer, Boolean, Array, String);
- X }
- X
- Xstatic int RealImageMask (width, height, invert, mat, string) Object width, height, invert, mat, string;
- X {
- X Matrix m, m2;
- X Vector origin, right, bottom;
- X int w = BodyInteger (width), h = BodyInteger (height);
- X int inv = BodyBoolean (invert), l = lengthString (string);
- X int dwidth, dheight;
- X unsigned char *s = BodyString (string);
- X
- X VOID GSave ();
- X if (!ExtractMatrix (&m, mat))
- X return Error (PTypeCheck);
- X if (l != (w + 7) / 8 * h || w < 0 || h < 0)
- X return Error (PRangeCheck);
- X if (w == 0 || h == 0)
- X return TRUE;
- X m = MatInvert (m);
- X gstate->CTM = m2 = MatMult (m, gstate->CTM);
- X origin = Transform (NewVector (0.0, 0.0, 1.0), m2);
- X right = Transform (NewVector ((float) w, 0.0, 1.0), m2);
- X bottom = Transform (NewVector (0.0, (float) h, 1.0), m2);
- X /* fprintf (stderr, "origin = (%g, %g), right = (%g, %g), bottom = (%g, %g)\n", origin.vx, origin.vy, right.vx, right.vy, bottom.vx, bottom.vy);
- X fprintf (stderr, "matrix == [%g %g %g %g %g %g]\n", m2.A, m2.B, m2.C, m2.D, m2.tx, m2.ty);*/
- X
- X dwidth = right.vx - origin.vx; dheight = bottom.vy - origin.vy;
- X
- X if (origin.vx == bottom.vx && origin.vy == right.vy &&
- X dwidth > 0 && dheight > 0/* && dwidth >= w && dheight >= h*/)
- X { /* simple orientation */
- X struct hardware *from, *to;
- X
- X from = HardwareFromString (s, w, h);
- X if (!inv)
- X BitBlt (from, from,
- X NewDevicePoint (0, 0), NewDevicePoint (0, 0),
- X HardwareExtent (from), ROP_NOTSOURCE);
- X if (dwidth != w || dheight != h)
- X {
- X to = ScaleBitmap (from, (float) dwidth / w, (float) dheight / h);
- X DestroyHardware (from);
- X }
- X else
- X to = from;
- X
- X Paint (to, gstate->device->dev,
- X NewDevicePoint (0, 0),
- X NewDevicePoint ((int) origin.vx, (int) origin.vy),
- X NewDevicePoint (dwidth, dheight),
- X gstate->colour);
- X DestroyHardware (to);
- X }
- X else
- X DrawBitmap (s, w, h, inv);
- X VOID GRestore ();
- X
- X return TRUE;
- X }
- X
- XDrawBitmap (s, width, height, inv) unsigned char *s; int width, height, inv;
- X {
- X int w, h;
- X
- X VOID PNewPath ();
- X
- X for (h = 0; h < height; h++)
- X for (w = 0; w < width; w++)
- X if (((s [h * (width >> 3) + (w >> 3)] & (1 << (7 - (w & 0x7)))) != 0) == inv)
- X FillUnitBox (w, h);
- X }
- X
- Xvoid Tile (t, h) struct hardware *t, *h;
- X {
- X DevicePoint xt, xh;
- X int i, sw, sh;
- X
- X xt = HardwareExtent (t);
- X xh = HardwareExtent (h);
- X
- X BitBlt (t, h, NewDevicePoint (0, 0), NewDevicePoint (0, 0), xt, ROP_SOURCE);
- X
- X sw = xt.dx;
- X for (i = sw;;)
- X {
- X BitBlt (h, h, NewDevicePoint (0, 0), NewDevicePoint (i, 0), NewDevicePoint (sw, xt.dy), ROP_SOURCE);
- X if (i >= xh.dx)
- X break;
- X i += sw;
- X sw <<= 1;
- X }
- X
- X sh = xt.dy;
- X for (i = sh;;)
- X {
- X BitBlt (h, h, NewDevicePoint (0, 0), NewDevicePoint (0, i), NewDevicePoint (xh.dx, sh), ROP_SOURCE);
- X if (i >= xh.dy)
- X break;
- X i += sh;
- X sh <<= 1;
- X }
- X }
- X
- Xvoid FillMask (h, mask, width) struct hardware *h; char mask; int width;
- X {
- X struct hardware *m;
- X
- X mask <<= 8 - width;
- X
- X m = HardwareFromString (&mask, width, 1);
- X
- X Tile (m, h);
- X
- X DestroyHardware (m);
- X }
- X
- Xstruct hardware *UnpaddedHardwareFromString (s, w, h) unsigned char *s; int w, h;
- X {
- X struct hardware *thin;
- X struct hardware *res;
- X int i;
- X
- X if (w & 7 == 0)
- X return HardwareFromString (s, w, h);
- X
- X thin = HardwareFromString (s, w * h, 1);
- X res = NewBitmapHardware (w, h);
- X
- X for (i = 0; i < h; i++)
- X BitBlt (thin, res, NewDevicePoint (i * w, 0), NewDevicePoint (0, i), NewDevicePoint (w, 1), ROP_SOURCE);
- X
- X DestroyHardware (thin);
- X return res;
- X }
- X
- Xstatic void VerticalReverseImage (h) struct hardware *h;
- X {
- X DevicePoint ex;
- X int i, n;
- X
- X ex = HardwareExtent (h);
- X
- X n = ex.dy;
- X
- X for (i = 0; i < n / 2; i++)
- X BitBlt (h, h, NewDevicePoint (0, i), NewDevicePoint (0, n - i - 1), NewDevicePoint (ex.dx, 1), ROP_XOR),
- X BitBlt (h, h, NewDevicePoint (0, n - i - 1), NewDevicePoint (0, i), NewDevicePoint (ex.dx, 1), ROP_XOR),
- X BitBlt (h, h, NewDevicePoint (0, i), NewDevicePoint (0, n - i - 1), NewDevicePoint (ex.dx, 1), ROP_XOR);
- X }
- X
- Xstatic int RealImage (width, height, depth, mat, string) Object width, height, depth, mat, string;
- X {
- X Matrix m, m2;
- X Vector origin, right, bottom;
- X int w = BodyInteger (width), h = BodyInteger (height);
- X int vrev = 0, dep = BodyInteger (depth), l = lengthString (string);
- X int dwidth, dheight;
- X unsigned char *s = BodyString (string);
- X
- X VOID GSave ();
- X if (!ExtractMatrix (&m, mat))
- X return Error (PTypeCheck);
- X if (l != (w * dep + 7) / 8 * h || w < 0 || h < 0)
- X return Error (PRangeCheck);
- X if (w == 0 || h == 0)
- X return TRUE;
- X m = MatInvert (m);
- X gstate->CTM = m2 = MatMult (m, gstate->CTM);
- X origin = Transform (NewVector (0.0, 0.0, 1.0), m2);
- X right = Transform (NewVector ((float) w, 0.0, 1.0), m2);
- X bottom = Transform (NewVector (0.0, (float) h, 1.0), m2);
- X
- X dwidth = right.vx - origin.vx; dheight = bottom.vy - origin.vy;
- X
- X if (dheight < 0)
- X origin.vy += dheight, right.vy += dheight, ++vrev, dheight = -dheight;
- X
- X /* fprintf (stderr, "origin.vx = %g, origin.vy = %g, bottom.vx = %g, right.vy = %g, dwidth = %d, dheight = %d, w = %d, h = %d\n",
- X origin.vx, origin.vy, bottom.vx, right.vy, dwidth, dheight, w, h); */
- X
- X if (dep != 16 && (int) origin.vx == (int) bottom.vx && (int) origin.vy == (int) right.vy &&
- X dwidth > 0 && dheight > 0/* && dwidth >= w && dheight >= h */)
- X { /* simple orientation */
- X struct hardware *from , *to;
- X
- X if (dep == 1)
- X {
- X from = HardwareFromString (s, w, h);
- X if (vrev)
- X VerticalReverseImage (from);
- X if (dwidth != w || dheight != h)
- X {
- X to = ScaleBitmap (from, (float) dwidth / w, (float) dheight / h);
- X DestroyHardware (from);
- X }
- X else
- X to = from;
- X
- X Paint (to, gstate->device->dev,
- X NewDevicePoint (0, 0), NewDevicePoint ((int) origin.vx, (int) origin.vy),
- X NewDevicePoint (dwidth, dheight),
- X NewGray (1.0));
- X BitBlt (to, to,
- X NewDevicePoint (0, 0), NewDevicePoint (0, 0),
- X NewDevicePoint (dwidth, dheight),
- X ROP_NOTSOURCE);
- X Paint (to, gstate->device->dev,
- X NewDevicePoint (0, 0), NewDevicePoint ((int) origin.vx, (int) origin.vy),
- X NewDevicePoint (dwidth, dheight),
- X NewGray (0.0));
- X DestroyHardware (to);
- X }
- X else
- X {
- X struct hardware *mask, *new, *temp;
- X int i, j;
- X
- X from = HardwareFromString (s, w * dep, h);
- X if (vrev)
- X VerticalReverseImage (from);
- X new = HardwareFromString (s, w, h);
- X mask = NewBitmapHardware (w * dep, h);
- X temp = NewBitmapHardware (w * dep, h);
- X
- X for (i = 0; i < (1<<dep); i++)
- X {
- X FillMask (mask, i, dep);
- X
- X BitBlt (from, mask, NewDevicePoint (0, 0), NewDevicePoint (0, 0), HardwareExtent (from), ROP_NXOR);
- X BitBlt (NULL, temp, NewDevicePoint (0, 0), NewDevicePoint (0, 0), HardwareExtent (temp), ROP_TRUE);
- X for (j = 0; j < dep; j++)
- X BitBlt (mask, temp, NewDevicePoint (j, 0), NewDevicePoint (0, 0), HardwareExtent (mask), ROP_AND);
- X for (j = 0; j < w; j++)
- X BitBlt (temp, new, NewDevicePoint (j * dep, 0), NewDevicePoint (j, 0), NewDevicePoint (1, h), ROP_SOURCE);
- X to = ScaleBitmap (new, (float) dwidth / w, (float) dheight / h);
- X Paint (to, gstate->device->dev,
- X NewDevicePoint (0, 0),
- X NewDevicePoint ((int) origin.vx, (int) origin.vy),
- X NewDevicePoint (dwidth, dheight),
- X NewGray ((float) i / ((1 << dep) - 1)));
- X DestroyHardware (to);
- X }
- X DestroyHardware (from);
- X DestroyHardware (mask);
- X DestroyHardware (temp);
- X DestroyHardware (new);
- X }
- X }
- X else
- X {
- X if (vrev)
- X origin.vy += dheight, right.vy += dheight, dheight = -dheight;
- X DrawColourBitmap (s, w, h, dep);
- X }
- X VOID GRestore ();
- X
- X return TRUE;
- X }
- X
- Xstatic log2[] = { 0, 0, 1, 0, 2, 0, 0, 0, 3 };
- Xstatic mask[] = { 0, 0x80, 0xc0, 0, 0xf0, 0, 0, 0, 0xff };
- X
- XDrawColourBitmap (s, width, height, depth) unsigned char *s; int width, height, depth;
- X {
- X int w, h, c;
- X
- X VOID PNewPath ();
- X
- X if (depth == 16)
- X for (h = 0; h < height; h++)
- X for (w = 0; w < width; w++)
- X {
- X gstate->colour = NewColour (0.0, 0.0, (float) ((s [h * (width << 1) + (w << 1)] << 8) |
- X s [h * (width << 1) + (w << 1) + 1]) / (1 << 16));
- X FillUnitBox (w, h);
- X }
- X else
- X for (c = 0; c < 1 << depth; c++)
- X {
- X gstate->colour = NewColour (0.0, 0.0, (float) c / ((1 << depth) - 1));
- X for (h = 0; h < height; h++)
- X for (w = 0; w < width; w++)
- X {
- X int foo = 3 - log2 [depth];
- X int byte = s [h * (width >> foo) + (w >> foo)];
- X int shift = (w & ((1 << foo) - 1)) * depth;
- X if (c == ((byte & (mask [depth] >> shift)) >> (8 - (shift + depth))))
- X FillUnitBox (w, h);
- X }
- X }
- X }
- X
- XFillUnitBox (w, h) int w, h;
- X {
- X VOID MoveTo (gstate->path, ExtToInt (NewPoint ((float ) w, (float ) h)));
- X VOID LineTo (gstate->path, ExtToInt (NewPoint ((float ) w+1, (float ) h)));
- X VOID LineTo (gstate->path, ExtToInt (NewPoint ((float ) w+1, (float ) h+1)));
- X VOID LineTo (gstate->path, ExtToInt (NewPoint ((float ) w, (float ) h+1)));
- X VOID ClosePath (gstate->path);
- X VOID Fill ();
- X }
- X
- Xstruct hardware *ScaleBitmap (from, xscale, yscale) struct hardware *from; float xscale, yscale;
- X {
- X struct hardware *middle, *middle2, *high, *high2;
- X int i, w, h, dwidth, dheight, ixscale, iyscale;
- X DevicePoint extent;
- X
- X extent = HardwareExtent (from);
- X w = extent.dx; h = extent.dy;
- X dwidth = w * xscale + 0.5; dheight = h * yscale + 0.5;
- X
- X if (dwidth > w)
- X {
- X middle = NewBitmapHardware (dwidth, h);
- X for (i = 0; i < w; i++)
- X BitBlt (from, middle,
- X NewDevicePoint (i, 0), NewDevicePoint ((int) (i*xscale), 0),
- X NewDevicePoint (1, h),
- X ROP_OR);
- X middle2 = NewBitmapHardware (dwidth, h);
- X ixscale = (int) ((float) dwidth / w + 0.5);
- X for (i = 0; i < ixscale + 1; i++)
- X BitBlt (middle, middle2,
- X NewDevicePoint (0, 0), NewDevicePoint (i, 0),
- X NewDevicePoint (dwidth - ixscale + 1, h),
- X ROP_OR);
- X DestroyHardware (middle);
- X }
- X else
- X {
- X middle2 = NewBitmapHardware (dwidth, h);
- X for (i = 0; i < dwidth; i++)
- X BitBlt (from, middle2,
- X NewDevicePoint ((int) (i/xscale), 0), NewDevicePoint (i, 0),
- X NewDevicePoint (1, h),
- X ROP_OR);
- X }
- X
- X if (dheight > h)
- X {
- X high = NewBitmapHardware (dwidth, dheight);
- X for (i = 0; i < h; i++)
- X BitBlt (middle2, high,
- X NewDevicePoint (0, i), NewDevicePoint (0, (int) (i*yscale)),
- X NewDevicePoint (dwidth, 1),
- X ROP_OR);
- X DestroyHardware (middle2);
- X
- X high2 = NewBitmapHardware (dwidth, dheight);
- X iyscale = (int) ((float) dheight / h + 0.5);
- X for (i = 0; i < iyscale + 1; i++)
- X BitBlt (high, high2,
- X NewDevicePoint (0, 0), NewDevicePoint (0, i),
- X NewDevicePoint (dwidth, dheight - iyscale + 1),
- X ROP_OR);
- X DestroyHardware (high);
- X }
- X else
- X {
- X high2 = NewBitmapHardware (dwidth, dheight);
- X for (i = 0; i < dheight; i++)
- X BitBlt (middle2, high2,
- X NewDevicePoint (0, (int) (i/yscale)), NewDevicePoint (0, i),
- X NewDevicePoint (dwidth, 1),
- X ROP_OR);
- X }
- X return high2;
- X }
- END_OF_FILE
- if test 11874 -ne `wc -c <'source/image.c'`; then
- echo shar: \"'source/image.c'\" unpacked with wrong size!
- fi
- # end of 'source/image.c'
- fi
- if test -f 'source/state.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'source/state.c'\"
- else
- echo shar: Extracting \"'source/state.c'\" \(10995 characters\)
- sed "s/^X//" >'source/state.c' <<'END_OF_FILE'
- X/*
- X * Copyright (C) Rutherford Appleton Laboratory 1987
- X *
- X * This source may be copied, distributed, altered or used, but not sold for profit
- X * or incorporated into a product except under licence from the author.
- X * It is not in the public domain.
- X * This notice should remain in the source unaltered, and any changes to the source
- X * made by persons other than the author should be marked as such.
- X *
- X * Crispin Goswell @ Rutherford Appleton Laboratory caag@uk.ac.rl.vd
- X */
- X#include "main.h"
- X#include "graphics.h"
- X
- Xextern int InitGraphics ();
- Xint ErasePage ();
- Xstatic int CopyPage ();
- X
- Xstatic int SetLineWidth ();
- Xstatic int GetLineWidth ();
- Xstatic int SetLineCap ();
- Xstatic int GetLineCap ();
- Xstatic int SetLineJoin ();
- Xstatic int GetLineJoin ();
- Xstatic int SetDash ();
- Xstatic int GetDash ();
- Xstatic int SetFlat ();
- Xstatic int GetFlat ();
- Xstatic int SetMiterLimit ();
- Xstatic int GetMiterLimit ();
- Xstatic int SetHSB ();
- Xstatic int GetHSB ();
- Xstatic int SetRGB ();
- Xstatic int GetRGB ();
- X
- Xstatic int PSetRealScreen ();
- Xstatic int PBuildScreen ();
- Xstatic int PScreenSize ();
- Xstatic int GetScreen ();
- X
- Xstatic int PSetRealTransfer ();
- Xstatic int PGetTransfer ();
- Xstatic int PTransferSize ();
- X
- Xstatic int SetGray ();
- Xstatic int GetGray ();
- X
- Xstatic int SetFillMethod ();
- Xstatic int GetFillMethod ();
- Xstatic int SetStrokeMethod ();
- Xstatic int GetStrokeMethod ();
- X
- Xint fill_method = 1, stroke_method = 0;
- X
- XInitState ()
- X {
- X InstallOp ("erasepage", ErasePage, 0, 0, 0, 0);
- X InstallOp ("copypage", CopyPage, 0, 0, 0, 0);
- X InstallOp ("setlinewidth", SetLineWidth, 1, 0, 0, 0, Float);
- X InstallOp ("currentlinewidth", GetLineWidth, 0, 1, 0, 0);
- X InstallOp ("setlinecap", SetLineCap, 1, 0, 0, 0, Integer);
- X InstallOp ("currentlinecap", GetLineCap, 0, 1, 0, 0);
- X InstallOp ("setlinejoin", SetLineJoin, 1, 0, 0, 0, Integer);
- X InstallOp ("currentlinejoin", GetLineJoin, 0, 1, 0, 0);
- X InstallOp ("setdash", SetDash, 2, 0, 0, 0, Array, Float);
- X InstallOp ("currentdash", GetDash, 0, 2, 0, 2);
- X InstallOp ("setflat", SetFlat, 1, 0, 0, 0, Float);
- X InstallOp ("currentflat", GetFlat, 0, 1, 0, 0);
- X InstallOp ("setmiterlimit", SetMiterLimit, 1, 0, 0, 0, Float);
- X InstallOp ("currentmiterlimit", GetMiterLimit, 0, 1, 0, 0);
- X
- X InstallOp ("setgray", SetGray, 1, 0, 0, 0, Float);
- X InstallOp ("currentgray", GetGray, 0, 1, 0, 0);
- X InstallOp ("sethsbcolor", SetHSB, 3, 0, 0, 0, Float, Float, Float);
- X InstallOp ("currenthsbcolor", GetHSB, 0, 3, 0, 0);
- X InstallOp ("setrgbcolor", SetRGB, 3, 0, 0, 0, Float, Float, Float);
- X InstallOp ("currentrgbcolor", GetRGB, 0, 3, 0, 0);
- X
- X InstallOp ("screensize", PScreenSize, 2, 1, 0, 0, Float, Float);
- X InstallOp ("buildscreen", PBuildScreen, 2, 2, 0, 0, Float, Float);
- X InstallOp ("setrealscreen", PSetRealScreen, 4, 0, 0, 0, Float, Float, Array, Array);
- X InstallOp ("currentscreen", GetScreen, 0, 3, 0, 0);
- X
- X InstallOp ("setrealtransfer", PSetRealTransfer, 2, 0, 0, 0, Array, Array);
- X InstallOp ("currenttransfer", PGetTransfer, 0, 1, 0, 0);
- X InstallOp ("transfersize", PTransferSize, 0, 1, 0, 0);
- X
- X InstallOp ("setfillmethod", SetFillMethod, 1, 0, 0, 0, Integer);
- X InstallOp ("currentfillmethod", GetFillMethod, 0, 1, 0, 0);
- X InstallOp ("setstrokemethod", SetStrokeMethod, 1, 0, 0, 0, Integer);
- X InstallOp ("currentstrokemethod",GetStrokeMethod, 0, 1, 0, 0);
- X InstallOp ("initgraphics", InitGraphics, 0, 0, 0, 0);
- X
- X VOID InitGraphics ();
- X }
- X
- Xint InitGraphics ()
- X {
- X VOID PInitMatrix (); /* initmatrix */
- X VOID InitClip (); /* initclip */
- X VOID PNewPath (); /* newpath */
- X
- X gstate->colour = NewColour (0.0, 0.0, 0.0); /* 0 setgray */
- X gstate->line_width = 1; /* 1 setlinewidth */
- X gstate->line_cap = CBUTT; /* setlinecap */
- X gstate->line_join = JMITRE; /* setlinejoin */
- X gstate->dash_length = 0; /* [] 0 setdash */
- X gstate->dash_offset = 0;
- X gstate->miter_limit = 10; /* 10 setmiterlimit */
- X InitShowContext ();
- X
- X return TRUE;
- X }
- X
- Xint ErasePage ()
- X {
- X Paint (NULL, gstate->device->dev,
- X NewDevicePoint (0, 0), NewDevicePoint (0, 0),
- X HardwareExtent (gstate->device->dev),
- X White);
- X return TRUE;
- X }
- X
- Xstatic int CopyPage ()
- X {
- X return TRUE;
- X }
- X
- Xstatic int SetLineWidth (width) Object width;
- X {
- X gstate->line_width = BodyReal (width);
- X return TRUE;
- X }
- X
- Xstatic int GetLineWidth ()
- X {
- X return Push (OpStack, MakeReal (gstate->line_width));
- X }
- X
- Xstatic int SetLineCap (cap) Object cap;
- X {
- X int v = BodyInteger (cap);
- X
- X if (v < 0 || v > 2)
- X return Error (PRangeCheck);
- X gstate->line_cap = v;
- X return TRUE;
- X }
- X
- Xstatic int GetLineCap ()
- X {
- X return Push (OpStack, MakeInteger (gstate->line_cap));
- X }
- X
- Xstatic int SetLineJoin (join) Object join;
- X {
- X int v = BodyInteger (join);
- X
- X if (v < 0 || v > 2)
- X return Error (PRangeCheck);
- X gstate->line_join = v;
- X return TRUE;
- X }
- X
- Xstatic int GetLineJoin ()
- X {
- X return Push (OpStack, MakeInteger (gstate->line_join));
- X }
- X
- Xstatic int SetDash (array, offset) Object array, offset;
- X {
- X Object *v = BodyArray (array);
- X int i, length = lengthArray (array);
- X float sum = 0;
- X
- X if (length > MAXDASH)
- X return Error (PLimitCheck);
- X if (length == 0)
- X {
- X gstate->dash_length = 0;
- X return TRUE;
- X }
- X for (i = 0; i < length; i++)
- X {
- X float val;
- X
- X if (TypeOf (v[i]) == Real)
- X val = BodyReal(v[i]);
- X else if (TypeOf (v[i]) == Integer)
- X val = (float) BodyInteger (v[i]);
- X else
- X return Error (PLimitCheck);
- X if (val < 0)
- X return Error (PRangeCheck);
- X sum += val;
- X }
- X if (sum == 0)
- X return Error (PRangeCheck);
- X
- X gstate->dash_length = length;
- X gstate->dash_offset = BodyReal (offset);
- X for (i = 0; i < length; i++)
- X {
- X if (TypeOf (v[i]) == Integer)
- X gstate->dash_array [i] = BodyInteger (v[i]);
- X else
- X gstate->dash_array [i] = BodyReal (v[i]);
- X }
- X return TRUE;
- X }
- X
- Xstatic int GetDash ()
- X {
- X int i;
- X if (!OpCheck (0, gstate->dash_length + 1))
- X return FALSE;
- X VOID Push (OpStack, Marker);
- X for (i = 0; i < gstate->dash_length; i++)
- X VOID Push (OpStack, MakeReal (gstate->dash_array[i]));
- X VOID Push (ExecStack, MakeReal (gstate->dash_offset));
- X VOID Push (ExecStack, Cvx (Rbracket));
- X return TRUE;
- X }
- X
- Xstatic int SetFlat (flat) Object flat;
- X {
- X gstate->flatness = BodyReal (flat);
- X return TRUE;
- X }
- X
- Xstatic int GetFlat ()
- X {
- X return Push (OpStack, MakeInteger (gstate->flatness));
- X }
- X
- Xstatic int SetMiterLimit (miter) Object miter;
- X {
- X float m = BodyReal (miter);
- X
- X if (m < 1)
- X return Error (PRangeCheck);
- X gstate->miter_limit = m;
- X return TRUE;
- X }
- X
- Xstatic int GetMiterLimit ()
- X {
- X return Push (OpStack, MakeReal (gstate->miter_limit));
- X }
- X
- Xstatic int SetGray (gray) Object gray;
- X {
- X float g = BodyReal (gray);
- X
- X if (g < 0 || g > 1)
- X return Error (PRangeCheck);
- X gstate->colour = NewGray (g);
- X
- X return TRUE;
- X }
- X
- Xstatic int GetGray ()
- X {
- X return Push (OpStack, MakeReal (Brightness (gstate->colour)));
- X }
- X
- Xstatic int SetHSB (hue, sat, bright) Object hue, sat, bright;
- X {
- X float h = BodyReal (hue), s = BodyReal (sat), b = BodyReal (bright);
- X if (h < 0 || h > 1 || s < 0 || s > 1 || b < 0 || b > 1)
- X return Error (PRangeCheck);
- X gstate->colour = NewHSBColour (h, s, b);
- X return TRUE;
- X }
- X
- Xstatic int SetRGB (red, green, blue) Object red, green, blue;
- X {
- X float R = BodyReal (red), G = BodyReal (green), B = BodyReal (blue);
- X
- X if (R < 0 || R > 1 || G < 0 || G > 1 || B < 0 || B > 1)
- X return Error (PRangeCheck);
- X
- X gstate->colour = NewRGBColour (R, G, B);
- X return TRUE;
- X }
- X
- Xstatic int GetHSB ()
- X {
- X float h, s, b;
- X
- X ColourHSB (gstate->colour, &h, &s, &b);
- X VOID Push (OpStack, MakeReal (h));
- X VOID Push (OpStack, MakeReal (s));
- X VOID Push (OpStack, MakeReal (b));
- X
- X return TRUE;
- X }
- X
- Xstatic int GetRGB ()
- X {
- X float R, G, B;
- X
- X ColourRGB (gstate->colour, &R, &G, &B);
- X VOID Push (OpStack, MakeReal (R));
- X VOID Push (OpStack, MakeReal (G));
- X VOID Push (OpStack, MakeReal (B));
- X
- X return TRUE;
- X }
- X
- Xstatic int PScreenSize (freq, rot) Object freq, rot;
- X {
- X return Push (OpStack, MakeInteger (ScreenSize (BodyReal (freq), BodyReal (rot))));
- X }
- X
- Xstatic int PBuildScreen (freq, rot) Object freq, rot;
- X {
- X float f = BodyReal (freq), r = BodyReal (rot);
- X int i, ss = ScreenSize (f, r);
- X float *x = (float *) Malloc (sizeof (float) * ss),
- X *y = (float *) Malloc (sizeof (float) * ss);
- X
- X Object *px = (Object *) Malloc (sizeof (Object) * ss),
- X *py = (Object *) Malloc (sizeof (Object) * ss);
- X
- X BuildScreen (f, r, x, y);
- X
- X for (i = 0; i < ss; i++)
- X {
- X px [i] = MakeReal (x[i]);
- X py [i] = MakeReal (y[i]);
- X }
- X Free ((char *) x);
- X Free ((char *) y);
- X
- X return Push (OpStack, MakeArray (px, ss)) && Push (OpStack, MakeArray (py, ss));
- X }
- X
- Xstatic int PSetRealScreen (freq, rot, spot, thresh) Object freq, rot, spot, thresh;
- X {
- X float f = BodyReal (freq), r = BodyReal (rot);
- X int i, ss = ScreenSize (f, r);
- X float *th = (float *) Malloc (sizeof (float) * ss);
- X
- X gstate->screen.frequency = f;
- X gstate->screen.rotation = r;
- X gstate->screen.spot_function = spot;
- X
- X if (lengthArray (thresh) != ss)
- X {
- X free ((char *) th);
- X return Error (PRangeCheck);
- X }
- X
- X for (i = 0; i < ss; i++)
- X {
- X Object a;
- X
- X a = getArray (thresh, i);
- X if (TypeOf (a) != Real)
- X {
- X Free ((char *) th);
- X return Error (PTypeCheck);
- X }
- X
- X th[i] = BodyReal (a);
- X }
- X if (gstate->screen.count == 1) /* allows 0 to mean 'not assigned yet' */
- X Free ((char *) gstate->screen.thresh);
- X gstate->screen.thresh = th;
- X gstate->screen.count = 1;
- X
- X SetScreen (f, r, th);
- X
- X return TRUE;
- X }
- X
- Xstatic int GetScreen ()
- X {
- X VOID Push (OpStack, MakeReal (gstate->screen.frequency));
- X VOID Push (OpStack, MakeReal (gstate->screen.rotation));
- X VOID Push (OpStack, gstate->screen.spot_function);
- X return TRUE;
- X }
- X
- Xstatic int PSetRealTransfer (transfer, values) Object transfer, values;
- X {
- X Object v;
- X int i, size = TransferSize ();
- X float *val;
- X
- X if (lengthArray (values) != size)
- X return Error (PRangeCheck);
- X
- X val = (float *) Malloc (sizeof (float) * size);
- X for (i = 0; i < size; i++)
- X {
- X v = getArray (values, i);
- X if (TypeOf (v) == Real)
- X val [i] = BodyReal (v);
- X else
- X {
- X Free ((char *) val);
- X return Error (PTypeCheck);
- X }
- X }
- X
- X if (gstate->transfer.tcount == 1)
- X Free ((char *) gstate->transfer.tran);
- X gstate->transfer.transfn = transfer;
- X gstate->transfer.tran = val;
- X gstate->transfer.tcount = 1;
- X
- X SetTransfer (val);
- X
- X return TRUE;
- X }
- X
- Xstatic int PGetTransfer ()
- X {
- X return Push (OpStack, gstate->transfer.transfn);
- X }
- X
- Xstatic int PTransferSize ()
- X {
- X return Push (OpStack, MakeInteger (TransferSize ()));
- X }
- X
- Xstatic int SetFillMethod (method) Object method;
- X {
- X fill_method = BodyInteger (method);
- X return TRUE;
- X }
- X
- Xstatic int GetFillMethod ()
- X {
- X return Push (OpStack, MakeInteger (fill_method));
- X }
- X
- Xstatic int SetStrokeMethod (method) Object method;
- X {
- X stroke_method = BodyInteger (method);
- X return TRUE;
- X }
- X
- Xstatic int GetStrokeMethod ()
- X {
- X return Push (OpStack, MakeInteger (stroke_method));
- X }
- END_OF_FILE
- if test 10995 -ne `wc -c <'source/state.c'`; then
- echo shar: \"'source/state.c'\" unpacked with wrong size!
- fi
- # end of 'source/state.c'
- fi
- if test -f 'source/stroke.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'source/stroke.c'\"
- else
- echo shar: Extracting \"'source/stroke.c'\" \(11211 characters\)
- sed "s/^X//" >'source/stroke.c' <<'END_OF_FILE'
- X/*
- X * Copyright (C) Rutherford Appleton Laboratory 1987
- X *
- X * This source may be copied, distributed, altered or used, but not sold for profit
- X * or incorporated into a product except under licence from the author.
- X * It is not in the public domain.
- X * This notice should remain in the source unaltered, and any changes to the source
- X * made by persons other than the author should be marked as such.
- X *
- X * Crispin Goswell @ Rutherford Appleton Laboratory caag@uk.ac.rl.vd
- X */
- X#include "main.h"
- X
- X#include "graphics.h"
- X
- Xint PStrokePath ();
- X
- Xint in_stroke = FALSE;
- X
- Xint Stroke ();
- X
- XInitStroke ()
- X {
- X InstallOp ("strokepath", PStrokePath, 0, 0, 0, 0);
- X InstallOp ("stroke", Stroke, 0, 0, 0, 0);
- X }
- X
- Xint Stroke ()
- X {
- X int res;
- X
- X if (!PFlattenPath ())
- X return FALSE;
- X if (EmptyPath (gstate->path))
- X return TRUE;
- X if (gstate->device->dev == NULL)
- X return PNewPath ();
- X if (ThinStroke ())
- X return TRUE;
- X in_stroke = TRUE;
- X res = PStrokePath () && Fill ();
- X VOID PNewPath ();
- X in_stroke = FALSE;
- X
- X return res;
- X }
- X
- Xfloat Magnitude (v) Vector v;
- X {
- X return sqrt (v.vx * v.vx + v.vy * v.vy);
- X }
- X
- Xstatic void Dash ()
- X {
- X Matrix m;
- X Path p, new = NewPath (), last_move, last_dash;
- X HardPoint move, here, next;
- X Vector v, unit;
- X int marking, start_marking = TRUE, index, start_index = 0;
- X float dash_left, start_dash_left = gstate->dash_offset;
- X float umag, dmag;
- X
- X m = gstate->CTM;
- X m = NewMatrix (m.A, m.B, m.C, m.D, 0.0, 0.0);
- X
- X while (start_dash_left > gstate->dash_array [start_index])
- X {
- X start_dash_left -= gstate->dash_array [start_index];
- X if (++start_index == gstate->dash_length)
- X start_index = 0;
- X start_marking = !start_marking;
- X }
- X start_dash_left = gstate->dash_array [start_index] - start_dash_left;
- X
- X for (p = gstate->path->next; p != gstate->path; p = p->next)
- X switch (p->ptype)
- X {
- X case EMove:
- X index = start_index;
- X marking = start_marking;
- X dash_left = start_dash_left;
- X here = move = p->pe.point;
- X VOID MoveTo (new, here);
- X last_move = last_dash = new->last;
- X break;
- X
- X case ELine:
- X case EClose:
- X next = p->ptype == ELine ? p->pe.point : move;
- X v = NewVector (next.hx - here.hx, next.hy - here.hy, 1.0);
- X dmag = Magnitude (v);
- X if (dmag == 0)
- X {
- X here = next;
- X break;
- X }
- X umag = Magnitude (ITransform (v, m));
- X unit = NewVector (v.vx / umag, v.vy / umag, 1.0);
- X while (umag > dash_left)
- X {
- X here.hx += unit.vx * dash_left;
- X here.hy += unit.vy * dash_left;
- X (*(marking ? LineTo : MoveTo)) (new, here);
- X if (!marking)
- X last_dash = new->last;
- X marking = !marking;
- X umag -= dash_left;
- X if (++index == gstate->dash_length)
- X index = 0;
- X dash_left = gstate->dash_array [index];
- X }
- X if (p->ptype == ELine)
- X {
- X dash_left -= umag;
- X if (marking)
- X VOID LineTo (new, next);
- X }
- X else
- X {
- X if (marking)
- X {
- X if (start_marking)
- X if (last_dash == last_move)
- X ClosePath (new);
- X else
- X {
- X /* LineTo (new, move); */
- X MoveChunk (last_move, last_dash, new->last);
- X }
- X else
- X VOID LineTo (new, move);
- X }
- X }
- X here = next;
- X break;
- X
- X default:
- X Panic ("Dash: unknown Path Element type");
- X }
- X PathFree (gstate->path);
- X gstate->path = new;
- X gstate->cp = new->next->pe.point;
- X }
- X
- XMoveChunk (dest, begin, end) Path dest, begin, end;
- X {
- X dest->ptype = ELine;
- X end->next->last = begin->last;
- X begin->last->next = end->next;
- X dest->last->next = begin;
- X
- X end->next = dest;
- X begin->last = dest->last;
- X dest->last = end;
- X }
- X
- X/*
- X * is 'b' to the left of 'a' ? if 'a' carries into 'b' ?
- X *
- X * /
- X * /
- X * b
- X * /
- X * /
- X * --------- a -------o
- X *
- X */
- X
- Xleftof (a, b) float a, b;
- X {
- X return Normalise (b - a) > 0;
- X }
- X
- XMiter (new, last_angle, angle, width) Path new; float last_angle, angle, width;
- X {
- X Matrix old;
- X float diff;
- X
- X old = gstate->CTM;
- X if (leftof (last_angle, angle))
- X {
- X diff = angle - last_angle;
- X VOID MoveTo (new, ExtToInt (NewPoint (0.0, 0.0)));
- X gstate->CTM = Rotate (gstate->CTM, -diff);
- X VOID LineTo (new, ExtToInt (NewPoint (0.0, -width / 2)));
- X gstate->CTM = Rotate (gstate->CTM, diff / 2);
- X VOID LineTo (new, ExtToInt (NewPoint (0.0, -(width / 2) / cos (diff / 2))));
- X gstate->CTM = old;
- X VOID LineTo (new, ExtToInt (NewPoint (0.0, -width / 2)));
- X }
- X else
- X {
- X diff = last_angle - angle;
- X VOID MoveTo (new, ExtToInt (NewPoint (0.0, 0.0)));
- X VOID LineTo (new, ExtToInt (NewPoint (0.0, width / 2)));
- X gstate->CTM = Rotate (gstate->CTM, diff / 2);
- X VOID LineTo (new, ExtToInt (NewPoint (0.0, (width / 2) / cos (diff / 2))));
- X gstate->CTM = Rotate (gstate->CTM, diff / 2);
- X VOID LineTo (new, ExtToInt (NewPoint (0.0, width / 2)));
- X gstate->CTM = old;
- X }
- X ClosePath (new);
- X }
- X
- XBevel (new, last_angle, angle, width) Path new; float last_angle, angle, width;
- X {
- X Matrix old;
- X float diff;
- X
- X old = gstate->CTM;
- X if (leftof (last_angle, angle))
- X {
- X diff = angle - last_angle;
- X VOID MoveTo (new, ExtToInt (NewPoint (0.0, 0.0)));
- X gstate->CTM = Rotate (gstate->CTM, -diff);
- X VOID LineTo (new, ExtToInt (NewPoint (0.0, -width / 2)));
- X gstate->CTM = old;
- X VOID LineTo (new, ExtToInt (NewPoint (0.0, -width / 2)));
- X }
- X else
- X {
- X diff = last_angle - angle;
- X VOID MoveTo (new, ExtToInt (NewPoint (0.0, 0.0)));
- X VOID LineTo (new, ExtToInt (NewPoint (0.0, width / 2)));
- X gstate->CTM = Rotate (gstate->CTM, diff);
- X VOID LineTo (new, ExtToInt (NewPoint (0.0, width / 2)));
- X gstate->CTM = old;
- X }
- X ClosePath (new);
- X }
- X
- XBeginCap (new, width) Path new; float width;
- X {
- X switch (gstate->line_cap)
- X {
- X case CBUTT: break;
- X
- X case CSQUARE:
- X VOID MoveTo (new, ExtToInt (NewPoint (0.0, -width / 2)));
- X VOID LineTo (new, ExtToInt (NewPoint (0.0, width / 2)));
- X VOID LineTo (new, ExtToInt (NewPoint (-width / 2, width / 2)));
- X VOID LineTo (new, ExtToInt (NewPoint (-width / 2, -width / 2)));
- X ClosePath (new);
- X break;
- X
- X case CROUND:
- X VOID MoveTo (new, ExtToInt (NewPoint (0.0, width / 2)));
- X Arc (new, 1, NewPoint (0.0, 0.0), width / 2, PI / 2, 3 * PI / 2);
- X ClosePath (new);
- X break;
- X
- X default:
- X Panic ("BeginCap - unknown line cap encountered");
- X }
- X }
- X
- XLineJoin (new, width, last_angle, angle) Path new; float width, last_angle, angle;
- X {
- X float ang, sa;
- X
- X switch (gstate->line_join)
- X {
- X case JMITRE:
- X ang = Normalise (leftof (last_angle, angle) ? angle - last_angle : last_angle - angle);
- X ang = ang < 0 ? -ang : ang;
- X ang = ang > PI / 2 ? PI - ang : ang;
- X sa = sin (ang / 2);
- X if (sa != 0 && 1 / sa <= gstate->miter_limit && 1 / sa >= -gstate->miter_limit)
- X Miter (new, last_angle, angle, width);
- X else
- X Bevel (new, last_angle, angle, width);
- X
- X break;
- X
- X case JROUND:
- X VOID MoveTo (new, ExtToInt (NewPoint (width / 2, 0.0)));
- X Arc (new, 1, NewPoint (0.0, 0.0), width / 2, 0.0, 2 * PI);
- X ClosePath (new);
- X break;
- X
- X case JBEVEL: Bevel (new, last_angle, angle, width); break;
- X
- X default:
- X Panic ("LineJoin - unknown line join encountered");
- X }
- X }
- X
- XEndCap (new, width, length) Path new; float width, length;
- X {
- X switch (gstate->line_cap)
- X {
- X case CBUTT: break;
- X
- X case CSQUARE:
- X VOID MoveTo (new, ExtToInt (NewPoint (length, -width / 2)));
- X VOID LineTo (new, ExtToInt (NewPoint (length + width / 2, -width / 2)));
- X VOID LineTo (new, ExtToInt (NewPoint (length + width / 2, width / 2)));
- X VOID LineTo (new, ExtToInt (NewPoint (length, width / 2)));
- X ClosePath (new);
- X break;
- X
- X case CROUND:
- X VOID MoveTo (new, ExtToInt (NewPoint (length, -width / 2)));
- X Arc (new, 1, NewPoint (length, 0.0), width / 2, -PI / 2, PI / 2);
- X ClosePath (new);
- X break;
- X
- X default:
- X Panic ("StrokeLineEnd - unknown line cap encountered");
- X }
- X }
- X
- Xstatic float move_angle;
- Xstatic Matrix move_matrix;
- X
- Xfloat LineSegment (p, new, ehere, enow, width, last_angle, last_type) Path p, new; Point ehere, enow; float width, last_angle; enum pelem_type last_type;
- X {
- X float angle = atan2 (enow.y - ehere.y, enow.x - ehere.x),
- X length = sqrt ((enow.y - ehere.y) * (enow.y - ehere.y) + (enow.x - ehere.x) * (enow.x - ehere.x));
- X Matrix old;
- X
- X old = gstate->CTM;
- X
- X gstate->CTM = Rotate (Translate (gstate->CTM, ehere.x, ehere.y), angle);
- X VOID MoveTo (new, ExtToInt (NewPoint (0.0, -width / 2)));
- X VOID LineTo (new, ExtToInt (NewPoint (length, -width / 2)));
- X VOID LineTo (new, ExtToInt (NewPoint (length, width / 2)));
- X VOID LineTo (new, ExtToInt (NewPoint (0.0, width / 2)));
- X ClosePath (new);
- X
- X if (last_type == EMove)
- X {
- X move_angle = angle;
- X move_matrix = gstate->CTM;
- X }
- X else if (last_type == ELine)
- X LineJoin (new, width, last_angle, angle);
- X
- X if (p->ptype == EClose)
- X {
- X if (last_type == ELine)
- X {
- X gstate->CTM = move_matrix;
- X LineJoin (new, width, angle, move_angle);
- X }
- X }
- X else if (p->next->ptype == EMove || p->next->ptype == EHeader)
- X {
- X EndCap (new, width, length);
- X gstate->CTM = move_matrix;
- X BeginCap (new, width);
- X }
- X
- X gstate->CTM = old;
- X return angle;
- X }
- X
- Xint PStrokePath ()
- X {
- X Path p, new = NewPath ();
- X HardPoint prev, here, move;
- X enum pelem_type last_type = EHeader;
- X float angle, last_angle, width = gstate->line_width;
- X
- X PFlattenPath ();
- X if (gstate->dash_length != 0)
- X Dash ();
- X for (p = gstate->path->next; p != gstate->path; last_type = p->ptype, p = p->next)
- X {
- X switch (p->ptype)
- X {
- X case EMove:
- X prev = here;
- X move = here = p->pe.point;
- X break;
- X
- X case EClose:
- X if (last_type == EMove)
- X break;
- X angle = LineSegment (p, new, IntToExt (here), IntToExt (move), width, last_angle, last_type);
- X prev = here;
- X here = move;
- X last_type = EHeader;
- X break;
- X
- X case ELine:
- X angle = LineSegment (p, new, IntToExt (here), IntToExt (p->pe.point), width, last_angle, last_type);
- X prev = here;
- X here = p->pe.point;
- X break;
- X
- X default:
- X Panic ("unknown path element type in StrokePath");
- X }
- X last_type = p->ptype;
- X last_angle = angle;
- X }
- X PathFree (gstate->path);
- X gstate->path = new;
- X return TRUE;
- X }
- X
- Xint ThinStroke ()
- X {
- X Path p;
- X Vector v;
- X HardPoint here, prev;
- X
- X if (stroke_method != STROKE_THIN)
- X return FALSE; /* not used - get better results with area fill */
- X v = Transform (NewVector (gstate->line_width, gstate->line_width, 0.0), gstate->CTM);
- X if (fabs (v.vx) > 1.1 || fabs (v.vy) > 1.1)
- X return FALSE;
- X if (gstate->dash_length != 0)
- X Dash ();
- X for (p = gstate->path->next; p != gstate->path; p = p->next)
- X switch (p->ptype)
- X {
- X case EMove:
- X here = prev = p->pe.point;
- X break;
- X
- X case ELine:
- X DevicePaintLine (gstate->device, prev, p->pe.point, gstate->colour);
- X prev = p->pe.point;
- X break;
- X
- X case EClose:
- X DevicePaintLine (gstate->device, prev, here, gstate->colour);
- X prev = here;
- X break;
- X
- X default:
- X Panic ("unknown path element type in ThinStroke");
- X }
- X VOID PNewPath ();
- X
- X return TRUE;
- X }
- END_OF_FILE
- if test 11211 -ne `wc -c <'source/stroke.c'`; then
- echo shar: \"'source/stroke.c'\" unpacked with wrong size!
- fi
- # end of 'source/stroke.c'
- fi
- echo shar: End of archive 9 \(of 18\).
- cp /dev/null ark9isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 18 archives.
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
-