From 47aee91ef478ff11ae388f0b958be23a98bc6d31 Mon Sep 17 00:00:00 2001 From: Daveo Date: Tue, 29 Aug 2000 16:26:01 +0000 Subject: [PATCH] --- Utils/MkData/MkData.cpp | 591 +++++++++++ Utils/MkData/MkData.dsp | 97 ++ Utils/MkData/MkData.h | 86 ++ Utils/MkSpeech/MkSpeech.cpp | 413 ++++++++ Utils/MkSpeech/MkSpeech.dsp | 101 ++ Utils/banker/banker.dsp | 94 ++ Utils/banker/main.cpp | 399 ++++++++ Utils/parkgrab/VImage.cpp | 472 +++++++++ Utils/parkgrab/bmploader.cpp | 669 +++++++++++++ Utils/parkgrab/bmploader.h | 58 ++ Utils/parkgrab/cross.cpp | 158 +++ Utils/parkgrab/cross.h | 67 ++ Utils/parkgrab/grect.cpp | 138 +++ Utils/parkgrab/grect.h | 63 ++ Utils/parkgrab/main.cpp | 703 +++++++++++++ Utils/parkgrab/pak.cpp | 359 +++++++ Utils/parkgrab/pak.h | 61 ++ Utils/parkgrab/parkgrab.dsp | 154 +++ Utils/parkgrab/parkgrab.dsw | 33 + Utils/parkgrab/parkgrab.ncb | Bin 0 -> 115712 bytes Utils/parkgrab/sprset.cpp | 1314 +++++++++++++++++++++++++ Utils/parkgrab/sprset.h | 569 +++++++++++ Utils/parkgrab/tpage.cpp | 857 ++++++++++++++++ Utils/parkgrab/tpage.h | 260 +++++ Utils/parkgrab/vimage.h | 103 ++ Utils/transtext/kanjiclass.cpp | 1022 +++++++++++++++++++ Utils/transtext/kanjiclass.h | 97 ++ Utils/transtext/main.cpp | 299 ++++++ Utils/transtext/script.cpp | 336 +++++++ Utils/transtext/script.h | 95 ++ Utils/transtext/transtext.dsp | 108 ++ Utils/transtext/transtext.dsw | 29 + build/ccopt.mak | 60 ++ build/getuser.mak | 35 + build/globals.mak | 162 +++ build/lnk.mak | 88 ++ build/outdirs.mak | 43 + build/parse.mak | 288 ++++++ data/DataCache.scr | 703 +++++++++++++ data/translations/dut.dat | 9 + data/translations/ger.dat | 9 + data/translations/ita.dat | 9 + data/translations/swe.dat | 9 + data/translations/text.dat | 1046 ++++++++++++++++++++ tools/Banker.exe | Bin 0 -> 213047 bytes tools/MkData.exe | Bin 0 -> 61440 bytes tools/MkSpeech.exe | Bin 0 -> 49152 bytes tools/Perl/bin/GET | 505 ++++++++++ tools/Perl/bin/HEAD | 505 ++++++++++ tools/Perl/bin/POST | 505 ++++++++++ tools/Perl/bin/PerlCRT.dll | Bin 0 -> 277504 bytes tools/Perl/bin/PerlEz.dll | Bin 0 -> 56832 bytes tools/Perl/bin/PerlMsg.dll | Bin 0 -> 5120 bytes tools/Perl/bin/PerlSE.dll | Bin 0 -> 92160 bytes tools/Perl/bin/PerlSE.pl | Bin 0 -> 685 bytes tools/Perl/bin/a2p.exe | Bin 0 -> 89600 bytes tools/Perl/bin/lwp-download | 232 +++++ tools/Perl/bin/lwp-mirror | 104 ++ tools/Perl/bin/lwp-request | 505 ++++++++++ tools/Perl/bin/lwp-rget | 584 +++++++++++ tools/Perl/bin/p_uninst.dat | 17 + tools/Perl/bin/perl.exe | Bin 0 -> 44544 bytes tools/Perl/bin/perl5.00502.exe | Bin 0 -> 44544 bytes tools/Perl/bin/perlcore.dll | Bin 0 -> 519680 bytes tools/Perl/bin/perlglob.exe | Bin 0 -> 4096 bytes tools/Perl/bin/ppm.pl | 1108 +++++++++++++++++++++ tools/Perl/bin/uninstall.pl | 211 ++++ tools/Perl/pl/REP.PL | 120 +++ tools/Perl/pl/anim.pl | 94 ++ tools/Perl/pl/check.pl | 37 + tools/Perl/pl/checkdat.pl | 97 ++ tools/Perl/pl/dep.pl | 18 + tools/Perl/pl/features.pl | 60 ++ tools/Perl/pl/gfxmak.pl | 204 ++++ tools/Perl/pl/lang.pl | 147 +++ tools/Perl/pl/makeconf.pl | 25 + tools/Perl/pl/mkbig.pl | 42 + tools/Perl/pl/mkstr.pl | 48 + tools/Perl/pl/notused.pl | 22 + tools/Perl/pl/shops.pl | 64 ++ tools/Perl/pl/size.pl | 37 + tools/Perl/pl/sizes.pl | 51 + tools/Perl/pl/stats.pl | 96 ++ tools/Perl/pl/user.pl | 21 + tools/chkshare.exe | Bin 0 -> 98304 bytes tools/cygwin/a.exe | Bin 0 -> 18944 bytes tools/cygwin/addr2line.exe | Bin 0 -> 186880 bytes tools/cygwin/ar.exe | Bin 0 -> 184320 bytes tools/cygwin/as.exe | Bin 0 -> 336384 bytes tools/cygwin/awk.exe | Bin 0 -> 165888 bytes tools/cygwin/basename.exe | Bin 0 -> 18944 bytes tools/cygwin/bash.exe | Bin 0 -> 395264 bytes tools/cygwin/bashbug | 143 +++ tools/cygwin/bison.exe | Bin 0 -> 73728 bytes tools/cygwin/bunzip2.exe | Bin 0 -> 56320 bytes tools/cygwin/byacc.exe | Bin 0 -> 61440 bytes tools/cygwin/bzcat.exe | Bin 0 -> 56320 bytes tools/cygwin/bzip2.exe | Bin 0 -> 56320 bytes tools/cygwin/bzip2recover.exe | Bin 0 -> 7168 bytes tools/cygwin/c++.exe | Bin 0 -> 68608 bytes tools/cygwin/c++filt.exe | Bin 0 -> 30208 bytes tools/cygwin/cat.exe | Bin 0 -> 22016 bytes tools/cygwin/chgrp.exe | Bin 0 -> 23552 bytes tools/cygwin/chmod.exe | Bin 0 -> 24064 bytes tools/cygwin/chown.exe | Bin 0 -> 23552 bytes tools/cygwin/chroot.exe | Bin 0 -> 18944 bytes tools/cygwin/cksum.exe | Bin 0 -> 20480 bytes tools/cygwin/cmp.exe | Bin 0 -> 11776 bytes tools/cygwin/comm.exe | Bin 0 -> 21504 bytes tools/cygwin/cp.exe | Bin 0 -> 60928 bytes tools/cygwin/csplit.exe | Bin 0 -> 55296 bytes tools/cygwin/cut.exe | Bin 0 -> 24576 bytes tools/cygwin/cygcheck.exe | Bin 0 -> 40448 bytes tools/cygwin/cygpath.exe | Bin 0 -> 6144 bytes tools/cygwin/cygtclsh80.exe | Bin 0 -> 5120 bytes tools/cygwin/cygwish80.exe | Bin 0 -> 10240 bytes tools/cygwin/date.exe | Bin 0 -> 46080 bytes tools/cygwin/dd.exe | Bin 0 -> 26624 bytes tools/cygwin/df.exe | Bin 0 -> 26624 bytes tools/cygwin/diff.exe | Bin 0 -> 68608 bytes tools/cygwin/diff3.exe | Bin 0 -> 17920 bytes tools/cygwin/dir.exe | Bin 0 -> 53760 bytes tools/cygwin/dircolors.exe | Bin 0 -> 28160 bytes tools/cygwin/dirname.exe | Bin 0 -> 18944 bytes tools/cygwin/dlltool.exe | Bin 0 -> 221184 bytes tools/cygwin/dllwrap.exe | Bin 0 -> 20992 bytes tools/cygwin/du.exe | Bin 0 -> 26112 bytes tools/cygwin/echo.exe | Bin 0 -> 19456 bytes tools/cygwin/egrep.exe | Bin 0 -> 82944 bytes tools/cygwin/env.exe | Bin 0 -> 19456 bytes tools/cygwin/expand.exe | Bin 0 -> 20992 bytes tools/cygwin/expect.exe | Bin 0 -> 101888 bytes tools/cygwin/expr.exe | Bin 0 -> 51200 bytes tools/cygwin/factor.exe | Bin 0 -> 22016 bytes tools/cygwin/false | 24 + tools/cygwin/fgrep.exe | Bin 0 -> 82944 bytes tools/cygwin/find.exe | Bin 0 -> 53248 bytes tools/cygwin/flex++.exe | Bin 0 -> 144896 bytes tools/cygwin/flex.exe | Bin 0 -> 144896 bytes tools/cygwin/fmt.exe | Bin 0 -> 25088 bytes tools/cygwin/fold.exe | Bin 0 -> 21504 bytes tools/cygwin/g++.exe | Bin 0 -> 68608 bytes tools/cygwin/gasp.exe | Bin 0 -> 56320 bytes tools/cygwin/gawk.exe | Bin 0 -> 165888 bytes tools/cygwin/gcc.exe | Bin 0 -> 67072 bytes tools/cygwin/gcov.exe | Bin 0 -> 14848 bytes tools/cygwin/gdb.exe | Bin 0 -> 982528 bytes tools/cygwin/grep.exe | Bin 0 -> 82944 bytes tools/cygwin/groups | 53 + tools/cygwin/gunzip.exe | Bin 0 -> 48640 bytes tools/cygwin/gzexe | 151 +++ tools/cygwin/gzip.exe | Bin 0 -> 48640 bytes tools/cygwin/head.exe | Bin 0 -> 21504 bytes tools/cygwin/hostname.exe | Bin 0 -> 19456 bytes tools/cygwin/i586-cygwin32-gcc.exe | Bin 0 -> 67072 bytes tools/cygwin/id.exe | Bin 0 -> 22528 bytes tools/cygwin/igawk | 130 +++ tools/cygwin/install.exe | Bin 0 -> 28672 bytes tools/cygwin/itcl_sh.exe | Bin 0 -> 34304 bytes tools/cygwin/itcl_wish.exe | Bin 0 -> 34816 bytes tools/cygwin/join.exe | Bin 0 -> 28672 bytes tools/cygwin/kill.exe | Bin 0 -> 4096 bytes tools/cygwin/ld.exe | Bin 0 -> 320000 bytes tools/cygwin/less.exe | Bin 0 -> 77824 bytes tools/cygwin/lessecho.exe | Bin 0 -> 4096 bytes tools/cygwin/lesskey.exe | Bin 0 -> 7680 bytes tools/cygwin/ln.exe | Bin 0 -> 50688 bytes tools/cygwin/locate.exe | Bin 0 -> 11264 bytes tools/cygwin/logname.exe | Bin 0 -> 17920 bytes tools/cygwin/ls.exe | Bin 0 -> 53760 bytes tools/cygwin/m4.exe | Bin 0 -> 79360 bytes tools/cygwin/make.exe | Bin 0 -> 111104 bytes tools/cygwin/makeinfo | 24 + tools/cygwin/md5sum.exe | Bin 0 -> 28672 bytes tools/cygwin/mkdir.exe | Bin 0 -> 22016 bytes tools/cygwin/mkfifo.exe | Bin 0 -> 19968 bytes tools/cygwin/mkgroup.exe | Bin 0 -> 5632 bytes tools/cygwin/mknod.exe | Bin 0 -> 22528 bytes tools/cygwin/mkpasswd.exe | Bin 0 -> 6656 bytes tools/cygwin/mount.exe | Bin 0 -> 4608 bytes tools/cygwin/mv.exe | Bin 0 -> 51200 bytes tools/cygwin/nice.exe | Bin 0 -> 20480 bytes tools/cygwin/nl.exe | Bin 0 -> 51200 bytes tools/cygwin/nm.exe | Bin 0 -> 195072 bytes tools/cygwin/nohup | 75 ++ tools/cygwin/objcopy.exe | Bin 0 -> 314880 bytes tools/cygwin/objdump.exe | Bin 0 -> 347136 bytes tools/cygwin/od.exe | Bin 0 -> 37376 bytes tools/cygwin/paste.exe | Bin 0 -> 22528 bytes tools/cygwin/patch.exe | Bin 0 -> 57856 bytes tools/cygwin/pathchk.exe | Bin 0 -> 20992 bytes tools/cygwin/pr.exe | Bin 0 -> 35328 bytes tools/cygwin/printenv.exe | Bin 0 -> 18944 bytes tools/cygwin/printf.exe | Bin 0 -> 24576 bytes tools/cygwin/protoize.exe | Bin 0 -> 34816 bytes tools/cygwin/ps.exe | Bin 0 -> 12288 bytes tools/cygwin/pwd.exe | Bin 0 -> 18944 bytes tools/cygwin/ranlib.exe | Bin 0 -> 184320 bytes tools/cygwin/readelf.exe | Bin 0 -> 86016 bytes tools/cygwin/rm.exe | Bin 0 -> 49152 bytes tools/cygwin/rmdir.exe | Bin 0 -> 18944 bytes tools/cygwin/runtest | 117 +++ tools/cygwin/sdiff.exe | Bin 0 -> 15360 bytes tools/cygwin/sed.exe | Bin 0 -> 47616 bytes tools/cygwin/seq.exe | Bin 0 -> 28672 bytes tools/cygwin/sh.exe | Bin 0 -> 68608 bytes tools/cygwin/size.exe | Bin 0 -> 167936 bytes tools/cygwin/sleep.exe | Bin 0 -> 18944 bytes tools/cygwin/sort.exe | Bin 0 -> 39424 bytes tools/cygwin/split.exe | Bin 0 -> 23552 bytes tools/cygwin/strings.exe | Bin 0 -> 167424 bytes tools/cygwin/strip.exe | Bin 0 -> 314880 bytes tools/cygwin/stty.exe | Bin 0 -> 39936 bytes tools/cygwin/su.exe | Bin 0 -> 24064 bytes tools/cygwin/sum.exe | Bin 0 -> 19968 bytes tools/cygwin/sync.exe | Bin 0 -> 18432 bytes tools/cygwin/tac.exe | Bin 0 -> 48640 bytes tools/cygwin/tail.exe | Bin 0 -> 27648 bytes tools/cygwin/tar.exe | Bin 0 -> 124928 bytes tools/cygwin/tee.exe | Bin 0 -> 19968 bytes tools/cygwin/test.exe | Bin 0 -> 31232 bytes tools/cygwin/time.exe | Bin 0 -> 13824 bytes tools/cygwin/tix4180.exe | Bin 0 -> 7680 bytes tools/cygwin/tixindex | 66 ++ tools/cygwin/touch.exe | Bin 0 -> 35328 bytes tools/cygwin/tr.exe | Bin 0 -> 32256 bytes tools/cygwin/true | 24 + tools/cygwin/tty.exe | Bin 0 -> 18944 bytes tools/cygwin/umount.exe | Bin 0 -> 3072 bytes tools/cygwin/uname.exe | Bin 0 -> 19456 bytes tools/cygwin/unexpand.exe | Bin 0 -> 21504 bytes tools/cygwin/uniq.exe | Bin 0 -> 24576 bytes tools/cygwin/unprotoize.exe | Bin 0 -> 30720 bytes tools/cygwin/updatedb | 148 +++ tools/cygwin/users.exe | Bin 0 -> 19968 bytes tools/cygwin/vdir.exe | Bin 0 -> 53760 bytes tools/cygwin/wc.exe | Bin 0 -> 20992 bytes tools/cygwin/who.exe | Bin 0 -> 22528 bytes tools/cygwin/whoami.exe | Bin 0 -> 17920 bytes tools/cygwin/windres.exe | Bin 0 -> 250368 bytes tools/cygwin/xargs.exe | Bin 0 -> 12800 bytes tools/cygwin/yes.exe | Bin 0 -> 17920 bytes tools/cygwin/zcat.exe | Bin 0 -> 48640 bytes tools/cygwin/zcmp | 70 ++ tools/cygwin/zdiff | 70 ++ tools/cygwin/zforce | 42 + tools/cygwin/zgrep | 67 ++ tools/cygwin/zmore | 52 + tools/cygwin/znew | 146 +++ tools/glecho.exe | Bin 0 -> 16384 bytes tools/make.exe | Bin 0 -> 184320 bytes tools/mod/bin/RAW2VAGD.DLL | Bin 0 -> 178688 bytes tools/mod/bin/VABSPLIT.EXE | Bin 0 -> 29142 bytes tools/mod/bin/XM2PSX.EXE | Bin 0 -> 581120 bytes tools/mod/include/XMPLAY.H | 128 +++ tools/mod/lib/XMPLAY.LIB | Bin 0 -> 42098 bytes tools/objbodge.exe | Bin 0 -> 20480 bytes tools/parkgrab.exe | Bin 0 -> 241664 bytes tools/pdatool/PDATOOL.EXE | Bin 0 -> 1079296 bytes tools/psyq/bin/Blank.exe | Bin 0 -> 86082 bytes tools/psyq/bin/CDEXEC.CPE | Bin 0 -> 447 bytes tools/psyq/bin/CPE2BIN.EXE | Bin 0 -> 32121 bytes tools/psyq/bin/DBUGPSX.EXE | Bin 0 -> 149897 bytes tools/psyq/bin/DEXBIOS.COM | Bin 0 -> 13012 bytes tools/psyq/bin/DMPSX.EXE | Bin 0 -> 44032 bytes tools/psyq/bin/H25BIOS.COM | Bin 0 -> 8672 bytes tools/psyq/bin/MESS1.COM | Bin 0 -> 944 bytes tools/psyq/bin/MFR.EXE | Bin 0 -> 131584 bytes tools/psyq/bin/Psylib2.exe | Bin 0 -> 59904 bytes tools/psyq/bin/RESETPS.EXE | Bin 0 -> 2567 bytes tools/psyq/bin/RUN.EXE | Bin 0 -> 4654 bytes tools/psyq/bin/SELCD.CPE | Bin 0 -> 350 bytes tools/psyq/bin/SELEMU.CPE | Bin 0 -> 350 bytes tools/psyq/bin/SNPATCH.CPE | Bin 0 -> 247792 bytes tools/psyq/bin/SNPATCHJ.CPE | Bin 0 -> 247804 bytes tools/psyq/bin/SNPATCHW.CPE | Bin 0 -> 267834 bytes tools/psyq/bin/TESTMESS.COM | Bin 0 -> 336 bytes tools/psyq/bin/asmpsx.exe | Bin 0 -> 136192 bytes tools/psyq/bin/aspsx.exe | Bin 0 -> 90624 bytes tools/psyq/bin/ccpsx.exe | Bin 0 -> 137728 bytes tools/psyq/bin/cpe2exe.exe | Bin 0 -> 36864 bytes tools/psyq/bin/egcs/a.txt | 341 +++++++ tools/psyq/bin/egcs/cc1plpsx.exe | Bin 0 -> 2003968 bytes tools/psyq/bin/egcs/cc1psx.exe | Bin 0 -> 1584128 bytes tools/psyq/bin/egcs/cpppsx.exe | Bin 0 -> 124928 bytes tools/psyq/bin/egcs/sn.ini | 4 + tools/psyq/bin/gnu/cc1plpsx.exe | Bin 0 -> 1842688 bytes tools/psyq/bin/gnu/cc1psx.exe | Bin 0 -> 1447936 bytes tools/psyq/bin/gnu/cpppsx.exe | Bin 0 -> 116736 bytes tools/psyq/bin/gnu/sn.ini | 4 + tools/psyq/bin/psylib.exe | Bin 0 -> 100352 bytes tools/psyq/bin/slink.exe | Bin 0 -> 385088 bytes tools/psyq/bin/symmunge.exe | Bin 0 -> 100352 bytes tools/psyq/include/ABS.H | 24 + tools/psyq/include/ASM.H | 156 +++ tools/psyq/include/ASSERT.H | 23 + tools/psyq/include/CONVERT.H | 23 + tools/psyq/include/CTYPE.H | 49 + tools/psyq/include/FS.H | 103 ++ tools/psyq/include/GTEMAC.H | 358 +++++++ tools/psyq/include/GTENOM.H | 167 ++++ tools/psyq/include/GTEREG.H | 87 ++ tools/psyq/include/GTEREG_S.H | 87 ++ tools/psyq/include/INLINE_A.H | 233 +++++ tools/psyq/include/INLINE_C.H | 1450 +++++++++++++++++++++++++++ tools/psyq/include/INLINE_O.H | 1194 ++++++++++++++++++++++ tools/psyq/include/INLINE_S.H | 194 ++++ tools/psyq/include/KERNEL.H | 171 ++++ tools/psyq/include/LIBAPI.H | 134 +++ tools/psyq/include/LIBCD.H | 326 +++++++ tools/psyq/include/LIBCOMB.H | 67 ++ tools/psyq/include/LIBDS.H | 286 ++++++ tools/psyq/include/LIBETC.H | 81 ++ tools/psyq/include/LIBGPU.H | 824 ++++++++++++++++ tools/psyq/include/LIBGS.H | 1467 ++++++++++++++++++++++++++++ tools/psyq/include/LIBGTE.H | 766 +++++++++++++++ tools/psyq/include/LIBGUN.H | 25 + tools/psyq/include/LIBHMD.H | 1121 +++++++++++++++++++++ tools/psyq/include/LIBMATH.H | 44 + tools/psyq/include/LIBMCRD.H | 59 ++ tools/psyq/include/LIBMCX.H | 101 ++ tools/psyq/include/LIBPAD.H | 82 ++ tools/psyq/include/LIBPRESS.H | 73 ++ tools/psyq/include/LIBSIO.H | 79 ++ tools/psyq/include/LIBSN.H | 158 +++ tools/psyq/include/LIBSND.H | 508 ++++++++++ tools/psyq/include/LIBSPU.H | 552 +++++++++++ tools/psyq/include/LIBTAP.H | 25 + tools/psyq/include/LIMITS.H | 38 + tools/psyq/include/MALLOC.H | 41 + tools/psyq/include/MCGUI.H | 132 +++ tools/psyq/include/MEMORY.H | 44 + tools/psyq/include/PROFILE.H | 30 + tools/psyq/include/QSORT.H | 30 + tools/psyq/include/R3000.H | 244 +++++ tools/psyq/include/RAND.H | 22 + tools/psyq/include/ROMIO.H | 15 + tools/psyq/include/SETJMP.H | 40 + tools/psyq/include/STDARG.H | 27 + tools/psyq/include/STDDEF.H | 50 + tools/psyq/include/STDIO.H | 47 + tools/psyq/include/STDLIB.H | 30 + tools/psyq/include/STRING.H | 26 + tools/psyq/include/STRINGS.H | 52 + tools/psyq/include/SYS/ERRNO.H | 59 ++ tools/psyq/include/SYS/FCNTL.H | 25 + tools/psyq/include/SYS/FILE.H | 33 + tools/psyq/include/SYS/IOCTL.H | 44 + tools/psyq/include/SYS/TYPES.H | 80 ++ tools/psyq/lib/2MBYTE.OBJ | Bin 0 -> 591 bytes tools/psyq/lib/8MBYTE.OBJ | Bin 0 -> 591 bytes tools/psyq/lib/BootObj/MakeLib.bat | 2 + tools/psyq/lib/BootObj/Psylib2.exe | Bin 0 -> 59904 bytes tools/psyq/lib/BootObj/SNDEF.OBJ | Bin 0 -> 150 bytes tools/psyq/lib/BootObj/SNMAIN.OBJ | Bin 0 -> 1115 bytes tools/psyq/lib/BootObj/pure.obj | Bin 0 -> 193 bytes tools/psyq/lib/BootObj/snctors.obj | Bin 0 -> 329 bytes tools/psyq/lib/CMXboot.lib | Bin 0 -> 827 bytes tools/psyq/lib/LIBAPI.LIB | Bin 0 -> 22836 bytes tools/psyq/lib/LIBC.LIB | Bin 0 -> 14250 bytes tools/psyq/lib/LIBC2.LIB | Bin 0 -> 23443 bytes tools/psyq/lib/LIBCARD.LIB | Bin 0 -> 6148 bytes tools/psyq/lib/LIBCD.LIB | Bin 0 -> 53563 bytes tools/psyq/lib/LIBCHG_E.TXT | 141 +++ tools/psyq/lib/LIBCOMB.LIB | Bin 0 -> 9345 bytes tools/psyq/lib/LIBDS.LIB | Bin 0 -> 43582 bytes tools/psyq/lib/LIBETC.LIB | Bin 0 -> 13500 bytes tools/psyq/lib/LIBGPU.LIB | Bin 0 -> 71370 bytes tools/psyq/lib/LIBGS.LIB | Bin 0 -> 292660 bytes tools/psyq/lib/LIBGTE.LIB | Bin 0 -> 364068 bytes tools/psyq/lib/LIBGUN.LIB | Bin 0 -> 8203 bytes tools/psyq/lib/LIBHMD.LIB | Bin 0 -> 623564 bytes tools/psyq/lib/LIBMATH.LIB | Bin 0 -> 45563 bytes tools/psyq/lib/LIBMCRD.LIB | Bin 0 -> 27378 bytes tools/psyq/lib/LIBMCX.LIB | Bin 0 -> 38435 bytes tools/psyq/lib/LIBPAD.LIB | Bin 0 -> 39671 bytes tools/psyq/lib/LIBPRESS.LIB | Bin 0 -> 85916 bytes tools/psyq/lib/LIBSIO.LIB | Bin 0 -> 6741 bytes tools/psyq/lib/LIBSN.LIB | Bin 0 -> 32994 bytes tools/psyq/lib/LIBSND.LIB | Bin 0 -> 135054 bytes tools/psyq/lib/LIBSPU.LIB | Bin 0 -> 91916 bytes tools/psyq/lib/LIBTAP.LIB | Bin 0 -> 6720 bytes tools/psyq/lib/MCGUI.OBJ | Bin 0 -> 60110 bytes tools/psyq/lib/MCGUI_E.OBJ | Bin 0 -> 24976 bytes tools/psyq/lib/NOHEAP.OBJ | Bin 0 -> 1243 bytes tools/psyq/lib/NONE3.OBJ | Bin 0 -> 295 bytes tools/psyq/lib/NOPRINT.OBJ | Bin 0 -> 151 bytes tools/speakeasy.exe | Bin 0 -> 61440 bytes tools/transtext.exe | Bin 0 -> 352256 bytes tools/uname.exe | Bin 0 -> 36864 bytes tools/vagedit/ENCVAG.DLL | Bin 0 -> 152064 bytes tools/vagedit/README.TXT | 12 + tools/vagedit/VAGEDIT.EXE | Bin 0 -> 637952 bytes tools/vlc/include/VLC_BIT.H | 23 + tools/vlc/lib/VLC_BIT.O | Bin 0 -> 2109 bytes users/daveo/makefile | 15 + 396 files changed, 32003 insertions(+) create mode 100644 Utils/MkData/MkData.cpp create mode 100644 Utils/MkData/MkData.dsp create mode 100644 Utils/MkData/MkData.h create mode 100644 Utils/MkSpeech/MkSpeech.cpp create mode 100644 Utils/MkSpeech/MkSpeech.dsp create mode 100644 Utils/banker/banker.dsp create mode 100644 Utils/banker/main.cpp create mode 100644 Utils/parkgrab/VImage.cpp create mode 100644 Utils/parkgrab/bmploader.cpp create mode 100644 Utils/parkgrab/bmploader.h create mode 100644 Utils/parkgrab/cross.cpp create mode 100644 Utils/parkgrab/cross.h create mode 100644 Utils/parkgrab/grect.cpp create mode 100644 Utils/parkgrab/grect.h create mode 100644 Utils/parkgrab/main.cpp create mode 100644 Utils/parkgrab/pak.cpp create mode 100644 Utils/parkgrab/pak.h create mode 100644 Utils/parkgrab/parkgrab.dsp create mode 100644 Utils/parkgrab/parkgrab.dsw create mode 100644 Utils/parkgrab/parkgrab.ncb create mode 100644 Utils/parkgrab/sprset.cpp create mode 100644 Utils/parkgrab/sprset.h create mode 100644 Utils/parkgrab/tpage.cpp create mode 100644 Utils/parkgrab/tpage.h create mode 100644 Utils/parkgrab/vimage.h create mode 100644 Utils/transtext/kanjiclass.cpp create mode 100644 Utils/transtext/kanjiclass.h create mode 100644 Utils/transtext/main.cpp create mode 100644 Utils/transtext/script.cpp create mode 100644 Utils/transtext/script.h create mode 100644 Utils/transtext/transtext.dsp create mode 100644 Utils/transtext/transtext.dsw create mode 100644 build/ccopt.mak create mode 100644 build/getuser.mak create mode 100644 build/globals.mak create mode 100644 build/lnk.mak create mode 100644 build/outdirs.mak create mode 100644 build/parse.mak create mode 100644 data/DataCache.scr create mode 100644 data/translations/dut.dat create mode 100644 data/translations/ger.dat create mode 100644 data/translations/ita.dat create mode 100644 data/translations/swe.dat create mode 100644 data/translations/text.dat create mode 100644 tools/Banker.exe create mode 100644 tools/MkData.exe create mode 100644 tools/MkSpeech.exe create mode 100644 tools/Perl/bin/GET create mode 100644 tools/Perl/bin/HEAD create mode 100644 tools/Perl/bin/POST create mode 100644 tools/Perl/bin/PerlCRT.dll create mode 100644 tools/Perl/bin/PerlEz.dll create mode 100644 tools/Perl/bin/PerlMsg.dll create mode 100644 tools/Perl/bin/PerlSE.dll create mode 100644 tools/Perl/bin/PerlSE.pl create mode 100644 tools/Perl/bin/a2p.exe create mode 100644 tools/Perl/bin/lwp-download create mode 100644 tools/Perl/bin/lwp-mirror create mode 100644 tools/Perl/bin/lwp-request create mode 100644 tools/Perl/bin/lwp-rget create mode 100644 tools/Perl/bin/p_uninst.dat create mode 100644 tools/Perl/bin/perl.exe create mode 100644 tools/Perl/bin/perl5.00502.exe create mode 100644 tools/Perl/bin/perlcore.dll create mode 100644 tools/Perl/bin/perlglob.exe create mode 100644 tools/Perl/bin/ppm.pl create mode 100644 tools/Perl/bin/uninstall.pl create mode 100644 tools/Perl/pl/REP.PL create mode 100644 tools/Perl/pl/anim.pl create mode 100644 tools/Perl/pl/check.pl create mode 100644 tools/Perl/pl/checkdat.pl create mode 100644 tools/Perl/pl/dep.pl create mode 100644 tools/Perl/pl/features.pl create mode 100644 tools/Perl/pl/gfxmak.pl create mode 100644 tools/Perl/pl/lang.pl create mode 100644 tools/Perl/pl/makeconf.pl create mode 100644 tools/Perl/pl/mkbig.pl create mode 100644 tools/Perl/pl/mkstr.pl create mode 100644 tools/Perl/pl/notused.pl create mode 100644 tools/Perl/pl/shops.pl create mode 100644 tools/Perl/pl/size.pl create mode 100644 tools/Perl/pl/sizes.pl create mode 100644 tools/Perl/pl/stats.pl create mode 100644 tools/Perl/pl/user.pl create mode 100644 tools/chkshare.exe create mode 100644 tools/cygwin/a.exe create mode 100644 tools/cygwin/addr2line.exe create mode 100644 tools/cygwin/ar.exe create mode 100644 tools/cygwin/as.exe create mode 100644 tools/cygwin/awk.exe create mode 100644 tools/cygwin/basename.exe create mode 100644 tools/cygwin/bash.exe create mode 100644 tools/cygwin/bashbug create mode 100644 tools/cygwin/bison.exe create mode 100644 tools/cygwin/bunzip2.exe create mode 100644 tools/cygwin/byacc.exe create mode 100644 tools/cygwin/bzcat.exe create mode 100644 tools/cygwin/bzip2.exe create mode 100644 tools/cygwin/bzip2recover.exe create mode 100644 tools/cygwin/c++.exe create mode 100644 tools/cygwin/c++filt.exe create mode 100644 tools/cygwin/cat.exe create mode 100644 tools/cygwin/chgrp.exe create mode 100644 tools/cygwin/chmod.exe create mode 100644 tools/cygwin/chown.exe create mode 100644 tools/cygwin/chroot.exe create mode 100644 tools/cygwin/cksum.exe create mode 100644 tools/cygwin/cmp.exe create mode 100644 tools/cygwin/comm.exe create mode 100644 tools/cygwin/cp.exe create mode 100644 tools/cygwin/csplit.exe create mode 100644 tools/cygwin/cut.exe create mode 100644 tools/cygwin/cygcheck.exe create mode 100644 tools/cygwin/cygpath.exe create mode 100644 tools/cygwin/cygtclsh80.exe create mode 100644 tools/cygwin/cygwish80.exe create mode 100644 tools/cygwin/date.exe create mode 100644 tools/cygwin/dd.exe create mode 100644 tools/cygwin/df.exe create mode 100644 tools/cygwin/diff.exe create mode 100644 tools/cygwin/diff3.exe create mode 100644 tools/cygwin/dir.exe create mode 100644 tools/cygwin/dircolors.exe create mode 100644 tools/cygwin/dirname.exe create mode 100644 tools/cygwin/dlltool.exe create mode 100644 tools/cygwin/dllwrap.exe create mode 100644 tools/cygwin/du.exe create mode 100644 tools/cygwin/echo.exe create mode 100644 tools/cygwin/egrep.exe create mode 100644 tools/cygwin/env.exe create mode 100644 tools/cygwin/expand.exe create mode 100644 tools/cygwin/expect.exe create mode 100644 tools/cygwin/expr.exe create mode 100644 tools/cygwin/factor.exe create mode 100644 tools/cygwin/false create mode 100644 tools/cygwin/fgrep.exe create mode 100644 tools/cygwin/find.exe create mode 100644 tools/cygwin/flex++.exe create mode 100644 tools/cygwin/flex.exe create mode 100644 tools/cygwin/fmt.exe create mode 100644 tools/cygwin/fold.exe create mode 100644 tools/cygwin/g++.exe create mode 100644 tools/cygwin/gasp.exe create mode 100644 tools/cygwin/gawk.exe create mode 100644 tools/cygwin/gcc.exe create mode 100644 tools/cygwin/gcov.exe create mode 100644 tools/cygwin/gdb.exe create mode 100644 tools/cygwin/grep.exe create mode 100644 tools/cygwin/groups create mode 100644 tools/cygwin/gunzip.exe create mode 100644 tools/cygwin/gzexe create mode 100644 tools/cygwin/gzip.exe create mode 100644 tools/cygwin/head.exe create mode 100644 tools/cygwin/hostname.exe create mode 100644 tools/cygwin/i586-cygwin32-gcc.exe create mode 100644 tools/cygwin/id.exe create mode 100644 tools/cygwin/igawk create mode 100644 tools/cygwin/install.exe create mode 100644 tools/cygwin/itcl_sh.exe create mode 100644 tools/cygwin/itcl_wish.exe create mode 100644 tools/cygwin/join.exe create mode 100644 tools/cygwin/kill.exe create mode 100644 tools/cygwin/ld.exe create mode 100644 tools/cygwin/less.exe create mode 100644 tools/cygwin/lessecho.exe create mode 100644 tools/cygwin/lesskey.exe create mode 100644 tools/cygwin/ln.exe create mode 100644 tools/cygwin/locate.exe create mode 100644 tools/cygwin/logname.exe create mode 100644 tools/cygwin/ls.exe create mode 100644 tools/cygwin/m4.exe create mode 100644 tools/cygwin/make.exe create mode 100644 tools/cygwin/makeinfo create mode 100644 tools/cygwin/md5sum.exe create mode 100644 tools/cygwin/mkdir.exe create mode 100644 tools/cygwin/mkfifo.exe create mode 100644 tools/cygwin/mkgroup.exe create mode 100644 tools/cygwin/mknod.exe create mode 100644 tools/cygwin/mkpasswd.exe create mode 100644 tools/cygwin/mount.exe create mode 100644 tools/cygwin/mv.exe create mode 100644 tools/cygwin/nice.exe create mode 100644 tools/cygwin/nl.exe create mode 100644 tools/cygwin/nm.exe create mode 100644 tools/cygwin/nohup create mode 100644 tools/cygwin/objcopy.exe create mode 100644 tools/cygwin/objdump.exe create mode 100644 tools/cygwin/od.exe create mode 100644 tools/cygwin/paste.exe create mode 100644 tools/cygwin/patch.exe create mode 100644 tools/cygwin/pathchk.exe create mode 100644 tools/cygwin/pr.exe create mode 100644 tools/cygwin/printenv.exe create mode 100644 tools/cygwin/printf.exe create mode 100644 tools/cygwin/protoize.exe create mode 100644 tools/cygwin/ps.exe create mode 100644 tools/cygwin/pwd.exe create mode 100644 tools/cygwin/ranlib.exe create mode 100644 tools/cygwin/readelf.exe create mode 100644 tools/cygwin/rm.exe create mode 100644 tools/cygwin/rmdir.exe create mode 100644 tools/cygwin/runtest create mode 100644 tools/cygwin/sdiff.exe create mode 100644 tools/cygwin/sed.exe create mode 100644 tools/cygwin/seq.exe create mode 100644 tools/cygwin/sh.exe create mode 100644 tools/cygwin/size.exe create mode 100644 tools/cygwin/sleep.exe create mode 100644 tools/cygwin/sort.exe create mode 100644 tools/cygwin/split.exe create mode 100644 tools/cygwin/strings.exe create mode 100644 tools/cygwin/strip.exe create mode 100644 tools/cygwin/stty.exe create mode 100644 tools/cygwin/su.exe create mode 100644 tools/cygwin/sum.exe create mode 100644 tools/cygwin/sync.exe create mode 100644 tools/cygwin/tac.exe create mode 100644 tools/cygwin/tail.exe create mode 100644 tools/cygwin/tar.exe create mode 100644 tools/cygwin/tee.exe create mode 100644 tools/cygwin/test.exe create mode 100644 tools/cygwin/time.exe create mode 100644 tools/cygwin/tix4180.exe create mode 100644 tools/cygwin/tixindex create mode 100644 tools/cygwin/touch.exe create mode 100644 tools/cygwin/tr.exe create mode 100644 tools/cygwin/true create mode 100644 tools/cygwin/tty.exe create mode 100644 tools/cygwin/umount.exe create mode 100644 tools/cygwin/uname.exe create mode 100644 tools/cygwin/unexpand.exe create mode 100644 tools/cygwin/uniq.exe create mode 100644 tools/cygwin/unprotoize.exe create mode 100644 tools/cygwin/updatedb create mode 100644 tools/cygwin/users.exe create mode 100644 tools/cygwin/vdir.exe create mode 100644 tools/cygwin/wc.exe create mode 100644 tools/cygwin/who.exe create mode 100644 tools/cygwin/whoami.exe create mode 100644 tools/cygwin/windres.exe create mode 100644 tools/cygwin/xargs.exe create mode 100644 tools/cygwin/yes.exe create mode 100644 tools/cygwin/zcat.exe create mode 100644 tools/cygwin/zcmp create mode 100644 tools/cygwin/zdiff create mode 100644 tools/cygwin/zforce create mode 100644 tools/cygwin/zgrep create mode 100644 tools/cygwin/zmore create mode 100644 tools/cygwin/znew create mode 100644 tools/glecho.exe create mode 100644 tools/make.exe create mode 100644 tools/mod/bin/RAW2VAGD.DLL create mode 100644 tools/mod/bin/VABSPLIT.EXE create mode 100644 tools/mod/bin/XM2PSX.EXE create mode 100644 tools/mod/include/XMPLAY.H create mode 100644 tools/mod/lib/XMPLAY.LIB create mode 100644 tools/objbodge.exe create mode 100644 tools/parkgrab.exe create mode 100644 tools/pdatool/PDATOOL.EXE create mode 100644 tools/psyq/bin/Blank.exe create mode 100644 tools/psyq/bin/CDEXEC.CPE create mode 100644 tools/psyq/bin/CPE2BIN.EXE create mode 100644 tools/psyq/bin/DBUGPSX.EXE create mode 100644 tools/psyq/bin/DEXBIOS.COM create mode 100644 tools/psyq/bin/DMPSX.EXE create mode 100644 tools/psyq/bin/H25BIOS.COM create mode 100644 tools/psyq/bin/MESS1.COM create mode 100644 tools/psyq/bin/MFR.EXE create mode 100644 tools/psyq/bin/Psylib2.exe create mode 100644 tools/psyq/bin/RESETPS.EXE create mode 100644 tools/psyq/bin/RUN.EXE create mode 100644 tools/psyq/bin/SELCD.CPE create mode 100644 tools/psyq/bin/SELEMU.CPE create mode 100644 tools/psyq/bin/SNPATCH.CPE create mode 100644 tools/psyq/bin/SNPATCHJ.CPE create mode 100644 tools/psyq/bin/SNPATCHW.CPE create mode 100644 tools/psyq/bin/TESTMESS.COM create mode 100644 tools/psyq/bin/asmpsx.exe create mode 100644 tools/psyq/bin/aspsx.exe create mode 100644 tools/psyq/bin/ccpsx.exe create mode 100644 tools/psyq/bin/cpe2exe.exe create mode 100644 tools/psyq/bin/egcs/a.txt create mode 100644 tools/psyq/bin/egcs/cc1plpsx.exe create mode 100644 tools/psyq/bin/egcs/cc1psx.exe create mode 100644 tools/psyq/bin/egcs/cpppsx.exe create mode 100644 tools/psyq/bin/egcs/sn.ini create mode 100644 tools/psyq/bin/gnu/cc1plpsx.exe create mode 100644 tools/psyq/bin/gnu/cc1psx.exe create mode 100644 tools/psyq/bin/gnu/cpppsx.exe create mode 100644 tools/psyq/bin/gnu/sn.ini create mode 100644 tools/psyq/bin/psylib.exe create mode 100644 tools/psyq/bin/slink.exe create mode 100644 tools/psyq/bin/symmunge.exe create mode 100644 tools/psyq/include/ABS.H create mode 100644 tools/psyq/include/ASM.H create mode 100644 tools/psyq/include/ASSERT.H create mode 100644 tools/psyq/include/CONVERT.H create mode 100644 tools/psyq/include/CTYPE.H create mode 100644 tools/psyq/include/FS.H create mode 100644 tools/psyq/include/GTEMAC.H create mode 100644 tools/psyq/include/GTENOM.H create mode 100644 tools/psyq/include/GTEREG.H create mode 100644 tools/psyq/include/GTEREG_S.H create mode 100644 tools/psyq/include/INLINE_A.H create mode 100644 tools/psyq/include/INLINE_C.H create mode 100644 tools/psyq/include/INLINE_O.H create mode 100644 tools/psyq/include/INLINE_S.H create mode 100644 tools/psyq/include/KERNEL.H create mode 100644 tools/psyq/include/LIBAPI.H create mode 100644 tools/psyq/include/LIBCD.H create mode 100644 tools/psyq/include/LIBCOMB.H create mode 100644 tools/psyq/include/LIBDS.H create mode 100644 tools/psyq/include/LIBETC.H create mode 100644 tools/psyq/include/LIBGPU.H create mode 100644 tools/psyq/include/LIBGS.H create mode 100644 tools/psyq/include/LIBGTE.H create mode 100644 tools/psyq/include/LIBGUN.H create mode 100644 tools/psyq/include/LIBHMD.H create mode 100644 tools/psyq/include/LIBMATH.H create mode 100644 tools/psyq/include/LIBMCRD.H create mode 100644 tools/psyq/include/LIBMCX.H create mode 100644 tools/psyq/include/LIBPAD.H create mode 100644 tools/psyq/include/LIBPRESS.H create mode 100644 tools/psyq/include/LIBSIO.H create mode 100644 tools/psyq/include/LIBSN.H create mode 100644 tools/psyq/include/LIBSND.H create mode 100644 tools/psyq/include/LIBSPU.H create mode 100644 tools/psyq/include/LIBTAP.H create mode 100644 tools/psyq/include/LIMITS.H create mode 100644 tools/psyq/include/MALLOC.H create mode 100644 tools/psyq/include/MCGUI.H create mode 100644 tools/psyq/include/MEMORY.H create mode 100644 tools/psyq/include/PROFILE.H create mode 100644 tools/psyq/include/QSORT.H create mode 100644 tools/psyq/include/R3000.H create mode 100644 tools/psyq/include/RAND.H create mode 100644 tools/psyq/include/ROMIO.H create mode 100644 tools/psyq/include/SETJMP.H create mode 100644 tools/psyq/include/STDARG.H create mode 100644 tools/psyq/include/STDDEF.H create mode 100644 tools/psyq/include/STDIO.H create mode 100644 tools/psyq/include/STDLIB.H create mode 100644 tools/psyq/include/STRING.H create mode 100644 tools/psyq/include/STRINGS.H create mode 100644 tools/psyq/include/SYS/ERRNO.H create mode 100644 tools/psyq/include/SYS/FCNTL.H create mode 100644 tools/psyq/include/SYS/FILE.H create mode 100644 tools/psyq/include/SYS/IOCTL.H create mode 100644 tools/psyq/include/SYS/TYPES.H create mode 100644 tools/psyq/lib/2MBYTE.OBJ create mode 100644 tools/psyq/lib/8MBYTE.OBJ create mode 100644 tools/psyq/lib/BootObj/MakeLib.bat create mode 100644 tools/psyq/lib/BootObj/Psylib2.exe create mode 100644 tools/psyq/lib/BootObj/SNDEF.OBJ create mode 100644 tools/psyq/lib/BootObj/SNMAIN.OBJ create mode 100644 tools/psyq/lib/BootObj/pure.obj create mode 100644 tools/psyq/lib/BootObj/snctors.obj create mode 100644 tools/psyq/lib/CMXboot.lib create mode 100644 tools/psyq/lib/LIBAPI.LIB create mode 100644 tools/psyq/lib/LIBC.LIB create mode 100644 tools/psyq/lib/LIBC2.LIB create mode 100644 tools/psyq/lib/LIBCARD.LIB create mode 100644 tools/psyq/lib/LIBCD.LIB create mode 100644 tools/psyq/lib/LIBCHG_E.TXT create mode 100644 tools/psyq/lib/LIBCOMB.LIB create mode 100644 tools/psyq/lib/LIBDS.LIB create mode 100644 tools/psyq/lib/LIBETC.LIB create mode 100644 tools/psyq/lib/LIBGPU.LIB create mode 100644 tools/psyq/lib/LIBGS.LIB create mode 100644 tools/psyq/lib/LIBGTE.LIB create mode 100644 tools/psyq/lib/LIBGUN.LIB create mode 100644 tools/psyq/lib/LIBHMD.LIB create mode 100644 tools/psyq/lib/LIBMATH.LIB create mode 100644 tools/psyq/lib/LIBMCRD.LIB create mode 100644 tools/psyq/lib/LIBMCX.LIB create mode 100644 tools/psyq/lib/LIBPAD.LIB create mode 100644 tools/psyq/lib/LIBPRESS.LIB create mode 100644 tools/psyq/lib/LIBSIO.LIB create mode 100644 tools/psyq/lib/LIBSN.LIB create mode 100644 tools/psyq/lib/LIBSND.LIB create mode 100644 tools/psyq/lib/LIBSPU.LIB create mode 100644 tools/psyq/lib/LIBTAP.LIB create mode 100644 tools/psyq/lib/MCGUI.OBJ create mode 100644 tools/psyq/lib/MCGUI_E.OBJ create mode 100644 tools/psyq/lib/NOHEAP.OBJ create mode 100644 tools/psyq/lib/NONE3.OBJ create mode 100644 tools/psyq/lib/NOPRINT.OBJ create mode 100644 tools/speakeasy.exe create mode 100644 tools/transtext.exe create mode 100644 tools/uname.exe create mode 100644 tools/vagedit/ENCVAG.DLL create mode 100644 tools/vagedit/README.TXT create mode 100644 tools/vagedit/VAGEDIT.EXE create mode 100644 tools/vlc/include/VLC_BIT.H create mode 100644 tools/vlc/lib/VLC_BIT.O create mode 100644 users/daveo/makefile diff --git a/Utils/MkData/MkData.cpp b/Utils/MkData/MkData.cpp new file mode 100644 index 000000000..f88d26d19 --- /dev/null +++ b/Utils/MkData/MkData.cpp @@ -0,0 +1,591 @@ +/************************/ +/*** DataFile Creator ***/ +/************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "Mkdata.h" + +using namespace std; + + +//*********************************************************************** +//*********************************************************************** +//*********************************************************************** +int DebugFlag=0; +int AlignSize=2048; +char *AlignBuffer; + +//*********************************************************************** +CBank Banks; +CFileList Files; +char *BaseDir=0; + +//*********************************************************************** + +static void app_debug_msg(const char * pszFmt,va_list args) +{ + char szBuf[256]; + vsprintf(szBuf,pszFmt,args); + + printf("%s\n",szBuf); +} + + +//****************************************************************** +//****************************************************************** + +void __cdecl DEBUG(const char * pszFmt,...) +{ + if (DebugFlag) + if (pszFmt) + { + va_list args; + va_start(args,pszFmt); + app_debug_msg(pszFmt,args); + va_end(args); + } +} + +void __cdecl FATAL(const char * pszFmt,...) +{ + if (pszFmt) + { + va_list args; + va_start(args,pszFmt); + app_debug_msg(pszFmt,args); + va_end(args); + } + exit(123); +} + +//****************************************************************** +char *LoadFileInMem(const char * FileName,int *OutSize) +{ +FILE *FileHandle; +char *Buffer; +int Size; + + FileHandle= fopen( FileName,"rb" ); + if(!FileHandle) + { + FATAL("ERROR : Could not open file %s\n",FileName); + } + else + { + fseek(FileHandle,0,SEEK_END); + Size=ftell(FileHandle); + fseek(FileHandle,0,SEEK_SET); + + if( (Buffer=(char*)malloc(Size))==NULL ) {printf("Out of memory.\n");exit(123);} + fread(Buffer, 1,Size,FileHandle); + fclose(FileHandle); + } + if (OutSize) *OutSize=Size; + return Buffer; +} + + +//****************************************************************** +static char s_illegalChars[] = "\\/!£$%^&*()+-=-:. "; +static int s_nbChars = sizeof(s_illegalChars); + +void convertIllegalChar( char *c ) +{ + for (int i=0;i=EndPtr) return; + switch (*Ptr) + { + case CHAR_COMMENT: + Ptr=ScriptComment(Ptr,EndPtr); + break; + case CHAR_STARTBANK: + Ptr=ScriptStartBank(Ptr,EndPtr); + break; + case CHAR_ENDBANK: + Ptr=ScriptEndBank(Ptr,EndPtr); + break; + default: + Ptr=ScriptFile(Ptr,EndPtr); + break; + } + } + free(Script); +} + +//*********************************************************************** +//*********************************************************************** +//*********************************************************************** +void ResetFAT(std::vector &FAT) +{ +int FATSize=Files.GetCount(); +int Loop; + + FAT.resize(FATSize); + for (Loop=0; Loop &FAT,int Align) +{ +int Pos=ftell(FileHandle); +int FATSize=Files.GetCount(); + + for (int Loop=0;Loop FAT; +sBank &ThisBank=Banks.GetBank(BankIdx); +int ThisListSize=ThisBank.FileList.size(); +int Loop; +long StartFilePos,EndFilePos; + +// reset FAT and write dummy FAT + ResetFAT(FAT); + ParentFAT.FilePos=WriteFAT(FileHandle,FAT,ThisBank.Align); + StartFilePos=ftell(FileHandle);; + +// Write files + + for (Loop=0; Loop FAT; +int FATSize=Files.GetCount(),Idx; + + FileHandle= fopen( Filename,"wb" ); + if(!FileHandle) FATAL( "Could not write %s", Filename); + ResetFAT(FAT); + WriteFAT(FileHandle,FAT,AlignSize); + for (Idx=0; Idx Scripts; +// Parse Input + for (int Loop=1;Loop +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=MkData - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "MkData.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "MkData.mak" CFG="MkData - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "MkData - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "MkData - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName ""$/PRLSR/utils/MkData", BLVAAAAA" +# PROP Scc_LocalPath "." +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "MkData - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x809 /d "NDEBUG" +# ADD RSC /l 0x809 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"../../tools/MkData.exe" + +!ELSEIF "$(CFG)" == "MkData - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD BASE RSC /l 0x809 /d "_DEBUG" +# ADD RSC /l 0x809 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "MkData - Win32 Release" +# Name "MkData - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\MkData.cpp +# End Source File +# Begin Source File + +SOURCE=.\MkData.h +# End Source File +# End Group +# End Target +# End Project diff --git a/Utils/MkData/MkData.h b/Utils/MkData/MkData.h new file mode 100644 index 000000000..a73812831 --- /dev/null +++ b/Utils/MkData/MkData.h @@ -0,0 +1,86 @@ +/************************/ +/*** DataFile Creator ***/ +/************************/ + +//*********************************************************************** +//*********************************************************************** +//*********************************************************************** +#define CHAR_COMMENT '#' +#define CHAR_TAB 0x09 +#define CHAR_EOL 0x0d +#define CHAR_SKIP '-' +#define CHAR_STARTBANK '{' +#define CHAR_ENDBANK '}' + +//*********************************************************************** +//*********************************************************************** +//*********************************************************************** +typedef signed char s8; +typedef signed short s16; +typedef signed long s32; + +//*********************************************************************** +//*********************************************************************** +//*********************************************************************** +struct sFAT +{ + s32 FilePos; + s32 FileSize; +}; + +struct sBankEntry +{ + int ListIdx; + int Pos; +}; + +struct sBank +{ + char Name[256]; + int Align; + std::vector FileList; +}; + +struct sFile +{ + char Filename[256]; + char ShortName[256]; + int Size; + char *Data; + int BankIdx; +}; + +//*********************************************************************** +class CFileList +{ +public: + CFileList(){}; + ~CFileList(); + int FindFileIdx(char *Filename); + int AddFile(char *Filename,int BankIdx=0); + int GetCount() {return(FileList.size());} + sFile &GetFile(int Idx) {return(FileList[Idx]);} + +private: + + std::vector FileList; +}; + +//*********************************************************************** +class CBank +{ +public: + void Start(char *Name,int Align=0); + void End(); + int FindEntry(int Idx); + void Add(char *Filename); + int GetCount() {return(BankList.size());} + sBank &GetBank(int Idx) {return(BankList[Idx]);} + int GetCurrentBankNo() {return(CurrentBank);} + +private: + int CurrentBank; + std::vector BankList; +}; + +//*********************************************************************** diff --git a/Utils/MkSpeech/MkSpeech.cpp b/Utils/MkSpeech/MkSpeech.cpp new file mode 100644 index 000000000..5ae30b845 --- /dev/null +++ b/Utils/MkSpeech/MkSpeech.cpp @@ -0,0 +1,413 @@ +/***********************/ +/*** Speech Compiler ***/ +/***********************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +//************************************************ +#define CHUNKSIZE 2336 // XA track size + +#define SPACE ' ' +#define MINUS '-' +#define COMMENT '#' +#define TAB 0x09 +#define EOL 0x0d +#define InFileEXT "Ixa" +#define OutFileEXT "XaB" +#define BANK_SHIFT 16 + +//************************************************ +struct sLang +{ + char *Dir; + char Prefix; +}; + +struct sInFile +{ + char Name[32]; + int Chunks; + int Offset; +}; + +//************************************************ +char *Script; +char *OutDir="",*ScriptFile=0; +int IncFileSet=0; +char IncludeFilename[256]; +int BankNo=0; + +char drive[_MAX_DRIVE]; +char dir[_MAX_DIR]; +char fname[_MAX_FNAME]; +char ext[_MAX_EXT]; + + +std::vector LangList; +std::vector FileList; + +//*********************************************************************** +//*********************************************************************** + +static void app_debug_msg(const char * pszFmt,va_list args) +{ + char szBuf[256]; + vsprintf(szBuf,pszFmt,args); + + printf("%s\n",szBuf); +} + + +//****************************************************************** +//****************************************************************** + +void __cdecl DEBUG(const char * pszFmt,...) +{ + if (pszFmt) + { + va_list args; + va_start(args,pszFmt); + app_debug_msg(pszFmt,args); + va_end(args); + } +} + +void __cdecl FATAL(const char * pszFmt,...) +{ + if (pszFmt) + { + va_list args; + va_start(args,pszFmt); + app_debug_msg(pszFmt,args); + va_end(args); + } + exit(123); +} + +//****************************************************************** + + + +char *LoadFileInMem(const char * pszName) +{ +HANDLE FileHandle; +DWORD SizeRead; +char *Buffer; +char TName[256]; +int Size; + + sprintf(TName,pszName); + + if( (FileHandle = CreateFile(TName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL)) == INVALID_HANDLE_VALUE ) + { + FATAL("ERROR : Could not open file %s.",TName); + return NULL; + } + else + { + Size = GetFileSize(FileHandle,NULL); + + if( (Buffer=(char*)malloc(Size))==NULL ) {printf("Out of memory.\n");exit(123);} + ReadFile(FileHandle,(void*)Buffer,Size,&SizeRead,NULL); + CloseHandle(FileHandle); + } + return Buffer; +} + + +//****************************************************************** + +int FindFileSize(const char * FileName) +{ +HANDLE FileHandle; +DWORD Size; +char TName[256]; + + sprintf(TName,FileName); + + if( (FileHandle = CreateFile(TName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL)) == INVALID_HANDLE_VALUE ) + { + FATAL("ERROR : Could not open file %s.",TName); + return (0); + } + else + { + Size = GetFileSize(FileHandle,NULL); + CloseHandle(FileHandle); + } + + return (Size); +} + +int FindFileSizeAlign(const char * FileName) +{ +int Size=FindFileSize(FileName); + Size = ((Size + 3) & 0xfffffffc); + return(Size); +} + + +//****************************************************************** +// Read pre-defined script file +//****************************************************************** +int IsWhiteSpace(char c) +{ + if (c==' ') return(1); + if (c==TAB) return(1); + if (c==0xd) return(1); + if (c==0xa) return(1); + return(0); +} + +//****************************************************************** +char *SkipWhiteSpace(char *Ptr) +{ + while (IsWhiteSpace(*Ptr)) Ptr++; + return(Ptr); +} + +//****************************************************************** +char *GotoNextLine(char *Ptr) +{ + while (*Ptr!=EOL) Ptr++; + return(Ptr+2); +} + +//****************************************************************** +void ReadScript() +{ +char *Ptr,*EndPtr; +int Size; +sInFile InFile; + + Script = (char *)LoadFileInMem( ScriptFile); + Size = FindFileSize(ScriptFile); + Ptr=Script; + EndPtr=Ptr+Size; + + while (Ptr=EndPtr) return; + if (*Ptr==COMMENT) + { // Comment + Ptr=GotoNextLine(Ptr); + } + else + { + int i=0; + InFile.Chunks=0; + while (!IsWhiteSpace(*Ptr) && Ptr +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=MkSpeech - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "MkSpeech.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "MkSpeech.mak" CFG="MkSpeech - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "MkSpeech - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "MkSpeech - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "MkSpeech - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x809 /d "NDEBUG" +# ADD RSC /l 0x809 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"C:\PRLSR\tools\MkSpeech.exe" + +!ELSEIF "$(CFG)" == "MkSpeech - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD BASE RSC /l 0x809 /d "_DEBUG" +# ADD RSC /l 0x809 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "MkSpeech - Win32 Release" +# Name "MkSpeech - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\MkSpeech.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/Utils/banker/banker.dsp b/Utils/banker/banker.dsp new file mode 100644 index 000000000..ed0a515f4 --- /dev/null +++ b/Utils/banker/banker.dsp @@ -0,0 +1,94 @@ +# Microsoft Developer Studio Project File - Name="banker" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=banker - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "banker.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "banker.mak" CFG="banker - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "banker - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "banker - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName ""$/PRLSR/utils/banker", KJRAAAAA" +# PROP Scc_LocalPath "." +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "banker - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x809 /d "NDEBUG" +# ADD RSC /l 0x809 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"..\..\tools\banker.exe" + +!ELSEIF "$(CFG)" == "banker - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD BASE RSC /l 0x809 /d "_DEBUG" +# ADD RSC /l 0x809 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"..\..\tools\banker.exe" /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "banker - Win32 Release" +# Name "banker - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\main.cpp +# End Source File +# End Group +# End Target +# End Project diff --git a/Utils/banker/main.cpp b/Utils/banker/main.cpp new file mode 100644 index 000000000..8a00cd825 --- /dev/null +++ b/Utils/banker/main.cpp @@ -0,0 +1,399 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +//#include "SfxList.h" + + +//************************************************ + +#define MAX_SFX 1024 + +//************************************************ + +char path_buffer[_MAX_PATH]; +char drive[_MAX_DRIVE]; +char dir[_MAX_DIR]; +char fname[_MAX_FNAME]; +char ext[_MAX_EXT]; + + +struct bank_entry +{ + WORD looped; + WORD pitch; + DWORD offset; +}; + +typedef struct +{ + char Name[ 100 ]; + WORD SfxNo; + BYTE Hashed; + BYTE Looped; + WORD LoopPos; +} file_entry; + + +char ThisDir[256]; +file_entry FileList[MAX_SFX]; +int NoFiles = 0; + + +//*********************************************************************** +//*********************************************************************** + +static void app_debug_msg(const char * pszFmt,va_list args) +{ + char szBuf[256]; + + vsprintf(szBuf,pszFmt,args); + printf("\n%s\n",szBuf); +} + + +//****************************************************************** +//****************************************************************** + +void __cdecl screen_debug_msg(const char * pszFmt,...) +{ + if (pszFmt) + { + va_list args; + va_start(args,pszFmt); + app_debug_msg(pszFmt,args); + va_end(args); + } +} + +void __cdecl app_assert(const char * pszFmt,...) +{ + if (pszFmt) + { + va_list args; + va_start(args,pszFmt); + app_debug_msg(pszFmt,args); + va_end(args); + } + exit(123); +} + +//****************************************************************** + +void FreePtr(void *p) +{ + if(p) free(p); +} + +//****************************************************************** + +BYTE* LoadFileInMem(const char * pszName) +{ + HANDLE hsFile; + DWORD dwSize = NULL; + DWORD dwSize2 = NULL; + DWORD Temp; + BYTE* Buffer; + + if( (hsFile = CreateFile(pszName, GENERIC_READ, FILE_SHARE_READ, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL)) == INVALID_HANDLE_VALUE ) + { + screen_debug_msg("LFIM: Could not open file %s",pszName); + return NULL; + }else{ + dwSize = GetFileSize(hsFile,NULL); + dwSize2 = dwSize; + if(dwSize&0x7) dwSize2 = (dwSize-(dwSize&0x7))+8; + if( (Buffer=(BYTE*)malloc(dwSize2))==NULL ) {printf("Out of memory.\n");exit(123);} + ReadFile(hsFile,(void*)Buffer,dwSize,&Temp,NULL); + CloseHandle(hsFile); + } + + return Buffer; +} + + +//****************************************************************** + +DWORD FindFileSize(const char * pszName) +{ + HANDLE hsFile; + DWORD dwSize=NULL; + + if( (hsFile = CreateFile(pszName, GENERIC_READ, FILE_SHARE_READ, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL)) == INVALID_HANDLE_VALUE ) + { + screen_debug_msg("\nFFS: Could not open file %s",pszName); + return NULL; + }else{ + dwSize = GetFileSize(hsFile,NULL); + if(dwSize&0x7) dwSize = (dwSize-(dwSize&0x7))+8; + CloseHandle(hsFile); + } + + return dwSize; +} + + +//*************************************************** +// Find files in directory +//*************************************************** + +int CalcHashNum(char* astring) +{ + int result = 0; + WORD count; + + for (count=0; count>8) + ((val&0xff000000)>>24); + + return(result); +} + +void WriteBankData(char* Bank) +{ + FILE* BANKFILE = NULL; + FILE* OFFSETFILE = NULL; + BYTE* Buffer = NULL; + WORD Size; + DWORD filepos = 0; + char file[256]; + bank_entry BankInfo; + WORD pitch; + DWORD vagpitch; + + sprintf(file,"%s.bnk",Bank); + BANKFILE = fopen(file,"wb"); + if(!BANKFILE) {printf("\nBank file error\n\n");return;} + + sprintf(file,"%s.bof",Bank); + OFFSETFILE = fopen(file,"wb"); + if(!OFFSETFILE) {printf("\nBank offset error\n\n");return;} + + for(int i=0;i', '?', '@', '{', '}', '[', ']', '¬', +}; + +static const int nbBadFileChars = (sizeof(BadFileChars) / sizeof(char)); + + +void ExportEnums(char * name) +{ + FILE * ENUMFILE = NULL; + char file[256]; + + _splitpath(name, drive, dir, fname, ext); + strupr(fname); + sprintf( file, "%s.h", name ); + ENUMFILE = fopen(file,"wt"); + if(!ENUMFILE) {printf("\nEnum file error\n\n");return;} + + fprintf( ENUMFILE, "enum\n{\n" ); + for (int i=0;i=0;t--) + { + if( ostr[ t ] == '\\' ) + { + t++; + break; + } + } + + int o = 0; + for (;t "); + printf("\nFor example, 'Banker level0.txt \\data\\snd\\level0' will take"); + printf("\n'level0.txt' as its input and produce three files ( \\data\\snd\\level0.bof,"); + printf("\n\\data\\snd\\level0.bnk and \\data\\snd\\level0.h ) as output."); + printf("\n\n"); + return(0); + } + + FindDirFiles(argv[1]); + WriteBankData(argv[2]); + ExportEnums(argv[2]); + + printf("\nBank files made\n\n"); + + return(0); +} diff --git a/Utils/parkgrab/VImage.cpp b/Utils/parkgrab/VImage.cpp new file mode 100644 index 000000000..c21746ebe --- /dev/null +++ b/Utils/parkgrab/VImage.cpp @@ -0,0 +1,472 @@ +/*========================================================================= + + FILENAME.CPP + + Author: Gary Liddon @ + Created: + Project: + Purpose: + + Copyright (c) 1998 G R Liddon + +===========================================================================*/ + +/*---------------------------------------------------------------------- + Includes + -------- */ + +/* Std Lib + ------- */ + +/* Glib + ---- */ +#include "pak.h" + +/* Local + ----- */ +#include "vimage.h" + +/*---------------------------------------------------------------------- + Tyepdefs && Defines + ------------------- */ +using namespace std; + +/*---------------------------------------------------------------------- + Structure defintions + -------------------- */ + +/*---------------------------------------------------------------------- + Function Prototypes + ------------------- */ + +/*---------------------------------------------------------------------- + Vars + ---- */ + +/*---------------------------------------------------------------------- + Data + ---- */ + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +VRAMImage::VRAMImage(int NewWidthInTpages,int NewHeightInPixels) : VRAMData(NULL) +{ + WidthInTpages=NewWidthInTpages; + HeightInPixels=NewHeightInPixels; + HeightInTPages=NewHeightInPixels / 256; + + if (!HeightInTPages) + { + aTPageHeight = 128; + HeightInTPages = 1; + } + else + { + aTPageHeight = HeightInTPages * 256; + } + TPageSizeInBytes = 128 * aTPageHeight; + + WidthInBytes=WidthInTpages*128; + + VramAreaBytes=WidthInBytes * HeightInPixels; + + VRAMData=new u8[VramAreaBytes]; + lbmData = new u8[WidthInTpages*256*HeightInPixels]; + + if (!lbmData) + Error(ERM_OUTOFMEM); + + if (!VRAMData) + Error(ERM_OUTOFMEM); + + memset(VRAMData,0,VramAreaBytes); + m_doCompress=false; +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +VRAMImage::~VRAMImage(void) +{ + if (lbmData) + delete lbmData; + if (VRAMData) + delete VRAMData; +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ + +void VRAMImage::getTpData(unsigned int tp,std::vector & dest) const +{ + const int TPAGES_IN_ALL =WidthInTpages * HeightInTPages; + + if (tp >= TPAGES_IN_ALL) + Error(ERR_FATAL,"illegal tpage number"); + + int tpX,tpY; + u8 const * srcTpData; + dest.resize(TPageSizeInBytes); + + + tpX=(tp%WidthInTpages)*128; + tpY=(tp/WidthInTpages)*aTPageHeight; + + srcTpData=&VRAMData[tpX+tpY*WidthInBytes]; + + for (int x=0;x<128;x++) + for (int y=0;y & Body) +{ + try + { + GString Com; + + char TmpName[100]; + char CompTmpName[100]; + + tmpnam(TmpName); + tmpnam(CompTmpName); + + GString ComStr(CmdLine); + + ComStr.Replace("%1",TmpName); + ComStr.Replace("%2",CompTmpName); + + ofstream Out; + Out.open(TmpName,ios::binary|ios::trunc); + + if (Out) + { + int CompSize; + Out.write((char const *)&Body[0],Body.size()); + Out.close(); + + cout<<(char const *)ComStr<<"from "< tpageData; + tpageData.resize(TPageSizeInBytes); + + for (int f=0;f tpageData; + vector dataToWrite; + + tpageData.resize(TPageSizeInBytes); + dataToWrite.resize(TPageSizeInBytes); + + for (int f=0;f myData; + + myData.resize(128*64); + + memcpy(&myData[0],srcData,128*64); + + #ifdef __USE_LZNP__ + + CompressMem("lznp %1 %2",myData); + dataWriteSize=myData.size(); + memcpy(&dataToWrite[0],&myData[0],dataWriteSize); + + #else + dataWriteSize=PAK_findPakSize(&myData[0],128*64); + PAK_doPak(&dataToWrite[0],&myData[0],128*64); + #endif + + } + else + { + dataWriteSize=128*64; + memcpy(&dataToWrite[0],srcData,128*64); + } + for (int a=0;a<16;a++) printf("%i, ",(int)dataToWrite[a]); + printf("\n"); + Str.write((char *)(&dataToWrite[0]),dataWriteSize); + } + + } + else + Str.write((char *)(VRAMData),VramAreaBytes); +} + + + + + + + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void VRAMImage::PlotPal(SprPal const & PalToPlot) +{ + TPRect Tp=PalToPlot.GetTPRect(); + + int W=WidthInTpages*256; + + W/=2; + + u16 * Addr=(u16 *)&VRAMData[Tp.Y*W+Tp.X/2]; + + std::vector OutWords; + + PalToPlot.MakePSXPal(OutWords); + + int f; + + for (f=0;f> 4; + else + lbmData[x+y*W]=VRAMData[(y*(W/2))+(x/2)]&0x0f; + } + + ThisFr.SetFrame(lbmData,W,H,GazPalette); + ThisFr.SaveLbm(Name); + + cout<<"Written "< +#include + +/* Local + ----- */ + +/*---------------------------------------------------------------------- + Tyepdefs && Defines + ------------------- */ + +/*---------------------------------------------------------------------- + Structure defintions + -------------------- */ + +/*---------------------------------------------------------------------- + Function Prototypes + ------------------- */ +using namespace std; + +/*---------------------------------------------------------------------- + Vars + ---- */ + +/*---------------------------------------------------------------------- + Data + ---- */ +struct RGB +{ + u8 r,g,b; +}; + +class BITMAP +{ +public: + BITMAP(void) + { + m_width=0; + m_height=0; + } + + void setSize(int width,int height) + { + bitMap.resize(width*height); + + m_width=width; + m_height=height; + } + + void clear(void) + { + if (m_width && m_height) + memset(&bitMap[0],0,m_width*m_height); + } + + void line(unsigned int y,unsigned int x,u8 pix) + { + if (x >= m_width) + { + GObject::Error(ERR_WARNING,"Out of X boundary - %d %d\n", x, m_width); + x = m_width-1; + } + if (y >= m_height) + { + GObject::Error(ERR_WARNING,"Out of Y boundary - %d %d\n", y, m_height); + y = m_height-1; + } + bitMap[y*m_width+x]=pix; + + } + + u8 const * getBitMap(void) const + {return(&bitMap[0]);} + +protected: + int m_width; + int m_height; + vector bitMap; +}; + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +#include +#include +#include +#include + + +#define BI_RGB 0 +#define BI_RLE8 1 +#define BI_RLE4 2 +#define BI_BITFIELDS 3 + +#define OS2INFOHEADERSIZE 12 +#define WININFOHEADERSIZE 40 + + +typedef struct BITMAPFILEHEADER +{ + unsigned long bfType; + unsigned long bfSize; + unsigned short bfReserved1; + unsigned short bfReserved2; + unsigned long bfOffBits; +} BITMAPFILEHEADER; + + +/* Used for both OS/2 and Windows BMP. + * Contains only the parameters needed to load the image + */ +typedef struct BITMAPINFOHEADER +{ + unsigned long biWidth; + unsigned long biHeight; + unsigned short biBitCount; + unsigned long biCompression; +} BITMAPINFOHEADER; + + +typedef struct WINBMPINFOHEADER /* size: 40 */ +{ + unsigned long biWidth; + unsigned long biHeight; + unsigned short biPlanes; + unsigned short biBitCount; + unsigned long biCompression; + unsigned long biSizeImage; + unsigned long biXPelsPerMeter; + unsigned long biYPelsPerMeter; + unsigned long biClrUsed; + unsigned long biClrImportant; +} WINBMPINFOHEADER; + + +typedef struct OS2BMPINFOHEADER /* size: 12 */ +{ + unsigned short biWidth; + unsigned short biHeight; + unsigned short biPlanes; + unsigned short biBitCount; +} OS2BMPINFOHEADER; + + + +/* read_bmfileheader: + * Reads a BMP file header and check that it has the BMP magic number. + */ +static int read_bmfileheader(Gifstream & f, BITMAPFILEHEADER *fileheader) +{ + fileheader->bfType = f.Get16(); + fileheader->bfSize= f.Get32(); + fileheader->bfReserved1= f.Get16(); + fileheader->bfReserved2= f.Get16(); + fileheader->bfOffBits= f.Get32(); + + if (fileheader->bfType != 19778) + return -1; + + return 0; +} + + + +/* read_win_bminfoheader: + * Reads information from a BMP file header. + */ +static int read_win_bminfoheader(Gifstream & f, BITMAPINFOHEADER *infoheader) +{ + WINBMPINFOHEADER win_infoheader; + + win_infoheader.biWidth = f.Get32(); + win_infoheader.biHeight = f.Get32(); + win_infoheader.biPlanes = f.Get16(); + win_infoheader.biBitCount = f.Get16(); + win_infoheader.biCompression = f.Get32(); + win_infoheader.biSizeImage = f.Get32(); + win_infoheader.biXPelsPerMeter = f.Get32(); + win_infoheader.biYPelsPerMeter = f.Get32(); + win_infoheader.biClrUsed = f.Get32(); + win_infoheader.biClrImportant = f.Get32(); + + infoheader->biWidth = win_infoheader.biWidth; + infoheader->biHeight = win_infoheader.biHeight; + infoheader->biBitCount = win_infoheader.biBitCount; + infoheader->biCompression = win_infoheader.biCompression; + + return 0; +} + + + +/* read_os2_bminfoheader: + * Reads information from an OS/2 format BMP file header. + */ +static int read_os2_bminfoheader(Gifstream & f, BITMAPINFOHEADER *infoheader) +{ + OS2BMPINFOHEADER os2_infoheader; + + os2_infoheader.biWidth = f.Get16(); + os2_infoheader.biHeight = f.Get32(); + os2_infoheader.biPlanes = f.Get32(); + os2_infoheader.biBitCount = f.Get32(); + + infoheader->biWidth = os2_infoheader.biWidth; + infoheader->biHeight = os2_infoheader.biHeight; + infoheader->biBitCount = os2_infoheader.biBitCount; + infoheader->biCompression = 0; + + return 0; +} + + +/* read_bmicolors: + * Loads the color pallete for 1,4,8 bit formats. + */ +static void read_bmicolors(int ncols, RGB *pal, Gifstream & f,int win_flag) +{ + int i; + + for (i=0; i> 1; + } + } + + pix = b[j]; + bmp->line(line,i,pix); + } +} + + + +/* read_4bit_line: + * Support function for reading the 4 bit bitmap file format. + */ +static void read_4bit_line(int length, Gifstream & f, BITMAP *bmp, int line) +{ + unsigned char b[8]; + unsigned long n; + int i, j, k; + int temp; + int pix; + + for (i=0; i> 4; + b[k*2] = temp & 15; + n = n >> 8; + } + } + + pix = b[j]; + bmp->line(line,i,pix); + } +} + + + +/* read_8bit_line: + * Support function for reading the 8 bit bitmap file format. + */ +static void read_8bit_line(int length, Gifstream & f, BITMAP *bmp, int line) +{ + unsigned char b[4]; + unsigned long n; + int i, j, k; + int pix; + + for (i=0; i> 8; + } + } + pix = b[j]; + bmp->line(line,i,pix); + } +} + + +/* read_24bit_line: + * Support function for reading the 24 bit bitmap file format, doing + * our best to convert it down to a 256 color pallete. + */ +static void read_24bit_line(int length, Gifstream & f, BITMAP *bmp, int line) +{ +#if 0 + int i, nbytes; + RGB c; + + nbytes=0; + + for (i=0; iline[line][i*3+_rgb_r_shift_24/8] = c.r; + bmp->line[line][i*3+_rgb_g_shift_24/8] = c.g; + bmp->line[line][i*3+_rgb_b_shift_24/8] = c.b; + nbytes += 3; + } + + nbytes = nbytes % 4; + if (nbytes != 0) + for (i=nbytes; i<4; i++) + f.get();; +#endif +} + + + +/* read_image: + * For reading the noncompressed BMP image format. + */ +static void read_image(Gifstream & f, BITMAP *bmp, BITMAPINFOHEADER *infoheader) +{ + int i, line; + + for (i=0; i<(int)infoheader->biHeight; i++) { + line = i; + + switch (infoheader->biBitCount) { + + case 1: + read_1bit_line(infoheader->biWidth, f, bmp, infoheader->biHeight-i-1); + break; + + case 4: + read_4bit_line(infoheader->biWidth, f, bmp, infoheader->biHeight-i-1); + break; + + case 8: + read_8bit_line(infoheader->biWidth, f, bmp, infoheader->biHeight-i-1); + break; + + case 24: + read_24bit_line(infoheader->biWidth, f, bmp, infoheader->biHeight-i-1); + break; + } + } +} + + + +/* read_RLE8_compressed_image: + * For reading the 8 bit RLE compressed BMP image format. + */ +static void read_RLE8_compressed_image(Gifstream & f, BITMAP *bmp, BITMAPINFOHEADER *infoheader) +{ + unsigned char count, val, val0; + int j, pos, line; + int eolflag, eopicflag; + + eopicflag = 0; + line = infoheader->biHeight - 1; + + while (eopicflag == 0) { + pos = 0; /* x position in bitmap */ + eolflag = 0; /* end of line flag */ + + while ((eolflag == 0) && (eopicflag == 0)) { + count = f.get(); + val = f.get(); + + if (count > 0) { /* repeat pixel count times */ + for (j=0;jline(line,pos,val); + pos++; + } + } + else { + switch (val) { + + case 0: /* end of line flag */ + eolflag=1; + break; + + case 1: /* end of picture flag */ + eopicflag=1; + break; + + case 2: /* displace picture */ + count = f.get(); + val = f.get(); + pos += count; + line -= val; + break; + + default: /* read in absolute mode */ + for (j=0; jline(line,pos,val0); + pos++; + } + + if (j%2 == 1) + val0 = f.get(); /* align on word boundary */ + break; + + } + } + + if (pos > (int)infoheader->biWidth) + eolflag=1; + } + + line--; + if (line < 0) + eopicflag = 1; + } +} + + + +/* read_RLE4_compressed_image: + * For reading the 4 bit RLE compressed BMP image format. + */ +static void read_RLE4_compressed_image(Gifstream & f, BITMAP *bmp, BITMAPINFOHEADER *infoheader) +{ + unsigned char b[8]; + unsigned char count; + unsigned short val0, val; + int j, k, pos, line; + int eolflag, eopicflag; + + eopicflag = 0; /* end of picture flag */ + line = infoheader->biHeight - 1; + + while (eopicflag == 0) { + pos = 0; + eolflag = 0; /* end of line flag */ + + while ((eolflag == 0) && (eopicflag == 0)) { + count = f.get(); + val = f.get(); + + if (count > 0) { /* repeat pixels count times */ + b[1] = val & 15; + b[0] = (val >> 4) & 15; + for (j=0; jline(line,pos,b[j%2]); + pos++; + } + } + else { + switch (val) { + + case 0: /* end of line */ + eolflag=1; + break; + + case 1: /* end of picture */ + eopicflag=1; + break; + + case 2: /* displace image */ + count = f.get(); + val = f.get(); + pos += count; + line -= val; + break; + + default: /* read in absolute mode */ + for (j=0; j> 4; + b[2*k] = val0 & 15; + val0 = val0 >> 4; + } + } + bmp->line(line,pos,b[j%4]); + pos++; + } + break; + } + } + + if (pos > (int)infoheader->biWidth) + eolflag=1; + } + + line--; + if (line < 0) + eopicflag = 1; + } +} + + + +/* load_bmp: + * Loads a Windows BMP file, returning a bitmap structure and storing + * the pallete data in the specified pallete (this should be an array of + * at least 256 RGB structures). + * + * Thanks to Seymour Shlien for contributing this function. + */ + +void load_bmp(Frame & frm,char const *filename) +{ + BITMAPFILEHEADER fileheader; + BITMAPINFOHEADER infoheader; + + RGB pal[256]; + BITMAP bmp; + + Gifstream f(Gifstream::LITTLE_ENDIAN); + + int ncol; + unsigned long biSize; + + f.open(filename,ios::in|ios::binary); + + if (!f) + GObject::Error(ERR_FATAL,"couldn't open file %s",filename); + + if (read_bmfileheader(f, &fileheader) != 0) + { + GObject::Error(ERR_FATAL,"error reading bmp hdr for %s",filename); + } + + biSize = f.Get32(); + + if (biSize == WININFOHEADERSIZE) + { + if (read_win_bminfoheader(f, &infoheader) != 0) + GObject::Error(ERR_FATAL,"error reading windows bmp info hdr for %s",filename); + + /* compute number of colors recorded */ + ncol = (fileheader.bfOffBits - 54) / 4; + read_bmicolors(ncol, pal, f, 1); + } + else if (biSize == OS2INFOHEADERSIZE) + { + if (read_os2_bminfoheader(f, &infoheader) != 0) + GObject::Error(ERR_FATAL,"error reading os2 bmp info hdr for %s",filename); + + /* compute number of colors recorded */ + ncol = (fileheader.bfOffBits - 26) / 3; + read_bmicolors(ncol, pal, f, 0); + } + else + { + GObject::Error(ERR_FATAL,"error finding correct hdr for bmp %s",filename); + } + + if (infoheader.biBitCount != 4 && infoheader.biBitCount != 8) + GObject::Error(ERR_FATAL,"only handles 4 && 8 bit bmps not %d : %s",infoheader.biBitCount,filename); + + + bmp.setSize(infoheader.biWidth, infoheader.biHeight); + + bmp.clear(); + + switch (infoheader.biCompression) + { + + case BI_RGB: + read_image(f, &bmp, &infoheader); + break; + + case BI_RLE8: + read_RLE8_compressed_image(f, &bmp, &infoheader); + break; + + case BI_RLE4: + read_RLE4_compressed_image(f, &bmp, &infoheader); + break; + + default: + GObject::Error(ERR_FATAL,"unknown compression foramt for %s",filename); + break; + } + + f.close(); + + + { + Palette palObj; + + + + for (int f=0;f + +/* Local + ----- */ + +/*---------------------------------------------------------------------- + Tyepdefs && Defines + ------------------- */ + +/*---------------------------------------------------------------------- + Structure defintions + -------------------- */ + +/*---------------------------------------------------------------------- + Globals + ------- */ + +/* Vars + ---- */ + +/* Data + ---- */ + +/* Functions + --------- */ +void load_bmp(Frame & frm,char const *filename); + +/*---------------------------------------------------------------------- */ + +#endif /* __BMPLOADER_H__ */ + +/*=========================================================================== + end */ \ No newline at end of file diff --git a/Utils/parkgrab/cross.cpp b/Utils/parkgrab/cross.cpp new file mode 100644 index 000000000..100a1c0de --- /dev/null +++ b/Utils/parkgrab/cross.cpp @@ -0,0 +1,158 @@ +/*========================================================================= + + CROSS.CPP + + Author: Gary Liddon @ Climax + Created: + Project: Diablo Playstation Conversion + Purpose: Find A Crosshair on a frame + + Copyright (c) 1996 Director's Cut Ltd. + +===========================================================================*/ + +/*---------------------------------------------------------------------- + Includes + -------- */ + +/* Std Lib + ------- */ + +/* STL + --- */ + +/* Glib + ---- */ + +/* Local + ----- */ +#include "cross.h" + +/*---------------------------------------------------------------------- + Structure defintions + -------------------- */ +using namespace std; + +/*---------------------------------------------------------------------- + Tyepdefs && Defines + ------------------- */ + +/*---------------------------------------------------------------------- + Function Prototypes + ------------------- */ + +/*---------------------------------------------------------------------- + Vars + ---- */ + +/*---------------------------------------------------------------------- + Classes + ------- */ + + +/*---------------------------------------------------------------------- + Description: + Find a cross hair in this frame for animation offset and store it + into member vars x and y. + + Returns: + True if a cross hair is found + ---------------------------------------------------------------------- */ +bool CROSS_RES::FindCrossHair( + Frame const & Fr, /* Frame we're looking for a cross-hair in */ + u8 CrossCol /* Pixel value of cross hair we're looking for */ + ) +{ + u8 const * FrmData; + int * CountCol=NULL; + int * CountRow=NULL; + + int Width; + int Height; + bool RetVal; + + RetVal=false; + + Width=Fr.GetWidth(); + Height=Fr.GetHeight(); + + if (Width && Height) + { + int Col; + int Row; + + if (!(CountCol=new int[Width])) + { + cout<<"Width is "< Largest) + { + Largest=CountCol[f]; + LargestIndex=f; + } + } + + return(LargestIndex); +} + +/*=========================================================================== + end */ + diff --git a/Utils/parkgrab/cross.h b/Utils/parkgrab/cross.h new file mode 100644 index 000000000..cda039c74 --- /dev/null +++ b/Utils/parkgrab/cross.h @@ -0,0 +1,67 @@ +/*========================================================================= + + CROSS.CPP + + Author: Gary Liddon @ Climax + Created: + Project: Diablo Playstation Conversion + Purpose: Find A Crosshair on a frame + + Copyright (c) 1996 Director's Cut Ltd. + +===========================================================================*/ + +#ifndef __CROSS_HPP__ +#define __CROSS_HPP__ + +/*---------------------------------------------------------------------- + Includes + -------- */ + +/* Std Lib + ------- */ + +/* STL + --- */ + +/* Glib + ---- */ +#include +#include + + +/*---------------------------------------------------------------------- + Tyepdefs && Defines + ------------------- */ + +/*---------------------------------------------------------------------- + Description: + This structure is used to find centering cross hairs + in frame objects using the FindCrossHair method. + If a cross hair is found, the results are put in + the x and y member vars. + ---------------------------------------------------------------------- */ +struct CROSS_RES +{ + int x; /* x co-ord of cross found */ + int y; /* y co-ord of cross found */ + + bool FindCrossHair(Frame const & Fr,u8 CrossCol); + +private: + int FindLargestIndex(int * CountCol,int Width); +}; + + +/*---------------------------------------------------------------------- + Function Prototypes + ------------------- */ + +/*---------------------------------------------------------------------- */ + +#endif /* __CROSS_HPP__ */ + +/*=========================================================================== + end */ + + diff --git a/Utils/parkgrab/grect.cpp b/Utils/parkgrab/grect.cpp new file mode 100644 index 000000000..80e1dc2fd --- /dev/null +++ b/Utils/parkgrab/grect.cpp @@ -0,0 +1,138 @@ +/*========================================================================= + + GRECT.CPP + + Author: Gary Liddon @ Climax + Created: + Project: + Purpose: + + Copyright (c) 1997 Climax Development Ltd + +===========================================================================*/ + +/*---------------------------------------------------------------------- + Includes + -------- */ + +/* Std Lib + ------- */ +#include + +/* Glib + ---- */ +#include + +/* Local + ----- */ +#include "grect.h" + + +/*---------------------------------------------------------------------- + Tyepdefs && Defines + ------------------- */ +using namespace std; + +/*---------------------------------------------------------------------- + Structure defintions + -------------------- */ + +/*---------------------------------------------------------------------- + Positional Vars + --------------- */ + +/*---------------------------------------------------------------------- + Function Prototypes + ------------------- */ +static Rect & AddAnotherRect(RectVec & Result); +static void AddRectMessage(Rect const & T); + + +/*---------------------------------------------------------------------- + Vars + ---- */ + +/*---------------------------------------------------------------------- + Data + ---- */ + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +Rect & AddAnotherRect(RectVec & Result) +{ + Result.resize(Result.size()+1); + return(Result[Result.size()-1]); +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ + +void CutRect(Rect const & ToBeCut,Rect const & TheCutter,RectVec & Result) +{ + Rect Cutter=TheCutter; + + ToBeCut.ClipRect(Cutter); + + if (Cutter) + { + /* Is there a top rectangle hanging about? */ + + if (ToBeCut.Y != Cutter.Y) + { + Rect & TopRect=AddAnotherRect(Result); + TopRect=ToBeCut; + TopRect.H=Cutter.Y-TopRect.Y; + AddRectMessage(TopRect); + } + + /* Is there a bottom rectangle hanging about? */ + + if ((ToBeCut.Y+ToBeCut.H) != (Cutter.Y+Cutter.H)) + { + Rect & TopRect=AddAnotherRect(Result); + TopRect=ToBeCut; + TopRect.Y=Cutter.Y+Cutter.H; + TopRect.H=(ToBeCut.Y+ToBeCut.H)-(Cutter.Y+Cutter.H); + AddRectMessage(TopRect); + } + + /* Is there a left rectangle hanging about? */ + + if (ToBeCut.X != Cutter.X) + { + Rect & TopRect=AddAnotherRect(Result); + TopRect=Cutter; + TopRect.X=ToBeCut.X; + TopRect.W=Cutter.X-ToBeCut.X; + AddRectMessage(TopRect); + } + + /* Is there a right rectangle hanging about? */ + + if ((ToBeCut.X+ToBeCut.W) != (Cutter.X+Cutter.W)) + { + Rect & TopRect=AddAnotherRect(Result); + TopRect=Cutter; + TopRect.X=Cutter.X+Cutter.W; + TopRect.W=(ToBeCut.X+ToBeCut.W)-(Cutter.X+Cutter.W); + AddRectMessage(TopRect); + } + } + +} + +void AddRectMessage(Rect const & T) +{ +} + + +/*=========================================================================== + end */ diff --git a/Utils/parkgrab/grect.h b/Utils/parkgrab/grect.h new file mode 100644 index 000000000..32460a47c --- /dev/null +++ b/Utils/parkgrab/grect.h @@ -0,0 +1,63 @@ +/*========================================================================= + + GRECT.CPP + + Author: Gary Liddon @ Climax + Created: + Project: + Purpose: + + Copyright (c) 1997 Climax Development Ltd + +===========================================================================*/ + +#ifndef __GRECT_H__ +#define __GRECT_H__ + +/*---------------------------------------------------------------------- + Includes + -------- */ + +/* Std Lib + ------- */ +#include + +/* Glib + ---- */ +#include + +/* Local + ----- */ + +/*---------------------------------------------------------------------- + Tyepdefs && Defines + ------------------- */ + +typedef std::vector RectVec; + +/*---------------------------------------------------------------------- + Structure defintions + -------------------- */ + +/*---------------------------------------------------------------------- + Globals + ------- */ + +/* Vars + ---- */ + +/* Data + ---- */ + +/* Functions + --------- */ +void CutRect(Rect const & ToBeCut,Rect const & TheCutter,RectVec & Result); +void ReportRectVec(RectVec & Result); +void GRectTest(void); + +/*---------------------------------------------------------------------- */ + +#endif /* __GRECT_H__ */ + +/*=========================================================================== + end */ diff --git a/Utils/parkgrab/main.cpp b/Utils/parkgrab/main.cpp new file mode 100644 index 000000000..f39ba18d3 --- /dev/null +++ b/Utils/parkgrab/main.cpp @@ -0,0 +1,703 @@ +/*========================================================================= + + MAIN.CPP + + Author: Gary Liddon @ Fareham + Created: 28th September 1998 + Project: Theme Park World PSX + Purpose: Main file for tpw sprite grabber (it's sprgrab II!) + + Copyright (c) 1998 G R Liddon + +===========================================================================*/ + +/*---------------------------------------------------------------------- + Version info + + 1.0 - 1.1 Various changes by various authors + 1.2 GL Added -r switch to allow \ disallow sprite rotation + 1.3 GL Added -x option to allow saving out of non VRAM sprs + 1.31 GL Added -f option so you can force offsets to a value + 1.4 TS Added replacement of bad characters in filenames + 1.5 GL Added support for BMP files + 1.6 GL Made all out files lower case + Checked for errrors when writing files (Doh!) + 1.7 GL Added -q (turn on\of grabbers shrink to fit routine) + Also Added -k option to report where each texture has gone in the VRAM, + This will be read by mikes gin -> ars program for deciding what to do about shared + textures + 1.71 GL Added widths and heights of textures to report file + 1.72 GL Actually made the -q switch do what it was supposed to. Doh! + 1.8 GL Added -i switch to set output dir for inc files + 1.81 GL Corrected bug in 1.8 that meant no .h was written + 1.9 GL -e to set maximum size for textures + 1.91 GL Changed so that files prefixed with a "+" have col zero as see-through + 2.0 GL Added reading of gin files and import of rep files + 2.1 GL Added spare tpage space defintions + 2.11 GL Added the rather excellent -j option + 2.12 GL Fixed a bug, stopped -j textures from being reduced + 2.13 GL Removed the -j option and changed it so that all textures starting with ! are auto -j'd ;) + 2.14 GL Replaced bit map loader, will move this code into Frame at some point + 2.15 GL Restricted it so that only images up to 254x254 are allowed + 2.16 GL Fixed bug that meant 256 col images were often shagged + 2.17 TS Added '@' filename pre-fix to denote scrolling and transparent textures + 2.2 GL Changed the autocropping so that if the image is blank it allocates a 1x1 texture instead of a + texture the size of the input lbm + 2.21 GL added -twisting_my_melon_man siwtch (don't ask) + 2.3 GL added -y command to give us tpage compression + 2.31 GL -y didn't work (not even a little bit) but it does now ;) + 2.4 GL Added -~ switch to write out a raw tpage chunked version of the VRAM file + 2.41 GL Added -^ switch to stop any tpages being written + 2.5 TS Added -h half a tpage flag + 2.6 DO Added -w only output animated texture frame headers + Added -b dont output spare boxes + Added -a align headers to 2k + +/*---------------------------------------------------------------------- + Includes + -------- */ + +/* Std Lib + ------- */ +#include +#include + +/* Glib + ---- */ +#include +#include +#include +#include +#include + +/* TP Lib + ------- */ +#include +#include + + +/* Local + ----- */ +#include "sprset.h" + +/*---------------------------------------------------------------------- + Tyepdefs && Defines + ------------------- */ +using namespace std; + +/*---------------------------------------------------------------------- + Class defintions + ---------------- */ + +/* Hold's a list of all the files to be processed on along with the options that apply to them + ------------------------------------------------------------------------------------------- */ +class AllFiles : protected FileCycler +{ +public: + AllFiles(void) + { + RecurseFiles=false; + CrossHair=false; + ZeroColZero=false; + MoveUVs=false; + AllowRotate=true; + ForceOffsets=false; + ShrinkToFit=true; + m_allocateAs16bit=false; + MaxSize=0; + m_noSort=false; + } + + void SetFileRecursion(bool NewRecurseFiles) + {RecurseFiles=NewRecurseFiles;} + + void SetCrossHair(bool NewCrossHair) + {CrossHair=NewCrossHair;} + + void SetZeroColZero(bool NewColZero) + {ZeroColZero=NewColZero;} + + void SetMoveUVs(bool NewMoveUVs) + {MoveUVs=NewMoveUVs;} + + void SetAllowRotate(bool NewAllowRotate) + {AllowRotate=NewAllowRotate;} + + void SetForceOffsets(bool NewForceOffsets) + {ForceOffsets=NewForceOffsets;} + + void SetShrinkToFit(bool NewSetShrinkToFit) + {ShrinkToFit=NewSetShrinkToFit;} + + void SetXOff(int NewXOff) + {XOff=NewXOff;} + + void SetYOff(int NewYOff) + {YOff=NewYOff;} + + void SetMaxSize(int New) + {MaxSize=New;} + + int GetMaxSize(void) const + {return(MaxSize);} + + void AddFile(const char * Name); + + FIVec const & GetFileInfoVector(void) const + {return(AllFileInfos);} + + void SortOrder(); + + void ReadRepFile(char const * Name) + { + vector MyItems; + + ::readRepFile(Name,MyItems); + + for (int f=0;f UniqueTexturesSoFar; + vector AllExternalSharedTextures; + + void FileCallback(char const * FName,int FileNum); + + bool ShrinkToFit; + bool RecurseFiles; + bool CrossHair; + bool ZeroColZero; + bool MoveUVs; + bool AllowRotate; + bool ForceOffsets; + + bool m_allocateAs16bit; + bool m_noSort; + + int XOff,YOff; + + FIVec AllFileInfos; + int MaxSize; +}; + +/*---------------------------------------------------------------------- + Function Prototypes + ------------------- */ +static char * CycleCommands(char *String,int Num); +static void Usage(void); +static bool CheckPlusMinus(const char * Str); +static GString CheckFileString(const char * Str); +static GString OutFile; +static GString OutLbm; +static GString SprFile; +static GString ReportFile; +static GString IncOutFile; + +static int PageBase; +static int WidthPages; +static int HeightPages; +static bool PagePlacements=false; +static bool s_compressTpages=false; +static bool s_noWriteTpages=false; +static bool s_useHalfTpage=false; +static bool s_AnimatedHeadersOnly=false; +static bool s_DontOutputBoxes=false; +static bool s_AlignHeaders=false; + +static GString s_rawTpageFile; + +/*---------------------------------------------------------------------- + Vars + ---- */ +static AllFiles MyFiles; + +/*---------------------------------------------------------------------- + Data + ---- */ + +static const float Version = 2.6; + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +int main(int argc,char ** argv) +{ + cerr<<"GRLiddon() PARKGRAB TPW Spr Grabber "<+|-. Aborts out of there was a problem. + Params: Str = Text of item + Returns: true if a plus option + ---------------------------------------------------------------------- */ +bool CheckPlusMinus(const char * Str) +{ + if (strlen(Str)==3 && (Str[0]=='-' || Str[0]=='/') && (Str[2]=='-' || Str[2]=='+')) + { + } + else + GObject::Error(ERR_FATAL,"Problem with cmd line option %s",Str); + + return(Str[2]=='+'); +} + +/*---------------------------------------------------------------------- + Function: void CheckPlusMinus(const char * Str) + Purpose: Check to see if this cmd line item is of the type + -+|-. Aborts out of there was a problem. + Params: Str = Text of item + Returns: true if a plus option + ---------------------------------------------------------------------- */ +GString CheckFileString(const char * Str) +{ + GString RetStr; + + if (strlen(Str)>3 && (Str[0]=='-' || Str[0]=='/') && (Str[2]==':' || Str[2]==':')) + RetStr=&Str[3]; + else + GObject::Error(ERR_FATAL,"Problem with cmd line option %s",Str); + + return(RetStr); +} + + +/*---------------------------------------------------------------------- + Function: void Usage(void) + Notes: Usage of the util + ---------------------------------------------------------------------- */ +void Usage(void) +{ + cout<<"Usage: PARKGRAB [ .. ] [ switches.. ]\n"; + cout<<"Switches:\n"<\t\t\tSet recurse sub dirs (default off)"<\t\t\tSet cross hair offset detection (default off)"<\t\t\tSet colour zero trans (default off)"<\t\t\tSet move in u/v coords (default off)"<\t\t\tSet if spr rotation allowed (default on)"<\t\t\tShrink to bounds of lbm (default on)"<\t\t\tCompress tpages (default off)"<\t\t\tDo not write a tpage (default off)"<\t\t\tForce tpage height to half (default off)"<\t\t\tOnly write animated headers (default off)"<\t\t\tDo not write spare boxes (default off)"<\t\t\tAlign headers to 2k chunk (default off)"<\t\tSet maximum size for textures"<\t\tRead in a shared texture file for gin files"<\t\tOutput Vram filename"<\t\tOutput Sprfile filename"<\t\tWrite out an lbm of the tpage "<\t\tWrite out a vram report"<\t\tWrite out raw VRAM image"< +#include + +void AllFiles::FileCallback(char const * FName,int FileNum) +{ + FileInfo MyInfo; + bool ThisZeroColZero; + + + GFName FileName(FName); + + GString Ext(FileName.Ext()); + + Ext.Lower(); + + if (Ext=="gin") + { + vector NonSharedTextures; + +// Gin4File MyFile; + CScene MyFile; + MyFile.Load(FName); + + MyFile.GetNonSharedTextures(AllExternalSharedTextures,NonSharedTextures); + + + vector NewEntrys; + + for (int f=0;f +#include "pak.h" + +/* Graphics + -------- */ + +/*---------------------------------------------------------------------- + Tyepdefs && Defines + ------------------- */ +#define UNPAKBUFFERSIZE 4096 +#define STRMAX 80 +#define BUFFERSIZE 30000 +#define TRIGGER 20000 +#define MAXUNIQUE 127 + +/*---------------------------------------------------------------------- + Structure defintions + -------------------- */ +struct Block +{ + int data[128]; + BOOL blockrep; + int blocksize; + int blockoffset; + + u8 * Dest; + int outsize; + + virtual void fputc(u8 Val) + { + *Dest=Val; + Dest++; + outsize++; + } + + void writeBlock(void); +}; + +struct CountBlock : Block +{ + virtual void fputc(u8 Val) + { + Dest++; + outsize++; + } +}; + +/*---------------------------------------------------------------------- + Vars + ---- */ +static int s_lastAmountOfCompressedData; + +/*---------------------------------------------------------------------- + Function Prototypes + ------------------- */ +static void writeblock(struct block *theblock); + +/*---------------------------------------------------------------------- + Vars + ---- */ +/*---------------------------------------------------------------------- + Data + ---- */ + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void Block::writeBlock(void) +{ + if ((blockrep) && (blocksize == 0)) + { + /* Terminator */ + fputc(128); + fputc(0); + } + else if (blockrep) + { + fputc(blockoffset); + fputc(blocksize); + } + else /* Unique bytes */ + { + fputc(blocksize & 127); + + for (int i = 0; i <= blocksize; i++) + fputc(data[i]); + } + + // Get ready for next block + blockrep = FALSE; + blockoffset = 0; + blocksize = -1; +} + + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +static bool memequ(u8 const * p1,u8 const * p2,int size) +{ + bool same; + + same=true; + + for (int f=0;f FORWARDDIST) + end = FORWARDDIST; + + bestoffset = begin; + bestlength = 1; + theptr = buffer + (inpos); + + ptr1 = buffer + (inpos + begin); + + for (offset = begin; offset < 0; offset++) + { + if (*ptr1 == *theptr) + { + if (memequ(ptr1, theptr, bestlength + 1)) + { + bestlength++; + bestoffset = offset; + ptr2 = ptr1 + bestlength; + ptr3 = theptr + bestlength; + + while (*ptr2 == *ptr3) + { + ptr2++; + ptr3++; + bestlength++; + if (bestlength >= end) + break; + } + } + } + + if (bestlength >= end) + { + bestlength = end; + break; + } + + ptr1++; + } + + + if (bestlength < MINBLOCK) + { + /* See if last block is unique */ + + if (theblock.blockrep) /* Flush previous special block */ + { + theblock.writeBlock(); + theblock.data[++theblock.blocksize] = buffer[inpos++]; + } + else + { + /* Add to it */ + + if (theblock.blocksize >= MAXUNIQUE) + theblock.writeBlock(); + + theblock.data[++theblock.blocksize] = buffer[inpos++]; + } + } + else + { + /* We have found a match */ + theblock.writeBlock(); + theblock.blockrep = TRUE; + theblock.blocksize = bestlength; + theblock.blockoffset = bestoffset; + inpos += bestlength; + } + } + + /* Flush buffer */ + + theblock.writeBlock(); + + /* Terminate file */ + + theblock.blockrep = TRUE; + theblock.blocksize = 0; + theblock.blockoffset = 0; + theblock.writeBlock(); + + return(theblock.outsize); +} + + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +int PAK_doPak(u8 * Dest,u8 const * buffer,int insize) +{ + Block outBlock; + return(lowLevelPak(Dest,buffer,insize,outBlock)); +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +int PAK_findPakSize(u8 const * buffer,int insize) +{ + CountBlock outBlock; + return(lowLevelPak(NULL,buffer,insize,outBlock)); +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +int PAK_doUnpak(u8 * Dest,u8 const * Source) +{ + int outsize = 0; + u8 const * originalSource; + + originalSource=Source; + + while (1) /* ie, continue until end mark */ + { + u8 const * From; + + int size; + int ch; + + ch = *Source++; + + if (ch < 128) /* if it is in range {0..127} then */ + { + size = (ch + 1); + From=Source; + Source+=size; + } + else + { + size = *Source++; + + if (size == 0) /* distance == 0 => end of file */ + break; + + From=Dest+(s8)ch; + } + + u8 * endAddr; + endAddr=(u8*)(u32(From)+size); + + outsize += size; + + while (From!=endAddr) + { + *Dest=*From; + Dest++; + From++; + } + } + + s_lastAmountOfCompressedData=Source-originalSource; + + return(outsize); +} + +int PAK_getLastAmountOfDataRead(void) +{ + return(s_lastAmountOfCompressedData); +} + +/*=========================================================================== + end */ + + + + diff --git a/Utils/parkgrab/pak.h b/Utils/parkgrab/pak.h new file mode 100644 index 000000000..f3f5df83f --- /dev/null +++ b/Utils/parkgrab/pak.h @@ -0,0 +1,61 @@ +/*========================================================================= + + PAK.H + + Author: Carl Muller (algorithm Nick Pelling && Carl Muller) + Created: + Project: + Purpose: + + Copyright (c) 1997 Climax Development Ltd + +===========================================================================*/ + +#ifndef __PAK_PAK_H__ +#define __PAK_PAK_H__ + +/*---------------------------------------------------------------------- + Includes + -------- */ + +/* Std Lib + ------- */ + +/* Glib + ---- */ +#include + +/* Local + ----- */ + +/*---------------------------------------------------------------------- + Tyepdefs && Defines + ------------------- */ + +/*---------------------------------------------------------------------- + Structure defintions + -------------------- */ + +/*---------------------------------------------------------------------- + Globals + ------- */ + +/* Vars + ---- */ + +/* Data + ---- */ + +/* Functions + --------- */ +int PAK_doPak(u8 * Dest,u8 const * source,int insize); +int PAK_doUnpak(u8 * Dest,u8 const * Source); +int PAK_findPakSize(u8 const * souce,int insize); +int PAK_getLastAmountOfDataRead(void); + +/*---------------------------------------------------------------------- */ + +#endif /* __PAK_PAK_H__ */ + +/*=========================================================================== + end */ diff --git a/Utils/parkgrab/parkgrab.dsp b/Utils/parkgrab/parkgrab.dsp new file mode 100644 index 000000000..eb4f5c6bb --- /dev/null +++ b/Utils/parkgrab/parkgrab.dsp @@ -0,0 +1,154 @@ +# Microsoft Developer Studio Project File - Name="parkgrab" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=parkgrab - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "parkgrab.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "parkgrab.mak" CFG="parkgrab - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "parkgrab - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "parkgrab - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName ""$/tp2psx/utils/parkgrab", IXNAAAAA" +# PROP Scc_LocalPath "." +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "parkgrab - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\glibdev\glib\include" /I "..\glibdev\glib\include\pc" /I "..\ginutils\tplib" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c +# ADD BASE RSC /l 0x809 /d "NDEBUG" +# ADD RSC /l 0x809 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib win32lib.lib tplib.lib /nologo /subsystem:console /machine:I386 /out:"../../tools/parkgrab.exe" /libpath:"..\glibdev\glib\lib\win32lib\release" /libpath:"..\ginutils\tplib\release" + +!ELSEIF "$(CFG)" == "parkgrab - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /G5 /MDd /W3 /Gm /GX /ZI /Od /I "..\glibdev\glib\include" /I "..\glibdev\glib\include\pc" /I "..\ginutils\tplib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c +# ADD BASE RSC /l 0x809 /d "_DEBUG" +# ADD RSC /l 0x809 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib win32lib.lib tplib.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\glibdev\glib\lib\win32lib\debug" /libpath:"..\ginutils\tplib\debug" + +!ENDIF + +# Begin Target + +# Name "parkgrab - Win32 Release" +# Name "parkgrab - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\bmploader.cpp +# End Source File +# Begin Source File + +SOURCE=.\cross.cpp +# End Source File +# Begin Source File + +SOURCE=.\grect.cpp +# End Source File +# Begin Source File + +SOURCE=.\main.cpp +# End Source File +# Begin Source File + +SOURCE=.\pak.cpp +# End Source File +# Begin Source File + +SOURCE=.\sprset.cpp +# End Source File +# Begin Source File + +SOURCE=.\tpage.cpp +# End Source File +# Begin Source File + +SOURCE=.\VImage.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h" +# Begin Source File + +SOURCE=.\bmploader.h +# End Source File +# Begin Source File + +SOURCE=.\cross.h +# End Source File +# Begin Source File + +SOURCE=.\grect.h +# End Source File +# Begin Source File + +SOURCE=.\pak.h +# End Source File +# Begin Source File + +SOURCE=.\sprset.h +# End Source File +# Begin Source File + +SOURCE=.\tpage.h +# End Source File +# Begin Source File + +SOURCE=.\vimage.h +# End Source File +# End Group +# End Target +# End Project diff --git a/Utils/parkgrab/parkgrab.dsw b/Utils/parkgrab/parkgrab.dsw new file mode 100644 index 000000000..8bebab67d --- /dev/null +++ b/Utils/parkgrab/parkgrab.dsw @@ -0,0 +1,33 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "parkgrab"=.\parkgrab.dsp - Package Owner=<4> + +Package=<5> +{{{ + begin source code control + "$/PRLSR/utils/parkgrab", TCEAAAAA + . + end source code control +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/Utils/parkgrab/parkgrab.ncb b/Utils/parkgrab/parkgrab.ncb new file mode 100644 index 0000000000000000000000000000000000000000..f88fe5a382ba9b8ea3c35c4350f2c79aa8698bf5 GIT binary patch literal 115712 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 G1OE%r8DyRS literal 0 HcmV?d00001 diff --git a/Utils/parkgrab/sprset.cpp b/Utils/parkgrab/sprset.cpp new file mode 100644 index 000000000..1a24c8508 --- /dev/null +++ b/Utils/parkgrab/sprset.cpp @@ -0,0 +1,1314 @@ +/*========================================================================= + + SPRSET.CPP + + Author: Gary Liddon @ Fareham + Created: + Project: TPW Parkgrab + Purpose: Object that reads in all the frames for sprites + processes them into tpages and spits it all out to + disk + + Copyright (c) 1998 G R Liddon + +===========================================================================*/ + +/*---------------------------------------------------------------------- + Includes + -------- */ + +/* Std Lib + ------- */ +#include +#include +#include + +/* Glib + ---- */ +#include +#include +#include +#include +#include + +/* Local + ----- */ +#include "sprset.h" +#include "cross.h" + +/*---------------------------------------------------------------------- + Tyepdefs && Defines + ------------------- */ + +using namespace std; + +/*---------------------------------------------------------------------- + Structure defintions + -------------------- */ + +/*---------------------------------------------------------------------- + Function Prototypes + ------------------- */ + +/*---------------------------------------------------------------------- + Vars + ---- */ + +/*---------------------------------------------------------------------- + Data + ---- */ + +static const char BadFileChars[] = +{ + '+', '-', '*', '/', '\\', '#', ',', + '.', '(', ')', '!', '"', '£', '$', + '%', '^', '&', '=', '#', ':', ';', '<', + '>', '?', '@', '{', '}', '[', ']', '¬', +}; + +static const int nbBadFileChars = (sizeof(BadFileChars) / sizeof(char)); + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +GString ReplaceBadFileChars(GString s) +{ + GString out; + const char *textin = (const char*)s; + char *textout = new char[s.Len()+1]; + memset(textout, 0, s.Len()+1); + int i, p; + + p=0; + for (i=0; i (*PalIt).GetNumOfCols()) + (*PalIt)=ThisPal; + + PalIndex=PalIt-AllSprPals.begin(); + } + } + + /* If Palindex == -1 then we couldn't find the palette we wanted so add this one to the pool */ + + if (PalIndex==-1) + { + AllSprPals.resize(AllSprPals.size()+1); + SprPal & ThisSprPal=AllSprPals[AllSprPals.size()-1]; + PalIndex=AllSprPals.size()-1; + ThisSprPal=ThisPal; + ThisSprPal.SetPlusColZero((*it).GetPlusColZero()); + ThisSprPal.SetZeroColZero((*it).GetZeroColZero()); + ThisSprPal.SetName((*it).GetName()); + } + + /* Set the sprframe to have the write pal index */ + + (*it).SetPalIndex(PalIndex); + AllSprPals[PalIndex].SetPalIndex(PalIndex); + } + + cout<<"Found "<SaveAs16ColLbm(FileName); +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +#include + +void SprSet::WriteReport(char const * File) +{ + const int DirLen=1024; + char Dir[DirLen+1]; + GString CurrDir; + + CurrDir=getcwd(Dir,DirLen); + CurrDir.Upper(); + CurrDir=CurrDir+"\\"; + + GString OutFileName(File); + OutFileName.Lower(); + + Gofstream Out; + + Out.open(OutFileName,ios::out); + + if (Out) + { + Out<<"File\tTPage\tClut\tu\tv\tw\th\tRotated"<GetActualName(); + u=Frm.GetTPRect().X; + v=Frm.GetTPRect().Y; + w=Frm.GetWidth(); + h=Frm.GetHeight(); + + RelName=GFName::makerelative(CurrDir,Name,Dir); + + Out<<(char const *)RelName<<"\t$"<PlotFrame(AllSprFrames[f]); + + for (f=0;fPlotPal(AllSprPals[f]); + + /* + struct SpriteBankHdr + { + u16 NumOfSprites; + u16 NumOfTPages; + + u16 TpageStart; + u16 WidthInTpages; + + u16 HeightInTpages; + u16 NumOfSpareBoxes; + }; + */ + + Gofstream Out(Gofstream::LITTLE_ENDIAN); + + GString OutFileName(File); + OutFileName.Lower(); + + Out.open(OutFileName,ios::out|ios::binary); + + TPRectVec spareVRAM; + + MyVram.getUnusedSpace(spareVRAM); + + if (Out) + { +int FrameCount=AllSprFrames.size(); + if (m_AnimatedHeadersOnly) + { + FrameCount=0; + for (f=0;fsetDoCompress(m_compressTpages); + Vi->Write(Out); + } + + Out.close(); + } + else + Error(ERR_FATAL,"Error wring file %s",(char const *)OutFileName); + + WriteHeaderFile(GetHeaderFileName(File)); +} + + +GString SprSet::GetHeaderFileName(char const * File) +{ + GString HeaderFileName; + + if (IncOutFile == "") + { + GFName HeaderFile(File); + HeaderFile.Ext("h"); + HeaderFileName=HeaderFile.FullName(); + } + else + HeaderFileName=IncOutFile; + + HeaderFileName.Lower(); + + return(HeaderFileName); +} + +void SprSet::WriteHeaderFile(char const * HName) +{ + ofstream HOut; + int f; + + GFName HeaderFile(HName); + + GString OFileDefine; + OFileDefine="__SPR_"; + OFileDefine+=HeaderFile.File(); + OFileDefine+="_H__"; + OFileDefine.Upper(); + + GString HeaderFileName(HeaderFile.FullName()); + HeaderFileName.Lower(); + + HOut.open(HeaderFileName,ios::out); + + if (HOut) + { + HOut<<"#ifndef "<<(char const *)OFileDefine< CopySprPals; /* Make a copy of the palettes */ + + CopySprPals=AllSprPals; + + std::sort(CopySprPals.begin(),CopySprPals.end()); /* Sort em according to how many cols */ + + for (f=0;f AllocRects; + + AllocRects.resize(AllSprFrames.size()); + + std::vector oldTypes; + + oldTypes.resize(AllSprFrames.size()); + + for (f=0;fgetAllocateAs16Bit()) + oldTypes[f]=AllocRects[f].convertTo16Bit(); + } + + /* Allocate int VRAM */ + + if(Vr.AllocVRAM(AllocRects,false,true,true)) + { + /* + Now go back through all the sprite frames and tell them where + they are going to sit in VRAM + */ + + for (f=0;fgetAllocateAs16Bit()) + AllocRects[f].convertFrom16Bit(oldTypes[AllocRects[f].GetId()]); + + AllSprFrames[AllocRects[f].GetId()].SetVRAMPos(AllocRects[f]); + } + } + else + { + Error(ERR_FATAL,"Couldn't fit frames into VRAM"); + } + + /* Go through and tell all pals and frames what the base tpage is */ + + for (f=0;fWriteInTpageChunks(out); + } + else + Error(ERR_FATAL,"Error opening raw file %s",file); +} + +/*---------------------------------------------------------------------- + Function: + Purpose: Write out sprs and pals to a sprite file (not a VRAM block) + Params: + Returns: + ---------------------------------------------------------------------- */ +void SprSet::WriteSprFile(char const * Name) +{ + std::vector SprOffsets; + std::vector PalOffsets; + + ProcessPals(); + + Gofstream SpriteOut(Gofstream::LITTLE_ENDIAN); + + GString SpriteOutName(Name); + SpriteOutName.Lower(); + SpriteOut.open(SpriteOutName,ios::binary|ios::out|ios::trunc); + + if (SpriteOut) + { + int NumOfSprs; + int NumOfPals; + int PalOffsetTable; + int SprOffsetTable; + + /* + struct SPR_RAM_HDR + { + int NumOfPals; + int NumOfSprs; + int PalOffsets[NumOfPals]; + int SprOfffsets[NumOfSprs]; + RAM_FRAME_HDR Frames[NumOfSprs]; + Pals Pals[NumOfPals]; + Data [NumOfSprs] + } + + */ + + NumOfSprs=AllSprFrames.size(); + NumOfPals=AllSprPals.size(); + + SpriteOut.Put32(NumOfPals); + SpriteOut.Put32(NumOfSprs); + + SprOffsets.resize(NumOfSprs); + PalOffsets.resize(NumOfPals); + + PalOffsetTable=SpriteOut.tellp(); + SpriteOut.seekp(sizeof(u32)*NumOfPals,ios::cur); + + SprOffsetTable=SpriteOut.tellp(); + SpriteOut.seekp(sizeof(u32)*NumOfSprs,ios::cur); + + int f; + + for (f=0;f MaxSize) + NewWidth=MaxSize; + + if (NewHeight > MaxSize) + NewHeight=MaxSize; + + if (NewWidth != GetWidth() || NewHeight != GetHeight()) + { + cout<<"Reducing frame "<GetActualFileName()<GetActualFileName()< 254 || Height > 254) + { + Error(ERR_FATAL,"Images only allowed to 254x254, this is %dx%d : %s",Width,Height,MyFileInfo.GetActualFileName()); + } + + +} + +struct fRGBA + { + void Set(float _R,float _G,float _B,float _A) + {R=_R;G=_G;B=_B;A=_A;} + + float R,G,B,A; + }; + +void SprFrame::ResizeAndReduce(Frame & Frm,int TargCols,float XPerc,float YPerc,bool ZeroSeeThrough) +{ + std::vector FullColNewScreen; + std::vector DestBytePic; + std::vector Bitmap; + + u8 Pal[256*3]; + u8 * Dest; + int f; + + Bitmap.resize(Frm.GetWidth()*Frm.GetHeight()*4); + + Frm.MakeRGBA(&Bitmap[0],ZeroSeeThrough); + + int Width,Height; + + Width=Frm.GetWidth(); + Height=Frm.GetHeight(); + + int NewWidth=float(Width)*XPerc; + int NewHeight=float(Height)*YPerc; + + if (!(Dest=new u8[NewWidth*NewHeight])) + GObject::Error(ERM_OUTOFMEM); + + FullColNewScreen.resize(NewWidth*NewHeight); + DestBytePic.resize(NewWidth*NewHeight*3); + + /* Now Super Sample it down */ + + const int Samples=8; + + int DestW=NewWidth; + int DestH=NewHeight; + float YMul=float(Height)/DestH; + float XMul=float(Width)/DestW; + + for (int dy=0;dy1.0f) + R=1.0f; + + if (G>1.0f) + B=1.0f; + + if (B>1.0f) + B=1.0f; + + int DestIndex=(dy*NewWidth+dx); + + FullColNewScreen[DestIndex].Set(R,G,B,A); + } + } + + /* Convert Back to RGBA into a dest byte picture */ + + const float Bound=0.5f; + + for (f=0;f Bound) + { + DestBytePic[f*3+0]=R*255; + DestBytePic[f*3+1]=G*255; + DestBytePic[f*3+2]=B*255; + } + else + { + DestBytePic[f*3+0]=0; + DestBytePic[f*3+1]=0; + DestBytePic[f*3+2]=0; + } + } + + /* Now reduce colours */ + Palette NewPal; + + if (ZeroSeeThrough) + { + int Cols=TargCols-1; + + tquant(&DestBytePic[0],Dest,Pal,Cols,NewWidth*NewHeight); + + for (f=0;f Bound) + Dest[f]=Dest[f]+1; + else + Dest[f]=0; + } + + for (f=1;f Body; + + Frame NewFrame; + + NewFrame=*this; + + Rect OriginalRect; + + OriginalRect=NewFrame; + + OriginalRect.X=0; + OriginalRect.Y=0; + OriginalRect.W=GU_AlignVal(OriginalRect.W,AlignPixels); + + NewFrame.Crop(OriginalRect); + + int nfW,nfH,nfLineWidthBytes,nfAreaBytes; + + nfW=NewFrame.GetWidth(); + nfH=NewFrame.GetHeight(); + nfLineWidthBytes=GU_AlignVal(nfW,2)/2; + nfAreaBytes=nfLineWidthBytes*nfH; + + Body.resize(nfAreaBytes); + + for (int y=0;y OutPal; + MakePSXPal(OutPal); + + Out.Put32(OutPal.size()); + + for (int f=0;f>3; + G=Col.GetG()>>3; + B=Col.GetB()>>3; + return((R&0x1f)<<0)|((G&0x1f)<<5)|((B&0x1f)<<10); +} +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void SprPal::MakePSXPal(std::vector & OutWords) const +{ + + int NumOfCols; + int f; + + NumOfCols=(*this).GetNumOfCols(); + OutWords.resize(NumOfCols); + + if (GetZeroColZero() || GetPlusColZero()) + { + OutWords[0]=0; + + for (f=1;f + +/* Glib + ---- */ +#include +#include +#include +#include + +/* Local + ----- */ +#include "tpage.h" +#include "vimage.h" + + +/*---------------------------------------------------------------------- + Tyepdefs && Defines + ------------------- */ + +/*---------------------------------------------------------------------- + Structure defintions + -------------------- */ + +/* Encapsulates a file and all the infomation parkgrab needs to process it + ----------------------------------------------------------------------- */ +class FileInfo + { + public: + FileInfo(void) + { + CrossHair=false; + ForceOffsets=false; + } + + FileInfo(FileInfo const & Fi) + { + operator=(Fi); + } + + void operator=(FileInfo const & Fi) + { + FileName = Fi.FileName; + strcpy(ActualFileName,Fi.ActualFileName); + CrossHair=Fi.CrossHair; + ZeroColZero = Fi.ZeroColZero; + PlusColZero = Fi.PlusColZero; + MoveUVs = Fi.MoveUVs; + AllowRotate=Fi.AllowRotate; + ForceOffsets=Fi.ForceOffsets; + XOff=Fi.XOff; + YOff=Fi.YOff; + ShrinkToFit=Fi.ShrinkToFit; + m_allocateAs16Bit=Fi.m_allocateAs16Bit; + } + + void SetForceOffsets(int x,int y) + { + ForceOffsets=true; + XOff=x; + YOff=y; + } + + GString CheckForPlus(GString s) + { + GString out; + const char *textin = (const char*)s; + char *textout = new char[s.Len()+1]; + memset(textout, 0, s.Len()+1); + int p; + bool plus; + + p=0; + if (textin[0] == '+') plus = true; + else plus = false; +/* for (i=0; i FIVec; +typedef std::vector::iterator FIVecIt; +typedef std::vector::const_iterator FIVecConstIt; + + +/* A Palette of graphics with sprset specific stuff + ---------------------------------------------- */ +class SprPal : public Palette +{ +public: + SprPal(void) + {} + + SprPal(SprPal const & Pal) + {MakeCopy(Pal);} + + void operator=(SprPal const & Pal) + {MakeCopy(Pal);} + + void operator=(Palette const & Pal) + {Palette::CopyPal(Pal);} + + bool operator==(Palette const & Pal) + {return(Palette::operator==(Pal));} + + bool operator<(SprPal const & Pal) + {return(GetNumOfCols() < Pal.GetNumOfCols());} + + void SetPalIndex(int NewPalIndex) + {PalIndex=NewPalIndex;} + + int GetPalIndex(void) const + {return(PalIndex);} + + void SetVRAMPos(TPRect & NewRect) + { + MyRect=NewRect; + } + + void SetTpBase(int NewTpBase) + { + TpBase=NewTpBase; + BaseTpX=((TpBase&0xf)*64); + BaseTpY=(TpBase>>4)*256; + } + + u16 GetClut(void) + { + int x=(MyRect.X/4)+BaseTpX; + int y=MyRect.Y+BaseTpY; + return((y<<6)|((x>>4)&0x3f)); + } + + TPRect const & GetTPRect(void) const + {return(MyRect);} + + char const * GetName(void) const + {return(Name);} + + void SetName(char const * NewName) + {Name=NewName;} + + void SetZeroColZero(bool New) + {ZeroColZero=New;} + + bool GetZeroColZero(void) const + {return(ZeroColZero);} + + void SetPlusColZero(bool New) + {PlusColZero=New;} + + bool GetPlusColZero(void) const + {return(PlusColZero);} + + void Write(Gofstream & Out) const; + void MakePSXPal(std::vector & OutWord) const; + u16 GetPsxCol(Colour const & Col) const; + +protected: + int PalIndex; + int TpBase; + int BaseTpX; + int BaseTpY; + bool ZeroColZero; + bool PlusColZero; + TPRect MyRect; + GString Name; + + void MakeCopy(SprPal const & NewPal) + { + Palette::CopyPal(NewPal); + PalIndex=NewPal.PalIndex; + TpBase=NewPal.TpBase; + BaseTpX=NewPal.BaseTpX; + BaseTpY=NewPal.BaseTpY; + MyRect=NewPal.MyRect; + Name=NewPal.Name; + ZeroColZero=NewPal.ZeroColZero; + PlusColZero=NewPal.PlusColZero; + } +}; + +/* A Frame of graphics with sprset specific stuff + ---------------------------------------------- */ +class SprFrame : public Frame +{ +public: + enum BDEPTH + { + BITS_4, + BITS_8, + }; + + SprFrame(void); + SprFrame(SprFrame const & NewFrame) + {MakeCopy(NewFrame);} + + void operator=(SprFrame const & NewFrame) + {MakeCopy(NewFrame);} + + void SetFrameAndInfo(Frame const & Fr,FileInfo const & MyFileInfo,int MaxSize); + FileInfo * GetFileInfo(void) + { + return (&MyFileInfo); + } + + void Process(void); + + void SetPalIndex(int NewPalIndex) + {PalIndex=NewPalIndex;} + + int GetPalIndex(void) const + {return(PalIndex);} + + void SetVRAMPos(TPRect const & Rect); + + BDEPTH GetBitDepth(void) const + { + BDEPTH RetDepth; + int NumOfCols; + + NumOfCols=MyPal.GetNumOfCols(); + + if (NumOfCols<=16) + RetDepth=BITS_4; + else + RetDepth=BITS_8; + + return(RetDepth); + } + + TPRect const & GetTPRect(void) const + {return(MyRect);} + + bool IsRotated(void) const + {return(MyRect.GetRotate());} + + void SetTpBase(int NewTpBase) + { + TpBase=NewTpBase; + BaseTpX=((TpBase&0xf)*64); + BaseTpY=(TpBase>>4)*256; + } + + void SetClut(u16 NewClut) + {Clut=NewClut;} + + u16 GetClut(void) const + {return(Clut);} + + void WriteHeader(Gofstream & Out); + + bool GetZeroColZero(void) const + {return(MyFileInfo.GetZeroColZero());} + + bool GetPlusColZero(void) const + {return(MyFileInfo.GetPlusColZero());} + + bool GetAllowRotate(void) const + {return(MyFileInfo.GetAllowRotate());} + + + void Write(Gofstream & Out) const; + + void WriteHeaderNotInVram(Gofstream & Out); + + + int getV(void) + {return(MyRect.X&0xff);} + + int getU(void) + { + u16 tpage; + int u; + int pageX; + + tpage=GetTpage(); + pageX=(tpage&0xf)*256; + u=MyRect.X-pageX; + + switch(GetBitDepth()) + { + case BITS_8: + u/=2; + break; + } + + return(u); + } + + u16 GetTpage(void) + { + int tp; + BDEPTH RetDepth; + + RetDepth=GetBitDepth(); + + int abr=0; + int x=BaseTpX + (MyRect.X/4); //MA + int y=BaseTpY + MyRect.Y; //MA + + switch(RetDepth) + { + case BITS_4: + tp=0; + break; + case BITS_8: + tp=1; + break; + } + + return((((tp)&0x3)<<7)|(((abr)&0x3)<<5)|(((y)&0x100)>>4)|(((x)&0x3ff)>>6)| (((y)&0x200)<<2)); + } + + bool IsAnimated() + { + return(MyFileInfo.getAllocateAs16Bit()); + } +protected: + void ResizeAndReduce(Frame & Frm,int TargCols,float XPerc,float YPerc,bool ZeroSeeThrough); + + + void MakeCopy(SprFrame const & NewFrame) + { + Frame::CopyFrame(NewFrame); + + Clut=NewFrame.Clut; + TpBase=NewFrame.TpBase; + BaseTpX=NewFrame.BaseTpX; + BaseTpY=NewFrame.BaseTpY; + PalIndex=NewFrame.PalIndex; + MyFileInfo=NewFrame.MyFileInfo; + MyRect=NewFrame.MyRect; + } + + + u16 Clut; + int TpBase; + int BaseTpX; + int BaseTpY; + + GString loadFileName; + + int PalIndex; + FileInfo MyFileInfo; + TPRect MyRect; +}; + +/* A collection of sprites + ----------------------- */ +class SprSet : protected GObject +{ +public: + SprSet(void) + { + Vi=NULL; + MaxSize=0; + } + + void SetMaxSize(int New) + {MaxSize=New;} + + void AddFiles(FIVec const & FileList); + + void Write(char const * FileName,int TpNumber,int WidthInTpages,int HeightInTpages); + void WriteLBM(char const * FileName); + void WriteSprFile(char const * Name); + void WriteReport(char const * Name); + void writeRawTPage(char const * File); + void SetIncOutFile(char const * NewIncOutFile) + {IncOutFile=NewIncOutFile;IncOutFile.Lower();} + + void setAnimatedHeader(bool newVal) + {m_AnimatedHeadersOnly=newVal;} + + void setDontOutputBoxes(bool newVal) + {m_DontOutputBoxes=newVal;} + + void setAlignHeaders(bool newVal) + {m_AlignHeaders=newVal;} + + void setHalfTpage(bool newVal) + {m_halfTpage=newVal;} + + void setCompressTpages(bool newVal) + {m_compressTpages=newVal;} + + void setNoWriteTpages(bool newVal) + {m_noWriteTpages=newVal;} + +protected: + void WriteHeaderFile(char const * HName); + + void ProcessPals(void); + void AddFile(FileInfo const & ThisInfo); + void AddAnm(FileInfo const & ThisInfo); + void AddLbm(FileInfo const & ThisInfo); + void AddFrame(Frame const & Fr,FileInfo const & ThisInfo); + + void AddFramesAndPalsToVRAM(VRAM & Vr,int TpNumber,int WidthInTpages,int HeightInPixels); + + GString GetHeaderFileName(char const * File); + + + typedef std::vector SprFrVec; + typedef std::vector::iterator SprFrIt; + + typedef std::vector SprPalVec; + typedef std::vector::iterator SprPalVecIt; + + GString IncOutFile; + + bool m_AnimatedHeadersOnly; + bool m_DontOutputBoxes; + bool m_AlignHeaders; + bool m_halfTpage; + bool m_compressTpages; + bool m_noWriteTpages; + + SprFrVec AllSprFrames; + SprPalVec AllSprPals; + VRAMImage * Vi; + + int MaxSize; +}; + +/*---------------------------------------------------------------------- + Globals + ------- */ + +/* Vars + ---- */ + +/* Data + ---- */ + +/* Functions + --------- */ + +/*---------------------------------------------------------------------- */ + +#else /* __SPRSET_H__ */ + +class SprPal; +class SprFrame; + +#endif + +/*=========================================================================== + end */ diff --git a/Utils/parkgrab/tpage.cpp b/Utils/parkgrab/tpage.cpp new file mode 100644 index 000000000..84921f5c6 --- /dev/null +++ b/Utils/parkgrab/tpage.cpp @@ -0,0 +1,857 @@ +/*========================================================================= + + FILENAME.CPP + + Author: Gary Liddon @ + Created: + Project: + Purpose: + + Copyright (c) 1997 Climax Development Ltd + +===========================================================================*/ + +/*---------------------------------------------------------------------- + Includes + -------- */ + +/* Std Lib + ------- */ +#include +#include "conio.h" + +/* Glib + ---- */ +#include "gutils.h" + +/* Local + ----- */ +#include "tpage.h" +#include "grect.h" + +/* Graphics + -------- */ + +/*---------------------------------------------------------------------- + Tyepdefs && Defines + ------------------- */ + +using namespace std; + + +/*---------------------------------------------------------------------- + Structure defintions + -------------------- */ +struct TPInfo +{ + int XAlign; + int TpWidth; + int BorderX; + int BorderY; +}; + +/* Information about where I can place this frame in the Tpage + ----------------------------------------------------------- */ +/*---------------------------------------------------------------------- + Vars + ---- */ +static TPInfo const InfStruct[TP_NUM_OF_TP_TYPES]= +{ + {1,256,1,1}, /* TP_4 */ + {2,512,2,1}, /* TP_8 */ + {4,256,4,1}, /* TP_16 */ + {0,0,0,0}, /* TP_SCREEN */ + {16*4,1024*4,0,0}, /* TP_PAL */ +}; + +/*---------------------------------------------------------------------- + Function Prototypes + ------------------- */ + +/*---------------------------------------------------------------------- + Vars + ---- */ +int TPRect::W2Alloc=1; +int TPRect::H2Alloc=1; + +/*---------------------------------------------------------------------- + Data + ---- */ + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +VRAM::VRAM(int nTpWidth,int nTpHeightInPixels) +{ + Big2Little=false; + RotateEveryEmpty=false; + + + TpWidth=-1; + TpHeightInPixels=-1; + + Clear(nTpWidth,nTpHeightInPixels); +} + +void VRAM::Clear(int nTpWidth,int nTpHeightInPixels) +{ + if (nTpWidth >= 0 ) + TpWidth=nTpWidth; + + if (nTpHeightInPixels >= 0) + TpHeightInPixels=nTpHeightInPixels; + + InitEmpty(0,0,TpWidth*256,TpHeightInPixels); +} + + +/*---------------------------------------------------------------------- + Function: void VRAM::InitEmpty(void) + Purpose: Initialise the VRAM as empty + Params: + Returns: + ---------------------------------------------------------------------- */ +void VRAM::InitEmpty(int vX,int vY,int nW,int nH) +{ + const int Width16=256; + const int Height16=256; + + W=nW; + H=nH; + X=vX; + Y=vY; + + VRAMWidthPages=W/Width16; + VRAMHeightPages=H/Height16; + + if (!VRAMHeightPages) + { + VRAMHeightPages = 1; + } + + NumOfTPages=VRAMWidthPages*VRAMHeightPages; + + VecOfPages.resize(NumOfTPages,TPRectList()); + + Unused.reserve(4000); + Used.reserve(2000); + + Unused.resize(0); + Used.resize(0); + + for (int f=0;fXAlign; + + WorkingWidth=GU_AlignVal(ThisRect.W,Pi.XAlign); + + Pi.MinX=Tpi->BorderX; + Pi.MinY=Tpi->BorderY; + Pi.MaxX=W-Tpi->BorderX-WorkingWidth; + Pi.MaxY=H-Tpi->BorderY-ThisRect.H; + + Pi.TpWidthPix=Tpi->TpWidth; + + Pi.MinXTp=Tpi->BorderX; + Pi.MaxXTp=Tpi->TpWidth-Tpi->BorderX-WorkingWidth; + + Pi.MinYTp=Tpi->BorderY; + Pi.MaxYTp=(256-Tpi->BorderY)-ThisRect.H; +} + +bool VRAM::TryRect(TPRect & BlankRect,TPRect & ThisRect) +{ + POS_INFO Pi; + PosFromTPrect(ThisRect,Pi); + + int MinTpX=Pi.MinXTp+(BlankRect.X/Pi.TpWidthPix)*Pi.TpWidthPix; + int MaxTpX=Pi.MaxXTp+(BlankRect.X/Pi.TpWidthPix)*Pi.TpWidthPix; + int MinTpY=Pi.MinYTp+(BlankRect.Y/256)*256; + int MaxTpY=Pi.MaxYTp+(BlankRect.Y/256)*256; + + /* Move to avoid edges of the map */ + int MinX = MinTpX > Pi.MinX ? MinTpX : Pi.MinX; + int MaxX = MaxTpX < Pi.MaxX ? MaxTpX : Pi.MaxX; + int MinY = MinTpY > Pi.MinY ? MinTpY : Pi.MinY; + int MaxY = MaxTpY < Pi.MaxY ? MaxTpY : Pi.MaxY; + + int ThisX=GU_AlignVal(BlankRect.X,Pi.XAlign); + int ThisY=BlankRect.Y; + + if (ThisXMaxX) + return(false); + + if (ThisYMaxY) + return(false); + + ThisRect.SetXY(ThisX,ThisY); + + if (!InColisionWithUsed(ThisRect)) + { + RemovedFromUnused(ThisRect); + AddToUsed(ThisRect); + return(true); + } + + return(false); +} + +/*---------------------------------------------------------------------- + Function: TPRect VRAM::AllocVRAM(TPageType nType,int nW,int nH,bool Rotated) + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ + +class Predicate +{ +public: + bool operator()(TPRect const & R1,TPRect const & R2) const + { + u32 R1Val=(R1.H<<16)|(R1.W); + u32 R2Val=(R2.H<<16)|(R2.W); + return (R1ValR2Val); + } +}; + +/*---------------------------------------------------------------------- + Function: TPRect VRAM::AllocVRAM(TpRectVec & RectVec) + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +bool VRAM::AllocVRAM(TPRectVec & RectVec,bool nRotateEveryEmpty,bool nBig2Little,bool nWiderThanHigher) +{ + int f; + + RotateEveryEmpty=nRotateEveryEmpty; + Big2Little=nBig2Little; + WiderThanHigher=nWiderThanHigher; + + if (WiderThanHigher) + { + for (f=0;f RectVec[f].W) && CanRotate(RectVec[f])) + RectVec[f].SetRotate(!RectVec[f].GetRotate()); + } + } + + if (!Big2Little) + std::sort(RectVec.begin(),RectVec.end(),Predicate()); + else + std::sort(RectVec.begin(),RectVec.end(),Predicate2()); + + bool AllocedEverything=true; + + for (f=0;f + +/* Glib + ---- */ +#include + +/* Local + ----- */ + +/*---------------------------------------------------------------------- + Tyepdefs && Defines + ------------------- */ + +/*---------------------------------------------------------------------- + Structure defintions + -------------------- */ +struct POS_INFO +{ + int MinXTp; /* Minimum x placeable within a Tpage */ + int MaxXTp; /* Maximum x placeable within a Tpage */ + + int MinYTp; /* Minimum y placeable within a Tpage */ + int MaxYTp; /* Maximum y placeable within a Tpage */ + + int MinX; /* Minimum global x */ + int MaxX; /* Maximum global x */ + + int MinY; /* Minimum global y */ + int MaxY; /* Maximum global y */ + + int XAlign; /* X Alignment */ + int TpWidthPix; /* Width of each tpages for this rect */ +}; + + +/* Different Tpage Types + --------------------- */ +enum TPageType +{ + TP_4= 0, + TP_8, + TP_16, + TP_SCREEN, + TP_PAL, + TP_NUM_OF_TP_TYPES, +}; + + +/* A Rectangle in the Tpage + ------------------------ */ +class TPRect : public Rect +{ +public: + TPRect(void); + TPRect(TPageType nType,int nW,int nH); + TPRect(TPRect const & NewR) {MakeCopy(NewR);} + + void InitFromFrame(Frame const & Fr); + void SetAlloced(bool nAlloced=true); + bool SetRotate(bool Rot=true); + void operator=(TPRect const & NewR) {MakeCopy(NewR);} + bool operator< (TPRect const & R) const {return(GetId() TPRectVec; + +/* VRAM + ---- */ + +typedef std::list TPRectList; +typedef std::vector TPRectListVec; + +class VRAM : public GObject +{ +public: + VRAM(int nTpWidth=16,int nTpHeightInPixels=512); + + int GetNumOfItems(void); + int GetNumOfUsedPages(); + + bool AllocVRAM(TPRect & OriginalRect); + bool AllocVRAM(TPRectVec & RectVec,bool nRotateEveryEmpty,bool nBig2Little,bool nWiderThanHigher); + + TPRect const & GetVRAM(VHND hnd) const; + + TPRectVec & GetUsed(void) + {return(Used);} + + TPRectVec & GetUnused(void) + {return(Unused);} + + void Clear(int nTpWidth=-1,int nTpHeight=-1); + + void SetBig2Little(bool Val=true) + { Big2Little=Val;} + + void SetRotateEveryEmpty(bool Val=true) + { RotateEveryEmpty=Val;} + + bool CanRotate(TPRect & ThisRect); + + void getUnusedSpace(TPRectVec & unusedBoxes); + +protected: + void PosFromTPrect(TPRect & ThisRect,POS_INFO & Pi); + bool TryRect(TPRect & BlankRect,TPRect & ThisRect); + + TPRectListVec VecOfPages; + + bool TryNFit(TPRectList & TpList,TPRect & ThisRect); + + void AddEmpty(int x,int y,int w,int h); + bool InColisionWithUsed(TPRect const & R); + void InitEmpty(int vX,int vY,int W,int H); + bool CheckValidAlloc(TPageType nType,int nW,int nH); + int GetXAlign(TPageType nType); + int GetMaxWidthTp(TPageType nType); + void RemovedFromUnused(TPRect const & ThisRect); + void AddToUsed(TPRect const & ThisRect); + void RectFromTpRect(Rect & R,TPRect const & ThisRect); + + TPRect & NewItem(TPRectVec & TPRects); + + TPRect & NewUnused(void) + { return(NewItem(Unused)); } + + TPRect & NewUsed(void) + { return(NewItem(Used)); } + + + TPRectVec Unused; + TPRectVec Used; + TPRect ErrorRect; + + int X,Y,W,H; + int NumOfTPages; + int TpWidth; + int TpHeightInPixels; + + int VRAMWidthPages; + int VRAMHeightPages; + + bool Big2Little; + bool RotateEveryEmpty; + bool WiderThanHigher; +}; + +/* Error codes for VHND + -------------------- */ +enum +{ + VHND_NULL = -1, +}; + +/*---------------------------------------------------------------------- + Globals + ------- */ + +/* Vars + ---- */ + +/* Data + ---- */ + +/* Functions + --------- */ +void TestTPageStuff(void); + +/*---------------------------------------------------------------------- */ + +#endif /* __TPAGE_HPP__ */ + +/*=========================================================================== + end */ + + diff --git a/Utils/parkgrab/vimage.h b/Utils/parkgrab/vimage.h new file mode 100644 index 000000000..43a1d4b43 --- /dev/null +++ b/Utils/parkgrab/vimage.h @@ -0,0 +1,103 @@ +/*========================================================================= + + VIMAGE.CPP + + Author: Gary Liddon @ Climax + Created: + Project: TPW Parkgrab + Purpose: An object that represents a bit of VRAM + + Copyright (c) 1998 G R Liddon + +===========================================================================*/ + +#ifndef __VIMAGE_H__ +#define __VIMAGE_H__ + +/*---------------------------------------------------------------------- + Includes + -------- */ + +/* Std Lib + ------- */ + +/* Glib + ---- */ +#include +#include + +/* Local + ----- */ +#include "sprset.h" + +/*---------------------------------------------------------------------- + Tyepdefs && Defines + ------------------- */ + +/*---------------------------------------------------------------------- + Structure defintions + -------------------- */ + +class VRAMImage : protected GObject +{ +public: + + VRAMImage(int NewWidthInTpages,int NewHeightInPixels); + ~VRAMImage(void); + + void WriteInTpageChunks(std::ofstream & Str); + void Write(std::ofstream & Str); + void PlotPal(SprPal const & PalToPlot); + void PlotFrame(SprFrame const & FrameToPlot); + void SaveAs16ColLbm(const char * Name); + + void setDoCompress(bool newVal) + {m_doCompress=newVal;} + + bool getDoCompress(void) const + {return(m_doCompress);} + + void getTpData(unsigned int tp,std::vector & dest) const; + +protected: + void PlotFrame4(SprFrame const & Fr); + void PlotFrame8(SprFrame const & Fr); + u16 GetPsxCol(Colour const & Col) const; + + int WidthInBytes; + int WidthInTpages; + int HeightInTPages; + int HeightInPixels; + int aTPageHeight; + int TPageSizeInBytes; + int VramAreaBytes; + bool m_doCompress; + + u8 * lbmData; + u8 * VRAMData; +}; + + +/*---------------------------------------------------------------------- + Globals + ------- */ + +/* Vars + ---- */ + +/* Data + ---- */ + +/* Functions + --------- */ + +/*---------------------------------------------------------------------- */ + +#else /* __VIMAGE_H__ */ + +class VRAMImage; + +#endif + +/*=========================================================================== + end */ diff --git a/Utils/transtext/kanjiclass.cpp b/Utils/transtext/kanjiclass.cpp new file mode 100644 index 000000000..5706b4b58 --- /dev/null +++ b/Utils/transtext/kanjiclass.cpp @@ -0,0 +1,1022 @@ +/*========================================================================= + + KANJICLASS.CPP + + Author: Gary Liddon @ + Created: + Project: + Purpose: + + Copyright (c) 1998 G R Liddon + +===========================================================================*/ + +/*---------------------------------------------------------------------- + Includes + -------- */ + +#include "kanjiclass.h" + +/* Std Lib + ------- */ +#include + +/* Glib + ---- */ +#include +#include + +/* Local + ----- */ + +using namespace std; + +/*---------------------------------------------------------------------- + Tyepdefs && Defines + ------------------- */ +#include "fontdata/got11j0b.h" +#include "fontdata/got11j1b.h" +#include "fontdata/got13j0b.h" +#include "fontdata/got13j1b.h" +#include "fontdata/got15j0b.h" +#include "fontdata/got15j1b.h" +#include "fontdata/got15gai.h" + +/*---------------------------------------------------------------------- + Tyepdefs && Defines + ------------------- */ +static int const kanjiAddr0[3]= +{ + u32(got11j0b), + u32(got13j0b), + u32(got15j0b), +}; + +static int const kanjiAddr1[3]= +{ + u32(got11j1b), + u32(got13j1b), + u32(got15j1b), +}; + +static int const kanjiAddrG[3]= +{ + u32(0), + u32(0), + u32(got15gai), +}; + +static int const dotSize[3]={11,13,15}; + +/*---------------------------------------------------------------------- + Structure defintions + -------------------- */ +struct SjisS +{ + char Ascii; + unsigned char Num; + unsigned short Sjis; + char const * name; +}; + +/*---------------------------------------------------------------------- + Function Prototypes + ------------------- */ +static void dekan(u8 *ptr,u8 *buf,int dot); +static long kanjiTest( u8 const *sjis,KanjiClass::KanjiFontSize k = KanjiClass::FONT_SIZE_11); +static int kanjiTrans(u16 scode); +static void ascii2SJIS(u8 *dest,u8 const *src); +static void ascii2SJIS(u8 *dest,u8 Ascii); +static GString makeName(char const * dir,int frameNumber); + + + +/*---------------------------------------------------------------------- + Vars + ---- */ + +/*---------------------------------------------------------------------- + Data + ---- */ + +static SjisS SjisTable[]= +{ + {'0',10, 0x824f,"num" },{'A',26, 0x8260,"upper_case" },{'a',26, 0x8281,"lower_case" }, + {' ', 1,0x8140,"space"},{'!', 1,0x8149,"exclamation",},{'"', 1,0x8168,"double_quote"},{'#', 1,0x8194,"hash",},{'$', 1,0x8190,"dollar"}, + {'%', 1,0x8193,"percent"},{'&', 1,0x8195,"and"},{'\'',1,0x8166,"single_quote"},{'(', 1,0x8169,"open_bracket"},{')', 1,0x816a,"close_bracket"}, + {'*', 1,0x8196,"star"},{'+', 1,0x817b,"plus",},{',', 1,0x8143,"comma",},{'-', 1,0x817c,"minus"},{'.', 1,0x8144,"period"}, + {'/', 1,0x815e,"forward_slash"},{':', 1,0x8146,"colon"},{';', 1,0x8147,"semi_colon"},{'<', 1,0x8171,"less_than"},{'=', 1,0x8181,"equals"}, + {'>', 1,0x8172,"greater_than"},{'?', 1,0x8148,"question_mark"},{'@', 1,0x8197,"ampersand"},{'[', 1,0x816d,"open_square_brace"},{'\\',1,0x818f,"back_slash"}, + {']', 1,0x816e,"close_square_brace"},{'^', 1,0x814f,"carrat"},{'_', 1,0x8151,"underscore"},{'`', 1,0x8165,"other_quote"},{'{', 1,0x816f,"open_brace"}, + {'|', 1,0x8162,"or"},{'}', 1,0x8170,"close_brace"},{'~', 1,0x8150,"tilde"},{0,0,0,NULL} +}; + +/* + * sjis code to access number transfer table (non-Kanji) + */ +static unsigned short kanji_0_table[19][2] = { + {0x8140, 0}, + {0x8180, 63}, + {0x81b8, 108}, + {0x81c8, 116}, + {0x81da, 123}, + {0x81f0, 138}, + {0x81fc, 146}, + + {0x824f, 147}, + {0x8260, 157}, + {0x8281, 183}, + {0x829f, 209}, + {0x8340, 292}, + {0x8380, 355}, + + {0x839f, 378}, + {0x83bf, 402}, + {0x8440, 426}, + {0x8470, 459}, + {0x8480, 474}, + {0x849f, 492} +}; + +/* + * sjis code to access number transfer table (user defined characters) + */ +static unsigned short kanji_g_table[19][2] = { + {0x8540, 0}, + {0x8546, 5}, + {0x8548, 6}, + {0x854b, 8}, + {0x8550, 9}, + + {0x85a0, 21}, + {0x85b0, 34}, + + {0x8640, 47}, + {0x8643, 49}, + {0x8645, 50}, + {0x8647, 51}, + {0x864a, 53}, + {0x864e, 56}, + {0x8660, 58}, + + {0x869f, 74}, + {0x86b8, 98}, + {0x8740, 160}, + {0x875c, 187}, + {0x8764, 194}, +}; + +/* + * sjis code to access number transfer table (First level Kanji) + */ +static unsigned short kanji_1_table[32][2] = { + {0x889f, 0}, + {0x8940, 94}, + {0x899f, 188}, + {0x8a40, 282}, + {0x8a9f, 376}, + {0x8b40, 470}, + {0x8b9f, 564}, + {0x8c40, 658}, + {0x8c9f, 752}, + {0x8d40, 846}, + {0x8d9f, 940}, + {0x8e40, 1034}, + {0x8e9f, 1128}, + {0x8f40, 1222}, + {0x8f9f, 1316}, + {0x9040, 1410}, + {0x909f, 1504}, + {0x9140, 1598}, + {0x919f, 1692}, + {0x9240, 1786}, + {0x929f, 1880}, + {0x9340, 1974}, + {0x939f, 2068}, + {0x9440, 2162}, + {0x949f, 2256}, + {0x9540, 2350}, + {0x959f, 2444}, + {0x9640, 2538}, + {0x969f, 2632}, + {0x9740, 2726}, + {0x979f, 2820}, + {0x9840, 2914} +}; + +/* + * sjis code to access number transfer table (Second level Kanji) + */ +static unsigned short kanji_2_table[37][2] = { + {0x989f, 0}, + {0x9940, 94}, + {0x999f, 188}, + {0x9a40, 282}, + {0x9a9f, 376}, + {0x9b40, 470}, + {0x9b9f, 564}, + {0x9c40, 658}, + {0x9c9f, 752}, + {0x9d40, 846}, + {0x9d9f, 940}, + {0x9e40, 1034}, + {0x9e9f, 1128}, + {0x9f40, 1222}, + {0x9f9f, 1316}, + {0xe040, 1410}, + {0xe09f, 1504}, + {0xe140, 1598}, + {0xe19f, 1692}, + {0xe240, 1786}, + {0xe29f, 1880}, + {0xe340, 1974}, + {0xe39f, 2068}, + {0xe440, 2162}, + {0xe49f, 2256}, + {0xe540, 2350}, + {0xe59f, 2444}, + {0xe640, 2538}, + {0xe69f, 2632}, + {0xe740, 2726}, + {0xe79f, 2820}, + {0xe840, 2914}, + {0xe89f, 3008}, + {0xe940, 3102}, + {0xe99f, 3196}, + {0xea40, 3290}, + {0xea9f, 3384} +}; + +/* + * sjis code to access number transfer table (Vertical writing) + */ +static unsigned short kanji_t_table[2][2] = { + {0xeb40, 0}, + {0xeb42, 4} +}; + + + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +static GString makeName(char const * dir,int frameNumber) +{ + char tempBuff[1024]; + + sprintf(tempBuff,"%s\\%04d.lbm",dir,frameNumber); + return(tempBuff); +} + + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void KanjiClass::writeEnglishFontLbms(char const * _dir,KanjiFontSize k,char const * repFile) +{ + SjisS * jisTab; + + jisTab=SjisTable; + + GString dir; + + dir=_dir; + dir+="\\"; + + vector allLbms; + + while (jisTab->name) + { + u16 num; + GString name; + GString fileName; + + num=jisTab->Sjis; + name=jisTab->name; + fileName=dir+name; + + if (jisTab->Num != 1) + { + for (int f=0;fNum;f++) + { + char saveName[300]; + + sprintf(saveName,"%s_%c.lbm",(char const *)fileName,jisTab->Ascii+f); + + saveKanjiLbm(saveName,k,num); + allLbms.push_back(saveName); + num++; + } + } + else + { + GString saveName; + saveName=fileName; + saveName+=".lbm"; + saveKanjiLbm(saveName,k,num); + allLbms.push_back(saveName); + } + + jisTab++; + } + + if (repFile) + { + ofstream out; + + out.open(repFile,ios::out|ios::trunc); + + if (out) + { + for (int f=0;f=0x8140 && kan<=0x84be) + kan-=0x8140; + else + { + if(kan>=0x8540 && kan<=0x8796) + { + kan-=0x8540; + kan+=((0x84be-0x8140)+1); + } + else + { + if(kan>=0x889f && kan<=0x9872) + { + kan-=0x889f; + kan+=((0x84be-0x8140)+1); + kan+=((0x8796-0x8540)+1); + } + else + Error(ERR_FATAL,"illegal kanji char"); + } + } + return kan; +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void KanjiClass::saveKanjiTable(char const *name) +{ + int num,highest; + + num=0; + highest=0; + + vector kanjiChars; + kanjiChars.resize(256*256); + + for (int f=0;f<256*256;f++) + kanjiChars[f]=-1; + + for(int l=0;l<256;l++) + { + for(int h=0;h<256;h++) + { + if(getKanjiHit(h,l)) + { + u16 kan; + int val; + + + kan=(h<<8)|l; + + + val=findKanjiIndex(kan); + kanjiChars[val]=num; + + if (val > highest) + highest=val; + + num++; + } + } + } + + cout<<"highest is "<>8; + kbuff[1]=kan&0xff; + + + addr=kanjiTest((u8 *)&kbuff,k); + + if(addr!=-1) + { + const int PLOT_X = 100; + const int PLOT_Y = 100; + int dot; + + dot=dotSize[k]; + + memset(buff,0,sizeof(buff)); + dekan((u8*)addr,(u8*)&buff,dot); + + Frame myFrame; + Frame topFrame; + Palette myPal; + + for (int f=0;f<256;f++) + myPal[f].SetRGB(255,255,0); + + myPal[0].SetRGB(255,0,0); + myPal[1].SetRGB(255,255,255); + myPal[2].SetRGB(0,0,0); + myPal[3].SetRGB(64,64,64); + myPal[255].SetRGB(255,0,255); + + myFrame.SetFrame((u8*)buff,16,dot,myPal); + topFrame=myFrame; + + myFrame.Resize(32,dot+2); + myFrame.Clear(0); + + + topFrame.ReplaceColour(1,3); + topFrame.PlotTrans(myFrame,0,0); + topFrame.PlotTrans(myFrame,2,0); + topFrame.PlotTrans(myFrame,0,2); + topFrame.PlotTrans(myFrame,2,2); + + topFrame.ReplaceColour(3,2); + topFrame.PlotTrans(myFrame,1,0); + topFrame.PlotTrans(myFrame,1,2); + topFrame.PlotTrans(myFrame,0,1); + topFrame.PlotTrans(myFrame,2,1); + + topFrame.ReplaceColour(2,1); + topFrame.PlotTrans(myFrame,1,1); + + Rect myRect; + + + myRect=topFrame.FindBoundingRect(); + + topFrame.Resize(256,200); + topFrame.Clear(0); + topFrame.DrawBox(Rect(100,0,1,200),255); + topFrame.DrawBox(Rect(0,100,200,1),255); + myFrame.PlotTrans(topFrame,100-myRect.X,(100-dot)); + + topFrame.SaveLbm(fileName); + + cout<<"saved "<=256) + GObject::Error(ERR_FATAL,"high char too big"); + if(lo>=256) + GObject::Error(ERR_FATAL,"low char too big"); +} + +void KanjiClass::addKanjiHit(uint hi,uint lo) +{ + if(!hi && !lo) + { + GObject::Error(ERR_FATAL,"passed a bad kanji code"); + } + + checkKanjiCode(hi,lo); + m_kanjiHit[hi*256+lo]=1; +} + +bool KanjiClass::getKanjiHit(uint hi,uint lo) +{ + checkKanjiCode(hi,lo); + return(m_kanjiHit[hi*256+lo]!=0); +} + +void KanjiClass::clearKanjiHit(uint hi,uint lo) +{ + checkKanjiCode(hi,lo); + m_kanjiHit[hi*256+lo]=0; +} + + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void ascii2SJIS(u8 *dest,u8 const *src) +{ + while (*src) + { + if ((src[0])&0x80) + { + *dest++=*src++; + *dest++=*src++; + } + else + { + ascii2SJIS(dest,*src); + src++; + dest+=2; + } + } + + *dest++=0; +} + + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +int kanjiTrans(u16 scode) +{ + int ret = 0; + u8 ss[2]; + u8 stmp; + + ss[0]=scode&0xff; + ss[1]=scode>>8&0xff; + //bcopy(&scode, ss, 2); + + switch(ss[1]) + { + case 0x81: + if ((ss[0] >= 0x40) && (ss[0] <= 0x7e)) + stmp = 0; + else + if ((ss[0] >= 0x80) && (ss[0] <= 0xac)) + stmp = 1; + else + if ((ss[0] >= 0xb8) && (ss[0] <= 0xbf)) + stmp = 2; + else + if ((ss[0] >= 0xc8) && (ss[0] <= 0xce)) + stmp = 3; + else + if ((ss[0] >= 0xda) && (ss[0] <= 0xe8)) + stmp = 4; + else + if ((ss[0] >= 0xf0) && (ss[0] <= 0xf7)) + stmp = 5; + else + if (ss[0] == 0xfc) + stmp = 6; + else { + ret = -1; + break; + } + ret = scode - kanji_0_table[stmp][0] + kanji_0_table[stmp][1]; + break; + + case 0x82: + if ((ss[0] >= 0x4f) && (ss[0] <= 0x58)) + stmp = 7; + else + if ((ss[0] >= 0x60) && (ss[0] <= 0x79)) + stmp = 8; + else + if ((ss[0] >= 0x81) && (ss[0] <= 0x9a)) + stmp = 9; + else + if ((ss[0] >= 0x9f) && (ss[0] <= 0xf1)) + stmp = 10; + else { + ret = -1; + break; + } + ret = scode - kanji_0_table[stmp][0] + kanji_0_table[stmp][1]; + break; + + case 0x83: + if ((ss[0] >= 0x40) && (ss[0] <= 0x7e)) + stmp = 11; + else + if ((ss[0] >= 0x80) && (ss[0] <= 0x96)) + stmp = 12; + else + if ((ss[0] >= 0x9f) && (ss[0] <= 0xb6)) + stmp = 13; + else + if ((ss[0] >= 0xbf) && (ss[0] <= 0xd6)) + stmp = 14; + else { + ret = -1; + break; + } + ret = scode - kanji_0_table[stmp][0] + kanji_0_table[stmp][1]; + break; + + case 0x84: + if ((ss[0] >= 0x40) && (ss[0] <= 0x60)) + stmp = 15; + else + if ((ss[0] >= 0x70) && (ss[0] <= 0x7e)) + stmp = 16; + else + if ((ss[0] >= 0x80) && (ss[0] <= 0x91)) + stmp = 17; + else + if ((ss[0] >= 0x9f) && (ss[0] <= 0xbe)) + stmp = 18; + ret = scode - kanji_0_table[stmp][0] + kanji_0_table[stmp][1]; + break; + + case 0x85: + if ((ss[0] >= 0x40) && (ss[0] <= 0x44)) + stmp = 0; + else + if (ss[0] == 0x46) + stmp = 1; + else + if ((ss[0] >= 0x48) && (ss[0] <= 0x49)) + stmp = 2; + else + if (ss[0] == 0x4b) + stmp = 3; + else + if ((ss[0] >= 0x50) && (ss[0] <= 0x5b)) + stmp = 4; + else + if ((ss[0] >= 0xa0) && (ss[0] <= 0xac)) + stmp = 5; + else + if ((ss[0] >= 0xb0) && (ss[0] <= 0xbc)) + stmp = 6; + else { + ret = -1; + break; + } + ret = scode - kanji_g_table[stmp][0] + kanji_g_table[stmp][1]; + break; + + case 0x86: + if ((ss[0] >= 0x40) && (ss[0] <= 0x41)) + stmp = 7; + else + if (ss[0] == 0x43) + stmp = 8; + else + if (ss[0] == 0x45) + stmp = 9; + else + if ((ss[0] >= 0x47) && (ss[0] <= 0x48)) + stmp = 10; + else + if ((ss[0] >= 0x4a) && (ss[0] <= 0x4c)) + stmp = 11; + else + if ((ss[0] >= 0x4e) && (ss[0] <= 0x4f)) + stmp = 12; + else + if ((ss[0] >= 0x60) && (ss[0] <= 0x6f)) + stmp = 13; + else + if ((ss[0] >= 0x9f) && (ss[0] <= 0xb6)) + stmp = 14; + else + if ((ss[0] >= 0xb8) && (ss[0] <= 0xf5)) + stmp = 15; + else { + ret = -1; + break; + } + ret = scode - kanji_g_table[stmp][0] + kanji_g_table[stmp][1]; + break; + + case 0x87: + if ((ss[0] >= 0x40) && (ss[0] <= 0x5a)) + stmp = 16; + else + if ((ss[0] >= 0x5c) && (ss[0] <= 0x62)) + stmp = 17; + else + if ((ss[0] >= 0x64) && (ss[0] <= 0x96)) + stmp = 18; + else { + ret = -1; + break; + } + ret = scode - kanji_g_table[stmp][0] + kanji_g_table[stmp][1]; + break; + + default: + if ((ss[1] > 0x98) || ((ss[1] == 0x98) && (ss[0] > 0x72)) || + (ss[1] < 0x88) || ((ss[1] == 0x88) && (ss[0] < 0x9f)) || + (ss[0] > 0xfc) || (ss[0] < 0x40) || + ((ss[0] > 0x7e) && (ss[0] < 0x80))) { + ret = -1; + break; + } + stmp = ((ss[1] - 0x88)*2) + ((ss[0] < 0x7f) ? 0 : 1) - 1; + ret = scode - kanji_1_table[stmp][0] + kanji_1_table[stmp][1]; + } + + return(ret); +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ + long kanjiTest( u8 const *sjis,KanjiClass::KanjiFontSize k) +{ + int code; + u32 kaddr, addr; + u16 sjiscode; + int dot; + + dot=dotSize[k]; + + sjiscode = *sjis << 8 | *(sjis+1); + + if ((sjiscode >= 0x8140) && (sjiscode <= 0x84be)) + kaddr = kanjiAddr0[k]; + else if (dot==15 && (sjiscode >= 0x8540) && (sjiscode <= 0x8796)) + kaddr = kanjiAddrG[k]; + else if ((sjiscode >= 0x889f) && (sjiscode <= 0x9872)) + kaddr = kanjiAddr1[k]; + else + return -1; + + code = kanjiTrans(sjiscode); + addr = kaddr + code * dot * 2; + + return addr; +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void dekan(u8 *ptr,u8 *buf,int dot) +{ + int i,j,k; + char tmp; + int xchar, ychar; + + xchar = 2; + ychar = dot; + + for (i=0 ; i < ychar ; i++) + { + for (j=0 ; j < xchar ; j++) + { + tmp = *(ptr+i*xchar+j); + for (k=0 ; k < 8 ; k++) + { + if (tmp & 0x80) + *buf++=1; + else + *buf++=0; + + tmp *= 2 ; + } + } + } +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void ascii2SJIS(u8 *dest,u8 Ascii) +{ + u16 kan; + int done=0; + + struct SjisS *Ptr=SjisTable; + + while (!done && Ptr->Ascii) + { + + if ((Ascii>=Ptr->Ascii) && (Ascii<(Ptr->Ascii+Ptr->Num))) + { + /* Found ASCII char, return SJIS equivalent */ + kan= (Ptr->Sjis+(Ascii-Ptr->Ascii)); + done=1; + } + Ptr++; + } + + if(!done) + kan=0x8148; + + *dest++=(kan>>8); + *dest++=(kan&0xff); +} + +/*=========================================================================== + end */ diff --git a/Utils/transtext/kanjiclass.h b/Utils/transtext/kanjiclass.h new file mode 100644 index 000000000..e5ad312ea --- /dev/null +++ b/Utils/transtext/kanjiclass.h @@ -0,0 +1,97 @@ +/*========================================================================= + + KANJICLASS.CPP + + Author: Gary Liddon @ + Created: + Project: + Purpose: + + Copyright (c) 1998 G R Liddon + +===========================================================================*/ + +#ifndef __KANJI_CLASS__ +#define __KANJI_CLASS__ + +/*---------------------------------------------------------------------- + Includes + -------- */ + +/* Std Lib + ------- */ +#include + +/* Glib + ---- */ +#include +#include + +/* Local + ----- */ + +/*---------------------------------------------------------------------- + Tyepdefs && Defines + ------------------- */ + +/*---------------------------------------------------------------------- + Structure defintions + -------------------- */ + +class KanjiClass : GObject +{ +public: + + enum KanjiFontSize + { + FONT_SIZE_11, + FONT_SIZE_13, + FONT_SIZE_15, + }; +private: + std::vector m_kanjiHit; + + void initialise(void); + + void addKanjiHit(uint hi,uint lo); + bool getKanjiHit(uint hi,uint lo); + void clearKanjiHit(uint hi,uint lo); + int findKanjiIndex(u16 kan) const; + static void saveKanjiLbm(char const * fileName,KanjiFontSize k,u16 kan); + +public: + + + KanjiClass(void); + + void addStr(u8 const * newStr); + + int howManyKanjiChars(void); + void saveKanjiLbms(char const * dir,KanjiFontSize k = KanjiClass::FONT_SIZE_11); + void saveKanjiLbmNames(char const * dir,char const *name); + void saveKanjiTable(char const *name); + static void writeEnglishFontLbms(char const * dir,KanjiFontSize k = KanjiClass::FONT_SIZE_11,char const * repFile= NULL); +}; + + +/*---------------------------------------------------------------------- + Globals + ------- */ + +/* Vars + ---- */ + +/* Data + ---- */ + +/* Functions + --------- */ + + + +/*---------------------------------------------------------------------- */ + +#endif /* XYZ */ + +/*=========================================================================== + end */ diff --git a/Utils/transtext/main.cpp b/Utils/transtext/main.cpp new file mode 100644 index 000000000..0ffa53bc2 --- /dev/null +++ b/Utils/transtext/main.cpp @@ -0,0 +1,299 @@ +/*========================================================================= + + MAIN.CPP + + Author: Gary Liddon @ Fareham + Created: 3rd March 1999 + Project: Theme Park World Playstation + Purpose: Main module for Folio + + Copyright (c) 1998 G R Liddon + +===========================================================================*/ + +/*---------------------------------------------------------------------- + Includes + -------- */ + +/* Std Lib + ------- */ +#include +#include +#include +#include +#include +#include + +/* Glib + ---- */ +#include +#include +#include +#include + +/* tplib + ---- */ +#include +#include +#include + + +/* local + ---- */ +#include "kanjiclass.h" + +/*---------------------------------------------------------------------- + Version info + + 1.0 - 1.2 GL Initial working version + 1.3 GL Longer line length (now 4096) + 1.4 GL Added comments to file + 1.5 GL Changed it so that \n are now returns + 1.6 GL Added a slew of stuff to handle kanji + 1.7 GL Chganged format of kanji table + 1.8 GL Removed bug with kanji frame lookup + 1.9 GL added -s so user can specify the size of output font + 1.91 GL Transtext also writes out an ID text file (id.dat) + 1.92 GL fixed bug with output kanji table being too short + +/*---------------------------------------------------------------------- + +/*---------------------------------------------------------------------- + Tyepdefs && Defines + ------------------- */ +using namespace std; + +/*---------------------------------------------------------------------- + Structure defintions + -------------------- */ + + +/*---------------------------------------------------------------------- + Function Prototypes + ------------------- */ +static void usage(void); +static char * cycleCommands(char *String,int Num); + +/*---------------------------------------------------------------------- + Vars + ---- */ +static const float version=1.92f; +static GString fileWithTranslations; +static GString headerFile; +static GString outDir; + +static GString g_japKanjiFile; +static GString g_japLbmDir; +static GString g_englishLbmsDir; +static GString g_japLbmListFile; +static int g_fontSize=0; + +/*---------------------------------------------------------------------- + Data + ---- */ + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +int main(int argc, char ** argv) +{ + cerr<<"GRLiddon() TRANSTEXT text translation stuphh "<getNumOfStrings(); + + for (int f=0;fgetText(f)); + + if (g_japLbmDir) + { + if (g_fontSize >=0 && g_fontSize < 3) + kClass.saveKanjiLbms(g_japLbmDir,KanjiClass::KanjiFontSize(g_fontSize)); + else + GObject::Error(ERR_FATAL,"illegal font size parameter"); + } + + if (g_japKanjiFile) + kClass.saveKanjiTable(g_japKanjiFile); + + if (g_japLbmListFile && g_japLbmDir) + kClass.saveKanjiLbmNames(g_japLbmDir,g_japLbmListFile); + + cout<<"text uses "< [ switches.. ]\n"; + cout<<"Switches:\n"< Dir to save translation strings to"< Dir write ascii images to"< File to save lang enums to"< Dir to save kanji lbms to"< File to save kanji table to"< File to save list of saved lbms to"< Set the size of the output font"< + +/* Glib + ---- */ +#include + +/* Local + ----- */ + +/*---------------------------------------------------------------------- + Tyepdefs && Defines + ------------------- */ + +/*---------------------------------------------------------------------- + Structure defintions + -------------------- */ +class ScriptFile +{ +private: + std::ifstream m_inStream; + bool m_isOpen; + GString m_fileName; + int m_lineCount; + + void scriptError(void); + + bool getNextNonBlankLine(char * Line,int LineLen); + + void stripTrailingSpace(char * Line); + GString getCommandString(char * Com); + bool isCommand(char * Line); + void checkIsOpen(void); + +protected: + bool eof(void); + GString peekNextCommand(void); + bool nextLineIsCommand(void); + GString getNextLine(void); + + void open(char const * fileName); + void close(void); + + + +public: + + + ScriptFile(void); + ~ScriptFile(void); +}; + +/*---------------------------------------------------------------------- + Globals + ------- */ + +/* Vars + ---- */ + +/* Data + ---- */ + +/* Functions + --------- */ + + + +/*---------------------------------------------------------------------- */ + +#endif /* __SCRIPT_H__ */ + +/*=========================================================================== + end */ + diff --git a/Utils/transtext/transtext.dsp b/Utils/transtext/transtext.dsp new file mode 100644 index 000000000..580ae07f3 --- /dev/null +++ b/Utils/transtext/transtext.dsp @@ -0,0 +1,108 @@ +# Microsoft Developer Studio Project File - Name="transtext" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=transtext - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "transtext.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "transtext.mak" CFG="transtext - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "transtext - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "transtext - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName ""$/TP2psx/utils/transtext", JNXBAAAA" +# PROP Scc_LocalPath "." +CPP=xicl6.exe +RSC=rc.exe + +!IF "$(CFG)" == "transtext - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\glibdev\glib\include" /I "..\..\glibdev\glib\include\pc" /I "..\tplib" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x809 /d "NDEBUG" +# ADD RSC /l 0x809 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=xilink6.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib win32lib.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\glibdev\glib\lib\win32lib\release" /libpath:"..\tplib\release" + +!ELSEIF "$(CFG)" == "transtext - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\glibdev\glib\include" /I "..\..\glibdev\glib\include\pc" /I "..\tplib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c +# ADD BASE RSC /l 0x809 /d "_DEBUG" +# ADD RSC /l 0x809 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=xilink6.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib win32lib.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\glibdev\glib\lib\win32lib\debug" /libpath:"..\tplib\debug" + +!ENDIF + +# Begin Target + +# Name "transtext - Win32 Release" +# Name "transtext - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\kanjiclass.cpp +# End Source File +# Begin Source File + +SOURCE=.\main.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\kanjiclass.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/Utils/transtext/transtext.dsw b/Utils/transtext/transtext.dsw new file mode 100644 index 000000000..cbaffd59a --- /dev/null +++ b/Utils/transtext/transtext.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "transtext"=.\transtext.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/build/ccopt.mak b/build/ccopt.mak new file mode 100644 index 000000000..90e8d0d3e --- /dev/null +++ b/build/ccopt.mak @@ -0,0 +1,60 @@ +#---------------------------------------------------------------------------- +# CCOPT.MAK +# +# This holds all the command line options for C++ +# compilation +# +# Tabbed for 5 9 (Please do not change) +# +# Created: 3rd February 1999 +# +# Copyright (C) 1997-1998 G R Liddon +#---------------------------------------------------------------------------- + +COMPILER_INI_FILE := $(PSYQ_PATH)/sn.ini + +ASM_OPTS := /l /zd /z /w /q \ + /o c+ /o w+ /o ws+ \ + /j $(PSYQ_INC_DIR) \ + /j $(SOURCE_DIR) \ + /j ./ + + + +COMMON_CCFLAGS := -Werror \ + -D__TERRITORY_$(TERRITORY)__\ + -D__VERSION_$(VERSION)__\ + -D__USER_$(USER_NAME)__ \ + -D__VERSION_STR__=$(VERSION)\ + -D__TERRITORY_STR__=$(TERRITORY)\ + -DPSX \ + -D_LANGUAGE_C_PLUS_PLUS \ + $(USER_DEF_OPT) \ + $(GLIB_OPT) \ + $(FILE_OPT) \ + $(DEV_OPT) \ + $(SMALL_OPT) \ + -Wall \ + -Wmissing-prototypes\ + -Wmissing-declarations\ + -Wno-unused \ + -Wbad-function-cast \ + -g \ + -O2\ + -fno-builtin\ + -fomit-frame-pointer\ + -fno-exceptions \ + -fno-rtti \ + -I. \ + -I$(PSYQ_INC_DIR) \ + -I$(DDX_INC_DIR)\ + -I$(MOD_INC_DIR)\ + -I$(SOURCE_DIR)\ + -I$(GIN_INC_DIR) \ + -I$(GAME_DATA_DIR) \ + -I$(INC_DIR) + +# -fno-inline \ + +#---------------------------------------------------------------------------- +# end \ No newline at end of file diff --git a/build/getuser.mak b/build/getuser.mak new file mode 100644 index 000000000..bb2a06a62 --- /dev/null +++ b/build/getuser.mak @@ -0,0 +1,35 @@ +#---------------------------------------------------------------------------- +# GETUSER.MAK +# +# Get's the user vars in from their makefile +# +# Their makefile is at $(USERS_DIR)//makefile +# The user name is whatever they logged onto +# their computer as (in lower case) +# +# Tabbed for 5 9 (Please do not change) +# +# Created: 3rd February 1999 +# +# Copyright (C) 1997-1998 G R Liddon +#---------------------------------------------------------------------------- + +# Now that's all sorted include the users vars +# -------------------------------------------- + +ifndef USER_NAME + +USER_NAME := $(shell $(LOG_NAME)) + +endif + + +USER_VAR_FILE := $(USERS_DIR)/$(USER_NAME)/makefile + +$(USERS_DIR)/$(USER_NAME)/makefile : + @$(ECHO) You Need a user file. See gary liddon + +include $(USER_VAR_FILE) + +#---------------------------------------------------------------------------- +# end \ No newline at end of file diff --git a/build/globals.mak b/build/globals.mak new file mode 100644 index 000000000..0f06e4447 --- /dev/null +++ b/build/globals.mak @@ -0,0 +1,162 @@ +#---------------------------------------------------------------------------- +# globals.mak +# +# Global defintions for all makefiles +# Directory definitions and user preference inclusion +# +# Tabbed for 5 9 (Please do not change) +# +# Created: 19th April 1997 by G R Liddon @ Fareham +# +# Copyright (C) 1997 G R Liddon +#---------------------------------------------------------------------------- + +ifndef __GLOBALS_MAK__ +__GLOBALS_MAK__ := 1 + +#---------------------------------------------------------------------------- +# Useful Macros +# ------------- + +NULL := +SPACE := $(NULL) $(NULL) +TAB := $(NULL) $(NULL) +COMMA := , +LBRACKET := ( +RBRACKET := ) +DOLLAR := $$ +SQUOTE := ' +DQUOTE := " + +define NEWLINE + + +endef + + +#---------------------------------------------------------------------------- +# Directory Definitions +# --------------------- + + +# Miscellaneous Dirs +# ------------------ +TOOL_DIR := tools +GRAF_DIR := graphics +GAME_DATA_DIR := data +USERS_DIR := users +SOURCE_DIR := source +SOUND := sounds + +# Psyq Utilities and libraries +# ---------------------------- +PSYQ_DIR := $(TOOL_DIR)/psyq +PSYQ_BIN_DIR := $(PSYQ_DIR)/bin +PSYQ_LIB_DIR := $(PSYQ_DIR)/lib +PSYQ_INC_DIR := $(PSYQ_DIR)/include + +# DDX Dodgy test kit +# ------------------ +DDX_DIR := $(TOOL_DIR)/climax +DDX_BIN_DIR := $(DDX_DIR)/exes +DDX_INC_DIR := $(DDX_DIR)/libs +DDX_LIB_DIR := $(DDX_DIR)/libs + +# MOD - mod playing lib +# --------------------- +MOD_DIR := $(TOOL_DIR)/mod +MOD_INC_DIR := $(MOD_DIR)/include +MOD_LIB_DIR := $(MOD_DIR)/lib + +# VLC - FMV decoder +# --------------------- +VLC_DIR := $(TOOL_DIR)/vlc +VLC_INC_DIR := $(VLC_DIR)/include +VLC_LIB_DIR := $(VLC_DIR)/lib + +# GIN tools and includes +# --------------------- +GIN_TOOL_DIR := $(TOOL_DIR)/gin +GIN_BIN_DIR := $(GIN_TOOL_DIR)/bin +GIN_INC_DIR := $(GIN_TOOL_DIR)/include + +GIN2MSH := $(GIN_BIN_DIR)/Gin2Msh -q +GIN2ACT := $(GIN_BIN_DIR)/Gin2Act -q +GIN2ANM := $(GIN_BIN_DIR)/Gin2Anm +GIN2LVL := $(GIN_BIN_DIR)/Gin2Kdt -q + +# Cygwin +# ------ +CYG_DIR := $(TOOL_DIR)/cygwin +CYG_BIN_DIR := $(CYG_DIR) + +# Perl +# ---- +PERL_DIR := $(TOOL_DIR)/perl +PERL_BIN_DIR := $(PERL_DIR)/bin +PERL_SCRIPT_DIR := $(PERL_DIR)/pl + +# Cygwin tools +# ------------ +ECHO := $(CYG_BIN_DIR)/echo +RMDIR := $(CYG_BIN_DIR)/rmdir +MKDIR := $(CYG_BIN_DIR)/mkdir +REDIR := glecho +TOUCH := touch +RM := rm +CP := cp +SED := sed +LS := $(CYG_BIN_DIR)/ls +MV := $(CYG_BIN_DIR)/mv +DATE := $(CYG_BIN_DIR)/date +SED := $(CYG_BIN_DIR)/sed + +LOG_NAME := uname +PARKGRAB := parkgrab +BANKER := banker +BIGLUMP := bl2 + +# PSX and misc tools +# ------------------ +LNK := slink +PL := perl +CC := ccpsx +ASM := asmpsx +CPE2EXE := cpe2exe +CPE2BIN := cpe2bin +LZNP := lznp -Q +SIZEAPP := sizeapp +MAKEDATA := MkData + +#---------------------------------------------------------------------------- +# Vars that need exporting +# ------------------------ + +# Path +# ---- +export PATH = $(TOOL_DIR);$(CYG_BIN_DIR);$(PSYQ_BIN_DIR);$(PERL_BIN_DIR) +export Path = $(TOOL_DIR);$(CYG_BIN_DIR);$(PSYQ_BIN_DIR);$(PERL_BIN_DIR) + +# PsyQ Vars overidden for those who've installed PSYQ on their machine +# -------------------------------------------------------------------- +export COMPILER_PATH := +export PSYQ_PATH := +export ASSEMBLER_PATH := +export LIBRARY_PATH := +export C_PLUS_INCLUDE_PATH := +export C_INCLUDE_PATH := + +# These vars are also used by GCC +# ------------------------------- +export GCC_EXEC_PREFIX := +export COMPILER_PATH := +export LIBRARY_PATH := +export C_INCLUDE_PATH := +export CPLUS_INCLUDE_PATH := +export OBJC_INCLUDE_PATH := + +#---------------------------------------------------------------------------- +endif # __GLOBALS_MAK__ +#---------------------------------------------------------------------------- +# end + diff --git a/build/lnk.mak b/build/lnk.mak new file mode 100644 index 000000000..f4a533586 --- /dev/null +++ b/build/lnk.mak @@ -0,0 +1,88 @@ +#---------------------------------------------------------------------------- +# LNK.MAK +# +# This creates the macro that finally makes the linker script file +# It also holds any linker options needed +# +# Tabbed for 5 9 (Please do not change) +# +# Created: 3rd February 1999 +# +# Copyright (C) 1997-1998 G R Liddon +#---------------------------------------------------------------------------- + +ifndef STACK_SIZE +STACK_SIZE := 3000 +endif + +LNK_FLAGS:= -m -psx -c -v -z -o $(PROG_ORG) -entry __SN_ENTRY_POINT \ + -cpemunge \ + -strip \ + -nsf \ + $(ALL_ASM_OBJS) \ + $(PSYQ_LIB_DIR)/libsn.lib \ + -nsf \ + -we -wm -wo \ + -nostrip \ + stup0 \ + stup1 \ + stup2 \ + VectorNormalS \ + VectorNormal \ + VectorNormalSS\ + cqsrt \ + -nostrip + +LINKER_FILE_MACRO := \ +';nostripfile=$(PSYQ_LIB_DIR)/libsn.lib' \ +'text group ' \ +'extractors group ' \ +'extradtors group ' \ +'data group ' \ +'sdata group ' \ +'sbss group bss' \ +'bss group bss ' \ +'cached group cache(0x20000000) ' \ +'' \ +'' \ +'memend group bss' \ +'' \ +'' \ +' section .text,text' \ +' section .cached,cached' \ +' section .sdata,sdata' \ +' section .ctors,text' \ +' section .dtors,text ' \ +' section .data,data' \ +' section .rdata,text' \ +' section .sbss,sbss' \ +' section .bss,bss' \ +' section .memend,memend' \ +' section .last,memend' \ +'' \ +'' \ +'' \ +'' \ +'LNK_RamSize equ $(RAM_SIZE)' \ +'LNK_StackSize equ $(STACK_SIZE)' \ +'LNK_OrgAddress equ $(PROG_ORG)' \ +'LNK_FileSys equ $(LNK_FILE_SYS)' \ +'LNK_DevKit equ $(LNK_DEV_KIT)' \ +'$(LNK_OVL) ' \ +'' \ +'$(TAB)regs$(TAB)pc=__SN_ENTRY_POINT' \ +'; $(FILE_SYSTEM) Start-Up Objects' \ +'' \ +$(foreach FILE,$($(FILE_SYSTEM)_STARTUP_OBJ), '$(TAB)startstats "$(FILE)" ' '$(TAB)include $(PSYQ_LIB_DIR)/$(FILE).obj' '$(TAB)endstats') \ +'' \ +'; Main Game object files' \ +$(foreach FILE,$(CODE_OBJS_TO_MAKE), '$(TAB)startstats "$(subst /,.,$(FILE:$(OBJ_DIR)/%.o=%))" ' '$(TAB)include $(FILE) $(ovl_$(subst /,_,$(FILE:$(OBJ_DIR)/%.o=%)))' '$(TAB)endstats') \ +$(foreach FILE,$(EXTRA_OBJS), '$(TAB)startstats "$(subst /,.,$(FILE:$(OBJ_DIR)/%.o=%))" ' '$(TAB)include $(FILE) $(ovl_$(subst /,_,$(FILE:$(OBJ_DIR)/%.o=%)))' '$(TAB)endstats') \ +'' \ +'; Libs' \ +$(foreach FILE,$(ALL_LIBS_FULL),'$(TAB)startstats "$(FILE)"' '$(TAB)inclib $(FILE)' '$(TAB)endstats') \ +'' + + +#---------------------------------------------------------------------------- +# end diff --git a/build/outdirs.mak b/build/outdirs.mak new file mode 100644 index 000000000..4490edcbf --- /dev/null +++ b/build/outdirs.mak @@ -0,0 +1,43 @@ +#---------------------------------------------------------------------------- +# Create all the output directories the game needs +#---------------------------------------------------------------------------- + +# Macros for ouput dirs +# --------------------- +OUT_DIR := out/$(TERRITORY) + +OBJ_DIR := $(OUT_DIR)/$(VERSION)/$(FILE_SYSTEM)/objs +OBJ_DIRS_TO_MAKE := $(foreach SRC_DIR,$(SRC_DIRS),$(OBJ_DIR)/$(SRC_DIR)) +VERSION_DIR := $(OUT_DIR)/$(VERSION)/version/$(FILE_SYSTEM) + +DEPS_DIR := $(OUT_DIR)/$(VERSION)/deps/$(FILE_SYSTEM) +DEP_DIRS_TO_MAKE := $(foreach SRC_DIR,$(SRC_DIRS),$(DEPS_DIR)/$(SRC_DIR)) + +TEMP_DIR := $(OUT_DIR)/$(VERSION)/$(FILE_SYSTEM)/temp +TEMP_BUILD_DIR := $(OUT_DIR)/$(VERSION)/build +DATA_OUT := $(OUT_DIR)/data +INC_DIR := $(OUT_DIR)/include +REPORT_DIR := $(OUT_DIR)/report +SYSTEM_GEN_DIR := $(SOURCE_DIR)/system/$(VERSION)/$(TERRITORY)/$(FILE_SYSTEM) +SYSTEM_GEN_DIR_O := $(OBJ_DIR)/system/$(VERSION)/$(TERRITORY)/$(FILE_SYSTEM) +SYSTEM_GEN_DIR_D := $(DEPS_DIR)/system/$(VERSION)/$(TERRITORY)/$(FILE_SYSTEM) + +DIRS_TO_MAKE := $(OBJ_DIR) $(VERSION_DIR) $(TEMP_DIR) $(DEPS_DIR) $(OBJ_DIRS_TO_MAKE) $(DEP_DIRS_TO_MAKE) $(TEMP_BUILD_DIR) $(DATA_OUT) $(INC_DIR) $(REPORT_DIR) $(SYSTEM_GEN_DIR) $(SYSTEM_GEN_DIR_O) $(SYSTEM_GEN_DIR_D) + +# DIRS_TO_MAKE := $(OBJ_DIR) $(VERSION_DIR) $(DEPS_DIR) $(OBJ_DIRS_TO_MAKE) $(TEMP_DIR) $(DEP_DIRS_TO_MAKE) $(TEMP_BUILD_DIR) $(DATA_OUT) $(INC_DIR) $(REPORT_DIR) $(SIZES_DIR) $(SYSTEM_GEN_DIR) $(SYSTEM_GEN_DIR_O) $(SYSTEM_GEN_DIR_D) + +# Stuff needed to make output dirs +# -------------------------------- +.PHONY: dirs + +$(DIRS_TO_MAKE) : + @$(MKDIR) -p $(DIRS_TO_MAKE) + @$(ECHO) Created directories $(DIRS_TO_MAKE) + +dirs : $(DIRS_TO_MAKE) + +# Some more exports to do after we've decided what the temp dir is +# ---------------------------------------------------------------- +export TEMP := $(TEMP_DIR) +export TMPDIR := $(TEMP_DIR) +export DEPENDENCIES_OUTPUT := $(TEMP_DIR)/dep.tmp diff --git a/build/parse.mak b/build/parse.mak new file mode 100644 index 000000000..8c1648a9d --- /dev/null +++ b/build/parse.mak @@ -0,0 +1,288 @@ +#---------------------------------------------------------------------------- +# PARSE.MAK +# +# Makes sure all the that need defining to build the game have been defined +# If not ERR_STR is defined and this cause the makefile to report an error +# +# Tabbed for 5 9 (Please do not change) +# +# Created: +# +# Copyright (C) 1997-1999 G R Liddon +#---------------------------------------------------------------------------- + +# Make sure the basics are defined first +# -------------------------------------- +ifndef TERRITORY + +ERR_STR := You must define a territory to build for (USA EUR || JAP) + +endif + +ifndef VERSION + +ERR_STR := You must define a version to build + +endif + + +# Now Parse for the dev kit stuff +# ---------------------------------- +ifdef PSYQ_DEV_IRQ + + PSYQ_DEV_IRQ_OPT := /i$(PSYQ_DEV_IRQ) + +endif + +ifndef DEV_KIT + ERR_STR := You must define DEV_KIT to either SONY_ISA or SONY_PCI or CLIMAX or TPWART +else + DEV_OPT := -DSONY_ISA=0 \ + -DSONY_PCI=1 \ + -DCLIMAX=2 \ + -DTPWART=3 \ + -D__DEV_KIT__=$(DEV_KIT) + +DK_SONY_ISA := 0 +DK_SONY_PCI := 1 +DK_CLIMAX := 2 +DK_TPWART := 3 +DK_SONY_H2700 := $(DK_SONY_PCI) + +LNK_DEV_KIT := $(DK_$(DEV_KIT)) + +endif + +# Now sort out how the game loads files +# ------------------------------------- +ifndef FILE_SYSTEM + ERR_STR := You must define FILE_SYSTEM to either PC or CD +else + FILE_OPT := -DPC=0 \ + -DCD=1 \ + -D__FILE_SYSTEM__=$(FILE_SYSTEM) + +FS_PC := 0 +FS_CD := 1 + +LNK_FILE_SYS := $(FS_$(FILE_SYSTEM)) + +endif + +# Make sure we have everything we need for the sony pci dev kit +# -------------------------------------------------------------- +ifeq ($(DEV_KIT),SONY_PCI) + +DEV_KIT_FOUND := 1 + +endif + +# Make sure we have everything we need for the climax dev kit +# ----------------------------------------------------------- +ifeq ($(DEV_KIT),CLIMAX) + +ifndef DDX_PORT + + ERR_STR := You must define DDX_PORT for the Climax dev kit i/o addr in your personal makefile + +endif + +DEV_KIT_FOUND := 1 + +endif + + +# Make sure we have everything we need for the climax dev kit +# ----------------------------------------------------------- +ifeq ($(DEV_KIT),TPWART) + +ifndef DDX_PORT + + ERR_STR := You must define DDX_PORT for the Climax dev kit i/o addr in your personal makefile + +endif + +DEV_KIT_FOUND := 1 + +endif + + +# Make sure we have everything we need for the Sony H2000 +# -------------------------------------------------------------------- +ifeq ($(DEV_KIT),SONY_ISA) + +ifdef SONY_ISA_IRQ + + SONY_ISA_IRQ_OPT := /i $(SONY_ISA_IRQ) + +endif + +ifndef SONY_ISA_ADDR + + ERR_STR := You must define SONY_ISA_ADDR for the dtl i/o addr in your personal makefile + +endif + +DEV_KIT_FOUND := 1 + +endif + +# Make sure we have everything we need for the Sony H2700 +# ------------------------------------------------------- +ifeq ($(DEV_KIT),SONY_H2700) + +ifdef SONY_ISA_IRQ + + SONY_ISA_IRQ_OPT := /i $(SONY_ISA_IRQ) + +endif + +ifndef SONY_ISA_ADDR + + ERR_STR := You must define SONY_ISA_ADDR for the dtl i/o addr in your personal makefile + +endif + +DEV_KIT_FOUND := 1 + +endif + +#---------------------------------------------------------------------------- +# Macros for dev BIOS load \ unload for all the dev systems +# All take form LOAD_BIOS_$(DEV_KIT) +#---------------------------------------------------------------------------- + +# PCI Bios load \ unload +# ---------------------- +define LOAD_BIOS_SONY_PCI + h25bios + RESETPS 1 /n +endef + +define UNLOAD_BIOS_SONY_PCI + -mess1 + h25bios +endef + +# H2700 Bios load \ unload +# ------------------------ +define LOAD_BIOS_SONY_H2700 + -mess1 + -dexbios /a $(SONY_ISA_ADDR) $(SONY_ISA_IRQ_OPT) + RESETPS 1 /n +endef + +define UNLOAD_BIOS_SONY_H2700 + -dexbios + -mess1 +endef + + +# ISA Bios load \ unload +# ---------------------- +define LOAD_BIOS_SONY_ISA + -mess1 + -dexbios /a $(SONY_ISA_ADDR) $(SONY_ISA_IRQ_OPT) + RESETPS 1 + RUN /w4 $(subst /,\,$(PSYQ_BIN_DIR)\snpatch.cpe) > con + DELAY +endef + +define UNLOAD_BIOS_SONY_ISA + -mess1 + -dexbios +endef + + +# CLIMAX Bios load \ unload +# ------------------------ +define LOAD_BIOS_CLIMAX + -mess1 + -datbios +endef + +define UNLOAD_BIOS_CLIMAX + -datbios + -mess1 +endef + + +# TPWART Bios load \ unload +# ------------------------ +define LOAD_BIOS_TPWART + -mess1 + -psy /4 +endef + +define UNLOAD_BIOS_TPWART + -psy + -mess1 +endef + +# Set the LOAD\UNLOAD_BIOS macros correctly +# ----------------------------------------- +LOAD_BIOS := $(LOAD_BIOS_$(DEV_KIT)) +UNLOAD_BIOS := $(UNLOAD_BIOS_$(DEV_KIT)) + + +# Check to make sure we found a dev kit we know about +# --------------------------------------------------- +ifndef ERR_STR + +ifndef DEV_KIT_FOUND + ERR_STR := $(DEV_KIT) is not a recognised dev kit +endif + +endif + +# Sort out the compiler we're using +# --------------------------------- +ifdef USE_EGCS + +COMPILER := egcs + +else + +COMPILER := gnu + +endif + +export PSYQ_PATH := $(PSYQ_BIN_DIR)/$(COMPILER) +export SN_PATH := $(PSYQ_BIN_DIR)/$(COMPILER) + + +# Define what we need for the ram size +# ------------------------------------ +ifdef RAM_SIZE +MEG := $(RAM_SIZE) +else +MEG := 8 +endif + +MEG_OPT := -D__MEG$(MEG)__ + + +# Bodge Address for 4 meg dev kit +# ------------------------------- +ifeq ($(VERSION),debug) + +GLIB_OPT := -D__GL_DEBUG__ + +else + +GLIB_OPT := + +endif + + +# Bodge Address for 4 meg dev kit +# ------------------------------- +ifeq ($(RAM_SIZE),4) +PROG_ORG = 0x80210000 +else +PROG_ORG = 0x80010000 +endif + + +#---------------------------------------------------------------------------- +# end diff --git a/data/DataCache.scr b/data/DataCache.scr new file mode 100644 index 000000000..4dfbfdcf3 --- /dev/null +++ b/data/DataCache.scr @@ -0,0 +1,703 @@ +translations/swe.dat +translations/dut.dat +translations/ita.dat +translations/ger.dat +translations/id.dat +translations/eng.dat +{ SYSTEM_CACHE 4 +anims/Generic.Abk +anims/Civ.Abk +anims/Boss.Abk +anims/Missions.Abk +sounds/ui/ui.bof +} + +ui/UIGfx.Spr +sfx/sfx.spr +options/options.spr + +sounds/ui/ui.bnk +pickups/pickup_gfx.tex +sounds/generic/generic.bnk +sounds/generic/generic.bof +actors/GENGRP.tex + +###################################### +### Front End ######################## +###################################### +{ FRONTEND_CACHE 4 +#options/gameopt.gfx +options/optmod.msh +options/optq.msh +actors/PRB.act +actors/PRG.act +actors/PRM.act +actors/PRP.act +actors/PRR.act +actors/PRY.act +sounds/gameopts/gameopts.bof +} +sounds/gameopts/gameopts.bnk + +actors/PRB.act +actors/PRB.tex +actors/PRG.act +actors/PRG.tex +actors/PRM.act +actors/PRM.tex +actors/PRP.act +actors/PRP.tex +actors/PRR.act +actors/PRR.tex +actors/PRY.act +actors/PRY.tex + +options/gameopt.gfx +sounds/pause/pause.bnk +sounds/pause/pause.bof + +###################################### +### LEVEL 1 ########################## +###################################### +music/LEVEL1.VH +music/LEVEL1.VB +Levels/LEVEL1.tex + +{ LEVEL1_CACHE 4 +# Generic +ui/PAUSEMENU.msh +ui/PAUSELIGHTS.msh +ui/PAUSELIGHTS2.msh +ui/compass.msh +ui/moveon.msh +sfx/asteroid.msh +sfx/card.msh +sfx/dagger.msh +sfx/icicle.msh +sfx/missile.msh +sfx/projectile.msh +sfx/sonic.msh +sfx/telesphere.msh +pickups/pu-health.msh +pickups/pu-crr.msh +pickups/pu-crg.msh +pickups/pu-crb.msh +pickups/pu-cry.msh +pickups/pu-crp.msh +pickups/pu-invun.msh +pickups/pu-life.msh +pickups/pu-mosb.msh +pickups/pu-mogo.msh +pickups/pu-mosg.msh +pickups/pu-mosr.msh +pickups/pu-mogp.msh +pickups/pu-card.msh +pickups/pu-keyt.msh +pickups/pu-sell.msh +# pickups/pu-sward.msh +pickups/pu-aura00.msh +pickups/pu-aura10.msh +pickups/pu-aura11.msh +pickups/pu-aura20.msh +pickups/pu-aura30.msh +pickups/pu-aura31.msh +pickups/pu-aura40.msh +pickups/pu-aura00blue.msh + +# Actors +actors/CAPTAIN.Act +actors/FAIRWEATHER.Act +actors/KID.Act +actors/MAN.Act +actors/M01BLUE.Act +actors/M10.Act +actors/B03.Act + +# Level Data +Levels/LEVEL1.lvl + +# Sound & Music +music/LEVEL1.PXM +sounds/level1/level1.bof +} +actors/L01GRP.tex +sounds/level1/level1.bnk + +###################################### +### LEVEL 2 ########################## +###################################### +music/LEVEL2.VH +music/LEVEL2.VB +Levels/LEVEL2.tex + +{ LEVEL2_CACHE 4 +# Generic +ui/PAUSEMENU.msh +ui/PAUSELIGHTS.msh +ui/PAUSELIGHTS2.msh +ui/compass.msh +ui/moveon.msh +sfx/asteroid.msh +sfx/card.msh +sfx/dagger.msh +sfx/icicle.msh +sfx/missile.msh +sfx/projectile.msh +sfx/sonic.msh +sfx/telesphere.msh +pickups/pu-health.msh +pickups/pu-crr.msh +pickups/pu-crg.msh +pickups/pu-crb.msh +pickups/pu-cry.msh +pickups/pu-crp.msh +pickups/pu-invun.msh +pickups/pu-life.msh +pickups/pu-mosb.msh +pickups/pu-mogo.msh +pickups/pu-mosg.msh +pickups/pu-mosr.msh +pickups/pu-mogp.msh +pickups/pu-card.msh +pickups/pu-keyt.msh +pickups/pu-sell.msh +pickups/pu-sward.msh +pickups/pu-aura00.msh +pickups/pu-aura10.msh +pickups/pu-aura11.msh +pickups/pu-aura20.msh +pickups/pu-aura30.msh +pickups/pu-aura31.msh +pickups/pu-aura40.msh +pickups/pu-aura00blue.msh + +# Level Data +Levels/LEVEL2.lvl + +# Actors +actors/CAPTAIN.Act +actors/FAIRWEATHER.Act +actors/KID.Act +actors/BOY.Act +queencocoon/queencocoon.msh +actors/M01ORANGE.Act +actors/M07.Act +actors/B04.Act + +# Sound & Music +music/LEVEL2.PXM +sounds/level2/level2.bof +} +actors/L02GRP.tex +sounds/level2/level2.bnk + +###################################### +### LEVEL 3 ########################## +###################################### +music/LEVEL3.VH +music/LEVEL3.VB +Levels/LEVEL3.tex + +{ LEVEL3_CACHE 4 +# Generic +ui/PAUSEMENU.msh +ui/PAUSELIGHTS.msh +ui/PAUSELIGHTS2.msh +ui/compass.msh +ui/moveon.msh +sfx/asteroid.msh +sfx/card.msh +sfx/dagger.msh +sfx/icicle.msh +sfx/missile.msh +sfx/projectile.msh +sfx/sonic.msh +sfx/telesphere.msh +pickups/pu-health.msh +pickups/pu-crr.msh +pickups/pu-crg.msh +pickups/pu-crb.msh +pickups/pu-cry.msh +pickups/pu-crp.msh +pickups/pu-invun.msh +pickups/pu-life.msh +pickups/pu-mosb.msh +pickups/pu-mogo.msh +pickups/pu-mosg.msh +pickups/pu-mosr.msh +pickups/pu-mogp.msh +pickups/pu-card.msh +pickups/pu-keyt.msh +pickups/pu-sell.msh +# pickups/pu-sward.msh +pickups/pu-aura00.msh +pickups/pu-aura10.msh +pickups/pu-aura11.msh +pickups/pu-aura20.msh +pickups/pu-aura30.msh +pickups/pu-aura31.msh +pickups/pu-aura40.msh +pickups/pu-aura00blue.msh + +#Level Data +Levels/LEVEL3.lvl +levels/section1.msh +levels/section2.msh +levels/section3.msh +levels/section4.msh +levels/section5.msh +levels/section6.msh + +# Actors +actors/CAPTAIN.Act +actors/FAIRWEATHER.Act +actors/KID.Act +actors/M01GREEN.Act +actors/B05.Act + +#Sound & Music +music/LEVEL3.PXM +sounds/level3/level3.bof +} +actors/L03GRP.tex +sounds/level3/level3.bnk + +###################################### +### LEVEL 4 ########################## +###################################### +music/LEVEL4.VH +music/LEVEL4.VB +Levels/LEVEL4.tex + +{ LEVEL4_CACHE 4 +# Generic +ui/PAUSEMENU.msh +ui/PAUSELIGHTS.msh +ui/PAUSELIGHTS2.msh +ui/compass.msh +ui/moveon.msh +sfx/asteroid.msh +sfx/card.msh +sfx/dagger.msh +sfx/icicle.msh +sfx/missile.msh +sfx/projectile.msh +sfx/sonic.msh +sfx/telesphere.msh +pickups/pu-health.msh +pickups/pu-crr.msh +pickups/pu-crg.msh +pickups/pu-crb.msh +pickups/pu-cry.msh +pickups/pu-crp.msh +pickups/pu-invun.msh +pickups/pu-life.msh +pickups/pu-mosb.msh +pickups/pu-mogo.msh +pickups/pu-mosg.msh +pickups/pu-mosr.msh +pickups/pu-mogp.msh +pickups/pu-card.msh +pickups/pu-keyt.msh +pickups/pu-sell.msh +# pickups/pu-sward.msh +pickups/pu-aura00.msh +pickups/pu-aura10.msh +pickups/pu-aura11.msh +pickups/pu-aura20.msh +pickups/pu-aura30.msh +pickups/pu-aura31.msh +pickups/pu-aura40.msh +pickups/pu-aura00blue.msh + +# Level Data +Levels/LEVEL4.lvl + +# Actors +actors/CAPTAIN.Act +actors/FAIRWEATHER.Act +actors/MAN.Act +actors/BOY.Act +actors/KID.Act +actors/M01.Act +actors/M02.Act +actors/M03.Act +actors/B02.Act + +# Sound & Music +music/LEVEL4.PXM +sounds/level4/level4.bof +} +actors/L04GRP.tex +sounds/level4/level4.bnk + +###################################### +### LEVEL 5 ########################## +###################################### +music/LEVEL5.VH +music/LEVEL5.VB +Levels/LEVEL5.tex + +{ LEVEL5_CACHE 4 +# Generic +ui/PAUSEMENU.msh +ui/PAUSELIGHTS.msh +ui/PAUSELIGHTS2.msh +ui/compass.msh +ui/moveon.msh +sfx/asteroid.msh +sfx/card.msh +sfx/dagger.msh +sfx/icicle.msh +sfx/missile.msh +sfx/projectile.msh +sfx/sonic.msh +sfx/telesphere.msh +pickups/pu-health.msh +pickups/pu-crr.msh +pickups/pu-crg.msh +pickups/pu-crb.msh +pickups/pu-cry.msh +pickups/pu-crp.msh +pickups/pu-invun.msh +pickups/pu-life.msh +pickups/pu-mosb.msh +pickups/pu-mogo.msh +pickups/pu-mosg.msh +pickups/pu-mosr.msh +pickups/pu-mogp.msh +pickups/pu-card.msh +pickups/pu-keyt.msh +pickups/pu-sell.msh +# pickups/pu-sward.msh +pickups/pu-aura00.msh +pickups/pu-aura10.msh +pickups/pu-aura11.msh +pickups/pu-aura20.msh +pickups/pu-aura30.msh +pickups/pu-aura31.msh +pickups/pu-aura40.msh +pickups/pu-aura00blue.msh + +# Level Data +Levels/LEVEL5.lvl + +# Actors +actors/CAPTAIN.Act +actors/FAIRWEATHER.Act +actors/KID.Act +actors/M01PURPLE.Act +actors/M08.Act +actors/B06.Act + +# Sound & Music +music/LEVEL5.PXM +sounds/level5/level5.bof +} +actors/L05GRP.tex +sounds/level5/level5.bnk + +###################################### +### LEVEL 6 ########################## +###################################### +music/LEVEL6.VH +music/LEVEL6.VB +Levels/LEVEL6.tex + +{ LEVEL6_CACHE 4 +# Generic +ui/PAUSEMENU.msh +ui/PAUSELIGHTS.msh +ui/PAUSELIGHTS2.msh +ui/compass.msh +ui/moveon.msh +sfx/asteroid.msh +sfx/card.msh +sfx/dagger.msh +sfx/icicle.msh +sfx/missile.msh +sfx/projectile.msh +sfx/sonic.msh +sfx/telesphere.msh +pickups/pu-health.msh +pickups/pu-crr.msh +pickups/pu-crg.msh +pickups/pu-crb.msh +pickups/pu-cry.msh +pickups/pu-crp.msh +pickups/pu-invun.msh +pickups/pu-life.msh +pickups/pu-mosb.msh +pickups/pu-mogo.msh +pickups/pu-mosg.msh +pickups/pu-mosr.msh +pickups/pu-mogp.msh +pickups/pu-card.msh +pickups/pu-keyt.msh +pickups/pu-sell.msh +# pickups/pu-sward.msh +pickups/pu-aura00.msh +pickups/pu-aura10.msh +pickups/pu-aura11.msh +pickups/pu-aura20.msh +pickups/pu-aura30.msh +pickups/pu-aura31.msh +pickups/pu-aura40.msh +pickups/pu-aura00blue.msh + +# Level Data +Levels/LEVEL6.lvl + +# Actors +actors/CAPTAIN.Act +actors/FAIRWEATHER.Act +actors/SCIENTIST.Act +actors/KID.Act +queencocoon/queencocoon.msh +actors/M01PINK.Act +actors/M06.Act +actors/M09.Act + +# Sound & Music +music/LEVEL6.PXM +sounds/level6/level6.bof +} +actors/L06GRP.tex +sounds/level6/level6.bnk + +###################################### +### LEVEL 7 ########################## +###################################### +music/LEVEL7.VH +music/LEVEL7.VB +Levels/LEVEL7.tex + +{ LEVEL7_CACHE 4 +# Generic +ui/PAUSEMENU.msh +ui/PAUSELIGHTS.msh +ui/PAUSELIGHTS2.msh +ui/compass.msh +ui/moveon.msh +sfx/asteroid.msh +sfx/card.msh +sfx/dagger.msh +sfx/icicle.msh +sfx/missile.msh +sfx/projectile.msh +sfx/sonic.msh +sfx/telesphere.msh +pickups/pu-health.msh +pickups/pu-crr.msh +pickups/pu-crg.msh +pickups/pu-crb.msh +pickups/pu-cry.msh +pickups/pu-crp.msh +pickups/pu-invun.msh +pickups/pu-life.msh +pickups/pu-mosb.msh +pickups/pu-mogo.msh +pickups/pu-mosg.msh +pickups/pu-mosr.msh +pickups/pu-mogp.msh +pickups/pu-card.msh +pickups/pu-keyt.msh +pickups/pu-sell.msh +# pickups/pu-sward.msh +pickups/pu-aura00.msh +pickups/pu-aura10.msh +pickups/pu-aura11.msh +pickups/pu-aura20.msh +pickups/pu-aura30.msh +pickups/pu-aura31.msh +pickups/pu-aura40.msh +pickups/pu-aura00blue.msh + +# Level Data +Levels/LEVEL7.lvl + +# Actors +actors/CAPTAIN.Act +actors/FAIRWEATHER.Act +actors/TITANIUM.Act +# actors/kid.Act +queencocoon/queencocoon.msh +actors/M01YELLOW.Act +# actors/B01.Act +actors/B02.Act +actors/B03.Act +actors/B04.Act +actors/B05.Act +actors/B06.Act + +# Sound & Music +music/LEVEL7.PXM +sounds/level7/level7.bof +} +actors/L07GRP.tex +sounds/level7/level7.bnk + +###################################### +### LEVEL 8 ########################## +###################################### +music/LEVEL8.VH +music/LEVEL8.VB +Levels/LEVEL8.tex + +{ LEVEL8_CACHE 4 +# Generic +ui/PAUSEMENU.msh +ui/PAUSELIGHTS.msh +ui/PAUSELIGHTS2.msh +ui/compass.msh +ui/moveon.msh +sfx/asteroid.msh +sfx/card.msh +sfx/dagger.msh +sfx/icicle.msh +sfx/missile.msh +sfx/projectile.msh +sfx/sonic.msh +sfx/telesphere.msh +pickups/pu-health.msh +pickups/pu-crr.msh +pickups/pu-crg.msh +pickups/pu-crb.msh +pickups/pu-cry.msh +pickups/pu-crp.msh +pickups/pu-invun.msh +pickups/pu-life.msh +pickups/pu-mosb.msh +pickups/pu-mogo.msh +pickups/pu-mosg.msh +pickups/pu-mosr.msh +pickups/pu-mogp.msh +pickups/pu-card.msh +pickups/pu-keyt.msh +pickups/pu-sell.msh +# pickups/pu-sward.msh +pickups/pu-aura00.msh +pickups/pu-aura10.msh +pickups/pu-aura11.msh +pickups/pu-aura20.msh +pickups/pu-aura30.msh +pickups/pu-aura31.msh +pickups/pu-aura40.msh +pickups/pu-aura00blue.msh + +# Level Data +Levels/LEVEL8.lvl +anims/Zord.Abk + +# Actors +actors/CAPTAIN.Act +actors/FAIRWEATHER.Act +actors/KID.Act +queencocoon/queencocoon.msh +actors/B01.Act +actors/B02.Act +actors/B04.Act +actors/B06.Act + +actors/OMZORD.act +actors/STRZORD.act + +# Sound & Music +music/LEVEL8.PXM +sounds/level8/level8.bof +} +actors/OMZORD.tex +actors/STRZORD.tex +sounds/level8/level8.bnk + +###################################### +### BACKEND ########################## +###################################### +{ BACKEND_CACHE 4 +ui/hiscore.msh +} + +###################################### +### SCREENS ########################## +###################################### +screens/prlogo.gfx +screens/thqlogo.gfx +screens/foxkids.gfx +screens/credits.gfx +screens/loading.gfx + +backend/gover1.gfx +backend/gover2.gfx +backend/goverc.gfx + +loading/PinkRang.gfx +loading/GreenRan.gfx +loading/BlueRang.gfx +loading/RedRange.gfx +loading/TitRange.gfx +loading/YellowRa.gfx +loading/bots.gfx +loading/2PinkRan.gfx +loading/2GreenRa.gfx +loading/2BlueRan.gfx +loading/2RedRang.gfx +loading/2TitRang.gfx +loading/2YellowR.gfx + +gallery/comic/RedColor.gfx +gallery/comic/BlueColo.gfx +gallery/comic/GreenCol.gfx +gallery/comic/YellowCo.gfx +gallery/comic/PinkColo.gfx +gallery/comic/Titanium.gfx +gallery/comic/VypraCol.gfx +gallery/comic/QueenFac.gfx +gallery/maps/DamLv1st.gfx +gallery/maps/DamLv2nd.gfx +gallery/maps/DamLv3rd.gfx +gallery/maps/CityS1st.gfx +gallery/maps/CityS2nd.gfx +gallery/maps/CityS3rd.gfx +gallery/maps/Docks1st.gfx +gallery/maps/Docks2nd.gfx +gallery/models/Abominus.gfx +gallery/models/Stingwin.gfx +gallery/models/Cpfireor.gfx +gallery/models/CpofLoki.gfx +gallery/models/Salamand.gfx +gallery/models/Shockatr.gfx +gallery/models/smoggers.gfx +gallery/models/Bansheer.gfx +gallery/tvshow/abominus.gfx +gallery/tvshow/firejump.gfx +gallery/tvshow/fireor.gfx +gallery/tvshow/jinxer.gfx +gallery/tvshow/oldired.gfx +gallery/tvshow/omegmega.gfx +gallery/tvshow/poster03.gfx +gallery/tvshow/queen.gfx +gallery/tvshow/shockact.gfx +gallery/tvshow/smogger.gfx +gallery/tvshow/striknin.gfx +gallery/tvshow/tranmega.gfx + +options/goload.gfx + +###################################### +### To Be Assigned ################### +###################################### + +music/LVLCOMP.PXM +music/LVLCOMP.VH +music/LVLCOMP.VB +music/GAMECOMP.PXM +music/GAMECOMP.VH +music/GAMECOMP.VB +music/GAMEOVER.PXM +music/GAMEOVER.VH +music/GAMEOVER.VB +music/GALLERY.PXM +music/GALLERY.VH +music/GALLERY.VB + + diff --git a/data/translations/dut.dat b/data/translations/dut.dat new file mode 100644 index 000000000..707dabbc8 --- /dev/null +++ b/data/translations/dut.dat @@ -0,0 +1,9 @@ +;---------------------------------------- +; Please +; DO NOT edit this document with word +; DO NOT add trailing spaces and tabs +; DO NOT Omit text after identifier +; DO NOT add spaces to identifier +; DO NOT add duplicate identifiers +;---------------------------------------- + diff --git a/data/translations/ger.dat b/data/translations/ger.dat new file mode 100644 index 000000000..707dabbc8 --- /dev/null +++ b/data/translations/ger.dat @@ -0,0 +1,9 @@ +;---------------------------------------- +; Please +; DO NOT edit this document with word +; DO NOT add trailing spaces and tabs +; DO NOT Omit text after identifier +; DO NOT add spaces to identifier +; DO NOT add duplicate identifiers +;---------------------------------------- + diff --git a/data/translations/ita.dat b/data/translations/ita.dat new file mode 100644 index 000000000..707dabbc8 --- /dev/null +++ b/data/translations/ita.dat @@ -0,0 +1,9 @@ +;---------------------------------------- +; Please +; DO NOT edit this document with word +; DO NOT add trailing spaces and tabs +; DO NOT Omit text after identifier +; DO NOT add spaces to identifier +; DO NOT add duplicate identifiers +;---------------------------------------- + diff --git a/data/translations/swe.dat b/data/translations/swe.dat new file mode 100644 index 000000000..707dabbc8 --- /dev/null +++ b/data/translations/swe.dat @@ -0,0 +1,9 @@ +;---------------------------------------- +; Please +; DO NOT edit this document with word +; DO NOT add trailing spaces and tabs +; DO NOT Omit text after identifier +; DO NOT add spaces to identifier +; DO NOT add duplicate identifiers +;---------------------------------------- + diff --git a/data/translations/text.dat b/data/translations/text.dat new file mode 100644 index 000000000..c67090d65 --- /dev/null +++ b/data/translations/text.dat @@ -0,0 +1,1046 @@ +;---------------------------------------- +; Please +; DO NOT edit this document with Excel/Word +; DO NOT add trailing spaces and tabs +; DO NOT Omit text after identifier +; DO NOT add spaces to identifier +; DO NOT add duplicate identifiers +; DO NOT put - or ; characters in text strings :( +; DO NOT cut&paste from Excel/Word as it alters strings!! ( eg: ... gets translated to … ) +;---------------------------------------- + + + +; --------------------------------------------------------------- +; Some generic strings.. +; --------------------------------------------------------------- + +[STR__YES] +eng=Yes +[STR__NO] +eng=No +[STR__ON] +eng=ON +[STR__OFF] +eng=OFF +[STR__DUMMY] +eng=??? +[STR__NOW_LOADING] +eng=NOW LOADING.. + +; NOTE: This string just contains a single space +[STR__BLANK] +eng= + + + +; --------------------------------------------------------------- +; Front end +; --------------------------------------------------------------- + +[STR__FRONT_END__PRESS_START] +eng=PRESS START + +[STR__FRONT_END__HIGH_SCORES] +eng=HIGH SCORES + + + +; --------------------------------------------------------------- +; Game options +; --------------------------------------------------------------- + +; Titles of the available menus +[STR__GAME_OPTIONS_MENU__ONE_PLAYER] +eng=ONE PLAYER +[STR__GAME_OPTIONS_MENU__TWO_PLAYERS] +eng=TWO PLAYERS +[STR__GAME_OPTIONS_MENU__OPTIONS] +eng=OPTIONS +[STR__GAME_OPTIONS_MENU__CODES] +eng=CODES +[STR__GAME_OPTIONS_MENU__FILE] +eng=LOAD +[STR__GAME_OPTIONS_MENU__GALLERY] +eng=GALLERY + +; Navigation text +[STR__GAME_OPTIONS__SELECT] +eng=SELECT +[STR__GAME_OPTIONS__BACK] +eng=BACK + +; One and two player selection +[STR__GAME_OPTIONS__CHOOSE_RANGER] +eng=CHOOSE RANGER +[STR__GAME_OPTIONS__CHOOSE_RANGER_1] +eng=CHOOSE RANGER 1 +[STR__GAME_OPTIONS__CHOOSE_RANGER_2] +eng=CHOOSE RANGER 2 +[STR__GAME_OPTIONS__STRENGTH] +eng=STRENGTH +[STR__GAME_OPTIONS__SPEED] +eng=SPEED +[STR__GAME_OPTIONS__ENERGY] +eng=ENERGY + +; Sound volumes +[STR__GAME_OPTIONS__SOUND] +eng=SOUND +[STR__GAME_OPTIONS__MUSIC_VOLUME] +eng=MUSIC VOLUME +[STR__GAME_OPTIONS__SFX_VOLUME] +eng=SFX VOLUME +[STR__GAME_OPTIONS__SPEECH_VOLUME] +eng=SPEECH VOLUME + +; Screen adjustment +[STR__GAME_OPTIONS__SCREEN] +eng=SCREEN + +; Controls +[STR__GAME_OPTIONS__CONTROL_CONFIG1] +eng=CONTROLLER CONFIG 1 +[STR__GAME_OPTIONS__CONTROL_CONFIG2] +eng=CONTROLLER CONFIG 2 +[STR__GAME_OPTIONS__STEP_LEFT] +eng=Roll left +[STR__GAME_OPTIONS__RUN] +eng=Run +[STR__GAME_OPTIONS__STEP_RIGHT] +eng=Roll right +[STR__GAME_OPTIONS__SPECIAL] +eng=Special +[STR__GAME_OPTIONS__BLOCK] +eng=Block +[STR__GAME_OPTIONS__KICK] +eng=Kick +[STR__GAME_OPTIONS__PUNCH] +eng=Punch +[STR__GAME_OPTIONS__JUMP] +eng=Jump +[STR__GAME_OPTIONS__PAUSE] +eng=Pause +[STR__GAME_OPTIONS__MOVE] +eng=Move +[STR__GAME_OPTIONS__WALK_RUN] +eng=Walk/Run + +; Control method +[STR__GAME_OPTIONS__CONTROL_STYLE] +eng=SELECT CONTROL STYLE +[STR__GAME_OPTIONS__PLAYER_1] +eng=PLAYER 1 +[STR__GAME_OPTIONS__PLAYER_2] +eng=PLAYER 2 +[STR__GAME_OPTIONS__REALATIVE_MOVEMENT] +eng=Relative movement +[STR__GAME_OPTIONS__ABSOLUTE_MOVEMENT] +eng=Absolute movement +[STR__GAME_OPTIONS__RUN] +eng=Default Walk +[STR__GAME_OPTIONS__WALK] +eng=Default Run +[STR__GAME_OPTIONS__VIBRATION_ON] +eng=Vibration On +[STR__GAME_OPTIONS__VIBRATION_OFF] +eng=Vibration Off +[STR__GAME_OPTIONS__PAD_CONFIG_1] +eng=Controller Config 1 +[STR__GAME_OPTIONS__PAD_CONFIG_2] +eng=Controller Config 2 + + +; Difficulty level +[STR__GAME_OPTIONS__DIFFICULTY] +eng=CHOOSE DIFFICULTY +[STR__GAME_OPTIONS__HARD] +eng=Hard +[STR__GAME_OPTIONS__NORMAL] +eng=Normal +[STR__GAME_OPTIONS__EASY] +eng=Easy + +; Password entry +[STR__GAME_OPTIONS__ENTER_PASSWORD] +eng=ENTER CODE +[STR__GAME_OPTIONS__NEW_CODE_ACTIVATED] +eng=NEW CODE ACTIVATED +[STR__GAME_OPTIONS__INCORRECT_PASSWORD] +eng=INCORRECT CODE +[STR__GAME_OPTIONS__ALREADY_ACTIVE_PASSWORD] +eng=CODE ALREADY ACTIVE + +; Password activation +[STR__GAME_OPTIONS__ACTIVATE_CODES] +eng=ACTIVATE CODES + +; Memory card stuff +[STR__GAME_OPTIONS__LOAD] +eng=LOAD SAVED GAME DATA +[STR__GAME_OPTIONS__CHECKMEMORYCARD] +eng=Checking...\nPlease do not remove the MEMORY CARD +[STR__GAME_OPTIONS__SELECTFILETOLOAD] +eng=Select file to load from the MEMORY CARD in MEMORY CARD slot 1 +[STR__GAME_OPTIONS__UNFORMATTEDCARD] +eng=MEMORY CARD in MEMORY CARD slot 1 is not formatted +[STR__GAME_OPTIONS__NOFILESONCARD] +eng=No Power Rangers data present +[STR__GAME_OPTIONS__NOCARDINSLOT] +eng=MEMORY CARD is not inserted into the MEMORY CARD slot +[STR__GAME_OPTIONS__LOADINGPLEASEWIAT] +eng=Loading... Do not remove the MEMORY CARD in MEMORY CARD slot 1 +[STR__GAME_OPTIONS__LOADOK] +eng=Load complete! +[STR__GAME_OPTIONS__LOADERROR] +eng=Load Error! + +; Gallery stuff +[STR__GAME_OPTIONS__GALLERY_NAME] +eng=NAME +[STR__GAME_OPTIONS__GALLERY_STATUS] +eng=STATUS + +[STR__GAME_OPTIONS__GALLERY_NOT_AVAILABLE] +eng=Inactive +[STR__GAME_OPTIONS__GALLERY_AVAILABLE] +eng=Active + +[STR__GAME_OPTIONS__GALLERY0] +eng=T.V. Show +[STR__GAME_OPTIONS__GALLERY1] +eng=Models +[STR__GAME_OPTIONS__GALLERY2] +eng=Maps +[STR__GAME_OPTIONS__GALLERY3] +eng=Comic + + +; --------------------------------------------------------------- +; Password descriptions +; These are the descriptions that appear in the code list so they need to be fairly short +; --------------------------------------------------------------- + +[STR__PASSWORD_DESCRIPTION__INFHEALTH] +eng=Infinite Health +[STR__PASSWORD_DESCRIPTION__INFLIVES] +eng=Infinite Lives +[STR__PASSWORD_DESCRIPTION__LEVELSKIP] +eng=Level Skip +[STR__PASSWORD_DESCRIPTION__TITRANGER] +eng=Titanium Ranger +[STR__PASSWORD_DESCRIPTION__BLINDENEMIES] +eng=Blind Enemies +[STR__PASSWORD_DESCRIPTION__CONTINUES] +eng=Continues +[STR__PASSWORD_DESCRIPTION__RPE] +eng=Infinite RPE +[STR__PASSWORD_DESCRIPTION__GALLERY] +eng=All galleries open + + + +; --------------------------------------------------------------- +; Password values +; These are the values that appear in the codelist +; --------------------------------------------------------------- +[STR__PASSWORD_VALUES__STAGE1_1] +eng=L1 +[STR__PASSWORD_VALUES__STAGE2_1] +eng=L2 +[STR__PASSWORD_VALUES__STAGE2_2] +eng=B2 +[STR__PASSWORD_VALUES__STAGE3_1] +eng=L3 +[STR__PASSWORD_VALUES__STAGE4_1] +eng=L4 +[STR__PASSWORD_VALUES__STAGE4_2] +eng=B4 +[STR__PASSWORD_VALUES__STAGE5_1] +eng=L5 +[STR__PASSWORD_VALUES__STAGE5_2] +eng=B5 +[STR__PASSWORD_VALUES__STAGE6_1] +eng=L6 +[STR__PASSWORD_VALUES__STAGE7_1] +eng=L7 +[STR__PASSWORD_VALUES__STAGE7_2] +eng=B7 + +[STR__PASSWORD_VALUES__CONTINUES_0] +eng=0 +[STR__PASSWORD_VALUES__CONTINUES_5] +eng=5 +[STR__PASSWORD_VALUES__CONTINUES_9] +eng=9 +[STR__PASSWORD_VALUES__CONTINUES_99] +eng=99 + + + +; --------------------------------------------------------------- +; Pause menu +; --------------------------------------------------------------- + +; Texts at the bottom of the display, stating which buttons can be used +[STR__PAUSE_BUTTONS__SELECT] +eng=Select +[STR__PAUSE_BUTTONS__BACK] +eng=Back +[STR__PAUSE_BUTTONS__CONTINUE] +eng=Continue + +; Options on pause menu +[STR__PAUSE_MENU_OPTION__CONTINUE] +eng=Continue +[STR__PAUSE_MENU_OPTION__MISSION] +eng=Mission +[STR__PAUSE_MENU_OPTION__OBJECTIVES] +eng=Objectives +[STR__PAUSE_MENU_OPTION__CONTROLS] +eng=Controls +[STR__PAUSE_MENU_OPTION__QUIT] +eng=Quit +[STR__PAUSE_MENU_OPTION__SAVE] +eng=Save game + + +; Titles of the different pages in the pause menu +[STR__PAUSE_MENU_TITLE__OPTIONS] +eng=OPTIONS +[STR__PAUSE_MENU_TITLE__DEBUG] +eng=DEBUG +[STR__PAUSE_MENU_TITLE__MISSION] +eng=MISSION +[STR__PAUSE_MENU_TITLE__OBJECTIVES] +eng=OBJECTIVES +[STR__PAUSE_MENU_TITLE__CONTROLS] +eng=CONTROLS +[STR__PAUSE_MENU_TITLE__QUIT] +eng=QUIT +[STR__PAUSE_MENU_TITLE__END_OF_LEVEL] +eng=END OF LEVEL +[STR__PAUSE_BONUSES__TITLE] +eng=BONUS + + + + +; Move names as listed in the pause menu +[STR__PAUSE_MENU_MOVE__POWER_LEVEL_1] +eng=Power Level 1 +[STR__PAUSE_MENU_MOVE__POWER_LEVEL_2] +eng=Power Level 2 +[STR__PAUSE_MENU_MOVE__POWER_LEVEL_3] +eng=Power Level 3 +[STR__PAUSE_MENU_MOVE__WHILE_RISING] +eng=While rising +[STR__PAUSE_MENU_MOVE__WHILE_RUNNING] +eng=When running + +[STR__PAUSE_MENU_MOVE__K1] +eng=Straight kick +[STR__PAUSE_MENU_MOVE__K2] +eng=Left kick +[STR__PAUSE_MENU_MOVE__K3] +eng=Roundhouse kick +[STR__PAUSE_MENU_MOVE__K4] +eng=Cartwheel kick +[STR__PAUSE_MENU_MOVE__K5] +eng=Frontsweep kick +[STR__PAUSE_MENU_MOVE__K6] +eng=Jumpside kick + +[STR__PAUSE_MENU_MOVE__P1] +eng=Jab +[STR__PAUSE_MENU_MOVE__P2] +eng=Cross +[STR__PAUSE_MENU_MOVE__P3] +eng=Uppercut +[STR__PAUSE_MENU_MOVE__P4] +eng=Straight punch +[STR__PAUSE_MENU_MOVE__P5] +eng=Quick jab +[STR__PAUSE_MENU_MOVE__P6] +eng=Low Punch +[STR__PAUSE_MENU_MOVE__P7] +eng=Spinning punch +[STR__PAUSE_MENU_MOVE__P8] +eng=Uppercut + +[STR__PAUSE_MENU_MOVE__B1] +eng=Block +[STR__PAUSE_MENU_MOVE__B2] +eng=Backward jump +[STR__PAUSE_MENU_MOVE__B3] +eng=Sideroll + +[STR__PAUSE_MENU_MOVE__N1] +eng=Special +[STR__PAUSE_MENU_MOVE__N2] +eng=Walk/Run +[STR__PAUSE_MENU_MOVE__N3] +eng=Sideroll + +[STR__PAUSE_MENU_MOVE__R1] +eng=Getup attack + + +; Quit page +[STR__PAUSE_MENU_QUIT__REALLY_QUIT] +eng=Really quit? + + +; Story page +[STR__PAUSE_MENU_STORY__PRESS_SELECT] +eng=PRESS SELECT + +; Story page +[STR__PAUSE_MENU_STORY__SECTOR_NOT_CLEARED] +eng=SECTOR NOT CLEARED ! + + +; Save page +[STR__PAUSE_MENU_SAVE__SAVE] +eng=SAVE GAME +[STR__PAUSE_MENU_SAVE__NOSPACEONCARD] +eng=Insufficient free blocks +[STR__PAUSE_MENU_SAVE__SELECTFILETOSAVE] +eng=Select file to save to the MEMORY CARD in MEMORY CARD slot 1 +[STR__PAUSE_MENU_SAVE__NEWSAVE] +eng=- NEW SAVE - +[STR__PAUSE_MENU_SAVE__ENTERSAVENAME] +eng=Enter filename to save +[STR__PAUSE_MENU_SAVE__DUPLICATESAVENAME] +eng=Are you sure you want to overwrite this file? +[STR__PAUSE_MENU_SAVE__DOYOUWANTTOFORMATCARD] +eng=MEMORY CARD in MEMORY CARD slot 1 is not formatted. Do you wish to format? +[STR__PAUSE_MENU_SAVE__FORMATTINGPLEASEWIAT] +eng=Formatting... Do not remove the MEMORY CARD in MEMORY CARD slot 1 +[STR__PAUSE_MENU_SAVE__FORMATTINGOK] +eng=Format complete!\n\nPress X to continue +[STR__PAUSE_MENU_SAVE__FORMATTINGERROR] +eng=Format Error!\n\nPress X to continue +[STR__PAUSE_MENU_SAVE__FORMATTINGINTERRUPTED] +eng=Operation interrupted!\n\nPress X to continue +[STR__PAUSE_MENU_SAVE__SAVEINGPLEASEWIAT] +eng=Saving... Do not remove the MEMORY CARD in MEMORY CARD slot 1 +[STR__PAUSE_MENU_SAVE__SAVEOK] +eng=Save complete!\n\nPress X to continue +[STR__PAUSE_MENU_SAVE__SAVEERROR] +eng=Save error!\n\nPress X to continue + + +; End of level bonus stuff +[STR__PAUSE_BONUSES__HOSTAGES_RESCUED] +eng=Hostages Rescued +[STR__PAUSE_BONUSES__MONSTERS_KILLED] +eng=Monsters Defeated +[STR__PAUSE_BONUSES__PICKUPS_COLLECTED] +eng=Pickups Collected +[STR__PAUSE_BONUSES__QUAKE_SPIKES_COLLECTED] +eng=Quake Spikes Destroyed +[STR__PAUSE_BONUSES__FUEL_CELLS_COLLECTED] +eng=Fuel Cells Collected +[STR__PAUSE_BONUSES__HAS_NOT_DIED] +eng=Survival Bonus +[STR__PAUSE_BONUSES__NOT_USED_SPECIAL] +eng=Combat Bonus +[STR__PAUSE_BONUSES__LIVES_REMAINING] +eng=Lives Remaining +[STR__PAUSE_BONUSES__PERFECT] +eng=Skill Bonus + + +; Controller removed stuff +[STR__PAUSE__CONTROLLER_1_REMOVED] +eng=NO CONTROLLER INSERTED IN CONTROLLER PORT 1 +[STR__PAUSE__CONTROLLER_2_REMOVED] +eng=NO CONTROLLER INSERTED IN CONTROLLER PORT 2 + + +; Objectives +[STR__PAUSE__OBJECTIVE_HOSTAGES_RESCUED] +eng=Hostages Rescued +[STR__PAUSE__OBJECTIVE_QUAKE_SPIKES_DESTROYED] +eng=Quake Spikes Destroyed +[STR__PAUSE__OBJECTIVE_KEY_PARTS_RECOVERED] +eng=Key Parts Recovered +[STR__PAUSE__OBJECTIVE_FUEL_CELLS_RECOVERED] +eng=Fuel Cells Recovered +[STR__PAUSE__OBJECTIVE_LIFE_FORCE_STONES_RECOVERED] +eng=Life Force Stones Recovered + + +; --------------------------------------------------------------- +; Level intro +; --------------------------------------------------------------- + +[STR__LEVEL_INTRO__ENTERING_LEVEL] +eng=LEVEL %d + +[STR__LEVEL__OMEGA_MEGAZORD] +eng=Omega Megazord +[STR__LEVEL__SUPERTRAIN_MEGAZORD] +eng=Supertrain Megazord +[STR__LEVEL__LIGHTSPEED_RESCUE] +eng=Lightspeed Rescue! + +[STR__LEVEL_INTRO__1] +eng=Operation Lightspeed +[STR__LEVEL_INTRO__2] +eng=Lightspeed Teamwork +[STR__LEVEL_INTRO__3] +eng=Rail Rescue +[STR__LEVEL_INTRO__4] +eng=Go Volcanic +[STR__LEVEL_INTRO__5] +eng=Safety First +[STR__LEVEL_INTRO__6] +eng=Lightspeed Rescue +[STR__LEVEL_INTRO__7] +eng=The Road To Skull Cavern + + + + + + + + + +; --------------------------------------------------------------- +; --------------------------------------------------------------- +; Ingame Texts +; These texts appear during each level +; --------------------------------------------------------------- +; --------------------------------------------------------------- + + +; --------------------------------------------------------------- +; Credits/Continues +; --------------------------------------------------------------- +[STR__INGAME__CREDITS] +eng=CREDITS %d +[STR__INGAME__CONTINUE] +eng=CONTINUE %d? + + +; --------------------------------------------------------------- +; Character names +; --------------------------------------------------------------- +[STR__NAME__CAPT_MITCHELL] +eng=Capt. Mitchell +[STR__NAME__MISS_FAIRWEATHER] +eng=Miss. Fairweather +[STR__NAME__QUEEN_BANSHEERA] +eng=Queen Bansheera +[STR__NAME__RED_RANGER] +eng=Red Ranger + + +; --------------------------------------------------------------- +; Level 1 +; --------------------------------------------------------------- + +[STR__VOSCRIPT_0001] +eng=Alert status.\nThere are reports of a siege in downtown Mariner Bay. The monsters seem to be using magical powers to keep the city police away. We suspect it's the work of Queen Bansheera. Your mission Rangers, neutralize this evil so the police can enter the building. +[STR__VOSCRIPT_0002] +eng=Once you arrive at the building we will be able to track you via your Rescue Morphers. Find a way in and rescue any hostages you find on the office floors. Meanwhile, my techs at the Aquabase lab will be locking on to them and teleporting them to safety. It's my job to make sure you stay one step ahead of Queen Bansheera's monsters. +[STR__VOSCRIPT_0002a] +eng=Find a way in and rescue all the hostages found on the office floors. +[STR__VOSCRIPT_0003] +eng=These items improve your special attack. The more you collect, the stronger you become. +[STR__VOSCRIPT_0004] +eng=Well-done Ranger! All the hostages have been rescued from the building. Have you found and destroyed the leader of the Battlings?\nOur sensors have picked up a strong magical source coming from under the building. It's unclear, but the cause of the trouble appears to be emanating from there.\nRanger, be careful... +[STR__VOSCRIPT_0004a] +eng=Ranger, destroy Vypra! + + +; --------------------------------------------------------------- +; Level 2 +; --------------------------------------------------------------- + +[STR__VOSCRIPT_0005] +eng=We have completed our analysis of the crystal you received from defeating Vypra. It appears to be her 'Life-force' stone which, in the wrong hands, could restore her life energy. You must hold onto any crystals retrieved from Queen Bansheera's minions. +[STR__VOSCRIPT_0006] +eng=We have reports of a Code Red. Our seismological data confirms that someone or something is trying to damage the dam. If that happens, we will be facing a serious ecological disaster and Mariner Bay will be washed out to sea.\nGo Rangers! +[STR__VOSCRIPT_0007] +eng=Ranger, our satellite has pin-pointed the source of the seismological activity.\nYou need to destroy all the 'Quake Spikes'. Go to alert status.\nGood luck! +[STR__VOSCRIPT_0007a] +eng=Find and rescue the hostages. +[STR__VOSCRIPT_0007b] +eng=Find and destroy all Quake Spikes. +[STR__VOSCRIPT_0008] +eng=Well done, that's half of the Quake Spikes destroyed, but there's no time to relax: you still need to destroy the other half. +[STR__VOSCRIPT_0009] +eng=Hold on Ranger, that card looks like a trap. Use extreme caution!. +[STR__VOSCRIPT_0010] +eng=We have just finished developing the Supertrain Megazord! These massive machines have been programmed to automatically assist you in defeating any opposing threat.\nThis will be the Supertrain Megazord's first test drive.\nGood luck, Ranger!! +[STR__VOSCRIPT_0010a] +eng=Ranger, get Loki! +[STR__VOSCRIPT_0011] +eng=I am alive. I must be freed.\nThis world will be mine again! + + + +; --------------------------------------------------------------- +; Level 3 +; --------------------------------------------------------------- +[STR__VOSCRIPT_0012] +eng=Ranger, we've got trouble.\nThe Supertrain has been hijacked! Our sensors show that it is being controlled by an enemy on board. Use Aero Rescue Three for drop off at the end of Rail Rescue Five and work your way to the front neutralizing all threats as you go.\nGO! GO! GO! +[STR__VOSCRIPT_0012a] +eng=You must regain control of the Supertrain. +[STR__VOSCRIPT_0012b] +eng=Ranger, you must defeat Jinxer! + + + +; --------------------------------------------------------------- +; Level 4 +; --------------------------------------------------------------- +[STR__VOSCRIPT_0013] +eng=Rangers, listen up. All of your training up to now will be tested to its limits. An asteroid has just hit the city and created a volcanic mountain. With your help the city has a chance.\nLightspeed Rescue! +[STR__VOSCRIPT_0014] +eng=Right now our top priority is to rescue all the trapped civilians. +[STR__VOSCRIPT_0014a] +eng=Find and rescue all the hostages. +[STR__VOSCRIPT_0015] +eng=Well done Ranger: you're on target for saving all of the civilians. Our Lightspeed Rescue research team believes that the Asteroid is somehow alive. We need you now to focus your attention on the large rock itself and get closer to it. +[STR__VOSCRIPT_0016] +eng=This has all the hallmarks of Queen Bansheera. Yes I'm right, Battlings have started to swarm all over the place. Quick, no time to lose. Advance to the asteroid as quickly as possible. +[STR__VOSCRIPT_0016a] +eng=Destroy the evil Fireor. +[STR__VOSCRIPT_0016b] +eng=Ranger, Magmavore must be stopped. +[STR__VOSCRIPT_0016c] +eng=Ranger, you must obliterate Diabolico. + + + +; --------------------------------------------------------------- +; Level 5 +; --------------------------------------------------------------- +[STR__VOSCRIPT_0017] +eng=These 'Fuel Cells' are extremely explosive. They must be delivered to Headquarters via the docks. Your assignment is to collect these precious items before marauding Battlings find them. +[STR__VOSCRIPT_0018] +eng=It is essential that you retrieve these dangerous items. In the wrong hands they could cause immense environmental damage. Make sure you keep them away from high temperatures. Return back safely. +[STR__VOSCRIPT_0018a] +eng=You must find and rescue all the civilians. +[STR__VOSCRIPT_0018b] +eng=Ranger, destroy Olympius! + + + +; --------------------------------------------------------------- +; Level 6 +; --------------------------------------------------------------- +[STR__VOSCRIPT_0019] +eng=Ranger, the Battlings have entered.... TRANSMISSION INTERRUPTED +[STR__VOSCRIPT_0020] +eng=Ranger, we are under attack! I repeat, we are under attack! Our defenses have been breached. Captain Mitchell is missing. Somehow the Battlings have passed through our defenses undetected. Please help us quickly. You can gain access to the base via one of the submarine pools.\nOh no, too late!\nRanger help. +[STR__VOSCRIPT_0021] +eng=This time Lightspeed Power Rangers you are too late. I now control all of Aquabase and all of Lightspeed. I have taken your "palace" from you! Ha ha ha ha! +[STR__VOSCRIPT_0021a] +eng=You must rescue all hostages. +[STR__VOSCRIPT_0021b] +eng=Rescue Ms. Fairweather. +[STR__VOSCRIPT_0022] +eng=Thank you Ranger for rescuing me. Now it's time to rescue Dana's father. First, take me to security's main terminal. +[STR__VOSCRIPT_0022a] +eng=Find security's main terminal. +[STR__VOSCRIPT_0023] +eng=Well done! The security systems will be overridden in a few minutes. +[STR__VOSCRIPT_0023a] +eng=Ranger, you must hold off the Battlings 'til the power is restored. +[STR__VOSCRIPT_0024] +eng=Okay, that's it! Provisional control is now back online and in the hands of Lightspeed Rescue. The main computer has tracked Captain Mitchell to the main control room of Aquabase. Find the other main switches to gain access. I shall keep track of your progress from behind these locked doors. Now go! +[STR__VOSCRIPT_0024a] +eng=Find the other two main switches to gain access to the control room. +[STR__VOSCRIPT_0025] +eng=Well done Ranger, I knew we could trust you to save the day. This will be your final battle! Now step through that portal to Samai Road and defeat Queen Bansheera. +[STR__VOSCRIPT_0025a] +eng=Ranger, destroy the elusive Mermatron! + + + +; --------------------------------------------------------------- +; Level 7 +; --------------------------------------------------------------- +[STR__VOSCRIPT_0026] +eng=Ranger, this portal is the entrance to the Queen's dimension. You must destroy her before the planetary alignment restores her strength. We will try to communicate with you once you step through the portal, but the connection might be unstable. Good luck! +[STR__VOSCRIPT_0026a] +eng=Unlock Demonite!!! +[STR__VOSCRIPT_0026b] +eng=Unlock the Titanium Ranger! +[STR__VOSCRIPT_0026c] +eng=This is the final battle, Ranger!!! Destroy Queen Bansheera!!!! +[STR__VOSCRIPT_0027] +eng=I summon the energy of my minions. They shall live on! +[STR__VOSCRIPT_0028] +eng=Pathetic humans. You are too late. The crossover is here. It is time... +[STR__VOSCRIPT_0029] +eng=Contact re-established.\nWe have completed work on our ultimate weapon. Use the Omega MegaZord, Ranger... + + + +; --------------------------------------------------------------- +; End sequence +; --------------------------------------------------------------- +[STR__VOSCRIPT_0030] +eng=Congratulations Ranger. Evil has been banished. Your training and skills have saved the day. +[STR__VOSCRIPT_0031] +eng=But we're going to keep Aquabase functional, for there will always be a successor ready to take Queen Bansheera's place. +[STR__VOSCRIPT_0032] +eng=We'll be ready! +[STR__VOSCRIPT_0033] +eng=LIGHTSPEED RESCUE! + + + + + + +; --------------------------------------------------------------- +; Back end +; --------------------------------------------------------------- + +[STR__BACK_END__GAMEOVER] +eng=GAME OVER + +[STR__BACK_END__CONGRATSPLAYER1] +eng=Congratulations Player One! + +[STR__BACK_END__CONGRATSPLAYER2] +eng=Congratulations Player Two! + +[STR__BACK_END__ENTERNAME] +eng=Enter your name! + +[STR__BACK_END__POSITION] +eng=You made position %d in the high score table! + + + +; --------------------------------------------------------------- +; Monster names +; --------------------------------------------------------------- + +[STR__MNAME__QUEEN] +eng=Queen +[STR__MNAME__DIABOLICO] +eng=Diabolico +[STR__MNAME__VYPRA] +eng=Vypra +[STR__MNAME__LOKI] +eng=Loki +[STR__MNAME__JINXER] +eng=Jinxer +[STR__MNAME__OLYMPUS] +eng=Olympius + +[STR__MNAME__M01] +eng=Battling +[STR__MNAME__M02] +eng=Fireor +[STR__MNAME__M03] +eng=Magmavore +[STR__MNAME__M04] +eng=Cog +[STR__MNAME__M05] +eng=Stingwinger +[STR__MNAME__M06] +eng=Abominus +[STR__MNAME__M07] +eng=Smogger +[STR__MNAME__M08] +eng=Strikning +[STR__MNAME__M09] +eng=Mermatron +[STR__MNAME__M10] +eng=Shockatron +[STR__MNAME__M11] +eng=Omega Megazord +[STR__MNAME__M12] +eng=Supertrain Megazord + + + + +; --------------------------------------------------------------- +; Credits +; --------------------------------------------------------------- + + +[STR__CREDITS__PRESIDENT] +eng=President +[STR__CREDITS__MANAGING_DIRECTOR] +eng=Managing Director +[STR__CREDITS__DEVELOPMENT_DIRECTOR] +eng=Development Director +[STR__CREDITS__CREATIVE_DIRECTOR] +eng=Creative Director +[STR__CREDITS__PRODUCER] +eng=Producer +[STR__CREDITS__LEAD_PROGRAMMER] +eng=Lead Programmer +[STR__CREDITS__LEAD_ARTIST] +eng=Lead Artists +[STR__CREDITS__LEAD_DESIGNER] +eng=Lead Designer +[STR__CREDITS__PROGRAMMERS] +eng=Programmers +[STR__CREDITS__ARTISTS] +eng=Artists +[STR__CREDITS__ANIMATION] +eng=Animation +[STR__CREDITS__ADDITIONAL_ART_AND_ANIMATION] +eng=Additional Art and Animation +[STR__CREDITS__SOUND_AND_AUDIO] +eng=Sound and Audio +[STR__CREDITS__QUALITY_ASSURANCE_MANAGER] +eng=QA Manager +[STR__CREDITS__QA_TESTERS] +eng=QA Testers +[STR__CREDITS__WITH_SPECIAL_THANKS_TO] +eng=With Special Thanks to +[STR__CREDITS__ASSOCIATE_PRODUCER] +eng=Associate Producer +[STR__CREDITS__ASSISTANT_PRODUCER] +eng=Assistant Producer +[STR__CREDITS__EXECUTIVE_PRODUCER] +eng=Executive Producer +[STR__CREDITS__VP_OF_PRODUCT_DEVELOPMENT] +eng=VP of Product Development +[STR__CREDITS__QA_MANAGERS] +eng=QA Managers +[STR__CREDITS__LEAD_TESTER] +eng=Lead Tester +[STR__CREDITS__TESTERS] +eng=Testers +[STR__CREDITS__PRODUCT_MANAGER] +eng=Product Manager +[STR__CREDITS__ASSOCIATE_PRODUCT_MANAGER] +eng=Associate Product Manager +[STR__CREDITS__CREATIVE_SERVICES] +eng=Creative Services +[STR__CREDITS__VO_TALENT] +eng=VO Talent +[STR__CREDITS__LICENSING_AND_MERCHANDISING_DIRECTOR] +eng=Licensing and Merchandising Director +[STR__CREDITS__COORDINATOR] +eng=Coordinator +[STR__CREDITS__CREATIVE_RESOURCES] +eng=Creative Resources + + + +; Saban + +[STR__CREDITS__SABAN_CREDITS] +eng= Saban Credits + +[STR__CREDITS__CINDY_DAVIS] +eng=Cindy Davis +[STR__CREDITS__CHRISTIANE_TOWNSEND] +eng=Christiane Townsend +[STR__CREDITS__DONNY_SOEDER] +eng=Donny Soeder + + + +; THQ + +[STR__CREDITS__THQ_CREDITS] +eng=THQ Credits + +[STR__CREDITS__PETRO_PIASECKYJ] +eng=Petro Piaseckyj +[STR__CREDITS__ED_RAMIRO] +eng=Ed Ramiro +[STR__CREDITS__CAROLINA_BEROZA] +eng=Carolina Beroza +[STR__CREDITS__SCOTT_KRAGER] +eng=Scott Krager +[STR__CREDITS__MICHAEL_RUBINELLI] +eng=Michael Rubinelli +[STR__CREDITS__DONN_NAUERT] +eng=Donn Nauert +[STR__CREDITS__JEREMY_BARNES] +eng=Jeremy Barnes +[STR__CREDITS__RYAN_CAMU] +eng=Ryan Camu +[STR__CREDITS__JASON_DE_HERAS] +eng=Jason de Heras +[STR__CREDITS__MAURICIO_HERNANDEZ] +eng=Mauricio Hernandez +[STR__CREDITS__MIKE_KAFITY] +eng=Mike Kafity +[STR__CREDITS__STEFAN_MENDEZ] +eng=Stefan Mendez +[STR__CREDITS__MICHAEL_PARKER] +eng=Michael Parker +[STR__CREDITS__MIKE_TOPPER] +eng=Mike Topper +[STR__CREDITS__RACHEL_SILVERSTEIN] +eng=Rachel Silverstein +[STR__CREDITS__KEVIN_HOOPER] +eng=Kevin Hooper +[STR__CREDITS__KIRK_SOMDAL] +eng=Kirk Somdal +[STR__CREDITS__BRIAN_FARRELL] +eng=Brian Farrell +[STR__CREDITS__JEFFREY_LAPIN] +eng=Jeffrey Lapin +[STR__CREDITS__ALISON_LOCKE] +eng=Alison Locke +[STR__CREDITS__GERMAINE_GIOIA] +eng=Germaine Gioia +[STR__CREDITS__LESLIE_BROWN] +eng=Leslie Brown +[STR__CREDITS__TIFFANY_TERNAN] +eng=Tiffany Ternan +[STR__CREDITS__PETER_DILLE] +eng=Peter Dille +[STR__CREDITS__JAMIE_BAFUS] +eng=Jamie Bafus +[STR__CREDITS__LALIE_FISHER] +eng=Lalie Fisher +[STR__CREDITS__CINDY_DAVIS] +eng=Cindy Davis +[STR__CREDITS__DEB_MCCOY_LARSON] +eng=Deb McCoy Larson +[STR__CREDITS__SEAN_CW_JOHNSON__RED_RANGER] +eng=Sean Cw Johnson - Red Ranger +[STR__CREDITS__MICHAEL_CHATURANTABUT__BLUE_RANGER] +eng=Michael Chaturantabut - Blue Ranger +[STR__CREDITS__KEITH_ROBINSON__GREEN_RANGER] +eng=Keith Robinson - Green Ranger +[STR__CREDITS__SASHA_WILLIAMS__YELLOW_RANGER] +eng=Sasha Williams - Yellow Ranger +[STR__CREDITS__ALISON_MACINNIS_PINK_RANGER] +eng=Alison MacInnis - Pink Ranger +[STR__CREDITS__RHETT_FISHER___TITANIUM_RANGER] +eng=Rhett Fisher - Titanium Ranger +[STR__CREDITS__RON_ROGGE____CAPTAIN__MITCHELL] +eng=Ron Rogge' - Captain Mitchell +[STR__CREDITS__MONICA_LOUWERENS__MISS_FAIRWEATHER] +eng=Monica Louwerens - Miss Fairweather +[STR__CREDITS__DIANE_SALINGER___QUEEN_BANSHEERA] +eng=Diane Salinger - Queen Bansheera +[STR__CREDITS__JUSTINE_ARONOFF__GIRL] +eng=Justine Aronoff - Girl +[STR__CREDITS__LAURA_OROZCO__WOMAN] +eng=Laura Orozco - Woman +[STR__CREDITS__ZACH_PAGTER__BOY] +eng=Zach Pagter - Boy +[STR__CREDITS__SCOTT_PAGE_PAGTER__MAN] +eng=Scott Page-Pagter - Man +[STR__CREDITS__JUSTIN_GRUSH] +eng=Justin Grush +[STR__CREDITS__MORGAN_CLARK] +eng=Morgan Clark + +[STR__CREDITS__THQ_AND_THE_THQ_LOGO_ARE_] +eng=THQ and the THQ logo are trademarks and/or registered trademarks of THQ Inc. +[STR__CREDITS___C__2000_THQ_INC_] +eng=(c) 2000 THQ Inc. + + + +; Climax + +[STR__CREDITS__CLIMAX_GROUP_CREDITS] +eng=Climax Group Credits + +[STR__CREDITS__KARL_JEFFERY] +eng=Karl Jeffery +[STR__CREDITS__GARY_LIDDON] +eng=Gary Liddon +[STR__CREDITS__CHRIS_HADLEY] +eng=Chris Hadley +[STR__CREDITS__JOSEPH_CAVALLA] +eng=Joseph Cavalla +[STR__CREDITS__JIM_GARDNER] +eng=Jim Gardner +[STR__CREDITS__DAVE_OWENS] +eng=Dave Owens +[STR__CREDITS__THOR_HAYTON] +eng=Thor H Hayton +[STR__CREDITS__NICK_DRY] +eng=Nick Dry +[STR__CREDITS__CHARLES_BLAIR] +eng=Charlie Blair +[STR__CREDITS__PAUL_GRENFELL] +eng=Paul Grenfell +[STR__CREDITS__TIM_SWANN] +eng=Tim Swann +[STR__CREDITS__JAMES_BRACE] +eng=James Brace +[STR__CREDITS__DAVID_PIMM] +eng=David Pimm +[STR__CREDITS__KEVIN_MARTIN] +eng=Kevin Martin +[STR__CREDITS__NICK_THOMAS] +eng=Nick Thomas +[STR__CREDITS__MATT_EVERITT] +eng=Matt Everitt +[STR__CREDITS__MATT_HUGHES] +eng=Matt Hughes +[STR__CREDITS__PETER_PANTON] +eng=Peter Panton +[STR__CREDITS__STEVE_SAMPSON] +eng=Steve Sampson +[STR__CREDITS__STEVE_CROCKER] +eng=Steve Crocker +[STR__CREDITS__MATT_SIMMONDS] +eng=Matt Simmonds +[STR__CREDITS__STUART_BAYLISS] +eng=Stuart Bayliss +[STR__CREDITS__BARRY_MARTIN] +eng=Barry Martin +[STR__CREDITS__KRAIG_MORGAN] +eng=Kraig Morgan +[STR__CREDITS__JAMES_NEILSON] +eng=James Neilson +[STR__CREDITS__CHRISS_JUBB] +eng=Chris Jubb +[STR__CREDITS__OLIVER_REED_SMITH] +eng=Oliver Reid-Smith +[STR__CREDITS__MATT_SAMSAM] +eng=Matt Sansam +[STR__CREDITS__MIKE_ARMSTRONG] +eng=Mike Armstrong +[STR__CREDITS__DAVE_FALLER] +eng=Dave Faller +[STR__CREDITS__JAMES_PARHAM] +eng=James Parham + +[STR__CREDITS__CAROLINE_MILLER] +eng=Caroline Miller +[STR__CREDITS__CAL_BLAGBROUGH] +eng=Cal Blagbrough + +[STR__CREDITS__HELLOS] +eng=Very Special Thanks Indeed to + +[STR__CREDITS__HILARY_GARDNER] +eng=Hilary Gardner +[STR__CREDITS__TEREZA_PARSONS] +eng=Tereza Parsons +[STR__CREDITS__RACHEL_FORD] +eng=Rachel Ford +[STR__CREDITS__CATHERINE_ROCHATTE] +eng=Catherine Rochatte +[STR__CREDITS__BRASHLEY] +eng=Ashley and Bradley Bricknell + + +; --------------------------------------------------------------- +; Debugging text +; The following texts DO NOT require translation +; --------------------------------------------------------------- + +[STR__ART_REMOVE_THIS_TRIGGER] +eng=THIS TRIGGER SHOULD NOT BE HERE\nTO BE REMOVED BY ART.. + diff --git a/tools/Banker.exe b/tools/Banker.exe new file mode 100644 index 0000000000000000000000000000000000000000..21c6d55d1a9c7b93c0fef031792fda9fa9188029 GIT binary patch literal 213047 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 literal 0 HcmV?d00001 diff --git a/tools/MkSpeech.exe b/tools/MkSpeech.exe new file mode 100644 index 0000000000000000000000000000000000000000..f9870a28e01baa2881e2f25c12d4eb7b39bfc2f5 GIT binary patch literal 49152 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 literal 0 HcmV?d00001 diff --git a/tools/Perl/bin/GET b/tools/Perl/bin/GET new file mode 100644 index 000000000..1207cd7fe --- /dev/null +++ b/tools/Perl/bin/GET @@ -0,0 +1,505 @@ +#!perl -w + +# $Id: lwp-request.PL,v 1.33 1998/08/04 09:18:11 aas Exp $ +# +# Simple user agent using LWP library. + +=head1 NAME + +lwp-request, GET, HEAD, POST - Simple WWW user agent + +=head1 SYNOPSIS + + lwp-request [-aeEdvhx] [-m method] [-b ] [-t ] + [-i ] [-c ] [-C ] + [-p ] [-o ] ... + +=head1 DESCRIPTION + +This program can be used to send requests to WWW servers and your +local file system. The request content for POST, PUT and CHECKIN +methods is read from stdin. The content of the response is printed on +stdout. Error messages are printed on stderr. The program returns a +status value indicating the number of URLs that failed. + +The options are: + +=over 4 + +=item -m + +Set which method to use for the request. If this option is not used, +then the method is derived from the name of the program. + +=item -f + +Force request through, even if the program believes that the method is +illegal. The server will probably reject the request. + +=item -b + +This URL will be used as the base URL for the URLs that the method is +applied to. The base URL only takes effect for relative URLs. If you +do not provide this option and the URLs are relative, then they will +be treated as files in the local file system. + +=item -t + +Set the timeout value for the requests. The timeout is the amount of +time that the program will wait for a response from the remote server +before it fails. The default unit for the timeout value is seconds. +You might append "m" or "h" to the timeout value to make it minutes or +hours, respectively. The default timeout is '3m', i.e. 3 minutes. + +=item -i

