bl791's picture
download
raw
19.1 kB
%!
%%Title: ADMAP -- Adventure Map utility, v2.56 (c) Fredric Ihren
%%CreationDate: Sep 24 1990
%%Creator: Fredric Ihren, fred@nada.kth.se
%%EndComments
% v2.56: Adjusted to run under ralpage : redefinition of token and removal
% of null cvx
(ADMAP v2.56\n) print flush
% Initstate of dictstack
/dictlevel0 countdictstack def
% Synonyms for operators
/+ /add load def
/- /sub load def
/* /mul load def
/: /div load def
/rl /rlineto load def
/cp /currentpoint load def
/m /moveto load def
/rm /rmoveto load def
/token {
dup length 0 ne {
dup 0 get 37 ne {
{ token } stopped { pop false } { 3 -1 roll cvlit 3 1 roll } ifelse
} { pop false } ifelse
} { pop false } ifelse
} bind def
% Simple macros
% /cm { 2.54 : 72 * } def
/++ { dup load 1 + store } def
/setup? { /resetmatrix know not { (No SETUP) error } if } def
/imatrix { resetmatrix setmatrix } def
/XT { XW D + } def
/YT { YW D + } def
/XWM { XW SC * 0.9 * } def
/UDH { D 0.35 * } def
/UDB { UDH 0.5 * } def
/at { YW0 D + * } def
/alt {
/XW ALTXW dup 0 eq { pop XW } if store
/YW ALTYW dup 0 eq { pop YW } if store
} def
/normal { /XW XW0 store /YW YW0 store } def
/dir { /DIR exch def /PP load dup 0 cp pop put 1 cp exch pop put } def
/adx { ALTXW XW0 - 2 : XT : abs } def % Half the difference in width/height
/ady { ALTYW YW0 - 2 : YT : abs } def % between a box and an altbox./
/set { /do exch store /go exch store } def
/go {} def
/do {} def
/sf { dup currentfont exch scalefont setfont /FS exch FS mul store } def
% Variable defaults
/R# 0 def /PR# -1 def /ERR# 0 def /lin 0 def /Q true def
/XMIN 999 def /XMAX -999 def /YMIN 999 def /YMAX -999 def
/$L 100 string def /$N 40 string def
/PP { 0 0 m } def /roomp { 0 0 } def /origop { 0 0 } def
% Setup Defaults
/XW 0.7 def
/YW 0.5 def % Note: 0 means determine from YN
/XW0 XW def /YW0 YW def
/XN 12 def
/YN 0 def % Note: 0 means determine from YW
/ROT? false def
/DBUG? true def
/XOFFS 0 def
/YOFFS 0 def
/FS0 6 def
/FS 6 def
/Times-Roman findfont FS scalefont setfont
/ALTXW 0 def
/ALTYW 0 def
% Synonyms
/ALTBOXWIDTH /ALTXW cvx def
/ALTBOXHEIGHT /ALTYW cvx def
/BOXWIDTH /XW0 cvx def
/BOXHEIGHT /YW0 cvx def
% Procedures
/cbox { 0 1 index rl exch 0 rl neg 0 exch rl closepath } def
/crcx { dup stringwidth pop -0.5 * 0 rm } def
/left { dup stringwidth pop neg 0 rm } def
/know { currentdict exch known } def
/autoshrink {
dup stringwidth pop dup XWM le { pop }
{ currentfont [ XWM 3 index : 0 0 1 0 0 ] makefont setfont pop }
ifelse
} def
/numcheck {
type dup /integertype eq exch /realtype eq or not
{ (No number) error } if
} def
/cvr1d { 10 mul round 0.1 mul dup dup cvi sub 0 eq { cvi } if } def
/getnum {
line token not { (Number missing) error } if
dup numcheck exch /line exch def
} def
/linenum {
line cvx { exec } stopped { (Syntax) error } if
count 1 ne { (One number expected) error } if
dup numcheck
} def
/gettoken {
line token not { (Name missing) error } if
cvlit exch /line exch def
} def
% Procedures for room-definitions
/rooms 300 dict def
/roomdict 50 dict dup begin
/n { YT + } def
/e { exch XT + exch } def
/s { YT - } def
/w { exch XT - exch } def
/ne { n e } def
/nw { n w } def
/sw { s w } def
/se { s e } def
/n# { at + } def
/e# { 3 -1 roll exch XT * + exch } def
/s# { neg n# } def
/w# { neg e# } def
/dash { [ 1 1 ] 0 setdash } def
/@nw { { 0.2 FS * YW SC * FS 0.9 * - rm } {} set } def
/@n { { XW SC * 0.5 * YW SC * FS 0.9 * - rm } /crcx load set } def
/@ne { { XW SC * 0.2 FS * - YW SC * FS 0.9 * - rm } /left load set } def
/@w { { 0.2 FS * YW SC * FS l# * + 0.5 * 0.8 FS * - rm } {} set
} def
/@center { { XW SC * 0.5 * YW SC * FS l# * + 0.5 * 0.8 FS * - rm }
/crcx load set } def
/@e { { XW SC * 0.2 FS * - YW SC * FS l# * + 0.5 * 0.8 FS * - rm }
/left load set } def
/@sw { { 0.2 FS * 0.2 FS * l# 1 - FS * + rm } {} set } def
/@s { { XW SC * 0.5 * 0.1 FS * l# 1 - FS * + rm } /crcx load set } def
/@se { { XW SC * 0.2 FS * - 0.2 FS * l# 1 - FS * + rm } /left load set } def
/@NW { { 0 YW SC * 0.2 FS * + l# 1 - FS * + rm } {} set } def
/@N { { XW SC * 0.5 * YW SC * FS 0.2 * + l# 1 - FS * + rm } /crcx load set
} def
/@NE { { XW SC * YW SC * 0.2 FS * + l# 1 - FS * + rm } /left load set } def
/@SW { { 0 FS neg rm } {} set } def
/@S { { XW SC * 0.5 * FS neg rm } /crcx load set } def
/@SE { { XW SC * FS neg rm } /left load set } def
/@EN { { XW SC * 0.2 FS * + YW SC * FS - rm } {} set } def
/@E { { XW SC * 0.2 FS * + YW SC * FS l# * + 0.5 * 0.8 FS * - rm }
{} set } def
/@ES { { XW SC * 0.2 FS * + l# 1 - FS * rm } {} set } def
/@WN { { -0.2 FS * YW SC * FS - rm } /left load set } def
/@W { { -0.2 FS * YW SC * FS l# * + 0.5 * 0.8 FS * - rm } /left load set
} def
/@WS { { -0.2 FS * l# 1 - FS * rm } /left load set } def
end def
% Procedures for exit-definitions
/exitdict 50 dict dup begin
/n# { D * 3 1 roll YW + exch XW 0.5 * + exch m 0 dir 0 exch rl cp } def
/n { 0.5 n# } def
/N# { YT * 0 exch rl pop pop cp } def
/N { 1 N# } def
/w# { D * 3 1 roll YW 0.5 * + m 2 dir neg 0 rl cp } def
/w { 0.5 w# } def
/W# { neg E# } def
/W { 1 W# } def
/s# { D * 3 1 roll exch XW 0.5 * + exch m 4 dir 0 exch neg rl cp } def
/s { 0.5 s# } def
/S# { neg N# } def
/S { 1 S# } def
/e# { D * 3 1 roll exch XW + exch YW 0.5 * + m 6 dir 0 rl cp } def
/e { 0.5 e# } def
/E# { XT * 0 rl pop pop cp } def
/E { 1 E# } def
/nw# { dup D * neg exch D * 4 2 roll YW + m 1 dir rl cp } def
/nw { 0.5 nw# } def
/NW# { dup XT * neg exch YT * rl pop pop cp } def
/NW { 1 NW# } def
/sw# { dup D * neg exch D * neg 4 2 roll m 3 dir rl cp } def
/sw { 0.5 sw# } def
/SW# { neg NE# } def
/SW { 1 SW# } def
/se# { dup D * exch D * neg 4 2 roll exch XW + exch m 5 dir rl cp } def
/se { 0.5 se# } def
/SE# { dup XT * exch YT * neg rl pop pop cp } def
/SE { 1 SE# } def
/ne# { dup D * exch D * 4 2 roll exch XW + exch YW + m 7 dir rl cp} def
/ne { 0.5 ne# } def
/NE# { dup XT * exch YT * rl pop pop cp } def
/NE { 1 NE# } def
/NS { pop 1 index lineto cp } def
/EW { exch pop 2 index exch lineto cp } def
/u {
gsave newpath PP DIR 45 * rotate
-0.5 UDB * UDH rl UDB 0 rl closepath fill grestore
} def
/d { gsave newpath PP DIR 45 * rotate
-0.5 UDB * 0 rl 0.5 UDB * UDH rl UDB 0.5 * UDH neg rl
closepath fill grestore
} def
/closed { gsave cp newpath m
DIR 45 * rotate -0.2 D * 0 rmoveto 0.4 D * 0 rl stroke
grestore
} def
/oneway {
gsave newpath PP DIR 45 * rotate
-0.2 D * 0.3 D * rl 0.2 D * -0.3 D * rl
0.2 D * 0.3 D * rl stroke
grestore
} def
/? {
gsave imatrix
DIR 0 eq DIR 1 eq DIR 7 eq or or { 0 FS 0.2 * rm } if
DIR 2 eq DIR 6 eq or { 0 FS0 0.3 * neg rm } if
DIR 3 eq DIR 4 eq DIR 5 eq or or { 0 FS neg rm } if
DIR 1 eq DIR 2 eq DIR 3 eq or or { FS -0.6 * 0 rm } if
DIR 5 ge { FS 0.1 * 0 rm } if
DIR 0 eq DIR 4 eq or { (?) stringwidth pop -0.5 * 0 rm } if
(?) show
grestore
} def
/dash { [ 1 SC : dup ] 0 setdash } def
end def
% Command procedures
/commands 25 dict dup begin
/SETUP {
endpage /PR# 0 def
/origmatrix know
{ origmatrix setmatrix }
{ /origmatrix matrix currentmatrix def }
ifelse
/LLX know not {
/LLX 45 def /LLY 23 def /URX 570 def /URY 793 def
} if % Default page area in enter-matrix coordinates
ROT? {
/LLX 24 def /LLY 30 def /URX 818 def /URY 540 def % 22,28
90 rotate 0 -598 translate
} if % Page area for rotated in (enter-matrix)-rot coordinates
/resetmatrix matrix currentmatrix def
LLX LLY translate
/YH URY LLY - def /XH URX LLX - def
0 setlinewidth 0 0 m XH YH cbox
clip newpath
/SC XH XN : def
/D 1 XW - def
YN 0 eq YW 0 eq and { /YW XW def } if
YN 0 eq { /YN YH SC : YT : cvi def } if
YW 0 eq { /YW YH SC : YN : D - def } if
/XW0 XW def /YW0 YW def
SC dup scale D 2 : dup translate
DBUG? {
(D:) print D $N cvs print (,SC:) print SC $N cvs print (,YW:) print
YW $N cvs print (,YN:) print YN $N cvs print (,XW:) print
XW $N cvs print (,XN:) print XN = flush
% 0 0 m XN 1 - XW + YN 1 - at YW + cbox
% gsave imatrix [ 1 4 ] 0 setdash stroke grestore
} if
newpath XOFFS neg YOFFS neg at translate
} def
/ROTATE { /ROT? true def } def
/WIDTH { linenum /XN exch def } def
/HEIGHT { linenum /YN exch def /YW 0 def } def
/OFFSET { /XOFFS getnum def /YOFFS getnum def } def
/BOXWIDTH { linenum /XW exch def } def
/BOXHEIGHT { linenum /YW exch def /YN 0 def } def
/ALTBOXHEIGHT { linenum /ALTYW exch def } def
/ALTBOXWIDTH { linenum /ALTXW exch def } def
/ROOM {
PR# 0 lt { commands /SETUP get exec } if
/room gettoken def
/fullname room $N cvs def
/R# ++
rooms room /origop load put % Unsuccessfull rooms end up at origo
line token {
exch pop dup type /stringtype eq
{ /fullname exch def gettoken }
if pop
} { (Syntax) error } ifelse
gsave
place
/roomp load dup 1 4 -1 roll put 0 3 -1 roll put
clear
roomp dup YMIN lt { dup /YMIN exch def } if
dup YMAX gt { dup /YMAX exch def } if
pop dup XMIN lt { dup /XMIN exch def } if
dup XMAX gt { dup /XMAX exch def } if pop
rooms room [ roomp ] cvx put
/names [
{ fullname (/) search
{ exch pop exch /fullname exch def }
{ exit }
ifelse
} loop
] def
gsave
roomp m
gsave XW YW cbox gsave 1 setgray fill grestore
imatrix 0.5 setlinewidth stroke grestore
XW 0.5 * YW rm
imatrix 0 YW SC * FS names length * - 0.5 * 0.8 FS * + neg rm
names { gsave autoshrink crcx show grestore 0 FS neg rmoveto } forall
grestore
grestore
% Test for on-page: (incomplete)
roomp YT : dup YOFFS lt exch YOFFS YN + ge or
exch dup XOFFS lt exch XOFFS XN + ge or or not { /PR# ++ } if
} def
/R /ROOM load def
/EXIT { setup?
gsave
rooms begin exitdict begin
clear line cvx { exec } stopped { grestore (Syntax) error } if
end end
count 4 ge { pop pop lineto } if
stroke
grestore
} def
/TEXT { setup?
/keep save def
/$T $L length string def
roomdict /@nw get exec
gsave
place m clear imatrix
{ currentfile $T readline {
/lin ++
dup token { /ENDTEXT eq { pop pop exit } if pop } if
dup length string copy
} { pop exit } ifelse
} loop
count /l# exch def
/notext know { /do { pop () } def } if
count -1 2 { 1 roll } for
go
{ count 0 eq { exit } if
gsave do show grestore 0 FS neg rm
} loop
grestore
keep restore
} def
/INDEX { setup?
gsave
roomdict /@nw get exec
/fullname gettoken dup type /stringtype ne { $N cvs } if def
place m clear imatrix 0.67 sf
/l# 1 def
/notext know { /do { pop () } def } if
fullname go do show
grestore
} def
/XPS {
line token
{ pop pop line cvx exec }
{ pop currentfile token { exec } if }
ifelse
} def
/CREATOR { /creatorinfo line dup length string copy def } def
/TITLE { /titleinfo line dup length string copy def } def
/TIME { /timeinfo line dup length string copy def } def
/FONTSIZE {
/FS0 getnum def
/Times-Roman findfont FS0 gsave
/resetmatrix know { imatrix } if
scalefont
grestore setfont
} def
/NULL { /#copies 0 def } def
/NOTEXT { /notext true def } def
/END { /endexit /exit load def /Q false def stop } def
end def
/place {
rooms begin roomdict begin
clear line cvx { exec } stopped { grestore (Syntax) error } if
end end
count 2 ne { grestore (Number missing) error } if
2 copy numcheck numcheck
} def
% Parser procedures
/error { whaterror /Q false def stop } def
/whaterror {
newpath
countdictstack dictlevel0 - { end } repeat
/ERR# ++
dup print ( error at line ) print lin =
gsave
/resetmatrix know { imatrix LLX 2 + URY } { 47 790 } ifelse
ERR# 1 + FS * 2 * 2 * - m 2 2 scale
gsave (ADMAP v2.56. ) show show ( error at line ) show lin $N cvs show
/$error where {
pop $error begin newerror {
( ) show errorname $N cvs show ( : ) show /command load $N cvs show
(>) print errordict /handleerror get exec
} if
end
} if
grestore 0 FS neg rm (") show oline show (") show
(") print oline print ("\n) print
grestore
} def
/process {
dup dup /line exch def /oline exch def
% (Received ") print oline print (": ) print
token {
dup commands exch known
{ cvlit /cmd exch def /line exch def }
{ pop pop /cmd /EXIT def }
ifelse
/FS FS0 store
clear commands cmd get exec
} if
} def
/endpage {
PR# 0 gt {
/endpagedict know not { /endpagedict 1 dict def } if
gsave imatrix initclip
/Courier-Bold findfont 7 scalefont setfont
/WX (X) stringwidth pop def
URX URY 4 + m
-34 WX * 0 rm cp cp
(Extents of map : ) show (\() show XMIN cvr1d $N cvs show (,) show
YMIN YW0 D + : cvr1d $N cvs show (\) to \() show XMAX cvr1d $N cvs show
(,) show YMAX YW0 D + : cvr1d $N cvs show (\)) show
m 0 7 rm cp
(Extents of page: ) show (\() show XOFFS cvr1d $N cvs show (,) show
YOFFS $N cvs show (\) to \() show XN XOFFS + 1 - cvr1d $N cvs show
(,) show YN YOFFS + 1 - cvr1d $N cvs show (\)) show
DBUG? {
(Extents of map : ) print (\() print XMIN cvr1d $N cvs print (,) print
YMIN YW0 D + : cvr1d $N cvs print (\) to \() print XMAX cvr1d $N cvs
print (,) print YMAX YW0 D + : cvr1d $N cvs print (\)\n) print
(Extents of page: ) print (\() print XOFFS cvr1d $N cvs print (,)
print YOFFS $N cvs print (\) to \() print XN XOFFS + 1 - cvr1d $N cvs
print (,) print YN YOFFS + 1 - cvr1d $N cvs print (\)\n) print
} if
m 0 7 rm
/timeinfo know {
(Time: ) show
endpagedict begin
/XWM 27 WX * def
gsave timeinfo autoshrink show grestore
end
} if
m -24 WX * 0 rm cp cp
(Locations on map : ) show R# $N cvs show
m 0 7 rm cp
(Locations on page: ) show PR# $N cvs show
m 0 7 rm
/creatorinfo know {
(Creator: ) show
endpagedict begin
/XWM 12 WX * def
gsave creatorinfo autoshrink show grestore
end
} if
m
/titleinfo know {
endpagedict begin
cp pop LLX - dup WX - /XWM exch def -0.5 * 2 rm
gsave
/Times-Bold findfont 20 scalefont setfont
titleinfo autoshrink crcx show
grestore
end
} if
0 setlinewidth LLX LLY m XH YH cbox stroke
grestore showpage
} if
} def
/endexit null cvx def
{
{
{ currentfile $L readline
{ /lin ++ process }
{ exit }
ifelse
} loop
}
exec false % stopped
{ Q { (Internal) whaterror /Q true def } if endexit }
{ exit }
ifelse
}
{ loop endpage (Done.\n) print }
exec
ROTATE
WIDTH 18
HEIGHT 14
BOXWIDTH 0.7
SETUP
TITLE The Curse of Eldor
R villhall (Village/Hall) 10 4 at
R village (Village) villhall w
village e villhall w
R grave (Graveyard) village s
village s grave n
R crypt (Crypt) grave e
crypt w grave e
R church (Church) village w
church e village w
R clock (Clock/Tower) church w
church w clock e u
R road (Road) village n
road s village n
R rivereast (River Bank/East) road e
rivereast w road e
R riverwest (River Bank/West) road w
riverwest e road w
R bridge (Wooden/Bridge) road n
road n bridge s
R groad (Great Eastern/Road) riverwest w
riverwest w groad e
R outskirts (Village/Outskirts) groad w
outskirts e groad w
R main (Main/Street) outskirts w
main e outskirts w
R dock (Dock) main w
dock e main w
R ddeck (Ship's Deck/Docked) dock w
ddeck e closed dock w
R stern (Stern) ddeck n
stern s ddeck n
R sdeck (Ship's Deck/At Sea) stern n
ddeck ne dash sdeck se oneway
R store (Storage/Area) dock s
dock s store n
R house (Boat/House) store e
house w store e
R tavern (The Angler's/Rest) main n
main n tavern s
R fire (By the/Fire) tavern w
fire e tavern w
R bar (Bar) tavern n
bar s tavern n
R cellar (Cellar) bar w
cellar e bar w u
R ford (Ford) riverwest n
riverwest n ford s
R clearing (Clearing) ford w
ford w clearing e
R ruins (Ruins) clearing n
ruins s clearing n
R pit (Pit) clearing w
pit e oneway clearing w u
R bow (Bow) ddeck s
ddeck s bow n
R galley (Galley) ddeck w
galley e ddeck w u
R cabin (Captain's/Cabin) galley s
cabin n galley s
R hold (Hold) galley n
hold s galley n
R nest (Crow's/Nest) cabin s
ddeck sw nest ne u
R river (In River) rivereast n
river s rivereast n
R beneath (Beneath/Waterfall) river e
river e beneath w
R waterfall (Waterfall) beneath s
rivereast e waterfall w
beneath s waterfall n
R behind (Behind/Waterfall) beneath e
beneath e behind w
R path (Forest/Path) bridge n
path s bridge n
R forest (Forest) path e
path e forest w
R thouse (Tree/House) forest e
forest e thouse w u
R platform (Platform) thouse e
thouse e platform w u
R junction (Junction) path n
junction s path n
R trackeast (Track/East) junction e
trackeast w junction e
R endtrack (End of/Track) trackeast e
trackeast e endtrack w
R trackwest (Track/West) junction w
junction w trackwest e
R field (Grassy/Field) trackwest w
field e trackwest w
R cabin (Log/Cabin) field w
cabin e field w
R loft (Loft) cabin w
loft e u cabin w
R trail (Trail) junction n
trail s junction n
R mountains (Mountains) trail n
trail n mountains s u
R courtyard (Courtyard) mountains e
mountains e courtyard w
R dungeon (Dungeon) courtyard n
dungeon s courtyard n u
R armoury (Armoury) dungeon w
armoury e dungeon w
R cell (Cell) dungeon e
cell w dungeon e
R study (Study) cell e
R tower (Tower) study s
courtyard e tower w
tower n closed study s u
R laboratory (Laboratory) tower s
laboratory n closed tower s u
R alcove (Alcove) laboratory e
alcove w closed laboratory e
R mpath (Mountain/Path) mountains w
mpath e mountains w
R ledge (Rocky/Ledge) mpath n
ledge s mpath n u
R tunnel (Tunnel) ledge w
tunnel e ledge w
R lair (Dragon's/Lair) tunnel w
lair e tunnel w
R balcony (Balcony) courtyard s
courtyard s balcony n
R cballoon (Balloon/On Balcony) balcony e
balcony e cballoon w u
R mballoon (Balloon/Over Mountains) trail w
mballoon se dash cballoon sw oneway
R fballoon (Balloon/Over Forest) field n
fballoon se dash mballoon sw oneway
R sballoon (Balloon/Over Sea) cabin n
sballoon se dash fballoon sw oneway
R hballoon (Hot Air/Balloon) sballoon w
hballoon se dash sballoon sw oneway
R beach (Beach) hballoon w
beach e hballoon w u
R cdeck (Ship's Deck/In Cove) beach w
cdeck se oneway sdeck ne dash
cdeck e beach w
R island (Island) beach n
beach n island s
R cave (Cave) island e
island e closed cave w
R cliff (Balloon/Crashed) alcove e
mballoon se dash cliff sw oneway
R bbridge (Beneath/Bridge) 15 6 at
R drain (Drain) bbridge s
drain n bbridge s
R bvillage (Beneath/Village) drain s
drain s bvillage n
bbridge e oneway
bbridge w oneway
river w oneway
ford e oneway

Xet Storage Details

Size:
19.1 kB
·
Xet hash:
389aced338fdb4c5369a2f94b7375656ce2472082951b271867d97141c37813e

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.