]> 4ch.mooo.com Git - 16.git/commitdiff
==== Major release of EXMMTEST && EXMMBC ^^ it works!! yay!! ====
authorsparky4 <sparky4@cock.li>
Wed, 5 Aug 2015 07:41:44 +0000 (02:41 -0500)
committersparky4 <sparky4@cock.li>
Wed, 5 Aug 2015 07:41:44 +0000 (02:41 -0500)
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

41 files changed:
.gitignore
16/exmmtest/EXMMTEST.DSK [deleted file]
16/exmmtest/EXMMTEST.EXE [deleted file]
16/exmmtest/EXMMTEST.MAP [deleted file]
16/exmmtest/HEAP.16 [deleted file]
16/exmmtest/MMDUMP.16 [deleted file]
16/exmmtest/PROFILE.16 [deleted file]
16/exmmtest/TC0000.SWP [deleted file]
16/exmmtest/src/exmmtest.c [deleted file]
16/exmmtest/src/lib/16_ca.c [deleted file]
16/exmmtest/src/lib/16_ca.h [deleted file]
16/exmmtest/src/lib/16_hc.c [deleted file]
16/exmmtest/src/lib/16_hc.h [deleted file]
16/exmmtest/src/lib/16_head.c [deleted file]
16/exmmtest/src/lib/16_head.h [deleted file]
16/exmmtest/src/lib/16_mm.c [deleted file]
16/exmmtest/src/lib/16_mm.h [deleted file]
16/exmmtest/src/lib/nyan/kitten.c [deleted file]
16/exmmtest/src/lib/nyan/kitten.h [deleted file]
16/exmmtest/src/lib/types.h [deleted file]
16/exmmtest/wtf_this.wat [deleted file]
16_CA.BCO [new file with mode: 0644]
16_HC.BCO [new file with mode: 0644]
16_HEAD.BCO [new file with mode: 0644]
16_MM.BCO [new file with mode: 0644]
DEBUG.16
EXMMBC.BCO [new file with mode: 0644]
EXMMBC.DSK [new file with mode: 0644]
EXMMBC.MAP [new file with mode: 0644]
HEAP.16
KITTEN.BCO [new file with mode: 0644]
awoo.sh
exmmbc.exe [new file with mode: 0644]
exmmbc.prj [moved from 16/exmmtest/EXMMTEST.PRJ with 64% similarity]
exmmtest.exe
makefile
src/lib/16_hc.c
src/lib/16_head.h
src/lib/16_mm.c
src/lib/nyan/kitten.c
src/lib/nyan/kitten.h

index cd8061bb18d4151623fa59c5e25c6622bf6f63fd..6ba73f4de3ee710e192e78c91553af7c0378e002 100644 (file)
@@ -6,6 +6,7 @@
 !proj16.bfproject\r
 *.obj\r
 *.OBJ\r
+*.[O]\r
 *.*~\r
 FUCK\r
 *.err\r
