[comp.sources.unix] REPOST v12i055: A PostScript interpreter, Part06/18

rsalz@uunet.UU.NET (Rich Salz) (11/30/87)

Submitted-by: Crispin Goswell <caag@vd.rl.ac.uk>
Posting-number: Volume 12, Issue 55
Archive-name: postscript/part06

[  Sorry for the delays; when the net was free, I was  busy.  --r$  ]

#! /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 6 (of 18)."
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'postscript/fonts/Times/greek.r' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'postscript/fonts/Times/greek.r'\"
else
echo shar: Extracting \"'postscript/fonts/Times/greek.r'\" \(8441 characters\)
sed "s/^X//" >'postscript/fonts/Times/greek.r' <<'END_OF_FILE'
XCharStrings
X/2027
X<CA34
X4349
XCA34
X5149
XCA37
X5049
XC543
X4E43
XC149
X4749
XCD49
X5349
X>
Xput
XMetrics
X/2027
X[2
X20]
Xput
XCharStrings
X/2028
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/2028
X[1
X22]
Xput
XCharStrings
X/2029
X<C534
X4549
XC634
X4649
XC234
X5134
X513A
X5034
XC249
X4949
X>
Xput
XMetrics
X/2029
X[3
X18]
Xput
XCharStrings
X/2030
X<CA34
X4249
XCA34
X5249
XCA37
X5149
XC348
X5148
XC249
X5249
X>
Xput
XMetrics
X/2030
X[2
X20]
Xput
XCharStrings
X/2031
X<C534
X4549
XC634
X4649
XCC3A
X4C42
XC234
X5234
X523A
X5134
XC63E
X4C3E
XC249
X5249
X5243
X5149
X>
Xput
XMetrics
X/2031
X[1
X21]
Xput
XCharStrings
X/2032
X<D034
X4349
XD134
X4449
XC434
X433A
X4334
X5134
XC349
X5149
X5143
X5049
X>
Xput
XMetrics
X/2032
X[2
X20]
Xput
XCharStrings
X/2033
X<C534
X4549
XC634
X4649
XD234
X5249
XD334
X5349
XC234
X4934
XCF34
X5634
XC63E
X523E
XC249
X4949
XCF49
X5649
X>
Xput
XMetrics
X/2033
X[0
X24]
Xput
XCharStrings
X/2034
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
XC83B
X4842
XCE3B
X4E42
XC83E
X4E3E
XC83F
X4E3F
X>
Xput
XMetrics
X/2034
X[1
X22]
Xput
XCharStrings
X/2035
X<C534
X4549
XC634
X4649
XC234
X4934
XC249
X4949
X>
Xput
XMetrics
X/2035
X[7
X11]
Xput
XCharStrings
X/2036
X<C534
X4549
XC634
X4649
XD334
X4641
XCB3D
X5349
XCA3D
X5249
XC234
X4934
XCF34
X5534
XC249
X4949
XCF49
X5549
X>
Xput
XMetrics
X/2036
X[0
X22]
Xput
XCharStrings
X/2037
X<CA34
X4349
XCA34
X5149
XCA37
X5049
XC149
X4749
XCD49
X5349
X>
Xput
XMetrics
X/2037
X[2
X20]
Xput
XCharStrings
X/2038
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/2038
X[0
X25]
Xput
XCharStrings
X/2039
X<C534
X4549
XC634
X5247
XC636
X5249
XD234
X5249
XC234
X4634
XCF34
X5534
XC249
X4849
X>
Xput
XMetrics
X/2039
X[1
X23]
Xput
XCharStrings
X/2040
X<C433
X4338
XD333
X5238
XC83C
X4741
XCF3C
X4E41
XC445
X434A
XD345
X524A
XC435
X5235
XC436
X5236
XC83E
X4E3E
XC83F
X4E3F
XC447
X5247
XC448
X5248
X>
Xput
XMetrics
X/2040
X[2
X22]
Xput
XCharStrings
X/2041
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/2041
X[1
X22]
Xput
XCharStrings
X/2042
X<C534
X4549
XC634
X4649
XD234
X5249
XD334
X5349
XC234
X5634
XC249
X4949
XCF49
X5649
X>
Xput
XMetrics
X/2042
X[0
X24]
Xput
XCharStrings
X/2043
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/2043
X[1
X22]
Xput
XCharStrings
X/2044
X<C334
X4A3E
X4249
XC234
X493E
XC234
X5134
X523A
X5034
XC348
X5048
XC249
X5149
X5243
X5049
X>
Xput
XMetrics
X/2044
X[2
X21]
Xput
XCharStrings
X/2045
X<C934
X4949
XCA34
X4A49
XC334
X423A
X4234
X5134
X513A
X5034
XC649
X4D49
X>
Xput
XMetrics
X/2045
X[3
X19]
Xput
XCharStrings
X/2046
X<C239
X4237
X4335
X4434
X4634
X4735
X4837
X493B
X4949
XC237
X4435
X4635
X4837
XD139
X5137
X5035
X4F34
X4D34
X4C35
X4B37
X4A3B
X4A49
XD137
X4F35
X4D35
X4B37
XC649
X4D49
X>
Xput
XMetrics
X/2046
X[3
X19]
Xput
XCharStrings
X/2047
X<CA34
X4A49
XCB34
X4B49
XC839
X453A
X443B
X433D
X4340
X4442
X4543
X4844
X4D44
X5043
X5142
X5240
X523D
X513B
X503A
X4D39
X4839
XC839
X463A
X453B
X443D
X4440
X4542
X4643
X4844
XCD44
X4F43
X5042
X5140
X513D
X503B
X4F3A
X4D39
XC734
X4E34
XC749
X4E49
X>
Xput
XMetrics
X/2047
X[2
X21]
Xput
XCharStrings
X/2048
X<C334
X5049
XC434
X5149
XD134
X4349
XC134
X4734
XCD34
X5334
XC149
X4749
XCD49
X5349
X>
Xput
XMetrics
X/2048
X[2
X20]
Xput
XCharStrings
X/2049
X<CB34
X4B49
XCC34
X4C49
XC23B
X433A
X453B
X463F
X4741
X4842
X4A43
XC33A
X443B
X453F
X4641
X4742
X4A43
X4D43
X5042
X5141
X523F
X533B
X543A
XCD43
X4F42
X5041
X513F
X523B
X543A
X553B
XC834
X4F34
XC849
X4F49
X>
Xput
XMetrics
X/2049
X[1
X23]
Xput
XCharStrings
X/2050
X<C346
X4449
X4849
X4645
X4441
X433E
X433A
X4437
X4635
X4934
X4D34
X5035
X5237
X533A
X533E
X5241
X5045
X4E49
X5249
X5346
XC645
X4542
X443E
X443A
X4537
X4735
X4934
XCD34
X4F35
X5137
X523A
X523E
X5142
X5045
XC448
X4748
XCF48
X5248
X>
Xput
XMetrics
X/2050
X[1
X22]
Xput
XCharStrings
X/2127
X<CA3B
X473C
X453E
X4440
X4343
X4346
X4448
X4749
X4949
X4B48
X4E45
X5042
X523E
X533B
XCA3B
X483C
X463E
X4540
X4443
X4446
X4548
X4749
XCA3B
X4C3B
X4E3C
X4F3E
X5146
X5248
X5349
XCC3B
X4D3C
X4E3E
X5046
X5148
X5349
X5449
X>
Xput
XMetrics
X/2127
X[-3
X23]
Xput
XCharStrings
X/2128
X<CD34
X4A35
X4837
X463B
X453E
X4442
X4348
X4250
XCD34
X4B35
X4937
X473B
X463E
X4542
X4448
X4350
XCD34
X4F34
X5135
X5236
X5239
X513B
X503C
X4D3D
X493D
XCF34
X5136
X5139
X503B
X4F3C
X4D3D
XC93D
X4D3E
X4F40
X5042
X5045
X4F47
X4E48
X4B49
X4949
X4748
X4647
X4544
XC93D
X4C3E
X4E40
X4F42
X4F45
X4E47
X4D48
X4B49
X>
Xput
XMetrics
X/2128
X[1
X21]
Xput
XCharStrings
X/2129
X<C13E
X433C
X453B
X473B
X493C
X4A3D
X4B40
X4B44
X4A48
X4750
XC23D
X443C
X483C
X4A3D
XD23B
X513E
X5040
X4B47
X484C
X4650
XD13B
X503E
X4F40
X4B47
X>
Xput
XMetrics
X/2129
X[-1
X20]
Xput
XCharStrings
X/2130
X<CD3C
X4B3B
X493B
X463C
X443F
X4342
X4345
X4447
X4548
X4749
X4949
X4C48
X4E45
X4F42
X4F3F
X4E3D
X4A38
X4936
X4934
X4A33
X4C33
X4E34
X5036
XC93B
X473C
X453F
X4442
X4446
X4548
XC949
X4B48
X4D45
X4E42
X4E3E
X4D3C
X4B39
X4A37
X4A35
X4B34
X4D34
X5036
X>
Xput
XMetrics
X/2130
X[4
X19]
Xput
XCharStrings
X/2131
X<CF3E
X4D3C
X4B3B
X473B
X453C
X453E
X4740
X4A41
XC73B
X463C
X463E
X4840
X4A41
XCA41
X4542
X4344
X4346
X4448
X4749
X4A49
X4C48
X4E46
XCA41
X4642
X4444
X4446
X4548
X4749
X>
Xput
XMetrics
X/2131
X[-3
X18]
Xput
XCharStrings
X/2132
X<CB34
X4935
X4836
X4837
X4938
X4C39
X5139
X5138
X4E39
X4A3B
X473D
X4440
X4343
X4345
X4447
X4749
X4A4B
X4B4D
X4B4F
X4A50
X4850
X474F
XCC3A
X483D
X4540
X4443
X4445
X4547
X4749
X>
Xput
XMetrics
X/2132
X[3
X18]
Xput
XCharStrings
X/2133
X<C13F
X423D
X443B
X473B
X483C
X483E
X4742
X4549
XC63B
X473C
X473E
X4642
X4449
XC742
X493E
X4B3C
X4D3B
X4F3B
X513C
X523D
X5240
X5145
X4E50
XCF3B
X513D
X5140
X5045
X4D50
X>
Xput
XMetrics
X/2133
X[-1
X22]
Xput
XCharStrings
X/2134
X<C13F
X423D
X443B
X473B
X483C
X483E
X4743
X4746
X4848
X4949
XC63B
X473C
X473E
X4643
X4646
X4748
X4949
X4B49
X4D48
X4F46
X5143
X5240
X533B
X5337
X5235
X5034
X4E34
X4C36
X4C38
X4D3B
X4F3E
X5140
X5442
XCD48
X4F45
X5043
X5140
X523B
X5237
X5135
X5034
X>
Xput
XMetrics
X/2134
X[0
X23]
Xput
XCharStrings
X/2135
X<C63B
X4442
X4346
X4348
X4449
X4749
X4947
X4A45
XC73B
X4542
X4446
X4448
X4549
X>
Xput
XMetrics
X/2135
X[-1
X12]
Xput
XCharStrings
X/2136
X<C63B
X4249
XC73B
X4349
XD03B
X513C
X523C
X513B
X4F3B
X4D3C
X4940
X4741
X4541
XC741
X4942
X4B48
X4C49
XC741
X4842
X4A48
X4B49
X4D49
X4F48
X5145
X>
Xput
XMetrics
X/2136
X[-2
X20]
Xput
XCharStrings
X/2137
X<C334
X4534
X4735
X4836
X4938
X4F46
X5048
X5149
XC534
X4736
X4838
X4E46
X4F48
X5149
X5249
XCA3B
X4249
XCA3B
X4349
X>
Xput
XMetrics
X/2137
X[2
X20]
Xput
XCharStrings
X/2138
X<C73B
X4150
XC83B
X4250
XC73E
X4644
X4647
X4849
X4A49
X4C48
X4E46
X5043
XD23B
X4F46
X4F48
X5049
X5349
X5547
X5645
XD33B
X5046
X5048
X5149
X>
Xput
XMetrics
X/2138
X[-1
X23]
Xput
XCharStrings
X/2139
X<C63B
X4449
XC73B
X4641
X4546
X4449
XD13B
X503F
X4E43
XD23B
X513E
X5040
X4E43
X4C45
X4947
X4748
X4449
XC33B
X473B
X>
Xput
XMetrics
X/2139
X[-3
X20]
Xput
XCharStrings
X/2140
X<CB34
X4935
X4836
X4837
X4938
X4C39
X4F39
XCC39
X483A
X463B
X453D
X453F
X4741
X4A42
X4D42
XCC39
X493A
X473B
X463D
X463F
X4841
X4A42
XCA42
X4643
X4444
X4346
X4348
X454A
X4A4C
X4B4D
X4B4F
X4950
X4750
XCA42
X4743
X4544
X4446
X4448
X464A
X4A4C
X>
Xput
XMetrics
X/2140
X[3
X17]
Xput
XCharStrings
X/2141
X<C93B
X463C
X443F
X4342
X4345
X4447
X4548
X4749
X4949
X4C48
X4E45
X4F42
X4F3F
X4E3D
X4D3C
X4B3B
X493B
XC93B
X473C
X453F
X4442
X4446
X4548
XC949
X4B48
X4D45
X4E42
X4E3E
X4D3C
X>
Xput
XMetrics
X/2141
X[-3
X18]
Xput
XCharStrings
X/2142
X<C93C
X4549
XC93C
X4649
XCF3C
X4F49
XCF3C
X5049
XC23E
X443C
X473B
X543B
XC23E
X443D
X473C
X543C
X>
Xput
XMetrics
X/2142
X[-2
X22]
Xput
XCharStrings
X/2143
X<C444
X4547
X4648
X4849
X4A49
X4D48
X4F45
X5042
X503F
X4F3D
X4E3C
X4C3B
X4A3B
X473C
X453F
X4442
X4050
XCA49
X4C48
X4E45
X4F42
X4F3E
X4E3C
XCA3B
X483C
X463F
X4542
X4150
X>
Xput
XMetrics
X/2143
X[0
X19]
Xput
XCharStrings
X/2144
X<D33B
X493B
X463C
X443F
X4342
X4345
X4447
X4548
X4749
X4949
X4C48
X4E45
X4F42
X4F3F
X4E3D
X4D3C
X4B3B
XC93B
X473C
X453F
X4442
X4446
X4548
XC949
X4B48
X4D45
X4E42
X4E3E
X4D3C
XCD3C
X533C
X>
Xput
XMetrics
X/2144
X[-3
X21]
Xput
XCharStrings
X/2145
X<CB3C
X4849
XCB3C
X4949
XC23E
X443C
X473B
X523B
XC23E
X443D
X473C
X523C
X>
Xput
XMetrics
X/2145
X[-2
X20]
Xput
XCharStrings
X/2146
X<C13F
X423D
X443B
X473B
X483C
X483E
X4644
X4647
X4849
XC63B
X473C
X473E
X4544
X4547
X4648
X4849
X4949
X4C48
X4E46
X5043
X5140
X513D
X503B
X4F3C
X503D
X5140
XD043
X513D
X>
Xput
XMetrics
X/2146
X[-1
X20]
Xput
XCharStrings
X/2147
X<C83C
X463D
X443F
X4342
X4345
X4447
X4548
X4749
X4A49
X4D48
X5046
X5243
X5340
X533D
X513B
X4F3B
X4D3D
X4B41
X4946
X4650
XC345
X4547
X4748
X4A48
X4D47
X5045
X5243
XD33D
X513C
X4F3C
X4D3E
X4B41
X4947
X4750
X>
Xput
XMetrics
X/2147
X[-3
X22]
Xput
XCharStrings
X/2148
X<C23B
X443B
X463C
X473E
X4C4D
X4D4F
X4E50
XC43B
X453C
X463E
X4B4D
X4C4F
X4E50
X5050
XD13B
X503D
X4E40
X444B
X424E
X4150
X>
Xput
XMetrics
X/2148
X[-1
X18]
Xput
XCharStrings
X/2149
X<CF34
X4950
XD034
X4850
XC13F
X423D
X443B
X473B
X483C
X483E
X4743
X4746
X4948
X4C48
X4E47
X5144
X5341
XC63B
X473C
X473E
X4643
X4646
X4748
X4949
X4C49
X4E48
X5046
X5243
X5341
X553B
X>
Xput
XMetrics
X/2149
X[0
X23]
Xput
XCharStrings
X/2150
X<C43F
X463D
X493C
X483B
X463C
X443F
X4342
X4345
X4448
X4549
X4749
X4948
X4B45
X4C42
XC345
X4447
X4548
X4748
X4947
X4B45
XCB42
X4B45
X4C48
X4D49
X4F49
X5148
X5345
X5442
X543F
X533C
X523B
X513C
X533D
X543F
XCB45
X4C47
X4D48
X4F48
X5147
X5345
X>
Xput
XMetrics
X/2150
X[-3
X23]
Xput
END_OF_FILE
if test 8441 -ne `wc -c <'postscript/fonts/Times/greek.r'`; then
    echo shar: \"'postscript/fonts/Times/greek.r'\" unpacked with wrong size!
