From 52faa857e77f0e19701f5b77fce7e3f8ba19e778 Mon Sep 17 00:00:00 2001 From: sparky4 Date: Wed, 5 Aug 2015 02:41:44 -0500 Subject: [PATCH] ==== Major release of EXMMTEST && EXMMBC ^^ it works!! yay!! ==== modified: .gitignore deleted: 16/exmmtest/EXMMTEST.DSK deleted: 16/exmmtest/EXMMTEST.EXE deleted: 16/exmmtest/EXMMTEST.MAP deleted: 16/exmmtest/HEAP.16 deleted: 16/exmmtest/MMDUMP.16 deleted: 16/exmmtest/PROFILE.16 deleted: 16/exmmtest/TC0000.SWP deleted: 16/exmmtest/src/exmmtest.c deleted: 16/exmmtest/src/lib/16_ca.c deleted: 16/exmmtest/src/lib/16_ca.h deleted: 16/exmmtest/src/lib/16_hc.c deleted: 16/exmmtest/src/lib/16_hc.h deleted: 16/exmmtest/src/lib/16_head.c deleted: 16/exmmtest/src/lib/16_head.h deleted: 16/exmmtest/src/lib/16_mm.c deleted: 16/exmmtest/src/lib/16_mm.h deleted: 16/exmmtest/src/lib/nyan/kitten.c deleted: 16/exmmtest/src/lib/nyan/kitten.h deleted: 16/exmmtest/src/lib/types.h deleted: 16/exmmtest/wtf_this.wat new file: 16_CA.BCO new file: 16_HC.BCO new file: 16_HEAD.BCO new file: 16_MM.BCO modified: DEBUG.16 new file: EXMMBC.BCO new file: EXMMBC.DSK new file: EXMMBC.MAP modified: HEAP.16 new file: KITTEN.BCO modified: awoo.sh new file: exmmbc.exe renamed: 16/exmmtest/EXMMTEST.PRJ -> exmmbc.prj modified: exmmtest.exe modified: makefile modified: src/lib/16_hc.c modified: src/lib/16_head.h modified: src/lib/16_mm.c modified: src/lib/nyan/kitten.c modified: src/lib/nyan/kitten.h --- .gitignore | 1 + 16/exmmtest/EXMMTEST.DSK | Bin 1910 -> 0 bytes 16/exmmtest/EXMMTEST.EXE | Bin 47283 -> 0 bytes 16/exmmtest/EXMMTEST.MAP | 752 -------- 16/exmmtest/HEAP.16 | 45 - 16/exmmtest/MMDUMP.16 | 0 16/exmmtest/PROFILE.16 | 0 16/exmmtest/TC0000.SWP | Bin 262144 -> 0 bytes 16/exmmtest/src/exmmtest.c | 162 -- 16/exmmtest/src/lib/16_ca.c | 2267 ------------------------ 16/exmmtest/src/lib/16_ca.h | 116 -- 16/exmmtest/src/lib/16_hc.c | 538 ------ 16/exmmtest/src/lib/16_hc.h | 56 - 16/exmmtest/src/lib/16_head.c | 156 -- 16/exmmtest/src/lib/16_head.h | 196 -- 16/exmmtest/src/lib/16_mm.c | 1728 ------------------ 16/exmmtest/src/lib/16_mm.h | 202 --- 16/exmmtest/src/lib/nyan/kitten.c | 615 ------- 16/exmmtest/src/lib/nyan/kitten.h | 73 - 16/exmmtest/src/lib/types.h | 37 - 16/exmmtest/wtf_this.wat | 1 - 16_CA.BCO | Bin 0 -> 5093 bytes 16_HC.BCO | Bin 0 -> 3711 bytes 16_HEAD.BCO | Bin 0 -> 3270 bytes 16_MM.BCO | Bin 0 -> 21686 bytes DEBUG.16 | 14 +- EXMMBC.BCO | Bin 0 -> 4346 bytes EXMMBC.DSK | Bin 0 -> 186 bytes EXMMBC.MAP | 737 ++++++++ HEAP.16 | 14 +- KITTEN.BCO | Bin 0 -> 5639 bytes awoo.sh | 1 - exmmbc.exe | Bin 0 -> 48148 bytes 16/exmmtest/EXMMTEST.PRJ => exmmbc.prj | Bin 7085 -> 7047 bytes exmmtest.exe | Bin 43320 -> 43384 bytes makefile | 17 +- src/lib/16_hc.c | 4 - src/lib/16_head.h | 6 +- src/lib/16_mm.c | 6 +- src/lib/nyan/kitten.c | 2 +- src/lib/nyan/kitten.h | 4 +- 41 files changed, 774 insertions(+), 6976 deletions(-) delete mode 100644 16/exmmtest/EXMMTEST.DSK delete mode 100644 16/exmmtest/EXMMTEST.EXE delete mode 100644 16/exmmtest/EXMMTEST.MAP delete mode 100644 16/exmmtest/HEAP.16 delete mode 100644 16/exmmtest/MMDUMP.16 delete mode 100644 16/exmmtest/PROFILE.16 delete mode 100644 16/exmmtest/TC0000.SWP delete mode 100644 16/exmmtest/src/exmmtest.c delete mode 100644 16/exmmtest/src/lib/16_ca.c delete mode 100644 16/exmmtest/src/lib/16_ca.h delete mode 100644 16/exmmtest/src/lib/16_hc.c delete mode 100644 16/exmmtest/src/lib/16_hc.h delete mode 100644 16/exmmtest/src/lib/16_head.c delete mode 100644 16/exmmtest/src/lib/16_head.h delete mode 100644 16/exmmtest/src/lib/16_mm.c delete mode 100644 16/exmmtest/src/lib/16_mm.h delete mode 100644 16/exmmtest/src/lib/nyan/kitten.c delete mode 100644 16/exmmtest/src/lib/nyan/kitten.h delete mode 100644 16/exmmtest/src/lib/types.h delete mode 100644 16/exmmtest/wtf_this.wat create mode 100644 16_CA.BCO create mode 100644 16_HC.BCO create mode 100644 16_HEAD.BCO create mode 100644 16_MM.BCO create mode 100644 EXMMBC.BCO create mode 100644 EXMMBC.DSK create mode 100644 EXMMBC.MAP create mode 100644 KITTEN.BCO create mode 100644 exmmbc.exe rename 16/exmmtest/EXMMTEST.PRJ => exmmbc.prj (64%) diff --git a/.gitignore b/.gitignore index cd8061bb..6ba73f4d 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ !proj16.bfproject *.obj *.OBJ +*.[O] *.*~ FUCK *.err diff --git a/16/exmmtest/EXMMTEST.DSK b/16/exmmtest/EXMMTEST.DSK deleted file mode 100644 index b6525f912d9e431efbf614db9f4567cba611908c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1910 zcmb_c!Ab&A6g_V=Gr=MWBnur{SQrUKD6}Z2aY`vgbQW3zMdhN1j4-fTwuu(CkZ2XO zYSCY~YtzPE^aFiBt?iCBVle6`Gk5OX$9r?nJ9F;5E1#e36?l;s3n#^VsmQM#9_M)v znA7EE9>8$`iP-@-*(Y96LKH5tOj=Yn`e#gR?1(K4JjJ2lN8;5@BVP7vCJ{dk?Y%k ziH-C1qDq(*({TmtTNu*h`qnRBA6^La!F1d(!d3=9xxV$wmqV2>E2iU)Vx4LhGQDmQ z9Fev;)AjY@gSft#&UXT{HUP^$sI5jg@g diff --git a/16/exmmtest/EXMMTEST.EXE b/16/exmmtest/EXMMTEST.EXE deleted file mode 100644 index 2fbb356c8ea5080d7e55d56d2de173d187ad1bf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47283 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 OX)rusPYo`HP5D0y7{t#2 diff --git a/16/exmmtest/EXMMTEST.MAP b/16/exmmtest/EXMMTEST.MAP deleted file mode 100644 index a909811a..00000000 --- a/16/exmmtest/EXMMTEST.MAP +++ /dev/null @@ -1,752 +0,0 @@ - - Start Stop Length Name Class - - 00000H 05941H 05942H _TEXT CODE - 05950H 05950H 00000H _FARDATA FAR_DATA - 05950H 05950H 00000H _FARBSS FAR_BSS - 05950H 05950H 00000H _OVERLAY_ OVRINFO - 05950H 05950H 00000H _1STUB_ STUBSEG - 05950H 069E3H 01094H _DATA DATA - 069E4H 069E5H 00002H _CVTSEG DATA - 069E6H 069EBH 00006H _SCNSEG DATA - 069ECH 069ECH 00000H _CONST CONST - 069ECH 06A03H 00018H _INIT_ INITDATA - 06A04H 06A04H 00000H _INITEND_ INITDATA - 06A04H 06A04H 00000H _EXIT_ EXITDATA - 06A04H 06A04H 00000H _EXITEND_ EXITDATA - 06A04H 06A6BH 00068H _BSS BSS - 06A6CH 06A6CH 00000H _BSSEND BSSEND - 06A70H 06AEFH 00080H _STACK STACK - - -Detailed map of segments - - 0000:0000 028F C=CODE S=_TEXT G=(none) M=c0.ASM ACBP=28 - 0000:028F 05F7 C=CODE S=_TEXT G=(none) M=SRC\LIB\NYAN\KITTEN.C ACBP=28 - 0000:0886 02A6 C=CODE S=_TEXT G=(none) M=SRC\LIB\16_HC.C ACBP=28 - 0000:0B2C 023A C=CODE S=_TEXT G=(none) M=SRC\EXMMTEST.C ACBP=28 - 0000:0D66 0232 C=CODE S=_TEXT G=(none) M=SRC\LIB\16_CA.C ACBP=28 - 0000:0F98 0242 C=CODE S=_TEXT G=(none) M=SRC\LIB\16_HEAD.C ACBP=28 - 0000:11DA 1A38 C=CODE S=_TEXT G=(none) M=SRC\LIB\16_MM.C ACBP=28 - 0000:2C12 0024 C=CODE S=_TEXT G=(none) M=ATEXIT ACBP=28 - 0000:2C36 0049 C=CODE S=_TEXT G=(none) M=CLOCK ACBP=28 - 0000:2C7F 0000 C=CODE S=_TEXT G=(none) M=CTYPE ACBP=28 - 0000:2C7F 003D C=CODE S=_TEXT G=(none) M=DOSFATTR ACBP=28 - 0000:2CBC 0089 C=CODE S=_TEXT G=(none) M=EXIT ACBP=28 - 0000:2D45 0000 C=CODE S=_TEXT G=(none) M=FILES ACBP=28 - 0000:2D45 0000 C=CODE S=_TEXT G=(none) M=FILES2 ACBP=28 - 0000:2D45 0000 C=CODE S=_TEXT G=(none) M=FMODE ACBP=28 - 0000:2D45 0021 C=CODE S=_TEXT G=(none) M=H_LLSH ACBP=28 - 0000:2D66 0021 C=CODE S=_TEXT G=(none) M=H_LURSH ACBP=28 - 0000:2D87 0060 C=CODE S=_TEXT G=(none) M=H_PADD ACBP=28 - 0000:2DE7 0028 C=CODE S=_TEXT G=(none) M=H_PSBP ACBP=28 - 0000:2E0F 004B C=CODE S=_TEXT G=(none) M=IOERROR ACBP=28 - 0000:2E5A 0011 C=CODE S=_TEXT G=(none) M=ISATTY ACBP=28 - 0000:2E6B 00A2 C=CODE S=_TEXT G=(none) M=LONGTOA ACBP=28 - 0000:2F0D 0029 C=CODE S=_TEXT G=(none) M=LSEEK ACBP=28 - 0000:2F36 00B0 C=CODE S=_TEXT G=(none) M=MKNAME ACBP=28 - 0000:2FE6 0021 C=CODE S=_TEXT G=(none) M=N_PCMP ACBP=28 - 0000:3007 002F C=CODE S=_TEXT G=(none) M=READA ACBP=28 - 0000:3036 00B2 C=CODE S=_TEXT G=(none) M=SETUPIO ACBP=28 - 0000:30E8 0000 C=CODE S=_TEXT G=(none) M=STKLEN ACBP=28 - 0000:30E8 002C C=CODE S=_TEXT G=(none) M=TOLOWER ACBP=28 - 0000:3114 0018 C=CODE S=_TEXT G=(none) M=UNLINK ACBP=28 - 0000:312C 04DB C=CODE S=_TEXT G=(none) M=VPRINTER ACBP=28 - 0000:3607 009F C=CODE S=_TEXT G=(none) M=VRAM ACBP=28 - 0000:36A6 0000 C=CODE S=_TEXT G=(none) M=WSCROLL ACBP=28 - 0000:36A6 0030 C=CODE S=_TEXT G=(none) M=_STPCPY ACBP=28 - 0000:36D6 0004 C=CODE S=_TEXT G=(none) M=CORELEFT ACBP=28 - 0000:36DA 014E C=CODE S=_TEXT G=(none) M=CPRINTF ACBP=28 - 0000:3828 01A5 C=CODE S=_TEXT G=(none) M=CRTINIT ACBP=28 - 0000:39CD 001F C=CODE S=_TEXT G=(none) M=CVTFAK ACBP=28 - 0000:39EC 042D C=CODE S=_TEXT G=(none) M=FARHEAP ACBP=28 - 0000:3E19 013E C=CODE S=_TEXT G=(none) M=FBRK ACBP=28 - 0000:3F57 0050 C=CODE S=_TEXT G=(none) M=FCORELFT ACBP=28 - 0000:3FA7 0054 C=CODE S=_TEXT G=(none) M=GETCH ACBP=28 - 0000:3FFB 00AC C=CODE S=_TEXT G=(none) M=GPTEXT ACBP=28 - 0000:40A7 0029 C=CODE S=_TEXT G=(none) M=IOCTL ACBP=28 - 0000:40D0 0012 C=CODE S=_TEXT G=(none) M=KBHIT ACBP=28 - 0000:40E2 009D C=CODE S=_TEXT G=(none) M=MOVETEXT ACBP=28 - 0000:417F 0017 C=CODE S=_TEXT G=(none) M=PUTCH ACBP=28 - 0000:4196 0004 C=CODE S=_TEXT G=(none) M=REALCVT ACBP=28 - 0000:419A 01C7 C=CODE S=_TEXT G=(none) M=SCREEN ACBP=28 - 0000:4361 0184 C=CODE S=_TEXT G=(none) M=SCROLL ACBP=28 - 0000:44E5 0129 C=CODE S=_TEXT G=(none) M=SETARGV ACBP=28 - 0000:460E 001C C=CODE S=_TEXT G=(none) M=SETBLOCK ACBP=28 - 0000:462A 0054 C=CODE S=_TEXT G=(none) M=SETENVP ACBP=28 - 0000:467E 002C C=CODE S=_TEXT G=(none) M=WHEREXY ACBP=28 - 0000:46AA 001D C=CODE S=_TEXT G=(none) M=CHMODA ACBP=28 - 0000:46C7 0026 C=CODE S=_TEXT G=(none) M=CLOSE ACBP=28 - 0000:46ED 001E C=CODE S=_TEXT G=(none) M=CLOSEA ACBP=28 - 0000:470B 00B0 C=CODE S=_TEXT G=(none) M=FCLOSE ACBP=28 - 0000:47BB 00C6 C=CODE S=_TEXT G=(none) M=FFLUSH ACBP=28 - 0000:4881 0041 C=CODE S=_TEXT G=(none) M=FLENGTH ACBP=28 - 0000:48C2 0040 C=CODE S=_TEXT G=(none) M=FLUSHALL ACBP=28 - 0000:4902 01FE C=CODE S=_TEXT G=(none) M=FOPEN ACBP=28 - 0000:4B00 001C C=CODE S=_TEXT G=(none) M=FPRINTF ACBP=28 - 0000:4B1C 01D8 C=CODE S=_TEXT G=(none) M=FSEEK ACBP=28 - 0000:4CF4 0070 C=CODE S=_TEXT G=(none) M=GETENV ACBP=28 - 0000:4D64 0070 C=CODE S=_TEXT G=(none) M=LTOA1 ACBP=28 - 0000:4DD4 0024 C=CODE S=_TEXT G=(none) M=MEMCPY ACBP=28 - 0000:4DF8 0022 C=CODE S=_TEXT G=(none) M=MOVEDATA ACBP=28 - 0000:4E1A 018D C=CODE S=_TEXT G=(none) M=OPEN ACBP=28 - 0000:4FA7 004F C=CODE S=_TEXT G=(none) M=OPENA ACBP=28 - 0000:4FF6 001B C=CODE S=_TEXT G=(none) M=PRINTF ACBP=28 - 0000:5011 03A4 C=CODE S=_TEXT G=(none) M=PUTC ACBP=28 - 0000:53B5 00CB C=CODE S=_TEXT G=(none) M=READ ACBP=28 - 0000:5480 0003 C=CODE S=_TEXT G=(none) M=READU ACBP=28 - 0000:5483 0111 C=CODE S=_TEXT G=(none) M=SETVBUF ACBP=28 - 0000:5594 0081 C=CODE S=_TEXT G=(none) M=SPRINTF ACBP=28 - 0000:5615 003F C=CODE S=_TEXT G=(none) M=STRCAT ACBP=28 - 0000:5654 003D C=CODE S=_TEXT G=(none) M=STRCHR ACBP=28 - 0000:5691 0030 C=CODE S=_TEXT G=(none) M=STRCMP ACBP=28 - 0000:56C1 0029 C=CODE S=_TEXT G=(none) M=STRCPY ACBP=28 - 0000:56EA 0040 C=CODE S=_TEXT G=(none) M=STRDUP ACBP=28 - 0000:572A 001F C=CODE S=_TEXT G=(none) M=STRLEN ACBP=28 - 0000:5749 0149 C=CODE S=_TEXT G=(none) M=WRITE ACBP=28 - 0000:5892 003C C=CODE S=_TEXT G=(none) M=WRITEA ACBP=28 - 0000:58CE 0003 C=CODE S=_TEXT G=(none) M=WRITEU ACBP=28 - 0000:58D1 003B C=CODE S=_TEXT G=(none) M=XFCLOSE ACBP=28 - 0000:590C 0036 C=CODE S=_TEXT G=(none) M=XFFLUSH ACBP=28 - 0595:0000 0000 C=FAR_DATA S=_FARDATA G=(none) M=c0.ASM ACBP=68 - 0595:0000 0000 C=FAR_BSS S=_FARBSS G=(none) M=c0.ASM ACBP=68 - 0595:0000 0000 C=OVRINFO S=_OVERLAY_ G=(none) M=c0.ASM ACBP=68 - 0595:0000 0000 C=STUBSEG S=_1STUB_ G=(none) M=c0.ASM ACBP=68 - 0595:0000 0093 C=DATA S=_DATA G=DGROUP M=c0.ASM ACBP=68 - 0595:0094 0045 C=DATA S=_DATA G=DGROUP M=SRC\LIB\NYAN\KITTEN.C ACBP=48 - 0595:00DA 0014 C=DATA S=_DATA G=DGROUP M=SRC\LIB\16_HC.C ACBP=48 - 0595:00EE 0187 C=DATA S=_DATA G=DGROUP M=SRC\EXMMTEST.C ACBP=48 - 0595:0276 002C C=DATA S=_DATA G=DGROUP M=SRC\LIB\16_CA.C ACBP=48 - 0595:02A2 0010 C=DATA S=_DATA G=DGROUP M=SRC\LIB\16_HEAD.C ACBP=48 - 0595:02B2 09E0 C=DATA S=_DATA G=DGROUP M=SRC\LIB\16_MM.C ACBP=48 - 0595:0C92 0002 C=DATA S=_DATA G=DGROUP M=ATEXIT ACBP=48 - 0595:0C94 0000 C=DATA S=_DATA G=DGROUP M=CLOCK ACBP=48 - 0595:0C94 0101 C=DATA S=_DATA G=DGROUP M=CTYPE ACBP=48 - 0595:0D96 0000 C=DATA S=_DATA G=DGROUP M=DOSFATTR ACBP=48 - 0595:0D96 0006 C=DATA S=_DATA G=DGROUP M=EXIT ACBP=48 - 0595:0D9C 0190 C=DATA S=_DATA G=DGROUP M=FILES ACBP=48 - 0595:0F2C 002A C=DATA S=_DATA G=DGROUP M=FILES2 ACBP=48 - 0595:0F56 0004 C=DATA S=_DATA G=DGROUP M=FMODE ACBP=48 - 0595:0F5A 0000 C=DATA S=_DATA G=DGROUP M=H_LLSH ACBP=48 - 0595:0F5A 0000 C=DATA S=_DATA G=DGROUP M=H_LURSH ACBP=48 - 0595:0F5A 0000 C=DATA S=_DATA G=DGROUP M=H_PADD ACBP=48 - 0595:0F5A 0000 C=DATA S=_DATA G=DGROUP M=H_PSBP ACBP=48 - 0595:0F5A 005B C=DATA S=_DATA G=DGROUP M=IOERROR ACBP=48 - 0595:0FB6 0000 C=DATA S=_DATA G=DGROUP M=ISATTY ACBP=48 - 0595:0FB6 0000 C=DATA S=_DATA G=DGROUP M=LONGTOA ACBP=48 - 0595:0FB6 0000 C=DATA S=_DATA G=DGROUP M=LSEEK ACBP=48 - 0595:0FB6 0009 C=DATA S=_DATA G=DGROUP M=MKNAME ACBP=48 - 0595:0FC0 0000 C=DATA S=_DATA G=DGROUP M=N_PCMP ACBP=48 - 0595:0FC0 0000 C=DATA S=_DATA G=DGROUP M=READA ACBP=48 - 0595:0FC0 0000 C=DATA S=_DATA G=DGROUP M=SETUPIO ACBP=48 - 0595:0FC0 0002 C=DATA S=_DATA G=DGROUP M=STKLEN ACBP=48 - 0595:0FC2 0000 C=DATA S=_DATA G=DGROUP M=TOLOWER ACBP=48 - 0595:0FC2 0000 C=DATA S=_DATA G=DGROUP M=UNLINK ACBP=48 - 0595:0FC2 0067 C=DATA S=_DATA G=DGROUP M=VPRINTER ACBP=48 - 0595:102A 0000 C=DATA S=_DATA G=DGROUP M=VRAM ACBP=48 - 0595:102A 0002 C=DATA S=_DATA G=DGROUP M=WSCROLL ACBP=48 - 0595:102C 0000 C=DATA S=_DATA G=DGROUP M=_STPCPY ACBP=48 - 0595:102C 0000 C=DATA S=_DATA G=DGROUP M=CORELEFT ACBP=48 - 0595:102C 0000 C=DATA S=_DATA G=DGROUP M=CPRINTF ACBP=48 - 0595:102C 0018 C=DATA S=_DATA G=DGROUP M=CRTINIT ACBP=48 - 0595:1044 0031 C=DATA S=_DATA G=DGROUP M=CVTFAK ACBP=48 - 0595:1076 0000 C=DATA S=_DATA G=DGROUP M=FARHEAP ACBP=48 - 0595:1076 0002 C=DATA S=_DATA G=DGROUP M=FBRK ACBP=48 - 0595:1078 0000 C=DATA S=_DATA G=DGROUP M=FCORELFT ACBP=48 - 0595:1078 0000 C=DATA S=_DATA G=DGROUP M=GETCH ACBP=48 - 0595:1078 0000 C=DATA S=_DATA G=DGROUP M=GPTEXT ACBP=48 - 0595:1078 0000 C=DATA S=_DATA G=DGROUP M=IOCTL ACBP=48 - 0595:1078 0002 C=DATA S=_DATA G=DGROUP M=KBHIT ACBP=48 - 0595:107A 0000 C=DATA S=_DATA G=DGROUP M=MOVETEXT ACBP=48 - 0595:107A 0000 C=DATA S=_DATA G=DGROUP M=PUTCH ACBP=48 - 0595:107A 0000 C=DATA S=_DATA G=DGROUP M=REALCVT ACBP=48 - 0595:107A 0000 C=DATA S=_DATA G=DGROUP M=SCREEN ACBP=48 - 0595:107A 0000 C=DATA S=_DATA G=DGROUP M=SCROLL ACBP=48 - 0595:107A 0010 C=DATA S=_DATA G=DGROUP M=SETARGV ACBP=48 - 0595:108A 0000 C=DATA S=_DATA G=DGROUP M=SETBLOCK ACBP=48 - 0595:108A 0004 C=DATA S=_DATA G=DGROUP M=SETENVP ACBP=48 - 0595:108E 0000 C=DATA S=_DATA G=DGROUP M=WHEREXY ACBP=48 - 0595:108E 0000 C=DATA S=_DATA G=DGROUP M=CHMODA ACBP=48 - 0595:108E 0000 C=DATA S=_DATA G=DGROUP M=CLOSE ACBP=48 - 0595:108E 0000 C=DATA S=_DATA G=DGROUP M=CLOSEA ACBP=48 - 0595:108E 0000 C=DATA S=_DATA G=DGROUP M=FCLOSE ACBP=48 - 0595:108E 0000 C=DATA S=_DATA G=DGROUP M=FFLUSH ACBP=48 - 0595:108E 0000 C=DATA S=_DATA G=DGROUP M=FLENGTH ACBP=48 - 0595:108E 0000 C=DATA S=_DATA G=DGROUP M=FLUSHALL ACBP=48 - 0595:108E 0000 C=DATA S=_DATA G=DGROUP M=FOPEN ACBP=48 - 0595:108E 0000 C=DATA S=_DATA G=DGROUP M=FPRINTF ACBP=48 - 0595:108E 0000 C=DATA S=_DATA G=DGROUP M=FSEEK ACBP=48 - 0595:108E 0000 C=DATA S=_DATA G=DGROUP M=GETENV ACBP=48 - 0595:108E 0000 C=DATA S=_DATA G=DGROUP M=LTOA1 ACBP=48 - 0595:108E 0000 C=DATA S=_DATA G=DGROUP M=MEMCPY ACBP=48 - 0595:108E 0000 C=DATA S=_DATA G=DGROUP M=MOVEDATA ACBP=48 - 0595:108E 0000 C=DATA S=_DATA G=DGROUP M=OPEN ACBP=48 - 0595:108E 0000 C=DATA S=_DATA G=DGROUP M=OPENA ACBP=48 - 0595:108E 0000 C=DATA S=_DATA G=DGROUP M=PRINTF ACBP=48 - 0595:108E 0001 C=DATA S=_DATA G=DGROUP M=PUTC ACBP=48 - 0595:1090 0000 C=DATA S=_DATA G=DGROUP M=READ ACBP=48 - 0595:1090 0000 C=DATA S=_DATA G=DGROUP M=READU ACBP=48 - 0595:1090 0004 C=DATA S=_DATA G=DGROUP M=SETVBUF ACBP=48 - 0595:1094 0000 C=DATA S=_DATA G=DGROUP M=SPRINTF ACBP=48 - 0595:1094 0000 C=DATA S=_DATA G=DGROUP M=STRCAT ACBP=48 - 0595:1094 0000 C=DATA S=_DATA G=DGROUP M=STRCHR ACBP=48 - 0595:1094 0000 C=DATA S=_DATA G=DGROUP M=STRCMP ACBP=48 - 0595:1094 0000 C=DATA S=_DATA G=DGROUP M=STRCPY ACBP=48 - 0595:1094 0000 C=DATA S=_DATA G=DGROUP M=STRDUP ACBP=48 - 0595:1094 0000 C=DATA S=_DATA G=DGROUP M=STRLEN ACBP=48 - 0595:1094 0000 C=DATA S=_DATA G=DGROUP M=WRITE ACBP=48 - 0595:1094 0000 C=DATA S=_DATA G=DGROUP M=WRITEA ACBP=48 - 0595:1094 0000 C=DATA S=_DATA G=DGROUP M=WRITEU ACBP=48 - 0595:1094 0000 C=DATA S=_DATA G=DGROUP M=XFCLOSE ACBP=48 - 0595:1094 0000 C=DATA S=_DATA G=DGROUP M=XFFLUSH ACBP=48 - 0595:1094 0000 C=DATA S=_CVTSEG G=DGROUP M=c0.ASM ACBP=48 - 0595:1094 0002 C=DATA S=_CVTSEG G=DGROUP M=CVTFAK ACBP=48 - 0595:1096 0000 C=DATA S=_CVTSEG G=DGROUP M=REALCVT ACBP=48 - 0595:1096 0000 C=DATA S=_SCNSEG G=DGROUP M=c0.ASM ACBP=48 - 0595:1096 0006 C=DATA S=_SCNSEG G=DGROUP M=CVTFAK ACBP=48 - 0595:109C 0000 C=CONST S=_CONST G=DGROUP M=c0.ASM ACBP=48 - 0595:109C 0000 C=INITDATA S=_INIT_ G=DGROUP M=c0.ASM ACBP=48 - 0595:109C 0006 C=INITDATA S=_INIT_ G=DGROUP M=SETUPIO ACBP=48 - 0595:10A2 0006 C=INITDATA S=_INIT_ G=DGROUP M=CRTINIT ACBP=48 - 0595:10A8 0006 C=INITDATA S=_INIT_ G=DGROUP M=SETARGV ACBP=48 - 0595:10AE 0006 C=INITDATA S=_INIT_ G=DGROUP M=SETENVP ACBP=48 - 0595:10B4 0000 C=INITDATA S=_INITEND_ G=DGROUP M=c0.ASM ACBP=28 - 0595:10B4 0000 C=EXITDATA S=_EXIT_ G=DGROUP M=c0.ASM ACBP=48 - 0595:10B4 0000 C=EXITDATA S=_EXITEND_ G=DGROUP M=c0.ASM ACBP=28 - 0595:10B4 0000 C=BSS S=_BSS G=DGROUP M=c0.ASM ACBP=48 - 0595:10B4 0004 C=BSS S=_BSS G=DGROUP M=SRC\LIB\NYAN\KITTEN.C ACBP=48 - 0595:10B8 0002 C=BSS S=_BSS G=DGROUP M=SRC\LIB\16_HC.C ACBP=48 - 0595:10BA 0000 C=BSS S=_BSS G=DGROUP M=SRC\EXMMTEST.C ACBP=48 - 0595:10BA 000A C=BSS S=_BSS G=DGROUP M=SRC\LIB\16_CA.C ACBP=48 - 0595:10C4 0000 C=BSS S=_BSS G=DGROUP M=SRC\LIB\16_HEAD.C ACBP=48 - 0595:10C4 0006 C=BSS S=_BSS G=DGROUP M=SRC\LIB\16_MM.C ACBP=48 - 0595:10CA 0040 C=BSS S=_BSS G=DGROUP M=ATEXIT ACBP=48 - 0595:110A 0001 C=BSS S=_BSS G=DGROUP M=CLOCK ACBP=48 - 0595:110C 0000 C=BSS S=_BSS G=DGROUP M=DOSFATTR ACBP=48 - 0595:110C 0000 C=BSS S=_BSS G=DGROUP M=IOERROR ACBP=48 - 0595:110C 0000 C=BSS S=_BSS G=DGROUP M=ISATTY ACBP=48 - 0595:110C 0000 C=BSS S=_BSS G=DGROUP M=LONGTOA ACBP=48 - 0595:110C 0000 C=BSS S=_BSS G=DGROUP M=LSEEK ACBP=48 - 0595:110C 000D C=BSS S=_BSS G=DGROUP M=MKNAME ACBP=48 - 0595:111A 0000 C=BSS S=_BSS G=DGROUP M=READA ACBP=48 - 0595:111A 0000 C=BSS S=_BSS G=DGROUP M=SETUPIO ACBP=48 - 0595:111A 0000 C=BSS S=_BSS G=DGROUP M=UNLINK ACBP=48 - 0595:111A 0000 C=BSS S=_BSS G=DGROUP M=VPRINTER ACBP=48 - 0595:111A 0000 C=BSS S=_BSS G=DGROUP M=VRAM ACBP=48 - 0595:111A 0000 C=BSS S=_BSS G=DGROUP M=CORELEFT ACBP=48 - 0595:111A 0000 C=BSS S=_BSS G=DGROUP M=CRTINIT ACBP=48 - 0595:111A 0000 C=BSS S=_BSS G=DGROUP M=GETCH ACBP=48 - 0595:111A 0000 C=BSS S=_BSS G=DGROUP M=IOCTL ACBP=48 - 0595:111A 0000 C=BSS S=_BSS G=DGROUP M=KBHIT ACBP=48 - 0595:111A 0000 C=BSS S=_BSS G=DGROUP M=SETBLOCK ACBP=48 - 0595:111A 0000 C=BSS S=_BSS G=DGROUP M=CHMODA ACBP=48 - 0595:111A 0000 C=BSS S=_BSS G=DGROUP M=CLOSEA ACBP=48 - 0595:111A 0000 C=BSS S=_BSS G=DGROUP M=FLENGTH ACBP=48 - 0595:111A 0000 C=BSS S=_BSS G=DGROUP M=GETENV ACBP=48 - 0595:111A 0000 C=BSS S=_BSS G=DGROUP M=MEMCPY ACBP=48 - 0595:111A 0000 C=BSS S=_BSS G=DGROUP M=MOVEDATA ACBP=48 - 0595:111A 0000 C=BSS S=_BSS G=DGROUP M=OPEN ACBP=48 - 0595:111A 0000 C=BSS S=_BSS G=DGROUP M=OPENA ACBP=48 - 0595:111A 0001 C=BSS S=_BSS G=DGROUP M=PUTC ACBP=48 - 0595:111C 0000 C=BSS S=_BSS G=DGROUP M=READ ACBP=48 - 0595:111C 0000 C=BSS S=_BSS G=DGROUP M=STRCAT ACBP=48 - 0595:111C 0000 C=BSS S=_BSS G=DGROUP M=STRCHR ACBP=48 - 0595:111C 0000 C=BSS S=_BSS G=DGROUP M=STRCMP ACBP=48 - 0595:111C 0000 C=BSS S=_BSS G=DGROUP M=STRCPY ACBP=48 - 0595:111C 0000 C=BSS S=_BSS G=DGROUP M=STRLEN ACBP=48 - 0595:111C 0000 C=BSS S=_BSS G=DGROUP M=WRITEA ACBP=48 - 0595:111C 0000 C=BSSEND S=_BSSEND G=DGROUP M=c0.ASM ACBP=28 - 06A7:0000 0080 C=STACK S=_STACK G=(none) M=c0.ASM ACBP=74 - - Address Publics by Name - - 0595:0000 idle DATASEG@ - 0000:028B idle DGROUP@ - 0000:2D48 idle F_LXLSH@ - 0000:2D69 idle F_LXURSH@ - 0000:2D8A idle F_PADD@ - 0000:2DEA idle F_PSBP@ - 0000:2DB9 idle F_PSUB@ - 0000:028F idle KITTENGETS - 0000:2D48 idle LXLSH@ - 0000:2D69 idle LXURSH@ - 0000:2D45 N_LXLSH@ - 0000:2D66 N_LXURSH@ - 0000:2D87 N_PADD@ - 0000:2FE6 N_PCMP@ - 0000:2DE7 N_PSBP@ - 0000:2DB6 idle N_PSUB@ - 0000:2D8A idle PADD@ - 0000:2DEA idle PSBP@ - 0000:2DB9 idle PSUB@ - 0000:0276 _abort - 0595:10C6 idle _aftersort - 0000:2C12 idle _atexit - 0595:10C8 idle _beforesort - 0000:0EFC idle _CAL_OptimizeNodes - 0000:04AF idle _catread - 0000:0D87 _CA_CloseDebug - 0000:0D94 idle _CA_FarRead - 0000:0DD2 idle _CA_FarWrite - 0000:0E77 _CA_LoadFile - 0000:0D66 _CA_OpenDebug - 0000:0E10 idle _CA_ReadFile - 0000:0F8B _CA_Shutdown - 0000:0F6A _CA_Startup - 0000:2C36 _clock - 0000:46C7 _close - 0000:36D6 _coreleft - 0000:380C idle _cprintf - 0000:078D idle _db_fetch - 0000:07DD idle _db_insert - 0595:10C0 _debughandle - 0595:103B _directvideo - 0595:10BE idle _drawcachebox - 0595:108A _environ - 0595:007F _errno - 0000:2D0A _exit - 0000:3F57 _farcoreleft - 0000:3B2C _farfree - 0000:3C40 _farmalloc - 0000:3DA1 idle _farrealloc - 0000:470B _fclose - 0000:47BB _fflush - 0000:4881 _filelength - 0000:0FD7 idle _filesize - 0595:10BA idle _finishcachebox - 0000:48C2 _flushall - 0000:4ACB _fopen - 0000:4B00 _fprintf - 0000:502B idle _fputc - 0000:51B4 idle _fputchar - 0000:3B2C _free - 0000:4B9E _fseek - 0000:4C1A _ftell - 0000:3FA7 _getch - 0000:3FC0 idle _getche - 0000:4CF4 _getenv - 0000:3FFB _gettext - 0000:0738 idle _get_line - 0000:0B1F idle _HC_CloseDebug - 0000:0AFE idle _HC_OpenDebug - 0595:10B8 idle _heaphandle - 0000:40A7 _ioctl - 0000:2E5A _isatty - 0000:4D64 idle _itoa - 0000:40D0 _kbhit - 0000:0546 idle _kittenclose - 0000:02DE idle _kittenopen - 0000:098F idle _LargestFarFreeBlock - 0000:0886 idle _LargestFreeBlock - 0000:2F0D _lseek - 0000:4DAC idle _ltoa - 0000:0B2C _main - 0000:3C36 _malloc - 0000:4DD4 _memcpy - 0000:11DA idle _MML_CheckForEMS - 0000:14A8 idle _MML_CheckForXMS - 0000:17E1 idle _MML_ClearBlock - 0000:121F idle _MML_SetupEMS - 0000:14DF idle _MML_SetupXMS - 0000:1325 idle _MML_ShutdownEMS - 0000:1585 idle _MML_ShutdownXMS - 0000:15B8 idle _MML_UseSpace - 0000:2BF2 idle _MM_BombOnError - 0000:269F _MM_DumpData - 0000:20B7 _MM_FreePtr - 0000:1CC5 _MM_GetPtr - 0000:1366 idle _MM_MapEMS - 0000:13FF idle _MM_MapXEMS - 0000:28E6 _MM_Report - 0000:2C0C idle _MM_segude - 0000:2C01 idle _MM_seguin - 0000:2284 idle _MM_SetLock - 0000:21BD idle _MM_SetPurge - 0000:24F3 _MM_ShowMemory - 0000:1C40 _MM_Shutdown - 0000:2350 idle _MM_SortMem - 0000:1847 _MM_Startup - 0000:284D idle _MM_TotalFree - 0000:27DB idle _MM_UnusedMemory - 0000:4DF8 _movedata - 0000:40E2 _movetext - 0000:0551 idle _mystrtoul - 0000:4E47 _open - 0000:4FF6 _printf - 0000:1036 idle _printmeminfoline - 0000:05DE idle _processEscChars - 0595:10C2 idle _profilehandle - 0000:417F _putch - 0000:4051 _puttext - 0000:5480 _read - 0000:3D9A idle _realloc - 0000:460E _setblock - 0000:5483 _setvbuf - 0000:55D2 _sprintf - 0000:5615 _strcat - 0000:5654 _strchr - 0000:5691 _strcmp - 0000:56C1 _strcpy - 0000:56EA _strdup - 0000:572A _strlen - 0000:30E8 _tolower - 0000:4D8F _ultoa - 0000:3FDD idle _ungetch - 0000:3114 _unlink - 0595:10BC idle _updatecachebox - 0000:1108 _US_CheckParm - 0000:55F4 idle _vsprintf - 0000:0F98 idle _wait - 0000:4688 idle _wherex - 0000:4697 idle _wherey - 0000:58CE _write - 0595:10C4 idle _XMSaddr - 0000:1000 idle __AHINCR - 0000:000C idle __AHSHIFT - 0595:107A __argc - 0595:107C __argv - 0595:0C92 __atexitcnt - 0595:10CA __atexittbl - 0000:3E8D __brk - 0595:008B __brklvl - 0595:006B __C0argc - 0595:006D __C0argv - 0000:38EE idle __c0crtinit - 0595:0071 __C0environ - 0595:1079 __cChar - 0000:2D2B idle __cexit - 0595:1078 __cFlag - 0000:0166 __checknull - 0000:46AA __chmod - 0000:0153 __cleanup - 0000:46ED __close - 0000:091C idle __coreleft - 0000:36DA __CPUTN - 0000:390B idle __crtinit - 0595:0C94 __ctype - 0000:0000 Abs __cvtfak - 0000:2D39 idle __c_exit - 0595:0F5A __doserrno - 0000:2E48 __DOSERROR - 0595:0F5C idle __dosErrorToSV - 0000:2C7F __dos_getfileattr - 0000:2C9F idle __dos_setfileattr - 0595:0075 __envLng - 0595:0077 __envseg - 0595:0079 __envSize - 0000:2D19 __exit - 0595:0D96 __exitbuf - 0595:0D98 __exitfopen - 0595:0D9A idle __exitopen - 0000:0A31 idle __farcoreleft - 0595:0F56 __fmode - 0000:5011 idle __fputc - 0000:51C7 __FPUTN - 0000:4A81 idle __GETFP - 0595:0087 __heapbase - 0595:008F __heaptop - 0595:005B idle __Int0Vector - 0595:005F idle __Int4Vector - 0595:0063 idle __Int5Vector - 0595:0067 idle __Int6Vector - 0000:2E0F __IOERROR - 0595:0094 idle __kitten_catalog - 0000:2E6B __LONGTOA - 0000:2F36 __MKNAME - 0000:028D idle __MMODEL - 0595:0F2C __nfile - 0000:3FC0 idle __Ngetche - 0595:0F58 __notUmask - 0000:3FDD idle __Nungetch - 0000:4FA7 __open - 0595:0F2E __openfd - 0000:49B8 idle __OPENFP - 0595:007D __osmajor - 0595:007E idle __osminor - 0595:007D idle __osversion - 0595:007B __psp - 0000:3007 __read - 0000:4196 __REALCVT - 0595:1094 __RealCvtVector - 0000:01BC __restorezero - 0000:3ECC __sbrk - 0595:1096 idle __ScanTodVector - 0000:42D0 __SCREENIO - 0000:4383 __SCROLL - 0000:0000 Abs __setargv__ - 0000:0000 idle __setenvp__ - 0000:3036 __setupio - 0595:0081 __StartTime - 0595:0FC0 __stklen - 0000:36A6 __stpcpy - 0595:0D9C __streams - 0000:0167 __terminate - 0000:2F8F idle __TMPNAM - 0000:0000 idle __turboCrt - 0000:2EED __UTOA - 0000:430C __VALIDATEXY - 0595:007D idle __version - 0595:102C __video - 0000:3863 __VideoInt - 0000:3144 __VPRINTER - 0000:3607 __VPTR - 0000:362C __VRAM - 0000:467E __wherexy - 0000:5892 __write - 0595:102A __wscroll - 0000:58D1 __xfclose - 0000:590C __xfflush - 0595:0085 idle ___brklvl - 0000:39EC idle ___first - 0000:39EE idle ___last - 0000:53B5 ___read - 0000:39F0 idle ___rover - 0000:5749 ___write - - Address Publics by Value - - 0000:0000 Abs __setargv__ - 0000:0000 idle __turboCrt - 0000:0000 Abs __cvtfak - 0000:0000 idle __setenvp__ - 0000:000C idle __AHSHIFT - 0000:0153 __cleanup - 0000:0166 __checknull - 0000:0167 __terminate - 0000:01BC __restorezero - 0000:0276 _abort - 0000:028B idle DGROUP@ - 0000:028D idle __MMODEL - 0000:028F idle KITTENGETS - 0000:02DE idle _kittenopen - 0000:04AF idle _catread - 0000:0546 idle _kittenclose - 0000:0551 idle _mystrtoul - 0000:05DE idle _processEscChars - 0000:0738 idle _get_line - 0000:078D idle _db_fetch - 0000:07DD idle _db_insert - 0000:0886 idle _LargestFreeBlock - 0000:091C idle __coreleft - 0000:098F idle _LargestFarFreeBlock - 0000:0A31 idle __farcoreleft - 0000:0AFE idle _HC_OpenDebug - 0000:0B1F idle _HC_CloseDebug - 0000:0B2C _main - 0000:0D66 _CA_OpenDebug - 0000:0D87 _CA_CloseDebug - 0000:0D94 idle _CA_FarRead - 0000:0DD2 idle _CA_FarWrite - 0000:0E10 idle _CA_ReadFile - 0000:0E77 _CA_LoadFile - 0000:0EFC idle _CAL_OptimizeNodes - 0000:0F6A _CA_Startup - 0000:0F8B _CA_Shutdown - 0000:0F98 idle _wait - 0000:0FD7 idle _filesize - 0000:1000 idle __AHINCR - 0000:1036 idle _printmeminfoline - 0000:1108 _US_CheckParm - 0000:11DA idle _MML_CheckForEMS - 0000:121F idle _MML_SetupEMS - 0000:1325 idle _MML_ShutdownEMS - 0000:1366 idle _MM_MapEMS - 0000:13FF idle _MM_MapXEMS - 0000:14A8 idle _MML_CheckForXMS - 0000:14DF idle _MML_SetupXMS - 0000:1585 idle _MML_ShutdownXMS - 0000:15B8 idle _MML_UseSpace - 0000:17E1 idle _MML_ClearBlock - 0000:1847 _MM_Startup - 0000:1C40 _MM_Shutdown - 0000:1CC5 _MM_GetPtr - 0000:20B7 _MM_FreePtr - 0000:21BD idle _MM_SetPurge - 0000:2284 idle _MM_SetLock - 0000:2350 idle _MM_SortMem - 0000:24F3 _MM_ShowMemory - 0000:269F _MM_DumpData - 0000:27DB idle _MM_UnusedMemory - 0000:284D idle _MM_TotalFree - 0000:28E6 _MM_Report - 0000:2BF2 idle _MM_BombOnError - 0000:2C01 idle _MM_seguin - 0000:2C0C idle _MM_segude - 0000:2C12 idle _atexit - 0000:2C36 _clock - 0000:2C7F __dos_getfileattr - 0000:2C9F idle __dos_setfileattr - 0000:2D0A _exit - 0000:2D19 __exit - 0000:2D2B idle __cexit - 0000:2D39 idle __c_exit - 0000:2D45 N_LXLSH@ - 0000:2D48 idle LXLSH@ - 0000:2D48 idle F_LXLSH@ - 0000:2D66 N_LXURSH@ - 0000:2D69 idle LXURSH@ - 0000:2D69 idle F_LXURSH@ - 0000:2D87 N_PADD@ - 0000:2D8A idle F_PADD@ - 0000:2D8A idle PADD@ - 0000:2DB6 idle N_PSUB@ - 0000:2DB9 idle F_PSUB@ - 0000:2DB9 idle PSUB@ - 0000:2DE7 N_PSBP@ - 0000:2DEA idle PSBP@ - 0000:2DEA idle F_PSBP@ - 0000:2E0F __IOERROR - 0000:2E48 __DOSERROR - 0000:2E5A _isatty - 0000:2E6B __LONGTOA - 0000:2EED __UTOA - 0000:2F0D _lseek - 0000:2F36 __MKNAME - 0000:2F8F idle __TMPNAM - 0000:2FE6 N_PCMP@ - 0000:3007 __read - 0000:3036 __setupio - 0000:30E8 _tolower - 0000:3114 _unlink - 0000:3144 __VPRINTER - 0000:3607 __VPTR - 0000:362C __VRAM - 0000:36A6 __stpcpy - 0000:36D6 _coreleft - 0000:36DA __CPUTN - 0000:380C idle _cprintf - 0000:3863 __VideoInt - 0000:38EE idle __c0crtinit - 0000:390B idle __crtinit - 0000:39EC idle ___first - 0000:39EE idle ___last - 0000:39F0 idle ___rover - 0000:3B2C _free - 0000:3B2C _farfree - 0000:3C36 _malloc - 0000:3C40 _farmalloc - 0000:3D9A idle _realloc - 0000:3DA1 idle _farrealloc - 0000:3E8D __brk - 0000:3ECC __sbrk - 0000:3F57 _farcoreleft - 0000:3FA7 _getch - 0000:3FC0 idle __Ngetche - 0000:3FC0 idle _getche - 0000:3FDD idle __Nungetch - 0000:3FDD idle _ungetch - 0000:3FFB _gettext - 0000:4051 _puttext - 0000:40A7 _ioctl - 0000:40D0 _kbhit - 0000:40E2 _movetext - 0000:417F _putch - 0000:4196 __REALCVT - 0000:42D0 __SCREENIO - 0000:430C __VALIDATEXY - 0000:4383 __SCROLL - 0000:460E _setblock - 0000:467E __wherexy - 0000:4688 idle _wherex - 0000:4697 idle _wherey - 0000:46AA __chmod - 0000:46C7 _close - 0000:46ED __close - 0000:470B _fclose - 0000:47BB _fflush - 0000:4881 _filelength - 0000:48C2 _flushall - 0000:49B8 idle __OPENFP - 0000:4A81 idle __GETFP - 0000:4ACB _fopen - 0000:4B00 _fprintf - 0000:4B9E _fseek - 0000:4C1A _ftell - 0000:4CF4 _getenv - 0000:4D64 idle _itoa - 0000:4D8F _ultoa - 0000:4DAC idle _ltoa - 0000:4DD4 _memcpy - 0000:4DF8 _movedata - 0000:4E47 _open - 0000:4FA7 __open - 0000:4FF6 _printf - 0000:5011 idle __fputc - 0000:502B idle _fputc - 0000:51B4 idle _fputchar - 0000:51C7 __FPUTN - 0000:53B5 ___read - 0000:5480 _read - 0000:5483 _setvbuf - 0000:55D2 _sprintf - 0000:55F4 idle _vsprintf - 0000:5615 _strcat - 0000:5654 _strchr - 0000:5691 _strcmp - 0000:56C1 _strcpy - 0000:56EA _strdup - 0000:572A _strlen - 0000:5749 ___write - 0000:5892 __write - 0000:58CE _write - 0000:58D1 __xfclose - 0000:590C __xfflush - 0595:0000 idle DATASEG@ - 0595:005B idle __Int0Vector - 0595:005F idle __Int4Vector - 0595:0063 idle __Int5Vector - 0595:0067 idle __Int6Vector - 0595:006B __C0argc - 0595:006D __C0argv - 0595:0071 __C0environ - 0595:0075 __envLng - 0595:0077 __envseg - 0595:0079 __envSize - 0595:007B __psp - 0595:007D idle __osversion - 0595:007D __osmajor - 0595:007D idle __version - 0595:007E idle __osminor - 0595:007F _errno - 0595:0081 __StartTime - 0595:0085 idle ___brklvl - 0595:0087 __heapbase - 0595:008B __brklvl - 0595:008F __heaptop - 0595:0094 idle __kitten_catalog - 0595:0C92 __atexitcnt - 0595:0C94 __ctype - 0595:0D96 __exitbuf - 0595:0D98 __exitfopen - 0595:0D9A idle __exitopen - 0595:0D9C __streams - 0595:0F2C __nfile - 0595:0F2E __openfd - 0595:0F56 __fmode - 0595:0F58 __notUmask - 0595:0F5A __doserrno - 0595:0F5C idle __dosErrorToSV - 0595:0FC0 __stklen - 0595:102A __wscroll - 0595:102C __video - 0595:103B _directvideo - 0595:1078 __cFlag - 0595:1079 __cChar - 0595:107A __argc - 0595:107C __argv - 0595:108A _environ - 0595:1094 __RealCvtVector - 0595:1096 idle __ScanTodVector - 0595:10B8 idle _heaphandle - 0595:10BA idle _finishcachebox - 0595:10BC idle _updatecachebox - 0595:10BE idle _drawcachebox - 0595:10C0 _debughandle - 0595:10C2 idle _profilehandle - 0595:10C4 idle _XMSaddr - 0595:10C6 idle _aftersort - 0595:10C8 idle _beforesort - 0595:10CA __atexittbl - -Program entry point at 0000:0000 - diff --git a/16/exmmtest/HEAP.16 b/16/exmmtest/HEAP.16 deleted file mode 100644 index 81a386d3..00000000 --- a/16/exmmtest/HEAP.16 +++ /dev/null @@ -1,45 +0,0 @@ - - == default == - - USED block at 1d280016 of size 136 - USED block at 1d28009e of size 66 - FREE block at 1d2800e0 of size 7966 - USED block at 1d281ffe of size 20 - FREE block at 1d282012 of size 8170 -OK - end of heap - - == near == - - USED block at 0 of size 0 - USED block at 0 of size 0 - USED block at 0 of size 0 - USED block at 0 of size 0 - USED block at 0 of size 0 - USED block at 0 of size 0 - USED block at 0 of size 0 - USED block at 0 of size 0 - USED block at 0 of size 0 -OK - end of heap - - == far == - - USED block at 0 of size 0 - USED block at 0 of size 0 - USED block at 0 of size 0 - USED block at 0 of size 0 - USED block at 0 of size 0 -OK - end of heap - -Memory Type Total Used Free ----------------- -------- -------- -------- -Default 16358 222 16136 -Near 31318 880 30438 -Far 16358 222 16136 ----------------- -------- -------- -------- -coreleft = 30434 -farcoreleft = 38182 -GetFreeSize = 7768 -GetNearFreeSize = 30438 -GetFarFreeSize = 7768 -memavl = 30434 -stackavail = 17108 diff --git a/16/exmmtest/MMDUMP.16 b/16/exmmtest/MMDUMP.16 deleted file mode 100644 index e69de29b..00000000 diff --git a/16/exmmtest/PROFILE.16 b/16/exmmtest/PROFILE.16 deleted file mode 100644 index e69de29b..00000000 diff --git a/16/exmmtest/TC0000.SWP b/16/exmmtest/TC0000.SWP deleted file mode 100644 index 200380e78b9387af9651802d74c7e40725268bf7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262144 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 z 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, or - * write to the Free Software Foundation, Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA. - * - */ -/* - exmm test -*/ -//#include -//#include - -#include "src/lib/16_head.h" -#include "src/lib/16_ca.h" -#include "src/lib/16_mm.h" -#include "src/lib/16_hc.h" -//#include "src/lib/modex16.h" -#pragma hdrstop - -#pragma warn -pro -#pragma warn -use - -//file load or read definition -#define FILERL -//#define FILEREAD - -void -main(int argc, char *argv[]) -{ - mminfo_t mm; mminfotype mmi; -#ifdef __WATCOMC__ - __segment sega; - void __based(sega)* bigbuffer; -#endif -#ifdef __BORLANDC__ - memptr bigbuffer; -#endif -#ifdef FILERL - //static byte bakapee[64]; - char *bakapee; - word baka; -#endif - //static page_t screen; - -#ifdef __BORLANDC__ - argc=argc; -#endif - printf("&main()= %Fp\n", *argv[0]); - printf("bigbuffer= %Fp\n", bigbuffer); - printf("&bigbuffer= %Fp\n", &bigbuffer); - printf("bigbuffer= %04x\n", bigbuffer); - printf("&bigbuffer= %04x\n", &bigbuffer); - -#ifdef FILERL - bakapee = malloc(64); -#endif - mm.mmstarted=0; - -#ifdef FILERL -// printf("filename!: "); -// scanf("%[^\n]", &bakapee); - if(argv[1]) bakapee = argv[1]; - else bakapee = "data/koishi~.pcx"; -#endif - -// textInit(); - - // setup camera and screen~ - //bug!!! - //screen = modexDefaultPage(); - //screen.width += (16*2); - //screen.height += (16*2); - - printf("main()=%Fp start MM\n", *argv[0]); - MM_Startup(&mm, &mmi); - //PM_Startup(); - //PM_UnlockMainMem(); - CA_Startup(); - printf(" done!\n"); - printf("&main()= %Fp\n", *argv[0]); - printf("bigbuffer= %Fp\n", bigbuffer); - printf("&bigbuffer= %Fp\n", &bigbuffer); - printf("bigbuffer= %04x\n", bigbuffer); - printf("&bigbuffer= %04x\n", &bigbuffer); -// getch(); -#ifdef FILERL -// bakapeehandle = open(bakapee,O_RDONLY | O_BINARY, S_IREAD); -// printf("size of big buffer~=%u\n", _bmsize(segu, bigbuffer)); -// if(CA_FarRead(bakapeehandle,(void far *)&bigbuffer,sizeof(bigbuffer),&mm)) -#ifdef FILEREAD - printf(" read\n"); - if(CA_ReadFile(bakapee, &bigbuffer, &mm)) -#else - printf(" load\n"); - if(CA_LoadFile(bakapee, &bigbuffer, &mm, &mmi)) -#endif - baka=1; - else - baka=0; -// close(bakapeehandle); - //hmm functions in cache system use the buffered stuff -#ifdef __WATCOMC__ - printf("size of big buffer~=%u\n", _bmsize(sega, bigbuffer)); -#endif -#endif - printf("dark purple = purgable\n"); - printf("medium blue = non purgable\n"); - printf("red = locked\n"); - getch(); - //++++modexEnter(); - //++++modexShowPage(&screen); - MM_ShowMemory(&mm); - //getch(); - MM_DumpData(&mm); - //++++modexLeave(); - MM_Report(&mm, &mmi); - printf(" stop!\n"); -#ifdef FILERL - MM_FreePtr(&bigbuffer, &mm); -#endif - //PM_Shutdown(); - CA_Shutdown(); - MM_Shutdown(&mm); - printf(" done!\n"); -#ifdef FILERL - free(bakapee); - if(baka) printf("\nyay!\n"); - else printf("\npoo!\n"); -#endif - printf("bigbuffer= %Fp\n", bigbuffer); - printf("&bigbuffer= %Fp\n", &bigbuffer); - printf("bigbuffer= %04x\n", bigbuffer); - printf("&bigbuffer= %04x\n", &bigbuffer); - //printf("\n\n"); - //printf("Total free: %lu\n", (dword)(GetFreeSize())); - //printf("Total near free: %lu\n", (dword)(GetNearFreeSize())); - //printf("Total far free: %lu\n", (dword)(GetFarFreeSize())); - //getch(); - printf("\n"); -#ifdef __WATCOMC__ - heapdump(); -#endif - //printf("core left: %lu\n", (dword)_coreleft()); - //printf("far core left: %lu\n", (dword)_farcoreleft()); - //printf("based core left: %lu\n", (dword)_basedcoreleft()); - //printf("huge core left: %lu\n", (dword)_hugecoreleft()); -} diff --git a/16/exmmtest/src/lib/16_ca.c b/16/exmmtest/src/lib/16_ca.c deleted file mode 100644 index d1ab94a7..00000000 --- a/16/exmmtest/src/lib/16_ca.c +++ /dev/null @@ -1,2267 +0,0 @@ -/* Catacomb Apocalypse Source Code - * Copyright (C) 1993-2014 Flat Rock Software - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -// ID_CA.C - -/* -============================================================================= - -Id Software Caching Manager ---------------------------- - -Must be started BEFORE the memory manager, because it needs to get the headers -loaded into the data segment - -============================================================================= -*/ - -#include "src/lib/16_ca.h" -#pragma hdrstop - -#pragma warn -pro -#pragma warn -use - -//#define THREEBYTEGRSTARTS - -/* -============================================================================= - - LOCAL CONSTANTS - -============================================================================= -*/ - -typedef struct -{ - unsigned bit0,bit1; // 0-255 is a character, > is a pointer to a node -} huffnode; - - -/*typedef struct -{ - unsigned RLEWtag; - long headeroffsets[100]; - byte tileinfo[]; -} mapfiletype;*/ - - -/* -============================================================================= - - GLOBAL VARIABLES - -============================================================================= -*/ - -/*byte _seg *tinf; -int mapon; - -unsigned _seg *mapsegs[3]; -maptype _seg *mapheaderseg[NUMMAPS]; -byte _seg *audiosegs[NUMSNDCHUNKS]; -void _seg *grsegs[NUMCHUNKS]; - -byte far grneeded[NUMCHUNKS]; -byte ca_levelbit,ca_levelnum;*/ - -int profilehandle,debughandle; - -void (*drawcachebox) (char *title, unsigned numcache); -void (*updatecachebox) (void); -void (*finishcachebox) (void); - -/* -============================================================================= - - LOCAL VARIABLES - -============================================================================= -*/ - -/*extern long far CGAhead; -extern long far EGAhead; -extern byte CGAdict; -extern byte EGAdict; -extern byte far maphead; -extern byte mapdict; -extern byte far audiohead; -extern byte audiodict; - - -long _seg *grstarts; // array of offsets in egagraph, -1 for sparse -long _seg *audiostarts; // array of offsets in audio / audiot - -#ifdef GRHEADERLINKED -huffnode *grhuffman; -#else -huffnode grhuffman[255]; -#endif - -#ifdef AUDIOHEADERLINKED -huffnode *audiohuffman; -#else -huffnode audiohuffman[255]; -#endif - - -int grhandle; // handle to EGAGRAPH -int maphandle; // handle to MAPTEMP / GAMEMAPS -int audiohandle; // handle to AUDIOT / AUDIO - -long chunkcomplen,chunkexplen; - -SDMode oldsoundmode; - - - -void CAL_DialogDraw (char *title,unsigned numcache); -void CAL_DialogUpdate (void); -void CAL_DialogFinish (void);*/ -//void CAL_CarmackExpand (unsigned far *source, unsigned far *dest,unsigned length); - - -/*++++#ifdef THREEBYTEGRSTARTS -#define FILEPOSSIZE 3 -//#define GRFILEPOS(c) (*(long far *)(((byte far *)grstarts)+(c)*3)&0xffffff) -long GRFILEPOS(int c) -{ - long value; - int offset; - - offset = c*3; - - value = *(long far *)(((byte far *)grstarts)+offset); - - value &= 0x00ffffffl; - - if (value == 0xffffffl) - value = -1; - - return value; -}; -#else -#define FILEPOSSIZE 4 -#define GRFILEPOS(c) (grstarts[c]) -#endif*/ - -/* -============================================================================= - - LOW LEVEL ROUTINES - -============================================================================= -*/ - -/* -============================ -= -= CA_OpenDebug / CA_CloseDebug -= -= Opens a binary file with the handle "debughandle" -= -============================ -*/ -void CA_OpenDebug(void) -{ - unlink("debug.16"); - debughandle = open("debug.16", O_CREAT | O_WRONLY | O_TEXT); -} - -void CA_CloseDebug(void) -{ - close(debughandle); -} - - - -/* -============================ -= -= CAL_GetGrChunkLength -= -= Gets the length of an explicit length chunk (not tiles) -= The file pointer is positioned so the compressed data can be read in next. -= -============================ -*/ -/*++++ -void CAL_GetGrChunkLength (int chunk) -{ - lseek(grhandle,GRFILEPOS(chunk),SEEK_SET); - read(grhandle,&chunkexplen,sizeof(chunkexplen)); - chunkcomplen = GRFILEPOS(chunk+1)-GRFILEPOS(chunk)-4; -}*/ - - -/* -========================== -= -= CA_FarRead -= -= Read from a file to a far pointer -= -========================== -*/ - -boolean CA_FarRead(int handle, byte huge *dest, dword length, mminfo_t *mm) -{ - boolean flag; - /*dword fat=0; - word segm=0; - //if(mm->EMSVer<0x40) - if(length>0xfffflu) - { - printf("File is a fat bakapee\n"); - segm=(length%0xfffflu)-1; - fat=segm*0xfffflu; - length-=fat; -// printf("CA_FarRead doesn't support 64K reads yet!\n"); - } - - if(!fat&&!segm) - {*/ - __asm { - push ds - mov bx,[handle] - mov cx,[WORD PTR length] - mov dx,[WORD PTR dest] - mov ds,[WORD PTR dest+2] - mov ah,0x3f // READ w/handle - int 21h - pop ds - jnc good - mov errno,ax - mov flag,0 - jmp End -#ifdef __BORLANDC__ - } -#endif -good: -#ifdef __BORLANDC__ - __asm { -#endif - cmp ax,[WORD PTR length] - je done -// errno = EINVFMT; // user manager knows this is bad read - mov flag,0 - jmp End -#ifdef __BORLANDC__ - } -#endif -done: -#ifdef __BORLANDC__ - __asm { -#endif - mov flag,1 -#ifdef __BORLANDC__ - } -#endif -End: -#ifdef __WATCOMC__ - } -#endif - return flag; - //}else return 0;//todo: EXPAND!!! -} - - -/* -========================== -= -= CA_SegWrite -= -= Write from a file to a far pointer -= -========================== -*/ - -boolean CA_FarWrite(int handle, byte huge *source, dword length, mminfo_t *mm) -{ - boolean flag; - /*dword fat=0; - word segm=0; - //if(mm->EMSVer<0x40) - if(length>0xfffflu) - { - printf("File is a fat bakapee\n"); - segm=(length%0xfffflu)-1; - fat=segm*0xfffflu; - length-=fat; -// printf("CA_FarRead doesn't support 64K reads yet!\n"); - } - - if(!fat&&!segm) - {*/ - __asm { - push ds - mov bx,[handle] - mov cx,[WORD PTR length] - mov dx,[WORD PTR source] - mov ds,[WORD PTR source+2] - mov ah,0x40 // WRITE w/handle - int 21h - pop ds - jnc good - mov errno,ax - mov flag,0 - jmp End -#ifdef __BORLANDC__ - } -#endif -good: -#ifdef __BORLANDC__ - __asm { -#endif - cmp ax,[WORD PTR length] - je done - //errno = ENOMEM; // user manager knows this is bad write - mov flag,0 - jmp End -#ifdef __BORLANDC__ - } -#endif -done: -#ifdef __BORLANDC__ - __asm { -#endif - mov flag,1 -#ifdef __BORLANDC__ - } -#endif -End: -#ifdef __WATCOMC__ - } -#endif - return flag; - //}else return 0; -} - - -/* -========================== -= -= CA_ReadFile -= -= Reads a file into an allready allocated buffer -= -========================== -*/ - -boolean CA_ReadFile(char *filename, memptr *ptr, mminfo_t *mm) -{ - int handle; - dword size; - //long size; - - if((handle = open(filename,O_RDONLY | O_BINARY, S_IREAD)) == -1) - return false; - - size = filelength(handle); - if(!CA_FarRead(handle,*ptr,size, mm)) - { - close(handle); - return false; - } - close(handle); - return true; -} - - - -/* -========================== -= -= CA_LoadFile -= -= Allocate space for and load a file -= -========================== -*/ - -boolean CA_LoadFile(char *filename, memptr *ptr, mminfo_t *mm, mminfotype *mmi) -{ - int handle; - dword size; - //long size; - - if((handle = open(filename,O_RDONLY | O_BINARY, S_IREAD)) == -1) - return false; - - size = filelength (handle); - MM_GetPtr(ptr,size, mm, mmi); - if(!CA_FarRead(handle,*ptr,size, mm)) - { - close(handle); - return false; - } - close(handle); - return true; -} - -/* -============================================================================ - - COMPRESSION routines, see JHUFF.C for more - -============================================================================ -*/ - - - -/* -=============== -= -= CAL_OptimizeNodes -= -= Goes through a huffman table and changes the 256-511 node numbers to the -= actular address of the node. Must be called before CAL_HuffExpand -= -=============== -*/ - -void CAL_OptimizeNodes(huffnode *table) -{ - huffnode *node; - int i; - - node = table; - - for (i=0;i<255;i++) - { - if (node->bit0 >= 256) - node->bit0 = (unsigned)(table+(node->bit0-256)); - if (node->bit1 >= 256) - node->bit1 = (unsigned)(table+(node->bit1-256)); - node++; - } -} - - - -/* -====================== -= -= CAL_HuffExpand -= -= Length is the length of the EXPANDED data -= -====================== -*/ - -/*++++void CAL_HuffExpand (byte huge *source, byte huge *dest, - long length,huffnode *hufftable) -{ -// unsigned bit,byte,node,code; - unsigned sourceseg,sourceoff,destseg,destoff,endoff; - huffnode *headptr; -// huffnode *nodeon; - - headptr = hufftable+254; // head node is allways node 254 - - source++; // normalize - source--; - dest++; - dest--; - - sourceseg = FP_SEG(source); - sourceoff = FP_OFF(source); - destseg = FP_SEG(dest); - destoff = FP_OFF(dest); - endoff = destoff+length; - -// -// ds:si source -// es:di dest -// ss:bx node pointer -// - - if (length <0xfff0) - { - -//-------------------------- -// expand less than 64k of data -//-------------------------- - - __asm - { - mov bx,[headptr] - - mov si,[sourceoff] - mov di,[destoff] - mov es,[destseg] - mov ds,[sourceseg] - mov ax,[endoff] - - mov ch,[si] // load first byte - inc si - mov cl,1 - -expandshort: - test ch,cl // bit set? - jnz bit1short - mov dx,[ss:bx] // take bit0 path from node - shl cl,1 // advance to next bit position - jc newbyteshort - jnc sourceupshort - -bit1short: -asm mov dx,[ss:bx+2] // take bit1 path -asm shl cl,1 // advance to next bit position -asm jnc sourceupshort - -newbyteshort: -asm mov ch,[si] // load next byte -asm inc si -asm mov cl,1 // back to first bit - -sourceupshort: -asm or dh,dh // if dx<256 its a byte, else move node -asm jz storebyteshort -asm mov bx,dx // next node = (huffnode *)code -asm jmp expandshort - -storebyteshort: -asm mov [es:di],dl -asm inc di // write a decopmpressed byte out -asm mov bx,[headptr] // back to the head node for next bit - -asm cmp di,ax // done? -asm jne expandshort - } - } - else - { - -//-------------------------- -// expand more than 64k of data -//-------------------------- - - length--; - - __asm - { -asm mov bx,[headptr] -asm mov cl,1 - -asm mov si,[sourceoff] -asm mov di,[destoff] -asm mov es,[destseg] -asm mov ds,[sourceseg] - -asm lodsb // load first byte - -expand: -asm test al,cl // bit set? -asm jnz bit1 -asm mov dx,[ss:bx] // take bit0 path from node -asm jmp gotcode -bit1: -asm mov dx,[ss:bx+2] // take bit1 path - -gotcode: -asm shl cl,1 // advance to next bit position -asm jnc sourceup -asm lodsb -asm cmp si,0x10 // normalize ds:si -asm jb sinorm -asm mov cx,ds -asm inc cx -asm mov ds,cx -asm xor si,si -sinorm: -asm mov cl,1 // back to first bit - -sourceup: -asm or dh,dh // if dx<256 its a byte, else move node -asm jz storebyte -asm mov bx,dx // next node = (huffnode *)code -asm jmp expand - -storebyte: -asm mov [es:di],dl -asm inc di // write a decopmpressed byte out -asm mov bx,[headptr] // back to the head node for next bit - -asm cmp di,0x10 // normalize es:di -asm jb dinorm -asm mov dx,es -asm inc dx -asm mov es,dx -asm xor di,di -dinorm: - -asm sub [WORD PTR ss:length],1 -asm jnc expand -asm dec [WORD PTR ss:length+2] -asm jns expand // when length = ffff ffff, done - } - } - - __asm - { - mov ax,ss - mov ds,ax - } - -}*/ - - -/* -====================== -= -= CAL_CarmackExpand -= -= Length is the length of the EXPANDED data -= -====================== -*/ -/*++++ -#define NEARTAG 0xa7 -#define FARTAG 0xa8 - -void CAL_CarmackExpand (unsigned far *source, unsigned far *dest, unsigned length) -{ - unsigned ch,chhigh,count,offset; - unsigned far *copyptr, far *inptr, far *outptr; - - length/=2; - - inptr = source; - outptr = dest; - - while (length) - { - ch = *inptr++; - chhigh = ch>>8; - if (chhigh == NEARTAG) - { - count = ch&0xff; - if (!count) - { // have to insert a word containing the tag byte - ch |= *((unsigned char far *)inptr)++; - *outptr++ = ch; - length--; - } - else - { - offset = *((unsigned char far *)inptr)++; - copyptr = outptr - offset; - length -= count; - while (count--) - *outptr++ = *copyptr++; - } - } - else if (chhigh == FARTAG) - { - count = ch&0xff; - if (!count) - { // have to insert a word containing the tag byte - ch |= *((unsigned char far *)inptr)++; - *outptr++ = ch; - length --; - } - else - { - offset = *inptr++; - copyptr = dest + offset; - length -= count; - while (count--) - *outptr++ = *copyptr++; - } - } - else - { - *outptr++ = ch; - length --; - } - } -} -*/ - - -/* -====================== -= -= CA_RLEWcompress -= -====================== -*/ -/*++++ -long CA_RLEWCompress (unsigned huge *source, long length, unsigned huge *dest, - unsigned rlewtag) -{ - long complength; - unsigned value,count,i; - unsigned huge *start,huge *end; - - start = dest; - - end = source + (length+1)/2; - -// -// compress it -// - do - { - count = 1; - value = *source++; - while (*source == value && source3 || value == rlewtag) - { - // - // send a tag / count / value string - // - *dest++ = rlewtag; - *dest++ = count; - *dest++ = value; - } - else - { - // - // send word without compressing - // - for (i=1;i<=count;i++) - *dest++ = value; - } - - } while (source0 - MM_GetPtr(&(memptr)pictable,NUMPICS*sizeof(pictabletype)); - CAL_GetGrChunkLength(STRUCTPIC); // position file pointer - MM_GetPtr(&compseg,chunkcomplen); - CA_FarRead (grhandle,compseg,chunkcomplen); - CAL_HuffExpand (compseg, (byte huge *)pictable,NUMPICS*sizeof(pictabletype),grhuffman); - MM_FreePtr(&compseg); -#endif - -#if NUMPICM>0 - MM_GetPtr(&(memptr)picmtable,NUMPICM*sizeof(pictabletype)); - CAL_GetGrChunkLength(STRUCTPICM); // position file pointer - MM_GetPtr(&compseg,chunkcomplen); - CA_FarRead (grhandle,compseg,chunkcomplen); - CAL_HuffExpand (compseg, (byte huge *)picmtable,NUMPICS*sizeof(pictabletype),grhuffman); - MM_FreePtr(&compseg); -#endif - -#if NUMSPRITES>0 - MM_GetPtr(&(memptr)spritetable,NUMSPRITES*sizeof(spritetabletype)); - CAL_GetGrChunkLength(STRUCTSPRITE); // position file pointer - MM_GetPtr(&compseg,chunkcomplen); - CA_FarRead (grhandle,compseg,chunkcomplen); - CAL_HuffExpand (compseg, (byte huge *)spritetable,NUMSPRITES*sizeof(spritetabletype),grhuffman); - MM_FreePtr(&compseg); -#endif - -}*/ - -//========================================================================== - - -/* -====================== -= -= CAL_SetupMapFile -= -====================== -*/ - -/*void CAL_SetupMapFile (void) -{ - int handle; - long length; - -// -// load maphead.ext (offsets and tileinfo for map file) -// -#ifndef MAPHEADERLINKED - if ((handle = open("MAPHEAD."EXT, - O_RDONLY | O_BINARY, S_IREAD)) == -1) - Quit ("Can't open MAPHEAD."EXT"!"); - length = filelength(handle); - MM_GetPtr (&(memptr)tinf,length); - CA_FarRead(handle, tinf, length); - close(handle); -#else - - tinf = (byte _seg *)FP_SEG(&maphead); - -#endif - -// -// open the data file -// -#ifdef MAPHEADERLINKED - if ((maphandle = open("GAMEMAPS."EXT, - O_RDONLY | O_BINARY, S_IREAD)) == -1) - Quit ("Can't open GAMEMAPS."EXT"!"); -#else - if ((maphandle = open("MAPTEMP."EXT, - O_RDONLY | O_BINARY, S_IREAD)) == -1) - Quit ("Can't open MAPTEMP."EXT"!"); -#endif -}*/ - -//========================================================================== - - -/* -====================== -= -= CAL_SetupAudioFile -= -====================== -*/ - -/*void CAL_SetupAudioFile (void) -{ - int handle; - long length; - -// -// load maphead.ext (offsets and tileinfo for map file) -// -#ifndef AUDIOHEADERLINKED - if ((handle = open("AUDIOHED."EXT, - O_RDONLY | O_BINARY, S_IREAD)) == -1) - Quit ("Can't open AUDIOHED."EXT"!"); - length = filelength(handle); - MM_GetPtr (&(memptr)audiostarts,length); - CA_FarRead(handle, (byte far *)audiostarts, length); - close(handle); -#else - audiohuffman = (huffnode *)&audiodict; - CAL_OptimizeNodes (audiohuffman); - audiostarts = (long _seg *)FP_SEG(&audiohead); -#endif - -// -// open the data file -// -#ifndef AUDIOHEADERLINKED - if ((audiohandle = open("AUDIOT."EXT, - O_RDONLY | O_BINARY, S_IREAD)) == -1) - Quit ("Can't open AUDIOT."EXT"!"); -#else - if ((audiohandle = open("AUDIO."EXT, - O_RDONLY | O_BINARY, S_IREAD)) == -1) - Quit ("Can't open AUDIO."EXT"!"); -#endif -}*/ - -//========================================================================== - - -/* -====================== -= -= CA_Startup -= -= Open all files and load in headers -= -====================== -*/ - -void CA_Startup(void) -{ -#ifdef PROFILE - unlink("profile.16"); - profilehandle = open("profile.16", O_CREAT | O_WRONLY | O_TEXT); -#endif -/*++++ -// MDM begin - (GAMERS EDGE) -// - if(!FindFile("AUDIO."EXT,NULL,2)) - Quit("CA_Startup(): Can't find audio files."); -// -// MDM end - -#ifndef NOAUDIO - CAL_SetupAudioFile(); -#endif - -// MDM begin - (GAMERS EDGE) -// - if (!FindFile("GAMEMAPS."EXT,NULL,1)) - Quit("CA_Startup(): Can't find level files."); -// -// MDM end - -#ifndef NOMAPS - CAL_SetupMapFile (); -#endif - -// MDM begin - (GAMERS EDGE) -// - if (!FindFile("EGAGRAPH."EXT,NULL,2)) - Quit("CA_Startup(): Can't find graphics files."); -// -// MDM end - -#ifndef NOGRAPHICS - CAL_SetupGrFile (); -#endif - - mapon = -1; - ca_levelbit = 1; - ca_levelnum = 0; - - drawcachebox = CAL_DialogDraw; - updatecachebox = CAL_DialogUpdate; - finishcachebox = CAL_DialogFinish;*/ -} - -//========================================================================== - - -/* -====================== -= -= CA_Shutdown -= -= Closes all files -= -====================== -*/ - -void CA_Shutdown(void) -{ -#ifdef PROFILE - close(profilehandle); -#endif -/*++++ - close(maphandle); - close(grhandle); - close(audiohandle);*/ -} - -//=========================================================================== - -/* -====================== -= -= CA_CacheAudioChunk -= -====================== -*/ -/*++++ -void CA_CacheAudioChunk (int chunk) -{ - long pos,compressed; -#ifdef AUDIOHEADERLINKED - long expanded; - memptr bigbufferseg; - byte far *source; -#endif - - if (audiosegs[chunk]) - { - MM_SetPurge (&(memptr)audiosegs[chunk],0); - return; // allready in memory - } - -// MDM begin - (GAMERS EDGE) -// - if (!FindFile("AUDIO."EXT,NULL,2)) - Quit("CA_CacheAudioChunk(): Can't find audio files."); -// -// MDM end - -// -// load the chunk into a buffer, either the miscbuffer if it fits, or allocate -// a larger buffer -// - pos = audiostarts[chunk]; - compressed = audiostarts[chunk+1]-pos; - - lseek(audiohandle,pos,SEEK_SET); - -#ifndef AUDIOHEADERLINKED - - MM_GetPtr (&(memptr)audiosegs[chunk],compressed); - if (mmerror) - return; - - CA_FarRead(audiohandle,audiosegs[chunk],compressed); - -#else - - if (compressed<=BUFFERSIZE) - { - CA_FarRead(audiohandle,bufferseg,compressed); - source = bufferseg; - } - else - { - MM_GetPtr(&bigbufferseg,compressed); - if (mmerror) - return; - MM_SetLock (&bigbufferseg,true); - CA_FarRead(audiohandle,bigbufferseg,compressed); - source = bigbufferseg; - } - - expanded = *(long far *)source; - source += 4; // skip over length - MM_GetPtr (&(memptr)audiosegs[chunk],expanded); - if (mmerror) - goto done; - CAL_HuffExpand (source,audiosegs[chunk],expanded,audiohuffman); - -done: - if (compressed>BUFFERSIZE) - MM_FreePtr(&bigbufferseg); -#endif -}*/ - -//=========================================================================== - -/* -====================== -= -= CA_LoadAllSounds -= -= Purges all sounds, then loads all new ones (mode switch) -= -====================== -*/ -/*++++ -void CA_LoadAllSounds (void) -{ - unsigned start,i; - - switch (oldsoundmode) - { - case sdm_Off: - goto cachein; - case sdm_PC: - start = STARTPCSOUNDS; - break; - case sdm_AdLib: - start = STARTADLIBSOUNDS; - break; - } - - for (i=0;iwidth*spr->height; - MM_GetPtr (&grsegs[chunk],smallplane*2+MAXSHIFTS*6); - if (mmerror) - return; - dest = (spritetype _seg *)grsegs[chunk]; - dest->sourceoffset[0] = MAXSHIFTS*6; // start data after 3 unsigned tables - dest->planesize[0] = smallplane; - dest->width[0] = spr->width; - -// -// expand the unshifted shape -// - CAL_HuffExpand (compressed, &dest->data[0],smallplane*2,grhuffman); - -#endif - - -#if GRMODE == EGAGR - -// -// calculate sizes -// - spr = &spritetable[chunk-STARTSPRITES]; - smallplane = spr->width*spr->height; - bigplane = (spr->width+1)*spr->height; - - shiftstarts[0] = MAXSHIFTS*6; // start data after 3 unsigned tables - shiftstarts[1] = shiftstarts[0] + smallplane*5; // 5 planes in a sprite - shiftstarts[2] = shiftstarts[1] + bigplane*5; - shiftstarts[3] = shiftstarts[2] + bigplane*5; - shiftstarts[4] = shiftstarts[3] + bigplane*5; // nothing ever put here - - expanded = shiftstarts[spr->shifts]; - MM_GetPtr (&grsegs[chunk],expanded); - if (mmerror) - return; - dest = (spritetype _seg *)grsegs[chunk]; - -// -// expand the unshifted shape -// - CAL_HuffExpand (compressed, &dest->data[0],smallplane*5,grhuffman); - -// -// make the shifts! -// - switch (spr->shifts) - { - case 1: - for (i=0;i<4;i++) - { - dest->sourceoffset[i] = shiftstarts[0]; - dest->planesize[i] = smallplane; - dest->width[i] = spr->width; - } - break; - - case 2: - for (i=0;i<2;i++) - { - dest->sourceoffset[i] = shiftstarts[0]; - dest->planesize[i] = smallplane; - dest->width[i] = spr->width; - } - for (i=2;i<4;i++) - { - dest->sourceoffset[i] = shiftstarts[1]; - dest->planesize[i] = bigplane; - dest->width[i] = spr->width+1; - } - CAL_ShiftSprite ((unsigned)grsegs[chunk],dest->sourceoffset[0], - dest->sourceoffset[2],spr->width,spr->height,4,true); - break; - - case 4: - dest->sourceoffset[0] = shiftstarts[0]; - dest->planesize[0] = smallplane; - dest->width[0] = spr->width; - - dest->sourceoffset[1] = shiftstarts[1]; - dest->planesize[1] = bigplane; - dest->width[1] = spr->width+1; - CAL_ShiftSprite ((unsigned)grsegs[chunk],dest->sourceoffset[0], - dest->sourceoffset[1],spr->width,spr->height,2,true); - - dest->sourceoffset[2] = shiftstarts[2]; - dest->planesize[2] = bigplane; - dest->width[2] = spr->width+1; - CAL_ShiftSprite ((unsigned)grsegs[chunk],dest->sourceoffset[0], - dest->sourceoffset[2],spr->width,spr->height,4,true); - - dest->sourceoffset[3] = shiftstarts[3]; - dest->planesize[3] = bigplane; - dest->width[3] = spr->width+1; - CAL_ShiftSprite ((unsigned)grsegs[chunk],dest->sourceoffset[0], - dest->sourceoffset[3],spr->width,spr->height,6,true); - - break; - - default: - Quit ("CAL_CacheSprite: Bad shifts number!"); - } - -#endif -}*/ - -//=========================================================================== - - -/* -====================== -= -= CAL_ExpandGrChunk -= -= Does whatever is needed with a pointer to a compressed chunk -= -====================== -*/ -/*++++ -void CAL_ExpandGrChunk (int chunk, byte far *source) -{ - long expanded; - - - if (chunk >= STARTTILE8 && chunk < STARTEXTERNS) - { - // - // expanded sizes of tile8/16/32 are implicit - // - -#if GRMODE == EGAGR -#define BLOCK 32 -#define MASKBLOCK 40 -#endif - -#if GRMODE == CGAGR -#define BLOCK 16 -#define MASKBLOCK 32 -#endif - - if (chunk=STARTSPRITES && chunk< STARTTILE8) - CAL_CacheSprite(chunk,source); - else - { - MM_GetPtr (&grsegs[chunk],expanded); - if (mmerror) - return; - CAL_HuffExpand (source,grsegs[chunk],expanded,grhuffman); - } -} -*/ - -/* -====================== -= -= CAL_ReadGrChunk -= -= Gets a chunk off disk, optimizing reads to general buffer -= -====================== -*/ -/*++++ -void CAL_ReadGrChunk (int chunk) -{ - long pos,compressed; - memptr bigbufferseg; - byte far *source; - int next; - -// -// load the chunk into a buffer, either the miscbuffer if it fits, or allocate -// a larger buffer -// - pos = GRFILEPOS(chunk); - if (pos<0) // $FFFFFFFF start is a sparse tile - return; - - next = chunk +1; - while (GRFILEPOS(next) == -1) // skip past any sparse tiles - next++; - - compressed = GRFILEPOS(next)-pos; - - lseek(grhandle,pos,SEEK_SET); - - if (compressed<=BUFFERSIZE) - { - CA_FarRead(grhandle,bufferseg,compressed); - source = bufferseg; - } - else - { - MM_GetPtr(&bigbufferseg,compressed); - if (mmerror) - return; - MM_SetLock (&bigbufferseg,true); - CA_FarRead(grhandle,bigbufferseg,compressed); - source = bigbufferseg; - } - - CAL_ExpandGrChunk (chunk,source); - - if (compressed>BUFFERSIZE) - MM_FreePtr(&bigbufferseg); -} -*/ -/* -====================== -= -= CA_CacheGrChunk -= -= Makes sure a given chunk is in memory, loadiing it if needed -= -====================== -*/ -/*++++ -void CA_CacheGrChunk (int chunk) -{ - long pos,compressed; - memptr bigbufferseg; - byte far *source; - int next; - - grneeded[chunk] |= ca_levelbit; // make sure it doesn't get removed - if (grsegs[chunk]) - { - MM_SetPurge (&grsegs[chunk],0); - return; // allready in memory - } - -// MDM begin - (GAMERS EDGE) -// - if (!FindFile("EGAGRAPH."EXT,NULL,2)) - Quit("CA_CacheGrChunk(): Can't find graphics files."); -// -// MDM end - -// -// load the chunk into a buffer, either the miscbuffer if it fits, or allocate -// a larger buffer -// - pos = GRFILEPOS(chunk); - if (pos<0) // $FFFFFFFF start is a sparse tile - return; - - next = chunk +1; - while (GRFILEPOS(next) == -1) // skip past any sparse tiles - next++; - - compressed = GRFILEPOS(next)-pos; - - lseek(grhandle,pos,SEEK_SET); - - if (compressed<=BUFFERSIZE) - { - CA_FarRead(grhandle,bufferseg,compressed); - source = bufferseg; - } - else - { - MM_GetPtr(&bigbufferseg,compressed); - MM_SetLock (&bigbufferseg,true); - CA_FarRead(grhandle,bigbufferseg,compressed); - source = bigbufferseg; - } - - CAL_ExpandGrChunk (chunk,source); - - if (compressed>BUFFERSIZE) - MM_FreePtr(&bigbufferseg); -} -*/ - - -//========================================================================== - -/* -====================== -= -= CA_CacheMap -= -====================== -*/ -/*++++ -void CA_CacheMap (int mapnum) -{ - long pos,compressed; - int plane; - memptr *dest,bigbufferseg; - unsigned size; - unsigned far *source; -#ifdef MAPHEADERLINKED - memptr buffer2seg; - long expanded; -#endif - - -// MDM begin - (GAMERS EDGE) -// - if (!FindFile("GAMEMAPS."EXT,NULL,1)) - Quit("CA_CacheMap(): Can't find level files."); -// -// MDM end - - -// -// free up memory from last map -// - if (mapon>-1 && mapheaderseg[mapon]) - MM_SetPurge (&(memptr)mapheaderseg[mapon],3); - for (plane=0;planeheaderoffsets[mapnum]; - if (pos<0) // $FFFFFFFF start is a sparse map - Quit ("CA_CacheMap: Tried to load a non existent map!"); - - MM_GetPtr(&(memptr)mapheaderseg[mapnum],sizeof(maptype)); - lseek(maphandle,pos,SEEK_SET); - CA_FarRead (maphandle,(memptr)mapheaderseg[mapnum],sizeof(maptype)); - } - else - MM_SetPurge (&(memptr)mapheaderseg[mapnum],0); - -// -// load the planes in -// If a plane's pointer still exists it will be overwritten (levels are -// allways reloaded, never cached) -// - - size = mapheaderseg[mapnum]->width * mapheaderseg[mapnum]->height * 2; - - for (plane = 0; planeplanestart[plane]; - compressed = mapheaderseg[mapnum]->planelength[plane]; - - if (!compressed) - continue; // the plane is not used in this game - - dest = &(memptr)mapsegs[plane]; - MM_GetPtr(dest,size); - - lseek(maphandle,pos,SEEK_SET); - if (compressed<=BUFFERSIZE) - source = bufferseg; - else - { - MM_GetPtr(&bigbufferseg,compressed); - MM_SetLock (&bigbufferseg,true); - source = bigbufferseg; - } - - CA_FarRead(maphandle,(byte far *)source,compressed); -#ifdef MAPHEADERLINKED - // - // unhuffman, then unRLEW - // The huffman'd chunk has a two byte expanded length first - // The resulting RLEW chunk also does, even though it's not really - // needed - // - expanded = *source; - source++; - MM_GetPtr (&buffer2seg,expanded); - CAL_CarmackExpand (source, (unsigned far *)buffer2seg,expanded); - CA_RLEWexpand (((unsigned far *)buffer2seg)+1,*dest,size, - ((mapfiletype _seg *)tinf)->RLEWtag); - MM_FreePtr (&buffer2seg); - -#else - // - // unRLEW, skipping expanded length - // - CA_RLEWexpand (source+1, *dest,size, - ((mapfiletype _seg *)tinf)->RLEWtag); -#endif - - if (compressed>BUFFERSIZE) - MM_FreePtr(&bigbufferseg); - } -}*/ - -//=========================================================================== - -/* -====================== -= -= CA_UpLevel -= -= Goes up a bit level in the needed lists and clears it out. -= Everything is made purgable -= -====================== -*/ -/*++++ -void CA_UpLevel (void) -{ - if (ca_levelnum==7) - Quit ("CA_UpLevel: Up past level 7!"); - - ca_levelbit<<=1; - ca_levelnum++; -}*/ - -//=========================================================================== - -/* -====================== -= -= CA_DownLevel -= -= Goes down a bit level in the needed lists and recaches -= everything from the lower level -= -====================== -*/ -/*++ -void CA_DownLevel (void) -{ - if (!ca_levelnum) - Quit ("CA_DownLevel: Down past level 0!"); - ca_levelbit>>=1; - ca_levelnum--; - CA_CacheMarks(NULL); -}*/ - -//=========================================================================== - -/* -====================== -= -= CA_ClearMarks -= -= Clears out all the marks at the current level -= -====================== -*/ -/* -void CA_ClearMarks (void) -{ - int i; - - for (i=0;i>16; - if (xh - lastx > BARSTEP) - { - for (x=lastx;x<=xh;x++) -#if GRMODE == EGAGR - VWB_Vlin (thy,thy+13,x,14); -#endif -#if GRMODE == CGAGR - VWB_Vlin (thy,thy+13,x,SECONDCOLOR); -#endif - lastx = xh; - VW_UpdateScreen(); - } -}*/ - -/* -====================== -= -= CAL_DialogFinish -= -====================== -*/ -/* -void CAL_DialogFinish (void) -{ - unsigned x,xh; - - xh = thx + NUMBARS; - for (x=lastx;x<=xh;x++) -#if GRMODE == EGAGR - VWB_Vlin (thy,thy+13,x,14); -#endif -#if GRMODE == CGAGR - VWB_Vlin (thy,thy+13,x,SECONDCOLOR); -#endif - VW_UpdateScreen(); - -}*/ - -//=========================================================================== - -/* -====================== -= -= CA_CacheMarks -= -====================== -*//* -#define MAXEMPTYREAD 1024 - -void CA_CacheMarks (char *title) -{ - boolean dialog; - int i,next,numcache; - long pos,endpos,nextpos,nextendpos,compressed; - long bufferstart,bufferend; // file position of general buffer - byte far *source; - memptr bigbufferseg; - - dialog = (title!=NULL); - - numcache = 0; -// -// go through and make everything not needed purgable -// - for (i=0;i= endpos) - { - // data is allready in buffer - source = (byte _seg *)bufferseg+(pos-bufferstart); - } - else - { - // load buffer with a new block from disk - // try to get as many of the needed blocks in as possible - while ( next < NUMCHUNKS ) - { - while (next < NUMCHUNKS && - !(grneeded[next]&ca_levelbit && !grsegs[next])) - next++; - if (next == NUMCHUNKS) - continue; - - nextpos = GRFILEPOS(next); - while (GRFILEPOS(++next) == -1) // skip past any sparse tiles - ; - nextendpos = GRFILEPOS(next); - if (nextpos - endpos <= MAXEMPTYREAD - && nextendpos-pos <= BUFFERSIZE) - endpos = nextendpos; - else - next = NUMCHUNKS; // read pos to posend - } - - lseek(grhandle,pos,SEEK_SET); - CA_FarRead(grhandle,bufferseg,endpos-pos); - bufferstart = pos; - bufferend = endpos; - source = bufferseg; - } - } - else - { - // big chunk, allocate temporary buffer - MM_GetPtr(&bigbufferseg,compressed); - if (mmerror) - return; - MM_SetLock (&bigbufferseg,true); - lseek(grhandle,pos,SEEK_SET); - CA_FarRead(grhandle,bigbufferseg,compressed); - source = bigbufferseg; - } - - CAL_ExpandGrChunk (i,source); - if (mmerror) - return; - - if (compressed>BUFFERSIZE) - MM_FreePtr(&bigbufferseg); - - } - -// -// finish up any thermometer remnants -// - if (dialog && finishcachebox) - finishcachebox(); -}*/ diff --git a/16/exmmtest/src/lib/16_ca.h b/16/exmmtest/src/lib/16_ca.h deleted file mode 100644 index 77809387..00000000 --- a/16/exmmtest/src/lib/16_ca.h +++ /dev/null @@ -1,116 +0,0 @@ -/* Catacomb Apocalypse Source Code - * Copyright (C) 1993-2014 Flat Rock Software - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -// ID_CA.H -#ifndef __16_CA__ -#define __16_CA__ - -#ifndef __16_MM__ -#include "src/lib/16_head.h" -#include "src/lib/16_mm.h" -#endif - -//=========================================================================== - -//#define NOMAPS -//#define NOGRAPHICS -//#define NOAUDIO - -//#define MAPHEADERLINKED -//#define GRHEADERLINKED -//#define AUDIOHEADERLINKED - -//#define NUMMAPS 39 -//#define MAPPLANES 3 -#define PROFILE - -//=========================================================================== - -/*typedef struct -{ - long planestart[3]; - unsigned planelength[3]; - unsigned width,height; - char name[16]; -} maptype;*/ - -//=========================================================================== - -/*extern byte _seg *tinf; -extern int mapon; - -extern unsigned _seg *mapsegs[3]; -extern maptype _seg *mapheaderseg[NUMMAPS]; -extern byte _seg *audiosegs[NUMSNDCHUNKS]; -extern void _seg *grsegs[NUMCHUNKS]; - -extern byte far grneeded[NUMCHUNKS]; -extern byte ca_levelbit,ca_levelnum; - -extern char *titleptr[8];*/ - -extern int profilehandle,debughandle; - -// -// hooks for custom cache dialogs -// -extern void (*drawcachebox) (char *title, unsigned numcache); -extern void (*updatecachebox) (void); -extern void (*finishcachebox) (void); - -//=========================================================================== - -// just for the score box reshifting - -//void CAL_ShiftSprite (unsigned segment,unsigned source,unsigned dest,unsigned width, unsigned height, unsigned pixshift, boolean domask); - -//=========================================================================== - -void CA_OpenDebug (void); -void CA_CloseDebug (void); -boolean CA_FarRead (int handle, byte huge *dest, dword length, mminfo_t *mm); -boolean CA_FarWrite (int handle, byte huge *source, dword length, mminfo_t *mm); - -boolean CA_ReadFile (char *filename, memptr *ptr, mminfo_t *mm); -boolean CA_LoadFile (char *filename, memptr *ptr, mminfo_t *mm, mminfotype *mmi); - -//long CA_RLEWCompress (unsigned huge *source, long length, unsigned huge *dest,unsigned rlewtag); - -//void CA_RLEWexpand (unsigned huge *source, unsigned huge *dest,long length,unsigned rlewtag); - -void CA_Startup (void); -void CA_Shutdown (void); - -//void CA_CacheAudioChunk (int chunk); -//void CA_LoadAllSounds (void); - -/*void CA_UpLevel (void); -void CA_DownLevel (void); - -void CA_SetAllPurge (void); - -void CA_ClearMarks (void); -void CA_ClearAllMarks (void); - -#define CA_MarkGrChunk(chunk) grneeded[chunk]|=ca_levelbit - -void CA_CacheGrChunk (int chunk); -void CA_CacheMap (int mapnum); - -void CA_CacheMarks (char *title);*/ -#endif diff --git a/16/exmmtest/src/lib/16_hc.c b/16/exmmtest/src/lib/16_hc.c deleted file mode 100644 index 00524447..00000000 --- a/16/exmmtest/src/lib/16_hc.c +++ /dev/null @@ -1,538 +0,0 @@ -/* Project 16 Source Code~ - * Copyright (C) 2012-2015 sparky4 & pngwen & andrius4669 - * - * This file is part of Project 16. - * - * Project 16 is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * Project 16 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see , or - * write to the Free Software Foundation, Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA. - * - */ -/* - heap test stuff -*/ - -#include "src/lib/16_hc.h" -#pragma hdrstop - -#pragma warn -pro -#pragma warn -use - -int heaphandle; - -#ifdef __BORLANDC__ -void * LargestFreeBlock(size_t* Size) -#endif -#ifdef __WATCOMC__ -void __near* LargestFreeBlock(size_t* Size) -#endif -{ - size_t s0, s1; -#ifdef __BORLANDC__ - void * p; -#endif -#ifdef __WATCOMC__ - void __near* p; -#endif - - s0 = ~(size_t)0 ^ (~(size_t)0 >> 1); -#ifdef __BORLANDC__ - while (s0 && (p = malloc(s0)) == NULL) -#endif -#ifdef __WATCOMC__ - while (s0 && (p = _nmalloc(s0)) == NULL) -#endif - s0 >>= 1; - - if (p) -#ifdef __BORLANDC__ - free(p); -#endif -#ifdef __WATCOMC__ - _nfree(p); -#endif - - s1 = s0 >> 1; - while (s1) - { -#ifdef __BORLANDC__ - if ((p = malloc(s0 + s1)) != NULL) -#endif -#ifdef __WATCOMC__ - if ((p = _nmalloc(s0 + s1)) != NULL) -#endif - { - s0 += s1; -#ifdef __BORLANDC__ - free(p); -#endif -#ifdef __WATCOMC__ - _nfree(p); -#endif - } - s1 >>= 1; - } -#ifdef __BORLANDC__ - while (s0 && (p = malloc(s0)) == NULL) -#endif -#ifdef __WATCOMC__ - while (s0 && (p = _nmalloc(s0)) == NULL) -#endif - s0 ^= s0 & -s0; - - *Size = s0; - return p; -} - -size_t _coreleft(void) -{ - size_t total = 0; - void __near* pFirst = NULL; - void __near* pLast = NULL; - for(;;) - { - size_t largest; - void __near* p = (void __near *)LargestFreeBlock(&largest); - if (largest < sizeof(void __near*)) - { - if (p != NULL) -#ifdef __BORLANDC__ - free(p); -#endif -#ifdef __WATCOMC__ - _nfree(p); -#endif - break; - } - *(void __near* __near*)p = NULL; - total += largest; - if (pFirst == NULL) - pFirst = p; - - if (pLast != NULL) - *(void __near* __near*)pLast = p; - pLast = p; - } - - while (pFirst != NULL) - { - void __near* p = *(void __near* __near*)pFirst; -#ifdef __BORLANDC__ - free(pFirst); -#endif -#ifdef __WATCOMC__ - _nfree(pFirst); -#endif - pFirst = p; - } - return total; -} - -void far* LargestFarFreeBlock(size_t* Size) -{ - size_t s0, s1; - void far* p; - - s0 = ~(size_t)0 ^ (~(size_t)0 >> 1); - while (s0 && (p = _fmalloc(s0)) == NULL) - s0 >>= 1; - - if (p) - _ffree(p); - - s1 = s0 >> 1; - while (s1) - { - if ((p = _fmalloc(s0 + s1)) != NULL) - { - s0 += s1; - _ffree(p); - } - s1 >>= 1; - } - while (s0 && (p = _fmalloc(s0)) == NULL) - s0 ^= s0 & -s0; - - *Size = s0; - return p; -} - -size_t _farcoreleft(void) -{ - size_t total = 0; - void far* pFirst = NULL; - void far* pLast = NULL; - for(;;) - { - size_t largest; - void far* p = LargestFarFreeBlock(&largest); - if (largest < sizeof(void far*)) - { - if (p != NULL) - _ffree(p); - break; - } - *(void far* far*)p = NULL; - total += largest; - if (pFirst == NULL) - pFirst = p; - - if (pLast != NULL) - *(void far* far*)pLast = p; - pLast = p; - } - - while (pFirst != NULL) - { - void far* p = *(void far* far*)pFirst; - _ffree(pFirst); - pFirst = p; - } - return total; -} - -#ifdef __WATCOMC__ -void huge* LargestHugeFreeBlock(size_t* Size) -{ - size_t s0, s1; - void huge* p; - - s0 = ~(size_t)0 ^ (~(size_t)0 >> 1); - while (s0 && (p = halloc((dword)s0, 1)) == NULL) - s0 >>= 1; - - if (p) - hfree(p); - - s1 = s0 >> 1; - while (s1) - { - if ((p = halloc((dword)(s0 + s1), 1)) != NULL) - { - s0 += s1; - hfree(p); - } - s1 >>= 1; - } - while (s0 && (p = halloc((dword)s0, 1)) == NULL) - s0 ^= s0 & -s0; - - *Size = s0; - return p; -} - -size_t _hugecoreleft(void) -{ - size_t total = 0; - void huge* pFirst = NULL; - void huge* pLast = NULL; - for(;;) - { - size_t largest; - void huge* p = LargestHugeFreeBlock(&largest); - if (largest < sizeof(void huge*)) - { - if (p != NULL) - hfree(p); - break; - } - *(void huge* huge*)p = NULL; - total += largest; - if (pFirst == NULL) - pFirst = p; - - if (pLast != NULL) - *(void huge* huge*)pLast = p; - pLast = p; - } - - while (pFirst != NULL) - { - void huge* p = *(void huge* huge*)pFirst; - hfree(pFirst); - pFirst = p; - } - return total; -} - -/*void __based(__self)* LargestBasedFreeBlock(size_t* Size) -{ - __segment segu; - size_t s0, s1; - void __based(__self)* p; - - s0 = ~(size_t)0 ^ (~(size_t)0 >> 1); - while (s0 && (p = _bmalloc(segu, s0)) == NULL) - s0 >>= 1; - - if (p) - _ffree(p); - - s1 = s0 >> 1; - while (s1) - { - if ((p = _bmalloc(segu, s0 + s1)) != NULL) - { - s0 += s1; - _ffree(p); - } - s1 >>= 1; - } - while (s0 && (p = _bmalloc(segu, s0)) == NULL) - s0 ^= s0 & -s0; - - *Size = s0; - return p; -} - -size_t _basedcoreleft(void) -{ - __segment segu; - size_t total = 0; - void __based(segu)* pFirst = NULL; - void __based(segu)* pLast = NULL; - // allocate based heap - segu = _bheapseg( 1024 ); - if( segu == _NULLSEG ) { - printf( "Unable to allocate based heap\n" ); - return 0; - //exit( 1 ); - } - else - - for(;;) - { - size_t largest; - void __based(segu)* p = LargestBasedFreeBlock(&largest); - if (largest < sizeof(void far*)) - { - if (p != NULL) - _ffree(p); - break; - } - *(void far* far*)p = NULL; - total += largest; - if (pFirst == NULL) - pFirst = p; - - if (pLast != NULL) - *(void far* far*)pLast = p; - pLast = p; - } - - while (pFirst != NULL) - { - void far* p = *(void far* far*)pFirst; - _ffree(pFirst); - pFirst = p; - } - return total; -}*/ - -size_t GetFreeSize(void) -{ - struct _heapinfo h_info; - int heap_status; - size_t h_free=0, h_total=0, h_used=0; - - h_info._pentry = NULL; - for(;;) { - heap_status = _heapwalk( &h_info ); - if( heap_status != _HEAPOK ) break; - if((h_info._useflag == _USEDENTRY ? "USED" : "FREE")=="FREE") h_free += h_info._size; - if((h_info._useflag == _USEDENTRY ? "USED" : "FREE")=="USED") h_used += h_info._size; - h_total += h_info._size; - } - heapstat0(heap_status); - return h_free; -} - -size_t GetFarFreeSize(void) -{ - struct _heapinfo fh_info; - int heap_status; - size_t fh_free=0, fh_total=0, fh_used=0; - - fh_info._pentry = NULL; - for(;;) { - heap_status = _fheapwalk( &fh_info ); - if( heap_status != _HEAPOK ) break; - if((fh_info._useflag == _USEDENTRY ? "USED" : "FREE")=="FREE") fh_free += fh_info._size; - if((fh_info._useflag == _USEDENTRY ? "USED" : "FREE")=="USED") fh_used += fh_info._size; - fh_total += fh_info._size; - } - heapstat0(heap_status); - return fh_free; -} - -size_t GetNearFreeSize(void) -{ - struct _heapinfo nh_info; - int heap_status; - size_t nh_free=0, nh_total=0, nh_used=0; - - nh_info._pentry = NULL; - for(;;) { - heap_status = _nheapwalk( &nh_info ); - if( heap_status != _HEAPOK ) break; - if((nh_info._useflag == _USEDENTRY ? "USED" : "FREE")=="FREE") nh_free += nh_info._size; - if((nh_info._useflag == _USEDENTRY ? "USED" : "FREE")=="USED") nh_used += nh_info._size; - nh_total += nh_info._size; - } - heapstat0(heap_status); - return nh_free; -} - -void heapdump(void) -{ - struct _heapinfo fh_info, nh_info, h_info; - int heap_status; - size_t h_free, nh_free, fh_free, h_total, nh_total, fh_total, h_used, nh_used, fh_used; - byte scratch[1024],str[16]; - - HC_OpenDebug(); - - strcpy(scratch,"\n == default ==\n\n"); - write(heaphandle,scratch,strlen(scratch)); - h_info._pentry = NULL; - h_free=0; h_total=0; h_used=0; - for(;;) { - heap_status = _heapwalk( &h_info ); - if( heap_status != _HEAPOK ) break; - strcpy(scratch," "); strcat(scratch,(h_info._useflag == _USEDENTRY ? "USED" : "FREE")); strcat(scratch," block at "); ultoa((dword)h_info._pentry,str,16); strcat(scratch,str); strcat(scratch," of size "); ultoa(h_info._size,str,10); strcat(scratch,str); strcat(scratch,"\n"); - if((h_info._useflag == _USEDENTRY ? "USED" : "FREE")=="FREE") h_free += h_info._size; - if((h_info._useflag == _USEDENTRY ? "USED" : "FREE")=="USED") h_used += h_info._size; - h_total += h_info._size; - write(heaphandle,scratch,strlen(scratch)); - } - heapstat(heap_status, &scratch); - - //near - strcpy(scratch,"\n == near ==\n\n"); - write(heaphandle,scratch,strlen(scratch)); - nh_info._pentry = NULL; - nh_free=0; nh_total=0; nh_used=0; - for(;;) { - heap_status = _nheapwalk( &nh_info ); - if( heap_status != _HEAPOK ) break; - strcpy(scratch," "); strcat(scratch,(h_info._useflag == _USEDENTRY ? "USED" : "FREE")); strcat(scratch," block at "); ultoa((dword)h_info._pentry,str,16); strcat(scratch,str); strcat(scratch," of size "); ultoa(h_info._size,str,10); strcat(scratch,str); strcat(scratch,"\n"); -/* printf( " %s block at %Fp of size %4.4X\n", -(nh_info._useflag == _USEDENTRY ? "USED" : "FREE"), -nh_info._pentry, nh_info._size );*/ - if((nh_info._useflag == _USEDENTRY ? "USED" : "FREE")=="FREE") nh_free += nh_info._size; - if((nh_info._useflag == _USEDENTRY ? "USED" : "FREE")=="USED") nh_used += nh_info._size; - nh_total += nh_info._size; - write(heaphandle,scratch,strlen(scratch)); - } - heapstat(heap_status, &scratch); - - //far - strcpy(scratch,"\n == far ==\n\n"); - write(heaphandle,scratch,strlen(scratch)); - fh_info._pentry = NULL; - fh_free=0; fh_total=0; fh_used=0; - for(;;) { - heap_status = _fheapwalk( &fh_info ); - if( heap_status != _HEAPOK ) break; - strcpy(scratch," "); strcat(scratch,(h_info._useflag == _USEDENTRY ? "USED" : "FREE")); strcat(scratch," block at "); ultoa((dword)h_info._pentry,str,16); strcat(scratch,str); strcat(scratch," of size "); ultoa(h_info._size,str,10); strcat(scratch,str); strcat(scratch,"\n"); - /*printf( " %s block at %Fp of size %4.4X\n", -(fh_info._useflag == _USEDENTRY ? "USED" : "FREE"), -fh_info._pentry, fh_info._size );*/ - if((fh_info._useflag == _USEDENTRY ? "USED" : "FREE")=="FREE") fh_free += fh_info._size; - if((fh_info._useflag == _USEDENTRY ? "USED" : "FREE")=="USED") fh_used += fh_info._size; - fh_total += fh_info._size; - write(heaphandle,scratch,strlen(scratch)); - } - heapstat(heap_status, &scratch); - - strcpy(scratch,"\n"); - strcat(scratch,kittengets(2,0,"Memory Type Total Used Free\n")); - strcat(scratch,"---------------- -------- -------- --------\n"); - printmeminfoline(&scratch, "Default", h_total, h_used, h_free); - printmeminfoline(&scratch, "Near", nh_total, nh_used, nh_free); - printmeminfoline(&scratch, "Far", fh_total, fh_used, fh_free); - strcat(scratch,"---------------- -------- -------- --------\n"); - strcat(scratch,"coreleft = "); ultoa((dword)_coreleft(),str,10); strcat(scratch,str); strcat(scratch,"\n"); - strcat(scratch,"farcoreleft = "); ultoa((dword)_farcoreleft(),str,10); strcat(scratch,str); strcat(scratch,"\n"); - strcat(scratch,"GetFreeSize = "); ultoa((dword)GetFreeSize(),str,10); strcat(scratch,str); strcat(scratch,"\n"); - strcat(scratch,"GetNearFreeSize = "); ultoa((dword)GetNearFreeSize(),str,10); strcat(scratch,str); strcat(scratch,"\n"); - strcat(scratch,"GetFarFreeSize = "); ultoa((dword)GetFarFreeSize(),str,10); strcat(scratch,str); strcat(scratch,"\n"); - strcat(scratch,"memavl = "); ultoa((dword)_memavl(),str,10); strcat(scratch,str); strcat(scratch,"\n"); - strcat(scratch,"stackavail = "); ultoa((dword)stackavail(),str,10); strcat(scratch,str); strcat(scratch,"\n"); - write(heaphandle,scratch,strlen(scratch)); - HC_CloseDebug(); -} - -void heapstat(int heap_status, byte *str) -{ - switch( heap_status ) { - case _HEAPEND: - strcpy((str),"OK - end of heap\n"); - break; - case _HEAPEMPTY: - strcpy((str),"OK - heap is empty\n"); - - break; - case _HEAPBADBEGIN: - strcpy((str),"ERROR - heap is damaged\n"); - break; - case _HEAPBADPTR: - strcpy((str),"ERROR - bad pointer to heap\n"); - break; - case _HEAPBADNODE: - strcpy((str),"ERROR - bad node in heap\n"); - } - write(heaphandle,(str),strlen((str))); -} - -void heapstat0(int heap_status) -{ - switch( heap_status ) { - case _HEAPEND: - //printf("OK - end of heap\n"); - break; - case _HEAPEMPTY: - //printf("OK - heap is empty\n"); - - break; - case _HEAPBADBEGIN: - printf("ERROR - heap is damaged\n"); - break; - case _HEAPBADPTR: - printf("ERROR - bad pointer to heap\n"); - break; - case _HEAPBADNODE: - printf("ERROR - bad node in heap\n"); - } -} -#endif -/* -============================ -= -= HC_OpenDebug / HC_CloseDebug -= -= Opens a binary file with the handle "heaphandle" -= -============================ -*/ -void HC_OpenDebug() -{ - unlink("heap.16"); - heaphandle = open("heap.16", O_CREAT | O_WRONLY | O_TEXT); -} - -void HC_CloseDebug() -{ - close(heaphandle); -} diff --git a/16/exmmtest/src/lib/16_hc.h b/16/exmmtest/src/lib/16_hc.h deleted file mode 100644 index db0265a8..00000000 --- a/16/exmmtest/src/lib/16_hc.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Project 16 Source Code~ - * Copyright (C) 2012-2015 sparky4 & pngwen & andrius4669 - * - * This file is part of Project 16. - * - * Project 16 is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * Project 16 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see , or - * write to the Free Software Foundation, Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA. - * - */ -/* - heap test stuff -*/ - -#ifndef __16HC__ -#define __16HC__ - -#include "src/lib/16_head.h" - -extern int heaphandle; - -#ifdef __BORLANDC__ -void * LargestFreeBlock(size_t* Size); -#endif -#ifdef __WATCOMC__ -void __near* LargestFreeBlock(size_t* Size); -#endif -size_t _coreleft(void); -void far* LargestFarFreeBlock(size_t* Size); -size_t _farcoreleft(void); -void huge* LargestHugeFreeBlock(size_t* Size); -size_t _hugecoreleft(void); -//void __based(__self)* LargestBasedFreeBlock(size_t* Size); -//size_t _basedcoreleft(void); -size_t GetFreeSize(void); -size_t GetFarFreeSize(void); -size_t GetNearFreeSize(void); -void heapdump(void); -void heapstat(int heap_status, byte *str); -void heapstat0(int heap_status); - -void HC_OpenDebug(); -void HC_CloseDebug(); - -#endif /* __16HC__ */ diff --git a/16/exmmtest/src/lib/16_head.c b/16/exmmtest/src/lib/16_head.c deleted file mode 100644 index 7dd53866..00000000 --- a/16/exmmtest/src/lib/16_head.c +++ /dev/null @@ -1,156 +0,0 @@ -/* Project 16 Source Code~ - * Copyright (C) 2012-2015 sparky4 & pngwen & andrius4669 - * - * This file is part of Project 16. - * - * Project 16 is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * Project 16 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see , or - * write to the Free Software Foundation, Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA. - * - */ - -#include "src/lib/16_head.h" - -/* Function: Wait ********************************************************** -* -* Parameters: wait - time in microseconds -* -* Description: pauses for a specified number of microseconds. -* -*/ -void wait(clock_t wait){ - clock_t goal; - - if(!wait) return; - - goal = wait + clock(); - while((goal > clock()) && !kbhit()) ; -} /* End of wait */ - -long int -filesize(FILE *fp) -{ - long int save_pos, size_of_file; - - save_pos = ftell(fp); - fseek(fp, 0L, SEEK_END); - size_of_file = ftell(fp); - fseek(fp, save_pos, SEEK_SET); - return(size_of_file); -} - -void printmeminfoline(byte *strc, const byte *pee, size_t h_total, size_t h_used, size_t h_free) -{ - byte str[64]; - strcat(strc,pee); strcat(strc," "); ultoa((dword)h_total,str,10); strcat(strc,str); strcat(strc," "); ultoa((dword)h_used,str,10); strcat(strc,str); strcat(strc," "); ultoa((dword)h_free,str,10); strcat(strc,str); - strcat(strc,"\n"); -} - -/////////////////////////////////////////////////////////////////////////// -// -// US_CheckParm() - checks to see if a string matches one of a set of -// strings. The check is case insensitive. The routine returns the -// index of the string that matched, or -1 if no matches were found -// -/////////////////////////////////////////////////////////////////////////// -int -US_CheckParm(char *parm,char **strings) -{ - char cp,cs, - *p,*s; - int i; - - while (!isalpha(*parm)) // Skip non-alphas - parm++; - - for (i = 0;*strings && **strings;i++) - { - for (s = *strings++,p = parm,cs = cp = 0;cs == cp;) - { - cs = *s++; - if (!cs) - return(i); - cp = *p++; - - if (isupper(cs)) - cs = tolower(cs); - if (isupper(cp)) - cp = tolower(cp); - } - } - return(-1); -} - -/* -========================== -= -= Quit -= -========================== -*/ - -/*void Quit(char *error, ...) -{ - short exit_code=0; - unsigned finscreen; - - va_list ap; - - va_start(ap,error); - -#ifndef CATALOG - if (!error) - { - CA_SetAllPurge (); - CA_CacheGrChunk (PIRACY); - finscreen = (unsigned)grsegs[PIRACY]; - } -#endif - - //ShutdownId (); - - if (error && *error) - { - vprintf(error,ap); - exit_code = 1; - } -#ifndef CATALOG - else - if (!NoWait) - { - movedata (finscreen,0,0xb800,0,4000); - bioskey (0); - } -#endif - - va_end(ap); - -#ifndef CATALOG - if (!error) - { - _argc = 2; - _argv[1] = "LAST.SHL"; - _argv[2] = "ENDSCN.SCN"; - _argv[3] = NULL; - if (execv("LOADSCN.EXE", _argv) == -1) - { - clrscr(); - puts("Couldn't find executable LOADSCN.EXE.\n"); - exit(1); - } - } -#endif - - exit(exit_code); -}*/ diff --git a/16/exmmtest/src/lib/16_head.h b/16/exmmtest/src/lib/16_head.h deleted file mode 100644 index e6e590b4..00000000 --- a/16/exmmtest/src/lib/16_head.h +++ /dev/null @@ -1,196 +0,0 @@ -/* Project 16 Source Code~ - * Copyright (C) 2012-2015 sparky4 & pngwen & andrius4669 - * - * This file is part of Project 16. - * - * Project 16 is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * Project 16 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see , or - * write to the Free Software Foundation, Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA. - * - */ - -#if !defined(__LARGE__) && !defined(__COMPACT__) && !defined(__HUGE__) -#error Invalid memory model for compiling project 16 -#endif - -#if !defined(__i86__) && defined(__i386__) -#error i8088 only -#endif - -#ifndef _LIBHEAD_H_ -#define _LIBHEAD_H_ -#include -#include -#include -#include // just for wait -#include // just for wait -#include -#include -#include -#include -#include -#include -#include -#ifdef __WATCOMC__ -#include -#include -#include -#endif -#include "src/lib/nyan/kitten.h" -#include "src/lib/types.h" - -//0000 test type def wwww -/*struct list { - struct list __based(__self) *next; - int value; -};*/ - -/* Control codes for all keys on the keyboard */ -//here temperarly -/* -#define KEY_A (0x1E) -#define KEY_B (0x30) -#define KEY_C (0x2E) -#define KEY_D (0x20) -#define KEY_E (0x12) -#define KEY_F (0x21) -#define KEY_G (0x22) -#define KEY_H (0x23) -#define KEY_I (0x17) -#define KEY_J (0x24) -#define KEY_K (0x25) -#define KEY_L (0x26) -#define KEY_M (0x32) -#define KEY_N (0x31) -#define KEY_O (0x18) -#define KEY_P (0x19) -#define KEY_Q (0x10) -#define KEY_R (0x13) -#define KEY_S (0x1F) -#define KEY_T (0x14) -#define KEY_U (0x16) -#define KEY_V (0x2F) -#define KEY_W (0x11) -#define KEY_X (0x2D) -#define KEY_Y (0x15) -#define KEY_Z (0x2C) -#define KEY_1 (0x02) -#define KEY_2 (0x03) -#define KEY_3 (0x04) -#define KEY_4 (0x05) -#define KEY_5 (0x06) -#define KEY_6 (0x07) -#define KEY_7 (0x08) -#define KEY_8 (0x09) -#define KEY_9 (0x0A) -#define KEY_0 (0x0B) -#define KEY_DASH (0x0C) // -_ -#define KEY_EQUAL (0x0D) // =+ -#define KEY_LBRACKET (0x1A) // [{ -#define KEY_RBRACKET (0x1B) // ]} -#define KEY_SEMICOLON (0x27) // ;: -#define KEY_RQUOTE (0x28) // '" -#define KEY_LQUOTE (0x29) // `~ -#define KEY_PERIOD (0x33) // .> -#define KEY_COMMA (0x34) // ,< -#define KEY_SLASH (0x35) // /? -#define KEY_BACKSLASH (0x2B) // \| -#define KEY_F1 (0x3B) -#define KEY_F2 (0x3C) -#define KEY_F3 (0x3D) -#define KEY_F4 (0x3E) -#define KEY_F5 (0x3F) -#define KEY_F6 (0x40) -#define KEY_F7 (0x41) -#define KEY_F8 (0x42) -#define KEY_F9 (0x43) -#define KEY_F10 (0x44) -#define KEY_ESC (0x01) -#define KEY_BACKSPACE (0x0E) -#define KEY_TAB (0x0F) -#define KEY_ENTER (0x1C) -#define KEY_CONTROL (0x1D) -#define KEY_LSHIFT (0x2A) -#define KEY_RSHIFT (0x36) -#define KEY_PRTSC (0x37) -#define KEY_ALT (0x38) -#define KEY_SPACE (0x39) -#define KEY_CAPSLOCK (0x3A) -#define KEY_NUMLOCK (0x45) -#define KEY_SCROLLLOCK (0x46) -#define KEY_HOME (0x47) -#define KEY_UP (0x48) -#define KEY_PGUP (0x49) -#define KEY_MINUS (0x4A) -#define KEY_LEFT (0x4B) -#define KEY_CENTER (0x4C) -#define KEY_RIGHT (0x4D) -#define KEY_PLUS (0x4E) -#define KEY_END (0x4F) -#define KEY_DOWN (0x50) -#define KEY_PGDOWN (0x51) -#define KEY_INS (0x52) -#define KEY_DEL (0x53) - -#define KEY_LWIN (0x73) -#define KEY_RWIN (0x74) -#define KEY_MENU (0x75) -*/ - -static dword far* clockdw= (dword far*) 0x046C; /* 18.2hz clock */ -extern int profilehandle,debughandle; //make it into game global - -#define __DEBUG__ - -#define nil ((void *)0) - -#ifdef __WATCOMC__ -#define peekb(segm,ofs) (*(byte far*)MK_FP((segm),(ofs))) -#define peekw(segm,ofs) (*(word far*)MK_FP((segm),(ofs))) -#define pokeb(segm,ofs,value) (peekb((segm),(ofs)) = (byte)(value)) -#define pokew(segm,ofs,value) (peekw((segm),(ofs)) = (word)(value)) - -typedef union REGPACK regs_t; -#endif - -typedef enum {false,true} boolean; - -#ifdef __WATCOMC__ -typedef void __based(__self) * memptr; -#endif -#ifdef __BORLANDC__ -typedef void _seg * memptr; -#endif -typedef struct -{ - int old_mode; //old video mode before game! - word frames_per_second; - clock_t t; - dword tiku; - word far* clock; - //handles for log files of the game gose here if wwww - //int heaphandle; -} global_game_variables_t; - -/* local function */ -void wait(clock_t wait); - -long int filesize(FILE *fp); -void printmeminfoline(byte *strc, const byte *pee, size_t h_total, size_t h_used, size_t h_free); -int US_CheckParm(char *parm,char **strings); - -extern void CA_OpenDebug (void); -extern void CA_CloseDebug (void); - -#endif/*_LIBHEAD_H_*/ diff --git a/16/exmmtest/src/lib/16_mm.c b/16/exmmtest/src/lib/16_mm.c deleted file mode 100644 index d3ed8c23..00000000 --- a/16/exmmtest/src/lib/16_mm.c +++ /dev/null @@ -1,1728 +0,0 @@ -/* Catacomb Apocalypse Source Code - * Copyright (C) 1993-2014 Flat Rock Software - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -// NEWMM.C - -/* -============================================================================= - - ID software memory manager - -------------------------- - -Primary coder: John Carmack - -RELIES ON ---------- -Quit (char *error) function - - -WORK TO DO ----------- -MM_SizePtr to change the size of a given pointer - -Multiple purge levels utilized - -EMS / XMS unmanaged routines - -============================================================================= -*/ -/* - -Open Watcom port by sparky4 - -*/ -#include "src/lib/16_mm.h" -#pragma hdrstop - -#pragma warn -pro -#pragma warn -use - -/* -============================================================================= - - GLOBAL VARIABLES - -============================================================================= -*/ - -void (* beforesort) (void); -void (* aftersort) (void); -void (* XMSaddr) (void); // far pointer to XMS driver - -/* -============================================================================= - - LOCAL VARIABLES - -============================================================================= -*/ - -static char *ParmStringsexmm[] = {"noems","noxms",""}; - -/* -====================== -= -= MML_CheckForEMS -= -= Routine from p36 of Extending DOS -= -======================= -*/ - -boolean MML_CheckForEMS(void) -{ - boolean emmcfems; - static char emmname[] = "EMMXXXX0"; //fix by andrius4669 -// mov dx,OFFSET emmname - __asm { - //LEA DX, emmname //fix by andrius4669 - mov dx,OFFSET emmname //fix by andrius4669 - mov ax,0x3d00 - int 0x21 // try to open EMMXXXX0 device - jc error - - mov bx,ax - mov ax,0x4400 - - int 0x21 // get device info - jc error - - and dx,0x80 - jz error - - mov ax,0x4407 - - int 0x21 // get status - jc error - or al,al - jz error - - mov ah,0x3e - int 0x21 // close handle - jc error - // - // EMS is good - // - mov emmcfems,1 - jmp End -#ifdef __BORLANDC__ - } -#endif - error: -#ifdef __BORLANDC__ - __asm { -#endif - // - // EMS is bad - // - mov emmcfems,0 -#ifdef __BORLANDC__ - } -#endif - End: -#ifdef __WATCOMC__ - } -#endif - return(emmcfems); -} - - -/* -====================== -= -= MML_SetupEMS -= -======================= -*/ - -byte MML_SetupEMS(mminfo_t *mm) -{ - byte str[160]; - byte err; - boolean errorflag=false; - - unsigned int EMSVer = 0; - //byte EMS_status; - unsigned totalEMSpages,freeEMSpages,EMSpageframe,EMSpagesmapped,EMShandle; - totalEMSpages = freeEMSpages = EMSpageframe = EMSpagesmapped = 0; - - __asm { - mov ah,EMS_STATUS - int EMS_INT // make sure EMS hardware is present - or ah,ah - //mov [EMS_status],ah - jnz error - - mov ah,EMS_VERSION - int EMS_INT - or ah,ah - jnz error - mov [EMSVer],ax // set EMSVer - cmp al,0x32 // only work on ems 3.2 or greater - jb error - - mov ah,EMS_GETFRAME - int EMS_INT // find the page frame address - or ah,ah - jnz error - mov [EMSpageframe],bx - - mov ah,EMS_GETPAGES - int EMS_INT // find out how much EMS is there - or ah,ah - jnz error - mov [totalEMSpages],dx - mov [freeEMSpages],bx - or bx,bx - jz noEMS // no EMS at all to allocate - //EXPAND DONG!!!! - cmp [EMSVer],0x40 - jb low - cmp bx,[freeEMSpages] - jle getpages - mov bx,[freeEMSpages] - jmp getpages -#ifdef __BORLANDC__ - } -#endif - low: -#ifdef __BORLANDC__ - __asm { -#endif - cmp bx,4 - jle getpages // there is only 1,2,3,or 4 pages - mov bx,4 // we can't use more than 4 pages -#ifdef __BORLANDC__ - } -#endif - getpages: -#ifdef __BORLANDC__ - __asm { -#endif - mov [EMSpagesmapped],bx - mov ah,EMS_ALLOCPAGES // allocate up to 64k of EMS - int EMS_INT - or ah,ah - jnz error - mov [EMShandle],dx - jmp End -#ifdef __BORLANDC__ - } -#endif - error: -#ifdef __BORLANDC__ - __asm { -#endif - mov err,ah - mov errorflag,1 - jmp End -#ifdef __BORLANDC__ - } -#endif -noEMS: -End: -#ifdef __WATCOMC__ - } -#endif - if(errorflag==true) - { - //err = CPURegs.h.ah; - strcpy(str,"MM_SetupEMS: EMS error "); - //itoa(err,str2,16); - MM_EMSerr(str, err); - printf("%s\n",str); - return err; - } - mm->totalEMSpages=totalEMSpages; - mm->freeEMSpages=freeEMSpages; - mm->EMSpageframe=EMSpageframe; - mm->EMSpagesmapped=EMSpagesmapped; - mm->EMShandle=EMShandle; - mm->EMSVer=EMSVer; - return 0; -} - - -/* -====================== -= -= MML_ShutdownEMS -= -======================= -*/ - -void MML_ShutdownEMS(mminfo_t *mm) -{ - boolean errorflag=false; - unsigned EMShandle=mm->EMShandle; - - if(!EMShandle) - return; - __asm { - mov ah,EMS_FREEPAGES - mov dx,[EMShandle] - int EMS_INT - or ah,ah - jz ok - mov errorflag,1 -#ifdef __BORLANDC__ - } -#endif - ok: -#ifdef __WATCOMC__ - } -#endif - if(errorflag==true) printf("MML_ShutdownEMS: Error freeing EMS!\n"); //++++ add something -} - -/* -==================== -= -= MM_MapEMS -= -= Maps the 64k of EMS used by memory manager into the page frame -= for general use. This only needs to be called if you are keeping -= other things in EMS. -= -==================== -*/ - -byte MM_MapEMS(mminfo_t *mm, mminfotype *mmi) -{ - byte str[160]; - unsigned EMShandle; - byte err; - boolean errorflag=false; - int i; - EMShandle=mm->EMShandle; - - for (i=0;i<4/*MAPPAGES*/;i++) - { - __asm { - mov ah,EMS_MAPPAGE - mov bx,[i] // logical page - mov al,bl // physical page - mov dx,[EMShandle] // handle - int EMS_INT - or ah,ah - jnz error - jmp End -#ifdef __BORLANDC__ - } -#endif - error: -#ifdef __BORLANDC__ - __asm { -#endif - mov err,ah - mov errorflag,1 -#ifdef __BORLANDC__ - } -#endif - End: -#ifdef __WATCOMC__ - } -#endif - if(errorflag==true) - { - //err = CPURegs.h.ah; - strcpy(str,"MM_MapEMS: EMS error "); - //itoa(err,str2,16); - MM_EMSerr(str, err); - printf("%s\n",str); - //printf("FACK! %x\n", err); - return err; - } - } - mmi->EMSmem = (i)*0x4000lu; - return 0; -} - -byte MM_MapXEMS(mminfo_t *mm, mminfotype *mmi) -{ -//SUB EMS.MapXPages (PhysicalStart, LogicalStart, NumPages, Handle) - - //Maps up to 4 logical EMS pages to physical pages in the page frame, where: - //PhysicalStart = Physical page first logical page is mapped to - //LogicalStart = First logical page to map - //NumPages = Number of pages to map (1 to 4) - //Handle = EMS handle logical pages are allocated to - - /*//Create a buffer containing the page information -// FOR x = 0 TO NumPages - 1 -// MapInfo$ = MapInfo$ + MKI$(LogicalStart + x) + MKI$(PhysicalStart + x) -// NEXT*/ - -// Regs.ax = 0x5000 //Map the pages in the buffer -// Regs.cx = NumPages //to the pageframe -// Regs.dx = Handle -// Regs.ds = VARSEG(MapInfo$) -// Regs.si = SADD(MapInfo$) -// InterruptX 0x67, Regs, Regs -// EMS.Error = (Regs.ax AND 0xFF00&) \ 0x100 //Store the status code - -//END SUB - byte str[160]; - byte err; - word EMShandle; - boolean errorflag=false; - int i; - EMShandle=mm->EMShandle; - - if(mm->EMSVer<0x40) - return 5; - - for (i=0;iEMSmem = (i)*0x4000lu; - return 0; -} - -//========================================================================== - -/* -====================== -= -= MML_CheckForXMS -= -= Check for XMM driver -= -======================= -*/ - -boolean MML_CheckForXMS(mminfo_t *mm) -{ - boolean errorflag=false; - mm->numUMBs = 0; - - __asm { - mov ax,0x4300 - int 0x2f // query status of installed diver - cmp al,0x80 - je good - mov errorflag,1 -#ifdef __BORLANDC__ - } -#endif - good: -#ifdef __WATCOMC__ - } -#endif - if(errorflag==true) return false; - else return true; -} - - -/* -====================== -= -= MML_SetupXMS -= -= Try to allocate all upper memory block -= -======================= -*/ - -void MML_SetupXMS(mminfo_t *mm, mminfotype *mmi) -{ - unsigned base,size; - -getmemory: - __asm { - mov ax,0x4310 - int 0x2f - mov [WORD PTR XMSaddr],bx - mov [WORD PTR XMSaddr+2],es // function pointer to XMS driver - - mov ah,XMS_ALLOCUMB - mov dx,0xffff // try for largest block possible - //mov ax,dx // Set available Kbytes. - call [DWORD PTR XMSaddr] - or ax,ax - jnz gotone - - cmp bl,0xb0 // error: smaller UMB is available - jne done; - - mov ah,XMS_ALLOCUMB - call [DWORD PTR XMSaddr] // DX holds largest available UMB - or ax,ax - jz done // another error... -#ifdef __BORLANDC__ - } -#endif - gotone: -#ifdef __BORLANDC__ - __asm { -#endif - mov [base],bx - mov [size],dx -#ifdef __BORLANDC__ - } -#endif - done: -#ifdef __WATCOMC__ - } -#endif - printf("base=%u ", base); printf("size=%u\n", size); - MML_UseSpace(base,size, mm); - mmi->XMSmem += size*16; - mm->UMBbase[mm->numUMBs] = base; - mm->numUMBs++; - if(mm->numUMBs < MAXUMBS) - goto getmemory; -} - - -/* -====================== -= -= MML_ShutdownXMS -= -====================== -*/ - -void MML_ShutdownXMS(mminfo_t *mm) -{ - int i; - unsigned base; - - for (i=0;inumUMBs;i++) - { - base = mm->UMBbase[i]; - __asm { - mov ah,XMS_FREEUMB - mov dx,[base] - call [DWORD PTR XMSaddr] - } - } -} - -//========================================================================== - -/* -====================== -= -= MML_UseSpace -= -= Marks a range of paragraphs as usable by the memory manager -= This is used to mark space for the near heap, far heap, ems page frame, -= and upper memory blocks -= -====================== -*/ - -void MML_UseSpace(/*d*/word segstart, dword seglength, mminfo_t *mm) -{ - mmblocktype huge *scan,huge *last; - word segm; - dword oldend; - dword extra; - - scan = last = mm->mmhead; - mm->mmrover = mm->mmhead; // reset rover to start of memory - -// -// search for the block that contains the range of segments -// - while(scan->start+scan->length < segstart) - { - last = scan; - scan = scan->next; - } - - //find out how many blocks it spans! - if(seglength>0xffffu) - { -// segm=seglength/0x4000u; - segm=(word)seglength/0xffffu; - } - else segm=1; - - //++++emsver stuff! - if(segm>1/*extra>0xfffflu*/) - { - /*__asm - { - push ds - mov ax,ds - inc ax - mov ds,ax - }*/ - - -//MML_UseSpace(?segstart?, ?length?, mm); - - /*__asm - { - pop ds - }*/ - //printf("MML_UseSpace: Segment spans two blocks!\n"); - } - -// -// take the given range out of the block -// - oldend = scan->start + scan->length; - extra = oldend - (segstart+seglength); -/* -printf("segm=%u ", segm); -printf("ex=%lu ", extra); -printf("start+seglen=%lu ", segstart+seglength); -printf("len=%u ", scan->length); -printf("segsta=%x ", segstart); -printf("seglen=%lu\n", seglength); -*/ -//segu: -//++++todo: linked list of segment! -//printf("segm=%lu\n", segm); - if(segstart == scan->start) - { - last->next = scan->next; // unlink block - FREEBLOCK(scan); - scan = last; - } - else - scan->length = segstart-scan->start; // shorten block - -// segm--; - - if(extra > 0) - { - //MM_GetNewBlock(mm); - GETNEWBLOCK; - mm->mmnew->next = scan->next; - scan->next = mm->mmnew; - mm->mmnew->start = segstart+seglength; - mm->mmnew->length = extra; - mm->mmnew->attributes = LOCKBIT; - }//else if(segm>0) goto segu; - -} - -//========================================================================== - -/* -==================== -= -= MML_ClearBlock -= -= We are out of blocks, so free a purgable block -= -==================== -*/ - -void MML_ClearBlock(mminfo_t *mm) -{ - mmblocktype huge *scan,huge *last; - - scan = mm->mmhead->next; - - while(scan) - { - if(!(scan->attributes&LOCKBIT) && (scan->attributes&PURGEBITS)) - { - MM_FreePtr(scan->useptr, mm); - return; - } - scan = scan->next; - } - - printf("MM_ClearBlock: No purgable blocks!\n"); -} - - -//========================================================================== - -/* -=================== -= -= MM_Startup -= -= Grabs all space from turbo with malloc/farmalloc -= Allocates bufferseg misc buffer -= -=================== -*/ - -void MM_Startup(mminfo_t *mm, mminfotype *mmi) -{ - int i; - dword length,seglength; - //dword length; word seglength; - void huge *start; - word segstart;//,endfree; - -// if(mm->mmstarted) -// MM_Shutdown(mm); - - mm->mmstarted = true; - mm->bombonerror = true; - mm->endid=0; - -// -// set up the linked list (everything in the free list; -// - //printf(" linked list making!\n"); - mm->mmhead = NULL; - mm->mmfree = &(mm->mmblocks[0]); - for(i=0;immblocks[i].next = &(mm->mmblocks[i+1]); - } - mm->mmblocks[i].next = NULL; - -// -// locked block of all memory until we punch out free space -// - //printf(" newblock making!\n"); - //MM_GetNewBlock(mm); - GETNEWBLOCK; - mm->mmhead = mm->mmnew; // this will allways be the first node - mm->mmnew->start = 0; - mm->mmnew->length = 0xffff; - mm->mmnew->attributes = LOCKBIT; - mm->mmnew->next = NULL; - mm->mmrover = mm->mmhead; - -// -// get all available near conventional memory segments -// -// printf(" nearheap making!\n"); -#ifdef __WATCOMC__ - _nheapgrow(); - length=(dword)_memavl();//(dword)GetFreeSize(); - start = (void huge *)(mm->nearheap = _nmalloc(length)); -#endif -#ifdef __BORLANDC__ - length=coreleft(); - start = (void huge *)(mm->nearheap = malloc(length)); -#endif - length -= 16-(FP_OFF(start)&15); - length -= SAVENEARHEAP; - seglength = length / 16; // now in paragraphs - segstart = FP_SEG(start)+(FP_OFF(start)+15)/16; - MML_UseSpace(segstart,seglength, mm); - mmi->nearheap = length; - printf("start=%Fp segstart=%x seglen=%lu len=%lu\n", start, segstart, seglength, length); - //heapdump(); - -// -// get all available far conventional memory segments -// -// printf(" farheap making!\n"); -#ifdef __WATCOMC__ - _fheapgrow(); - length=(dword)GetFarFreeSize();//0xffffUL*4UL; -#endif -#ifdef __BORLANDC__ - length=farcoreleft(); -#endif - start = mm->farheap = _fmalloc(length); - //start = mm->farheap = halloc(length, 1); - length -= 16-(FP_OFF(start)&15); - length -= SAVEFARHEAP; - seglength = length / 16; // now in paragraphs - segstart = FP_SEG(start)+(FP_OFF(start)+15)/16; - MML_UseSpace(segstart,seglength, mm); - mmi->farheap = length; - printf("start=%Fp segstart=%x seglen=%lu len=%lu\n", start, segstart, seglength, length); - //heapdump(); - - mmi->mainmem = mmi->nearheap + mmi->farheap; - -// getch(); - -//goto xmsskip; - -// -// detect EMS and allocate up to 64K at page frame -// -//printf(" EMS1\n"); -//printf("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); //bug! - mmi->EMSmem = 0; - for(i = 1;i < -#ifdef __WATCOMC__ - __argc -#endif -#ifdef __BORLANDC__ - _argc -#endif - ;i++) - { - if(US_CheckParm( -#ifdef __WATCOMC__ - __argv[i] -#endif -#ifdef __BORLANDC__ - _argv[i] -#endif - ,ParmStringsexmm) == 0) - goto emsskip; // param NOEMS - } -//printf("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); //bug! - if(MML_CheckForEMS()) - { -//printf(" EMS2\n"); -//printf("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); //bug! - MML_SetupEMS(mm); // allocate space -//printf(" EMS3\n"); -//printf("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); //bug! - //TODO: EMS4! AND EMS 3.2 MASSIVE DATA HANDLMENT! - MML_UseSpace(mm->EMSpageframe,(MAPPAGES)*0x4000lu, mm); -//printf("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); //bug! -//printf(" EMS4\n"); - //if(mm->EMSVer<0x40) - MM_MapEMS(mm, mmi); // map in used pages - //else - //MM_MapXEMS(mm, mmi); // map in used pages - } - -mmi->XMSmem=0; -goto xmsskip; - -// -// detect XMS and get upper memory blocks -// -emsskip: - mmi->XMSmem = 0; - for(i = 1;i < -#ifdef __WATCOMC__ - __argc -#endif -#ifdef __BORLANDC__ - _argc -#endif - ;i++) - { - if(US_CheckParm( -#ifdef __WATCOMC__ - __argv[i] -#endif -#ifdef __BORLANDC__ - _argv[i] -#endif - ,ParmStringsexmm) == 0) - goto xmsskip; // param NOXMS - } -//printf("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); //bug! - if(MML_CheckForXMS(mm)) - { -//printf("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); //bug! -//printf(" XMS!\n"); - MML_SetupXMS(mm, mmi); // allocate as many UMBs as possible - } - -// -// allocate the misc buffer -// -xmsskip: - mm->mmrover = mm->mmhead; // start looking for space after low block - - MM_GetPtr(&(mm->bufferseg),BUFFERSIZE, mm, mmi); -} - -//========================================================================== - -/* -==================== -= -= MM_Shutdown -= -= Frees all conventional, EMS, and XMS allocated -= -==================== -*/ - -void MM_Shutdown(mminfo_t *mm) -{ - if(!(mm->mmstarted)) - return; - - _ffree(mm->farheap); printf(" far freed\n"); -#ifdef __WATCOMC__ - _nfree(mm->nearheap); printf(" near freed\n"); -#endif -#ifdef __BORLANDC__ - free(mm->nearheap); printf(" near freed\n"); -#endif - if(MML_CheckForEMS()){ MML_ShutdownEMS(mm); printf(" EMS freed\n"); } - if(MML_CheckForXMS(mm)){ MML_ShutdownXMS(mm); printf(" XMS freed\n"); } -} - -//========================================================================== - -/* -==================== -= -= MM_GetPtr -= -= Allocates an unlocked, unpurgable block -= -==================== -*/ - -void MM_GetPtr(memptr *baseptr,dword size, mminfo_t *mm, mminfotype *mmi) -{ - mmblocktype huge *scan,huge *lastscan,huge *endscan,huge *purge,huge *next; - int search; - dword needed; - word startseg; - - needed = (size+15)/16; // convert size from bytes to paragraphs -printf("."); //0000 - //MM_GetNewBlock(mm); - GETNEWBLOCK; // fill in start and next after a spot is found - mm->mmnew->length = needed; - mm->mmnew->useptr = baseptr; - mm->mmnew->attributes = BASEATTRIBUTES; -printf("."); //0000 - for(search = 0; searchendid; search++) - { -printf(" [case]"); //0000 - // - // first search: try to allocate right after the rover, then on up - // second search: search from the head pointer up to the rover - // third search: compress memory, then scan from start - if(search == 1 && mm->mmrover == mm->mmhead) - search++; - - switch(search) - { - case 0: -printf("0 "); //0000 - lastscan = mm->mmrover; - scan = mm->mmrover->next; - endscan = NULL; - break; - case 1: -printf("1 "); //0000 - lastscan = mm->mmhead; - scan = mm->mmhead->next; - endscan = mm->mmrover; - break; - case 2: -printf("2 "); //0000 - MM_SortMem(mm); - lastscan = mm->mmhead; - scan = mm->mmhead->next; - endscan = NULL; - break; - } - - startseg = lastscan->start + (word)lastscan->length; - - while(scan != endscan) - { -//printf(","); //0000 - if(scan->start - startseg >= needed) - { -printf("."); //0000 - // - // got enough space between the end of lastscan and - // the start of scan, so throw out anything in the middle - // and allocate the new block - // - purge = lastscan->next; - lastscan->next = mm->mmnew; - mm->mmnew->start = *(word *)baseptr = startseg; - mm->mmnew->next = scan; - while(purge != scan) - { // free the purgable block -printf(" freeing block~\n"); //0000 - next = purge->next; - FREEBLOCK(purge); - //MM_FreeBlock(purge, mm); - purge = next; // purge another if not at scan - } - mm->mmrover = mm->mmnew; - return; // good allocation! - } - - // - // if this block is purge level zero or locked, skip past it - // - if((scan->attributes & LOCKBIT) - || !(scan->attributes & PURGEBITS) ) - { -printf(" [lock] "); //0000 -printf("len=%lu ", scan->length); - lastscan = scan; - startseg = lastscan->start + (word)lastscan->length; - } - -printf("\n"); - scan=scan->next; // look at next line - } - } - - if (mm->bombonerror) - { -#ifdef __WATCOMC__ - heapdump(); -#endif - printf(OUT_OF_MEM_MSG,(size-mmi->nearheap)); - printf("for stability reasons the program will shut down! wwww\n"); - printf(" endid=%u\n",(mm->endid)); - MM_Shutdown(mm); - exit(-1); - } - else - mm->mmerror = true; -} - -//========================================================================== - -/* -==================== -= -= MM_FreePtr -= -= Allocates an unlocked, unpurgable block -= -==================== -*/ - -void MM_FreePtr(memptr *baseptr, mminfo_t *mm) -{ - mmblocktype huge *scan,huge *last; - - last = mm->mmhead; - scan = last->next; - - if(baseptr == mm->mmrover->useptr) // removed the last allocated block - mm->mmrover = mm->mmhead; - - while(scan->useptr != baseptr && scan) - { - last = scan; - scan = scan->next; - } - - if(!scan) - { - printf("MM_FreePtr: Block not found!\n"); - return; - } - - last->next = scan->next; - - FREEBLOCK(scan); - //MM_FreeBlock(scan, mm); -} -//========================================================================== - -/* -===================== -= -= MM_SetPurge -= -= Sets the purge level for a block (locked blocks cannot be made purgable) -= -===================== -*/ - -void MM_SetPurge(memptr *baseptr, int purge, mminfo_t *mm) -{ - mmblocktype huge *start; - - start = mm->mmrover; - - do - { - if(mm->mmrover->useptr == baseptr) - break; - - mm->mmrover = mm->mmrover->next; - - if(!mm->mmrover) - mm->mmrover = mm->mmhead; - else if(mm->mmrover == start) - { - printf("MM_SetPurge: Block not found!"); - return; - } - - } while(1); - - mm->mmrover->attributes &= ~PURGEBITS; - mm->mmrover->attributes |= purge; -} - -//========================================================================== - -/* -===================== -= -= MM_SetLock -= -= Locks / unlocks the block -= -===================== -*/ - -void MM_SetLock(memptr *baseptr, boolean locked, mminfo_t *mm) -{ - mmblocktype huge *start; - - start = mm->mmrover; - - do - { - if(mm->mmrover->useptr == baseptr) - break; - - mm->mmrover = mm->mmrover->next; - - if(!mm->mmrover) - mm->mmrover = mm->mmhead; - else if(mm->mmrover == start) - { - printf("MM_SetLock: Block not found!"); - return; - } - - } while(1); - - mm->mmrover->attributes &= ~LOCKBIT; - mm->mmrover->attributes |= locked*LOCKBIT; -} - -//========================================================================== - -/* -===================== -= -= MM_SortMem -= -= Throws out all purgable stuff and compresses movable blocks -= -===================== -*/ - -void MM_SortMem(mminfo_t *mm) -{ - mmblocktype huge *scan,huge *last,huge *next; - unsigned start,length,source,dest,oldborder; - int playing; - - // - // lock down a currently playing sound - // -/*++++ playing = SD_SoundPlaying (); - if(playing) - { - switch (SoundMode) - { - case sdm_PC: - playing += STARTPCSOUNDS; - break; - case sdm_AdLib: - playing += STARTADLIBSOUNDS; - break; - } - MM_SetLock(&(memptr)audiosegs[playing],true); - } - - - SD_StopSound();*/ -// oldborder = bordercolor; -// VW_ColorBorder (15); - - if(beforesort) - beforesort(); - - scan = mm->mmhead; - - last = NULL; // shut up compiler warning - - while(scan) - { - if(scan->attributes & LOCKBIT) - { - // - // block is locked, so try to pile later blocks right after it - // - start = scan->start + scan->length; - } - else - { - if(scan->attributes & PURGEBITS) - { - // - // throw out the purgable block - // - next = scan->next; - FREEBLOCK(scan); - //MM_FreeBlock(scan, mm); - last->next = next; - scan = next; - continue; - } - else - { - // - // push the non purgable block on top of the last moved block - // - if(scan->start != start) - { - length = scan->length; - source = scan->start; - dest = start; - while(length > 0xf00) - { - movedata(source,0,dest,0,0xf00*16); - length -= 0xf00; - source += 0xf00; - dest += 0xf00; - } - movedata(source,0,dest,0,length*16); - - scan->start = start; - *(unsigned *)scan->useptr = start; - } - start = scan->start + scan->length; - } - } - - last = scan; - scan = scan->next; // go to next block - } - - mm->mmrover = mm->mmhead; - - if(aftersort) - aftersort(); - -// VW_ColorBorder (oldborder); - -/*++++ if(playing) - MM_SetLock(&(memptr)audiosegs[playing],false);*/ -} - - -//========================================================================== - -//****#if 0 -/* -===================== -= -= MM_ShowMemory -= -===================== -*/ - -void MM_ShowMemory(/*page_t *page, */mminfo_t *mm) -{ - mmblocktype huge *scan; -//++++ word color; - word temp; - long end,owner; -//++++ word chx,chy; - byte scratch[160],str[16]; - -//**** VW_SetDefaultColors(); -//**** VW_SetLineWidth(40); -//++++mh temp = bufferofs; -//++++mh bufferofs = 0; -//**** VW_SetScreen (0,0); - - scan = mm->mmhead; - - end = -1; - -CA_OpenDebug (); - -//++++ chx=0; -//++++ chy=0; - - while(scan) - { -/*++++ if(scan->attributes & PURGEBITS) - color = 5; // dark purple = purgable - else - color = 9; // medium blue = non purgable - if(scan->attributes & LOCKBIT) - color = 12; // red = locked*/ - if(scan->start<=end) - { - //printf("); - write(debughandle,"\nMM_ShowMemory: Memory block order currupted!\n",strlen("\nMM_ShowMemory: Memory block order currupted!\n")); - //modexprint(&page, chx, chy, 1, 0, 24, "\nMM_ShowMemory: Memory block order currupted!\n"); - return; - } - end = scan->start+scan->length-1; -//++++ chy = scan->start/320; -//++++ chx = scan->start%320; - //modexhlin(page, scan->start, (unsigned)end, chy, color); - //for(chx=scan->start;chx+4>=(word)end;chx+=4) - //{ -//++++ modexClearRegion(page, chx, chy, 4, 4, color); - //} - -//++++ VW_Hlin(scan->start,(unsigned)end,0,color); - -//++++ VW_Plot(scan->start,0,15); -//++++ modexClearRegion(page, chx, chy, 4, 4, 15); - if(scan->next->start > end+1) -//++++ VW_Hlin(end+1,scan->next->start,0,0); // black = free - //for(chx=scan->next->start;chx+4>=(word)end+1;chx+=4) - //{ -//++++ chx+=scan->next->start; -//++++ modexClearRegion(page, chx, chy, 4, 4, 2); - //} - //modexhlin(page, end+1,scan->next->start, chy, 0); - -/* - end = scan->length-1; - y = scan->start/320; - x = scan->start%320; - VW_Hlin(x,x+end,y,color); - VW_Plot(x,y,15); - if (scan->next && scan->next->start > end+1) - VW_Hlin(x+end+1,x+(scan->next->start-scan->start),y,0); // black = free -*/ - -//****#if 0 -//printf("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); //bug! -strcpy(scratch,"Seg:"); -ultoa (scan->start,str,16); -strcat (scratch,str); -strcat (scratch,"\tSize:"); -ultoa ((dword)scan->length,str,10); -strcat (scratch,str); -strcat (scratch,"\tOwner:0x"); -owner = (unsigned)scan->useptr; -ultoa (owner,str,16); -strcat (scratch,str); -strcat (scratch,"\n"); -write(debughandle,scratch,strlen(scratch)); -//modexprint(page, chx, chy, 1, 0, 24, &scratch); -//++++chy+=4; -//fprintf(stdout, "%s", scratch); -//****#endif - - scan = scan->next; - } - -CA_CloseDebug (); - -//++++mh IN_Ack(); -//**** VW_SetLineWidth(64); -//++++mh bufferofs = temp; -} -//****#endif - -//========================================================================== - -/* -===================== -= -= MM_DumpData -= -===================== -*/ - -void MM_DumpData(mminfo_t *mm) -{ - mmblocktype huge *scan,huge *best; - long lowest,oldlowest; - word owner; - byte lock,purge; - FILE *dumpfile; - - - //++++free(mm->nearheap); - dumpfile = fopen ("mmdump.16","w"); - if (!dumpfile){ - printf("MM_DumpData: Couldn't open MMDUMP.16!\n"); - return; - } - - lowest = -1; - do - { - oldlowest = lowest; - lowest = 0xffff; - - scan = mm->mmhead; - while (scan) - { - owner = (word)scan->useptr; - - if (owner && owner oldlowest) - { - best = scan; - lowest = owner; - } - - scan = scan->next; - } - - if (lowest != 0xffff) - { - if (best->attributes & PURGEBITS) - purge = 'P'; - else - purge = '-'; - if (best->attributes & LOCKBIT) - lock = 'L'; - else - lock = '-'; - fprintf (dumpfile,"0x%p (%c%c) = %u\n" - ,(word)lowest,lock,purge,best->length); - } - - } while (lowest != 0xffff); - - fclose(dumpfile); - printf("MMDUMP.16 created.\n"); -} - -//========================================================================== - - -/* -====================== -= -= MM_UnusedMemory -= -= Returns the total free space without purging -= -====================== -*/ - -dword MM_UnusedMemory(mminfo_t *mm) -{ - dword free; - mmblocktype huge *scan; - - free = 0; - scan = mm->mmhead; - - while(scan->next) - { - free += scan->next->start - (scan->start + scan->length); - scan = scan->next; - } - -// return free*16l; - return free; -} - -//========================================================================== - - -/* -====================== -= -= MM_TotalFree -= -= Returns the total free space with purging -= -====================== -*/ - -dword MM_TotalFree(mminfo_t *mm) -{ - dword free; - mmblocktype huge *scan; - - free = 0; - scan = mm->mmhead; - - while(scan->next) - { - if((scan->attributes&PURGEBITS) && !(scan->attributes&LOCKBIT)) - free += scan->length; - free += scan->next->start - (scan->start + scan->length); - scan = scan->next; - } - -// return free*16l; - return free; -} - -//========================================================================== - -/* -===================== -= -= MM_Report -= -===================== -*/ - -void MM_Report(/*page_t *page, */mminfo_t *mm, mminfotype *mmi) -{ - if(MML_CheckForEMS()) - { - printf("EMM v%x.%x available\n", mm->EMSVer>>4,mm->EMSVer&0x0F); - printf("totalEMSpages=%u\n", mm->totalEMSpages); - printf("freeEMSpages=%u\n", mm->freeEMSpages); - printf("EMSpageframe=%x\n", mm->EMSpageframe); - } - if(MML_CheckForXMS(mm)) printf("XMSaddr=%X\n", *XMSaddr); - printf("near=%lu\n", mmi->nearheap); - printf("far=%lu\n", mmi->farheap); - printf("EMSmem=%lu\n", mmi->EMSmem); - printf("XMSmem=%lu\n", mmi->XMSmem); - printf("mainmem=%lu\n", mmi->mainmem); - printf("UnusedMemory=%lu\n", MM_UnusedMemory(mm)); - printf("TotalFree=%lu\n", MM_TotalFree(mm)); - //mmi->nearheap+mmi->farheap+ - printf("TotalUsed=%lu\n", mmi->mainmem+mmi->EMSmem+mmi->XMSmem);//+); -// printf("\n"); -// printf("UnusedMemory=%lu kb\n", MM_UnusedMemory()/10248); -// printf("TotalFree=%lu kb\n", MM_TotalFree()/10248); -} - -//========================================================================== - -/* -===================== -= -= MM_EMSerr -= -===================== -*/ - -void MM_EMSerr(byte *stri, byte err) -{ - //Returns a text string describing the error code in EMS.Error. - switch(err) - { - case 0x0: - strcat(stri, "successful"); - break; - case 0x80: - strcat(stri, "internal error"); - break; - case 0x81: - strcat(stri, "hardware malfunction"); - break; - case 0x82: - strcat(stri, "busy .. retry later"); - break; - case 0x83: - strcat(stri, "invalid handle"); - break; - case 0x84: - strcat(stri, "undefined function requested by application"); - break; - case 0x85: - strcat(stri, "no more handles available"); - break; - case 0x86: - strcat(stri, "error in save or restore of mapping context"); - break; - case 0x87: - strcat(stri, "insufficient memory pages in system"); - break; - case 0x88: - strcat(stri, "insufficient memory pages available"); - break; - case 0x89: - strcat(stri, "zero pages requested"); - break; - case 0x8A: - strcat(stri, "invalid logical page number encountered"); - break; - case 0x8B: - strcat(stri, "invalid physical page number encountered"); - break; - case 0x8C: - strcat(stri, "page-mapping hardware state save area is full"); - break; - case 0x8D: - strcat(stri, "save of mapping context failed"); - break; - case 0x8E: - strcat(stri, "restore of mapping context failed"); - break; - case 0x8F: - strcat(stri, "undefined subfunction"); - break; - case 0x90: - strcat(stri, "undefined attribute type"); - break; - case 0x91: - strcat(stri, "feature not supported"); - break; - case 0x92: - strcat(stri, "successful, but a portion of the source region has been overwritten"); - break; - case 0x93: - strcat(stri, "length of source or destination region exceeds length of region allocated to either source or destination handle"); - break; - case 0x94: - strcat(stri, "conventional and expanded memory regions overlap"); - break; - case 0x95: - strcat(stri, "offset within logical page exceeds size of logical page"); - break; - case 0x96: - strcat(stri, "region length exceeds 1 MB"); - break; - case 0x97: - strcat(stri, "source and destination EMS regions have same handle and overlap"); - break; - case 0x98: - strcat(stri, "memory source or destination type undefined"); - break; - case 0x9A: - strcat(stri, "specified alternate map register or DMA register set not supported"); - break; - case 0x9B: - strcat(stri, "all alternate map register or DMA register sets currently allocated"); - break; - case 0x9C: - strcat(stri, "alternate map register or DMA register sets not supported"); - break; - case 0x9D: - strcat(stri, "undefined or unallocated alternate map register or DMA register set"); - break; - case 0x9E: - strcat(stri, "dedicated DMA channels not supported"); - break; - case 0x9F: - strcat(stri, "specified dedicated DMA channel not supported"); - break; - case 0xA0: - strcat(stri, "no such handle name"); - break; - case 0xA1: - strcat(stri, "a handle found had no name, or duplicate handle name"); - break; - case 0xA2: - strcat(stri, "attempted to wrap around 1M conventional address space"); - break; - case 0xA3: - strcat(stri, "source array corrupted"); - break; - case 0xA4: - strcat(stri, "operating system denied access"); - break; - default: - strcat(stri, "undefined error"); - } -} - -//========================================================================== - -/* -===================== -= -= MM_BombOnError -= -===================== -*/ - -void MM_BombOnError(boolean bomb, mminfo_t *mm) -{ - mm->bombonerror = bomb; -} - -/*void MM_GetNewBlock(mminfo_t *mm) -{ - if(!mm->mmfree) - MML_ClearBlock(mm); - mm->mmnew=mm->mmfree; - mm->mmfree=mm->mmfree->next; - if(!(mm->mmnew=mm->mmfree)) - { - printf("MM_GETNEWBLOCK: No free blocks!\n"); - return; - } - mm->mmfree=mm->mmfree->next; - mm->endid++; //end of list -} - -void MM_FreeBlock(mmblocktype *x, mminfo_t *mm) -{ - x->useptr=NULL; - x->next=mm->mmfree; - mm->mmfree=x; - mm->endid--; //end of list -}*/ - -void MM_seguin(void) -{ - __asm { - push ds - mov ax,ds - inc ax - mov ds,ax - } -} - -void MM_segude(void) -{ - __asm { - pop ds - } -} - -/* -pull data from far and put it into ds var -mov ax,es:si -mov x,ax -*/ -/* -ss stack segment -sp top of stack -bp bottem of stack -*/ diff --git a/16/exmmtest/src/lib/16_mm.h b/16/exmmtest/src/lib/16_mm.h deleted file mode 100644 index 9a01862a..00000000 --- a/16/exmmtest/src/lib/16_mm.h +++ /dev/null @@ -1,202 +0,0 @@ -/* Catacomb Apocalypse Source Code - * Copyright (C) 1993-2014 Flat Rock Software - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -// ID_MM.H - -#ifndef __16_EXMM__ -#define __16_EXMM__ - -#include -#include -#include "src/lib/16_head.h" -#include "src/lib/16_hc.h" -//#include "src/lib/modex16.h" -//#include "src/lib/16_ca.h" -//++++mh #include "src/lib/16_in.h" - -#ifdef __DEBUG__ // 1 == Debug/Dev ; 0 == Production/final -#define OUT_OF_MEM_MSG "MM_GetPtr: Out of memory!\nYou were short :%lu bytes\n" -#else -#define OUT_OF_MEM_MSG "\npee\n" -#endif - -//#define GETNEWBLOCK {if(!(mmnew=mmfree))Quit("MM_GETNEWBLOCK: No free blocks!") ;mmfree=mmfree->next;} -#define GETNEWBLOCK {if(!mm->mmfree)MML_ClearBlock(mm);mm->mmnew=mm->mmfree;mm->mmfree=mm->mmfree->next;mm->endid++;} - -#define FREEBLOCK(x) {*x->useptr=NULL;x->next=mm->mmfree;mm->mmfree=x;mm->endid--;} - - -#define SAVENEARHEAP 0x200 // space to leave in data segment -#define SAVEFARHEAP 0//x400 // space to leave in far heap - -#define BUFFERSIZE 0x1000 // miscelanious, allways available buffer - -#define MAXBLOCKS 720 - - - -//-------- - -#define EMS_INT 0x67 - -#define EMS_STATUS 0x40 -#define EMS_GETFRAME 0x41 -#define EMS_GETPAGES 0x42 -#define EMS_ALLOCPAGES 0x43 -#define EMS_MAPPAGE 0x44 -#define EMS_MAPXPAGE 0x50 -#define EMS_FREEPAGES 0x45 -#define EMS_VERSION 0x46 - -//-------- - -#define XMS_VERSION 0x00 - -#define XMS_ALLOCHMA 0x01 -#define XMS_FREEHMA 0x02 - -#define XMS_GENABLEA20 0x03 -#define XMS_GDISABLEA20 0x04 -#define XMS_LENABLEA20 0x05 -#define XMS_LDISABLEA20 0x06 -#define XMS_QUERYA20 0x07 - -#define XMS_QUERYREE 0x08 -#define XMS_ALLOC 0x09 -#define XMS_FREE 0x0A -#define XMS_MOVE 0x0B -#define XMS_LOCK 0x0C -#define XMS_UNLOCK 0x0D -#define XMS_GETINFO 0x0E -#define XMS_RESIZE 0x0F - -#define XMS_ALLOCUMB 0x10 -#define XMS_FREEUMB 0x11 - -//========================================================================== - -typedef struct -{ - dword nearheap,farheap,EMSmem,XMSmem,mainmem; -} mminfotype; - -//========================================================================== - -extern void (* beforesort) (void); -extern void (* aftersort) (void); -extern void (* XMSaddr) (void); // far pointer to XMS driver - -//========================================================================== - -/* -============================================================================= - - LOCAL INFO - -============================================================================= -*/ - -#define LOCKBIT 0x80 // if set in attributes, block cannot be moved -#define PURGEBITS 3 // 0-3 level, 0= unpurgable, 3= purge first -#define PURGEMASK 0xfffc -#define BASEATTRIBUTES 0 // unlocked, non purgable - -#define MAXUMBS 12 -#define MAPPAGES 4//mm->EMSpagesmapped - -typedef struct mmblockstruct -{ - //word start,length; - word start; dword length; - unsigned attributes; - memptr *useptr; // pointer to the segment start - struct mmblockstruct huge *next; -} mmblocktype; - - -typedef struct -{ - memptr bufferseg; - boolean mmstarted, bombonerror, mmerror; - void huge *farheap; -#ifdef __BORLANDC__ - void *nearheap; -#endif -#ifdef __WATCOMC__ - void __near *nearheap; -#endif - //byte EMS_status; - unsigned totalEMSpages,freeEMSpages,EMSpageframe,EMSpagesmapped,EMShandle; - unsigned int EMSVer; - word numUMBs,UMBbase[MAXUMBS]; - word endid; //end of list - //dword numUMBs,UMBbase[MAXUMBS]; - mmblocktype huge mmblocks[MAXBLOCKS],huge *mmhead,huge *mmfree,huge *mmrover,huge *mmnew; -} mminfo_t; - -/* -============================================================================= - - GLOBAL VARIABLES - -============================================================================= -*/ - - -/* -============================================================================= - - LOCAL VARIABLES - -============================================================================= -*/ - -//========================================================================== - -boolean MML_CheckForEMS(void); -byte MML_SetupEMS(mminfo_t *mm); -void MML_ShutdownEMS(mminfo_t *mm); -byte MM_MapEMS(mminfo_t *mm, mminfotype *mmi); -byte MM_MapXEMS(mminfo_t *mm, mminfotype *mmi); -boolean MML_CheckForXMS(mminfo_t *mm); -void MML_SetupXMS(mminfo_t *mm, mminfotype *mmi); -void MML_ShutdownXMS(mminfo_t *mm); -void MML_UseSpace(/*d*/word segstart, dword seglength, mminfo_t *mm); -void MML_ClearBlock(mminfo_t *mm); - -void MM_Startup(mminfo_t *mm, mminfotype *mmi); -void MM_Shutdown(mminfo_t *mm); - -void MM_GetPtr(memptr *baseptr,dword size, mminfo_t *mm, mminfotype *mmi); -void MM_FreePtr(memptr *baseptr, mminfo_t *mm); -void MM_SetPurge(memptr *baseptr, int purge, mminfo_t *mm); -void MM_SetLock(memptr *baseptr, boolean locked, mminfo_t *mm); -void MM_SortMem(mminfo_t *mm); -void MM_ShowMemory(/*page_t *page, */mminfo_t *mm); -void MM_DumpData(mminfo_t *mm); -dword MM_UnusedMemory(mminfo_t *mm); -dword MM_TotalFree(mminfo_t *mm); -void MM_Report(/*page_t *page, */mminfo_t *mm, mminfotype *mmi); -static void MM_EMSerr(byte *stri, byte err); -void MM_BombOnError(boolean bomb, mminfo_t *mm); -//void MM_GetNewBlock(mminfo_t *mm); -//void MM_FreeBlock(mmblocktype *x, mminfo_t *mm); - -//========================================================================== - -#endif diff --git a/16/exmmtest/src/lib/nyan/kitten.c b/16/exmmtest/src/lib/nyan/kitten.c deleted file mode 100644 index 4e501dec..00000000 --- a/16/exmmtest/src/lib/nyan/kitten.c +++ /dev/null @@ -1,615 +0,0 @@ - -/* Functions that emulate UNIX catgets */ - -/* Copyright (C) 1999,2000,2001 Jim Hall */ - -/* - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -#include /* sprintf */ -#include /* getenv */ -#include /* strchr */ -#include -#include -#include - -#include "src/lib/nyan/kitten.h" - - -/* DB stuff */ - -struct db_list{ - struct db_list *next; - char *key; - char *value; -}; - -typedef struct db_list db_t; - -db_t *db_insert (char *key, char *value); -db_t *db_fetch (char *key); - - -/* External functions */ - -int get_line (int file, char *buffer, int size); - - -/* Local prototypes */ - -int catread (char *catfile); /* Reads a catfile into the hash */ -char *processEscChars(char *line); /* Converts c escape sequences to chars */ - -/* Globals */ - -nl_catd _kitten_catalog = 0; /* _kitten_catalog descriptor, either 0 or 1 */ - - - -#if defined(__SMALL__) /* it's not very portable ;) */ - -#include -/* assert we are running in small model */ -/* else pointer below has to be done correctly */ -char verify_small_pointers[sizeof(void*) == 2 ? 1 : -1]; - - -int dos_open(char *filename, int mode); -#define open(filename,mode) dos_open(filename,mode) - -int dos_read(int file, void *ptr, unsigned count); -#define read(file, ptr, count) dos_read(file,ptr,count) - -void dos_close(int file); -#define close(file) dos_close(file) - -#ifdef __WATCOMC__ - -#pragma aux dos_open = \ -"mov ax, 0x3d00" \ -"int 0x21" \ -"jnc noerror" \ -"mov ax, 0xffff" \ -"noerror:" \ -parm [dx] [ax] value [ax]; - -#pragma aux dos_read = \ -"mov ah, 0x3f" \ -"int 0x21" \ -"jnc noerror" \ -"xor ax, ax" \ -"noerror:" \ -parm [bx] [dx] [cx] value [ax]; - -#pragma aux dos_close = \ -"mov ah, 0x3e" \ -"int 0x21" \ -parm [bx]; - -#else - -int dos_open(char *filename, int mode) -{ - union REGS r; - - if (mode); /* mode ignored - readonly supported */ - - r.h.ah = 0x3d; - r.h.al = 0; /* read mode only supoported now !! */ - r.x.dx = (unsigned)filename; - intdos(&r,&r); - - if (r.x.cflag) - return -1; - return r.x.ax; -} - -int dos_read(int file, void *ptr, unsigned count) -{ - union REGS r; - - r.h.ah = 0x3f; - r.x.bx = file; - r.x.cx = count; - r.x.dx = (unsigned)ptr; - intdos(&r,&r); - - if (r.x.cflag) - return 0; - return r.x.ax; -} - -void dos_close(int file) -{ - union REGS r; - - r.h.ah = 0x3e; - r.x.bx = file; - intdos(&r,&r); -} - -#endif -#endif - -#ifndef NOCATS - -/* Functions */ - -char * -pascal kittengets(int set_number, int message_number, char *message) -{ - /* get message from a message _kitten_catalog */ - - /* 'message' should really be const, but not when it is returned */ - - /* On success, catgets() returns a pointer to an internal buffer - area containing the null-terminated message string. On failure, - catgets() returns the value 'message'. */ - - char key[10]; - db_t *ptr; - - - /* fetch the message that goes with the set/message number */ - - sprintf (key, "%d.%d", set_number, message_number); - ptr = db_fetch (key); - - /* printf("\ncatgets %s\n",message); */ - - if (ptr) - { - /* printf("------> %s\n",ptr->value); */ - - return (ptr->value); - } - - /* else */ - - return (message); -} - -nl_catd -kittenopen(char *name) -{ - /* catopen() returns a message _kitten_catalog descriptor of type nl_catd on - success. On failure, it returns -1. */ - - /* 'flag' is completely ignored here. */ - - char catfile[256]; /* full path to the msg _kitten_catalog */ - char *nlsptr; /* ptr to NLSPATH */ - char *lang; /* ptr to LANG */ - - - - /* Open the _kitten_catalog file */ - - /* The value of `_kitten_catalog' will be set based on catread */ - - if (_kitten_catalog) - { - /* Already one open */ - - printf("cat already open\n"); - return (-1); - } - - /* If the message _kitten_catalog file name contains a directory separator, - assume that this is a real path to the _kitten_catalog file. Note that - catread will return a true or false value based on its ability - to read the catfile. */ - - if (strchr (name, '\\')) - { - /* first approximation: 'name' is a filename */ - - printf("found \\\n"); - - _kitten_catalog = catread (name); - return (_kitten_catalog); - } - - /* If the message _kitten_catalog file name does not contain a directory - separator, then we need to try to locate the message _kitten_catalog on - our own. We will use several methods to find it. */ - - /* We will need the value of LANG, and may need a 2-letter abbrev of - LANG later on, so get it now. */ - - lang = getenv ("LANG"); - - if (lang == NULL) - { - /* printf("no lang= found\n"); */ - - /* Return failure - we won't be able to locate the cat file */ - return (-1); - } - - - /* step through NLSPATH */ - - nlsptr = getenv ("NLSPATH"); - - - if (nlsptr == NULL) - { - /* printf("no NLSPATH= found\n"); */ - - /* Return failure - we won't be able to locate the cat file */ - return (-1); - } - - /* printf("nlsptr:%s\n",nlsptr); */ - - while (*nlsptr) - { - char *tok = strchr(nlsptr, ';'); - int toklen; - - - if (tok == NULL) tok = nlsptr + strlen(nlsptr); - toklen=tok-nlsptr; - /* Try to find the _kitten_catalog file in each path from NLSPATH */ - - /* Rule #1: %NLSPATH%\%LANG%\cat */ - - memcpy(catfile,nlsptr,toklen); - sprintf(catfile+toklen,"\\%s\\%s",lang,name); - - _kitten_catalog = catread (catfile); - if (_kitten_catalog) - { - return (_kitten_catalog); - } - - /* Rule #2: %NLSPATH%\cat.%LANG% */ - - sprintf(catfile+toklen,"\\%s.%s",name, lang); - - _kitten_catalog = catread (catfile); - - if (_kitten_catalog) - { - return (_kitten_catalog); - } - - /* Rule #3: if LANG looks to be in format "en-UK" then - %NLSPATH%\cat.EN */ - - if (lang[2] == '-') - { - lang[2] = 0; - sprintf(catfile+toklen,"\\%s.%s",name,lang); - lang[2] = '-'; - - _kitten_catalog = catread (catfile); - if (_kitten_catalog) - { - return (_kitten_catalog); - } - } - - /* Grab next tok for the next while iteration */ - nlsptr = tok; - if (*nlsptr) nlsptr++; - - } /* while tok */ - - /* We could not find it. Return failure. */ - - return (0); -} - -int -catread (char *catfile) -{ - int file; /* pointer to the catfile */ - char *key; /* part of key-value for hash */ - char *value; /* part of key-value for hash */ - char inBuffer[256]; /* the string read from the file */ - - /* Open the catfile for reading */ - - /*printf("catread %s\n",catfile); */ - - file = open (catfile, O_RDONLY | O_TEXT); - if (file < 0) - { - /* Cannot open the file. Return failure */ - /* printf("catread: cant read %s\n",catfile); */ - return (0); - } - - /*printf("catread %s success\n",catfile);*/ - - /* Read the file into memory */ - - while (get_line (file, inBuffer, sizeof(inBuffer))) - { - /* Break into parts. Entries should be of the form: - "1.2:This is a message" */ - - /* A line that starts with '#' is considered a comment, and will - be thrown away without reading it. */ - - if (inBuffer[0] == '#') /* comment */ - continue; - - if ((key = strchr (inBuffer, ':')) != NULL) - { - *key = 0; - - value = processEscChars(key+1); - - db_insert (inBuffer, value); - } - - } /* while */ - - close (file); - - /* Return success */ - - return (1); -} - -void -kittenclose (void) -{ - /* close a message _kitten_catalog */ - - _kitten_catalog = 0; -} - - - -/** - * Process strings, converting \n, \t, \v, \b, \r, \f, \\, \ddd, \xdd and \x0dd - * to actual chars. (Note: \x is an extension to support hexadecimal) - * This method is used to allow the message _kitten_catalog to use c escape sequences. - * Modifies the line in-place (always same size or shorter). - * Returns a pointer to input string. - */ - -int mystrtoul(char *src, int base, int size, int *error) -{ - int ret = 0; - - *error = 1; - - for (; size > 0; size--) - { - int digit; - int ch = *src++; - - if (ch >= '0' && ch <= '9') digit = ch - '0'; - else if (ch >= 'A' && ch <= 'Z') digit = ch - 'A' + 10; - else if (ch >= 'a' && ch <= 'z') digit = ch - 'a' + 10; - else - { - return 0; - } - - if (digit >= base) - { - return 0; - } - - ret = ret * base + digit; - } - - *error = 0; - - return ret; -} - - -char *processEscChars(char *line) -{ - register char *src = line, *dst = line; - - /* used when converting \xdd and \ddd (hex or octal) characters */ - char ch; - - if (line == NULL) return NULL; - - /* cycle through copying characters, except when a \ is encountered. */ - for ( ; *src != '\0'; src++, dst++) - { - ch = *src; - - if (ch == '\\') - { - src++; /* point to char following slash */ - switch (ch = *src) - { - case '\\': /* a single slash */ - ch = '\\'; - break; - case 'n': /* a newline (linefeed) */ - ch = '\n'; - break; - case 'r': /* a carriage return */ - ch = '\r'; - break; - case 't': /* a horizontal tab */ - ch = '\t'; - break; - case 'v': /* a vertical tab */ - ch = '\v'; - break; - case 'b': /* a backspace */ - ch = '\b'; - break; - case 'a': /* alert */ - ch = '\a'; - break; - case 'f': /* formfeed */ - ch = '\f'; - break; - case 'x': /* extension supporting hex numbers \xdd or \x0dd */ - { - int error; - ch = mystrtoul(src+1,16,2, &error); /* get value */ - if (!error) /* store character */ - { - src += 2; - } - else /* error so just store x (loose slash) */ - { - ch = *src; - } - } - - break; - default: /* just store letter (loose slash) or handle octal */ - - { - int error; - ch = mystrtoul(src,8,3, &error); /* get value */ - if (!error) /* store character */ - { - src += 3; - } - else - ch = *src; - } - - break; - } - } - - *dst = ch; - } - - /* ensure '\0' terminated */ - *dst = '\0'; - - return line; -} - - - -int -get_line (int file, char *str, int size) -{ - int success = 0; - - /* now, read the string */ - - for ( ; size > 0; ) - { - if (read(file,str,1) <= 0) - break; - - success = 1; - - if (*str == '\r') - continue; - - if (*str == '\n') - break; - - str++; - size--; - - } /* while */ - - *str = 0; - - return success; -} - -/* Function prototypes */ - - -/* Global variables */ - -static db_t *hashtab[1]; - - -/* Functions */ - - -/* db_fetch() - Query the hash and return a struct that contains the - key and the pointer. The calling function should not look beyond - that. */ - -db_t * -db_fetch (char *s) -{ - db_t *db_ptr; - - for (db_ptr = hashtab[0]; db_ptr != NULL; db_ptr = db_ptr->next) - { - if (strcmp (s, db_ptr->key) == 0) - { - break; - - } - } - - - return (db_ptr); -} - -/* db_insert() - Inserts a key,value pair into the hash. If the key - already exists in the hash, the new value is NOT inserted. */ - -db_t * -db_insert (char *key, char *value) -{ - db_t *db_ptr; - - if ((db_ptr = db_fetch (key)) == NULL) - { - /* not found */ - - db_ptr = (db_t *) malloc (sizeof (*db_ptr)); - - if (db_ptr == NULL || (db_ptr->key = strdup (key)) == NULL) - { - return (NULL); - } - - /* insert the key,value into the hash. */ - - db_ptr->next = hashtab[0]; - hashtab[0] = db_ptr; - } - - else - { - /* already there */ - - free ((void *) db_ptr->value); - } - - if ((db_ptr ->value = strdup (value)) == NULL) - { - return (NULL); - } - - /* else */ - - return (db_ptr); -} - - - -#endif /* NOCATS */ diff --git a/16/exmmtest/src/lib/nyan/kitten.h b/16/exmmtest/src/lib/nyan/kitten.h deleted file mode 100644 index 2cec22fe..00000000 --- a/16/exmmtest/src/lib/nyan/kitten.h +++ /dev/null @@ -1,73 +0,0 @@ -/* $Id: kitten.h,v 1.1 2004/09/19 10:01:26 bartoldeman Exp $ */ - -/* Functions that emulate UNIX catgets */ - -/* Copyright (C) 1999,2000 Jim Hall */ - -/* - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - - -#ifndef _CATGETS_H -#define _CATGETS_H - -#ifdef NOCATS - -/* #define NOCATS to disable that stuff completely */ -#define nl_catd int -#define catopen(x,y) 1 -#define catclose(x) -#define catgets(c,x,y,s) s - -#else - - - - -#ifdef __cplusplus -extern "C" { -#endif - - /* Data types */ - - typedef int nl_catd; - - /* Symbolic constants */ - -#define MCLoadBySet 0 /* not implemented */ -#define MCLoadAll 0 /* not implemented */ - - - /* Functions */ - -#define catgets(catalog, set,message_number,message) kittengets(set,message_number,message) -#define catopen(name,flag) kittenopen(name) -#define catclose(catalog) kittenclose() - - - char * pascal kittengets( int set_number, int message_number,char *message); - nl_catd kittenopen(char *name); - void kittenclose (void); - - - -#ifdef __cplusplus -} -#endif - -#endif /* NOCATS */ - -#endif /* _CATGETS_H */ diff --git a/16/exmmtest/src/lib/types.h b/16/exmmtest/src/lib/types.h deleted file mode 100644 index 2055c20c..00000000 --- a/16/exmmtest/src/lib/types.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Project 16 Source Code~ - * Copyright (C) 2012-2015 sparky4 & pngwen & andrius4669 - * - * This file is part of Project 16. - * - * Project 16 is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * Project 16 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see , or - * write to the Free Software Foundation, Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA. - * - */ -/* - * Just some handy typedefs that make it easier to think about the low - * level code - */ - -#ifndef _TYPE_H_ -#define _TYPE_H_ - -typedef unsigned char byte; -typedef unsigned short word; -typedef unsigned long dword; -typedef signed char sbyte; -typedef signed short sword; -typedef signed long sdword; - -#endif/*_TYPE_H_*/ diff --git a/16/exmmtest/wtf_this.wat b/16/exmmtest/wtf_this.wat deleted file mode 100644 index 3f027eef..00000000 --- a/16/exmmtest/wtf_this.wat +++ /dev/null @@ -1 +0,0 @@ -MORE FUCKING BORLAND C BEHAVIOR TESTING!! wwww \ No newline at end of file diff --git a/16_CA.BCO b/16_CA.BCO new file mode 100644 index 0000000000000000000000000000000000000000..aef7def23275e3b992eac73f0982da6d5aef11ab GIT binary patch literal 5093 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 IXrZ+K0>Au%OaK4? literal 0 HcmV?d00001 diff --git a/16_HC.BCO b/16_HC.BCO new file mode 100644 index 0000000000000000000000000000000000000000..67bd315e54fe409edd3095b0dffefecf1bdbe7ad GIT binary patch literal 3711 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 literal 0 HcmV?d00001 diff --git a/16_MM.BCO b/16_MM.BCO new file mode 100644 index 0000000000000000000000000000000000000000..0d82784bbc13c5815ce954c53cbddf938b0b2d99 GIT binary patch literal 21686 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 literal 0 HcmV?d00001 diff --git a/DEBUG.16 b/DEBUG.16 index 93afd7e6..bf99e259 100644 --- a/DEBUG.16 +++ b/DEBUG.16 @@ -1,8 +1,8 @@ -0 Size:5558 Owner:0x0 -0 Size:5558 Owner:0x0 -15b6 Size:256 Owner:0x4cde -Seg:16b6 Size:273 Owner:0x857a -Seg:1d04 Size:49 Owner:0x0 -Seg:1d04 Size:49 Owner:0x0 -1f25 Size:49371 Owner:0x0 +0 Size:5562 Owner:0x0 +0 Size:5562 Owner:0x0 +15ba Size:256 Owner:0x4cde +Seg:16ba Size:273 Owner:0x857a +Seg:1d08 Size:49 Owner:0x0 +Seg:1d08 Size:49 Owner:0x0 +ad39 Size:12999 Owner:0x0 Seg:e000 Size:4294909951 Owner:0x0 diff --git a/EXMMBC.BCO b/EXMMBC.BCO new file mode 100644 index 0000000000000000000000000000000000000000..3bd64eea8959cafc6dd1700614b64291c7409594 GIT binary patch literal 4346 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 M_#p$s|NjgO0Q@W;WB>pF literal 0 HcmV?d00001 diff --git a/EXMMBC.MAP b/EXMMBC.MAP new file mode 100644 index 00000000..bee59e80 --- /dev/null +++ b/EXMMBC.MAP @@ -0,0 +1,737 @@ + + Start Stop Length Name Class + + 00000H 05CA0H 05CA1H _TEXT CODE + 05CB0H 05CB0H 00000H _FARDATA FAR_DATA + 05CB0H 05CB0H 00000H _FARBSS FAR_BSS + 05CB0H 05CB0H 00000H _OVERLAY_ OVRINFO + 05CB0H 05CB0H 00000H _1STUB_ STUBSEG + 05CB0H 06D69H 010BAH _DATA DATA + 06D6AH 06D6BH 00002H _CVTSEG DATA + 06D6CH 06D71H 00006H _SCNSEG DATA + 06D72H 06D72H 00000H _CONST CONST + 06D72H 06D89H 00018H _INIT_ INITDATA + 06D8AH 06D8AH 00000H _INITEND_ INITDATA + 06D8AH 06D8AH 00000H _EXIT_ EXITDATA + 06D8AH 06D8AH 00000H _EXITEND_ EXITDATA + 06D8AH 06DF1H 00068H _BSS BSS + 06DF2H 06DF2H 00000H _BSSEND BSSEND + 06E00H 06E7FH 00080H _STACK STACK + + +Detailed map of segments + + 0000:0000 028F C=CODE S=_TEXT G=(none) M=c0.ASM ACBP=28 + 0000:028F 067F C=CODE S=_TEXT G=(none) M=SRC\LIB\NYAN\KITTEN.C ACBP=28 + 0000:090E 02EE C=CODE S=_TEXT G=(none) M=SRC\LIB\16_HC.C ACBP=28 + 0000:0BFC 024D C=CODE S=_TEXT G=(none) M=SRC\EXMMTEST.C ACBP=28 + 0000:0E49 0241 C=CODE S=_TEXT G=(none) M=SRC\LIB\16_CA.C ACBP=28 + 0000:108A 02C8 C=CODE S=_TEXT G=(none) M=SRC\LIB\16_HEAD.C ACBP=28 + 0000:1352 1CB5 C=CODE S=_TEXT G=(none) M=SRC\LIB\16_MM.C ACBP=28 + 0000:3007 0024 C=CODE S=_TEXT G=(none) M=ATEXIT ACBP=28 + 0000:302B 0049 C=CODE S=_TEXT G=(none) M=CLOCK ACBP=28 + 0000:3074 0000 C=CODE S=_TEXT G=(none) M=CTYPE ACBP=28 + 0000:3074 003D C=CODE S=_TEXT G=(none) M=DOSFATTR ACBP=28 + 0000:30B1 0089 C=CODE S=_TEXT G=(none) M=EXIT ACBP=28 + 0000:313A 0000 C=CODE S=_TEXT G=(none) M=FILES ACBP=28 + 0000:313A 0000 C=CODE S=_TEXT G=(none) M=FILES2 ACBP=28 + 0000:313A 0000 C=CODE S=_TEXT G=(none) M=FMODE ACBP=28 + 0000:313A 0021 C=CODE S=_TEXT G=(none) M=H_LLSH ACBP=28 + 0000:315B 0021 C=CODE S=_TEXT G=(none) M=H_LURSH ACBP=28 + 0000:317C 0060 C=CODE S=_TEXT G=(none) M=H_PADD ACBP=28 + 0000:31DC 0028 C=CODE S=_TEXT G=(none) M=H_PSBP ACBP=28 + 0000:3204 004B C=CODE S=_TEXT G=(none) M=IOERROR ACBP=28 + 0000:324F 0011 C=CODE S=_TEXT G=(none) M=ISATTY ACBP=28 + 0000:3260 00A2 C=CODE S=_TEXT G=(none) M=LONGTOA ACBP=28 + 0000:3302 0029 C=CODE S=_TEXT G=(none) M=LSEEK ACBP=28 + 0000:332B 00B0 C=CODE S=_TEXT G=(none) M=MKNAME ACBP=28 + 0000:33DB 0021 C=CODE S=_TEXT G=(none) M=N_PCMP ACBP=28 + 0000:33FC 002F C=CODE S=_TEXT G=(none) M=READA ACBP=28 + 0000:342B 00B2 C=CODE S=_TEXT G=(none) M=SETUPIO ACBP=28 + 0000:34DD 0000 C=CODE S=_TEXT G=(none) M=STKLEN ACBP=28 + 0000:34DD 002C C=CODE S=_TEXT G=(none) M=TOLOWER ACBP=28 + 0000:3509 0018 C=CODE S=_TEXT G=(none) M=UNLINK ACBP=28 + 0000:3521 04DB C=CODE S=_TEXT G=(none) M=VPRINTER ACBP=28 + 0000:39FC 009F C=CODE S=_TEXT G=(none) M=VRAM ACBP=28 + 0000:3A9B 0000 C=CODE S=_TEXT G=(none) M=WSCROLL ACBP=28 + 0000:3A9B 0030 C=CODE S=_TEXT G=(none) M=_STPCPY ACBP=28 + 0000:3ACB 0004 C=CODE S=_TEXT G=(none) M=CORELEFT ACBP=28 + 0000:3ACF 014E C=CODE S=_TEXT G=(none) M=CPRINTF ACBP=28 + 0000:3C1D 01A5 C=CODE S=_TEXT G=(none) M=CRTINIT ACBP=28 + 0000:3DC2 001F C=CODE S=_TEXT G=(none) M=CVTFAK ACBP=28 + 0000:3DE1 042D C=CODE S=_TEXT G=(none) M=FARHEAP ACBP=28 + 0000:420E 013E C=CODE S=_TEXT G=(none) M=FBRK ACBP=28 + 0000:434C 0050 C=CODE S=_TEXT G=(none) M=FCORELFT ACBP=28 + 0000:439C 0054 C=CODE S=_TEXT G=(none) M=GETCH ACBP=28 + 0000:43F0 00AC C=CODE S=_TEXT G=(none) M=GPTEXT ACBP=28 + 0000:449C 0029 C=CODE S=_TEXT G=(none) M=IOCTL ACBP=28 + 0000:44C5 0012 C=CODE S=_TEXT G=(none) M=KBHIT ACBP=28 + 0000:44D7 009D C=CODE S=_TEXT G=(none) M=MOVETEXT ACBP=28 + 0000:4574 0017 C=CODE S=_TEXT G=(none) M=PUTCH ACBP=28 + 0000:458B 0004 C=CODE S=_TEXT G=(none) M=REALCVT ACBP=28 + 0000:458F 01C7 C=CODE S=_TEXT G=(none) M=SCREEN ACBP=28 + 0000:4756 0184 C=CODE S=_TEXT G=(none) M=SCROLL ACBP=28 + 0000:48DA 0129 C=CODE S=_TEXT G=(none) M=SETARGV ACBP=28 + 0000:4A03 001C C=CODE S=_TEXT G=(none) M=SETBLOCK ACBP=28 + 0000:4A1F 0054 C=CODE S=_TEXT G=(none) M=SETENVP ACBP=28 + 0000:4A73 002C C=CODE S=_TEXT G=(none) M=WHEREXY ACBP=28 + 0000:4A9F 001D C=CODE S=_TEXT G=(none) M=CHMODA ACBP=28 + 0000:4ABC 0026 C=CODE S=_TEXT G=(none) M=CLOSE ACBP=28 + 0000:4AE2 001E C=CODE S=_TEXT G=(none) M=CLOSEA ACBP=28 + 0000:4B00 00B0 C=CODE S=_TEXT G=(none) M=FCLOSE ACBP=28 + 0000:4BB0 00C6 C=CODE S=_TEXT G=(none) M=FFLUSH ACBP=28 + 0000:4C76 0041 C=CODE S=_TEXT G=(none) M=FLENGTH ACBP=28 + 0000:4CB7 0040 C=CODE S=_TEXT G=(none) M=FLUSHALL ACBP=28 + 0000:4CF7 01FE C=CODE S=_TEXT G=(none) M=FOPEN ACBP=28 + 0000:4EF5 001C C=CODE S=_TEXT G=(none) M=FPRINTF ACBP=28 + 0000:4F11 01D8 C=CODE S=_TEXT G=(none) M=FSEEK ACBP=28 + 0000:50E9 0070 C=CODE S=_TEXT G=(none) M=GETENV ACBP=28 + 0000:5159 0070 C=CODE S=_TEXT G=(none) M=LTOA1 ACBP=28 + 0000:51C9 0024 C=CODE S=_TEXT G=(none) M=MEMCPY ACBP=28 + 0000:51ED 0022 C=CODE S=_TEXT G=(none) M=MOVEDATA ACBP=28 + 0000:520F 018D C=CODE S=_TEXT G=(none) M=OPEN ACBP=28 + 0000:539C 004F C=CODE S=_TEXT G=(none) M=OPENA ACBP=28 + 0000:53EB 001B C=CODE S=_TEXT G=(none) M=PRINTF ACBP=28 + 0000:5406 03A4 C=CODE S=_TEXT G=(none) M=PUTC ACBP=28 + 0000:57AA 00CB C=CODE S=_TEXT G=(none) M=READ ACBP=28 + 0000:5875 0003 C=CODE S=_TEXT G=(none) M=READU ACBP=28 + 0000:5878 0111 C=CODE S=_TEXT G=(none) M=SETVBUF ACBP=28 + 0000:5989 0081 C=CODE S=_TEXT G=(none) M=SPRINTF ACBP=28 + 0000:5A0A 003F C=CODE S=_TEXT G=(none) M=STRCAT ACBP=28 + 0000:5A49 0040 C=CODE S=_TEXT G=(none) M=STRDUP ACBP=28 + 0000:5A89 001F C=CODE S=_TEXT G=(none) M=STRLEN ACBP=28 + 0000:5AA8 0149 C=CODE S=_TEXT G=(none) M=WRITE ACBP=28 + 0000:5BF1 003C C=CODE S=_TEXT G=(none) M=WRITEA ACBP=28 + 0000:5C2D 0003 C=CODE S=_TEXT G=(none) M=WRITEU ACBP=28 + 0000:5C30 003B C=CODE S=_TEXT G=(none) M=XFCLOSE ACBP=28 + 0000:5C6B 0036 C=CODE S=_TEXT G=(none) M=XFFLUSH ACBP=28 + 05CB:0000 0000 C=FAR_DATA S=_FARDATA G=(none) M=c0.ASM ACBP=68 + 05CB:0000 0000 C=FAR_BSS S=_FARBSS G=(none) M=c0.ASM ACBP=68 + 05CB:0000 0000 C=OVRINFO S=_OVERLAY_ G=(none) M=c0.ASM ACBP=68 + 05CB:0000 0000 C=STUBSEG S=_1STUB_ G=(none) M=c0.ASM ACBP=68 + 05CB:0000 0093 C=DATA S=_DATA G=DGROUP M=c0.ASM ACBP=68 + 05CB:0094 0045 C=DATA S=_DATA G=DGROUP M=SRC\LIB\NYAN\KITTEN.C ACBP=48 + 05CB:00DA 0014 C=DATA S=_DATA G=DGROUP M=SRC\LIB\16_HC.C ACBP=48 + 05CB:00EE 0187 C=DATA S=_DATA G=DGROUP M=SRC\EXMMTEST.C ACBP=48 + 05CB:0276 002C C=DATA S=_DATA G=DGROUP M=SRC\LIB\16_CA.C ACBP=48 + 05CB:02A2 0010 C=DATA S=_DATA G=DGROUP M=SRC\LIB\16_HEAD.C ACBP=48 + 05CB:02B2 0A06 C=DATA S=_DATA G=DGROUP M=SRC\LIB\16_MM.C ACBP=48 + 05CB:0CB8 0002 C=DATA S=_DATA G=DGROUP M=ATEXIT ACBP=48 + 05CB:0CBA 0000 C=DATA S=_DATA G=DGROUP M=CLOCK ACBP=48 + 05CB:0CBA 0101 C=DATA S=_DATA G=DGROUP M=CTYPE ACBP=48 + 05CB:0DBC 0000 C=DATA S=_DATA G=DGROUP M=DOSFATTR ACBP=48 + 05CB:0DBC 0006 C=DATA S=_DATA G=DGROUP M=EXIT ACBP=48 + 05CB:0DC2 0190 C=DATA S=_DATA G=DGROUP M=FILES ACBP=48 + 05CB:0F52 002A C=DATA S=_DATA G=DGROUP M=FILES2 ACBP=48 + 05CB:0F7C 0004 C=DATA S=_DATA G=DGROUP M=FMODE ACBP=48 + 05CB:0F80 0000 C=DATA S=_DATA G=DGROUP M=H_LLSH ACBP=48 + 05CB:0F80 0000 C=DATA S=_DATA G=DGROUP M=H_LURSH ACBP=48 + 05CB:0F80 0000 C=DATA S=_DATA G=DGROUP M=H_PADD ACBP=48 + 05CB:0F80 0000 C=DATA S=_DATA G=DGROUP M=H_PSBP ACBP=48 + 05CB:0F80 005B C=DATA S=_DATA G=DGROUP M=IOERROR ACBP=48 + 05CB:0FDC 0000 C=DATA S=_DATA G=DGROUP M=ISATTY ACBP=48 + 05CB:0FDC 0000 C=DATA S=_DATA G=DGROUP M=LONGTOA ACBP=48 + 05CB:0FDC 0000 C=DATA S=_DATA G=DGROUP M=LSEEK ACBP=48 + 05CB:0FDC 0009 C=DATA S=_DATA G=DGROUP M=MKNAME ACBP=48 + 05CB:0FE6 0000 C=DATA S=_DATA G=DGROUP M=N_PCMP ACBP=48 + 05CB:0FE6 0000 C=DATA S=_DATA G=DGROUP M=READA ACBP=48 + 05CB:0FE6 0000 C=DATA S=_DATA G=DGROUP M=SETUPIO ACBP=48 + 05CB:0FE6 0002 C=DATA S=_DATA G=DGROUP M=STKLEN ACBP=48 + 05CB:0FE8 0000 C=DATA S=_DATA G=DGROUP M=TOLOWER ACBP=48 + 05CB:0FE8 0000 C=DATA S=_DATA G=DGROUP M=UNLINK ACBP=48 + 05CB:0FE8 0067 C=DATA S=_DATA G=DGROUP M=VPRINTER ACBP=48 + 05CB:1050 0000 C=DATA S=_DATA G=DGROUP M=VRAM ACBP=48 + 05CB:1050 0002 C=DATA S=_DATA G=DGROUP M=WSCROLL ACBP=48 + 05CB:1052 0000 C=DATA S=_DATA G=DGROUP M=_STPCPY ACBP=48 + 05CB:1052 0000 C=DATA S=_DATA G=DGROUP M=CORELEFT ACBP=48 + 05CB:1052 0000 C=DATA S=_DATA G=DGROUP M=CPRINTF ACBP=48 + 05CB:1052 0018 C=DATA S=_DATA G=DGROUP M=CRTINIT ACBP=48 + 05CB:106A 0031 C=DATA S=_DATA G=DGROUP M=CVTFAK ACBP=48 + 05CB:109C 0000 C=DATA S=_DATA G=DGROUP M=FARHEAP ACBP=48 + 05CB:109C 0002 C=DATA S=_DATA G=DGROUP M=FBRK ACBP=48 + 05CB:109E 0000 C=DATA S=_DATA G=DGROUP M=FCORELFT ACBP=48 + 05CB:109E 0000 C=DATA S=_DATA G=DGROUP M=GETCH ACBP=48 + 05CB:109E 0000 C=DATA S=_DATA G=DGROUP M=GPTEXT ACBP=48 + 05CB:109E 0000 C=DATA S=_DATA G=DGROUP M=IOCTL ACBP=48 + 05CB:109E 0002 C=DATA S=_DATA G=DGROUP M=KBHIT ACBP=48 + 05CB:10A0 0000 C=DATA S=_DATA G=DGROUP M=MOVETEXT ACBP=48 + 05CB:10A0 0000 C=DATA S=_DATA G=DGROUP M=PUTCH ACBP=48 + 05CB:10A0 0000 C=DATA S=_DATA G=DGROUP M=REALCVT ACBP=48 + 05CB:10A0 0000 C=DATA S=_DATA G=DGROUP M=SCREEN ACBP=48 + 05CB:10A0 0000 C=DATA S=_DATA G=DGROUP M=SCROLL ACBP=48 + 05CB:10A0 0010 C=DATA S=_DATA G=DGROUP M=SETARGV ACBP=48 + 05CB:10B0 0000 C=DATA S=_DATA G=DGROUP M=SETBLOCK ACBP=48 + 05CB:10B0 0004 C=DATA S=_DATA G=DGROUP M=SETENVP ACBP=48 + 05CB:10B4 0000 C=DATA S=_DATA G=DGROUP M=WHEREXY ACBP=48 + 05CB:10B4 0000 C=DATA S=_DATA G=DGROUP M=CHMODA ACBP=48 + 05CB:10B4 0000 C=DATA S=_DATA G=DGROUP M=CLOSE ACBP=48 + 05CB:10B4 0000 C=DATA S=_DATA G=DGROUP M=CLOSEA ACBP=48 + 05CB:10B4 0000 C=DATA S=_DATA G=DGROUP M=FCLOSE ACBP=48 + 05CB:10B4 0000 C=DATA S=_DATA G=DGROUP M=FFLUSH ACBP=48 + 05CB:10B4 0000 C=DATA S=_DATA G=DGROUP M=FLENGTH ACBP=48 + 05CB:10B4 0000 C=DATA S=_DATA G=DGROUP M=FLUSHALL ACBP=48 + 05CB:10B4 0000 C=DATA S=_DATA G=DGROUP M=FOPEN ACBP=48 + 05CB:10B4 0000 C=DATA S=_DATA G=DGROUP M=FPRINTF ACBP=48 + 05CB:10B4 0000 C=DATA S=_DATA G=DGROUP M=FSEEK ACBP=48 + 05CB:10B4 0000 C=DATA S=_DATA G=DGROUP M=GETENV ACBP=48 + 05CB:10B4 0000 C=DATA S=_DATA G=DGROUP M=LTOA1 ACBP=48 + 05CB:10B4 0000 C=DATA S=_DATA G=DGROUP M=MEMCPY ACBP=48 + 05CB:10B4 0000 C=DATA S=_DATA G=DGROUP M=MOVEDATA ACBP=48 + 05CB:10B4 0000 C=DATA S=_DATA G=DGROUP M=OPEN ACBP=48 + 05CB:10B4 0000 C=DATA S=_DATA G=DGROUP M=OPENA ACBP=48 + 05CB:10B4 0000 C=DATA S=_DATA G=DGROUP M=PRINTF ACBP=48 + 05CB:10B4 0001 C=DATA S=_DATA G=DGROUP M=PUTC ACBP=48 + 05CB:10B6 0000 C=DATA S=_DATA G=DGROUP M=READ ACBP=48 + 05CB:10B6 0000 C=DATA S=_DATA G=DGROUP M=READU ACBP=48 + 05CB:10B6 0004 C=DATA S=_DATA G=DGROUP M=SETVBUF ACBP=48 + 05CB:10BA 0000 C=DATA S=_DATA G=DGROUP M=SPRINTF ACBP=48 + 05CB:10BA 0000 C=DATA S=_DATA G=DGROUP M=STRCAT ACBP=48 + 05CB:10BA 0000 C=DATA S=_DATA G=DGROUP M=STRDUP ACBP=48 + 05CB:10BA 0000 C=DATA S=_DATA G=DGROUP M=STRLEN ACBP=48 + 05CB:10BA 0000 C=DATA S=_DATA G=DGROUP M=WRITE ACBP=48 + 05CB:10BA 0000 C=DATA S=_DATA G=DGROUP M=WRITEA ACBP=48 + 05CB:10BA 0000 C=DATA S=_DATA G=DGROUP M=WRITEU ACBP=48 + 05CB:10BA 0000 C=DATA S=_DATA G=DGROUP M=XFCLOSE ACBP=48 + 05CB:10BA 0000 C=DATA S=_DATA G=DGROUP M=XFFLUSH ACBP=48 + 05CB:10BA 0000 C=DATA S=_CVTSEG G=DGROUP M=c0.ASM ACBP=48 + 05CB:10BA 0002 C=DATA S=_CVTSEG G=DGROUP M=CVTFAK ACBP=48 + 05CB:10BC 0000 C=DATA S=_CVTSEG G=DGROUP M=REALCVT ACBP=48 + 05CB:10BC 0000 C=DATA S=_SCNSEG G=DGROUP M=c0.ASM ACBP=48 + 05CB:10BC 0006 C=DATA S=_SCNSEG G=DGROUP M=CVTFAK ACBP=48 + 05CB:10C2 0000 C=CONST S=_CONST G=DGROUP M=c0.ASM ACBP=48 + 05CB:10C2 0000 C=INITDATA S=_INIT_ G=DGROUP M=c0.ASM ACBP=48 + 05CB:10C2 0006 C=INITDATA S=_INIT_ G=DGROUP M=SETUPIO ACBP=48 + 05CB:10C8 0006 C=INITDATA S=_INIT_ G=DGROUP M=CRTINIT ACBP=48 + 05CB:10CE 0006 C=INITDATA S=_INIT_ G=DGROUP M=SETARGV ACBP=48 + 05CB:10D4 0006 C=INITDATA S=_INIT_ G=DGROUP M=SETENVP ACBP=48 + 05CB:10DA 0000 C=INITDATA S=_INITEND_ G=DGROUP M=c0.ASM ACBP=28 + 05CB:10DA 0000 C=EXITDATA S=_EXIT_ G=DGROUP M=c0.ASM ACBP=48 + 05CB:10DA 0000 C=EXITDATA S=_EXITEND_ G=DGROUP M=c0.ASM ACBP=28 + 05CB:10DA 0000 C=BSS S=_BSS G=DGROUP M=c0.ASM ACBP=48 + 05CB:10DA 0004 C=BSS S=_BSS G=DGROUP M=SRC\LIB\NYAN\KITTEN.C ACBP=48 + 05CB:10DE 0002 C=BSS S=_BSS G=DGROUP M=SRC\LIB\16_HC.C ACBP=48 + 05CB:10E0 0000 C=BSS S=_BSS G=DGROUP M=SRC\EXMMTEST.C ACBP=48 + 05CB:10E0 000A C=BSS S=_BSS G=DGROUP M=SRC\LIB\16_CA.C ACBP=48 + 05CB:10EA 0000 C=BSS S=_BSS G=DGROUP M=SRC\LIB\16_HEAD.C ACBP=48 + 05CB:10EA 0006 C=BSS S=_BSS G=DGROUP M=SRC\LIB\16_MM.C ACBP=48 + 05CB:10F0 0040 C=BSS S=_BSS G=DGROUP M=ATEXIT ACBP=48 + 05CB:1130 0001 C=BSS S=_BSS G=DGROUP M=CLOCK ACBP=48 + 05CB:1132 0000 C=BSS S=_BSS G=DGROUP M=DOSFATTR ACBP=48 + 05CB:1132 0000 C=BSS S=_BSS G=DGROUP M=IOERROR ACBP=48 + 05CB:1132 0000 C=BSS S=_BSS G=DGROUP M=ISATTY ACBP=48 + 05CB:1132 0000 C=BSS S=_BSS G=DGROUP M=LONGTOA ACBP=48 + 05CB:1132 0000 C=BSS S=_BSS G=DGROUP M=LSEEK ACBP=48 + 05CB:1132 000D C=BSS S=_BSS G=DGROUP M=MKNAME ACBP=48 + 05CB:1140 0000 C=BSS S=_BSS G=DGROUP M=READA ACBP=48 + 05CB:1140 0000 C=BSS S=_BSS G=DGROUP M=SETUPIO ACBP=48 + 05CB:1140 0000 C=BSS S=_BSS G=DGROUP M=UNLINK ACBP=48 + 05CB:1140 0000 C=BSS S=_BSS G=DGROUP M=VPRINTER ACBP=48 + 05CB:1140 0000 C=BSS S=_BSS G=DGROUP M=VRAM ACBP=48 + 05CB:1140 0000 C=BSS S=_BSS G=DGROUP M=CORELEFT ACBP=48 + 05CB:1140 0000 C=BSS S=_BSS G=DGROUP M=CRTINIT ACBP=48 + 05CB:1140 0000 C=BSS S=_BSS G=DGROUP M=GETCH ACBP=48 + 05CB:1140 0000 C=BSS S=_BSS G=DGROUP M=IOCTL ACBP=48 + 05CB:1140 0000 C=BSS S=_BSS G=DGROUP M=KBHIT ACBP=48 + 05CB:1140 0000 C=BSS S=_BSS G=DGROUP M=SETBLOCK ACBP=48 + 05CB:1140 0000 C=BSS S=_BSS G=DGROUP M=CHMODA ACBP=48 + 05CB:1140 0000 C=BSS S=_BSS G=DGROUP M=CLOSEA ACBP=48 + 05CB:1140 0000 C=BSS S=_BSS G=DGROUP M=FLENGTH ACBP=48 + 05CB:1140 0000 C=BSS S=_BSS G=DGROUP M=GETENV ACBP=48 + 05CB:1140 0000 C=BSS S=_BSS G=DGROUP M=MEMCPY ACBP=48 + 05CB:1140 0000 C=BSS S=_BSS G=DGROUP M=MOVEDATA ACBP=48 + 05CB:1140 0000 C=BSS S=_BSS G=DGROUP M=OPEN ACBP=48 + 05CB:1140 0000 C=BSS S=_BSS G=DGROUP M=OPENA ACBP=48 + 05CB:1140 0001 C=BSS S=_BSS G=DGROUP M=PUTC ACBP=48 + 05CB:1142 0000 C=BSS S=_BSS G=DGROUP M=READ ACBP=48 + 05CB:1142 0000 C=BSS S=_BSS G=DGROUP M=STRCAT ACBP=48 + 05CB:1142 0000 C=BSS S=_BSS G=DGROUP M=STRLEN ACBP=48 + 05CB:1142 0000 C=BSS S=_BSS G=DGROUP M=WRITEA ACBP=48 + 05CB:1142 0000 C=BSSEND S=_BSSEND G=DGROUP M=c0.ASM ACBP=28 + 06E0:0000 0080 C=STACK S=_STACK G=(none) M=c0.ASM ACBP=74 + + Address Publics by Name + + 05CB:0000 idle DATASEG@ + 0000:028B idle DGROUP@ + 0000:313D idle F_LXLSH@ + 0000:315E idle F_LXURSH@ + 0000:317F idle F_PADD@ + 0000:31DF idle F_PSBP@ + 0000:31AE idle F_PSUB@ + 0000:028F idle KITTENGETS + 0000:313D idle LXLSH@ + 0000:315E idle LXURSH@ + 0000:313A N_LXLSH@ + 0000:315B N_LXURSH@ + 0000:317C N_PADD@ + 0000:33DB N_PCMP@ + 0000:31DC N_PSBP@ + 0000:31AB idle N_PSUB@ + 0000:317F idle PADD@ + 0000:31DF idle PSBP@ + 0000:31AE idle PSUB@ + 0000:0276 _abort + 05CB:10EC idle _aftersort + 0000:3007 idle _atexit + 05CB:10EE idle _beforesort + 0000:0FF0 idle _CAL_OptimizeNodes + 0000:04F2 idle _catread + 0000:0E67 _CA_CloseDebug + 0000:0E72 idle _CA_FarRead + 0000:0EAE idle _CA_FarWrite + 0000:0F5E _CA_LoadFile + 0000:0E49 _CA_OpenDebug + 0000:0EEA idle _CA_ReadFile + 0000:107F _CA_Shutdown + 0000:1061 _CA_Startup + 0000:302B _clock + 0000:4ABC _close + 0000:3ACB _coreleft + 0000:3C01 idle _cprintf + 0000:07F4 idle _db_fetch + 0000:085C idle _db_insert + 05CB:10E6 _debughandle + 05CB:1061 _directvideo + 05CB:10E4 idle _drawcachebox + 05CB:10B0 _environ + 05CB:007F _errno + 0000:30FF _exit + 0000:434C _farcoreleft + 0000:3F21 _farfree + 0000:4035 _farmalloc + 0000:4196 idle _farrealloc + 0000:4B00 _fclose + 0000:4BB0 _fflush + 0000:4C76 _filelength + 0000:10C5 idle _filesize + 05CB:10E0 idle _finishcachebox + 0000:4CB7 _flushall + 0000:4EC0 _fopen + 0000:4EF5 _fprintf + 0000:5420 idle _fputc + 0000:55A9 idle _fputchar + 0000:3F21 _free + 0000:4F93 _fseek + 0000:500F _ftell + 0000:439C _getch + 0000:43B5 idle _getche + 0000:50E9 _getenv + 0000:43F0 _gettext + 0000:079F idle _get_line + 0000:0BF1 idle _HC_CloseDebug + 0000:0BD3 idle _HC_OpenDebug + 05CB:10DE idle _heaphandle + 0000:449C _ioctl + 0000:324F _isatty + 0000:5159 idle _itoa + 0000:44C5 _kbhit + 0000:05A0 idle _kittenclose + 0000:02DE idle _kittenopen + 0000:0A4B idle _LargestFarFreeBlock + 0000:090E idle _LargestFreeBlock + 0000:3302 _lseek + 0000:51A1 idle _ltoa + 0000:0BFC _main + 0000:402B _malloc + 0000:51C9 _memcpy + 0000:1352 idle _MML_CheckForEMS + 0000:1613 idle _MML_CheckForXMS + 0000:1929 idle _MML_ClearBlock + 0000:1395 idle _MML_SetupEMS + 0000:1648 idle _MML_SetupXMS + 0000:148F idle _MML_ShutdownEMS + 0000:16E8 idle _MML_ShutdownXMS + 0000:172A idle _MML_UseSpace + 0000:2FEF idle _MM_BombOnError + 0000:2821 _MM_DumpData + 0000:220B _MM_FreePtr + 0000:1E17 _MM_GetPtr + 0000:14CF idle _MM_MapEMS + 0000:1569 idle _MM_MapXEMS + 0000:2A74 _MM_Report + 0000:3005 idle _MM_segude + 0000:2FFE idle _MM_seguin + 0000:23C2 idle _MM_SetLock + 0000:230E idle _MM_SetPurge + 0000:260B _MM_ShowMemory + 0000:1D8B _MM_Shutdown + 0000:247B idle _MM_SortMem + 0000:199A _MM_Startup + 0000:29E3 idle _MM_TotalFree + 0000:2973 idle _MM_UnusedMemory + 0000:51ED _movedata + 0000:44D7 _movetext + 0000:05A7 idle _mystrtoul + 0000:523C _open + 0000:53EB _printf + 0000:1124 idle _printmeminfoline + 0000:0643 idle _processEscChars + 05CB:10E8 idle _profilehandle + 0000:4574 _putch + 0000:4446 _puttext + 0000:5875 _read + 0000:418F idle _realloc + 0000:4A03 _setblock + 0000:5878 _setvbuf + 0000:59C7 _sprintf + 0000:5A0A _strcat + 0000:5A49 _strdup + 0000:5A89 _strlen + 0000:34DD _tolower + 0000:5184 _ultoa + 0000:43D2 idle _ungetch + 0000:3509 _unlink + 05CB:10E2 idle _updatecachebox + 0000:1283 _US_CheckParm + 0000:59E9 idle _vsprintf + 0000:108A idle _wait + 0000:4A7D idle _wherex + 0000:4A8C idle _wherey + 0000:5C2D _write + 05CB:10EA idle _XMSaddr + 0000:1000 idle __AHINCR + 0000:000C idle __AHSHIFT + 05CB:10A0 __argc + 05CB:10A2 __argv + 05CB:0CB8 __atexitcnt + 05CB:10F0 __atexittbl + 0000:4282 __brk + 05CB:008B __brklvl + 05CB:006B __C0argc + 05CB:006D __C0argv + 0000:3CE3 idle __c0crtinit + 05CB:0071 __C0environ + 05CB:109F __cChar + 0000:3120 idle __cexit + 05CB:109E __cFlag + 0000:0166 __checknull + 0000:4A9F __chmod + 0000:0153 __cleanup + 0000:4AE2 __close + 0000:09C0 idle __coreleft + 0000:3ACF __CPUTN + 0000:3D00 idle __crtinit + 05CB:0CBA __ctype + 0000:0000 Abs __cvtfak + 0000:312E idle __c_exit + 05CB:0F80 __doserrno + 0000:323D __DOSERROR + 05CB:0F82 idle __dosErrorToSV + 0000:3074 __dos_getfileattr + 0000:3094 idle __dos_setfileattr + 05CB:0075 __envLng + 05CB:0077 __envseg + 05CB:0079 __envSize + 0000:310E __exit + 05CB:0DBC __exitbuf + 05CB:0DBE __exitfopen + 05CB:0DC0 idle __exitopen + 0000:0B06 idle __farcoreleft + 05CB:0F7C __fmode + 0000:5406 idle __fputc + 0000:55BC __FPUTN + 0000:4E76 idle __GETFP + 05CB:0087 __heapbase + 05CB:008F __heaptop + 05CB:005B idle __Int0Vector + 05CB:005F idle __Int4Vector + 05CB:0063 idle __Int5Vector + 05CB:0067 idle __Int6Vector + 0000:3204 __IOERROR + 05CB:0094 idle __kitten_catalog + 0000:3260 __LONGTOA + 0000:332B __MKNAME + 0000:028D idle __MMODEL + 05CB:0F52 __nfile + 0000:43B5 idle __Ngetche + 05CB:0F7E __notUmask + 0000:43D2 idle __Nungetch + 0000:539C __open + 05CB:0F54 __openfd + 0000:4DAD idle __OPENFP + 05CB:007D __osmajor + 05CB:007E idle __osminor + 05CB:007D idle __osversion + 05CB:007B __psp + 0000:33FC __read + 0000:458B __REALCVT + 05CB:10BA __RealCvtVector + 0000:01BC __restorezero + 0000:42C1 __sbrk + 05CB:10BC idle __ScanTodVector + 0000:46C5 __SCREENIO + 0000:4778 __SCROLL + 0000:0000 Abs __setargv__ + 0000:0000 idle __setenvp__ + 0000:342B __setupio + 05CB:0081 __StartTime + 05CB:0FE6 __stklen + 0000:3A9B __stpcpy + 05CB:0DC2 __streams + 0000:0167 __terminate + 0000:3384 idle __TMPNAM + 0000:0000 idle __turboCrt + 0000:32E2 __UTOA + 0000:4701 __VALIDATEXY + 05CB:007D idle __version + 05CB:1052 __video + 0000:3C58 __VideoInt + 0000:3539 __VPRINTER + 0000:39FC __VPTR + 0000:3A21 __VRAM + 0000:4A73 __wherexy + 0000:5BF1 __write + 05CB:1050 __wscroll + 0000:5C30 __xfclose + 0000:5C6B __xfflush + 05CB:0085 idle ___brklvl + 0000:3DE1 idle ___first + 0000:3DE3 idle ___last + 0000:57AA ___read + 0000:3DE5 idle ___rover + 0000:5AA8 ___write + + Address Publics by Value + + 0000:0000 Abs __setargv__ + 0000:0000 idle __turboCrt + 0000:0000 Abs __cvtfak + 0000:0000 idle __setenvp__ + 0000:000C idle __AHSHIFT + 0000:0153 __cleanup + 0000:0166 __checknull + 0000:0167 __terminate + 0000:01BC __restorezero + 0000:0276 _abort + 0000:028B idle DGROUP@ + 0000:028D idle __MMODEL + 0000:028F idle KITTENGETS + 0000:02DE idle _kittenopen + 0000:04F2 idle _catread + 0000:05A0 idle _kittenclose + 0000:05A7 idle _mystrtoul + 0000:0643 idle _processEscChars + 0000:079F idle _get_line + 0000:07F4 idle _db_fetch + 0000:085C idle _db_insert + 0000:090E idle _LargestFreeBlock + 0000:09C0 idle __coreleft + 0000:0A4B idle _LargestFarFreeBlock + 0000:0B06 idle __farcoreleft + 0000:0BD3 idle _HC_OpenDebug + 0000:0BF1 idle _HC_CloseDebug + 0000:0BFC _main + 0000:0E49 _CA_OpenDebug + 0000:0E67 _CA_CloseDebug + 0000:0E72 idle _CA_FarRead + 0000:0EAE idle _CA_FarWrite + 0000:0EEA idle _CA_ReadFile + 0000:0F5E _CA_LoadFile + 0000:0FF0 idle _CAL_OptimizeNodes + 0000:1000 idle __AHINCR + 0000:1061 _CA_Startup + 0000:107F _CA_Shutdown + 0000:108A idle _wait + 0000:10C5 idle _filesize + 0000:1124 idle _printmeminfoline + 0000:1283 _US_CheckParm + 0000:1352 idle _MML_CheckForEMS + 0000:1395 idle _MML_SetupEMS + 0000:148F idle _MML_ShutdownEMS + 0000:14CF idle _MM_MapEMS + 0000:1569 idle _MM_MapXEMS + 0000:1613 idle _MML_CheckForXMS + 0000:1648 idle _MML_SetupXMS + 0000:16E8 idle _MML_ShutdownXMS + 0000:172A idle _MML_UseSpace + 0000:1929 idle _MML_ClearBlock + 0000:199A _MM_Startup + 0000:1D8B _MM_Shutdown + 0000:1E17 _MM_GetPtr + 0000:220B _MM_FreePtr + 0000:230E idle _MM_SetPurge + 0000:23C2 idle _MM_SetLock + 0000:247B idle _MM_SortMem + 0000:260B _MM_ShowMemory + 0000:2821 _MM_DumpData + 0000:2973 idle _MM_UnusedMemory + 0000:29E3 idle _MM_TotalFree + 0000:2A74 _MM_Report + 0000:2FEF idle _MM_BombOnError + 0000:2FFE idle _MM_seguin + 0000:3005 idle _MM_segude + 0000:3007 idle _atexit + 0000:302B _clock + 0000:3074 __dos_getfileattr + 0000:3094 idle __dos_setfileattr + 0000:30FF _exit + 0000:310E __exit + 0000:3120 idle __cexit + 0000:312E idle __c_exit + 0000:313A N_LXLSH@ + 0000:313D idle LXLSH@ + 0000:313D idle F_LXLSH@ + 0000:315B N_LXURSH@ + 0000:315E idle LXURSH@ + 0000:315E idle F_LXURSH@ + 0000:317C N_PADD@ + 0000:317F idle F_PADD@ + 0000:317F idle PADD@ + 0000:31AB idle N_PSUB@ + 0000:31AE idle F_PSUB@ + 0000:31AE idle PSUB@ + 0000:31DC N_PSBP@ + 0000:31DF idle PSBP@ + 0000:31DF idle F_PSBP@ + 0000:3204 __IOERROR + 0000:323D __DOSERROR + 0000:324F _isatty + 0000:3260 __LONGTOA + 0000:32E2 __UTOA + 0000:3302 _lseek + 0000:332B __MKNAME + 0000:3384 idle __TMPNAM + 0000:33DB N_PCMP@ + 0000:33FC __read + 0000:342B __setupio + 0000:34DD _tolower + 0000:3509 _unlink + 0000:3539 __VPRINTER + 0000:39FC __VPTR + 0000:3A21 __VRAM + 0000:3A9B __stpcpy + 0000:3ACB _coreleft + 0000:3ACF __CPUTN + 0000:3C01 idle _cprintf + 0000:3C58 __VideoInt + 0000:3CE3 idle __c0crtinit + 0000:3D00 idle __crtinit + 0000:3DE1 idle ___first + 0000:3DE3 idle ___last + 0000:3DE5 idle ___rover + 0000:3F21 _free + 0000:3F21 _farfree + 0000:402B _malloc + 0000:4035 _farmalloc + 0000:418F idle _realloc + 0000:4196 idle _farrealloc + 0000:4282 __brk + 0000:42C1 __sbrk + 0000:434C _farcoreleft + 0000:439C _getch + 0000:43B5 idle __Ngetche + 0000:43B5 idle _getche + 0000:43D2 idle __Nungetch + 0000:43D2 idle _ungetch + 0000:43F0 _gettext + 0000:4446 _puttext + 0000:449C _ioctl + 0000:44C5 _kbhit + 0000:44D7 _movetext + 0000:4574 _putch + 0000:458B __REALCVT + 0000:46C5 __SCREENIO + 0000:4701 __VALIDATEXY + 0000:4778 __SCROLL + 0000:4A03 _setblock + 0000:4A73 __wherexy + 0000:4A7D idle _wherex + 0000:4A8C idle _wherey + 0000:4A9F __chmod + 0000:4ABC _close + 0000:4AE2 __close + 0000:4B00 _fclose + 0000:4BB0 _fflush + 0000:4C76 _filelength + 0000:4CB7 _flushall + 0000:4DAD idle __OPENFP + 0000:4E76 idle __GETFP + 0000:4EC0 _fopen + 0000:4EF5 _fprintf + 0000:4F93 _fseek + 0000:500F _ftell + 0000:50E9 _getenv + 0000:5159 idle _itoa + 0000:5184 _ultoa + 0000:51A1 idle _ltoa + 0000:51C9 _memcpy + 0000:51ED _movedata + 0000:523C _open + 0000:539C __open + 0000:53EB _printf + 0000:5406 idle __fputc + 0000:5420 idle _fputc + 0000:55A9 idle _fputchar + 0000:55BC __FPUTN + 0000:57AA ___read + 0000:5875 _read + 0000:5878 _setvbuf + 0000:59C7 _sprintf + 0000:59E9 idle _vsprintf + 0000:5A0A _strcat + 0000:5A49 _strdup + 0000:5A89 _strlen + 0000:5AA8 ___write + 0000:5BF1 __write + 0000:5C2D _write + 0000:5C30 __xfclose + 0000:5C6B __xfflush + 05CB:0000 idle DATASEG@ + 05CB:005B idle __Int0Vector + 05CB:005F idle __Int4Vector + 05CB:0063 idle __Int5Vector + 05CB:0067 idle __Int6Vector + 05CB:006B __C0argc + 05CB:006D __C0argv + 05CB:0071 __C0environ + 05CB:0075 __envLng + 05CB:0077 __envseg + 05CB:0079 __envSize + 05CB:007B __psp + 05CB:007D idle __osversion + 05CB:007D __osmajor + 05CB:007D idle __version + 05CB:007E idle __osminor + 05CB:007F _errno + 05CB:0081 __StartTime + 05CB:0085 idle ___brklvl + 05CB:0087 __heapbase + 05CB:008B __brklvl + 05CB:008F __heaptop + 05CB:0094 idle __kitten_catalog + 05CB:0CB8 __atexitcnt + 05CB:0CBA __ctype + 05CB:0DBC __exitbuf + 05CB:0DBE __exitfopen + 05CB:0DC0 idle __exitopen + 05CB:0DC2 __streams + 05CB:0F52 __nfile + 05CB:0F54 __openfd + 05CB:0F7C __fmode + 05CB:0F7E __notUmask + 05CB:0F80 __doserrno + 05CB:0F82 idle __dosErrorToSV + 05CB:0FE6 __stklen + 05CB:1050 __wscroll + 05CB:1052 __video + 05CB:1061 _directvideo + 05CB:109E __cFlag + 05CB:109F __cChar + 05CB:10A0 __argc + 05CB:10A2 __argv + 05CB:10B0 _environ + 05CB:10BA __RealCvtVector + 05CB:10BC idle __ScanTodVector + 05CB:10DE idle _heaphandle + 05CB:10E0 idle _finishcachebox + 05CB:10E2 idle _updatecachebox + 05CB:10E4 idle _drawcachebox + 05CB:10E6 _debughandle + 05CB:10E8 idle _profilehandle + 05CB:10EA idle _XMSaddr + 05CB:10EC idle _aftersort + 05CB:10EE idle _beforesort + 05CB:10F0 __atexittbl + +Program entry point at 0000:0000 + diff --git a/HEAP.16 b/HEAP.16 index 13e04944..a55c85ea 100644 --- a/HEAP.16 +++ b/HEAP.16 @@ -1,11 +1,11 @@ == default == - USED block at 1d260016 of size 136 - USED block at 1d26009e of size 66 - FREE block at 1d2600e0 of size 7966 - USED block at 1d261ffe of size 20 - FREE block at 1d262012 of size 8170 + USED block at 1d2a0016 of size 136 + USED block at 1d2a009e of size 66 + FREE block at 1d2a00e0 of size 18 + USED block at 1d2a00f2 of size 20 + FREE block at 1d2a0106 of size 7926 OK - end of heap == near == @@ -32,9 +32,9 @@ OK - end of heap Memory Type Total Used Free ---------------- -------- -------- -------- -Default 16358 222 16136 +Default 8166 222 7944 Near 31318 862 30456 -Far 16358 222 16136 +Far 8166 222 7944 ---------------- -------- -------- -------- coreleft = 30454 farcoreleft = 38202 diff --git a/KITTEN.BCO b/KITTEN.BCO new file mode 100644 index 0000000000000000000000000000000000000000..033200823dcad24c549f4b9f229e8b4e84f355a7 GIT binary patch literal 5639 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 literal 0 HcmV?d00001 diff --git a/awoo.sh b/awoo.sh index 0751007b..0d6a1dc3 100644 --- a/awoo.sh +++ b/awoo.sh @@ -2,4 +2,3 @@ git add . bash ./boop.sh cp -fp *.exe /var/www/html/ -cp -fp 16/exmmtest/EXMMTEST.EXE /var/www/html/exmmbc.exe diff --git a/exmmbc.exe b/exmmbc.exe new file mode 100644 index 0000000000000000000000000000000000000000..de53fdb37592632d5b8651c7d29b103108c1ab2f GIT binary patch literal 48148 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 b6S#Os10uH`HFBdh_rmaioin%?G3CDjl;nBc literal 0 HcmV?d00001 diff --git a/16/exmmtest/EXMMTEST.PRJ b/exmmbc.prj similarity index 64% rename from 16/exmmtest/EXMMTEST.PRJ rename to exmmbc.prj index b2402dc435a9fd89ba1090b127fadf4626fd4894..7849060c05cb4d24e66d2c566dd51ae3fd3fff54 100644 GIT binary patch delta 1117 zcmY*YOH30{6um>=R6Z@VbovF97FoDK32+|6jp3vzj!83yA1giuu5MZ6)Ezu1Ez9MzIBoE4fLf|DR>`Hlwb;RQRJZkGJ z%-epmsxEKgcJ)rR-RqULJ9a+d9`OMF>LGxJpH%=pWPZNw&exGW1Wjny`KiWHlOKc@ zY?F6cr)`UUWUK5xn_wDiXN>Led8MuTs7uyb;FiqaD3L0^!nc%U-`_@A z3&Q7_?W7BOJ+dYQgr?S#HH3l!as%<9Ogc7ntb173JK~r&0Aa|zW11UKqsDhZFKY-9 z#9#*y)|prfKPK0bg8cU>rPOF*PwNnPKQOHsmd5`ji;Bm~id3(x6>B41LH_%+;!#u* z*wwPn6Cst#yOddR6HH5Tsp8?XzLmH#i&-)GlahK?*9|piP!bwbQQgR&QF9%ZdINOg z=&T}(J%r0SgotMb6Y7v2&1CxH7$XGDm`?>1ej-rMrvq+&KH$Rtuz7xk9BmFGt*his zU7OB-OeZ&Q4IWVaO2ux>iJ~vMD)c4AsZ4x)nYbtfh3$WIStR_UCh^ z`^^R&V1vy@{w>(sKtV!Wzt%b}Xi8QKArHmZ=Zt}LRwIE@cZ(sj6X$StFk?!WZoU_9 z5^9phSc-AxjD(q2Y+42SY(4OZXPeq)7T_Upn1#D=4^l7yIWS-ZMqvyt!6aOU8*mft o)$X`9kEX}&w>>%G78-81trv60wXkVX-f zB;aYggun_3R$10qp0PYOi7xaAq+OR>!dH^t~>J(qXxsXOr7BN3?mcu(~?3;59jl*A)Frx5hM=vHo>8Ne^Ck2c*^ziRKa$J%vm zNHeuv^`q*lC)9{~QvRpxD4&$q$^&IyNhlr4PqA$D1`C8dgn}mC7(D@6J{#lb*^85> zPIUO{dGR}&!z*v`({`Sj#y{?x#{xgG-M9y2w#>mE0_6U*46f36Q(~y|{OZkaA>-h6Eez|ddm%7BsImdC6 zS-0GzHV-#9oy=C~?R!F2r*f>;!}DO#ID@|G{vEjP@6Xduti+74lXM8>kG|rTV$le< zXs~IsK9Wvn>}FqxSXeFtd;PT(J6frYmazemSsv?fysL`Q$L%RM z-Q4=XWQI(j6*5giJc$oRndW(XL665-xfR71f8%}QVhSm%7{rREDf<5#gv1tO?z%*Y8YF1g_nW(z_+H-s@%embchAh6IWypyesF1L|pngn+?dB*+IZfem0Y_zZjpt^zaY1d8b; zP&S>A@AEM0d?=qyNE~^HH zvJadFE#N-j77_9~_z-*tegO_8XdD6FUqHx%`Go8OpMu?xeFDB;g2BNrfPaCIS3&qv zLbAYe@Fr*kH$luY7y~AQ8wG?Ulo9edcmV8I65=JmmpOjBUx_8LN5KmhnDi;zEoYCH@XL&yt24P3zC(a;AvQqZR)6|)9kf!H)c)`NP` z3@(G;LE8*#DYgj2+C}@ z6YQFR7|>xi#PHA%LVg1tp@?7b4mbhQ(J31|3w+S= zRsitFpuSj4;M1QF5m>>CK2Qek0z1@6o`g7g!~0+Y2y{n3Fd9q;CEyLP-+dPH4!(R3 z?f^Rvq!f@2#()vMv4G$w5bKPL4fccUU_c-2RIm$N22L*U5LgO!g73g1mzvL2V>r&d z(LR(j(=hubJ*I?83GsBB{QHDlw%U*FlN7(IzCd9f#MN;`)ZdrJ(M*TbnZ5~?tEV