|ol 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 IK=lv+0BDq8H2?qr literal 0 HcmV?d00001 diff --git a/tools/Perl/bin/PerlSE.pl b/tools/Perl/bin/PerlSE.pl new file mode 100644 index 0000000000000000000000000000000000000000..684b8e91fd8d5db6d3aceff4d66258709d7f4fac GIT binary patch literal 685 zcma)3!D_-l6znyD{KG3Qm|$(Ry+tfudJ}r=L2XF%6_&1>vYRMH?6>#ri)*7$XvkqR znVFq8udxWPQa?Uq*~|Pn%jUAiNfbt*ZA!>-SEyWSS?5uBh{B);QrBp7pG^X3TWwZ?I`m!!l<7c)1xQ%LLMt z3678DRE#G9KRsYpsjBsd^YaGa(gKUSN=3@yN!x2Vy4jX!sQqiFw)sw>r+&DHfk5R0 z%^YHB2>YpI9j9;U_Ktet4Rh-WGpQgF!4r%ifrAU{7fE;c?FjZ-5OFwO!9DzbbLGJi ZTzmhJUy29q#<+gJ4zYK!Xd(38`~Wvgx#|D_ literal 0 HcmV?d00001 diff --git a/tools/Perl/bin/a2p.exe b/tools/Perl/bin/a2p.exe new file mode 100644 index 0000000000000000000000000000000000000000..85cc81226bb7174332499124b775667296bf1799 GIT binary patch literal 89600 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

>YNa_LuLOAqg*wYPdR5B1 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 literal 0 HcmV?d00001 diff --git a/tools/Perl/bin/lwp-download b/tools/Perl/bin/lwp-download new file mode 100644 index 000000000..a496980f7 --- /dev/null +++ b/tools/Perl/bin/lwp-download @@ -0,0 +1,232 @@ +#!perl -w + +# $Id: lwp-download.PL,v 1.7 1998/08/04 09:03:35 aas Exp $ + +=head1 NAME + +lwp-download - fetch large files from the net + +=head1 SYNOPSIS + + lwp-download [-a] [] + +=head1 DESCRIPTION + +The I program will down load the document specified by the URL +given as the first command line argument to a local file. The local +filename used to save the document is guessed from the URL unless +specified as the second command line argument. + +The I program is implemented using the I +library. It is better suited to down load big files than the +I program because it does not store the file in memory. +Another benefit is that it will keep you updated about its progress +and that you don't have much options to worry about. + +Use the C<-a> option to save the file in text (ascii) mode. Might make a +difference on dosish systems. + +=head1 EXAMPLE + +Fetch the newest and greatest perl version: + + $ lwp-download http://www.perl.com/CPAN/src/latest.tar.gz + Saving to 'latest.tar.gz'... + 1.47 MB received in 22 seconds (68.7 KB/sec) + +=head1 AUTHOR + +Gisle Aas + +=cut + +use LWP::UserAgent; +use LWP::MediaTypes; +use URI::URL; +use strict; + +my $progname = $0; +$progname =~ s,.*/,,; # only basename left in progname +$progname =~ s/\.\w*$//; # strip extension if any + +#parse option +use Getopt::Std; +my %opts; +unless (getopts('a', \%opts)) { + usage(); +} +my $opt_a = $opts{a}; # save in binary mode + +my $url = url(shift || usage()); +my $argfile = shift; + +my $ua = new LWP::UserAgent; + +$ua->agent("lwp-download/0.1 " . $ua->agent); +$ua->env_proxy; + +my $req = new HTTP::Request GET => $url; + +my $file; # name of file we download into +my $length; # total number of bytes to download +my $flength; # formatted length +my $size = 0; # number of bytes received +my $start_t; # start time of download +my $last_dur; # time of last callback + +my $shown = 0; # have we called the show() function yet + +$SIG{INT} = sub { die "Interrupted\n"; }; + +$| = 1; # autoflush + +my $res = $ua->request($req, + sub { + unless($file) { + my $res = $_[1]; + unless ($argfile) { + # must find a suitable name to use. First thing + # to do is to look for the "Content-Disposition" + # header defined by RFC1806. This is also supported + # by Netscape + my $cd = $res->header("Content-Disposition"); + if ($cd && $cd =~ /\bfilename\s*=\s*(\S+)/) { + $file = $1; + $file =~ s/;$//; + $file =~ s/^([\"\'])(.*)\1$/$2/; + } + + # if this fails we try to make something from the URL + unless ($file) { + my $req = $res->request; # now always there + my $rurl = $req ? $req->url : $url; + + $file = ($rurl->path_components)[-1]; + unless (length $file) { + $file = "index"; + my $suffix = media_suffix($res->content_type); + $file .= ".$suffix" if $suffix; + } elsif ($rurl->scheme eq 'ftp' || + $file =~ /\.tgz$/ || + $file =~ /\.tar(\.(Z|gz))?$/ + ) { + # leave the filename as it was + } else { + my $ct = guess_media_type($file); + unless ($ct eq $res->content_type) { + # need a better suffix for this type + my $suffix = media_suffix($res->content_type); + $file .= ".$suffix" if $suffix; + } + } + } + + # Check if the file is already present + if (-f $file && -t) { + print "Overwrite $file? [y] "; + my $ans = ; + exit if !defined($ans) || !($ans =~ /^y?\n/); + } else { + print "Saving to '$file'...\n"; + } + } else { + $file = $argfile; + } + open(FILE, ">$file") || die "Can't open $file: $!"; + binmode FILE unless $opt_a; + $length = $res->content_length; + $flength = fbytes($length) if defined $length; + $start_t = time; + $last_dur = 0; + } + $size += length($_[0]); + print FILE $_[0]; + if (defined $length) { + my $dur = time - $start_t; + if ($dur != $last_dur) { # don't update too often + $last_dur = $dur; + my $perc = $size / $length; + my $speed; + $speed = fbytes($size/$dur) . "/sec" if $dur > 3; + my $secs_left = fduration($dur/$perc - $dur); + $perc = int($perc*100); + my $show = "$perc% of $flength"; + $show .= " (at $speed, $secs_left remaining)" if $speed; + show($show); + } + } else { + show( fbytes($size) . " received"); + } + } +); + +if ($res->is_success || $res->message =~ /^Interrupted/) { + show(""); # clear text + print "\r"; + print fbytes($size); + print " of ", fbytes($length) if defined($length) && $length != $size; + print " received"; + my $dur = time - $start_t; + if ($dur) { + my $speed = fbytes($size/$dur) . "/sec"; + print " in ", fduration($dur), " ($speed)"; + } + print "\n"; + my $died = $res->header("X-Died"); + if ($died || !$res->is_success) { + if (-t) { + print "Transfer aborted. Delete $file? [n] "; + my $ans = ; + unlink($file) if defined($ans) && $ans =~ /^y\n/; + } else { + print "Transfer aborted, $file kept\n"; + } + } +} else { + print "\n" if $shown; + print "$progname: Can't download: ", $res->code, " ", $res->message, "\n"; + exit 1; +} + + +sub fbytes +{ + my $n = int(shift); + if ($n >= 1024 * 1024) { + return sprintf "%.3g MB", $n / (1024.0 * 1024); + } elsif ($n >= 1024) { + return sprintf "%.3g KB", $n / 1024.0; + } else { + return "$n bytes"; + } +} + +sub fduration +{ + use integer; + my $secs = int(shift); + my $hours = $secs / (60*60); + $secs -= $hours * 60*60; + my $mins = $secs / 60; + $secs %= 60; + if ($hours) { + return "$hours hours $mins minutes"; + } elsif ($mins >= 2) { + return "$mins minutes"; + } else { + $secs += $mins * 60; + return "$secs seconds"; + } +} + +sub show +{ + my $mess = shift; + print "\r$mess", (" " x (75 - length $mess)); + $shown++; +} + +sub usage +{ + die "Usage: $progname [-a] []\n"; +} diff --git a/tools/Perl/bin/lwp-mirror b/tools/Perl/bin/lwp-mirror new file mode 100644 index 000000000..f6a72697c --- /dev/null +++ b/tools/Perl/bin/lwp-mirror @@ -0,0 +1,104 @@ +#!perl -w + +# $Id: lwp-mirror.PL,v 1.18 1997/12/03 21:21:00 aas Exp $ +# +# Simple mirror utility using LWP + +=head1 NAME + +lwp-mirror - Simple mirror utility for WWW + +=head1 SYNOPSIS + + lwp-mirror [-v] [-t timeout] + +=head1 DESCRIPTION + +This program can be used to mirror a document from a WWW server. The +document is only transfered if the remote copy is newer than the local +copy. If the local copy is newer nothing happens. + +Use the C<-v> option to print the version number of this program. + +The timeout value specified with the C<-t> option. The timeout value +is the time that the program will wait for response from the remote +server before it fails. The default unit for the timeout value is +seconds. You might append "m" or "h" to the timeout value to make it +minutes or hours, repectively. + +Because this program is implemented using the LWP library, it only +supports the protocols that LWP supports. + +=head1 SEE ALSO + +L, L + +=head1 AUTHOR + +Gisle Aas + +=cut + + +use LWP::Simple; +use Getopt::Std; + +$progname = $0; +$progname =~ s,.*/,,; # use basename only +$progname =~ s/\.\w*$//; #strip extension if any + +$VERSION = sprintf("%d.%02d", q$Revision: 1.18 $ =~ /(\d+)\.(\d+)/); + +$opt_h = undef; # print usage +$opt_v = undef; # print version +$opt_t = undef; # timeout + +unless (getopts("hvt:")) { + usage(); +} + +if ($opt_v) { + require LWP; + my $DISTNAME = 'libwww-perl-' . LWP::Version(); + die <<"EOT"; +This is lwp-mirror version $VERSION ($DISTNAME) + +Copyright 1995-1996, Gisle Aas. + +This program is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. +EOT +} + +$url = shift or usage(); +$file = shift or usage(); +usage() if $opt_h or @ARGV; + +if (defined $opt_t) { + $opt_t =~ /^(\d+)([smh])?/; + die "$progname: Illegal timeout value!\n" unless defined $1; + $timeout = $1; + $timeout *= 60 if ($2 eq "m"); + $timeout *= 3600 if ($2 eq "h"); + $LWP::Simple::ua->timeout($timeout); +} + +$rc = mirror($url, $file); + +if ($rc == 304) { + print STDERR "$progname: $file is up to date\n" +} elsif (!is_success($rc)) { + print STDERR "$progname: $rc ", status_message($rc), " ($url)\n"; + exit 1; +} +exit; + + +sub usage +{ + die <<"EOT"; +Usage: $progname [-options] + -v print version number of program + -t Set timeout value +EOT +} diff --git a/tools/Perl/bin/lwp-request b/tools/Perl/bin/lwp-request new file mode 100644 index 000000000..1207cd7fe --- /dev/null +++ b/tools/Perl/bin/lwp-request @@ -0,0 +1,505 @@ +#!perl -w + +# $Id: lwp-request.PL,v 1.33 1998/08/04 09:18:11 aas Exp $ +# +# Simple user agent using LWP library. + +=head1 NAME + +lwp-request, GET, HEAD, POST - Simple WWW user agent + +=head1 SYNOPSIS + + lwp-request [-aeEdvhx] [-m method] [-b ] [-t ] + [-i ] [-c ] [-C ] + [-p ] [-o ] ... + +=head1 DESCRIPTION + +This program can be used to send requests to WWW servers and your +local file system. The request content for POST, PUT and CHECKIN +methods is read from stdin. The content of the response is printed on +stdout. Error messages are printed on stderr. The program returns a +status value indicating the number of URLs that failed. + +The options are: + +=over 4 + +=item -m + +Set which method to use for the request. If this option is not used, +then the method is derived from the name of the program. + +=item -f + +Force request through, even if the program believes that the method is +illegal. The server will probably reject the request. + +=item -b + +This URL will be used as the base URL for the URLs that the method is +applied to. The base URL only takes effect for relative URLs. If you +do not provide this option and the URLs are relative, then they will +be treated as files in the local file system. + +=item -t + +Set the timeout value for the requests. The timeout is the amount of +time that the program will wait for a response from the remote server +before it fails. The default unit for the timeout value is seconds. +You might append "m" or "h" to the timeout value to make it minutes or +hours, respectively. The default timeout is '3m', i.e. 3 minutes. + +=item -i + # + # + } + save($name, $doc); + return $name; + } else { + print STDERR $res->code . " " . $res->message . "\n" if $VERBOSE; + $seen{$plain_url->as_string} = $url->as_string; + return $url->as_string; + } +} + +sub new_link +{ + my($pre, $type, $quote, $url, $base, $localbase, $depth) = @_; + + $url = protect_frag_spaces($url); + + $url = fetch(url($url, $base)->abs, $type, $depth); + $url = url("file:$url", "file:$localbase")->rel + unless $url =~ /^[.+\-\w]+:/; + + $url = unprotect_frag_spaces($url); + + return $pre . $quote . $url . $quote; +} + + +sub protect_frag_spaces +{ + my ($url) = @_; + + $url = $url->as_string if (ref($url)); + + if ($url =~ m/^([^#]*#)(.+)$/) + { + my ($base, $frag) = ($1, $2); + $frag =~ s/ /%20/g; + $url = $base . $frag; + } + + return $url; +} + + +sub unprotect_frag_spaces +{ + my ($url) = @_; + + $url = $url->as_string if (ref($url)); + + if ($url =~ m/^([^#]*#)(.+)$/) + { + my ($base, $frag) = ($1, $2); + $frag =~ s/%20/ /g; + $url = $base . $frag; + } + + return $url; +} + + +sub fix_backslashes +{ + my ($url) = @_; + my ($base, $frag); + + $url = $url->as_string if (ref($url)); + + if ($url =~ m/([^#]+)(#.*)/) + { + ($base, $frag) = ($1, $2); + } + else + { + $base = $url; + $frag = ""; + } + + $base =~ tr/\\/\//; + $base =~ s/%5[cC]/\//g; # URL-encoded back slash is %5C + + return $base . $frag; +} + + +sub to_lower +{ + my ($url) = @_; + my $was_object = 0; + + if (ref($url)) + { + $url = $url->as_string; + $was_object = 1; + } + + if ($url =~ m/([^#]+)(#.*)/) + { + $url = lc($1) . $2; + } + else + { + $url = lc($url); + } + + if ($was_object == 1) + { + return url($url); + } + else + { + return $url; + } +} + + +sub translate_spaces +{ + my ($url) = @_; + my ($base, $frag); + + $url = $url->as_string if (ref($url)); + + if ($url =~ m/([^#]+)(#.*)/) + { + ($base, $frag) = ($1, $2); + } + else + { + $base = $url; + $frag = ""; + } + + $base =~ s/^ *//; # Remove initial spaces from base + $base =~ s/ *$//; # Remove trailing spaces from base + + $base =~ tr/ /_/; + $base =~ s/%20/_/g; # URL-encoded space is %20 + + return $base . $frag; +} + + +sub mkdirp +{ + my($directory, $mode) = @_; + my @dirs = split(/\//, $directory); + my $path = shift(@dirs); # build it as we go + my $result = 1; # assume it will work + + unless (-d $path) { + $result &&= mkdir($path, $mode); + } + + foreach (@dirs) { + $path .= "/$_"; + if ( ! -d $path) { + $result &&= mkdir($path, $mode); + } + } + + return $result; +} + + +sub find_name +{ + my($url, $type) = @_; + #print "find_name($url, $type)\n"; + + # Translate spaces in URL to underscores (_) if $NOSPACE defined + $url = translate_spaces($url) if (defined $NOSPACE); + + # Translate URL to lowercase if $TOLOWER defined + $url = to_lower($url) if (defined $TOLOWER); + + $url = url($url) unless ref($url); + + my $path = $url->path; + + # trim path until only the basename is left + $path =~ s|(.*/)||; + my $dirname = ".$1"; + if (!$HIER) { + $dirname = ""; + } elsif (! -d $dirname) { + mkdirp($dirname, 0775); + } + + my $extra = ""; # something to make the name unique + my $suffix; + + if ($KEEPEXT{lc($type)}) { + $suffix = ($path =~ m/\.(.*)/) ? $1 : ""; + } else { + $suffix = media_suffix($type); + } + + $path =~ s|\..*||; # trim suffix + $path = "index" unless length $path; + + while (1) { + # Construct a new file name + my $file = $dirname . $path . $extra; + $file .= ".$suffix" if $suffix; + # Check if it is unique + return $file unless -f $file; + + # Try something extra + unless ($extra) { + $extra = "001"; + next; + } + $extra++; + } +} + + +sub save +{ + my $name = shift; + #print "save($name,...)\n"; + open(FILE, ">$name") || die "Can't save $name: $!"; + binmode FILE; + print FILE $_[0]; + close(FILE); +} + + +sub usage +{ + die <<""; +Usage: $progname [options] +Allowed options are: + --auth=USER:PASS Set authentication credentials for web site + --depth=N Maximum depth to traverse (default is $MAX_DEPTH) + --hier Download into hierarchy (not all files into cwd) + --iis Workaround IIS 2.0 bug by sending "Accept: */*" MIME + header; translates backslashes (\\) to forward slashes (/) + --keepext=type Keep file extension for MIME types (comma-separated list) + --limit=N A limit on the number documents to get (default is $MAX_DOCS) + --nospace Translate spaces URLs (not #fragments) to underscores (_) + --version Print version number and quit + --verbose More output + --quiet No output + --sleep=SECS Sleep between gets, ie. go slowly + --prefix=PREFIX Limit URLs to follow to those which begin with PREFIX + --tolower Translate all URLs to lowercase (useful with IIS servers) + +} diff --git a/tools/Perl/bin/p_uninst.dat b/tools/Perl/bin/p_uninst.dat new file mode 100644 index 000000000..df67d8a45 --- /dev/null +++ b/tools/Perl/bin/p_uninst.dat @@ -0,0 +1,17 @@ +$app_name = 'ActivePerl'; +$is_uninstall_string = 'C:\\WINNT\\uninst.exe -fC:\\Perl\\DeIsL1.isu'; +$path_info = [ + 'C:\\Perl\\bin' + ]; +$iis_virt_dir = []; +$iis_script_map = {}; +$ns_config_dir = undef; +$lines_in_file = {}; +$directory = [ + 'C:\\Perl\\html\\lib' + ]; +$file = [ + 'C:\\Perl\\bin\\ppm.bat', + 'C:\\Perl\\bin\\perlse.pl', + 'C:\\Perl\\bin/p_uninst.dat' + ]; diff --git a/tools/Perl/bin/perl.exe b/tools/Perl/bin/perl.exe new file mode 100644 index 0000000000000000000000000000000000000000..e464457bec62cf784a508c75cda9886f339f37bb GIT binary patch literal 44544 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

sl(PBFlO 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

_TjZt7Pg?h;Ad#f&;7J*rn* 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

o?eiZ+)9H1 zK1;W2W0n0n;pg>t;O|%7%}6-Y_dLI<9|u{%!6=Mv5Q2lW4~C?5Icb$3Z=Vu)X^I}R zYlO_%i#_hJvzchI9o`S@dwA<7w?~2cA=n#{(;<-fM2K_4QTzs3+>omEdW_d_T2Txu z)dbvf2See7ynF6!glKW#l4Ln@hTwM|9w4vn=V&LxWqrEe9=$sK&6sWac`F>guP194 z4jECs`$K5h7h6kPMwQNP88&;NdgPh}6T)ynkUbEeug2a`k56?y#i#l{;!}w)9G~ig zd`6R5bud7Ds=4F2R8r`cFBqTddLus7_x1Qx;&kz;QmV!Fd#J6X_*A$W^}iaQ3R@k& z*afS^(AIoYQ&=~?YlX*q*;$qM|ry9cAE0% z9@fkI;h#R2&X@CRjfGq4x6=IL$NwR*me6kvO(^8bqtEL%80*=I<>k;!piK`Jgg;@S zc)b*h32ZS!$FklCs5)=4qtzX!{& zhgfpAo*9$^h#`J#r11V%EMav9-CXB*{U8y7L7Be`S(G(O{qLj263 zDowmeN#|0CN7&2g_%+M&XC6OdF1W@H7d25DDy+SvNO}{`Y)U|TV(hP7 zP0u1FNLm_FU0}1F55*_cDx+x?qXWU;QNHU@@?c;bE}7VfTsr;nIdHzOckLwl6bjKD zu(ra9ACI+pq2|KsH+{V;eBp&wh;LU3*M&&~O;V||Xoqy>03d(bP6vmm1Gmfd#eSIB z4;`XO^C^XVbb9T>+u(E}*S-6t?kLhdR2qG%EgvZ%k3oem(V5w|&hk2VP&| zb&65w!RzR$jI5`Z-9!bntX}*JMVS-E-)?aPg8V53yF0DQIWR{i(@wf`2WcGw{uP6#aX{i78YY2W_035`}~00@ZC~Qw~)R;zf{i*Ij$SVd$n@(+++> z^u{(kfGv%0IDz1ePmvv1G@C2{;LoCX@l&K`Q&XQJ#DrpQE~VzlYJHe4X!6&s1m8&kfyhXw%S7nFY!IUk~{-b@U~ov_V^jBk0!4eWkh@I z@$Fnig5_kV9h5OSI>hzY9@|kIPLYz+6V5H=vB4vC=O8R#$nypnQc{K9EADroI**z| zW(r8mM;#txWTVyh+tu;+Th%Km24n`7LK^Uf)kDEBXV4oe+py{aaZ>@!xwDZ+)xy## zgK9u#EIKSH7$hpsMME;=MhmST6t?LMNR`4#v<~{?9qCw#A?h=bfg&V0i+??RcLmB z1v_b1Pdjsv+}Bg&szwKv$@Gz~XT=R{NgUWi&@X}R!9Rp86K=5DC?*XA|Mn!a{q*pGer@tLZ#(^9BE zE1&jRV1F|eaiC^%q@j-Zs@%_^Ia?C3TyZMBkm_3oL&t(`frw?MDGURhZ{b2a!oNV3 zZ_cBtD6jDl{KD~_=4vX|fGTiqa3ZEI)1{QQzEH1wwGW5E8=D%*tn;S|enjacnkHBg z=ui%qGO3mhaXzOKyEdnKI5j6Z6~NhRwe57do5IpH9&A89xvQWP&k5VBT8E0)kPb3} z-!O>(ut9%DzJu=aTgyS?PvE_^+==_Q#f&?YCEg;9v04M}NC2j@CX+0fYS2|csAqL} zBbQtL+yGl={L$~r__J7S_|HoJ@P8>LoG0Up(6v@>%aH{8h?#AS#a$^%J~HM9nZE zYSN&H0-7jJz|v(2JiUxTKZHN}wW3o4;faP6WY{E;;u3l0-VAWRpUPv8$cMC0pV3YP zAj9k_mhA_*f_>ZoVsOxYlRRC|muU+z3=~m~vNRJb-ta089!_(sv=|oXCOg8G1IkC}wLP@p5aq8}mhyL2JMxNgxu) zJ^e({VvmQcYj)$0e&5I6fa9OUPfkBS-f3psy@((2=>!w*jH&P@C-$2kJ2~-7&ySz* zGO9BY%#Vlcn9JpB_r;O8SU#rtx&(h7ZTfWs9IupX?vlgIF8 z{D?wm5aaX@zCpEgh_g6VAH;a7om2HuG*YSav>0564{@82mjldxCoKt86SiYHc=m*e z{4t9EknizP{4cyG$e;K>ju%3m9_aa{e>X%;B$mdYJ$?u18GrQqKK=$87s(F{d=NTX z2IconEsP5VKf(+BV;mO-DqNfxr)PyeG(6BBD?t;_u(1Pht0f2to`(7Y6S&{L$}G{0)Q$gJP2Lac271+{!q) zA3ws)Jw=z;h{r(6@p07u{`BzP$ z0U3yT_Eknyf*(pmVTuu=mfd1dRvb_1=u95|=yxjq2E$XFzQ6*&kFEnh0)*-aDOExL zI)=f;O5K6|*m!KU94X3K;vY!vvSfjz#1?*p!8}n{T+$$x(s;-Tp$WCtF=JG|gHGBj z>r#;z%U&+iYN=rH62)G8p_(;ot2%@n_t0k@yyFM2wUqcp-)$^pfe%|j9wd@NDnVWb zapX+YM%FU4<%xf7z<;+?U;;F~TD`-KhsZY+RTMxNB0Lr$qNWZL-G#C@oSdbO(6tUv zy$9?c31JugVJS}X8n@C1$r3&L7sBc078)LR zyh8!8j+3D%>2`2Q1l8*>z= zUGHSZnoz(mbWus?a0jxnk7W&1}uBB6*TFsc{ukZS>}HErBzL?)#H zRtT;r=tO&DF)tQzNhb_(ouUQ#Nau5BD&L#R<=M6e70Yj`#CX#uHKtFJ@F!`XVjxm* zP1p(TSFW!XIe113=-1gIj6QT(XaL16{7AEjIt~ezCjihzN2s_T37YqSh8W{jpdm!H z^o}9YAA14*83$@2ghpx6^+;+qXj$&_OG{`NTzB4q7PPy)`FPRpVqZrvtC|egt|?l( zU;GghS-)tbUL^L9G7qHzldpaKNYTbw#yA;S5N#9Zuk0)16}W=wl6G!S>lG zLX!K*c%vx?w4|{T7-ARtl{$;$F7(OHQ=Q~4n(B(2>X|qbQS{;vwPF+3AU!bzR3DB? zuubIR{USbR!QKUWr4VMc&an&DZjyH4yrKb5w&C?`CP;CS*k6vFeN;! z;rJ4SV>^DKnjXH|iok1G_q)|0O?#fABQfXQ zs!MV3Q;ky@xJ-Q_ot4)Wq<+HX+2#1F!vs>q+G=Rd9`W9dzG5@lT8{rifXhGlEE*PX z<`C^83;ws`kDwIdCyiSPQ5_&lFM3x>l7-wbyP94g*r7q8yu_y2)kIbbI&(S;bf#~M z>rETyvDlT;MWRLCv9xi{A8_Nmqbd$EYFh-beNO{$H4W}Hik0sJ8ZTO(L7u4%h$v7U zpdmKmB}nBq-qmy-K_oBzQiQHtxkay!CBTpn5HMr;(!VSr^YuLV&j3V>J<_-q!gbY9 zfHDo&VFG!rf&Az?9Z7{|B>e?g9SBK3L;BZ%r28s$kn$0BnzSLPb26^}%|8iBTI5|6 zY%Na%u-I-oDuP|*4y&a#P0F3Y)}?m*Iq{bv*B^bTjYa2j4|5E?UeE%q$$FVV=g+55 zX@BAQv-(!k{P||j7nwhI$Lk+x{#;DLBm|ei=Fjh${Qs5tQw)8WdH#4Yd0NXS$@%l^ z5%KwRU;OdR^XJeY^XJ8{Xa2Na6$jZgf4rxgKi?c={>=G$=17gPbj+6JNGhWBuwN^1&3@1w)$9^*f?7 z#y!JU0Rv3mx9}2W+FyO@;u7?sd4F{+>eB`N8~AbH{gnsv7qxC=s1yZk9ua`${^~B7 zb{!ga1WT4!l(b;Ug%;Hv^kLg1w^{Uchd+o@8GDIEoF!u-1hHPHfWUOsFXcLC;Rv60 zEs(xWvKB^ewD^02I~K${(zul~lI06yf1)E`fc?qc61DOD$*V&R%$#X|avw;akJMaE zNgEUg`X^o(E?FS%3Sfhh3MjwG2IU?Alh~k)Lmdz^L>EAk2Vs(qI}#g|lf$@(fsHW| zc)ggspk>~mkgSiXl-Quqexv1B-)Z+J0{H+VzCT$k%b#w4@;B2bNdwY&hz5z2etG!C zS!ysK)_lr+K&SG>p)Beu?@o5}quiZf@5_UWmE8$y!<|8piZj%y?@fX@E=E|1x!xQ} zGPxHp<-p@^ESpfuTNJmkMbSz02XcF|dZl)kH=lsnp-#gi1rn26lZX?ptuldNKFLOQ zktku9NF&4QG=|C7#NVvX7UMYg?4(@cnef~+Z7KE9Ve}*MbrN>ueC7SaFCfa`uzUQAf>aCOAp8&;^&3;4N}SW%%mohAlBQze~?cj{XeDhG$);M z`=UJ;46RS$-HSb_4GV^_e@Vl?*uVrsx20H=q1eD=1e;I0gPBo;1s2i<0v2Hh^91ij z=1P3?4(35lxhS6Et-Fs?^5ZGP>+a!{p+?GSb}-5Mm&QYio%S!V$9clrg2%dDsHs-m zy@bab`-|rHi5?CILmSY~i9szr=-Z}b1ZUo2mpd50aC|!^C16Z4xrce_FfI{69tXKk z_G3Y0l{_8Mx|;ui+UmA*8-?*UnnIMydzibt4Ip5g(O1RyFrO(m1;jtEk%QRF8 z3|a$v=3@i%07j2CFs1deni>S)>%W1y85@|Jy>&tSqlm}KS)92aeLZytGbV$kFDkc) zv*V9(35-xh4!gbRS1IjOjQzr1l6NqzDUbFM#(v=+B=5|HdIj-dfr#^iGeJzvkO66pz$4GHX7xr4cxcQA8#PX&|w1Von+L<8)p3J4;p@cAlx zDzz+W2eS=37=(Jp4rXCq>q6SWNF)`Sk@O(2IuMfXLHgH#q_^i9LLqJe@(u>X2cL^q z$Q=xszws^x^9)jzc@MMD6Kwr1_AuYY9_G98Jq!=Fu`V@BZK7Utd=JBAlK6>Suf_DM zb!ts@-A>vgSiYEqiPb@^JjL{W6W-Gz3)6z2=Uh%7PC|#`3~IAeaH|{XstAT4g_Y17 zJxmK~)-xBEOeh|97F;`d_LKf%komv(OU(ZpPnrJ*ztH@Tw=v-S$39N(!Q}j}O`89G z{Pr)+e{4dqe8=a1(hh74^peK>k3XJy{__rOfceimu&-hMCqOpMf7*c!I{$eGHo*Mn z9oW|}|Dhpa?wOC7Tj(>*e{btT+JOx)|9J;C0FrnI_SKQ}Hq3b#q)GkeKken`d;9Oe zYM|WsYa3_jJFxHe+kr`T(0>P(#1_75V=_DqTL60E^2vjP2pN-PErv*x#7}UOY568F z5a~L1dFw=a#yaMV;LqRj4E(p($LcJ%+1AumJZ)K{m(|OKwhGv*x85kUGSY=!-&J;! zs}gVqPRl3WvC)cY3yv&rB{|gsCA#+RwH;d7Azb6O7VRm)_Nfgqm=H-_yHV8b!?GP& z@R~^9-xsSp(1@3^*WeHJrM{S6Q&HO~btUy?<3 z<#uXtpI`Lu?Sn1&DJ|)}1LWU3*{Z$+>(_u2Yq3L~e~&ggTkbsN%Q`2w^NhHF+L0Z5 z#vh%cEjXkN(^86d=y-t79TOhfMC=u#cuiZCxE^4g5f8HeYX<9oo8Etwf>(|hypsVz zw{J0ou!dZ>DB-iz*9uf;K~Jl?Ppfcim)pDBt#BVyh%PPa#*bE( zixO2`Wo^p|g+N1O!B%nZKH#O4hij`pdf^~wEb7(?>JjlMeZY9Hd8A6@z8FU&Zol^@ z&SZkZ%!WK})%+)64Yb0pRXGYeaUsNBu+wIx#g6<-!yq!CmAY%Ozao9MMXPgarI-+q zQ1e#RqrfC>9j;XRwkt)ETOFZxM|f2Dg;`_OJX~J%;2Z)kOL0#LOD{$1+oK+Uu}kXc z9idlZ*i)r-&+}N}m=lZ*@>|~Q&^EhoCz*$@&_hAMhX{w3AJ}Cx?78u&hajA7g3#~K zV1ly;maZPx9j_D2BeCfyWFy@aU#C(O>U3aO!nxt68PFX7bg>mL3}_nzx&wf=0noP4 zK6sH(zmM>;Mf;oEBDdIAeU~~+4x7?Vb-BYkXXT*NRF~h1mjHEoz`Di&Y5Acp2gIwV z!Aj5rc)fJM302c01S>S-mk}PWwy*dZU2#By7hkwb;b1_kbOY~h>X~nj!*%-vVnDMI zfZjAJ-c>;fU?E23IoVl^iZ#4zR+>I4v+1S$w4-8E=r)CyA=$U$FH)xfovuC}^khoI z`2uMbDAi11p+j`+nX8Wvf(6`4Bjfv+jJ9bs(2qRV9egf8BQya0RYZY>B&6a01)mpFbK_UYqPcO=!?BJpxLe3 z3Wru)xYYLiGA+f{p7?}y0inKFt@49VU!St7K8F41X1UPQEk!q(5In-~ie2lA`m_=< za*Mqj>P=H~#ebautFzDz3Gom=rr|M~8GG3;hT|P9J@kBx_!h0xsOdU7nE^)w(@nMDzR^?DGU{ zND^Ne8A$(c79#rJ?>lpSKj-iCX@<_Qe8ljP+N>XZru#11>-9@&a1fa*R^LSBuoTr_ zSR?A?3u!7^@I7w9HHYzAKdVOk=y6b-RII4Cv0oyx9R(k+6rX+$o#8Iv7fcoe&6hch z`45MJO<2v~q3Lsk-VA5mftQvFip3#spc#ksNI-Cor?1kF>dEg5AJ<1#q(n2I%dz`9 zSET^R3j!FyJQ_jqk03*i;VZ;#1o7m4TDBdq9C9_$iVW&wCwf(IAM>$92AHMiAkRCB z_aFg4_zA?DrXC3D!Qmw6wM01px*N9SpC^3gAgD|{Y{cVFkkh=~w!J_=EW zVfVeR45=1&B;p0b&o0X2qmCN*+5!=!I{OzdRQAYX+? z2u_46{{-%5F_}3QDekY{hY5iK9<)&@{zFbBQUITc-bh|xLl@%sP|Ct$5W(ez`Z*1h zQ+(b7uxG$w@_pcy^-BU`^51y`iTeJXk}eF0QHiAWNP-t=^))r;d))#u2M{C zyuqOy797|Qf!cm1)%lp<;Er(rl;HS84-k&%duIu0Gjot{AHj^2vz>oY?i}$IPZl zM~G0eRqTH)M9ZhCK1zSa%v=ecFIe9r{2l58Tt=M|K3bfpC5bbGALl_~9OuXHU(X~a z`SGjrWgvbW``e)WczG|V{{KEdo?-y2OecPP!Anel%#S}L!lr9~v_AmRf+tss&m}UL zDL+dE63mvF@-M+3z8X`0=3imTtM(dj>rA;#GG&s-CZiLysN{n&`$ci012tj;CZEok z=^laP%=I)Q2jI+d{85>kWgZZzhxoIbrVHYQ_=OeAcR&72cV5`(26(hz_;Kz8fFMkQ zO;-vlwT?vxja7+HKa;JReb-QnXQD^q*TzAfL-Oog;@MST+I}!?8Von?PQdXk*p(>x zSm)nA#v8Gan;&M(5w&hWlH|@W|0T|yT}^eA%$&ImFzTGy)wGn7X%k)@5HEk9dhR5y zgNm9iMrs53&0}wR2@1J9Ja<$Kf#PBYYyK}2_Dj#>$p?vMCwr!o1XDd5}Q8HcvVYvHa${L z(b=@acvZ(?wB#M!YOLpMoNQpNd1stki%*yqWJoD9vnG1@-;-yhKgKUF&z@&yx#-|& z<=MFZ$oeI<+DD=Ut}s9W#5rq4p?tw|R159Twe_=V#k#Tt$DCg)-Y6x^Lo&C(A<0yr z$>23ZbRG589d&nOb*~XkT+&fnBWB5`h-yDoD9vS|bTiCr0fZDvYeefC1~YLr{gDU= zGywuZ1gjcBr*}G~AB^C+MqC*ODZ?**h3Tcc+f)-E)zpg5F6BCFM4nzeZ{Cxy5vLmp zSzw>cBu|`K@wUOpKD0OX?IK3@3ZzS%jRCg^K2s}ZB!H+DkApI4=SlqQBV|a9_!E&T z^Dn*?+n;_0moNYQRQ_d>FJA!jV#Y-y41X%rtRY`sqBjZVb*Ax0KCiEAC+h6K!a zzKwyCQl#8k)Uj2^=Lp%M50KX5YTAeLLCr=7N#lbhK8rFs@*fW9`FtO*90n)3!PYcr zykr6O%}9A)unYTBtq0ex`IO4Tr&L4het{Ni#cs$?Afp;F;~Vr~*F>$Df=3(Jh`sT1 z;z%pmODyQ&cPI-~aJ(aYp8EQrI)edc2;PuLDM8lznjqH4tD zukr^hMA0o@OcM$NM$;E^0%VZQJbzgYc#y8s*N8M7uKAXXN^v#8)k|>2OmKl{9+Z&O zh?n`n9sv_ML`)>7s#^R+W)c(G{)z#B&O{DKCPMd9j0jr@=T=)KE=WL9E53)x2TqcY zmL(^-j%H&&PJ)gMCjV3-Y{_ZmpN;T*0c6DGA8Icy{}9!qEwB(G)A)Y|zd%8<%ZG%Y zERXk-f5-_lGnJ~MZn2BxA0W~lBIEI?n17<=AWtq=^8}rnpgg%>a5a&+dO(~%3--8k%lq)%Kzt)0 zem;|j3;IWtBpmD_jZBR=igcaD+O{_yWBzdqI+zE?Rs2m(!j~^c#JU~AjsC$h#?h5R) z<>*3(22s$ij>Sw&h0iZHTub@IMK5zV$)8jyCpNc1E#!C+-{QEyiDy2XP^Lks#!yor z4Kb9u1B|<&VN^Y0!~3#3!-UFDS@3m3&JEoin_hzt;_j^to1Z{+@UHLxesBhhdf+GB zLfaLwhu0W47f1XJX?>YAec@Iq>@#U+Iit~)OVH$^zCPq$jvbk6mTAm^Cmw#UPs zC`ak;DSPpY!w!3=CBKw1)c3XN`3N!kcW9De9*285lRo)#b2kQN(p;n{-pIljR2%IG zdKWq{PV@XU|6GbQ(bll`cDqGQ(~d%Ddo42eQMkb+W6-4_hNaSyr&8?wppOiqmbVsy zYL|mr;j+0q@_l>c<{bO_O9!eI5jMhpd-oRHe`y)1Sz601(F_DF?<%u^EMv3hg>b&| z+}drZZb=wjgxT%|MX|^ndt`o&J=AB@URs;_7*6plzT@lMofgZyE-QUkid|~-z~f*< z7BTf*(mm6E;$l34>~cXelVlPwww5k1 zX*AP_GpL?gQTqk<-+ZiSCFXh}l7Dey{e5f4KoeU0g~$1C1e~* zA>?x5*iWj`kx7stn!8k`Qzm@_R@(1VP=IVsA|H>-mP≦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 literal 0 HcmV?d00001 diff --git a/tools/Perl/bin/PerlEz.dll b/tools/Perl/bin/PerlEz.dll new file mode 100644 index 0000000000000000000000000000000000000000..f86d7336064313118c3f5d6b382eed62b6c6b85a GIT binary patch literal 56832 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 literal 0 HcmV?d00001 diff --git a/tools/Perl/bin/PerlMsg.dll b/tools/Perl/bin/PerlMsg.dll new file mode 100644 index 0000000000000000000000000000000000000000..5785e69bbc92555777e9e15c146b1012678ffbee GIT binary patch literal 5120 zcmeHLeQX=$8GoEQZBiW5j%JMpWf$a5-4=OwNhn{^<}5Z4k+g1{I%3P3UhOxw+l$Y; zd#_M5O_{uCEhj{UDue`oP*vK8gb;s#h$;q#c65=-1QO!kp}`-Swr(1ex=q^Z{hs&i z*ojIJL)wJaCwlxo@AL6{KJGo=ITPPGNgIeL46fISmasA<)aSK7*f;v+vr&4n`>p<^ z(D+;ZQ^k_2RUEtEnDbiBESGJm9TJ-3m9NZ2~e#BRUv&@}@M2eiI55#Qt62HcFuSc;H4C+0Kc1-3)G{1W_&S zxK0i_)hiUV5gY-xQG)RtVcBpz&UzjI<9&fQElLo5yS2M6{VylrCu3dJ6_S1Td%cju zMZRFgC7q(_dha%kqDy>$-iXl2fc8C>j8QgS?1M)Ut_!brCTOAF8-eR$&D-IR17iz} z`|7=2(D_rb@MOI=3~}hP|K@=Q&ozJ=OZAUkjF>LUCSVgwb}un>^?cX4>DRcR>T-Rk z_R;fydnfDPjx!$Jhg=a=>fw%b@u1529%{Jtv8h<(aCq`?IE{|_ifLHV7m~5qCUjDN z4^dqxjw?DaRGVe|wvu=rS%7TydzJ>#(((_Du@g%4dv+nD`uC8(^+fM0uz8u{0weau zSbsiz<~#?~yp2P(0~pu^*oaQEvKZ#(aC=41)UaLIj+vfjcqC7pVL?rqqY$6)dlb^L z-0k1a{?$K)@A-?<>u+4F$*%g_fmtctKcJIag7g{;V%!+ZHcRE3J1^ zvoEh3%^&#QcahWoLF^WPCbq45B_unmS3101e$TIgwYV%hr?Z**JIEV>u=3k0^*Rb{ zMY8hjzv^{F`YT>!@sigyozASh%zl>{YlC+i`}{Nr>=?SVcu8(Kt-xz?6NA6)ugv zleV#+M)VB0NonYCNUuttHvd2AJ|QRUyl07fOP1JU&WjPE2U3%JQsYB|@w{abZ4XU~ z!l-4t;sJ4tZslE4SVHo4gubM#jxZbh5#DEn%$k-bQV#=dB$*vak2TR|I_4Z9hlrW zQO|KiS&rIe>DU&gG{f0TIpNNvj>0f*7iLB(6|0mpWy!{i(bTbua5G+|VmnggiImrb za9y*YE*Mw$pJC55OZ#jMUXQ-U1Ul#jShe6d(w$h>I)~Kx#cSPF^~I~`yYX(i&KZy) zV*N=-eMzF>5QGLjn;??>gQP)n!!V>QWoQc`JsD!ur0?0uQ4Gu4oT! zN9-tk=BYv^{EtCrVu!B^&9j<)2k}&HPFDxz?;=Yd+X2Km5s0cJt9k11C^b1sP zV6u179gsfF)CSm#Y3no-#c&_sTN>H;%)01@PiE^pbca7=2lYRJ<2O;_Q83SIWdkkz z9{gj-A^aYMQ|%SVY};vQrj%x`DDv8&WBmIc&jfm{%Z6MdV@~{2lw+gh5y@%{|&w_tBU{t literal 0 HcmV?d00001 diff --git a/tools/Perl/bin/PerlSE.dll b/tools/Perl/bin/PerlSE.dll new file mode 100644 index 0000000000000000000000000000000000000000..c72f805c7e5ae0b351528ff1a81b6f781992f72a GIT binary patch literal 92160 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