fi
# end of 'postscript/fonts/Times/greek.r'
fi
if test -f 'postscript/fonts/Times/roman.r' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'postscript/fonts/Times/roman.r'\"
else
echo shar: Extracting \"'postscript/fonts/Times/roman.r'\" \(9406 characters\)
sed "s/^X//" >'postscript/fonts/Times/roman.r' <<'END_OF_FILE'
XCharStrings
X/a
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/a
X[-3
X20]
Xput
XCharStrings
X/b
X<C534
X4549
XC634
X4649
XC63E
X483C
X4A3B
X4C3B
X4F3C
X513E
X5241
X5243
X5146
X4F48
X4C49
X4A49
X4848
X4646
XCC3B
X4E3C
X503E
X5141
X5143
X5046
X4E48
X4C49
XC234
X4634
X>
Xput
XMetrics
X/b
X[1
X21]
Xput
XCharStrings
X/c
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/c
X[-3
X19]
Xput
XCharStrings
X/d
X<CF34
X4F49
XD034
X5049
XCF3E
X4D3C
X4B3B
X493B
X463C
X443E
X4341
X4343
X4446
X4648
X4949
X4B49
X4D48
X4F46
XC93B
X473C
X453E
X4441
X4443
X4546
X4748
X4949
XCC34
X5034
XCF49
X5349
X>
Xput
XMetrics
X/d
X[2
X21]
Xput
XCharStrings
X/e
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/e
X[-3
X19]
Xput
XCharStrings
X/f
X<CA35
X4936
X4A37
X4B36
X4B35
X4A34
X4834
X4635
X4537
X4549
XC834
X4735
X4637
X4649
XC23B
X4A3B
XC249
X4949
X>
Xput
XMetrics
X/f
X[5
X13]
Xput
XCharStrings
X/g
X<C83B
X463C
X453D
X443F
X4441
X4543
X4644
X4845
X4A45
X4C44
X4D43
X4E41
X4E3F
X4D3D
X4C3C
X4A3B
X483B
XC63C
X453E
X4542
X4644
XCC44
X4D42
X4D3E
X4C3C
XCD3D
X4E3C
X503B
X503C
X4E3C
XC543
X4444
X4346
X4347
X4449
X474A
X4C4A
X4F4B
X504C
XC347
X4448
X4749
X4C49
X4F4A
X504C
X504D
X4F4F
X4C50
X4650
X434F
X424D
X424C
X434A
X4649
X>
Xput
XMetrics
X/g
X[-2
X19]
Xput
XCharStrings
X/h
X<C534
X4549
XC634
X4649
XC63E
X483C
X4B3B
X4D3B
X503C
X513E
X5149
XCD3B
X4F3C
X503E
X5049
XC234
X4634
XC249
X4949
XCD49
X5449
X>
Xput
XMetrics
X/h
X[1
X22]
Xput
XCharStrings
X/i
X<C534
X4435
X4536
X4635
X4534
XC53B
X4549
XC63B
X4649
XC23B
X463B
XC249
X4949
X>
Xput
XMetrics
X/i
X[7
X11]
Xput
XCharStrings
X/j
X<C634
X4535
X4636
X4735
X4634
XC73B
X474D
X464F
X4450
X4250
X414F
X414E
X424D
X434E
X424F
XC63B
X464D
X454F
X4450
XC33B
X473B
X>
Xput
XMetrics
X/j
X[7
X11]
Xput
XCharStrings
X/k
X<C534
X4549
XC634
X4649
XD03B
X4645
XCB41
X5149
XCA41
X5049
XC234
X4634
XCD3B
X533B
XC249
X4949
XCD49
X5349
X>
Xput
XMetrics
X/k
X[1
X21]
Xput
XCharStrings
X/l
X<C534
X4549
XC634
X4649
XC234
X4634
XC249
X4949
X>
Xput
XMetrics
X/l
X[7
X11]
Xput
XCharStrings
X/m
X<C53B
X4549
XC63B
X4649
XC63E
X483C
X4B3B
X4D3B
X503C
X513E
X5149
XCD3B
X4F3C
X503E
X5049
XD13E
X533C
X563B
X583B
X5B3C
X5C3E
X5C49
XD83B
X5A3C
X5B3E
X5B49
XC23B
X463B
XC249
X4949
XCD49
X5449
XD849
X5F49
X>
Xput
XMetrics
X/m
X[-2
X33]
Xput
XCharStrings
X/n
X<C53B
X4549
XC63B
X4649
XC63E
X483C
X4B3B
X4D3B
X503C
X513E
X5149
XCD3B
X4F3C
X503E
X5049
XC23B
X463B
XC249
X4949
XCD49
X5449
X>
Xput
XMetrics
X/n
X[-2
X22]
Xput
XCharStrings
X/o
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/o
X[-3
X20]
Xput
XCharStrings
X/p
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/p
X[-2
X21]
Xput
XCharStrings
X/q
X<CF3B
X4F50
XD03B
X5050
XCF3E
X4D3C
X4B3B
X493B
X463C
X443E
X4341
X4343
X4446
X4648
X4949
X4B49
X4D48
X4F46
XC93B
X473C
X453E
X4441
X4443
X4546
X4748
X4949
XCC50
X5350
X>
Xput
XMetrics
X/q
X[-3
X20]
Xput
XCharStrings
X/r
X<C53B
X4549
XC63B
X4649
XC641
X473E
X493C
X4B3B
X4E3B
X4F3C
X4F3D
X4E3E
X4D3D
X4E3C
XC23B
X463B
XC249
X4949
X>
Xput
XMetrics
X/r
X[-2
X17]
Xput
XCharStrings
X/s
X<CD3D
X4E3B
X4E3F
X4D3D
X4C3C
X4A3B
X463B
X443C
X433D
X433F
X4440
X4641
X4B43
X4D44
X4E45
XC33E
X443F
X4640
X4B42
X4D43
X4E44
X4E47
X4D48
X4B49
X4749
X4548
X4447
X4345
X4349
X4447
X>
Xput
XMetrics
X/s
X[-3
X17]
Xput
XCharStrings
X/t
X<C534
X4545
X4648
X4849
X4A49
X4C48
X4D46
XC634
X4645
X4748
X4849
XC23B
X4A3B
X>
Xput
XMetrics
X/t
X[5
X15]
Xput
XCharStrings
X/u
X<C53B
X4546
X4648
X4949
X4B49
X4E48
X5046
XC63B
X4646
X4748
X4949
XD03B
X5049
XD13B
X5149
XC23B
X463B
XCD3B
X513B
XD049
X5449
X>
Xput
XMetrics
X/u
X[-2
X22]
Xput
XCharStrings
X/v
X<C33B
X4949
XC43B
X4947
XCF3B
X4949
XC13B
X473B
XCB3B
X513B
X>
Xput
XMetrics
X/v
X[-1
X18]
Xput
XCharStrings
X/w
X<C43B
X4849
XC53B
X4846
XCC3B
X4849
XCC3B
X5049
XCD3B
X5046
XD43B
X5049
XC13B
X483B
XD13B
X573B
X>
Xput
XMetrics
X/w
X[-1
X24]
Xput
XCharStrings
X/x
X<C43B
X4F49
XC53B
X5049
XD03B
X4449
XC23B
X483B
XCC3B
X523B
XC249
X4849
XCC49
X5249
X>
Xput
XMetrics
X/x
X[-2
X20]
Xput
XCharStrings
X/y
X<C43B
X4A49
XC53B
X4A47
XD03B
X4A49
X484D
X464F
X4450
X4350
X424F
X434E
X444F
XC23B
X483B
XCC3B
X523B
X>
Xput
XMetrics
X/y
X[-2
X19]
Xput
XCharStrings
X/z
X<CE3B
X4349
XCF3B
X4449
XC43B
X433F
X433B
X4F3B
XC349
X4F49
X4F45
X4E49
X>
Xput
XMetrics
X/z
X[-3
X18]
Xput
XCharStrings
X/space
X()
Xput
XMetrics
X/space
X[0
X20]
Xput
XCharStrings
X/A
X<CA34
X4349
XCA34
X5149
XCA37
X5049
XC543
X4E43
XC149
X4749
XCD49
X5349
X>
Xput
XMetrics
X/A
X[2
X20]
Xput
XCharStrings
X/B
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/B
X[1
X22]
Xput
XCharStrings
X/C
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/C
X[1
X21]
Xput
XCharStrings
X/D
X<C534
X4549
XC634
X4649
XC234
X4C34
X4F35
X5137
X5239
X533C
X5341
X5244
X5146
X4F48
X4C49
X4249
XCC34
X4E35
X5037
X5139
X523C
X5241
X5144
X5046
X4E48
X4C49
X>
Xput
XMetrics
X/D
X[1
X22]
Xput
XCharStrings
X/E
X<C534
X4549
XC634
X4649
XCC3A
X4C42
XC234
X5234
X523A
X5134
XC63E
X4C3E
XC249
X5249
X5243
X5149
X>
Xput
XMetrics
X/E
X[1
X21]
Xput
XCharStrings
X/F
X<C534
X4549
XC634
X4649
XCC3A
X4C42
XC234
X5234
X523A
X5134
XC63E
X4C3E
XC249
X4949
X>
Xput
XMetrics
X/F
X[1
X20]
Xput
XCharStrings
X/G
X<D137
X523A
X5234
X5137
X4F35
X4C34
X4A34
X4735
X4537
X4439
X433C
X4341
X4444
X4546
X4748
X4A49
X4C49
X4F48
X5146
XCA34
X4835
X4637
X4539
X443C
X4441
X4544
X4646
X4848
X4A49
XD141
X5149
XD241
X5249
XCE41
X5541
X>
Xput
XMetrics
X/G
X[1
X23]
Xput
XCharStrings
X/H
X<C534
X4549
XC634
X4649
XD234
X5249
XD334
X5349
XC234
X4934
XCF34
X5634
XC63E
X523E
XC249
X4949
XCF49
X5649
X>
Xput
XMetrics
X/H
X[0
X24]
Xput
XCharStrings
X/I
X<C534
X4549
XC634
X4649
XC234
X4934
XC249
X4949
X>
Xput
XMetrics
X/I
X[7
X11]
Xput
XCharStrings
X/J
X<CA34
X4A45
X4948
X4749
X4549
X4348
X4246
X4244
X4343
X4444
X4345
XC934
X4945
X4848
X4749
XC634
X4D34
X>
Xput
XMetrics
X/J
X[5
X15]
Xput
XCharStrings
X/K
X<C534
X4549
XC634
X4649
XD334
X4641
XCB3D
X5349
XCA3D
X5249
XC234
X4934
XCF34
X5534
XC249
X4949
XCF49
X5549
X>
Xput
XMetrics
X/K
X[0
X22]
Xput
XCharStrings
X/L
X<C534
X4549
XC634
X4649
XC234
X4934
XC249
X5149
X5143
X5049
X>
Xput
XMetrics
X/L
X[3
X18]
Xput
XCharStrings
X/M
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/M
X[0
X25]
Xput
XCharStrings
X/N
X<C534
X4549
XC634
X5247
XC636
X5249
XD234
X5249
XC234
X4634
XCF34
X5534
XC249
X4849
X>
Xput
XMetrics
X/N
X[1
X23]
Xput
XCharStrings
X/O
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/O
X[1
X22]
Xput
XCharStrings
X/P
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/P
X[1
X22]
Xput
XCharStrings
X/Q
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
XC747
X4746
X4844
X4A43
X4B43
X4D44
X4E46
X4F4D
X504E
X524E
X534C
X534B
XCE46
X4F4A
X504C
X514D
X524D
X534C
X>
Xput
XMetrics
X/Q
X[1
X22]
Xput
XCharStrings
X/R
X<C534
X4549
XC634
X4649
XC234
X4E34
X5135
X5236
X5338
X533A
X523C
X513D
X4E3E
X463E
XCE34
X5035
X5136
X5238
X523A
X513C
X503D
X4E3E
XC249
X4949
XCB3E
X4D3F
X4E40
X5147
X5248
X5348
X5447
XCD3F
X4E41
X5048
X5149
X5349
X5447
X5446
X>
Xput
XMetrics
X/R
X[1
X22]
Xput
XCharStrings
X/S
X<D037
X5134
X513A
X5037
X4E35
X4B34
X4834
X4535
X4337
X4339
X443B
X453C
X473D
X4D3F
X4F40
X5142
XC339
X453B
X473C
X4D3E
X4F3F
X5040
X5142
X5146
X4F48
X4C49
X4949
X4648
X4446
X4343
X4349
X4446
X>
Xput
XMetrics
X/S
X[2
X20]
Xput
XCharStrings
X/T
X<C934
X4949
XCA34
X4A49
XC334
X423A
X4234
X5134
X513A
X5034
XC649
X4D49
X>
Xput
XMetrics
X/T
X[3
X19]
Xput
XCharStrings
X/U
X<C534
X4543
X4646
X4848
X4B49
X4D49
X5048
X5246
X5343
X5334
XC634
X4643
X4746
X4948
X4B49
XC234
X4934
XD034
X5634
X>
Xput
XMetrics
X/U
X[0
X24]
Xput
XCharStrings
X/V
X<C334
X4A49
XC434
X4A46
XD134
X4A49
XC134
X4734
XCD34
X5334
X>
Xput
XMetrics
X/V
X[2
X20]
Xput
XCharStrings
X/W
X<C434
X4849
XC534
X4844
XCC34
X4849
XCC34
X5049
XCD34
X5044
XD434
X5049
XC134
X4834
XD134
X5734
X>
Xput
XMetrics
X/W
X[0
X24]
Xput
XCharStrings
X/X
X<C334
X5049
XC434
X5149
XD134
X4349
XC134
X4734
XCD34
X5334
XC149
X4749
XCD49
X5349
X>
Xput
XMetrics
X/X
X[2
X20]
Xput
XCharStrings
X/Y
X<C334
X4A3F
X4A49
XC434
X4B3F
X4B49
XD234
X4B3F
XC134
X4734
XCE34
X5434
XC749
X4E49
X>
Xput
XMetrics
X/Y
X[2
X21]
Xput
XCharStrings
X/Z
X<D034
X4349
XD134
X4449
XC434
X433A
X4334
X5134
XC349
X5149
X5143
X5049
X>
Xput
XMetrics
X/Z
X[2
X20]
Xput
XCharStrings
X/ff
X<CF35
X4E36
X4F37
X5036
X5035
X4E34
X4B34
X4835
X4637
X453A
X4549
XCB34
X4935
X4737
X463A
X4649
XD535
X5436
X5537
X5636
X5635
X5534
X5334
X5135
X5037
X5049
XD334
X5235
X5137
X5149
XC23B
X543B
XC249
X4949
XCD49
X5449
X>
Xput
XMetrics
X/ff
X[1
X23]
Xput
XCharStrings
X/fi
X<D035
X4F36
X5037
X5136
X5035
X4E34
X4B34
X4835
X4637
X453A
X4549
XCB34
X4935
X4737
X463A
X4649
XD03B
X5049
XD13B
X5149
XC23B
X513B
XC249
X4949
XCD49
X5449
X>
Xput
XMetrics
X/fi
X[1
X22]
Xput
XCharStrings
X/fl
X<CF35
X4E36
X4F37
X5036
X5035
X4E34
XD134
X4B34
X4835
X4637
X453A
X4549
XCB34
X4935
X4737
X463A
X4649
XD036
X5049
XD134
X5149
XC23B
X503B
XC249
X4949
XCD49
X5449
X>
Xput
XMetrics
X/fl
X[1
X22]
Xput
XCharStrings
X/ffi
X<D035
X4F36
X5037
X5136
X5035
X4E34
X4B34
X4835
X4637
X453A
X4549
XCB34
X4935
X4737
X463A
X4649
XDB35
X5A36
X5B37
X5C36
X5B35
X5934
X5634
X5335
X5137
X503A
X5049
XD634
X5435
X5237
X513A
X5149
XDB3B
X5B49
XDC3B
X5C49
XC23B
X5C3B
XC249
X4949
XCD49
X5449
XD849
X5F49
X>
Xput
XMetrics
X/ffi
X[-2
X33]
Xput
XCharStrings
X/ffl
X<D035
X4F36
X5037
X5136
X5035
X4E34
X4B34
X4835
X4637
X453A
X4549
XCB34
X4935
X4737
X463A
X4649
XDA35
X5936
X5A37
X5B36
X5B35
X5934
XDC34
X5634
X5335
X5137
X503A
X5049
XD634
X5435
X5237
X513A
X5149
XDB36
X5B49
XDC34
X5C49
XC23B
X5B3B
XC249
X4949
XCD49
X5449
XD849
X5F49
X>
Xput
XMetrics
X/ffl
X[-2
X33]
Xput
XCharStrings
X/dotlessi
X<C53B
X4549
XC63B
X4649
XC23B
X463B
XC249
X4949
X>
Xput
XMetrics
X/dotlessi
X[0
X11]
Xput
END_OF_FILE
if test 9406 -ne `wc -c <'postscript/fonts/Times/roman.r'`; then
    echo shar: \"'postscript/fonts/Times/roman.r'\" unpacked with wrong size!