xbbw7V=TU}a`fW|X3@Ql(e`GC3VoLp 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 XTUl+GEI+sm-(3$@qVzkwjgbEa0hnfw delta 8924 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 = _fmalloc(length); //start = mm->farheap = halloc(length, 1); length -= 16-(FP_OFF(start)&15); diff --git a/src/lib/nyan/kitten.c b/src/lib/nyan/kitten.c index 4e501dec..2e6e87ba 100644 --- a/src/lib/nyan/kitten.c +++ b/src/lib/nyan/kitten.c @@ -149,7 +149,7 @@ void dos_close(int file) /* Functions */ char * -pascal kittengets(int set_number, int message_number, char *message) +__pascal kittengets(int set_number, int message_number, char *message) { /* get message from a message _kitten_catalog */ diff --git a/src/lib/nyan/kitten.h b/src/lib/nyan/kitten.h index 2cec22fe..990eca5b 100644 --- a/src/lib/nyan/kitten.h +++ b/src/lib/nyan/kitten.h @@ -24,6 +24,8 @@ #ifndef _CATGETS_H #define _CATGETS_H +#include + #ifdef NOCATS /* #define NOCATS to disable that stuff completely */ @@ -58,7 +60,7 @@ extern "C" { #define catclose(catalog) kittenclose() - char * pascal kittengets( int set_number, int message_number,char *message); + char * __pascal kittengets( int set_number, int message_number,char *message); nl_catd kittenopen(char *name); void kittenclose (void); -- 2.39.2