diff --git a/16/exmmtest/EXMMTEST.DSK b/16/exmmtest/EXMMTEST.DSK
deleted file mode 100644 (file)
index b6525f9..0000000
Binary files a/16/exmmtest/EXMMTEST.DSK and /dev/null differ
diff --git a/16/exmmtest/EXMMTEST.EXE b/16/exmmtest/EXMMTEST.EXE
deleted file mode 100644 (file)
index 2fbb356..0000000
Binary files a/16/exmmtest/EXMMTEST.EXE and /dev/null differ
diff --git a/16/exmmtest/EXMMTEST.MAP b/16/exmmtest/EXMMTEST.MAP
deleted file mode 100644 (file)
index a909811..0000000
+++ /dev/null
@@ -1,752 +0,0 @@
-\r
- Start  Stop   Length Name               Class\r
-\r
- 00000H 05941H 05942H _TEXT              CODE\r
- 05950H 05950H 00000H _FARDATA           FAR_DATA\r
- 05950H 05950H 00000H _FARBSS            FAR_BSS\r
- 05950H 05950H 00000H _OVERLAY_          OVRINFO\r
- 05950H 05950H 00000H _1STUB_            STUBSEG\r
- 05950H 069E3H 01094H _DATA              DATA\r
- 069E4H 069E5H 00002H _CVTSEG            DATA\r
- 069E6H 069EBH 00006H _SCNSEG            DATA\r
- 069ECH 069ECH 00000H _CONST             CONST\r
- 069ECH 06A03H 00018H _INIT_             INITDATA\r
- 06A04H 06A04H 00000H _INITEND_          INITDATA\r
- 06A04H 06A04H 00000H _EXIT_             EXITDATA\r
- 06A04H 06A04H 00000H _EXITEND_          EXITDATA\r
- 06A04H 06A6BH 00068H _BSS               BSS\r
- 06A6CH 06A6CH 00000H _BSSEND            BSSEND\r
- 06A70H 06AEFH 00080H _STACK             STACK\r
-\r
-\r
-Detailed map of segments\r
-\r
- 0000:0000 028F C=CODE   S=_TEXT          G=(none)  M=c0.ASM     ACBP=28\r
- 0000:028F 05F7 C=CODE   S=_TEXT          G=(none)  M=SRC\LIB\NYAN\KITTEN.C ACBP=28\r
- 0000:0886 02A6 C=CODE   S=_TEXT          G=(none)  M=SRC\LIB\16_HC.C ACBP=28\r
- 0000:0B2C 023A C=CODE   S=_TEXT          G=(none)  M=SRC\EXMMTEST.C ACBP=28\r
- 0000:0D66 0232 C=CODE   S=_TEXT          G=(none)  M=SRC\LIB\16_CA.C ACBP=28\r
- 0000:0F98 0242 C=CODE   S=_TEXT          G=(none)  M=SRC\LIB\16_HEAD.C ACBP=28\r
- 0000:11DA 1A38 C=CODE   S=_TEXT          G=(none)  M=SRC\LIB\16_MM.C ACBP=28\r
- 0000:2C12 0024 C=CODE   S=_TEXT          G=(none)  M=ATEXIT     ACBP=28\r
- 0000:2C36 0049 C=CODE   S=_TEXT          G=(none)  M=CLOCK      ACBP=28\r
- 0000:2C7F 0000 C=CODE   S=_TEXT          G=(none)  M=CTYPE      ACBP=28\r
- 0000:2C7F 003D C=CODE   S=_TEXT          G=(none)  M=DOSFATTR   ACBP=28\r
- 0000:2CBC 0089 C=CODE   S=_TEXT          G=(none)  M=EXIT       ACBP=28\r
- 0000:2D45 0000 C=CODE   S=_TEXT          G=(none)  M=FILES      ACBP=28\r
- 0000:2D45 0000 C=CODE   S=_TEXT          G=(none)  M=FILES2     ACBP=28\r
- 0000:2D45 0000 C=CODE   S=_TEXT          G=(none)  M=FMODE      ACBP=28\r
- 0000:2D45 0021 C=CODE   S=_TEXT          G=(none)  M=H_LLSH     ACBP=28\r
- 0000:2D66 0021 C=CODE   S=_TEXT          G=(none)  M=H_LURSH    ACBP=28\r
- 0000:2D87 0060 C=CODE   S=_TEXT          G=(none)  M=H_PADD     ACBP=28\r
- 0000:2DE7 0028 C=CODE   S=_TEXT          G=(none)  M=H_PSBP     ACBP=28\r
- 0000:2E0F 004B C=CODE   S=_TEXT          G=(none)  M=IOERROR    ACBP=28\r
- 0000:2E5A 0011 C=CODE   S=_TEXT          G=(none)  M=ISATTY     ACBP=28\r
- 0000:2E6B 00A2 C=CODE   S=_TEXT          G=(none)  M=LONGTOA    ACBP=28\r
- 0000:2F0D 0029 C=CODE   S=_TEXT          G=(none)  M=LSEEK      ACBP=28\r
- 0000:2F36 00B0 C=CODE   S=_TEXT          G=(none)  M=MKNAME     ACBP=28\r
- 0000:2FE6 0021 C=CODE   S=_TEXT          G=(none)  M=N_PCMP     ACBP=28\r
- 0000:3007 002F C=CODE   S=_TEXT          G=(none)  M=READA      ACBP=28\r
- 0000:3036 00B2 C=CODE   S=_TEXT          G=(none)  M=SETUPIO    ACBP=28\r
- 0000:30E8 0000 C=CODE   S=_TEXT          G=(none)  M=STKLEN     ACBP=28\r
- 0000:30E8 002C C=CODE   S=_TEXT          G=(none)  M=TOLOWER    ACBP=28\r
- 0000:3114 0018 C=CODE   S=_TEXT          G=(none)  M=UNLINK     ACBP=28\r
- 0000:312C 04DB C=CODE   S=_TEXT          G=(none)  M=VPRINTER   ACBP=28\r
- 0000:3607 009F C=CODE   S=_TEXT          G=(none)  M=VRAM       ACBP=28\r
- 0000:36A6 0000 C=CODE   S=_TEXT          G=(none)  M=WSCROLL    ACBP=28\r
- 0000:36A6 0030 C=CODE   S=_TEXT          G=(none)  M=_STPCPY    ACBP=28\r
- 0000:36D6 0004 C=CODE   S=_TEXT          G=(none)  M=CORELEFT   ACBP=28\r
- 0000:36DA 014E C=CODE   S=_TEXT          G=(none)  M=CPRINTF    ACBP=28\r
- 0000:3828 01A5 C=CODE   S=_TEXT          G=(none)  M=CRTINIT    ACBP=28\r
- 0000:39CD 001F C=CODE   S=_TEXT          G=(none)  M=CVTFAK     ACBP=28\r
- 0000:39EC 042D C=CODE   S=_TEXT          G=(none)  M=FARHEAP    ACBP=28\r
- 0000:3E19 013E C=CODE   S=_TEXT          G=(none)  M=FBRK       ACBP=28\r
- 0000:3F57 0050 C=CODE   S=_TEXT          G=(none)  M=FCORELFT   ACBP=28\r
- 0000:3FA7 0054 C=CODE   S=_TEXT          G=(none)  M=GETCH      ACBP=28\r
- 0000:3FFB 00AC C=CODE   S=_TEXT          G=(none)  M=GPTEXT     ACBP=28\r
- 0000:40A7 0029 C=CODE   S=_TEXT          G=(none)  M=IOCTL      ACBP=28\r
- 0000:40D0 0012 C=CODE   S=_TEXT          G=(none)  M=KBHIT      ACBP=28\r
- 0000:40E2 009D C=CODE   S=_TEXT          G=(none)  M=MOVETEXT   ACBP=28\r
- 0000:417F 0017 C=CODE   S=_TEXT          G=(none)  M=PUTCH      ACBP=28\r
- 0000:4196 0004 C=CODE   S=_TEXT          G=(none)  M=REALCVT    ACBP=28\r
- 0000:419A 01C7 C=CODE   S=_TEXT          G=(none)  M=SCREEN     ACBP=28\r
- 0000:4361 0184 C=CODE   S=_TEXT          G=(none)  M=SCROLL     ACBP=28\r
- 0000:44E5 0129 C=CODE   S=_TEXT          G=(none)  M=SETARGV    ACBP=28\r
- 0000:460E 001C C=CODE   S=_TEXT          G=(none)  M=SETBLOCK   ACBP=28\r
- 0000:462A 0054 C=CODE   S=_TEXT          G=(none)  M=SETENVP    ACBP=28\r
- 0000:467E 002C C=CODE   S=_TEXT          G=(none)  M=WHEREXY    ACBP=28\r
- 0000:46AA 001D C=CODE   S=_TEXT          G=(none)  M=CHMODA     ACBP=28\r
- 0000:46C7 0026 C=CODE   S=_TEXT          G=(none)  M=CLOSE      ACBP=28\r
- 0000:46ED 001E C=CODE   S=_TEXT          G=(none)  M=CLOSEA     ACBP=28\r
- 0000:470B 00B0 C=CODE   S=_TEXT          G=(none)  M=FCLOSE     ACBP=28\r
- 0000:47BB 00C6 C=CODE   S=_TEXT          G=(none)  M=FFLUSH     ACBP=28\r
- 0000:4881 0041 C=CODE   S=_TEXT          G=(none)  M=FLENGTH    ACBP=28\r
- 0000:48C2 0040 C=CODE   S=_TEXT          G=(none)  M=FLUSHALL   ACBP=28\r
- 0000:4902 01FE C=CODE   S=_TEXT          G=(none)  M=FOPEN      ACBP=28\r
- 0000:4B00 001C C=CODE   S=_TEXT          G=(none)  M=FPRINTF    ACBP=28\r
- 0000:4B1C 01D8 C=CODE   S=_TEXT          G=(none)  M=FSEEK      ACBP=28\r
- 0000:4CF4 0070 C=CODE   S=_TEXT          G=(none)  M=GETENV     ACBP=28\r
- 0000:4D64 0070 C=CODE   S=_TEXT          G=(none)  M=LTOA1      ACBP=28\r
- 0000:4DD4 0024 C=CODE   S=_TEXT          G=(none)  M=MEMCPY     ACBP=28\r
- 0000:4DF8 0022 C=CODE   S=_TEXT          G=(none)  M=MOVEDATA   ACBP=28\r
- 0000:4E1A 018D C=CODE   S=_TEXT          G=(none)  M=OPEN       ACBP=28\r
- 0000:4FA7 004F C=CODE   S=_TEXT          G=(none)  M=OPENA      ACBP=28\r
- 0000:4FF6 001B C=CODE   S=_TEXT          G=(none)  M=PRINTF     ACBP=28\r
- 0000:5011 03A4 C=CODE   S=_TEXT          G=(none)  M=PUTC       ACBP=28\r
- 0000:53B5 00CB C=CODE   S=_TEXT          G=(none)  M=READ       ACBP=28\r
- 0000:5480 0003 C=CODE   S=_TEXT          G=(none)  M=READU      ACBP=28\r
- 0000:5483 0111 C=CODE   S=_TEXT          G=(none)  M=SETVBUF    ACBP=28\r
- 0000:5594 0081 C=CODE   S=_TEXT          G=(none)  M=SPRINTF    ACBP=28\r
- 0000:5615 003F C=CODE   S=_TEXT          G=(none)  M=STRCAT     ACBP=28\r
- 0000:5654 003D C=CODE   S=_TEXT          G=(none)  M=STRCHR     ACBP=28\r
- 0000:5691 0030 C=CODE   S=_TEXT          G=(none)  M=STRCMP     ACBP=28\r
- 0000:56C1 0029 C=CODE   S=_TEXT          G=(none)  M=STRCPY     ACBP=28\r
- 0000:56EA 0040 C=CODE   S=_TEXT          G=(none)  M=STRDUP     ACBP=28\r
- 0000:572A 001F C=CODE   S=_TEXT          G=(none)  M=STRLEN     ACBP=28\r
- 0000:5749 0149 C=CODE   S=_TEXT          G=(none)  M=WRITE      ACBP=28\r
- 0000:5892 003C C=CODE   S=_TEXT          G=(none)  M=WRITEA     ACBP=28\r
- 0000:58CE 0003 C=CODE   S=_TEXT          G=(none)  M=WRITEU     ACBP=28\r
- 0000:58D1 003B C=CODE   S=_TEXT          G=(none)  M=XFCLOSE    ACBP=28\r
- 0000:590C 0036 C=CODE   S=_TEXT          G=(none)  M=XFFLUSH    ACBP=28\r
- 0595:0000 0000 C=FAR_DATA S=_FARDATA       G=(none)  M=c0.ASM     ACBP=68\r
- 0595:0000 0000 C=FAR_BSS S=_FARBSS        G=(none)  M=c0.ASM     ACBP=68\r
- 0595:0000 0000 C=OVRINFO S=_OVERLAY_      G=(none)  M=c0.ASM     ACBP=68\r
- 0595:0000 0000 C=STUBSEG S=_1STUB_        G=(none)  M=c0.ASM     ACBP=68\r
- 0595:0000 0093 C=DATA   S=_DATA          G=DGROUP  M=c0.ASM     ACBP=68\r
- 0595:0094 0045 C=DATA   S=_DATA          G=DGROUP  M=SRC\LIB\NYAN\KITTEN.C ACBP=48\r
- 0595:00DA 0014 C=DATA   S=_DATA          G=DGROUP  M=SRC\LIB\16_HC.C ACBP=48\r
- 0595:00EE 0187 C=DATA   S=_DATA          G=DGROUP  M=SRC\EXMMTEST.C ACBP=48\r
- 0595:0276 002C C=DATA   S=_DATA          G=DGROUP  M=SRC\LIB\16_CA.C ACBP=48\r
- 0595:02A2 0010 C=DATA   S=_DATA          G=DGROUP  M=SRC\LIB\16_HEAD.C ACBP=48\r
- 0595:02B2 09E0 C=DATA   S=_DATA          G=DGROUP  M=SRC\LIB\16_MM.C ACBP=48\r
- 0595:0C92 0002 C=DATA   S=_DATA          G=DGROUP  M=ATEXIT     ACBP=48\r
- 0595:0C94 0000 C=DATA   S=_DATA          G=DGROUP  M=CLOCK      ACBP=48\r
- 0595:0C94 0101 C=DATA   S=_DATA          G=DGROUP  M=CTYPE      ACBP=48\r
- 0595:0D96 0000 C=DATA   S=_DATA          G=DGROUP  M=DOSFATTR   ACBP=48\r
- 0595:0D96 0006 C=DATA   S=_DATA          G=DGROUP  M=EXIT       ACBP=48\r
- 0595:0D9C 0190 C=DATA   S=_DATA          G=DGROUP  M=FILES      ACBP=48\r
- 0595:0F2C 002A C=DATA   S=_DATA          G=DGROUP  M=FILES2     ACBP=48\r
- 0595:0F56 0004 C=DATA   S=_DATA          G=DGROUP  M=FMODE      ACBP=48\r
- 0595:0F5A 0000 C=DATA   S=_DATA          G=DGROUP  M=H_LLSH     ACBP=48\r
- 0595:0F5A 0000 C=DATA   S=_DATA          G=DGROUP  M=H_LURSH    ACBP=48\r
- 0595:0F5A 0000 C=DATA   S=_DATA          G=DGROUP  M=H_PADD     ACBP=48\r
- 0595:0F5A 0000 C=DATA   S=_DATA          G=DGROUP  M=H_PSBP     ACBP=48\r
- 0595:0F5A 005B C=DATA   S=_DATA          G=DGROUP  M=IOERROR    ACBP=48\r
- 0595:0FB6 0000 C=DATA   S=_DATA          G=DGROUP  M=ISATTY     ACBP=48\r
- 0595:0FB6 0000 C=DATA   S=_DATA          G=DGROUP  M=LONGTOA    ACBP=48\r
- 0595:0FB6 0000 C=DATA   S=_DATA          G=DGROUP  M=LSEEK      ACBP=48\r
- 0595:0FB6 0009 C=DATA   S=_DATA          G=DGROUP  M=MKNAME     ACBP=48\r
- 0595:0FC0 0000 C=DATA   S=_DATA          G=DGROUP  M=N_PCMP     ACBP=48\r
- 0595:0FC0 0000 C=DATA   S=_DATA          G=DGROUP  M=READA      ACBP=48\r
- 0595:0FC0 0000 C=DATA   S=_DATA          G=DGROUP  M=SETUPIO    ACBP=48\r
- 0595:0FC0 0002 C=DATA   S=_DATA          G=DGROUP  M=STKLEN     ACBP=48\r
- 0595:0FC2 0000 C=DATA   S=_DATA          G=DGROUP  M=TOLOWER    ACBP=48\r
- 0595:0FC2 0000 C=DATA   S=_DATA          G=DGROUP  M=UNLINK     ACBP=48\r
- 0595:0FC2 0067 C=DATA   S=_DATA          G=DGROUP  M=VPRINTER   ACBP=48\r
- 0595:102A 0000 C=DATA   S=_DATA          G=DGROUP  M=VRAM       ACBP=48\r
- 0595:102A 0002 C=DATA   S=_DATA          G=DGROUP  M=WSCROLL    ACBP=48\r
- 0595:102C 0000 C=DATA   S=_DATA          G=DGROUP  M=_STPCPY    ACBP=48\r
- 0595:102C 0000 C=DATA   S=_DATA          G=DGROUP  M=CORELEFT   ACBP=48\r
- 0595:102C 0000 C=DATA   S=_DATA          G=DGROUP  M=CPRINTF    ACBP=48\r
- 0595:102C 0018 C=DATA   S=_DATA          G=DGROUP  M=CRTINIT    ACBP=48\r
- 0595:1044 0031 C=DATA   S=_DATA          G=DGROUP  M=CVTFAK     ACBP=48\r
- 0595:1076 0000 C=DATA   S=_DATA          G=DGROUP  M=FARHEAP    ACBP=48\r
- 0595:1076 0002 C=DATA   S=_DATA          G=DGROUP  M=FBRK       ACBP=48\r
- 0595:1078 0000 C=DATA   S=_DATA          G=DGROUP  M=FCORELFT   ACBP=48\r
- 0595:1078 0000 C=DATA   S=_DATA          G=DGROUP  M=GETCH      ACBP=48\r
- 0595:1078 0000 C=DATA   S=_DATA          G=DGROUP  M=GPTEXT     ACBP=48\r
- 0595:1078 0000 C=DATA   S=_DATA          G=DGROUP  M=IOCTL      ACBP=48\r
- 0595:1078 0002 C=DATA   S=_DATA          G=DGROUP  M=KBHIT      ACBP=48\r
- 0595:107A 0000 C=DATA   S=_DATA          G=DGROUP  M=MOVETEXT   ACBP=48\r
- 0595:107A 0000 C=DATA   S=_DATA          G=DGROUP  M=PUTCH      ACBP=48\r
- 0595:107A 0000 C=DATA   S=_DATA          G=DGROUP  M=REALCVT    ACBP=48\r
- 0595:107A 0000 C=DATA   S=_DATA          G=DGROUP  M=SCREEN     ACBP=48\r
- 0595:107A 0000 C=DATA   S=_DATA          G=DGROUP  M=SCROLL     ACBP=48\r
- 0595:107A 0010 C=DATA   S=_DATA          G=DGROUP  M=SETARGV    ACBP=48\r
- 0595:108A 0000 C=DATA   S=_DATA          G=DGROUP  M=SETBLOCK   ACBP=48\r
- 0595:108A 0004 C=DATA   S=_DATA          G=DGROUP  M=SETENVP    ACBP=48\r
- 0595:108E 0000 C=DATA   S=_DATA          G=DGROUP  M=WHEREXY    ACBP=48\r
- 0595:108E 0000 C=DATA   S=_DATA          G=DGROUP  M=CHMODA     ACBP=48\r
- 0595:108E 0000 C=DATA   S=_DATA          G=DGROUP  M=CLOSE      ACBP=48\r
- 0595:108E 0000 C=DATA   S=_DATA          G=DGROUP  M=CLOSEA     ACBP=48\r
- 0595:108E 0000 C=DATA   S=_DATA          G=DGROUP  M=FCLOSE     ACBP=48\r
- 0595:108E 0000 C=DATA   S=_DATA          G=DGROUP  M=FFLUSH     ACBP=48\r
- 0595:108E 0000 C=DATA   S=_DATA          G=DGROUP  M=FLENGTH    ACBP=48\r
- 0595:108E 0000 C=DATA   S=_DATA          G=DGROUP  M=FLUSHALL   ACBP=48\r
- 0595:108E 0000 C=DATA   S=_DATA          G=DGROUP  M=FOPEN      ACBP=48\r
- 0595:108E 0000 C=DATA   S=_DATA          G=DGROUP  M=FPRINTF    ACBP=48\r
- 0595:108E 0000 C=DATA   S=_DATA          G=DGROUP  M=FSEEK      ACBP=48\r
- 0595:108E 0000 C=DATA   S=_DATA          G=DGROUP  M=GETENV     ACBP=48\r
- 0595:108E 0000 C=DATA   S=_DATA          G=DGROUP  M=LTOA1      ACBP=48\r
- 0595:108E 0000 C=DATA   S=_DATA          G=DGROUP  M=MEMCPY     ACBP=48\r
- 0595:108E 0000 C=DATA   S=_DATA          G=DGROUP  M=MOVEDATA   ACBP=48\r
- 0595:108E 0000 C=DATA   S=_DATA          G=DGROUP  M=OPEN       ACBP=48\r
- 0595:108E 0000 C=DATA   S=_DATA          G=DGROUP  M=OPENA      ACBP=48\r
- 0595:108E 0000 C=DATA   S=_DATA          G=DGROUP  M=PRINTF     ACBP=48\r
- 0595:108E 0001 C=DATA   S=_DATA          G=DGROUP  M=PUTC       ACBP=48\r
- 0595:1090 0000 C=DATA   S=_DATA          G=DGROUP  M=READ       ACBP=48\r
- 0595:1090 0000 C=DATA   S=_DATA          G=DGROUP  M=READU      ACBP=48\r
- 0595:1090 0004 C=DATA   S=_DATA          G=DGROUP  M=SETVBUF    ACBP=48\r
- 0595:1094 0000 C=DATA   S=_DATA          G=DGROUP  M=SPRINTF    ACBP=48\r
- 0595:1094 0000 C=DATA   S=_DATA          G=DGROUP  M=STRCAT     ACBP=48\r
- 0595:1094 0000 C=DATA   S=_DATA          G=DGROUP  M=STRCHR     ACBP=48\r
- 0595:1094 0000 C=DATA   S=_DATA          G=DGROUP  M=STRCMP     ACBP=48\r
- 0595:1094 0000 C=DATA   S=_DATA          G=DGROUP  M=STRCPY     ACBP=48\r
- 0595:1094 0000 C=DATA   S=_DATA          G=DGROUP  M=STRDUP     ACBP=48\r
- 0595:1094 0000 C=DATA   S=_DATA          G=DGROUP  M=STRLEN     ACBP=48\r
- 0595:1094 0000 C=DATA   S=_DATA          G=DGROUP  M=WRITE      ACBP=48\r
- 0595:1094 0000 C=DATA   S=_DATA          G=DGROUP  M=WRITEA     ACBP=48\r
- 0595:1094 0000 C=DATA   S=_DATA          G=DGROUP  M=WRITEU     ACBP=48\r
- 0595:1094 0000 C=DATA   S=_DATA          G=DGROUP  M=XFCLOSE    ACBP=48\r
- 0595:1094 0000 C=DATA   S=_DATA          G=DGROUP  M=XFFLUSH    ACBP=48\r
- 0595:1094 0000 C=DATA   S=_CVTSEG        G=DGROUP  M=c0.ASM     ACBP=48\r
- 0595:1094 0002 C=DATA   S=_CVTSEG        G=DGROUP  M=CVTFAK     ACBP=48\r
- 0595:1096 0000 C=DATA   S=_CVTSEG        G=DGROUP  M=REALCVT    ACBP=48\r
- 0595:1096 0000 C=DATA   S=_SCNSEG        G=DGROUP  M=c0.ASM     ACBP=48\r
- 0595:1096 0006 C=DATA   S=_SCNSEG        G=DGROUP  M=CVTFAK     ACBP=48\r
- 0595:109C 0000 C=CONST  S=_CONST         G=DGROUP  M=c0.ASM     ACBP=48\r
- 0595:109C 0000 C=INITDATA S=_INIT_         G=DGROUP  M=c0.ASM     ACBP=48\r
- 0595:109C 0006 C=INITDATA S=_INIT_         G=DGROUP  M=SETUPIO    ACBP=48\r
- 0595:10A2 0006 C=INITDATA S=_INIT_         G=DGROUP  M=CRTINIT    ACBP=48\r
- 0595:10A8 0006 C=INITDATA S=_INIT_         G=DGROUP  M=SETARGV    ACBP=48\r
- 0595:10AE 0006 C=INITDATA S=_INIT_         G=DGROUP  M=SETENVP    ACBP=48\r
- 0595:10B4 0000 C=INITDATA S=_INITEND_      G=DGROUP  M=c0.ASM     ACBP=28\r
- 0595:10B4 0000 C=EXITDATA S=_EXIT_         G=DGROUP  M=c0.ASM     ACBP=48\r
- 0595:10B4 0000 C=EXITDATA S=_EXITEND_      G=DGROUP  M=c0.ASM     ACBP=28\r
- 0595:10B4 0000 C=BSS    S=_BSS           G=DGROUP  M=c0.ASM     ACBP=48\r
- 0595:10B4 0004 C=BSS    S=_BSS           G=DGROUP  M=SRC\LIB\NYAN\KITTEN.C ACBP=48\r
- 0595:10B8 0002 C=BSS    S=_BSS           G=DGROUP  M=SRC\LIB\16_HC.C ACBP=48\r
- 0595:10BA 0000 C=BSS    S=_BSS           G=DGROUP  M=SRC\EXMMTEST.C ACBP=48\r
- 0595:10BA 000A C=BSS    S=_BSS           G=DGROUP  M=SRC\LIB\16_CA.C ACBP=48\r
- 0595:10C4 0000 C=BSS    S=_BSS           G=DGROUP  M=SRC\LIB\16_HEAD.C ACBP=48\r
- 0595:10C4 0006 C=BSS    S=_BSS           G=DGROUP  M=SRC\LIB\16_MM.C ACBP=48\r
- 0595:10CA 0040 C=BSS    S=_BSS           G=DGROUP  M=ATEXIT     ACBP=48\r
- 0595:110A 0001 C=BSS    S=_BSS           G=DGROUP  M=CLOCK      ACBP=48\r
- 0595:110C 0000 C=BSS    S=_BSS           G=DGROUP  M=DOSFATTR   ACBP=48\r
- 0595:110C 0000 C=BSS    S=_BSS           G=DGROUP  M=IOERROR    ACBP=48\r
- 0595:110C 0000 C=BSS    S=_BSS           G=DGROUP  M=ISATTY     ACBP=48\r
- 0595:110C 0000 C=BSS    S=_BSS           G=DGROUP  M=LONGTOA    ACBP=48\r
- 0595:110C 0000 C=BSS    S=_BSS           G=DGROUP  M=LSEEK      ACBP=48\r
- 0595:110C 000D C=BSS    S=_BSS           G=DGROUP  M=MKNAME     ACBP=48\r
- 0595:111A 0000 C=BSS    S=_BSS           G=DGROUP  M=READA      ACBP=48\r
- 0595:111A 0000 C=BSS    S=_BSS           G=DGROUP  M=SETUPIO    ACBP=48\r
- 0595:111A 0000 C=BSS    S=_BSS           G=DGROUP  M=UNLINK     ACBP=48\r
- 0595:111A 0000 C=BSS    S=_BSS           G=DGROUP  M=VPRINTER   ACBP=48\r
- 0595:111A 0000 C=BSS    S=_BSS           G=DGROUP  M=VRAM       ACBP=48\r
- 0595:111A 0000 C=BSS    S=_BSS           G=DGROUP  M=CORELEFT   ACBP=48\r
- 0595:111A 0000 C=BSS    S=_BSS           G=DGROUP  M=CRTINIT    ACBP=48\r
- 0595:111A 0000 C=BSS    S=_BSS           G=DGROUP  M=GETCH      ACBP=48\r
- 0595:111A 0000 C=BSS    S=_BSS           G=DGROUP  M=IOCTL      ACBP=48\r
- 0595:111A 0000 C=BSS    S=_BSS           G=DGROUP  M=KBHIT      ACBP=48\r
- 0595:111A 0000 C=BSS    S=_BSS           G=DGROUP  M=SETBLOCK   ACBP=48\r
- 0595:111A 0000 C=BSS    S=_BSS           G=DGROUP  M=CHMODA     ACBP=48\r
- 0595:111A 0000 C=BSS    S=_BSS           G=DGROUP  M=CLOSEA     ACBP=48\r
- 0595:111A 0000 C=BSS    S=_BSS           G=DGROUP  M=FLENGTH    ACBP=48\r
- 0595:111A 0000 C=BSS    S=_BSS           G=DGROUP  M=GETENV     ACBP=48\r
- 0595:111A 0000 C=BSS    S=_BSS           G=DGROUP  M=MEMCPY     ACBP=48\r
- 0595:111A 0000 C=BSS    S=_BSS           G=DGROUP  M=MOVEDATA   ACBP=48\r
- 0595:111A 0000 C=BSS    S=_BSS           G=DGROUP  M=OPEN       ACBP=48\r
- 0595:111A 0000 C=BSS    S=_BSS           G=DGROUP  M=OPENA      ACBP=48\r
- 0595:111A 0001 C=BSS    S=_BSS           G=DGROUP  M=PUTC       ACBP=48\r
- 0595:111C 0000 C=BSS    S=_BSS           G=DGROUP  M=READ       ACBP=48\r
- 0595:111C 0000 C=BSS    S=_BSS           G=DGROUP  M=STRCAT     ACBP=48\r
- 0595:111C 0000 C=BSS    S=_BSS           G=DGROUP  M=STRCHR     ACBP=48\r
- 0595:111C 0000 C=BSS    S=_BSS           G=DGROUP  M=STRCMP     ACBP=48\r
- 0595:111C 0000 C=BSS    S=_BSS           G=DGROUP  M=STRCPY     ACBP=48\r
- 0595:111C 0000 C=BSS    S=_BSS           G=DGROUP  M=STRLEN     ACBP=48\r
- 0595:111C 0000 C=BSS    S=_BSS           G=DGROUP  M=WRITEA     ACBP=48\r
- 0595:111C 0000 C=BSSEND S=_BSSEND        G=DGROUP  M=c0.ASM     ACBP=28\r
- 06A7:0000 0080 C=STACK  S=_STACK         G=(none)  M=c0.ASM     ACBP=74\r
-\r
-  Address         Publics by Name\r
-\r
- 0595:0000 idle  DATASEG@\r
- 0000:028B idle  DGROUP@\r
- 0000:2D48 idle  F_LXLSH@\r
- 0000:2D69 idle  F_LXURSH@\r
- 0000:2D8A idle  F_PADD@\r
- 0000:2DEA idle  F_PSBP@\r
- 0000:2DB9 idle  F_PSUB@\r
- 0000:028F idle  KITTENGETS\r
- 0000:2D48 idle  LXLSH@\r
- 0000:2D69 idle  LXURSH@\r
- 0000:2D45       N_LXLSH@\r
- 0000:2D66       N_LXURSH@\r
- 0000:2D87       N_PADD@\r
- 0000:2FE6       N_PCMP@\r
- 0000:2DE7       N_PSBP@\r
- 0000:2DB6 idle  N_PSUB@\r
- 0000:2D8A idle  PADD@\r
- 0000:2DEA idle  PSBP@\r
- 0000:2DB9 idle  PSUB@\r
- 0000:0276       _abort\r
- 0595:10C6 idle  _aftersort\r
- 0000:2C12 idle  _atexit\r
- 0595:10C8 idle  _beforesort\r
- 0000:0EFC idle  _CAL_OptimizeNodes\r
- 0000:04AF idle  _catread\r
- 0000:0D87       _CA_CloseDebug\r
- 0000:0D94 idle  _CA_FarRead\r
- 0000:0DD2 idle  _CA_FarWrite\r
- 0000:0E77       _CA_LoadFile\r
- 0000:0D66       _CA_OpenDebug\r
- 0000:0E10 idle  _CA_ReadFile\r
- 0000:0F8B       _CA_Shutdown\r
- 0000:0F6A       _CA_Startup\r
- 0000:2C36       _clock\r
- 0000:46C7       _close\r
- 0000:36D6       _coreleft\r
- 0000:380C idle  _cprintf\r
- 0000:078D idle  _db_fetch\r
- 0000:07DD idle  _db_insert\r
- 0595:10C0       _debughandle\r
- 0595:103B       _directvideo\r
- 0595:10BE idle  _drawcachebox\r
- 0595:108A       _environ\r
- 0595:007F       _errno\r
- 0000:2D0A       _exit\r
- 0000:3F57       _farcoreleft\r
- 0000:3B2C       _farfree\r
- 0000:3C40       _farmalloc\r
- 0000:3DA1 idle  _farrealloc\r
- 0000:470B       _fclose\r
- 0000:47BB       _fflush\r
- 0000:4881       _filelength\r
- 0000:0FD7 idle  _filesize\r
- 0595:10BA idle  _finishcachebox\r
- 0000:48C2       _flushall\r
- 0000:4ACB       _fopen\r
- 0000:4B00       _fprintf\r
- 0000:502B idle  _fputc\r
- 0000:51B4 idle  _fputchar\r
- 0000:3B2C       _free\r
- 0000:4B9E       _fseek\r
- 0000:4C1A       _ftell\r
- 0000:3FA7       _getch\r
- 0000:3FC0 idle  _getche\r
- 0000:4CF4       _getenv\r
- 0000:3FFB       _gettext\r
- 0000:0738 idle  _get_line\r
- 0000:0B1F idle  _HC_CloseDebug\r
- 0000:0AFE idle  _HC_OpenDebug\r
- 0595:10B8 idle  _heaphandle\r
- 0000:40A7       _ioctl\r
- 0000:2E5A       _isatty\r
- 0000:4D64 idle  _itoa\r
- 0000:40D0       _kbhit\r
- 0000:0546 idle  _kittenclose\r
- 0000:02DE idle  _kittenopen\r
- 0000:098F idle  _LargestFarFreeBlock\r
- 0000:0886 idle  _LargestFreeBlock\r
- 0000:2F0D       _lseek\r
- 0000:4DAC idle  _ltoa\r
- 0000:0B2C       _main\r
- 0000:3C36       _malloc\r
- 0000:4DD4       _memcpy\r
- 0000:11DA idle  _MML_CheckForEMS\r
- 0000:14A8 idle  _MML_CheckForXMS\r
- 0000:17E1 idle  _MML_ClearBlock\r
- 0000:121F idle  _MML_SetupEMS\r
- 0000:14DF idle  _MML_SetupXMS\r
- 0000:1325 idle  _MML_ShutdownEMS\r
- 0000:1585 idle  _MML_ShutdownXMS\r
- 0000:15B8 idle  _MML_UseSpace\r
- 0000:2BF2 idle  _MM_BombOnError\r
- 0000:269F       _MM_DumpData\r
- 0000:20B7       _MM_FreePtr\r
- 0000:1CC5       _MM_GetPtr\r
- 0000:1366 idle  _MM_MapEMS\r
- 0000:13FF idle  _MM_MapXEMS\r
- 0000:28E6       _MM_Report\r
- 0000:2C0C idle  _MM_segude\r
- 0000:2C01 idle  _MM_seguin\r
- 0000:2284 idle  _MM_SetLock\r
- 0000:21BD idle  _MM_SetPurge\r
- 0000:24F3       _MM_ShowMemory\r
- 0000:1C40       _MM_Shutdown\r
- 0000:2350 idle  _MM_SortMem\r
- 0000:1847       _MM_Startup\r
- 0000:284D idle  _MM_TotalFree\r
- 0000:27DB idle  _MM_UnusedMemory\r
- 0000:4DF8       _movedata\r
- 0000:40E2       _movetext\r
- 0000:0551 idle  _mystrtoul\r
- 0000:4E47       _open\r
- 0000:4FF6       _printf\r
- 0000:1036 idle  _printmeminfoline\r
- 0000:05DE idle  _processEscChars\r
- 0595:10C2 idle  _profilehandle\r
- 0000:417F       _putch\r
- 0000:4051       _puttext\r
- 0000:5480       _read\r
- 0000:3D9A idle  _realloc\r
- 0000:460E       _setblock\r
- 0000:5483       _setvbuf\r
- 0000:55D2       _sprintf\r
- 0000:5615       _strcat\r
- 0000:5654       _strchr\r
- 0000:5691       _strcmp\r
- 0000:56C1       _strcpy\r
- 0000:56EA       _strdup\r
- 0000:572A       _strlen\r
- 0000:30E8       _tolower\r
- 0000:4D8F       _ultoa\r
- 0000:3FDD idle  _ungetch\r
- 0000:3114       _unlink\r
- 0595:10BC idle  _updatecachebox\r
- 0000:1108       _US_CheckParm\r
- 0000:55F4 idle  _vsprintf\r
- 0000:0F98 idle  _wait\r
- 0000:4688 idle  _wherex\r
- 0000:4697 idle  _wherey\r
- 0000:58CE       _write\r
- 0595:10C4 idle  _XMSaddr\r
- 0000:1000 idle  __AHINCR\r
- 0000:000C idle  __AHSHIFT\r
- 0595:107A       __argc\r
- 0595:107C       __argv\r
- 0595:0C92       __atexitcnt\r
- 0595:10CA       __atexittbl\r
- 0000:3E8D       __brk\r
- 0595:008B       __brklvl\r
- 0595:006B       __C0argc\r
- 0595:006D       __C0argv\r
- 0000:38EE idle  __c0crtinit\r
- 0595:0071       __C0environ\r
- 0595:1079       __cChar\r
- 0000:2D2B idle  __cexit\r
- 0595:1078       __cFlag\r
- 0000:0166       __checknull\r
- 0000:46AA       __chmod\r
- 0000:0153       __cleanup\r
- 0000:46ED       __close\r
- 0000:091C idle  __coreleft\r
- 0000:36DA       __CPUTN\r
- 0000:390B idle  __crtinit\r
- 0595:0C94       __ctype\r
- 0000:0000  Abs  __cvtfak\r
- 0000:2D39 idle  __c_exit\r
- 0595:0F5A       __doserrno\r
- 0000:2E48       __DOSERROR\r
- 0595:0F5C idle  __dosErrorToSV\r
- 0000:2C7F       __dos_getfileattr\r
- 0000:2C9F idle  __dos_setfileattr\r
- 0595:0075       __envLng\r
- 0595:0077       __envseg\r
- 0595:0079       __envSize\r
- 0000:2D19       __exit\r
- 0595:0D96       __exitbuf\r
- 0595:0D98       __exitfopen\r
- 0595:0D9A idle  __exitopen\r
- 0000:0A31 idle  __farcoreleft\r
- 0595:0F56       __fmode\r
- 0000:5011 idle  __fputc\r
- 0000:51C7       __FPUTN\r
- 0000:4A81 idle  __GETFP\r
- 0595:0087       __heapbase\r
- 0595:008F       __heaptop\r
- 0595:005B idle  __Int0Vector\r
- 0595:005F idle  __Int4Vector\r
- 0595:0063 idle  __Int5Vector\r
- 0595:0067 idle  __Int6Vector\r
- 0000:2E0F       __IOERROR\r
- 0595:0094 idle  __kitten_catalog\r
- 0000:2E6B       __LONGTOA\r
- 0000:2F36       __MKNAME\r
- 0000:028D idle  __MMODEL\r
- 0595:0F2C       __nfile\r
- 0000:3FC0 idle  __Ngetche\r
- 0595:0F58       __notUmask\r
- 0000:3FDD idle  __Nungetch\r
- 0000:4FA7       __open\r
- 0595:0F2E       __openfd\r
- 0000:49B8 idle  __OPENFP\r
- 0595:007D       __osmajor\r
- 0595:007E idle  __osminor\r
- 0595:007D idle  __osversion\r
- 0595:007B       __psp\r
- 0000:3007       __read\r
- 0000:4196       __REALCVT\r
- 0595:1094       __RealCvtVector\r
- 0000:01BC       __restorezero\r
- 0000:3ECC       __sbrk\r
- 0595:1096 idle  __ScanTodVector\r
- 0000:42D0       __SCREENIO\r
- 0000:4383       __SCROLL\r
- 0000:0000  Abs  __setargv__\r
- 0000:0000 idle  __setenvp__\r
- 0000:3036       __setupio\r
- 0595:0081       __StartTime\r
- 0595:0FC0       __stklen\r
- 0000:36A6       __stpcpy\r
- 0595:0D9C       __streams\r
- 0000:0167       __terminate\r
- 0000:2F8F idle  __TMPNAM\r
- 0000:0000 idle  __turboCrt\r
- 0000:2EED       __UTOA\r
- 0000:430C       __VALIDATEXY\r
- 0595:007D idle  __version\r
- 0595:102C       __video\r
- 0000:3863       __VideoInt\r
- 0000:3144       __VPRINTER\r
- 0000:3607       __VPTR\r
- 0000:362C       __VRAM\r
- 0000:467E       __wherexy\r
- 0000:5892       __write\r
- 0595:102A       __wscroll\r
- 0000:58D1       __xfclose\r
- 0000:590C       __xfflush\r
- 0595:0085 idle  ___brklvl\r
- 0000:39EC idle  ___first\r
- 0000:39EE idle  ___last\r
- 0000:53B5       ___read\r
- 0000:39F0 idle  ___rover\r
- 0000:5749       ___write\r
-\r
-  Address         Publics by Value\r
-\r
- 0000:0000  Abs  __setargv__\r
- 0000:0000 idle  __turboCrt\r
- 0000:0000  Abs  __cvtfak\r
- 0000:0000 idle  __setenvp__\r
- 0000:000C idle  __AHSHIFT\r
- 0000:0153       __cleanup\r
- 0000:0166       __checknull\r
- 0000:0167       __terminate\r
- 0000:01BC       __restorezero\r
- 0000:0276       _abort\r
- 0000:028B idle  DGROUP@\r
- 0000:028D idle  __MMODEL\r
- 0000:028F idle  KITTENGETS\r
- 0000:02DE idle  _kittenopen\r
- 0000:04AF idle  _catread\r
- 0000:0546 idle  _kittenclose\r
- 0000:0551 idle  _mystrtoul\r
- 0000:05DE idle  _processEscChars\r
- 0000:0738 idle  _get_line\r
- 0000:078D idle  _db_fetch\r
- 0000:07DD idle  _db_insert\r
- 0000:0886 idle  _LargestFreeBlock\r
- 0000:091C idle  __coreleft\r
- 0000:098F idle  _LargestFarFreeBlock\r
- 0000:0A31 idle  __farcoreleft\r
- 0000:0AFE idle  _HC_OpenDebug\r
- 0000:0B1F idle  _HC_CloseDebug\r
- 0000:0B2C       _main\r
- 0000:0D66       _CA_OpenDebug\r
- 0000:0D87       _CA_CloseDebug\r
- 0000:0D94 idle  _CA_FarRead\r
- 0000:0DD2 idle  _CA_FarWrite\r
- 0000:0E10 idle  _CA_ReadFile\r
- 0000:0E77       _CA_LoadFile\r
- 0000:0EFC idle  _CAL_OptimizeNodes\r
- 0000:0F6A       _CA_Startup\r
- 0000:0F8B       _CA_Shutdown\r
- 0000:0F98 idle  _wait\r
- 0000:0FD7 idle  _filesize\r
- 0000:1000 idle  __AHINCR\r
- 0000:1036 idle  _printmeminfoline\r
- 0000:1108       _US_CheckParm\r
- 0000:11DA idle  _MML_CheckForEMS\r
- 0000:121F idle  _MML_SetupEMS\r
- 0000:1325 idle  _MML_ShutdownEMS\r
- 0000:1366 idle  _MM_MapEMS\r
- 0000:13FF idle  _MM_MapXEMS\r
- 0000:14A8 idle  _MML_CheckForXMS\r
- 0000:14DF idle  _MML_SetupXMS\r
- 0000:1585 idle  _MML_ShutdownXMS\r
- 0000:15B8 idle  _MML_UseSpace\r
- 0000:17E1 idle  _MML_ClearBlock\r
- 0000:1847       _MM_Startup\r
- 0000:1C40       _MM_Shutdown\r
- 0000:1CC5       _MM_GetPtr\r
- 0000:20B7       _MM_FreePtr\r
- 0000:21BD idle  _MM_SetPurge\r
- 0000:2284 idle  _MM_SetLock\r
- 0000:2350 idle  _MM_SortMem\r
- 0000:24F3       _MM_ShowMemory\r
- 0000:269F       _MM_DumpData\r
- 0000:27DB idle  _MM_UnusedMemory\r
- 0000:284D idle  _MM_TotalFree\r
- 0000:28E6       _MM_Report\r
- 0000:2BF2 idle  _MM_BombOnError\r
- 0000:2C01 idle  _MM_seguin\r
- 0000:2C0C idle  _MM_segude\r
- 0000:2C12 idle  _atexit\r
- 0000:2C36       _clock\r
- 0000:2C7F       __dos_getfileattr\r
- 0000:2C9F idle  __dos_setfileattr\r
- 0000:2D0A       _exit\r
- 0000:2D19       __exit\r
- 0000:2D2B idle  __cexit\r
- 0000:2D39 idle  __c_exit\r
- 0000:2D45       N_LXLSH@\r
- 0000:2D48 idle  LXLSH@\r
- 0000:2D48 idle  F_LXLSH@\r
- 0000:2D66       N_LXURSH@\r
- 0000:2D69 idle  LXURSH@\r
- 0000:2D69 idle  F_LXURSH@\r
- 0000:2D87       N_PADD@\r
- 0000:2D8A idle  F_PADD@\r
- 0000:2D8A idle  PADD@\r
- 0000:2DB6 idle  N_PSUB@\r
- 0000:2DB9 idle  F_PSUB@\r
- 0000:2DB9 idle  PSUB@\r
- 0000:2DE7       N_PSBP@\r
- 0000:2DEA idle  PSBP@\r
- 0000:2DEA idle  F_PSBP@\r
- 0000:2E0F       __IOERROR\r
- 0000:2E48       __DOSERROR\r
- 0000:2E5A       _isatty\r
- 0000:2E6B       __LONGTOA\r
- 0000:2EED       __UTOA\r
- 0000:2F0D       _lseek\r
- 0000:2F36       __MKNAME\r
- 0000:2F8F idle  __TMPNAM\r
- 0000:2FE6       N_PCMP@\r
- 0000:3007       __read\r
- 0000:3036       __setupio\r
- 0000:30E8       _tolower\r
- 0000:3114       _unlink\r
- 0000:3144       __VPRINTER\r
- 0000:3607       __VPTR\r
- 0000:362C       __VRAM\r
- 0000:36A6       __stpcpy\r
- 0000:36D6       _coreleft\r
- 0000:36DA       __CPUTN\r
- 0000:380C idle  _cprintf\r
- 0000:3863       __VideoInt\r
- 0000:38EE idle  __c0crtinit\r
- 0000:390B idle  __crtinit\r
- 0000:39EC idle  ___first\r
- 0000:39EE idle  ___last\r
- 0000:39F0 idle  ___rover\r
- 0000:3B2C       _free\r
- 0000:3B2C       _farfree\r
- 0000:3C36       _malloc\r
- 0000:3C40       _farmalloc\r
- 0000:3D9A idle  _realloc\r
- 0000:3DA1 idle  _farrealloc\r
- 0000:3E8D       __brk\r
- 0000:3ECC       __sbrk\r
- 0000:3F57       _farcoreleft\r
- 0000:3FA7       _getch\r
- 0000:3FC0 idle  __Ngetche\r
- 0000:3FC0 idle  _getche\r
- 0000:3FDD idle  __Nungetch\r
- 0000:3FDD idle  _ungetch\r
- 0000:3FFB       _gettext\r
- 0000:4051       _puttext\r
- 0000:40A7       _ioctl\r
- 0000:40D0       _kbhit\r
- 0000:40E2       _movetext\r
- 0000:417F       _putch\r
- 0000:4196       __REALCVT\r
- 0000:42D0       __SCREENIO\r
- 0000:430C       __VALIDATEXY\r
- 0000:4383       __SCROLL\r
- 0000:460E       _setblock\r
- 0000:467E       __wherexy\r
- 0000:4688 idle  _wherex\r
- 0000:4697 idle  _wherey\r
- 0000:46AA       __chmod\r
- 0000:46C7       _close\r
- 0000:46ED       __close\r
- 0000:470B       _fclose\r
- 0000:47BB       _fflush\r
- 0000:4881       _filelength\r
- 0000:48C2       _flushall\r
- 0000:49B8 idle  __OPENFP\r
- 0000:4A81 idle  __GETFP\r
- 0000:4ACB       _fopen\r
- 0000:4B00       _fprintf\r
- 0000:4B9E       _fseek\r
- 0000:4C1A       _ftell\r
- 0000:4CF4       _getenv\r
- 0000:4D64 idle  _itoa\r
- 0000:4D8F       _ultoa\r
- 0000:4DAC idle  _ltoa\r
- 0000:4DD4       _memcpy\r
- 0000:4DF8       _movedata\r
- 0000:4E47       _open\r
- 0000:4FA7       __open\r
- 0000:4FF6       _printf\r
- 0000:5011 idle  __fputc\r
- 0000:502B idle  _fputc\r
- 0000:51B4 idle  _fputchar\r
- 0000:51C7       __FPUTN\r
- 0000:53B5       ___read\r
- 0000:5480       _read\r
- 0000:5483       _setvbuf\r
- 0000:55D2       _sprintf\r
- 0000:55F4 idle  _vsprintf\r
- 0000:5615       _strcat\r
- 0000:5654       _strchr\r
- 0000:5691       _strcmp\r
- 0000:56C1       _strcpy\r
- 0000:56EA       _strdup\r
- 0000:572A       _strlen\r
- 0000:5749       ___write\r
- 0000:5892       __write\r
- 0000:58CE       _write\r
- 0000:58D1       __xfclose\r
- 0000:590C       __xfflush\r
- 0595:0000 idle  DATASEG@\r
- 0595:005B idle  __Int0Vector\r
- 0595:005F idle  __Int4Vector\r
- 0595:0063 idle  __Int5Vector\r
- 0595:0067 idle  __Int6Vector\r
- 0595:006B       __C0argc\r
- 0595:006D       __C0argv\r
- 0595:0071       __C0environ\r
- 0595:0075       __envLng\r
- 0595:0077       __envseg\r
- 0595:0079       __envSize\r
- 0595:007B       __psp\r
- 0595:007D idle  __osversion\r
- 0595:007D       __osmajor\r
- 0595:007D idle  __version\r
- 0595:007E idle  __osminor\r
- 0595:007F       _errno\r
- 0595:0081       __StartTime\r
- 0595:0085 idle  ___brklvl\r
- 0595:0087       __heapbase\r
- 0595:008B       __brklvl\r
- 0595:008F       __heaptop\r
- 0595:0094 idle  __kitten_catalog\r
- 0595:0C92       __atexitcnt\r
- 0595:0C94       __ctype\r
- 0595:0D96       __exitbuf\r
- 0595:0D98       __exitfopen\r
- 0595:0D9A idle  __exitopen\r
- 0595:0D9C       __streams\r
- 0595:0F2C       __nfile\r
- 0595:0F2E       __openfd\r
- 0595:0F56       __fmode\r
- 0595:0F58       __notUmask\r
- 0595:0F5A       __doserrno\r
- 0595:0F5C idle  __dosErrorToSV\r
- 0595:0FC0       __stklen\r
- 0595:102A       __wscroll\r
- 0595:102C       __video\r
- 0595:103B       _directvideo\r
- 0595:1078       __cFlag\r
- 0595:1079       __cChar\r
- 0595:107A       __argc\r
- 0595:107C       __argv\r
- 0595:108A       _environ\r
- 0595:1094       __RealCvtVector\r
- 0595:1096 idle  __ScanTodVector\r
- 0595:10B8 idle  _heaphandle\r
- 0595:10BA idle  _finishcachebox\r
- 0595:10BC idle  _updatecachebox\r
- 0595:10BE idle  _drawcachebox\r
- 0595:10C0       _debughandle\r
- 0595:10C2 idle  _profilehandle\r
- 0595:10C4 idle  _XMSaddr\r
- 0595:10C6 idle  _aftersort\r
- 0595:10C8 idle  _beforesort\r
- 0595:10CA       __atexittbl\r
-\r
-Program entry point at 0000:0000\r
-\r
diff --git a/16/exmmtest/HEAP.16 b/16/exmmtest/HEAP.16
deleted file mode 100644 (file)
index 81a386d..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-\r
-       == default ==\r
-\r
-  USED block at 1d280016 of size 136\r
-  USED block at 1d28009e of size 66\r
-  FREE block at 1d2800e0 of size 7966\r
-  USED block at 1d281ffe of size 20\r
-  FREE block at 1d282012 of size 8170\r
-OK - end of heap\r
-\r
-       == near ==\r
-\r
-  USED block at 0 of size 0\r
-  USED block at 0 of size 0\r
-  USED block at 0 of size 0\r
-  USED block at 0 of size 0\r
-  USED block at 0 of size 0\r
-  USED block at 0 of size 0\r
-  USED block at 0 of size 0\r
-  USED block at 0 of size 0\r
-  USED block at 0 of size 0\r
-OK - end of heap\r
-\r
-       == far ==\r
-\r
-  USED block at 0 of size 0\r
-  USED block at 0 of size 0\r
-  USED block at 0 of size 0\r
-  USED block at 0 of size 0\r
-  USED block at 0 of size 0\r
-OK - end of heap\r
-\r
-Memory Type         Total      Used       Free\r
-----------------  --------   --------   --------\r
-Default                   16358        222     16136\r
-Near              31318        880     30438\r
-Far               16358        222     16136\r
-----------------  --------   --------   --------\r
-coreleft = 30434\r
-farcoreleft = 38182\r
-GetFreeSize = 7768\r
-GetNearFreeSize = 30438\r
-GetFarFreeSize = 7768\r
-memavl = 30434\r
-stackavail = 17108\r
diff --git a/16/exmmtest/MMDUMP.16 b/16/exmmtest/MMDUMP.16
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/16/exmmtest/PROFILE.16 b/16/exmmtest/PROFILE.16
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/16/exmmtest/TC0000.SWP b/16/exmmtest/TC0000.SWP
deleted file mode 100644 (file)
index 200380e..0000000
Binary files a/16/exmmtest/TC0000.SWP and /dev/null differ
diff --git a/16/exmmtest/src/exmmtest.c b/16/exmmtest/src/exmmtest.c
deleted file mode 100644 (file)
index 0c65a47..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/* Project 16 Source Code~\r
- * Copyright (C) 2012-2015 sparky4 & pngwen & andrius4669\r
- *\r
- * This file is part of Project 16.\r
- *\r
- * Project 16 is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * Project 16 is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program.  If not, see <http://www.gnu.org/licenses/>, or\r
- * write to the Free Software Foundation, Inc., 51 Franklin Street,\r
- * Fifth Floor, Boston, MA 02110-1301 USA.\r
- *\r
- */\r
-/*\r
-       exmm test\r
-*/\r
-//#include <stdio.h>\r
-//#include <bios.h>\r
-\r
-#include "src/lib/16_head.h"\r
-#include "src/lib/16_ca.h"\r
-#include "src/lib/16_mm.h"\r
-#include "src/lib/16_hc.h"\r
-//#include "src/lib/modex16.h"\r
-#pragma hdrstop\r
-\r
-#pragma warn -pro\r
-#pragma warn -use\r
-\r
-//file load or read definition\r
-#define FILERL\r
-//#define FILEREAD\r
-\r
-void\r
-main(int argc, char *argv[])\r
-{\r
-       mminfo_t mm; mminfotype mmi;\r
-#ifdef __WATCOMC__\r
-       __segment sega;\r
-       void __based(sega)* bigbuffer;\r
-#endif\r
-#ifdef __BORLANDC__\r
-       memptr bigbuffer;\r
-#endif\r
-#ifdef FILERL\r
-       //static byte bakapee[64];\r
-       char *bakapee;\r
-       word baka;\r
-#endif\r
-       //static page_t screen;\r
-\r
-#ifdef __BORLANDC__\r
-       argc=argc;\r
-#endif\r
-       printf("&main()=        %Fp\n", *argv[0]);\r
-       printf("bigbuffer=      %Fp\n", bigbuffer);\r
-       printf("&bigbuffer=     %Fp\n", &bigbuffer);\r
-       printf("bigbuffer=      %04x\n", bigbuffer);\r
-       printf("&bigbuffer=     %04x\n", &bigbuffer);\r
-\r
-#ifdef FILERL\r
-       bakapee = malloc(64);\r
-#endif\r
-       mm.mmstarted=0;\r
-\r
-#ifdef FILERL\r
-//     printf("filename!: ");\r
-//     scanf("%[^\n]", &bakapee);\r
-       if(argv[1]) bakapee = argv[1];\r
-       else bakapee = "data/koishi~.pcx";\r
-#endif\r
-\r
-//     textInit();\r
-\r
-       // setup camera and screen~\r
-       //bug!!!\r
-       //screen = modexDefaultPage();\r
-       //screen.width += (16*2);\r
-       //screen.height += (16*2);\r
-\r
-       printf("main()=%Fp      start MM\n", *argv[0]);\r
-       MM_Startup(&mm, &mmi);\r
-       //PM_Startup();\r
-       //PM_UnlockMainMem();\r
-       CA_Startup();\r
-       printf("                done!\n");\r
-       printf("&main()=        %Fp\n", *argv[0]);\r
-       printf("bigbuffer=      %Fp\n", bigbuffer);\r
-       printf("&bigbuffer=     %Fp\n", &bigbuffer);\r
-       printf("bigbuffer=      %04x\n", bigbuffer);\r
-       printf("&bigbuffer=     %04x\n", &bigbuffer);\r
-//     getch();\r
-#ifdef FILERL\r
-//     bakapeehandle = open(bakapee,O_RDONLY | O_BINARY, S_IREAD);\r
-//     printf("size of big buffer~=%u\n", _bmsize(segu, bigbuffer));\r
-//     if(CA_FarRead(bakapeehandle,(void far *)&bigbuffer,sizeof(bigbuffer),&mm))\r
-#ifdef FILEREAD\r
-       printf("                read\n");\r
-       if(CA_ReadFile(bakapee, &bigbuffer, &mm))\r
-#else\r
-       printf("                load\n");\r
-       if(CA_LoadFile(bakapee, &bigbuffer, &mm, &mmi))\r
-#endif\r
-               baka=1;\r
-       else\r
-               baka=0;\r
-//     close(bakapeehandle);\r
-       //hmm functions in cache system use the buffered stuff\r
-#ifdef __WATCOMC__\r
-       printf("size of big buffer~=%u\n", _bmsize(sega, bigbuffer));\r
-#endif\r
-#endif\r
-       printf("dark purple = purgable\n");\r
-       printf("medium blue = non purgable\n");\r
-       printf("red = locked\n");\r
-       getch();\r
-       //++++modexEnter();\r
-       //++++modexShowPage(&screen);\r
-       MM_ShowMemory(&mm);\r
-       //getch();\r
-       MM_DumpData(&mm);\r
-       //++++modexLeave();\r
-       MM_Report(&mm, &mmi);\r
-       printf("                stop!\n");\r
-#ifdef FILERL\r
-       MM_FreePtr(&bigbuffer, &mm);\r
-#endif\r
-       //PM_Shutdown();\r
-       CA_Shutdown();\r
-       MM_Shutdown(&mm);\r
-       printf("                done!\n");\r
-#ifdef FILERL\r
-       free(bakapee);\r
-       if(baka) printf("\nyay!\n");\r
-       else printf("\npoo!\n");\r
-#endif\r
-       printf("bigbuffer=      %Fp\n", bigbuffer);\r
-       printf("&bigbuffer=     %Fp\n", &bigbuffer);\r
-       printf("bigbuffer=      %04x\n", bigbuffer);\r
-       printf("&bigbuffer=     %04x\n", &bigbuffer);\r
-       //printf("\n\n");\r
-       //printf("Total free:                   %lu\n", (dword)(GetFreeSize()));\r
-       //printf("Total near free:              %lu\n", (dword)(GetNearFreeSize()));\r
-       //printf("Total far free:                       %lu\n", (dword)(GetFarFreeSize()));\r
-       //getch();\r
-       printf("\n");\r
-#ifdef __WATCOMC__\r
-       heapdump();\r
-#endif\r
-       //printf("core left:                    %lu\n", (dword)_coreleft());\r
-       //printf("far core left:                        %lu\n", (dword)_farcoreleft());\r
-       //printf("based core left:                      %lu\n", (dword)_basedcoreleft());\r
-       //printf("huge core left:                       %lu\n", (dword)_hugecoreleft());\r
-}\r
diff --git a/16/exmmtest/src/lib/16_ca.c b/16/exmmtest/src/lib/16_ca.c
deleted file mode 100644 (file)
index d1ab94a..0000000
+++ /dev/null
@@ -1,2267 +0,0 @@
-/* Catacomb Apocalypse Source Code\r
- * Copyright (C) 1993-2014 Flat Rock Software\r
- *\r
- * This program is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along\r
- * with this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
- */\r
-\r
-// ID_CA.C\r
-\r
-/*\r
-=============================================================================\r
-\r
-Id Software Caching Manager\r
----------------------------\r
-\r
-Must be started BEFORE the memory manager, because it needs to get the headers\r
-loaded into the data segment\r
-\r
-=============================================================================\r
-*/\r
-\r
-#include "src/lib/16_ca.h"\r
-#pragma hdrstop\r
-\r
-#pragma warn -pro\r
-#pragma warn -use\r
-\r
-//#define THREEBYTEGRSTARTS\r
-\r
-/*\r
-=============================================================================\r
-\r
-                                                LOCAL CONSTANTS\r
-\r
-=============================================================================\r
-*/\r
-\r
-typedef struct\r
-{\r
-  unsigned bit0,bit1;  // 0-255 is a character, > is a pointer to a node\r
-} huffnode;\r
-\r
-\r
-/*typedef struct\r
-{\r
-       unsigned        RLEWtag;\r
-       long            headeroffsets[100];\r
-       byte            tileinfo[];\r
-} mapfiletype;*/\r
-\r
-\r
-/*\r
-=============================================================================\r
-\r
-                                                GLOBAL VARIABLES\r
-\r
-=============================================================================\r
-*/\r
-\r
-/*byte                 _seg    *tinf;\r
-int                    mapon;\r
-\r
-unsigned       _seg    *mapsegs[3];\r
-maptype                _seg    *mapheaderseg[NUMMAPS];\r
-byte           _seg    *audiosegs[NUMSNDCHUNKS];\r
-void           _seg    *grsegs[NUMCHUNKS];\r
-\r
-byte           far     grneeded[NUMCHUNKS];\r
-byte           ca_levelbit,ca_levelnum;*/\r
-\r
-int                    profilehandle,debughandle;\r
-\r
-void   (*drawcachebox)         (char *title, unsigned numcache);\r
-void   (*updatecachebox)       (void);\r
-void   (*finishcachebox)       (void);\r
-\r
-/*\r
-=============================================================================\r
-\r
-                                                LOCAL VARIABLES\r
-\r
-=============================================================================\r
-*/\r
-\r
-/*extern       long    far     CGAhead;\r
-extern long    far     EGAhead;\r
-extern byte    CGAdict;\r
-extern byte    EGAdict;\r
-extern byte    far     maphead;\r
-extern byte    mapdict;\r
-extern byte    far     audiohead;\r
-extern byte    audiodict;\r
-\r
-\r
-long           _seg *grstarts; // array of offsets in egagraph, -1 for sparse\r
-long           _seg *audiostarts;      // array of offsets in audio / audiot\r
-\r
-#ifdef GRHEADERLINKED\r
-huffnode       *grhuffman;\r
-#else\r
-huffnode       grhuffman[255];\r
-#endif\r
-\r
-#ifdef AUDIOHEADERLINKED\r
-huffnode       *audiohuffman;\r
-#else\r
-huffnode       audiohuffman[255];\r
-#endif\r
-\r
-\r
-int                    grhandle;               // handle to EGAGRAPH\r
-int                    maphandle;              // handle to MAPTEMP / GAMEMAPS\r
-int                    audiohandle;    // handle to AUDIOT / AUDIO\r
-\r
-long           chunkcomplen,chunkexplen;\r
-\r
-SDMode         oldsoundmode;\r
-\r
-\r
-\r
-void   CAL_DialogDraw (char *title,unsigned numcache);\r
-void   CAL_DialogUpdate (void);\r
-void   CAL_DialogFinish (void);*/\r
-//void CAL_CarmackExpand (unsigned far *source, unsigned far *dest,unsigned length);\r
-\r
-\r
-/*++++#ifdef THREEBYTEGRSTARTS\r
-#define FILEPOSSIZE    3\r
-//#define      GRFILEPOS(c) (*(long far *)(((byte far *)grstarts)+(c)*3)&0xffffff)\r
-long GRFILEPOS(int c)\r
-{\r
-       long value;\r
-       int     offset;\r
-\r
-       offset = c*3;\r
-\r
-       value = *(long far *)(((byte far *)grstarts)+offset);\r
-\r
-       value &= 0x00ffffffl;\r
-\r
-       if (value == 0xffffffl)\r
-               value = -1;\r
-\r
-       return value;\r
-};\r
-#else\r
-#define FILEPOSSIZE    4\r
-#define        GRFILEPOS(c) (grstarts[c])\r
-#endif*/\r
-\r
-/*\r
-=============================================================================\r
-\r
-                                          LOW LEVEL ROUTINES\r
-\r
-=============================================================================\r
-*/\r
-\r
-/*\r
-============================\r
-=\r
-= CA_OpenDebug / CA_CloseDebug\r
-=\r
-= Opens a binary file with the handle "debughandle"\r
-=\r
-============================\r
-*/\r
-void CA_OpenDebug(void)\r
-{\r
-       unlink("debug.16");\r
-       debughandle = open("debug.16", O_CREAT | O_WRONLY | O_TEXT);\r
-}\r
-\r
-void CA_CloseDebug(void)\r
-{\r
-       close(debughandle);\r
-}\r
-\r
-\r
-\r
-/*\r
-============================\r
-=\r
-= CAL_GetGrChunkLength\r
-=\r
-= Gets the length of an explicit length chunk (not tiles)\r
-= The file pointer is positioned so the compressed data can be read in next.\r
-=\r
-============================\r
-*/\r
-/*++++\r
-void CAL_GetGrChunkLength (int chunk)\r
-{\r
-       lseek(grhandle,GRFILEPOS(chunk),SEEK_SET);\r
-       read(grhandle,&chunkexplen,sizeof(chunkexplen));\r
-       chunkcomplen = GRFILEPOS(chunk+1)-GRFILEPOS(chunk)-4;\r
-}*/\r
-\r
-\r
-/*\r
-==========================\r
-=\r
-= CA_FarRead\r
-=\r
-= Read from a file to a far pointer\r
-=\r
-==========================\r
-*/\r
-\r
-boolean CA_FarRead(int handle, byte huge *dest, dword length, mminfo_t *mm)\r
-{\r
-       boolean flag;\r
-       /*dword fat=0;\r
-       word segm=0;\r
-       //if(mm->EMSVer<0x40)\r
-       if(length>0xfffflu)\r
-       {\r
-               printf("File is a fat bakapee\n");\r
-               segm=(length%0xfffflu)-1;\r
-               fat=segm*0xfffflu;\r
-               length-=fat;\r
-//             printf("CA_FarRead doesn't support 64K reads yet!\n");\r
-       }\r
-\r
-       if(!fat&&!segm)\r
-       {*/\r
-               __asm {\r
-                       push    ds\r
-                       mov     bx,[handle]\r
-                       mov     cx,[WORD PTR length]\r
-                       mov     dx,[WORD PTR dest]\r
-                       mov     ds,[WORD PTR dest+2]\r
-                       mov     ah,0x3f                         // READ w/handle\r
-                       int     21h\r
-                       pop     ds\r
-                       jnc     good\r
-                       mov     errno,ax\r
-                       mov     flag,0\r
-                       jmp End\r
-#ifdef __BORLANDC__\r
-               }\r
-#endif\r
-good:\r
-#ifdef __BORLANDC__\r
-               __asm {\r
-#endif\r
-                       cmp     ax,[WORD PTR length]\r
-                       je      done\r
-//                     errno = EINVFMT;                        // user manager knows this is bad read\r
-                       mov     flag,0\r
-                       jmp End\r
-#ifdef __BORLANDC__\r
-               }\r
-#endif\r
-done:\r
-#ifdef __BORLANDC__\r
-               __asm {\r
-#endif\r
-                       mov     flag,1\r
-#ifdef __BORLANDC__\r
-               }\r
-#endif\r
-End:\r
-#ifdef __WATCOMC__\r
-               }\r
-#endif\r
-       return flag;\r
-       //}else return 0;//todo: EXPAND!!!\r
-}\r
-\r
-\r
-/*\r
-==========================\r
-=\r
-= CA_SegWrite\r
-=\r
-= Write from a file to a far pointer\r
-=\r
-==========================\r
-*/\r
-\r
-boolean CA_FarWrite(int handle, byte huge *source, dword length, mminfo_t *mm)\r
-{\r
-       boolean flag;\r
-       /*dword fat=0;\r
-       word segm=0;\r
-       //if(mm->EMSVer<0x40)\r
-       if(length>0xfffflu)\r
-       {\r
-               printf("File is a fat bakapee\n");\r
-               segm=(length%0xfffflu)-1;\r
-               fat=segm*0xfffflu;\r
-               length-=fat;\r
-//             printf("CA_FarRead doesn't support 64K reads yet!\n");\r
-       }\r
-\r
-       if(!fat&&!segm)\r
-       {*/\r
-               __asm {\r
-                       push    ds\r
-                       mov     bx,[handle]\r
-                       mov     cx,[WORD PTR length]\r
-                       mov     dx,[WORD PTR source]\r
-                       mov     ds,[WORD PTR source+2]\r
-                       mov     ah,0x40                 // WRITE w/handle\r
-                       int     21h\r
-                       pop     ds\r
-                       jnc     good\r
-                       mov     errno,ax\r
-                       mov flag,0\r
-                       jmp End\r
-#ifdef __BORLANDC__\r
-               }\r
-#endif\r
-good:\r
-#ifdef __BORLANDC__\r
-               __asm {\r
-#endif\r
-                       cmp     ax,[WORD PTR length]\r
-                       je      done\r
-                       //errno = ENOMEM;                               // user manager knows this is bad write\r
-                       mov     flag,0\r
-                       jmp End\r
-#ifdef __BORLANDC__\r
-               }\r
-#endif\r
-done:\r
-#ifdef __BORLANDC__\r
-               __asm {\r
-#endif\r
-                       mov     flag,1\r
-#ifdef __BORLANDC__\r
-               }\r
-#endif\r
-End:\r
-#ifdef __WATCOMC__\r
-               }\r
-#endif\r
-       return flag;\r
-       //}else return 0;\r
-}\r
-\r
-\r
-/*\r
-==========================\r
-=\r
-= CA_ReadFile\r
-=\r
-= Reads a file into an allready allocated buffer\r
-=\r
-==========================\r
-*/\r
-\r
-boolean CA_ReadFile(char *filename, memptr *ptr, mminfo_t *mm)\r
-{\r
-       int handle;\r
-       dword size;\r
-       //long size;\r
-\r
-       if((handle = open(filename,O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               return false;\r
-\r
-       size = filelength(handle);\r
-       if(!CA_FarRead(handle,*ptr,size, mm))\r
-       {\r
-               close(handle);\r
-               return false;\r
-       }\r
-       close(handle);\r
-       return true;\r
-}\r
-\r
-\r
-\r
-/*\r
-==========================\r
-=\r
-= CA_LoadFile\r
-=\r
-= Allocate space for and load a file\r
-=\r
-==========================\r
-*/\r
-\r
-boolean CA_LoadFile(char *filename, memptr *ptr, mminfo_t *mm, mminfotype *mmi)\r
-{\r
-       int handle;\r
-       dword size;\r
-       //long size;\r
-\r
-       if((handle = open(filename,O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               return false;\r
-\r
-       size = filelength (handle);\r
-       MM_GetPtr(ptr,size, mm, mmi);\r
-       if(!CA_FarRead(handle,*ptr,size, mm))\r
-       {\r
-               close(handle);\r
-               return false;\r
-       }\r
-       close(handle);\r
-       return true;\r
-}\r
-\r
-/*\r
-============================================================================\r
-\r
-               COMPRESSION routines, see JHUFF.C for more\r
-\r
-============================================================================\r
-*/\r
-\r
-\r
-\r
-/*\r
-===============\r
-=\r
-= CAL_OptimizeNodes\r
-=\r
-= Goes through a huffman table and changes the 256-511 node numbers to the\r
-= actular address of the node.  Must be called before CAL_HuffExpand\r
-=\r
-===============\r
-*/\r
-\r
-void CAL_OptimizeNodes(huffnode *table)\r
-{\r
-  huffnode *node;\r
-  int i;\r
-\r
-  node = table;\r
-\r
-  for (i=0;i<255;i++)\r
-  {\r
-       if (node->bit0 >= 256)\r
-         node->bit0 = (unsigned)(table+(node->bit0-256));\r
-       if (node->bit1 >= 256)\r
-         node->bit1 = (unsigned)(table+(node->bit1-256));\r
-       node++;\r
-  }\r
-}\r
-\r
-\r
-\r
-/*\r
-======================\r
-=\r
-= CAL_HuffExpand\r
-=\r
-= Length is the length of the EXPANDED data\r
-=\r
-======================\r
-*/\r
-\r
-/*++++void CAL_HuffExpand (byte huge *source, byte huge *dest,\r
-  long length,huffnode *hufftable)\r
-{\r
-//  unsigned bit,byte,node,code;\r
-  unsigned sourceseg,sourceoff,destseg,destoff,endoff;\r
-  huffnode *headptr;\r
-//  huffnode *nodeon;\r
-\r
-  headptr = hufftable+254;     // head node is allways node 254\r
-\r
-  source++;    // normalize\r
-  source--;\r
-  dest++;\r
-  dest--;\r
-\r
-  sourceseg = FP_SEG(source);\r
-  sourceoff = FP_OFF(source);\r
-  destseg = FP_SEG(dest);\r
-  destoff = FP_OFF(dest);\r
-  endoff = destoff+length;\r
-\r
-//\r
-// ds:si source\r
-// es:di dest\r
-// ss:bx node pointer\r
-//\r
-\r
-       if (length <0xfff0)\r
-       {\r
-\r
-//--------------------------\r
-// expand less than 64k of data\r
-//--------------------------\r
-\r
-       __asm\r
-       {\r
-               mov     bx,[headptr]\r
-\r
-               mov     si,[sourceoff]\r
-               mov     di,[destoff]\r
-               mov     es,[destseg]\r
-               mov     ds,[sourceseg]\r
-               mov     ax,[endoff]\r
-\r
-               mov     ch,[si]                         // load first byte\r
-               inc     si\r
-               mov     cl,1\r
-\r
-expandshort:\r
-               test    ch,cl                   // bit set?\r
-               jnz     bit1short\r
-               mov     dx,[ss:bx]                      // take bit0 path from node\r
-               shl     cl,1                            // advance to next bit position\r
-               jc      newbyteshort\r
-               jnc     sourceupshort\r
-\r
-bit1short:\r
-asm    mov     dx,[ss:bx+2]            // take bit1 path\r
-asm    shl     cl,1                            // advance to next bit position\r
-asm    jnc     sourceupshort\r
-\r
-newbyteshort:\r
-asm    mov     ch,[si]                         // load next byte\r
-asm    inc     si\r
-asm    mov     cl,1                            // back to first bit\r
-\r
-sourceupshort:\r
-asm    or      dh,dh                           // if dx<256 its a byte, else move node\r
-asm    jz      storebyteshort\r
-asm    mov     bx,dx                           // next node = (huffnode *)code\r
-asm    jmp     expandshort\r
-\r
-storebyteshort:\r
-asm    mov     [es:di],dl\r
-asm    inc     di                                      // write a decopmpressed byte out\r
-asm    mov     bx,[headptr]            // back to the head node for next bit\r
-\r
-asm    cmp     di,ax                           // done?\r
-asm    jne     expandshort\r
-       }\r
-       }\r
-       else\r
-       {\r
-\r
-//--------------------------\r
-// expand more than 64k of data\r
-//--------------------------\r
-\r
-  length--;\r
-\r
-       __asm\r
-       {\r
-asm mov        bx,[headptr]\r
-asm    mov     cl,1\r
-\r
-asm    mov     si,[sourceoff]\r
-asm    mov     di,[destoff]\r
-asm    mov     es,[destseg]\r
-asm    mov     ds,[sourceseg]\r
-\r
-asm    lodsb                   // load first byte\r
-\r
-expand:\r
-asm    test    al,cl           // bit set?\r
-asm    jnz     bit1\r
-asm    mov     dx,[ss:bx]      // take bit0 path from node\r
-asm    jmp     gotcode\r
-bit1:\r
-asm    mov     dx,[ss:bx+2]    // take bit1 path\r
-\r
-gotcode:\r
-asm    shl     cl,1            // advance to next bit position\r
-asm    jnc     sourceup\r
-asm    lodsb\r
-asm    cmp     si,0x10         // normalize ds:si\r
-asm    jb      sinorm\r
-asm    mov     cx,ds\r
-asm    inc     cx\r
-asm    mov     ds,cx\r
-asm    xor     si,si\r
-sinorm:\r
-asm    mov     cl,1            // back to first bit\r
-\r
-sourceup:\r
-asm    or      dh,dh           // if dx<256 its a byte, else move node\r
-asm    jz      storebyte\r
-asm    mov     bx,dx           // next node = (huffnode *)code\r
-asm    jmp     expand\r
-\r
-storebyte:\r
-asm    mov     [es:di],dl\r
-asm    inc     di              // write a decopmpressed byte out\r
-asm    mov     bx,[headptr]    // back to the head node for next bit\r
-\r
-asm    cmp     di,0x10         // normalize es:di\r
-asm    jb      dinorm\r
-asm    mov     dx,es\r
-asm    inc     dx\r
-asm    mov     es,dx\r
-asm    xor     di,di\r
-dinorm:\r
-\r
-asm    sub     [WORD PTR ss:length],1\r
-asm    jnc     expand\r
-asm    dec     [WORD PTR ss:length+2]\r
-asm    jns     expand          // when length = ffff ffff, done\r
-       }\r
-       }\r
-\r
-       __asm\r
-       {\r
-               mov     ax,ss\r
-               mov     ds,ax\r
-       }\r
-\r
-}*/\r
-\r
-\r
-/*\r
-======================\r
-=\r
-= CAL_CarmackExpand\r
-=\r
-= Length is the length of the EXPANDED data\r
-=\r
-======================\r
-*/\r
-/*++++\r
-#define NEARTAG        0xa7\r
-#define FARTAG 0xa8\r
-\r
-void CAL_CarmackExpand (unsigned far *source, unsigned far *dest, unsigned length)\r
-{\r
-       unsigned        ch,chhigh,count,offset;\r
-       unsigned        far *copyptr, far *inptr, far *outptr;\r
-\r
-       length/=2;\r
-\r
-       inptr = source;\r
-       outptr = dest;\r
-\r
-       while (length)\r
-       {\r
-               ch = *inptr++;\r
-               chhigh = ch>>8;\r
-               if (chhigh == NEARTAG)\r
-               {\r
-                       count = ch&0xff;\r
-                       if (!count)\r
-                       {                               // have to insert a word containing the tag byte\r
-                               ch |= *((unsigned char far *)inptr)++;\r
-                               *outptr++ = ch;\r
-                               length--;\r
-                       }\r
-                       else\r
-                       {\r
-                               offset = *((unsigned char far *)inptr)++;\r
-                               copyptr = outptr - offset;\r
-                               length -= count;\r
-                               while (count--)\r
-                                       *outptr++ = *copyptr++;\r
-                       }\r
-               }\r
-               else if (chhigh == FARTAG)\r
-               {\r
-                       count = ch&0xff;\r
-                       if (!count)\r
-                       {                               // have to insert a word containing the tag byte\r
-                               ch |= *((unsigned char far *)inptr)++;\r
-                               *outptr++ = ch;\r
-                               length --;\r
-                       }\r
-                       else\r
-                       {\r
-                               offset = *inptr++;\r
-                               copyptr = dest + offset;\r
-                               length -= count;\r
-                               while (count--)\r
-                                       *outptr++ = *copyptr++;\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       *outptr++ = ch;\r
-                       length --;\r
-               }\r
-       }\r
-}\r
-*/\r
-\r
-\r
-/*\r
-======================\r
-=\r
-= CA_RLEWcompress\r
-=\r
-======================\r
-*/\r
-/*++++\r
-long CA_RLEWCompress (unsigned huge *source, long length, unsigned huge *dest,\r
-  unsigned rlewtag)\r
-{\r
-  long complength;\r
-  unsigned value,count,i;\r
-  unsigned huge *start,huge *end;\r
-\r
-  start = dest;\r
-\r
-  end = source + (length+1)/2;\r
-\r
-//\r
-// compress it\r
-//\r
-  do\r
-  {\r
-       count = 1;\r
-       value = *source++;\r
-       while (*source == value && source<end)\r
-       {\r
-         count++;\r
-         source++;\r
-       }\r
-       if (count>3 || value == rlewtag)\r
-       {\r
-    //\r
-    // send a tag / count / value string\r
-    //\r
-      *dest++ = rlewtag;\r
-      *dest++ = count;\r
-      *dest++ = value;\r
-    }\r
-    else\r
-    {\r
-    //\r
-    // send word without compressing\r
-    //\r
-      for (i=1;i<=count;i++)\r
-       *dest++ = value;\r
-       }\r
-\r
-  } while (source<end);\r
-\r
-  complength = 2*(dest-start);\r
-  return complength;\r
-}\r
-*/\r
-\r
-/*\r
-======================\r
-=\r
-= CA_RLEWexpand\r
-= length is EXPANDED length\r
-=\r
-======================\r
-*/\r
-/*++++\r
-void CA_RLEWexpand (unsigned huge *source, unsigned huge *dest,long length,\r
-  unsigned rlewtag)\r
-{\r
-//  unsigned value,count,i;\r
-  unsigned huge *end;\r
-  unsigned sourceseg,sourceoff,destseg,destoff,endseg,endoff;\r
-\r
-\r
-//\r
-// expand it\r
-//\r
-#if 0\r
-  do\r
-  {\r
-       value = *source++;\r
-       if (value != rlewtag)\r
-       //\r
-       // uncompressed\r
-       //\r
-         *dest++=value;\r
-       else\r
-       {\r
-       //\r
-       // compressed string\r
-       //\r
-         count = *source++;\r
-         value = *source++;\r
-         for (i=1;i<=count;i++)\r
-       *dest++ = value;\r
-       }\r
-  } while (dest<end);\r
-#endif\r
-\r
-  end = dest + (length)/2;\r
-  sourceseg = FP_SEG(source);\r
-  sourceoff = FP_OFF(source);\r
-  destseg = FP_SEG(dest);\r
-  destoff = FP_OFF(dest);\r
-  endseg = FP_SEG(end);\r
-  endoff = FP_OFF(end);\r
-\r
-\r
-//\r
-// ax = source value\r
-// bx = tag value\r
-// cx = repeat counts\r
-// dx = scratch\r
-//\r
-// NOTE: A repeat count that produces 0xfff0 bytes can blow this!\r
-//\r
-\r
-asm    mov     bx,rlewtag\r
-asm    mov     si,sourceoff\r
-asm    mov     di,destoff\r
-asm    mov     es,destseg\r
-asm    mov     ds,sourceseg\r
-\r
-expand:\r
-asm    lodsw\r
-asm    cmp     ax,bx\r
-asm    je      repeat\r
-asm    stosw\r
-asm    jmp     next\r
-\r
-repeat:\r
-asm    lodsw\r
-asm    mov     cx,ax           // repeat count\r
-asm    lodsw                   // repeat value\r
-asm    rep stosw\r
-\r
-next:\r
-\r
-asm    cmp     si,0x10         // normalize ds:si\r
-asm    jb      sinorm\r
-asm    mov     ax,si\r
-asm    shr     ax,1\r
-asm    shr     ax,1\r
-asm    shr     ax,1\r
-asm    shr     ax,1\r
-asm    mov     dx,ds\r
-asm    add     dx,ax\r
-asm    mov     ds,dx\r
-asm    and     si,0xf\r
-sinorm:\r
-asm    cmp     di,0x10         // normalize es:di\r
-asm    jb      dinorm\r
-asm    mov     ax,di\r
-asm    shr     ax,1\r
-asm    shr     ax,1\r
-asm    shr     ax,1\r
-asm    shr     ax,1\r
-asm    mov     dx,es\r
-asm    add     dx,ax\r
-asm    mov     es,dx\r
-asm    and     di,0xf\r
-dinorm:\r
-\r
-asm    cmp     di,ss:endoff\r
-asm    jne     expand\r
-asm    mov     ax,es\r
-asm    cmp     ax,ss:endseg\r
-asm    jb      expand\r
-\r
-asm    mov     ax,ss\r
-asm    mov     ds,ax\r
-\r
-}\r
-*/\r
-\r
-\r
-/*\r
-=============================================================================\r
-\r
-                                        CACHE MANAGER ROUTINES\r
-\r
-=============================================================================\r
-*/\r
-\r
-/*\r
-======================\r
-=\r
-= CAL_SetupGrFile\r
-=\r
-======================\r
-*/\r
-\r
-/*void CAL_SetupGrFile (void)\r
-{\r
-       int handle;\r
-       memptr compseg;\r
-\r
-#ifdef GRHEADERLINKED\r
-\r
-#if GRMODE == EGAGR\r
-       grhuffman = (huffnode *)&EGAdict;\r
-       grstarts = (long _seg *)FP_SEG(&EGAhead);\r
-#endif\r
-#if GRMODE == CGAGR\r
-       grhuffman = (huffnode *)&CGAdict;\r
-       grstarts = (long _seg *)FP_SEG(&CGAhead);\r
-#endif\r
-\r
-       CAL_OptimizeNodes (grhuffman);\r
-\r
-#else\r
-\r
-//\r
-// load ???dict.ext (huffman dictionary for graphics files)\r
-//\r
-\r
-       if ((handle = open(GREXT"DICT."EXT,\r
-                O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               Quit ("Can't open "GREXT"DICT."EXT"!");\r
-\r
-       read(handle, &grhuffman, sizeof(grhuffman));\r
-       close(handle);\r
-       CAL_OptimizeNodes (grhuffman);\r
-//\r
-// load the data offsets from ???head.ext\r
-//\r
-       MM_GetPtr (&(memptr)grstarts,(NUMCHUNKS+1)*FILEPOSSIZE);\r
-\r
-       if ((handle = open(GREXT"HEAD."EXT,\r
-                O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               Quit ("Can't open "GREXT"HEAD."EXT"!");\r
-\r
-       CA_FarRead(handle, (memptr)grstarts, (NUMCHUNKS+1)*FILEPOSSIZE);\r
-\r
-       close(handle);\r
-\r
-\r
-#endif\r
-\r
-//\r
-// Open the graphics file, leaving it open until the game is finished\r
-//\r
-       grhandle = open(GREXT"GRAPH."EXT, O_RDONLY | O_BINARY);\r
-       if (grhandle == -1)\r
-               Quit ("Cannot open "GREXT"GRAPH."EXT"!");\r
-\r
-\r
-//\r
-// load the pic and sprite headers into the arrays in the data segment\r
-//\r
-#if NUMPICS>0\r
-       MM_GetPtr(&(memptr)pictable,NUMPICS*sizeof(pictabletype));\r
-       CAL_GetGrChunkLength(STRUCTPIC);                // position file pointer\r
-       MM_GetPtr(&compseg,chunkcomplen);\r
-       CA_FarRead (grhandle,compseg,chunkcomplen);\r
-       CAL_HuffExpand (compseg, (byte huge *)pictable,NUMPICS*sizeof(pictabletype),grhuffman);\r
-       MM_FreePtr(&compseg);\r
-#endif\r
-\r
-#if NUMPICM>0\r
-       MM_GetPtr(&(memptr)picmtable,NUMPICM*sizeof(pictabletype));\r
-       CAL_GetGrChunkLength(STRUCTPICM);               // position file pointer\r
-       MM_GetPtr(&compseg,chunkcomplen);\r
-       CA_FarRead (grhandle,compseg,chunkcomplen);\r
-       CAL_HuffExpand (compseg, (byte huge *)picmtable,NUMPICS*sizeof(pictabletype),grhuffman);\r
-       MM_FreePtr(&compseg);\r
-#endif\r
-\r
-#if NUMSPRITES>0\r
-       MM_GetPtr(&(memptr)spritetable,NUMSPRITES*sizeof(spritetabletype));\r
-       CAL_GetGrChunkLength(STRUCTSPRITE);     // position file pointer\r
-       MM_GetPtr(&compseg,chunkcomplen);\r
-       CA_FarRead (grhandle,compseg,chunkcomplen);\r
-       CAL_HuffExpand (compseg, (byte huge *)spritetable,NUMSPRITES*sizeof(spritetabletype),grhuffman);\r
-       MM_FreePtr(&compseg);\r
-#endif\r
-\r
-}*/\r
-\r
-//==========================================================================\r
-\r
-\r
-/*\r
-======================\r
-=\r
-= CAL_SetupMapFile\r
-=\r
-======================\r
-*/\r
-\r
-/*void CAL_SetupMapFile (void)\r
-{\r
-       int handle;\r
-       long length;\r
-\r
-//\r
-// load maphead.ext (offsets and tileinfo for map file)\r
-//\r
-#ifndef MAPHEADERLINKED\r
-       if ((handle = open("MAPHEAD."EXT,\r
-                O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               Quit ("Can't open MAPHEAD."EXT"!");\r
-       length = filelength(handle);\r
-       MM_GetPtr (&(memptr)tinf,length);\r
-       CA_FarRead(handle, tinf, length);\r
-       close(handle);\r
-#else\r
-\r
-       tinf = (byte _seg *)FP_SEG(&maphead);\r
-\r
-#endif\r
-\r
-//\r
-// open the data file\r
-//\r
-#ifdef MAPHEADERLINKED\r
-       if ((maphandle = open("GAMEMAPS."EXT,\r
-                O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               Quit ("Can't open GAMEMAPS."EXT"!");\r
-#else\r
-       if ((maphandle = open("MAPTEMP."EXT,\r
-                O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               Quit ("Can't open MAPTEMP."EXT"!");\r
-#endif\r
-}*/\r
-\r
-//==========================================================================\r
-\r
-\r
-/*\r
-======================\r
-=\r
-= CAL_SetupAudioFile\r
-=\r
-======================\r
-*/\r
-\r
-/*void CAL_SetupAudioFile (void)\r
-{\r
-       int handle;\r
-       long length;\r
-\r
-//\r
-// load maphead.ext (offsets and tileinfo for map file)\r
-//\r
-#ifndef AUDIOHEADERLINKED\r
-       if ((handle = open("AUDIOHED."EXT,\r
-                O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               Quit ("Can't open AUDIOHED."EXT"!");\r
-       length = filelength(handle);\r
-       MM_GetPtr (&(memptr)audiostarts,length);\r
-       CA_FarRead(handle, (byte far *)audiostarts, length);\r
-       close(handle);\r
-#else\r
-       audiohuffman = (huffnode *)&audiodict;\r
-       CAL_OptimizeNodes (audiohuffman);\r
-       audiostarts = (long _seg *)FP_SEG(&audiohead);\r
-#endif\r
-\r
-//\r
-// open the data file\r
-//\r
-#ifndef AUDIOHEADERLINKED\r
-       if ((audiohandle = open("AUDIOT."EXT,\r
-                O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               Quit ("Can't open AUDIOT."EXT"!");\r
-#else\r
-       if ((audiohandle = open("AUDIO."EXT,\r
-                O_RDONLY | O_BINARY, S_IREAD)) == -1)\r
-               Quit ("Can't open AUDIO."EXT"!");\r
-#endif\r
-}*/\r
-\r
-//==========================================================================\r
-\r
-\r
-/*\r
-======================\r
-=\r
-= CA_Startup\r
-=\r
-= Open all files and load in headers\r
-=\r
-======================\r
-*/\r
-\r
-void CA_Startup(void)\r
-{\r
-#ifdef PROFILE\r
-       unlink("profile.16");\r
-       profilehandle = open("profile.16", O_CREAT | O_WRONLY | O_TEXT);\r
-#endif\r
-/*++++\r
-// MDM begin - (GAMERS EDGE)\r
-//\r
-       if(!FindFile("AUDIO."EXT,NULL,2))\r
-               Quit("CA_Startup(): Can't find audio files.");\r
-//\r
-// MDM end\r
-\r
-#ifndef NOAUDIO\r
-       CAL_SetupAudioFile();\r
-#endif\r
-\r
-// MDM begin - (GAMERS EDGE)\r
-//\r
-       if (!FindFile("GAMEMAPS."EXT,NULL,1))\r
-               Quit("CA_Startup(): Can't find level files.");\r
-//\r
-// MDM end\r
-\r
-#ifndef NOMAPS\r
-       CAL_SetupMapFile ();\r
-#endif\r
-\r
-// MDM begin - (GAMERS EDGE)\r
-//\r
-       if (!FindFile("EGAGRAPH."EXT,NULL,2))\r
-               Quit("CA_Startup(): Can't find graphics files.");\r
-//\r
-// MDM end\r
-\r
-#ifndef NOGRAPHICS\r
-       CAL_SetupGrFile ();\r
-#endif\r
-\r
-       mapon = -1;\r
-       ca_levelbit = 1;\r
-       ca_levelnum = 0;\r
-\r
-       drawcachebox    = CAL_DialogDraw;\r
-       updatecachebox  = CAL_DialogUpdate;\r
-       finishcachebox  = CAL_DialogFinish;*/\r
-}\r
-\r
-//==========================================================================\r
-\r
-\r
-/*\r
-======================\r
-=\r
-= CA_Shutdown\r
-=\r
-= Closes all files\r
-=\r
-======================\r
-*/\r
-\r
-void CA_Shutdown(void)\r
-{\r
-#ifdef PROFILE\r
-       close(profilehandle);\r
-#endif\r
-/*++++\r
-       close(maphandle);\r
-       close(grhandle);\r
-       close(audiohandle);*/\r
-}\r
-\r
-//===========================================================================\r
-\r
-/*\r
-======================\r
-=\r
-= CA_CacheAudioChunk\r
-=\r
-======================\r
-*/\r
-/*++++\r
-void CA_CacheAudioChunk (int chunk)\r
-{\r
-       long    pos,compressed;\r
-#ifdef AUDIOHEADERLINKED\r
-       long    expanded;\r
-       memptr  bigbufferseg;\r
-       byte    far *source;\r
-#endif\r
-\r
-       if (audiosegs[chunk])\r
-       {\r
-               MM_SetPurge (&(memptr)audiosegs[chunk],0);\r
-               return;                                                 // allready in memory\r
-       }\r
-\r
-// MDM begin - (GAMERS EDGE)\r
-//\r
-       if (!FindFile("AUDIO."EXT,NULL,2))\r
-               Quit("CA_CacheAudioChunk(): Can't find audio files.");\r
-//\r
-// MDM end\r
-\r
-//\r
-// load the chunk into a buffer, either the miscbuffer if it fits, or allocate\r
-// a larger buffer\r
-//\r
-       pos = audiostarts[chunk];\r
-       compressed = audiostarts[chunk+1]-pos;\r
-\r
-       lseek(audiohandle,pos,SEEK_SET);\r
-\r
-#ifndef AUDIOHEADERLINKED\r
-\r
-       MM_GetPtr (&(memptr)audiosegs[chunk],compressed);\r
-       if (mmerror)\r
-               return;\r
-\r
-       CA_FarRead(audiohandle,audiosegs[chunk],compressed);\r
-\r
-#else\r
-\r
-       if (compressed<=BUFFERSIZE)\r
-       {\r
-               CA_FarRead(audiohandle,bufferseg,compressed);\r
-               source = bufferseg;\r
-       }\r
-       else\r
-       {\r
-               MM_GetPtr(&bigbufferseg,compressed);\r
-               if (mmerror)\r
-                       return;\r
-               MM_SetLock (&bigbufferseg,true);\r
-               CA_FarRead(audiohandle,bigbufferseg,compressed);\r
-               source = bigbufferseg;\r
-       }\r
-\r
-       expanded = *(long far *)source;\r
-       source += 4;                    // skip over length\r
-       MM_GetPtr (&(memptr)audiosegs[chunk],expanded);\r
-       if (mmerror)\r
-               goto done;\r
-       CAL_HuffExpand (source,audiosegs[chunk],expanded,audiohuffman);\r
-\r
-done:\r
-       if (compressed>BUFFERSIZE)\r
-               MM_FreePtr(&bigbufferseg);\r
-#endif\r
-}*/\r
-\r
-//===========================================================================\r
-\r
-/*\r
-======================\r
-=\r
-= CA_LoadAllSounds\r
-=\r
-= Purges all sounds, then loads all new ones (mode switch)\r
-=\r
-======================\r
-*/\r
-/*++++\r
-void CA_LoadAllSounds (void)\r
-{\r
-       unsigned        start,i;\r
-\r
-       switch (oldsoundmode)\r
-       {\r
-       case sdm_Off:\r
-               goto cachein;\r
-       case sdm_PC:\r
-               start = STARTPCSOUNDS;\r
-               break;\r
-       case sdm_AdLib:\r
-               start = STARTADLIBSOUNDS;\r
-               break;\r
-       }\r
-\r
-       for (i=0;i<NUMSOUNDS;i++,start++)\r
-               if (audiosegs[start])\r
-                       MM_SetPurge (&(memptr)audiosegs[start],3);              // make purgable\r
-\r
-cachein:\r
-\r
-       switch (SoundMode)\r
-       {\r
-       case sdm_Off:\r
-               return;\r
-       case sdm_PC:\r
-               start = STARTPCSOUNDS;\r
-               break;\r
-       case sdm_AdLib:\r
-               start = STARTADLIBSOUNDS;\r
-               break;\r
-       }\r
-\r
-       for (i=0;i<NUMSOUNDS;i++,start++)\r
-               CA_CacheAudioChunk (start);\r
-\r
-       oldsoundmode = SoundMode;\r
-}*/\r
-\r
-//===========================================================================\r
-\r
-//++++#if GRMODE == EGAGR\r
-\r
-/*\r
-======================\r
-=\r
-= CAL_ShiftSprite\r
-=\r
-= Make a shifted (one byte wider) copy of a sprite into another area\r
-=\r
-======================\r
-*/\r
-/*++++\r
-unsigned       static  sheight,swidth;\r
-boolean static dothemask;\r
-\r
-void CAL_ShiftSprite (unsigned segment,unsigned source,unsigned dest,\r
-       unsigned width, unsigned height, unsigned pixshift, boolean domask)\r
-{\r
-\r
-       sheight = height;               // because we are going to reassign bp\r
-       swidth = width;\r
-       dothemask = domask;\r
-\r
-asm    mov     ax,[segment]\r
-asm    mov     ds,ax           // source and dest are in same segment, and all local\r
-\r
-asm    mov     bx,[source]\r
-asm    mov     di,[dest]\r
-\r
-asm    mov     bp,[pixshift]\r
-asm    shl     bp,1\r
-asm    mov     bp,WORD PTR [shifttabletable+bp]        // bp holds pointer to shift table\r
-\r
-asm    cmp     [ss:dothemask],0\r
-asm    je              skipmask\r
-\r
-//\r
-// table shift the mask\r
-//\r
-asm    mov     dx,[ss:sheight]\r
-\r
-domaskrow:\r
-\r
-asm    mov     BYTE PTR [di],255       // 0xff first byte\r
-asm    mov     cx,ss:[swidth]\r
-\r
-domaskbyte:\r
-\r
-asm    mov     al,[bx]                         // source\r
-asm    not     al\r
-asm    inc     bx                                      // next source byte\r
-asm    xor     ah,ah\r
-asm    shl     ax,1\r
-asm    mov     si,ax\r
-asm    mov     ax,[bp+si]                      // table shift into two bytes\r
-asm    not     ax\r
-asm    and     [di],al                         // and with first byte\r
-asm    inc     di\r
-asm    mov     [di],ah                         // replace next byte\r
-\r
-asm    loop    domaskbyte\r
-\r
-asm    inc     di                                      // the last shifted byte has 1s in it\r
-asm    dec     dx\r
-asm    jnz     domaskrow\r
-\r
-skipmask:\r
-\r
-//\r
-// table shift the data\r
-//\r
-asm    mov     dx,ss:[sheight]\r
-asm    shl     dx,1\r
-asm    shl     dx,1                            // four planes of data\r
-\r
-dodatarow:\r
-\r
-asm    mov     BYTE PTR [di],0         // 0 first byte\r
-asm    mov     cx,ss:[swidth]\r
-\r
-dodatabyte:\r
-\r
-asm    mov     al,[bx]                         // source\r
-asm    inc     bx                                      // next source byte\r
-asm    xor     ah,ah\r
-asm    shl     ax,1\r
-asm    mov     si,ax\r
-asm    mov     ax,[bp+si]                      // table shift into two bytes\r
-asm    or      [di],al                         // or with first byte\r
-asm    inc     di\r
-asm    mov     [di],ah                         // replace next byte\r
-\r
-asm    loop    dodatabyte\r
-\r
-asm    inc     di                                      // the last shifted byte has 0s in it\r
-asm    dec     dx\r
-asm    jnz     dodatarow\r
-\r
-//\r
-// done\r
-//\r
-\r
-asm    mov     ax,ss                           // restore data segment\r
-asm    mov     ds,ax\r
-\r
-}\r
-\r
-#endif\r
-*/\r
-//===========================================================================\r
-\r
-/*\r
-======================\r
-=\r
-= CAL_CacheSprite\r
-=\r
-= Generate shifts and set up sprite structure for a given sprite\r
-=\r
-======================\r
-*/\r
-/*++++\r
-void CAL_CacheSprite (int chunk, byte far *compressed)\r
-{\r
-       int i;\r
-       unsigned shiftstarts[5];\r
-       unsigned smallplane,bigplane,expanded;\r
-       spritetabletype far *spr;\r
-       spritetype _seg *dest;\r
-\r
-#if GRMODE == CGAGR\r
-//\r
-// CGA has no pel panning, so shifts are never needed\r
-//\r
-       spr = &spritetable[chunk-STARTSPRITES];\r
-       smallplane = spr->width*spr->height;\r
-       MM_GetPtr (&grsegs[chunk],smallplane*2+MAXSHIFTS*6);\r
-       if (mmerror)\r
-               return;\r
-       dest = (spritetype _seg *)grsegs[chunk];\r
-       dest->sourceoffset[0] = MAXSHIFTS*6;    // start data after 3 unsigned tables\r
-       dest->planesize[0] = smallplane;\r
-       dest->width[0] = spr->width;\r
-\r
-//\r
-// expand the unshifted shape\r
-//\r
-       CAL_HuffExpand (compressed, &dest->data[0],smallplane*2,grhuffman);\r
-\r
-#endif\r
-\r
-\r
-#if GRMODE == EGAGR\r
-\r
-//\r
-// calculate sizes\r
-//\r
-       spr = &spritetable[chunk-STARTSPRITES];\r
-       smallplane = spr->width*spr->height;\r
-       bigplane = (spr->width+1)*spr->height;\r
-\r
-       shiftstarts[0] = MAXSHIFTS*6;   // start data after 3 unsigned tables\r
-       shiftstarts[1] = shiftstarts[0] + smallplane*5; // 5 planes in a sprite\r
-       shiftstarts[2] = shiftstarts[1] + bigplane*5;\r
-       shiftstarts[3] = shiftstarts[2] + bigplane*5;\r
-       shiftstarts[4] = shiftstarts[3] + bigplane*5;   // nothing ever put here\r
-\r
-       expanded = shiftstarts[spr->shifts];\r
-       MM_GetPtr (&grsegs[chunk],expanded);\r
-       if (mmerror)\r
-               return;\r
-       dest = (spritetype _seg *)grsegs[chunk];\r
-\r
-//\r
-// expand the unshifted shape\r
-//\r
-       CAL_HuffExpand (compressed, &dest->data[0],smallplane*5,grhuffman);\r
-\r
-//\r
-// make the shifts!\r
-//\r
-       switch (spr->shifts)\r
-       {\r
-       case    1:\r
-               for (i=0;i<4;i++)\r
-               {\r
-                       dest->sourceoffset[i] = shiftstarts[0];\r
-                       dest->planesize[i] = smallplane;\r
-                       dest->width[i] = spr->width;\r
-               }\r
-               break;\r
-\r
-       case    2:\r
-               for (i=0;i<2;i++)\r
-               {\r
-                       dest->sourceoffset[i] = shiftstarts[0];\r
-                       dest->planesize[i] = smallplane;\r
-                       dest->width[i] = spr->width;\r
-               }\r
-               for (i=2;i<4;i++)\r
-               {\r
-                       dest->sourceoffset[i] = shiftstarts[1];\r
-                       dest->planesize[i] = bigplane;\r
-                       dest->width[i] = spr->width+1;\r
-               }\r
-               CAL_ShiftSprite ((unsigned)grsegs[chunk],dest->sourceoffset[0],\r
-                       dest->sourceoffset[2],spr->width,spr->height,4,true);\r
-               break;\r
-\r
-       case    4:\r
-               dest->sourceoffset[0] = shiftstarts[0];\r
-               dest->planesize[0] = smallplane;\r
-               dest->width[0] = spr->width;\r
-\r
-               dest->sourceoffset[1] = shiftstarts[1];\r
-               dest->planesize[1] = bigplane;\r
-               dest->width[1] = spr->width+1;\r
-               CAL_ShiftSprite ((unsigned)grsegs[chunk],dest->sourceoffset[0],\r
-                       dest->sourceoffset[1],spr->width,spr->height,2,true);\r
-\r
-               dest->sourceoffset[2] = shiftstarts[2];\r
-               dest->planesize[2] = bigplane;\r
-               dest->width[2] = spr->width+1;\r
-               CAL_ShiftSprite ((unsigned)grsegs[chunk],dest->sourceoffset[0],\r
-                       dest->sourceoffset[2],spr->width,spr->height,4,true);\r
-\r
-               dest->sourceoffset[3] = shiftstarts[3];\r
-               dest->planesize[3] = bigplane;\r
-               dest->width[3] = spr->width+1;\r
-               CAL_ShiftSprite ((unsigned)grsegs[chunk],dest->sourceoffset[0],\r
-                       dest->sourceoffset[3],spr->width,spr->height,6,true);\r
-\r
-               break;\r
-\r
-       default:\r
-               Quit ("CAL_CacheSprite: Bad shifts number!");\r
-       }\r
-\r
-#endif\r
-}*/\r
-\r
-//===========================================================================\r
-\r
-\r
-/*\r
-======================\r
-=\r
-= CAL_ExpandGrChunk\r
-=\r
-= Does whatever is needed with a pointer to a compressed chunk\r
-=\r
-======================\r
-*/\r
-/*++++\r
-void CAL_ExpandGrChunk (int chunk, byte far *source)\r
-{\r
-       long    expanded;\r
-\r
-\r
-       if (chunk >= STARTTILE8 && chunk < STARTEXTERNS)\r
-       {\r
-       //\r
-       // expanded sizes of tile8/16/32 are implicit\r
-       //\r
-\r
-#if GRMODE == EGAGR\r
-#define BLOCK          32\r
-#define MASKBLOCK      40\r
-#endif\r
-\r
-#if GRMODE == CGAGR\r
-#define BLOCK          16\r
-#define MASKBLOCK      32\r
-#endif\r
-\r
-               if (chunk<STARTTILE8M)                  // tile 8s are all in one chunk!\r
-                       expanded = BLOCK*NUMTILE8;\r
-               else if (chunk<STARTTILE16)\r
-                       expanded = MASKBLOCK*NUMTILE8M;\r
-               else if (chunk<STARTTILE16M)    // all other tiles are one/chunk\r
-                       expanded = BLOCK*4;\r
-               else if (chunk<STARTTILE32)\r
-                       expanded = MASKBLOCK*4;\r
-               else if (chunk<STARTTILE32M)\r
-                       expanded = BLOCK*16;\r
-               else\r
-                       expanded = MASKBLOCK*16;\r
-       }\r
-       else\r
-       {\r
-       //\r
-       // everything else has an explicit size longword\r
-       //\r
-               expanded = *(long far *)source;\r
-               source += 4;                    // skip over length\r
-       }\r
-\r
-//\r
-// allocate final space, decompress it, and free bigbuffer\r
-// Sprites need to have shifts made and various other junk\r
-//\r
-       if (chunk>=STARTSPRITES && chunk< STARTTILE8)\r
-               CAL_CacheSprite(chunk,source);\r
-       else\r
-       {\r
-               MM_GetPtr (&grsegs[chunk],expanded);\r
-               if (mmerror)\r
-                       return;\r
-               CAL_HuffExpand (source,grsegs[chunk],expanded,grhuffman);\r
-       }\r
-}\r
-*/\r
-\r
-/*\r
-======================\r
-=\r
-= CAL_ReadGrChunk\r
-=\r
-= Gets a chunk off disk, optimizing reads to general buffer\r
-=\r
-======================\r
-*/\r
-/*++++\r
-void CAL_ReadGrChunk (int chunk)\r
-{\r
-       long    pos,compressed;\r
-       memptr  bigbufferseg;\r
-       byte    far *source;\r
-       int             next;\r
-\r
-//\r
-// load the chunk into a buffer, either the miscbuffer if it fits, or allocate\r
-// a larger buffer\r
-//\r
-       pos = GRFILEPOS(chunk);\r
-       if (pos<0)                                                      // $FFFFFFFF start is a sparse tile\r
-         return;\r
-\r
-       next = chunk +1;\r
-       while (GRFILEPOS(next) == -1)           // skip past any sparse tiles\r
-               next++;\r
-\r
-       compressed = GRFILEPOS(next)-pos;\r
-\r
-       lseek(grhandle,pos,SEEK_SET);\r
-\r
-       if (compressed<=BUFFERSIZE)\r
-       {\r
-               CA_FarRead(grhandle,bufferseg,compressed);\r
-               source = bufferseg;\r
-       }\r
-       else\r
-       {\r
-               MM_GetPtr(&bigbufferseg,compressed);\r
-               if (mmerror)\r
-                       return;\r
-               MM_SetLock (&bigbufferseg,true);\r
-               CA_FarRead(grhandle,bigbufferseg,compressed);\r
-               source = bigbufferseg;\r
-       }\r
-\r
-       CAL_ExpandGrChunk (chunk,source);\r
-\r
-       if (compressed>BUFFERSIZE)\r
-               MM_FreePtr(&bigbufferseg);\r
-}\r
-*/\r
-/*\r
-======================\r
-=\r
-= CA_CacheGrChunk\r
-=\r
-= Makes sure a given chunk is in memory, loadiing it if needed\r
-=\r
-======================\r
-*/\r
-/*++++\r
-void CA_CacheGrChunk (int chunk)\r
-{\r
-       long    pos,compressed;\r
-       memptr  bigbufferseg;\r
-       byte    far *source;\r
-       int             next;\r
-\r
-       grneeded[chunk] |= ca_levelbit;         // make sure it doesn't get removed\r
-       if (grsegs[chunk])\r
-       {\r
-               MM_SetPurge (&grsegs[chunk],0);\r
-               return;                                                 // allready in memory\r
-       }\r
-\r
-// MDM begin - (GAMERS EDGE)\r
-//\r
-       if (!FindFile("EGAGRAPH."EXT,NULL,2))\r
-               Quit("CA_CacheGrChunk(): Can't find graphics files.");\r
-//\r
-// MDM end\r
-\r
-//\r
-// load the chunk into a buffer, either the miscbuffer if it fits, or allocate\r
-// a larger buffer\r
-//\r
-       pos = GRFILEPOS(chunk);\r
-       if (pos<0)                                                      // $FFFFFFFF start is a sparse tile\r
-         return;\r
-\r
-       next = chunk +1;\r
-       while (GRFILEPOS(next) == -1)           // skip past any sparse tiles\r
-               next++;\r
-\r
-       compressed = GRFILEPOS(next)-pos;\r
-\r
-       lseek(grhandle,pos,SEEK_SET);\r
-\r
-       if (compressed<=BUFFERSIZE)\r
-       {\r
-               CA_FarRead(grhandle,bufferseg,compressed);\r
-               source = bufferseg;\r
-       }\r
-       else\r
-       {\r
-               MM_GetPtr(&bigbufferseg,compressed);\r
-               MM_SetLock (&bigbufferseg,true);\r
-               CA_FarRead(grhandle,bigbufferseg,compressed);\r
-               source = bigbufferseg;\r
-       }\r
-\r
-       CAL_ExpandGrChunk (chunk,source);\r
-\r
-       if (compressed>BUFFERSIZE)\r
-               MM_FreePtr(&bigbufferseg);\r
-}\r
-*/\r
-\r
-\r
-//==========================================================================\r
-\r
-/*\r
-======================\r
-=\r
-= CA_CacheMap\r
-=\r
-======================\r
-*/\r
-/*++++\r
-void CA_CacheMap (int mapnum)\r
-{\r
-       long    pos,compressed;\r
-       int             plane;\r
-       memptr  *dest,bigbufferseg;\r
-       unsigned        size;\r
-       unsigned        far     *source;\r
-#ifdef MAPHEADERLINKED\r
-       memptr  buffer2seg;\r
-       long    expanded;\r
-#endif\r
-\r
-\r
-// MDM begin - (GAMERS EDGE)\r
-//\r
-       if (!FindFile("GAMEMAPS."EXT,NULL,1))\r
-               Quit("CA_CacheMap(): Can't find level files.");\r
-//\r
-// MDM end\r
-\r
-\r
-//\r
-// free up memory from last map\r
-//\r
-       if (mapon>-1 && mapheaderseg[mapon])\r
-               MM_SetPurge (&(memptr)mapheaderseg[mapon],3);\r
-       for (plane=0;plane<MAPPLANES;plane++)\r
-               if (mapsegs[plane])\r
-                       MM_FreePtr (&(memptr)mapsegs[plane]);\r
-\r
-       mapon = mapnum;\r
-\r
-\r
-//\r
-// load map header\r
-// The header will be cached if it is still around\r
-//\r
-       if (!mapheaderseg[mapnum])\r
-       {\r
-               pos = ((mapfiletype     _seg *)tinf)->headeroffsets[mapnum];\r
-               if (pos<0)                                              // $FFFFFFFF start is a sparse map\r
-                 Quit ("CA_CacheMap: Tried to load a non existent map!");\r
-\r
-               MM_GetPtr(&(memptr)mapheaderseg[mapnum],sizeof(maptype));\r
-               lseek(maphandle,pos,SEEK_SET);\r
-               CA_FarRead (maphandle,(memptr)mapheaderseg[mapnum],sizeof(maptype));\r
-       }\r
-       else\r
-               MM_SetPurge (&(memptr)mapheaderseg[mapnum],0);\r
-\r
-//\r
-// load the planes in\r
-// If a plane's pointer still exists it will be overwritten (levels are\r
-// allways reloaded, never cached)\r
-//\r
-\r
-       size = mapheaderseg[mapnum]->width * mapheaderseg[mapnum]->height * 2;\r
-\r
-       for (plane = 0; plane<MAPPLANES; plane++)\r
-       {\r
-               pos = mapheaderseg[mapnum]->planestart[plane];\r
-               compressed = mapheaderseg[mapnum]->planelength[plane];\r
-\r
-               if (!compressed)\r
-                       continue;               // the plane is not used in this game\r
-\r
-               dest = &(memptr)mapsegs[plane];\r
-               MM_GetPtr(dest,size);\r
-\r
-               lseek(maphandle,pos,SEEK_SET);\r
-               if (compressed<=BUFFERSIZE)\r
-                       source = bufferseg;\r
-               else\r
-               {\r
-                       MM_GetPtr(&bigbufferseg,compressed);\r
-                       MM_SetLock (&bigbufferseg,true);\r
-                       source = bigbufferseg;\r
-               }\r
-\r
-               CA_FarRead(maphandle,(byte far *)source,compressed);\r
-#ifdef MAPHEADERLINKED\r
-               //\r
-               // unhuffman, then unRLEW\r
-               // The huffman'd chunk has a two byte expanded length first\r
-               // The resulting RLEW chunk also does, even though it's not really\r
-               // needed\r
-               //\r
-               expanded = *source;\r
-               source++;\r
-               MM_GetPtr (&buffer2seg,expanded);\r
-               CAL_CarmackExpand (source, (unsigned far *)buffer2seg,expanded);\r
-               CA_RLEWexpand (((unsigned far *)buffer2seg)+1,*dest,size,\r
-               ((mapfiletype _seg *)tinf)->RLEWtag);\r
-               MM_FreePtr (&buffer2seg);\r
-\r
-#else\r
-               //\r
-               // unRLEW, skipping expanded length\r
-               //\r
-               CA_RLEWexpand (source+1, *dest,size,\r
-               ((mapfiletype _seg *)tinf)->RLEWtag);\r
-#endif\r
-\r
-               if (compressed>BUFFERSIZE)\r
-                       MM_FreePtr(&bigbufferseg);\r
-       }\r
-}*/\r
-\r
-//===========================================================================\r
-\r
-/*\r
-======================\r
-=\r
-= CA_UpLevel\r
-=\r
-= Goes up a bit level in the needed lists and clears it out.\r
-= Everything is made purgable\r
-=\r
-======================\r
-*/\r
-/*++++\r
-void CA_UpLevel (void)\r
-{\r
-       if (ca_levelnum==7)\r
-               Quit ("CA_UpLevel: Up past level 7!");\r
-\r
-       ca_levelbit<<=1;\r
-       ca_levelnum++;\r
-}*/\r
-\r
-//===========================================================================\r
-\r
-/*\r
-======================\r
-=\r
-= CA_DownLevel\r
-=\r
-= Goes down a bit level in the needed lists and recaches\r
-= everything from the lower level\r
-=\r
-======================\r
-*/\r
-/*++\r
-void CA_DownLevel (void)\r
-{\r
-       if (!ca_levelnum)\r
-               Quit ("CA_DownLevel: Down past level 0!");\r
-       ca_levelbit>>=1;\r
-       ca_levelnum--;\r
-       CA_CacheMarks(NULL);\r
-}*/\r
-\r
-//===========================================================================\r
-\r
-/*\r
-======================\r
-=\r
-= CA_ClearMarks\r
-=\r
-= Clears out all the marks at the current level\r
-=\r
-======================\r
-*/\r
-/*\r
-void CA_ClearMarks (void)\r
-{\r
-       int i;\r
-\r
-       for (i=0;i<NUMCHUNKS;i++)\r
-               grneeded[i]&=~ca_levelbit;\r
-}\r
-*/\r
-\r
-//===========================================================================\r
-\r
-/*\r
-======================\r
-=\r
-= CA_ClearAllMarks\r
-=\r
-= Clears out all the marks on all the levels\r
-=\r
-======================\r
-*/\r
-/*\r
-void CA_ClearAllMarks (void)\r
-{\r
-       _fmemset (grneeded,0,sizeof(grneeded));\r
-       ca_levelbit = 1;\r
-       ca_levelnum = 0;\r
-}\r
-*/\r
-\r
-//===========================================================================\r
-\r
-/*\r
-======================\r
-=\r
-= CA_FreeGraphics\r
-=\r
-======================\r
-*/\r
-/*++++\r
-void CA_FreeGraphics (void)\r
-{\r
-       int     i;\r
-\r
-       for (i=0;i<NUMCHUNKS;i++)\r
-               if (grsegs[i])\r
-                       MM_SetPurge (&(memptr)grsegs[i],3);\r
-}\r
-*/\r
-\r
-/*\r
-======================\r
-=\r
-= CA_SetAllPurge\r
-=\r
-= Make everything possible purgable\r
-=\r
-======================\r
-*/\r
-/*++++++++\r
-void CA_SetAllPurge (void)\r
-{\r
-       int i;\r
-\r
-       CA_ClearMarks ();\r
-\r
-//\r
-// free cursor sprite and background save\r
-//\r
-       VW_FreeCursor ();\r
-\r
-//\r
-// free map headers and map planes\r
-//\r
-       for (i=0;i<NUMMAPS;i++)\r
-               if (mapheaderseg[i])\r
-                       MM_SetPurge (&(memptr)mapheaderseg[i],3);\r
-\r
-       for (i=0;i<3;i++)\r
-               if (mapsegs[i])\r
-                       MM_FreePtr (&(memptr)mapsegs[i]);\r
-\r
-//\r
-// free sounds\r
-//\r
-       for (i=0;i<NUMSNDCHUNKS;i++)\r
-               if (audiosegs[i])\r
-                       MM_SetPurge (&(memptr)audiosegs[i],3);\r
-\r
-//\r
-// free graphics\r
-//\r
-       CA_FreeGraphics ();\r
-}\r
-\r
-\r
-void CA_SetGrPurge (void)\r
-{\r
-       int i;\r
-\r
-//\r
-// free graphics\r
-//\r
-       for (i=0;i<NUMCHUNKS;i++)\r
-               if (grsegs[i])\r
-                       MM_SetPurge (&(memptr)grsegs[i],3);\r
-}*/\r
-\r
-\r
-//===========================================================================\r
-\r
-\r
-/*\r
-======================\r
-=\r
-= CAL_DialogDraw\r
-=\r
-======================\r
-*/\r
-/*\r
-#define NUMBARS        (17l*8)\r
-#define BARSTEP        8\r
-\r
-unsigned       thx,thy,lastx;\r
-long           barx,barstep;\r
-\r
-void   CAL_DialogDraw (char *title,unsigned numcache)\r
-{\r
-       unsigned        homex,homey,x;\r
-\r
-       barstep = (NUMBARS<<16)/numcache;\r
-\r
-//\r
-// draw dialog window (masked tiles 12 - 20 are window borders)\r
-//\r
-       US_CenterWindow (20,8);\r
-       homex = PrintX;\r
-       homey = PrintY;\r
-\r
-       US_CPrint ("Loading");\r
-       fontcolor = F_SECONDCOLOR;\r
-       US_CPrint (title);\r
-       fontcolor = F_BLACK;\r
-\r
-//\r
-// draw thermometer bar\r
-//\r
-       thx = homex + 8;\r
-       thy = homey + 32;\r
-       VWB_DrawTile8(thx,thy,0);               // CAT3D numbers\r
-       VWB_DrawTile8(thx,thy+8,3);\r
-       VWB_DrawTile8(thx,thy+16,6);\r
-       VWB_DrawTile8(thx+17*8,thy,2);\r
-       VWB_DrawTile8(thx+17*8,thy+8,5);\r
-       VWB_DrawTile8(thx+17*8,thy+16,8);\r
-       for (x=thx+8;x<thx+17*8;x+=8)\r
-       {\r
-               VWB_DrawTile8(x,thy,1);\r
-               VWB_DrawTile8(x,thy+8,4);\r
-               VWB_DrawTile8(x,thy+16,7);\r
-       }\r
-\r
-       thx += 4;               // first line location\r
-       thy += 5;\r
-       barx = (long)thx<<16;\r
-       lastx = thx;\r
-\r
-       VW_UpdateScreen();\r
-}\r
-*/\r
-\r
-/*\r
-======================\r
-=\r
-= CAL_DialogUpdate\r
-=\r
-======================\r
-*/\r
-/*\r
-void   CAL_DialogUpdate (void)\r
-{\r
-       unsigned        x,xh;\r
-\r
-       barx+=barstep;\r
-       xh = barx>>16;\r
-       if (xh - lastx > BARSTEP)\r
-       {\r
-               for (x=lastx;x<=xh;x++)\r
-#if GRMODE == EGAGR\r
-                       VWB_Vlin (thy,thy+13,x,14);\r
-#endif\r
-#if GRMODE == CGAGR\r
-                       VWB_Vlin (thy,thy+13,x,SECONDCOLOR);\r
-#endif\r
-               lastx = xh;\r
-               VW_UpdateScreen();\r
-       }\r
-}*/\r
-\r
-/*\r
-======================\r
-=\r
-= CAL_DialogFinish\r
-=\r
-======================\r
-*/\r
-/*\r
-void   CAL_DialogFinish (void)\r
-{\r
-       unsigned        x,xh;\r
-\r
-       xh = thx + NUMBARS;\r
-       for (x=lastx;x<=xh;x++)\r
-#if GRMODE == EGAGR\r
-               VWB_Vlin (thy,thy+13,x,14);\r
-#endif\r
-#if GRMODE == CGAGR\r
-               VWB_Vlin (thy,thy+13,x,SECONDCOLOR);\r
-#endif\r
-       VW_UpdateScreen();\r
-\r
-}*/\r
-\r
-//===========================================================================\r
-\r
-/*\r
-======================\r
-=\r
-= CA_CacheMarks\r
-=\r
-======================\r
-*//*\r
-#define MAXEMPTYREAD   1024\r
-\r
-void CA_CacheMarks (char *title)\r
-{\r
-       boolean dialog;\r
-       int     i,next,numcache;\r
-       long    pos,endpos,nextpos,nextendpos,compressed;\r
-       long    bufferstart,bufferend;  // file position of general buffer\r
-       byte    far *source;\r
-       memptr  bigbufferseg;\r
-\r
-       dialog = (title!=NULL);\r
-\r
-       numcache = 0;\r
-//\r
-// go through and make everything not needed purgable\r
-//\r
-       for (i=0;i<NUMCHUNKS;i++)\r
-               if (grneeded[i]&ca_levelbit)\r
-               {\r
-                       if (grsegs[i])                                  // its allready in memory, make\r
-                               MM_SetPurge(&grsegs[i],0);      // sure it stays there!\r
-                       else\r
-                               numcache++;\r
-               }\r
-               else\r
-               {\r
-                       if (grsegs[i])                                  // not needed, so make it purgeable\r
-                               MM_SetPurge(&grsegs[i],3);\r
-               }\r
-\r
-       if (!numcache)                  // nothing to cache!\r
-               return;\r
-\r
-// MDM begin - (GAMERS EDGE)\r
-//\r
-       if (!FindFile("EGAGRAPH."EXT,NULL,2))\r
-               Quit("CA_CacheMarks(): Can't find graphics files.");\r
-//\r
-// MDM end\r
-\r
-       if (dialog)\r
-       {\r
-#ifdef PROFILE\r
-               write(profilehandle,title,strlen(title));\r
-               write(profilehandle,"\n",1);\r
-#endif\r
-               if (drawcachebox)\r
-                       drawcachebox(title,numcache);\r
-       }\r
-\r
-//\r
-// go through and load in anything still needed\r
-//\r
-       bufferstart = bufferend = 0;            // nothing good in buffer now\r
-\r
-       for (i=0;i<NUMCHUNKS;i++)\r
-               if ( (grneeded[i]&ca_levelbit) && !grsegs[i])\r
-               {\r
-//\r
-// update thermometer\r
-//\r
-                       if (dialog && updatecachebox)\r
-                               updatecachebox ();\r
-\r
-                       pos = GRFILEPOS(i);\r
-                       if (pos<0)\r
-                               continue;\r
-\r
-                       next = i +1;\r
-                       while (GRFILEPOS(next) == -1)           // skip past any sparse tiles\r
-                               next++;\r
-\r
-                       compressed = GRFILEPOS(next)-pos;\r
-                       endpos = pos+compressed;\r
-\r
-                       if (compressed<=BUFFERSIZE)\r
-                       {\r
-                               if (bufferstart<=pos\r
-                               && bufferend>= endpos)\r
-                               {\r
-                               // data is allready in buffer\r
-                                       source = (byte _seg *)bufferseg+(pos-bufferstart);\r
-                               }\r
-                               else\r
-                               {\r
-                               // load buffer with a new block from disk\r
-                               // try to get as many of the needed blocks in as possible\r
-                                       while ( next < NUMCHUNKS )\r
-                                       {\r
-                                               while (next < NUMCHUNKS &&\r
-                                               !(grneeded[next]&ca_levelbit && !grsegs[next]))\r
-                                                       next++;\r
-                                               if (next == NUMCHUNKS)\r
-                                                       continue;\r
-\r
-                                               nextpos = GRFILEPOS(next);\r
-                                               while (GRFILEPOS(++next) == -1) // skip past any sparse tiles\r
-                                                       ;\r
-                                               nextendpos = GRFILEPOS(next);\r
-                                               if (nextpos - endpos <= MAXEMPTYREAD\r
-                                               && nextendpos-pos <= BUFFERSIZE)\r
-                                                       endpos = nextendpos;\r
-                                               else\r
-                                                       next = NUMCHUNKS;                       // read pos to posend\r
-                                       }\r
-\r
-                                       lseek(grhandle,pos,SEEK_SET);\r
-                                       CA_FarRead(grhandle,bufferseg,endpos-pos);\r
-                                       bufferstart = pos;\r
-                                       bufferend = endpos;\r
-                                       source = bufferseg;\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                       // big chunk, allocate temporary buffer\r
-                               MM_GetPtr(&bigbufferseg,compressed);\r
-                               if (mmerror)\r
-                                       return;\r
-                               MM_SetLock (&bigbufferseg,true);\r
-                               lseek(grhandle,pos,SEEK_SET);\r
-                               CA_FarRead(grhandle,bigbufferseg,compressed);\r
-                               source = bigbufferseg;\r
-                       }\r
-\r
-                       CAL_ExpandGrChunk (i,source);\r
-                       if (mmerror)\r
-                               return;\r
-\r
-                       if (compressed>BUFFERSIZE)\r
-                               MM_FreePtr(&bigbufferseg);\r
-\r
-               }\r
-\r
-//\r
-// finish up any thermometer remnants\r
-//\r
-               if (dialog && finishcachebox)\r
-                       finishcachebox();\r
-}*/\r
diff --git a/16/exmmtest/src/lib/16_ca.h b/16/exmmtest/src/lib/16_ca.h
deleted file mode 100644 (file)
index 7780938..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/* Catacomb Apocalypse Source Code\r
- * Copyright (C) 1993-2014 Flat Rock Software\r
- *\r
- * This program is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along\r
- * with this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
- */\r
-\r
-// ID_CA.H\r
-#ifndef __16_CA__\r
-#define __16_CA__\r
-\r
-#ifndef __16_MM__\r
-#include "src/lib/16_head.h"\r
-#include "src/lib/16_mm.h"\r
-#endif\r
-\r
-//===========================================================================\r
-\r
-//#define NOMAPS\r
-//#define NOGRAPHICS\r
-//#define NOAUDIO\r
-\r
-//#define MAPHEADERLINKED\r
-//#define GRHEADERLINKED\r
-//#define AUDIOHEADERLINKED\r
-\r
-//#define NUMMAPS              39\r
-//#define MAPPLANES            3
-#define PROFILE\r
-\r
-//===========================================================================\r
-\r
-/*typedef      struct\r
-{\r
-       long            planestart[3];\r
-       unsigned        planelength[3];\r
-       unsigned        width,height;\r
-       char            name[16];\r
-} maptype;*/\r
-\r
-//===========================================================================\r
-\r
-/*extern       byte            _seg    *tinf;\r
-extern int                     mapon;\r
-\r
-extern unsigned        _seg    *mapsegs[3];\r
-extern maptype         _seg    *mapheaderseg[NUMMAPS];\r
-extern byte            _seg    *audiosegs[NUMSNDCHUNKS];\r
-extern void            _seg    *grsegs[NUMCHUNKS];\r
-\r
-extern byte            far     grneeded[NUMCHUNKS];\r
-extern byte            ca_levelbit,ca_levelnum;\r
-\r
-extern char            *titleptr[8];*/\r
-\r
-extern int                     profilehandle,debughandle;\r
-\r
-//\r
-// hooks for custom cache dialogs\r
-//\r
-extern void    (*drawcachebox)         (char *title, unsigned numcache);\r
-extern void    (*updatecachebox)       (void);\r
-extern void    (*finishcachebox)       (void);\r
-\r
-//===========================================================================\r
-\r
-// just for the score box reshifting\r
-\r
-//void CAL_ShiftSprite (unsigned segment,unsigned source,unsigned dest,unsigned width, unsigned height, unsigned pixshift, boolean domask);\r
-\r
-//===========================================================================\r
-
-void CA_OpenDebug (void);\r
-void CA_CloseDebug (void);
-boolean CA_FarRead (int handle, byte huge *dest, dword length, mminfo_t *mm);\r
-boolean CA_FarWrite (int handle, byte huge *source, dword length, mminfo_t *mm);
-\r
-boolean CA_ReadFile (char *filename, memptr *ptr, mminfo_t *mm);\r
-boolean CA_LoadFile (char *filename, memptr *ptr, mminfo_t *mm, mminfotype *mmi);
-\r
-//long CA_RLEWCompress (unsigned huge *source, long length, unsigned huge *dest,unsigned rlewtag);\r
-\r
-//void CA_RLEWexpand (unsigned huge *source, unsigned huge *dest,long length,unsigned rlewtag);\r
-\r
-void CA_Startup (void);\r
-void CA_Shutdown (void);\r
-\r
-//void CA_CacheAudioChunk (int chunk);\r
-//void CA_LoadAllSounds (void);\r
-\r
-/*void CA_UpLevel (void);\r
-void CA_DownLevel (void);\r
-\r
-void CA_SetAllPurge (void);\r
-\r
-void CA_ClearMarks (void);\r
-void CA_ClearAllMarks (void);\r
-\r
-#define CA_MarkGrChunk(chunk)  grneeded[chunk]|=ca_levelbit\r
-\r
-void CA_CacheGrChunk (int chunk);\r
-void CA_CacheMap (int mapnum);\r
-\r
-void CA_CacheMarks (char *title);*/\r
-#endif\r
diff --git a/16/exmmtest/src/lib/16_hc.c b/16/exmmtest/src/lib/16_hc.c
deleted file mode 100644 (file)
index 0052444..0000000
+++ /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 <http://www.gnu.org/licenses/>, 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 (file)
index db0265a..0000000
+++ /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 <http://www.gnu.org/licenses/>, 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 (file)
index 7dd5386..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-/* Project 16 Source Code~\r
- * Copyright (C) 2012-2015 sparky4 & pngwen & andrius4669\r
- *\r
- * This file is part of Project 16.\r
- *\r
- * Project 16 is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * Project 16 is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program.  If not, see <http://www.gnu.org/licenses/>, or\r
- * write to the Free Software Foundation, Inc., 51 Franklin Street,\r
- * Fifth Floor, Boston, MA 02110-1301 USA.\r
- *\r
- */\r
-\r
-#include "src/lib/16_head.h"\r
-\r
-/* Function: Wait **********************************************************\r
-*\r
-*     Parameters:    wait - time in microseconds\r
-*\r
-*     Description:    pauses for a specified number of microseconds.\r
-*\r
-*/\r
-void wait(clock_t wait){\r
-       clock_t goal;\r
-\r
-       if(!wait) return;\r
-\r
-       goal = wait + clock();\r
-       while((goal > clock()) && !kbhit()) ;\r
-} /* End of wait */\r
-\r
-long int\r
-filesize(FILE *fp)\r
-{\r
-       long int save_pos, size_of_file;\r
-\r
-       save_pos = ftell(fp);\r
-       fseek(fp, 0L, SEEK_END);\r
-       size_of_file = ftell(fp);\r
-       fseek(fp, save_pos, SEEK_SET);\r
-       return(size_of_file);\r
-}\r
-\r
-void printmeminfoline(byte *strc, const byte *pee, size_t h_total, size_t h_used, size_t h_free)\r
-{\r
-       byte str[64];\r
-       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);\r
-       strcat(strc,"\n");\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////////\r
-//\r
-//      US_CheckParm() - checks to see if a string matches one of a set of\r
-//              strings. The check is case insensitive. The routine returns the\r
-//              index of the string that matched, or -1 if no matches were found\r
-//\r
-///////////////////////////////////////////////////////////////////////////\r
-int\r
-US_CheckParm(char *parm,char **strings)\r
-{\r
-       char    cp,cs,\r
-                       *p,*s;\r
-       int             i;\r
-\r
-       while (!isalpha(*parm)) // Skip non-alphas\r
-               parm++;\r
-\r
-       for (i = 0;*strings && **strings;i++)\r
-       {\r
-               for (s = *strings++,p = parm,cs = cp = 0;cs == cp;)\r
-               {\r
-                       cs = *s++;\r
-                       if (!cs)\r
-                               return(i);\r
-                       cp = *p++;\r
-\r
-                       if (isupper(cs))\r
-                               cs = tolower(cs);\r
-                       if (isupper(cp))\r
-                               cp = tolower(cp);\r
-               }\r
-       }\r
-       return(-1);\r
-}\r
-\r
-/*\r
-==========================\r
-=\r
-= Quit\r
-=\r
-==========================\r
-*/\r
-\r
-/*void Quit(char *error, ...)\r
-{\r
-       short exit_code=0;\r
-       unsigned        finscreen;\r
-\r
-       va_list ap;\r
-\r
-       va_start(ap,error);\r
-\r
-#ifndef CATALOG\r
-       if (!error)\r
-       {\r
-               CA_SetAllPurge ();\r
-               CA_CacheGrChunk (PIRACY);\r
-               finscreen = (unsigned)grsegs[PIRACY];\r
-       }\r
-#endif\r
-\r
-       //ShutdownId ();\r
-\r
-       if (error && *error)\r
-       {\r
-               vprintf(error,ap);\r
-               exit_code = 1;\r
-       }\r
-#ifndef CATALOG\r
-       else\r
-       if (!NoWait)\r
-       {\r
-               movedata (finscreen,0,0xb800,0,4000);\r
-               bioskey (0);\r
-       }\r
-#endif\r
-\r
-       va_end(ap);\r
-\r
-#ifndef CATALOG\r
-       if (!error)\r
-       {\r
-               _argc = 2;\r
-               _argv[1] = "LAST.SHL";\r
-               _argv[2] = "ENDSCN.SCN";\r
-               _argv[3] = NULL;\r
-               if (execv("LOADSCN.EXE", _argv) == -1)\r
-               {\r
-                       clrscr();\r
-                       puts("Couldn't find executable LOADSCN.EXE.\n");\r
-                       exit(1);\r
-               }\r
-       }\r
-#endif\r
-\r
-       exit(exit_code);\r
-}*/\r
diff --git a/16/exmmtest/src/lib/16_head.h b/16/exmmtest/src/lib/16_head.h
deleted file mode 100644 (file)
index e6e590b..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-/* Project 16 Source Code~\r
- * Copyright (C) 2012-2015 sparky4 & pngwen & andrius4669\r
- *\r
- * This file is part of Project 16.\r
- *\r
- * Project 16 is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * Project 16 is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program.  If not, see <http://www.gnu.org/licenses/>, or\r
- * write to the Free Software Foundation, Inc., 51 Franklin Street,\r
- * Fifth Floor, Boston, MA 02110-1301 USA.\r
- *\r
- */\r
-\r
-#if !defined(__LARGE__) && !defined(__COMPACT__) && !defined(__HUGE__)\r
-#error Invalid memory model for compiling project 16\r
-#endif\r
-\r
-#if !defined(__i86__) && defined(__i386__)\r
-#error i8088 only\r
-#endif\r
-\r
-#ifndef _LIBHEAD_H_\r
-#define _LIBHEAD_H_\r
-#include <dos.h>\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-#include <conio.h> // just for wait\r
-#include <time.h> // just for wait\r
-#include <malloc.h>\r
-#include <ctype.h>\r
-#include <fcntl.h>\r
-#include <io.h>\r
-#include <sys/stat.h>\r
-#include <mem.h>\r
-#include <string.h>\r
-#ifdef __WATCOMC__\r
-#include <i86.h>\r
-#include <unistd.h>\r
-#include <alloca.h>\r
-#endif\r
-#include "src/lib/nyan/kitten.h"\r
-#include "src/lib/types.h"\r
-\r
-//0000 test type def wwww\r
-/*struct list {\r
-       struct list __based(__self) *next;\r
-       int         value;\r
-};*/\r
-\r
-/* Control codes for all keys on the keyboard */\r
-//here temperarly\r
-/*\r
-#define KEY_A          (0x1E)\r
-#define KEY_B          (0x30)\r
-#define KEY_C          (0x2E)\r
-#define KEY_D          (0x20)\r
-#define KEY_E          (0x12)\r
-#define KEY_F          (0x21)\r
-#define KEY_G          (0x22)\r
-#define KEY_H          (0x23)\r
-#define KEY_I          (0x17)\r
-#define KEY_J          (0x24)\r
-#define KEY_K          (0x25)\r
-#define KEY_L          (0x26)\r
-#define KEY_M          (0x32)\r
-#define KEY_N          (0x31)\r
-#define KEY_O          (0x18)\r
-#define KEY_P          (0x19)\r
-#define KEY_Q          (0x10)\r
-#define KEY_R          (0x13)\r
-#define KEY_S          (0x1F)\r
-#define KEY_T          (0x14)\r
-#define KEY_U          (0x16)\r
-#define KEY_V          (0x2F)\r
-#define KEY_W          (0x11)\r
-#define KEY_X          (0x2D)\r
-#define KEY_Y          (0x15)\r
-#define KEY_Z          (0x2C)\r
-#define KEY_1          (0x02)\r
-#define KEY_2          (0x03)\r
-#define KEY_3          (0x04)\r
-#define KEY_4          (0x05)\r
-#define KEY_5          (0x06)\r
-#define KEY_6          (0x07)\r
-#define KEY_7          (0x08)\r
-#define KEY_8          (0x09)\r
-#define KEY_9          (0x0A)\r
-#define KEY_0          (0x0B)\r
-#define KEY_DASH               (0x0C)  // -_\r
-#define KEY_EQUAL              (0x0D)  // =+\r
-#define KEY_LBRACKET   (0x1A)  // [{\r
-#define KEY_RBRACKET   (0x1B)  // ]}\r
-#define KEY_SEMICOLON  (0x27)  // ;:\r
-#define KEY_RQUOTE     (0x28)  // '"\r
-#define KEY_LQUOTE     (0x29)  // `~\r
-#define KEY_PERIOD     (0x33)  // .>\r
-#define KEY_COMMA              (0x34)  // ,<\r
-#define KEY_SLASH              (0x35)  // /?\r
-#define KEY_BACKSLASH  (0x2B)  // \|\r
-#define KEY_F1         (0x3B)\r
-#define KEY_F2         (0x3C)\r
-#define KEY_F3         (0x3D)\r
-#define KEY_F4         (0x3E)\r
-#define KEY_F5         (0x3F)\r
-#define KEY_F6         (0x40)\r
-#define KEY_F7         (0x41)\r
-#define KEY_F8         (0x42)\r
-#define KEY_F9         (0x43)\r
-#define KEY_F10                (0x44)\r
-#define KEY_ESC                (0x01)\r
-#define KEY_BACKSPACE   (0x0E)\r
-#define KEY_TAB                (0x0F)\r
-#define KEY_ENTER              (0x1C)\r
-#define KEY_CONTROL    (0x1D)\r
-#define KEY_LSHIFT     (0x2A)\r
-#define KEY_RSHIFT     (0x36)\r
-#define KEY_PRTSC              (0x37)\r
-#define KEY_ALT                (0x38)\r
-#define KEY_SPACE              (0x39)\r
-#define KEY_CAPSLOCK   (0x3A)\r
-#define KEY_NUMLOCK    (0x45)\r
-#define KEY_SCROLLLOCK (0x46)\r
-#define KEY_HOME               (0x47)\r
-#define KEY_UP         (0x48)\r
-#define KEY_PGUP               (0x49)\r
-#define KEY_MINUS              (0x4A)\r
-#define KEY_LEFT               (0x4B)\r
-#define KEY_CENTER     (0x4C)\r
-#define KEY_RIGHT              (0x4D)\r
-#define KEY_PLUS               (0x4E)\r
-#define KEY_END                (0x4F)\r
-#define KEY_DOWN               (0x50)\r
-#define KEY_PGDOWN     (0x51)\r
-#define KEY_INS                (0x52)\r
-#define KEY_DEL                (0x53)\r
-\r
-#define KEY_LWIN               (0x73)\r
-#define KEY_RWIN               (0x74)\r
-#define KEY_MENU               (0x75)\r
-*/\r
-\r
-static dword far* clockdw= (dword far*) 0x046C; /* 18.2hz clock */\r
-extern int                     profilehandle,debughandle;      //make it into game global\r
-\r
-#define __DEBUG__\r
-\r
-#define        nil     ((void *)0)\r
-\r
-#ifdef __WATCOMC__\r
-#define peekb(segm,ofs) (*(byte far*)MK_FP((segm),(ofs)))\r
-#define peekw(segm,ofs) (*(word far*)MK_FP((segm),(ofs)))\r
-#define pokeb(segm,ofs,value) (peekb((segm),(ofs)) = (byte)(value))\r
-#define pokew(segm,ofs,value) (peekw((segm),(ofs)) = (word)(value))\r
-\r
-typedef union REGPACK  regs_t;\r
-#endif\r
-\r
-typedef        enum    {false,true}    boolean;\r
-\r
-#ifdef __WATCOMC__\r
-typedef void __based(__self) * memptr;\r
-#endif\r
-#ifdef __BORLANDC__\r
-typedef void _seg * memptr;\r
-#endif\r
-typedef struct\r
-{\r
-       int old_mode;   //old video mode before game!\r
-       word frames_per_second;\r
-       clock_t t;\r
-       dword tiku;\r
-       word far* clock;\r
-       //handles for log files of the game gose here if wwww\r
-       //int heaphandle;\r
-} global_game_variables_t;\r
-\r
-/* local function */\r
-void wait(clock_t wait);\r
-\r
-long int filesize(FILE *fp);\r
-void printmeminfoline(byte *strc, const byte *pee, size_t h_total, size_t h_used, size_t h_free);\r
-int US_CheckParm(char *parm,char **strings);\r
-\r
-extern void CA_OpenDebug (void);\r
-extern void CA_CloseDebug (void);\r
-\r
-#endif/*_LIBHEAD_H_*/\r
diff --git a/16/exmmtest/src/lib/16_mm.c b/16/exmmtest/src/lib/16_mm.c
deleted file mode 100644 (file)
index d3ed8c2..0000000
+++ /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;i<MAPPAGES;i++)
-       {
-               __asm {
-                       mov     ah,EMS_MAPXPAGE
-                       mov     cx,[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_MapXEMS: EMS error 0x");
-                       strcpy(str,"MM_MapXEMS: EMS error ");
-                       //itoa(err,str2,16);
-                       MM_EMSerr(str, err);
-                       printf("%s\n",str);
-                       //printf("%s%x\n",str, err);
-                       //printf("FACK! %x\n", err);
-                       return err;
-               }
-       }
-       mmi->EMSmem = (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;i<mm->numUMBs;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;i<MAXBLOCKS-1;i++)
-       {
-               mm->mmblocks[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; search<mm->endid; 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<lowest && 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 (file)
index 9a01862..0000000
+++ /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 <string.h>
-#include <malloc.h>
-#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 (file)
index 4e501de..0000000
+++ /dev/null
@@ -1,615 +0,0 @@
-\r
-/* Functions that emulate UNIX catgets */\r
-\r
-/* Copyright (C) 1999,2000,2001 Jim Hall <jhall@freedos.org> */\r
-\r
-/*\r
-  This library is free software; you can redistribute it and/or\r
-  modify it under the terms of the GNU Lesser General Public\r
-  License as published by the Free Software Foundation; either\r
-  version 2.1 of the License, or (at your option) any later version.\r
-\r
-  This library is distributed in the hope that it will be useful,\r
-  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
-  Lesser General Public License for more details.\r
-\r
-  You should have received a copy of the GNU Lesser General Public\r
-  License along with this library; if not, write to the Free Software\r
-  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA\r
-*/\r
-\r
-#include <stdio.h>                     /* sprintf */\r
-#include <stdlib.h>                    /* getenv  */\r
-#include <string.h>                    /* strchr */\r
-#include <sys/stat.h>\r
-#include <io.h>\r
-#include <fcntl.h>\r
-\r
-#include "src/lib/nyan/kitten.h"\r
-\r
-\r
-/* DB stuff */\r
-\r
-struct db_list{\r
-  struct db_list *next;\r
-  char *key;\r
-  char *value;\r
-};\r
-\r
-typedef struct db_list db_t;\r
-\r
-db_t *db_insert (char *key, char *value);\r
-db_t *db_fetch (char *key);\r
-\r
-\r
-/* External functions */\r
-\r
-int get_line (int file, char *buffer, int size);\r
-\r
-\r
-/* Local prototypes */\r
-\r
-int catread (char *catfile);           /* Reads a catfile into the hash */\r
-char *processEscChars(char *line);  /* Converts c escape sequences to chars */\r
-\r
-/* Globals */\r
-\r
-nl_catd _kitten_catalog = 0;                   /* _kitten_catalog descriptor, either 0 or 1 */\r
-\r
-\r
-\r
-#if defined(__SMALL__)                                                 /* it's not very portable ;) */\r
-\r
-#include <dos.h>\r
-/* assert we are running in small model */\r
-/* else pointer below has to be done correctly */\r
-char verify_small_pointers[sizeof(void*) == 2 ? 1 : -1];\r
-\r
-\r
-int dos_open(char *filename, int mode);\r
-#define open(filename,mode) dos_open(filename,mode)\r
-\r
-int dos_read(int file, void *ptr, unsigned count);\r
-#define read(file, ptr, count) dos_read(file,ptr,count)\r
-\r
-void dos_close(int file);\r
-#define close(file) dos_close(file)\r
-\r
-#ifdef __WATCOMC__\r
-\r
-#pragma aux dos_open = \\r
-"mov ax, 0x3d00" \\r
-"int 0x21" \\r
-"jnc noerror" \\r
-"mov ax, 0xffff" \\r
-"noerror:" \\r
-parm [dx] [ax] value [ax];\r
-\r
-#pragma aux dos_read = \\r
-"mov ah, 0x3f" \\r
-"int 0x21" \\r
-"jnc noerror" \\r
-"xor ax, ax" \\r
-"noerror:" \\r
-parm [bx] [dx] [cx] value [ax];\r
-\r
-#pragma aux dos_close = \\r
-"mov ah, 0x3e" \\r
-"int 0x21" \\r
-parm [bx];\r
-\r
-#else\r
-\r
-int dos_open(char *filename, int mode)\r
-{\r
-  union REGS r;\r
-\r
-  if (mode);                                   /* mode ignored - readonly supported */\r
-\r
-  r.h.ah = 0x3d;\r
-  r.h.al = 0;                                  /* read mode only supoported now !! */\r
-  r.x.dx = (unsigned)filename;\r
-  intdos(&r,&r);\r
-\r
-  if (r.x.cflag)\r
-    return -1;\r
-  return r.x.ax;\r
-}\r
-\r
-int dos_read(int file, void *ptr, unsigned count)\r
-{\r
-  union REGS r;\r
-\r
-  r.h.ah = 0x3f;\r
-  r.x.bx = file;\r
-  r.x.cx = count;\r
-  r.x.dx = (unsigned)ptr;\r
-  intdos(&r,&r);\r
-\r
-  if (r.x.cflag)\r
-    return 0;\r
-  return r.x.ax;\r
-}\r
-\r
-void dos_close(int file)\r
-{\r
-  union REGS r;\r
-\r
-  r.h.ah = 0x3e;\r
-  r.x.bx = file;\r
-  intdos(&r,&r);\r
-}\r
-\r
-#endif\r
-#endif\r
-\r
-#ifndef NOCATS\r
-\r
-/* Functions */\r
-\r
-char *\r
-pascal kittengets(int set_number, int message_number, char *message)\r
-{\r
-  /* get message from a message _kitten_catalog */\r
-\r
-  /* 'message' should really be const, but not when it is returned */\r
-\r
-  /* On success, catgets() returns a pointer to an internal buffer\r
-     area containing the null-terminated message string.  On failure,\r
-     catgets() returns the value 'message'.  */\r
-\r
-  char key[10];\r
-  db_t *ptr;\r
-\r
-\r
-  /* fetch the message that goes with the set/message number */\r
-\r
-  sprintf (key, "%d.%d", set_number, message_number);\r
-  ptr = db_fetch (key);\r
-\r
-  /* printf("\ncatgets %s\n",message); */\r
-\r
-  if (ptr)\r
-    {\r
-      /*     printf("------> %s\n",ptr->value); */\r
-\r
-      return (ptr->value);\r
-    }\r
-\r
-  /* else */\r
-\r
-  return (message);\r
-}\r
-\r
-nl_catd\r
-kittenopen(char *name)\r
-{\r
-  /* catopen() returns a message _kitten_catalog descriptor of type nl_catd on\r
-     success.  On failure, it returns -1. */\r
-\r
-  /* 'flag' is completely ignored here. */\r
-\r
-  char catfile[256];                   /* full path to the msg _kitten_catalog */\r
-  char *nlsptr;                                /* ptr to NLSPATH */\r
-  char *lang;                  /* ptr to LANG */\r
-\r
-\r
-\r
-  /* Open the _kitten_catalog file */\r
-\r
-  /* The value of `_kitten_catalog' will be set based on catread */\r
-\r
-  if (_kitten_catalog)\r
-    {\r
-      /* Already one open */\r
-\r
-      printf("cat already open\n");\r
-      return (-1);\r
-    }\r
-\r
-  /* If the message _kitten_catalog file name contains a directory separator,\r
-     assume that this is a real path to the _kitten_catalog file.  Note that\r
-     catread will return a true or false value based on its ability\r
-     to read the catfile. */\r
-\r
-  if (strchr (name, '\\'))\r
-    {\r
-      /* first approximation: 'name' is a filename */\r
-\r
-      printf("found \\\n");\r
-\r
-      _kitten_catalog = catread (name);\r
-      return (_kitten_catalog);\r
-    }\r
-\r
-  /* If the message _kitten_catalog file name does not contain a directory\r
-     separator, then we need to try to locate the message _kitten_catalog on\r
-     our own.  We will use several methods to find it. */\r
-\r
-  /* We will need the value of LANG, and may need a 2-letter abbrev of\r
-     LANG later on, so get it now. */\r
-\r
-  lang = getenv ("LANG");\r
-\r
-  if (lang == NULL)\r
-    {\r
-      /* printf("no lang= found\n"); */\r
-\r
-      /* Return failure - we won't be able to locate the cat file */\r
-      return (-1);\r
-    }\r
-\r
-\r
-  /* step through NLSPATH */\r
-\r
-  nlsptr = getenv ("NLSPATH");\r
-\r
-\r
-  if (nlsptr == NULL)\r
-    {\r
-      /* printf("no NLSPATH= found\n"); */\r
-\r
-      /* Return failure - we won't be able to locate the cat file */\r
-      return (-1);\r
-    }\r
-\r
-      /* printf("nlsptr:%s\n",nlsptr); */\r
-\r
-  while (*nlsptr)\r
-    {\r
-      char *tok = strchr(nlsptr, ';');\r
-      int toklen;\r
-\r
-\r
-      if (tok == NULL) tok = nlsptr + strlen(nlsptr);\r
-      toklen=tok-nlsptr;\r
-      /* Try to find the _kitten_catalog file in each path from NLSPATH */\r
-\r
-      /* Rule #1: %NLSPATH%\%LANG%\cat */\r
-\r
-      memcpy(catfile,nlsptr,toklen);\r
-      sprintf(catfile+toklen,"\\%s\\%s",lang,name);\r
-\r
-      _kitten_catalog = catread (catfile);\r
-      if (_kitten_catalog)\r
-       {\r
-         return (_kitten_catalog);\r
-       }\r
-\r
-      /* Rule #2: %NLSPATH%\cat.%LANG% */\r
-\r
-      sprintf(catfile+toklen,"\\%s.%s",name, lang);\r
-\r
-      _kitten_catalog = catread (catfile);\r
-\r
-      if (_kitten_catalog)\r
-       {\r
-         return (_kitten_catalog);\r
-       }\r
-\r
-      /* Rule #3: if LANG looks to be in format "en-UK" then\r
-        %NLSPATH%\cat.EN */\r
-\r
-      if (lang[2] == '-')\r
-       {\r
-         lang[2] = 0;\r
-         sprintf(catfile+toklen,"\\%s.%s",name,lang);\r
-         lang[2] = '-';\r
-\r
-         _kitten_catalog = catread (catfile);\r
-         if (_kitten_catalog)\r
-           {\r
-             return (_kitten_catalog);\r
-           }\r
-       }\r
-\r
-      /* Grab next tok for the next while iteration */\r
-      nlsptr = tok;\r
-      if (*nlsptr) nlsptr++;\r
-\r
-    } /* while tok */\r
-\r
-  /* We could not find it.  Return failure. */\r
-\r
-  return (0);\r
-}\r
-\r
-int\r
-catread (char *catfile)\r
-{\r
-  int  file;                           /* pointer to the catfile */\r
-  char *key;                           /* part of key-value for hash */\r
-  char *value;                         /* part of key-value for hash */\r
-  char inBuffer[256];                  /* the string read from the file */\r
-\r
-  /* Open the catfile for reading */\r
-\r
-  /*printf("catread %s\n",catfile); */\r
-\r
-  file = open (catfile, O_RDONLY | O_TEXT);\r
-  if (file < 0)\r
-    {\r
-      /* Cannot open the file. Return failure */\r
-         /* printf("catread: cant read %s\n",catfile); */\r
-      return (0);\r
-    }\r
-\r
-  /*printf("catread %s success\n",catfile);*/\r
-\r
-  /* Read the file into memory */\r
-\r
-  while (get_line (file, inBuffer, sizeof(inBuffer)))\r
-    {\r
-      /* Break into parts.  Entries should be of the form:\r
-        "1.2:This is a message" */\r
-\r
-      /* A line that starts with '#' is considered a comment, and will\r
-        be thrown away without reading it. */\r
-\r
-      if (inBuffer[0] == '#')          /* comment */\r
-       continue;\r
-\r
-      if ((key = strchr (inBuffer, ':')) != NULL)\r
-       {\r
-         *key = 0;\r
-\r
-         value = processEscChars(key+1);\r
-\r
-         db_insert (inBuffer, value);\r
-       }\r
-\r
-    } /* while */\r
-\r
-  close (file);\r
-\r
-  /* Return success */\r
-\r
-  return (1);\r
-}\r
-\r
-void\r
-kittenclose (void)\r
-{\r
-  /* close a message _kitten_catalog */\r
-\r
-  _kitten_catalog = 0;\r
-}\r
-\r
-\r
-\r
-/**\r
- * Process strings, converting \n, \t, \v, \b, \r, \f, \\, \ddd, \xdd and \x0dd\r
- * to actual chars. (Note: \x is an extension to support hexadecimal)\r
- * This method is used to allow the message _kitten_catalog to use c escape sequences.\r
- * Modifies the line in-place (always same size or shorter).\r
- * Returns a pointer to input string.\r
- */\r
-\r
-int mystrtoul(char *src, int base, int size, int *error)\r
-{\r
-  int ret = 0;\r
-\r
-  *error = 1;\r
-\r
-  for (; size > 0; size--)\r
-    {\r
-      int digit;\r
-      int ch = *src++;\r
-\r
-      if (ch >= '0' && ch <= '9') digit = ch - '0';\r
-      else if (ch >= 'A' && ch <= 'Z') digit = ch - 'A' + 10;\r
-      else if (ch >= 'a' && ch <= 'z') digit = ch - 'a' + 10;\r
-      else\r
-       {\r
-         return 0;\r
-       }\r
-\r
-      if (digit >= base)\r
-       {\r
-         return 0;\r
-       }\r
-\r
-      ret = ret * base + digit;\r
-    }\r
-\r
-  *error = 0;\r
-\r
-  return ret;\r
-}\r
-\r
-\r
-char *processEscChars(char *line)\r
-{\r
-  register char *src = line, *dst = line;\r
-\r
-  /* used when converting \xdd and \ddd (hex or octal) characters */\r
-  char ch;\r
-\r
-  if (line == NULL) return NULL;\r
-\r
-  /* cycle through copying characters, except when a \ is encountered. */\r
-  for ( ; *src != '\0'; src++, dst++)\r
-    {\r
-      ch = *src;\r
-\r
-      if (ch == '\\')\r
-       {\r
-         src++; /* point to char following slash */\r
-         switch (ch = *src)\r
-           {\r
-           case '\\': /* a single slash */\r
-             ch = '\\';\r
-             break;\r
-           case 'n': /* a newline (linefeed) */\r
-             ch = '\n';\r
-             break;\r
-           case 'r': /* a carriage return */\r
-             ch = '\r';\r
-             break;\r
-           case 't': /* a horizontal tab */\r
-             ch = '\t';\r
-             break;\r
-           case 'v': /* a vertical tab */\r
-             ch = '\v';\r
-             break;\r
-           case 'b': /* a backspace */\r
-             ch = '\b';\r
-             break;\r
-           case 'a': /* alert */\r
-             ch = '\a';\r
-             break;\r
-           case 'f': /* formfeed */\r
-             ch = '\f';\r
-             break;\r
-           case 'x': /* extension supporting hex numbers \xdd or \x0dd */\r
-             {\r
-               int error;\r
-               ch  = mystrtoul(src+1,16,2, &error); /* get value */\r
-               if (!error) /* store character */\r
-                 {\r
-                   src += 2;\r
-                 }\r
-               else /* error so just store x (loose slash) */\r
-                 {\r
-                   ch = *src;\r
-                 }\r
-             }\r
-\r
-             break;\r
-           default: /* just store letter (loose slash) or handle octal */\r
-\r
-             {\r
-               int error;\r
-               ch  = mystrtoul(src,8,3, &error); /* get value */\r
-               if (!error) /* store character */\r
-                 {\r
-                   src += 3;\r
-                 }\r
-               else\r
-                 ch = *src;\r
-             }\r
-\r
-             break;\r
-           }\r
-       }\r
-\r
-      *dst = ch;\r
-    }\r
-\r
-  /* ensure '\0' terminated */\r
-  *dst = '\0';\r
-\r
-  return line;\r
-}\r
-\r
-\r
-\r
-int\r
-get_line (int file, char *str, int size)\r
-{\r
-  int success = 0;\r
-\r
-  /* now, read the string */\r
-\r
-  for ( ; size > 0; )\r
-    {\r
-      if (read(file,str,1) <= 0)\r
-       break;\r
-\r
-      success = 1;\r
-\r
-      if (*str == '\r')\r
-       continue;\r
-\r
-      if (*str == '\n')\r
-       break;\r
-\r
-      str++;\r
-      size--;\r
-\r
-    } /* while */\r
-\r
-  *str = 0;\r
-\r
-  return success;\r
-}\r
-\r
-/* Function prototypes */\r
-\r
-\r
-/* Global variables */\r
-\r
-static db_t *hashtab[1];\r
-\r
-\r
-/* Functions */\r
-\r
-\r
-/* db_fetch() - Query the hash and return a struct that contains the\r
-   key and the pointer.         The calling function should not look beyond\r
-   that. */\r
-\r
-db_t *\r
-db_fetch (char *s)\r
-{\r
-  db_t *db_ptr;\r
-\r
-  for (db_ptr = hashtab[0]; db_ptr != NULL; db_ptr = db_ptr->next)\r
-    {\r
-      if (strcmp (s, db_ptr->key) == 0)\r
-       {\r
-         break;\r
-\r
-       }\r
-    }\r
-\r
-\r
-  return (db_ptr);\r
-}\r
-\r
-/* db_insert() - Inserts a key,value pair into the hash.  If the key\r
-   already exists in the hash, the new value is NOT inserted. */\r
-\r
-db_t *\r
-db_insert (char *key, char *value)\r
-{\r
-  db_t *db_ptr;\r
-\r
-  if ((db_ptr = db_fetch (key)) == NULL)\r
-    {\r
-      /* not found */\r
-\r
-      db_ptr = (db_t *) malloc (sizeof (*db_ptr));\r
-\r
-      if (db_ptr == NULL || (db_ptr->key = strdup (key)) == NULL)\r
-       {\r
-         return (NULL);\r
-       }\r
-\r
-      /* insert the key,value into the hash. */\r
-\r
-      db_ptr->next = hashtab[0];\r
-      hashtab[0] = db_ptr;\r
-    }\r
-\r
-  else\r
-    {\r
-      /* already there */\r
-\r
-      free ((void *) db_ptr->value);\r
-    }\r
-\r
-  if ((db_ptr ->value = strdup (value)) == NULL)\r
-    {\r
-      return (NULL);\r
-    }\r
-\r
-  /* else */\r
-\r
-  return (db_ptr);\r
-}\r
-\r
-\r
-\r
-#endif /* NOCATS */\r
diff --git a/16/exmmtest/src/lib/nyan/kitten.h b/16/exmmtest/src/lib/nyan/kitten.h
deleted file mode 100644 (file)
index 2cec22f..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/* $Id: kitten.h,v 1.1 2004/09/19 10:01:26 bartoldeman Exp $ */\r
-\r
-/* Functions that emulate UNIX catgets */\r
-\r
-/* Copyright (C) 1999,2000 Jim Hall <jhall@freedos.org> */\r
-\r
-/*\r
-  This library is free software; you can redistribute it and/or\r
-  modify it under the terms of the GNU Lesser General Public\r
-  License as published by the Free Software Foundation; either\r
-  version 2.1 of the License, or (at your option) any later version.\r
-\r
-  This library is distributed in the hope that it will be useful,\r
-  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
-  Lesser General Public License for more details.\r
-\r
-  You should have received a copy of the GNU Lesser General Public\r
-  License along with this library; if not, write to the Free Software\r
-  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
-*/\r
-\r
-\r
-#ifndef _CATGETS_H\r
-#define _CATGETS_H\r
-\r
-#ifdef NOCATS\r
-\r
-/* #define NOCATS to disable that stuff completely */\r
-#define nl_catd int\r
-#define catopen(x,y) 1\r
-#define catclose(x)\r
-#define catgets(c,x,y,s) s\r
-\r
-#else\r
-\r
-\r
-\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-  /* Data types */\r
-\r
-  typedef int nl_catd;\r
-\r
-  /* Symbolic constants */\r
-\r
-#define MCLoadBySet 0                  /* not implemented */\r
-#define MCLoadAll   0                  /* not implemented */\r
-\r
-\r
-  /* Functions */\r
-\r
-#define catgets(catalog, set,message_number,message) kittengets(set,message_number,message)\r
-#define catopen(name,flag) kittenopen(name)\r
-#define catclose(catalog)  kittenclose()\r
-\r
-\r
-  char *  pascal kittengets( int set_number, int message_number,char *message);\r
-  nl_catd kittenopen(char *name);\r
-  void    kittenclose (void);\r
-\r
-\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-#endif /* NOCATS */\r
-\r
-#endif /* _CATGETS_H */\r
diff --git a/16/exmmtest/src/lib/types.h b/16/exmmtest/src/lib/types.h
deleted file mode 100644 (file)
index 2055c20..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Project 16 Source Code~\r
- * Copyright (C) 2012-2015 sparky4 & pngwen & andrius4669\r
- *\r
- * This file is part of Project 16.\r
- *\r
- * Project 16 is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * Project 16 is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program.  If not, see <http://www.gnu.org/licenses/>, or\r
- * write to the Free Software Foundation, Inc., 51 Franklin Street,\r
- * Fifth Floor, Boston, MA 02110-1301 USA.\r
- *\r
- */\r
-/*\r
- * Just some handy typedefs that make it easier to think about the low\r
- * level code\r
- */\r
-\r
-#ifndef _TYPE_H_\r
-#define _TYPE_H_\r
-\r
-typedef unsigned char byte;\r
-typedef unsigned short word;\r
-typedef unsigned long  dword;\r
-typedef signed char sbyte;\r
-typedef signed short sword;\r
-typedef signed long sdword;\r
-\r
-#endif/*_TYPE_H_*/\r
diff --git a/16/exmmtest/wtf_this.wat b/16/exmmtest/wtf_this.wat
deleted file mode 100644 (file)
index 3f027ee..0000000
+++ /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 (file)
index 0000000..aef7def
Binary files /dev/null and b/16_CA.BCO differ
diff --git a/16_HC.BCO b/16_HC.BCO
new file mode 100644 (file)
index 0000000..67bd315
Binary files /dev/null and b/16_HC.BCO differ
diff --git a/16_HEAD.BCO b/16_HEAD.BCO
new file mode 100644 (file)
index 0000000..6d4ac37
Binary files /dev/null and b/16_HEAD.BCO differ
diff --git a/16_MM.BCO b/16_MM.BCO
new file mode 100644 (file)
index 0000000..0d82784
Binary files /dev/null and b/16_MM.BCO differ
index 93afd7e6b5d30c8a06d5836db4cb8b70cadeb168..bf99e259b1e6219d3b76e2014312668985fb4e8c 100644 (file)
--- a/DEBUG.16
+++ b/DEBUG.16
@@ -1,8 +1,8 @@
-0      Size:5558       Owner:0x0\r
-0      Size:5558       Owner:0x0\r
-15b6   Size:256        Owner:0x4cde\r
-Seg:16b6       Size:273        Owner:0x857a\r
-Seg:1d04       Size:49 Owner:0x0\r
-Seg:1d04       Size:49 Owner:0x0\r
-1f25   Size:49371      Owner:0x0\r
+0      Size:5562       Owner:0x0\r
+0      Size:5562       Owner:0x0\r
+15ba   Size:256        Owner:0x4cde\r
+Seg:16ba       Size:273        Owner:0x857a\r
+Seg:1d08       Size:49 Owner:0x0\r
+Seg:1d08       Size:49 Owner:0x0\r
+ad39   Size:12999      Owner:0x0\r
 Seg:e000       Size:4294909951 Owner:0x0\r
diff --git a/EXMMBC.BCO b/EXMMBC.BCO
new file mode 100644 (file)
index 0000000..3bd64ee
Binary files /dev/null and b/EXMMBC.BCO differ
diff --git a/EXMMBC.DSK b/EXMMBC.DSK
new file mode 100644 (file)
index 0000000..c164eab
Binary files /dev/null and b/EXMMBC.DSK differ
diff --git a/EXMMBC.MAP b/EXMMBC.MAP
new file mode 100644 (file)
index 0000000..bee59e8
--- /dev/null
@@ -0,0 +1,737 @@
+\r
+ Start  Stop   Length Name               Class\r
+\r
+ 00000H 05CA0H 05CA1H _TEXT              CODE\r
+ 05CB0H 05CB0H 00000H _FARDATA           FAR_DATA\r
+ 05CB0H 05CB0H 00000H _FARBSS            FAR_BSS\r
+ 05CB0H 05CB0H 00000H _OVERLAY_          OVRINFO\r
+ 05CB0H 05CB0H 00000H _1STUB_            STUBSEG\r
+ 05CB0H 06D69H 010BAH _DATA              DATA\r
+ 06D6AH 06D6BH 00002H _CVTSEG            DATA\r
+ 06D6CH 06D71H 00006H _SCNSEG            DATA\r
+ 06D72H 06D72H 00000H _CONST             CONST\r
+ 06D72H 06D89H 00018H _INIT_             INITDATA\r
+ 06D8AH 06D8AH 00000H _INITEND_          INITDATA\r
+ 06D8AH 06D8AH 00000H _EXIT_             EXITDATA\r
+ 06D8AH 06D8AH 00000H _EXITEND_          EXITDATA\r
+ 06D8AH 06DF1H 00068H _BSS               BSS\r
+ 06DF2H 06DF2H 00000H _BSSEND            BSSEND\r
+ 06E00H 06E7FH 00080H _STACK             STACK\r
+\r
+\r
+Detailed map of segments\r
+\r
+ 0000:0000 028F C=CODE   S=_TEXT          G=(none)  M=c0.ASM     ACBP=28\r
+ 0000:028F 067F C=CODE   S=_TEXT          G=(none)  M=SRC\LIB\NYAN\KITTEN.C ACBP=28\r
+ 0000:090E 02EE C=CODE   S=_TEXT          G=(none)  M=SRC\LIB\16_HC.C ACBP=28\r
+ 0000:0BFC 024D C=CODE   S=_TEXT          G=(none)  M=SRC\EXMMTEST.C ACBP=28\r
+ 0000:0E49 0241 C=CODE   S=_TEXT          G=(none)  M=SRC\LIB\16_CA.C ACBP=28\r
+ 0000:108A 02C8 C=CODE   S=_TEXT          G=(none)  M=SRC\LIB\16_HEAD.C ACBP=28\r
+ 0000:1352 1CB5 C=CODE   S=_TEXT          G=(none)  M=SRC\LIB\16_MM.C ACBP=28\r
+ 0000:3007 0024 C=CODE   S=_TEXT          G=(none)  M=ATEXIT     ACBP=28\r
+ 0000:302B 0049 C=CODE   S=_TEXT          G=(none)  M=CLOCK      ACBP=28\r
+ 0000:3074 0000 C=CODE   S=_TEXT          G=(none)  M=CTYPE      ACBP=28\r
+ 0000:3074 003D C=CODE   S=_TEXT          G=(none)  M=DOSFATTR   ACBP=28\r
+ 0000:30B1 0089 C=CODE   S=_TEXT          G=(none)  M=EXIT       ACBP=28\r
+ 0000:313A 0000 C=CODE   S=_TEXT          G=(none)  M=FILES      ACBP=28\r
+ 0000:313A 0000 C=CODE   S=_TEXT          G=(none)  M=FILES2     ACBP=28\r
+ 0000:313A 0000 C=CODE   S=_TEXT          G=(none)  M=FMODE      ACBP=28\r
+ 0000:313A 0021 C=CODE   S=_TEXT          G=(none)  M=H_LLSH     ACBP=28\r
+ 0000:315B 0021 C=CODE   S=_TEXT          G=(none)  M=H_LURSH    ACBP=28\r
+ 0000:317C 0060 C=CODE   S=_TEXT          G=(none)  M=H_PADD     ACBP=28\r
+ 0000:31DC 0028 C=CODE   S=_TEXT          G=(none)  M=H_PSBP     ACBP=28\r
+ 0000:3204 004B C=CODE   S=_TEXT          G=(none)  M=IOERROR    ACBP=28\r
+ 0000:324F 0011 C=CODE   S=_TEXT          G=(none)  M=ISATTY     ACBP=28\r
+ 0000:3260 00A2 C=CODE   S=_TEXT          G=(none)  M=LONGTOA    ACBP=28\r
+ 0000:3302 0029 C=CODE   S=_TEXT          G=(none)  M=LSEEK      ACBP=28\r
+ 0000:332B 00B0 C=CODE   S=_TEXT          G=(none)  M=MKNAME     ACBP=28\r
+ 0000:33DB 0021 C=CODE   S=_TEXT          G=(none)  M=N_PCMP     ACBP=28\r
+ 0000:33FC 002F C=CODE   S=_TEXT          G=(none)  M=READA      ACBP=28\r
+ 0000:342B 00B2 C=CODE   S=_TEXT          G=(none)  M=SETUPIO    ACBP=28\r
+ 0000:34DD 0000 C=CODE   S=_TEXT          G=(none)  M=STKLEN     ACBP=28\r
+ 0000:34DD 002C C=CODE   S=_TEXT          G=(none)  M=TOLOWER    ACBP=28\r
+ 0000:3509 0018 C=CODE   S=_TEXT          G=(none)  M=UNLINK     ACBP=28\r
+ 0000:3521 04DB C=CODE   S=_TEXT          G=(none)  M=VPRINTER   ACBP=28\r
+ 0000:39FC 009F C=CODE   S=_TEXT          G=(none)  M=VRAM       ACBP=28\r
+ 0000:3A9B 0000 C=CODE   S=_TEXT          G=(none)  M=WSCROLL    ACBP=28\r
+ 0000:3A9B 0030 C=CODE   S=_TEXT          G=(none)  M=_STPCPY    ACBP=28\r
+ 0000:3ACB 0004 C=CODE   S=_TEXT          G=(none)  M=CORELEFT   ACBP=28\r
+ 0000:3ACF 014E C=CODE   S=_TEXT          G=(none)  M=CPRINTF    ACBP=28\r
+ 0000:3C1D 01A5 C=CODE   S=_TEXT          G=(none)  M=CRTINIT    ACBP=28\r
+ 0000:3DC2 001F C=CODE   S=_TEXT          G=(none)  M=CVTFAK     ACBP=28\r
+ 0000:3DE1 042D C=CODE   S=_TEXT          G=(none)  M=FARHEAP    ACBP=28\r
+ 0000:420E 013E C=CODE   S=_TEXT          G=(none)  M=FBRK       ACBP=28\r
+ 0000:434C 0050 C=CODE   S=_TEXT          G=(none)  M=FCORELFT   ACBP=28\r
+ 0000:439C 0054 C=CODE   S=_TEXT          G=(none)  M=GETCH      ACBP=28\r
+ 0000:43F0 00AC C=CODE   S=_TEXT          G=(none)  M=GPTEXT     ACBP=28\r
+ 0000:449C 0029 C=CODE   S=_TEXT          G=(none)  M=IOCTL      ACBP=28\r
+ 0000:44C5 0012 C=CODE   S=_TEXT          G=(none)  M=KBHIT      ACBP=28\r
+ 0000:44D7 009D C=CODE   S=_TEXT          G=(none)  M=MOVETEXT   ACBP=28\r
+ 0000:4574 0017 C=CODE   S=_TEXT          G=(none)  M=PUTCH      ACBP=28\r
+ 0000:458B 0004 C=CODE   S=_TEXT          G=(none)  M=REALCVT    ACBP=28\r
+ 0000:458F 01C7 C=CODE   S=_TEXT          G=(none)  M=SCREEN     ACBP=28\r
+ 0000:4756 0184 C=CODE   S=_TEXT          G=(none)  M=SCROLL     ACBP=28\r
+ 0000:48DA 0129 C=CODE   S=_TEXT          G=(none)  M=SETARGV    ACBP=28\r
+ 0000:4A03 001C C=CODE   S=_TEXT          G=(none)  M=SETBLOCK   ACBP=28\r
+ 0000:4A1F 0054 C=CODE   S=_TEXT          G=(none)  M=SETENVP    ACBP=28\r
+ 0000:4A73 002C C=CODE   S=_TEXT          G=(none)  M=WHEREXY    ACBP=28\r
+ 0000:4A9F 001D C=CODE   S=_TEXT          G=(none)  M=CHMODA     ACBP=28\r
+ 0000:4ABC 0026 C=CODE   S=_TEXT          G=(none)  M=CLOSE      ACBP=28\r
+ 0000:4AE2 001E C=CODE   S=_TEXT          G=(none)  M=CLOSEA     ACBP=28\r
+ 0000:4B00 00B0 C=CODE   S=_TEXT          G=(none)  M=FCLOSE     ACBP=28\r
+ 0000:4BB0 00C6 C=CODE   S=_TEXT          G=(none)  M=FFLUSH     ACBP=28\r
+ 0000:4C76 0041 C=CODE   S=_TEXT          G=(none)  M=FLENGTH    ACBP=28\r
+ 0000:4CB7 0040 C=CODE   S=_TEXT          G=(none)  M=FLUSHALL   ACBP=28\r
+ 0000:4CF7 01FE C=CODE   S=_TEXT          G=(none)  M=FOPEN      ACBP=28\r
+ 0000:4EF5 001C C=CODE   S=_TEXT          G=(none)  M=FPRINTF    ACBP=28\r
+ 0000:4F11 01D8 C=CODE   S=_TEXT          G=(none)  M=FSEEK      ACBP=28\r
+ 0000:50E9 0070 C=CODE   S=_TEXT          G=(none)  M=GETENV     ACBP=28\r
+ 0000:5159 0070 C=CODE   S=_TEXT          G=(none)  M=LTOA1      ACBP=28\r
+ 0000:51C9 0024 C=CODE   S=_TEXT          G=(none)  M=MEMCPY     ACBP=28\r
+ 0000:51ED 0022 C=CODE   S=_TEXT          G=(none)  M=MOVEDATA   ACBP=28\r
+ 0000:520F 018D C=CODE   S=_TEXT          G=(none)  M=OPEN       ACBP=28\r
+ 0000:539C 004F C=CODE   S=_TEXT          G=(none)  M=OPENA      ACBP=28\r
+ 0000:53EB 001B C=CODE   S=_TEXT          G=(none)  M=PRINTF     ACBP=28\r
+ 0000:5406 03A4 C=CODE   S=_TEXT          G=(none)  M=PUTC       ACBP=28\r
+ 0000:57AA 00CB C=CODE   S=_TEXT          G=(none)  M=READ       ACBP=28\r
+ 0000:5875 0003 C=CODE   S=_TEXT          G=(none)  M=READU      ACBP=28\r
+ 0000:5878 0111 C=CODE   S=_TEXT          G=(none)  M=SETVBUF    ACBP=28\r
+ 0000:5989 0081 C=CODE   S=_TEXT          G=(none)  M=SPRINTF    ACBP=28\r
+ 0000:5A0A 003F C=CODE   S=_TEXT          G=(none)  M=STRCAT     ACBP=28\r
+ 0000:5A49 0040 C=CODE   S=_TEXT          G=(none)  M=STRDUP     ACBP=28\r
+ 0000:5A89 001F C=CODE   S=_TEXT          G=(none)  M=STRLEN     ACBP=28\r
+ 0000:5AA8 0149 C=CODE   S=_TEXT          G=(none)  M=WRITE      ACBP=28\r
+ 0000:5BF1 003C C=CODE   S=_TEXT          G=(none)  M=WRITEA     ACBP=28\r
+ 0000:5C2D 0003 C=CODE   S=_TEXT          G=(none)  M=WRITEU     ACBP=28\r
+ 0000:5C30 003B C=CODE   S=_TEXT          G=(none)  M=XFCLOSE    ACBP=28\r
+ 0000:5C6B 0036 C=CODE   S=_TEXT          G=(none)  M=XFFLUSH    ACBP=28\r
+ 05CB:0000 0000 C=FAR_DATA S=_FARDATA       G=(none)  M=c0.ASM     ACBP=68\r
+ 05CB:0000 0000 C=FAR_BSS S=_FARBSS        G=(none)  M=c0.ASM     ACBP=68\r
+ 05CB:0000 0000 C=OVRINFO S=_OVERLAY_      G=(none)  M=c0.ASM     ACBP=68\r
+ 05CB:0000 0000 C=STUBSEG S=_1STUB_        G=(none)  M=c0.ASM     ACBP=68\r
+ 05CB:0000 0093 C=DATA   S=_DATA          G=DGROUP  M=c0.ASM     ACBP=68\r
+ 05CB:0094 0045 C=DATA   S=_DATA          G=DGROUP  M=SRC\LIB\NYAN\KITTEN.C ACBP=48\r
+ 05CB:00DA 0014 C=DATA   S=_DATA          G=DGROUP  M=SRC\LIB\16_HC.C ACBP=48\r
+ 05CB:00EE 0187 C=DATA   S=_DATA          G=DGROUP  M=SRC\EXMMTEST.C ACBP=48\r
+ 05CB:0276 002C C=DATA   S=_DATA          G=DGROUP  M=SRC\LIB\16_CA.C ACBP=48\r
+ 05CB:02A2 0010 C=DATA   S=_DATA          G=DGROUP  M=SRC\LIB\16_HEAD.C ACBP=48\r
+ 05CB:02B2 0A06 C=DATA   S=_DATA          G=DGROUP  M=SRC\LIB\16_MM.C ACBP=48\r
+ 05CB:0CB8 0002 C=DATA   S=_DATA          G=DGROUP  M=ATEXIT     ACBP=48\r
+ 05CB:0CBA 0000 C=DATA   S=_DATA          G=DGROUP  M=CLOCK      ACBP=48\r
+ 05CB:0CBA 0101 C=DATA   S=_DATA          G=DGROUP  M=CTYPE      ACBP=48\r
+ 05CB:0DBC 0000 C=DATA   S=_DATA          G=DGROUP  M=DOSFATTR   ACBP=48\r
+ 05CB:0DBC 0006 C=DATA   S=_DATA          G=DGROUP  M=EXIT       ACBP=48\r
+ 05CB:0DC2 0190 C=DATA   S=_DATA          G=DGROUP  M=FILES      ACBP=48\r
+ 05CB:0F52 002A C=DATA   S=_DATA          G=DGROUP  M=FILES2     ACBP=48\r
+ 05CB:0F7C 0004 C=DATA   S=_DATA          G=DGROUP  M=FMODE      ACBP=48\r
+ 05CB:0F80 0000 C=DATA   S=_DATA          G=DGROUP  M=H_LLSH     ACBP=48\r
+ 05CB:0F80 0000 C=DATA   S=_DATA          G=DGROUP  M=H_LURSH    ACBP=48\r
+ 05CB:0F80 0000 C=DATA   S=_DATA          G=DGROUP  M=H_PADD     ACBP=48\r
+ 05CB:0F80 0000 C=DATA   S=_DATA          G=DGROUP  M=H_PSBP     ACBP=48\r
+ 05CB:0F80 005B C=DATA   S=_DATA          G=DGROUP  M=IOERROR    ACBP=48\r
+ 05CB:0FDC 0000 C=DATA   S=_DATA          G=DGROUP  M=ISATTY     ACBP=48\r
+ 05CB:0FDC 0000 C=DATA   S=_DATA          G=DGROUP  M=LONGTOA    ACBP=48\r
+ 05CB:0FDC 0000 C=DATA   S=_DATA          G=DGROUP  M=LSEEK      ACBP=48\r
+ 05CB:0FDC 0009 C=DATA   S=_DATA          G=DGROUP  M=MKNAME     ACBP=48\r
+ 05CB:0FE6 0000 C=DATA   S=_DATA          G=DGROUP  M=N_PCMP     ACBP=48\r
+ 05CB:0FE6 0000 C=DATA   S=_DATA          G=DGROUP  M=READA      ACBP=48\r
+ 05CB:0FE6 0000 C=DATA   S=_DATA          G=DGROUP  M=SETUPIO    ACBP=48\r
+ 05CB:0FE6 0002 C=DATA   S=_DATA          G=DGROUP  M=STKLEN     ACBP=48\r
+ 05CB:0FE8 0000 C=DATA   S=_DATA          G=DGROUP  M=TOLOWER    ACBP=48\r
+ 05CB:0FE8 0000 C=DATA   S=_DATA          G=DGROUP  M=UNLINK     ACBP=48\r
+ 05CB:0FE8 0067 C=DATA   S=_DATA          G=DGROUP  M=VPRINTER   ACBP=48\r
+ 05CB:1050 0000 C=DATA   S=_DATA          G=DGROUP  M=VRAM       ACBP=48\r
+ 05CB:1050 0002 C=DATA   S=_DATA          G=DGROUP  M=WSCROLL    ACBP=48\r
+ 05CB:1052 0000 C=DATA   S=_DATA          G=DGROUP  M=_STPCPY    ACBP=48\r
+ 05CB:1052 0000 C=DATA   S=_DATA          G=DGROUP  M=CORELEFT   ACBP=48\r
+ 05CB:1052 0000 C=DATA   S=_DATA          G=DGROUP  M=CPRINTF    ACBP=48\r
+ 05CB:1052 0018 C=DATA   S=_DATA          G=DGROUP  M=CRTINIT    ACBP=48\r
+ 05CB:106A 0031 C=DATA   S=_DATA          G=DGROUP  M=CVTFAK     ACBP=48\r
+ 05CB:109C 0000 C=DATA   S=_DATA          G=DGROUP  M=FARHEAP    ACBP=48\r
+ 05CB:109C 0002 C=DATA   S=_DATA          G=DGROUP  M=FBRK       ACBP=48\r
+ 05CB:109E 0000 C=DATA   S=_DATA          G=DGROUP  M=FCORELFT   ACBP=48\r
+ 05CB:109E 0000 C=DATA   S=_DATA          G=DGROUP  M=GETCH      ACBP=48\r
+ 05CB:109E 0000 C=DATA   S=_DATA          G=DGROUP  M=GPTEXT     ACBP=48\r
+ 05CB:109E 0000 C=DATA   S=_DATA          G=DGROUP  M=IOCTL      ACBP=48\r
+ 05CB:109E 0002 C=DATA   S=_DATA          G=DGROUP  M=KBHIT      ACBP=48\r
+ 05CB:10A0 0000 C=DATA   S=_DATA          G=DGROUP  M=MOVETEXT   ACBP=48\r
+ 05CB:10A0 0000 C=DATA   S=_DATA          G=DGROUP  M=PUTCH      ACBP=48\r
+ 05CB:10A0 0000 C=DATA   S=_DATA          G=DGROUP  M=REALCVT    ACBP=48\r
+ 05CB:10A0 0000 C=DATA   S=_DATA          G=DGROUP  M=SCREEN     ACBP=48\r
+ 05CB:10A0 0000 C=DATA   S=_DATA          G=DGROUP  M=SCROLL     ACBP=48\r
+ 05CB:10A0 0010 C=DATA   S=_DATA          G=DGROUP  M=SETARGV    ACBP=48\r
+ 05CB:10B0 0000 C=DATA   S=_DATA          G=DGROUP  M=SETBLOCK   ACBP=48\r
+ 05CB:10B0 0004 C=DATA   S=_DATA          G=DGROUP  M=SETENVP    ACBP=48\r
+ 05CB:10B4 0000 C=DATA   S=_DATA          G=DGROUP  M=WHEREXY    ACBP=48\r
+ 05CB:10B4 0000 C=DATA   S=_DATA          G=DGROUP  M=CHMODA     ACBP=48\r
+ 05CB:10B4 0000 C=DATA   S=_DATA          G=DGROUP  M=CLOSE      ACBP=48\r
+ 05CB:10B4 0000 C=DATA   S=_DATA          G=DGROUP  M=CLOSEA     ACBP=48\r
+ 05CB:10B4 0000 C=DATA   S=_DATA          G=DGROUP  M=FCLOSE     ACBP=48\r
+ 05CB:10B4 0000 C=DATA   S=_DATA          G=DGROUP  M=FFLUSH     ACBP=48\r
+ 05CB:10B4 0000 C=DATA   S=_DATA          G=DGROUP  M=FLENGTH    ACBP=48\r
+ 05CB:10B4 0000 C=DATA   S=_DATA          G=DGROUP  M=FLUSHALL   ACBP=48\r
+ 05CB:10B4 0000 C=DATA   S=_DATA          G=DGROUP  M=FOPEN      ACBP=48\r
+ 05CB:10B4 0000 C=DATA   S=_DATA          G=DGROUP  M=FPRINTF    ACBP=48\r
+ 05CB:10B4 0000 C=DATA   S=_DATA          G=DGROUP  M=FSEEK      ACBP=48\r
+ 05CB:10B4 0000 C=DATA   S=_DATA          G=DGROUP  M=GETENV     ACBP=48\r
+ 05CB:10B4 0000 C=DATA   S=_DATA          G=DGROUP  M=LTOA1      ACBP=48\r
+ 05CB:10B4 0000 C=DATA   S=_DATA          G=DGROUP  M=MEMCPY     ACBP=48\r
+ 05CB:10B4 0000 C=DATA   S=_DATA          G=DGROUP  M=MOVEDATA   ACBP=48\r
+ 05CB:10B4 0000 C=DATA   S=_DATA          G=DGROUP  M=OPEN       ACBP=48\r
+ 05CB:10B4 0000 C=DATA   S=_DATA          G=DGROUP  M=OPENA      ACBP=48\r
+ 05CB:10B4 0000 C=DATA   S=_DATA          G=DGROUP  M=PRINTF     ACBP=48\r
+ 05CB:10B4 0001 C=DATA   S=_DATA          G=DGROUP  M=PUTC       ACBP=48\r
+ 05CB:10B6 0000 C=DATA   S=_DATA          G=DGROUP  M=READ       ACBP=48\r
+ 05CB:10B6 0000 C=DATA   S=_DATA          G=DGROUP  M=READU      ACBP=48\r
+ 05CB:10B6 0004 C=DATA   S=_DATA          G=DGROUP  M=SETVBUF    ACBP=48\r
+ 05CB:10BA 0000 C=DATA   S=_DATA          G=DGROUP  M=SPRINTF    ACBP=48\r
+ 05CB:10BA 0000 C=DATA   S=_DATA          G=DGROUP  M=STRCAT     ACBP=48\r
+ 05CB:10BA 0000 C=DATA   S=_DATA          G=DGROUP  M=STRDUP     ACBP=48\r
+ 05CB:10BA 0000 C=DATA   S=_DATA          G=DGROUP  M=STRLEN     ACBP=48\r
+ 05CB:10BA 0000 C=DATA   S=_DATA          G=DGROUP  M=WRITE      ACBP=48\r
+ 05CB:10BA 0000 C=DATA   S=_DATA          G=DGROUP  M=WRITEA     ACBP=48\r
+ 05CB:10BA 0000 C=DATA   S=_DATA          G=DGROUP  M=WRITEU     ACBP=48\r
+ 05CB:10BA 0000 C=DATA   S=_DATA          G=DGROUP  M=XFCLOSE    ACBP=48\r
+ 05CB:10BA 0000 C=DATA   S=_DATA          G=DGROUP  M=XFFLUSH    ACBP=48\r
+ 05CB:10BA 0000 C=DATA   S=_CVTSEG        G=DGROUP  M=c0.ASM     ACBP=48\r
+ 05CB:10BA 0002 C=DATA   S=_CVTSEG        G=DGROUP  M=CVTFAK     ACBP=48\r
+ 05CB:10BC 0000 C=DATA   S=_CVTSEG        G=DGROUP  M=REALCVT    ACBP=48\r
+ 05CB:10BC 0000 C=DATA   S=_SCNSEG        G=DGROUP  M=c0.ASM     ACBP=48\r
+ 05CB:10BC 0006 C=DATA   S=_SCNSEG        G=DGROUP  M=CVTFAK     ACBP=48\r
+ 05CB:10C2 0000 C=CONST  S=_CONST         G=DGROUP  M=c0.ASM     ACBP=48\r
+ 05CB:10C2 0000 C=INITDATA S=_INIT_         G=DGROUP  M=c0.ASM     ACBP=48\r
+ 05CB:10C2 0006 C=INITDATA S=_INIT_         G=DGROUP  M=SETUPIO    ACBP=48\r
+ 05CB:10C8 0006 C=INITDATA S=_INIT_         G=DGROUP  M=CRTINIT    ACBP=48\r
+ 05CB:10CE 0006 C=INITDATA S=_INIT_         G=DGROUP  M=SETARGV    ACBP=48\r
+ 05CB:10D4 0006 C=INITDATA S=_INIT_         G=DGROUP  M=SETENVP    ACBP=48\r
+ 05CB:10DA 0000 C=INITDATA S=_INITEND_      G=DGROUP  M=c0.ASM     ACBP=28\r
+ 05CB:10DA 0000 C=EXITDATA S=_EXIT_         G=DGROUP  M=c0.ASM     ACBP=48\r
+ 05CB:10DA 0000 C=EXITDATA S=_EXITEND_      G=DGROUP  M=c0.ASM     ACBP=28\r
+ 05CB:10DA 0000 C=BSS    S=_BSS           G=DGROUP  M=c0.ASM     ACBP=48\r
+ 05CB:10DA 0004 C=BSS    S=_BSS           G=DGROUP  M=SRC\LIB\NYAN\KITTEN.C ACBP=48\r
+ 05CB:10DE 0002 C=BSS    S=_BSS           G=DGROUP  M=SRC\LIB\16_HC.C ACBP=48\r
+ 05CB:10E0 0000 C=BSS    S=_BSS           G=DGROUP  M=SRC\EXMMTEST.C ACBP=48\r
+ 05CB:10E0 000A C=BSS    S=_BSS           G=DGROUP  M=SRC\LIB\16_CA.C ACBP=48\r
+ 05CB:10EA 0000 C=BSS    S=_BSS           G=DGROUP  M=SRC\LIB\16_HEAD.C ACBP=48\r
+ 05CB:10EA 0006 C=BSS    S=_BSS           G=DGROUP  M=SRC\LIB\16_MM.C ACBP=48\r
+ 05CB:10F0 0040 C=BSS    S=_BSS           G=DGROUP  M=ATEXIT     ACBP=48\r
+ 05CB:1130 0001 C=BSS    S=_BSS           G=DGROUP  M=CLOCK      ACBP=48\r
+ 05CB:1132 0000 C=BSS    S=_BSS           G=DGROUP  M=DOSFATTR   ACBP=48\r
+ 05CB:1132 0000 C=BSS    S=_BSS           G=DGROUP  M=IOERROR    ACBP=48\r
+ 05CB:1132 0000 C=BSS    S=_BSS           G=DGROUP  M=ISATTY     ACBP=48\r
+ 05CB:1132 0000 C=BSS    S=_BSS           G=DGROUP  M=LONGTOA    ACBP=48\r
+ 05CB:1132 0000 C=BSS    S=_BSS           G=DGROUP  M=LSEEK      ACBP=48\r
+ 05CB:1132 000D C=BSS    S=_BSS           G=DGROUP  M=MKNAME     ACBP=48\r
+ 05CB:1140 0000 C=BSS    S=_BSS           G=DGROUP  M=READA      ACBP=48\r
+ 05CB:1140 0000 C=BSS    S=_BSS           G=DGROUP  M=SETUPIO    ACBP=48\r
+ 05CB:1140 0000 C=BSS    S=_BSS           G=DGROUP  M=UNLINK     ACBP=48\r
+ 05CB:1140 0000 C=BSS    S=_BSS           G=DGROUP  M=VPRINTER   ACBP=48\r
+ 05CB:1140 0000 C=BSS    S=_BSS           G=DGROUP  M=VRAM       ACBP=48\r
+ 05CB:1140 0000 C=BSS    S=_BSS           G=DGROUP  M=CORELEFT   ACBP=48\r
+ 05CB:1140 0000 C=BSS    S=_BSS           G=DGROUP  M=CRTINIT    ACBP=48\r
+ 05CB:1140 0000 C=BSS    S=_BSS           G=DGROUP  M=GETCH      ACBP=48\r
+ 05CB:1140 0000 C=BSS    S=_BSS           G=DGROUP  M=IOCTL      ACBP=48\r
+ 05CB:1140 0000 C=BSS    S=_BSS           G=DGROUP  M=KBHIT      ACBP=48\r
+ 05CB:1140 0000 C=BSS    S=_BSS           G=DGROUP  M=SETBLOCK   ACBP=48\r
+ 05CB:1140 0000 C=BSS    S=_BSS           G=DGROUP  M=CHMODA     ACBP=48\r
+ 05CB:1140 0000 C=BSS    S=_BSS           G=DGROUP  M=CLOSEA     ACBP=48\r
+ 05CB:1140 0000 C=BSS    S=_BSS           G=DGROUP  M=FLENGTH    ACBP=48\r
+ 05CB:1140 0000 C=BSS    S=_BSS           G=DGROUP  M=GETENV     ACBP=48\r
+ 05CB:1140 0000 C=BSS    S=_BSS           G=DGROUP  M=MEMCPY     ACBP=48\r
+ 05CB:1140 0000 C=BSS    S=_BSS           G=DGROUP  M=MOVEDATA   ACBP=48\r
+ 05CB:1140 0000 C=BSS    S=_BSS           G=DGROUP  M=OPEN       ACBP=48\r
+ 05CB:1140 0000 C=BSS    S=_BSS           G=DGROUP  M=OPENA      ACBP=48\r
+ 05CB:1140 0001 C=BSS    S=_BSS           G=DGROUP  M=PUTC       ACBP=48\r
+ 05CB:1142 0000 C=BSS    S=_BSS           G=DGROUP  M=READ       ACBP=48\r
+ 05CB:1142 0000 C=BSS    S=_BSS           G=DGROUP  M=STRCAT     ACBP=48\r
+ 05CB:1142 0000 C=BSS    S=_BSS           G=DGROUP  M=STRLEN     ACBP=48\r
+ 05CB:1142 0000 C=BSS    S=_BSS           G=DGROUP  M=WRITEA     ACBP=48\r
+ 05CB:1142 0000 C=BSSEND S=_BSSEND        G=DGROUP  M=c0.ASM     ACBP=28\r
+ 06E0:0000 0080 C=STACK  S=_STACK         G=(none)  M=c0.ASM     ACBP=74\r
+\r
+  Address         Publics by Name\r
+\r
+ 05CB:0000 idle  DATASEG@\r
+ 0000:028B idle  DGROUP@\r
+ 0000:313D idle  F_LXLSH@\r
+ 0000:315E idle  F_LXURSH@\r
+ 0000:317F idle  F_PADD@\r
+ 0000:31DF idle  F_PSBP@\r
+ 0000:31AE idle  F_PSUB@\r
+ 0000:028F idle  KITTENGETS\r
+ 0000:313D idle  LXLSH@\r
+ 0000:315E idle  LXURSH@\r
+ 0000:313A       N_LXLSH@\r
+ 0000:315B       N_LXURSH@\r
+ 0000:317C       N_PADD@\r
+ 0000:33DB       N_PCMP@\r
+ 0000:31DC       N_PSBP@\r
+ 0000:31AB idle  N_PSUB@\r
+ 0000:317F idle  PADD@\r
+ 0000:31DF idle  PSBP@\r
+ 0000:31AE idle  PSUB@\r
+ 0000:0276       _abort\r
+ 05CB:10EC idle  _aftersort\r
+ 0000:3007 idle  _atexit\r
+ 05CB:10EE idle  _beforesort\r
+ 0000:0FF0 idle  _CAL_OptimizeNodes\r
+ 0000:04F2 idle  _catread\r
+ 0000:0E67       _CA_CloseDebug\r
+ 0000:0E72 idle  _CA_FarRead\r
+ 0000:0EAE idle  _CA_FarWrite\r
+ 0000:0F5E       _CA_LoadFile\r
+ 0000:0E49       _CA_OpenDebug\r
+ 0000:0EEA idle  _CA_ReadFile\r
+ 0000:107F       _CA_Shutdown\r
+ 0000:1061       _CA_Startup\r
+ 0000:302B       _clock\r
+ 0000:4ABC       _close\r
+ 0000:3ACB       _coreleft\r
+ 0000:3C01 idle  _cprintf\r
+ 0000:07F4 idle  _db_fetch\r
+ 0000:085C idle  _db_insert\r
+ 05CB:10E6       _debughandle\r
+ 05CB:1061       _directvideo\r
+ 05CB:10E4 idle  _drawcachebox\r
+ 05CB:10B0       _environ\r
+ 05CB:007F       _errno\r
+ 0000:30FF       _exit\r
+ 0000:434C       _farcoreleft\r
+ 0000:3F21       _farfree\r
+ 0000:4035       _farmalloc\r
+ 0000:4196 idle  _farrealloc\r
+ 0000:4B00       _fclose\r
+ 0000:4BB0       _fflush\r
+ 0000:4C76       _filelength\r
+ 0000:10C5 idle  _filesize\r
+ 05CB:10E0 idle  _finishcachebox\r
+ 0000:4CB7       _flushall\r
+ 0000:4EC0       _fopen\r
+ 0000:4EF5       _fprintf\r
+ 0000:5420 idle  _fputc\r
+ 0000:55A9 idle  _fputchar\r
+ 0000:3F21       _free\r
+ 0000:4F93       _fseek\r
+ 0000:500F       _ftell\r
+ 0000:439C       _getch\r
+ 0000:43B5 idle  _getche\r
+ 0000:50E9       _getenv\r
+ 0000:43F0       _gettext\r
+ 0000:079F idle  _get_line\r
+ 0000:0BF1 idle  _HC_CloseDebug\r
+ 0000:0BD3 idle  _HC_OpenDebug\r
+ 05CB:10DE idle  _heaphandle\r
+ 0000:449C       _ioctl\r
+ 0000:324F       _isatty\r
+ 0000:5159 idle  _itoa\r
+ 0000:44C5       _kbhit\r
+ 0000:05A0 idle  _kittenclose\r
+ 0000:02DE idle  _kittenopen\r
+ 0000:0A4B idle  _LargestFarFreeBlock\r
+ 0000:090E idle  _LargestFreeBlock\r
+ 0000:3302       _lseek\r
+ 0000:51A1 idle  _ltoa\r
+ 0000:0BFC       _main\r
+ 0000:402B       _malloc\r
+ 0000:51C9       _memcpy\r
+ 0000:1352 idle  _MML_CheckForEMS\r
+ 0000:1613 idle  _MML_CheckForXMS\r
+ 0000:1929 idle  _MML_ClearBlock\r
+ 0000:1395 idle  _MML_SetupEMS\r
+ 0000:1648 idle  _MML_SetupXMS\r
+ 0000:148F idle  _MML_ShutdownEMS\r
+ 0000:16E8 idle  _MML_ShutdownXMS\r
+ 0000:172A idle  _MML_UseSpace\r
+ 0000:2FEF idle  _MM_BombOnError\r
+ 0000:2821       _MM_DumpData\r
+ 0000:220B       _MM_FreePtr\r
+ 0000:1E17       _MM_GetPtr\r
+ 0000:14CF idle  _MM_MapEMS\r
+ 0000:1569 idle  _MM_MapXEMS\r
+ 0000:2A74       _MM_Report\r
+ 0000:3005 idle  _MM_segude\r
+ 0000:2FFE idle  _MM_seguin\r
+ 0000:23C2 idle  _MM_SetLock\r
+ 0000:230E idle  _MM_SetPurge\r
+ 0000:260B       _MM_ShowMemory\r
+ 0000:1D8B       _MM_Shutdown\r
+ 0000:247B idle  _MM_SortMem\r
+ 0000:199A       _MM_Startup\r
+ 0000:29E3 idle  _MM_TotalFree\r
+ 0000:2973 idle  _MM_UnusedMemory\r
+ 0000:51ED       _movedata\r
+ 0000:44D7       _movetext\r
+ 0000:05A7 idle  _mystrtoul\r
+ 0000:523C       _open\r
+ 0000:53EB       _printf\r
+ 0000:1124 idle  _printmeminfoline\r
+ 0000:0643 idle  _processEscChars\r
+ 05CB:10E8 idle  _profilehandle\r
+ 0000:4574       _putch\r
+ 0000:4446       _puttext\r
+ 0000:5875       _read\r
+ 0000:418F idle  _realloc\r
+ 0000:4A03       _setblock\r
+ 0000:5878       _setvbuf\r
+ 0000:59C7       _sprintf\r
+ 0000:5A0A       _strcat\r
+ 0000:5A49       _strdup\r
+ 0000:5A89       _strlen\r
+ 0000:34DD       _tolower\r
+ 0000:5184       _ultoa\r
+ 0000:43D2 idle  _ungetch\r
+ 0000:3509       _unlink\r
+ 05CB:10E2 idle  _updatecachebox\r
+ 0000:1283       _US_CheckParm\r
+ 0000:59E9 idle  _vsprintf\r
+ 0000:108A idle  _wait\r
+ 0000:4A7D idle  _wherex\r
+ 0000:4A8C idle  _wherey\r
+ 0000:5C2D       _write\r
+ 05CB:10EA idle  _XMSaddr\r
+ 0000:1000 idle  __AHINCR\r
+ 0000:000C idle  __AHSHIFT\r
+ 05CB:10A0       __argc\r
+ 05CB:10A2       __argv\r
+ 05CB:0CB8       __atexitcnt\r
+ 05CB:10F0       __atexittbl\r
+ 0000:4282       __brk\r
+ 05CB:008B       __brklvl\r
+ 05CB:006B       __C0argc\r
+ 05CB:006D       __C0argv\r
+ 0000:3CE3 idle  __c0crtinit\r
+ 05CB:0071       __C0environ\r
+ 05CB:109F       __cChar\r
+ 0000:3120 idle  __cexit\r
+ 05CB:109E       __cFlag\r
+ 0000:0166       __checknull\r
+ 0000:4A9F       __chmod\r
+ 0000:0153       __cleanup\r
+ 0000:4AE2       __close\r
+ 0000:09C0 idle  __coreleft\r
+ 0000:3ACF       __CPUTN\r
+ 0000:3D00 idle  __crtinit\r
+ 05CB:0CBA       __ctype\r
+ 0000:0000  Abs  __cvtfak\r
+ 0000:312E idle  __c_exit\r
+ 05CB:0F80       __doserrno\r
+ 0000:323D       __DOSERROR\r
+ 05CB:0F82 idle  __dosErrorToSV\r
+ 0000:3074       __dos_getfileattr\r
+ 0000:3094 idle  __dos_setfileattr\r
+ 05CB:0075       __envLng\r
+ 05CB:0077       __envseg\r
+ 05CB:0079       __envSize\r
+ 0000:310E       __exit\r
+ 05CB:0DBC       __exitbuf\r
+ 05CB:0DBE       __exitfopen\r
+ 05CB:0DC0 idle  __exitopen\r
+ 0000:0B06 idle  __farcoreleft\r
+ 05CB:0F7C       __fmode\r
+ 0000:5406 idle  __fputc\r
+ 0000:55BC       __FPUTN\r
+ 0000:4E76 idle  __GETFP\r
+ 05CB:0087       __heapbase\r
+ 05CB:008F       __heaptop\r
+ 05CB:005B idle  __Int0Vector\r
+ 05CB:005F idle  __Int4Vector\r
+ 05CB:0063 idle  __Int5Vector\r
+ 05CB:0067 idle  __Int6Vector\r
+ 0000:3204       __IOERROR\r
+ 05CB:0094 idle  __kitten_catalog\r
+ 0000:3260       __LONGTOA\r
+ 0000:332B       __MKNAME\r
+ 0000:028D idle  __MMODEL\r
+ 05CB:0F52       __nfile\r
+ 0000:43B5 idle  __Ngetche\r
+ 05CB:0F7E       __notUmask\r
+ 0000:43D2 idle  __Nungetch\r
+ 0000:539C       __open\r
+ 05CB:0F54       __openfd\r
+ 0000:4DAD idle  __OPENFP\r
+ 05CB:007D       __osmajor\r
+ 05CB:007E idle  __osminor\r
+ 05CB:007D idle  __osversion\r
+ 05CB:007B       __psp\r
+ 0000:33FC       __read\r
+ 0000:458B       __REALCVT\r
+ 05CB:10BA       __RealCvtVector\r
+ 0000:01BC       __restorezero\r
+ 0000:42C1       __sbrk\r
+ 05CB:10BC idle  __ScanTodVector\r
+ 0000:46C5       __SCREENIO\r
+ 0000:4778       __SCROLL\r
+ 0000:0000  Abs  __setargv__\r
+ 0000:0000 idle  __setenvp__\r
+ 0000:342B       __setupio\r
+ 05CB:0081       __StartTime\r
+ 05CB:0FE6       __stklen\r
+ 0000:3A9B       __stpcpy\r
+ 05CB:0DC2       __streams\r
+ 0000:0167       __terminate\r
+ 0000:3384 idle  __TMPNAM\r
+ 0000:0000 idle  __turboCrt\r
+ 0000:32E2       __UTOA\r
+ 0000:4701       __VALIDATEXY\r
+ 05CB:007D idle  __version\r
+ 05CB:1052       __video\r
+ 0000:3C58       __VideoInt\r
+ 0000:3539       __VPRINTER\r
+ 0000:39FC       __VPTR\r
+ 0000:3A21       __VRAM\r
+ 0000:4A73       __wherexy\r
+ 0000:5BF1       __write\r
+ 05CB:1050       __wscroll\r
+ 0000:5C30       __xfclose\r
+ 0000:5C6B       __xfflush\r
+ 05CB:0085 idle  ___brklvl\r
+ 0000:3DE1 idle  ___first\r
+ 0000:3DE3 idle  ___last\r
+ 0000:57AA       ___read\r
+ 0000:3DE5 idle  ___rover\r
+ 0000:5AA8       ___write\r
+\r
+  Address         Publics by Value\r
+\r
+ 0000:0000  Abs  __setargv__\r
+ 0000:0000 idle  __turboCrt\r
+ 0000:0000  Abs  __cvtfak\r
+ 0000:0000 idle  __setenvp__\r
+ 0000:000C idle  __AHSHIFT\r
+ 0000:0153       __cleanup\r
+ 0000:0166       __checknull\r
+ 0000:0167       __terminate\r
+ 0000:01BC       __restorezero\r
+ 0000:0276       _abort\r
+ 0000:028B idle  DGROUP@\r
+ 0000:028D idle  __MMODEL\r
+ 0000:028F idle  KITTENGETS\r
+ 0000:02DE idle  _kittenopen\r
+ 0000:04F2 idle  _catread\r
+ 0000:05A0 idle  _kittenclose\r
+ 0000:05A7 idle  _mystrtoul\r
+ 0000:0643 idle  _processEscChars\r
+ 0000:079F idle  _get_line\r
+ 0000:07F4 idle  _db_fetch\r
+ 0000:085C idle  _db_insert\r
+ 0000:090E idle  _LargestFreeBlock\r
+ 0000:09C0 idle  __coreleft\r
+ 0000:0A4B idle  _LargestFarFreeBlock\r
+ 0000:0B06 idle  __farcoreleft\r
+ 0000:0BD3 idle  _HC_OpenDebug\r
+ 0000:0BF1 idle  _HC_CloseDebug\r
+ 0000:0BFC       _main\r
+ 0000:0E49       _CA_OpenDebug\r
+ 0000:0E67       _CA_CloseDebug\r
+ 0000:0E72 idle  _CA_FarRead\r
+ 0000:0EAE idle  _CA_FarWrite\r
+ 0000:0EEA idle  _CA_ReadFile\r
+ 0000:0F5E       _CA_LoadFile\r
+ 0000:0FF0 idle  _CAL_OptimizeNodes\r
+ 0000:1000 idle  __AHINCR\r
+ 0000:1061       _CA_Startup\r
+ 0000:107F       _CA_Shutdown\r
+ 0000:108A idle  _wait\r
+ 0000:10C5 idle  _filesize\r
+ 0000:1124 idle  _printmeminfoline\r
+ 0000:1283       _US_CheckParm\r
+ 0000:1352 idle  _MML_CheckForEMS\r
+ 0000:1395 idle  _MML_SetupEMS\r
+ 0000:148F idle  _MML_ShutdownEMS\r
+ 0000:14CF idle  _MM_MapEMS\r
+ 0000:1569 idle  _MM_MapXEMS\r
+ 0000:1613 idle  _MML_CheckForXMS\r
+ 0000:1648 idle  _MML_SetupXMS\r
+ 0000:16E8 idle  _MML_ShutdownXMS\r
+ 0000:172A idle  _MML_UseSpace\r
+ 0000:1929 idle  _MML_ClearBlock\r
+ 0000:199A       _MM_Startup\r
+ 0000:1D8B       _MM_Shutdown\r
+ 0000:1E17       _MM_GetPtr\r
+ 0000:220B       _MM_FreePtr\r
+ 0000:230E idle  _MM_SetPurge\r
+ 0000:23C2 idle  _MM_SetLock\r
+ 0000:247B idle  _MM_SortMem\r
+ 0000:260B       _MM_ShowMemory\r
+ 0000:2821       _MM_DumpData\r
+ 0000:2973 idle  _MM_UnusedMemory\r
+ 0000:29E3 idle  _MM_TotalFree\r
+ 0000:2A74       _MM_Report\r
+ 0000:2FEF idle  _MM_BombOnError\r
+ 0000:2FFE idle  _MM_seguin\r
+ 0000:3005 idle  _MM_segude\r
+ 0000:3007 idle  _atexit\r
+ 0000:302B       _clock\r
+ 0000:3074       __dos_getfileattr\r
+ 0000:3094 idle  __dos_setfileattr\r
+ 0000:30FF       _exit\r
+ 0000:310E       __exit\r
+ 0000:3120 idle  __cexit\r
+ 0000:312E idle  __c_exit\r
+ 0000:313A       N_LXLSH@\r
+ 0000:313D idle  LXLSH@\r
+ 0000:313D idle  F_LXLSH@\r
+ 0000:315B       N_LXURSH@\r
+ 0000:315E idle  LXURSH@\r
+ 0000:315E idle  F_LXURSH@\r
+ 0000:317C       N_PADD@\r
+ 0000:317F idle  F_PADD@\r
+ 0000:317F idle  PADD@\r
+ 0000:31AB idle  N_PSUB@\r
+ 0000:31AE idle  F_PSUB@\r
+ 0000:31AE idle  PSUB@\r
+ 0000:31DC       N_PSBP@\r
+ 0000:31DF idle  PSBP@\r
+ 0000:31DF idle  F_PSBP@\r
+ 0000:3204       __IOERROR\r
+ 0000:323D       __DOSERROR\r
+ 0000:324F       _isatty\r
+ 0000:3260       __LONGTOA\r
+ 0000:32E2       __UTOA\r
+ 0000:3302       _lseek\r
+ 0000:332B       __MKNAME\r
+ 0000:3384 idle  __TMPNAM\r
+ 0000:33DB       N_PCMP@\r
+ 0000:33FC       __read\r
+ 0000:342B       __setupio\r
+ 0000:34DD       _tolower\r
+ 0000:3509       _unlink\r
+ 0000:3539       __VPRINTER\r
+ 0000:39FC       __VPTR\r
+ 0000:3A21       __VRAM\r
+ 0000:3A9B       __stpcpy\r
+ 0000:3ACB       _coreleft\r
+ 0000:3ACF       __CPUTN\r
+ 0000:3C01 idle  _cprintf\r
+ 0000:3C58       __VideoInt\r
+ 0000:3CE3 idle  __c0crtinit\r
+ 0000:3D00 idle  __crtinit\r
+ 0000:3DE1 idle  ___first\r
+ 0000:3DE3 idle  ___last\r
+ 0000:3DE5 idle  ___rover\r
+ 0000:3F21       _free\r
+ 0000:3F21       _farfree\r
+ 0000:402B       _malloc\r
+ 0000:4035       _farmalloc\r
+ 0000:418F idle  _realloc\r
+ 0000:4196 idle  _farrealloc\r
+ 0000:4282       __brk\r
+ 0000:42C1       __sbrk\r
+ 0000:434C       _farcoreleft\r
+ 0000:439C       _getch\r
+ 0000:43B5 idle  __Ngetche\r
+ 0000:43B5 idle  _getche\r
+ 0000:43D2 idle  __Nungetch\r
+ 0000:43D2 idle  _ungetch\r
+ 0000:43F0       _gettext\r
+ 0000:4446       _puttext\r
+ 0000:449C       _ioctl\r
+ 0000:44C5       _kbhit\r
+ 0000:44D7       _movetext\r
+ 0000:4574       _putch\r
+ 0000:458B       __REALCVT\r
+ 0000:46C5       __SCREENIO\r
+ 0000:4701       __VALIDATEXY\r
+ 0000:4778       __SCROLL\r
+ 0000:4A03       _setblock\r
+ 0000:4A73       __wherexy\r
+ 0000:4A7D idle  _wherex\r
+ 0000:4A8C idle  _wherey\r
+ 0000:4A9F       __chmod\r
+ 0000:4ABC       _close\r
+ 0000:4AE2       __close\r
+ 0000:4B00       _fclose\r
+ 0000:4BB0       _fflush\r
+ 0000:4C76       _filelength\r
+ 0000:4CB7       _flushall\r
+ 0000:4DAD idle  __OPENFP\r
+ 0000:4E76 idle  __GETFP\r
+ 0000:4EC0       _fopen\r
+ 0000:4EF5       _fprintf\r
+ 0000:4F93       _fseek\r
+ 0000:500F       _ftell\r
+ 0000:50E9       _getenv\r
+ 0000:5159 idle  _itoa\r
+ 0000:5184       _ultoa\r
+ 0000:51A1 idle  _ltoa\r
+ 0000:51C9       _memcpy\r
+ 0000:51ED       _movedata\r
+ 0000:523C       _open\r
+ 0000:539C       __open\r
+ 0000:53EB       _printf\r
+ 0000:5406 idle  __fputc\r
+ 0000:5420 idle  _fputc\r
+ 0000:55A9 idle  _fputchar\r
+ 0000:55BC       __FPUTN\r
+ 0000:57AA       ___read\r
+ 0000:5875       _read\r
+ 0000:5878       _setvbuf\r
+ 0000:59C7       _sprintf\r
+ 0000:59E9 idle  _vsprintf\r
+ 0000:5A0A       _strcat\r
+ 0000:5A49       _strdup\r
+ 0000:5A89       _strlen\r
+ 0000:5AA8       ___write\r
+ 0000:5BF1       __write\r
+ 0000:5C2D       _write\r
+ 0000:5C30       __xfclose\r
+ 0000:5C6B       __xfflush\r
+ 05CB:0000 idle  DATASEG@\r
+ 05CB:005B idle  __Int0Vector\r
+ 05CB:005F idle  __Int4Vector\r
+ 05CB:0063 idle  __Int5Vector\r
+ 05CB:0067 idle  __Int6Vector\r
+ 05CB:006B       __C0argc\r
+ 05CB:006D       __C0argv\r
+ 05CB:0071       __C0environ\r
+ 05CB:0075       __envLng\r
+ 05CB:0077       __envseg\r
+ 05CB:0079       __envSize\r
+ 05CB:007B       __psp\r
+ 05CB:007D idle  __osversion\r
+ 05CB:007D       __osmajor\r
+ 05CB:007D idle  __version\r
+ 05CB:007E idle  __osminor\r
+ 05CB:007F       _errno\r
+ 05CB:0081       __StartTime\r
+ 05CB:0085 idle  ___brklvl\r
+ 05CB:0087       __heapbase\r
+ 05CB:008B       __brklvl\r
+ 05CB:008F       __heaptop\r
+ 05CB:0094 idle  __kitten_catalog\r
+ 05CB:0CB8       __atexitcnt\r
+ 05CB:0CBA       __ctype\r
+ 05CB:0DBC       __exitbuf\r
+ 05CB:0DBE       __exitfopen\r
+ 05CB:0DC0 idle  __exitopen\r
+ 05CB:0DC2       __streams\r
+ 05CB:0F52       __nfile\r
+ 05CB:0F54       __openfd\r
+ 05CB:0F7C       __fmode\r
+ 05CB:0F7E       __notUmask\r
+ 05CB:0F80       __doserrno\r
+ 05CB:0F82 idle  __dosErrorToSV\r
+ 05CB:0FE6       __stklen\r
+ 05CB:1050       __wscroll\r
+ 05CB:1052       __video\r
+ 05CB:1061       _directvideo\r
+ 05CB:109E       __cFlag\r
+ 05CB:109F       __cChar\r
+ 05CB:10A0       __argc\r
+ 05CB:10A2       __argv\r
+ 05CB:10B0       _environ\r
+ 05CB:10BA       __RealCvtVector\r
+ 05CB:10BC idle  __ScanTodVector\r
+ 05CB:10DE idle  _heaphandle\r
+ 05CB:10E0 idle  _finishcachebox\r
+ 05CB:10E2 idle  _updatecachebox\r
+ 05CB:10E4 idle  _drawcachebox\r
+ 05CB:10E6       _debughandle\r
+ 05CB:10E8 idle  _profilehandle\r
+ 05CB:10EA idle  _XMSaddr\r
+ 05CB:10EC idle  _aftersort\r
+ 05CB:10EE idle  _beforesort\r
+ 05CB:10F0       __atexittbl\r
+\r
+Program entry point at 0000:0000\r
+\r
diff --git a/HEAP.16 b/HEAP.16
index 13e04944844c0eaed22586a6bc742c05c4d7c007..a55c85ea492bc3d7dd08db17f5728b1ce06d4f9c 100644 (file)
--- a/HEAP.16
+++ b/HEAP.16
@@ -1,11 +1,11 @@
 \r
        == default ==\r
 \r
-  USED block at 1d260016 of size 136\r
-  USED block at 1d26009e of size 66\r
-  FREE block at 1d2600e0 of size 7966\r
-  USED block at 1d261ffe of size 20\r
-  FREE block at 1d262012 of size 8170\r
+  USED block at 1d2a0016 of size 136\r
+  USED block at 1d2a009e of size 66\r
+  FREE block at 1d2a00e0 of size 18\r
+  USED block at 1d2a00f2 of size 20\r
+  FREE block at 1d2a0106 of size 7926\r
 OK - end of heap\r
 \r
        == near ==\r
@@ -32,9 +32,9 @@ OK - end of heap
 \r
 Memory Type         Total      Used       Free\r
 ----------------  --------   --------   --------\r
-Default                   16358        222     16136\r
+Default                   8166 222     7944\r
 Near              31318        862     30456\r
-Far               16358        222     16136\r
+Far               8166 222     7944\r
 ----------------  --------   --------   --------\r
 coreleft = 30454\r
 farcoreleft = 38202\r
diff --git a/KITTEN.BCO b/KITTEN.BCO
new file mode 100644 (file)
index 0000000..0332008
Binary files /dev/null and b/KITTEN.BCO differ
diff --git a/awoo.sh b/awoo.sh
index 0751007bbba10ccd85b5e841084d4cf5dfe36ca9..0d6a1dc3b4c91c4efed21ecdd0248ffe1d122b6e 100644 (file)
--- 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 (file)
index 0000000..de53fdb
Binary files /dev/null and b/exmmbc.exe differ
similarity index 64%
rename from 16/exmmtest/EXMMTEST.PRJ
rename to exmmbc.prj
index b2402dc435a9fd89ba1090b127fadf4626fd4894..7849060c05cb4d24e66d2c566dd51ae3fd3fff54 100644 (file)
Binary files a/16/exmmtest/EXMMTEST.PRJ and b/exmmbc.prj differ
index 7a075278453e128714e80de0895ccf7765cda3b6..9499bf14f0af2f27ebdbc9411c3e04577c92f40c 100644 (file)
Binary files a/exmmtest.exe and b/exmmtest.exe differ
index f470820e5d6449a4b61bc491552dc740ad47e580..a8d1ec1ea0fcecd21f560ddd6ef44fde3b67ad5e 100644 (file)
--- a/makefile
+++ b/makefile
@@ -14,7 +14,7 @@ TARGET_OS = dos
 #-zk0 = kanji support~
 #-zkl = current codepage
 
-EXMMTESTDIR=16$(DIRSEP)exmmtest$(DIRSEP)
+#EXMMTESTDIR=16$(DIRSEP)exmmtest$(DIRSEP)
 SRC=src$(DIRSEP)
 SRCLIB=$(SRC)lib$(DIRSEP)
 JSMNLIB=$(SRCLIB)jsmn$(DIRSEP)
@@ -297,16 +297,17 @@ clean: .symbolic
        @wlib -n  doslib.lib
        @$(REMOVECOMMAND) *.16
        @$(REMOVECOMMAND) *.OBJ
+       @$(REMOVECOMMAND) *.BCO
        @$(REMOVECOMMAND) makefi~1
        @$(REMOVECOMMAND) makefile~
        @$(REMOVECOMMAND) __WCL__.LNK
 #      @$(REMOVECOMMAND) *.smp
        @$(REMOVECOMMAND) *.SMP
        @$(REMOVECOMMAND) *.hed
-       @$(COPYCOMMAND) $(SRC)exmmtest.c $(EXMMTESTDIR)$(SRC)
-       @$(COPYCOMMAND) $(SRCLIB)16_mm.* $(EXMMTESTDIR)$(SRCLIB)
-       @$(COPYCOMMAND) $(SRCLIB)16_head.* $(EXMMTESTDIR)$(SRCLIB)
-       @$(COPYCOMMAND) $(SRCLIB)16_ca.* $(EXMMTESTDIR)$(SRCLIB)
-       @$(COPYCOMMAND) $(SRCLIB)16_hc.* $(EXMMTESTDIR)$(SRCLIB)
-       @$(COPYCOMMAND) $(SRCLIB)types.h $(EXMMTESTDIR)$(SRCLIB)
-       @$(COPYCOMMAND) $(NYANLIB)* $(EXMMTESTDIR)$(NYANLIB)
+#      @$(COPYCOMMAND) $(SRC)exmmtest.c $(EXMMTESTDIR)$(SRC)
+#      @$(COPYCOMMAND) $(SRCLIB)16_mm.* $(EXMMTESTDIR)$(SRCLIB)
+#      @$(COPYCOMMAND) $(SRCLIB)16_head.* $(EXMMTESTDIR)$(SRCLIB)
+#      @$(COPYCOMMAND) $(SRCLIB)16_ca.* $(EXMMTESTDIR)$(SRCLIB)
+#      @$(COPYCOMMAND) $(SRCLIB)16_hc.* $(EXMMTESTDIR)$(SRCLIB)
+#      @$(COPYCOMMAND) $(SRCLIB)types.h $(EXMMTESTDIR)$(SRCLIB)
+#      @$(COPYCOMMAND) $(NYANLIB)* $(EXMMTESTDIR)$(NYANLIB)
index 005244479b016aae5116a522307bc135253213d2..d72b334d89b1f76832e0eafa0f3d2ed57c444833 100644 (file)
 */
 
 #include "src/lib/16_hc.h"
-#pragma hdrstop
-
-#pragma warn -pro
-#pragma warn -use
 
 int heaphandle;
 
index e6e590b425a787167dc33155ae5f1e8bb3fb794a..39f16ae8662149c37856272310890e773a409147 100644 (file)
@@ -154,8 +154,12 @@ extern     int                     profilehandle,debughandle;      //make it into game global
 #define __DEBUG__\r
 \r
 #define        nil     ((void *)0)\r
-\r
+#ifdef __BORLANDC__\r
+#define _FCORELEFT 0x90000UL-16UL\r
+#endif\r
 #ifdef __WATCOMC__\r
+#define _FCORELEFT 0x90000UL+16UL\r
+\r
 #define peekb(segm,ofs) (*(byte far*)MK_FP((segm),(ofs)))\r
 #define peekw(segm,ofs) (*(word far*)MK_FP((segm),(ofs)))\r
 #define pokeb(segm,ofs,value) (peekb((segm),(ofs)) = (byte)(value))\r
index d3ed8c23d77f9e646d7a426b022789c30dc81027..fda606f270e6599df05fceed762bf0544d95cf2d 100644 (file)
@@ -764,13 +764,15 @@ void MM_Startup(mminfo_t *mm, mminfotype *mmi)
 // get all available far conventional memory segments
 //
 //     printf("                farheap making!\n");
+       printf("_FARCORELEFT                            %lu\n", _FCORELEFT);
 #ifdef __WATCOMC__
        _fheapgrow();
-       length=(dword)GetFarFreeSize();//0xffffUL*4UL;
 #endif
 #ifdef __BORLANDC__
-       length=farcoreleft();
+       printf("                                %lu\n", farcoreleft());
+       printf("                                %d\n", (sword)((farcoreleft()+32)-_FCORELEFT));
 #endif
+       length=_FCORELEFT;//_fcoreleft();//(dword)GetFarFreeSize();//0xffffUL*4UL;
        start = mm->farheap = _fmalloc(length);
        //start = mm->farheap = halloc(length, 1);
        length -= 16-(FP_OFF(start)&15);
index 4e501decfbe15d9ef9e5725d830f177f277e94fd..2e6e87ba415c4fc4a2bc2a8ab21801f77a10e75b 100644 (file)
@@ -149,7 +149,7 @@ void dos_close(int file)
 /* Functions */\r
 \r
 char *\r
-pascal kittengets(int set_number, int message_number, char *message)\r
+__pascal kittengets(int set_number, int message_number, char *message)\r
 {\r
   /* get message from a message _kitten_catalog */\r
 \r
index 2cec22fec3c7333386d0498db5beefb9906a6bb9..990eca5bc7e238d6a95f0222f051fb86c63d7a06 100644 (file)
@@ -24,6 +24,8 @@
 #ifndef _CATGETS_H\r
 #define _CATGETS_H\r
 \r
+#include <string.h>\r
+\r
 #ifdef NOCATS\r
 \r
 /* #define NOCATS to disable that stuff completely */\r
@@ -58,7 +60,7 @@ extern "C" {
 #define catclose(catalog)  kittenclose()\r
 \r
 \r
-  char *  pascal kittengets( int set_number, int message_number,char *message);\r
+  char *  __pascal kittengets( int set_number, int message_number,char *message);\r
   nl_catd kittenopen(char *name);\r
   void    kittenclose (void);\r
 \r