fi
# end of 'postscript/fonts/Times/roman.r'
fi
if test -f 'source/colour-ww.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'source/colour-ww.c'\"
else
echo shar: Extracting \"'source/colour-ww.c'\" \(9048 characters\)
sed "s/^X//" >'source/colour-ww.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#include "canon.h"
X#include "wwinfo.h"
X
Xstatic void xxrasterop ();
X
Xstatic struct hardware *NewHardware ();
X
X#define COLOURS 256
X
Xstatic unsigned char reds[COLOURS], greens[COLOURS], blues[COLOURS];
Xstatic int colours_used = 0;
X
Xstruct hardware *InitHardware ()
X {
X	wwstartup (COLOURS);
X 	InitTransfer (wwask (ASKXPPI));
X 	
X 	return NULL;
X }
X
Xint HardColour (h, colour) struct hardware *h; Colour colour;
X {
X	float r, g, b;
X	unsigned char red, green, blue;
X	int i;
X	
X	ColourRGB (colour, &r, &g, &b);
X	
X	red = 255 * r; green = 255 * g; blue = 255 * b;
X	for (i = 0; i < colours_used; i++)
X		if (reds[i] == red && greens[i] == green && blues[i] == blue)
X			return i;
X	if (colours_used == COLOURS)
X		return 0;
X	reds[colours_used] = red; greens[colours_used] = green; blues[colours_used] = blue;
X	colours_used++;
X	
X	InstallColour (h, i);
X	return i;
X }
X
Xvoid Paint  (from, to, fromPoint, toPoint, extent, colour)
X	struct hardware *from, *to;
X	DevicePoint fromPoint, toPoint, extent;
X	Colour colour;
X {
X	dd->d_fore = HardColour (to, colour);
X	BitBlt (from, to, fromPoint, toPoint, extent, ROP_OR);
X }
X
Xvoid PaintLine (h, fromPoint, toPoint, colour)
X	struct hardware *h;
X	DevicePoint fromPoint, toPoint;
X	Colour colour;
X {
X	dd->d_fore = HardColour (h, colour);
X	BitBltLine (h, fromPoint, toPoint, ROP_TRUE);
X }
X
Xvoid PaintTrapezoid (to, lefttop, leftbottom, righttop, rightbottom, top, bottom, colour)
X	struct hardware *to;
X	DevicePoint lefttop, leftbottom, righttop, rightbottom;
X	int top, bottom;
X	Colour colour;
X {
X	dd->d_fore = HardColour (to, colour);
X	BitBltTrapezoid (to, lefttop, leftbottom, righttop, rightbottom, top, bottom, ROP_TRUE);
X }
X
X#define TRANSFER_SIZE	256
X
Xstatic int transfer [TRANSFER_SIZE];
X
Xvoid InitTransfer (ppi) int ppi;
X {
X 	int i;
X 	
X 	pixels_per_inch = ppi;
X 	for (i = 0; i < TRANSFER_SIZE; i++)
X 		transfer [i] = i;
X }
X
Xint TransferSize ()
X {
X	return TRANSFER_SIZE;
X }
X
Xvoid SetTransfer (tran) float *tran;
X {
X 	int i;
X 	
X 	for (i = 0; i < TRANSFER_SIZE; i++)
X 		transfer [i] = (TRANSFER_SIZE - 1) * tran[i] + .5;
X }
X
Xint ScreenSize (freq, rot) float freq, rot;
X {
X 	return 0;
X }
X
Xvoid BuildScreen (freq, rotation, x, y) float freq, rotation, *x, *y;
X {
X }
X
Xvoid SetScreen (freq, rotation, thresh) float freq, rotation, *thresh;
X {
X }
X
Xstruct hardware *NewWindowHardware (width, height) int width, height;
X {
X 	DevicePoint real_extent;
X 	window *w;
X 	
X 	real_extent = NewDevicePoint (width, height);
X 	
X 	if (width == 0)
X 		width = 1;
X 	if (height == 0)
X 		height = 1;
X 	
X 	if ((w = wwxget (boxbuild (0, 0, width, height), COLOURS, "PostScript", 0)) == NULL)
X 		return NULL;
X 	return NewHardware (w->w_bm, real_extent, ISWIN);
X }
X
Xstruct hardware *NewBitmapHardware (width, height) int width, height;
X {
X 	DevicePoint real_extent;
X 	bitmap *bm;
X 	
X 	real_extent = NewDevicePoint (width, height);
X 	
X 	if (width == 0)
X 		width = 1;
X 	if (height == 0)
X 		height = 1;
X 	if ((bm = bmxget (width, height, 2)) == NULL)
X 		return NULL;
X 	
X 	return NewHardware (bm, real_extent, 0);
X }
X
X#define DeviceBitmap(h) ((bitmap *) ((h)->hard.addr))
X
XInstallColour (h, col) struct hardware *h; int col;
X {
X	corep (DeviceBitmap (h), &reds[col], &greens[col], &blues[col], 0, col, 1, COSET);
X }
X
Xstatic void DestroyHard (dev) struct hardware *dev;
X {
X 	bitmap *bm = DeviceBitmap (dev);
X 	
X 	if (bm)
X 	 {
X 	 	if (bm->bm_window)
X 	 		wwfree (bm->bm_window);
X 		else
X 			bmfree (bm);
X 	 }
X }
X
Xvoid DestroyHardware (dev) struct hardware *dev;
X {
X 	if (dev == NULL)
X 		return;
X 	DestroyHard (dev);
X 	if (dev->aux)
X 		DestroyHardware (dev->aux);
X 	Free ((char *) dev);
X }
X
Xstatic struct hardware *NewHardware (bm, extent, flags) bitmap *bm; DevicePoint extent; int flags;
X {
X 	struct hardware *d = (struct hardware *) Malloc (sizeof (struct hardware));
X 	
X 	d->flags = flags;
X 	d->hard.addr = (char *) bm;
X 	d->aux = d->clip = NULL;
X 	d->extent = extent;
X 	
X 	return d;
X }
X
Xstruct hardware *HardwareFromString (st, width, height) char *st; int width, height;
X {
X 	unsigned size = height * (width + 7) / 8;
X 	char *s = Malloc (size + 4);
X 	struct hardware *h;
X 	
X 	s[0] = height >> 8; s[1] = height;
X 	s[2] = width >> 8;  s[3] = width;
X 	Bcopy (s + 4, st, size);
X 	
X 	h = NewHardware (bmdecode (s, ENWWSTYLE), NewDevicePoint (width, height), 0);
X 	Free ((char *) s);
X 	
X 	return h;
X }
X
Xchar *StringFromHardware (dev) struct hardware *dev;
X {
X 	int length;
X 	
X 	return bmencode (DeviceBitmap (dev), ENWWSTYLE, &length) + 4;
X }
X
Xvoid UpdateControl (h, flag) struct hardware *h; int flag;
X {
X 	window *oldddwin = ddwin;
X 	
X 	if (h == NULL)
X 		return;
X 	ddwin = DeviceBitmap (h)->bm_window;
X 	if (ddwin)
X		wwstack (flag ? WWPOP : WWPUSHOFF);
X	ddwin = oldddwin;
X }
X
Xvoid RasterTile (from, to, toPoint, extent, rop)
X	struct hardware *from, *to;
X	DevicePoint toPoint, extent;
X	int rop;
X {
X 	if (to == NULL || DeviceBitmap (to) == NULL || extent.dx == 0 || extent.dy == 0)
X 		return;
X 	bmclip (DeviceBitmap (to), boxbuild (toPoint.dx, toPoint.dy, toPoint.dx + extent.dx - 1, toPoint.dy + extent.dy - 1));
X 	xxrasterop (DeviceBitmap (from), DeviceBitmap (from)->bm_box, DeviceBitmap (to), DeviceBitmap (to)->bm_box, rop);
X 	bmclip (DeviceBitmap (to), noclipbox);
X }
X
Xvoid BitBlt (from, to, fromPoint, toPoint, extent, rop)
X	struct hardware *from, *to;
X	DevicePoint fromPoint, toPoint, extent;
X	int rop;
X {
X	box frombox, tobox;
X	
X	if (to == NULL || DeviceBitmap (to) == NULL || extent.dx == 0 || extent.dy == 0)
X 		return;
X	
X 	if (from == NULL || DeviceBitmap (from) == NULL)
X 		rop = single_rop [rop];
X 	else
X 		frombox = boxbuild (fromPoint.dx, fromPoint.dy, fromPoint.dx + extent.dx - 1, fromPoint.dy + extent.dy - 1);
X 	
X  	tobox = boxbuild (toPoint.dx, toPoint.dy, toPoint.dx + extent.dx - 1, toPoint.dy + extent.dy - 1);
X	
X	xxrasterop ((from == NULL ? NULL : DeviceBitmap (from)), frombox, DeviceBitmap (to), tobox, rop);
X }
X
Xvoid BitBltLine (h, fromPoint, toPoint, rop) 
X  	struct hardware *h;
X	DevicePoint fromPoint, toPoint;
X	int rop;
X {
X 	if (h == NULL || DeviceBitmap (h) == NULL)
X 		return;
X 	
X	switch (single_rop [rop])
X	 {
X	 	case ROP_FALSE: 	rop = WWAND; 	break;
X	 	case ROP_TRUE:  	rop = WWOR;  	break;
X	 	case ROP_NOTDEST: 	rop = WWXOR; 	break;
X	 	case ROP_DEST: 		return; 	break;
X	 	
X	 	default:
X	 		fprintf (stderr, "illegal rasterop\n");
X	 		exit (1);
X	 }
X	
X	ddbm = DeviceBitmap (h);
X 	dd->d_line = rop;
X 	
X	line (fromPoint.dx, fromPoint.dy, LNMOVEABS);
X 	line (toPoint.dx, toPoint.dy, LNDRAWABS);
X }
X
Xvoid BitBltBlob (to, top, height, left, right, rop) struct hardware *to; int top, height, *left, *right, rop;
X {
X 	int i, op, offset = top;
X 	height += top;
X 	switch (rop)
X 	 {
X 	 	case ROP_FALSE: 	op = BMCLEARALL; break;
X 	 	case ROP_DEST: 		return;
X 	 	case ROP_NOTDEST: 	op = BMNOTALL; break;
X 	 	case ROP_TRUE: 		op = BMNOTALL | BMCLEARALL; break;
X 	 }
X 	ddbm = DeviceBitmap (to);
X 	wwstack (WWPUSHOFF);
X 	for (i = top; i < height; i++)
X 		bmbox (boxbuild (left[i - offset], i, right[i - offset], i), op);
X 	wwstack (WWPOP);
X }
X
Xstatic void xxrasterop (from, frombox, to, tobox, rop) bitmap *from, *to; box frombox, tobox; int rop;
X {
X	switch (rop)
X 	 {
X 	 	case ROP_FALSE: 							    bmxbox (to, tobox, BMCLEARALL);	break;
X 	 	case ROP_AND: 		bmxcopy (from, frombox, to, tobox, WWAND); 						break;
X 	 	case ROP_ANDNOT:	bmxcopy (from, frombox, to, tobox, WWOR | WWNOT);   bmxbox (to, tobox, BMNOTALL); 	break;
X	 	case ROP_SOURCE: 	bmxcopy (from, frombox, to, tobox, WWCOPY); 						break;
X	 	case ROP_NOTAND: 	bmxcopy (from, frombox, to, tobox, WWAND | WWNOT); 					break;
X 	 	case ROP_DEST: 													break;
X 	 	case ROP_XOR:		bmxcopy (from, frombox, to, tobox, WWXOR); 						break;
X  	 	case ROP_OR:		bmxcopy (from, frombox, to, tobox, WWOR); 						break;
X  	 	case ROP_NOR:		bmxcopy (from, frombox, to, tobox, WWOR); 	    bmxbox (to, tobox, BMNOTALL); 	break;
X  	 	case ROP_NXOR:		bmxcopy (from, frombox, to, tobox, WWXOR); 	    bmxbox (to, tobox, BMNOTALL); 	break;
X	 	case ROP_NOTDEST: 							    bmxbox (to, tobox, BMNOTALL); 	break;
X	 	case ROP_ORNOT:		bmxcopy (from, frombox, to, tobox, WWAND | WWNOT);  bmxbox (to, tobox, BMNOTALL);	break;
X	 	case ROP_NOTSOURCE:	bmxcopy (from, frombox, to, tobox, WWCOPY | WWNOT); 					break;
X  	 	case ROP_NOTOR:		bmxcopy (from, frombox, to, tobox, WWOR | WWNOT); 					break;
X	 	case ROP_NAND:		bmxcopy (from, frombox, to, tobox, WWAND); 	    bmxbox (to, tobox, BMNOTALL); 	break;
X 	 	case ROP_TRUE: 							bmxbox (to, tobox, BMCLEARALL | BMNOTALL); 	break;
X 	 	
X 	 	default:
X 	 		fprintf (stderr, "Illegal rasterop %d (hex 0x%x)\n", rop, rop);
X 	 		exit (1);
X 	 }
X }
END_OF_FILE
if test 9048 -ne `wc -c <'source/colour-ww.c'`; then
    echo shar: \"'source/colour-ww.c'\" unpacked with wrong size!
