move unmaintained files into outdated folder
If an old port is resurrected to work with current version code, its files can be relocated to the appropriate sys or win folder as required. In the meantime, the burden of upkeep can be avoided for the stuff in the outdated folder for now.
This commit is contained in:
2
outdated/sys/amiga/.gitattributes
vendored
Normal file
2
outdated/sys/amiga/.gitattributes
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
*.p NHSUBST
|
||||
* NH_filestag=(file%s_for_Amiga_versions_-_untested_for_3.7)
|
||||
140
outdated/sys/amiga/Build.ami
Normal file
140
outdated/sys/amiga/Build.ami
Normal file
@@ -0,0 +1,140 @@
|
||||
|
||||
Compiling Amiga NetHack 3.4
|
||||
Last Revision: 21 February 2002 for NetHack 3.4.1
|
||||
|
||||
|
||||
We would like to thank each and every one of the people who took
|
||||
the time and effort to report bugs to us. THANK YOU! (And keep
|
||||
up the good work!)
|
||||
|
||||
I. Introduction
|
||||
|
||||
The Amiga-specific documentation has been split since the 3.1.3 release
|
||||
- please read the file Install.ami for information specific to the
|
||||
Amiga port before continuing.
|
||||
|
||||
If you have problems with compilation, installation, or think you have
|
||||
found a bug in the game, please report it by electronic mail to the
|
||||
development group at nethack-bugs@nethack.org, where it will be routed
|
||||
to the appropriate person. Include your configuration, the version of
|
||||
NetHack you are playing (use the 'v' command or see
|
||||
include/patchlevel.h), and as much specific information as possible.
|
||||
As NetHack runs on many different machines, be sure to mention that you
|
||||
are playing the Amiga version and also mention if you are using the
|
||||
version for mc68k or ppc.
|
||||
|
||||
If you want to find out about distributing NetHack, read the license
|
||||
(in NetHack:license or type ?i during the game).
|
||||
|
||||
II. Compiling Amiga NetHack 3.4
|
||||
|
||||
II.A. Compilation Overview
|
||||
Compiling NetHack is not very hard - basically you do a little
|
||||
configuration and start make. It does, however, require a good amount
|
||||
of disk space and time. It also needs a good bit of memory, especially
|
||||
for linking.
|
||||
|
||||
II.B. Basic Compilation
|
||||
|
||||
NetHack can be built with SAS/C version 6.5x. The commercial version
|
||||
of DICE might work, but NetHack version 3.2.2 or later haven't been
|
||||
compiled with it. The "official" compiler for NetHack 3.6 is SAS/C 6.58
|
||||
- we have dropped support for SAS/C 5.x.
|
||||
|
||||
The Manx/Aztec port has not been tested recently and is certainly
|
||||
broken. Anyone managing to compile NetHack with this compiler is
|
||||
encouraged to submit context diffs of the required changes. When last
|
||||
tested, NetHack required version 5.0B of that compiler.
|
||||
|
||||
Compiling with gcc should also work.
|
||||
|
||||
II.B.1. Introduction to Compiling NetHack
|
||||
Before doing any compilation, read the README files distributed with
|
||||
the source. These should familiarize you with the source tree layout
|
||||
and what files are shared with what computers; everything in the
|
||||
sys/amiga directory is used exclusively by the Amiga.
|
||||
|
||||
The makefile (sys/amiga/Makefile.ami) depends on certain assignments,
|
||||
providing the developer with a fairly flexible environment. See
|
||||
sys/amiga/Makefile.ami for assignment assumptions. DICE users should
|
||||
see section II.B.3 for information on creating a DMakefile usable with
|
||||
DMake.
|
||||
|
||||
Edit config.h to your liking and system configuration. The defaults
|
||||
should be satisfactory for most systems.
|
||||
|
||||
Read VERY CAREFULLY through the Makefile to familiarize yourself
|
||||
with which assignments are assumed. Otherwise, you're going to get
|
||||
something like "Insert NH: in any drive." You will need uudecode,
|
||||
and, if you need to modify dgn_comp or lev_comp, flex, and bison.
|
||||
The first thing Makefile.ami does is build makedefs, which handles
|
||||
a variety of data file generation, and then lev_comp and dgn_comp
|
||||
which compile the special levels. Makedefs will then be run to create
|
||||
a few files, followed by a roughly alphabetically sorted compilation
|
||||
of the entire source tree. This process will compile selected files
|
||||
from the sys/amiga, sys/share, win/tty, and src directories, eventually
|
||||
creating sbin/nethack. After building the main binary, a make install
|
||||
will build the auxiliary files including help files, special levels,
|
||||
icons, and the font files and will put these files into their final
|
||||
positions - most will be in dlb archives (if DLB was defined in config.h).
|
||||
The first make run should be done in NH:obj and the make install should be
|
||||
done in NetHack:; for both runs, the makefile is NH:sys/amiga/Makefile.ami
|
||||
(or NH:sys/amiga/DMakefile for DMake and NH:sys/amiga/Makefile.agc for
|
||||
gcc).
|
||||
|
||||
Note that not all the source is simple C code. If you are modifying
|
||||
lev_comp or dgn_comp you may need bison and/or flex (depending on what
|
||||
modifications you are making). You do not need any of these tools to
|
||||
simply build NetHack - all the C output files are provided in the source
|
||||
distribution. Also, the ifchange script requires a version of diff that
|
||||
produces standard Unix format context diffs for proper operation - the
|
||||
version shipped with SAS/C is not sufficient.
|
||||
|
||||
If you do not have bison and flex, copy the files from sys/share. The
|
||||
include files go in include/ and the C files go in util/. If the compile
|
||||
fails due to prototype errors for malloc and realloc, try deleting
|
||||
the first line of lev_comp.c and dgn_comp.c.
|
||||
|
||||
II.B.2. Compiling NetHack with SAS/C version 6.58
|
||||
|
||||
NOTE WELL - Amiga NetHack has dropped support for SAS/C version 5.
|
||||
This version of NetHack was developed with SAS/C 6.58. Earlier versions
|
||||
than version of the compiler are known to cause problems - don't use them.
|
||||
|
||||
A couple of notes and warnings from the SAS/C users on the team:
|
||||
|
||||
* Included in the SAS/C port is code for generating a SnapShot.tb
|
||||
file upon catching various internal disasters. That is why the
|
||||
debug=l flag is in the makefile. This adds about 270K to the disk
|
||||
image, but it does not increase the run time memory requirements.
|
||||
|
||||
* The 5.10b optimizer did not produce correct code for NetHack. The
|
||||
current optimizer has not been tested.
|
||||
|
||||
II.B.3. Compiling NetHack with the commercial version of DICE
|
||||
|
||||
IMPORTANT NOTE: If you are using DMake, you need to create DMakefile
|
||||
from Makefile.ami. Do the following:
|
||||
|
||||
cd NH:sys/amiga
|
||||
edit from Makefile.ami to DMakefile with mkdmake opt w255
|
||||
|
||||
Some versions of DMake have been known to crash horribly on the
|
||||
makefile - if this happens, you'll need to download another make
|
||||
utility, such as AMake (ftp://ftp.dragonfire.net/amiga/utils/amake),
|
||||
which will run in DMake-compatibility mode if invoked with the -C switch
|
||||
(e.g. "amake -C -f NH:sys/amiga/DMakefile", or just
|
||||
"alias dmake amake -C").
|
||||
|
||||
SECOND IMPORTANT NOTE: The score list is currently disabled when
|
||||
compiling under DICE, due to an as-yet-unknown problem which causes
|
||||
system crashes when displaying the score list.
|
||||
|
||||
NetHack can be compiled using the commercial version of DICE only. The
|
||||
registered shareware version had a bug in it which resulted in odd-
|
||||
aligned procedures. (It is possible to patch DC1 to fix this problem;
|
||||
however, this is not recommended, and you should upgrade to the
|
||||
commercial version.)
|
||||
|
||||
During compilation, DICE will output a lot of warnings; they can be
|
||||
safely ignored.
|
||||
200
outdated/sys/amiga/Install.ami
Normal file
200
outdated/sys/amiga/Install.ami
Normal file
@@ -0,0 +1,200 @@
|
||||
|
||||
Using and Installing Amiga NetHack 3.4
|
||||
(or Everything You Never Wanted to Know Before NetHacking)
|
||||
(or Not Everything That Happens Always Comes Knocking)
|
||||
|
||||
Last Revision: 28 March 2000 for NetHack 3.4.1
|
||||
|
||||
|
||||
0. Pre-intro for NetHack 3.4.1:
|
||||
Amiga-specific changes for 3.4.1:
|
||||
Most (around 99%) known bugs fixed (volunteers welcome).
|
||||
HackWB and HackCli are no longer supported. Use the main binary.
|
||||
|
||||
We would like to thank each and every one of the people who took
|
||||
the time and effort to report bugs to us. THANK YOU!
|
||||
|
||||
I. Introduction
|
||||
|
||||
I.A. Overview
|
||||
Welcome to Amiga NetHack! If this is your first visit to our fair
|
||||
city, you are in for an amazing but dangerous journey; if you have
|
||||
visited us before, beware! the city has changed in many strange and
|
||||
subtle ways; it has also grown quite a bit. This missive brings to
|
||||
light those mundane tasks which must be dealt with before beginning
|
||||
your journey; for those of you who are faced with the task of
|
||||
installing the pre-fabricated version of our town, section III
|
||||
(Installing Amiga NetHack 3.6) will guide you through the task at
|
||||
hand. If you are ready to visit, the local visitors guide is in
|
||||
section II (Using Amiga NetHack 3.6); please also see the general
|
||||
guide packaged separately (the file "GuideBook").
|
||||
|
||||
To all our visitors, a hearty Welcome! - and please be careful.
|
||||
|
||||
[Those responsible for the previous paragraphs have been sacked. The
|
||||
documentation has been completed at great expense in a more traditional
|
||||
style. -- The Management]
|
||||
|
||||
I.B. Getting Help
|
||||
If you have questions about strategy, weapons, or monsters, the best
|
||||
place to go for help is the Usenet newsgroup rec.games.roguelike.nethack.
|
||||
|
||||
If you have problems with installation or think you have found a bug
|
||||
in the game, please report it by electronic mail to the development
|
||||
team at nethack-bugs@nethack.org, where it will be routed to the
|
||||
appropriate person. Include your configuration, the version of
|
||||
NetHack you are playing (use the 'v' command), whether or not you are
|
||||
using an official binary release (and if so which one) and as much
|
||||
specific information as possible. As NetHack runs on many different
|
||||
machines, be sure to mention that you are playing the Amiga version.
|
||||
|
||||
I.C. Credits
|
||||
Olaf Seibert first ported NetHack 2.3 and 3.0 to the Amiga. Richard
|
||||
Addison, Andrew Church, Jochen Erwied, Mark Gooderum, Ken Lorber,
|
||||
Greg Olson, Mike Passaretti, and Gregg Wonderly polished and extended
|
||||
the 3.0 and 3.1 ports. Andrew Church, Ken Lorber, and Gregg Wonderly
|
||||
are responsible for the 3.2 port. Janne Salmijärvi resurrected the
|
||||
amigaport for 3.3 and Teemu Suikki joined before 3.4.0.
|
||||
|
||||
II. Using Amiga NetHack 3.4
|
||||
Run NetHack from the shell or from some tool that allows that,
|
||||
ie. ToolManager. See the NetHack.txt file for command line options
|
||||
and other usage.
|
||||
|
||||
II.A. Sources of Information
|
||||
Where to go depends on what you want to find out. If you want to find
|
||||
out about distributing NetHack, read the license (in NetHack:license
|
||||
or type ?i during the game). For an introduction to NetHack, read
|
||||
the GuideBook file. To find out what options are compiled into your
|
||||
copy of NetHack, type #v during the game. Finally, for information
|
||||
during the game on all kinds of things, type ? and select from the
|
||||
menu or by pressing Help key.
|
||||
|
||||
II.B. The Amiga NetHack WorkBench Front End
|
||||
Starting from 3.3.0 HackWB is not supported.
|
||||
|
||||
II.C. The Amiga NetHack CLI Front End
|
||||
Starting from 3.3.0 CLI Front end is not supported either.
|
||||
|
||||
Instead, use the main binary. See NetHack.txt file for the standard Unix
|
||||
flags for NetHack. In addition to those flags, Amiga NetHack accepts
|
||||
the flags -l to force non-interlaced mode and -L to force interlaced mode.
|
||||
|
||||
II.D. Amiga-Specific Information for NetHack
|
||||
|
||||
There are several options that are unique to the Amiga version of
|
||||
NetHack that may be specified in the NetHack.cnf file or on an
|
||||
OPTIONS line:
|
||||
|
||||
altmeta allows the ALT keys to function as META keys. The default
|
||||
is altmeta.
|
||||
flush flush discards all characters in the queue except the first,
|
||||
which limits typeahead accidents. The default is !flush.
|
||||
silent turn off the audio output. The default is silent.
|
||||
|
||||
The current version of Amiga NetHack also supports menu accelerators.
|
||||
See Guidebook.txt for a detailed description. Also supported is
|
||||
selecting the number of stacked objects to drop, used with the (D)rop
|
||||
command. Type the number and then select an item (or items with
|
||||
accelerators). Items with a count associated with them are denoted
|
||||
with # in place of -. I.e. 'd - 3 blessed daggers' becomes
|
||||
'd # 3 blessed daggers'. You can clear the count by hitting esc
|
||||
while counting or deselect and reselect the item. The default
|
||||
is to drop all selected items (as before).
|
||||
|
||||
For other options how to configure the screen setting and colors refer
|
||||
to Nethack.cnf.
|
||||
|
||||
III. Installing Amiga NetHack 3.4
|
||||
|
||||
III.A. General Installation
|
||||
Installation should be easy - basically it consists of putting files
|
||||
where they belong and adding an assign to your startup. If you are
|
||||
installing from the official binary distribution, simply unpacking
|
||||
the archive in the appropriate directory will put the files in the
|
||||
places they belong.
|
||||
|
||||
IF YOU ALREADY HAVE A PREVIOUS VERSION INSTALLED YOU MUST DELETE THE
|
||||
OLD SAVE AND BONES FILES - THEY WILL NOT WORK! This includes save
|
||||
and bones files from all previous versions of NetHack (yes, even 3.3.1).
|
||||
If you have a game in progress and want to finish it, use your
|
||||
current version and then update.
|
||||
|
||||
Will NetHack fit on your machine?
|
||||
NetHack 3.6 is large. NetHack 3.4 is very large. You will need:
|
||||
> Any standard series Amiga: 500, 600, 1000, 1200, 2000, 2500, 3000, 4000.
|
||||
> WorkBench 2.04 or later.
|
||||
> At least 3 meg of RAM. NetHack will NOT run in 1 meg (probably even 2).
|
||||
> Mass storage: A hard drive with over 3 meg of free space is highly
|
||||
recommended.
|
||||
|
||||
Hard Disk Installation:
|
||||
Unpack the archive to your place of choice. Since you are reading this
|
||||
you've probably done that already. Now just assign NetHack: to
|
||||
NetHack directory containing the executable and datafiles and other needed
|
||||
directories.
|
||||
|
||||
Use the table in the next section to see where things should end up.
|
||||
Be sure that the file 8 ends up in NetHack:hack/8.
|
||||
|
||||
Configuration
|
||||
Using your favorite text editor, edit NetHack:NetHack.cnf to match
|
||||
your system.
|
||||
|
||||
Create the save file directory (makedir NetHack:save) and the levels file
|
||||
directory (makedir NetHack:levels), if they don't already exist.
|
||||
|
||||
Create the score file (echo to NetHack:record) and, if desired, the log
|
||||
file (echo to NetHack:logfile), if they don't already exist. You may
|
||||
leave out logfile, but record is needed.
|
||||
|
||||
III.B. File Location Table
|
||||
NetHack:
|
||||
amii.hlp Guidebook.txt hack.font
|
||||
license NetHack NetHack.cnf
|
||||
NetHack.txt nhdat nhsdat
|
||||
record Recover Recover.txt
|
||||
logfile (optional, but useful)
|
||||
NetHack:hack
|
||||
8
|
||||
NetHack:tiles
|
||||
monsters.iff objects.iff other.iff
|
||||
|
||||
IV. BBS Interface
|
||||
|
||||
[Since HackCli and split binary is no longer supported the following
|
||||
probably doesn't apply anymore. Due to lack of a suitable environment
|
||||
it is also untested.]
|
||||
|
||||
The BBS mode is based on the standard NetHack tty port and is designed
|
||||
for use in a BBS setting - it is specifically not recommended for use
|
||||
on the console. The current TTY mode has changed significantly since
|
||||
the preliminary version released with 3.1.2. In particular, BBS mode
|
||||
now works with split binaries (only), and now supports multiple games
|
||||
in progress at the same time for multi-line boards (note however that
|
||||
any individual user should not be allowed to run two instances of
|
||||
NetHack at the same time).
|
||||
|
||||
To set up NetHack for use with a BBS, set OPTIONS=windowtype:tty
|
||||
and unset DUNGEONS, TRAPS, and EFFECTS in NetHack.cnf. Configure
|
||||
the BBS to expect I/O through stdin and stdout, and have NetHack
|
||||
invoked as:
|
||||
HackCLI :uid -u uname options...
|
||||
where uid is any string (without embedded spaces, colons, or slashes)
|
||||
that is unique for each BBS user and uname is some corresponding human-
|
||||
readable name for that user. Uid is used in constructing file names
|
||||
to prevent collisions between simultaneous games and to prevent
|
||||
people from using other people's save files. Uname is the name the
|
||||
character will have in the game and the name that will appear in the
|
||||
record file.
|
||||
|
||||
The terminal is assumed to be a 24x80 ANSI-compatible terminal.
|
||||
The present version does not deal with situations such as low
|
||||
memory gracefully - as NetHack uses a considerable amount of
|
||||
memory this is particularly painful with multiple games in
|
||||
progress. Sysops are reminded to be familiar with the recover
|
||||
utility, which may be needed from time to time and which should
|
||||
probably not be available directly to users. Bug reports and
|
||||
suggestions for improvements are requested from the user community -
|
||||
this is still considered alpha software.
|
||||
|
||||
1241
outdated/sys/amiga/Makefile.agc
Normal file
1241
outdated/sys/amiga/Makefile.agc
Normal file
File diff suppressed because it is too large
Load Diff
1578
outdated/sys/amiga/Makefile.ami
Normal file
1578
outdated/sys/amiga/Makefile.ami
Normal file
File diff suppressed because it is too large
Load Diff
213
outdated/sys/amiga/NetHack.cnf
Normal file
213
outdated/sys/amiga/NetHack.cnf
Normal file
@@ -0,0 +1,213 @@
|
||||
# A '#' at the beginning of a line means the rest of the line is a comment.
|
||||
|
||||
# This is an example configuration file.
|
||||
# If several people are to use it, don't specify "name" or personal
|
||||
# prefences like "dogname" or "packorder" in OPTIONS.
|
||||
|
||||
# To change configuration, comment out the unwanted configurations, and
|
||||
# remove the comment from the configuration you want.
|
||||
|
||||
# Some options to set personal preferences. If several people are to
|
||||
# use it, options like these should not be set here - use the command line
|
||||
#OPTIONS=name:Janet-V,female,dogname:Fido,fruit:apricot
|
||||
#OPTIONS=packorder:")[%?+/=!(*0_`,scores:10t/2a,noverbose
|
||||
#OPTIONS=gender:male
|
||||
#OPTIONS=role:random
|
||||
#OPTIONS=race:random
|
||||
#OPTIONS=align:chaotic
|
||||
# Other general options
|
||||
#OPTIONS=time,rest_on_space,noautopickup
|
||||
|
||||
# The search path for files like record, help, opthelp, etc.
|
||||
PATH=NetHack:
|
||||
|
||||
# My own setup
|
||||
#OPTIONS=nolegacy,fruit:lemon,time,autopickup,checkpoint,showexp,showscore,standout,nonews
|
||||
#OPTIONS=nomail,flush,eight_bit_tty,scores:10t/2a,pickup_types:$,suppress_alert:3.3.0,autoquiver
|
||||
|
||||
# The windowtype option must be set before any options regarding colors and palette
|
||||
# are set otherwise previously set values will be overridden by the defaults
|
||||
#
|
||||
# The font version of the game
|
||||
OPTIONS=windowtype:amii
|
||||
#
|
||||
# New tile version of the game
|
||||
#OPTIONS=windowtype:amitile
|
||||
#
|
||||
# A hard disk configuration.
|
||||
#
|
||||
HACKDIR=NetHack:
|
||||
LEVELS=Nethack:Levels
|
||||
SAVE=Nethack:Save
|
||||
BONESDIR=Nethack:Levels
|
||||
SCOREDIR=Nethack:
|
||||
LOCKDIR=Nethack:
|
||||
CONFIGDIR=Nethack:
|
||||
DATADIR=Nethack:
|
||||
TROUBLEDIR=Nethack:
|
||||
|
||||
# *** CHARACTER GRAPHICS ***
|
||||
#
|
||||
# See the on-line help or the Guidebook for which symbols are in which
|
||||
# positions.
|
||||
#
|
||||
# Note that the hack.font has special graphics characters from 192 on.
|
||||
|
||||
# An example using the hack.font graphics character set:
|
||||
DUNGEON = 032 192 193 194 195 196 197 198 216 214 \
|
||||
215 213 217 145 146 147 148 035 035 217 \
|
||||
218 229 060 062 060 062 095 124 092 035 \
|
||||
123 125 042 125 042 042 035 035 046 035 \
|
||||
125
|
||||
|
||||
TRAPS = 094 094 094 094 094 094 094 094 094 094 \
|
||||
094 094 094 094 094 094 094 034 094 094 \
|
||||
094 094
|
||||
|
||||
EFFECTS = 241 240 242 243 042 033 123 125 \
|
||||
064 038 042 035 \
|
||||
244 245 246 247 239 248 249 250 \
|
||||
230 234 231 236 212 237 232 235 233
|
||||
|
||||
WARNINGS = 048 049 050 051 052 053
|
||||
|
||||
# Monitors vary greatly in their color response. If the default colors
|
||||
# are not good on your monitor, here are some other alternatives for the
|
||||
# font version of the game:
|
||||
#
|
||||
# Last color of the palette is always used for the cursor.
|
||||
#
|
||||
#CBM 1960, set color/contrast for good pure red, green, and blue. True colors.
|
||||
#PENS=000,fff,a61,7bb,0f0,e0c,00f,f00
|
||||
#CBM 1960, set color/contrast as above, better colors for NetHack.
|
||||
#PENS=667,fff,da1,7bb,2f0,e0d,0af,f42
|
||||
#and other suggestions:
|
||||
#PENS=888,ffc,840,0b8,4e4,e8b,7be,a04
|
||||
#PENS=000,fff,830,7ae,181,c06,23e,c00
|
||||
#
|
||||
# For an "interlaced"+ line screen, the default font is courier:13. If you want
|
||||
# a different font, set it here. The format is "fontname.font:size"; i.e. the
|
||||
# .font extension is required.
|
||||
#FONT=courier.font:13
|
||||
#FONT=topaz.font:8
|
||||
#
|
||||
# Proportional fonts such as CGTimes are probably not a good idea because they
|
||||
# result in many things not being spaced out correctly.
|
||||
#FONT=CGTimes.font:15
|
||||
#
|
||||
# This sized proportional font is readable, but still has spacing problems
|
||||
#FONT=CGTimes.font:21
|
||||
#
|
||||
# FOR AGA OR OTHER DISPLAYS CAPABLE OF 5 OR MORE PLANES...
|
||||
#
|
||||
# For a screen of depth 5 the following dripens provide a brown border
|
||||
# using pens 16-31.
|
||||
#
|
||||
# Pens 16-31 can be redefined with PENS= if you want different colors,
|
||||
# using the PENS= values below for a 4 plane screen as the first 16 colors.
|
||||
#
|
||||
#DEPTH=5
|
||||
#DRIPENS=0,0,0,17,27,23,1,23,15,0,23,27
|
||||
#
|
||||
# The APEN and BPEN values in the various types of windows can be set in
|
||||
# the manner shown below. These values are for the 16 color version of
|
||||
# the tile game.
|
||||
#
|
||||
# These values are specified as APEN,BPEN (foreground,background)
|
||||
#
|
||||
#MSGPENS=1,12
|
||||
#STATUSPENS=1,12
|
||||
#MENUPENS=1,23
|
||||
#TEXTPENS=1,23
|
||||
#OTHERPENS=1,23
|
||||
#
|
||||
# FOR ECS OR OTHERS ONLY CAPABLE OF 4 PLANES...
|
||||
#
|
||||
# These values work good for the TILE version of the game on ECS machines
|
||||
# These are the default values for reference purposes.
|
||||
#
|
||||
#DEPTH=4
|
||||
#defaults for tilemode:
|
||||
#PENS=000,fff,0bf,f60,00f,090,69b,f00,6f0,ff0,f0f,940,466,c40,ddb,fb9
|
||||
#DRIPENS=0,1,0,2,4,12,14,12,7,1,12,4
|
||||
#defaults for fontmode:
|
||||
#PENS=000,fff,830,7ac,181,c06,23e,c00
|
||||
#DRIPENS=0,6,2,1,6,3,1,3,7,1,3,6
|
||||
#
|
||||
# The APEN and BPEN values in the various types of windows can be set in
|
||||
# the manner shown below. These values are for a 32 color version of
|
||||
# the tile game.
|
||||
#
|
||||
# These values are specified as APEN,BPEN (foreground,background)
|
||||
#
|
||||
#MSGPENS=1,12
|
||||
#STATUSPENS=1,12
|
||||
#MENUPENS=0,14
|
||||
#TEXTPENS=0,14
|
||||
#OTHERPENS=1,12
|
||||
#
|
||||
# New alternative color scheme for 16 color font mode.
|
||||
# This changes the colors of monsters, objects etc.
|
||||
#
|
||||
# FGPENS and BGPENS define APEN and BPEN for objects and monsters on the map.
|
||||
# The colors are in the following order:
|
||||
# black, red, green, brown, blue, magenta, cyan, gray, no color, orange,
|
||||
# bright green, yellow, bright blue, bright magenta, bright cyan, white
|
||||
#
|
||||
DEPTH=4
|
||||
PENS=000,fff,830,7ac,181,c06,23e,c00,888,f60,4f4,ff0,4af,f8f,8ff,f00
|
||||
FGPENS= 0, 7, 4, 2, 6, 5, 3, 8, 1, 9,10,11,12,13,14, 1
|
||||
BGPENS= 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||
#
|
||||
# Screen mode selections below should all work for either the font or tile
|
||||
# version of the game. Other modes can be tried and as long as they are at
|
||||
# least 640x200, the game should adapt to them...
|
||||
#
|
||||
# Select screenmode with a requester
|
||||
#SCREENMODE=Req
|
||||
# NTSC_MONITOR_ID
|
||||
#SCREENMODE=0x00019000
|
||||
# PAL_MONITOR_ID
|
||||
#SCREENMODE=0x00029000
|
||||
# NTSC_MONITOR_ID+LACE
|
||||
#SCREENMODE=0x00019004
|
||||
# PAL_MONITOR_ID+LACE
|
||||
#SCREENMODE=0x00029004
|
||||
# NTSC_MONITOR_ID+HIRES+LACE
|
||||
#SCREENMODE=0x00019024
|
||||
# PAL_MONITOR_ID+HIRES+LACE
|
||||
#SCREENMODE=0x00029024
|
||||
# VGA_MONITOR_ID
|
||||
#SCREENMODE=0x00031000
|
||||
# VGAPRODUCT_KEY
|
||||
#SCREENMODE=0x00039024
|
||||
# A2024TENHERTZ_KEY
|
||||
#SCREENMODE=0x00041000
|
||||
# A2024FIFTEENHERTZ_KEY
|
||||
#SCREENMODE=0x00049000
|
||||
# EURO72_MONITOR_ID
|
||||
#SCREENMODE=0x00061000
|
||||
# EURO72PRODUCT_KEY
|
||||
#SCREENMODE=0x00069024
|
||||
# EURO72PRODUCTLACE_KEY
|
||||
#SCREENMODE=0x00069025
|
||||
# EURO72PRODUCTDBL_KEY
|
||||
#SCREENMODE=0x00069020
|
||||
# EURO36_MONITOR_ID
|
||||
#SCREENMODE=0x00071000
|
||||
# SUPER72HIRESDBL_KEY
|
||||
#SCREENMODE=0x00089008
|
||||
# SUPER72SUPERDBL_KEY
|
||||
#SCREENMODE=0x00089028
|
||||
# DBLNTSCHIRES_KEY
|
||||
#SCREENMODE=0x00099000
|
||||
# DBLNTSCHIRESFF_KEY
|
||||
#SCREENMODE=0x00099004
|
||||
# DBLNTSCHIRESLACE_KEY
|
||||
#SCREENMODE=0x00099005
|
||||
# DBLPALHIRES_KEY
|
||||
#SCREENMODE=0x000a9000
|
||||
# DBLPALHIRESFF_KEY
|
||||
#SCREENMODE=0x000a9004
|
||||
# DBLPALHIRESLACE_KEY
|
||||
#SCREENMODE=0x000a9005
|
||||
506
outdated/sys/amiga/amidos.c
Normal file
506
outdated/sys/amiga/amidos.c
Normal file
@@ -0,0 +1,506 @@
|
||||
/* NetHack 3.6 amidos.c $NHDT-Date: 1432512796 2015/05/25 00:13:16 $ $NHDT-Branch: master $:$NHDT-Revision: 1.10 $ */
|
||||
/* Copyright (c) Olaf Seibert, Nijmegen, The Netherlands, 1988,1990. */
|
||||
/* Copyright (c) Kenneth Lorber, Bethesda, Maryland, 1991,1992,1993,1996. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
/*
|
||||
* An assortment of imitations of cheap plastic MSDOS and Unix functions.
|
||||
*/
|
||||
|
||||
#include "hack.h"
|
||||
#include "winami.h"
|
||||
|
||||
/* Defined in config.h, let's undefine it here (static function below) */
|
||||
#undef strcmpi
|
||||
|
||||
#include <libraries/dos.h>
|
||||
#include <exec/execbase.h>
|
||||
#include <intuition/intuition.h>
|
||||
|
||||
#undef COUNT
|
||||
#if defined(__SASC_60) || defined(__GNUC__)
|
||||
#include <proto/exec.h>
|
||||
#include <proto/dos.h>
|
||||
#endif
|
||||
|
||||
#ifdef AZTEC_50
|
||||
#include <functions.h>
|
||||
#undef strcmpi
|
||||
#endif
|
||||
|
||||
/* Prototypes */
|
||||
#include "NH:sys/amiga/winami.p"
|
||||
#include "NH:sys/amiga/amiwind.p"
|
||||
#include "NH:sys/amiga/amidos.p"
|
||||
|
||||
extern char Initialized;
|
||||
extern struct window_procs amii_procs;
|
||||
|
||||
#ifndef __SASC_60
|
||||
int Enable_Abort = 0; /* for stdio package */
|
||||
#endif
|
||||
|
||||
/* Initial path, so we can find NetHack.cnf */
|
||||
char PATH[PATHLEN] = "NetHack:";
|
||||
|
||||
static boolean record_exists(void);
|
||||
|
||||
void
|
||||
flushout()
|
||||
{
|
||||
(void) fflush(stdout);
|
||||
}
|
||||
|
||||
#ifndef getuid
|
||||
getuid()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef getlogin
|
||||
char *
|
||||
getlogin()
|
||||
{
|
||||
return ((char *) NULL);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef AZTEC_50
|
||||
int
|
||||
abs(x)
|
||||
int x;
|
||||
{
|
||||
return x < 0 ? -x : x;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef SHELL
|
||||
int
|
||||
dosh()
|
||||
{
|
||||
int i;
|
||||
char buf[BUFSZ];
|
||||
extern struct ExecBase *SysBase;
|
||||
|
||||
/* Only under 2.0 and later ROMs do we have System() */
|
||||
if (SysBase->LibNode.lib_Version >= 37 && !amibbs) {
|
||||
getlin("Enter CLI Command...", buf);
|
||||
if (buf[0] != '\033')
|
||||
i = System(buf, NULL);
|
||||
} else {
|
||||
i = 0;
|
||||
pline("No mysterious force prevented you from using multitasking.");
|
||||
}
|
||||
return i;
|
||||
}
|
||||
#endif /* SHELL */
|
||||
|
||||
#ifdef MFLOPPY
|
||||
#include <ctype.h>
|
||||
|
||||
#define Sprintf (void) sprintf
|
||||
|
||||
#define EXTENSION 72
|
||||
|
||||
/*
|
||||
* This routine uses an approximation of the free bytes on a disk.
|
||||
* How large a file you can actually write depends on the number of
|
||||
* extension blocks you need for it.
|
||||
* In each extenstion block there are maximum 72 pointers to blocks,
|
||||
* so every 73 disk blocks have only 72 available for data.
|
||||
* The (necessary) file header is also good for 72 data block pointers.
|
||||
*/
|
||||
/* TODO: update this for FFS */
|
||||
long
|
||||
freediskspace(path)
|
||||
char *path;
|
||||
{
|
||||
#ifdef UNTESTED
|
||||
/* these changes from Patric Mueller <bhaak@gmx.net> for AROS to
|
||||
* handle larger disks. Also needs limits.h and aros/oldprograms.h
|
||||
* for AROS. (keni)
|
||||
*/
|
||||
unsigned long long freeBytes = 0;
|
||||
#else
|
||||
register long freeBytes = 0;
|
||||
#endif
|
||||
register struct InfoData *infoData; /* Remember... longword aligned */
|
||||
char fileName[32];
|
||||
|
||||
/*
|
||||
* Find a valid path on the device of which we want the free space.
|
||||
* If there is a colon in the name, it is an absolute path
|
||||
* and all up to the colon is everything we need.
|
||||
* Remember slashes in a volume name are allowed!
|
||||
* If there is no colon, it is relative to the current directory,
|
||||
* so must be on the current device, so "" is enough...
|
||||
*/
|
||||
{
|
||||
register char *colon;
|
||||
|
||||
strncpy(fileName, path, sizeof(fileName) - 1);
|
||||
fileName[31] = 0;
|
||||
if (colon = index(fileName, ':'))
|
||||
colon[1] = '\0';
|
||||
else
|
||||
fileName[0] = '\0';
|
||||
}
|
||||
{
|
||||
BPTR fileLock;
|
||||
infoData = (struct InfoData *) alloc(sizeof(struct InfoData));
|
||||
if (fileLock = Lock(fileName, SHARED_LOCK)) {
|
||||
if (Info(fileLock, infoData)) {
|
||||
/* We got a kind of DOS volume, since we can Lock it. */
|
||||
/* Calculate number of blocks available for new file */
|
||||
/* Kludge for the ever-full VOID: (oops RAM:) device */
|
||||
if (infoData->id_UnitNumber == -1
|
||||
&& infoData->id_NumBlocks == infoData->id_NumBlocksUsed) {
|
||||
freeBytes = AvailMem(0L) - 64 * 1024L;
|
||||
/* Just a stupid guess at the */
|
||||
/* Ram-Handler overhead per block: */
|
||||
freeBytes -= freeBytes / 16;
|
||||
} else {
|
||||
/* Normal kind of DOS file system device/volume */
|
||||
freeBytes =
|
||||
infoData->id_NumBlocks - infoData->id_NumBlocksUsed;
|
||||
freeBytes -= (freeBytes + EXTENSION) / (EXTENSION + 1);
|
||||
freeBytes *= infoData->id_BytesPerBlock;
|
||||
#ifdef UNTESTED
|
||||
if (freeBytes > LONG_MAX) {
|
||||
freeBytes = LONG_MAX;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
if (freeBytes < 0)
|
||||
freeBytes = 0;
|
||||
}
|
||||
UnLock(fileLock);
|
||||
}
|
||||
free(infoData);
|
||||
return freeBytes;
|
||||
}
|
||||
}
|
||||
|
||||
long
|
||||
filesize(file)
|
||||
char *file;
|
||||
{
|
||||
register BPTR fileLock;
|
||||
register struct FileInfoBlock *fileInfoBlock;
|
||||
register long size = 0;
|
||||
|
||||
fileInfoBlock =
|
||||
(struct FileInfoBlock *) alloc(sizeof(struct FileInfoBlock));
|
||||
if (fileLock = Lock(file, SHARED_LOCK)) {
|
||||
if (Examine(fileLock, fileInfoBlock)) {
|
||||
size = fileInfoBlock->fib_Size;
|
||||
}
|
||||
UnLock(fileLock);
|
||||
}
|
||||
free(fileInfoBlock);
|
||||
return size;
|
||||
}
|
||||
|
||||
#if 0
|
||||
void
|
||||
eraseall(path, files)
|
||||
const char *path, *files;
|
||||
{
|
||||
BPTR dirLock, dirLock2;
|
||||
struct FileInfoBlock *fibp;
|
||||
int chklen;
|
||||
#if (NH_DEVEL_STATUS != NH_STATUS_RELEASED)
|
||||
if(files != g.alllevels)panic("eraseall");
|
||||
#endif
|
||||
chklen=(int)index(files,'*')-(int)files;
|
||||
|
||||
if (dirLock = Lock( (char *)path ,SHARED_LOCK)) {
|
||||
dirLock2=DupLock(dirLock);
|
||||
dirLock2= CurrentDir(dirLock2);
|
||||
fibp=AllocMem(sizeof(struct FileInfoBlock),0);
|
||||
if(fibp){
|
||||
if(Examine(dirLock,fibp)){
|
||||
while(ExNext(dirLock,fibp)){
|
||||
if(!strncmp(fibp->fib_FileName,files,chklen)){
|
||||
DeleteFile(fibp->fib_FileName);
|
||||
}
|
||||
}
|
||||
}
|
||||
FreeMem(fibp,sizeof(struct FileInfoBlock));
|
||||
}
|
||||
UnLock(dirLock);
|
||||
UnLock(CurrentDir(dirLock2));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* This size makes that most files can be copied with two Read()/Write()s */
|
||||
|
||||
#if 0 /* Unused */
|
||||
#define COPYSIZE 4096
|
||||
|
||||
char *CopyFile(from, to)
|
||||
const char *from, *to;
|
||||
{
|
||||
register BPTR fromFile, toFile;
|
||||
register char *buffer;
|
||||
register long size;
|
||||
char *error = NULL;
|
||||
|
||||
buffer = (char *) alloc(COPYSIZE);
|
||||
if (fromFile = Open( (char *)from, MODE_OLDFILE)) {
|
||||
if (toFile = Open( (char *)to, MODE_NEWFILE)) {
|
||||
while (size = Read(fromFile, buffer, (long)COPYSIZE)) {
|
||||
if (size == -1){
|
||||
error = "Read error";
|
||||
break;
|
||||
}
|
||||
if (size != Write(toFile, buffer, size)) {
|
||||
error = "Write error";
|
||||
break;
|
||||
}
|
||||
}
|
||||
Close(toFile);
|
||||
} else
|
||||
error = "Cannot open destination";
|
||||
Close(fromFile);
|
||||
} else
|
||||
error = "Cannot open source (this should not occur)";
|
||||
free(buffer);
|
||||
return error;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* this should be replaced */
|
||||
saveDiskPrompt(start)
|
||||
{
|
||||
char buf[BUFSIZ], *bp;
|
||||
BPTR fileLock;
|
||||
if (sysflags.asksavedisk) {
|
||||
/* Don't prompt if you can find the save file */
|
||||
if (fileLock = Lock(g.SAVEF, SHARED_LOCK)) {
|
||||
UnLock(fileLock);
|
||||
#if defined(TTY_GRAPHICS)
|
||||
if (windowprocs.win_init_nhwindows
|
||||
!= amii_procs.win_init_nhwindows)
|
||||
clear_nhwindow(WIN_MAP);
|
||||
#endif
|
||||
#if defined(AMII_GRAPHICS)
|
||||
if (windowprocs.win_init_nhwindows
|
||||
== amii_procs.win_init_nhwindows)
|
||||
clear_nhwindow(WIN_BASE);
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
pline("If save file is on a SAVE disk, put that disk in now.");
|
||||
if (strlen(g.SAVEF) > QBUFSZ - 25 - 22)
|
||||
panic("not enough buffer space for prompt");
|
||||
/* THIS IS A HACK */
|
||||
#if defined(TTY_GRAPHICS)
|
||||
if (windowprocs.win_init_nhwindows != amii_procs.win_init_nhwindows) {
|
||||
getlin("File name ?", buf);
|
||||
clear_nhwindow(WIN_MAP);
|
||||
}
|
||||
#endif
|
||||
#if defined(AMII_GRAPHICS)
|
||||
if (windowprocs.win_init_nhwindows == amii_procs.win_init_nhwindows) {
|
||||
getlind("File name ?", buf, g.SAVEF);
|
||||
clear_nhwindow(WIN_BASE);
|
||||
}
|
||||
#endif
|
||||
clear_nhwindow(WIN_MESSAGE);
|
||||
if (!start && *buf == '\033')
|
||||
return 0;
|
||||
|
||||
/* Strip any whitespace. Also, if nothing was entered except
|
||||
* whitespace, do not change the value of g.SAVEF.
|
||||
*/
|
||||
for (bp = buf; *bp; bp++) {
|
||||
if (!isspace(*bp)) {
|
||||
strncpy(g.SAVEF, bp, PATHLEN);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Return 1 if the record file was found */
|
||||
static boolean
|
||||
record_exists()
|
||||
{
|
||||
FILE *file;
|
||||
|
||||
if (file = fopenp(RECORD, "r")) {
|
||||
fclose(file);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#ifdef MFLOPPY
|
||||
/*
|
||||
* Under MSDOS: Prompt for game disk, then check for record file.
|
||||
* For Amiga: do nothing, but called from restore.c
|
||||
*/
|
||||
void
|
||||
gameDiskPrompt()
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Add a slash to any name not ending in / or :. There must
|
||||
* be room for the /.
|
||||
*/
|
||||
void
|
||||
append_slash(name)
|
||||
char *name;
|
||||
{
|
||||
char *ptr;
|
||||
|
||||
if (!*name)
|
||||
return;
|
||||
|
||||
ptr = eos(name) - 1;
|
||||
if (*ptr != '/' && *ptr != ':') {
|
||||
*++ptr = '/';
|
||||
*++ptr = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
getreturn(str)
|
||||
const char *str;
|
||||
{
|
||||
int ch;
|
||||
|
||||
raw_printf("Hit <RETURN> %s.", str);
|
||||
while ((ch = nhgetch()) != '\n' && ch != '\r')
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Follow the PATH, trying to fopen the file.
|
||||
*/
|
||||
#define PATHSEP ';'
|
||||
|
||||
FILE *
|
||||
fopenp(name, mode)
|
||||
register const char *name, *mode;
|
||||
{
|
||||
register char *bp, *pp, lastch;
|
||||
register FILE *fp;
|
||||
register BPTR theLock;
|
||||
char buf[BUFSIZ];
|
||||
|
||||
/* Try the default directory first. Then look along PATH.
|
||||
*/
|
||||
if (strlen(name) >= BUFSIZ)
|
||||
return (NULL);
|
||||
strcpy(buf, name);
|
||||
if (theLock = Lock(buf, SHARED_LOCK)) {
|
||||
UnLock(theLock);
|
||||
if (fp = fopen(buf, mode))
|
||||
return fp;
|
||||
}
|
||||
pp = PATH;
|
||||
while (pp && *pp) {
|
||||
bp = buf;
|
||||
while (*pp && *pp != PATHSEP) {
|
||||
if (bp > buf + BUFSIZ - 1)
|
||||
return (NULL);
|
||||
lastch = *bp++ = *pp++;
|
||||
}
|
||||
if (lastch != ':' && lastch != '/' && bp != buf)
|
||||
*bp++ = '/';
|
||||
if (bp + strlen(name) > buf + BUFSIZ - 1)
|
||||
return (NULL);
|
||||
strcpy(bp, name);
|
||||
if (theLock = Lock(buf, SHARED_LOCK)) {
|
||||
UnLock(theLock);
|
||||
if (fp = fopen(buf, mode))
|
||||
return fp;
|
||||
}
|
||||
if (*pp)
|
||||
pp++;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
#endif /* MFLOPPY */
|
||||
|
||||
#ifdef CHDIR
|
||||
|
||||
/*
|
||||
* A not general-purpose directory changing routine.
|
||||
* Assumes you want to return to the original directory eventually,
|
||||
* by chdir()ing to orgdir (which is defined in pcmain.c).
|
||||
* Assumes -1 is not a valid lock, since 0 is valid.
|
||||
*/
|
||||
|
||||
#define NO_LOCK ((BPTR) -1)
|
||||
|
||||
static BPTR OrgDirLock = NO_LOCK;
|
||||
|
||||
chdir(dir) char *dir;
|
||||
{
|
||||
extern char orgdir[];
|
||||
|
||||
if (dir == orgdir) {
|
||||
/* We want to go back to where we came from. */
|
||||
if (OrgDirLock != NO_LOCK) {
|
||||
UnLock(CurrentDir(OrgDirLock));
|
||||
OrgDirLock = NO_LOCK;
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* Go to some new place. If still at the original
|
||||
* directory, save the FileLock.
|
||||
*/
|
||||
BPTR newDir;
|
||||
|
||||
if (newDir = Lock((char *) dir, SHARED_LOCK)) {
|
||||
if (OrgDirLock == NO_LOCK) {
|
||||
OrgDirLock = CurrentDir(newDir);
|
||||
} else {
|
||||
UnLock(CurrentDir(newDir));
|
||||
}
|
||||
} else {
|
||||
return -1; /* Failed */
|
||||
}
|
||||
}
|
||||
/* CurrentDir always succeeds if you have a lock */
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* CHDIR */
|
||||
|
||||
/* Chdir back to original directory
|
||||
*/
|
||||
#undef exit
|
||||
void
|
||||
nethack_exit(code)
|
||||
{
|
||||
#ifdef CHDIR
|
||||
extern char orgdir[];
|
||||
#endif
|
||||
|
||||
#ifdef CHDIR
|
||||
chdir(orgdir); /* chdir, not chdirx */
|
||||
#endif
|
||||
|
||||
#ifdef AMII_GRAPHICS
|
||||
if (windowprocs.win_init_nhwindows == amii_procs.win_init_nhwindows)
|
||||
CleanUp();
|
||||
#endif
|
||||
exit(code);
|
||||
}
|
||||
|
||||
void regularize(s) /* normalize file name - we don't like :'s or /'s */
|
||||
register char *s;
|
||||
{
|
||||
register char *lp;
|
||||
|
||||
while ((lp = index(s, ':')) || (lp = index(s, '/')))
|
||||
*lp = '_';
|
||||
}
|
||||
42
outdated/sys/amiga/amidos.p
Normal file
42
outdated/sys/amiga/amidos.p
Normal file
@@ -0,0 +1,42 @@
|
||||
/* NetHack 3.6 amidos.p $NHDT-Date: 1432512796 2015/05/25 00:13:16 $ $NHDT-Branch: master $:$NHDT-Revision: 1.7 $ */
|
||||
/* Copyright (c) Kenneth Lorber, Bethesda, Maryland, 1992, 1993. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
/* amidos.c */
|
||||
void NDECL(flushout );
|
||||
#ifndef getuid
|
||||
int NDECL(getuid );
|
||||
#endif
|
||||
#ifndef getpid
|
||||
int NDECL(getpid );
|
||||
#endif
|
||||
#ifndef getlogin
|
||||
char *NDECL(getlogin );
|
||||
#endif
|
||||
#ifndef abs
|
||||
int FDECL(abs, (int ));
|
||||
#endif
|
||||
int NDECL(tgetch );
|
||||
int NDECL(dosh );
|
||||
long FDECL(freediskspace, (char *));
|
||||
long FDECL(filesize, (char *));
|
||||
void FDECL(eraseall, (const char * , const char *));
|
||||
char *FDECL(CopyFile, (const char * , const char *));
|
||||
void FDECL(copybones, (int ));
|
||||
void NDECL(playwoRAMdisk );
|
||||
int FDECL(saveDiskPrompt, (int ));
|
||||
void NDECL(gameDiskPrompt );
|
||||
void FDECL(append_slash, (char *));
|
||||
void FDECL(getreturn, (const char *));
|
||||
#ifndef msmsg
|
||||
void FDECL(msmsg, ( const char *, ... ));
|
||||
#endif
|
||||
#if !defined(__SASC_60) && !defined(_DCC)
|
||||
int FDECL(chdir, (char *));
|
||||
#endif
|
||||
#ifndef strcmpi
|
||||
int FDECL(strcmpi, (char * , char *));
|
||||
#endif
|
||||
#if !defined(memcmp) && !defined(AZTEC_C) && !defined(_DCC) && !defined(__GNUC__)
|
||||
int FDECL(memcmp, (unsigned char * , unsigned char * , int ));
|
||||
#endif
|
||||
9
outdated/sys/amiga/amifont.uu
Normal file
9
outdated/sys/amiga/amifont.uu
Normal file
@@ -0,0 +1,9 @@
|
||||
begin 777 hack.font
|
||||
M#P```6AA8VLO.```````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
M````````````````````````````````````````````````````````````
|
||||
G````````````````````````````````````````````````"`!`
|
||||
`
|
||||
end
|
||||
59
outdated/sys/amiga/amifont8.uu
Normal file
59
outdated/sys/amiga/amifont8.uu
Normal file
@@ -0,0 +1,59 @@
|
||||
begin 644 8
|
||||
M```#\P`````````!``````````````)E```#Z0```F5P_TYU```````````,
|
||||
M`````!H/@``!``````````````````````````````````````````!&140`
|
||||
M```````````,`````!H`````"20`"`!```@`!@`!```@_P```&X`M```!@X`
|
||||
M```````````8;&P8`#@8##````````,\&#P\''X<?CP\```,`#`\?!C\//C^
|
||||
M_CQF?@[F\(+&./PX_#Q^9L/&P\/^/,`\$``8`.``#@`<`.`8!N`X````````
|
||||
M``@````````.&'!RS.?BY^?EY^?GY^?GY.?AY^?__\,8`&;GY^?GY^3GX>?G
|
||||
MYVH```!J:A@````8&!@``!@88L!6`%96```8`!@8`*@5P8.BP:@5YP/_[W_^
|
||||
M````P,```P`\;&P^QFP8&!AF&`````9F.&9F/&`P9F9F&!@8`!AFQCQF9FQF
|
||||
M9F9F&`9F8,;F;&9L9F9:9L/&9L/&,&`,.``8`&``!@`V`&```&`8````````
|
||||
M`!@````````8&!B<,Z6BH:&EI*2AI:6EI*2AI*3__\,8`&:DH:6EI:2DH:2D
|
||||
MI58```!65CP````8&!@``!@\96-J`&IJ```8`!@8UB/$`\`C+"O4A`/_]Y_Y
|
||||
M````P,```P`\`/Y@S&@P,`P\&`````QN&`8&;'Q@!F9F&!@P?@P&WCQFP&9@
|
||||
M8,!F&`9L8.[VQF;&9G`89F;&/&:,,#`,;``,/&P\-CPP.VPX!F889GP\W#WL
|
||||
M/CYF9F-C9GX8&!@`S.7BY^?GY^?AY^?GY^3GY^?_`.<8`,/GX>?GY^?DY^?G
|
||||
MY6K_#_!KZCP````8&!@``!AF8#97_];7`&8<`#@\;&I6)F1I/&F6YP./]]_[
|
||||
M#__PP,```P`8`&P\&'8`,`S_?@!^`!A^&!P<S`9\##P^``!@``8,WF9\P&9X
|
||||
M>,Y^&`9X8/[>QGS&?#@89F;6&#P8,!@,Q@``!G9F;F9X9G88!FP8=V9F9F9V
|
||||
M8!AF9FLV9DQP&`X`,Z6BI*&AH:6AI:&EI:2EI*3_`.<8_P`E(24A)24D)20D
|
||||
MI595/5Q55F;_#_`/\/\``-O#?AMJ5:JJ```?__C_JIPY:];X*]I;A`-F[\_S
|
||||
M.``<P&``!@`8`/X&,-P`,`P\&````#!V&#`&_@9F&&8&```P``P8WGYFP&9@
|
||||
M8,9F&&9L8M;.QF#&;`X89CS^/!@R,`P,````'F9@9GXP9F88!G@8:V9F9F9F
|
||||
M/!AF9FL<9A@8&!@`S.?BY^?AY^?AY^'EY^?GY^3_`.<8_P`G(2<A)2<G)R<D
|
||||
MIVJJ:JHZK&8`&!@``!@``,/;9NQ5JE95&``</#@`;&O6G#DK^#?LYP/Q[_//
|
||||
M8``&P#@`'````&Q\9LP`&!AF&!@`&&!F&&9F#&9F&&8,&!@8?A@`P,-F9FQF
|
||||
M8&9F&&9F9L;&;&!L9F889CSN9AAF,`8,````9F9F9F`P/&88!FP88V9F?#Y@
|
||||
M!AIF/#8V/#(8&!@`,P````````````````````#_`.<8`,,`````````````
|
||||
M`%;_5=8/\,,`&!@``!AS`&889C9KU^K_```8&!@`UB9D:E8\:;0M``/_W_O?
|
||||
MP``#P`__\``8`&P8QG8`##```!@`&,`\?GX\'CP\&#PX&!@,`#`8>,/\//C^
|
||||
M\#YF?CSF_L;&./`\XSP\/AC&PSS^/`,\````.SP\.SQXQN8\9N8\8V8\8`;P
|
||||
M?`P[	C&'X.&'``S`````````````````````#__\,8`&8`````````````
|
||||
M`&H`:VH``,,`&!@``!B<&#P89F-6:E8``&88&!@`K`/`(\0L(T&"``/_W_F?
|
||||
MP``#P````````````````````#```````````````````#``````````````
|
||||
M```````````````&`````````````````/X`````````?```/```````\`<`
|
||||
M````````<```````,P````````````````````#__\,8`&8`````````````
|
||||
M`%8`5E8`````&!@``!@``!@8`,!J5FH````8&!@``,&#J!7!HL&#``/_[_Y_
|
||||
MP``#P`````````@`"``(`!``"``8``@`(``(`"@`"``P``@`.``(`$``"`!(
|
||||
M``@`4``(`%@`"`!@``@`:``(`'``"`!X``@`@``(`(@`"`"0``@`F``(`*``
|
||||
M"`"H``@`L``(`+@`"`#```@`R``(`-``"`#8``@`X``(`.@`"`#P``@`^``(
|
||||
M`0``"`$(``@!$``(`1@`"`$@``@!*``(`3``"`$X``@!0``(`4@`"`%0``@!
|
||||
M6``(`6``"`%H``@!<``(`7@`"`&```@!B``(`9``"`&8``@!H``(`:@`"`&P
|
||||
M``@!N``(`<``"`'(``@!T``(`=@`"`'@``@!Z``(`?``"`'X``@"```(`@@`
|
||||
M"`(0``@"&``(`B``"`(H``@",``(`C@`"`)```@"2``(`E``"`)8``@"8``(
|
||||
M`F@`"`)P``@">``(`H``"`*(``@"D``(`I@`"`*@``@"J``(`K``"`*X``@"
|
||||
MP``(`L@`"`+0``@"V``(`N``"`+H``@"\``(`O@`"`,```@#"``(`Q``"`,8
|
||||
M``@#(``(`R@`"`,P``@#.``(`T``"`-(``@#4``(`U@`"`-@``@#:``(`W``
|
||||
M"`-X``@#@``(`X@`"`.0``@#F``(`Z``"`.H``@#L``(`[@`"`/```@#R``(
|
||||
M`]``"`/8``@#X``(`^@`"`/P``@#^``(!```"``(``@`$``(`!@`"``@``@`
|
||||
M*``(`#``"``X``@`0``(`$@`"`!0``@`6``(`&``"`!H``@`<``(`'@`"`"`
|
||||
M``@`B``(`)``"`"8``@`H``(`*@`"`"P``@`N``(`,``"`#(``@`T``(`-@`
|
||||
M"`#@``@`Z``(`/``"`#X``@$"``(!!``"`08``@$(``(!"@`"`0P``@#J``(
|
||||
M!#@`"`.8``@$0``(!$@`"`10``@$6``(!&``"`1H``@$<``(!'@`"`2```@$
|
||||
MB``(!)``"`28``@$H``(!*@`"`2P``@$N``(!,``"`3(``@!V``(`>``"`'H
|
||||
M``@!\``(`?@`"`(```@$T``(!-@`"`3@``@$Z``(!/``"`3X``@%```(!0@`
|
||||
M"`40``@%&``(!2``"`4H``@%,``(!3@`"`5```@%2``(!5``"`58``@%8``(
|
||||
M!6@`"`5P``@%>``(!8``"`6(``@%D``(!9@`"`+8``@"X``(`N@`"`+P``@"
|
||||
M^``(````"``````#[`````0`````````#@```$0```!<````8@````````/R
|
||||
`
|
||||
end
|
||||
43
outdated/sys/amiga/amigst.c
Normal file
43
outdated/sys/amiga/amigst.c
Normal file
@@ -0,0 +1,43 @@
|
||||
/* NetHack 3.6 amigst.c $NHDT-Date: 1432512794 2015/05/25 00:13:14 $ $NHDT-Branch: master $:$NHDT-Revision: 1.7 $ */
|
||||
/* Copyright (c) Gregg Wonderly, Naperville, IL, 1992, 1993 */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <exec/types.h>
|
||||
#include <exec/io.h>
|
||||
#include <exec/alerts.h>
|
||||
#include <exec/devices.h>
|
||||
#include <devices/console.h>
|
||||
#include <devices/conunit.h>
|
||||
#include <graphics/gfxbase.h>
|
||||
#include <intuition/intuition.h>
|
||||
#include <libraries/dosextens.h>
|
||||
#include <ctype.h>
|
||||
#undef strcmpi
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
|
||||
#ifdef __SASC
|
||||
#include <dos.h> /* for __emit */
|
||||
#include <string.h>
|
||||
#include <proto/dos.h>
|
||||
#include <proto/exec.h>
|
||||
#include <proto/graphics.h>
|
||||
#include <proto/intuition.h>
|
||||
#include <proto/diskfont.h>
|
||||
#include <proto/console.h>
|
||||
#endif
|
||||
|
||||
#include "hack.h"
|
||||
#include "winprocs.h"
|
||||
#include "winami.h"
|
||||
|
||||
#ifdef AZTEC
|
||||
#include <functions.h>
|
||||
#endif
|
||||
|
||||
#include "NH:sys/amiga/winami.p"
|
||||
#include "NH:sys/amiga/amiwind.p"
|
||||
#include "NH:sys/amiga/amidos.p"
|
||||
|
||||
/* end amigst.c */
|
||||
31
outdated/sys/amiga/amii.hlp
Normal file
31
outdated/sys/amiga/amii.hlp
Normal file
@@ -0,0 +1,31 @@
|
||||
Amiga-specific help file for NetHack 3.6
|
||||
|
||||
The Amiga port of NetHack supports a number of additional commands
|
||||
and facilities specific to the Amiga. Listed below are the things
|
||||
which are either specific to the Amiga port or might not appear
|
||||
in other ports.
|
||||
|
||||
While playing NetHack you can press:
|
||||
|
||||
ALT-HELP Color requestor.
|
||||
CTL-HELP Scale display (amitile only).
|
||||
SHIFT-HELP Overview window (amitile only).
|
||||
|
||||
Amiga-specific run-time options:
|
||||
altmeta use the alt keys as meta keys
|
||||
flush throw away keyboard type-ahead
|
||||
|
||||
Command line options recognized are
|
||||
|
||||
-n No News at game startup.
|
||||
-X Play in discovery mode.
|
||||
-D Play in debug mode.
|
||||
-L Interlaced screen.
|
||||
-l Never Interlaced screen.
|
||||
-u Play as player given as
|
||||
an argument.
|
||||
-r Pick a race given as an
|
||||
argument.
|
||||
-p Pick a profession given
|
||||
as an argument
|
||||
-? Gives command line usage.
|
||||
107
outdated/sys/amiga/amimenu.c
Normal file
107
outdated/sys/amiga/amimenu.c
Normal file
@@ -0,0 +1,107 @@
|
||||
/* NetHack 3.6 amimenu.c $NHDT-Date: 1432512796 2015/05/25 00:13:16 $ $NHDT-Branch: master $:$NHDT-Revision: 1.7 $ */
|
||||
/* Copyright (c) Olaf 'Rhialto' Seibert, 1989 */
|
||||
/* Copyright (c) Kenneth Lorber, Bethesda, Maryland, 1992, 1993, 1996 */
|
||||
/* Copyright (c) Janne Salmijärvi, 2000 */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
/* Originally by John Toebes. */
|
||||
|
||||
/* GadTools menus by jhsa */
|
||||
|
||||
struct NewMenu GTHackMenu[] = {
|
||||
{ NM_TITLE, "Commands", 0, 0, 0, 0 },
|
||||
{ NM_ITEM, "? Display help menu", 0, 0, 0, (void *) '?' },
|
||||
{ NM_ITEM, "& Explain a command", 0, 0, 0, (void *) '&' },
|
||||
{ NM_ITEM, "O Set options", 0, 0, 0, (void *) 'O' },
|
||||
{ NM_ITEM, "! AmigaDos command", 0, 0, 0, (void *) '!' },
|
||||
{ NM_ITEM, "v Version number", 0, 0, 0, (void *) 'v' },
|
||||
{ NM_ITEM, "V Long version and game history", 0, 0, 0, (void *) 'V' },
|
||||
{ NM_ITEM, "^R Redraw screen", 0, 0, 0, (void *) 022 },
|
||||
{ NM_ITEM, "^P Repeat previous messages", 0, 0, 0, (void *) 020 },
|
||||
{ NM_ITEM, "M-q #quit the game", 0, 0, 0, (void *)(128 + 'q') },
|
||||
{ NM_ITEM, "S Save the game", 0, 0, 0, (void *) 'S' },
|
||||
{ NM_TITLE, "Inventory", 0, 0, 0, 0 },
|
||||
{ NM_ITEM, "i Inventory", 0, 0, 0, (void *) 'i' },
|
||||
{ NM_ITEM, "p Pay your bill", 0, 0, 0, (void *) 'p' },
|
||||
{ NM_ITEM, "d Drop an object", 0, 0, 0, (void *) 'd' },
|
||||
{ NM_ITEM, "D Drop several things", 0, 0, 0, (void *) 'D' },
|
||||
{ NM_ITEM, ", Pickup an object", 0, 0, 0, (void *) ',' },
|
||||
{ NM_ITEM, "@ Toggle pickup", 0, 0, 0, (void *) '@' },
|
||||
{ NM_ITEM, "/ Identify something", 0, 0, 0, (void *) '/' },
|
||||
{ NM_ITEM, "C Christen a monster", 0, 0, 0, (void *) 'C' },
|
||||
{ NM_ITEM, "+ List known spells", 0, 0, 0, (void *) '+' },
|
||||
{ NM_ITEM, "$ Your gold", 0, 0, 0, (void *) '$' },
|
||||
{ NM_TITLE, "Actions", 0, 0, 0, 0 },
|
||||
{ NM_ITEM, "a Apply/use something", 0, 0, 0, (void *) 'a' },
|
||||
{ NM_ITEM, "e Eat something", 0, 0, 0, (void *) 'e' },
|
||||
{ NM_ITEM, "f Fire ammunition", 0, 0, 0, (void *) 'f' },
|
||||
{ NM_ITEM, "F Fight a monster", 0, 0, 0, (void *) 'F' },
|
||||
{ NM_ITEM, "q Quaff a monster", 0, 0, 0, (void *) 'q' },
|
||||
{ NM_ITEM, "r Read scroll/book", 0, 0, 0, (void *) 'r' },
|
||||
{ NM_ITEM, "t Throw something", 0, 0, 0, (void *) 't' },
|
||||
{ NM_ITEM, "z Zap a wand", 0, 0, 0, (void *) 'z' },
|
||||
{ NM_ITEM, "Z Cast a spell", 0, 0, 0, (void *) 'Z' },
|
||||
{ NM_TITLE, "Preparations", 0, 0, 0, 0 },
|
||||
{ NM_ITEM, "A Remove all armor", 0, 0, 0, (void *) 'A' },
|
||||
{ NM_ITEM, "P Put on a ring", 0, 0, 0, (void *) 'P' },
|
||||
{ NM_ITEM, "R Remove ring", 0, 0, 0, (void *) 'R' },
|
||||
{ NM_ITEM, "Q Select ammunition for quiver", 0, 0, 0, (void *) 'Q' },
|
||||
{ NM_ITEM, "T Take off armor", 0, 0, 0, (void *) 'T' },
|
||||
{ NM_ITEM, "w Wield a weapon", 0, 0, 0, (void *) 'w' },
|
||||
{ NM_ITEM, "W Wear armor", 0, 0, 0, (void *) 'W' },
|
||||
{ NM_ITEM, "x Swap wielded and secondary weapons", 0, 0, 0,
|
||||
(void *) 'x' },
|
||||
{ NM_ITEM, ") Current weapon", 0, 0, 0, (void *) ')' },
|
||||
{ NM_ITEM, "[ Current armor", 0, 0, 0, (void *) '[' },
|
||||
{ NM_ITEM, "= Current rings", 0, 0, 0, (void *) '=' },
|
||||
{ NM_ITEM, "\" Current amulet", 0, 0, 0, (void *) '"' },
|
||||
{ NM_ITEM, "( Current tools", 0, 0, 0, (void *) '(' },
|
||||
{ NM_ITEM, "* Current equipment", 0, 0, 0, (void *) '*' },
|
||||
{ NM_TITLE, "Movement", 0, 0, 0, 0 },
|
||||
{ NM_ITEM, "o Open door", 0, 0, 0, (void *) 'o' },
|
||||
{ NM_ITEM, "c Close door", 0, 0, 0, (void *) 'c' },
|
||||
{ NM_ITEM, "^D Kick door", 0, 0, 0, (void *) 004 },
|
||||
{ NM_ITEM, "s Search", 0, 0, 0, (void *) 's' },
|
||||
{ NM_ITEM, "< Go up stairs", 0, 0, 0, (void *) '<' },
|
||||
{ NM_ITEM, "> Go down stairs", 0, 0, 0, (void *) '>' },
|
||||
{ NM_ITEM, "^T Teleport", 0, 0, 0, (void *) 024 },
|
||||
{ NM_ITEM, ". Wait a moment", 0, 0, 0, (void *) '.' },
|
||||
{ NM_ITEM, "E Engrave message on floor", 0, 0, 0, (void *) 'E' },
|
||||
{ NM_TITLE, "Extended", 0, 0, 0, 0 },
|
||||
{ NM_ITEM, "M-a #adjust inventory letters", 0, 0, 0,
|
||||
(void *)(128 + 'a') },
|
||||
{ NM_ITEM, "M-c #chat with someone", 0, 0, 0, (void *)(128 + 'c') },
|
||||
{ NM_ITEM, "M-d #dip an object into something", 0, 0, 0,
|
||||
(void *)(128 + 'd') },
|
||||
#ifdef WEAPON_SKILLS
|
||||
{ NM_ITEM, "M-e #enhance weapon skills", 0, 0, 0, (void *)(128 + 'e') },
|
||||
#endif
|
||||
{ NM_ITEM, "M-f #force a lock", 0, 0, 0, (void *)(128 + 'f') },
|
||||
{ NM_ITEM, "M-i #invoke an object's special powers", 0, 0, 0,
|
||||
(void *)(128 + 'i') },
|
||||
{ NM_ITEM, "M-j #jump to another location", 0, 0, 0,
|
||||
(void *)(128 + 'j') },
|
||||
{ NM_ITEM, "M-l #loot a box on the floor", 0, 0, 0,
|
||||
(void *)(128 + 'l') },
|
||||
{ NM_ITEM, "M-m Use a #monster's special ability", 0, 0, 0,
|
||||
(void *)(128 + 'm') },
|
||||
{ NM_ITEM, "M-n #name an item or type of object", 0, 0, 0,
|
||||
(void *)(128 + 'n') },
|
||||
{ NM_ITEM, "M-o #offer a sacrifice to the gods", 0, 0, 0,
|
||||
(void *)(128 + 'o') },
|
||||
{ NM_ITEM, "M-p #pray to the gods for help", 0, 0, 0,
|
||||
(void *)(128 + 'p') },
|
||||
{ NM_ITEM, "M-q #quit the game", 0, 0, 0, (void *)(128 + 'q') },
|
||||
{ NM_ITEM, "M-r #rub a lamp", 0, 0, 0, (void *)(128 + 'r') },
|
||||
{ NM_ITEM, "M-s #sit down", 0, 0, 0, (void *)(128 + 's') },
|
||||
{ NM_ITEM, "M-t #turn undead", 0, 0, 0, (void *)(128 + 't') },
|
||||
{ NM_ITEM, "M-u #untrap something", 0, 0, 0, (void *)(128 + 'u') },
|
||||
{ NM_ITEM, "M-v Long #version information", 0, 0, 0,
|
||||
(void *)(128 + 'v') },
|
||||
{ NM_ITEM, "M-w #wipe off your face", 0, 0, 0, (void *)(128 + 'w') },
|
||||
{ NM_ITEM, " Your #conduct", 0, 0, 0, (void *) '#' }, /* "#co\n" */
|
||||
{ NM_ITEM, " #ride your steed", 0, 0, 0, (void *) '#' }, /* "#ri\n" */
|
||||
{ NM_ITEM, "M-2 Switch #twoweapon mode on/off", 0, 0, 0,
|
||||
(void *)(128 + '2') },
|
||||
{ NM_END, NULL, 0, 0, 0, 0 }
|
||||
};
|
||||
375
outdated/sys/amiga/amirip.c
Normal file
375
outdated/sys/amiga/amirip.c
Normal file
@@ -0,0 +1,375 @@
|
||||
/* NetHack 3.6 amirip.c $NHDT-Date: 1450453302 2015/12/18 15:41:42 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.16 $ */
|
||||
/* Copyright (c) Kenneth Lorber, Bethesda, Maryland 1991,1992,1993,1995,1996.
|
||||
*/
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
#include "hack.h"
|
||||
#include <exec/types.h>
|
||||
#include <exec/io.h>
|
||||
#include <exec/alerts.h>
|
||||
#include <exec/devices.h>
|
||||
#include <devices/console.h>
|
||||
#include <devices/conunit.h>
|
||||
#include <graphics/gfxbase.h>
|
||||
#include <graphics/gfxmacros.h>
|
||||
#include <intuition/intuition.h>
|
||||
#include <libraries/dosextens.h>
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
#include "winami.h"
|
||||
#include "windefs.h"
|
||||
#include "winext.h"
|
||||
#include "winproto.h"
|
||||
|
||||
static struct RastPort *rp;
|
||||
|
||||
#ifdef AMII_GRAPHICS
|
||||
|
||||
#undef NULL
|
||||
#define NULL 0
|
||||
|
||||
#ifdef AZTEC_C
|
||||
#include <functions.h>
|
||||
#else
|
||||
#ifdef _DCC
|
||||
#include <clib/dos_protos.h>
|
||||
#include <clib/exec_protos.h>
|
||||
#include <clib/console_protos.h>
|
||||
#include <clib/diskfont_protos.h>
|
||||
#else
|
||||
#include <proto/dos.h>
|
||||
#include <proto/exec.h>
|
||||
#include <proto/console.h>
|
||||
#include <proto/diskfont.h>
|
||||
#endif
|
||||
|
||||
static char *load_list[] = { "tomb.iff", 0 };
|
||||
static BitMapHeader tomb_bmhd;
|
||||
static struct BitMap *tbmp[1] = { 0 };
|
||||
|
||||
static int cols[2] = { 154, 319 }; /* X location of center of columns */
|
||||
static int cno = 0; /* current column */
|
||||
#define TEXT_TOP (65 + yoff)
|
||||
|
||||
static xoff, yoff; /* image centering */
|
||||
|
||||
/* terrible kludge */
|
||||
/* this is why prototypes should have ONLY types in them! */
|
||||
#undef red
|
||||
#undef green
|
||||
#undef blue
|
||||
#undef index
|
||||
#ifdef _DCC
|
||||
#include <clib/graphics_protos.h>
|
||||
#include <clib/intuition_protos.h>
|
||||
#else
|
||||
#include <proto/graphics.h>
|
||||
#include <proto/intuition.h>
|
||||
#endif
|
||||
#endif /* AZTEC_C */
|
||||
|
||||
static struct Window *ripwin = 0;
|
||||
static void tomb_text(char *);
|
||||
static void dofade(int, int, int);
|
||||
static int search_cmap(int, int, int);
|
||||
|
||||
#define STONE_LINE_LEN \
|
||||
13 /* # chars that fit on one line \
|
||||
* (note 1 ' ' border) */
|
||||
|
||||
#define DEATH_LINE 10
|
||||
#define YEAR_LINE 15
|
||||
|
||||
static unsigned short tomb_line;
|
||||
|
||||
extern struct amii_DisplayDesc *amiIDisplay;
|
||||
extern struct Screen *HackScreen;
|
||||
extern int havelace;
|
||||
|
||||
static unsigned short transpalette[AMII_MAXCOLORS] = {
|
||||
0x0000,
|
||||
};
|
||||
|
||||
static struct NewWindow newwin = { 0, 0, 640, 200, 1, 0,
|
||||
MOUSEBUTTONS | VANILLAKEY | NOCAREREFRESH,
|
||||
BORDERLESS | ACTIVATE | SMART_REFRESH,
|
||||
NULL, NULL, (UBYTE *) NULL, NULL, NULL, -1,
|
||||
-1, 0xffff, 0xffff, CUSTOMSCREEN };
|
||||
|
||||
int wh; /* was local in outrip, but needed for SCALE macro */
|
||||
|
||||
int cmap_white, cmap_black;
|
||||
|
||||
void
|
||||
amii_outrip(tmpwin, how, when)
|
||||
winid tmpwin;
|
||||
int how;
|
||||
time_t when;
|
||||
{
|
||||
int just_return = 0;
|
||||
int done, rtxth;
|
||||
struct IntuiMessage *imsg;
|
||||
int i;
|
||||
register char *dpx;
|
||||
char buf[200];
|
||||
int line, tw, ww;
|
||||
char *errstr = NULL;
|
||||
long year;
|
||||
|
||||
if (!WINVERS_AMIV || HackScreen->RastPort.BitMap->Depth < 4)
|
||||
goto cleanup;
|
||||
|
||||
/* Use the users display size */
|
||||
newwin.Height = amiIDisplay->ypix - newwin.TopEdge;
|
||||
newwin.Width = amiIDisplay->xpix;
|
||||
newwin.Screen = HackScreen;
|
||||
|
||||
for (i = 0; i < amii_numcolors; ++i)
|
||||
sysflags.amii_curmap[i] = GetRGB4(HackScreen->ViewPort.ColorMap, i);
|
||||
|
||||
ripwin = OpenWindow((void *) &newwin);
|
||||
if (!ripwin)
|
||||
goto cleanup;
|
||||
|
||||
LoadRGB4(&HackScreen->ViewPort, transpalette, amii_numcolors);
|
||||
|
||||
rp = ripwin->RPort;
|
||||
wh = ripwin->Height;
|
||||
ww = ripwin->Width;
|
||||
|
||||
#ifdef HACKFONT
|
||||
if (HackFont)
|
||||
SetFont(rp, HackFont);
|
||||
#endif
|
||||
|
||||
tomb_bmhd = ReadImageFiles(load_list, tbmp, &errstr);
|
||||
if (errstr)
|
||||
goto cleanup;
|
||||
if (tomb_bmhd.w > ww || tomb_bmhd.h > wh)
|
||||
goto cleanup;
|
||||
|
||||
#define GENOFF(full, used) ((((full) - (used)) / 2) & ~7)
|
||||
xoff = GENOFF(ww, tomb_bmhd.w);
|
||||
yoff = GENOFF(wh, tomb_bmhd.h);
|
||||
for (i = 0; i < SIZE(cols); i++)
|
||||
cols[i] += xoff;
|
||||
|
||||
cmap_white = search_cmap(0, 0, 0);
|
||||
cmap_black = search_cmap(15, 15, 15);
|
||||
|
||||
BltBitMap(*tbmp, 0, 0, rp->BitMap, xoff, yoff, tomb_bmhd.w, tomb_bmhd.h,
|
||||
0xc0, 0xff, NULL);
|
||||
|
||||
/* Put together death description */
|
||||
formatkiller(buf, sizeof buf, how, FALSE);
|
||||
|
||||
tw = TextLength(rp, buf, STONE_LINE_LEN) + 40;
|
||||
|
||||
{
|
||||
char *p = buf;
|
||||
int x, tmp;
|
||||
for (x = STONE_LINE_LEN; x; x--)
|
||||
*p++ = 'W';
|
||||
*p = '\0';
|
||||
tmp = TextLength(rp, buf, STONE_LINE_LEN) + 40;
|
||||
tw = max(tw, tmp);
|
||||
}
|
||||
|
||||
/* There are 5 lines of text on the stone. */
|
||||
rtxth = ripwin->RPort->TxHeight * 5;
|
||||
|
||||
SetAfPt(rp, (UWORD *) NULL, 0);
|
||||
SetDrPt(rp, 0xFFFF);
|
||||
|
||||
tomb_line = TEXT_TOP;
|
||||
|
||||
SetDrMd(rp, JAM1);
|
||||
|
||||
/* Put name on stone */
|
||||
Sprintf(buf, "%s", g.plname);
|
||||
buf[STONE_LINE_LEN] = 0;
|
||||
tomb_text(buf);
|
||||
|
||||
/* Put $ on stone */
|
||||
Sprintf(buf, "%ld Au", done_money);
|
||||
buf[STONE_LINE_LEN] = 0; /* It could be a *lot* of gold :-) */
|
||||
tomb_text(buf);
|
||||
|
||||
/* Put together death description */
|
||||
formatkiller(buf, sizeof buf, how, FALSE);
|
||||
|
||||
/* Put death type on stone */
|
||||
for (line = DEATH_LINE, dpx = buf; line < YEAR_LINE; line++) {
|
||||
register int i, i0;
|
||||
char tmpchar;
|
||||
|
||||
if ((i0 = strlen(dpx)) > STONE_LINE_LEN) {
|
||||
for (i = STONE_LINE_LEN; ((i0 > STONE_LINE_LEN) && i); i--) {
|
||||
if (dpx[i] == ' ')
|
||||
i0 = i;
|
||||
}
|
||||
if (!i)
|
||||
i0 = STONE_LINE_LEN;
|
||||
}
|
||||
|
||||
tmpchar = dpx[i0];
|
||||
dpx[i0] = 0;
|
||||
tomb_text(dpx);
|
||||
|
||||
if (tmpchar != ' ') {
|
||||
dpx[i0] = tmpchar;
|
||||
dpx = &dpx[i0];
|
||||
} else {
|
||||
dpx = &dpx[i0 + 1];
|
||||
}
|
||||
}
|
||||
|
||||
/* Put year on stone */
|
||||
year = yyyymmdd(when) / 10000L;
|
||||
Sprintf(buf, "%4ld", year);
|
||||
tomb_text(buf);
|
||||
|
||||
#ifdef NH320_DEDICATION
|
||||
/* dedication */
|
||||
cno = 1;
|
||||
tomb_line = TEXT_TOP;
|
||||
tomb_text("This release");
|
||||
tomb_text("of NetHack");
|
||||
tomb_text("is dedicated");
|
||||
tomb_text("to the");
|
||||
tomb_text("memory of");
|
||||
tomb_text("");
|
||||
tomb_text("Izchak");
|
||||
tomb_text(" Miller");
|
||||
tomb_text("");
|
||||
tomb_text("1935-1994");
|
||||
tomb_text("");
|
||||
tomb_text("Ascended");
|
||||
#endif
|
||||
/* Fade from black to full color */
|
||||
dofade(0, 16, 1);
|
||||
|
||||
/* Flush all messages to avoid typeahead */
|
||||
while (imsg = (struct IntuiMessage *) GetMsg(ripwin->UserPort))
|
||||
ReplyMsg((struct Message *) imsg);
|
||||
done = 0;
|
||||
while (!done) {
|
||||
WaitPort(ripwin->UserPort);
|
||||
while (imsg = (struct IntuiMessage *) GetMsg(ripwin->UserPort)) {
|
||||
switch (imsg->Class) {
|
||||
case MOUSEBUTTONS:
|
||||
case VANILLAKEY:
|
||||
done = 1;
|
||||
break;
|
||||
}
|
||||
ReplyMsg((struct Message *) imsg);
|
||||
}
|
||||
}
|
||||
|
||||
/* Fade out */
|
||||
dofade(16, 0, -1);
|
||||
just_return = 1;
|
||||
|
||||
cleanup:
|
||||
/* free everything */
|
||||
if (ripwin) {
|
||||
Forbid();
|
||||
while (imsg = (struct IntuiMessage *) GetMsg(ripwin->UserPort))
|
||||
ReplyMsg((struct Message *) imsg);
|
||||
CloseWindow(ripwin);
|
||||
Permit();
|
||||
}
|
||||
LoadRGB4(&HackScreen->ViewPort, sysflags.amii_curmap, amii_numcolors);
|
||||
|
||||
if (tbmp[0])
|
||||
FreeImageFiles(load_list, tbmp);
|
||||
if (just_return)
|
||||
return;
|
||||
/* fall back to the straight-ASCII version */
|
||||
genl_outrip(tmpwin, how, when);
|
||||
}
|
||||
|
||||
static void
|
||||
tomb_text(p)
|
||||
char *p;
|
||||
{
|
||||
char buf[STONE_LINE_LEN * 2];
|
||||
int l;
|
||||
|
||||
tomb_line += rp->TxHeight;
|
||||
|
||||
if (!*p)
|
||||
return;
|
||||
sprintf(buf, " %s ", p);
|
||||
l = TextLength(rp, buf, strlen(buf));
|
||||
|
||||
SetAPen(rp, cmap_white);
|
||||
Move(rp, cols[cno] - (l / 2) - 1, tomb_line);
|
||||
Text(rp, buf, strlen(buf));
|
||||
|
||||
SetAPen(rp, cmap_white);
|
||||
Move(rp, cols[cno] - (l / 2) + 1, tomb_line);
|
||||
Text(rp, buf, strlen(buf));
|
||||
|
||||
SetAPen(rp, cmap_white);
|
||||
Move(rp, cols[cno] - (l / 2), tomb_line - 1);
|
||||
Text(rp, buf, strlen(buf));
|
||||
|
||||
SetAPen(rp, cmap_white);
|
||||
Move(rp, cols[cno] - (l / 2), tomb_line + 1);
|
||||
Text(rp, buf, strlen(buf));
|
||||
|
||||
SetAPen(rp, cmap_black);
|
||||
Move(rp, cols[cno] - (l / 2), tomb_line);
|
||||
Text(rp, buf, strlen(buf));
|
||||
}
|
||||
|
||||
/* search colormap for best match to given color */
|
||||
static int
|
||||
search_cmap(int r0, int g0, int b0)
|
||||
{
|
||||
int best = 0;
|
||||
int bdiff = 0x0fffffff;
|
||||
int x;
|
||||
for (x = 0; x < amii_numcolors; x++) {
|
||||
int r = r0 - ((amiv_init_map[x] >> 8) & 15);
|
||||
int g = g0 - ((amiv_init_map[x] >> 4) & 15);
|
||||
int b = b0 - ((amiv_init_map[x]) & 15);
|
||||
int diff = (r * r) + (g * g) + (b * b);
|
||||
if (diff < bdiff) {
|
||||
bdiff = diff;
|
||||
best = x;
|
||||
}
|
||||
}
|
||||
return best;
|
||||
}
|
||||
|
||||
/* caution: this is NOT general! */
|
||||
static void
|
||||
dofade(int start, int stop, int inc)
|
||||
{
|
||||
int i, j;
|
||||
for (i = start; (i * inc) <= stop; i += inc) {
|
||||
for (j = 0; j < amii_numcolors; ++j) {
|
||||
int r, g, b;
|
||||
|
||||
r = (amiv_init_map[j] & 0xf00) >> 8;
|
||||
g = (amiv_init_map[j] & 0xf0) >> 4;
|
||||
b = (amiv_init_map[j] & 0xf);
|
||||
r = (r * i) / 16;
|
||||
g = (g * i) / 16;
|
||||
b = (b * i) / 16;
|
||||
transpalette[j] = ((r << 8) | (g << 4) | b);
|
||||
}
|
||||
LoadRGB4(&HackScreen->ViewPort, transpalette, amii_numcolors);
|
||||
Delay(1);
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* AMII_GRAPHICS */
|
||||
|
||||
/*
|
||||
TODO:
|
||||
memory leaks
|
||||
fix ReadImageFiles to return error instead of panic on error
|
||||
*/
|
||||
21
outdated/sys/amiga/amistack.c
Normal file
21
outdated/sys/amiga/amistack.c
Normal file
@@ -0,0 +1,21 @@
|
||||
/* NetHack 3.6 amistack.c $NHDT-Date: 1432512795 2015/05/25 00:13:15 $ $NHDT-Branch: master $:$NHDT-Revision: 1.8 $ */
|
||||
/* Copyright (c) Janne Salmijärvi, Tampere, Finland, 2000 */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
/*
|
||||
* Increase stack size to allow deep recursions.
|
||||
*
|
||||
* Note: This is SAS/C specific, using other compiler probably
|
||||
* requires another method for increasing stack.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef __SASC_60
|
||||
#include <dos.h>
|
||||
|
||||
/*
|
||||
* At the moment 90*1024 would suffice, but just to be on the safe side ...
|
||||
*/
|
||||
|
||||
long __stack = 128 * 1024;
|
||||
#endif
|
||||
84
outdated/sys/amiga/amitty.c
Normal file
84
outdated/sys/amiga/amitty.c
Normal file
@@ -0,0 +1,84 @@
|
||||
/* NetHack 3.6 amitty.c $NHDT-Date: 1432512795 2015/05/25 00:13:15 $ $NHDT-Branch: master $:$NHDT-Revision: 1.7 $ */
|
||||
/* Copyright (c) Kenneth Lorber, Bethesda, Maryland 1993,1996 */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
/* TTY-specific code for the Amiga
|
||||
* This is still experimental.
|
||||
* Still to do:
|
||||
* add real termcap handling - currently requires ANSI_DEFAULT
|
||||
*/
|
||||
|
||||
#include "hack.h"
|
||||
#include "tcap.h"
|
||||
#include <stdio.h>
|
||||
#include <proto/dos.h>
|
||||
|
||||
#ifdef _DCC
|
||||
#define getch() getchar()
|
||||
#endif
|
||||
#ifdef __SASC_60
|
||||
#include <clib/dos_protos.h>
|
||||
#endif
|
||||
|
||||
void NDECL(tty_change_color);
|
||||
char *NDECL(tty_get_color_string);
|
||||
|
||||
#ifdef TTY_GRAPHICS
|
||||
|
||||
int amibbs = 0; /* BBS mode */
|
||||
char bbs_id[80] = ""; /* BBS uid equivalent */
|
||||
long afh_in, afh_out; /* BBS mode Amiga filehandles */
|
||||
|
||||
void
|
||||
settty(const char *s)
|
||||
{
|
||||
end_screen();
|
||||
if (s)
|
||||
raw_print(s);
|
||||
iflags.cbreak = ON; /* this is too easy: probably wrong */
|
||||
#if 1 /* should be version>=36 */
|
||||
/* if(IsInteractive(afh_in)){ */
|
||||
SetMode(afh_in, 0); /* con mode */
|
||||
/* } */
|
||||
#endif
|
||||
}
|
||||
void
|
||||
gettty()
|
||||
{
|
||||
#if 1 /* should be VERSION >=36 */
|
||||
/* if(IsInteractive(afh_in)){ */
|
||||
SetMode(afh_in, 1); /* raw mode */
|
||||
/* } */
|
||||
#endif
|
||||
}
|
||||
void
|
||||
setftty()
|
||||
{
|
||||
iflags.cbreak = ON; /* ditto */
|
||||
}
|
||||
char kill_char = 'X' - '@';
|
||||
char erase_char = '\b';
|
||||
tgetch()
|
||||
{
|
||||
char x;
|
||||
Read(afh_in, &x, 1);
|
||||
return (x == '\r') ? '\n' : x;
|
||||
}
|
||||
void
|
||||
get_scr_size()
|
||||
{
|
||||
CO = 80;
|
||||
LI = 24;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void
|
||||
tty_change_color()
|
||||
{
|
||||
}
|
||||
char *
|
||||
tty_get_color_string()
|
||||
{
|
||||
return ("");
|
||||
}
|
||||
901
outdated/sys/amiga/amiwind.c
Normal file
901
outdated/sys/amiga/amiwind.c
Normal file
@@ -0,0 +1,901 @@
|
||||
/* NetHack 3.6 amiwind.c $NHDT-Date: 1432512794 2015/05/25 00:13:14 $ $NHDT-Branch: master $:$NHDT-Revision: 1.10 $ */
|
||||
/* Copyright (c) Olaf Seibert (KosmoSoft), 1989, 1992 */
|
||||
/* Copyright (c) Kenneth Lorber, Bethesda, Maryland 1993,1996 */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
#include "NH:sys/amiga/windefs.h"
|
||||
#include "NH:sys/amiga/winext.h"
|
||||
#include "NH:sys/amiga/winproto.h"
|
||||
|
||||
/* Have to undef CLOSE as display.h and intuition.h both use it */
|
||||
#undef CLOSE
|
||||
|
||||
#ifdef AMII_GRAPHICS /* too early in the file? too late? */
|
||||
|
||||
#ifdef AMIFLUSH
|
||||
static struct Message *FDECL(GetFMsg, (struct MsgPort *));
|
||||
#endif
|
||||
|
||||
static int BufferGetchar(void);
|
||||
static void ProcessMessage(register struct IntuiMessage *message);
|
||||
|
||||
#define BufferQueueChar(ch) (KbdBuffer[KbdBuffered++] = (ch))
|
||||
|
||||
struct Library *ConsoleDevice;
|
||||
|
||||
#include "NH:sys/amiga/amimenu.c"
|
||||
|
||||
/* Now our own variables */
|
||||
|
||||
struct IntuitionBase *IntuitionBase;
|
||||
struct Screen *HackScreen;
|
||||
struct Window *pr_WindowPtr;
|
||||
struct MsgPort *HackPort;
|
||||
struct IOStdReq ConsoleIO;
|
||||
struct Menu *MenuStrip;
|
||||
APTR *VisualInfo;
|
||||
char Initialized = 0;
|
||||
WEVENT lastevent;
|
||||
|
||||
#ifdef HACKFONT
|
||||
struct GfxBase *GfxBase;
|
||||
struct Library *DiskfontBase;
|
||||
#endif
|
||||
|
||||
#define KBDBUFFER 10
|
||||
static unsigned char KbdBuffer[KBDBUFFER];
|
||||
unsigned char KbdBuffered;
|
||||
|
||||
#ifdef HACKFONT
|
||||
|
||||
struct TextFont *TextsFont = NULL;
|
||||
struct TextFont *HackFont = NULL;
|
||||
struct TextFont *RogueFont = NULL;
|
||||
|
||||
UBYTE FontName[] = "NetHack:hack.font";
|
||||
/* # chars in "NetHack:": */
|
||||
#define SIZEOF_DISKNAME 8
|
||||
|
||||
#endif
|
||||
|
||||
struct TextAttr Hack80 = {
|
||||
#ifdef HACKFONT
|
||||
&FontName[SIZEOF_DISKNAME],
|
||||
#else
|
||||
(UBYTE *) "topaz.font",
|
||||
#endif
|
||||
8, FS_NORMAL, FPF_DISKFONT | FPF_DESIGNED | FPF_ROMFONT
|
||||
};
|
||||
|
||||
struct TextAttr TextsFont13 = { (UBYTE *) "courier.font", 13, FS_NORMAL,
|
||||
FPF_DISKFONT | FPF_DESIGNED
|
||||
#ifndef HACKFONT
|
||||
| FPF_ROMFONT
|
||||
#endif
|
||||
};
|
||||
|
||||
/* Avoid doing a ReplyMsg through a window that no longer exists. */
|
||||
static enum { NoAction, CloseOver } delayed_key_action = NoAction;
|
||||
|
||||
/*
|
||||
* Open a window that shares the HackPort IDCMP. Use CloseShWindow()
|
||||
* to close.
|
||||
*/
|
||||
|
||||
struct Window *
|
||||
OpenShWindow(nw)
|
||||
struct NewWindow *nw;
|
||||
{
|
||||
register struct Window *win;
|
||||
register ULONG idcmpflags;
|
||||
|
||||
if (!HackPort) /* Sanity check */
|
||||
return (struct Window *) 0;
|
||||
|
||||
idcmpflags = nw->IDCMPFlags;
|
||||
nw->IDCMPFlags = 0;
|
||||
if (!(win = OpenWindow((void *) nw))) {
|
||||
nw->IDCMPFlags = idcmpflags;
|
||||
return (struct Window *) 0;
|
||||
}
|
||||
|
||||
nw->IDCMPFlags = idcmpflags;
|
||||
win->UserPort = HackPort;
|
||||
ModifyIDCMP(win, idcmpflags);
|
||||
return win;
|
||||
}
|
||||
|
||||
/*
|
||||
* Close a window that shared the HackPort IDCMP port.
|
||||
*/
|
||||
|
||||
void FDECL(CloseShWindow, (struct Window *));
|
||||
void
|
||||
CloseShWindow(win)
|
||||
struct Window *win;
|
||||
{
|
||||
register struct IntuiMessage *msg;
|
||||
|
||||
if (!HackPort)
|
||||
panic("HackPort NULL in CloseShWindow");
|
||||
if (!win)
|
||||
return;
|
||||
|
||||
Forbid();
|
||||
/* Flush all messages for all windows to avoid typeahead and other
|
||||
* similar problems...
|
||||
*/
|
||||
while (msg = (struct IntuiMessage *) GetMsg(win->UserPort))
|
||||
ReplyMsg((struct Message *) msg);
|
||||
KbdBuffered = 0;
|
||||
win->UserPort = (struct MsgPort *) 0;
|
||||
ModifyIDCMP(win, 0L);
|
||||
Permit();
|
||||
CloseWindow(win);
|
||||
}
|
||||
|
||||
static int
|
||||
BufferGetchar()
|
||||
{
|
||||
register int c;
|
||||
|
||||
if (KbdBuffered > 0) {
|
||||
c = KbdBuffer[0];
|
||||
KbdBuffered--;
|
||||
/* Move the remaining characters */
|
||||
if (KbdBuffered < sizeof(KbdBuffer))
|
||||
memcpy(KbdBuffer, KbdBuffer + 1, KbdBuffered);
|
||||
return c;
|
||||
}
|
||||
|
||||
return NO_CHAR;
|
||||
}
|
||||
|
||||
/*
|
||||
* This should remind you remotely of DeadKeyConvert, but we are cheating
|
||||
* a bit. We want complete control over the numeric keypad, and no dead
|
||||
* keys... (they are assumed to be on Alted keys).
|
||||
*
|
||||
* Also assumed is that the IntuiMessage is of type RAWKEY. For some
|
||||
* reason, IECODE_UP_PREFIX events seem to be lost when they occur while
|
||||
* our console window is inactive. This is particulary troublesome with
|
||||
* qualifier keys... Is this because I never RawKeyConvert those events???
|
||||
*/
|
||||
|
||||
int
|
||||
ConvertKey(message)
|
||||
register struct IntuiMessage *message;
|
||||
{
|
||||
static struct InputEvent theEvent;
|
||||
static char numpad[] = "bjnh.lyku";
|
||||
static char ctrl_numpad[] = "\x02\x0A\x0E\x08.\x0C\x19\x0B\x15";
|
||||
static char shift_numpad[] = "BJNH.LYKU";
|
||||
|
||||
unsigned char buffer[10];
|
||||
struct Window *w = message->IDCMPWindow;
|
||||
register int length;
|
||||
register ULONG qualifier;
|
||||
char numeric_pad, shift, control, alt;
|
||||
|
||||
if (amii_wins[WIN_MAP])
|
||||
w = amii_wins[WIN_MAP]->win;
|
||||
qualifier = message->Qualifier;
|
||||
|
||||
control = (qualifier & IEQUALIFIER_CONTROL) != 0;
|
||||
shift = (qualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)) != 0;
|
||||
alt = (qualifier & (IEQUALIFIER_LALT | IEQUALIFIER_RALT)) != 0;
|
||||
|
||||
/* Allow ALT to function as a META key ... */
|
||||
/* But make it switchable - alt is needed for some non-US keymaps */
|
||||
if (sysflags.altmeta)
|
||||
qualifier &= ~(IEQUALIFIER_LALT | IEQUALIFIER_RALT);
|
||||
numeric_pad = (qualifier & IEQUALIFIER_NUMERICPAD) != 0;
|
||||
|
||||
/*
|
||||
* Shortcut for HELP and arrow keys. I suppose this is allowed.
|
||||
* The defines are in intuition/intuition.h, and the keys don't
|
||||
* serve 'text' input, normally. Also, parsing their escape
|
||||
* sequences is such a mess...
|
||||
*/
|
||||
|
||||
switch (message->Code) {
|
||||
case RAWHELP:
|
||||
if (alt) {
|
||||
EditColor();
|
||||
return (-1);
|
||||
}
|
||||
#ifdef CLIPPING
|
||||
else if (WINVERS_AMIV && control) {
|
||||
EditClipping();
|
||||
|
||||
CO = (w->Width - w->BorderLeft - w->BorderRight) / mxsize;
|
||||
LI = (w->Height - w->BorderTop - w->BorderBottom) / mysize;
|
||||
clipxmax = CO + clipx;
|
||||
clipymax = LI + clipy;
|
||||
if (CO < COLNO || LI < ROWNO) {
|
||||
clipping = TRUE;
|
||||
amii_cliparound(u.ux, u.uy);
|
||||
} else {
|
||||
clipping = FALSE;
|
||||
clipx = clipy = 0;
|
||||
}
|
||||
BufferQueueChar('R' - 64);
|
||||
return (-1);
|
||||
}
|
||||
#endif
|
||||
else if (WINVERS_AMIV && shift) {
|
||||
if (WIN_OVER == WIN_ERR) {
|
||||
WIN_OVER = amii_create_nhwindow(NHW_OVER);
|
||||
BufferQueueChar('R' - 64);
|
||||
} else {
|
||||
delayed_key_action = CloseOver;
|
||||
}
|
||||
return (-1);
|
||||
}
|
||||
return ('?');
|
||||
break;
|
||||
case CURSORLEFT:
|
||||
length = '4';
|
||||
numeric_pad = 1;
|
||||
goto arrow;
|
||||
case CURSORDOWN:
|
||||
length = '2';
|
||||
numeric_pad = 1;
|
||||
goto arrow;
|
||||
case CURSORUP:
|
||||
length = '8';
|
||||
numeric_pad = 1;
|
||||
goto arrow;
|
||||
case CURSORRIGHT:
|
||||
length = '6';
|
||||
numeric_pad = 1;
|
||||
goto arrow;
|
||||
}
|
||||
|
||||
theEvent.ie_Class = IECLASS_RAWKEY;
|
||||
theEvent.ie_Code = message->Code;
|
||||
theEvent.ie_Qualifier = numeric_pad ? IEQUALIFIER_NUMERICPAD : qualifier;
|
||||
theEvent.ie_EventAddress = (APTR)(message->IAddress);
|
||||
|
||||
length = RawKeyConvert(&theEvent, (char *) buffer, (long) sizeof(buffer),
|
||||
NULL);
|
||||
|
||||
if (length == 1) { /* Plain ASCII character */
|
||||
length = buffer[0];
|
||||
/*
|
||||
* If iflags.num_pad is set, movement is by 4286.
|
||||
* If not set, translate 4286 into hjkl.
|
||||
* This way, the numeric pad can /always/ be used
|
||||
* for moving, though best results are when it is off.
|
||||
*/
|
||||
arrow:
|
||||
if (!iflags.num_pad && numeric_pad && length >= '1'
|
||||
&& length <= '9') {
|
||||
length -= '1';
|
||||
if (control) {
|
||||
length = ctrl_numpad[length];
|
||||
} else if (shift) {
|
||||
length = shift_numpad[length];
|
||||
} else {
|
||||
length = numpad[length];
|
||||
}
|
||||
}
|
||||
|
||||
/* Kludge to allow altmeta on eg. scandinavian keymap (# ==
|
||||
shift+alt+3)
|
||||
and prevent it from interfering with # command (M-#) */
|
||||
if (length == ('#' | 0x80))
|
||||
return '#';
|
||||
if (alt && sysflags.altmeta)
|
||||
length |= 0x80;
|
||||
return (length);
|
||||
} /* else shift, ctrl, alt, amiga, F-key, shift-tab, etc */
|
||||
else if (length > 1) {
|
||||
int i;
|
||||
|
||||
if (length == 3 && buffer[0] == 155 && buffer[2] == 126) {
|
||||
int got = 1;
|
||||
switch (buffer[1]) {
|
||||
case 53:
|
||||
mxsize = mysize = 8;
|
||||
break;
|
||||
case 54:
|
||||
mxsize = mysize = 16;
|
||||
break;
|
||||
case 55:
|
||||
mxsize = mysize = 24;
|
||||
break;
|
||||
case 56:
|
||||
mxsize = mysize = 32;
|
||||
break;
|
||||
case 57:
|
||||
mxsize = mysize = 48;
|
||||
break;
|
||||
default:
|
||||
got = 0;
|
||||
break;
|
||||
}
|
||||
#ifdef OPT_DISPMAP
|
||||
dispmap_sanity();
|
||||
#endif
|
||||
|
||||
if (got) {
|
||||
CO = (w->Width - w->BorderLeft - w->BorderRight) / mxsize;
|
||||
LI = (w->Height - w->BorderTop - w->BorderBottom) / mysize;
|
||||
clipxmax = CO + clipx;
|
||||
clipymax = LI + clipy;
|
||||
if (CO < COLNO || LI < ROWNO) {
|
||||
amii_cliparound(u.ux, u.uy);
|
||||
} else {
|
||||
CO = COLNO;
|
||||
LI = ROWNO;
|
||||
}
|
||||
reclip = 1;
|
||||
doredraw();
|
||||
flush_screen(1);
|
||||
reclip = 0;
|
||||
/*BufferQueueChar( 'R'-64 );*/
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
printf("Unrecognized key: %d ", (int) buffer[0]);
|
||||
for (i = 1; i < length; ++i)
|
||||
printf("%d ", (int) buffer[i]);
|
||||
printf("\n");
|
||||
}
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Process an incoming IntuiMessage.
|
||||
* It would certainly look nicer if this could be done using a
|
||||
* PA_SOFTINT message port, but we cannot call RawKeyConvert()
|
||||
* during a software interrupt.
|
||||
* Anyway, amikbhit()/kbhit() is called often enough, and usually gets
|
||||
* ahead of input demands, when the user types ahead.
|
||||
*/
|
||||
|
||||
static void
|
||||
ProcessMessage(message)
|
||||
register struct IntuiMessage *message;
|
||||
{
|
||||
int c;
|
||||
int cnt;
|
||||
menu_item *mip;
|
||||
static int skip_mouse = 0; /* need to ignore next mouse event on
|
||||
* a window activation */
|
||||
struct Window *w = message->IDCMPWindow;
|
||||
|
||||
switch (message->Class) {
|
||||
case ACTIVEWINDOW:
|
||||
if (alwaysinvent && WIN_INVEN != WIN_ERR
|
||||
&& w == amii_wins[WIN_INVEN]->win) {
|
||||
cnt = DoMenuScroll(WIN_INVEN, 0, PICK_NONE, &mip);
|
||||
} else if (scrollmsg && WIN_MESSAGE != WIN_ERR
|
||||
&& w == amii_wins[WIN_MESSAGE]->win) {
|
||||
cnt = DoMenuScroll(WIN_MESSAGE, 0, PICK_NONE, &mip);
|
||||
} else {
|
||||
skip_mouse = 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case MOUSEBUTTONS: {
|
||||
if (skip_mouse) {
|
||||
skip_mouse = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!amii_wins[WIN_MAP] || w != amii_wins[WIN_MAP]->win)
|
||||
break;
|
||||
|
||||
if (message->Code == SELECTDOWN) {
|
||||
lastevent.type = WEMOUSE;
|
||||
lastevent.un.mouse.x = message->MouseX;
|
||||
lastevent.un.mouse.y = message->MouseY;
|
||||
/* With shift equals RUN */
|
||||
lastevent.un.mouse.qual =
|
||||
(message->Qualifier
|
||||
& (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)) != 0;
|
||||
}
|
||||
} break;
|
||||
|
||||
case MENUPICK: {
|
||||
USHORT thismenu;
|
||||
struct MenuItem *item;
|
||||
|
||||
thismenu = message->Code;
|
||||
while (thismenu != MENUNULL) {
|
||||
item = ItemAddress(MenuStrip, (ULONG) thismenu);
|
||||
if (KbdBuffered < KBDBUFFER)
|
||||
BufferQueueChar((char) (GTMENUITEM_USERDATA(item)));
|
||||
thismenu = item->NextSelect;
|
||||
}
|
||||
} break;
|
||||
|
||||
case REFRESHWINDOW: {
|
||||
if (scrollmsg && amii_wins[WIN_MESSAGE]
|
||||
&& w == amii_wins[WIN_MESSAGE]->win) {
|
||||
cnt = DoMenuScroll(WIN_MESSAGE, 0, PICK_NONE, &mip);
|
||||
}
|
||||
} break;
|
||||
|
||||
case CLOSEWINDOW:
|
||||
if (WIN_INVEN != WIN_ERR && w == amii_wins[WIN_INVEN]->win) {
|
||||
dismiss_nhwindow(WIN_INVEN);
|
||||
}
|
||||
if (WINVERS_AMIV
|
||||
&& (WIN_OVER != WIN_ERR && w == amii_wins[WIN_OVER]->win)) {
|
||||
destroy_nhwindow(WIN_OVER);
|
||||
WIN_OVER = WIN_ERR;
|
||||
}
|
||||
break;
|
||||
|
||||
case RAWKEY:
|
||||
if (!(message->Code & IECODE_UP_PREFIX)) {
|
||||
/* May queue multiple characters
|
||||
* but doesn't do that yet...
|
||||
*/
|
||||
if ((c = ConvertKey(message)) > 0)
|
||||
BufferQueueChar(c);
|
||||
}
|
||||
break;
|
||||
|
||||
case GADGETDOWN:
|
||||
if (WIN_MESSAGE != WIN_ERR && w == amii_wins[WIN_MESSAGE]->win) {
|
||||
cnt = DoMenuScroll(WIN_MESSAGE, 0, PICK_NONE, &mip);
|
||||
} else if (WIN_INVEN != WIN_ERR && w == amii_wins[WIN_INVEN]->win) {
|
||||
cnt = DoMenuScroll(WIN_INVEN, 0, PICK_NONE, &mip);
|
||||
}
|
||||
break;
|
||||
|
||||
case NEWSIZE:
|
||||
if (WIN_MESSAGE != WIN_ERR && w == amii_wins[WIN_MESSAGE]->win) {
|
||||
if (WINVERS_AMIV) {
|
||||
/* Make sure that new size is honored for good. */
|
||||
SetAPen(w->RPort, amii_msgBPen);
|
||||
SetBPen(w->RPort, amii_msgBPen);
|
||||
SetDrMd(w->RPort, JAM2);
|
||||
RectFill(w->RPort, w->BorderLeft, w->BorderTop,
|
||||
w->Width - w->BorderRight - 1,
|
||||
w->Height - w->BorderBottom - 1);
|
||||
}
|
||||
ReDisplayData(WIN_MESSAGE);
|
||||
} else if (WIN_INVEN != WIN_ERR && w == amii_wins[WIN_INVEN]->win) {
|
||||
ReDisplayData(WIN_INVEN);
|
||||
} else if (WINVERS_AMIV && (WIN_OVER != WIN_ERR
|
||||
&& w == amii_wins[WIN_OVER]->win)) {
|
||||
BufferQueueChar('R' - 64);
|
||||
} else if (WIN_MAP != WIN_ERR && w == amii_wins[WIN_MAP]->win) {
|
||||
#ifdef CLIPPING
|
||||
CO = (w->Width - w->BorderLeft - w->BorderRight) / mxsize;
|
||||
LI = (w->Height - w->BorderTop - w->BorderBottom) / mysize;
|
||||
clipxmax = CO + clipx;
|
||||
clipymax = LI + clipy;
|
||||
if (CO < COLNO || LI < ROWNO) {
|
||||
amii_cliparound(u.ux, u.uy);
|
||||
} else {
|
||||
clipping = FALSE;
|
||||
clipx = clipy = 0;
|
||||
}
|
||||
BufferQueueChar('R' - 64);
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
}
|
||||
ReplyMsg((struct Message *) message);
|
||||
|
||||
switch (delayed_key_action) {
|
||||
case CloseOver:
|
||||
amii_destroy_nhwindow(WIN_OVER);
|
||||
WIN_OVER = WIN_ERR;
|
||||
delayed_key_action = NoAction;
|
||||
case NoAction:
|
||||
; /* null */
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* AMII_GRAPHICS */
|
||||
/*
|
||||
* Get all incoming messages and fill up the keyboard buffer,
|
||||
* thus allowing Intuition to (maybe) free up the IntuiMessages.
|
||||
* Return when no more messages left, or keyboard buffer half full.
|
||||
* We need to do this since there is no one-to-one correspondence
|
||||
* between characters and incoming messages.
|
||||
*/
|
||||
|
||||
#if defined(TTY_GRAPHICS) && !defined(AMII_GRAPHICS)
|
||||
int
|
||||
kbhit()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
int
|
||||
kbhit()
|
||||
{
|
||||
int c;
|
||||
#ifdef TTY_GRAPHICS
|
||||
/* a kludge to defuse the mess in allmain.c */
|
||||
/* I hope this is the right approach */
|
||||
if (windowprocs.win_init_nhwindows == amii_procs.win_init_nhwindows)
|
||||
return 0;
|
||||
#endif
|
||||
c = amikbhit();
|
||||
if (c <= 0)
|
||||
return (0);
|
||||
return (c);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef AMII_GRAPHICS
|
||||
|
||||
int
|
||||
amikbhit()
|
||||
{
|
||||
register struct IntuiMessage *message;
|
||||
while (KbdBuffered < KBDBUFFER / 2) {
|
||||
#ifdef AMIFLUSH
|
||||
message = (struct IntuiMessage *) GetFMsg(HackPort);
|
||||
#else
|
||||
message = (struct IntuiMessage *) GetMsg(HackPort);
|
||||
#endif
|
||||
if (message) {
|
||||
ProcessMessage(message);
|
||||
if (lastevent.type != WEUNK && lastevent.type != WEKEY)
|
||||
break;
|
||||
} else
|
||||
break;
|
||||
}
|
||||
return (lastevent.type == WEUNK) ? KbdBuffered : -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get a character from the keyboard buffer, waiting if not available.
|
||||
* Ignore other kinds of events that happen in the mean time.
|
||||
*/
|
||||
|
||||
int
|
||||
WindowGetchar()
|
||||
{
|
||||
while ((lastevent.type = WEUNK), amikbhit() <= 0) {
|
||||
WaitPort(HackPort);
|
||||
}
|
||||
return BufferGetchar();
|
||||
}
|
||||
|
||||
WETYPE
|
||||
WindowGetevent()
|
||||
{
|
||||
lastevent.type = WEUNK;
|
||||
while (amikbhit() == 0) {
|
||||
WaitPort(HackPort);
|
||||
}
|
||||
|
||||
if (KbdBuffered) {
|
||||
lastevent.type = WEKEY;
|
||||
lastevent.un.key = BufferGetchar();
|
||||
}
|
||||
return (lastevent.type);
|
||||
}
|
||||
|
||||
/*
|
||||
* Clean up everything. But before we do, ask the user to hit return
|
||||
* when there is something that s/he should read.
|
||||
*/
|
||||
|
||||
void
|
||||
amii_cleanup()
|
||||
{
|
||||
register struct IntuiMessage *msg;
|
||||
|
||||
/* Close things up */
|
||||
if (HackPort) {
|
||||
amii_raw_print("");
|
||||
amii_getret();
|
||||
}
|
||||
|
||||
if (ConsoleIO.io_Device)
|
||||
CloseDevice((struct IORequest *) &ConsoleIO);
|
||||
ConsoleIO.io_Device = 0;
|
||||
|
||||
if (ConsoleIO.io_Message.mn_ReplyPort)
|
||||
DeleteMsgPort(ConsoleIO.io_Message.mn_ReplyPort);
|
||||
ConsoleIO.io_Message.mn_ReplyPort = 0;
|
||||
|
||||
/* Strip messages before deleting the port */
|
||||
if (HackPort) {
|
||||
Forbid();
|
||||
while (msg = (struct IntuiMessage *) GetMsg(HackPort))
|
||||
ReplyMsg((struct Message *) msg);
|
||||
kill_nhwindows(1);
|
||||
DeleteMsgPort(HackPort);
|
||||
HackPort = NULL;
|
||||
Permit();
|
||||
}
|
||||
|
||||
/* Close the screen, under v37 or greater it is a pub screen and there may
|
||||
* be visitors, so check close status and wait till everyone is gone.
|
||||
*/
|
||||
if (HackScreen) {
|
||||
#ifdef INTUI_NEW_LOOK
|
||||
if (IntuitionBase->LibNode.lib_Version >= 37) {
|
||||
if (MenuStrip)
|
||||
FreeMenus(MenuStrip);
|
||||
if (VisualInfo)
|
||||
FreeVisualInfo(VisualInfo);
|
||||
while (CloseScreen(HackScreen) == FALSE) {
|
||||
struct EasyStruct easy = {
|
||||
sizeof(struct EasyStruct), 0, "Nethack Problem",
|
||||
"Can't Close Screen, Close Visiting Windows", "Okay"
|
||||
};
|
||||
EasyRequest(NULL, &easy, NULL, NULL);
|
||||
}
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
CloseScreen(HackScreen);
|
||||
}
|
||||
HackScreen = NULL;
|
||||
}
|
||||
|
||||
#ifdef HACKFONT
|
||||
if (HackFont) {
|
||||
CloseFont(HackFont);
|
||||
HackFont = NULL;
|
||||
}
|
||||
|
||||
if (TextsFont) {
|
||||
CloseFont(TextsFont);
|
||||
TextsFont = NULL;
|
||||
}
|
||||
|
||||
if (RogueFont) {
|
||||
CloseFont(RogueFont);
|
||||
RogueFont = NULL;
|
||||
}
|
||||
|
||||
if (DiskfontBase) {
|
||||
CloseLibrary(DiskfontBase);
|
||||
DiskfontBase = NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (GadToolsBase) {
|
||||
CloseLibrary((struct Library *) GadToolsBase);
|
||||
GadToolsBase = NULL;
|
||||
}
|
||||
|
||||
if (LayersBase) {
|
||||
CloseLibrary((struct Library *) LayersBase);
|
||||
LayersBase = NULL;
|
||||
}
|
||||
|
||||
if (GfxBase) {
|
||||
CloseLibrary((struct Library *) GfxBase);
|
||||
GfxBase = NULL;
|
||||
}
|
||||
|
||||
if (IntuitionBase) {
|
||||
CloseLibrary((struct Library *) IntuitionBase);
|
||||
IntuitionBase = NULL;
|
||||
}
|
||||
|
||||
#ifdef SHAREDLIB
|
||||
if (DOSBase) {
|
||||
CloseLibrary((struct Library *) DOSBase);
|
||||
DOSBase = NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
((struct Process *) FindTask(NULL))->pr_WindowPtr = (APTR) pr_WindowPtr;
|
||||
|
||||
Initialized = 0;
|
||||
}
|
||||
|
||||
#endif /* AMII_GRAPHICS */
|
||||
|
||||
#ifndef SHAREDLIB
|
||||
void
|
||||
Abort(rc)
|
||||
long rc;
|
||||
{
|
||||
int fault = 1;
|
||||
#ifdef CHDIR
|
||||
extern char orgdir[];
|
||||
chdir(orgdir);
|
||||
#endif
|
||||
#ifdef AMII_GRAPHICS
|
||||
if (Initialized && ConsoleDevice
|
||||
&& windowprocs.win_init_nhwindows == amii_procs.win_init_nhwindows) {
|
||||
printf("\n\nAbort with alert code %08lx...\n", rc);
|
||||
amii_getret();
|
||||
} else
|
||||
#endif
|
||||
printf("\n\nAbort with alert code %08lx...\n", rc);
|
||||
/* Alert(rc); this is too severe */
|
||||
#ifdef __SASC
|
||||
#ifdef INTUI_NEW_LOOK
|
||||
if (IntuitionBase->LibNode.lib_Version >= 37) {
|
||||
struct EasyStruct es = {
|
||||
sizeof(struct EasyStruct), 0, "NetHack Panic Request",
|
||||
"NetHack is Aborting with code == 0x%08lx",
|
||||
"Continue Abort|Return to Program|Clean up and exit",
|
||||
};
|
||||
fault = EasyRequest(NULL, &es, NULL, (long) rc);
|
||||
if (fault == 2)
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
if (fault == 1) {
|
||||
/* __emit(0x4afc); */ /* illegal instruction */
|
||||
__emit(0x40fc); /* divide by */
|
||||
__emit(0x0000); /* #0 */
|
||||
/* NOTE: don't move amii_cleanup() above here - */
|
||||
/* it is too likely to kill the system */
|
||||
/* before it can get the SnapShot out, if */
|
||||
/* there is something really wrong. */
|
||||
}
|
||||
#endif
|
||||
#ifdef AMII_GRAPHICS
|
||||
if (windowprocs.win_init_nhwindows == amii_procs.win_init_nhwindows)
|
||||
amii_cleanup();
|
||||
#endif
|
||||
#undef exit
|
||||
#ifdef AZTEC_C
|
||||
_abort();
|
||||
#endif
|
||||
exit((int) rc);
|
||||
}
|
||||
|
||||
void
|
||||
CleanUp()
|
||||
{
|
||||
amii_cleanup();
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef AMII_GRAPHICS
|
||||
|
||||
#ifdef AMIFLUSH
|
||||
/* This routine adapted from AmigaMail IV-37 by Michael Sinz */
|
||||
static struct Message *
|
||||
GetFMsg(port)
|
||||
struct MsgPort *port;
|
||||
{
|
||||
struct IntuiMessage *msg, *succ, *succ1;
|
||||
|
||||
if (msg = (struct IntuiMessage *) GetMsg(port)) {
|
||||
if (!sysflags.amiflush)
|
||||
return ((struct Message *) msg);
|
||||
if (msg->Class == RAWKEY) {
|
||||
Forbid();
|
||||
succ = (struct IntuiMessage *) (port->mp_MsgList.lh_Head);
|
||||
while (succ1 = (struct IntuiMessage *) (succ->ExecMessage.mn_Node
|
||||
.ln_Succ)) {
|
||||
if (succ->Class == RAWKEY) {
|
||||
Remove((struct Node *) succ);
|
||||
ReplyMsg((struct Message *) succ);
|
||||
}
|
||||
succ = succ1;
|
||||
}
|
||||
Permit();
|
||||
}
|
||||
}
|
||||
return ((struct Message *) msg);
|
||||
}
|
||||
#endif
|
||||
|
||||
struct NewWindow *
|
||||
DupNewWindow(win)
|
||||
struct NewWindow *win;
|
||||
{
|
||||
struct NewWindow *nwin;
|
||||
struct Gadget *ngd, *gd, *pgd = NULL;
|
||||
struct PropInfo *pip;
|
||||
struct StringInfo *sip;
|
||||
|
||||
/* Copy the (Ext)NewWindow structure */
|
||||
|
||||
nwin = (struct NewWindow *) alloc(sizeof(struct NewWindow));
|
||||
*nwin = *win;
|
||||
|
||||
/* Now do the gadget list */
|
||||
|
||||
nwin->FirstGadget = NULL;
|
||||
for (gd = win->FirstGadget; gd; gd = gd->NextGadget) {
|
||||
ngd = (struct Gadget *) alloc(sizeof(struct Gadget));
|
||||
*ngd = *gd;
|
||||
if (gd->GadgetType == STRGADGET) {
|
||||
sip = (struct StringInfo *) alloc(sizeof(struct StringInfo));
|
||||
*sip = *((struct StringInfo *) gd->SpecialInfo);
|
||||
sip->Buffer = (UBYTE *) alloc(sip->MaxChars);
|
||||
*sip->Buffer = 0;
|
||||
ngd->SpecialInfo = (APTR) sip;
|
||||
} else if (gd->GadgetType == PROPGADGET) {
|
||||
pip = (struct PropInfo *) alloc(sizeof(struct PropInfo));
|
||||
*pip = *((struct PropInfo *) gd->SpecialInfo);
|
||||
ngd->SpecialInfo = (APTR) pip;
|
||||
}
|
||||
if (pgd)
|
||||
pgd->NextGadget = ngd;
|
||||
else
|
||||
nwin->FirstGadget = ngd;
|
||||
pgd = ngd;
|
||||
ngd->NextGadget = NULL;
|
||||
ngd->UserData = (APTR) 0x45f35c3d; // magic cookie for FreeNewWindow()
|
||||
}
|
||||
return (nwin);
|
||||
}
|
||||
|
||||
void
|
||||
FreeNewWindow(win)
|
||||
struct NewWindow *win;
|
||||
{
|
||||
register struct Gadget *gd, *pgd;
|
||||
register struct StringInfo *sip;
|
||||
|
||||
for (gd = win->FirstGadget; gd; gd = pgd) {
|
||||
pgd = gd->NextGadget;
|
||||
if ((ULONG) gd->UserData == 0x45f35c3d) {
|
||||
if (gd->GadgetType == STRGADGET) {
|
||||
sip = (struct StringInfo *) gd->SpecialInfo;
|
||||
free(sip->Buffer);
|
||||
free(sip);
|
||||
} else if (gd->GadgetType == PROPGADGET) {
|
||||
free((struct PropInfo *) gd->SpecialInfo);
|
||||
}
|
||||
free(gd);
|
||||
}
|
||||
}
|
||||
free(win);
|
||||
}
|
||||
|
||||
void
|
||||
bell()
|
||||
{
|
||||
if (flags.silent)
|
||||
return;
|
||||
DisplayBeep(NULL);
|
||||
}
|
||||
|
||||
void
|
||||
amii_delay_output()
|
||||
{
|
||||
/* delay 50 ms */
|
||||
Delay(2L);
|
||||
}
|
||||
|
||||
void
|
||||
amii_number_pad(state)
|
||||
int state;
|
||||
{
|
||||
}
|
||||
#endif /* AMII_GRAPHICS */
|
||||
|
||||
#ifndef SHAREDLIB
|
||||
void
|
||||
amiv_loadlib(void)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
amii_loadlib(void)
|
||||
{
|
||||
}
|
||||
|
||||
/* fatal error */
|
||||
/*VARARGS1*/
|
||||
void error
|
||||
VA_DECL(const char *, s)
|
||||
{
|
||||
VA_START(s);
|
||||
VA_INIT(s, char *);
|
||||
|
||||
putchar('\n');
|
||||
vprintf(s, VA_ARGS);
|
||||
putchar('\n');
|
||||
|
||||
VA_END();
|
||||
Abort(0L);
|
||||
}
|
||||
#endif
|
||||
40
outdated/sys/amiga/amiwind.p
Normal file
40
outdated/sys/amiga/amiwind.p
Normal file
@@ -0,0 +1,40 @@
|
||||
/* NetHack 3.6 amiwind.p $NHDT-Date: 1432512795 2015/05/25 00:13:15 $ $NHDT-Branch: master $:$NHDT-Revision: 1.6 $ */
|
||||
/* Copyright (c) Gregg Wonderly, Naperville, IL, 1992, 1993 */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
/* amiwind.c */
|
||||
#ifdef INTUI_NEW_LOOK
|
||||
struct Window *FDECL( OpenShWindow, (struct ExtNewWindow *) );
|
||||
#else
|
||||
struct Window *FDECL( OpenShWindow, (struct NewWindow *) );
|
||||
#endif
|
||||
void FDECL( CloseShWindow, (struct Window *));
|
||||
int NDECL( kbhit );
|
||||
int NDECL( amikbhit );
|
||||
int NDECL( WindowGetchar );
|
||||
WETYPE NDECL( WindowGetevent );
|
||||
void NDECL( WindowFlush );
|
||||
void FDECL( WindowPutchar, (char ));
|
||||
void FDECL( WindowFPuts, (const char *));
|
||||
void FDECL( WindowPuts, (const char *));
|
||||
void FDECL( WindowPrintf, ( char *,... ));
|
||||
void NDECL( CleanUp );
|
||||
int FDECL( ConvertKey, ( struct IntuiMessage * ));
|
||||
#ifndef SHAREDLIB
|
||||
void FDECL( Abort, (long ));
|
||||
#endif
|
||||
void FDECL( flush_glyph_buffer, (struct Window *));
|
||||
void FDECL( amiga_print_glyph, (winid , int , int ));
|
||||
void FDECL( start_glyphout, (winid ));
|
||||
void FDECL( amii_end_glyphout, (winid ));
|
||||
#ifdef INTUI_NEW_LOOK
|
||||
struct ExtNewWindow *FDECL( DupNewWindow, (struct ExtNewWindow *));
|
||||
void FDECL( FreeNewWindow, (struct ExtNewWindow *));
|
||||
#else
|
||||
struct NewWindow *FDECL( DupNewWindow, (struct NewWindow *));
|
||||
void FDECL( FreeNewWindow, (struct NewWindow *));
|
||||
#endif
|
||||
void NDECL( bell );
|
||||
void NDECL( amii_delay_output );
|
||||
void FDECL( amii_number_pad, (int ));
|
||||
void amii_cleanup( void );
|
||||
258
outdated/sys/amiga/clipwin.c
Normal file
258
outdated/sys/amiga/clipwin.c
Normal file
@@ -0,0 +1,258 @@
|
||||
static USHORT Palette[] = {
|
||||
0x0AAA, /* color #0 */
|
||||
0x0000, /* color #1 */
|
||||
0x0FFF, /* color #2 */
|
||||
0x058B, /* color #3 */
|
||||
0x000F, /* color #4 */
|
||||
0x0F0F, /* color #5 */
|
||||
0x00FF, /* color #6 */
|
||||
0x0FFF /* color #7 */
|
||||
#define PaletteColorCount 8
|
||||
};
|
||||
|
||||
#define PALETTE Palette
|
||||
|
||||
static SHORT ClipBorderVectors1[] = { 0, 0, 76, 0, 76, 11, 0, 11, 0, 0 };
|
||||
static struct Border ClipBorder1 = {
|
||||
-1, -1, /* XY origin relative to container TopLeft */
|
||||
3, 0, JAM1, /* front pen, back pen and drawmode */
|
||||
5, /* number of XY vectors */
|
||||
ClipBorderVectors1, /* pointer to XY vectors */
|
||||
NULL /* next border in list */
|
||||
};
|
||||
|
||||
static struct IntuiText ClipIText1 = {
|
||||
4, 0, JAM1, /* front and back text pens, drawmode and fill byte */
|
||||
15, 1, /* XY origin relative to container TopLeft */
|
||||
NULL, /* font pointer or NULL for default */
|
||||
"Cancel", /* pointer to text */
|
||||
NULL /* next IntuiText structure */
|
||||
};
|
||||
|
||||
static struct Gadget ClipCancel = {
|
||||
NULL, /* next gadget */
|
||||
240, 59, /* origin XY of hit box relative to window TopLeft */
|
||||
75, 10, /* hit box width and height */
|
||||
NULL, /* gadget flags */
|
||||
RELVERIFY, /* activation flags */
|
||||
BOOLGADGET, /* gadget type flags */
|
||||
(APTR) &ClipBorder1, /* gadget border or image to be rendered */
|
||||
NULL, /* alternate imagery for selection */
|
||||
&ClipIText1, /* first IntuiText structure */
|
||||
NULL, /* gadget mutual-exclude long word */
|
||||
NULL, /* SpecialInfo structure */
|
||||
GADCANCEL, /* user-definable data */
|
||||
NULL /* pointer to user-definable data */
|
||||
};
|
||||
|
||||
static SHORT ClipBorderVectors2[] = { 0, 0, 78, 0, 78, 11, 0, 11, 0, 0 };
|
||||
static struct Border ClipBorder2 = {
|
||||
-1, -1, /* XY origin relative to container TopLeft */
|
||||
3, 0, JAM1, /* front pen, back pen and drawmode */
|
||||
5, /* number of XY vectors */
|
||||
ClipBorderVectors2, /* pointer to XY vectors */
|
||||
NULL /* next border in list */
|
||||
};
|
||||
|
||||
static struct IntuiText ClipIText2 = {
|
||||
4, 0, JAM1, /* front and back text pens, drawmode and fill byte */
|
||||
24, 1, /* XY origin relative to container TopLeft */
|
||||
NULL, /* font pointer or NULL for default */
|
||||
"Okay", /* pointer to text */
|
||||
NULL /* next IntuiText structure */
|
||||
};
|
||||
|
||||
static struct Gadget ClipOkay = {
|
||||
&ClipCancel, /* next gadget */
|
||||
17, 60, /* origin XY of hit box relative to window TopLeft */
|
||||
77, 10, /* hit box width and height */
|
||||
NULL, /* gadget flags */
|
||||
RELVERIFY, /* activation flags */
|
||||
BOOLGADGET, /* gadget type flags */
|
||||
(APTR) &ClipBorder2, /* gadget border or image to be rendered */
|
||||
NULL, /* alternate imagery for selection */
|
||||
&ClipIText2, /* first IntuiText structure */
|
||||
NULL, /* gadget mutual-exclude long word */
|
||||
NULL, /* SpecialInfo structure */
|
||||
GADOKAY, /* user-definable data */
|
||||
NULL /* pointer to user-definable data */
|
||||
};
|
||||
|
||||
static struct PropInfo ClipClipXCLIPSInfo = {
|
||||
AUTOKNOB + FREEHORIZ, /* PropInfo flags */
|
||||
24504, -1, /* horizontal and vertical pot values */
|
||||
10922, -1, /* horizontal and vertical body values */
|
||||
};
|
||||
|
||||
static struct Image ClipImage1 = {
|
||||
43, 0, /* XY origin relative to container TopLeft */
|
||||
24, 3, /* Image width and height in pixels */
|
||||
0, /* number of bitplanes in Image */
|
||||
NULL, /* pointer to ImageData */
|
||||
0x0000, 0x0000, /* PlanePick and PlaneOnOff */
|
||||
NULL /* next Image structure */
|
||||
};
|
||||
|
||||
static struct IntuiText ClipIText3 = {
|
||||
3, 0, JAM1, /* front and back text pens, drawmode and fill byte */
|
||||
-116, -1, /* XY origin relative to container TopLeft */
|
||||
NULL, /* font pointer or NULL for default */
|
||||
"X Clip Border:", /* pointer to text */
|
||||
NULL /* next IntuiText structure */
|
||||
};
|
||||
|
||||
static struct Gadget ClipXCLIP = {
|
||||
&ClipOkay, /* next gadget */
|
||||
134, 37, /* origin XY of hit box relative to window TopLeft */
|
||||
-199, 7, /* hit box width and height */
|
||||
GRELWIDTH, /* gadget flags */
|
||||
RELVERIFY + GADGIMMEDIATE, /* activation flags */
|
||||
PROPGADGET, /* gadget type flags */
|
||||
(APTR) &ClipImage1, /* gadget border or image to be rendered */
|
||||
NULL, /* alternate imagery for selection */
|
||||
&ClipIText3, /* first IntuiText structure */
|
||||
NULL, /* gadget mutual-exclude long word */
|
||||
(APTR) &ClipClipXCLIPSInfo, /* SpecialInfo structure */
|
||||
XCLIP, /* user-definable data */
|
||||
NULL /* pointer to user-definable data */
|
||||
};
|
||||
|
||||
static struct PropInfo ClipClipYCLIPSInfo = {
|
||||
AUTOKNOB + FREEHORIZ, /* PropInfo flags */
|
||||
13106, -1, /* horizontal and vertical pot values */
|
||||
10922, -1, /* horizontal and vertical body values */
|
||||
};
|
||||
|
||||
static struct Image ClipImage2 = {
|
||||
22, 0, /* XY origin relative to container TopLeft */
|
||||
24, 3, /* Image width and height in pixels */
|
||||
0, /* number of bitplanes in Image */
|
||||
NULL, /* pointer to ImageData */
|
||||
0x0000, 0x0000, /* PlanePick and PlaneOnOff */
|
||||
NULL /* next Image structure */
|
||||
};
|
||||
|
||||
static struct IntuiText ClipIText4 = {
|
||||
3, 0, JAM1, /* front and back text pens, drawmode and fill byte */
|
||||
-116, -1, /* XY origin relative to container TopLeft */
|
||||
NULL, /* font pointer or NULL for default */
|
||||
"Y Clip Border:", /* pointer to text */
|
||||
NULL /* next IntuiText structure */
|
||||
};
|
||||
|
||||
static struct Gadget ClipYCLIP = {
|
||||
&ClipXCLIP, /* next gadget */
|
||||
134, 46, /* origin XY of hit box relative to window TopLeft */
|
||||
-199, 7, /* hit box width and height */
|
||||
GRELWIDTH, /* gadget flags */
|
||||
RELVERIFY + GADGIMMEDIATE, /* activation flags */
|
||||
PROPGADGET, /* gadget type flags */
|
||||
(APTR) &ClipImage2, /* gadget border or image to be rendered */
|
||||
NULL, /* alternate imagery for selection */
|
||||
&ClipIText4, /* first IntuiText structure */
|
||||
NULL, /* gadget mutual-exclude long word */
|
||||
(APTR) &ClipClipYCLIPSInfo, /* SpecialInfo structure */
|
||||
YCLIP, /* user-definable data */
|
||||
NULL /* pointer to user-definable data */
|
||||
};
|
||||
|
||||
static struct PropInfo ClipClipXSIZESInfo = {
|
||||
AUTOKNOB + FREEHORIZ, /* PropInfo flags */
|
||||
26212, -1, /* horizontal and vertical pot values */
|
||||
10922, -1, /* horizontal and vertical body values */
|
||||
};
|
||||
|
||||
static struct Image ClipImage3 = {
|
||||
45, 0, /* XY origin relative to container TopLeft */
|
||||
24, 3, /* Image width and height in pixels */
|
||||
0, /* number of bitplanes in Image */
|
||||
NULL, /* pointer to ImageData */
|
||||
0x0000, 0x0000, /* PlanePick and PlaneOnOff */
|
||||
NULL /* next Image structure */
|
||||
};
|
||||
|
||||
static struct IntuiText ClipIText5 = {
|
||||
3, 0, JAM1, /* front and back text pens, drawmode and fill byte */
|
||||
-124, -1, /* XY origin relative to container TopLeft */
|
||||
NULL, /* font pointer or NULL for default */
|
||||
"X Scale Factor:", /* pointer to text */
|
||||
NULL /* next IntuiText structure */
|
||||
};
|
||||
|
||||
static struct Gadget ClipXSIZE = {
|
||||
&ClipYCLIP, /* next gadget */
|
||||
134, 15, /* origin XY of hit box relative to window TopLeft */
|
||||
-199, 7, /* hit box width and height */
|
||||
GRELWIDTH, /* gadget flags */
|
||||
RELVERIFY + GADGIMMEDIATE, /* activation flags */
|
||||
PROPGADGET, /* gadget type flags */
|
||||
(APTR) &ClipImage3, /* gadget border or image to be rendered */
|
||||
NULL, /* alternate imagery for selection */
|
||||
&ClipIText5, /* first IntuiText structure */
|
||||
NULL, /* gadget mutual-exclude long word */
|
||||
(APTR) &ClipClipXSIZESInfo, /* SpecialInfo structure */
|
||||
XSIZE, /* user-definable data */
|
||||
NULL /* pointer to user-definable data */
|
||||
};
|
||||
|
||||
static struct PropInfo ClipClipYSIZESInfo = {
|
||||
AUTOKNOB + FREEHORIZ, /* PropInfo flags */
|
||||
-25937, -1, /* horizontal and vertical pot values */
|
||||
10922, -1, /* horizontal and vertical body values */
|
||||
};
|
||||
|
||||
static struct Image ClipImage4 = {
|
||||
69, 0, /* XY origin relative to container TopLeft */
|
||||
24, 3, /* Image width and height in pixels */
|
||||
0, /* number of bitplanes in Image */
|
||||
NULL, /* pointer to ImageData */
|
||||
0x0000, 0x0000, /* PlanePick and PlaneOnOff */
|
||||
NULL /* next Image structure */
|
||||
};
|
||||
|
||||
static struct IntuiText ClipIText6 = {
|
||||
3, 0, JAM1, /* front and back text pens, drawmode and fill byte */
|
||||
-124, -1, /* XY origin relative to container TopLeft */
|
||||
NULL, /* font pointer or NULL for default */
|
||||
"Y Scale Factor:", /* pointer to text */
|
||||
NULL /* next IntuiText structure */
|
||||
};
|
||||
|
||||
static struct Gadget ClipYSIZE = {
|
||||
&ClipXSIZE, /* next gadget */
|
||||
134, 24, /* origin XY of hit box relative to window TopLeft */
|
||||
-199, 7, /* hit box width and height */
|
||||
GRELWIDTH, /* gadget flags */
|
||||
RELVERIFY + GADGIMMEDIATE, /* activation flags */
|
||||
PROPGADGET, /* gadget type flags */
|
||||
(APTR) &ClipImage4, /* gadget border or image to be rendered */
|
||||
NULL, /* alternate imagery for selection */
|
||||
&ClipIText6, /* first IntuiText structure */
|
||||
NULL, /* gadget mutual-exclude long word */
|
||||
(APTR) &ClipClipYSIZESInfo, /* SpecialInfo structure */
|
||||
YSIZE, /* user-definable data */
|
||||
NULL /* pointer to user-definable data */
|
||||
};
|
||||
|
||||
#define ClipGadgetList1 ClipYSIZE
|
||||
|
||||
static struct NewWindow ClipNewWindowStructure1 = {
|
||||
114, 16, /* window XY origin relative to TopLeft of screen */
|
||||
346, 76, /* window width and height */
|
||||
0, 1, /* detail and block pens */
|
||||
NEWSIZE + MOUSEMOVE + GADGETDOWN + GADGETUP + CLOSEWINDOW + ACTIVEWINDOW
|
||||
+ VANILLAKEY + INTUITICKS, /* IDCMP flags */
|
||||
WINDOWSIZING + WINDOWDRAG + WINDOWDEPTH + WINDOWCLOSE + ACTIVATE
|
||||
+ NOCAREREFRESH, /* other window flags */
|
||||
&ClipYSIZE, /* first gadget in gadget list */
|
||||
NULL, /* custom CHECKMARK imagery */
|
||||
"Edit Clipping Parameters", /* window title */
|
||||
NULL, /* custom screen pointer */
|
||||
NULL, /* custom bitmap */
|
||||
350,
|
||||
76, /* minimum width and height */
|
||||
-1, -1, /* maximum width and height */
|
||||
CUSTOMSCREEN /* destination screen type */
|
||||
};
|
||||
|
||||
/* end of PowerWindows source generation */
|
||||
242
outdated/sys/amiga/colorwin.c
Normal file
242
outdated/sys/amiga/colorwin.c
Normal file
@@ -0,0 +1,242 @@
|
||||
SHORT Col_BorderVectors1[] = { 0, 0, 59, 0, 59, 12, 0, 12, 0, 0 };
|
||||
struct Border Col_Border1 = {
|
||||
-1, -1, /* XY origin relative to container TopLeft */
|
||||
3, 0, JAM1, /* front pen, back pen and drawmode */
|
||||
5, /* number of XY vectors */
|
||||
Col_BorderVectors1, /* pointer to XY vectors */
|
||||
NULL /* next border in list */
|
||||
};
|
||||
|
||||
struct IntuiText Col_IText1 = {
|
||||
7, 0, JAM1, /* front and back text pens, drawmode and fill byte */
|
||||
13, 1, /* XY origin relative to container TopLeft */
|
||||
NULL, /* font pointer or NULL for default */
|
||||
"Save", /* pointer to text */
|
||||
NULL /* next IntuiText structure */
|
||||
};
|
||||
|
||||
struct Gadget Col_Save = {
|
||||
NULL, /* next gadget */
|
||||
9, 77, /* origin XY of hit box relative to window TopLeft */
|
||||
58, 11, /* hit box width and height */
|
||||
NULL, /* gadget flags */
|
||||
RELVERIFY, /* activation flags */
|
||||
BOOLGADGET, /* gadget type flags */
|
||||
(APTR) &Col_Border1, /* gadget border or image to be rendered */
|
||||
NULL, /* alternate imagery for selection */
|
||||
&Col_IText1, /* first IntuiText structure */
|
||||
NULL, /* gadget mutual-exclude long word */
|
||||
NULL, /* SpecialInfo structure */
|
||||
GADCOLSAVE, /* user-definable data */
|
||||
NULL /* pointer to user-definable data */
|
||||
};
|
||||
|
||||
SHORT Col_BorderVectors2[] = { 0, 0, 59, 0, 59, 12, 0, 12, 0, 0 };
|
||||
struct Border Col_Border2 = {
|
||||
-1, -1, /* XY origin relative to container TopLeft */
|
||||
3, 0, JAM1, /* front pen, back pen and drawmode */
|
||||
5, /* number of XY vectors */
|
||||
Col_BorderVectors2, /* pointer to XY vectors */
|
||||
NULL /* next border in list */
|
||||
};
|
||||
|
||||
struct IntuiText Col_IText2 = {
|
||||
7, 0, JAM1, /* front and back text pens, drawmode and fill byte */
|
||||
17, 1, /* XY origin relative to container TopLeft */
|
||||
NULL, /* font pointer or NULL for default */
|
||||
"Use", /* pointer to text */
|
||||
NULL /* next IntuiText structure */
|
||||
};
|
||||
|
||||
struct Gadget Col_Okay = {
|
||||
&Col_Save, /* next gadget */
|
||||
128, 77, /* origin XY of hit box relative to window TopLeft */
|
||||
58, 11, /* hit box width and height */
|
||||
NULL, /* gadget flags */
|
||||
RELVERIFY, /* activation flags */
|
||||
BOOLGADGET, /* gadget type flags */
|
||||
(APTR) &Col_Border2, /* gadget border or image to be rendered */
|
||||
NULL, /* alternate imagery for selection */
|
||||
&Col_IText2, /* first IntuiText structure */
|
||||
NULL, /* gadget mutual-exclude long word */
|
||||
NULL, /* SpecialInfo structure */
|
||||
GADCOLOKAY, /* user-definable data */
|
||||
NULL /* pointer to user-definable data */
|
||||
};
|
||||
|
||||
SHORT Col_BorderVectors3[] = { 0, 0, 59, 0, 59, 12, 0, 12, 0, 0 };
|
||||
struct Border Col_Border3 = {
|
||||
-1, -1, /* XY origin relative to container TopLeft */
|
||||
3, 0, JAM1, /* front pen, back pen and drawmode */
|
||||
5, /* number of XY vectors */
|
||||
Col_BorderVectors3, /* pointer to XY vectors */
|
||||
NULL /* next border in list */
|
||||
};
|
||||
|
||||
struct IntuiText Col_IText3 = {
|
||||
7, 0, JAM1, /* front and back text pens, drawmode and fill byte */
|
||||
6, 1, /* XY origin relative to container TopLeft */
|
||||
NULL, /* font pointer or NULL for default */
|
||||
"Cancel", /* pointer to text */
|
||||
NULL /* next IntuiText structure */
|
||||
};
|
||||
|
||||
struct Gadget Col_Cancel = {
|
||||
&Col_Okay, /* next gadget */
|
||||
244, 77, /* origin XY of hit box relative to window TopLeft */
|
||||
58, 11, /* hit box width and height */
|
||||
NULL, /* gadget flags */
|
||||
RELVERIFY, /* activation flags */
|
||||
BOOLGADGET, /* gadget type flags */
|
||||
(APTR) &Col_Border3, /* gadget border or image to be rendered */
|
||||
NULL, /* alternate imagery for selection */
|
||||
&Col_IText3, /* first IntuiText structure */
|
||||
NULL, /* gadget mutual-exclude long word */
|
||||
NULL, /* SpecialInfo structure */
|
||||
GADCOLCANCEL, /* user-definable data */
|
||||
NULL /* pointer to user-definable data */
|
||||
};
|
||||
|
||||
struct PropInfo Col_Col_RedPenSInfo = {
|
||||
AUTOKNOB + FREEHORIZ, /* PropInfo flags */
|
||||
0, 0, /* horizontal and vertical pot values */
|
||||
-1, -1, /* horizontal and vertical body values */
|
||||
};
|
||||
|
||||
struct Image Col_Image1 = {
|
||||
0, 0, /* XY origin relative to container TopLeft */
|
||||
263, 7, /* Image width and height in pixels */
|
||||
0, /* number of bitplanes in Image */
|
||||
NULL, /* pointer to ImageData */
|
||||
0x0000, 0x0000, /* PlanePick and PlaneOnOff */
|
||||
NULL /* next Image structure */
|
||||
};
|
||||
|
||||
struct Gadget Col_RedPen = {
|
||||
&Col_Cancel, /* next gadget */
|
||||
32, 12, /* origin XY of hit box relative to window TopLeft */
|
||||
271, 11, /* hit box width and height */
|
||||
NULL, /* gadget flags */
|
||||
RELVERIFY + GADGIMMEDIATE + FOLLOWMOUSE, /* activation flags */
|
||||
PROPGADGET, /* gadget type flags */
|
||||
(APTR) &Col_Image1, /* gadget border or image to be rendered */
|
||||
NULL, /* alternate imagery for selection */
|
||||
NULL, /* first IntuiText structure */
|
||||
NULL, /* gadget mutual-exclude long word */
|
||||
(APTR) &Col_Col_RedPenSInfo, /* SpecialInfo structure */
|
||||
GADREDPEN, /* user-definable data */
|
||||
NULL /* pointer to user-definable data */
|
||||
};
|
||||
|
||||
struct PropInfo Col_Col_GreenPenSInfo = {
|
||||
AUTOKNOB + FREEHORIZ, /* PropInfo flags */
|
||||
0, 0, /* horizontal and vertical pot values */
|
||||
-1, -1, /* horizontal and vertical body values */
|
||||
};
|
||||
|
||||
struct Image Col_Image2 = {
|
||||
0, 0, /* XY origin relative to container TopLeft */
|
||||
263, 7, /* Image width and height in pixels */
|
||||
0, /* number of bitplanes in Image */
|
||||
NULL, /* pointer to ImageData */
|
||||
0x0000, 0x0000, /* PlanePick and PlaneOnOff */
|
||||
NULL /* next Image structure */
|
||||
};
|
||||
|
||||
struct Gadget Col_GreenPen = {
|
||||
&Col_RedPen, /* next gadget */
|
||||
32, 24, /* origin XY of hit box relative to window TopLeft */
|
||||
271, 11, /* hit box width and height */
|
||||
NULL, /* gadget flags */
|
||||
RELVERIFY + GADGIMMEDIATE + FOLLOWMOUSE, /* activation flags */
|
||||
PROPGADGET, /* gadget type flags */
|
||||
(APTR) &Col_Image2, /* gadget border or image to be rendered */
|
||||
NULL, /* alternate imagery for selection */
|
||||
NULL, /* first IntuiText structure */
|
||||
NULL, /* gadget mutual-exclude long word */
|
||||
(APTR) &Col_Col_GreenPenSInfo, /* SpecialInfo structure */
|
||||
GADGREENPEN, /* user-definable data */
|
||||
NULL /* pointer to user-definable data */
|
||||
};
|
||||
|
||||
struct PropInfo Col_Col_BluePenSInfo = {
|
||||
AUTOKNOB + FREEHORIZ, /* PropInfo flags */
|
||||
0, 0, /* horizontal and vertical pot values */
|
||||
-1, -1, /* horizontal and vertical body values */
|
||||
};
|
||||
|
||||
struct Image Col_Image3 = {
|
||||
0, 0, /* XY origin relative to container TopLeft */
|
||||
263, 7, /* Image width and height in pixels */
|
||||
0, /* number of bitplanes in Image */
|
||||
NULL, /* pointer to ImageData */
|
||||
0x0000, 0x0000, /* PlanePick and PlaneOnOff */
|
||||
NULL /* next Image structure */
|
||||
};
|
||||
|
||||
struct Gadget Col_BluePen = {
|
||||
&Col_GreenPen, /* next gadget */
|
||||
32, 36, /* origin XY of hit box relative to window TopLeft */
|
||||
271, 11, /* hit box width and height */
|
||||
NULL, /* gadget flags */
|
||||
RELVERIFY + GADGIMMEDIATE + FOLLOWMOUSE, /* activation flags */
|
||||
PROPGADGET, /* gadget type flags */
|
||||
(APTR) &Col_Image3, /* gadget border or image to be rendered */
|
||||
NULL, /* alternate imagery for selection */
|
||||
NULL, /* first IntuiText structure */
|
||||
NULL, /* gadget mutual-exclude long word */
|
||||
(APTR) &Col_Col_BluePenSInfo, /* SpecialInfo structure */
|
||||
GADBLUEPEN, /* user-definable data */
|
||||
NULL /* pointer to user-definable data */
|
||||
};
|
||||
|
||||
#define Col_GadgetList1 Col_BluePen
|
||||
|
||||
struct IntuiText Col_IText6 = {
|
||||
3, 0, JAM1, /* front and back text pens, drawmode and fill byte */
|
||||
17, 38, /* XY origin relative to container TopLeft */
|
||||
NULL, /* font pointer or NULL for default */
|
||||
"B", /* pointer to text */
|
||||
NULL /* next IntuiText structure */
|
||||
};
|
||||
|
||||
struct IntuiText Col_IText5 = {
|
||||
4, 0,
|
||||
JAM1, /* front and back text pens, drawmode and fill byte */
|
||||
16, 26, /* XY origin relative to container TopLeft */
|
||||
NULL, /* font pointer or NULL for default */
|
||||
"G", /* pointer to text */
|
||||
&Col_IText6 /* next IntuiText structure */
|
||||
};
|
||||
|
||||
struct IntuiText Col_IText4 = {
|
||||
7, 0,
|
||||
JAM1, /* front and back text pens, drawmode and fill byte */
|
||||
16, 14, /* XY origin relative to container TopLeft */
|
||||
NULL, /* font pointer or NULL for default */
|
||||
"R", /* pointer to text */
|
||||
&Col_IText5 /* next IntuiText structure */
|
||||
};
|
||||
|
||||
#define Col_IntuiTextList1 Col_IText4
|
||||
|
||||
struct NewWindow Col_NewWindowStructure1 = {
|
||||
175, 45, /* window XY origin relative to TopLeft of screen */
|
||||
312, 93, /* window width and height */
|
||||
0, 1, /* detail and block pens */
|
||||
MOUSEBUTTONS + MOUSEMOVE + GADGETDOWN + GADGETUP + CLOSEWINDOW
|
||||
+ VANILLAKEY + INTUITICKS, /* IDCMP flags */
|
||||
WINDOWDRAG + WINDOWDEPTH + WINDOWCLOSE + ACTIVATE
|
||||
+ NOCAREREFRESH, /* other window flags */
|
||||
&Col_BluePen, /* first gadget in gadget list */
|
||||
NULL, /* custom CHECKMARK imagery */
|
||||
"Edit Screen Colors", /* window title */
|
||||
NULL, /* custom screen pointer */
|
||||
NULL, /* custom bitmap */
|
||||
5,
|
||||
5, /* minimum width and height */
|
||||
-1, -1, /* maximum width and height */
|
||||
CUSTOMSCREEN /* destination screen type */
|
||||
};
|
||||
|
||||
/* end of PowerWindows source generation */
|
||||
223
outdated/sys/amiga/grave16.xpm
Normal file
223
outdated/sys/amiga/grave16.xpm
Normal file
@@ -0,0 +1,223 @@
|
||||
/* XPM */
|
||||
static char *noname[] = {
|
||||
/* width height ncolors chars_per_pixel */
|
||||
"400 200 16 1",
|
||||
/* colors */
|
||||
"` c #66686A",
|
||||
"a c #797979",
|
||||
"b c #929291",
|
||||
"c c #43444A",
|
||||
"d c #758A74",
|
||||
"e c #F2F2F2",
|
||||
"f c #D1D0CE",
|
||||
"g c #066906",
|
||||
"h c #065506",
|
||||
"i c #53535C",
|
||||
"j c #0C0D0F",
|
||||
"k c #A3A5A2",
|
||||
"l c #2D332E",
|
||||
"m c #C3C4C1",
|
||||
"n c #B4B4B2",
|
||||
"o c #07840A",
|
||||
/* pixels */
|
||||
"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjljjjjjjjjjjjjjjjljjjjjjjjjjjljljjljljjljjllljljclljlllljlllljlllllllllllllllcicl``clcllclclllclclclcclclclcccccccccccccccccccii`iiccicicicciiciiiiiibiic`iii`a`iiii`icaii`iiii`iiii`ii`ii`iii```iii`i`ii`ii`ii`iiii`iii`ii`iifi`ii`ii`iiiiiiiiiiiiiiiiiiiiii`iciibicicicicciiccciiibiicciiiiccccbicicccccccciccclcccccclc`aiciiiciccclilccccccccccclcccacccccccclccclcclccc",
|
||||
"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjljjjjjjjljjjjjjljjjjjjajljjljljljljjjjljjljc`baljjllcljjcjlljllllllllllllllllllllllcclllllllclllcclcllclclccccccccclccccccccccccicciicciicicicic`cciiciciciciacicii`iiiiii``iiakii`iiii`ii`ii`iiii`bkb`i`ci``iiiiii`iii`ii``i`iiiiiaiiiiiiiiii`iiiiiiiiiiiiiiiiiiiiiciiciciicicciciiiicllic`iciiiicicciliccccccccccccc`ccccliccccccccciciccclccccclclclclcclccclclclllccclcllccll",
|
||||
"ijjjjjjjjjjjjjjjjjjljjjjjjjjljjjjjjjjjjjljjjljjjjjjljljjjjjjjljjjljljljljjjjlljljljljcclljllllljlllljllllllllllllllllcclccclcjcllclclclclllcclclcccccccccccciccccciiic`a`icciiccciciiiiiiiiibi`iiiiii`ii`ci`iii`ii`i`iiiiiiiii`iii``ici`i`i`i``ii`ii`iiiiiiic``iiiiiiiiiiiiiiaiiiiiiiiiiciicicii`iiiiiliiccicicccicccci`ccicccicccclccinccccccccclcccaccccccclccccccccccilcl`lllccclcclcclcllcllclcccclllilcllci",
|
||||
"jjjjjjjjjjjjj`cjjjjljjjjjjjjcljljjjjjjjljjljijjljjjjjjjljljljjljljljlljljllljjljllflcjljllljljlljllllcllllllllllllcllllccllcc`clclllcllcclclcccclccccccccciccciciccccccic`iciic`iiiiciiiiiiiaiii`iii`i`icak`c``i`iiiiii`ii`i`iii`i`ii`iiiiiiici`iii`ii`i`ii``iiii`c`iiiiiiiii`iiiiiiiiciiiiiiiiiiiccccciccicicciiccccciaillcccciiciccclcccccccccccccc`cclclccillccllcliibilikaicllcclccccclcccclcccccllccllcclcl",
|
||||
"jjcjjjjjjjjljjjjjjjjjjjjjjjjljjjljjjjjjjjjjjljjjjjljjcjjjljjljjljjjljjljljjjlljllljlllcljllllllllllllcclllllllllclllcclccibccclclcclcclcllicicccccccclcccccccciciicciccciaaiciccciiiiiiii`ciiiiii`iiiii`ic`iiiiiiii`ii`iiiiiiiiii`iiiiiciiiii`i`iiiii`ii`iiiciiiiiiiiiiiiiiciiiciiciciiccicciiiiiicicc`cccccccicccccicciiccicccicclilccccccclccccclccllcccilcccclcciclccciclcclccclccclclllcllcllccllcccclaacccl",
|
||||
"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjljljjjjjjjlljjjjljljjjjjljjljjljljlljljlljlllllljajljljlllllllllllllllcllllllllclccilcicclc`clalcclclclcclcccicclclccccciiccicciccciciiiiiiciib`iiiiiiiiiii`iiii``i`i`iiiiiiii`iiiiiiiiiiiiiiiiiibaiiici`iiiiibiiiii`iiiic`kaiiiiiiiiiiiiiciiiciiiciiciciccicciiiiciiiciccicicccccccciclcccccciiccccaciclclcccciilcccclcclcclcllclilacclcccclccclclcccccclccclclccllcclllllkblllc",
|
||||
"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjljjljjjljjjjjljljjjjjjjljljjljjljljlllljljljljjjjjljllljcjllllllllllllllllllllccclclabclccccciccccllclclcclcclclccccccccciiaiiicciciiicccccciiiiiiiiiciiiiiicii`i`i``i`iiiii`iiiiiiiiiiiiiiiiiiiiiibiciiiicciiii`iiiiiiiiiie`i``ic`iiiiiiiiiciiciciiciciciciciiiciic`cccclcccccccccciccccccciccciicilcillcccccclciccccclclccclibaili`lillccccciicliccccccclcccllallclliiiclcliilcll",
|
||||
"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjljjljjjjjjjjljjljjjljjjjjljjljljlllllljllljlclllllljlllllllllllllllllllllllllcccclccliiccccciccccclclcclccccccclcciccccciacciciiiccci`iiiiciiiiiiiiiiiiiii`i`c``````i``iiiiciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii`kciiiiiiiiii`c`iciciiiiiiciiiiiiciccicicicciciiiiii`ifcccciccicccccccccccccccclccccccclcclccclccclclclcllilclcclcllclcliilclclclccicccccccccllllcecclclliaacllcllclc",
|
||||
"jjjjjjjjjjljjjjjjjjjjjjjjjjjjjjjjljljjjljjjjlljjljjjljljjlijjllllllllllllljljajlljlalllllllllllllllllllllccccclllccclclccccccccccclcccccc`clcccccccccccicacicciciciciiiiiiib`iiciiiii`c`iiii``iii``ii``ciiiiiiciiiiciiiii`biii`iiiiciiiiciiicib`iiiiiiiiiiiiiiiiicii```cccciciciciiiiiiiciiiciiccccccccccciicciccccccccccccciccccclccclcccllccclclc`ccclcclcccccclcccllclccclclllcllcliccllclmccclcccl`lclclclll",
|
||||
"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjljjjljjjlljjjllljlljjjljljjjljljlcllllljcljjcljlllijllllllllllllllilcllcccccllicllllclcllcclliccccclccclcccccccccccccccc`iciicicciiiaiciciicl`ici`iiiiiiii`ii`i`ii``iiiiiiiiiiiiiii`iiiiiaciiciiiiiiiciiiciiiiiiicici`ciiciiiiciicciiiciiciciiiciiiiiii`cbi`liicicccccccccclccccccccclclccccccclcilccllccccllcclcccclcclclclllllcllllcllllllclcllccccclllcllilllclllclilillccll",
|
||||
"jjjjjjjljljjjjjjjjjjjjjjjjjjljjjjljljjjjjjjjlljjljlllljllljllljlcljjljljcjlllljcljllllcllllllllllim`lljccllcclcbacllcllclccliclcccclccccccccccccccicciciciiciiciiiiiibiiiib``iiii`i`iiaii`ii`iiiiiciiiiiiiiiiicciiiiiii`iiiiiciiiiciciici`cciiciciiiiib`c`aaicciicicciccccciiiiiiiicciiicciilccccclcccccccccccclccccccclccliccccclclclcillccccllcclclccilcccclclcclcccclclclclllcllllcclllllllclllcllcllclcll`cc",
|
||||
"jjjjjjjjjjjjjjjjjjjjijljjjjjjjljjljjljjjljjjjjjcjljljlcjjlcljlljkclllllllcllllljllllllljllllllllllliiccccclllllcccllcclcclclclcicccccclcclcccccccicccciicciciiciiiicc`ciii`ciiiiiiiiii``ii`iiiiiiiicii`i`i`iii`iicic`ii``iiiiiiiiiiciciciiiicc`ciicici`cc`iiiciciicicciicicci`iiiiiciciicicccibiccccccclcccccclclcclclcclccicclclcicclikclcllclllcllcllclccccllclclcliclci`cllclllillliccclcllclclbilllclllclcal",
|
||||
"jjjjjjcbljjcajjjjjjjljjjljljjjjjljjjjjjljljjljjjlljcjllljlilllllaljlljjl`mllljcillllclllllllllllcllclllciiilccclllclclclcclckaclccccccccclccccccccciiciciiciiciiciiiiii`ic`ii`ii`ii`````i`iiiiiiiiciiciiiiiiiiiiic`ibiiciiiiiiiiicicicicccicicicciciccccicccciiicccciccciccciiiiiiiiciccii`cicbicciccciiciclcccccccclcclcccccllcclllliclclcccccclcclcllclcccclcllclclccllc`lllcllcll`llllllcllllllilllllllclcclc",
|
||||
"jjjjjjjljjjlijjjjjjjjljjjjjjjjljjjjjlljjjjljjljljljajljljlljlljcljjlllllljlljijjlllllllllllllllcjcllllaclclllllcccclccclllccclcccccccccccccccccii``a`cccciciciiiiic`i`baba`iiii`ii```ii`ii`iiiiiiiiicciiccciciiiic`ia`iccii`c`iiciciccccccccbcccccic`iciciiiiccciccicicccccccccciiiiciccccccciccccccccccciicii`a``icccccccilclclciaa`iiccciclllcllclcllcllcccllllclllcllllclclcllllamiccaclllllccllllccllclcllcl",
|
||||
"ljjjjjjjjljjjjjjjjljljnjjljljljjljllcjljjjljjjlbjllblljljjjljlcljclljlljlljclikllljlllllllllllllcljclccccccccllclllllcccccclcclcccciccciccciabbkakbnaccici`iciiiiiiic`bbnnnnkbaa``iiii`ciiiiicici``ic``ciiiaiiiiiiiciiciciiiiiiicccciciciiccbcciiccccccciccciicicicicccccccccicccicccccccliccicliiccccici```iabkbaccccccccclccclciammnbbbaaicclcclclclclllllllllllclllllclllllllllccijlakillcllllllclllllllcjcll",
|
||||
"jjljjjjjjljjjjjljjjjjjjljjjjjjljjjjjljjjljjljljjljjijjljljl`liklljljllllllillljlllllllllllllllllllclllccccllccclcccccllcclcclccccccccciii`abnnbknmnmblciiibiiciicik`i`nbkmnmmnmnnk``i`niiiiciiiiciicccicccibciciiiciciccciciiciccicicccccccciccccccicc`ccccicibfcccccccicccccccccccccccclc`cclcclcci`abbbbaii`nnk`ccccccclllc`cciiknnnnbbakbkkicllclllclclllllclclllcllllclllllllllllclccllcllllllllkalllcljclll",
|
||||
"jljjljjjjjljjjliljjljjjjjcljjjjjjljljljljlljjjljljljlljlljlijblljljlljljllcjllllllliklllllllllcllllclccccccclclcccclccclccclcccclccciiaa`babnmnnmnnmkjiiccacciiiiiiiiakkknmmmmmnmnkkbbaiibciiccciciiccccccccccciciicicciccccccciicccccccccccciiiilicicccccccciiiilcccccci`ailciclcccclcccckbcllclciabbkkb`icianmnkcccclllclccccii`ammmnbabknkkaa`iillclllcjcclllllcllli`lllllllllclclllclllllllllllllljcllclllll",
|
||||
"jjjljjljlljljjjljjjjjjljcejjlljlljjjjjjjjjjjjlljjljljljljljllkijlllllllcjkllllcllllcallllllllllllclcclilcclclclcllcccllccccccccccc`bk```baabnmnmmmfmklciiciiiiiciiciiakbbknnmnmnnnkbbbbaknicciiiicccciiiccicciccccciicciiccicccccccccccccccccccccicililccccccciiccicccccciiclcclcccclilclliclccli`abbbnkkacciaknmkllllllclllcccii`amnnnnbbakbk`i`aaa`ccicclllcclcljclllclllllllllllllclllccllcllcjcj`alllllllcll",
|
||||
"jjjjljljljjjjjjjjljljjjjljjjjljjjjlllljlljjlljjlljljljlllllljilljllljlciacjlljb`llllclllcllllcclclllccciccclclcccclcccccclccllc`aabnkii`bbabbnnnnnmnbljiiiciiiiii`i`i`kkkbknmmmnmnnbbknkak`iccccicicccccccccccccicccccibccccccclcciccccccccccccciciicni`ccccccccccccccclcclccclcclacclcclclliiciabbbbbbnb`cc`bkknnlllllclcllccc`iiamnknnnkaaknaiiabbabbkkcccclccjcclllllllllllllllillllllcllcccllllccelllccclicl",
|
||||
"jljjjjjljjjljljljjjjjjljjjjjljbjljjjjjjljjljjlljjljljlljljjljljlllllljlllclllcjllllllllllllcllllll`ccilicccclclc`illcccccccci`bnbaakk``abbb``knbnmmkbllciii`i`i`i`i``akbbbbkmmnnnnbbkkkabnmnb`icccccccciccccccccccccccc`ccccccccciicccccccccccciccccciilcccccccclcclclclcclcclccclicllcllcc`aiiabbbkkbakacl`bnnknklccllllcclciiii`bmnknmmbaabka``akaaaakkicllclccibclllllllllllllc`lllllllcllcllllllcjlccclcc`ll",
|
||||
"jjjjljljjjjjjjjjljjljjjljlljjjljljljljljljlljljlljllljlljlcjllllllllllllljcjllmclllljcllllccllllcclcccccclcccccccccclccccciibnmmaaabbbbbbbb``bmbbnmnbljc`ii`ib`iikb``bnkbabbknmmmkbnnkbbbkmmkkaccccccccccccccccccccccclccccclccclcicccclclccclciic`lccciccccccccclclilccclcclcllcllllc`cc`abaliabkkkkkabiciabnmnfnlllllcllllii`i`i`nkbbmmnbbabaakbbba`iknbbbciclcl`llljcllllllllllllllllllllcllllclljclcclllclll",
|
||||
"jljjjjjjljjljljjjjjjlljjljjljjjljjjljljliljljljljlljlljllllllljljljllllllllcllallllclllllcbkbaclcciillclcccccccclcccccccciaaaknknbai`bbbbbbb`bmnkmnnalliii`i`aiii`ii``bbbbbbnmmnmmbkkkbbbbnmnnnbaiccccccccccccccccclcccillcccclclccllcclcclclccccclciliccclclclcclclcllclcclclcllcilclbaabb`icaakbbknkbaii`abknmnbclllccllllii`iiiibabbbkkkaa`abbbbkbaaknnkmnalclllclclllllllllllljllllllllccllclljlclclllclclll",
|
||||
"jjjljjjjjjljjljljlljjjljlicjljlllljljli`cccjl`cjljlljlllljllllllllllllllljcjlllllllllllllliclclclcmbclicccccccclccccccci`bkbbbbbbaaaabbkbbbbabnmfnbacljici`iiii`ici`iiiaabbbkmmnmnbbbababbnnmknnkbiclc`acccccccclccccclccclccclcllclccccccclccccccicllciccccccccllcclilccllclclclcjccababbicc`bbbbbkknbac`ababbaicllllllllllcii`i`iiiababbbaaaabbbkabbabnnnmmfna`acclclllllllllllllllllllllllllclcalllllclclllll",
|
||||
"jjjjjjljjljjjjjl`ailjljjjljjljjljlc`aabkbaba`aiclljllljljcb`ljlllllllllllclllclillllclllllcllclcililclkclcccccccccccccannbabbbbaaaabbbbkkkkbbkmnbiljlllciiiiic`i`i`iiillcakbbknfnkbbnbkbabbkmnnnknnbilccccclccccccccclcaacllcllccclclllcllclccccclclccccccccclllcclclbclclllcllllccl`aaabaicabkkbbkkknka``bkbbilljlllllllllcciiaaijlljcabaaaaaabbbkkkbbknmnnmnnmbillccjlllllllllljlllcllllllllllllllllclllccllll",
|
||||
"jljljljjljjlljljcjljjljljjlljljc`bbknnkkkkkkkbbbbbcjllljllllllllllllljlllllllllcclllclllllclllcacclcccclcliliclcclcc`mfnnmkbkkbaai`a`aakmkkbikmmlllljllciiii`iiii`iin`iljcbbdbnmnbbbmknnkaaakmkmmnbbbilclclclclcclclk`abilcaclclcllclcclicccccclillcccclilccclclllclllclllcclllcllibbbaaailiakkkkbbnkkk`bbbaballllcllllllcllci`a`lljlllcba`c`a`aakmbkbabmmnnmnnmbacllccllllljllllllllbjlljljllllllclllllllclllll",
|
||||
"jljjjljljjljjljjljljljjjjljjlc`akkkkbkmmnnmnkbkkbkb`cjjllllllllllllllcllllllclacjcllllflclllclc`cclliiicclccclciaciabkkmnmmkkka`cc`a`akbnkkb`knkjllljlll``iiii`aiiiiicccllakkkkkkbbbnnmnmkaabnmnkbbkkbiccccliacllillilccccllli`llllcllllcccclllcailllllcllclcclcclccllllclllllllliabka`i`clibbkknbbkknkbkkbbbillllllllllllllc```llllljjlb`cci``abbknkbianmnnmmnnnallilllljllllcjllljllllllcllllllllllcllllllijjl",
|
||||
"ljljjjjjljjljjljljjjjjlljljjibbkmnnkknnfffmnnknnnkbaa`clllllllllllllllllclilllllcccllclclcllccccccclcccccccclcic`cannbbmnnmnbaiiii``akkdknkaabmblljllllciiiabknmniiiiiijljannkkkbbbkkmmnmk``bbkkbbkkkkkaclcclclclclcllclbilcclllillllccllccclclcclcliccll`llilcclllllllclllllllliabba````ccabbbkknbbkkbknkbbbiljcljcljcbnkbabballlljlllc`iii`a`bkbbknbabnnnnmnnnnalcicilllllljllllllljclljljllljljjclllllllla`ll",
|
||||
"llljljljjljjljljjlj`ljljljlikbbmnfnnmmnfffmnmnmmmkkbkbiiljlllllllllllllciaiclcllllllclcllclccccclcccclcclaclcilc``bknnbkmnnnka`bba`adbkbbkbaabmkcljllllciicbnmnnkiiiiicljcanmnmnkkbbkmnnn`ibbabbbknkabknbclclllclllcllclcllllllcllcclllllilllilllllliclllllcjliccllclllclclllccci`aa`i`aii`bnkbkkkbabaakbnnkkacllllllc`knmkbbbbljjjjjlj``abba``bkkabkaaaknmnmnnnbacli`acllljllllljlllllllllljlbblljllljcllclabll",
|
||||
"jljljljljjljljjljjl`jjljjcabkkbefmmfnfefefffmffmfmfnkkbaillllljlllllcllll`llllllajiclllclcccccclcclcccccc`lciccakbbbknkbnnnmnnnnbaabbbbkbb`iadmmaclllllcclcaknkmmkiiiiicc`knkmmmbkbnnnnnbi`bkbbkbkbbbaakkaiclcclclllcclllcclllllllllllcll`ill`cllcllcllcikllillc`cccclclllllcciii`aa``iii`akkkkbaaaaiakkbknknkaallllcabkknnkabkallllllibkmka`aaabkbbai`akmmnmnnmballcibbillcljllllljlljljlllljcjlllljlllcjlllljl",
|
||||
"jlljljjjjljljjljlljljlajl`bkkkkmffffffeffefffmmfffmmnmkbbillllllllllllllcjcllclllilllilclcccccccllclcccccccclcakmnbbbbbkbkmnnmmbabnkbbbkk`cc`bmmmb`ciia`iii`aabnnmaa`c`abkknmnmmbbknmmnkbiababbbaba`ba`aakk`clclllllciccllllcllclllllllllclllllllllclllclllllllliclclcclcclli`aaaaaa`iclc`bbnnkbaiiiibnbnbbknkbb`ccci`knnknnkbbbb`cjjikfmnbabnnbakkk`li`knmnmnnnb`icccaabclilljll`llllllllljllcljlljlljlllllljal",
|
||||
"ljljjllljljjljljjjljlabliakknmknmfffefmffefefffffffffnmkkailllllllllllialclcllilcllc`jicccccicccccccclcccciccbnnknnkbbkbbknnnmnbbkmmnkbbbiccabnnmmnknkb`ccii`abmnbbbmknnmmnmmmnmkbkkfmnkaa`aabaaa``ia`akbbkkacllccllliillllllllljiaaillclllclllcclllllllllllllclclllllcllcciaaabkbb`iicciabbkkba`iiiaknbmkbbkkbabknbabnknkknmkkbkabbkmnknnabnmmkbbbbiliabnmmnnnnbbaicii`akallllljilljjllllicljjlljljcljljllllcbl",
|
||||
"jljllllcjjljljljlljlljllbbnnmmffffeffeefeefefeeffmmefmmknkbclllllllclllclllclclccccccicccicccclcccccccccclccbnmnnnnmmnbbbbbmnnkknmnnfnbb`i`aabnmmmmnnnbaiii`abbkkbkkknkmmfkmnmmmnkkknnmnaaabkkbaaiii`bknbkbkbcllclclclblllclllllllllllllclllllllcjllclcllllllllllllllllllliabbaaaaa````a`abbkba`a```abbknnkbbbkknkkk`bnmnmnnknnmkbkbabnmnnbnmknfnka`iiaabnmmmnnnnbaci``aabkaljllljlljcljllljllllljlliljlljlljjll",
|
||||
"llljljjjljljjljljljjljc`bkbmnfffefeeeefeefeefffeefffmmnnmnkaclllclllclllllclccccccclccccccciccccccliccclbccanmnmmmnknmnbkbbkmnnnnfmmnmnbi`abbaknmnmnnkb``iai`aa`aabknmmnmnnnmnmmmbkbkfnnkbakmnabaabaabnakbbkbbilllllllllllllllllllllllllllllllllllcjallllllllllllllllllllinkbabbba`iaaaa`akbb``````abbbbkfmbabnmmnbakknmmnmnmnnnmkbbbbknnnnnnnmnnmbiiabbakknmmnnkb`````iaa`ailjlljljlljlljlljljlllljljljiclllljl",
|
||||
"jljljljljljljljljjllljlbknkfnffffefeeeeefeeeeefeeeefffmmnkkbillllllllllclijcclclclccclclccccccccicinacciiibnmmnnnmnnnmnkbkbamnkmnmmnmmnabdaabbbbmmnnnba``iaii``ii`bnknmnnmnmmmmnnkkbbknmmkbknnbkkbbbabnbbkkbbnaclllllllllllllllllllllllclllllllllllcllllccclllllliclllllikfkbaaaaa``aba```baa`a`aaaabbbbkmnnknmnnkbbknnnnmmmnnnnnnnkbbbknnnnmmmnnnabaaakabbnnmnnba`````c``i`iicjlllljllllljllllijjcjlllllcjjjllj",
|
||||
"lljljjljljljljljlcjjllkbknmfnffffeeefeeeeeeeeeefeeefffffmnkkbclllllcl`llllccccklllclclcclcccclcccccilccccbmmnmmnmnmnnnmmkkbbnnnbknmmnmkkmkaabbbaknnkkbaa```c``iiiabkbmmmmnmnnnnmmmkkkkknmnbnmkbkkkaa`bbbbbkkbnkacllljcllllllllllllllllllllllllllllllallllllllllll`cjlljlabkbab`aaa`iaba``abaaaa`aabkkkkkknnnmmnkbabnnnnnnmnnnmnknmnmkbbbnkkbnnnnnkbnnabbbbbbnnnkkaaiii`iaiciaailjjlll`bialjlljjclljljajjljjlljll",
|
||||
"jlljjljljjljlljlcjllljanbmmfnffefeefefeeeeeeeeeeeeeeeeffmfnnk`clcllllaclllcclllclcllccciclcccccccccclicc`mmnnnmmnmnnnknmfbbbbdba`abbdbabkaaaabkbbnnnkbaa``ic`iiiaaabbmnbkkbbdbbkbbabkknmnmkmnnabkkbabbkbkbnkkkbb`llcjllllllllllljllllllllllllllllljlllclllljlllljlllcjl`kbbbbbaaaa```a```abaab`ii``aabbabbbbbkkai`bmnnmmmbbkbkmnnnnmka`aaa``aabbbbaknbabbkbbknmkb``a`ii``iiiaaacllijlcklllbljlljljlljijlljla`ljj",
|
||||
"ljjllljljljljlljljjljibbknffmfeffeeeeeeeeeeeeeeeeeefeffemfmnkbclllcllclcicbcclillccccclcccccccccclcciclinmnnmnmnnnmmnnnnnnkaai``lllllcllllcllc`abknmnac`i`clclliaaaabnalllclclcclcllcc`kmmnnnkbbbkbkknkknkkkbbaa`iccclljlllljllllljllllljllllllllacljljlllllllllljllcliabnnbaaabbaa``````aababllllllcllllcllcciii`bnnnnnncllllnnnnnnnilcllllllcllllciadkbkkbbnnnb`i``iciilc`aaaaclealljllcecllljjjljljjljljjjjll",
|
||||
"jjljljjjlljljljlljllclbbmnmffeefeeeeeeeeeeeeeeeeeeeeefefffmkkb`lclcllllclicciclccclccllccccccccccicccciknmnnmnnmmnnnmnnnkmnbiia`lllllllllllllllliaknnb`i`aclllli``i`abilllllllljllllllliknnnnkbbbbbbknnnkknkbkaiiaillljlllllllljlljlllllllljllllcjjlllcllllllljlllljlcabbbba`babbba```iaaaakkbllllllllllllllclicadkmnmnknlllllmmmnnnmijlllllllllllllccibbkkkkbknna`i```icli``i`aaclljjljljlljjlllljljlljjllllllj",
|
||||
"ljljljllljljljlljifccibbmmfffeffeefeeeeeeeeeeeeeeeefefeffffnknaccclccclcccicclcllllclcccccccccccccccccanmnnnknnmnnmnmmmnnnnbi`nilllcllllllllllllliabbkb`aacllll```iiabillllllcllllllllllibnmnnbabbbknnnnnnknbkaiib`ijljcljlljljllllcljcljlllljll`cjlcjjlljllljlllllllibbka``bbbkbba`i``abbbknbcclclllllllclllllladnnnmnnncllllnnnnnnnallllllllllllllllc`bkknbbakbbaaaaaiiii```ciaalllllljljljljjjl`jljllljjjjjjl",
|
||||
"ljljljl`llljlljljlcclaakmnfffffeeeeeeeeeeeeeeeeeeeeefefefffmnnacccccllccilcclclccci`cclccccccccccccccinknnmkkmmknnnnnmmmmnbaaakicclc``ai````illlllibbaabaalcllc`aai`abilllciada```aicllllannnmkbbbknnkkkkkbnbk````aklllllljlllllljlillijllljlllljlllllcjlljllllljljllbknbaa`kkbbkbai``abbbbbnbilclcccici`icccccllaknnnkkn`lclcknnfnmndlllc`````aaaaccclldbnnbbbabbaaaa`a`ai`aaiibb`jlljljllljljlll`ljljjjjjlljlj",
|
||||
"jjljjljcjljlljlllllllcbnnmneemefeeeeeeeeeeeeeeeeeeeeefeeffmmnbbiccciccccccclcclcccccccccliclicccccicibknnnnnnnnnmnnnnnnmmkabbbbiliclnmmkkkbbkalcclcbbbbaaallllc`ab``abcllllaknffnnnkalllllnkmnbkbbkkknnkkkkkbb```i`alljllllljlljlllilljlljllljlljlllljllljlljljlllljakbkkkaabnmbababbbbkbbbbkacllccciiii``aablllccnkknnnkillcldnnnmnmblllc`kkkknmmnblcillbnnkbbbbabba```aaaaaaa`aabcjlljljljlljljjljjjljlljjjljj",
|
||||
"lljlljljlljljlljlllllibnkmnmffefefeeeeeeeeeeeeeeeeeeefffeffmmkkaccccclcillcllclclccccccci`icicccciciakkbknkknnnnnknnnnmnnbadbkkilclcnnmkkbbkkbllllcabbkabblcllcaabaabkilcclakknnnkbkbcilllkbbbbbbbbkbkkbkkbbbaa`iaaaallljjllljljljlclljlllljlllllljljljlbcjllljljjj`nnkbknbbabkbaabkbkkbbbbbbalcllcciabb``bnnilclckkknkkniccccannnnnnalllc`bbbbnnmmnillcldbdnkdabbbbaaaabaabab`aabb`ljlljljljljljljljljjljjljljl",
|
||||
"jjljllljljllllccjcljlcbmknnnfefeefeeeeeeeeeeeeeeeeeeeefffemmnkk`cclccli`clbcblilccccccccciccccciial`kkkkknkknnnnnkknnmnnbdaabbkclllcknmnkbkmn`cclliaabbbbbcllclabkdaabilllcbkkkmnkakaliilibbbakbbkbkkbbkkbkkba``ibbaailllljlllllllllljlljljlljljlllillllljlljlljllcaknnbbkkbaaa``abkkkkbbabaa`cllcci`abkkabkkclllcbkknkknilllcannnnnk`clcc`bkbabmnnkllccldkkbkb`abbbbbkbbbbbbbbaabknajljlljljljljljljjljljllljll",
|
||||
"ljlljjjljljljlccjlllccamnnnnfemeefeeeeeeeeeeeeeeeeeeeeffmffmfnbacclclllillil`cclcclccccclccccciia`canbkknnnnmnnnmnnknnmkkiidnbbclccl`aa``i``illclc`abbbkkbcllllbbkb``b`llcl````a`a`illicl`bbbbkkabbbbbabbbbkb``i``aaaalljlljjljjljljllljljlljllljlcalljlljllljlibjcbkmkmkbab``iiabbbkbbkbabbaailllcci``iii`icllcl`kkknnnm`cllcannnnnb`lllli```i`ab`ccllccnfnnkdbabbbbkkbakbabkbaiabnkijjljljljljljljjljljlllljlj",
|
||||
"lljlljcjlljlljclclljclamnnknnenefeeeeeeeeeeeeeeeeeeeeefemffmmnb`clcllcllcclccclicccccccccccccciiicinnkknknmnnnnnmnmnnnnkbcc`mnklccllllcllllclccll`kkkkbbkkclclcbbkbaabillclcclllclllllllidbbkbnkbkbbkkbkbbkbaii`aiabbklljlllljlljlllljljlljljljlljlcjljllljjjljljlbbannnmba`ii`akbbbbbbbbbkaad`lllclllllllcljlllidmkbnnmn`cllcannnnnb`llccclllllllccllcldkmmnnmkkbbbbkbbbbbbbbbb`babkaljljljljjljljjljllljljljjl",
|
||||
"jjljlljljllljllljjcc`l`bnmnnkeffefeeeeeeeeeeeeeeeefeeeeemffnnnb`llclccccclccclciclccccccccicccciccknknkkknnkkkbknnnmnmnka``dnkkllclccllllllcllll`kmnkkbkkkclcllbkabbabclllllllllljlllllibkkabbnkknkbbbbabbkbai`aa`abkkbjljljljljljljljljljljljljljjlljljjlljlicjliakkkmnnkkacc`kkkkbbaababnkabalccclllllcllllllcdnnkkmnkkallll`nnnnnballiclllllllllllll`akkkmmnnkkbkkbbbabbabbbabbbbmnclljljljljljjljljljljljjjj",
|
||||
"alljaklllljlllllllllllibknmnneefefeeeeeeeeeeeeeeeeefeeeffmfnmkbicccllclllclcliibcccccccciciiiiiic`nmnnnknnnbbbbkkknknmnkbbkkkbdccclcccllcijcjlcbnmnmnbbkbklllllbkbabbbilcclclllllcllc``kknnbbbkknmnbkkbabbbaa`aaabbabkncljlljjljllljljljljljlljljljljlllljljljjllkbbaannkknac`bkkkkkbbbbbknkbb`lclllllllllcllcibnmnkkmkkb`ccccannnmkbkllllclllllcllllidkbbknnnnnnkkbkkkbbbbbbbbaabbkmmaljjljjljjljljljljjjjjljjl",
|
||||
"ljjl`ajljlllljlljllllliinbmnmmefefeeeeeeeeeeeeeeeeeeeeffmnmnnkblclccclccclilillccccccciciciiiicccamnmnknmnkbknnnkbbkkmmknmnmkballclc`aacl`ccibknnmnnmnkbbkclcclkbbbbab`lllc```aaab`iakkkbnmnkbbkkknbbkkbkbaii`babbbbakb`jlaaljllljljljjljljljljljljljljjjlljjljj`nkbbabkknk`cbkkbbkkbbabnkbbbb`lcllcaailllll`bbmmmknnnkkballlcibkkmnnmllclci`iiaaabbkknkbkbnnnnnnnnbbbbbbbbbkabbabkmnmmcljljljjljjljlljljljljjjj",
|
||||
"lllljljlllbllljllllllllcaknknmffeffeeeeeeeeeeeefeefeefemmfnnnkacclccclclcccccccccccccccccciii`ciabnmmmnnnnbknnmnmmnkkkknnnmkdballcclbmn`llcll`nknmnknkmnbdlcllcbkbbbbk`lcllkkkknnmnkbbknbnknkbkbnkbbbkbakkaiabaabbbbbbabjljcljljlljjljljljljjlljljljljljljjljjclannbbaanbkacikmnkkbbkkbbnnnkbaacclcibbbilcclcaknmnmknmkbbklllccmkkbnkmclclcai``abbnnknnnkbkkknnnnnknkkbbbbbabkbbkbknmmkaljjlljjjlllljjjjjljjajlj",
|
||||
"jljljccjllljllllljllilll`bbnmmfffefefeeeeeeeeeeeefffefenmfmnkbiclccclcccccccccccccccccccciiiiiii`bbknnnnknbbmnmnnnnnnkkkmnkaad`lcllcbkmk`cllll`knmnmnknnnkllllinbbkmnn`clllbnkknknnnkkkkbknnnkbbkkkbkb`iaba`abbbbbknnbbbllilljllljljljljjljjljljljljljjljjlljia`bnkbb`akab`aaknnnnbkbbaabnnbbbdllliibbbailllclabnnnmkbkkbkclcccmnnkkkniclcl`i`akbbknknknnbbkknnmnkknnkbbbabbkbbnknnnnmnnljljjjljljljljljjjjljjlj",
|
||||
"klljljjclljlljllllll`cllcakbmmmfefmffeeeeeeeeeeeeefeeffmmfnnbailclccccclccccccccccccccccciiici`iabbbbkkbkkbnmnnknmnnnnnkkkbdab`lcccibknkn`clillakmnnmnkkmkllccinmnknmncjcccknnkkknmmnnbbkbnknnbbbkbabaciaaaabaabaknmnnbbilijljljlljjljjljljjljljjljjljljljjjljjaknkbbaaba``bknnnmnkkbbabbknkbbblllccbbbbailllcc`bkbkkbkbkklclccnnmnnknillcc`c`abbbknnnnnmkbkkknnnnnnnnnkmkbkmnknnmnknnmm`lljjjljjljljjjjljjcjljj",
|
||||
"ljlllllljlcljcllllllillll`bbkkmmfffffefffeeeeefeeefefffmmmnkb`ccacclcliccclccccccccicciciiciciaibbbkbkbbakbmmbnnnknnnnnnkkkbbaiclllcbnmknncllllldmfknmnknkllllikbknnnniilllknnkkknnnmmnbkbnknnkkabbbaccaaaaabbabknnnnnnkallljjljjljljjljjljjlljljjjjljjljjjljlcbknkkkbbda`aknnnnnmnkbbbbbbbkbbalcclcknkkbaicllil`bkbbbkdmnlllclnknnnnk`llclii`bbabknkkknnbbbkknnnmnnknnnnnnkbkkknnknnmkkbjjjljjjljljljljjjanjjjj",
|
||||
"llmjjljllllllilljlllllllllikbbnmmmfffffefeeeeffeefffmffmmnkbaicclcccccclccccccccccccccciiiiicc``bbkkknkbakbnnknknnkkknnnmnbbbaclcccibnmnmnncllclldmnnmnnnnllclckkkbkmmilllcknnnnbkknmfnnbkknkknnkabaic`bbbabbbbknmnknnnnkljjljljljjjljjljjljjijljljljljjjlljjj`ikkkbnkbaaadnnnkknmmkbbbbbbbkbballlclbbbbbabclllcidnkbbbbnmlccilnkkkknn`llccciabaabnmnnkmnnbbbbnknmmnkkkknmnkbbkbbnnnmnnnflljjljajljljjjjjljjjjjj",
|
||||
"illllllllljllclllllllclllll`bbkmnmmfefeffeffefefmeffmffmknkaiclcclclcccccccccccccccicciciicici`aabbbkknkbabknnnkkkknkkkkkknkb`clcllibknnnmkkcllllcdkmfmnnkllllcbbbbabbclcllknnnnkkknnmnbbkkmnknnnkb`c`bbkbbbbbbbknnnnmnknlljljjljjljjljjljjljcjjjjjjjjljljjjllibkkkknnbaabknmnkkkkknkbkkkbbkknklcclcbkbbakdbilllliakkbabkncllllnnnkknkalllliiaaabbbnnnknmnkbbbkbknmmnkkknkbbkbbaabbknnkkniljjjjljjjljljjjjjljjlj",
|
||||
"lcljlljlllllljlllllllclllillabbnknmmfmfffffffffffmefmnnnkkaicclcilccbcccccccccicciccciciiciiii`babbbbbbkkakkkmnnknkkkkkkknmnda`clllibbbbbakbacllcl`knmnnnklllc`nmb``bbcllclknnnnnnkknnkbbbknnkknnmna`bbbkbbbbbabkknnnnnnncjjjjjjjljjjjjljjljjjljjljljljljjljjj`anknnmnbbabknmmnnkabnnknmkkbaknkcllllbbkbbakaaillclibkbbbbkiclcckkkknkkaclll`bbkkbaabbkabkbbbabbkkbnmmnnkknmmkkkb`abbkkkbkbjjlljjjljljjjjjjjjjljj",
|
||||
"cbjcjllljlllllllllllcllllllclcbbkkmnmnffffffemmmfnmnmknkkbiccccclccliclcccccccciccciccciiiiciciabaabaaabkbnkknnnkkkkknnnknkdakndbkbabbbbbnbkbbaaa`bkbkmfnmbkkbbnna`ammakaaamnnnkkkkkknnkkakknkkkkmnaabakkbbabbbkknnnnnnmkajjljljjjjljljjjjjjljiljjjjjjjjjljjcccknknknnbbdknnnmmnbbbknmmnnnkkbbbabababbbbbkkkbaaa`aiabakdnkdbdbbkbkkkkkkab``bnnnnbkbbbbbbkbkkbbabbbbnnmknnmknmmm``bnmkbkbknjjjjljjjljljljjljjj`jj",
|
||||
"lljljlllllllllllllcllllllllllc`abbkknkmfmmfmfknfmmnnnkkba`cclliliccccncccccciicciccciciciiiiii`bbkbaaabbkbnnbkmkkkkkkbkbkkd`bknknnmnkabbnbkkbknbbbbbbbknmnnnnmnbkiannmnnnknnmnnkkkkkkkknnkkknnkknnnbbabbbkbbbbnkbknnmmmmnbcjjjjjjjljjjjlj`jjjlljjjjllljljljlliiknnnnnnkkbkknknfnkknknnnmmnmnmkkbbknkbaabbnknkbbbbaa`bbkbnkbkmnkkkkbbkbkkaabmkknnnnbbakkbkkkkkbakbbbdbmmnmkmnkbbcdnnmnknbkma`ijjjjjjljjjjljjjjljj",
|
||||
"ljcbaljllllllllllclllllllclcllcci`bbnbkbnknnmkknkkmkkba`ilccilcclcicl`cccciclcliccicicic`icici`nkkkbaabbkbknkbkfnnkkbbkkbbaannknnnnnnbkbkmkknnkkabaaabbbknnnnmfnk`annnmmnnnnnmnnknnknkknnkkknnnkkkkkkbabkkbbbbbkkknmmnmmfkjjljjlljjjlcljjljjjljjljljjjljjlljii`nknnnmmkbbbbnnnmnknknknnnnnmnmnnnkkkkkbaabkmmnbbnbbaabbkbkkkkknkkkkbkkkkdabknknnnnnnbbbkkkbkkkkbaadbbbkknkkmmfkkibnknnnnknmajjjljjljljljjjjjjjjjj",
|
||||
"lljci`cjlllllllllclllllllllccllllc``bbkkkkknknnkbnkba`icccccc`ccccccclcccccccaciciciciciiiiiiiankkmkbbbbbkbbkbbknnnnnkkkbaaknkknnnmmmkbbbnkbknkkbbabbbbbbkmmnmmmb`kmknnnmnknknnnkknnnnknknnkkknnnnkkmnkbbbbbkbbnnkkmmnnnnmjc`ljjjjjjjljjjjlj`jljjjljljjlljlj`c`nnknnnmkbbaabkbbknmnnknknnnnnmnmmnkbnkbbbkbnmnnknnkbbbbbbbkkbknnnnknkbkk`akkkknknnmnnbbknkbkkkkbaaabbabbknmnnmnk`kkknnnnnnbillljjljjjljjjjjjjjljj",
|
||||
"jlljcillllllllllclclllllcllllcccclcliiaabbbbbkbabaaiiiiccccccacccclciciccccciaiccicicicici`iiibnnkfnknbbbkaaknkbnnnmnnnkkbknnnkknnnnmkbbbbkbbkkbaaabbbbbbknmnknkbbknnnnnmnnnnnmmnnknknkkkmnnbkknkkkknnkbbbbkknbkkkknnnkknfjjjjjljjlljjjjljjj`jjljljjlljijjjjccaknnkkknnkb`iaabknnmnnnnknnnnnnnnnmnbkkkabkbknmnkkfnkkkbbbabbbbbknnmnnknkaknknnkknnmnnbbbbkabkbbbadaabbaabnmnknkkaknnnnnnnnfkljcjljljljjjjjjjjjjjj",
|
||||
"llllcjllllllcllllclllclclclclclcccclclcliiiai``icccccccccccibcccccccccccciciiiiciciciciciiiciinmnkmmnmkkbbbbbabbnnnmknnnkkknknnnnnnnnkkbabbbbkka`aabbbbbabnnnnkknnkmnnmmnmnnmmmnmmnnkkkknnnmkbkknnknnnnnkkkkbmmkkkkkkkkkbnjjjljjjljjjljljlljajljjjjljljjjljjjc`kmnnkknnnba```akmnnnnmnnnnknnnnnnmnkkkkbbkkknnnmknmmmnbbbkbbbbbknnmkknnkknknnknnnnnkkkbabbbbkkbiabbbbbbbdnnkkmbknnknnmnnmkmbjinijljljjjjjjjjjjjjj",
|
||||
"llljllllllllllllccclllcllclclllcllcccccccccclcccccccclcccccc`lccccicciccciccicciciciciiiiii`ickmmnmnmnbbbbbclciicccilcciliiilciccicccccclcclicllllcclcccllciiciciiciiiiicciiiicci`iiclliiiciiccciiiicciiiccccamknkkbkbkkkblljljjljjjjjjjjjjljljjlljjljjjjjjlllinmmnnnknmkaacccciiiciiiiiiiciiiciiiicccclciiicc`cciccillccclclciiciclicliicccliiciccccccclccccllllciccccliiciiiakkknnmmnmnnkciijljjjjjjjjjjjjjjjj",
|
||||
"ljlcljlllllllllllclllcllllccccccccclccllcccccccccccccccccccclccccccccicccicci`iiciiiicicii`a`ikmnmmmnkbabbijjjjjjjjljljjjjjljjjjjljjjjjjjjljljjjjjjjjjljjjljjjjjjljjljjjjjjjjljjjjljjjjjljjjljjjljjjjjjjjjjjjinnnkkbbbbbkbjjjjjjlljjjjjjjjljjljljjljajjjjjjljccknnnnknnmkbacjjjjjljjjjjljjljjljjjjljjjjjjjjljjljjljjjljjjjjjjjjjjljjljjjljjjjjljjjjjjjjjjjjjjjjjjjjjjjjjjjjjjlikkbknnmnnmkncjljjjljjjjjjjjjjjjjj",
|
||||
"llllllcllllllllcclclclclccllclclclcclcccccclilccccccccccilicciccicccccciciciibiciciciiciiia``immmmnnmknnkkillljcccjljclljlllccjijljcllljljlljjljljjljlcjlllllllllcllljlcjljjljllljjlclljllilljllclljlcicjclclcknkkkkkabbbkljjjjljjjjjjjjjjjljjljjjjjjjjjjjjjjcianmnnnknmnbacjllclcjcjcjcjllllllllljllllccjlllllljljllcjjllllljlljljjljljjjjlljjjllllllllcjllljllclljjllljljjllabbbbbknknmkn`jjljjjjjjjjjjjjjjjjj",
|
||||
"lllllljcllcllllccclllclcclclclclcccccccccmkcccilccccccccccccccicccciccccciciiaiiciiiiiiiciii`immmnmnnmmnnkclnmfffffffeeffmmffmmffmfffffmmffffeffemfffffmmmffffffffffffffffmmmffffffmffmmfffffmffffmffmmmmffmmkkmnnkbbnkabkjailjjjjjjjjjjjjjjjjjjjjjjjljjjjjjlcibknmknnnnmkdidkkkmnnnnmmmnkknkkkkkkkknkkkkkknknknnkkkkkkbkbknknnkkknnkkkbkkbbbbbkkbbbbbbbbnkkbbkbkbbkkkabbkbkda`dbbbbbbkbnmnljljljjjj`jljjjjjjjjj",
|
||||
"jlllllcbccnnclclllklclllllcclcclcllccclcciclclciccccccicccccicaiccccciciicciciciiicicicii`ii`innmmnnnmfnmnilmffffeffffffffffffmffmmffffmmfffffffffffmfmmmmffffefffeffeffmffmmmfffmmmffffffffffffffffffmmfffffnbnnkkbbkkkbaljjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjlcibbmmnknnmkka`bnknmmnnnnnnknnnkkkkkbkknnkbkkknknknnkkkkkkbbbkkkkkkkkkkknnkkkkbbbbkbbbbbkbbbkkkbbbkkkkkkbbbbkkbba`bbabbbabaknniljjjjljjjjjjjjjjjjj`",
|
||||
"c`iljllllliclclclkicllicllccccccccccccccaaiciclcccciclilcicccc`cciciccciciiaiiciiiciciiiii`i``nmmnkknmmmmmilmmmfffffmmffffffmmffmfmmfffmfmmfffffemmffffmmfffffffffffffffmffmmnmffmnmmfmmfeffffffffefffmmfffffkbknnmkbbknkbljjjjjjjjjjllcjjjjjjjjjjjjjjiljjjjliibknmkknnnmnnabkkkmnmnkkknknnkkkkknkkkkknkkkbkknknnkkkkkkbbkkbkkkbkbkkkkkkbkkbbbbkbbbbbkbkkkkkkbkbkbkbkkbbbkbkba`bbbbbbaabkknbjljjjjj`jjjjjjjjijjj",
|
||||
"lljlcclllllllcccclcllcllccclclcccccclccccccclciccccccciccciccaccccccicicciibiiiciiiiiii`i``i``nmnnnkknmmmnicffffffffmmmmfffmmffmffmmfffffmmmffffffmefefmfffffffnfmmmmmmmmffffffffmmmfffffffffffmefffmmffffffmnbbnnmmkbbbknjjjjjjjjjjjjjjjjjjijjjjjjjjjljjjjjliidbnmnnnknmnnaaknmnnnkkkknknnkkknkkkkbknnknkkbbkknnkkkkkkbbnkknnbbbbkbkkbbbkkkkbkkkbbbbkkkkkbkkbkbkkkbbkbkbkbkkaiabbabkkkbbbbajjjjjjjbljjjjjjjljjj",
|
||||
"llllllllcjccjlcllcclalccclclaccccccccccccccccccccciccicicccicbcicicicicicic`iciiiiiiii`iii`ii`nnnnnnknmmnmccmffffffmfmfmffffmffmfffmfeffmfmmffffffmfffmmmmfffffmmmmmmmmmmffffefffffmmffffmfffffffffmmfffefffmnkbkkmmnkbbbkjjjjjjjjjjjjjjljjjjjjjjjjjjjjjjjjjci`bbkmmnkknnnn`annnnnnnnkkknkkkknkkkkkkknnknbkbkkkkkkkkkkkkbnkkkkkbkbbbbbbbbkbknnkkbkbkbkbkbbbkbbbkkkbbbkkkkkkkbbibababbkkkkba`ljjjjjjjjjjjjjjjljjj",
|
||||
"llllllcllclliccclllclccllccik`lc`ccicccccclccccccccciclccicccciciciciciciiccciiiciiiiiiiii`ii`nmnkkkknnmnnlcmmmmffmfmffffffmmffmmfffefffmffmfffmmmnmmmmfmfffffmmmfmmmfmmmfffffmmffffmmfffmmfffffffmmmfffmefmnnkkbbknnnkbabjjjjjjjjjjjjjjijjjjjjjjjjjjjjjjjjjlc`kkkbknnnkmnnaakkknknknnkknnkkknkkkkknmnnkkkkkkkkkbbkbbkkkbkkkkkbkbkbbbbkbbbkbkkkbkbkbkbbbkkbkbbkkkbbbbkbbkkbbba`abbbaabknkkb`ljjjjjjjjjjjjjjjcjjj",
|
||||
"cllcclllllccccclclclccllcclliccciclcccccciccciccicccicaccciciciiciciciciiciiiiiiiii`i`iiiiiiibnmkkkkkknnnmcifmfmmmmmfmmffffmfffffffeffffmffffefmmfmmffmfmfefmmmmmmfmfmmmnfmmmmnmmffffffefmfffmfffmmmmmmnmfmnmnbkbbbkknnnkbljjcjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjli`bmbbbknmkkkkbannnknkkkkkknnnknnnkkknnnnkkkknknkkkkbkbkkkbkbkkkbbbbkkbkkbbbbbbbbbbbkbkbkkkkbbkkbkbkbbbbbabbkbabb`abbbbaaabkkkbljjjjjjjjjdcjjjjjjjj",
|
||||
"lccllcilclllccclllclcccccccclcclccccc`biccccccc`ccicicfiiccciiliiciciciiciiciiciiii``iii`iiiibnmmnkkknnnkklcmmmmmmmmmmmmefffffefffffmmffffmfffffnfmfffnfmfffmmmmfffmfmmmffmnmmmmmnmmfffffmfffnmfnmnmnnmmmfnmfnbkkkkkkknnnmljjljjjjjjjjjjjjjjjjjjjjjjjjljjjjjlciamkba`knnnnbb`nknkkkkkkkkknmkknmnnnkkkkkknknknknnkkkkkknkkbknbbbkkbkbbbbbbkkbbbbbbbbbbbkkkbakkbbbbbbabbababbbbb`aba`aaaabbbbbjjjjljjjjjjjjjjjjjjj",
|
||||
"lclccc``cllccclclccclccclcccccccccccccccbaiccci`cicicciicciciciciciciciiiiaiiii````ii`iiii`i``nmmnnkknnmnklammffmfmmmmmmmmffffmffffffffeffffemmmmffffffmmffmmmmffmffmmmmfffmmnmmnfmmmffffffffffmmmmnmnmmmfffmmnkkkknkbkmnnjjjjjjjjljjjjjjjjjjjjjjjjjjjjjjjjjcccbnbbabbbnnknn`nnknnkkkkkkkkknnnkknnnnknkkknnkkbkbbkkkkkkkkkkbbbbkkbkbkbbbkkkbbbbbbbbbbbkkkkbkkkbbbbabbabbbkbbkbbbnbi`ii`abkbbjjjjeajjjjjjjjjjjjjj",
|
||||
"ccllllcclclcclcclcllcclccccclcccccccccciciicicccilckciciiciciciciiciiicicii`i`iiii`iiiiii`ii``nnmnnnnnmnnklammfffmfmmmmmmmffmmmmffmfffmfffmffnmmmfmfmfmmnmmmmmmmmmmfmmnmmmmnmmmmmmmnnmmmefffmnmfnnnnmnnmnnffmmkbbkkkbabmnkljljjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjl``abkbkbbbknnmm`knknnknkkkkkkknkkkkkkbkkkkknnnknbkbbkkkbbbbbbbkbbbbkkbkkkbbbbbbbbbbbbbbbbbbbkkkbbbkbbbbabbaabbbkbaakbiiii`aabbkcljjjjjjjjjjljjjjdkj",
|
||||
"clllclclimalccllcclclcccclcccccccccccccccicccciiiciiccicciciciciiciiiiic`iakciiiiiiiiii`ii`iiakmmnnnnnnmnkjanmmfffmfmmmnmmmmmnmmmmmmmmmmfeffmmfmmffmmffmmmmmmmmmmmffmmmmmmmmmmmmmnmmmnnmmfffffmnmnmmmnmnnmffmnnbbbbbbabnmmcjjjj`jjjjjjjjjjjjjjjjjjjjjjjjjcljlii`knkbbbkkbnnn`kknnnnkkkkkbkknkbbkkkkbbkkbknnknkkbkkkkbkkkbbbbkbbbbbbkbkbbbbbbbbbbbbbbbababbkbkbbbbabbbbababbbbb``ka`icc``aabkljjjjjjjjjjjjjjjjjjj",
|
||||
"lclcllcccclcllcclc`kcclcclccclcacicciliccccccccccicciciciciciciciiiciciiii`i`iiiiiii`iiaiii`iakmnmnmnnnnnblbmmfmfffmmmmmmfmmmmmffmmnmnmfmffmmmmmmfmmmffnfmmmmnmnmmmmmmmmmmmmmmnmmmmmmmnmmmmffmmmmmmmmmnnffmfmnnnbbbkkbbbbbcjjjjiljjjljjjjjjjjjjjjjjjjjjjjljjlc`aknnkkbbkbbbk`knnnnnnnkkkkkkkkkkkkkkkkkbbkbnkkkkkbkkkbkkkkbbkbbbbbbbbbbkbbkbkbbbbbbbbbbbbbkbbbkbbababbbbbbbbbkba`bb``lciaabkncjjjjjjjjjjjjjjjjjjj",
|
||||
"llllllccccllcclccccciclccclc`iliccclccicicciiicccicciiciciiciiiiciiiiiii`iicii`c`iiiiii`iii``annmmnnnmnnnbjbmffffmfmmmnnmmmmmmmfmmffmmmnmmfmmfmmmmfnmfmmnmnmmmmffmnmnmmmnmmmmmmmmnnmmnmmfmknffmknnmmmnmmffffnmnnnkbbkbbba`ljjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjli`annnnnkbbbb`aiknnknknkkkkkkkkkbkknkkbkbkkbkkkkbkkbkkbbbbkbbbbbbbkkkkbbbbbbbbbbbbbbbbbbbbabkbbbkbbbbbabbbakbkbbbb`kbailciankkn`jjjjjjjjjjjljjjjjjj",
|
||||
"clllccllllccjcilccllnacllicanaclccn`ccikaicccciicci`cciciciciciiii`iiii`ib`iiiciiiii`iiiii`i`knmmmnmnnmmmblkffffmfmmmmmmmnmmmmmmmmmmmmmnfmfnmffmmmmfmmfmmmfnmmffffmnmmmmmnmnmmnmmmnmmmmfnffffmffmmnmnmmfffffmnnnnnkbbakn``jjjjajji`jjjjjjjjjjjjjljjjjjjjjjjjl`i`nnnnnnbka`ciinnnnnknkkkbkbbkkkkkkkbkkbkbkkkbkbbkkbbkkkkbkkkkbbbnknkbbbbbbbbbbbbbbbbbbbbbkbbbbkbbbbbbbabbbkkkkka`kb`clciannkk`jjjjjjjjjjjjjjjjjjj",
|
||||
"clclcclccclicllclcccacciccciicciicacccli`cccccccicimiiciiiciiiiii`i`i`i`iicii`iii`iiii`ii`ii`knnmnnnmmnmmblkmffmfmmmmnmmnmmmmmmfmnmmnmfffmfmmfmmmmmfmffffffmmffmffmnmmmmmmmmmmmmmmmnmmfmfmmmmmffffmmmnmffmffmmnnmnnkbbknblijjljjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjiiannnknkbbi`ciinnnnnkkkkkkkkkkkkkkkkkkkkbkkkkkkkkkbbkkkkkknkkkbkkkkkkbbbkbbbbbbbbbbbbbbbbbbbkkbbbkbkbbbbbbbbkbbbbibbicci`kknnnajjjjjjjjjjjjjjjjjjj",
|
||||
"llcllclclcjcccclclcclcccbcccccccccicicicccciciiccccicciiciicicii`iii``iiiiiiicii`a`iii`iiiiiinnnnnmnnmnmnbjkmffmmmmmmmmmmmmmmmmmmmffffeffnmmffmmmmmmmnffmffnmffmmmmnnmmmmmmmmmmmmmmnnmmnnmmfmmmmmnmnnmmmmmmmmnmnnmnnkbbba`jijjjjjjjjjjjjjjjjjjjjjjjjjjjjljjjl`iaknmkkb`iiii``nnnkkkkkkkkkkkkkbbkkbbkknnmnkkkkkkkbkbkkbbbkkkkkkknkkkbbbbbkbbbbkbbbbbbbabbbbabkkbabbbbbabakbbbbbb`ab`````nnnkk`jjjjjjjjjjjjjjjjjjj",
|
||||
"lcllccccccclclcccccccccciccccccccccccicciciccciciiciciciiciciiiiaiia`iiiiiiiiiii```i`iii`iiiikkkbmmmnmmnnalnfmmmnmmnmmmmmmmmnmmnmffmffmffffmmfmnmmmmmnmffmfmffffffmmmnnmnnmmmmmmmmmmnnnmmmmmmmnmmmmmmmnnmnnmmmnnmkmnnkabi`jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjii`nnnka`ic`a``innknkkkkkkbkkkkkkkkbkkkknkkkknkkkkbbkkbkbbbkkkkkbknbkkbbbbbbbbbbbbbbbbbbbababbkbbbbbbabbbbbabbabbbcibbai`akkmkkbjjjjjjjjjjjjjjjjjjj",
|
||||
"lccllccclclccclccccccccccccicccc`ciliciccccciccccciciciciciiiii`faiii`iiiiii`ii`ii`ii`iiiiiiikmnkbmmnmmnfalkmmfmmffnmnmmmmmmmmfmffffffnmfmfmffmmmmmmmmmfmfffffffmffmmmmmmmmmmnnmnnnnmmmmnmmmmmmmmmmmmnnmnnnmmmmnnmnnnkba`ajjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj`i`nnbbaa`iaaa`inkkkkknkkkkkkkkkbkkkkkknknnbkkkkknkkkbkbbkbkkbbkkkkbkkknbbbbbbbbkbbbbbbabbbbbbbbbbbbbbbbbbabbababa``bba`aabbbnfkjjjjjjjjjjjjjjjjjjj",
|
||||
"clcllclllclccclcclcccccccccclciccicccccciciiiciiciciciiciiiiii`iicciiiiiiiiiiiiiiiiiii`iiiii`nnmbbkmnmmnk`jnnmmmffmmnmnmmnmmnmfmmmfffffmfmfmffnmmmnmmmmfnfmfmfffffffmnnmmmmnmmnmmmnmnmmmmmmmmmmnmmmmmmmfnnnnnnknnfkkknn``aljjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjji``nnnbbbaaabaaikknkknnkbkbkkkkkkbkknkkknnnkkkkkkkbbbbbbbkkbkkkknkknkkkkbbbbbkbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbabba`aba`abbbkbakkjjjjjjjjjjjjjjjjjjj",
|
||||
"lclclccccccllccccccccccccciciccclic`cciiiciiiiciiiicicciiiiiiiciii`iiiiiiii`iii`ii`i`iii`ii`akbmnabnnnmnb`jffffmfffmmmnmmnmmmmfmfmmmffffffffffmfnmmnmmmfmffmmfffmmfmmmmmmnnmmmmmmmmnmnmnmmmmmmmnmnnnmfmmfmmmmnknnmnkknkaabjlljjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjlic`bkmkbbbabbaainnnknnnkkkkbkkkkkkknkkkkkkknkknkkkkkkkbbbbbbnnkkkbnnkbbbkbbbbbbbbbbkbbbbbbbbbbbbbbbabbbabbbkbbbbbba`baaabkbnbbkbccjjjjjjjjjjjjjjjjj",
|
||||
"clcccclcall`lcclccccccccccccbiciicicccicccciicciciciciiii`iiiiiiiiccii`iiiiii`ii`iiiiiiiiiciabbkbbbbmmnnn`jffmmfmfmmmmnfmmmfffffffmmmfffmfffffffffmnmnnmfffmmmffffmmmmnnmnmmfmfmnmmmmmmmmnmnnnnnmnnmmmmmmfmmmnnknknkknbbbkljjjjjjjljjjjjjjjjjjjjjjjjjjjjjjjjj`iabknnnkknnkbbinnnnnnnkkkkkkkkknnknnkkkkkkkkkkknnknnkkbkbbbnkkkbbkkkkkkbbbbbbbbkkkbkbbbbbbbbbbbbbabbabbbbbbbbbbbbaabababbbbmnkbljjjjjjjjjjjjjjjjjj",
|
||||
"clclclcl`lcmcccccccccccccciikiiiii``iiicicciiccicicicii`iiiiiiiii```iiiiii`iiiiii`ii`iiiiiii`bbbbkbbmmnmmilmfnmmmmmmmmmmmmffffffffmmffmmffmmfmffmmmmmmmffmfnmmffffmmmmnnmmmffmmmmnmmmmmmmnmnmnmmmfffnnnnmnnmmnnkkknnkkbkbkljjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjji``mnkkknnmmkbbiknnnkkkknnkkkknknnnnnnnkkkkkkknkkkkkkkkbkbkbkbkkbbbkkbkbkbbbbbbkbkkbbbbbbbbbbbbbabbbbbbbbbbbabbabba`b`bkkkkabmmbljjjjjjjjjjjjjjjjjj",
|
||||
"clcccllclcikcc`cccccccciiciib`iiiiabibiiiiiiciiiiiiiiiiiiiiiiiiiiiiciiiiiiii`i`iiiiiiiiiiiic`kbkbbbbnmnnmicmfffmmmfmfmnmfmmfffffmmmmffmffffmmnmmmmmmffmmmmmnmfffnmmmmfffmffffmnmmmmmmmnnmmnmmmmmmffmmnmmnmmnmnnnkkknkkdbbkljjjjjjjjjjljjjjjjjjjjjjjjjjjjjjjjji``mnkbbkknkkbaiknnnkbkknkkkknkknnknkkkkknnnknkkbkbbbkbkkkkkkkkkbbkkkbbbbkkbkbkkkbbbbbbbbbbbbbbabbkbbbkbbbbabababaaiiibknnkkknnnijjjjjjjjjjjjjjjjjj",
|
||||
"cclcclcclccclcnicccccciiiiiiciii`ca`iaiciiiciiiiiiiii`iiiiiiiiiiiiii`ic`i`iiiii`iii`iiiiiiii`bknbkkbbnmnnilnfffnmmmmmmmffmfffffmmfnmffffffnmfnmfmfffffmnffmmnfmmmfmmfmmmmffffmmmmmmnmnmmnmmmmmmfmnnnmmnnmnmnnkknkkbnnkbbnbljjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjii`kmnkbbkkbbbbiknnnkknkkkkkknkknnnknkbkkkkkkknbkkkkkkkkknnkbkkbbbkbbbkkkbkbbbkknkbbbkbbbbbbbbbbbbkbbbbbbabbbbbabbalilbkkkknnnnmijjjjjjjjjjjjjjjjjj",
|
||||
"lccclccclcccccccccccciiiiiiiiciiiiii`i`iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii`ii`iiiiiiiiiiciankbbkbbbkkmmccnfffffffmffffmmnmmmmfmmmfffffmmfffmfffmmfffmmffffffnmmfffmmmfmfffmmmnfmnmmmnmnnmffmnnnnnnnnmmnmmnnnkknnkkbkkkknljjjjajjjjjjjjjjjjjjjjjjjjjjjjjjjjjc`iknmnbbbkbbba`bnmnnnnnnnnnnnkkkkbnkbkkknkkkkknnkbkknkkkkkbkknnkkbkbkkkbkbkkbbkkbkbbkbbbbbbababkbbabbaabbbaabbbaaalccankknkbnbkajjjjjjjjjjjjjjjjjj",
|
||||
"lclliclcccccccccccccciiia`ccciiicickkiiiiiiii`ii`iiiiiiiiiiiiiiiiiiiii`ii`iiii`ai`iiiiii`ii``mnkkbbbabkkklcnnffffffffefffmmnfffmffffmmmmfmfmmnmmffmnmmmffffffmmmmmmmmmffmfffffmmmmnmnnmnmmmmnnnnnnmmmnnkmmmnmnbbknnkbbknnnljjjjjjjjjjjjjjljjjjjjjjjjjjjjjjjjjia`kbnmnbbbbbkaabknnnnmnnnnnnnkkkknkkknkkknkkbkbkkkkknkkkkknnkkkknkkbbkbkbbkkkkkkkkkbbbbbbbbbbbbbbbababbbabbbbbbkbalciakkknnknkkdjjjjjjjjjjjjjjjjjj",
|
||||
"cclibccaccclcccccccciiicaccciiicic`aai`iiiiiiiiiiiiiiciii`iiiiiii`i`iii`iii`ii`iiiiiiiiciccc`knknkkkbaaa`lifmfmmmfffffffmmnmmffmmfmmmmmmffmfmfffffmfmmmfmfmmnnfnfmmmmnfffffffmmmnmnmmnmmmfmnnmfmfmmfffmmmnmnmnkkbkkkabkknncjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjc``kbknmnbbknnkabnkkbnnnnmnnnnnkkknknnnnkknbknkkkbkkkkkkkkkkbkkkbbbkbkbbbkbbkkkkkbbbbbbbbbabbbbbbbakbkbkkkbabbabbbkci`akknkknkkkajjjjjjjjjjjjjjjjjj",
|
||||
"cclc`lcccccccccccccciiiccciiicciicac`ii`ii`i`iiiiiiiiiiiiiiiiiii`iiii`ii`iiiiiiiiiiiiiiciiiiakkknnmnba``ij`mmmmmffffmmnmnmfmmffmfffffmmmffmmmmnmnffffmmmmfnmmmfffnmfnnffmmmmmmmmmnmnnmmfmmnnnffffmmmmmmnmnnnmnknkbabkkkbbkljjjjjjjjjjjjjjjjjjljjjjjjjjjjjjjjji`ikkkkkmmnnnfnbbnknknnnnkknkkkkkkknkkkknnnbknnkkkkbkkknknkbkkkkbbbbkkkbkbbkkkkbbbbbbbbbabbbbkkababkbkbbbbbbbbbbabki`abkkkkkknnkbjjjjjjjjjjjjjjjjjj",
|
||||
"lcllccclcccccccccciiiiiccciicciiciciiiiiiii`iiiiiciiiiiiiiiiiiiiii`iiiiii`bb`iiii`iiiciiiccibnkkbknbba`cijafmmfmfffmmmnmnnmffmffffffffffffmmmmffmffffmmnmfnnmnfmfmmfnnmnmmnnnnmmmnnnmmmmmnnnfmmmnmmfffnnnmmffmknkbabbbkkkkljjjjjjjjjjjjjjjjjjjjjjjjjjjjj`ljjjca`bknkknmnmnnmbannnknkkkkknkbkkkkknnknnnknknkkkbkknkkkkkkkkbbkbbbbbkbbkkbbbbbbbbabbbbbbbbbbkbbabbbbbbbbbkbkbaabkkbaakkkkbbbkknnnjjjjjjjjjjkjjjjjlj",
|
||||
"cccclcccccccccccccccciiiiciicciccici`ii`i`i`iiiiiiiiiiiiiiiiiii`iiiii`iiiiiicci`iiiiciiiiiciakkkknkaaa`i`jamfmmmmmmfmmnnfnnmffmfmfmfmmffffffffffffmmmfmmmmnmmnfmmmmfmnmnnmmmmmnnmnnmmmmnnnnmfmmnffmmfmmmnnmmmnnnmkbkbbknnbljjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjji`ikkknkbkmnnkkbannkkknknnkkbkbkbkknnnnnkkknknnknknkkkkkkkkkbbbkkbbbkkbbkbbabbbbbbbbbbbabbbbbbaabkkbbkkkbkbbbbbbkbbaakkkkkkkbbbknjjjjjjjjjjjjjjjjjj",
|
||||
"clcccilcccccccciiciciiicccciciicic`iii``ii`iiiiiciiiiiiiii`iii`ii`iiiiiiiiii`iiiiiiiiiiiiiiibkknnkaaaa`abjanmnnfmmmfmmnnmmnmmmmmffmmnnmmffffmmnnfmfmfffmffmffmmmmfmmnmmnmmmmmnmnnmmmfmnnnnmmmmmfmmnnnnmmnmmnmmnmmnkkkkkkkkljjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjc``kbkkkbknmnkkbannkknkkkkkbkkkbkkknkkkkkbbkkknnkkkkbkknkkkkknnkkkkbbbkkbbbbbbbbbbbbbbbbbbbbbabbbbkbbbbbbabbbbbbabbaaknknkknkkbkkljjjjjjjjjjjjjjjjk",
|
||||
"lcccbf`cccccciiaccccciiiiciccciiiiim`iaii`iiiciiiiiiiiiiiii`iiiiiii`i`iii`iciiiiiiii```iiiicabbbkb`iba`abjamfnnmfmmmmmmfnffmmmmnnmmmmnmfmmmmmnnnnfffmmfffnmmmfnmmmmnnnmmmmmmnmnmnnnmmnnnnmfmnmmmnnnnnnnnmmfmffmnnmmnkknbbbljjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjl`ibabbkkkbnnkbkakkbkkkkknkkknkkknknkbbkkkbbkkbkkbkbbbknnkkkkkkbkkkbkbbkbbbbkbbkkbbbabbbbbbbbabbkbbakbabbabbbabbkkka`knknnmnnnbnkljjljjjjjjjjjjjjjj",
|
||||
"k`ii`icclccccciccciicc`ccicicciiciicibniiiiiiiiiiiiiiii`caci`ii`i`iiiiiiiiiiiiciiciiiniiiiic`b`abaiiaaabbjbmmmmmnnnmmmfffffmfmnnmnffmnnnmmmnnnmnnmffmmmffmmffmmmnmfmmmnmmmmnnnmnfffmnnmmffmmmnmnnnnmmnmfnmmfmnnmnmmnnkkknbcjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjci`akkbkkkbbbmkkanknnkkbkkknnkknnknbbbbnknkbkbkkkbbkbbbkkknbkkbbkkkbbbkknkbbbbkbbbbbbbbkkbbabkbbbbbkbbaaabbabbbbbbbaakknnnkbknnkbijjjjjjjjjjjjjjjjj",
|
||||
"ilcciccciccccccciccccii`iiiiciiciiiiiiai`iiiiiiiiiiii`ic`ii`iiaciiiiiiiiiiiciiiiii`iiaiiiccaabaab`iiaabbblkfmmfmmnmmmfmmfffmmnnmnnmmffmmffffmmmmmmmmmmmnmnmmmnnmmmnmmnnmnnnnmmnmmmnmnnmfnmmfmnnnnnnmmmmmmmmmmnnnmmnmnnnkbk`jjjjjjjjjjajjjjjjjjjjjjjjjjjjjjjjjc`iabnkkkbbbbkkk`knnnnbbkknnnnnmnbkbkkkbkknkkkknkkkbbbbkkkkbbkbkbbkbbbbbbbbbbbbbbbbbbbbbbbabbkkbkbkababbbbbkkbbbbbbb`knnnnkbbkkkkijjjjjjjjjjjjjjjjj",
|
||||
"cccciciclccicliaccccciliiicciiiiiii`iiiiiiiiiiiiifkiikaiiiiii`c`iiiii`aai`c`iiiiiiiiiciiiac`bb`aacc`bbkkalkmnmfmnnnnmmmnfffnnnnmnmmmmmmmmmnmmmnmmffffmmffmmmmmmmnnnffmnmnnmmfmmmnnmmmnmmnnmnnnnnnnmnffmmnmnnmmnfmnmmnmnnkbljjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjli`bbbbkkkkkbkkk`knkkkkkbbkbkbknnkbbkbbbkkkbkkkkkbkkkkkkkkkkkkkkbbkbkkbbbknbbbbbbbbkbbbbkkbbbbbbbbabbbbbbbbbkbbbbabaannnknnbbknkk`jjjjjjjjjjjjjjjjj",
|
||||
"cciccicccccccciicciciiiiiciiiiiiiiiii`iiiiiiiiiiiic`iicii``ii`iiiiiiiii`iaikiiiiiiiciciiikilab`a`ciakkbk`jnmnmmmmmnmmffmmfmnnmmnnmfmnmmfmmmnmmffmmmfmfmmfmmmmmmfnnmffmnmnnknnnknmmfffmnnnnnnnmmmnmfmnmnmnnnnnnmmnmmnnnnnmkljjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjic`bkbbbbkkbbnkk`kkknnnnkbnnnknnkbkbbbkknkbkknkkbkbkkkkkkkkkkkkkbkkbkbbbbkkbbbbabbbbbbbbkkkkbbbaabbbbbbbbbbbbbabbaba`knnnnmkbmmnndjjjjjjjjjjjjjjjjj",
|
||||
"ccccccciccccciclcicicia`aiiiicciii`iiai`iiiiiiiic`iikb```ii`eic`iiiiiciccnicbiciiccciciciiickai``c`bnkkkajnmmmmmmnmmmfmmmmmnmmmnnmfmmmffmmnnmmfmnmmfmfmfmnmmnmmnnmfmmmfffnnmnnnmmmfffnnnnnnfffmmmmfmnnmnmfmnnnnmmnkknnnnnn`jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjlicibnnnkbbkkbnkk`nknnkkkkknnnkkkkbkbbkbnnkkbkkkkkbkkkkbbbkkkkkbbkkbbbbbbkkbkkkbbbabbabkkkkkbbbbbkkkkkbbbkbbbabbbbbbb`aaknnknkmmnnbjjjjjjjjjjjjjjjjj",
|
||||
"cclicciiccccccciccciccbib`ciiiiiiiiii`iiiiiiiiii`iiia`ica`iciin`iiii`iii``cinciccicccccciccinic``aaknnkkajnmfmmnnnnnnnnnnmnnmfmmffmfmmmmnmfmmmmnmmmffffmmmmfmnmnnmffmmmnmnnnnnnmmmmmnmnnmffffmmmmfmmmmmmnmmmnmnnmnnkknnnkn`jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjiciibkmnkkkkkkkkk`nmkkbbkbbkbbbbkbbkkkkkkkknkkkkbbkbkkbbbkkkknkbkkkbkkbbbkkkkbkbbbbbbbbkbbkbababkbkbkbbbkkbbbbbbbbbbb`baabnnnkmnnkkjjjjjjjjjjjjjjjjj",
|
||||
"cclcccciaicccccciic`icacaiciiii`ii`iiiiiiiiiiiiiiiii`ii`i`i`ciaiiiiiiiiciliaf`ilcciccccccicckic`abkknnnnajmmmnnmmmmnmnmnnnnnmfmmnnnmffffmffffmmnnnmmmmmmmnffmmfmnmfffmmnmmfmmmffmmnmnmmffmmmnnmnfmmmfmmmnmmnmnnnnnmkbbknmkijjjjjjjbjjjjjjjjjjjjjjjjjjjjjjjjjlciibbkknnkknbkkbikkkknknkkkkkkkkbbkkknkbkkknnnnkknkkkbbbkkkbkkkkkkbbbkbbbkkbbbbkbbbkbkkbbbbbbkkkbbbbbbbbkbbbkbbbbbbbakkbbknmnmnnnkjjjjjjjjjjjjjjjjj",
|
||||
"ccccciciiiicciccccciiciiii`iiiiiiiiiii`iiiiiiiiiiii```ii`iiiiiiiiiiiiii`cicia`aiicicccccciciaca`aknkknnn`jfmmnnmmnmmmnmmnnnnmnnmmmnnmnmffffffnnnnmmmfmfmnmmfmmmmfmmmmmnmnmffmmmnnnmmmmmfnnnnmfmnmmmfmmnmmnnnnnkknmnkabkknnijjjijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjci`akkkkknnbknkkannbnkkkkkkkkkbkbknbkbkbkbbkbkkkknkbbbbbbbbkkkkbbbnkkbkknkkkbkbkkkkbbbbbbbkkbbbabbbbbbbbkkkbbbbbabbb`bnnbbknmmnnkbjjjjjjjjjjjjjjjjj",
|
||||
"cccccciiicccccicicicciiiii``biiii`ii`a`iiiiiiiiiiii`iiiia`ii``iciccici`ciicci`icbicccccccici`i`aknknnnnn`jffnnfmmnmnmmmnnnmmmmmnfmmmnmmmnmmffnmnnnmnnnnfnmmfmmmfmnmmmnnnmnnnmmmmmnmmfmmfnnnnmfmmmmmnnmmfnmnnmnmkknnkbbbbkkcjjjjjjjjjjjjjjjjjjjjjjjljcljjjjjjjci`abkkkknkmbnkn`nkkkkkkkkkkknkbkkkbkkknkkbkkkkbbkmkkbbbbbbbbkbbbknkbkkbbbkbkbbbbbbkkkbakkbkkkbbaabbkbkbabbbbkbbbbbbaannnkbbnnmnnnjjjjjjjjjjjjjjjjj",
|
||||
"ccccccciicicicciciaaiccc`iii`iiiiiiiii`iiiiiiiii``iiiii`aiiiaa``ciiiiiiccciciiicilcclcccccciaabkkknnnnnn`jfmnnmnmmnnmmnnnnmmmmfmnnmmfnmfnmmffmmmmnmnnnmmnnnmmnnmmmmmmfffmnmmmmmmmnmmfmmmmnnnnmmnmnnnnmnnnnnmnmmnbnnbbkkbakijjjjcljjjjjjjjjjjjjjbljcjjljjjjjjcjiaakbkkbnknnnmm`nkkkkkkkkkkkbbbkkkkkkkkbknbkkkkbbkkkkkbkbbbbbkbbbkbbbbkbkkbkbkbbbbbbbkbbbkbbkkbkabkbkbbbbabbbbabbbaabnnnnbbbknmnnljjjjjjjjjjjjjjjj",
|
||||
"lciccciiciciccicciiiiiciii```i``i`iiiiiiiiiiii`iii`ii``b`iiiiiicicicciiiciccccccccicccccccciabkkknnnnnnnilnnnmnmnnnnnnnmnffmmmmmnmmfmnmffmmmfmfmnmmmnnnmmmmmnmmnnnnmnmmmnnmmmnmmmmmmmmnnmmmmfffmmmmnnmmnmmnnnnnnbkbbbkbbabcjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj``iabkbkbkkknknn`kkkkkkkkbkbkbkkknkknkkbkknbkknkkknkknbbkkbbbbbkbbbbbbbbbbkbbkkbbbkbkkbkkkbkbbabkbkbbbbbbaabkbbbbbbaaannnmnbbbkknmcjjjjjjjjjjjjjjjj",
|
||||
"iiiccciiiiciciccicicccci``iiii`ii`iiiiiiiiii`iii`i`iiii`iiiiiciiiciciiiiciicccccci`ilccccccaabkknnnnnnnnclmnnmnnnnnnnnmnmfmmmnnmmmmmmnmmmmmmfmmmnnmnmnnnmmmnnmmmnnnnnnnnmnnnffmnmnmmmnnnfmmnmmmmmmmnmmffmmnmnkkknkbkkbabbbcjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjli`abkbkbkkknkkkckkbkkbkbkbkbkkknkkkkbbknkkkbkkkkknkkkbbbkbbbbbkbkkbkkbbbbbbbbbbbbbbkkbbbkbkabbkkbbbknkbkkkbbkkbbbabaamnnnnkbbabbncjjjjj`ljjjjjjjjj",
|
||||
"ciicciiiiiiiciicccciiiamb`i`i````iiiiiiiii`iii`iiii`iiciiiiiiiiiiciiiiiciiiccccccciccclccli`kkmmknknknnnccmnnfnnnnnnnnmfnmfnmnnnmmmmmmnnmnmmmmmmnnnmnnnnnnnnmmmmfmnnnnnmnnnmffmmmmmmnnnnnnnnnnmmnfmmnmmfmnnnnnkkkbbkkbabbbcjjjjjbjjjjjjjjjjjjjjjjjcjjjjjjjjjjcci`bbkbbkbkkkbkckkkkkkbbbbbkkkknkkbbbbnnkkkkbkkbbkkkkkbbbbbbbbbbbbbbkkbbbbbbbbbabkkbbbbbbkbabbbbababbbbbbbabkkbbaababnnmnmnbbbbab`jjjjjijjjjjjjjjj",
|
||||
"ccccciiciiiiiiiiiiciiccaiii`iiii`iiiiiiiiiii`i`i`iii`i`iiiiiiicciiciii`iiiiiciccclcclccccccaknmmmmnnnkknlcmnnmnnnnnnnnmfmfmmmnnnfmmmffmmmmnnnmnfnmnnmnmnnnnnnmmfnnnmmmnnnmmmnmmmmfmmnknnnnnnmmmfmmmnnmmmmknnnnkbabbbabaakaljjjjjjjjjjjjjjjjjjcjjjjjjjjjjjj`jjli``bkbbbkbkknkkckkkkkbkbkbbkknnknnkbbkkkkknkkkkkbbbbbkkbbbkbbbbabbbkbkbbbbbbbbbbbbkkkkkkkkbdbaabbbkbbbkkbbbbbbbabbabakmnnnkkbkkbbijjjjjjjljjjjjjjj",
|
||||
"cccciciiiiiiiiiiciiab`icci`a`ic`i`iii`ii`iiiii`i`iiiicciciiicciiiccicibiiiccccccicccccclcccanmnmmmmnkkkklimnnmnnnnnnnmfffffmnnnnfnnnmffffnmnnmnmmmnmnnnmnnnmmnmmnnmffmmnmmmnnnmmfmnmmnmmmmmnnnnnmmnmmmnmnnnnknkbabkbbbabbaljjjjjjjjjjjbjjjjjjjjjjjjjjjjjjjjijliiabbkbbkkbkkkb`kkkkkkbbkbbknnnnkkkbkbkbbkknkkkkkbbbbkkbkbbbbbbbbbbbbkbbbbkbbbbbbbbbbkbkbbbbbkkbbbbbbbbbbbbbbbbabbba`bnnnnknnbkbb`jjjjjjjjjjjjjjjj",
|
||||
"ccccccciiiiiiiiii`iiiiii``iiiiciiiiiii`iiiiii`i`iiiiiiiiiiiciiicciiaicaicciiccccclcclcclllcafmnfnmnnnnnnlcmfnmnmnnnnnmmfmmnnnnnnnnnnmmmmmnmnmfnnfmnnnnnnnnnmnknnnnnnnnnmmnnnnmfmmnnnnmmmmnmnnnmfnnmmmnnmnknkknbbbbbkbaaaaaljjjjjjjjjjjljjji`jjjjjjjjjjjcljjjjj`iabkkkbkkkkkmaaknkkkkbkbbkknnkkkkbbbbnbbbkkkkkbkbnkkbkkkbbbbbbbbkbbbbbabbbbbbbbbbbbbkkbbbbbkbbbbbabbkbabkbbbbbbaaaa`aknnnmnkknbbajjjjjjjjjjjjjjjj",
|
||||
"icccci`cciciiiiiii`iiiiiii``iiiiii`iiiii`i```iii``ci`ciiiiiccicicccciciiicicccccccclccccclikmmnmnmnnnnnklammnnknnnnnnnnnmmmnnknmnnnnnnmmmmmmfnnmnmmmmnmnmnnnmmnnnnnnnnnnnnmmmmmfnnnnnfnmmnnnnnkmmnnnmmnnmnmnnkbbabbba`aaailjjcjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjliiakbknkkkbknnk`nkkbbkkbkbbbkknkkbbkbkbkbbbkkkkbknbnbbbkbnkbbbkbkbbbbbbbbbabbbbbbbkbbbbbbbabkkkbbbbbbbbbabbbabbbbbaaibbbbknmmknkabjjjjjjjjjjjjjjjj",
|
||||
"icciccccciicci`bi``i`iii`i``ciiiciiiiiiiiiiiii`aci`iiiciiiiiiiccciicccccccciciccccccccclclcbnnmmnnnnnnnklaffmnnmnnnnnnmmmmmnnnmmnnknmmmmnnmmfnnnnnmmnmnnnmnnmnmnknmnnmmnmmfmmnnnnnnmmfmmnnnnnnnmmmmmnnnkmnnnnkbababaa`aaicjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjliiakkabkkkkknnnannkkbbkbbkbkkkknkkkbbnbbbbbbkkkkkkbkkbbbkkkkbbbbbbbbbbbabbbbbbbkkkbbbbbabbbkbbbbabbbabkkbbabbabbbabb`abbbkknmmmkbb`ljjjjjjjjjjjjjj",
|
||||
"macciiiicicciii`iii`i`i`i`knai`c`iii`iii`ii`ii`aaciiafiiiciiiciacciccccciciiccclccclccllclcaknnmmnnmnnnnjbmffmnnmnnnnnmmmfnmnnmfmnknmmmnmnmnnnmnmmnmmmnnnnnnnnnnnmmmnmmnnmmnnnnnnnnnnnnnnnmnnnmnnnmnnnknnnnnnkabaaaai```iiljjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjiiakbaakkknnnmnankmnkkkkkkbbkkkkkkkbbnkkbbnkkkkbbbbbkbkbnkkkbbbbabbbbbbbkkkkbbbbbbbbbbbbbbabbbbabbabbbbabkabababbbbb`abbbbbknmmnbbljjjjjjjjjjjjjjj",
|
||||
"biccclcciicciccii`iiii`iii``ci`ia`iiiii`iii`iii`c`iiii`ciiicccibccciciciiiiiiicccccclccclclabkkkmnnmmnmklanmmnnnmnnnnnnmmfmnnnnmmnknmmnnmnmnnmfmmnmmmmmnnknknnnnmmmmmmnnmnnmmmmmmnmknmmmnmmmmmnnnnnmnnnnknnnmkabbaa```a`iiljjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjlii`kkbabkbkknmnakknkkbkkkkbbkknkkkkbbnkkbbkkbbbkkkbbknkbkbbkkbabbbbbbbbbkkbbbbbkbbbbbbbbbbbbbbkbbbbkbbbabbabbababbbb`abbbbbabknkkajjjjjjjjjjjjjjjj",
|
||||
"cciiiiiicciiccib`iii`ii`i`````ic`ii`iii`i`i`iiiiiiiciiciicciiciiiccciiiciiciccilcclclcllcll``aaknmmnmnmblbnnmnnmmnmnnnnmmmmmnknnmnnnnnnnnnmnmnfnknnnnknnnnnnnnnnnnmmnmnmnmnnmmmmmnfnfmmnnnnmmmmnnnnknnnknnkknkabbaaaabba``cjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjii`baaaabakkbknakkkkbkkkkkkbbkknkkkbbbkkkbbbbbbbkkbbkkbbbbbbbbbbbbbbbkbkbbbkbkbbbkbbkkbbbbbkbbbbbbkkbbabaabaaaabaaaa`i```aabaknnbacjjjjjjjjjjjjjjl",
|
||||
"icccciccicciic`b```iiiiii``iiiiiiiii`iii`iiii`iiicii`cicciiciicccccccicciicicciclcclclcllcli``akkmmmnmnbjbnmmnmnmmmmnnnnmmmmnnnkmnnnnnnnkknnnnnnnnnnnknnmnnnnmmmnmmnnnnnnknknnnmmnmnnnnnnnknmmnnkkkknnkknnnknkabbaaabbkabaijjjjjjjjjjjjjjjjjjjjjjjjjjjljjjjjjjcci`ii`abbkkbkkabnkknknknknkbbkknnkkbbbkkbbkkbbbbbkkbkbbbbbbbabbbbbbkbkkkkbbkbbababbbbkbbbbbbabbabbkbabaababbbbbbabaiciii`aabbnnkacjjjjjjjjjjjjjjj",
|
||||
"liiicciiiicciiii`i`iiiii``ii``iii`iiii`i`iiiiiiiki`cciciciiccccicccccccccicciiaicccllcllclcaaabknmmnmnnbjkmmfnnnmmfmmnnknmmfmnmnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnmmmmnnmmknnnknnmmnnknnmmfmnnmmmnmnnnnnmmnnnnkkbabaaaabkkbnaijjjjjjjjljjjjjjjjjjjjjjjjjjjjjjjjjjilcic``bkbkkkkbaankkkbkkkkkkkbbkknnkkbkbkbbbkkbbbkkbbbbkbbbbabbbbbabbbbbkbbbbbbbbababbkbbabbkkkbbbbkkkbbbbbabbbbabaaalccciabbbkkkbijjjjjjjjjjjjjjj",
|
||||
"icciciccciiciiiiii`iiiiiii`iii`iiiii`i`iii`iiiiiiic`ciiiiicciicccciccccccilcclilclclclccllcbbbbmmmmmmnnbjkmmmnknnmmnmmmnmfmfmmmfnnmmmmnnknmnmnnmnnnnnnnnnnnnnnnnmmmmmmmmnnnnnnnmnnnmnmnnnnknnmmnmnnnnnnnnnnnnkbb`i`aabnnkaijjjjjjjjljjjjjjjjjjjjjjjjjjjjjjjjjjcllcc`abbbabbkbaannkbbbkkkkkkkkkkknknnkbkbkkkbbbbkbbkbnbbbbbbbbbbbbbbbbkkkkkkkbbbbbabbbababbbabbabbbbbbbbabbbbabbbab`lllciibbabbbbijjjjjjjjjjjjjjj",
|
||||
"ccciciicciiciii``c`i`cii``iiiii`ikbn`iiii`iiiiiiiciiiiiccakaiccccccccccciccccclccllcllclllcbbbnmmmmmmnnajmmmnnnnnnmmnnnmnmmmmmmmmnnnnmmnnnmnmmmknmmnknmnnknknnmnmnmmmnnnmnknnnnnnkkmmmnnmnmnnnnknkknmmmnmnmkkkaaii``bkkkbaijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjicllccaakbbbann`bnnkbbkkknkkkkbkknnkknkkbbbbkkbbbbbkkbbbkbbbbbbbbabbbbkkbbbkbbbbbabbabbbabbkkbbbbbbabbbaaabbbbbbbbaaalccc`abkbbbabajjjjjjjjjjjjjjj",
|
||||
"ciiil`ciciciciiii`iiiii`ii```iiii`ia`i`iic`ci`iiiiiicciiiciccccciccccccccccllcclcccllclclccbbbnnnnnmmnn`lnmnknnnnnnmmnmnnmfmmmmmmknkknnknnmnmmmnmnnmmnnnnnnnmnnnnknnnnmmnnknnnnnnnnmmnnnmnnnnnnknnnknmnnknnnmka`i``abbknaaijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjicjcii`bkbkkknmaankbkbkbbknkkkkbknnnknkbbbbbbbbbkkbkkkbbbkkbbbbbbbbbkkbabbbbbbkbbabbbbbbbbbbbbbbbbabbbabbaabbbbaabbbblli``bkbbbbaaajjjjjjjjjjjjjjj",
|
||||
"ccciina`iicicii`iaiiiiiii``i`iiii`i``ii`i`a`iic`iciciiccciicciccccccclcccccccclclclccllclciabkmnnnnmmnm`jnnnnknnkknmmmmknmfmmnmfmnnnnnmnnmmnnmmmmmmmmnknnnnnmmmnnnnnmmmfkknnkknnmmmmnnnnmnmnnnnknkkknnnmnnnnmna````bbknbaaijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjljjcila`i`bkbknnnnaabbkkkbbbbnkkkbbkkkkkkknkbbbkkbbbkbkbnkkkkbbbbbbbbbbkkbbabbkbkkbaabababbbbbbbabbkbbbaaabababbbbbbabbbllababkbbbbbbbjjjjjjjjjjjjjjj",
|
||||
"iiccik`iiciacii`ibiiii`iii```i`ii`i`iciiiiiiiciciiiiiiiiiccciccccccccccccclccllcieillclllciabknnnnnnnnnilknnnnnnnnmmnmmnnmmmmmmmnnkknmmmmnnnnnmmnfmmnmmknnnnnmmnnnmmmmmmnnknnknnmnnmnnnnnmmnnknnknknkmmmmnkknkaaa`abakkaab`jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjicca`iibbbknnnnb`bkbkbbkkkkkknkkknknnkkkbbbbbkkkbbbbbbkkkkbkkkbbbbbkbbbbkbkkkbkbabbbabbbbkbbbabbbbbbabbaabbabbbbbbaablcabbbkkbbbbbbjjjjjjjjjjjjjjj",
|
||||
"ciccccicciibiiiiiaiiiiiiiii`i`i``iii```iiiiiiiiiciiiccciciccccicilclcicccilclclclccclclcll`kknnnnmnnnnn`jnknnnnkmmmmnmmmnmmmmmmmmnnnknnnnnknnnnmnnmnnfmmmmnnmnnnmmnnnmmnnnnnknknnmnmmnnknmnnknknnnmnnmmnnnnkkkabaaabbaaibk`jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjliccb`iibbbbknknk`kkkkbknknkbnnkbkkknkkkkkbbbkkkkbkbakkkbbkbbkkkbbbkbbbbbkbbbbbkbbbababbbbbbbkbabbbbaabbabbbbbbbbaaabbcibbabbkbbaabbljjjjjjjjjjjjjj",
|
||||
"ciciiciicii`iii`i`ii`iiiii`iii``i``iaaai`iici`ciiicc`iccciiiccclccicccciiaillcclcjlallllll`knnnmnmmnnnn`lnnnnnnnmnnnnmmnnnnnnmnnmfmnmmnnnnknnmmmnnmmmmnmmmnmknkkmmnnnmmmnnkknnnnmmmnmmnknnnknnknnnmmnmmnnnmnnkbbb`abba`abkijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjiicnk`cakbbknknkabkbkbkkkbkbkkkbbbbkbkkkkkkkbkkbbbbkbkkkbbkkkkkkkkbbbabbkkdkkbkkbabbbbbbbbbkbbabbbabbabbbbbbbbbbabbbaiiabbabkbabbbbjjjjjjjjjjjjjjj",
|
||||
"icciiciciicccii`iiiiiiiiiii`i````iiii`iikiiiabiiiiccaa`ibicbbicicc`iccc`ibcclclllacjclllll`bkknmmmnnnnnilnnnnknnnnnnnmmknnknnnnnnmnmmmnnnnnmnmnnmmmmnknnnnknnkknmmmmmmmmknknnmmmmnmnmnnnnnnknnknnnnnnmnnnnmnknkaiiiab`abbk`jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjji`cnnic`bbkbknkk`bkkbbkkbkkkknkkbkkkkbkbkkkkkkkbbbkbbnbnbbkbbbbbbbbbbbabkkkkkkkbbababbbkbkbbbbbabbabbbabbbbabbbbabbab`ibbabbbbbbbkbljjjjjjjjjjjjjj",
|
||||
"cciiciciciiii`iiii`iii`i`i`iiii`````iiiiiiciiiicciii`iccciccccicccilccccc`lclllcclcllcllll`bbkbknmnnnnnicnnnnknmnnnnnnnnnnnnnnnnkmmmmmnnknnmnmnnnmmnknnnnnnmnnknknmmmnmnnnknnnmnnnmnnnnnnmnknmnnnnnknnnkkbnmnmbilcci``abkkijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjic`kb``akmbakkknakkbbbbkbknbbkbbbbbbbkbbbkkkkbbbbkkkkbbbkkbbbabbbbkbbbbbbbkkbkkbabbbbkkbkbkbbbbbbkbabbbaababbbaaabbbb`ibkabbbbkbbabljjjjjjjjjjjjjj",
|
||||
"iciciiiiiccci`i`iiiiiiiiii``i``i``iiiiiiiiiiciciiacciilccccciicciccccccclclclcllllllllllcl`abbbknmmnmnnlcnnkknnnnmnknnnnknnnnnnmmmnmmknnnffmmmnnnmnkknnnknnknnnnnkknnnnnkknnnmmnnmmnnnmnnnnmmmnknknnmnnnnkmnnnii`ciccikkbbijjjjjjjljjjjjjjjjjjjjjjjjjjjjjjjjjjic`bb``bkknbbbnnakkbbkkkkkbbbkkbbkbkbbbknkbkkbbbbnkkkbbbkkbabbbbbbbbbbbbababbbbababbbbbbbbbbbkbbakbbbbbbbabkbbbaabbbb``bbkaknbbkkakijjjajjjjjjjjjj",
|
||||
"cicciccia``ii``i`i`iiiii`i```i```i`iiiiiciiiiiiic`ciccaiciicciicicccccccclclcllclllllllcjcabbbknnmnmnnnlinnnnknmnnnknnnnnmnmmnmnmmnmnkknknmnmnnmknnnknnnknnnkknknnnknnknnnnmmmmmnmnnnnnmnnmnmnnnnnnmmmnnnnnknk`c`iiciiabbbijjjjjjjjjjjjjjjjcjjjjjjjjjjjjjjjjjjci`bb``bkkkkbbkkakbkbbkkkkbbbkkkbkkkkkkkkkkkkbbbbkkkkkkbbbbbbbabbbbababbbbabbbabbbbkbkkbkbbbabbbbbbbbbbbabbbbbbbabbab``babbbkkbbkkbijjjljjjjjjjjjj",
|
||||
"cciciiiciiciii``i`i`i`i`ii`````i`iiiiiii`iicicccciciicb`ciiicicicicccccclcllclllllllllllclakknmnmnnmnmmlinknkknmmnnmnkkmnnnmnmnnmnkmmnnmnmmnmmnmmnnmmkknnnnkknknnnnnnnnknnknnnnnnnnnnknmnmmmnnknknmmnnnnkknkkkiciiclcc`ank`jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjic`kb`bbbkkkkbbk`bkbbkkknkkkkkbknbbknkkbkkkkbbbbbkbkkkkkbkbbbbbbbbbbbabbbbbkabbbbbbbbbbkbbbbaabbbkkbbbababbbbbbabaaabaibabbbbkkbbnkajjjjjjjjjjjjjj",
|
||||
"ciciciciiciiiiiiii`i`i``a`i```i`iiiiiiiiicic`iiiiccccci`iicccciccicciclccllclllcllcllcll`c`bbbmfmnnmmmnl`nknnkkmnnnmmnnmmnknnnnknnnkkkkknmmmnmnnmmnmnnkknnnnkknknnnnnmnnnmnnnmnnnnnnnknnnnmmnnknknnnnnnkkknknk`iicclcciakkajjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjlli`bbbknkkkkkkbbibbkbbbkkkbnkkkkkbbbbbbbkbbbbbbbbkkkkbbbbkbkbbbabkkbbbbbbbbbbbbbbbbbbbbbabbbbbabbkbkbbbabbbbbbabaabakaikaabkbkkbbkkajjjjjjjjjjjjjj",
|
||||
"cciciciciiiiiiiiiii````ibaiiiii`iiiiiiiiiciabiiliccciiiiccccccccccciclcllclllcllllllllllcjbnkbbknkmmmnmj`nnnnnknnnnnmmnmnnkknnnnknnkknnnnmmnnnkknnnnnnnnnnnnnknkknnkknnnnmmnmmnmknmnknnnmmnnnnknnnnknnkkknnnmkaiiccici`abbbjjjjjjjjjljjjcajjjjjjjjjjjjjjjjjjjjcciabbknkkkkkkkb`kkkkbbkkbkkkkkkkbbbbbbbbbbbbbbbkkkbbbbbbbkbbbbbbkbbababbbbbabbbkkbbbbbbbbbbbabbbbbbbbaabbbbabaaabbaba`nbabbkkkkbbkkjjjjjnljjjjjjj",
|
||||
"iiciciciiciiiii`iiiiiii`a`iiiiiiiiiiiiiib`iciciiiciiiibiccccccccccccclcllllclllllccllllllcbbbkkbkkkmnmnlannmnknnknknnmmnmnkknnnmnknnmmnfmnnnknnnknknnmmnknnnnnknknkkknnnmmmnnnnknnmkknnnmnnnnnnknnkkknkkknknnb`icc`ai`a`aa`jjjjjjjjjljjjjjjjjjjjjjjjjjjjjjjjjjlci`abbknkkkknnk`kkkkkbkbbbbkkkkkkbbbbkkkbbbbkbkkkbbbbbbbbabkkkbbaabbbbabaababbbbkbbkbbabbbbabbbbbbbbbabbbaaaabaabaabbikkbakkbbnkbbbljjjjajjjjjjjj",
|
||||
"iiciciiiiiiiiiiiiiiii`iiiii`i`iiiiiiiiii`ccciiciiiiiccalcccccccccclclc`lcllllllllcclllllllbbbnbabbbknmkjannmnnnknnknnmmmmnnnnknmfnmnnnkkmnnnnnnnkkkkknnkknknnnnkknknknknnnmnnnnknnnnknmmmnnnknnnnkkkkkkknnnnnk`cc`ab`a`cii`jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjlciaabbkknkkknnkakkkkkkbbkbbkkkkkkbbbbkkkkkkkkbbkbbkbbbbbabbbbbbbbbbbbbbababbabbbbbbbbbbbbbabakbkbbbabbbabaaabaabbabbaiakbabbbbbkankijjjjjjjjjjjjj",
|
||||
"iiicciciciiiiiiiiii`iii`ii`iii`iiiiiiiiciiiiciiiicciccliccciicclcllclcaclcllclllllclllllllbabbdkdddbnnklannnknnkknknnnnmmnnnkknmmmmnnfnnnknnnnnknnknnnnnkknnnnnkkkknkknnnnnnnnmknnnnmnnnmnnkkknnkkkkkkkknnnknb`c`bkbba`i``ijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjcibbbkkbknknkkn`kkbkkbbbbbkkbkkkbkkbbbknkkbkkbbbbbbbbbbbbbbbbbbbbbkbbbbbbabababbakbbbkabbbbkbbbkkbababbbaabaaaabbkaaa`bnabbkkbabbbkcjjjjjjjjjjjjj",
|
||||
"ciiiiciiiiciiiiiiiiii``i`iiiiiii`iiiiiiiciiciiicicccicccililccccclccllllllclllllllllbllllikkabbbbbkbkmblanmnknnknnnkknnnnnnnmmnmmnnnnnnnnnnnknnnnknnnnnnnnnknnnknnnkknnnkkkknnknknmnkknnnnknknnbkkkkkkkknmkkkb`ibknnkbaa``cjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjli`akkbbkbknnnnnibkbbbbkbkbbbkkbkkkkkkknkkbkbbbbbbbbbbbbbbbbbbbbbabbbbbabbbbbbbbbababbbabbbkabbbbababbbaaabbaaaakbbaaa`bnbbbbnkkbbbbljjjjjjjjjjjjj",
|
||||
"icciccicicii`c`ii`i``cc`ii`iii`ai`iic`iiciiciiiiccccccccclcccclcllciilclllllllllllllcjcllannkbbbkkbaknajknnkkkkkknnknmnnnnnnknnmnnnnnnnknnkkkkkkkknkknkkkknnnnkkmnnkkkkknkkknnnnnknnnknknkknknnnkkkkkkkknnmnnk`aknknknkb`d`jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjl``aknkbbkknnnkkikkbbbbbbbbkbbbkbbbbbbbkkkbbbbkbbbbbbbbbbbbbabbabbbbbbbabkbbaaaabaaababbbabbaabababbaabbbaaaaababbkbbb`ankabbknkbbkbijjjljjjjjjjjj",
|
||||
"iccici`c`ciii`kiiiiiiiai`iiiiii`ii`iiiccicciiicccciccccc`mlclclclccccllcllllclllllllllail`bkkbaknkbabkijnnkknknnkkkkknnmnnkkknnmkkkknnnnnknknnkknnnnnkknknnnknkkmmmnnnnkkkknnnnnkkknknkknkkkknnkknnnnnnnnmmnkbaknnnknfnbbnbjjjjjljjjjlcjjjjjjjjjjjjjjjjjjjjjjjl``bnnknkkbkknkk`kbkbkbbbkbkbbkkkbbbbbbkbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbkkbbbbbbbbbbbkbbbbabbaabbbabbbaaabbdbbbbbbbaa`amkbbbknknkbbijjjjjjjjjjjjj",
|
||||
"ciiiiia`ci`bna`iii`iibfiii``i`iiii`iiiiiiiciiicccccicccclccl`cilcllllllcclllccllllllll``liabbabkkkkbbbilknkknnknnnkkknnnknnnkknnkkknknknknknknknnnnnnknknnnkknnmmnnkkkkknknknnnmknmnkknnnnnmmmnkkknknkknknnkkbbnnnknmmkdakbjjjjjjjjjjjljjjjjjjjjjjjjjjjjjjjjjjli`bnknnnkkbbkkmabbbkbkbbkbbbbbkkbkbbbbbbbbbbkbbbbbbbbbbbbbbbbbbbbbababbbkbbbabaabababbbbabbabbbbabbbbabbababbbaabaabaaamnabbkkkkkkkijjjjjjjjjjjjj",
|
||||
"c`icciiciiciiiii`ii`ian`i```iiiaiciiciibiciiiicccccccccccccinlclclcccccllllclclllljcljlilibbbbbbaabkkb`jbkkknkknknkkknnnkknkkkkknkknnkkkkkknknnknnnnkkknknnkknnmmmnnkkknnnnnnnkknnnmnknnkkknnnkbkknnkkkkkkknnkbkkknmnkbbknkjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjl`i`bknknmkkbbbk`bbbbbbkbbkbbbkbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbababbbabbbkkknbababkkbkbbbbkabbabbbabbbbbbaaabbaaabaababa`nkbabbkkkknbaljjjjjjjjjjjj",
|
||||
"ibaiiiiiik`ciai`iiiiii`iii`iiii`iciiiciaiiciiccicccccccccllililcclllcclllllllllllclllllllibkbkndaabnkb`jknnkkkknkknnnnkkknknkkkknnnnnknkknkknnnnkkknknknknnnnnnnknnnnkkknmnnnnnnnnkkknnnnnnknmnmknnnkkkkkkkknnbnnknmnbbnnnncjjjjjjjjjjjjjjjjjjl`jjjjjjjjjjjjjjl``abkkkknmkbbbbibbbbbkbbbkbbkbbbkbbbbbbbbbbbbbbbabbbbbbbbbbbabbbabbbbbbbbbkbbbabbbbbbbabbbabbabbabbabbbbabbbaabbaaabaaikbbbabbkkbbbbjjjjjjjjjjjjj",
|
||||
"c`iciiiii`i`iiii`a`ii`iiii`iiiiciiiiicciiiiicccccccccccclicjillccllcllcllllllllljlljllljlanmnnnbabnnnbclknnnnnnnkkknnkkkknknknnnnkknkkknnknnknnnknknnnnnknnnnnnnnnnnnnmmnnmnnnnnnkbkknnknnkkknnnnnnnkkkkkkbkkkbnknnkbbkmmnkjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjl`iakkkmnkknkkbbibkkkkkkbbbbbbbbbbbbkbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbkbbbbbkbbbbbkbkbbbbbaababbbbbaabbbbbbabaaaababaaaikbababbbkkkkbjjjjjjjjji`lj",
|
||||
"iiiiiciii`iiiiiiiii`iii``i`ii`i`iiicciiciiicicccccccccicc`ciiilallccllcllllllllllllllllllannmnkbbmkkfkljknnmfnnknkkkkkknkkknnnnnknkkkkkknnkknkknkkkknnnnkknnnmmmnnknkknmmmmmmnnnbknnkkmnnnkknnnnnnkkkkkkkknnkkbnknnbbakmnmbjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjl`iiaknnnnknnmnkcakknkbkbkbbbbbbbbbbbbkbbbbbbbabbbbbbbbbbababbbkbabbbbkkkbbbbbabkkbkbkbbaabaaabbbbbbaabbbbbbbaabaaabbabikbbbbaabbknbkjjjjjjjjjjjjj",
|
||||
"iiiiiiiiiiiiiiiii`i````ii```ii`iiicicici`iicccccccccccclcclclcclclclllllcllllbllljcbcljllannnnbaknnmnncjnmnnnkkkkkknnkkknnnnnkkkkkkkknnnnknnknkknknnnkkkknmnnnnnmmnnnnnnnnnkkkkkkkkkkkkknnnkknnnnknnnkkknkknnb`knkkbdbnmnmbjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjlii`abbkkknnkkmk`kknkkbbbbbbkbbbbbbbkkbbbbbabbbbbbbbbabbbbbbbbbbbbakkbbbbkkbbbkbkbkbbabaababbaaababbabakbbabbbaabbbababcanbaabbabkknkjjjjjjjjjjjjj",
|
||||
"ciciiiiiiiiiii`i`i```i`i`icc``i`iiiiiiiiicciciccccclccccccclcccllllllclllllllijllllijllllaknkkabkkknmnclmnknknkbnknnnnkkkkkknnknkkkknknknnkknkkkkknnkkkkkknnkknfnmnnknnnnnkkkkknkkkkkkkbkknmnnnkkkknkkkkknkkkbabnkkkbknnfnmjijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjlii`akdbbbbkmmk`cabbbbbbbbbkkkbbbbbbbbbbbabbbbbbbbbbbbbabbbbbbbaabbbbabbbkbbbbbbbbbbaaabbbaaaabaaabbbkbbaaaaabbbaadababiabbbabaaabbkbljjjjjjjjjjjj",
|
||||
"iiiiiiiiiiiii`i````iiiiiiii`baiiiiiiiicccccccccccccccccclclclcclclllcccllllllllllllljlljlbknkbankabknncckknknnnmnnnnmnkkknknkkkkkkknnnkknkknkkknknnnnnnnkkkkkknmknnnkkknknnnnnnknkkkkkkknkknnnnnnnnnnnknkkkkkkbknkkkknnnmnajjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjiciakbkbkkkbbbaiakbkkkkbkkbkkkbbbbbbbbbbbbbbbbbbbbbbbbbababkbbbbbabbaabkbbbbaaabababbbbababbbabababbbkbbbbbbbbabbabaabc`aaaaaaaabkknijjjjjjjjjjjj",
|
||||
"iiiiiiii``i`ii`i``i`i`iii`cciiia`i`i`iiiiiccccccccclccccccclccccclcllilllllllllllllllllllkmkkkknbdabkklcknmmnnnnnkknnnkkkkkknknkkkknknnkkkkkkkkkkknnkknknkkkkkkmkkkkkkknnnnnnkkkknnkknnnnkkkknmnnnkkkbkkknkkbkbnmnnnkknmnnajjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjliiibbbbbbkka`caabkkbkkkkbkbbbkbbbbbbbbbbbbbbbbbbbabababbabbbbbbbbbababbbbaabbabbbbbbkbbaabbabbbbbbbbaabbbbaaaabaababaacc`iaaaa`aabkkijjjjjjjjjjjj",
|
||||
"lllllllllllllllllllljlllllllllllllllllljlljlljljlljljljljjljjljljjljjljjljjjljjjljjjljjjjknknmnnbbbbkklcnnnnnnkknkknnnkbkkknkkkknknknkknkkkkkkknnnmnnnmnnnnnknnnkkkkkknnmnnkkkkkkknknkmmnknkknnkkbkkkkkkkkbkkbbnnmmkkkkmmnkjljjjjjjljljjjjjjljljjjjjjjjjjjjjjjli``bbbbbbbaiiiaaakbkbbkbkbbbkbbabbbbbbbbbbbbkbbbbbbbbbbbbbbbbbbkbkbbbbbkbbababbbkbbbaaabbbbabbbbbbbabbbbaaaaaaababaaaaiccii`ii``aaab`jjjjjjjjjjjj",
|
||||
"ljljljljljljjljlljljlljljjljjjljjjjjjjljljlljljljjjjljljlljljljjljlllllljllljllljlljljjljbbknmmnkbbbbblinnnnnnnnknkknnnnkkkkknknknkkknkkkkkkknkknknnkknknnmnnnmnkkkkkknnnnkkkkknkkkknnnnknnknnnkkkknnnkkkbkkbbakmmkbbbbknnkjjjlljlljljllljljjljlllllllljlljljll`cibabaaa`cliaba`kkkkkbbkbbbbbkbbbbbbbbbbbbbbbbbbbababbbbbkkbbbbbkkbbbkbbbaababbbkbaabaabaabbbbbbababbkababbbbbbaaaaaaiciiicci```aad`ljllllllljlj",
|
||||
"ljlljlljljljljljlllljljljljllljllllhllllljljljjjlllljllllllljljljjljjljljlljjjljllllllljlddknmmnkbkbbbj`mmmnkknnnknkknnnkkkkkkkknkkkkkkkkkknkknknknnnnnnnnnnnnnnknkkbkknnkkknkkkkkbkknnknnkkkknkkknnkkbkkkbkkkaknnbbbbbbknnjljljljllllljllllljlljljljljlllllljl```bbaa`cjlcabbakknkkbkkkbbkbbkkbbbbbbbbbbbbbbbababbbbbbbbbbbbbbbbbkbkbbbbbaaabbabbbbbbaaaaabbbbbbbbaabaababbaaaaaaaab`c``icci`aaaa`iljjjljjljljl",
|
||||
"jlljlljlllhllhlhlljhlllljlljlljllhjljhjllhlllllhljljllhjllllhllhlhllhjllljhjlhjlhjjljlljlbkmmmmnmbkbkbj`knknnnnnnnknkknnkkkkkknkkkkkkkkkkkkknnknkkbnnnmnnnknkkkkknnnkknmmkkbkkkbkkkbknnnkkknkbkkkkkkkbkkknkknnbkmnkbbbabbadllllllhlllljhjhjljlljlllllllhjlllllc```bba`clliakkbabbbkbbbkkbkkbbbkbbbbbbbbbbbbbbbbbbbbbbbbbbabbbkkbbbbbbbabbbbbabbbbaaaabababaaabbababaaabaaaaaaaaababbaaiaa``i`a`add`cljhljlljljll",
|
||||
"lljhjhlhjllllllllhlljlljhjlljllllllhlllhjllhllljlllljljlljljlllllllllhlllhllljljlllllljljnknmnmmmnkkbal`kkknnnkkkkknkknmkkkkkkkkmnkkkkkkkknmnkknnkkbkkkkkkknknknknnnknnnnkkkkbkkkkkkkbkkkkkkknkbkkkkkknnnmnkknnknmnbbbkbbbbljljljjljljhjljlhlhllhjhlllllljljllli``kkaiclc`bbkkkbbbbkkkkbbbbkbbkkbbbbabbbkbbababbabbkkbabbbaabbabbabbbbbbbbkbabbbbbbaaabaabaaabbbaababaaababaabbbbbbabacbbaaa`i`abb`iljlllljhjljj",
|
||||
"llllljljlhllhlllhjllhjhllhlllllljhjljhjlllhjllhlhjhlhlhlhlhlhjhjlljhjljlljlllhlhllhllhllhkknmknmmnkkbbj`nnnnnnnnkkkknnkmnnmnkkkkkkkkkkkkkknnkkkkkkkkkkknkkkkkkkkknmnnnnnkkkkkkkkkkkkbkknkknnnkkknknknnnnknkknmnnnnnbbbbbdbdjlljhlhlhlhlllhlllllljljjhjllllllljhiiiba``ic`bnkbbkbbbkbkkbkbbbkbbbkkkkbbbbbababbbbabbbbbabbbbabbbbbbbbabaabbbkbbbkbbbaabaabaaabaaababbbbbbbabbbbbbbbbababiababba``add`iljhjllljhjhl",
|
||||
"llhllhjhjllljhjhjlhjllllllllhjhlhllhlllhjljhljljllljlljljljhlllhlhllhlhlhlhlljllljljlllllkbnmkknmmnkkalakknnkkkknknnkkkkmnnnnnnkkkbkkkknkknnkkkkkkkkkknkkkkkkkkknnmnnnnnkkbkbkbkbkbkkbkkkknnkkkkbkknnkkkknknknbkbkbbbabbbkbhllhllljljljhjjljlljhllhlllhlllhjhlli`i````a`abnnkbb`bkkkbbbbbkbbbbbbkkbbkbbbbabababbbbbkbbbaaabaaaabbaababbbbbkbbkbbaaaaaabaabaaabababbabaaaaabbbbaabaabbbibabnnk`iaaa``llljhjhllllj",
|
||||
"lllllhlllhllhlllhlllhlhlhjhjlllljlljlhjlllllllhlhlhlhlhlhlhlllllljlljljljlljlhjhjhjhllllckbbkkbknfmkbalannnnkkbknkkknkkknkbknnnkkkkkkknnnnnnnnkkkknnkkkkkkkkkkkkkknnnnnkbkkkkkkkkkkkkkknkkkkkbbkkkkkbkkbkkknnnbbbbbbabbbbbbllllllhlhlhljhlllllhjljljhjljhlllllhiiciiiaaabbnnmnk`kkkkbbbakbbbkbbbbbbbbkbbbbababbkbbkbbbbbbbbbbbabababbabaabbbbbbbaababaaaaabbababbabaaaaaaaaaaaaaabbbbbiabannnb``addahlllllljljll",
|
||||
"jhjhjllhlllhllhlllhllllllllhjhjlllllljhjhjhjhljlllllllhlllllhlhllhlhlhlhlllhljhlllllllllhbbbbbkbknkkb`jamnnnnkkkkkkknnnnnkkkkknkkkkkkkknnnnnnkkkknnnnkkkkkkkkkkkkkkkkkkkkkkkkkkkbkkkknnknnkbkkkkkbkbkkbkbkbnnnkkkkkbbbbkbbdljhjhjljljlllllhlllllhlhllhlhljhlllli`lli`aabbkmmnnmakkkkbbbbbbbbkkkkbbbbbkbbbbbbbbbbbbkbbbkabbkbbbbbababbbaabababaaaababaabaabaabbbbbbaabababaaaababaaabbaibbaknmka`abbbillllllllllj",
|
||||
"llljhjhjlllllllllhlllhlhlhllllhlhlhlhllhjllljlllljhjhljljllllllhllllhllllhlllhljlhllllllibdbbbbknkabkajbnnnnnnnkkbkknnnmkkkkkkknkkbkbkknnknmnnnnknnnnkkkkkkkkkkkkkkkkkkbkbkkbkbkbbkkkkknnkbkkkkbkkkkkkkkkkknnkbknkkkkbbbbkdlllllllhlhlhlhlljllllllllljljllllllliilc`abaabbknnnn`kkkkkkkkbabbbkkkbbbbbbbbbbababbbkbbkbkkbbbbbbbabababaabbabaaababaababaaaaaabababbbaaababaabbabaaaaaabb`abknkkka`abbbcljlljljllll",
|
||||
"lllhjllllljhjhllljhllllllllhllllllllllllhlhlhlhlhlllljhlhllllljllllljlhjhjllllhlhllhllllibdkbabknnbbkalknnnnmmnnnkkkkknnkbbkknnknkkkkkkkkknnnnnnknnnkkkkkkkkkkkkkkbkkkkkkkkkkkkkbkkbknnknkkkkkkbkkkkkkkbbkbbkkbkkkkkbkbbkkkllhjhllljljljlllhlllhllhlhlhlhlllllhiic`aabbbbbbnmmn`kkbkkkkbbbbbbbbbbbbbbbbbkbbabbbbbbkbbkbbbbkbkbbbbbbaabbabababababaaabababaaabbbbbabaaaaaaaaabaaabaaaab`annnkbka`abbdilllllhllllh",
|
||||
"lhlllhlhlhllllhjhlljljllllllllllhjhjhjhllllllllllllhlhllllhllhlhlhlhlhjllhjhlhllllllllll`ddbddaknmkkb`jnmnnknnkkkkkbkknnkknnkknnnkkkkkkknkknkbkknnnnnnnknnnkbkkkkkkkkkkkkkbkbkbkkkkknnnnnnkkbbbkkkkkkkkkkkbkbkbbkkbbbkkbkkbhllllhlllhlhlhllllllljljljlllljhjlll`ciakakbbkbbbknnakkkbkkkbbbkabbbkaabbbbkkbbbbbbbbbbbbbabbbkbbbkbabbbbababbabababbbbababaababbbbbbbbbbaaaababaaaabaaab`aibnmnkbnb`abbb`ljhlllllhll",
|
||||
"lllhllllhllhlhlllllhlhlhlhllllllllllllllllhlhllhjlljllllllllhllhlhlhlhhhlhhlhlhhhhhhhhhlodddddddknmkdglknknnnnkkkkkkkkkkkkkkknnmkkkknkkbnkkknkknmnnnnnnknkkkkknbkkkkkknnknkkkkkkkkbnnknnnknnnnkbkbkbbbkbkkkbbbbbbkkbbkkkbkkljhlljlhlllllljhjhlllhlhlhlhllhllhlh`i`ababkbbkmbknmakkkbbkbbbbbbbbbabbbbabbbkbbbbbbabbbbbbbbbbbkbbbbbbbbbaabbababbbbbbbabaabbaabbbabbbabbbbaaaaaaaaabaaaa``annnnkbb`bbad`llllhlljlll",
|
||||
"hlhllhlhllhlllhlhllllllllllllllhjhlllhjhlljhjhjhlhlhlhlhlhhhlhhhhhhhhhlhhllhhhhhhhhhhhhhhhhhhhhhghghhhhggghhghhhhhhgg`g`g`o`dddbddbbkkkkkkknnnkmnnmnnnkbnnnkbbbkbkbknkkbnknkkkknnkkkkkknnnnnmnkkkbkbkkkkbkkbkkbbbbkkkknnknklljhjhlljljhjllllljllljlllllhllhllllii`dbbbbbkbnnbkncbbbknkbabbkbbabbbbbbbbbbkbbbbabbbababbbbbbkkbkbbbbbbbabaababbbabababababbababbbbkbbbbbbaaaaaaabaaaabaa``mnmkkbb`bbdddllhllhlhlhl",
|
||||
"ljllllllhllhlhllhlhhlhhlhhhhhhhlhlhhhlhhlhhlhhhhhhhhhhhhhhhhgghhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhghghhghghhhhhhhhhhhhhhhhhhhhhhhchhhco`oddkknnmnnkknnnkknkkbbkkkkkkbkkkkkkkknmnnnnnnnnnkkbkbkbkbbkkbkkkkbbbkknkbknkkhlllhllhlhllhlhlhlhllhlhlllllllljhjlii`abbbbakbmnkkkibbbbkbbbbbkbbbabbbbbbakbkbbbkbabaabbabbkbbkbbkbbbbbbbbbbbaaaaabaaababaabbaabbbbbbbbbbbbabaaadaaaaaaabaa`knnkbdaadd`ddhlhlhlhlllh",
|
||||
"lhlhlhlhlhllhlhlhhlhhlhhhlhhlhhhhhhhhhhhhhhhhhhhhhhhgghhggggogoogggghhhhhhhhggggggghhhhhhhhhhhhhhhhhhlghhhhhhhhhgghghhhhlhhhhhghghhhhhhhhhhhhhhhhhhgho`oknknmnnmnkkkbkkkkkkkkkkkkknnnkknnnnnnnkbkbbbkbkbkkkbkkbbkkknnkkkkkblllhllllhlllhlllllllhllllhlhlhjhlllh`i`abbabbbknnnkn`bbbabbbbknkkkbkkbbbbbbbkbbbkkbdbbbbbbbbbbbbkbbkbbabbbbbbbbbaabaabbaabababbbbbbdabbbbbbddadddddddddddddd`kmkdd`higio`ghhhhhhhhhhh",
|
||||
"lhlllhllhlhlhlhhhhhhhhhhhhhhhhhhhghhhhhhhhhhhhhhgggghgggggggggggggghghhhhhhhhhhhhhhhhlljhlhhhhhhhhhhhhhhhhhhgggghhhhghggghghhhhhgghhhhhhhgghhhhghhhlhlhhhhhh`oddnnnnkkkkbkkkkkkkkkbkkknnnnnnnnkbkkkbbkkkbkbkbkbbbbbkkkkbkdblhlllllljhlljhlllllllllllljllllljhlli``aaabbanbnnknncaabbbbbbbbbbabbbbbkkbkbbbbbkkdbbdabbbbabbbbbbbkbabbbbbbbkkbbbbbababbbababaaabdbbkbkkbkdddd`oig`og`ghhhhhhhghhhhghhhhhhhhghhhgghh",
|
||||
"hhhhhhhhhhhhhhhhghgggggggggggggggggggghghghggggghghghggggogggggogggggghhhhhhggoggggghhghhghggggghhhhhhhhhghghhhhgggggghghhhhgggggggggggghhhhhgghhhhghhhhllhhhhhglhgiodddnknnnnnkkkkkknnnkknnkkbbbbbkkbbkbkkkkkkbbbbbbbbdbbdlljhjhjhlljhllllllllllllllhlhjlllljli`i`baabbbbnnkkblbkkkbbbbkbbbbbbbbbbkbbbbbbbkbdabbdddabbbbbbbabbbbbbbabbabbbkbabbbbabbbbbbbdddddkddd`oihhlhhhhghgggghhhhhhhhhghhhhhhhghghghghgggg",
|
||||
"hhhhhhhhhhhhhhghggggghghgghghghgggggggghgggggggggghhhhhhggggggggggggggggggggghhhghghhhhhhhhhhhhhgggghhhhghgggghghggggggggggggggggggghhhhhhghghhhhhhhgghhhhhhhhhhhhlhlhhhhhh`ddkkddbbkkkkkknkkkbkkkkbkkkbbbkbbkknnnnnkbbbkkkllhlllhllhlllhlhlhlhllhllhlllhlhlhlhiii`abbbbakkbba`ibbbbkbbkbbbababbkbbabbkkbbkbdbdbbabbbbbkkbkbbbkbbbbbbbbbabbkkbbbkbkbbdbbddd``o`ohhhhhhhhhhhhhhhlhhhhghggghhhhgghhhggggggggghgggg",
|
||||
"gggggggogggggggggggggggggggggggggggghgggggggggggghghgghhhggggghgggggghhhhhggghhghhhhhhhhhhhhhgggghgggggghhhhhghghhhhghhhghghhhhhhhhhhhhhhhhhhhhghhhhhhhhhhhhhhhlhhghhhhhhhhhhhhhhhcg`bknnnnnnnnnnnknnnbbbbbbabkknnnnbbbkmnklllllllllllhllljllljlllllljhjllljlll`i`abababkaa`ii````aababbkkkkkkknnkbbbbbbbkbbabbnbkmnnmknknkkbkkkbbbbbkkkkbbkkddkkddd`gcglhhhhhhhhhhhhhhhhghghhhghhhgggggghghhhhhghhhgggghhhhhhhh",
|
||||
"ggoggogogogoggggoggogoggggggghggggggghhgggggggggggggghghgggggggggggghghhhhhhhghhgghghhhhghgggggggggggghghgggghghhhhhhhhhhhhhhhghghhhhhghhhhhhhhlhhhhhhhhhhhhhhhhlhhhhhhlhhhhhhhlhlhhh`ddknnnknnnkknbnnnkabbbbbknnmnnnnnknnnhlllhjhjhjljlllhlllhllllllllllllhljhi`idkkbbabaiciiiccciabbabbknbbkkkkkbabbbbbbbbaabnnkkkmkknnnnkbbknkbdkkkknkkddo`ooggghhhghhhhhggggghghgghhhhhhhgghgggggggggghgggghggogghggghhhhggg",
|
||||
"ggogoggoggggggoggggggggggggghggghgggggggggggggggghhgghgggggggggghhhhhhhhhhhhhhhhhhhlhhhhhhhhhhhhhhhhhhhhhghhghghhhhhhhhghghhhghgggghhhhhhhhhhhhhhhhhhgghhhhhhhhhhhhhhhhhhhhhhhhhhhhlhhhhhgddknnkkknknnkbbkkbbbkmnnnnnnnnnnncjhjlllllhlhlllljllljhjllllllllljllli`ibkkbbba`i`aaiccc`aka``abbkbkkkknnbkbaaabkbabbnnkbkknnnknnnkdddmkddo`gghhhhhhhchghhghhhghggggghgghhhhggghhhhhhhhhhggggghgggogogggghhhhhhhghgggg",
|
||||
"hghghghghghhhhhhhghhhggghhghgggggogggggggggogggghghhgghgggggggggggghhhhhhhhhhghhhhhghhhhhhhhhhhhhhhhhhhhhhhhhhhghhhhhghhhhhhhhggghhhhhhhhhhhhhhhhghghhhhhghhhhhhhhhhghghghhhhhhhhhhhhhhlhhhhhgddbkmmmnkakkkbbbkbbbbbbnnmmnnhlllhjhljlljhjhlhlllhllhjhlllllhlhjhi`idbnkkkb```aa`ii``i```i`abbbbknbnkkbaaabbbbbabkmnkbbnnnmnkddo`oghhhhhgghhghhhhgghggghghgggggggggggghghgggghhhhhgogogggggghggggggghgghhghhhhhhhg",
|
||||
"hhhghhhhhhhhhhhhhhhhghhghgggggggggggoggogoggggggghgghhgghggggggggghhhhhhhhhhghhghhhhhhhhhhhhhhghhhhghggghhhhhhhhhhgggggghhhhhgghghghhghhhhhhhhhhgghhhghhhhhhhhhhggggggggggghhhhhhhhhlhhhhlhhhhhhhhgdddbbbbbabkkkkbbaabkknmnllhllhllhlhllhllllhllllllllhlhllllhli`iabkknkbaaaa`aa```aa`icl`akkkkkkkkka`abaabbbbbbkndddndkd`oghhhhhhhhhhhhhghghhhghggggggghgggggoggggooggghhgogggghghhhgggggggggghhghghgghgghghggh",
|
||||
"ggghghhhhhhhlhhhhgggggghgggghghghggggggoggggggggggghhghhhgggggghhhhhhhhhhghhhhghghhhhhhlllhhhhhhhhhhhhhhhhhhhhhhgghggggggghgggggggggggggggghgggghhhhggghghghhhhhgghghhhhhgghghhhhlhhhhhlhhhhlhhhlhlhhhhi`dkdddbbknkkkkkknnmlllhlllhlllhllhlhllhlhlhlhllllhlhlll````bbbbbabbaaabka`akkbicliannkkkbkkba`abbbdkkkbdkkdo`ghhhhhhhhhggghghhggggghggggghhgghghhggggoggghhhhghhhhhhhghgghhhhggohghhhhhgggogogggggggghgh",
|
||||
"hghghghhhhhhhhhhhhgggggggghghghggggghggggggggggggggggggghhhhghghhhhhhhhgghggggggggghhhhhhhhhhhhhhhhhhhhhhhhhhhhhghggggggghghhhghggghghghhhhhhhhhhhhhhhhhhghhhhhhlhhhgggghhhhhhhhhhhhhhhhhhhhhhhlhhlhllhhhhh`dkkdkbbbbbbbkknlhlchlhllhllhlllllhlllllhllhlhlllhlhi`i`bbbbbbbbbabbbbaakkaiiliaknkkbkbbaddbddddddddohhhhhhhhhhhhhhhhggggggggggghhhhhggghghhhhgggoggggggggggghgggggggghghhhhhhhhhghggggggggggggghhhhh",
|
||||
"gggggghghhhhhhhhggggggghhhghhhghhhgggggggggggggggogggggghgghgggggggggghhhhhhggggggggghhhhhhhhhhhgggghggghhhhhhhghgggggghhhhhhghghhhhhhhhhhhhhhhghhhghhhhhhhhhhhhhhhlhhhhgghgghhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhgdnmnnnkbbbkblllllhlchlchlchlhllhlhchlchllchcllcliiiabakbbkbaaaaabaaakaaicciabknbbkbaddbddo`gggghhhhhhhhggggggghhgggggoggggggggogggggghghhhhghgggghhhhghhhhhggggggggggggggggggggggogoogggggggggggg",
|
||||
"ghhhhhhhhhhhhghggggggghhhhhhhhhhgggggggggggggoggggggggghggggghghhhhhhhhhhhggghggghgghghghhhhhhhhhhhhhhhhhhhhhghggggggggghghghhghggghhhhllllhhhhgghgggghgghghhhhhhlhhhhhhhgghhhhhhhhhhhhhhhhhhhhhhhhhlhhhhlhlhhlhh`dknmkkbbdlllhlchllhllchllchlchllclllchlllhchlgciabbkbbbbabbbabbabbaailcc`abkkbd`iiihhhhhhhhgghghghgggggggggghhghggggoggogggggggghhhhghgggggggggggghggggghhgggggghggggghggggogogogggggggggghhhh",
|
||||
"hhhhhhggggggghghhhhhhhhhhhhhhhhhhhhhhhhhhggggggohggggggggghhhhhhhhhhhhggggggggghghghghhhhhhhhhhhlhlhlhhhhhhgggggggggghghghhghhhhhhhhhhhlhhhhhhhggghhhhhhhhhhghghhhhhhhgggghhhhhhhhhhhhhhhhhhhhlllhhhhhhhhhhhlhhhllhlgakmkdglhlllllclcclllchllchlchlhchllhcllllccciabbabbbbbbababbaaaiiiiii`ddd`dgghhghhggghhhghhgggggggggggggggggggggogggggghhhhhhgggggggghhhhhhgghgggggggggggoggggghghggggggggggggggggghhghgggg",
|
||||
"hhgggggggggghhhhhhhhhhlhhhhhhhhhhlhhhhhhgghghhhhhhhhhgggghghhhhhhhhhhhgggggggghgggggggggggggghhhhhhhhhhhhgggggggggggggggghhhhhhhhhghhhhhhlhhhhhhgghhhhjljllhhgggghghhhhghghgghhhhhhlhhhhhhhhhhhhlhlhhhhhhhhhhhhhhhhhhhhg`gchllhlhlljjjjljjljljllllllllllllhllhllhidbbaabaabbkkbbbbaa````igioihhhhghghhhghhgggggggggghhhhgggggggghhhgghgggggghghhgghhhhggggggogggggggggggghggggggoggggggoggghhhhhhhhhhhhhgggggggg",
|
||||
"ggggggogggghghhhhhhhhhhhhhhhhhhhhhhhhggghghhhghhhhhhghghgghghhhhhhhhhgggggggggghgggggggggggghghhhhhhhhhgggggggggggghgggghhhghhhhhghghhhhhhhhhhhhhgghhlhjhjhhhhgghhhhhhhhhhghghghhhhhhhhhhhhhlllhhhhhhhhhhhhhhhhhhhhhhjhlhlhlhlhjjjjjjjjjjjjjjjjjjjjjjjjjjljllllhiiidbababbabbbknnkkdido`hhhhhhhhhhghgghghggghhgghgggggggggoggggoggggogggggoggggghgggggghggggggghgggggghhghggggogogghhggggggggggghhhggggggghggggg",
|
||||
"ogogoggggggggggghghggggghhhghggghghghggggghghhhghghghhgggggggggghhhhghgggggggggggggggggggghgggggggghggggggggggggggghghhhhghhhhhhggghhhhhhhhhhhhhhgghhhhhhlhjhhhhhhhhghhhhhhhhghhhhhhhhhhhhhhhhhlhhhhhhhhhhhhlhhhhhhhjhhhlhlhlhllljjjjjjjjjjjjjjjjjjjjjjjjjjjjjjc`iibbbbbaaakbdkkkddighhhhhhhhhghgggggggghgghhhhghgggggggggggggggggogggggoggggggggghggggggggggggggogogghghhgggggggghhhhhhhhgghghhghghghhhgggggogo",
|
||||
"ggogogogggggghhhhhhhhhhhhhghgghhghhhghhhgggggghhghgggghggggghhhhhhhghhhhgggggggggggggggghhghgggggghghghhghhhhgggggghghhghhhhhhggghghhhhhhhhhhhhhgghghhljhjhhhhhhhhghghgghhhhhhhghhhhhhhhlhhhhhhhhhhhhhghhhhhhhhhhhhhhhllhhhhlhlllljjjjjjjjjjjjjjjjjjjjjjjjjjjjlli``bababbddddddogggghhhhhghghgghgggggggghggghggggggggggoggoggggggggggggggggghgggggggggggggggggogggggghghghgggggogghhhhhhggggggggggggogogggoggogo",
|
||||
"oogogogogogghgghhhhhhhhhhhhhhhhhhhhhhhgggggggggghghhhghghghhhhhhhhghgghghhhghhhhhhhhhhhhhghggggghgghghgghgghghhhgghghhghghhhhhhghhhhhhhhhhhhhhhhghghhhhhlhhhhhhhghhhhghhhhhhhhhhhhhhhhhhlhhlhhhhhhhhgghhhghhhhhhhhhhhhhhlhhhhhhhhlhlljjjjjjjjjjjjjjjjjjjjjjjjjjjiiibabbdbd`oghhhhghhghhohhhgggggghghgggghgggggggggggggogggggggogoggggggggogghhggggogoogggggogggggogggggggggggggggggghhgggggggggggggggggggogoogoo",
|
||||
"ggogoggggggggghhhhhhhhhhhhhhhhhhhhgggggghhghhhhhhhhhhhhhhhhhhhhhgghggggggghhghhhhhhghggggggghggghghghghgghhhhhghhhghhghghggggggghhhhhhhhhghgggggghhhhhhhhhhhhhghhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhghhhhhghhhlhhhhhlhhhhhlhlhlhhhlhjljjjjjjjjjjjjjjjjjjjjjjjjl```kbbd`ggihhhhgggghhghhghhghhhhggggggghgggggghhghggggggoogggggggggggggggoggggggggghhggogggggoggghhhhhhhgggggghgghghgggggggogogggggggggggggggogg",
|
||||
"ggggggogggggghhhhhhhhlllhlhhhhhhgghhhhhhghhhhhhhhhhhhhhhhhhhhhhhhghghghghhhhhhhhhhhhhghggghghghghhhhhhghhhhhhhhhhhhhhhhgghhggghhghghhhhgghgggggggghhhhhhhhhhhghghhhhhhhhhhhhhhhhllhhhhhhhhhhhhhhhhhhhhgghhhhhhhhhhhhhhhlhhhhlhhhhhhhlhlhjjjjjjjjjjjjjjjjjjjjjjlhi``ddihhhhhhhghhhghhhghhghhhhhhggggggggggggghhghgghgggggggogghhhghhgooogggogggggggggggggogoggggggogggggoggghghhhghhggogggghhhhghgggggggggggogggg",
|
||||
"gggggggghhhhhhhhhlhhhhhhhhhhhhghghhghghhhghghhhhhhhhhhhhhhhhhhgghgggghghhghhhhhghgggggggghgggggggggggghhhhhhhhhhhhhhhghhhggggggggggghghghghggggghhhhhhlhhhhhhhghhhhhhhhhhhhghghhhhhhhhhhhhghhhhghhhhhhhhhhhhhhhhllhhhhhhhhhhlhhhhhhhlhlhlhjjjjjjjjjjjjjjjjjjhlhcgggghghhhhhgghghgghgghgggggghhhhgggggghggggghhhgghhgggggogoggggghggghhgoogogoogggooogogogoggogogogogoggghhgggghhhhhghhgoghghhghhhhhhhgggoogggggh",
|
||||
"ghghhhhhhhhhlhhhhhhhhhhhghhhhghhghghhghghhghggghhhhhhhhhhhhhghhhgghghghggghghghghghhghhghggghghgggggggghhhhhlhlhhhhhhhghhhhghggggggghghghgghgggggghhhhhhhhhghhhhhhhhhghhgghgggghhhhhhhhhghhhhhghhhhhhhhhhhhhhhhhhhllhhhhhhhhhhhhhhhhhhhlhlllljjjjjjjjjjjjljlhllhhghhghghhghgggghgghggggghhhhhhhhhghggggghgggggggghhggggogggogogggggggggggggggoggogggggggggggogoggghggggggghggggogggggggggoggggggoggggggggggggggg",
|
||||
"hhhhhhhlhhhhhhhhhhhhhhhhhhghghghghghggggggggggggghhhhhhhhghghggggghghhghhhhhhhhghggghgghghhggggggggggggghhhhhhhhhhhhhhhhghgggghghgghghhghghgghggghhhhhhhhgggghghghghgghghghghhhhhhhhhlhhhhhghhghhhhhhhhhhhhhhlhhhhhhhhhhhhhhhhhlhhhhhlhhhlhhhhjljjjjjjllhhhhhhhhhhhggggogghhghhhggggggggggggghhhhhgghggghgggggggghhhhgggggggogoggggggggggggogogoggggggggggggggggggggggogggggggggogggggggoggggggghggghggggggggggg",
|
||||
"hhhhhhhhhhhhhhhhhhhhhhhhhghhggggggggggggggggoggggggghghhghghghgghgghghhhhhhhhhhhghghgggggghghhhghggggghghhhhhhhhhhhhhhghhghhhghghgggghhghghghhhhhhghhhhghghgggggghggghghhhhhhhhhhhhhhhhhhhgggghhhhhhhhllhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhlhhlhlhhhlljjhjhlhlhhhhhhggggggggggggggggggggooggggggggggggggghghggggoggghgghhggggggggogogggooogggggoggogogogoggghghghhggggggggggooghhhhhgogggooggggogggghhhggggggghghghg",
|
||||
"hhhhhhhghhhhhhhhhhhhhhhhghggggggggghhhghgggggggggghhghhhgghghghghghghhhhhhhhhgggggggghhghghghgghgggggggggggghhhhhhhhhhhhhhhhhhhggggghhhhhhhhghhhhhhhhhhgghghhhhghgghgghghghghhhhhhlhlhlhhhhhhhghhhhhhhhhhhhhhhhlhhhhhhghghhhhhhhhhhhhhlhhlhlhhlhhlhlhlhhhhhghhggggogggogggggghggggggghhggggggghgggggggggghggogggghghhggogggoggggoogggggggoggggggoggggggggggggggggggggggogggghhhghgggggggogoggggggggggggoggghhhhh",
|
||||
"hhhhhhhhhhhhhhhhhhhhhhhggggggggggghghhhghhgggggggggghhghhhhghghggghhhhhhhhhhhghgggggggggghghghgggggogggggghhhghggghgghghhhhhhhhghgghghhhhhhhghghhhhhhghggghghhhhhhghghhghhghhhhhhhhlhjhlhhhhhhghhhhhhhhhhhhhhhhhhhhhhghhghghhhhhhhhhhhhlhlhhhhhhhhhlhhhgghggggggggghggghggghghhggoggghhhggggggggggghhgggghggggggghhhhgggogoggogoggggggggggghghgggggoggggogoogggggogggoggggghggggggoogogggggggghghghggogogogoggog",
|
||||
"hhhhhhhhhhhhhggggggggggggggggghghghhhhhhgggggogggghgghhhhhhggggghghhhhhhhhhhghgggggggggghghhghgggogogggghhhhhggghggghghghhhhgggggghhhhhhhhhghggghhhhhhhghgghhhhhhhhhhhhhhhhhghhhhhhhhhhhhhhhhgghhghhhhhhghhhhhhhhhhhhgghhhhghhhlhhhhhhhhhhhhhhhhllhhlhhhhggggggoghghggoggoggggggggggghhgggggghggghghgggggggggggghhhhhgoogoggoggggooggghggggggggghggogoggggggggggggoggggggghghhhhggggggoggghgggggggggooooogogoggg",
|
||||
"hghhhhhhhhhhggggggggggghhhhhhhhhhhhhhhhgghgggggggghghhhhhghghghhhhhhhhhhhhhggggggggggghhhhghhggggggggghghghgghhghghgggggghggghghgghhhhhhhhhhgggggghhhhhhhhhhgghghhhhhhhhhhhhhhhhlhhhhhhhhhhhhggghhhhhhhgghghhhhhhghghhhghghhhhhhhhhhhhhhhlhlhlhhhhlhhhhhgggggggggghgggggoggggggggggghhhggghggggggggggggggoogggghhhhgoggggggggggggogghhhggggogghhghggghggghgggggggggogooogghhhghhhhhggggghhgggogogogoogogoogogogg",
|
||||
"ghghhhhhgggggggghhhhhhhhhhhhhhhhhhhhhhgghgggghghghghghgggggghhhhhhhhhhhhhhggggggggghghghggggghghgghhhhhhhhhhggggggggggggggghgghggghghhhhhhhgghghhhhghhhhhhhhhhhhhhhghhhhhhhhhhllhlhhhhhhhhhhhhghghhgggghhhhhhhhhhhhghghhghhhghhhhhhhhhhlhhhlhlhhlhhhhhhlghhggoggggggogghggogggggggghhghghggghgghggoggogggggggoogggggggggogoggogogggogghhggogghhhhhggggghhggggoooooooogggoggggghhghhhgghggggggogoghgghgggggoggggg",
|
||||
"ghghggggggggggggghghhhhhhhhhlhhhhhhhhhhhgghggghggggggggghghhghghhhhhhhghhggggggggggggggggggggggghhghghhhhhhghgghghggggogggggggggggghhhhhhggggghghhhhghhhhhhhhhhhggghhhhhlhlhlhhlhhhhhhhhhhhhhghghghhhghhgghhhhlhlhhhghghhhghhhhhhhhhhhhhhhhlhhhhhhhlhhhhhlhhhggoggggggooggggoggggggghhhhggggghgggggggggggggogogghgggggghhggggggghhgggggogoggggggggggggggggggggogogoggooggggggggggggggogoggggoggggggggghggggogggg",
|
||||
"hgggggghghggghghgghghhhhhhhhhhlhhhhhhhhghghhhghgggggghhhghghghhhhhhghghgghghhgggoogogogggghghhgghgghghghghghgghgggggggggggghggggggggghhggggghghhhhghghggghghhhhhhhghhhhhhlhlhlhhhhhhghhhlhhhhhgghhhhhhgghhhhhhhhhhhhhhhghghhhhhhhhhhhghhhhhhhhhhlhhhhhhhlhhhhhhhgggggghhggooggggggoggggggggghghhgooggggogogggggggggghhhhhhgggoghhhggogooggggggggggggogghhggogogoggoggggogggggggggggogogggooogoggoggggggggoggoggg",
|
||||
"ghghghhghhhhhghgggggghhhhhhhlhhhlhhhhhghghghhghggggggghhgggghgggggghhhhhhhhggggggggoggggghghhhhghgggggggggggggggggggggoggghghghgggggggghggggggggghhhhghghgghhhhhhhghhlhhlhhlhlhhhhhghhhlhllhhhhhhhhhhhhhhhhhhhhhhhhhhhgggghhhhhhhhlhhhhhhhlhlhhhlhhhhhhhhlhhhhhhhhggggggogoggggggggggggggghggghgggoogogoggoogogggggghhhhhhgggggggggggogggggggooggogoggghgggoogoogoggogogoggghgggggggggggghggggggggggggggoggogogg",
|
||||
"hhhhhhhhhghghggggggghhhhhhhhhhhhhhhhhhgggggggggggggghgggghgggghghghhhhhhhhgggggggoggggghhhhhhhhhghgghghhggggggggggggggggggggggggggghghghgghghgghhhhghghgghhhhhhhhggghhlhlhlhlhlhhhghhhhhlhlhhhhhhhhhhhhhhhhhhhhhhhhhhgggghhhhhhhlhhlhlhhlhhlhhhhhhhllhhhhlhhhhhhhhggggghggghggghgghhgggghhggggghggggoggggoggggggggogggghhhgghggggghgggggghgggggggggggggggooggogggggogogoggggghggggoooogoggggggggggggggggggoggggg",
|
||||
"hhhhhhhhghggggggggghghhhhhhhhhhhhhhhhggggggggggggggggggggggghghghhhhhhhggggggggoggggghhhhhhhhhhhhghgghggggggghghggggogggogggggghgghggghghghgggggggghghhhhhhhlllhhhghhhhhlhhlhlhhhhhghhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhghhhhhgghhjljhlhhlhlhhlhhhhhhlhhhhlhjhhlhhjhhhhhggghhhoghhgggggghhggggogggghhggggggggoggggggggggggggoggghgggggghhggogggghgggggogggggoggggghghghhhgggggggggggggoggggggggggggogggoggggggogogggg",
|
||||
"hhhhggggggggggggggghhhhhhhhhhhhhhhhggggggggggggghhhghghghghgghgghhhghgggghgggggggggghhhhhhhhhhhhghghggghgghhhhhghgggggggggggghggghgghgghhhgghgghghhgghghhhlllhlhhhhhhhhhhhhhhhhhhhgghhhhhhhhhhhhlllhlhhhhhhhhhghhhhhhhhhhhhhhhlhjhlhhlhhhhhhhhhlhlhhhhllhhlhjhllhhlhlhggggogooggggggggogggggoggggggooggogggggggggggggggggggghggggggggogoggggggooogogggggggggghghhhhhhhhhhhhggggggggoggghhhhhggggogggghggggoooogg",
|
||||
"gggggghggggggggggghgghhhhhhhhhhghgghghggggggggghggggghghggghggghghggghghhhghgggghghhghhhhhhhhhhghhhghggggggghhghghgggggogoggggghgghghghhghghgghghhhghghhhhlhhlhlhhhhhhhhhhhhhhhhhhhghhhhhhhgghhhhlhjhlhlhhhhhhhhhhhhhhhhhhhhhhhhlljlhhhlhhhhhhhhhhlhjhhhjhlhhhgjhhhhhhhhoggoogggoogghggghgggggggggoggggogoggoogggggghgghggghggggggogogogoooggghggoggggggggghhhhhhhhhhhhhhhhggghgggogoggghhhhhggogoghhhhhhgggggog"
|
||||
};
|
||||
55
outdated/sys/amiga/ifchange
Normal file
55
outdated/sys/amiga/ifchange
Normal file
@@ -0,0 +1,55 @@
|
||||
.KEY oper/a,tmp/a,real/a,f1,f2,f3,f4,f5
|
||||
|
||||
. ; miscellaneous script functions for the Amiga
|
||||
. ; Copyright (c) Kenneth Lorber, Bethesda, Maryland, 1992, 1993, 1996.
|
||||
. ; NetHack may be freely redistributed. See license for details.
|
||||
|
||||
FAILAT 6
|
||||
IF <oper> EQ "MOVE"
|
||||
IF EXISTS <real>
|
||||
diff >T:mic -c <tmp> <real>
|
||||
search from T:mic SEARCH "---" QUIET
|
||||
IF WARN
|
||||
echo "MOVE: no change"
|
||||
delete <tmp>
|
||||
ELSE
|
||||
echo "MOVE: copy"
|
||||
copy <tmp> <real> clone
|
||||
delete <tmp>
|
||||
ENDIF
|
||||
ELSE
|
||||
echo "MOVE: copy2"
|
||||
copy <tmp> <real> clone
|
||||
delete <tmp>
|
||||
ENDIF
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
IF <oper> EQ "TOUCH"
|
||||
IF EXISTS <real>
|
||||
diff >T:mic -c <tmp> <real>
|
||||
search from T:mic SEARCH "---" QUIET
|
||||
IF NOT WARN
|
||||
echo "TOUCH: touch"
|
||||
IF NOT <f1$@> EQ "@"
|
||||
setdate <f1>
|
||||
ENDIF
|
||||
IF NOT <f2$@> EQ "@"
|
||||
setdate <f2>
|
||||
ENDIF
|
||||
IF NOT <f3$@> EQ "@"
|
||||
setdate <f3>
|
||||
ENDIF
|
||||
IF NOT <f4$@> EQ "@"
|
||||
setdate <f4>
|
||||
ENDIF
|
||||
IF NOT <f5$@> EQ "@"
|
||||
setdate <f5>
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
echo "ifchange: '<oper>' not recognized"
|
||||
quit 10
|
||||
13
outdated/sys/amiga/mkdmake
Normal file
13
outdated/sys/amiga/mkdmake
Normal file
@@ -0,0 +1,13 @@
|
||||
GE/$@/%(left)/
|
||||
GE/$</%(right)/
|
||||
GE/\#/#/
|
||||
39(F B/#SFD_INSTEAD / ; E/#SFD_INSTEAD // ; N ; D )
|
||||
REWIND
|
||||
CG
|
||||
9(F P/#SFD_BEGIN/; D ; GE /##// ; F P/#SFD_ELSE/ ; CG ; DF P/#SFD_END/ ; D )
|
||||
Q
|
||||
|
||||
Copyright (c) Andrew Church, Olney, Maryland, 1994,1996.
|
||||
NetHack may be freely redistributed. See license for details.
|
||||
|
||||
See IV.B.4 of Install.ami for instructions on using this file.
|
||||
446
outdated/sys/amiga/txt2iff.c
Normal file
446
outdated/sys/amiga/txt2iff.c
Normal file
@@ -0,0 +1,446 @@
|
||||
/* NetHack 3.6 txt2iff.c $NHDT-Date: 1432512795 2015/05/25 00:13:15 $ $NHDT-Branch: master $:$NHDT-Revision: 1.7 $ */
|
||||
/* Copyright (c) 1995 by Gregg Wonderly, Naperville, Illinois */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "config.h"
|
||||
#include "tile.h"
|
||||
|
||||
#include <dos/dos.h>
|
||||
#include <dos/dos.h>
|
||||
#include <dos/dosextens.h>
|
||||
#include <graphics/gfx.h>
|
||||
#include <graphics/gfxbase.h>
|
||||
#include <graphics/view.h>
|
||||
#include <libraries/iffparse.h>
|
||||
#include <libraries/dos.h>
|
||||
#include <clib/dos_protos.h>
|
||||
#include <clib/iffparse_protos.h>
|
||||
#ifndef _DCC
|
||||
#include <proto/exec.h>
|
||||
#include <proto/iffparse.h>
|
||||
#include <proto/dos.h>
|
||||
#endif
|
||||
|
||||
void panic(const char *);
|
||||
void map_colors(void);
|
||||
int BestMatch(int, int, int);
|
||||
|
||||
extern pixval ColorMap[3][MAXCOLORMAPSIZE];
|
||||
extern int colorsinmap;
|
||||
|
||||
/*
|
||||
* WARNING:
|
||||
* This program carries forth the assumption that the colormaps in all
|
||||
* of the .txt files are the same. This is a bug.
|
||||
*/
|
||||
|
||||
struct {
|
||||
int Height;
|
||||
int Width;
|
||||
} IFFScreen;
|
||||
|
||||
/*
|
||||
* We are using a hybrid form of our own design which we call a BMAP (for
|
||||
* bitmap) form. It is an ILBM with the bitmaps already deinterleaved,
|
||||
* completely uncompressed.
|
||||
* This speeds the loading of the images from the games point of view because
|
||||
* it
|
||||
* does not have to deinterleave and uncompress them.
|
||||
*/
|
||||
#define ID_BMAP MAKE_ID('B', 'M', 'A', 'P') /* instead of ILBM */
|
||||
#define ID_BMHD MAKE_ID('B', 'M', 'H', 'D') /* Same as ILBM */
|
||||
#define ID_CAMG MAKE_ID('C', 'A', 'M', 'G') /* Same as ILBM */
|
||||
#define ID_CMAP MAKE_ID('C', 'M', 'A', 'P') /* Same as ILBM */
|
||||
#define ID_PDAT \
|
||||
MAKE_ID('P', 'D', 'A', 'T') /* Extra data describing plane \
|
||||
* size due to graphics.library \
|
||||
* rounding requirements. \
|
||||
*/
|
||||
#define ID_PLNE MAKE_ID('P', 'L', 'N', 'E') /* The planes of the image */
|
||||
|
||||
#ifndef _DCC
|
||||
extern
|
||||
#endif
|
||||
struct Library *IFFParseBase;
|
||||
|
||||
int nplanes;
|
||||
|
||||
/* BMHD from IFF documentation */
|
||||
typedef struct {
|
||||
UWORD w, h;
|
||||
WORD x, y;
|
||||
UBYTE nPlanes;
|
||||
UBYTE masking;
|
||||
UBYTE compression;
|
||||
UBYTE reserved1;
|
||||
UWORD transparentColor;
|
||||
UBYTE xAspect, yAspect;
|
||||
WORD pageWidth, pageHeight;
|
||||
} BitMapHeader;
|
||||
|
||||
typedef struct {
|
||||
UBYTE r, g, b;
|
||||
} AmiColorMap;
|
||||
|
||||
pixel pixels[TILE_Y][TILE_X];
|
||||
AmiColorMap *cmap;
|
||||
|
||||
int findcolor(register pixel *pix);
|
||||
void packwritebody(pixel (*tile)[TILE_X], char **planes, int tileno);
|
||||
|
||||
void
|
||||
error(char *str)
|
||||
{
|
||||
fprintf(stderr, "ERROR: %s\n", str);
|
||||
}
|
||||
|
||||
/*
|
||||
* This array maps the image colors to the amiga's first 16 colors. The
|
||||
* colors
|
||||
* are reordered to help with maintaining dripen settings.
|
||||
*/
|
||||
int colrmap[] = { 0, 6, 9, 15, 4, 10, 2, 3, 5, 11, 7, 13, 8, 1, 14, 12 };
|
||||
|
||||
/* How many tiles fit across and down. */
|
||||
|
||||
#define COLS 20
|
||||
#define ROWS ((tiles + COLS - 1) / COLS)
|
||||
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int colors;
|
||||
struct {
|
||||
long nplanes;
|
||||
long pbytes;
|
||||
long across;
|
||||
long down;
|
||||
long npics;
|
||||
long xsize;
|
||||
long ysize;
|
||||
} pdat;
|
||||
long pbytes; /* Bytes of data in a plane */
|
||||
int i, cnt;
|
||||
BitMapHeader bmhd;
|
||||
struct IFFHandle *iff;
|
||||
long camg = HIRES | LACE;
|
||||
int tiles = 0;
|
||||
char **planes;
|
||||
|
||||
if (argc != 3) {
|
||||
fprintf(stderr, "Usage: %s source destination\n", argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
#if defined(_DCC) || defined(__GNUC__)
|
||||
IFFParseBase = OpenLibrary("iffparse.library", 0);
|
||||
if (!IFFParseBase) {
|
||||
error("unable to open iffparse.library");
|
||||
exit(1);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* First, count the files in the file */
|
||||
if (fopen_text_file(argv[1], "r") != TRUE) {
|
||||
perror(argv[1]);
|
||||
return (1);
|
||||
}
|
||||
|
||||
nplanes = 0;
|
||||
i = colorsinmap - 1; /*IFFScreen.Colors - 1; */
|
||||
while (i != 0) {
|
||||
nplanes++;
|
||||
i >>= 1;
|
||||
}
|
||||
|
||||
planes = malloc(nplanes * sizeof(char *));
|
||||
if (planes == 0) {
|
||||
error("can not allocate planes pointer");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
while (read_text_tile(pixels) == TRUE)
|
||||
++tiles;
|
||||
fclose_text_file();
|
||||
|
||||
IFFScreen.Width = COLS * TILE_X;
|
||||
IFFScreen.Height = ROWS * TILE_Y;
|
||||
|
||||
pbytes = (COLS * ROWS * TILE_X + 15) / 16 * 2 * TILE_Y;
|
||||
|
||||
for (i = 0; i < nplanes; ++i) {
|
||||
planes[i] = calloc(1, pbytes);
|
||||
if (planes[i] == 0) {
|
||||
error("can not allocate planes pointer");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
/* Now, process it */
|
||||
if (fopen_text_file(argv[1], "r") != TRUE) {
|
||||
perror(argv[1]);
|
||||
return (1);
|
||||
}
|
||||
|
||||
iff = AllocIFF();
|
||||
if (!iff) {
|
||||
error("Can not allocate IFFHandle");
|
||||
return (1);
|
||||
}
|
||||
|
||||
iff->iff_Stream = Open(argv[2], MODE_NEWFILE);
|
||||
if (!iff->iff_Stream) {
|
||||
error("Can not open output file");
|
||||
return (1);
|
||||
}
|
||||
|
||||
InitIFFasDOS(iff);
|
||||
OpenIFF(iff, IFFF_WRITE);
|
||||
|
||||
PushChunk(iff, ID_BMAP, ID_FORM, IFFSIZE_UNKNOWN);
|
||||
|
||||
bmhd.w = IFFScreen.Width;
|
||||
bmhd.h = IFFScreen.Height;
|
||||
bmhd.x = 0;
|
||||
bmhd.y = 0;
|
||||
bmhd.nPlanes = nplanes;
|
||||
bmhd.masking = 0;
|
||||
bmhd.compression = 0;
|
||||
bmhd.reserved1 = 0;
|
||||
bmhd.transparentColor = 0;
|
||||
bmhd.xAspect = 100;
|
||||
bmhd.yAspect = 100;
|
||||
bmhd.pageWidth = TILE_X;
|
||||
bmhd.pageHeight = TILE_Y;
|
||||
|
||||
PushChunk(iff, ID_BMAP, ID_BMHD, sizeof(bmhd));
|
||||
WriteChunkBytes(iff, &bmhd, sizeof(bmhd));
|
||||
PopChunk(iff);
|
||||
|
||||
PushChunk(iff, ID_BMAP, ID_CAMG, sizeof(camg));
|
||||
WriteChunkBytes(iff, &camg, sizeof(camg));
|
||||
PopChunk(iff);
|
||||
|
||||
/* We need to reorder the colors to get reasonable default pens but
|
||||
* we also need to know where some of the colors are - so go find out.
|
||||
*/
|
||||
map_colors();
|
||||
|
||||
cmap = malloc((colors = (1L << nplanes)) * sizeof(AmiColorMap));
|
||||
for (i = 0; i < colors; ++i) {
|
||||
cmap[colrmap[i]].r = ColorMap[CM_RED][i];
|
||||
cmap[colrmap[i]].g = ColorMap[CM_GREEN][i];
|
||||
cmap[colrmap[i]].b = ColorMap[CM_BLUE][i];
|
||||
}
|
||||
|
||||
PushChunk(iff, ID_BMAP, ID_CMAP, IFFSIZE_UNKNOWN);
|
||||
for (i = 0; i < colors; ++i)
|
||||
WriteChunkBytes(iff, &cmap[i], 3);
|
||||
PopChunk(iff);
|
||||
|
||||
cnt = 0;
|
||||
while (read_text_tile(pixels) == TRUE) {
|
||||
packwritebody(pixels, planes, cnt);
|
||||
if (cnt % 20 == 0)
|
||||
printf("%d..", cnt);
|
||||
++cnt;
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
pdat.nplanes = nplanes;
|
||||
pdat.pbytes = pbytes;
|
||||
pdat.xsize = TILE_X;
|
||||
pdat.ysize = TILE_Y;
|
||||
pdat.across = COLS;
|
||||
pdat.down = ROWS;
|
||||
pdat.npics = cnt;
|
||||
|
||||
PushChunk(iff, ID_BMAP, ID_PDAT, IFFSIZE_UNKNOWN);
|
||||
WriteChunkBytes(iff, &pdat, sizeof(pdat));
|
||||
PopChunk(iff);
|
||||
|
||||
PushChunk(iff, ID_BMAP, ID_PLNE, IFFSIZE_UNKNOWN);
|
||||
for (i = 0; i < nplanes; ++i)
|
||||
WriteChunkBytes(iff, planes[i], pbytes);
|
||||
PopChunk(iff);
|
||||
|
||||
CloseIFF(iff);
|
||||
Close(iff->iff_Stream);
|
||||
FreeIFF(iff);
|
||||
|
||||
printf("\n%d tiles converted\n", cnt);
|
||||
|
||||
#if defined(_DCC) || defined(__GNUC__)
|
||||
CloseLibrary(IFFParseBase);
|
||||
#endif
|
||||
exit(0);
|
||||
}
|
||||
|
||||
findcolor(register pixel *pix)
|
||||
{
|
||||
register int i;
|
||||
|
||||
for (i = 0; i < MAXCOLORMAPSIZE; ++i) {
|
||||
if ((pix->r == ColorMap[CM_RED][i])
|
||||
&& (pix->g == ColorMap[CM_GREEN][i])
|
||||
&& (pix->b == ColorMap[CM_BLUE][i])) {
|
||||
return (i);
|
||||
}
|
||||
}
|
||||
return (-1);
|
||||
}
|
||||
|
||||
void
|
||||
packwritebody(pixel (*tile)[TILE_X], char **planes, int tileno)
|
||||
{
|
||||
register int i, j, k, col;
|
||||
register char *buf;
|
||||
register int across, rowbytes, xoff, yoff;
|
||||
|
||||
/* how many tiles fit across? */
|
||||
across = COLS;
|
||||
|
||||
/* How many bytes per pixel row */
|
||||
rowbytes = ((IFFScreen.Width + 15) / 16) * 2;
|
||||
|
||||
/* How many bytes to account for y distance in planes */
|
||||
yoff = ((tileno / across) * TILE_Y) * rowbytes;
|
||||
|
||||
/* How many bytes to account for x distance in planes */
|
||||
xoff = (tileno % across) * (TILE_X / 8);
|
||||
|
||||
/* For each row... */
|
||||
for (i = 0; i < TILE_Y; ++i) {
|
||||
/* For each bitplane... */
|
||||
for (k = 0; k < nplanes; ++k) {
|
||||
const int mask = 1l << k;
|
||||
|
||||
/* Go across the row */
|
||||
for (j = 0; j < TILE_X; j++) {
|
||||
col = findcolor(&tile[i][j]);
|
||||
if (col == -1) {
|
||||
error("can not convert pixel color to colormap index");
|
||||
return;
|
||||
}
|
||||
/* Shift the colors around to have good complements and to
|
||||
* know the dripen values.
|
||||
*/
|
||||
col = colrmap[col];
|
||||
|
||||
/* To top left corner of tile */
|
||||
buf = planes[k] + yoff + xoff;
|
||||
|
||||
/*To i'th row of tile and the correct byte for the j'th
|
||||
* pixel*/
|
||||
buf += (i * rowbytes) + (j / 8);
|
||||
|
||||
/* Or in the bit for this color */
|
||||
*buf |= (((col & mask) != 0) << (7 - (j % 8)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* #define DBG */
|
||||
|
||||
/* map_colors
|
||||
* The incoming colormap is in arbitrary order and has arbitrary colors in
|
||||
* it, but we need (some) specific colors in specific places. Find the
|
||||
* colors we need and fix the mapping table to match.
|
||||
*/
|
||||
/* What we are aiming for: */
|
||||
/* XXX was 0-7 */
|
||||
#define CX_BLACK 0
|
||||
#define CX_WHITE 1
|
||||
#define CX_BROWN 11
|
||||
#define CX_CYAN 2
|
||||
#define CX_GREEN 5
|
||||
#define CX_MAGENTA 10
|
||||
#define CX_BLUE 4
|
||||
#define CX_RED 7
|
||||
/* we don't care about the rest, at least now */
|
||||
/* should get: black white blue red grey greyblue ltgrey */
|
||||
void
|
||||
map_colors()
|
||||
{
|
||||
int x;
|
||||
#if 1
|
||||
int tmpmap[] = { 0, 2, 3, 7, 4, 5, 8, 9, 10, 11, 13, 15, 12, 1, 14, 6 };
|
||||
/* still not right: gray green yellow lost somewhere? */
|
||||
#else
|
||||
int tmpmap[16];
|
||||
int x, y;
|
||||
for (x = 0; x < 16; x++)
|
||||
tmpmap[x] = -1; /* set not assigned yet */
|
||||
|
||||
tmpmap[BestMatch(0, 0, 0)] = CX_BLACK;
|
||||
tmpmap[BestMatch(255, 255, 255)] = CX_WHITE;
|
||||
tmpmap[BestMatch(255, 0, 0)] = CX_RED;
|
||||
tmpmap[BestMatch(0, 255, 0)] = CX_GREEN;
|
||||
tmpmap[BestMatch(0, 0, 255)] = CX_BLUE;
|
||||
|
||||
/* clean up the rest */
|
||||
for (x = 0; x < 16; x++) {
|
||||
for (y = 0; y < 16; y++)
|
||||
if (tmpmap[y] == x)
|
||||
goto outer_cont;
|
||||
for (y = 0; y < 16; y++)
|
||||
if (tmpmap[y] == -1) {
|
||||
tmpmap[y] = x;
|
||||
break;
|
||||
}
|
||||
if (y == 16)
|
||||
panic("too many colors?");
|
||||
outer_cont:
|
||||
;
|
||||
}
|
||||
for (x = 0; x < 16; x++)
|
||||
if (tmpmap[y] == -1)
|
||||
panic("lost color?");
|
||||
#endif
|
||||
for (x = 0; x < 16; x++) {
|
||||
#ifdef DBG
|
||||
printf("final: c[%d]=%d (target: %d)\n", x, tmpmap[x], colrmap[x]);
|
||||
#endif
|
||||
colrmap[x] = tmpmap[x];
|
||||
}
|
||||
}
|
||||
BestMatch(r, g, b) int r, g, b;
|
||||
{
|
||||
int x;
|
||||
int bestslot;
|
||||
int bestrate = 99999999L;
|
||||
for (x = 0; x < 16; x++) {
|
||||
int rr = r - ColorMap[CM_RED][x];
|
||||
int gg = g - ColorMap[CM_GREEN][x];
|
||||
int bb = b - ColorMap[CM_BLUE][x];
|
||||
int rate = rr * rr + gg * gg + bb * bb;
|
||||
if (bestrate > rate) {
|
||||
bestrate = rate;
|
||||
bestslot = x;
|
||||
}
|
||||
}
|
||||
#ifdef DBG
|
||||
printf("map (%d,%d,%d) -> %d (error=%d)\n", r, g, b, bestslot, bestrate);
|
||||
#endif
|
||||
return bestslot;
|
||||
}
|
||||
|
||||
long *
|
||||
alloc(unsigned int n)
|
||||
{
|
||||
long *ret = malloc(n);
|
||||
if (!ret) {
|
||||
error("Can't allocate memory");
|
||||
exit(1);
|
||||
}
|
||||
return (ret);
|
||||
}
|
||||
|
||||
void
|
||||
panic(const char *msg)
|
||||
{
|
||||
fprintf(stderr, "PANIC: %s\n", msg);
|
||||
exit(1);
|
||||
}
|
||||
1660
outdated/sys/amiga/winami.c
Normal file
1660
outdated/sys/amiga/winami.c
Normal file
File diff suppressed because it is too large
Load Diff
57
outdated/sys/amiga/winami.p
Normal file
57
outdated/sys/amiga/winami.p
Normal file
@@ -0,0 +1,57 @@
|
||||
/* NetHack 3.6 winami.p $NHDT-Date: 1433806595 2015/06/08 23:36:35 $ $NHDT-Branch: master $:$NHDT-Revision: 1.7 $ */
|
||||
/* Copyright (c) Gregg Wonderly, Naperville, IL, 1992, 1993 */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
/* winami.c */
|
||||
void FDECL(amii_raw_print, (const char *));
|
||||
void FDECL(amii_raw_print_bold, (const char *));
|
||||
void FDECL(amii_start_menu, (winid , unsigned long ));
|
||||
void FDECL(amii_add_menu, (winid , char , int , const char *, unsigned int));
|
||||
void FDECL(amii_end_menu, (winid , char , const char * , const char *));
|
||||
char FDECL(amii_select_menu, (winid ));
|
||||
void NDECL(amii_update_inventory );
|
||||
void NDECL(amii_mark_synch );
|
||||
void NDECL(amii_wait_synch );
|
||||
void NDECL(amii_setclipped );
|
||||
void FDECL(amii_cliparound, (int , int ));
|
||||
void NDECL(amii_askname );
|
||||
void NDECL(amii_player_selection );
|
||||
void NDECL(flush_output );
|
||||
void FDECL(amii_destroy_nhwindow, (winid ));
|
||||
int FDECL(amii_create_nhwindow, (int ));
|
||||
void NDECL(amii_init_nhwindows );
|
||||
int NDECL(amii_get_ext_cmd);
|
||||
char FDECL(amii_yn_function, (const char * , const char * , char ));
|
||||
void FDECL(amii_addtopl, (const char *));
|
||||
void FDECL(TextSpaces, (struct RastPort * , int ));
|
||||
void FDECL(amii_putstr, (winid , int , const char *));
|
||||
void FDECL(amii_putsym, (winid , int , int , CHAR_P ));
|
||||
void FDECL(amii_clear_nhwindow, (winid ));
|
||||
void FDECL(amii_exit_nhwindows, (const char *));
|
||||
int FDECL(amii_nh_poskey, (int * , int * , int *));
|
||||
int NDECL(amii_nhgetch );
|
||||
void NDECL(amii_get_nh_event );
|
||||
void NDECL(amii_remember_topl );
|
||||
int NDECL(amii_doprev_message );
|
||||
void FDECL(amii_display_nhwindow, (winid , boolean ));
|
||||
void FDECL(amii_display_file, (const char * , boolean ));
|
||||
void FDECL(amii_curs, (winid , int , int ));
|
||||
void FDECL(amii_print_glyph, (winid , xchar , xchar , int, int ));
|
||||
void FDECL(DoMenuScroll, (int , int ));
|
||||
void FDECL(DisplayData, (int , int , int ));
|
||||
void FDECL(SetPropInfo, (struct Window * , struct Gadget * , long , long , long ));
|
||||
void FDECL(kill_nhwindows, (int ));
|
||||
void FDECL(amii_cl_end, (struct amii_WinDesc * , int ));
|
||||
void FDECL(cursor_off, (winid ));
|
||||
void FDECL(cursor_on, (winid ));
|
||||
void NDECL(amii_getret );
|
||||
void FDECL(amii_getlin, (const char * , char *));
|
||||
void FDECL(getlind, (const char * , char * , const char *));
|
||||
void FDECL(amii_suspend_nhwindows, (char * ));
|
||||
void NDECL(amii_resume_nhwindows);
|
||||
void NDECL(amii_bell);
|
||||
void NDECL(EditColor);
|
||||
void FDECL(DrawCol, ( struct Window *, int, UWORD * ) );
|
||||
void FDECL( DispCol, ( struct Window *w, int idx, UWORD * ) );
|
||||
void FDECL( SetBorder, (struct Gadget *) );
|
||||
void NDECL( port_help );
|
||||
void FDECL( dismiss_nhwindow, (winid) );
|
||||
1200
outdated/sys/amiga/winchar.c
Normal file
1200
outdated/sys/amiga/winchar.c
Normal file
File diff suppressed because it is too large
Load Diff
203
outdated/sys/amiga/windefs.h
Normal file
203
outdated/sys/amiga/windefs.h
Normal file
@@ -0,0 +1,203 @@
|
||||
/* NetHack 3.6 windefs.h $NHDT-Date: 1432512795 2015/05/25 00:13:15 $ $NHDT-Branch: master $:$NHDT-Revision: 1.7 $ */
|
||||
/* Copyright (c) Gregg Wonderly, Naperville, Illinois, 1991,1992,1993. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
#include <exec/types.h>
|
||||
#include <exec/memory.h>
|
||||
#include <exec/io.h>
|
||||
#if !defined(_DCC) && !defined(__GNUC__)
|
||||
#include <dos.h>
|
||||
#endif
|
||||
#include <exec/alerts.h>
|
||||
#include <exec/devices.h>
|
||||
#include <exec/execbase.h>
|
||||
#include <devices/console.h>
|
||||
#include <devices/conunit.h>
|
||||
#include <graphics/gfxbase.h>
|
||||
#include <intuition/intuition.h>
|
||||
#include <intuition/intuitionbase.h>
|
||||
#include <libraries/gadtools.h>
|
||||
#include <libraries/dosextens.h>
|
||||
#include <libraries/asl.h>
|
||||
/* stddef.h is included in the precompiled version of hack.h . If we include
|
||||
* it here normally (through string.h) we'll get an "illegal typedef" later
|
||||
* on. This is the easiest way I can think of to fix it without messing
|
||||
* around with the rest of the #includes. --AMC
|
||||
*/
|
||||
#if defined(_DCC) && !defined(HACK_H)
|
||||
#define ptrdiff_t ptrdiff_t_
|
||||
#define size_t size_t_
|
||||
#define wchar_t wchar_t_
|
||||
#endif
|
||||
#include <ctype.h>
|
||||
#undef strcmpi
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#if defined(_DCC) && !defined(HACK_H)
|
||||
#undef ptrdiff_t
|
||||
#undef size_t
|
||||
#undef wchar_T
|
||||
#endif
|
||||
|
||||
#ifdef IDCMP_CLOSEWINDOW
|
||||
#ifndef INTUI_NEW_LOOK
|
||||
#define INTUI_NEW_LOOK
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef HACK_H
|
||||
#include "hack.h"
|
||||
#endif
|
||||
#include "wintype.h"
|
||||
#include "winami.h"
|
||||
#include "func_tab.h"
|
||||
|
||||
#ifndef CLIPPING
|
||||
CLIPPING must be defined for the AMIGA version
|
||||
#endif
|
||||
|
||||
#undef LI
|
||||
#undef CO
|
||||
|
||||
/*#define TOPL_GETLINE /* Don't use a window for getlin() */
|
||||
/*#define WINDOW_YN /* Use a window for y/n questions */
|
||||
|
||||
#ifdef AZTEC_C
|
||||
#include <functions.h>
|
||||
#else
|
||||
#ifdef _DCC
|
||||
#include <clib/dos_protos.h>
|
||||
#include <clib/exec_protos.h>
|
||||
#include <clib/console_protos.h>
|
||||
#include <clib/layers_protos.h>
|
||||
#include <clib/diskfont_protos.h>
|
||||
#include <clib/gadtools_protos.h>
|
||||
#else
|
||||
#include <proto/dos.h>
|
||||
#include <proto/exec.h>
|
||||
#include <proto/console.h>
|
||||
#include <proto/layers.h>
|
||||
#include <proto/diskfont.h>
|
||||
#include <proto/gadtools.h>
|
||||
#include <proto/asl.h>
|
||||
#endif
|
||||
|
||||
/* kludge - see amirip for why */
|
||||
#undef red
|
||||
#undef green
|
||||
#undef blue
|
||||
#ifdef _DCC
|
||||
#include <clib/graphics_protos.h>
|
||||
#else
|
||||
#include <proto/graphics.h>
|
||||
#endif
|
||||
|
||||
#ifdef _DCC
|
||||
#define __asm /* DICE doesn't like __asm */
|
||||
#endif
|
||||
|
||||
#ifndef __SASC_60
|
||||
#undef index
|
||||
#define index strchr
|
||||
#endif
|
||||
|
||||
#ifdef _DCC
|
||||
#include <clib/intuition_protos.h>
|
||||
#else
|
||||
#include <proto/intuition.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef SHAREDLIB
|
||||
#include "NH:sys/amiga/lib/libmacs.h"
|
||||
#endif
|
||||
|
||||
#ifdef INTUI_NEW_LOOK
|
||||
#include <utility/tagitem.h>
|
||||
#endif
|
||||
|
||||
#define WINVERS_AMII (strcmp("amii", windowprocs.name) == 0)
|
||||
#define WINVERS_AMIV (strcmp("amitile", windowprocs.name) == 0)
|
||||
#define WINVERS_AMIT (strcmp("amitty", windowprocs.name) == 0)
|
||||
|
||||
/* cw->data[x] contains 2 characters worth of special information. These
|
||||
* characters are stored at the offsets as described here.
|
||||
*/
|
||||
#define VATTR 0 /* Video attribute is in this slot */
|
||||
#define SEL_ITEM 1 /* If this is a select item, slot is 1 else 0 */
|
||||
#define SOFF 2 /* The string starts here. */
|
||||
|
||||
#undef NULL
|
||||
#define NULL 0L
|
||||
|
||||
/*
|
||||
* Versions we need of various libraries. We can't use LIBRARY_VERSION
|
||||
* as defined in <exec/types.h> because some of the libraries we need
|
||||
* don't have that version number in the 1.2 ROM.
|
||||
*/
|
||||
|
||||
#define LIBRARY_FONT_VERSION 34L
|
||||
#define LIBRARY_TILE_VERSION 37L
|
||||
|
||||
/* These values are just sorta suggestions in use, but are minimum
|
||||
* requirements
|
||||
* in reality...
|
||||
*/
|
||||
#define WINDOWHEIGHT 192
|
||||
#define SCREENHEIGHT 200
|
||||
#define WIDTH 640
|
||||
|
||||
/* This character is a solid block (cursor) in Hack.font */
|
||||
#define CURSOR_CHAR 0x90
|
||||
|
||||
#define FONTHEIGHT 8
|
||||
#define FONTWIDTH 8
|
||||
#define FONTBASELINE 8
|
||||
|
||||
#define MAPFTWIDTH 8
|
||||
#define MAPFTHEIGHT 8
|
||||
#define MAPFTBASELN 6
|
||||
|
||||
/* If Compiling with the "New Look", redefine these now */
|
||||
#ifdef INTUI_NEW_LOOK
|
||||
#define NewWindow ExtNewWindow
|
||||
#define NewScreen ExtNewScreen
|
||||
#endif
|
||||
|
||||
#define SIZEOF_DISKNAME 8
|
||||
|
||||
#define CSI '\x9b'
|
||||
#define NO_CHAR -1
|
||||
#define RAWHELP 0x5F /* Rawkey code of the HELP key */
|
||||
|
||||
#define C_BLACK 0
|
||||
#define C_WHITE 1
|
||||
#define C_BROWN (WINVERS_AMIV ? 11 : 2)
|
||||
#define C_CYAN (WINVERS_AMIV ? 2 : 3)
|
||||
#define C_GREEN (WINVERS_AMIV ? 5 : 4)
|
||||
#define C_MAGENTA (WINVERS_AMIV ? 10 : 5)
|
||||
#define C_BLUE (WINVERS_AMIV ? 4 : 6)
|
||||
#define C_RED 7
|
||||
#define C_ORANGE 3
|
||||
#define C_GREY 6
|
||||
#define C_LTGREEN 8
|
||||
#define C_YELLOW 9
|
||||
#define C_GREYBLUE 12
|
||||
#define C_LTBROWN 13
|
||||
#define C_LTGREY 14
|
||||
#define C_PEACH 15
|
||||
|
||||
/* Structure describing tile files */
|
||||
struct PDAT
|
||||
{
|
||||
long nplanes; /* Depth of images */
|
||||
long pbytes; /* Bytes in a plane of data */
|
||||
long across; /* Number of tiles across */
|
||||
long down; /* Number of tiles down */
|
||||
long npics; /* Number of pictures in this file */
|
||||
long xsize; /* X-size of a tile */
|
||||
long ysize; /* Y-size of a-tile */
|
||||
};
|
||||
|
||||
#undef MAXCOLORS
|
||||
#define MAXCOLORS 256
|
||||
148
outdated/sys/amiga/winext.h
Normal file
148
outdated/sys/amiga/winext.h
Normal file
@@ -0,0 +1,148 @@
|
||||
/* NetHack 3.6 winext.h $NHDT-Date: 1432512794 2015/05/25 00:13:14 $ $NHDT-Branch: master $:$NHDT-Revision: 1.7 $ */
|
||||
/* Copyright (c) Gregg Wonderly, Naperville, Illinois, 1991,1992,1993. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
extern int reclip;
|
||||
|
||||
#ifdef CLIPPING
|
||||
extern int clipping;
|
||||
extern int clipx;
|
||||
extern int clipy;
|
||||
extern int clipxmax;
|
||||
extern int clipymax;
|
||||
extern int xclipbord, yclipbord;
|
||||
#endif
|
||||
|
||||
extern int CO;
|
||||
extern int LI;
|
||||
extern int scrollmsg;
|
||||
extern int alwaysinvent;
|
||||
|
||||
#ifndef SHAREDLIB
|
||||
extern unsigned short amii_defpens[20];
|
||||
extern struct amii_DisplayDesc
|
||||
*amiIDisplay; /* the Amiga Intuition descriptor */
|
||||
extern struct window_procs amii_procs;
|
||||
extern struct window_procs amiv_procs;
|
||||
extern unsigned short amii_initmap[AMII_MAXCOLORS];
|
||||
extern unsigned short amiv_init_map[AMII_MAXCOLORS];
|
||||
extern unsigned short amii_init_map[AMII_MAXCOLORS];
|
||||
extern int bigscreen;
|
||||
extern int amii_numcolors;
|
||||
extern long amii_scrnmode;
|
||||
extern winid amii_rawprwin;
|
||||
extern struct Screen *HackScreen;
|
||||
extern char Initialized;
|
||||
/* These have already been defined elsewhere (and some are conflicting)
|
||||
* ... going ... going once ... going twice ....
|
||||
* extern const char *roles[];
|
||||
* extern struct Library *ConsoleDevice;
|
||||
* extern char toplines[ TBUFSZ ];
|
||||
* extern NEARDATA winid WIN_MESSAGE;
|
||||
* extern NEARDATA winid WIN_MAP;
|
||||
* extern NEARDATA winid WIN_STATUS;
|
||||
* extern NEARDATA winid WIN_INVEN;
|
||||
* extern winid WIN_OVER;
|
||||
* extern struct GfxBase *GfxBase;
|
||||
* extern struct Library *DiskfontBase;
|
||||
* extern struct IntuitionBase *IntuitionBase;
|
||||
* extern struct Library *LayersBase;
|
||||
*/
|
||||
extern int amii_msgAPen;
|
||||
extern int amii_msgBPen;
|
||||
extern int amii_statAPen;
|
||||
extern int amii_statBPen;
|
||||
extern int amii_menuAPen;
|
||||
extern int amii_menuBPen;
|
||||
extern int amii_textAPen;
|
||||
extern int amii_textBPen;
|
||||
extern int amii_otherAPen;
|
||||
extern int amii_otherBPen;
|
||||
#else
|
||||
extern WinamiBASE *WinamiBase;
|
||||
#endif
|
||||
/* All kinds of shared stuff */
|
||||
extern struct TextAttr Hack160;
|
||||
extern struct TextAttr Hack40;
|
||||
extern struct TextAttr Hack80;
|
||||
extern struct TextAttr TextsFont13;
|
||||
extern struct Window *pr_WindowPtr;
|
||||
extern struct Menu HackMenu[];
|
||||
extern struct Menu *MenuStrip;
|
||||
extern struct NewMenu GTHackMenu[];
|
||||
extern APTR *VisualInfo;
|
||||
extern unsigned char KbdBuffered;
|
||||
extern struct TextFont *TextsFont;
|
||||
extern struct TextFont *HackFont;
|
||||
extern struct IOStdReq ConsoleIO;
|
||||
extern struct MsgPort *HackPort;
|
||||
|
||||
extern int txwidth, txheight, txbaseline;
|
||||
#ifdef SUPERBITMAP_MAP
|
||||
extern struct BitMap amii_vbm;
|
||||
#endif
|
||||
|
||||
/* This gadget data is replicated for menu/text windows... */
|
||||
extern struct PropInfo PropScroll;
|
||||
extern struct Image Image1;
|
||||
extern struct Gadget MenuScroll;
|
||||
|
||||
/* This gadget is for the message window... */
|
||||
extern struct PropInfo MsgPropScroll;
|
||||
extern struct Image MsgImage1;
|
||||
extern struct Gadget MsgScroll;
|
||||
|
||||
extern struct TagItem tags[];
|
||||
|
||||
extern struct win_setup {
|
||||
struct NewWindow newwin;
|
||||
UWORD offx, offy, maxrow, rows, maxcol, cols; /* CHECK TYPES */
|
||||
} new_wins[];
|
||||
|
||||
extern UWORD scrnpens[];
|
||||
/* The last Window event is stored here for reference. */
|
||||
extern WEVENT lastevent;
|
||||
extern const char winpanicstr[];
|
||||
extern struct TagItem scrntags[];
|
||||
extern struct NewScreen NewHackScreen;
|
||||
|
||||
extern int topl_addspace;
|
||||
extern char spaces[76];
|
||||
extern int wincnt; /* # of nh windows opened */
|
||||
extern struct Rectangle lastinvent, lastmsg;
|
||||
|
||||
typedef struct {
|
||||
UWORD w, h;
|
||||
WORD x, y;
|
||||
UBYTE nPlanes;
|
||||
UBYTE masking;
|
||||
UBYTE compression;
|
||||
UBYTE reserved1;
|
||||
UWORD transparentColor;
|
||||
UBYTE xAspect, yAspect;
|
||||
WORD pageWidth, pageHeight;
|
||||
} BitMapHeader;
|
||||
|
||||
typedef enum {
|
||||
COL_MAZE_BRICK,
|
||||
COL_MAZE_STONE,
|
||||
COL_MAZE_HEAT,
|
||||
COL_MAZE_WOOD
|
||||
} MazeType;
|
||||
extern struct PDAT pictdata;
|
||||
extern struct Hook fillhook;
|
||||
extern struct TagItem wintags[];
|
||||
#ifndef SHAREDLIB
|
||||
#ifndef __GNUC__
|
||||
void __asm LayerFillHook(register __a0 struct Hook *hk,
|
||||
register __a2 struct RastPort *rp,
|
||||
register __a1 struct FillParams *fp);
|
||||
#else
|
||||
#ifdef __PPC__
|
||||
struct EmulLibEntry LayerFillHook;
|
||||
#else
|
||||
void LayerFillHook(void);
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
extern int mxsize, mysize;
|
||||
2333
outdated/sys/amiga/winfuncs.c
Normal file
2333
outdated/sys/amiga/winfuncs.c
Normal file
File diff suppressed because it is too large
Load Diff
94
outdated/sys/amiga/winkey.c
Normal file
94
outdated/sys/amiga/winkey.c
Normal file
@@ -0,0 +1,94 @@
|
||||
/* NetHack 3.6 winkey.c $NHDT-Date: 1432512794 2015/05/25 00:13:14 $ $NHDT-Branch: master $:$NHDT-Revision: 1.7 $ */
|
||||
/* Copyright (c) Gregg Wonderly, Naperville, Illinois, 1991,1992,1993. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
#include "NH:sys/amiga/windefs.h"
|
||||
#include "NH:sys/amiga/winext.h"
|
||||
#include "NH:sys/amiga/winproto.h"
|
||||
|
||||
amii_nh_poskey(x, y, mod) int *x, *y, *mod;
|
||||
{
|
||||
struct amii_WinDesc *cw;
|
||||
WETYPE type;
|
||||
struct RastPort *rp;
|
||||
struct Window *w;
|
||||
|
||||
if (cw = amii_wins[WIN_MESSAGE]) {
|
||||
cw->wflags &= ~FLMAP_SKIP;
|
||||
if (scrollmsg)
|
||||
cw->wflags |= FLMSG_FIRST;
|
||||
cw->disprows = 0;
|
||||
}
|
||||
|
||||
if (WIN_MAP != WIN_ERR && (cw = amii_wins[WIN_MAP]) && (w = cw->win)) {
|
||||
cursor_on(WIN_MAP);
|
||||
} else
|
||||
panic("no MAP window opened for nh_poskey\n");
|
||||
|
||||
rp = w->RPort;
|
||||
|
||||
while (1) {
|
||||
type = WindowGetevent();
|
||||
if (type == WEMOUSE) {
|
||||
*mod = CLICK_1;
|
||||
if (lastevent.un.mouse.qual)
|
||||
*mod = 0;
|
||||
|
||||
/* X coordinates are 1 based, Y are 1 based. */
|
||||
*x = ((lastevent.un.mouse.x - w->BorderLeft) / mxsize) + 1;
|
||||
*y = ((lastevent.un.mouse.y - w->BorderTop - MAPFTBASELN)
|
||||
/ mysize) + 1;
|
||||
#ifdef CLIPPING
|
||||
if (clipping) {
|
||||
*x += clipx;
|
||||
*y += clipy;
|
||||
}
|
||||
#endif
|
||||
return (0);
|
||||
} else if (type == WEKEY) {
|
||||
lastevent.type = WEUNK;
|
||||
return (lastevent.un.key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
amii_nhgetch()
|
||||
{
|
||||
int ch;
|
||||
struct amii_WinDesc *cw = amii_wins[WIN_MESSAGE];
|
||||
|
||||
if (WIN_MAP != WIN_ERR && amii_wins[WIN_MAP]) {
|
||||
cursor_on(WIN_MAP);
|
||||
}
|
||||
if (cw)
|
||||
cw->wflags &= ~FLMAP_SKIP;
|
||||
|
||||
ch = WindowGetchar();
|
||||
return (ch);
|
||||
}
|
||||
|
||||
void
|
||||
amii_get_nh_event()
|
||||
{
|
||||
/* nothing now - later I have no idea. Is this just a Mac hook? */
|
||||
}
|
||||
|
||||
void
|
||||
amii_getret()
|
||||
{
|
||||
register int c;
|
||||
|
||||
raw_print("");
|
||||
raw_print("Press Return...");
|
||||
|
||||
c = 0;
|
||||
|
||||
while (c != '\n' && c != '\r') {
|
||||
if (HackPort)
|
||||
c = WindowGetchar();
|
||||
else
|
||||
c = getchar();
|
||||
}
|
||||
return;
|
||||
}
|
||||
1461
outdated/sys/amiga/winmenu.c
Normal file
1461
outdated/sys/amiga/winmenu.c
Normal file
File diff suppressed because it is too large
Load Diff
154
outdated/sys/amiga/winproto.h
Normal file
154
outdated/sys/amiga/winproto.h
Normal file
@@ -0,0 +1,154 @@
|
||||
/* NetHack 3.6 winproto.h $NHDT-Date: 1433806597 2015/06/08 23:36:37 $ $NHDT-Branch: master $:$NHDT-Revision: 1.9 $ */
|
||||
/* Copyright (c) Gregg Wonderly, Naperville, Illinois, 1991,1992,1993. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
/* winreq.c */
|
||||
void EditColor(void);
|
||||
void EditClipping(void);
|
||||
void DrawCol(struct Window *w, int idx, UWORD *colors);
|
||||
void DispCol(struct Window *w, int idx, UWORD *colors);
|
||||
void amii_change_color(int, long, int);
|
||||
char *amii_get_color_string();
|
||||
void amii_getlin(const char *prompt, char *bufp);
|
||||
void getlind(const char *prompt, char *bufp, const char *dflt);
|
||||
char *amii_get_color_string(void);
|
||||
int filecopy(char *from, char *to);
|
||||
char *basename(char *str);
|
||||
char *dirname(char *str);
|
||||
|
||||
/* winstr.c */
|
||||
void amii_putstr(winid window, int attr, const char *str);
|
||||
void outmore(struct amii_WinDesc *cw);
|
||||
void outsubstr(struct amii_WinDesc *cw, char *str, int len, int fudge);
|
||||
void amii_putsym(winid st, int i, int y, CHAR_P c);
|
||||
void amii_addtopl(const char *s);
|
||||
void TextSpaces(struct RastPort *rp, int nr);
|
||||
void amii_remember_topl(void);
|
||||
long CountLines(winid);
|
||||
long FindLine(winid, int);
|
||||
int amii_doprev_message(void);
|
||||
void flushIDCMP(struct MsgPort *);
|
||||
int amii_msgborder(struct Window *);
|
||||
void amii_scrollmsg(register struct Window *w,
|
||||
register struct amii_WinDesc *cw);
|
||||
|
||||
/* winkey.c */
|
||||
int amii_nh_poskey(int *x, int *y, int *mod);
|
||||
int amii_nhgetch(void);
|
||||
void amii_get_nh_event(void);
|
||||
void amii_getret(void);
|
||||
|
||||
/* winmenu.c */
|
||||
void amii_start_menu(winid window, unsigned long);
|
||||
void FDECL(amii_add_menu, (winid, int, const anything *, CHAR_P, CHAR_P, int,
|
||||
const char *, unsigned int));
|
||||
void FDECL(amii_end_menu, (winid, const char *));
|
||||
int FDECL(amii_select_menu, (winid, int, menu_item **));
|
||||
int DoMenuScroll(int win, int blocking, int how, menu_item **);
|
||||
void ReDisplayData(winid win);
|
||||
void DisplayData(winid win, int start);
|
||||
void SetPropInfo(struct Window *win, struct Gadget *gad, long vis, long total,
|
||||
long top);
|
||||
|
||||
/* amiwind.c */
|
||||
struct Window *OpenShWindow(struct NewWindow *nw);
|
||||
void CloseShWindow(struct Window *win);
|
||||
int ConvertKey(struct IntuiMessage *message);
|
||||
int kbhit(void);
|
||||
int kbhit(void);
|
||||
int amikbhit(void);
|
||||
int WindowGetchar(void);
|
||||
WETYPE WindowGetevent(void);
|
||||
void amii_cleanup(void);
|
||||
#ifndef SHAREDLIB
|
||||
void Abort(long rc);
|
||||
#endif
|
||||
void CleanUp(void);
|
||||
void flush_glyph_buffer(struct Window *w);
|
||||
void amiga_print_glyph(winid window, int color_index, int glyph, int bkglyph);
|
||||
void start_glyphout(winid window);
|
||||
void amii_end_glyphout(winid window);
|
||||
struct NewWindow *DupNewWindow(struct NewWindow *win);
|
||||
void FreeNewWindow(struct NewWindow *win);
|
||||
void bell(void);
|
||||
void amii_delay_output(void);
|
||||
void amii_number_pad(int state);
|
||||
#ifndef SHAREDLIB
|
||||
void amiv_loadlib(void);
|
||||
void amii_loadlib(void);
|
||||
#endif
|
||||
void preserve_icon(void);
|
||||
void clear_icon(void);
|
||||
|
||||
/* winfuncs.c */
|
||||
void amii_destroy_nhwindow(winid win);
|
||||
int amii_create_nhwindow(int type);
|
||||
void amii_init_nhwindows(int *, char **);
|
||||
void amii_setdrawpens(struct Window *, int type);
|
||||
void amii_sethipens(struct Window *, int type, int attr);
|
||||
void amii_setfillpens(struct Window *, int type);
|
||||
void amii_clear_nhwindow(winid win);
|
||||
void dismiss_nhwindow(winid win);
|
||||
void amii_exit_nhwindows(const char *str);
|
||||
void amii_display_nhwindow(winid win, boolean blocking);
|
||||
void amii_curs(winid window, int x, int y);
|
||||
void kill_nhwindows(int all);
|
||||
void amii_cl_end(struct amii_WinDesc *cw, int i);
|
||||
void cursor_off(winid window);
|
||||
void cursor_on(winid window);
|
||||
void amii_suspend_nhwindows(const char *str);
|
||||
void amii_resume_nhwindows(void);
|
||||
void amii_bell(void);
|
||||
void removetopl(int cnt);
|
||||
void port_help(void);
|
||||
void amii_print_glyph(winid win, xchar x, xchar y, int glyph, int bkglyph);
|
||||
void amii_raw_print(const char *s);
|
||||
void amii_raw_print_bold(const char *s);
|
||||
void amii_update_inventory(void);
|
||||
void amii_mark_synch(void);
|
||||
void amii_wait_synch(void);
|
||||
void amii_setclipped(void);
|
||||
void amii_cliparound(int x, int y);
|
||||
void amii_set_text_font(char *font, int size);
|
||||
BitMapHeader ReadImageFiles(char **, struct BitMap **, char **);
|
||||
BitMapHeader ReadTileImageFiles(void);
|
||||
void FreeImageFiles(char **, struct BitMap **);
|
||||
void FreeTileImageFiles();
|
||||
|
||||
/* winami.c */
|
||||
#ifdef SHAREDLIB
|
||||
int __UserLibInit(void);
|
||||
void __UserLibCleanup(void);
|
||||
#endif
|
||||
void amii_askname(void);
|
||||
void amii_player_selection(void);
|
||||
void RandomWindow(char *name);
|
||||
int amii_get_ext_cmd(void);
|
||||
char amii_yn_function(const char *prompt, const char *resp, char def);
|
||||
char amii_yn_function(const char *query, const char *resp, char def);
|
||||
void amii_display_file(const char *fn, boolean complain);
|
||||
void SetBorder(struct Gadget *gd);
|
||||
void *malloc(register unsigned size);
|
||||
void free(void *q);
|
||||
|
||||
#ifdef SHAREDLIB
|
||||
/* amilib.c */
|
||||
void amii_loadlib(void);
|
||||
void amiv_loadlib(void);
|
||||
void CleanUp(void);
|
||||
void setup_librefs(WinamiBASE *base);
|
||||
#else
|
||||
void Abort(long rc);
|
||||
#endif
|
||||
|
||||
/* amirip.c */
|
||||
void FDECL(amii_outrip, (winid tmpwin, int how, time_t when));
|
||||
|
||||
/* winchar.c */
|
||||
void SetMazeType(MazeType);
|
||||
int GlyphToIcon(int glyph);
|
||||
#ifdef OPT_DISPMAP
|
||||
void dispmap_sanity(void);
|
||||
int dispmap_sanity1(int);
|
||||
#endif
|
||||
void FreeTileImageFiles(void);
|
||||
1022
outdated/sys/amiga/winreq.c
Normal file
1022
outdated/sys/amiga/winreq.c
Normal file
File diff suppressed because it is too large
Load Diff
492
outdated/sys/amiga/winstr.c
Normal file
492
outdated/sys/amiga/winstr.c
Normal file
@@ -0,0 +1,492 @@
|
||||
/* NetHack 3.6 winstr.c $NHDT-Date: 1432512795 2015/05/25 00:13:15 $ $NHDT-Branch: master $:$NHDT-Revision: 1.7 $ */
|
||||
/* Copyright (c) Gregg Wonderly, Naperville, Illinois, 1991,1992,1993. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
#include "NH:sys/amiga/windefs.h"
|
||||
#include "NH:sys/amiga/winext.h"
|
||||
#include "NH:sys/amiga/winproto.h"
|
||||
|
||||
/* Put a string into the indicated window using the indicated attribute */
|
||||
|
||||
void
|
||||
amii_putstr(window, attr, str)
|
||||
winid window;
|
||||
int attr;
|
||||
const char *str;
|
||||
{
|
||||
int fudge;
|
||||
int len;
|
||||
struct Window *w;
|
||||
register struct amii_WinDesc *cw;
|
||||
char *ob;
|
||||
int i, j, n0, bottom, totalvis, wheight;
|
||||
static int wrapping = 0;
|
||||
|
||||
/* Always try to avoid a panic when there is no window */
|
||||
if (window == WIN_ERR) {
|
||||
window = WIN_BASE;
|
||||
if (window == WIN_ERR)
|
||||
window = WIN_BASE = amii_create_nhwindow(NHW_BASE);
|
||||
}
|
||||
|
||||
if (window == WIN_ERR || (cw = amii_wins[window]) == NULL) {
|
||||
iflags.window_inited = 0;
|
||||
panic(winpanicstr, window, "putstr");
|
||||
}
|
||||
|
||||
w = cw->win;
|
||||
|
||||
if (!str)
|
||||
return;
|
||||
amiIDisplay->lastwin = window; /* do we care??? */
|
||||
|
||||
/* NHW_MENU windows are not opened immediately, so check if we
|
||||
* have the window pointer yet
|
||||
*/
|
||||
|
||||
if (w) {
|
||||
/* Set the drawing mode and pen colors */
|
||||
SetDrMd(w->RPort, JAM2);
|
||||
amii_sethipens(w, cw->type, attr);
|
||||
} else if (cw->type != NHW_MENU && cw->type != NHW_TEXT) {
|
||||
panic("NULL window pointer in putstr 2: %d", window);
|
||||
}
|
||||
|
||||
/* Okay now do the work for each type */
|
||||
|
||||
switch (cw->type) {
|
||||
case NHW_MESSAGE:
|
||||
if (WINVERS_AMIV)
|
||||
fudge = 2;
|
||||
else {
|
||||
/* 8 for --more--, 1 for preceeding sp, 1 for putstr pad */
|
||||
fudge = 10;
|
||||
}
|
||||
|
||||
/* There is a one pixel border at the borders, so subtract two */
|
||||
bottom = amii_msgborder(w);
|
||||
|
||||
wheight = (w->Height - w->BorderTop - w->BorderBottom - 3)
|
||||
/ w->RPort->TxHeight;
|
||||
|
||||
if (scrollmsg || wheight > 1)
|
||||
fudge = 0;
|
||||
|
||||
amii_scrollmsg(w, cw);
|
||||
|
||||
while (isspace(*str))
|
||||
str++;
|
||||
strncpy(toplines, str, TBUFSZ);
|
||||
toplines[TBUFSZ - 1] = 0;
|
||||
|
||||
/* For initial message to be visible, we need to explicitly position
|
||||
* the
|
||||
* cursor. This flag, cw->curx == -1 is set elsewhere to force the
|
||||
* cursor to be repositioned to the "bottom".
|
||||
*/
|
||||
if (cw->curx == -1) {
|
||||
amii_curs(WIN_MESSAGE, 1, bottom);
|
||||
cw->curx = 0;
|
||||
}
|
||||
|
||||
/* If used all of history lines, move them down */
|
||||
if (cw->maxrow >= iflags.msg_history) {
|
||||
if (cw->data[0])
|
||||
free(cw->data[0]);
|
||||
memcpy(cw->data, &cw->data[1],
|
||||
(iflags.msg_history - 1) * sizeof(char *));
|
||||
cw->data[iflags.msg_history - 1] =
|
||||
(char *) alloc(strlen(toplines) + 5);
|
||||
strcpy(cw->data[i = iflags.msg_history - 1] + SOFF
|
||||
+ (scrollmsg != 0),
|
||||
toplines);
|
||||
} else {
|
||||
/* Otherwise, allocate a new one and copy the line in */
|
||||
cw->data[cw->maxrow] = (char *) alloc(strlen(toplines) + 5);
|
||||
strcpy(cw->data[i = cw->maxrow++] + SOFF + (scrollmsg != 0),
|
||||
toplines);
|
||||
}
|
||||
cw->data[i][SEL_ITEM] = 1;
|
||||
cw->data[i][VATTR] = attr + 1;
|
||||
|
||||
if (scrollmsg) {
|
||||
cw->curx = 0;
|
||||
cw->data[i][2] = (cw->wflags & FLMSG_FIRST) ? '>' : ' ';
|
||||
}
|
||||
|
||||
str = cw->data[i] + SOFF;
|
||||
if (cw->curx + strlen(str) >= (cw->cols - fudge)) {
|
||||
int i;
|
||||
char *ostr = (char *) str;
|
||||
char *p;
|
||||
|
||||
while (cw->curx + strlen(str) >= (cw->cols - fudge)) {
|
||||
for (p = ((char *) &str[cw->cols - 1 - cw->curx]) - fudge;
|
||||
!isspace(*p) && p > str;)
|
||||
--p;
|
||||
if (p < str)
|
||||
p = (char *) str;
|
||||
|
||||
if (p == str) {
|
||||
/* p = (char *)&str[ cw->cols ]; */
|
||||
outmore(cw);
|
||||
continue;
|
||||
}
|
||||
|
||||
i = (long) p - (long) str;
|
||||
outsubstr(cw, (char *) str, i, fudge);
|
||||
cw->curx += i;
|
||||
|
||||
while (isspace(*p))
|
||||
p++;
|
||||
str = p;
|
||||
|
||||
#if 0
|
||||
if( str != ostr ) {
|
||||
outsubstr( cw, "+", 1, fudge );
|
||||
cw->curx+=2;
|
||||
}
|
||||
#endif
|
||||
if (*str)
|
||||
amii_scrollmsg(w, cw);
|
||||
amii_cl_end(cw, cw->curx);
|
||||
}
|
||||
|
||||
if (*str) {
|
||||
if (str != ostr) {
|
||||
outsubstr(cw, "+", 1, fudge);
|
||||
cw->curx += 2;
|
||||
}
|
||||
while (isspace(*str))
|
||||
++str;
|
||||
outsubstr(cw, (char *) str, i = strlen((char *) str), fudge);
|
||||
cw->curx += i;
|
||||
amii_cl_end(cw, cw->curx);
|
||||
}
|
||||
} else {
|
||||
outsubstr(cw, (char *) str, i = strlen((char *) str), fudge);
|
||||
cw->curx += i;
|
||||
amii_cl_end(cw, cw->curx);
|
||||
}
|
||||
cw->wflags &= ~FLMSG_FIRST;
|
||||
len = 0;
|
||||
if (scrollmsg) {
|
||||
totalvis = CountLines(window);
|
||||
SetPropInfo(w, &MsgScroll,
|
||||
(w->Height - w->BorderTop - w->BorderBottom)
|
||||
/ w->RPort->TxHeight,
|
||||
totalvis, totalvis);
|
||||
}
|
||||
i = strlen(toplines + SOFF);
|
||||
cw->maxcol = max(cw->maxcol, i);
|
||||
cw->vwy = cw->maxrow;
|
||||
break;
|
||||
|
||||
case NHW_STATUS:
|
||||
if (cw->data[cw->cury] == NULL)
|
||||
panic("NULL pointer for status window");
|
||||
ob = &cw->data[cw->cury][j = cw->curx];
|
||||
if (g.context.botlx)
|
||||
*ob = 0;
|
||||
|
||||
/* Display when beam at top to avoid flicker... */
|
||||
WaitTOF();
|
||||
Text(w->RPort, (char *) str, strlen((char *) str));
|
||||
if (cw->cols > strlen(str))
|
||||
TextSpaces(w->RPort, cw->cols - strlen(str));
|
||||
|
||||
(void) strncpy(cw->data[cw->cury], str, cw->cols);
|
||||
cw->data[cw->cury][cw->cols - 1] = '\0'; /* null terminate */
|
||||
cw->cury = (cw->cury + 1) % 2;
|
||||
cw->curx = 0;
|
||||
break;
|
||||
|
||||
case NHW_MAP:
|
||||
case NHW_BASE:
|
||||
if (cw->type == NHW_BASE && wrapping) {
|
||||
amii_curs(window, cw->curx + 1, cw->cury);
|
||||
TextSpaces(w->RPort, cw->cols);
|
||||
if (cw->cury < cw->rows) {
|
||||
amii_curs(window, cw->curx + 1, cw->cury + 1);
|
||||
TextSpaces(w->RPort, cw->cols);
|
||||
cw->cury--;
|
||||
}
|
||||
}
|
||||
amii_curs(window, cw->curx + 1, cw->cury);
|
||||
Text(w->RPort, (char *) str, strlen((char *) str));
|
||||
cw->curx = 0;
|
||||
/* CR-LF is automatic in these windows */
|
||||
cw->cury++;
|
||||
if (cw->type == NHW_BASE && cw->cury >= cw->rows) {
|
||||
cw->cury = 0;
|
||||
wrapping = 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case NHW_MENU:
|
||||
case NHW_TEXT:
|
||||
|
||||
/* always grows one at a time, but alloc 12 at a time */
|
||||
|
||||
if (cw->cury >= cw->rows || !cw->data) {
|
||||
char **tmp;
|
||||
|
||||
/* Allocate 12 more rows */
|
||||
cw->rows += 12;
|
||||
tmp = (char **) alloc(sizeof(char *) * cw->rows);
|
||||
|
||||
/* Copy the old lines */
|
||||
for (i = 0; i < cw->cury; i++)
|
||||
tmp[i] = cw->data[i];
|
||||
|
||||
if (cw->data) {
|
||||
free(cw->data);
|
||||
cw->data = NULL;
|
||||
}
|
||||
|
||||
cw->data = tmp;
|
||||
|
||||
/* Null out the unused entries. */
|
||||
for (i = cw->cury; i < cw->rows; i++)
|
||||
cw->data[i] = 0;
|
||||
}
|
||||
|
||||
if (!cw->data)
|
||||
panic("no data storage");
|
||||
|
||||
/* Shouldn't need to do this, but... */
|
||||
|
||||
if (cw->data && cw->data[cw->cury]) {
|
||||
free(cw->data[cw->cury]);
|
||||
cw->data[cw->cury] = NULL;
|
||||
}
|
||||
|
||||
n0 = strlen(str) + 1;
|
||||
cw->data[cw->cury] = (char *) alloc(n0 + SOFF);
|
||||
|
||||
/* avoid nuls, for convenience */
|
||||
cw->data[cw->cury][VATTR] = attr + 1;
|
||||
cw->data[cw->cury][SEL_ITEM] = 0;
|
||||
Strcpy(cw->data[cw->cury] + SOFF, str);
|
||||
|
||||
if (n0 > cw->maxcol)
|
||||
cw->maxcol = n0;
|
||||
if (++cw->cury > cw->maxrow)
|
||||
cw->maxrow = cw->cury;
|
||||
break;
|
||||
|
||||
default:
|
||||
panic("Invalid or unset window type in putstr()");
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
amii_scrollmsg(w, cw)
|
||||
register struct Window *w;
|
||||
register struct amii_WinDesc *cw;
|
||||
{
|
||||
int bottom, wheight;
|
||||
|
||||
bottom = amii_msgborder(w);
|
||||
|
||||
wheight =
|
||||
(w->Height - w->BorderTop - w->BorderBottom - 3) / w->RPort->TxHeight;
|
||||
|
||||
if (scrollmsg) {
|
||||
if (++cw->disprows > wheight) {
|
||||
outmore(cw);
|
||||
cw->disprows = 1; /* count this line... */
|
||||
} else {
|
||||
ScrollRaster(w->RPort, 0, w->RPort->TxHeight, w->BorderLeft,
|
||||
w->BorderTop + 1, w->Width - w->BorderRight - 1,
|
||||
w->Height - w->BorderBottom - 1);
|
||||
}
|
||||
amii_curs(WIN_MESSAGE, 1, bottom);
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
amii_msgborder(w)
|
||||
struct Window *w;
|
||||
{
|
||||
register int bottom;
|
||||
|
||||
/* There is a one pixel border at the borders, so subtract two */
|
||||
bottom = w->Height - w->BorderTop - w->BorderBottom - 2;
|
||||
bottom /= w->RPort->TxHeight;
|
||||
if (bottom > 0)
|
||||
--bottom;
|
||||
return (bottom);
|
||||
}
|
||||
|
||||
void
|
||||
outmore(cw)
|
||||
register struct amii_WinDesc *cw;
|
||||
{
|
||||
struct Window *w = cw->win;
|
||||
|
||||
if ((cw->wflags & FLMAP_SKIP) == 0) {
|
||||
if (scrollmsg) {
|
||||
int bottom;
|
||||
|
||||
bottom = amii_msgborder(w);
|
||||
|
||||
ScrollRaster(w->RPort, 0, w->RPort->TxHeight, w->BorderLeft,
|
||||
w->BorderTop + 1, w->Width - w->BorderRight - 1,
|
||||
w->Height - w->BorderBottom - 1);
|
||||
amii_curs(WIN_MESSAGE, 1, bottom); /* -1 for inner border */
|
||||
Text(w->RPort, "--more--", 8);
|
||||
} else
|
||||
Text(w->RPort, " --more--", 9);
|
||||
|
||||
/* Make sure there are no events in the queue */
|
||||
flushIDCMP(HackPort);
|
||||
|
||||
/* Allow mouse clicks to clear --more-- */
|
||||
WindowGetchar();
|
||||
if (lastevent.type == WEKEY && lastevent.un.key == '\33')
|
||||
cw->wflags |= FLMAP_SKIP;
|
||||
}
|
||||
if (!scrollmsg) {
|
||||
amii_curs(WIN_MESSAGE, 1, 0);
|
||||
amii_cl_end(cw, cw->curx);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
outsubstr(cw, str, len, fudge)
|
||||
register struct amii_WinDesc *cw;
|
||||
char *str;
|
||||
int len;
|
||||
int fudge;
|
||||
{
|
||||
struct Window *w = cw->win;
|
||||
|
||||
if (cw->curx) {
|
||||
/* Check if this string and --more-- fit, if not,
|
||||
* then put out --more-- and wait for a key.
|
||||
*/
|
||||
if ((len + fudge) + cw->curx >= cw->cols) {
|
||||
if (!scrollmsg)
|
||||
outmore(cw);
|
||||
} else {
|
||||
/* Otherwise, move and put out a blank separator */
|
||||
Text(w->RPort, spaces, 1);
|
||||
cw->curx += 1;
|
||||
}
|
||||
}
|
||||
|
||||
Text(w->RPort, str, len);
|
||||
}
|
||||
|
||||
/* Put a graphics character onto the screen */
|
||||
|
||||
void
|
||||
amii_putsym(st, i, y, c)
|
||||
winid st;
|
||||
int i, y;
|
||||
CHAR_P c;
|
||||
{
|
||||
amii_curs(st, i, y);
|
||||
Text(amii_wins[st]->win->RPort, &c, 1);
|
||||
}
|
||||
|
||||
/* Add to the last line in the message window */
|
||||
|
||||
void
|
||||
amii_addtopl(s)
|
||||
const char *s;
|
||||
{
|
||||
register struct amii_WinDesc *cw = amii_wins[WIN_MESSAGE];
|
||||
|
||||
while (*s) {
|
||||
if (cw->curx == cw->cols - 1)
|
||||
amii_putstr(WIN_MESSAGE, 0, "");
|
||||
amii_putsym(WIN_MESSAGE, cw->curx + 1, amii_msgborder(cw->win), *s++);
|
||||
cw->curx++;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
TextSpaces(rp, nr)
|
||||
struct RastPort *rp;
|
||||
int nr;
|
||||
{
|
||||
if (nr < 1)
|
||||
return;
|
||||
|
||||
while (nr > sizeof(spaces) - 1) {
|
||||
Text(rp, spaces, (long) sizeof(spaces) - 1);
|
||||
nr -= sizeof(spaces) - 1;
|
||||
}
|
||||
if (nr > 0)
|
||||
Text(rp, spaces, (long) nr);
|
||||
}
|
||||
|
||||
void
|
||||
amii_remember_topl()
|
||||
{
|
||||
/* ignore for now. I think this will be done automatically by
|
||||
* the code writing to the message window, but I could be wrong.
|
||||
*/
|
||||
}
|
||||
|
||||
int
|
||||
amii_doprev_message()
|
||||
{
|
||||
struct amii_WinDesc *cw;
|
||||
struct Window *w;
|
||||
char *str;
|
||||
|
||||
if (WIN_MESSAGE == WIN_ERR || (cw = amii_wins[WIN_MESSAGE]) == NULL
|
||||
|| (w = cw->win) == NULL) {
|
||||
panic(winpanicstr, WIN_MESSAGE, "doprev_message");
|
||||
}
|
||||
|
||||
/* When an interlaced/tall screen is in use, the scroll bar will be there
|
||||
*/
|
||||
/* Or in some other cases as well */
|
||||
if (scrollmsg) {
|
||||
struct Gadget *gd;
|
||||
struct PropInfo *pip;
|
||||
int hidden, topidx, i, total, wheight;
|
||||
|
||||
for (gd = w->FirstGadget; gd && gd->GadgetID != 1;)
|
||||
gd = gd->NextGadget;
|
||||
|
||||
if (gd) {
|
||||
pip = (struct PropInfo *) gd->SpecialInfo;
|
||||
wheight = (w->Height - w->BorderTop - w->BorderBottom - 2)
|
||||
/ w->RPort->TxHeight;
|
||||
hidden = max(cw->maxrow - wheight, 0);
|
||||
topidx = (((ULONG) hidden * pip->VertPot) + (MAXPOT / 2)) >> 16;
|
||||
for (total = i = 0; i < cw->maxrow; ++i) {
|
||||
if (cw->data[i][1] != 0)
|
||||
++total;
|
||||
}
|
||||
|
||||
i = 0;
|
||||
topidx -= wheight / 4 + 1;
|
||||
if (topidx < 0)
|
||||
topidx = 0;
|
||||
SetPropInfo(w, &MsgScroll, wheight, total, topidx);
|
||||
DisplayData(WIN_MESSAGE, topidx);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
if (--cw->vwy < 0) {
|
||||
cw->maxcol = 0;
|
||||
DisplayBeep(NULL);
|
||||
str = "\0\0No more history saved...";
|
||||
} else
|
||||
str = cw->data[cw->vwy];
|
||||
|
||||
amii_cl_end(cw, 0);
|
||||
amii_curs(WIN_MESSAGE, 1, 0);
|
||||
amii_setdrawpens(amii_wins[WIN_MESSAGE]->win, NHW_MESSAGE);
|
||||
Text(w->RPort, str + SOFF, strlen(str + SOFF));
|
||||
cw->curx = cw->cols + 1;
|
||||
|
||||
return (0);
|
||||
}
|
||||
363
outdated/sys/amiga/xpm2iff.c
Normal file
363
outdated/sys/amiga/xpm2iff.c
Normal file
@@ -0,0 +1,363 @@
|
||||
/* NetHack 3.6 xpm2iff.c $NHDT-Date: 1432512795 2015/05/25 00:13:15 $ $NHDT-Branch: master $:$NHDT-Revision: 1.7 $ */
|
||||
/* Copyright (c) 1995 by Gregg Wonderly, Naperville, Illinois */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "config.h"
|
||||
#include "tile.h"
|
||||
|
||||
#include <dos/dos.h>
|
||||
#include <dos/dos.h>
|
||||
#include <dos/dosextens.h>
|
||||
#include <graphics/gfx.h>
|
||||
#include <graphics/gfxbase.h>
|
||||
#include <graphics/view.h>
|
||||
#include <libraries/iffparse.h>
|
||||
#include <libraries/dos.h>
|
||||
#ifndef _DCC
|
||||
#include <proto/iffparse.h>
|
||||
#include <proto/dos.h>
|
||||
#include <proto/exec.h>
|
||||
#endif
|
||||
|
||||
struct xpmscreen {
|
||||
int Width;
|
||||
int Height;
|
||||
int Colors;
|
||||
int ColorResolution;
|
||||
int Background;
|
||||
int AspectRatio;
|
||||
int Interlace;
|
||||
int BytesPerRow;
|
||||
} XpmScreen;
|
||||
|
||||
/* translation table from xpm characters to RGB and colormap slots */
|
||||
struct Ttable {
|
||||
char flag;
|
||||
char r, g, b;
|
||||
int slot; /* output colortable index */
|
||||
} ttable[256];
|
||||
|
||||
pixval ColorMap[3][MAXCOLORMAPSIZE];
|
||||
int colorsinmap;
|
||||
|
||||
/*
|
||||
* We are using a hybrid form of our own design which we call a BMAP (for
|
||||
* bitmap) form. It is an ILBM with the bitmaps already deinterleaved,
|
||||
* completely uncompressed.
|
||||
* This speeds the loading of the images from the games point of view because
|
||||
* it
|
||||
* does not have to deinterleave and uncompress them.
|
||||
*/
|
||||
#define ID_BMAP MAKE_ID('B', 'M', 'A', 'P') /* instead of ILBM */
|
||||
#define ID_BMHD MAKE_ID('B', 'M', 'H', 'D') /* Same as ILBM */
|
||||
#define ID_CAMG MAKE_ID('C', 'A', 'M', 'G') /* Same as ILBM */
|
||||
#define ID_CMAP MAKE_ID('C', 'M', 'A', 'P') /* Same as ILBM */
|
||||
#define ID_PDAT \
|
||||
MAKE_ID('P', 'D', 'A', 'T') /* Extra data describing plane \
|
||||
* size due to graphics.library \
|
||||
* rounding requirements. \
|
||||
*/
|
||||
#define ID_PLNE MAKE_ID('P', 'L', 'N', 'E') /* The planes of the image */
|
||||
|
||||
int nplanes;
|
||||
|
||||
/* BMHD from IFF documentation */
|
||||
typedef struct {
|
||||
UWORD w, h;
|
||||
WORD x, y;
|
||||
UBYTE nPlanes;
|
||||
UBYTE masking;
|
||||
UBYTE compression;
|
||||
UBYTE reserved1;
|
||||
UWORD transparentColor;
|
||||
UBYTE xAspect, yAspect;
|
||||
WORD pageWidth, pageHeight;
|
||||
} BitMapHeader;
|
||||
|
||||
typedef struct {
|
||||
UBYTE r, g, b;
|
||||
} AmiColorMap;
|
||||
|
||||
pixel pixels[TILE_Y][TILE_X];
|
||||
AmiColorMap *cmap;
|
||||
|
||||
void
|
||||
error(char *str)
|
||||
{
|
||||
fprintf(stderr, "ERROR: %s\n", str);
|
||||
}
|
||||
|
||||
char **planes;
|
||||
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int colors;
|
||||
struct {
|
||||
long nplanes;
|
||||
long pbytes;
|
||||
long across;
|
||||
long down;
|
||||
long npics;
|
||||
long xsize;
|
||||
long ysize;
|
||||
} pdat;
|
||||
long pbytes; /* Bytes of data in a plane */
|
||||
int i, cnt;
|
||||
BitMapHeader bmhd;
|
||||
struct IFFHandle *iff;
|
||||
long camg = HIRES | LACE;
|
||||
int tiles = 0;
|
||||
int index;
|
||||
|
||||
#if defined(_DCC) || defined(__GNUC__)
|
||||
IFFParseBase = OpenLibrary("iffparse.library", 0);
|
||||
if (!IFFParseBase) {
|
||||
error("unable to open iffparse.library");
|
||||
exit(1);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (fopen_xpm_file(argv[1], "r") != TRUE) {
|
||||
perror(argv[1]);
|
||||
return (1);
|
||||
}
|
||||
|
||||
nplanes = 0;
|
||||
i = XpmScreen.Colors - 1;
|
||||
while (i != 0) {
|
||||
nplanes++;
|
||||
i >>= 1;
|
||||
}
|
||||
|
||||
planes = malloc(nplanes * sizeof(char *));
|
||||
if (planes == 0) {
|
||||
error("can not allocate planes pointer");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
XpmScreen.BytesPerRow = ((XpmScreen.Width + 15) / 16) * 2;
|
||||
pbytes = XpmScreen.BytesPerRow * XpmScreen.Height;
|
||||
for (i = 0; i < nplanes; ++i) {
|
||||
planes[i] = malloc(pbytes);
|
||||
if (planes[i] == 0) {
|
||||
error("can not allocate planes pointer");
|
||||
exit(1);
|
||||
}
|
||||
memset(planes[i], 0, pbytes);
|
||||
}
|
||||
|
||||
iff = AllocIFF();
|
||||
if (!iff) {
|
||||
error("Can not allocate IFFHandle");
|
||||
return (1);
|
||||
}
|
||||
|
||||
iff->iff_Stream = Open(argv[2], MODE_NEWFILE);
|
||||
if (!iff->iff_Stream) {
|
||||
error("Can not open output file");
|
||||
return (1);
|
||||
}
|
||||
|
||||
InitIFFasDOS(iff);
|
||||
OpenIFF(iff, IFFF_WRITE);
|
||||
|
||||
PushChunk(iff, ID_BMAP, ID_FORM, IFFSIZE_UNKNOWN);
|
||||
|
||||
bmhd.w = XpmScreen.Width;
|
||||
bmhd.h = XpmScreen.Height;
|
||||
bmhd.x = 0;
|
||||
bmhd.y = 0;
|
||||
bmhd.nPlanes = nplanes;
|
||||
bmhd.masking = 0;
|
||||
bmhd.compression = 0;
|
||||
bmhd.reserved1 = 0;
|
||||
bmhd.transparentColor = 0;
|
||||
bmhd.xAspect = 100;
|
||||
bmhd.yAspect = 100;
|
||||
bmhd.pageWidth = 0; /* not needed for this program */
|
||||
bmhd.pageHeight = 0; /* not needed for this program */
|
||||
|
||||
PushChunk(iff, ID_BMAP, ID_BMHD, sizeof(bmhd));
|
||||
WriteChunkBytes(iff, &bmhd, sizeof(bmhd));
|
||||
PopChunk(iff);
|
||||
|
||||
PushChunk(iff, ID_BMAP, ID_CAMG, sizeof(camg));
|
||||
WriteChunkBytes(iff, &camg, sizeof(camg));
|
||||
PopChunk(iff);
|
||||
|
||||
#define SCALE(x) (x)
|
||||
cmap = malloc((colors = (1L << nplanes)) * sizeof(AmiColorMap));
|
||||
if (cmap == 0) {
|
||||
error("Can't allocate color map");
|
||||
exit(1);
|
||||
}
|
||||
for (index = 0; index < 256; index++) {
|
||||
if (ttable[index].flag) {
|
||||
cmap[ttable[index].slot].r = SCALE(ttable[index].r);
|
||||
cmap[ttable[index].slot].g = SCALE(ttable[index].g);
|
||||
cmap[ttable[index].slot].b = SCALE(ttable[index].b);
|
||||
}
|
||||
}
|
||||
#undef SCALE
|
||||
|
||||
PushChunk(iff, ID_BMAP, ID_CMAP, IFFSIZE_UNKNOWN);
|
||||
WriteChunkBytes(iff, cmap, colors * sizeof(*cmap));
|
||||
PopChunk(iff);
|
||||
|
||||
conv_image();
|
||||
|
||||
pdat.nplanes = nplanes;
|
||||
pdat.pbytes = pbytes;
|
||||
pdat.xsize = XpmScreen.Width;
|
||||
pdat.ysize = XpmScreen.Height;
|
||||
pdat.across = 0;
|
||||
pdat.down = 0;
|
||||
pdat.npics = 1;
|
||||
|
||||
PushChunk(iff, ID_BMAP, ID_PDAT, IFFSIZE_UNKNOWN);
|
||||
WriteChunkBytes(iff, &pdat, sizeof(pdat));
|
||||
PopChunk(iff);
|
||||
|
||||
PushChunk(iff, ID_BMAP, ID_PLNE, IFFSIZE_UNKNOWN);
|
||||
for (i = 0; i < nplanes; ++i)
|
||||
WriteChunkBytes(iff, planes[i], pbytes);
|
||||
PopChunk(iff);
|
||||
|
||||
CloseIFF(iff);
|
||||
Close(iff->iff_Stream);
|
||||
FreeIFF(iff);
|
||||
|
||||
#if defined(_DCC) || defined(__GNUC__)
|
||||
CloseLibrary(IFFParseBase);
|
||||
#endif
|
||||
exit(0);
|
||||
}
|
||||
|
||||
#define SETBIT(Plane, Plane_offset, Col, Value) \
|
||||
if (Value) { \
|
||||
planes[Plane][Plane_offset + (Col / 8)] |= 1 << (7 - (Col & 7)); \
|
||||
}
|
||||
|
||||
conv_image()
|
||||
{
|
||||
int row, col, planeno;
|
||||
|
||||
for (row = 0; row < XpmScreen.Height; row++) {
|
||||
char *xb = xpmgetline();
|
||||
int plane_offset;
|
||||
if (xb == 0)
|
||||
return;
|
||||
plane_offset = row * XpmScreen.BytesPerRow;
|
||||
for (col = 0; col < XpmScreen.Width; col++) {
|
||||
int slot;
|
||||
int color = xb[col];
|
||||
if (!ttable[color].flag) {
|
||||
fprintf(stderr, "Bad image data\n");
|
||||
}
|
||||
slot = ttable[color].slot;
|
||||
for (planeno = 0; planeno < nplanes; planeno++) {
|
||||
SETBIT(planeno, plane_offset, col, slot & (1 << planeno));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
long *
|
||||
alloc(unsigned int n)
|
||||
{
|
||||
long *ret = malloc(n);
|
||||
if (!ret) {
|
||||
error("Can't allocate memory");
|
||||
exit(1);
|
||||
}
|
||||
return (ret);
|
||||
}
|
||||
|
||||
FILE *xpmfh = 0;
|
||||
char initbuf[200];
|
||||
char *xpmbuf = initbuf;
|
||||
|
||||
/* version 1. Reads the raw xpm file, NOT the compiled version. This is
|
||||
* not a particularly good idea but I don't have time to do the right thing
|
||||
* at this point, even if I was absolutely sure what that was. */
|
||||
fopen_xpm_file(const char *fn, const char *mode)
|
||||
{
|
||||
int temp;
|
||||
char *xb;
|
||||
if (strcmp(mode, "r"))
|
||||
return FALSE; /* no choice now */
|
||||
if (xpmfh)
|
||||
return FALSE; /* one file at a time */
|
||||
xpmfh = fopen(fn, mode);
|
||||
if (!xpmfh)
|
||||
return FALSE; /* I'm hard to please */
|
||||
|
||||
/* read the header */
|
||||
xb = xpmgetline();
|
||||
if (xb == 0)
|
||||
return FALSE;
|
||||
if (4 != sscanf(xb, "%d %d %d %d", &XpmScreen.Width, &XpmScreen.Height,
|
||||
&XpmScreen.Colors, &temp))
|
||||
return FALSE; /* bad header */
|
||||
/* replace the original buffer with one big enough for
|
||||
* the real data
|
||||
*/
|
||||
/* XXX */
|
||||
xpmbuf = malloc(XpmScreen.Width * 2);
|
||||
if (!xpmbuf) {
|
||||
error("Can't allocate line buffer");
|
||||
exit(1);
|
||||
}
|
||||
if (temp != 1)
|
||||
return FALSE; /* limitation of this code */
|
||||
|
||||
{
|
||||
/* read the colormap and translation table */
|
||||
int ccount = -1;
|
||||
while (ccount++ < (XpmScreen.Colors - 1)) {
|
||||
char index;
|
||||
int r, g, b;
|
||||
xb = xpmgetline();
|
||||
if (xb == 0)
|
||||
return FALSE;
|
||||
if (4 != sscanf(xb, "%c c #%2x%2x%2x", &index, &r, &g, &b)) {
|
||||
fprintf(stderr, "Bad color entry: %s\n", xb);
|
||||
return FALSE;
|
||||
}
|
||||
ttable[index].flag = 1; /* this color is valid */
|
||||
ttable[index].r = r;
|
||||
ttable[index].g = g;
|
||||
ttable[index].b = b;
|
||||
ttable[index].slot = ccount;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* This deserves better. Don't read it too closely - you'll get ill. */
|
||||
#define bufsz 2048
|
||||
char buf[bufsz];
|
||||
xpmgetline()
|
||||
{
|
||||
char *bp;
|
||||
do {
|
||||
if (fgets(buf, bufsz, xpmfh) == 0)
|
||||
return 0;
|
||||
} while (buf[0] != '"');
|
||||
/* strip off the trailing <",> if any */
|
||||
for (bp = buf; *bp; bp++)
|
||||
;
|
||||
bp--;
|
||||
while (isspace(*bp))
|
||||
bp--;
|
||||
if (*bp == ',')
|
||||
bp--;
|
||||
if (*bp == '"')
|
||||
bp--;
|
||||
bp++;
|
||||
*bp = '\0';
|
||||
|
||||
return &buf[1];
|
||||
}
|
||||
Reference in New Issue
Block a user