fi
# end of 'source/colour-ww.c'
fi
if test -f 'source/integer.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'source/integer.c'\"
else
echo shar: Extracting \"'source/integer.c'\" \(8759 characters\)
sed "s/^X//" >'source/integer.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 <signal.h>
X#include "main.h"
X
Xstatic Object OpFor;
X	
Xstatic int For (), PFor (), Eq (), Lt (), Le (), Gt (), Ge (), Not (), And (), Or (), Xor (), BitShift ();
Xstatic int Abs (), Add (), Sub (), Mul (), Div (), Mod (), Neg ();
Xstatic int Exp (), Sqrt (), Sin (), Cos (), Atan (), Ln (), Log (), Identity ();
Xstatic int Cvr (), Cvs (), EqEq ();
X
Xstatic int WordSize, Word2, LowMask;
X
XInitInteger ()
X {
X 	unsigned word;
X 	
X 	OpFor = MakeOp ("(forinteger)", For, 0, 1, 5, 6);
X 	
X	TypeInstallOp (Integer, "cvi", 		Identity,	1, 1, 0, 0, Integer);
X 	TypeInstallOp (Integer, "cvr", 		Cvr,		1, 1, 0, 0, Integer);
X  	TypeInstallOp (Integer, "cvs", 		Cvs,		2, 1, 0, 0, Integer, String);
X	TypeInstallOp (Integer, "==", 		EqEq,		1, 0, 0, 0, Integer);
X 	TypeInstallOp (Integer, "for", 		PFor, 		4, 0, 0, 6, Integer, Integer, Integer, Array);
X  	TypeInstallOp (Integer, "eq", 		Eq,		2, 1, 0, 0, Integer, Integer);
X  	TypeInstallOp (Integer, "lt", 		Lt,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "le", 		Le,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "gt", 		Gt,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "ge", 		Ge,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "not", 		Not,		1, 1, 0, 0, Integer);
X 	TypeInstallOp (Integer, "and", 		And,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "or", 		Or,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "xor", 		Xor,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "bitshift", 	BitShift,	2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "abs", 		Abs,		1, 1, 0, 0, Integer);
X 	TypeInstallOp (Integer, "add", 		Add,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "sub", 		Sub,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "mul", 		Mul,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "div", 		Div,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "mod", 		Mod,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "neg", 		Neg,		1, 1, 0, 0, Integer);
X 	TypeInstallOp (Integer, "exp", 		Exp,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "sqrt", 	Sqrt,		1, 1, 0, 0, Integer);
X 	TypeInstallOp (Integer, "sin", 		Sin,		1, 1, 0, 0, Integer);
X 	TypeInstallOp (Integer, "cos", 		Cos,		1, 1, 0, 0, Integer);
X 	TypeInstallOp (Integer, "atan", 	Atan,		2, 1, 0, 0, Integer, Integer);
X 	TypeInstallOp (Integer, "ln", 		Ln,		1, 1, 0, 0, Integer);
X 	TypeInstallOp (Integer, "log", 		Log,		1, 1, 0, 0, Integer);
X 	TypeInstallOp (Integer, "ceiling", 	Identity,	1, 1, 0, 0, Integer);
X 	TypeInstallOp (Integer, "floor", 	Identity,	1, 1, 0, 0, Integer);
X 	TypeInstallOp (Integer, "round", 	Identity,	1, 1, 0, 0, Integer);
X 	TypeInstallOp (Integer, "truncate", 	Identity,	1, 1, 0, 0, Integer);
X 	
X 	word = -1;
X 	PanicIf (word != ~0, "Need 2's complement machine! Sorry.");
X 	
X 	for (WordSize = 0; word != 0; WordSize++)
X 		word >>= 1;
X 	Word2 = WordSize / 2;
X 	LowMask = (1<<Word2) - 1;
X}
X
Xint StrictMul (a, b) int a, b;
X {
X 	int atop, abot, btop, bbot, sum, signed;
X 	
X 	signed = (a < 0) != (b < 0);
X 	a = a < 0 ? -a : a;
X 	b = b < 0 ? -b : b;
X 	abot = a & LowMask;
X 	bbot = b & LowMask;
X 	atop = a >> Word2;
X 	btop = b >> Word2;
X 	sum = abot * btop + atop * bbot;
X 	sum += ((unsigned) (abot * bbot) >> Word2);
X 	sum = ((unsigned) sum >> Word2) + atop * btop;
X 	if (sum != 0 || a * b < 0)
X 		kill (getpid (), SIGFPE);
X 	return signed ? -a * b : a * b;
X }
X
Xint StrictAdd (a, b) int a, b;
X {
X	if ((a < 0) == (b < 0) && (a < 0) != (a + b < 0))
X		kill (getpid (), SIGFPE);
X	return a + b;
X }
X
Xint BodyInteger (item) Object item;
X {
X 	return item.u.Integer;
X }
X
Xstatic int Body (item) Object item;
X {
X 	return item.u.Integer;
X }
X
XObject MakeInteger (i) int i;
X {
X 	Object res;
X 	
X 	res = MakeObject (Integer);
X 	res.u.Integer = i;
X 	
X 	return res;
X }
X
Xstatic Object Make (i) int i;
X {
X 	Object res;
X 	
X 	res = MakeObject (Integer);
X 	res.u.Integer = i;
X 	
X 	return res;
X }
X
Xstatic int Cvr (item) Object item;
X {
X	return Push (OpStack, RealInteger (item));
X }
X
Xstatic int Cvs (v, string) Object v, string;
X {
X	int length;
X	char buf [BUFSIZE];
X 	
X	VOID sprintf (buf, "%d", BodyInteger (v));
X	if ((length = strlen (buf)) > lengthString (string))
X		return Error (PRangeCheck);
X	VOID Bcopy (BodyString (string), buf, length);
X	return Push (OpStack, getIString (string, 0, length));
X }
X
Xstatic int EqEq (v) Object v;
X {
X	printf ("%d", BodyInteger (v));
X	return TRUE;
X }
X
XObject IntReal (o) Object o;
X {
X 	return Make ((int) BodyReal (o));
X }
X
Xstatic int PFor (initial, increment, limit, proc) Object initial, increment, limit, proc;
X {
X 	VOID Push (ExecStack, Nil);
X	VOID Push (ExecStack, increment);
X	VOID Push (ExecStack, limit);
X	VOID Push (ExecStack, initial);
X	VOID Push (ExecStack, proc);
X	VOID Push (ExecStack, OpFor);
X	
X	return TRUE;
X }
X
Xstatic int For ()
X {
X	Object current, limit, increment, proc;
X	
X	proc	  = Pop (ExecStack);
X	current   = Pop (ExecStack);
X	limit	  = Pop (ExecStack);
X	increment = Pop (ExecStack);
X	
X	if (Body (increment) > 0
X				? Body (current) > Body (limit)
X				: Body (current) < Body (limit))
X	 	VOID Pop (ExecStack);
X	else
X	 {
X	 	VOID Push (ExecStack, increment);
X	 	VOID Push (ExecStack, limit);
X	 	VOID Push (ExecStack, Make (StrictAdd (Body (current), Body (increment))));
X	 	VOID Push (ExecStack, proc);
X	 	VOID Push (ExecStack, OpFor);
X	 	VOID Push (ExecStack, proc);
X	 	VOID Push (OpStack, current);
X	 }
X	return TRUE;
X }
X
Xstatic int Eq (a, b) Object a, b;
X {
X 	return Push (OpStack, MakeBoolean (Body (a) == Body (b)));
X }
X
Xstatic int Lt (a, b) Object a, b;
X {
X 	return Push (OpStack, MakeBoolean (Body (a) < Body (b)));
X }
X
Xstatic int Le (a, b) Object a, b;
X {
X 	return Push (OpStack, MakeBoolean (Body (a) <= Body (b)));
X }
X
Xstatic int Gt (a, b) Object a, b;
X {
X 	return Push (OpStack, MakeBoolean (Body (a) > Body (b)));
X }
X
Xstatic int Ge (a, b) Object a, b;
X {
X 	return Push (OpStack, MakeBoolean (Body (a) >= Body (b)));
X }
X
Xstatic int Not (integer) Object integer;
X {
X 	 return Push (OpStack, Make (~ Body (integer)));
X }
X
Xstatic int And (a, b) Object a, b;
X {
X 	return Push (OpStack, Make (Body (a) & Body (b)));
X }
X
Xstatic int Or (a, b) Object a, b;
X {
X 	return Push (OpStack, Make (Body (a) | Body (b)));
X }
X
Xstatic int Xor (a, b) Object a, b;
X {
X 	return Push (OpStack, Make (Body (a) ^ Body (b)));
X }
X
Xstatic int BitShift (a, b) Object a, b;
X {
X 	if (Body (b) > 0)
X 		return Push (OpStack, Make ((int) ((unsigned) Body (a) << Body (b))));
X 	else
X 		return Push (OpStack, Make ((int) ((unsigned) Body (a) >> (-Body (b)))));
X }
X
Xstatic int Abs (v) Object v;
X {
X 	return Push (OpStack, Make (Body (v) >= 0 ? Body (v) : -Body (v)));
X }
X
Xstatic int Add (a, b) Object a, b;
X {
X 	return Push (OpStack, Make (StrictAdd (Body (a), Body (b))));
X }
X
Xstatic int Sub (a, b) Object a, b;
X {
X 	return Push (OpStack, Make (StrictAdd (Body (a), -Body (b))));
X }
X
Xstatic int Mul (a, b) Object a, b;
X {
X 	return Push (OpStack, Make (StrictMul (Body (a), Body (b))));
X }
X
Xstatic int Div (a, b) Object a, b;
X {
X 	if (Body (b) == 0)
X 		return Error (PUnResult);
X 	return Push (OpStack, MakeReal ((float) Body (a) / (float) Body (b)));
X }
X
Xstatic int Mod (a, b) Object a, b;
X {
X 	if (Body (b) == 0)
X 		return Error (PUnResult);
X 	return Push (OpStack, Make (Body (a) % Body (b)));
X }
X
Xstatic int Neg (a) Object a;
X {
X	return Push (OpStack, Make (-Body (a)));
X }
X
Xstatic int Sqrt (v) Object v;
X {
X  	if (Body (v) < 0)
X 		return Error (PUnResult);
X	return Push (OpStack, MakeReal ((float) sqrt ((double) Body (v))));
X }
X
Xstatic int Exp (a, b) Object a, b;
X {
X	return Push (OpStack, MakeReal ((float) pow ((double) Body (a), (double) Body (b))));
X }
X
Xstatic int Identity (v) Object v;
X {
X 	return Push (OpStack, v);
X }
X
Xstatic int Sin (v) Object v;
X {
X 	return Push (OpStack, MakeReal ((float) sin (Rad ((double) Body (v)))));
X }
X
Xstatic int Cos (v) Object v;
X {
X 	return Push (OpStack, MakeReal ((float) cos (Rad ((double) Body (v)))));
X }
X
Xstatic int Atan (a, b) Object a, b;
X {
X 	return Push (OpStack, MakeReal ((float) Deg (atan2 ((double) Body (a), (double) Body (b)))));
X }
X
Xstatic int Ln (v) Object v;
X {
X 	return Push (OpStack, MakeReal ((float) log ((double) Body (v))));
X }
X
Xstatic int Log (v) Object v;
X {
X 	return Push (OpStack, MakeReal ((float) log10 ((double) Body (v))));
X }
END_OF_FILE
if test 8759 -ne `wc -c <'source/integer.c'`; then
    echo shar: \"'source/integer.c'\" unpacked with wrong size!
fi
# end of 'source/integer.c'
fi
if test -f 'source/operator.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'source/operator.c'\"
else
echo shar: Extracting \"'source/operator.c'\" \(8110 characters\)
sed "s/^X//" >'source/operator.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
Xstruct op_struct
X {
X 	Object name;
X 	int (*fn)(), arguments, results, execpop, execpush;
X 	Type *argtypes;
X };
X
Xint ExecOperator ();
Xstatic int EqEq (), Cvs (), Eq (), Signature ();
X
XInitOperator ()
X {
X 	
X	TypeInstallOp (Operator, "==", 	EqEq,			1, 0, 0, 0, Operator);
X  	TypeInstallOp (Operator, "cvs", Cvs,			2, 1, 0, 0, Operator, String);
X  	TypeInstallOp (Operator, "exec",ExecOperator,		1, 0, 0, 0, Operator);
X  	TypeInstallOp (Operator, "eq",	Eq,			2, 1, 0, 0, Operator, Operator);
X  	TypeInstallOp (Operator, "signature",	Signature,	1, 0, 0, 0, Operator);
X }
X
X/*VARARGS6*/
X/*ARGSUSED*/
XObject MakeOp (name, fn, arguments, results, execpop, execpush, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
X		char *name;
X		int (*fn)(), arguments, results, execpop, execpush;
X		Type arg1, arg2, arg3, arg4, arg5, arg6, arg7;
X {
X 	Object res;
X 	struct op_struct *op;
X 	int i;
X 	
X 	res = Cvx (MakeObject (Operator));
X 	res.u.Operator = op = (struct op_struct *) Malloc (sizeof (struct op_struct));
X	
X	op->name	= NameFrom (name);
X	op->fn		= fn;
X 	op->arguments	= arguments;
X 	op->results	= results;
X 	op->execpop	= execpop;
X 	op->execpush	= execpush;
X 	
X 	op->argtypes = (Type *) Malloc ((unsigned) sizeof (Type) * arguments);
X 	
X 	for (i = 0; i < arguments; i++)
X 		op->argtypes[i] = (&arg1)[i];
X 	
X 	return res;
X }
X
X/*VARARGS6*/
X/*ARGSUSED*/
XInstallOp (name, fn, arguments, results, execpop, execpush, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
X		char *name;
X		int (*fn)(), arguments, results, execpop, execpush;
X		Type arg1, arg2, arg3, arg4, arg5, arg6, arg7;
X {
X 	Object res;
X 	struct op_struct *op;
X 	int i;
X 	res = Cvx (MakeObject (Operator));
X 	res.u.Operator = op = (struct op_struct *) Malloc (sizeof (struct op_struct));
X	
X	op->name	= NameFrom (name);
X	op->fn		= fn;
X 	op->arguments	= arguments;
X 	op->results	= results;
X 	op->execpop	= execpop;
X 	op->execpush	= execpush;
X 	
X 	op->argtypes = (Type *) Malloc ((unsigned) sizeof (Type) * arguments);
X	
X/* 	for (i = 0; i < arguments; i++)
X 		op->argtypes[i] = (&arg1)[i];
X */	switch (arguments)
X 	 {
X 	 	default:
X 	 		Panic ("too many arguments in InstallOp");
X 	 		break;
X 	 	case 7: op->argtypes[6] = arg7;
X 		case 6: op->argtypes[5] = arg6;
X 		case 5: op->argtypes[4] = arg5;
X 		case 4: op->argtypes[3] = arg4;
X 		case 3: op->argtypes[2] = arg3;
X 		case 2: op->argtypes[1] = arg2;
X 		case 1: op->argtypes[0] = arg1;
X 		case 0: break;
X 	 }
X	DictStore (SysDict, NameOperator (res), res);
X }
X
X/*VARARGS7*/
X/*ARGSUSED*/
XTypeInstallOp (type, name, fn, arguments, results, execpop, execpush, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
X		char *name;
X		int (*fn)(), arguments, results, execpop, execpush;
X		Type type, arg1, arg2, arg3, arg4, arg5, arg6, arg7;
X {
X 	Object res;
X 	struct op_struct *op;
X 	int i;
X 	
X 	res = Cvx (MakeObject (Operator));
X 	res.u.Operator = op = (struct op_struct *) Malloc (sizeof (struct op_struct));
X	
X	op->name	= NameFrom (name);
X	op->fn		= fn;
X 	op->arguments	= arguments;
X 	op->results	= results;
X 	op->execpop	= execpop;
X 	op->execpush	= execpush;
X 	
X 	op->argtypes = (Type *) Malloc ((unsigned) sizeof (Type) * arguments);
X 	
X 	for (i = 0; i < arguments; i++)
X 		op->argtypes[i] = (&arg1)[i];
X 	
X 	TypeInstall (type, name, res);
X }
X
Xstatic struct op_struct *Body (item) Object item;
X {
X 	return item.u.Operator;
X }
X
X#define Body(op)	((op).u.Operator)
X
Xstatic int Eq (a, b) Object a, b;
X {
X 	return Push (OpStack, MakeBoolean (Body (a) == Body (b)));
X }
X
XObject NameOperator (item) Object item;
X {
X 	return Body (item)->name;
X }
X
X#define NameOperator(op)	((op).u.Operator->name)
X
Xstatic int Cvs (v, string) Object v, string;
X {
X 	Object vv;
X 	int length;
X 	
X 	vv = NameOperator (v);
X 	
X	if (lengthString (string) < (length = lengthName (vv)))
X		return Error (PRangeCheck);
X	VOID strncpy (BodyString (string), BodyName (vv), length);
X	return Push (OpStack, getIString (string, 0, length));
X }
X
Xstatic int EqEq (v) Object v;
X {
X 	VOID Push (OpStack, NameOperator (v));
X 	VOID Push (ExecStack, Cvx (NameFrom ("==")));
X	return TRUE;
X }
X
X/*
X * Operator types.
X *
X *	PostScript has 200 or so operators which can be divided into groups by the
X *	arguments required.
X *
X *	The type Real 		causes an Integer argument to get floated.
X *	The type Unchecked 	causes an argument to be passed through whatever type it has.
X *	The type Number		causes all Number arguments to be Integer or Real
X *
X *	An operator object comprises several pieces of information:
X *
X *	1	Number of arguments required
X *	2	Number of results which may be returned
X *	3	Number of items required on the ExecStack
X *	4	Number of items added to the ExecStack
X *	5	A List of argument types
X *
X *	Functions requiring strange arguments can declare themselves to take few
X *	arguments and then use some directly from the OpStack.
X *
X *	The first four arguments are only required for checking Stack over and underflow,
X *	thus operators are not required to hold to their requests.
X *
X *	After resolving any peculiar type rules, Exec will lookup the operator name in the type
X *	dictionary for the argument type which is specified as being the controlling argument.
X *	The operator will receive the correct number of arguments and will be expected to stack
X *	its own results. There will be a fixed maximum limit of the number of arguments an operator
X *	can declare for itself. This is likely to be the maximum that PostScript uses, i.e. 6 or 7.
X *
X */
X
Xint ExecOperator (item) Object item;
X {
X	struct op_struct *op = Body (item);
X	int i, res, (*fn)() = op->fn;
X	Object arg[7];
X	
X	Self = NameOperator (item);
X	     if (op->results	> MaxStack (OpStack)   - Height (OpStack))	return Error (POpOverflow);
X	else if (op->execpush	> MaxStack (ExecStack) - Height (ExecStack))	return Error (PExecOverflow);
X	else if (op->arguments  > Height   (OpStack))				return Error (POpUnderflow);
X	else if (op->execpop	> Height   (ExecStack))				return Error (PExecUnderflow);
X	
X	for (i = op->arguments - 1; i >= 0; i--)
X		arg[i] = Pop (OpStack);
X	for (i = op->arguments - 1; i >= 0; i--)
X	 {
X	 	Type formal = op->argtypes[i], actual = TypeOf (arg[i]);
X	 	
X	 	if (formal == Float && actual == Integer)
X 	 		arg[i] = RealInteger (arg[i]);
X		if (formal == actual ||
X				formal == Poly ||
X				formal == Float &&
X					(actual == Integer || actual == Real))
X	 	 	continue;
X	 	for (i = 0; i < op->arguments; i++)
X			VOID Push (OpStack, arg[i]);
X		return Error (PTypeCheck);
X	 }
X	
X	/*if (setjmp (env))
X	 	res = Error (PUnResult);
X	else */
X		switch (op->arguments)
X		 {
X		 	case 0: res = (*fn) (); break;
X		 	case 1: res = (*fn) (arg[0]); break;
X		 	case 2: res = (*fn) (arg[0], arg[1]); break;
X		 	case 3: res = (*fn) (arg[0], arg[1], arg[2]); break;
X		 	case 4: res = (*fn) (arg[0], arg[1], arg[2], arg[3]); break;
X		 	case 5: res = (*fn) (arg[0], arg[1], arg[2], arg[3], arg[4]); break;
X		 	case 6: res = (*fn) (arg[0], arg[1], arg[2], arg[3], arg[4], arg[5]); break;
X		 	case 7: res = (*fn) (arg[0], arg[1], arg[2], arg[3], arg[4], arg[5], arg[6]); break;
X		 	
X		 	default: Panic ("primitve with too many arguments");
X		 }
X	 	/*	res = (*fn) (arg[0], arg[1], arg[2], arg[3], arg[4], arg[5], arg[6]);	*/
X	
X	if (!res)
X		for (i = 0; i < op->arguments; i++)
X			VOID Push (OpStack, arg[i]);
X	return res;
X }
X
Xstatic int Signature (op) Object op;
X {
X	Object tn;
X 	struct op_struct *ops = Body (op);
X 	int i;
X 	
X 	tn = NameFrom ("type");
X 	if (!OpCheck (0, ops->arguments + 1))
X 		return FALSE;
X 	for (i = 0; i < ops->arguments; i++)
X 		VOID Push (OpStack, Lookup (ops->argtypes[i], tn));
X 	VOID Push (OpStack, MakeInteger (ops->arguments));
X 	VOID Push (OpStack, MakeInteger (ops->results));
X 	
X 	return TRUE;
X }
END_OF_FILE
if test 8110 -ne `wc -c <'source/operator.c'`; then
    echo shar: \"'source/operator.c'\" unpacked with wrong size!
fi
# end of 'source/operator.c'
fi
echo shar: End of archive 6 \(of 18\).
cp /dev/null ark6isdone
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